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

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

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

MaGoth

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

Вложения

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

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Вопрос открыт. Для чего классам C_Npc и C_Item нужны поля id?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Неписям нужно для распорядков дня. У итемов это поле не использовано.
 

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
546
Баллы
245
InstanceID наверное тоже.
Вот эта инстанция в байт-коде дат-файла. Обрати внимание на ее индекс. Такой же как у тебя на картинке. Что и требовалось доказать.
Код:
-------------------------------------------------
Index = 0x00001b31  (6961)
Name = ITMI_GOLD
Flags = 1 000001 0111 000000000000  FLAG_CONST, TYPE_INSTANCE, 0 value(s)
StackOffset = 0x00029729  (169769)
Parent = 1522  (C_ITEM)
P-code:
00029729  41 1A 83 00 00    PUSH_VAR       я14534 //"Золото"
0002972E  41 F4 05 00 00    PUSH_VAR       C_ITEM.NAME  //TYPE_STRING
00029733  46                ASSIGN_STRING
00029734  41 DC 03 00 00    PUSH_VAR       ITEM_KAT_NONE  //TYPE_INT
00029739  41 F8 05 00 00    PUSH_VAR       C_ITEM.MAINFLAG  //TYPE_INT
0002973E  09                ASSIGN      
0002973F  41 F5 03 00 00    PUSH_VAR       ITEM_MULTI  //TYPE_INT
00029744  41 F9 05 00 00    PUSH_VAR       C_ITEM.FLAGS  //TYPE_INT
00029749  09                ASSIGN      
0002974A  41 F5 1A 00 00    PUSH_VAR       VALUE_GOLD  //TYPE_INT
0002974F  41 FB 05 00 00    PUSH_VAR       C_ITEM.VALUE  //TYPE_INT
00029754  09                ASSIGN      
00029755  41 1B 83 00 00    PUSH_VAR       я14535 //"ItMi_Gold.3DS"
0002975A  41 0D 06 00 00    PUSH_VAR       C_ITEM.VISUAL  //TYPE_STRING
0002975F  46                ASSIGN_STRING
00029760  41 C4 04 00 00    PUSH_VAR       MAT_STONE  //TYPE_INT
00029765  41 12 06 00 00    PUSH_VAR       C_ITEM.MATERIAL  //TYPE_INT
0002976A  09                ASSIGN      
0002976B  41 F4 05 00 00    PUSH_VAR       C_ITEM.NAME  //TYPE_STRING
00029770  41 17 06 00 00    PUSH_VAR       C_ITEM.DESCRIPTION  //TYPE_STRING
00029775  46                ASSIGN_STRING
00029776  41 77 12 00 00    PUSH_VAR       NAME_VALUE  //TYPE_STRING
0002977B  F5 18 06 00 00 05 PUSH_ARRAYVAR  C_ITEM.TEXT[5]  //TYPE_STRING
00029781  46                ASSIGN_STRING
00029782  41 FB 05 00 00    PUSH_VAR       C_ITEM.VALUE  //TYPE_INT
00029787  F5 19 06 00 00 05 PUSH_ARRAYVAR  C_ITEM.COUNT[5]  //TYPE_INT
0002978D  09                ASSIGN      
0002978E  41 BA 05 00 00    PUSH_VAR       INVCAM_ENTF_MISC2_STANDARD  //TYPE_INT
00029793  41 1A 06 00 00    PUSH_VAR       C_ITEM.INV_ZBIAS  //TYPE_INT
00029798  09                ASSIGN      
00029799  3C                RETURN      
-------------------------------------------------

Вопрос открыт. Для чего классам C_Npc и C_Item нужны поля id?
Ты же к ним доступа из скриптов не имеешь, так какая разница? Можно предположить, что планировался уникальный идентификатор, но впоследствии стали использовать адрес объекта, чем не уникальный идентификатор?
 
Последнее редактирование:

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Разбираюсь дальше с C_Npc. Свойства owner и ownerGuild.

А можно ли назначить сразу несколько владельцев или гильдий или проще воспользоваться порталами и функцией C_IsTakenItemMyPossession? И почему для owner указан тип func?
 

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
546
Баллы
245
И почему для owner указан тип func?
Тип func означает, что переменная будет хранить индекс функции. А так как инстанция тоже функция, то вот пример
класс
Код:
CLASS C_Item
{
   ...
    // Besitzer                                
    VAR FUNC    owner                            ;        //    Besitzer : Instanz-Name  (Владелец: Имя инстанции)
   ...
};
скрипт инстанции
Код:
INSTANCE Holy_Hammer_MIS (C_Item)
{
   ...
    owner = Nov_608_Garwig;
   ...
};
байт-код инстанции
Код:
Name = HOLY_HAMMER_MIS
Parent = 1521  (C_ITEM)
P-code:
    ...
000356E8  40 CE 2B 00 00    PUSH_DWORD     0х00002BCE (11214) это индекс инстанции NOV_608_GARWIG
000356ED  41 09 06 00 00    PUSH_VAR       C_ITEM.OWNER  //TYPE_FUNCTION
000356F2  48                ASSIGN_FUNC  
    ...
 
Последнее редактирование:

rivolf

Участник форума
Регистрация
17 Дек 2011
Сообщения
917
Благодарности
298
Баллы
230
Читал туториалы, но так в итоге и не понял, вот например у меня есть открытые файлы скриптов от возвращение 2.0 я там что-то меняю , как мне всё это потом в игру перенести, принцип работы vdf знаю (т.е смогу создать) но что туда пихать и в каком порядке и как вообще вытянуть файлы которые нужно будет пихать не могу понять :D
 

Friwa

Участник форума
Регистрация
22 Авг 2010
Сообщения
181
Благодарности
14
Баллы
185
Подскажите как реализована выносливость в Ребаланс и возвращении. Хотя бы названия скриптов где копать=)
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
В чем принципиальная разница:

instance ItBe_Addon_Prot_EDGE(C_Item)
{
name = NAME_Addon_Belt;
mainflag = ITEM_KAT_MAGIC;
flags = ITEM_BELT | ITEM_MULTI;
value = Value_ItBE_Addon_Prot_Edge;
visual = "ItMi_Belt_02.3ds";
visual_skin = 0;
material = MAT_METAL;
on_equip = Equip_ItBe_Addon_Prot_EDGE;
on_unequip = UnEquip_ItBe_Addon_Prot_EDGE;
description = "Пояс защиты";
text[2] = NAME_Prot_Edge;
count[2] = BeltBonus_ProtEdge;
text[5] = NAME_Value;
count[5] = value;
inv_zbias = INVCAM_ENTF_AMULETTE_STANDARD;
inv_rotx = INVCAM_ENTF_MISC2_STANDARD;
};


func void Equip_ItBe_Addon_Prot_EDGE()
{
self.protection[PROT_EDGE] += 5;
self.protection[PROT_BLUNT] += 5;

};

и

instance ItBe_Addon_Prot_EDGE(C_Item)
{
name = NAME_Addon_Belt;
mainflag = ITEM_KAT_MAGIC;
flags = ITEM_BELT | ITEM_MULTI;
value = Value_ItBE_Addon_Prot_Edge;
visual = "ItMi_Belt_02.3ds";
visual_skin = 0;
material = MAT_METAL;
on_equip = Equip_ItBe_Addon_Prot_EDGE;
on_unequip = UnEquip_ItBe_Addon_Prot_EDGE;
description = "Пояс защиты";
text[2] = NAME_Prot_Edge;
count[2] = BeltBonus_ProtEdge;
text[5] = NAME_Value;
count[5] = value;
inv_zbias = INVCAM_ENTF_AMULETTE_STANDARD;
inv_rotx = INVCAM_ENTF_MISC2_STANDARD;
protection[PROT_EDGE] = 5;
protection[PROT_BLUNT] = 5;

};
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
В чем принципиальная разница:

instance ItBe_Addon_Prot_EDGE(C_Item)
{
name = NAME_Addon_Belt;
mainflag = ITEM_KAT_MAGIC;
flags = ITEM_BELT | ITEM_MULTI;
value = Value_ItBE_Addon_Prot_Edge;
visual = "ItMi_Belt_02.3ds";
visual_skin = 0;
material = MAT_METAL;
on_equip = Equip_ItBe_Addon_Prot_EDGE;
on_unequip = UnEquip_ItBe_Addon_Prot_EDGE;
description = "Пояс защиты";
text[2] = NAME_Prot_Edge;
count[2] = BeltBonus_ProtEdge;
text[5] = NAME_Value;
count[5] = value;
inv_zbias = INVCAM_ENTF_AMULETTE_STANDARD;
inv_rotx = INVCAM_ENTF_MISC2_STANDARD;
};


func void Equip_ItBe_Addon_Prot_EDGE()
{
self.protection[PROT_EDGE] += 5;
self.protection[PROT_BLUNT] += 5;

};

и

instance ItBe_Addon_Prot_EDGE(C_Item)
{
name = NAME_Addon_Belt;
mainflag = ITEM_KAT_MAGIC;
flags = ITEM_BELT | ITEM_MULTI;
value = Value_ItBE_Addon_Prot_Edge;
visual = "ItMi_Belt_02.3ds";
visual_skin = 0;
material = MAT_METAL;
on_equip = Equip_ItBe_Addon_Prot_EDGE;
on_unequip = UnEquip_ItBe_Addon_Prot_EDGE;
description = "Пояс защиты";
text[2] = NAME_Prot_Edge;
count[2] = BeltBonus_ProtEdge;
text[5] = NAME_Value;
count[5] = value;
inv_zbias = INVCAM_ENTF_AMULETTE_STANDARD;
inv_rotx = INVCAM_ENTF_MISC2_STANDARD;
protection[PROT_EDGE] = 5;
protection[PROT_BLUNT] = 5;

};
Первый вариант немного правильнее, ибо точно произойдёт прибавка и отнятие у одевающего. В случае прибавки функцией во втором варианте, при баге со ссылкой на self, может произойти или неприбавка, или неотнятие. Также во втором варианте банально объявляется лишняя функция. А это с точки зрения программиста лишние ресурсы (мелочь, но культуру надо блюсти).
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
Сорри, перепутал первый вариант и второй.
Neromont, я думаю, ты понял меня. :)
 

gggg12345678!

Участник форума
Регистрация
6 Янв 2016
Сообщения
407
Благодарности
379
Баллы
220
Подскажите как реализована выносливость в Ребаланс и возвращении. Хотя бы названия скриптов где копать=)
В проекте Возвращения или же Ребаланса в поиске ввести stamina и искать.:)
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
ZEN-файл можно использовать в качестве визуализации только для предметов с флагом ITEM_TORCH? Но при извлечении такого предмета, он ясное дело превращается в горящий факел.

Пробовал использовать ZEN-файл с факелом для других категорий, но ZEN не отображается, допустим, если его экипировать :(
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.231
Баллы
525
ZEN-файл можно использовать в качестве визуализации только для предметов с флагом ITEM_TORCH?
В Г1 можно назначить ZEN-виуал предмету, не только факелу. Например, таким образом можно привязать pfx-эффект к модели оружия или к стреле. Но это не работает безглючно. Предмет с ZEN-виуалом, почему-то, не берётся в фокус. Вернее, в фокус-то берётся, его можно поднять, но надпись на экран при попадании предмета в фокус не выводится.
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
В Г1 можно назначить ZEN-виуал предмету, не только факелу. Например, таким образом можно привязать pfx-эффект к модели оружия или к стреле. Но это не работает безглючно. Предмет с ZEN-виуалом, почему-то, не берётся в фокус. Вернее, в фокус-то берётся, его можно поднять, но надпись на экран при попадании предмета в фокус не выводится.

У меня тоже вставляется объект, но если это оружие, то при обнажении, оно не отображается, а так видна и визуализация и фокус.

На что влияет значение WEAR_EFFECT? Вставил две стандартных руны, у одной удалил значение WEAR_EFFECT. Ничего не изменилось.

instance ItRu_TeleportTaverne(C_Item)
{
name = NAME_Rune;
mainflag = ITEM_KAT_RUNE;
flags = 0;
value = Value_Ru_TeleportTaverne;
visual = "ItRu_Teleport_2.3ds";
material = MAT_STONE;
spell = SPL_TeleportTaverne;
wear = WEAR_EFFECT;
effect = "SPELLFX_WEAKGLIMMER";
description = NAME_SPL_TeleportTaverne;
text[1] = NAME_Manakosten;
count[1] = SPL_Cost_Teleport;
text[5] = NAME_Value;
count[5] = value;
};

instance ItRu_Teleport_3(C_Item)
{
name = NAME_Rune;
mainflag = ITEM_KAT_RUNE;
flags = 0;
value = Value_Ru_Teleport_3;
visual = "ItRu_Teleport_3.3ds";
material = MAT_STONE;
spell = SPL_Teleport_3;
effect = "SPELLFX_WEAKGLIMMER";
description = NAME_SPL_Teleport_3;
text[1] = NAME_Manakosten;
count[1] = SPL_Cost_Teleport;
text[5] = NAME_Value;
count[5] = value;
};

Не дублируем посты, читаем правила..
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.716
Баллы
1.625
На что влияет значение WEAR_EFFECT? Вставил две стандартных руны, у одной удалил значение WEAR_EFFECT. Ничего не изменилось.

instance ItRu_TeleportTaverne(C_Item)
{
name = NAME_Rune;
mainflag = ITEM_KAT_RUNE;
flags = 0;
value = Value_Ru_TeleportTaverne;
visual = "ItRu_Teleport_2.3ds";
material = MAT_STONE;
spell = SPL_TeleportTaverne;
wear = WEAR_EFFECT;
effect = "SPELLFX_WEAKGLIMMER";
description = NAME_SPL_TeleportTaverne;
text[1] = NAME_Manakosten;
count[1] = SPL_Cost_Teleport;
text[5] = NAME_Value;
count[5] = value;
};

instance ItRu_Teleport_3(C_Item)
{
name = NAME_Rune;
mainflag = ITEM_KAT_RUNE;
flags = 0;
value = Value_Ru_Teleport_3;
visual = "ItRu_Teleport_3.3ds";
material = MAT_STONE;
spell = SPL_Teleport_3;
effect = "SPELLFX_WEAKGLIMMER";
description = NAME_SPL_Teleport_3;
text[1] = NAME_Manakosten;
count[1] = SPL_Cost_Teleport;
text[5] = NAME_Value;
count[5] = value;
};
Ну, судя по тому что написано - эффект ветра.
т.е. если руна лежит на земле с каким нить эффектом дыма от костра, и этим эффектом, то дым шевелится как у костра от ветра. НО это лишь предположения.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.231
Баллы
525
У меня тоже вставляется объект, но если это оружие, то при обнажении, оно не отображается, а так видна и визуализация и фокус.
Гм, в Г2 у факелов тоже, вроде бы, название в фокусе не выводится. Как тебе удалось получить название в фокусе?
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Закинул в категорию одноручного оружия.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.231
Баллы
525
На что влияет значение WEAR_EFFECT?
Возможно, это как-то связано с исправлением следующего глюка. Когда руна используется, она берётся в слот руки, но 3ds-визуал заменяется на эффект. В Г1, при получении магом повреждения, кратковременно это положение вещей сбрасывается. Эффект исчезает, а визуал снова становится 3ds. В Г2НВ такого не наблюдается.
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Я думал что это связанно с визуальными эффектами, так как свойство применяется для подобных предметов.

instance ItRw_Addon_FireBow(C_Item)
{
name = "Огненный лук";
mainflag = ITEM_KAT_FF;
flags = ITEM_BOW;
material = MAT_WOOD;
value = Value_FireBow;
damageTotal = Damage_FireBow;
damagetype = DAM_MAGIC;
munition = ItRw_Addon_FireArrow;
wear = WEAR_EFFECT;
effect = "SPELLFX_FIREBOW";
cond_atr[2] = ATR_DEXTERITY;
cond_value[2] = Condition_FireBow;
visual = "ItRw_Bow_H_04.mms";
description = name;
text[2] = NAME_Damage;
count[2] = damageTotal;
text[3] = NAME_Dex_needed;
count[3] = cond_value[2];
text[5] = NAME_Value;
count[5] = value;
};

Но опять же визуальный эффект никуда не денется, если удалить WEAR_EFFECT.
 
Сверху Снизу