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