• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 574
Последнее редактирование модератором:

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Флаги ITEM_KAT_xxx и ITEM_xxx хранятся вместе или разные? просмотрел все предметы в игре: ITEM_KAT_xxx используются как mainflag. ITEM_xxx как flags.

Вот отсортированный список: (выглядит так, как будто все 32 бита заняты)

const int ITEM_KAT_NONE = 1;
const int ITEM_KAT_KEYS = 1;
const int ITEM_KAT_NF = 2;
const int ITEM_KAT_FF = 4;
const int ITEM_KAT_MUN = 8;
const int ITEM_KAT_ARMOR = 16;
const int ITEM_KAT_FOOD = 32;
const int ITEM_KAT_DOCS = 64;
const int ITEM_KAT_POTIONS = 128;
const int ITEM_KAT_LIGHT = 256;
const int ITEM_KAT_RUNE = 512; // 1 << 9 = 512

const int ITEM_DROPPED = 1 << 10;
const int ITEM_RING = 1 << 11;
const int ITEM_MISSION = 1 << 12;
const int ITEM_DAG = 1 << 13;
const int ITEM_SWD = 1 << 14;
const int ITEM_AXE = 1 << 15;
const int ITEM_2HD_SWD = 1 << 16;
const int ITEM_2HD_AXE = 1 << 17;
const int ITEM_SHIELD = 1 << 18;
const int ITEM_BOW = 1 << 19;
const int ITEM_CROSSBOW = 1 << 20;
const int ITEM_MULTI = 1 << 21;
const int ITEM_AMULET = 1 << 22;
const int ITEM_NFOCUS = 1 << 23;
const int ITEM_BELT = 1 << 24;
const int ITEM_CREATEAMMO = 1 << 25;
const int ITEM_NSPLIT = 1 << 26;
const int ITEM_DRINK = 1 << 27;
const int ITEM_TORCH = 1 << 28;
const int ITEM_THROW = 1 << 29;
const int ITEM_ACTIVE = 1 << 30;

const int ITEM_KAT_MAGIC = 1 << 31;

Неужели все 32 бита заняты? я хотел ввести свои флаги для предметов.
Или все-таки ITEM_KAT_xxx хранятся отдельно а ITEM_xxx - отдельно.
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
maggi1221, в игре не все флаги используются. ITEM_DAG, ITEM_SHIELD и ITEM_THROW можно использовать под свои нужды. Главное случайно ITEM_NFOCUS не заюзать - он двигом используется.
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Еще 1 вопрос:
class C_Item
{
var int id;
var string name;
var string nameID;
var int hp;
var int hp_max;
var int mainflag;
var int flags;
var int weight;
var int 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;
var int ownerGuild;
var int disguiseGuild;
var string visual;
var string visual_change;
var string effect;
var int visual_skin;
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[6];
var int count[6];
var int inv_zbias;
var int inv_rotx;
var int inv_roty;
var int inv_rotz;
var int inv_animate;
};
Каково подробное описание его полей? Хотелось бы найти неиспользуемые в игре поля и использовать их.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Флаги ITEM_KAT_xxx и ITEM_xxx хранятся вместе или разные? просмотрел все предметы в игре: ITEM_KAT_xxx используются как mainflag. ITEM_xxx как flags.

ITEM_KAT_xxx - это, как я понимаю, категория инвентаря, в которой будет располагаться предмет.
Т.е. оружие ближнего радиуса поражения - первое,
Дальнего радиуса поражения - второе,
стрелы и болты - третьи,
дальше кажется идёт броня
и т.д.

ITEM_xxx - это конкретный тип вещи. Это просто дополнительный(ые) флаг(и) вещи, конкретизирующий(ие) её.

Ну с категорией экспериментировать почти нечего, а вот с флагами попробуй. Есть интересные моменты...

Я кстати тоже тут недавно поинтересовался некоторыми особенностями флагов для своих нужд, чисто для теста. Столкнулся с проблемой положения вещей в инвентаре. Т.е. вещи располагались не в том порядке, каком мне хотелось бы. Пришлось переделать флаги у всей пищи. Теперь норм. Смешно только над кривизной движка. Просто нет слов.

Неужели все 32 бита заняты? я хотел ввести свои флаги для предметов.
Или все-таки ITEM_KAT_xxx хранятся отдельно а ITEM_xxx - отдельно.
Ты можешь создать свою константу и присвоить любое свободное свойство предмета ей. Единственная проблема - это поиск свободного места или не занятых свойств.
Можно просто присвоить свойству флага значение этой константы. А если предмет не будет работать как надо, то можно ввести одну хитрость, которая позволяет управлять предметами - это функция, вызываемая при экипировке предмета. Можно экипировку как таковую не делать, а просто выполнить нужные действия. Ну это уже на крайний случай. А м.б. и несколько флагов вместе сработают как надо. Тут надо тестировать... Всё зависит от конкретной задачи.
Каково подробное описание его полей? Хотелось бы найти неиспользуемые в игре поля и использовать их.
В справочнике "Уроки скриптологии" есть то, что ты ищешь.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
maggi1221, в игре не все флаги используются. ITEM_DAG, ITEM_SHIELD и ITEM_THROW можно использовать под свои нужды. Главное случайно ITEM_NFOCUS не заюзать - он двигом используется.
Не вводи людей в заблуждение, ITEM_NFOCUS двиг юзает да, но юзать его для своих целей никто не запрещал=)
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
Saturas, не издевайся над человеком, а то после твоих советов он долго будет пытаться понять, что за плюшка такая, что даже фокус на нее не наводится;)
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Кто-нибудь уже пытался добавлять поля в C_Item? возможно ли это?
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Невозможно. Это же класс, определяемый движком. А в скриптах ни переопределить класс, ни создать новый невозможно. Вот, если бы был не делалус, а луи, тогда бы другое дело...
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Jr13San,
Столкнулся с проблемой положения вещей в инвентаре. Т.е. вещи располагались не в том порядке, каком мне хотелось бы. Пришлось переделать флаги у всей пищи. Теперь норм.
А параметра из Gothic.ini было недостаточно?
invCatOrder=COMBAT,POTION,FOOD,ARMOR,MAGIC,RUNE,DOCS,OTHER,NONE
; ... determins the inventory item group order.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
А параметра из Gothic.ini было недостаточно?
invCatOrder=COMBAT,POTION,FOOD,ARMOR,MAGIC,RUNE,DOCS,OTHER,NONE
; ... determins the inventory item group order.

Нет, я не использую этот файл настроек как какой-то инструмент. Так, некоторые параметры установил, в остальном он что есть - что нет.
Gothic.ini - файл, который предназначен для общих настроек проекта Готика, а не для каждого отдельного мода или проекта. Поэтому иногда можно забыть про эти настройки, когда тест будет происходить на другой машине.
Да и удобнее было выделить специальный флаг для предметов. Не знаю почему, но пока что проблем не заметил. Всё как было, так и осталось. Единственное, что изменилось - это положение предметов в инвентаре.
Спасибо, что сказал про опцию, возьму на заметку.

Единственное, что убивает весь интерес экспериментов - это статическая реализация возможностей в анимации. Факт того, что вставить предмет в "ZS_" слот можно только используя Mob-объект или предмет взаимодействия с набором анимаций - это просто беда. :-\
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Кто-нибудь уже пытался добавлять поля в C_Item? возможно ли это?
Если есть знания С++ то добавляй хоть новые поля, хоть целые классы, G2ext в помощ...

Единственное, что убивает весь интерес экспериментов - это статическая реализация возможностей в анимации. Факт того, что вставить предмет в "ZS_" слот можно только используя Mob-объект или предмет взаимодействия с набором анимаций - это просто беда.
Нууу, с таким подходом вообще смысла модингом заниматся невижу....
С помощью екста/икаруса в ZS_ bip01_ и тд можно ставитьЧТО угодно, и когда угодно.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Лучше вообще никак не делать, чем использовать эти костыли, даже хуже чем костыли...
Ещё хуже - это использовать большой по объёму код или делать большую работу.

Или если хочется создать свой проект, но времени мало и нет уверенности в том, что проект будет доделан до конца, то лучше написать рассказ и прикрепить картинки к нему... :-\
Это для тех, кого ещё не так глубоко затянуло в моддинг.

maggi1221,
Кстати, новый класс создать можно, только при проверке синтаксиса могут быть сообщения о том, что место выделено, а не используется.
Компилируется норм, про работу класса не помню, т.к. не придал этому большого значения.
Т.е. примерно так:
Код:
class C_Help
{
	var int id;
	var string name;
};

instance hlp_01(C_Help)
{
	id = 5;
	name = "Helper";
};

//Потом, например, через зелье вызови функцию для проверки содержимого:

instance ItPo_Mana_01(C_Item)
{
	name = NAME_Trank;
	mainflag = ITEM_KAT_POTIONS;
	flags = ITEM_MULTI;
	value = Value_ManaEssenz;
	visual = "ItPo_Mana_01.3ds";
	material = MAT_GLAS;
	on_state[0] = UseItPo_Mana_01;
	scemeName = "POTIONFAST";
	wear = WEAR_EFFECT;
	effect = "SPELLFX_MANAPOTION";
	description = "Эссенция маны";
	text[1] = NAME_Bonus_Mana;
	count[1] = Mana_Essenz;
	text[5] = NAME_Value;
	count[5] = Value_ManaEssenz;
};


func void UseItPo_Mana_01()
{
	Print(IntToString(hlp_01.id));
	Print(hlp_01.name);
};

//И в инвентарь ГГ не забудь положить.
Если на экране что-то будет, отличное от нуля и пустого значения, то значит работает.
Попробуй, мб у тебя что-то получится...

Также можно попробовать создать копию любого класса, создать инстанции, приравнять, например, так:

Код:
var C_NPC npc_01;//старый класс
var C_NPC2 npc_02;//новый 

npc_02 = npc_01;
Возможно, что нельзя приравнять из за разности классов.
Не пробовал, точно сказать не могу.

А то, что свойства изменять можно в процессе - это не на долго. Буквально после загрузки все изменённые свойства станут по-старому.
Спасает только таймер с определёнными флагами, заранее продуманными.

Да, и лучше не мучиться с новыми классами, а можно просто создать несколько переменных для конкретных случаев и использовать их. Некоторые можно даже использовать повторно. Тут уже на своё усмотрение.
Сейчас есть метод хранения значения нескольких переменных в одной. Что-то наподобие хранения RGB составляющих в одной переменной. Там заполнение идёт от большего к меньшему. Подробнее см. в wiki. Тем более битовых флагов. Если интересно, то могу кое-что подсказать.
Как пример, вот:
Goth_Var_Realize.bmp
Правда давно уже делал...
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
Невозможно. Это же класс, определяемый движком. А в скриптах ни переопределить класс, ни создать новый невозможно. Вот, если бы был не делалус, а луи, тогда бы другое дело...
Ну, новую AI_Var добавить-то хоть можно хотя бы в класс C_NPC? читал старые посты где-то, там у нпц было 50 aivars, сейчас их 100...
В луа нет классов как таковых, хотя их можно реализовать...он очень гибкий...

и еще:
оказывается, что можно изменять параметры вещи во время выполнения. Пример применения: использованные ключи помечать каким-то образом в инвентаре, например "ключ от сундука декстера - использован"...
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Ну, новую AI_Var добавить-то хоть можно хотя бы в класс C_NPC? читал старые посты где-то, там у нпц было 50 aivars, сейчас их 100...
В луа нет классов как таковых, хотя их можно реализовать...он очень гибкий...

и еще:
оказывается, что можно изменять параметры вещи во время выполнения. Пример применения: использованные ключи помечать каким-то образом в инвентаре, например "ключ от сундука декстера - использован"...

Добавить можно, свободно около 11 аиваров, так что дерзай.

Bump:
Лучше вообще никак не делать, чем использовать эти костыли, даже хуже чем костыли...
Костыли/ не костыли, лично немцы их юзаю чуть более чем везде, и никто не жалуется, все довольны, ты готик мультиплеер видил?)
Так вот, ты не поверишь, но это полностью реализации на ексте(только не том что выложен, а тот на котором базировался проект мультиплеера немецкий)
И заметь, работает вполне стабильно, так что зря ты так.....
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Костыли/ не костыли, лично немцы их юзаю чуть более чем везде, и никто не жалуется, все довольны, ты готик мультиплеер видил?)
Так вот, ты не поверишь, но это полностью реализации на ексте(только не том что выложен, а тот на котором базировался проект мультиплеера немецкий)
И заметь, работает вполне стабильно, так что зря ты так.....
Как-то видел это не нужное создание. Думаю людям просто нечем заняться было.
Есть, конечно, нормальные проекты как у немцев, так и у других, но мультиплеер - это уже слишком. Кто-то с форума писал о рейдах на РБ. Понятно к чему это клонит. Хотя мб движение идёт ближе к Руне или другим похожим проектам.

maggi1221, причём хотят выделять сервера для этого мультиплеера...
Не знаю, мб ты фанат линейки или как, но я лично нет.
Ладно, заканчиваю офф топ.
 

maggi1221

Участник форума
Регистрация
7 Окт 2010
Сообщения
218
Благодарности
4
Баллы
165
SA:MP, MTA - примеры популярных мультиплееров на основе Гта сан андреас (Singleplayer)
как это работает? коряво! но фанаты играют....

Кто-то с форума писал о рейдах на РБ
лол...

не, мультиплеер готики 2 - это маразм....

Спасает только таймер с определёнными флагами, заранее продуманными.
поподробнее можно?

Добавить можно, свободно около 11 аиваров, так что дерзай.
может составим список и положим его в шапку темы? может кому-нибудь понадобится...

Сейчас есть метод хранения значения нескольких переменных в одной.
Если бы в редакторе Vam'a были бы макросы - было бы просто супер....

Единственное, что убивает весь интерес экспериментов - это статическая реализация возможностей в анимации. Факт того, что вставить предмет в "ZS_" слот можно только используя Mob-объект или предмет взаимодействия с набором анимаций - это просто беда. :-\
можно сделать DummyInvisible Mob Object с кучей анимаций. Попробуй, что из этого выйдет)
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Jr13San,
Gothic.ini - файл, который предназначен для общих настроек проекта Готика, а не для каждого отдельного мода или проекта.
Любые параметры gothic.ini можно перенсти в ini мод файла.

[OVERRIDES]
GAME.invCatOrder=COMBAT,POTION,FOOD,ARMOR,MAGIC,RUNE,DO CS,OTHER,NONE
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Если бы в редакторе Vam'a были бы макросы - было бы просто супер....

Я пытался, в свое время, убедить vam'а в нужности макросов в соурсере (когда он собирал пожелания), но убедить не сумел, а никто меня в этом не поддержал. =(
 
Сверху Снизу