Czy wiesz, że... na forum możesz uzyskać pomoc nt. modowania GTA?
Strona główna forum Szukaj Rejestracja
Witaj, nieznajomy!
Postów: 878 Dołączył: 2009-01-20
#
Tutaj masz listę opcodów odczytujące niektóre parametry samochodów

Opcody związane z obrotem pojazdu są tutaj.

Opcodem 02E3 odczytasz prędkość pojazdu.

Jak będziesz potrzebował czegoś jeszcze, to wystarczy poszukać w naszej bazie.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
ToyotaSupra napisał(a):
Dlaczego tak jest?

Bo kod jest wykonywany po kolei.

Trzeba całą operację podzielić sobie na pomniejsze, a jeżeli korzystasz z instrukcji wait, to musisz się przerzucić na wbudowane timery. Operacje możesz sobie podzielić stosując tzw. flagi, czyli w tym przypadku zmienne, które sobie będziesz odpowiednio ustawiał. Np.

Kod:
0@ = 0 // flaga dla prędkości

while 
true
  wait 
0
  02E3: 1@ = car 3@ speed
  if
    
1@ > 15.0
  then
    
0@ = 1
  else
    
0@ = 0
  end

  
if
    0@ == 1
  then
    
// jakiś kod bez waitów

    32@ = 0 // resetowanie wbudowanego timera

  end

  
if
    0@ == 1
    32@ > 2000
  then
    
// dalszy kod po wykonaniu pierwszego i upłynięciu dwóch sekund

  end
end


Przeanalizuj sobie spokojnie kod, zrozum jaka jest tego idea i zastosuj to do swojego przypadku.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
Podobna modyfikacja powstała wcześniej do GTA San Andreas, autorem był Mordecki. Występował w niej identyczny problem. Miganie świateł opierało się na niszczeniu komponentów świateł i ponownej ich naprawie (jedynym skutecznym sposobem było naprawienie całego auta).

Podejrzewam, że autor Emergency Light System V3 do GTA IV wykorzystał ten pomysł w swojej modyfikacji. Niestety nie ma za bardzo możliwości naprawy tego "z zewnątrz". Autor moda musiałby sam wydać poprawkę.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
Nie, ponowne sprawdzenie będzie dopiero po wykonaniu jump @sprawdz.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
Ten kod jest w ogóle niepoprawny, bo nie zamknąłeś jednego warunku if. Jeżeli chcesz, aby skrypt cały czas sprawdzał prędkość, to sprawdzenie musisz umieścić w pętli i później wrócić do tej pętli. Odczytywanie wartości prędkości też musi być zapętlone.

Kod:
:sprawdz
  wait 
0
  02E3: 188@ = car 3@ speed

  if
    
188@ > 15.0
jf 
@sprawdz

// dalszy kod


jump 
@sprawdz

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
No to nic nie stoi na przeszkodzie, żebyś sobie porównał odczytaną wartość z inną:

Kod:
02E3: 188@ = car 3@ speed
if
  
188@ > 15.0
then
  
// samochód jedzie więcej niż 15 mph

else
  
// samochód jedzie mniej niż 15 mph

end

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
2. Nie jestem pewien, ale możesz spróbować z tym:
Kod:
0828: set_max_fire_generations 1

Jeżeli chodzi Ci ogólnie o ogień w grze, a nie tylko stworzony ręcznie w skrypcie.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
Sanny Builder ma wbudowany czytnik współrzędnych. Możesz go uruchomić wybierając
Kod:
Narzędzia/Narzędzia IDE/Menedżer Koordynatów

lub wciskając CTRL+ALT+1.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
Wystarczy sprawdzić. Powinien pasować.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
Marker (ikonę, znacznik) można usunąć przy pomocy opcodu 0164.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
Za pomocą skryptu nie można usuwać obiektów stworzonych w edytorze map.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
1. Tworzysz wybuch na miejscu obiektu i niszczysz obiekt opcodem, który podałeś.
2. Rozwalenie obiektu na części to już nie kwestia skryptu, tylko samego modelu.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
No bo tak żeś sobie ustawił. Jak nie chcesz, by wyświetlanie markera zależało od ścigania przez policję, to usuń drugi warunek.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
Mogłeś już sam poprawić tę literówkę :) Zaktualizowałem posta.

___________________
Administrator
Postów: 878 Dołączył: 2009-01-20
#
Spróbuj z tym:
Kod:
{$CLEO .cs}
:check
wait 
10
if
  
Player.Defined($PLAYER_CHAR)
jf 
@check


:hasArrived
  wait 
0
  if 
and
    00EC:   actor $PLAYER_ACTOR 1 near_point 2489.897 -1669.733 radius 30.0 30.0 
    Player.WantedLevel($PLAYER_CHAR) > 0
jf 
@hasArrived

018A: 1@ = create_marker_checkpoint_at 2489.897 -1669.733 13.33

32@ = 0
:wait
  wait 
0
  if
    
32@ >= 20000
jf 
@wait

0565: create_soundless_explosion_at 2489.897 -1669.733 13.33 type 11 

0A93: end_custom_thread


Gra wywalała, bo zapomniałem o if przy sprawdzaniu wartości timera.

___________________
Administrator
Created & Powered by MakG