Показать сообщение отдельно
Старый 21.02.2005, 11:01   #109
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию 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;
* *};
};

Ответить с цитированием