Czy wiesz, że... na forum możesz uzyskać pomoc nt. modowania GTA?
Strona główna forum Szukaj Rejestracja
Witaj, nieznajomy!
Poprzedni 1 Następny
Postów: 294 Dołączył: 2011-07-27
#
Witam, mam takie pytanie, mianowicie napisałem skrypt który ustawia natężenie ruchu w zależności od godziny:

Kod:
//-------------MAIN---------------
0000: NOP 

:NONAME_2
wait 0 
00BF: 1@ = current_time_hours, 2@ = current_time_minutes 
if and
  1@ >= 0 
   not 1@ >= 2 
else_jump @NONAME_53 
01EB: set_traffic_density_multiplier_to 1.6 
03DE: set_pedestrians_density_multiplier_to 1.4 

:NONAME_53
00BF: 1@ = current_time_hours, 2@ = current_time_minutes 
if and
  1@ >= 2 
   not 1@ >= 4 
else_jump @NONAME_100 
01EB: set_traffic_density_multiplier_to 0.3 
03DE: set_pedestrians_density_multiplier_to 0.1 

:NONAME_100
00BF: 1@ = current_time_hours, 2@ = current_time_minutes 
if and
  1@ >= 4 
   not 1@ >= 6 
else_jump @NONAME_147 
01EB: set_traffic_density_multiplier_to 0.9 
03DE: set_pedestrians_density_multiplier_to 0.1 

:NONAME_147
00BF: 1@ = current_time_hours, 2@ = current_time_minutes 
if and
  1@ >= 6 
   not 1@ >= 12 
else_jump @NONAME_194 
01EB: set_traffic_density_multiplier_to 9.9 
03DE: set_pedestrians_density_multiplier_to 9.9 

:NONAME_194
00BF: 1@ = current_time_hours, 2@ = current_time_minutes 
if and
  1@ >= 12 
   not 1@ >= 18 
else_jump @NONAME_241 
01EB: set_traffic_density_multiplier_to 5.8 
03DE: set_pedestrians_density_multiplier_to 5.8 

:NONAME_241
00BF: 1@ = current_time_hours, 2@ = current_time_minutes 
if and
  1@ >= 18 
   not 1@ >= 21 
else_jump @NONAME_288 
01EB: set_traffic_density_multiplier_to 9.9 
03DE: set_pedestrians_density_multiplier_to 9.9 

:NONAME_288
00BF: 1@ = current_time_hours, 2@ = current_time_minutes 
if and
  1@ >= 21 
   not 1@ >= 23 
else_jump @NONAME_2 
01EB: set_traffic_density_multiplier_to 3.6 
03DE: set_pedestrians_density_multiplier_to 3.6 
jump @NONAME_2 


I wszystko ładnie działa, tylko mam problem gdy wejdę do jakiegoś interioru w którym są ludzie (np. komisariaty policji), bo wtedy bardzo dużo ludzi robi się w środku i po kilku sekundach gra się wyłącza. I tu moje pytanie jak poprawić ten skrypt żeby był nieaktywny kiedy gracz jest w interiorze, a po wyjściu z interioru znów był aktywny?
Postów: 304 Dołączył: 2010-10-02
#
Kod:

077E: get_active_interior_to $ACTIVE_INTERIOR
:petla
wait 
0
if
$ACTIVE_INTERIOR = 0
jf 
@petla
jump 
@NONAME_2

Ja bym proponował sprawdzić coś takiego.
Postów: 294 Dołączył: 2011-07-27
#
Dziwne, dałem to na początek skryptu i owszem w interiorze nie było już problemu, ale dalsza część skryptu przestała działać, tzn. ruch był cały czas taki sam :(
Postów: 304 Dołączył: 2010-10-02
#
Jutro przetestuje i zobaczę czy uda mi się naprawić.
Edit:
Spróbuj dodać coś takiego na początku:
Kod:
:NONAME
077E: get_active_interior_to $ACTIVE_INTERIOR
jump 
@petla

:petla
wait 
0
if
$ACTIVE_INTERIOR = 0
else_jump 
@petla
jump 
@NONAME_2
Postów: 294 Dołączył: 2011-07-27
#
Dalej to samo, zastanawiam się czy nie trzeba dać jeszcze warunku że interior jest nieaktywny do pozostałych pętli
Postów: 628 Dołączył: 2009-01-22
#
Pokaż cały aktualny skrypt. To jest bardzo proste do zrobienia, więc gdzieś pewnie się po prostu pomyliłeś.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Też wydawało mi się to proste do zrobienia, a mam z tym sporo problemów. Cały skrypt wygląda następująco:

Kod:
//-------------MAIN---------------
0000: NOP 

:NONAME_2
wait 0 
077E: get_active_interior_to $ACTIVE_INTERIOR 
if 
$ACTIVE_INTERIOR = 0 
else_jump @NONAME_2 
jump @NONAME_36 

:NONAME_36
wait 0 
00BF: 3@ = current_time_hours, 4@ = current_time_minutes 
if and
  3@ >= 0 
   not 3@ >= 2 
else_jump @NONAME_87 
01EB: set_traffic_density_multiplier_to 1.6 
03DE: set_pedestrians_density_multiplier_to 1.4 

:NONAME_87
00BF: 3@ = current_time_hours, 4@ = current_time_minutes 
if and
  3@ >= 2 
   not 3@ >= 4 
else_jump @NONAME_134 
01EB: set_traffic_density_multiplier_to 0.3 
03DE: set_pedestrians_density_multiplier_to 0.1 

:NONAME_134
00BF: 3@ = current_time_hours, 4@ = current_time_minutes 
if and
  3@ >= 4 
   not 3@ >= 6 
else_jump @NONAME_181 
01EB: set_traffic_density_multiplier_to 0.9 
03DE: set_pedestrians_density_multiplier_to 0.1 

:NONAME_181
00BF: 3@ = current_time_hours, 4@ = current_time_minutes 
if and
  3@ >= 6 
   not 3@ >= 12 
else_jump @NONAME_228 
01EB: set_traffic_density_multiplier_to 9.9 
03DE: set_pedestrians_density_multiplier_to 9.9 

:NONAME_228
00BF: 3@ = current_time_hours, 4@ = current_time_minutes 
if and
  3@ >= 12 
   not 3@ >= 18 
else_jump @NONAME_275 
01EB: set_traffic_density_multiplier_to 5.8 
03DE: set_pedestrians_density_multiplier_to 5.8 

:NONAME_275
00BF: 3@ = current_time_hours, 4@ = current_time_minutes 
if and
  3@ >= 18 
   not 3@ >= 21 
else_jump @NONAME_322 
01EB: set_traffic_density_multiplier_to 9.9 
03DE: set_pedestrians_density_multiplier_to 9.9 

:NONAME_322
00BF: 3@ = current_time_hours, 4@ = current_time_minutes 
if and
  3@ >= 21 
   not 3@ >= 23 
else_jump @NONAME_2 
01EB: set_traffic_density_multiplier_to 3.6 
03DE: set_pedestrians_density_multiplier_to 3.6 
jump @NONAME_2 
Postów: 628 Dołączył: 2009-01-22
#
No, błąd rzeczywiście trywialny : )

Kod:
if 
$ACTIVE_INTERIOR = 0 
else_jump 
@NONAME_2


O ile w ORYGINALNEJ składni SCM porównywanie przez = było poprawne, Sanny wymaga == (tak jak ma to większość języków programowania).

Poprawiłem lekko ten skrypt usuwając zmienną globalną, optymalizując i przepisując na konstrukcje wysokiego poziomu:

Kod:
{$CLEO}
0000: TRAFFIC

while 
true
    0001: wait 2000 ms  // Nie ma najmniejszego sensu wykonywać taki skrypt częściej

    077E: get_active_interior_to 0@
    if
        
0@ == 0
    then
        
00BF: 3@ = current_time_hours, 4@ = current_time_minutes
        if 
and
            3@ >= 0
            2 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 1.6
            03DE: set_pedestrians_density_multiplier_to 1.4
        end
        
if and
            
3@ >= 2
            4 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 0.3
            03DE: set_pedestrians_density_multiplier_to 0.1
        end
        
if and
            
3@ >= 4
            6 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 0.9
            03DE: set_pedestrians_density_multiplier_to 0.1
        end
        
if and
            
3@ >= 6
            12 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 9.9
            03DE: set_pedestrians_density_multiplier_to 9.9
        end
        
if and
            
3@ >= 12
            18 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 5.8
            03DE: set_pedestrians_density_multiplier_to 5.8
        end
        
if and
            
3@ >= 18
            21 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 9.9
            03DE: set_pedestrians_density_multiplier_to 9.9
        end
        
if and
            
3@ >= 21
            23 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 3.6
            03DE: set_pedestrians_density_multiplier_to 3.6
        end
        
// Co z 23?

    end
end


Zastanawia mnie tylko, czemu dekompilujesz własne skrypty?

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Zaraz sprawdzę, a co do pytania na końcu to jak inaczej mam otwierać nawet własny skrypt? Zawsze daję dekompiluj
Postów: 628 Dołączył: 2009-01-22
#
Po prostu otwieraj plik .txt z kodem źródłowym. Jak sądzisz, jak inaczej dałoby się pisać skrypty które rozwalają się po ponownej dekompilacji (zmienne trzymające wskaźniki na nagłówki, surowe ciągi znaków, wstawki w Assemblerze)?

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
W sumie zawsze usuwałem ten plik z kodem źródłowym :-) A co do skryptu to dalej w interiorze robi się pełno ludzi i gra się wyłącza. Bez tego moda wszystko jest dobrze także na pewno on to powoduje
Postów: 628 Dołączył: 2009-01-22
#
To w takim razie trzeba przywrócić mnożniki na zwykłe poziomy jeśli gracz jest w interiorze:

Kod:
{$CLEO}
0000: TRAFFIC

while 
true
    0001: wait 2000 ms
    077E: get_active_interior_to 0@
    if
        
0@ == 0
    then
        
00BF: 3@ = current_time_hours, 4@ = current_time_minutes
        if 
and
            3@ >= 0
            2 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 1.6
            03DE: set_pedestrians_density_multiplier_to 1.4
        end
        
if and
            
3@ >= 2
            4 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 0.3
            03DE: set_pedestrians_density_multiplier_to 0.1
        end
        
if and
            
3@ >= 4
            6 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 0.9
            03DE: set_pedestrians_density_multiplier_to 0.1
        end
        
if and
            
3@ >= 6
            12 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 9.9
            03DE: set_pedestrians_density_multiplier_to 9.9
        end
        
if and
            
3@ >= 12
            18 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 5.8
            03DE: set_pedestrians_density_multiplier_to 5.8
        end
        
if and
            
3@ >= 18
            21 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 9.9
            03DE: set_pedestrians_density_multiplier_to 9.9
        end
        
if and
            
3@ >= 21
            23 > 3@
        then
            
01EB: set_traffic_density_multiplier_to 3.6
            03DE: set_pedestrians_density_multiplier_to 3.6
        end
    
else
        01EB: set_traffic_density_multiplier_to 1.0
        03DE: set_pedestrians_density_multiplier_to 1.0
    end       
end

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 294 Dołączył: 2011-07-27
#
Wielkie dzięki, w końcu działa. Mógłbyś powiedzieć skąd masz taką wiedzę na ten temat, bo w sumie patrząc na Twój ostatni post długo nie mogłem załapać co się zmieniło w porównaniu do poprzedniego ;-)
Postów: 628 Dołączył: 2009-01-22
#
Siedzę w tym aktywnie od 2008 roku i po prostu bawi mnie odkrywanie jak coś w SA działa (w momencie tego pisania też przedzieram się przez EXE, usiłując ogarnąć w jaki sposób gra ogarnia obiekty-atraktory (np. stoły w kasynie - pedy podchodzą do nich i wykonywany jest na nich skrypt z SCM)). To kwestia doświadczenia.

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Temat zamknięty.
Poprzedni 1 Następny
Created & Powered by MakG