Показать сообщение отдельно
Старый 30.03.2005, 12:13   #131
Vam

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

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

// ************************************************** ******************
// Функции проверяющие принадлежность НПС к определенной локации
// ************************************************** ******************

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

// Проверка принадлежности к Миненталю
// --------------------------------------------------------------------
func int C_NpcBelongsToOldCamp(var C_NPC slf)
{
* *// если НПС значим или из окружающего народа в Минентале
* *if(slf.npctype == NPCTYPE_OCMAIN) ¦¦ (slf.npctype == NPCTYPE_OCAMBIENT)
* *{
* * * *// если НПС Горожанин или Милиционер или Паладин
* * * *if(slf.guild == GIL_VLK) ¦¦ (slf.guild == GIL_MIL) ¦¦ (slf.guild == GIL_PAL)
* * * *{
* * * * * *return TRUE;
* * * *};
* *};
* *return FALSE;
};

// Проверка принадлежности к Хоринису
// --------------------------------------------------------------------
func int C_NpcBelongsToCity(var C_NPC slf)
{
* *// если НПС не из Миненталя
* *if(!C_NpcBelongsToOldCamp(slf))
* *{
* * * *// если НПС Горожанин или Милиционер или Паладин
* * * *if(slf.guild == GIL_VLK) ¦¦ (slf.guild == GIL_MIL) ¦¦ (slf.guild == GIL_PAL)
* * * *{
* * * * * *return TRUE;
* * * *};
* *};
* *return FALSE;
};

// Проверка принадлежности к Монастырю
// ---------------------------------------------------------------------
func int C_NpcBelongsToMonastery(var C_NPC slf)
{
* *// если НПС Маг огня или Маг послушник
* *if(slf.guild == GIL_KDF) ¦¦ (slf.guild == GIL_NOV)
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

// Проверка принадлежности к Ферме наемников
// ---------------------------------------------------------------------
func int C_NpcBelongsToFarm(var C_NPC slf)
{
* *// если НПС Крестьянин или Наемник
* *if(slf.guild == GIL_BAU) ¦¦ (slf.guild == GIL_SLD)
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

// Проверка принадлежности к Лагерю бандитов
// ---------------------------------------------------------------------
func int C_NpcBelongsToBL(var C_NPC slf)
{
* *// если НПС из окружающего народа в Лагере или Долине бандитов
* *if(slf.npctype == NPCTYPE_BL_AMBIENT) ¦¦ (slf.npctype == NPCTYPE_BL_MAIN)
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

... ещё файл

// ******************************************
// Имеет ли НПС новости об окружающей жизни
// ******************************************

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

func int C_NpcHasAmbientNews(var C_NPC slf)
{ * * *
* *// если НПС не знает никаких новостей
* *if(slf.aivar[AIV_NewsOverride] == TRUE)
* *{
* * * *return FALSE;
* *};
* *// если ГГ не имеет криминала
* *if(B_GetPlayerCrime(slf) == CRIME_NONE)
* *{
* * * *return FALSE;
* *};
* *// новости есть (по умолчанию)
* *return TRUE;
};

... ещё файл

// *****************************************
// Является ли причиной атаки убийство цели
// *****************************************

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

func int C_NpcHasAttackReasonToKill(var C_NPC slf)
{
* *// если
* *if (slf.aivar[AIV_ATTACKREASON] == AR_KILL) * * * * * * * * // ГГ убил НПС
* *¦¦ (slf.aivar[AIV_ATTACKREASON] == AR_GuildEnemy) * * * * * // или НПС является врагом гильдии
* *¦¦ (slf.aivar[AIV_ATTACKREASON] == AR_HumanMurderedHuman) * // или Человек убил человека
* *¦¦ (slf.aivar[AIV_ATTACKREASON] == AR_GuardStopsIntruder) * // или Охрана ворот атакует незваного гостя
* *¦¦ (slf.aivar[AIV_ATTACKREASON] == AR_GuardCalledToKill) * *// или Вызвана охрана по факту убийства
* *{
* * * *return TRUE; * *
* *};
* *return FALSE;
};

... ещё файл

// ************************************
// Находится ли ГГ в частном помещении
// ************************************

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

func int C_NpcIsBotheredByPlayerRoomGuild(var C_Npc slf)
{ *
* *var int portalguild;
* *// получить номер гильдии, которой принадлежит помещение (-1 помещение никому не принадлежит)
* *portalguild = Wld_GetPlayerPortalGuild();
* *// если помещение принадлежит гильдии и (НПС из этой гильдии или гильдия НПС и гильдия, владеющая помещением, дружественны)
* *if(portalguild > GIL_NONE) && ((slf.guild == portalguild) ¦¦ (Wld_GetGuildAttitude(slf.guild,portalguild) == ATT_FRIENDLY))
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

... ещё файл

// ************************************************** ***************
// Реагирует ли цель на оружие, направленное против нее агрессором
// ************************************************** ***************

// ================================================== ===============
// Аргументы:
// -----------------------------------------------------------------
// slf - НПС цель
// oth - НПС агрессор
// -----------------------------------------------------------------
// Возвращаемое значение:
// TRUE - цель реагирует, FALSE - нет.
// ================================================== ===============

func int C_NpcIsBotheredByWeapon(var C_NPC slf,var C_NPC oth)
{
* *// если цель член партии ГГ
* *if(slf.aivar[AIV_PARTYMEMBER] == TRUE)
* *{
* * * *return FALSE;
* *};
* *// если цель друг ГГ и агрессор ГГ (Примечание: правильней вместо other написать oth)
* *if(slf.npctype == NPCTYPE_FRIEND) && (Npc_IsPlayer(other))
* *{
* * * *return FALSE;
* *};
* *// если НПС имеет дело с "крутым парнем" и агрессор сражается оружием ближнего радиуса поражения
* *if(C_NpcIsToughGuy(slf)) && (Npc_IsInFightMode(oth,FMODE_MELEE))
* *{
* * * *return FALSE;
* *};
* *// если отношения между агрессором и целью дружественны
* *if(Npc_GetAttitude(slf,oth) == ATT_FRIENDLY)
* *{
* * * *return FALSE;
* *};
* *// если цель является охранником ворот
* *if(C_NpcIsGateGuard(slf))
* *{
* * * *return FALSE;
* *};
* *// если агрессор сражается кулаками
* *if(Npc_IsInFightMode(oth,FMODE_FIST)) * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *{
* * * *return FALSE;
* *};
* *// если агрессор использует магию и категория используемого заклинания безвредна
* *if(Npc_IsInFightMode(oth,FMODE_MAGIC) && (Npc_GetActiveSpellCat(oth) != SPELL_BAD))
* *{
* * * *return FALSE;
* *};
* *// если цель Черный маг или орк
* *if((slf.guild == GIL_DMT) ¦¦ (slf.guild == GIL_ORC))
* *{
* * * *return FALSE;
* *}; *
* *return TRUE;
};

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