|
Re: Уроки скриптологии
// ***************************************** // Обработчик состояния грабежа предметов с тел НПС // ----------------------------------------- // self - грабитель, other - тело // *****************************************
// Инициализация состояния func void ZS_RansackBody() { * *// установить грабителю нормальный набор восприятий * *Perception_Set_Normal(); * *// грабитель встает * *AI_StandUp(self); * *// грабитель идет к телу * *AI_GotoNpc(self,other); }; * * // Цикл грабежа func int ZS_RansackBody_Loop() { * *return LOOP_END; };
// Завершающая фаза грабежа func void ZS_RansackBody_End() { * * *// грабитель поворачивается к телу * *B_TurnToNpc(self,other); * * * *// включить анимацию грабежа * *AI_PlayAni(self,"T_PLUNDER"); * *// если тело имеет "Святой молот" и грабитель "Гарвиг" * *if(Npc_HasItems(other,Holy_Hammer_MIS) > 0) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Garwig)) * *{ * * * *// создать в инвентаре грабителя "Святой молот" * * * *CreateInvItems(self,Holy_Hammer_MIS,1); * * * *// удалить из инвентаря тела "Святой молот" * * * *Npc_RemoveInvItems(other,Holy_Hammer_MIS,1); * * * *}; * *// если тело имеет "Меч Рода" и грабитель "Род" * *if(Npc_HasItems(other,ItMw_2h_Rod) > 0) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Rod)) * *{ * * * *// переместить "Меч Рода" из инвентаря тела в инвентарь грабителя * * * *CreateInvItems(self,ItMw_2h_Rod,1); * * * *Npc_RemoveInvItems(other,ItMw_2h_Rod,1); * * * *// грабитель экипируется лучшим оружием ближнего радиуса поражения * * * *AI_EquipBestMeleeWeapon(self); * *}; * *// если тело имеет "Ключ к хибаре капитана Грега" и грабитель "Фрэнсис" * *if(Npc_HasItems(other,ITKE_Greg_ADDON_MIS)) && (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(Francis)) * *{ * * * *// передать предмет грабителю * * * *CreateInvItems(self,ITKE_Greg_ADDON_MIS,1); * * * *Npc_RemoveInvItems(other,ITKE_Greg_ADDON_MIS,1); * *}; * * *// если тело имеет "Золото" * *if(Npc_HasItems(other,ItMi_Gold) > 0) * *{ * * * *var int x; * * * *// кол-во золота у тела * * * *x = Npc_HasItems(other,ItMi_Gold); * * * *// передать все золдото грабителю * * * *CreateInvItems(self,ItMi_Gold,x); * * * *Npc_RemoveInvItems(other,ItMi_Gold,x); * * * * * * * * * * *// грабитель говорит телу (SVM фраза "Спасибо за золото, герой!") * * * *B_Say(self,other,"$ITOOKYOURGOLD"); * *} * *else // иначе * *{ * * * *// грабитель говорит телу (SVM фраза "Ты, жалкое ничтожество, разве у тебя нет золота!") * * * *B_Say(self,other,"$SHITNOGOLD"); * *}; * *// грабителю разрешается воспринимать все объекты в зоне действия восприятий * *Npc_PerceiveAll(self); * *// если грабитель находит оружие ближнего или дальнего радиуса поражения * *if(Wld_DetectItem(self,ITEM_KAT_NF) ¦¦ Wld_DetectItem(self,ITEM_KAT_FF)) * *{ * * * *// если ссылка на предмет item существует * * * *if(Hlp_IsValidItem(item)) * * * *{ * * * * * *// если расстояние от грабителя до предмета < 5 метров * * * * * *if(Npc_GetDistToItem(self,item) < 500) * * * * * *{ * * * * * * * *// грабитель берет предмет * * * * * * * *AI_TakeItem(self,item); * * * * * * * *// грабитель говорит сам себе (SVM фраза "Твое оружие я возьму с собой.") * * * * * * * *B_Say(self,self,"$ITAKEYOURWEAPON"); * * * * * * * * * * * *// экипировка лучшим оружием * * * * * * * *AI_EquipBestMeleeWeapon(self); * * * * * * * *AI_EquipBestRangedWeapon(self); * * * * * *}; * * * *}; * *}; * *// если жизнь грабителя < половинной * *if(self.attribute[ATR_HITPOINTS] < (self.attribute[ATR_HITPOINTS_MAX]/2)) * *{ * * * *// переход в состояние самолечения * * * *AI_StartState(self,ZS_HealSelf,0,""); * * * *return; * *}; };
// *********************************************** // Обработчик состояния когда Джек забирает сырое мясо у жертвы // ----------------------------------------------- // self - НПС Джек, other - тело // ***********************************************
// Инициализация состояния func void ZS_GetMeat() { * * *// разрешить минимальный набор восприятий * *Perception_Set_Minimal(); * *// НПС встает * *AI_StandUp(self); * *// идет к телу * *AI_GotoNpc(self,other); * *// поворачивается к телу * *AI_TurnToNpc(self,other); * *// проигрывание анимации грабежа * *AI_PlayAni(self,"T_PLUNDER"); * *var int x; * *// кол-во "Сырого мяса" у тела * *x = Npc_HasItems(other,ItFoMuttonRaw); * *// передать мясо от тела НПС * *CreateInvItems(self,ItFoMuttonRaw,x); * *Npc_RemoveInvItems(other,ItFoMuttonRaw,x); * *// если жизнь НПС < половинной * *if(self.attribute[ATR_HITPOINTS] < (self.attribute[ATR_HITPOINTS_MAX]/2)) * *{ * * * *// переход в состояние самолечения * * * *AI_StartState(self,ZS_HealSelf,0,""); * * * *return; * *}; };
|