Czy wiesz, że... rejestracja trwa tylko 20 sekund?
Strona główna forum Szukaj Rejestracja
Witaj, nieznajomy!
Postów: 294 Dołączył: 2011-07-27
#
To może jeszcze zapytam czy za pomocą CLEO można usunąć taki normalny marker z sekcji ENEX w IPL ? Po prostu chciałbym usunąć kilka markerów bez edycji oryginalnych plików gry.
Postów: 294 Dołączył: 2011-07-27
#
Wolałbym go usunąć w inny sposób, bo ten budynek występuje w kilku miejscach na mapie, a marker przeszkadza mi tylko w jednym miejscu. Najlepiej jakby dało się zrobić coś takiego w CLEO.
Postów: 294 Dołączył: 2011-07-27
#
Mam pytanie, w jaki sposób można by usunąć marker wejścia do domu aktywny podczas misji złodzieja? Przeszkadza mi on przy jednym budynku i chciałbym żeby w tym jednym miejscu nigdy się nie pojawiał. Czy zwykłe 0395 załatwiło by sprawę?
Postów: 294 Dołączył: 2011-07-27
#
OK, wielkie dzięki, bardzo mi pomogłeś. Myślę, że temat można zamknąć.
Postów: 294 Dołączył: 2011-07-27
#
Czyli tylko pierwszy wątek rozpoczyna się automatycznie, a każdy następny musi być rozpoczęty odpowiednim opcodem, i nie można sobie tak po prostu przeskoczyć do nowego wątku, bez takiego opcodu rozpoczynającego?
Postów: 294 Dołączył: 2011-07-27
#
Wychodzi na to, że wszystko działa jak powinno, choć jeszcze dokładnie tego nie sprawdziłem. Ale teraz mam jeszcze kilka pytań takich czysto teoretycznych :)

1. Co się dzieje kiedy skrypt dojdzie do TERMINATE_THIS_CUSTOM_SCRIPT ? Czy dany skrypt przestaje być aktywny jeżeli wcześniej nie było odesłania do kolejnego wątku, czy automatycznie rozpoczyna się nowy wątek znajdujący się dalej w kolejności (jeżeli taki istnieje)?
2. Czy wartości przypisane do zmiennych lokalnych w jednym wątku odpowiadają tym samym zmiennym w innym wątku, jeżeli znajdują się w jednym skrypcie?
3. Pytanie najbardziej mnie zastanawiające, na podstawie schematu przedstawionego przez Ciebie kilka postów wyżej: Jak to się dzieje, że najpierw sprawdzane jest gdzie ma przeskoczyć skrypt w zależności od wartości zmiennej 0@, a dopiero później określana jest ta wartość, a sam skrypt nie powraca już do tych wcześniejszych warunków?

Na dwa pierwsze sam mniej więcej znam odpowiedzi, ale chciałbym się upewnić. A co chodzi o trzecie to jakoś nie mogę tego zrozumieć...
Postów: 294 Dołączył: 2011-07-27
#
Silent napisał(a):
Jeśli miał on jedynie startować inne wątki i nie ma już nic więcej do roboty, zakończ go.

Tak, główny wątek ma za zadanie jedynie rozpoczynać kolejne wątki i tyle. Tylko pytanie czy mam go zakończyć przez TERMINATE_THIS_SCRIPT, czy przez TERMINATE_THIS_CUSTOM_SCRIPT ?

Silent napisał(a):
I, cholera, czemu ciągle rekompilujesz własny skrypt?

Jak już kiedyś pisałem, sam uczyłem się CLEO poprzez dekompilację różnych modów. I szczerze mówiąc nie do końca wiem jak się to pisze "normalnie". Tak się nauczyłem i tak teraz tworzę własne skrypty. A z resztą co to za różnica, skoro po kompilacji wychodzi na to samo.
Postów: 294 Dołączył: 2011-07-27
#
Jak dobrze zrozumiałem skrypt powinien wyglądać tak?

Kod:
 
03A4: name_thread 'MC'
IF 
0@ == 1 
ELSE_GOTO @MC_40 
GOTO 
@SWEETMC_13 

:MC_40
IF 
0@ == 2 
ELSE_GOTO @MC_65 
GOTO 
@NKENDLMC_21 

:MC_65
IF 
0@ == 3 
ELSE_GOTO @MC_1190 
GOTO 
@RYDERMC_13 

:MC_1190
0AF0: 31@ = get_int_from_ini_file "CLEOMC.INI" section "MC" key "SWEET" 
IF 
31@ == 1 
ELSE_GOTO  @MC_1253 
0A92: create_custom_thread "MC.CS" 1  

:MC_1253 
0AF0: 31@ = get_int_from_ini_file "CLEOMC.INI" section "MC" key "KENDL" 
IF 
31@ == 1 
ELSE_GOTO @MC_1317 
0A92: create_custom_thread "MC.CS" 2  

:MC_1317
0AF0: 31@ = get_int_from_ini_file "CLEOMC.INI" section "MC" key "RYDER" 
IF 
31@ == 1 
ELSE_GOTO @???????????????????????????? 
0A92: create_custom_thread "MC.CS" 3  
???????????????????????????????????????

03A4: name_thread 'SWEETMC' 

:SWEETMC_13
...


Tylko mam pytanie co powinienem wstawić w miejscu pytajników?
Postów: 294 Dołączył: 2011-07-27
#
To do którego z wątków skoczyć zależałoby od wartości ustawionych w pliku .ini
Póki co początek skryptu wygląda tak:
Kod:

03A4: name_thread 'MC'  
0AF0: 0@ = get_int_from_ini_file "CLEO/MC.INI" section "MC" key "SWEET" 
IF 
0@ == 1
ELSE_GOTO @MC_2 
004F: create_thread @SWEET_21

:MC_2
0AF0: 0@ = get_int_from_ini_file "CLEO/MC.INI" section "MC" key "KENDL" 
IF 
0@ == 1
ELSE_GOTO @MC_4 
004F: create_thread @KENDL_21

:MC_4
... 


W zależności od tego czy dana wartość "key" w pliku .ini ustawiona byłaby na 1, czy nie, startowałyby określone wątki. Póki co jeżeli wartości ustawione są na 0 to gra się włącza i nie ma żadnych problemów. Ale jeżeli chociażby jedna wartość zostanie ustawiona na 1 to już gra się nie włącza. Kiedy zamieniłem 004F na 0A92 nic się nie zmieniło :(
Postów: 294 Dołączył: 2011-07-27
#
Jak rozumiem w START_NEW_CUSTOM_SCRIPT należy podać nazwę pliku zawierającego nowy wątek. W takim razie jaką mam podać nazwę, skoro wszystkie wątki zawarte są w jednym pliku?
Postów: 294 Dołączył: 2011-07-27
#
Mam pytanie czy w jednym skrypcie cleo może jednocześnie być aktywne kilka wątków thread? Załóżmy np. że mam trzy wątki zdefiniowane opcodami 03A4 i w pierwszym wątku za pomocą opcodu 004F stworzyłbym dwa nowe wątki, które startowałyby jednocześnie. Czy jest możliwe coś takiego?
Postów: 294 Dołączył: 2011-07-27
#
Wielki dzięki za ten plik :D Po wstępnych testach wygląda na to że wszystko działa jak należy :D Wspieranie wersji 1.0 US/EU w zupełności mi wystarczy, ale muszę jeszcze dokładniej wszystko przetestować. W razie wystąpienia ewentualnych błędów będę wszystko pisał w tym temacie. I jeszcze jedno, mógłbyś podesłać mi na PW plik źródłowy do tego asi?
Postów: 294 Dołączył: 2011-07-27
#
I jak, da się z tych kodów stworzyć coś sensownego? Chodzi mi tylko o to żeby zwiększyć limit enexów z wartości 400 do wartości 450 za pomocą .asi. Sacky ten limit nazwał Entry Exits. Wszystko co było związane z tą nazwą w plikach źródłowych przedstawiłem we wcześniejszych postach. Problem polega na tym że nigdy nie robiłem modyfikacji .asi i nie za bardzo wiem jak się to wszystko łączy :/
Postów: 294 Dołączył: 2011-07-27
#
Silent napisał(a):
Jaki konkretnie limit potrzebujesz?

Ja potrzebuję podnieść limit ENEXów do 450 (oryginalnie jest 400)


Znalazłem jeszcze takie coś:
Kod:
void SetEntryExits (int iEntryExits);
Postów: 294 Dołączył: 2011-07-27
#
A więc tak, w kodzie źródłowym znalazłem takie coś:
Kod:
void SALimitAdjuster::SetEntryExits(int iEntryExits)
{
char* cBytes = (char*)&iEntryExits;
BYTE pushEntryExits[] = { 0x68, cBytes[0], cBytes[1], cBytes[2], cBytes[3]};
switch(saVersion)
{
case VERSION_US_1: patch(0x156A797,pushEntryExits); break;
case VERSION_EU_1: patch(0x156A777,pushEntryExits); break;
}
if(bDebug)
log("Entry Exits: %d",iEntryExits);
}


I teraz pytanie, czy to coś powyżej przyda się do czegoś, a jeżeli tak to czy dużo jeszcze brakuje żeby powstał z tego mod ASI? Sory że takie głupie pytania ale nigdy nie tworzyłem moda ASI, a chciałbym usunąć kilka błędów z mojej niezłej modyfikacji :D
Created & Powered by MakG