Показать сообщение отдельно
Старый 04.04.2005, 10:47   #135
Vam

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

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

// *************************************************
// Отказывается ли НПС от предлагаемого разговора
// *************************************************

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

func int C_RefuseTalk(var C_NPC slf,var C_NPC oth)
{
* *// если НПС не может говорить и он охраняет ворота и он не выдавал предупреждений
* *if(Npc_RefuseTalk(slf) == TRUE) && (C_NpcIsGateGuard(slf)) && (slf.aivar[AIV_Guardpassage_Status] == GP_NONE)
* *{
* * * *return TRUE;
* *};
* *
* *// если НПС с ГГ не разговаривал и НПС находится от своего вайпоинта далее 5м
* *if(slf.aivar[AIV_TalkedToPlayer] == FALSE) && (Npc_GetDistToWP(slf,slf.wp) > 500)
* *{
* * * *// если НПС Лотар
* * * *if(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Lothar))
* * * *{
* * * * * *return TRUE;
* * * *};
* *};
* *// если НПС определил, что ГГ член подставной гильдии и НПС неуязвимый (Примечание: необходимо self заменить на slf)
* *if(C_PlayerHasFakeGuild(slf,oth) && (self.flags != NPC_FLAG_IMMORTAL)
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

... ещё файл

// *************************************
// Должен ли НПС атаковать убийцу
// *************************************

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

func int C_WantToAttackMurder(var C_NPC slf,var C_NPC oth)
{
* *// если НПС Черный маг или Заключенный или Охотник на драконов или Бандит
* *if(slf.guild == GIL_DMT) ¦¦ (slf.guild == GIL_STRF) ¦¦ (slf.guild == GIL_DJG) ¦¦ (slf.guild == GIL_BDT) *
* *{
* * * *return FALSE;
* *};
* *// если НПС игнорирует убийство
* *if(slf.aivar[AIV_IGNORE_Murder] == TRUE)
* *{
* * * *return FALSE;
* *};
* *// если убийца ГГ и НПС ему друг
* *if(Npc_IsPlayer(oth) && (slf.npctype == NPCTYPE_FRIEND))
* *{
* * * *return FALSE;
* *};
* *// если НПС убийца должен быть убить цель
* *if(C_NpcHasAttackReasonToKill(oth))
* *{
* * * *return FALSE;
* *};
* *// если НПС охраняет ворота
* *if(C_NpcIsGateGuard(slf))
* *{
* * * *return FALSE;
* *};
* *return TRUE;
};

... ещё файл

// ************************************************** ******
// Должен ли НПС напасть на незваного гостя
// ************************************************** ******

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

func int C_WantToAttackRoomIntruder(var C_NPC slf)
{
* *// Примечание: необходимо во всей функции self заменить на slf.
* *// если НПС Милиционер или Паладин или Наемник или Охотник на драконов или ГГ имеет совершенный криминал
* *if(self.guild == GIL_MIL) ¦¦ (self.guild == GIL_PAL) ¦¦ (self.guild == GIL_SLD) ¦¦ (self.guild == GIL_DJG) ¦¦ (B_GetPlayerCrime(self) != CRIME_NONE)
* *{
* * * *return TRUE;
* *};
* *return FALSE;
};

... ещё файл

// **************************************
// Должен ли НПС атаковать убийцу овец
// **************************************

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

func int C_WantToAttackSheepKiller(var C_NPC slf,var C_NPC oth)
{
* *// если НПС Черный маг или Заключенный или Бандит или Охотник на драконов
* *if(slf.guild == GIL_DMT) ¦¦ (slf.guild == GIL_STRF) ¦¦ (slf.guild == GIL_BDT) ¦¦ (slf.guild == GIL_DJG)
* *{
* * * *return FALSE;
* *};
* *// если НРС игнорирует убийство овец
* *if(slf.aivar[AIV_IGNORE_Sheepkiller] == TRUE)
* *{
* * * *return FALSE;
* *};
* *// если убийца ГГ и НПС ему друг
* *if(Npc_IsPlayer(oth) && (slf.npctype == NPCTYPE_FRIEND))
* *{
* * * *return FALSE;
* *};
* *// если убийца должен был убить овцу
* *if(C_NpcHasAttackReasonToKill(oth))
* *{
* * * *return FALSE;
* *};
* *// если убийца человек и у него была причина нападения (Примечание: необходимо other заменить на oth)
* *if(other.guild < GIL_SEPERATOR_HUM) && (other.aivar[AIV_ATTACKREASON] != AR_NONE)
* *{
* * * *return FALSE;
* *};
* *// если НПС охраняет ворота
* *if(C_NpcIsGateGuard(slf))
* *{
* * * *return FALSE;
* *};
* *return TRUE;
};

... ещё файл

// ******************************************
// Должен ли НПС атаковать вора
// ******************************************

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

func int C_WantToAttackThief(var C_NPC slf,var C_NPC oth)
{
* *// если НПС Черный ман или Заключенный или Охотник на драконов
* *if(slf.guild == GIL_DMT) ¦¦ (slf.guild == GIL_STRF) ¦¦ (slf.guild == GIL_DJG)
* *{
* * * *return FALSE;
* *};
* *// если НПС не реагирует на воровство
* *if(slf.aivar[AIV_IGNORE_Theft] == TRUE)
* *{
* * * *return FALSE;
* *};
* *// если НПС проиграл последнее сражение с ГГ
* *if(slf.aivar[AIV_LastFightAgainstPlayer] == FIGHT_LOST)
* *{
* * * *return FALSE;
* *};
* *// если вор ГГ и НПС ему друг
* *if(Npc_IsPlayer(oth) && (slf.npctype == NPCTYPE_FRIEND))
* *{
* * * *return FALSE;
* *};
* *// если НПС охраняет ворота
* *if(C_NpcIsGateGuard(slf))
* *{
* * * *return FALSE;
* *};
* *return TRUE;
};

... ещё файл

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

func int C_WantToFlee(var C_NPC slf,var C_NPC oth)
{
* *// никогда не убегает!!!
* *return FALSE;
};

... ещё файл

// *********************************
// Должен ли НПС обыскать тело
// *********************************

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

func int C_WantToRansack(var C_NPC slf)
{
* *// если НРС друг ГГ и тело есть ГГ
* *if(slf.npctype == NPCTYPE_FRIEND) && (Npc_IsPlayer(other))
* *{
* * * *return FALSE;
* *};
* *// если НПС Равен
* *if(Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(Raven))
* *{
* * * *return FALSE;
* *};
* *// если НПС Черный маг или Орк или Паладин или Маг огня или Послушник или Маг воды
* *if(slf.guild == GIL_DMT) ¦¦ (slf.guild == GIL_ORC) ¦¦ (slf.guild == GIL_PAL) ¦¦ (slf.guild == GIL_KDF) ¦¦ (slf.guild == GIL_NOV) ¦¦ (slf.guild == GIL_KDW)
* *{
* * * *return FALSE;
* *};
* *return TRUE;
};

... ещё файл

// **********************************************
// Должен ли НПС реагировать на крадущегося ГГ
// **********************************************

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

func int C_WantToReactToSneaker(var C_NPC slf,var C_NPC oth)
{
* *// если расстояние между НПС и ГГ > 7м
* *if(Npc_GetDistToNpc(slf,oth) > 700)
* *{
* * * *return FALSE;
* *};
* *// если НПС Черный маг или Заключенный или Бандит и НПС не принадлежит к Лагерю бандитов
* *if(slf.guild == GIL_DMT) ¦¦ (slf.guild == GIL_STRF) ¦¦ ((slf.guild == GIL_BDT) && !C_NpcBelongsToBL(slf))
* *{
* * * *return FALSE;
* *};
* *// если НПС друг ГГ и ГГ крадется
* *if(slf.npctype == NPCTYPE_FRIEND) && (Npc_IsPlayer(oth))
* *{
* * * *return FALSE;
* *};
* *// если отношения между НПС и крадущимся НПС дружеские
* *if(Npc_GetAttitude(slf,oth) == ATT_FRIENDLY)
* *{
* * * *return FALSE;
* *};
* *// если НПС охраняет ворота (Примечание: необходимо self заменить на slf)
* *if(C_NpcIsGateGuard(self))
* *{
* * * *return FALSE;
* *};
* *return TRUE;
};

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