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

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

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

MaGoth

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

Вложения

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

Мільтен

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

1) нужно, чтобы определенный НПС погиб(якобы был убит другим).
Вот так:
- поговорил с нпс-убийцей, тот пошел на место будущего убийства;
- поговорил с нпс-жертвой, тот пошел на место будущей смерти;
- они пришли, потом жертва падает замертво(нельзя, чтобы она падала прямо на глазах ГГ).

Через диалог НЕЛЬЗЯ - по сюжету некорректно.
Также не катит изменение отношений между гильдиями с целью нападения нпс-убийцы на нпс-жертву.
Помню в Возвращении было реализовало, только вот мне его сейчас ставить, только чтобы расковырять неохота - потом придется заново Готу переустанавливать.

2) могу ли я заставить НПС не идти на вейпоинт а бежать?

3) можно ли заставить НПС на протяжении дня переодеватся? Например НПС сначала бродит по городу в одежде гражданина, а потом идет готовить и переодвевается в олежду повара?

4) пробовал создать клад, по типу тех что в Яркендаре.
- поставил крестик;
- поставил возле него вейпоинт с названием "ADW_JONES_TREASURE_31";
- в скрипте под названием B_ScUsesRake дописал снизу:
Код:
        else if((Npc_GetDistToWP(hero,"ADW_JONES_TREASURE_31") <  RAKE_BUDDEL_DIST_MIN) && (RAKEPLACE[31] == FALSE))
        {
            Wld_InsertItem(ItMi_SilverChalice,"ADW_JONES_TREASURE_31");
            RAKEPLACE[31] = TRUE;
            RakeTreasureSuccess(ItMi_SilverChalice);
        };
- прописал себе кирку;
Так когда прихожу и жму действие, ничего не происходит.

5) как заставить НПС убивать своего врага сразу на смерть? Прописал в диалоге:
Код:
WLD_SetGuildAttitude(GIL_SLD, ATT_HOSTILE, GIL_NONE);
В результате НПС дерутся и НПС-победитель в конце добивает жертву. Нужно, чтобы не приходилось добивать.

6) как заставить НПС не реагировать на бой? Допустим я дрался с одним НПС, а другой примчался мне на помощь. Мне так не катит.

7) как переодеть одного НПС через разговор с другим? Ну и реально ли вообще.

Ух, много наспрашивал, надеюсь, найдется время ответить.

Заранее спасибо*flowers*
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
На счёт 1-ого вопроса могу сказать, что тебе нужно попробовать ввести NPC в цикл, а затем этим циклом управлять... Т.е. также как NPC стоят в циклах выполнения своей работы(кто-то суп варит, кто-то пилит дрова). Тебе нужно самому написать новый цикл(свой) и ввести в него своих(своего) NPC(ей)...
Вот так за просто на этот вопрос не ответить... НУжно писать целый скрипт диалога(разговор NPC'ей с ГГ) и много чего...

2) Да, конечно. Пишешь строчку перед тем, как заставить его двигаться на WP:
AI_SetWalkmode(self,NPC_RUN);
3) Я думаю можно. НО опять же это вопрос не пустяковый и требует знания скриптинга.
Вот сейчас пишу всё на память:
К примеру возьмём NPC - Ксардас. У него в скрипте его расписания дня есть такие строчки:

func void Rtn_Start_100()
{
TA_Read_Bookstand (8, 0, 23, 0, "NW_XARDAS_TOWER_IN1_28");
TA_Read_Bookstand (23, 0, 8, 0, "NW_XARDAS_TOWER_IN1_28");
};
А ты измени на:
func void Rtn_Start_100()
{
TA_Read_Bookstand (8, 0, 23, 0, "NW_XARDAS_TOWER_IN1_28");
AI_UnequipArmor (self); //одетые доспехи НПС self убираются в инвентарь.
AI_EquipArmor(self, ITAR_Prisoner)//одеваем доспехи повара(при условии, что они лежат в инвентаре).
TA_Read_Bookstand (23, 0, 8, 0, "NW_XARDAS_TOWER_IN1_28");
};

4) Пас
5) Попробуй поставить 2 враждебные гильдии
6)Хз. Нужно много перерыть да так, чтобы потом других проблем не возникло...
7) Ну а как тебе дают и одевают доспехи когда ты получаешь новое звание? ВОт так и тут.
Одеть броню(см. выше, где про Ксардаса).
Советую обращаться со всеми вопросами к статье от Vam'a. Если надо, могу выслать.
Если что стучись в QIP...
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
Мильтен, ты ещё здесь?

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

На счёт 1-ого вопроса могу сказать, что тебе нужно попробовать ввести NPC в цикл, а затем этим циклом управлять... Т.е. также как NPC стоят в циклах выполнения своей работы(кто-то суп варит, кто-то пилит дрова). Тебе нужно самому написать новый цикл(свой) и ввести в него своих(своего) NPC(ей)...

Не самый лучший ответ. Честно говоря не понимаю, почему ты даблпостишь? Мне-то в принципе все равно, а модеры недовольны будут.
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
3) можно ли заставить НПС на протяжении дня переодеватся? Например НПС сначала бродит по городу в одежде гражданина, а потом идет готовить и переодвевается в олежду повара?

func void ZS_Cook_Stove()
{
Perception_Set_Normal();
B_ResetAll(self);
AI_SetWalkMode(self,NPC_WALK);
AI_EquipArmor(self,*одежда повара*);
/* … */
};

И так со всеми скриптами в AI\Human\TA_Human


4) пробовал создать клад, по типу тех что в Яркендаре.
- поставил крестик;
- поставил возле него вейпоинт с названием "ADW_JONES_TREASURE_31";
- в скрипте под названием B_ScUsesRake дописал снизу:

Помести невидимый oCMOB с моделью «TREASURE_ADDON_01.ASC» и OnStateFunc = B_SCGetTreasure

5) как заставить НПС убивать своего врага сразу на смерть? Прописал в диалоге:


в начало C_NpcHasAttackReasonToKill добавь свое условие


6) как заставить НПС не реагировать на бой? Допустим я дрался с одним НПС, а другой примчался мне на помощь. Мне так не катит.

в начало B_AssessFightSound добавь свое условие

7) как переодеть одного НПС через разговор с другим? Ну и реально ли вообще.

CreateInvItem(*нпк*,*одежда*);
AI_EquipArmor(*нпк*,*одежда*);
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
Я хочу соединить oldworld.zen и newworld.zen в единое целое, возможно ли переместить все VOB'ы так что бы они совпадали с измененным миром?
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
А мне то кто поможет. Неужели никто не сталкивался с аналогичной проблемой или хотябы видал может быть где?
Кажись FAI_HUMAN_NORMAL - это константа, как и другиая тактика сражения. А я думал, что найду целый скрипт тактики сражения...
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
А мне то кто поможет. Неужели никто не сталкивался с аналогичной проблемой или хотябы видал может быть где?

Я лично нет. Думаю, так сделать не получится…
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Если бы можно было бы проверить какую анимацию проигрывает в данный момент ГГ, то может быть что то и можно было бы сделать...
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
Если бы можно было бы проверить какую анимацию проигрывает в данный момент ГГ, то может быть что то и можно было бы сделать...

Проверить можно:

if(C_BodyStateContains(hero,BS_PARADE)) {
//…
};
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Т.е. BS_PARADE - это и есть БЛОК?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Я хочу соединить oldworld.zen и newworld.zen в единое целое, возможно ли переместить все VOB'ы так что бы они совпадали с измененным миром?
Не думаю что возможно, ибо в одном из миров при объединении координаты точно слетят, если не в обоих сразу.
Думаю что в этом случае придется вобить все заного... ::)
 

Bragi

Участник форума
Регистрация
5 Окт 2009
Сообщения
59
Благодарности
0
Баллы
155
Кажись FAI_HUMAN_NORMAL - это константа, как и другиая тактика сражения. А я думал, что найду целый скрипт тактики сражения...

не уверен что константа. в файлике Fight.dat находятся все тактики, и эта в том числе. Я уже пробовал изменять имеющиеся (новых не добавлял) и вроде бы получалось.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Мда... Вобщем что то получилось. Конечно нужно фиксить, но вцелом норм.
Что я сделал:
В AI\AI_Intern\AI_Constants\ прописал переменную для хранения инфы о примерном кол-ве поставленных блоков со стороны ГГ:
var int BlockNPC;
В AI\Human\ZS_Human\ZS_Attack\ вставил сверху в цикле ZS_Attack_Loop():
func int ZS_Attack_Loop()
{
if (Npc_RefuseTalk(self) <= 0)
{
if (C_BodyStateContains(hero, BS_PARADE))
{
Npc_SetRefuseTalk(self, 1);
BlockNPC = BlockNPC + 1;
PrintScreen (IntToString(BlockNPC), -1, -1, FONT_Screen, 1);
};
};
....

};
Нет, прикол в том, что я никак не мог придумать как в цикле сделаь задержку на 1 сек в ф-ции такого рода как у меня. Поэтому пришлось использовать Npc_SetRefuseTalk(self, 1).
Кому интересно, попробуйте...
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Я посмотрел тут мод для Г1 - "STRONGHAND". И мне интересно как поменять текстуру BAR_HEALTH на любую другую? Вобщем заменить текстуру во время игрового процесса, а точнее мне хочется посмотреть функцию для изменения текстуры.
Кто знает, подскажите пожалуйста...

Вот пришла идея...
А что если создать новый шрифт, только вместо символов нарисовать части прогрессбара. А затем можно это всё выводить на экран в нужных координатах. Вот только я не знаю, будет ли перекрываться HP_BAR новым BAR_Шрифтом...
Ukur наверное ничего не скажет, потому что такая возможность реализована у них в моде...
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
Вот пришла идея...
А что если создать новый шрифт, только вместо символов нарисовать части прогрессбара. А затем можно это всё выводить на экран в нужных координатах. Вот только я не знаю, будет ли перекрываться HP_BAR новым BAR_Шрифтом...
Ukur наверное ничего не скажет, потому что такая возможность реализована у них в моде...

Именно так это и делается, а старый хпбар можно заменить прозрачной текстурой
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Я посмотрел тут мод для Г1 - "STRONGHAND". И мне интересно как поменять текстуру BAR_HEALTH на любую другую? Вобщем заменить текстуру во время игрового процесса, а точнее мне хочется посмотреть функцию для изменения текстуры.
Кто знает, подскажите пожалуйста...

Вот пришла идея...
А что если создать новый шрифт, только вместо символов нарисовать части прогрессбара. А затем можно это всё выводить на экран в нужных координатах. Вот только я не знаю, будет ли перекрываться HP_BAR новым BAR_Шрифтом...
А тебе еще не надоело постоянно задавать вопросы и впоследствии самому на них отвечать? :D

Ukur наверное ничего не скажет, потому что такая возможность реализована у них в моде...
И здесь ты прав, советами и подсказками по реализации какой либо идеи я делюсь только с теми, с кем постоянно сотрудничаю и кто мне также помогает, например с членами команды MMT, которые делают мод Gothic II - The Alternative
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Именно так это и делается, а старый хпбар можно заменить прозрачной текстурой

ОК. Спс. Потому что вариантов реализовать эту вещь не так уж и много.

А тебе еще не надоело постоянно задавать вопросы и впоследствии самому на них отвечать? :D

Мне не надоело, потому что я не такой человек, который написал свои вопросы и проблемы и пошёл гулять, и потом чтобы он пришёл и ему всё на блюдечке уже было выложено и написано...
Да и ещё, у меня бывает такое, что я сначала пишу проблему или интересный вопрос, а потом сам же на него и отвечаю. Не знаю, может быть это работает такой закон, наподобие закона подлости... И ещё, если долго мучиться, то что-нибудь получится.

И здесь ты прав, советами и подсказками по реализации какой либо идеи я делюсь только с теми, с кем постоянно сотрудничаю и кто мне также помогает, например с членами команды MMT, которые делают мод Gothic II - The Alternative

А почему? ты боишься, что эта идея станет не актуальной или стараешься хранить серкеты и расспространять их по своим друзьям?
Это ведь форум, а не справочное бюро. И здесь можно дать хоть какую-нибудь наводящую идею человеку, который в ней нуждается.
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Мне не надоело, потому что я не такой человек, который написал свои вопросы и проблемы и пошёл гулять, и потом чтобы он пришёл и ему всё на блюдечке уже было выложено и написано...
Да и ещё, у меня бывает такое, что я сначала пишу проблему или интересный вопрос, а потом сам же на него и отвечаю. Не знаю, может быть это работает такой закон, наподобие закона подлости... И ещё, если долго мучиться, то что-нибудь получится.

А, может быть, лучше сначала попытаться найти самому ответ, а потом, если и когда, не удалось его найти, тогда и задавать вопрос на форуме?
 
Сверху Снизу