|
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; };
|