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

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

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

MaGoth

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

Вложения

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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
ну ввел я значение 0.
на экране тоже 0.
может я че не понимаю? ты что делаешь вообще?
 

neromont


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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625

neromont


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

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.129
Благодарности
5.626
Баллы
910
Класс C_Item.
Читал, что для численных свойств по умолчанию присваивается значение 0.

Однако для свойства flags по умолчанию присваивается значение 8388672.

Возможно по этому, в полях flags иногда ставится ноль, если флаги не используются.

Откуда взялось это число?

Понял, это не численное значение, а битовый массив :)

Хоть и не полезно, но вот что замечал
В самой Готе предмету если присвоить значение ноль, при подборе этого предмета flags у него становиться 1024
Например у Малой косы имеем flags 17410, ставим ноль, при подборе её нельзя одеть, автоматом ставиться 1024, с чем связано и на чем, непонятно.
 

neromont


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

2 выходит, если предмет вставлен в игру.
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Если речь идёт о предмете, то при выбрасывании его из инвентаря ГГ у него устанавливается особый флаг (движком), чтобы неписи не воспринимали подбирание этого предмета, как воровство. Значение флага проверяется в функциях ИИ. Может, в этом причина непонятки?
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Предмет вставлен функцией Wld_InsertItem. Вставлен далеко от ГГ.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
а, ну я понял про какую фигню вы тут бормочите. если предмет используется, ему там флаг типа эктив дается. никуда твои нули не деваются и дэфолтные значения ту ни при чем
 

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
547
Баллы
245
8388672
Включены флаги: ITEM_KAT_DOCS, ITEM_NFOCUS
Документ, не в фокусе

17410
Включены флаги: ITEM_KAT_NF, ITEM_DROPPED (INTERNAL!), ITEM_SWD
Холодное оружие, выброшенное, меч

1024
Включены флаги: ITEM_KAT_NF
Холодное оружие

Поправьте, если где ошибся.
 

neromont


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

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
547
Баллы
245
Разобрался flags и mainflag относятся к одному массиву и чтобы получить 0 нужно установить значение обоих полей в 0.
flags и mainflag хоть и разделены, но их биты не пересекаются и затем скорее всего объединяются двигом
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
а если хочешь определить стартовые параметры, вешай вывод данных в конструктор. заодно посмотришь как и когда создаются и удаляются предметы
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
// получить ID номер НПС или предмета по ссылке на соответствующий класс instanceName.
func int Hlp_GetInstanceID(var C_NPC or C_ITEM instanceName);

Hlp_GetInstanceID(PC_Hero)

Я так понимаю функция возвращает внутренний ID предмета и NPC, а не тот который указан в свойстве id?

Магот уже отвечал:

С ID все очень просто:
1. Всем именам (инстанциям) в скриптах при их компиляции присваивается порядковый номер, вот этот самый порядковый номер для предметов и НПС является их идентификатором (id).

2. Эти номера могут съезжать в результате каких-либо операций, что в итоге отразится в том, что они будут соответствовать разным предметам (НПС), а не тому, чему был указан автором изначально.
Такое возможно только при редактировании скриптов и последующей их компиляции (добавление или удаление в скриптах одного имени приведет к изменению всех следующих за ним порядковых номеров (id)).

Например, если в игре (скриптово) создается новый предмет (НПС), а старый удаляется, то id - не изменятся. Если старый не удаляется, то для всех последующих инстанций будет сдвиг для id по номерам.
Следовательно, чтобы избежать сдвигов и прочего, все новые добавляемые предметы (НПС) надо указывать в конце файла *.src для последующей компиляции.

Вопрос, тогда в следующем, зачем тогда вообще указывать идентификаторы, если движок их сам проставит?

Хотя все равно не совсем понятно. Если заглянуть в параметры любого объекта в игре идентификатор сохраняется авторский, а Hlp_GetInstanceID возвращает черт знает что?
 
Последнее редактирование:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
GetInstanceid это получает уникальный идентификатор скриптовый, это число int расчитывается на основании имени инстанции объекта, уникально как сказал выше.
 

neromont


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

А для чего тогда идентификатор в инстанции. Как и на что он влияет. Для Item-ов этот идентификатор вообще никогда не указывается. Для Npc указывается, но в некоторых случаях повторяется.
 

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
547
Баллы
245
Все смешалось в готическом доме. Идентификаторы, инстанции, неписи, айтемы. :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.
 
Последнее редактирование:

neromont


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


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

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

Вложения

  • img12.png
    img12.png
    2 MB · Просмотры: 105
  • img13.png
    img13.png
    1,8 MB · Просмотры: 97
  • img14.png
    img14.png
    1,8 MB · Просмотры: 107
  • img15.png
    img15.png
    1,7 MB · Просмотры: 107

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
ID - идентификатор объекта, уникальный для каждого объекта, создается игрой на лету во время выполнения скриптов, каждый раз скорее всего будет разный
instanceID - идентификатор инстанции с помощью которой инициализировали объект, это тот самый индекс инстанции, не меняется после создания объекта.
А что с функцией Hlp_GetNpc? Она позволяет получить ссылку на непися только по идентификатору инстанции? А можно ли получить ссылку на конкретного непися, если это непись-клон?
 

Gor

Участник форума
Регистрация
26 Дек 2009
Сообщения
977
Благодарности
547
Баллы
245
Вставил три золотых ID у всех одинаковый.
При создании воба ID действительно обнуляются, но дальнейшую судьбу я их не отслеживал, по логике решил, что должны быть разные. Не знаю использует ли их вообще игра. Но вопрос был по функции Hlp_GetInstanceID, которая возвращает индекс инстанции назначенный еще компилятором. Скинь мне датник, с которым ты работаешь. Я посмотрю в него.

А что с функцией Hlp_GetNpc? Она позволяет получить ссылку на непися только по идентификатору инстанции? А можно ли получить ссылку на конкретного непися, если это непись-клон?
Похоже, что не может. Она возвращает адрес последнего созданного этой инстанцией объекта.
 
Сверху Снизу