Kwasowa Grota Heroes VIIMight & Magic XHeroes III - Board GameHorn of the AbyssHistoria Światów MMSkarbiecCzat
Cmentarz jest opustoszały
Witaj Nieznajomy!
zaloguj się    załóż konto
Cytadela Mocy i Magii  (Might and Magic)temat: [poradnik] Skrypty w MM7
komnata: Cytadela Mocy i Magii (Might and Magic)

Kirin PW
26 sierpnia 2010, 17:16
W MM7, podobnie jak w wielu innych grach RPG, wszystkie zdarzenia są kontrolowane za pomocą specjalnych skryptów, w tym przypadku umieszczonych w plikach *.evt.

Występują dwa rodzaje skryptów: lokalne i globalne.

Skrypty lokalne są przechowywane w plikach nazwa_obszaru.evt (np.Out01.evt). Odpowiadają one za zdarzenia na danym obszarze, jak np. premie z studni, wejście do budynku, teksty na znakach czy też przeniesienie do innego obszaru, itd.

Skrypty globalne są natomiast przechowywane w pliku global.evt, a odpowiadają za wszelkie zdarzenia globalne - premie z beczek i piedestałów, zadania, nauczanie umiejętności, wyświetlanie tekstów u NPC, itd.

Pliki *.evt znajdują się w archiwum events.lod.
Wszystkie skrypty składają się z kodu operacji (2 znaki), numeru skryptu (4 znaki), kolejności wykonania (2 znaki) oraz argumentów, parametrów, itd. Ponadto wszystkie skrypty są zapisywane przy pomocy systemu heksadecymalnego.

Najczęściej używane komendy, to m.in. (numer skryptu i kolejność wykonania zostały oznaczone zerami):

a.) 0A000000 xxyy zzzzzzzzzz - komenda modyfikująca.

xx - liczby od 10-12 (10 - dodaje daną wartość, 11 - odejmuje daną wartość, 12 - równa z daną wartością).
yy - kod danej wartości. [lista znajduje się w kolejnym poście.]
zzzzzzzzzz - określa który przedmiot/zadanie, ile odporności/punktów umiejętności, itd. ma być dodane/odjęte/do jakiej wartości ma być zrównane.

Przykładowa linijka dodająca przedmiot o numerze 16DEC (10HEX):

0A010000 1011 (dodaje [10] przedmiot [11]) 0010000000 (przy tej komendzie znaków musi być dziesięć; zazwyczaj są używane znaki od 3-6).

b.) 0B000000 0Exx yyyyyyyyyyzz - komenda warunkowa.

xx - kod danej wartości.
yyyyyyyyyy - określa obecność którego przedmiotu/zadania, jaka ilość odporności/punktów umiejętności, itd. ma być sprawdzona.
zz - numer w kolejności wykonywania do którego jest przenoszone wykonanie skryptu jeśli warunek został spełniony.

Przykładowa linijka sprawdzająca obecność zadania 16DEC (10HEX) i przenosząca do kolejności w wykonaniu nr 04 jeśli zadanie się znajduje:

0B010000 0E10 (sprawdza zadanie [10]) 001000000004 (przy tej komendzie znaków musi być dziesięć + dwa znaki określające gdzie wykonywanie ma zostać przeniesione)

c.) 0C000000 xx yyyy zzzzzzzzzzzz - komenda przenosząca NPC, grupy stworzeń, itd.

xx - kod danej funkcji
yyyy - kod danej grupy, danego NPC, itd.
zzzzzzzzzzzz - kod lokacji.

Przykładowa komenda przenosząca NPC 16DEC (10HEX) do lokacji 08DEC/HEX:

0C010000 28 [przenosi NPC] 1000 [numer NPC] 000008000000 [numer lokacji; zazwyczaj jest zapisywany na znakach 5-8)

d.) 0D000000 xx yyyy zzzzzzzzzzzzzz - komenda modyfikująca różne wartości danego NPC/danej grupy.

xx - kod danej funkcji.
yyyy - kod danej grupy, danego NPC, itd.
zzzzzzzzzzzz - dodatkowe wartości.

Przykładowa linijka dodająca niewidzialność grupie stworzeń nr 5:

0D010000 39 [kod funkcji] 0500 [numer grupy] 00000000010001 [wartości określające zmianę statusu na niewidzialność]

e.) 05000000 xxxx - komenda kontrolująca wykonanie skryptu.

xxxx - kod funkcji i/lub parametry.

Przykładowe gotowe funkcje:

05010000 0100 - stopuje wykonanie skryptu.
05010000 24xx - przenosi wykonanie skryptu do kolejności wykonania xx.
05010000 23xx - modyfikuje skrypt tak, aby działał na danego członka drużyny (01, 02, 03, 04 + 05 - cała drużyna)

f.) 08000000 xx yyyyyyyy - komenda show.

xx - kod danej funkcji.
yyyyyyyy - numer danego tekstu.

Przykładowa linijka wyświetlająca NPCtext nr 04:

08010000 1E 04000000

Te skrypty są skryptami podstawowymi, które powtarzają się najczęściej. Jeśli ktokolwiek ma problemy ze zrozumieniem tych skryptów, to polecam wyeksportować któryś z plików *.evt, skopiować zawartość do notatnika i podzielić go na linijki oraz skomentować każdą z nich. Przykładowo skomentowany skrypt wygląda następująco (skrypt z global.evt na zadanie z poszukiwaniem skarbów na Szmaragdowej Wyspie):

05060000 2305 //stosuje [następne linijki] dla członka drużyny 5 (dla wszystkich członków)
0b060001 0e10 00080000000a //przenosi do [linijki] 0a jeśli zadanie [nr] 08 znajduje się w księdze {jeśli jest zadanie}
0b060002 0e11 00de00000004 //przenosi do 04 jeśli przedmiot DE jest w ekwipunku {jeśli jest przedmiot}
05060003 240a //przechodzi do 0a
0a060004 1110 0001000000 //usuwa zadanie 01 [z księgi]
0a060005 100d 00f4010000 //dodaje 500 doświadczenia
0a060006 1010 0008000000 //dodaje zadanie 08 [do księgi]
0a060007 1111 00de000000 //usuwa przedmiot DE [z ekwipunku]
08060008 1e 1f000000 //pokazuje NPCtext 1F
05060009 0100 //stop
0b06000a 0e10 000900000014 //przenosi do 14 jeśli jest zadanie 09
0506000b 240c //przenosi do 0C
0b06000c 0e11 007b0200000e //przenosi do 0E jeśli jest przedmiot 27B
0506000d 2414 //przenosi do 14
0a06000e 1110 0002000000 //usuwa zadanie 02
0a06000f 1111 007b020000 //usuwa przedmiot 27B
0a060010 1010 0009000000 //dodaje zadanie 09
0a060011 100d 00f4010000 //dodaje 500 doświadczenia
08060012 1e 1e000000 //pokazuje NPCtext 1E
05060013 0100 //stop
0b060014 0e10 000a0000001e //przenosi do 1E jeśli jest zadanie 0A
05060015 2416 //przenosi do 16
0b060016 0e11 002b00000018 //przenosi do 18 jeśli jest przedmiot 2B
05060017 241e //przenosi do 1E
08060018 1e 1d000000 //pokazuje NPCtext 1D
0a060019 1111 002b000000 //usuwa przedmiot 2B
0a06001a 1110 0003000000 //usuwa zadanie 03
0a06001b 100d 00f4010000 //dodaje 500 doświadczenia
0a06001c 1010 000a000000 //dodaje zadanie 0A
0506001d 0100 //stop
0b06001e 0e10 000b00000028 //przenosi do 28 jeśli jest zadanie 0B
0506001f 2420 //przenosi do 20
0b060020 0e11 007c02000022 //przenosi do 22 jeśli jest przedmiot 27C
05060021 2428 //przenosi do 28
08060022 1e 1c000000 //pokazuje NPCtext 1C
0a060023 1111 007c020000 //usuwa przedmiot 27C
0a060024 1110 0004000000 //usuwa zadanie 04
0a060025 100d 00f4010000 //dodaje 500 doświadczenia
0a060026 1010 000b000000 //dodaje zadanie 0B
05060027 0100 //stop
0b060028 0e10 000c00000032 //przenosi do 32 jeśli jest zadanie 0C
05060029 242a //przenosi do 2A
0b06002a 0e11 00780200002c //przenosi do 2C jeśli jest przedmiot 278
0506002b 2432 //przenosi do 32
0806002c 1e 1b000000 //pokazuje NPCtext 1B
0a06002d 1111 0078020000 //usuwa przedmiot 278
0a06002e 1110 0005000000 //usuwa zadanie 05
0a06002f 100d 00f4010000 //dodaje 500 doświadczenia
0a060030 1010 000c000000 //dodaje zadanie 0C
05060031 0100 //stop
0b060032 0e10 000d0000003c //przenosi do 3C jeśli jest zadanie 0D
05060033 2434 //przenosi do 34
0b060034 0e11 007702000036 //przenosi do 36 jeśli jest przedmiot 277
05060035 2451 //przenosi do 51
08060036 1e 1a000000 //pokazuje NPCtext 1A
0a060037 1111 0077020000 //usuwa przedmiot 277
0a060038 1110 0006000000 //usuwa zadanie 06
0a060039 100d 00f4010000 //dodaje 500 doświadczenia
0a06003a 1010 000d000000 //dodaje zadanie 0D
0506003b 0100 //stop
0b06003c 0e10 000100000051 //przenosi do 51 jeśli jest zadanie 01
0506003d 243e //przenosi do 3E
0b06003e 0e10 000200000051 //przenosi do 51 jeśli jest zadanie 02
0506003f 2440 //przenosi do 40
0b060040 0e10 000300000051 //przenosi do 51 jeśli jest zadanie 03
05060041 2442 //przenosi do 42
0b060042 0e10 000400000051 //przenosi do 51 jeśli jest zadanie 04
05060043 2444 //przenosi do 44
0b060044 0e10 000500000051 //przenosi do 51 jeśli jest zadanie 05
05060045 2446 //przenosi do 46
0b060046 0e10 000600000051 //przenosi do 51 jeśli jest zadanie 06
05060047 2449 //przenosi do 49
05060048 0100 //stop
0a060049 1010 0007000000 //dodaje zadanie 07
0806004a 1e 20000000 //pokazuje NPCtext 20
0d06004b 27 0200 00000000000000 //ustawia NPC topic 02 na GlobalEvent {GlEv} 00
0d06004c 27 0200 00000100000000 //ustawia NPC topic 02 na GlEv 01
0c06004d 28 0200 000000000000 //ustawia NPC 02 na lokację 00 (opisane w 2Devents)
0d06004e 27 0100 00000100000000 //ustawia NPC topic 01 na GlEv 01
0c06004f 32 0600 000009000000 //ustawia NPC 06 tekst 09
05060050 0100 //stop
08060051 1e 21000000 //pokazuje NPCtext 21

Uwagi:
-termin "zadanie" oznacza albo zadanie, albo niektóre zmienne, jak np. zmienna określająca zdolność do wypłynięcia statkiem z Szmaragdowej Wyspy.
-wszystkie wartości (oprócz doświadczenia) podane są w heksach.
-Przy liczbach z trzema znakami, np. 14f, zapis wygląda następująco: 4f01.

Kirin PW
26 sierpnia 2010, 17:17
Lista kodów poszczególnych parametrów:

01 - brak widocznego efektu.
02 - przy próbie ustalenia tej wartości na 50 max PŻ i PM spada.
03 - PŻ [punkty życia]
04 - brak efektu.
05 - PM [punkty many]
06 - brak efektu.
07 - brak efektu.
08 - KP [klasa pancerza]
09 - przy próbie zmiany tej wartości na 50 max PŻ i PM wzrasta.
0a - -||-
0b - wiek
0c - nagrody
0d - doświadczenie
0e - brak efektu
0f - brak efektu
10 - zadania
11 - przedmioty
12 - brak efektu
13 - brak efektu
14 - brak efektu
15 - złoto
16 - losuje ilość złota z podanego zakresu
17 - jedzenie
18 - losuje ilość jedzenia z podanego zakresu
19 - czasowa moc
1a - czasowy intelekt
1b - czasowa osobowość
1c - czasowa wytrzymałość
1d - czasowa celność
1e - czasowa szybkość
1f - czasowe szczęście
20 - permamentna moc
21 - permamentny intelekt
22 - permamentna osobowość
23 - permamentna wytrzymałość
24 - permamentna celność
25 - permamentna szybkość
26 - permamentne szczęście
27 - czasowa moc
28 - czasowy intelekt
29 - czasowa osobowość
2a - czasowa wytrzymałość
2b - czasowa celność
2c - czasowa szybkość
2d - czasowe szczęście
2e - odporność na ogień
2f - odporność na powietrze
30 - odporność na wodę
31 - odporność na ziemię
32 - odporność na umysł
33 - odporność na ?
34 - odporność na ciało
35 - brak widocznego efektu
36 - brak widocznego efektu
37 - brak efektu
38 - brak widocznego efektu
39 - tymczasowa odp. na ogień
40 - brak widocznego efektu
41 - brak widocznego efektu
42 - brak efektu
43 - brak efektu
44 - kij
45 - miecz
46 - sztylet
47 - topór
48 - włócznia
49 - łuk
4a - maczuga
4b - miotacz
4c - tarcza
4d - zbroja skórzana
4e - kolczuga
4f - zbroja płytowa
50 - magia ognia
51 - magia powietrza
52 - magia wody
53 - magia ziemi
54 - magia ducha
55 - magia umysłu
56 - magia ciała
57 - magia światła
58 - magia ciemności
59 - identyfikacja przedmiotów
5a - kupiectwo
5b - naprawa przedmiotów
5c - atletyka
5d - medytacja
5e - percepcja

Dalsze wpisy to zmienne, używane np. przy studzienkach.

FAQ
Q: Czym dokładnie jest ta lista?
A: spisem kodów używanych w komendzie 0B000000 0Exx oraz w komendzie 0A000000 10xx

Q: Dlaczego tyle pozycji nie ma efektu albo nie ma widocznego efektu?
A: Nie wiem. Możliwe, że ma to związek z tym, że próbowałem ustalać wszystkie wartości na 50.

Q: Jak została ułożona ta lista?
A: Metodą prób i błędów.

Q: Dlaczego niektóre umiejętności nie mają swojego kodu?
A: Też nie wiem. Możliwe jednak, że wiąże się to z tym, że nie są one potrzebne/znajdują sie dalej.

Q: Lista będzie rozwijana?
A: Tak, będzie.

Czekam na wszelkie sugestie, błędy, propozycje, itd, itp.

Zu PW
7 marca 2018, 10:46
Chciałem się dopytać o powiązany temat w MM8. Mianowicie chciałem zrobić dwie rzeczy:

1) Zmienić to jak często kursują statki i karawany. Jak przypuszczam, aby to zrobić musiałbym zmodyfikować pliki EVT, ale nie wiem gdzie mogę w nich znaleźć powiązaną informację (przeglądałem je za pomocą HexEdit).

2) Poprawić błąd w tłumaczeniu w jednym konkretnym miejscu (mała litera tam, gdzie powinna być duża). Błąd jest zawarty w pliku STR, ale zmienienie go w jakikolwiek sposób, czy to HexEditem czy Notepatem++ wywołuje crash gry kiedy próbuje ona wywołać tekst ze zmienionego pliku.

Bardzo bym prosił o pomoc.

Alamar PW
7 marca 2018, 11:55
Spróbuj otworzyć i edytować pliki MM8 level editorem.
temat: [poradnik] Skrypty w MM7

powered by phpQui
beware of the two-headed weasel