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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
    Скрыть объявление
  2. Форум аддона "Возвращение" 2.0:
    — Обсудить игру, почитать о прохождениях и/или разрешить свои вопросы по игре вы можете в одной из тем одноименного форума. Посетить...
    — Прочитать историю изменения и/или скачать последнюю версию аддона "Возвращение", вы можете на страницах наших ресурсов. Скачать...
    Скрыть объявление

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

Тема в разделе "Модостроение", создана пользователем Xentar, 25 фев 2008.

Модераторы: Marvіn, MEG@VOLT
  1. Gor

    Gor Участник форума

    Регистрация:
    26 дек 2009
    Сообщения:
    801
    Благодарности:
    426
    Баллы:
    230
    Пол:
    Мужской
    Все смешалось в готическом доме. Идентификаторы, инстанции, неписи, айтемы. :D

    Путаница из-за понятий. Инстанция всеми понимается, как экземпляр класса, объект. В Готике немного по другому. Инстанцию нужно понимать, как конструктор объекта, т.е. функцию, инициализирующую объект. Таким образом написав в скрипте инстанцию вы ничего не создали.На примерах будет понятнее. Имеем инстанцию
    Код:
    INSTANCE ItMi_Gold (C_Item)
    {
        name                 =    "Gold";
        mainflag             =    ITEM_KAT_NONE;
        flags                 =    ITEM_MULTI;
        value                 =    Value_Gold;
        visual                 =    "ItMi_Gold.3DS";
        material             =    MAT_STONE;
        description            =     name;
        TEXT[5]                =     NAME_Value;  
        COUNT[5]            =     value;
        INV_ZBIAS                = INVCAM_ENTF_MISC2_STANDARD;
    };
    После компиляции ей будет присвоен уникальный индекс, с этим индексом он загрузится в игру, не меняется после компиляции.

    Далее создаем 5 золотых
    Код:
    CreateInvItems (slf, ItMi_Gold, 5);
    Мы создали 5 объектов и каждый из них был инициализирован инстанцией ItMi_Gold. Каждый объект имеет такие поля
    ID - идентификатор объекта, уникальный для каждого объекта, создается игрой на лету во время выполнения скриптов, каждый раз скорее всего будет разный
    instanceID - идентификатор инстанции с помощью которой инициализировали объект, это тот самый индекс инстанции, не меняется после создания объекта.

    Таким образом у наших пяти золотых будет одинаковый instanceID, и разные ID.
     
    Последнее редактирование: 8 янв 2017
    ElderGamer и neromont поблагодарили.
  2. neromont

    neromont
    Модостроитель

    Регистрация:
    12 мар 2011
    Сообщения:
    296
    Благодарности:
    297
    Баллы:
    220
    Пол:
    Мужской

    Вставил три золотых ID у всех одинаковый.

    InstanceID наверное тоже.
     

    Вложения:

    • img12.png
      img12.png
      Размер файла:
      2 МБ
      Просмотров:
      33
    • img13.png
      img13.png
      Размер файла:
      1,8 МБ
      Просмотров:
      34
    • img14.png
      img14.png
      Размер файла:
      1,8 МБ
      Просмотров:
      34
    • img15.png
      img15.png
      Размер файла:
      1,7 МБ
      Просмотров:
      30
  3. ElderGamer

    ElderGamer
    Модостроитель

    Регистрация:
    16 апр 2008
    Сообщения:
    1.428
    Благодарности:
    881
    Баллы:
    260
    А что с функцией Hlp_GetNpc? Она позволяет получить ссылку на непися только по идентификатору инстанции? А можно ли получить ссылку на конкретного непися, если это непись-клон?
     
  4. Gor

    Gor Участник форума

    Регистрация:
    26 дек 2009
    Сообщения:
    801
    Благодарности:
    426
    Баллы:
    230
    Пол:
    Мужской
    При создании воба ID действительно обнуляются, но дальнейшую судьбу я их не отслеживал, по логике решил, что должны быть разные. Не знаю использует ли их вообще игра. Но вопрос был по функции Hlp_GetInstanceID, которая возвращает индекс инстанции назначенный еще компилятором. Скинь мне датник, с которым ты работаешь. Я посмотрю в него.

    Похоже, что не может. Она возвращает адрес последнего созданного этой инстанцией объекта.
     
    ElderGamer поблагодарил.
  5. neromont

    neromont
    Модостроитель

    Регистрация:
    12 мар 2011
    Сообщения:
    296
    Благодарности:
    297
    Баллы:
    220
    Пол:
    Мужской
    Вопрос открыт. Для чего классам C_Npc и C_Item нужны поля id?
     
  6. Saturas

    Saturas
    Модостроитель

    Регистрация:
    11 фев 2009
    Сообщения:
    1.878
    Благодарности:
    572
    Баллы:
    275
    Пол:
    Женский
    Неписям нужно для распорядков дня. У итемов это поле не использовано.
     
  7. Gor

    Gor Участник форума

    Регистрация:
    26 дек 2009
    Сообщения:
    801
    Благодарности:
    426
    Баллы:
    230
    Пол:
    Мужской
    Вот эта инстанция в байт-коде дат-файла. Обрати внимание на ее индекс. Такой же как у тебя на картинке. Что и требовалось доказать.
    Открыть спойлер
    Код:
    -------------------------------------------------
    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      
    -------------------------------------------------
    


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

    neromont
    Модостроитель

    Регистрация:
    12 мар 2011
    Сообщения:
    296
    Благодарности:
    297
    Баллы:
    220
    Пол:
    Мужской
    Разбираюсь дальше с C_Npc. Свойства owner и ownerGuild.

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

    Saturas
    Модостроитель

    Регистрация:
    11 фев 2009
    Сообщения:
    1.878
    Благодарности:
    572
    Баллы:
    275
    Пол:
    Женский
    Нельзя, а тип указан не верно судя по всему.
     
    neromont поблагодарил.
  10. Gor

    Gor Участник форума

    Регистрация:
    26 дек 2009
    Сообщения:
    801
    Благодарности:
    426
    Баллы:
    230
    Пол:
    Мужской
    Тип 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  
        ...
    
     
    Последнее редактирование: 8 янв 2017
    neromont поблагодарил.
  11. rivolf

    rivolf Участник форума

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

    Friwa Участник форума

    Регистрация:
    22 авг 2010
    Сообщения:
    156
    Благодарности:
    14
    Баллы:
    185
    Подскажите как реализована выносливость в Ребаланс и возвращении. Хотя бы названия скриптов где копать=)
     
  13. neromont

    neromont
    Модостроитель

    Регистрация:
    12 мар 2011
    Сообщения:
    296
    Благодарности:
    297
    Баллы:
    220
    Пол:
    Мужской
    В чем принципиальная разница:

    Открыть спойлер

    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;

    };
     
  14. redleha

    redleha
    Модостроитель

    Регистрация:
    26 фев 2008
    Сообщения:
    694
    Благодарности:
    652
    Баллы:
    245
    Пол:
    Мужской
    Первый вариант немного правильнее, ибо точно произойдёт прибавка и отнятие у одевающего. В случае прибавки функцией во втором варианте, при баге со ссылкой на self, может произойти или неприбавка, или неотнятие. Также во втором варианте банально объявляется лишняя функция. А это с точки зрения программиста лишние ресурсы (мелочь, но культуру надо блюсти).
     
    neromont поблагодарил.
  15. redleha

    redleha
    Модостроитель

    Регистрация:
    26 фев 2008
    Сообщения:
    694
    Благодарности:
    652
    Баллы:
    245
    Пол:
    Мужской
    Сорри, перепутал первый вариант и второй.
    Neromont, я думаю, ты понял меня. :)
     
  16. gggg12345678!

    gggg12345678! Участник форума

    Регистрация:
    6 янв 2016
    Сообщения:
    179
    Благодарности:
    61
    Баллы:
    65
    Пол:
    Мужской
    В проекте Возвращения или же Ребаланса в поиске ввести stamina и искать.:)
     
    Friwa поблагодарил.
  17. neromont

    neromont
    Модостроитель

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

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

    ElderGamer
    Модостроитель

    Регистрация:
    16 апр 2008
    Сообщения:
    1.428
    Благодарности:
    881
    Баллы:
    260
    В Г1 можно назначить ZEN-виуал предмету, не только факелу. Например, таким образом можно привязать pfx-эффект к модели оружия или к стреле. Но это не работает безглючно. Предмет с ZEN-виуалом, почему-то, не берётся в фокус. Вернее, в фокус-то берётся, его можно поднять, но надпись на экран при попадании предмета в фокус не выводится.
     
    neromont поблагодарил.
  19. neromont

    neromont
    Модостроитель

    Регистрация:
    12 мар 2011
    Сообщения:
    296
    Благодарности:
    297
    Баллы:
    220
    Пол:
    Мужской
    У меня тоже вставляется объект, но если это оружие, то при обнажении, оно не отображается, а так видна и визуализация и фокус.

    На что влияет значение 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;
    };


    Не дублируем посты, читаем правила..
     
    Последнее редактирование модератором: 12 янв 2017
  20. MEG@VOLT

    MEG@VOLT ★★★★★★★
    Модератор

    Регистрация:
    24 мар 2006
    Сообщения:
    1.711
    Благодарности:
    734
    Баллы:
    290
    Ну, судя по тому что написано - эффект ветра.
    т.е. если руна лежит на земле с каким нить эффектом дыма от костра, и этим эффектом, то дым шевелится как у костра от ветра. НО это лишь предположения.
     
Модераторы: Marvіn, MEG@VOLT

Поделиться этой страницей