Witam,
Jest to mój pierwszy tutorial, więc proszę o wyrozumiałość;) Na pewno myślał ktoś kiedyś o przeniesieniu Ulu-Mulu z pierwszego Gothica do Nocy Kruka. Broń ta powodowała, że kiedy mieliśmy ją założoną to orkowie nas nie atakowali. Właśnie to dzisiaj zrobimy.
1. Tworzymy broń. Jak pewnie każdy się domyślił, najpierw musimy stworzyć zwykłą, podstawową broń;p Nie będę tego tłumaczył, jest wiele tutoriali jak robić broń.
INSTANCE LAGA_MOCY (C_Item)
{
name = "Laga Mocy";
mainflag = ITEM_KAT_NF;
flags = ITEM_AXE;
material = MAT_WOOD;
value = 1;
damageTotal = 1;
damagetype = DAM_BLUNT;
range = RANGE_BauMace;
cond_atr[2] = ATR_STRENGTH;
cond_value[2] = 1;
visual = "ItMw_010_1h_Club_01.3DS";
description = name;
TEXT[0] = "Groźnie wyglądająca laga.";
TEXT[1] = "Orkowie i Wargi Ci nie podskoczą...";
TEXT[2] = NAME_Damage; COUNT[2] = damageTotal;
TEXT[3] = NAME_Str_needed; COUNT[3] = cond_value[2];
TEXT[4] = NAME_OneHanded;
TEXT[5] = NAME_Value; COUNT[5] = value;
};
2. Wyszukujemy potrzebne informacje. Chcemy uzyskać efekt, że orkowie i wargi nie będą nas atakować. Szukamy w plikach gry skryptów orków i warga. Znajdują się one w pliku
_Work\data\Scripts\Content\Story\NPC\Monster\MST_Warg.d
oraz pliki orków znajdują się w katalogu
_Work\data\Scripts\Content\Story\NPC\Orc
W przypadku orków interesuje nas zablokowanie całej gildii, czyli interesuje nas informacja
GIL_ORC
Jednak przeglądając pliki warga zauważamy, że ma on gildię
GIL_WOLF
Do tej gildii należą również wilki, lodowe wilki itd., więc blokada tej gildii powodowałaby również brak ataku ze strony tamtych zwierząt. Możemy też zauważyć coś takiego:
aivar[AIV_MM_REAL_ID] = ID_WARG;
Ten aivar definiuje tak jakby subgildię, precyzując, czy jest to zwykły wilk, czy warg. To jest druga interesująca nas informacja.
3. Edycja pliku B_MM_AssessEnemy.d, czyli powodujemy, że orkowie nas nie atakują. Do pliku
B_MM_AssessEnemy.d
który znajduje się w katalogu
_Work\data\Scripts\Content\AI\Monster\B_Monster
dopisujemy na samym początku pod
func void B_MM_AssessEnemy ()
{
ten kod:
var C_Item LAGA_MOCY_eqwep;
var C_Item LAGA_MOCY_rdwep;
LAGA_MOCY_eqwep = Npc_GetEquippedMeleeWeapon(hero);
LAGA_MOCY_rdwep = Npc_GetReadiedWeapon(hero);
if (Hlp_IsItem(LAGA_MOCY_eqwep, LAGA_MOCY) == TRUE) ||
(Hlp_IsItem(LAGA_MOCY_rdwep, LAGA_MOCY) == TRUE) &&
(self.guild == GIL_ORC) ||
(self.aivar[AIV_MM_REAL_ID] == ID_WARG)
{
return;
};
Pierwsze dwie linijki definiują zmienne. Dwie kolejne sprawdzają, czy nasza broń jest założona lub wyciągnięta i przypisują wyniki do zmiennych. Następnie mamy warunek mówiący, że jeśli nasza broń jest założona lub wyciągnięta i nasz przeciwnik ma gildię orka lub subgildię warga to przeciwnicy nie traktują nas jako wroga.
4. Edycja pliku B_Attack.d, czyli powodujemy, że nasi przyjaciele nie atakują orków. Kiedy byliśmy sami - było OK, ale kiedy byliśmy prowadzeni przez jakiegoś NPC to on atakował orki, które po tym jak go zabiły, atakowały nas. Chcąc tego uniknąć musimy wprowadzić podobny do wcześniejszego warunek do pliku
B_Attack.d
znajdującego się w katalogu
_Work\data\Scripts\Content\AI\Human\B_Human
Znowu na samym początku pliku pod wpisem:
func void B_Attack (var C_NPC slf, var C_NPC oth, var int attack_reason, var int wait)
{
musimy wpisać:
var C_Item LAGA_MOCY_eqwep;
var C_Item LAGA_MOCY_rdwep;
LAGA_MOCY_eqwep = Npc_GetEquippedMeleeWeapon(hero);
LAGA_MOCY_rdwep = Npc_GetReadiedWeapon(hero);
if (Hlp_IsItem(LAGA_MOCY_eqwep, LAGA_MOCY) == TRUE) ||
(Hlp_IsItem(LAGA_MOCY_rdwep, LAGA_MOCY) == TRUE) &&
(oth.guild == GIL_ORC) ||
(oth.aivar[AIV_MM_REAL_ID] == ID_WARG)
{
return;
};
Jest to dokładnie to samo, tylko zamiast self napisane jest oth. Chodzi o to, że patrząc oczami Bezia, w trakcie pojedynku to Bezio byłby other, a postać - self;) Teraz wystarczy zreparsować skrypty i mamy nasze "Ulu-Mulu";)
Kolorem zielonym zaznaczono miejsca, gdzie należy wpisać INSTANCE naszej broni.Chciałem podziękować Bogdanowi Zwei za nakierowanie mnie, które pliki powinienem edytować, żeby to zadziałało;)
Wybaczcie momentami chaotyczne tłumaczenie, kiepski ze mnie nauczyciel;p
Tutorial kopiujcie ile wejdzie, ale proszę napisać, że pochodzi on z tego forum i że ja jestem autorem;)
Pozdrawiam, TNTalib