Postów:
536
Dołączył:
2011-04-12
Napisano dnia: 2012-03-11 17:07:08
Chciałem złapać pojazd gracz i pokombinować coś z nim.
Dla przykładu wziąłem ze otwierają się prawe drzwi po wciśnięciu
J, ale nie działa.
Gra się uruchamia wszystko ok, tylko jak wciskam
J to nic się nie dzieje. Co jest źle?
Kod:
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
0000: NOP
:NONAME_2
wait 10
if
Player.Defined($PLAYER_actor)
jump @NONAME_2
:NONAME_22
wait 0
if
Actor.Driving($PLAYER_ACTOR)
jump @NONAME_22
$WOZ = Actor.Car($PLAYER_ACTOR)
:NONAME_42
wait 0
if
00E1: player 0 pressed_key 74
jump @NONAME_42
0657: car $WOZ open_componentA 3
0A93: end_custom_thread
___________________
Postów:
878
Dołączył:
2009-01-20
Napisano dnia: 2012-03-11 18:08:22
Opcode
00E1:
Kod:
00E1: player 0 pressed_key ID
jest dla klawiszy zdefiniowanych w grze. Jeżeli chcesz sprawdzić wciśnięcie dowolnego klawisza, musisz użyć opcodu
0AB0:
Kod:
Poza tym nie używaj zmiennych globalnych ($WOZ) w skryptach CLEO. Zamiast tego stosuj zmienne lokalne (0@, 1@, ... 31@). Ostatnie dostępne zmienne (32@ i 33@) to wewnętrzne timery, więcej o nich w tutorialach na stronie.
___________________
Administrator
Postów:
536
Dołączył:
2011-04-12
Napisano dnia: 2012-03-11 19:51:00
Dzięki.
Zmieniłem na zmienne lokalne i użyłem tego opcodu co podałeś, ale nadal po wciśnięciu nic się nie dzieje.
___________________
Postów:
878
Dołączył:
2009-01-20
Napisano dnia: 2012-03-11 21:12:29
W pierwszej pętli sprawdzasz, czy gracz jest zdefiniowany, a jako uchwyt do gracza podajesz zmienną aktora... Zmień "$PLAYER_actor" na "$PLAYER_CHAR".
Jeżeli chcesz, żeby funkcja otwierania drzwi była dostępna wielokrotnie, to na końcu skryptu musisz dać przeskok na początek.
___________________
Administrator
Postów:
628
Dołączył:
2009-01-22
Napisano dnia: 2012-03-12 13:32:46
Poza tym, klasa Actor.Car używa złego opcodu (klasy to zło). Użyj 03C0.
___________________
Moderator
Postów:
536
Dołączył:
2011-04-12
Napisano dnia: 2012-03-12 18:44:56
Dzięki za pomoc, ale nadal źle:) Co tu źle napisałem?
Kod:
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
0000: NOP
:NONAME_2
wait 10
if
Player.Defined($PLAYER_char)
jump @NONAME_2
:NONAME_22
wait 0
if
Actor.Driving($PLAYER_actor)
jump @NONAME_22
03C0: 1@ = actor $PLAYER_actor car
:NONAME_50
wait 0
if
0AB0: key_pressed 73
jump @NONAME_50
0657: car 1@ open_componentA 3
jump @NONAME_2
___________________
Postów:
878
Dołączył:
2009-01-20
Napisano dnia: 2012-03-12 20:38:20
W "key_pressed" zamiast 73 daj "0x73"
___________________
Administrator
Postów:
536
Dołączył:
2011-04-12
Napisano dnia: 2012-03-12 20:51:31
Fakt zapomniałem o ty, ale nadal po wciśnięciu F4 nie otwiera drzwi.
___________________
Postów:
1004
Dołączył:
2009-01-20
Napisano dnia: 2012-03-12 21:47:08
Spróbuj coś takiego
Kod:
{$CLEO .cs}
0000: NOP
:petla
wait 0
if
Player.Defined($PLAYER_CHAR)
jf @petla
:petla2
wait 0
if
Actor.Driving($PLAYER_ACTOR)
jf @petla2
:petla3
wait 0
if
0AB0: key_pressed 0x73
jf @petla3
03C0: 0@ = actor $PLAYER_ACTOR car
0657: car 0@ open_componentA 3
0A93: end_custom_thread
edit// można to też w ten sposób zapisać
Kod:
{$CLEO .cs}
0000: NOP
:petla
wait 0
if and
Player.Defined($PLAYER_CHAR)
Actor.Driving($PLAYER_ACTOR)
0AB0: key_pressed 0x73
jf @petla
03C0: 0@ = actor $PLAYER_ACTOR car
0657: car 0@ open_componentA 3
0A93: end_custom_thread
Postów:
536
Dołączył:
2011-04-12
Napisano dnia: 2012-03-14 16:43:48
Dzięki Subaru- działają oba, ale ten pierwszy mi się bardziej przyda. A dlaczego ten mój nie działał? Przecież jest taki sam tylko pętle inaczej nazwane.
___________________
Postów:
628
Dołączył:
2009-01-22
Napisano dnia: 2012-03-14 16:55:39
Dopiero teraz zauważyłem - miałeś jump zamiast else_jump.
___________________
Moderator