Jump to content

Script hulp, testing en andere.


Recommended Posts

Geplaatst:

Ik ben zo ongeveer iets meer dan de helft klaar maar blijf eigenlijk vastzitten bij dit probleem.

Ik spawn een actor met model #NULL, pedtype dealer of 17 dus. Dan check ik of het model een dealer is indien niet verwijder ik de references en begin ik weer opnieuw. Ik weet niet echt hoe ik dit moet uitleggen, ik zou gewoon een manier moeten vinden zodat er dealers op straat rondlopen, dus allevier modellen, #BIKDRUG, #BMYDRUG, #HMYDRUG en #WMYDRUG.

Hopelijk begrijpt er iemand wat ik bedoel en kan die me uitleggen wat ik fout doe of hoe het wel moet,

ik heb al geprobeert om Rockstars code na te bootsen maar daar staat zoveel overbodige code in volgens mij dat ik er niet uit wijs raak.

Hier dan mijn cleo, ik gebruik een stripped scm.

// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
03A4: name_thread 'DEALER' 

:DEALER_11
00A0: store_actor $PLAYER_ACTOR position_to 3@ 4@ 5@
08F1: get_zone_at 3@ 4@ 5@ nameB_to s$9451 // 8-byte string
076A: set_zone s$9451 dealer_density_to 10 
009A: $411 = create_actor_pedtype 17 model #NULL at 0.0 0.0 0.0
05DE: AS_actor $411 walk_around_ped_path  

:DEALER_43
04ED: load_animation "DEALER" 
0001: wait 0 ms 
00D6: if 
84EE:   not animation "DEALER" loaded 
004D: jump_if_false @DEALER_85 
0002: jump @DEALER_43 

:DEALER_85
00A0: store_actor $PLAYER_ACTOR position_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 
091C: get_actor_in_sphere $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 radius 20.0 model #BMYDRUG external_script_named "DEALER" handle_as $411 
0001: wait 0 ms 
00D6: if 
02F2:   actor 2@ model == #BMYDRUG 
004D: jump_if_false @DEALER_157 
0002: jump @DEALER_333 

:DEALER_157
091C: get_actor_in_sphere $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 radius 20.0 model #WMYDRUG external_script_named "DEALER" handle_as $411 
0001: wait 0 ms 
00D6: if 
02F2:   actor 2@ model == #WMYDRUG 
004D: jump_if_false @DEALER_215 
0002: jump @DEALER_333 

:DEALER_215
091C: get_actor_in_sphere $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 radius 20.0 model #HMYDRUG external_script_named "DEALER" handle_as $411 
0001: wait 0 ms 
00D6: if 
02F2:   actor $411 model == #HMYDRUG 
004D: jump_if_false @DEALER_273 
0002: jump @DEALER_333 

:DEALER_273
091C: get_actor_in_sphere $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 radius 20.0 model #BIKDRUG external_script_named "DEALER" handle_as $411 
0001: wait 0 ms 
00D6: if 
02F2:   actor $411 model == #BIKDRUG 
004D: jump_if_false @DEALER_290 
0002: jump @DEALER_333

:DEALER_290
01C2: remove_references_to_actor $411 // Like turning an actor into a random pedestrian 
jump @DEALER_11

:DEALER_333
03FE: set_actor $411 money 10000 
0605: actor $411 perform_animation_sequence "DEALER_IDLE" IFP_file "DEALER" 4.0 loop 1 0 0 0 time -1 // versionA 

:DEALER_382
0001: wait 0 ms 
00D6: if 
00F3:   actor $PLAYER_ACTOR near_actor $411 radius 2.0 2.0 0 on_foot 
004D: jump_if_false @DEALER_382 
074D: AS_actor $411 turns_to_and_look_at_actor $PLAYER_ACTOR timelimit -1 
0001: wait 300 ms 
0001: wait 400 ms 
00BC: show_text_highpriority GXT 'DEAL1' time 2000 flag 1  // You want some weed?
0967: actor $411 move_mouth 2000 ms 
03E5: show_text_box 'TALK_1'  // To reply negatively press ~k~~CONVERSATION_NO~~n~To reply positively press ~k~~CONVERSATION_YES~

:DEALER_472
0001: wait 0 ms 
00D6: if 
00E1:   player 0 pressed_key 10 
004D: jump_if_false @DEALER_500 
0002: jump @DEALER_549 

:DEALER_500
0001: wait 0 ms 
00D6: if 
00E1:   player 0 pressed_key 11 
004D: jump_if_false @DEALER_528 
0002: jump @DEALER_815 

:DEALER_528
0050: gosub @DEALER_815 
0050: gosub @DEALER_884 
0002: jump @DEALER_472 

:DEALER_549
03E6: remove_text_box 
0001: wait 500 ms 
0050: gosub @DEALER_815 
0050: gosub @DEALER_884 
00BC: show_text_highpriority GXT 'DEAL3' time 2500 flag 1  // Fuck off man, lose your shit somewhere else!
0967: actor $PLAYER_ACTOR move_mouth 2500 ms 
0812: AS_actor $PLAYER_ACTOR perform_animation "FUCKU" IFP_file "PED" 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time -1 // versionB 
0001: wait 1000 ms 
0050: gosub @DEALER_815 
0050: gosub @DEALER_884 
0001: wait 1500 ms 
0050: gosub @DEALER_815 
0050: gosub @DEALER_884 
0968: actor $PLAYER_ACTOR stop_mouth 
0001: wait 300 ms 
0050: gosub @DEALER_815 
0050: gosub @DEALER_884 
054C: use_GXT_table 'TRU2' 
00BC: show_text_highpriority GXT 'TRU2_FF' time 2700 flag 1  // ~z~Damn dude! You don't know what you're missing
0967: actor $411 move_mouth 2700 ms 
0812: AS_actor $411 perform_animation "IDLE_CHAT" IFP_file "PED" 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 1000 // versionB 
0001: wait 1000 ms 
0050: gosub @DEALER_815 
0050: gosub @DEALER_884 
0001: wait 1700 ms 
0050: gosub @DEALER_815 
0050: gosub @DEALER_884 
0968: actor $411 stop_mouth 
0001: wait 300 ms 
0002: jump @DEALER_1055 

:DEALER_815
0001: wait 0 ms 
00D6: if or
80F2:   not actor $PLAYER_ACTOR near_actor $411 radius 4.0 4.0 0 
0118:   actor $411 dead 
0118:   actor $PLAYER_ACTOR dead 
844B:   not actor $PLAYER_ACTOR on_foot 
004D: jump_if_false @DEALER_872 
0002: jump @DEALER_1055 

:DEALER_872
074D: AS_actor $411 turns_to_and_look_at_actor $PLAYER_ACTOR timelimit -1 
0051: return 

:DEALER_884
0001: wait 0 ms 
00D6: if or
8457:   not player $PLAYER_CHAR aiming_at_actor $411 
851A:   not actor $411 damaged_by_actor $PLAYER_ACTOR 
004D: jump_if_false @DEALER_927 
074D: AS_actor $411 turns_to_and_look_at_actor $PLAYER_ACTOR timelimit -1 
0051: return 

:DEALER_927
0687: clear_actor $411 task 
07A5: AS_actor $411 attack_actor $PLAYER_ACTOR -1 ms 
03E6: remove_text_box 
03D5: remove_text 'TRU2_FF'  // ~z~Damn dude! You don't know what you're missing
03D5: remove_text 'DEAL1'  // You want some weed?
03D5: remove_text 'DEAL3'  // Fuck off man, lose your shit somewhere else!
0249: release_model #BMYDRUG 
04EF: release_animation "DEALER" 
04EF: release_animation "PED" 

:DEALER_998
0001: wait 0 ms 
00D6: if or
0118:   actor $PLAYER_ACTOR dead 
0118:   actor $411 dead 
80F2:   not actor $PLAYER_ACTOR near_actor $411 radius 30.0 30.0 0 
004D: jump_if_false @DEALER_998 
01C2: remove_references_to_actor $411 // Like turning an actor into a random pedestrian 
0002: jump @DEALER_1121 

:DEALER_1055
0687: clear_actor $411 task 
03E6: remove_text_box 
03D5: remove_text 'TRU2_FF'  // ~z~Damn dude! You don't know what you're missing
03D5: remove_text 'DEAL1'  // You want some weed?
03D5: remove_text 'DEAL3'  // Fuck off man, lose your shit somewhere else!
0249: release_model #BMYDRUG 
04EF: release_animation "DEALER" 
04EF: release_animation "PED" 
01C2: remove_references_to_actor $411 // Like turning an actor into a random pedestrian 

:DEALER_1121
0A93: end_custom_thread 

:sigaar: Tom

Geplaatst:

Een hele belangrijke opmerking vooraf, je mag in een CLEO script geen gebruik maken van globale ($xx) variabelen, maar moet lokale variabelen gebruiken.

Ik heb geen idee waarom je in het begin deze opcode hebt staan:

009A: $411 = create_actor_pedtype 17 model #NULL at 0.0 0.0 0.0

Je spawn hiermee een actor met de skin van CJ (#null) ergens in Blueberry Acres.

R* gebruikt dit soort dingen om aan te geven dat de betreffende variabele een actor is, maar de code zelf wordt nooit uitgevoerd, er wordt altijd met een jump overheen gesprongen. Maar dit soort dingen hoef je zelf niet te doen, want ze zijn niet noodzakelijk.

Opcode 091c is niet de correcte opcode, deze wordt gebruikt om een ped in de buurt van een object van een bepaald model te zoeken.

In dit geval heb je opcode 08E5 nodig, je krijgt dan een willekeurige ped binnen de opgegeven straal. Je moet de variabele die je bij die opcode gebruikt, vooraf op -1 zetten, en als de opcode een ped vind van het model dat je opgeeft binnen de straal die je meegeeft, dan zet hij de handle van die ped in de variabele.

Achteraf moet je dus kijken of de variabele nog steeds de oude waarde (-1) heeft of niet. In dat laatste geval heeft hij dus een ped gevonden.

Dan kun je checken of het om een dealer gaat ( pedtype == 17 ), zoniet, dan moet je dus verder zoeken.

Je zou dus het zoeken naar een dealer in de buurt van de player op deze manier kunnen maken:

3@ = -1
repeat 
wait 100 ms
if player.defined($PLAYER_CHAR)
then
	00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
	08E5: get_actor_in_sphere 0@ 1@ 2@ radius 20.0 handle_as 3@ 
	if not 3@ == -1
	then
		// Een ped gevonden
		089F: get_actor 3@ pedtype_to 4@
		if not 4@ == 17
		then
		   // Geen dealer: vrijgeven en 3@ weer op -1 zetten
		   01C2: remove_references_to_actor 3@ 
		   3@ = -1 
		end
	end
end
until not 3@ == -1 

// Hieronder kun je 3@ als dealer-actor gebruiken 
:DEALER_333

Ongetest, maar het gaat om het idee.

Verder heb ik de code nog niet doorgenomen, maar ik hoop dat je er zo weer verder mee komt.

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...