Witam, z nudów napisałem rutynę walk na arenie dla G1, nie działa w G2 - trzeba przerobić niektóre funkcje.
Przejdź do Scripts/Content/Story/ZS/ i utwórz plik ZS_ArenaFight.d, w środku pliku wklej to:
func void ZS_ArenaFight()
{
B_SetPerception (self);
AI_SetWalkmode (self, NPC_WALK);
if !(Hlp_StrCmp (Npc_GetNearestWP (self), self.wp))
{
AI_GotoWP (self, self.wp);
}
else
{
AI_GotoWP (self, self.wp);
AI_AlignToWP (self);
};
};
func void ZS_ArenaFight_Loop()
{
if (Hlp_StrCmp (Npc_GetNearestWP (self), self.wp))
{
var c_npc Attack; Attack = Hlp_GetNpc(self.aivar[43]);
if (Attack)
{
Npc_SetTarget (self, Attack);
AI_StartState (self, ZS_ATTACK, 1, "");
};
}
else
{
AI_SetWalkmode (self, NPC_RUN); // Zeby npc nie zaczął uciekać przed drugim
AI_GotoWP (self, self.wp); //****** lub żeby nie wyszli poza arene
};
};
func void ZS_ArenaFight_End()
{
B_SetPerception (self);
AI_SetWalkmode (self, NPC_WALK);
};
INSTANCE ItMw_Arena_Sword (C_Item)
{
name = "Ostrze areny";
mainflag = ITEM_KAT_NF;
flags = ITEM_AXE;
material = MAT_METAL;
value = 4;
damageTotal = -25;
damagetype = DAM_EDGE;
range = 100;
cond_atr[2] = ATR_STRENGTH;
cond_value[2] = 70;
visual = "ItMw_1H_Sword_01.3DS";
description = name;
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;
};
Na sam dół TA.d dodaj to:
func void TA_ArenaFight (var int start_h, var int start_m, var int stop_h, var int stop_m, VAR string waypoint) {TA_Min (self, start_h,start_m, stop_h, stop_m, ZS_ArenaFight, waypoint);};
Rutyna jest gotowa, żeby zrobić walkę na arenie należy do postaci dodać to:
W instance:
self.aivar[43] = Instancja NPC z którym ma walczyć dany NPC;
W rutynie:
TA_ArenaFight (19,00,19,30,"OCR_ARENABATTLE_TRAIN2");
Jeżeli NPC zadaje zbyt dużo obrażeń dodaj to:
EquipItem (self, ItMw_Arena_Sword);
Wielkie podziękowania dla
@bogu9821 bez którego ten skrypt by nie powstał
Dziękuje za uwagę, odmeldowuje się!