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

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

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

MaGoth

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

Вложения

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

osipovjohn

Участник форума
Регистрация
11 Июл 2012
Сообщения
24
Благодарности
0
Баллы
160
Парни подсобите в решении
1.Возможно ли осуществить полноценную пати, которая будет ходить следом прокачиваться(получать опыт) вместе с гг, переходить на другие зены вместе с инвентарем?
2.Можно ли оставить нпс на любом вейпоинте и чтобы он там и остался даже при переходе гг на другой зен.
3.Как сделать коэффициент торговли с нпс равной 0, чтобы можно было обмениваться предметами бесплатно.
 

Beowulf

Участник форума
Регистрация
21 Ноя 2010
Сообщения
1.937
Благодарности
1.450
Баллы
465
2.ГГ может хоть сто раз между локациями бегать, но каком веипоинте поставил нпс (или нескольких веипоинтах, в зависимости от сложности распорядка дня нпс), на таком он и будет до следуещего изменения распорядка дня.
3. Сделать стоимость предмета равной 0
 

osipovjohn

Участник форума
Регистрация
11 Июл 2012
Сообщения
24
Благодарности
0
Баллы
160
Ты не понял. Если нпс следует за мной и я его останавливаю в любом месте и даю команду останься здесь(в распорядке нет этого места), как это осуществить
3. это не решение вопроса,а если это мечи, доспехи, снадобья
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
3.Как сделать коэффициент торговли с нпс равной 0, чтобы можно было обмениваться предметами бесплатно.

3. это не решение вопроса,а если это мечи, доспехи, снадобья

То есть мечи, доспехи и снадобья предметами не являются? Ты задал вопрос, исходя из его формулировки тебе дали адекватный ответ. Если это не то, что ты хотел, то, пожалуйста, формулируй мысль четче, потому как я лично не понял, каким образом "если это мечи, доспехи, снадобья" отвергает предложенное решение.

Ты не понял. Если нпс следует за мной и я его останавливаю в любом месте и даю команду останься здесь(в распорядке нет этого места), как это осуществить

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

osipovjohn

Участник форума
Регистрация
11 Июл 2012
Сообщения
24
Благодарности
0
Баллы
160
3. Вопрос состоит в том, что мне хотелось бы с персонажами по партии торговать всеми предметами со стоимостью 0, попросту передовать их друг другу,т.к. в моем моде существует параметр вес. Надеюсь понятно объяснил. Как-то давно натыкался на скрипты которые меняли коэффициент торговли в зависимости от принадлежности гг к определенной гильдии.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Ищи по решению фукцию GetNearestWp (или как-то так).

Как-то обдумывал такой вариант, хотел научить вызванных созданий ожидать ГГ по аналогии с Г3. Но пришёл к выводу, что это не прокатит. К сожалению. Для более менее нормальной работы нужна густая сеть WP, что не всегда имеет место. Ближайший вей может оказаться достаточно далеко от точки, в которой происходит диалог. :(
 

Pinic

Участник форума
Регистрация
14 Июн 2013
Сообщения
128
Благодарности
13
Баллы
185
Ребят помогите!)
Создал вот такой скрипт(вроде бы все так же как и в SmithWeapon, делал отдельным скриптом ):
var int ArmorCov;

instance PC_CovArmor(C_Info)
{
npc = PC_Hero;
condition = PC_CovArmor_Condition;
information = PC_CovArmor_Info;
permanent = TRUE;
description = "Выковать доспехи";
};


func int PC_CovArmor_Condition()
{
if((PLAYER_MOBSI_PRODUCTION == MOBSI_SmithWeapon) && (Normalwaffen == FALSE) && (Erzwaffen == FALSE) && (ArmorCov == FALSE))
{
return TRUE;
};
};

func void PC_CovArmor_Info()
{
ArmorCov = TRUE;
};

instance PC_CoBACK(C_Info)
{
npc = PC_Hero;
nr = 99;
condition = PC_CoBACK_Condition;
information = PC_CoBACK_Info;
permanent = TRUE;
description = Dialog_Back;
};


func int PC_CoBACK_Condition()
{
if((PLAYER_MOBSI_PRODUCTION == MOBSI_SmithWeapon) && (Normalwaffen == FALSE) && (Erzwaffen == FALSE) && (ArmorCov == TRUE))
{
return TRUE;
};
};

func void PC_CoBACK_Info()
{
ArmorCov = FALSE;
};

instance PC_ITAR_Mil_L(C_Info)
{
npc = PC_Hero;
condition = PC_ITAR_Mil_L_Condition;
information = PC_ITAR_Mil_L_Info;
permanent = TRUE;
description = "Легкие доспехи ополчения";
};


func int PC_ITAR_Mil_L_Condition()
{
if((PLAYER_MOBSI_PRODUCTION == MOBSI_SmithWeapon) && (ArmorCov == TRUE) && (Normalwaffen == FALSE) && (Erzwaffen == FALSE))
{
return TRUE;
};
};

func void PC_ITAR_Mil_L_Info()
{
CreateInvItems(hero,ITAR_Mil_L,1);
Print(PRINT_ArmorSuccess);
b_endproductiondialog();
ArmorCov = FALSE;

};
В Text.d дописал:
const string PRINT_ArmorSuccess = "Доспех готов!";

И до этого добавил оружие:
const int Damage_Axe_H2_01 = 90;
const int Condition_Axe_H2_01 = 75;

instance ItMw_Axe_H2_01(C_Item)
{
name = "Большой боевой молот";
mainflag = ITEM_KAT_NF;
flags = ITEM_2HD_AXE;
material = MAT_WOOD;
value = Value_Axe_H2_01;
damageTotal = Damage_Axe_H2_01;
damagetype = DAM_BLUNT;
range = Range_Axe_H2_01;
cond_atr[2] = ATR_STRENGTH;
cond_value[2] = Condition_Axe_H2_01;
visual = "ItMw_Axe_H2_01.3DS";
description = name;
text[2] = NAME_Damage;
count[2] = damageTotal;
text[3] = NAME_Str_needed;
count[3] = cond_value[2];
text[4] = NAME_TwoHanded;
text[5] = NAME_Value;
count[5] = value;
};

И чтоб можно было в кузне сделать SmithWeapon.d:
instance PC_ItMw_Axe_H2_01(C_Info)
{
npc = PC_Hero;
condition = PC_ItMw_Axe_H2_01_Condition;
information = PC_ItMw_Axe_H2_01_Info;
permanent = TRUE;
};


func int PC_ItMw_Axe_H2_01_Condition()
{
if((PLAYER_MOBSI_PRODUCTION == MOBSI_SmithWeapon) && (Normalwaffen == TRUE))
{
return TRUE;
};
};

func void PC_ItMw_Axe_H2_01_Info()
{
CreateInvItems(hero,ItMw_Axe_H2_01,1);
Print(PRINT_SmithSuccess);
b_endproductiondialog();
Normalwaffen = FALSE;
};

Дальше компилю захожу в игру, захожу в кузницу, нажимаю "Выковать доспехи" и после вылазиет
"Большой боевой молот" и "Легкие доспехи ополчения" молота там по идеи не должно быть, как это исправить?
 

osipovjohn

Участник форума
Регистрация
11 Июл 2012
Сообщения
24
Благодарности
0
Баллы
160
Я нашел решение. Все хорошо работает. Остается там где нужно. Причем рутину делаю с сыслой на ближайший вей. Вообще это сырая версия того что я хочу. Я уже близок к созданию полноценной пати из 4 человек, которые получают экспу, имеют свою ветвь прокачки(ближний,дальний, магия поддержки и наступательная магия). Пока загвоздка перенести пати по локациям, но, думаю, вопрос времени.Кто бы помог с вопросом о нулевой стоимости вещей. Моя задача сделать динамичный более-менее реалистичный мир готики, но это лично моё желание)
 

Saturas


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

касательно переноса пати по локациям, тоже довольно реализуемо.
 
Последнее редактирование:

osipovjohn

Участник форума
Регистрация
11 Июл 2012
Сообщения
24
Благодарности
0
Баллы
160
Saturas, а можешь подробнее осветить этот пакет?
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
444
Благодарности
264
Баллы
230
Кто бы помог с вопросом о нулевой стоимости вещей.
Что конкретно тебе нужно?
1) Свободная передача предметов в режиме торговли с неизменными ценами предметов. Цены остаются!
2) Такая же свободная передача в режиме торговли, только без ценников. Цен у предметов нет!
В обоих случаях обмен бесплатный!
Первый пример будет по проще. Второй по сложней. Хотя... тебе работы хватит в любом случае. :)
 

osipovjohn

Участник форума
Регистрация
11 Июл 2012
Сообщения
24
Благодарности
0
Баллы
160
Нужен 2, но можно и первый, главное чтоб это не было километры кода
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Код:
// ****************************************************************
// Функция  инициализации отношений между гильдиями людей
// ****************************************************************

func void B_InitGuildAttitudes()
{
   // Примечание: неважно что функция пустая, ничего с ней делать нельзя, существует взаимосвязь с экзешником.
   // Без этой функции отношения между людьми не будут установлены!!!
};
это, на кой нужна эта функция, почему без нее все отлично работает?
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
на кой нужна эта функция

В Г1 с помощью этой функции производится выбор таблицы отношений. По сюжету отношения между гильдиями меняются, поэтому изменяется и используемая таблица. В Г2 функция может быть пустой, поскольку отношения между гильдиями постоянны на протяжении всей игры. Но не факт, что в модах так же.
 

alexel

Участник форума
Регистрация
28 Апр 2014
Сообщения
12
Благодарности
0
Баллы
165
Подскажите, как сделать проверку, что конкретный нпц атакует ГГ, и проверку что этот же нпц попал по ГГ.
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
Подскажите, как сделать проверку, что конкретный нпц атакует ГГ, и проверку что этот же нпц попал по ГГ.

Думаю, функция B_AssessDamage поможет с этим как нельзя лучше.
self - тот, кто наносит урон, other - тот, кто его получает.
В самом начале тела функции (после открывающей скобки) пишешь:

Код:
if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(ИНСТАНЦИЯ_НЕПИСЯ)) && (Npc_IsPlayer(other))
{
тут пишешь, что должно произойти
};

Код не тестил, но должно работать.
 

alexel

Участник форума
Регистрация
28 Апр 2014
Сообщения
12
Благодарности
0
Баллы
165
Не, не то) Все равно регистрирует все попытки удара, удачные и нет, ну и проверка проходит только тогда когда бьет ГГ, а не тот конкретный нпц) Так что я опять вначале)
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
Не, не то) Все равно регистрирует все попытки удара, удачные и нет, ну и проверка проходит только тогда когда бьет ГГ, а не тот конкретный нпц) Так что я опять вначале)

Неудачными попытками считаются блокированные удары? Тогда можешь доцепить еще проверку на ХП. Сравниваешь, не равно ли ХП до удара ХП после удара. Если не равно, значит, удар нанес урон.
 

alexel

Участник форума
Регистрация
28 Апр 2014
Сообщения
12
Благодарности
0
Баллы
165
Неудачными попытками считаются блокированные удары? Тогда можешь доцепить еще проверку на ХП. Сравниваешь, не равно ли ХП до удара ХП после удара. Если не равно, значит, удар нанес урон.
Да, это понятно, спасибо, сам о таком задумывался, но основная проблема в том - что не могу сделать проверку удара нпц.

Если герой бьет, функция срабатывает, если нпц, ничего не происходит.
 
Сверху Снизу