Показать сообщение отдельно
Старый 22.01.2005, 16:31   #78
Vam

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

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

Тема вторая: Классы.
Предварительное рассмотрение классов было в начале уроков. Сейчас мы рассмотрим классы подробно.
Все классы описаны в файле ..\_intern\Classes.d

const int MAX_CHAPTER * *= 5; * //Макс. количество глав в игре (не используется)
const int MAX_MISSIONS * = 5; * //Макс. количество одновременно выполняемых миссий
const int MAX_HITCHANCE *= 5; * //Макс. размерность массива способностей владения видами оружия

// Класс параметров НПС
CLASS C_NPC
{
* *var int * * id; * * * * * * * * * * * * //Однозначный идентификатор, связывающий конкретного НПС с его параметрами
* *var string *name[5]; * * * * * * * * * *//Имя НПС, оно появляется на экране, если НПС находится в фокусе
* *var string *slot; * * * * * * * * * * * //(не используется) Можно использовать для хранения какой-нибудь строки текста!
* *var string *effect; * * * * * * * * * * //Имя визуального эффекта, привязанного к НПС
* *var int * * npcType; * * * * * * * * * *//Тип НПС (описывается в файле ..AI\AI_Intern\AI_Constants.d)
* *var int * * flags; * * * * * * * * * * *//Флаги НПС (NPC_FLAG_IMMORTAL, NPC_FLAG_GHOST)
* *var int * * attribute[ATR_INDEX_MAX]; * //Массив значений атрибутов (ATR_HITPOINTS, ATR_MANA, ATR_STRENGTH и т.д.)
* *var int * * HitChance[MAX_HITCHANCE]; * //Способность владения НПС определенным оружием
* *var int * * protection[PROT_INDEX_MAX]; //Массив значений защиты от определенных повреждений
* *var int * * damage[DAM_INDEX_MAX]; * * *//Массив значений наносимых повреждений
* *var int * * damagetype; * * * * * * * * //Тип повреждения (НПС наносит в данный момент)
* *var int * * guild; * * * * * * * * * * *//Принадлежность к гильдии
* *var int * * level; * * * * * * * * * * *//Уровень НПС
* *var func * *mission[MAX_MISSIONS]; * * *//(не используется)
* *var int * * fight_tactic; * * * * * * * //Тактика сражения (описывается в файле ..AI\AI_Intern\AI_Constants.d)
* *var int * * weapon; * * * * * * * * * * //(не используется)
* *var int * * voice; * * * * * * * * * * *//Номер голоса в диалогах
* *var int * * voicePitch; * * * * * * * * //Тональность голоса
* *var int * * bodymass; * * * * * * * * * //(не используется)
* *var func * *daily_routine; * * * * * * *//Функция распорядка дня
* *var func * *start_aistate; * * * * * * *//Функция начального AI состояния (ZS_ функции)
* *var string *spawnPoint; * * * * * * * * //Имя Waypoint, в котором рождается НПС
* *var int * * spawnDelay; * * * * * * * * //Задержка в секундах между смертью и возрождением НПС
* *var int * * senses; * * * * * * * * * * //Чувства (зрение, слух, обоняние)
* *var int * * senses_range; * * * * * * * //Диапазон чувств в см.
* *var int * * aivar[100]; * * * * * * * * //Массив значений AI переменных (описывается в файле ..AI\AI_Intern\AI_Constants.d), неиспользуемые индуксы могут использоваться для собственных целей.
* *var string *wp; * * * * * * * * * * * * //Текущий Waypoint, в котором находится НПС (отслеживается Gothic.exe)
* *var int * * exp; * * * * * * * * * * * *//Количество полученной экспы (только для ГГ)
* *var int * * exp_next; * * * * * * * * * //Количество экспы оставшееся до следующего уровня (только для ГГ)
* *var int * * lp; * * * * * * * * * * * * //Свободные очки обучения (только для ГГ)
* *var int * * bodyStateInterruptableOverride; //Флаг возможности прерывания действия НПС (если TRUE - НПС прервать нельзя)
* *var int * * noFocus; * * * * * * * * * *//Флаг, отвечающий за фокус (если TRUE и НПС находится в фокусе, то у НПС не показывается имя и количество жизни)
}; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

// Класс Миссий (не используется) * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CLASS C_Mission * * * * * * * * * * * * * * * * * * * * * *
{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *var string *name;
* *var string *description;
* *var int * * duration;
* *var int * * important;
* *var func * *offerConditions;
* *var func * *offer;
* *var func * *successConditions;
* *var func * *success;
* *var func * *failureConditions;
* *var func * *failure;
* *var func * *obsoleteConditions;
* *var func * *obsolete;
* *var func * *running;
}; * * * * * * * * * * * * * * * * * * * * * * *

// Класс параметров предмета
CLASS C_Item
{
* *var int * * id; * * * * * * * * * * * * //Однозначный идентификатор, связывающий конкретный предмет с его параметрами
* *var string *name; * * * * * * * * * * * //Имя предмета, оно появляется на экране, если предмет находится в фокусе
* *var string *nameID; * * * * * * * * * * //(не используется) Можно использовать для хранения какой-нибудь строки текста!
* *var int * * hp,hp_max; * * * * * * * * *//???
* *var int * * mainflag; * * * * * * * * * //Флаги категории предмета
* *var int * * flags; * * * * * * * * * * *//Остальные флаги предметов
* *var int * * weight,value; * * * * * * * //Вес и стоимость предмета
* *var int * * damageType; * * * * * * * * //Тип наносимого повреждения (используется для оружия)
* *var int * * damageTotal; * * * * * * * *//Суммарное повреждение (используется для оружия)
* *var int * * damage[DAM_INDEX_MAX]; * * *//Величина ущерба по типам повреждений (используется для оружия)
* *var int * * wear; * * * * * * * * * * * //Флаги ношения предмета
* *var int * * protection[PROT_INDEX_MAX]; //Величина защиты от конкретных повреждений (используется для брони)
* *var int * * nutrition; * * * * * * * * *//(не используется)
* *var int * * cond_atr[3]; * * * * * * * *//Массив атрибутов, требуемых для применения
* *var int * * cond_value[3]; * * * * * * *//Массив значений атрибутов, требуемых для применения
* *var int * * change_atr[3]; * * * * * * *//(не используется)
* *var int * * change_value[3]; * * * * * *//(не используется)
* *var func * *magic; * * * * * * * * * * *//(не используется)
* *var func * *on_equip; * * * * * * * * * //Функция вызываемая при экипировке
* *var func * *on_unequip; * * * * * * * * //Функция вызывается, когда предмет снимается или убирается в инвентарь
* *var func * *on_state[4]; * * * * * * * *//Функции вызываемые при использовании предмета по видам состояний (видов состояний не обнаружил ???)
* *var func * *owner; * * * * * * * * * * *//Владелец предмета, записывается ID НПС (не понятен тип переменной FUNC ???)
* *var int * * ownerGuild; * * * * * * * * //Какой гильдии принадлежит предмет
* *var int * * disguiseGuild; * * * * * * *//(не используется)
* *var string *visual; * * * * * * * * * * //Имя .3DS файла текстур предмета
* *var string *visual_change; * * * * * * *//Имя .ASC файла визуальных эффектов при получении этого предмета
* *var string *effect; * * * * * * * * * * //Имя визуального эффекта, привязанного к предмету
* *var int * * visual_skin; * * * * * * * *//Вариация текстуры для .3DS файла текстур предмета
* *var string *scemeName; * * * * * * * * *//Внутреннее имя предмета
* *var int * * material; * * * * * * * * * //Материал предмета
* *var int * * munition; * * * * * * * * * //Тип заряда для оружия дальнего радиуса поражения
* *var int * * spell; * * * * * * * * * * *//Номер заклинания, которое вызывает данный предмет
* *var int * * range; * * * * * * * * * * *//Радиус поражения оружием ближнего боя
* *var int * * mag_circle; * * * * * * * * //Круг магии, к которому принадлежит предмет
* *var string *description; * * * * * * * *//Название предмета в инвентаре
* *var string *text[ITM_TEXT_MAX]; * * * * //Массив строк описания предмета в инвентаре
* *var int * * count[ITM_TEXT_MAX]; * * * *//Массив значений характеристик предмета в инвентаре (соответствует определенной текстовой строке)
* *// Характеристики изображения предмета в инвентаре
* *var int * * inv_zbias; * * * * * * * * *//Масштаб предмета в инвентаре
* *var int * * inv_rotx; * * * * * * * * * //Поворот предмета в инвентаре относительно оси X
* *var int * * inv_roty; * * * * * * * * * //Поворот предмета в инвентаре относительно оси Y
* *var int * * inv_rotz; * * * * * * * * * //Поворот предмета в инвентаре относительно оси Z
* *var int * * inv_animate; * * * * * * * *//Вращение предмета в инвентаре
}; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// Класс параметров фокуса
CLASS C_Focus * * * * * * * * * * * * * * * * * * * * * * *
{ * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *// для НПС * * * * * * * * * * * * * * * * * * * * *
* *var float * npc_longrange; * * * * * * *//Ширина
* *var float * npc_range1,npc_range2; * * *//Диапазон дальности
* *var float * npc_azi; * * * * * * * * * *//Азимут
* *var float * npc_elevdo,npc_elevup; * * *//Тангаж
* *var int * * npc_prio; * * * * * * * * * //Приоритет
* *// для предметов * * * * * * * * * * * * * * * * * * * * * *
* *var float * item_range1,item_range2; * *//Диапазон дальности
* *var float * item_azi; * * * * * * * * * //Азимут
* *var float * item_elevdo,item_elevup; * *//Тангаж
* *var int * * item_prio; * * * * * * * * *//Приоритет
* *// для MOB's * * * * * * * * * * * * * * * * * * * * * *
* *var float * mob_range1,mob_range2; * * *//Диапазон дальности
* *var float * mob_azi; * * * * * * * * * *//Азимут
* *var float * mob_elevdo,mob_elevup; * * *//Тангаж
* *var int * * mob_prio; * * * * * * * * * //Приоритет
};

// Класс параметров диалогов
CLASS C_INFO
{
* *var int * * npc; * * * * * * * * * * * *//ID НПС, которому принадлежит диалог
* *var int * * nr; * * * * * * * * * * * * //???
* *var int * * important; * * * * * * * * *//Флаг начала диалога (TRUE - диалог начинаешь ты, FALSE - с тобой)
* *var func * *condition; * * * * * * * * *//Функция проверки условий начала диалога (пока функция не возвратит TRUE, диалог не начнется)
* *var func * *information; * * * * * * * *//Функция управления диалогом
* *var string *description; * * * * * * * *//Строка, которая выводится в окно выбора вариантов ответов
* *var int * * trade; * * * * * * * * * * *//Возможность торговли (TRUE - возможно торговать, FALSE - нет)
* *var int * * permanent; * * * * * * * * *//Постоянность диалога (TRUE - диалог повторяется при каждом обращении, FALSE - однократный)
};

// Класс реакций на предметы (не используется)
CLASS C_ITEMREACT
{
* *var int * * npc;
* *var int * * trade_item;
* *var int * * trade_amount;
* *var int * * requested_cat;
* *var int * * requested_item;
* *var int * * requested_amount;
* *var func * *reaction;
};

// Класс параметров заклинаний
CLASS C_Spell
{
* *var float * time_per_mana; * * * * * * *//Время в мс, требуемое для инвестирования маны на один уровень
* *var int * * damage_per_level; * * * * * //Наносимый урон за уровень заклинания
* *var int * * damageType; * * * * * * * * //Тип повреждения
* *var int * * spellType; * * * * * * * * *//Категория заклинания
* *var int * * canTurnDuringInvest; * * * *//Возможность поворота во время инвестирования маны (TRUE - возможно)
* *var int * * canChangeTargetDuringInvest; * *//Возможность выбора цели во время инвестирования маны (TRUE - возможно)
* *var int * * isMultiEffect; * * * * * * *//Возможность мультиэффектов заклинания (множественные цели и др.)
* *var int * * targetCollectAlgo; * * * * *//Константа описания цели
* *var int * * targetCollectType; * * * * *//Тип цели заклинания
* *var int * * targetCollectRange; * * * * //Дальность действия
* *var int * * targetCollectAzi; * * * * * //Угол азимута
* *var int * * targetCollectElev; * * * * *//Угол тангажа
};

// ************************************************** **********
// Глобальные ссылки на классы
// ************************************************** **********

// Сам НПС и Другой НПС
INSTANCE self,other(C_NPC);

// НПС - жертва определенного действия (3ий в действии)
INSTANCE victim(C_NPC);

// Сам предмет
INSTANCE item(C_Item);

// Сам ГГ (игрок)
INSTANCE hero(C_NPC);

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