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

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

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

MaGoth

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

Вложения

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

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
domenik1, Это настраивается в свойствах порталов, т.е. редактирование мира. Я про броню и проверку ее принадлежности к той или иной гильдии.
 

xterm

Участник форума
Регистрация
25 Июн 2009
Сообщения
5.178
Благодарности
16
Баллы
400
Если нет, то как можно удалить старого НПС на время?
Ты не поверишь...
AI_Teleport та же. В локациях есть специльные зоны TOT, куда убираются ненужные персонажи..
 

domenik1

Участник форума
Регистрация
24 Июл 2010
Сообщения
28
Благодарности
0
Баллы
150
MaGoth а можно пожалуйста по точнее? что то я не понял причем тут броня и порталы О_О

Bump: xterm спасибо, буду знать)
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
domenik1, Если вкратце, то, одной из особенностей порталов является система проверки для охраняемых территорий Непесями и т.д.., т.е. при его пересечении Гг проверяется по броне на принадлежность к той или иной гильдии. Точнее не скажу, ибо сам давно не занимался этой темой. Так-что, более подробнее тебе это кто нибудь другой объяснит, например, напинай Укура он точно знает... :D
 

Volwis

Участник форума
Регистрация
21 Дек 2010
Сообщения
50
Благодарности
0
Баллы
155
народ, можно ли вставить во вторую Готику Мада с первой Готики, или может, есть мод для второй Готики, где есть Мад. (Глобал Мод не предлагайте, я имею виду Мад с нормальным лицом=))
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Ммм, а что сложного то? Тупо перенеси срипт мада+его диалог и впили в г2а.
 

Volwis

Участник форума
Регистрация
21 Дек 2010
Сообщения
50
Благодарности
0
Баллы
155
А можна подробнее? я в этом новичок)
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
mod.worldofgothic.ru Тут есть статьи по созданию модов
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Так вот такого рода вопрос.
Уже гдето месяц выношу себе мозг вопросом, как сделать индикатор опыта(сама полоска уже есть)
а вот собсно проблема:
PHP:
PrintXpBar(hero.exp,hero.exp_next);
При такой записи вызова функции индикатора(полосы) изначально все вроди как нормально, по мере накопления опыта полоска постепенно заполняется, но когда получаю новый уровень то полоска оказывается уже на 1/3 заполнена(хотя в идеале полоска опыта должна обнулятся)
Вот собственно нужна формула чтобы при получении нового уровня, полоса опыта была на 0.
думаю вопрос понятен.
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Запоминать предыдущее hero.exp_next вычитать его из обоих значений

 

clumb

Участник форума
Регистрация
21 Июн 2010
Сообщения
302
Благодарности
13
Баллы
180
У меня вопрос: какой скрипт нужно прописать, что бы левый НПС убил (побил, а потом прикончил) другого НПС.
 

George_M

Участник форума
Регистрация
17 Дек 2010
Сообщения
692
Благодарности
18
Баллы
255
У меня вопрос: какой скрипт нужно прописать, что бы левый НПС убил (побил, а потом прикончил) другого НПС.
По идее что-то вроде (self и other разумеется поменять на кого надо типа C_NPC). При ATT_HOSTILE должен добивать:
Npc_SetTempAttitude (self, ATT_HOSTILE);
Npc_SetTarget (self,other);
AI_StartState (self,ZS_ATTACK,1,"");
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
clumb,
для начала - разобраться с работой всех АИ скриптов в папке AI, в частности в B_Human.
Все подробно разжевано в туторе ВАМа.
 

Мільтен

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

Лично я понятия не имею, из-за чего может быть эта проблема. Выкладываю скрипт диалога:
Код:
instance KDF_5022_ILAJ_FIRE_START(C_Info)
{
    npc = kdf_5022_ilaj;
    condition = kdf_5022_ilaj_fire_start_condition;
    information = kdf_5022_ilaj_fire_start_info;
    nr = 1;
    important = FALSE;
    permanent = FALSE;
    description = "Я пришел от сэра Рауруса.";
};


func int kdf_5022_ilaj_fire_start_condition()
{
    if(MIS_FOR_GUARDIANS == LOG_SUCCESS)
    {
    return TRUE;
    };
};
func void kdf_5022_ilaj_fire_start_info()
{
    AI_Output(other,self,"kdf_5022_ilaj_FIRE_START_Info_15_01");    //Я пришел от сэра Рауруса. Он сказал, тебе нужна помощь.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_05_02");    //А, твой командор мудрый человек, коль направил ко мне именно тебя.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_05_03");    //Ты же не просто солдат, верно? Твой разум мыслит куда шире, чем разум простого воина.
    AI_Output(other,self,"kdf_5022_ilaj_FIRE_START_Info_15_04");    //Вы мне льстите, мастер. Но давайте вернемся к делу. Чем я могу вам помочь?
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_05_05");    //Это была не просто лесть. Твой разум позволяет тебе в прямом смысле видеть больше, чем другие.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_05_06");    //Я тоже когда-то видел Огонь, но теперь я уже слишком стар для этого.
    AI_Output(other,self,"kdf_5022_ilaj_FIRE_START_Info_05_07");    //При всем почтении, вы, наверное, ошиблись. Я не знаю, о каком Огне идет речь.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_15_08");    //Верно, ты же раньше не видел его. Но я знаю, что ты можешь.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_15_09");    //Совсем недавно в Долине родилась искра Инноса. Она родилась благодаря тебе.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_15_10");    //Ты куда более благороден, чем показываешь. Иннос видит это и дарит нам шанс победить мрак этой Долины.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_15_11");    //Я дам тебе этот пояс. Пояс огненного человека.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_15_12");    //Когда ты его наденешь, то сможешь брать в руки Огонь не чувствуя при этом жжения.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_15_13");    //Твое задание заключается в следующем: найди в Долиные полдюжины Огней. Заключи их в пояс и принеси мне.
    AI_Output(other,self,"kdf_5022_ilaj_FIRE_START_Info_15_14");    //Как выглядят Огни?
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_15_15");    //Так же, как обычный огонь. Только они витают просто в воздухе. Я буду мысленно помогать тебе, чтобы ты смог их увидить.
    AI_Output(self,other,"kdf_5022_ilaj_FIRE_START_Info_15_16");    //А теперь ступай. Возьми этот пояс и не возвращайся, пока в нем не будет шесть Огней.
    B_GiveInvItems(self,other,ItBe_Addon_Prot_FIRE,1);
    AI_Output(other,self,"kdf_5022_ilaj_FIRE_START_Info_15_17");    //Хорошо, мастер.
    B_LogEntry(TOPIC_INNOS_FIRE,"Маг сказал, что я должен принести ему шесть огоньков Инноса. Чтобы я мог дотронуться до них, мне следует одеть пояс огненного человека, который был дан мне Илаем. Огоньки находятся где-то на территории лагеря.");
    Wld_SendTrigger("INNOSFIRE");
    
[B]    Wld_InsertItem(itmi_fire, "FP_INNOSFIRE_1");
    Wld_InsertItem(itmi_fire, "FP_INNOSFIRE_2");
    Wld_InsertItem(itmi_fire, "FP_INNOSFIRE_3");
    Wld_InsertItem(itmi_fire, "FP_INNOSFIRE_4");
    Wld_InsertItem(itmi_fire, "FP_INNOSFIRE_5");
    Wld_InsertItem(itmi_fire, "FP_INNOSFIRE_6");[/B]
};

Также слышал, что при игре на Семерке игра "съедает" кода, то есть некоторые команды попросту не работают. Не знаю, правда ли это, хотелось бы получить ответ. У меня сейчас 64-битная Семерка.

Заранее благодарен за ответ!
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Мільтен,
Циклического триггера нет? Если есть - запихни в нее вставку огоньков с проверкой. :)
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
Мільтен,
Циклического триггера нет? Если есть - запихни в нее вставку огоньков с проверкой. :)

Есть один, я использую его чтобы проверить, был ли надет пояс во время взятия огня. Если нет, то гг умирает. Скрипт выглядит так:

Код:
var int LOG_ENTRY;

func void evt_innosfire_func()
{
    
    if(Npc_HasItems(hero,itmi_fire) > 0) && (BELT == FALSE)
    {
        B_KillNpc(hero);
    }
    else 
    {
        Wld_SendTrigger("INNOSFIRE");
    };
    
    if((Npc_HasItems(hero,itmi_fire) > 5)) && (BELT == TRUE) && (LOG_ENTRY == FALSE)
    {
        B_LogEntry(TOPIC_INNOS_FIRE,"Я собрал Огни, надо отнести их мастеру Илаю.");
        LOG_ENTRY = TRUE;
    }
    else 
    {
        Wld_SendTrigger("INNOSFIRE");
    };
};
А как мне его улучшить?
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
Мільтен, именно не появляются или исчезают из инвентаря впоследствии?
Есть шанс с неправильным расположением фрипойнтов и вещи тупо проваливаются под текстуру. Я замечал такое, когда выкидывал некоторые предметы в некоторых местах (не в твоем моде, правда ;))
---------------
Кстати, у тебя случаем этот триггер "INNOSFIRE" не является триггер-скриптом, вызывающим эту функцию func void evt_innosfire_func()
Если так, то это как-то фигово получается. У тебя начинается многократное вызывание функции.
Да, и функцию можно написать так:
func void evt_innosfire_func()
{

if(Npc_HasItems(hero,itmi_fire) > 0) && (BELT == FALSE)
{
B_KillNpc(hero);
return;
};
if((Npc_HasItems(hero,itmi_fire) > 5)) && (BELT == TRUE) && (LOG_ENTRY == FALSE)
{
B_LogEntry(TOPIC_INNOS_FIRE,"Я собрал Огни, надо отнести их мастеру Илаю.");
LOG_ENTRY = TRUE;
//как я понимаю, в случае сбора 6 огней - триггер-скрипт перестает работать в этот момент.
}
else
{
Wld_SendTrigger("INNOSFIRE");
};
};
 

Alive

Участник форума
Регистрация
27 Янв 2011
Сообщения
150
Благодарности
0
Баллы
180
Простите мою ленивость, но не очень хочется всё перечитывать и искать...какой лучше программой (дее-)компилировать скрипты? ::)
 

hell9999

Участник форума
Регистрация
12 Апр 2008
Сообщения
2.049
Благодарности
1.168
Баллы
340
Сверху Снизу