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

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

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

MaGoth

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

Вложения

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

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Ох... Трехнули стариной...
Поразили косточки...
*ded*
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.124
Благодарности
5.622
Баллы
910
Спасибо, я поменял местами, и собралось. Закинул datы в клиент, побегал, вроде всё норм. Мне кстати все dat которые генерируются переносить, или gothic.dat достаточно?
Можно ли как то сделать чтоб компилился только gothic.dat?

В GS ты делаешь активным только то, что редактируешь и соответственно компилируешь и копируешь только то, что изменял. Если это Gothic -> Gothic.dat
 

DREDNOUT_571

Участник форума
Регистрация
9 Фев 2021
Сообщения
10
Благодарности
2
Баллы
45
Кто подскажет, где находятся формулы расчёта урона от холодного и стрелкового оружия, для ГГ и мобов? И нужно ли начинать новую игру, чтобы применились изменения FAI, статы оружия, статы мобов, и формулы расчёта урона, или достаточно сэйв грузить?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Урон:

Daedalus:
instance ItMw_1H_Mace_L_01(C_Item)
{
    name = "Кочерга";
    mainflag = ITEM_KAT_NF;
    flags = ITEM_AXE;
    material = MAT_WOOD;
    value = Value_Schuerhaken;
   damageTotal = Damage_Schuerhaken;
    damagetype = DAM_EDGE;
    range = Range_Schuerhaken;
    cond_atr[2] = ATR_STRENGTH;
    cond_value[2] = Condition_Schuerhaken;
    visual = "Itmw_005_1h_poker_01.3DS";
    description = name;
    text[0] = NAME_RANGE;
    count[0] = range;
    text[2] = NAME_Damage;
    count[2] = damageTotal;
    text[3] = NAME_Str_needed;
    count[3] = cond_value[2];
    text[4] = NAME_OneHanded;
    text[5] = NAME_Value;
    count[5] = value;
};
damageTotal = Damage_Schuerhaken;
damagetype = DAM_EDGE;


Защита, а соответственно и броня
Daedalus:
    protection[PROT_BLUNT] = 20;
    protection[PROT_EDGE] = 20;
    protection[PROT_POINT] = 20;
    protection[PROT_FIRE] = 20;
    protection[PROT_FLY] = 20;
    protection[PROT_MAGIC] = 0;
Ну и получается формула:
Урон = protectio[PROT_TYPE] - (damagetype+damageTotal) + 10
Новую
Лучше новую, но не всегда. Есть оружие, которое еще не было задействовано, ни ИИ, ни игроком, ни упоминаось еще в как-либо в игре(Не лежит в сундуке и прочее). соответственно сейв про него и не знает. И можно грузиться.
так же как с оружием. например если ты ни разу в ярике не был, то ты можешь богомолов хоть 500 раз переписывать. Но тоже не всегда срабатывает.
формулы расчёта урона
Новую

Вообще раз уж полез в скрипты, то такие вопросы грех задавать. Ты как скриптер, сам должен знать ответ на этот вопрос. т.е. поменял - проверяй, поменял - проверяй...
 
Последнее редактирование:

ElderGamer


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

И нужно ли начинать новую игру, чтобы применились изменения FAI
Если это изменения в скриптах боевых тактик FIGHT.DAT, то начинать новую игру не нужно. Если же речь о том, что у непися изменилась циферка боевой тактики в инстанции, то изменение применится только к новым неписям, вставленным в мир после изменения.

статы оружия, статы мобов,
Аналогично описанному выше. Циферки из инстанции применились в момент вставки в мир. Лучше начинать новую игру.

формулы расчёта урона
В скриптах могут иметься формулы просчёта дополнительного урона. Такие, например, как для урона Когтя Белиара. Изменения в этих формулах не требуют начала новой игры.
 

Necrotechnologist

Участник форума
Регистрация
1 Янв 2017
Сообщения
24
Благодарности
0
Баллы
150
Можно ли присвоить NPC в момент инициализации различные значения Guild и TrueGuild? От прописывания Npc_SetTrueGuild и self.guild в инстанциях и прототипах толку нет.
 

Gratt


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

Necrotechnologist

Участник форума
Регистрация
1 Янв 2017
Сообщения
24
Благодарности
0
Баллы
150

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625

Necrotechnologist

Участник форума
Регистрация
1 Янв 2017
Сообщения
24
Благодарности
0
Баллы
150
Значит что-то не так делаешь
А как нужно, если что-то типа
Daedalus:
Npc_SetTrueGuild(self,GIL_XXX);    //Ничего не делает
self.guild = GIL_YYY;    //Задаёт и guild, и trueguild
не вариант?
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.189
Благодарности
3.373
Баллы
485
Последнее редактирование:

Necrotechnologist

Участник форума
Регистрация
1 Янв 2017
Сообщения
24
Благодарности
0
Баллы
150
Daedalus:
instance BAU_903_Bodo(Npc_Default)
{
    name[0] = "Бодо";
    guild = GIL_BAU; //задает guild и trueguild GIL_BAU
    Npc_SetTrueGuild(self,GIL_MIL); //меняет trueguild с GIL_BAU на GIL_MIL
    ...
};
Будь всё так просто, я бы тут ничего не спрашивал.
Сделал в итоге так:
Daedalus:
func void zs_mm_allscheduler()
{
    ...
    if(npc_gettrueguild(self) == GIL_XXX)
    {
        npc_settrueguild(self,gil_yyy);
    };
};
Решение не универсальное, но меня пока что устраивает.
 

LastDragon

Участник форума
Регистрация
5 Июл 2017
Сообщения
18
Благодарности
1
Баллы
155
Приветствую. Подскажите, функцией Ai_Teleport() можно реализовать телепорт в другую локацию?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Есть такой костыль. Телепорт посылает ГГ в изолированную область текущей локации, где расположен триггер перехода в другую локацию.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
главное триггер делать на взаимодействие только с ГГ,
А то сталкнулся недавно в одном моде с глюком:
Пустил стрелу туда, куда можно только марвином попасть, ну и пошла загрузка локации, в которую я по сюжету должен попасть только под конец игры ))
В моде как раз используется такой костыль, как описал ElderGamer
 

STARK

Участник форума
Регистрация
20 Янв 2011
Сообщения
555
Благодарности
142
Баллы
220
Похоже, если я создаю новые ветки диалогов, то нужно начинать новую игру, чтобы они заработали.
Есть ли способ это обойти? Например, отредактировать сейв? Открываю сейв в GVE, - нахожу там переменные диалогов. Но почему-то все переменные диалогов установлены в ноль, и в GVE нет возможности добавить новую переменную.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.124
Благодарности
5.622
Баллы
910
Похоже, если я создаю новые ветки диалогов, то нужно начинать новую игру, чтобы они заработали.
Есть ли способ это обойти? Например, отредактировать сейв? Открываю сейв в GVE, - нахожу там переменные диалогов. Но почему-то все переменные диалогов установлены в ноль, и в GVE нет возможности добавить новую переменную.
С использованием плагина на Union zParserExtender можешь вносить изменения и тестировать на лету
Качаешь плагин из ресурс менеджера
В autorun создает скрипт, копируешь туда новый диалог, либо что душе угодно.
Перед началом скрипта не забывай добавить
META
{
Parser = Game;
MergeMode = true;
};

Например, вот простетский скрипт
Daedalus:
META
{
    Parser    = Game;
    MergeMode = true;
};

INSTANCE DIA_Xardas_test(C_INFO)
{
    npc            = NONE_100_Xardas;
    nr            = 999;
    condition    = DIA_Xardas_test_Condition;
    information    = DIA_Xardas_test_Info;
    permanent    = FALSE;
    description = "Боже мой, это Ксардас!";
};

FUNC INT DIA_Xardas_test_Condition()
{
    if (Npc_KnowsInfo (other, DIA_Xardas_TODO))
    {
        return TRUE;
    };
};

FUNC VOID DIA_Xardas_test_Info()
{  
    AI_Output (other, self,"DIA_Xardas_test_15_00"); //Боже мой, это Ксардас!
    AI_Output (self, other,"DIA_Xardas_test_14_01"); //А ты что думал? Девка?
    AI_Output (self, other,"DIA_Xardas_test_14_02"); //Надень на себя портки и дуй мочить драконов!
};

После запуска у ксардаса добавиться этот диалог, компилить ничего не надо.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
N1kX, проверял? Список диалоговых инстанций в сейв записывается, так что не должно работать без новой игры.
STARK, можно с юнионом cохраниться при SaveDATinASCII = 1 в SystemPack.ini, тогда можно будет SAVEDAT.SAV в текстовом редакторе модифицировать.
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.124
Благодарности
5.622
Баллы
910
проверял? Список диалоговых инстанций в сейв записывается, так что не должно работать без новой игры.
Конечно, я же тестирую плагин перед релизом
1615992205498.png
1615992300090.png
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Конечно, я же тестирую плагин перед релизом
Я тоже проверил: не добавляется диалог без новой игры. Ты точно новую игру не начинал, а то на скрине Ксардас в стартовой точке стоит?
Пост автоматически объединён:

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

Вложения

  • Union_AddInfos.vdf
    50,5 KB · Просмотры: 5
Последнее редактирование:
Сверху Снизу