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

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

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

13. Вспомогательные С_ функции для людей (compare функции).

Все С_ функции расположены в директории ..\AI\Human\С_Human\

Следующие два файла можно удалить по причине их бесполезности C_BanditAttackBandit.d и C_BanditHelpsStoryBandit.d

// ************************************************** ******************
// Проверка состояния тела НПС
// --------------------------------------------------------------------
// Примечание автора: Никогда не используйте встроенную функцию Npc_GetBodyState
// напрямую, т.к. сравнение всегда будет ложно, если установлены дополнительные
// флаги состояния тела. Все запросы на состояние тела выполняйте только
// через эту функцию.
// ************************************************** ******************

// ================================================== ==================
// Аргументы:
// --------------------------------------------------------------------
// slf - НПС, состояние тела которого проверяется
// bodystate - проверяемое состояние тела
// --------------------------------------------------------------------
// Возвращаемое значение:
// TRUE - состояние тела НПС совпадает с проверяемым, FALSE - не совпадает
// ================================================== ==================

func int C_BodyStateContains(var C_NPC slf,var int bodystate)
{
* *// Примечание автора: Руки прочь от этой формулы!!! Я знаю точно что я делаю! (Мое примечание: с точки зрения логического анализа формула неправильна).
* *// если фактическое состояние тела НПС без учета допфлагов равно запрошенному состоянию без учета допфлагов
* *if((Npc_GetBodyState(slf)&(BS_MAX¦BS_FLAG_INTERRU PTABLE¦BS_FLAG_FREEHA
NDS)) == (bodystate&(BS_MAX¦BS_FLAG_INTERRUPTABLE¦BS_FLAG_F REEHANDS)))
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

... ещё файл

// ************************************************** ******************************
// Убивается ли НПС по окончании жизни или переводится в бессознательное состояние
// ************************************************** ******************************

// ================================================== ==================
// self - проверяемый НПС
// other - преступник, убивающий НПС
// --------------------------------------------------------------------
// Возвращаемое значение:
// TRUE - НПС не убивается преступником, FALSE - убивается.
// ================================================== ==================

func int C_DropUnconscious()
{
* *// если преступник монстр или Черный маг (Ищущий) или бандит или преступнику разрешено убить НПС
* *if(other.guild > GIL_SEPERATOR_HUM) ¦¦ (other.guild == GIL_DMT) ¦¦ (other.guild == GIL_BDT) ¦¦ (other.aivar[AIV_DropDeadAndKill] == TRUE)
* *{
* * * *// НПС будет убит
* * * *return FALSE;
* *};
* *// если НПС человек
* *if(self.guild < GIL_SEPERATOR_HUM)
* *{
* * * *// если НПС не Черный маг и не бандит и его не разрешено убивать преступнику
* * * *if(self.guild != GIL_DMT) && (self.guild != GIL_BDT) && (self.aivar[AIV_DropDeadAndKill] == FALSE)
* * * *{
* * * * * *// НПС будет безсознания
* * * * * *return TRUE;
* * * *};
* *};
* *// НПС будет убит
* *return FALSE;
};

... и ещё

// ************************************************** ***************
// Может ли быть взят предмет, принадлежащий одному НПС, другим НПС
// ************************************************** ***************

// ================================================== ==================
// Аргументы:
// --------------------------------------------------------------------
// slf - НПС, которому может принадлежать предмет
// oth - НПС берущий предмет (ГГ)
// itm - предмет
// --------------------------------------------------------------------
// Возвращаемое значение:
// TRUE - предмет взять нельзя, FALSE - взять можно.
// ================================================== ==================

func int C_IsTakenItemMyPossession(var C_NPC slf,var C_NPC oth,var C_ITEM itm)
{
* *var int portalguild;
* *// получить номер гильдии, которой принадлежит помещение (-1 помещение никому не принадлежит)
* *portalguild = Wld_GetPlayerPortalGuild();
* *// Моё примечание: предыдущие две строки лишние и могут быть удалены.
* *// если предмет принадлежит НПС владельцу
* *if(Npc_OwnedByNpc(itm,slf))
* *{
* * * *// если предмет Святой молот
* * * *if(Hlp_IsItem(itm,Holy_Hammer_MIS))
* * * *{
* * * * * *// Святой молот взят
* * * * * *Hammer_Taken = TRUE;
* * * *};
* * * *// брать нельзя
* * * *return TRUE;
* *};
* *// если предмет выброшен (просто валяется)
* *if((itm.flags & ITEM_DROPPED) == ITEM_DROPPED)
* *{
* * * *// брать можно
* * * *return FALSE;
* *};
* *// если ГГ находится в помещении, принадлежащем НПС или помещение публично
* *// Моё примечание: правильнее вместо self написать slf, а то в некоторых случаях может быть ошибка.
* *if(C_NpcIsBotheredByPlayerRoomGuild(self)) ¦¦ (Wld_GetPlayerPortalGuild() == GIL_PUBLIC)
* *{
* * * *// брать нельзя
* * * *return TRUE;
* *}; *
* *// если отношения между гильдиями НПС и гильдией, владеющей предметом, дружественные
* *if(Wld_GetGuildAttitude(slf.guild,itm.ownerguild) == ATT_FRIENDLY)
* *{
* * * *// брать нельзя
* * * *return TRUE;
* *};
* *// брать можно
* *return FALSE;
};

... и ещё

// ************************************************** **************
// Можно ли импользовать MOB, принадлежащий одному НПС, другим НПС
// ************************************************** **************

// ================================================== ==================
// Аргументы:
// --------------------------------------------------------------------
// slf - НПС, которому может принадлежать MOB
// oth - НПС использующий MOB (ГГ)
// --------------------------------------------------------------------
// Возвращаемое значение:
// TRUE - MOB использовать нельзя, FALSE - можно.
// ================================================== ==================

func int C_IsUsedMobMyPossession(var C_NPC slf,var C_NPC oth)
{
* *// Моё примечание: правильнее вместо self и other внутри функции написать slf и oth, а то в некоторых случаях может быть ошибка.
* *// если MOB, используемый ГГ, принадлежит НПС
* *if(Npc_IsDetectedMobOwnedByNpc(other,self))
* *{
* * * *// нельзя
* * * *return TRUE;
* *};
* *// если ГГ находится в помещении, принадлежащем НПС или помещение публично
* *if(C_NpcIsBotheredByPlayerRoomGuild(self)) ¦¦ (Wld_GetPlayerPortalGuild() == GIL_PUBLIC)
* *{
* * * *// нельзя
* * * *return TRUE;
* *}; *
* *// можно
* *return FALSE;
};

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