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

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

По умолчанию Re: Уроки скриптологии

// ************************************************** *********
// Функция реакции людей на воровство
// ************************************************** *********
// Вызывается в качестве реакции на пассивное восприятие PERC_ASSESSTHEFT
// в зоне действия PERC_DIST_INTERMEDIAT когда НПС поднимает какой-либо предмет
// ************************************************** *********

func void B_AssessTheft()
{
* *// other - вор, self - свидетель
* *// если вор не ГГ
* *if(!Npc_IsPlayer(other))
* *{
* * * *return;
* *};
* *// если ГГ находится в доме, принадлежащим любой гильдии, и расстояние между свидетелем и вором > дистанции реакции через закрытые двери
* *if(Wld_GetPlayerPortalGuild() >= GIL_NONE) && (Npc_GetHeightToNpc(self,other) > PERC_DIST_INDOOR_HEIGHT)
* *{
* * * *return;
* *};
* *// если гильдии вора и свидетеля дружественны
* *if(Wld_GetGuildAttitude(self.guild,other.guild) == ATT_FRIENDLY)
* *{
* * * *// если предмет существует и он принадлежит свидетелю
* * * *if(Hlp_IsValidItem(item)) && (Npc_OwnedByNpc(item,self))
* * * *{
* * * * * *// продолжаем анализ ситуации дальше
* * * *}
* * * *else
* * * *{
* * * * * *return;
* * * *}; * * *
* *};
* *// если предмет принадлежал ГГ ранее
* *if(!C_IsTakenItemMyPossession(self,other,item))
* *{
* * * *return;
* *};
* *// если свидетель не видит вора
* *if(!Npc_CanSeeNpc(self,other))
* *{
* * * *// если свидетель и ГГ находится в одном помещении и если (свидетель наблюдает за ГГ или свидетель находится в состоянии "незваного гостя")
* * * *if(Npc_IsInPlayersRoom(self)) && ((Npc_IsInState(self,ZS_ObservePlayer)) ¦¦ (Npc_IsInState(self,ZS_ClearRoom)))
* * * *{
* * * * * *// продолжаем анализ ситуации дальше
* * * *}
* * * *else
* * * *{
* * * * * *return;
* * * *};
* *};
* *// если свидетель игнорирует вора
* *if(!C_WantToAttackThief(self,other))
* *{
* * * *// если свидетель является охранником ворот
* * * *if(C_NpcIsGateGuard(self))
* * * *{
* * * * * *// свидетель запоминает новость, что ГГ вор
* * * * * *B_MemorizePlayerCrime(self,other,CRIME_THEFT);
* * * *};
* * * *return;
* *};
* *// свидетель атакует вора
* *B_Attack(self,other,AR_Theft,0);
* *return;
};


... и еще одна функция, очень похожая на предыдущую

// ************************************************** **
// Функция реакции людей на использование МОB's
// ************************************************** **

func void B_AssessUseMob()
{
* *// other - пользователь, self - свидетель
* *// если пользователь не ГГ
* *if(!Npc_IsPlayer(other))
* *{
* * * *return;
* *};
* *// если ГГ находится в доме, принадлежащим любой гильдии
* *if(Wld_GetPlayerPortalGuild() >= GIL_NONE)
* *{
* * * *// если расстояние между свидетелем и пользователем > дистанции реакции через закрытые двери
* * * *if (Npc_GetHeightToNpc(self,other) > PERC_DIST_INDOOR_HEIGHT)
* * * *{
* * * * * *return;
* * * *};
* *};
* *// если гильдии пользователя и свидетеля дружественны
* *if(Wld_GetGuildAttitude(self.guild,other.guild) == ATT_FRIENDLY)
* *{
* * * *// если МОВ принадлежит свидетелю
* * * *if(Npc_IsDetectedMobOwnedByNpc(other,self))
* * * *{
* * * * * *// продолжаем анализ ситуации дальше
* * * *}
* * * *else
* * * *{
* * * * * *return;
* * * *}; * * *
* *};
* *// если МОВ принадлежал ГГ ранее
* *if(!C_IsUsedMobMyPossession(self,other))
* *{
* * * *return;
* *};
* *// если свидетель не видит пользователя
* *if(!Npc_CanSeeNpc(self,other))
* *{
* * * *// если свидетель и ГГ находятся в одном помещении и если (свидетель наблюдает за ГГ или свидетель находится в состоянии "незваного гостя")
* * * *if(Npc_IsInPlayersRoom(self)) && ((Npc_IsInState(self,ZS_ObservePlayer)) ¦¦ (Npc_IsInState(self,ZS_ClearRoom)))
* * * *{
* * * * * *// продолжаем анализ ситуации дальше
* * * *}
* * * *else
* * * *{
* * * * * *return;
* * * *};
* *};
* *var string detMob;
* *// получить название МОВа, используемого ГГ
* *detMob = Npc_GetDetectedMob(other);
* *// если МОВ не "Большой сундук" и МОВ не "Маленький сундук"
* *if(Hlp_StrCmp(detMob,"CHESTBIG") == FALSE) && (Hlp_StrCmp(detMob,"CHESTSMALL") == FALSE)
* *{
* * * *return;
* *};
* *// если свидетель игнорирует пользователя
* *if(!C_WantToAttackThief(self,other))
* *{
* * * *// если свидетель является охранником ворот
* * * *if (C_NpcIsGateGuard(self))
* * * *{
* * * * * *// свидетель запоминает новость, что ГГ вор
* * * * * *B_MemorizePlayerCrime(self,other,CRIME_THEFT);
* * * *};
* * * *return;
* *};
* *// свидетель атакует пользователя
* *B_Attack(self,other,AR_UseMob,0);
* *return;
};

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