|
|
01.04.2010, 14:55
|
#2282
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от jr13san link=board=gothic&t=1105030050&goto=5683648 date=04/01/10, в 11:44:41
Есть кто живой?
|
Разумеется, есть. :P Например, модератор, от которого вы только что получили первое устное предупреждение за флуд.
|
|
|
01.04.2010, 20:24
|
#2283
|
|
Re: М: Скриптинг в Готике
Извините, но просто тут так давно никто не пишет... Итак. У меня возникла проблемка в создании кое какой скриптовой идеи. Какой именно? А вот какой: Вобщем мне нужно сделать так, чтобы при блокировке ГГ удара(ближний бой) от врага(NPC, не животное, а человек или тот, от коророго можно защититься блоком), переменная BlockNPC = BlockNPC + 1. Короче, если ГГ поставил блок и искры посыпались от меча, то BlockNPC = BlockNPC + 1.
Я не нашёл в туторе Vam'a нужных функций для создания этой идеи. И в Готике(1,2) тоже не наблюдаю таких идей. Остаётся слазить в функцию тактики боя... Кто знает как сделать проще, пишите, буду очень рад.
|
|
|
06.04.2010, 14:21
|
#2284
|
|
Re: М: Скриптинг в Готике
Хотел бы спросить у знающих людей, что такое instance? В рамках ООП (а Deadalus является ОО языком), instance может быть либо объектом, либо классом. Для меня совсем не очевидна работа функций:
Код:
func void Wld_RemoveNpc(var int instanceNpc); func void Wld_InsertNpc(var int instanceNpc, var string spawnPoint);
Смущает вот этот код:
Код:
Info_Bau_2_EXIT.npc = Hlp_GetInstanceID(slf);
Если instance - это класс, то насколько безопасно менять статический член Info_Bau_2_EXIT.npc? Ведь игровой движок не сбрасывает состояние классов в начальное при смене игровой сессии (загрузке новой игры). Или например, у созданного с помощью Wld_InsertNpc нового объекта npc, как будет выглядеть обращение в членам-данным? Здесь идет обращение к статическим или динамическим данным npc?
Код:
CreateInvItems(npc, ItMi_Plants_Swampherb_01,50);
|
|
|
12.04.2010, 10:12
|
#2288
|
|
Re: М: Скриптинг в Готике
Хотел бы спросить у знающих людей, что такое instance?
|
Инстанция - это реальный объект, инициализированный конкретными значениями и производный от класса или прототипа (это тоже объект с предварительной инициализацией, но без самостоятельного применения). Инициализация всех инстанций и прототипов производится однократно при начале новой игры.
|
|
|
24.04.2010, 13:13
|
#2291
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от zero 123 link=board=gothic&t=1105030050&goto=5717952 date=04/23/10, в 18:08:07
Подскажите плиз, как 3ds файлы преобрзовать в max и наоборот? Заранее спасибо!
|
С помощью плагина KrxImpExp: http://krximpexp.sourceforge.net/ Вообще с этими вопросами в тему "Модостроение" писать нужно, а не в тему "Скриптинга".
|
|
|
03.08.2010, 14:36
|
#2293
|
|
Re: М: Скриптинг в Готике
|
|
|
25.08.2010, 18:31
|
#2296
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2JohaNBlack:Тебе с этими вопросами нужно идти в тему модостроения, а не скриптинга. Здесь обсуждаются только вопросы по скриптам. Что до самих вопросов, то здесь скачаешь МДК к Г1: Gothic Mod KitЗдесь обновление к нему: Mod-Kit - Spacer UpdateИ проблем со спейсером не будет.
|
|
|
26.08.2010, 16:58
|
#2297
|
|
Re: М: Скриптинг в Готике
Здраствуйте. На странице 90 Vmazz писал, как можно из диалога вставить в мир НПС
В Stаrtup`e НЕ прописываешь Wld_InsertNpc. Далее по окончании диалога вставляешь бандита(Wld_InsertNpc(BND_MY_666, "WP"), и он увидев ГГ нападает на него.
|
Расписание у НПС прописано, но он не появляется на вэйпойнте :( Вот кусок диалога:
Cпойлер(щелкните, чтобы прочесть):
func void none_666_johan_whatHere_Info() { * * *AI_Output(other,self,"none_666_johan_whatHere_15_ 00"); * * *//Кто ты? * * *AI_Output(self,other,"none_666_johan_whatHere_06_ 01"); * * *//Меня зовут Йохан. * * *AI_Output(other,self,"none_666_johan_whatHere_15_ 02"); * * *//Что ты тут делаешь? * * *AI_Output(self,other,"none_666_johan_whatHere_06_ 03"); * * *//Я готовлюсь к бою. * * *AI_Output(other,self,"none_666_johan_whatHere_15_ 04"); * * *//Зачем? * * *AI_Output(self,other,"none_666_johan_whatHere_06_ 05"); * * *//Ниже по тропе стоят два ублюдка из Нового Лагеря. Я собираюсь разделаться с ними! * * *AI_Output(self,other,"none_666_johan_whatHere_05_ 01"); * * *//А теперь не мешай мне, я должен тренироваться. * * *Wld_InsertNpc(none_2666_enemy01,"OW_PATH_SPAWN_EN EMY_JOHAN"); * * *Wld_InsertNpc(none_2667_enemy02,"OW_PATH_SPAWN_EN EMY_JOHAN"); * * *AI_StopProcessInfos(self); * * * * * *};
Если это важно, это первая Gothic, скрипт пишу в Gothic Sourcer v3.14.
|
|
|
26.08.2010, 19:59
|
#2301
|
|
Re: М: Скриптинг в Готике
2Dimus:
Cпойлер(щелкните, чтобы прочесть):
func void none_666_johan_whatHere_Info() { AI_Output(other,self,"none_666_johan_whatHere_15_ 00"); //Кто ты? AI_Output(self,other,"none_666_johan_whatHere_06_ 01"); //Меня зовут Йохан. AI_Output(other,self,"none_666_johan_whatHere_15_ 02"); //Что ты тут делаешь? AI_Output(self,other,"none_666_johan_whatHere_06_ 03"); //Я готовлюсь к бою. AI_Output(other,self,"none_666_johan_whatHere_15_ 04"); //Зачем? AI_Output(self,other,"none_666_johan_whatHere_06_ 05"); //Ниже по тропе стоят два ублюдка из Нового Лагеря. Я собираюсь разделаться с ними! AI_Output(self,other,"none_666_johan_whatHere_05_ 01"); //А теперь не мешай мне, я должен тренироваться. AI_StopProcessInfos(self); Wld_InsertNpc(OrcWarriorJohan,"OW_PATH_SPAWN_ENEM Y_JOHAN"); Wld_InsertNpc(OrcWarriorJohan,"OW_PATH_SPAWN_ENEM Y_JOHAN"); AI_GoToWP(OrcWarriorJohan,"OW_PATH_10_JOHAN") ; };
Вот скрипт, особых орков сделал, они появляются, но просто стоят на месте появление Ow_path_spawn_enemy_johan :(
|
|
|
29.08.2010, 16:52
|
#2309
|
|
Re: М: Скриптинг в Готике
2orebaron25: Если вариант диалога, то он должен быть упомянут через func void, пример из первой Готики:
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Snaf_Zutaten_Info() { AI_Output(other,self,"DIA_Snaf_Zutaten_15_00" ); //Что я могу для тебя сделать? AI_Output(self,other,"DIA_Snaf_Zutaten_01_01" ); //Ты, должно быть, любишь вкусно поесть. У меня тут новый рецепт: рагу из мясных жуков по снефски с грибами и рисом. AI_Output(self,other,"DIA_Snaf_Zutaten_01_02" ); //Ты получишь самую большую порцию, если сможешь принести мне трех жуков и несколько адских грибов... Я думаю, пяти будет достаточно. Info_ClearChoices(DIA_Snaf_Zutaten); Info_AddChoice(DIA_Snaf_Zutaten,"Ты хочешь, чтобы меня вырвало?",DIA_Snaf_Zutaten_KOTZ); Info_AddChoice(DIA_Snaf_Zutaten,"Звучит неплохо.",DIA_Snaf_Zutaten_DoIt); };
func void DIA_Snaf_Zutaten_KOTZ() { AI_Output(other,self,"DIA_Snaf_Zutaten_KOTZ_15_00 "); //Ты хочешь, чтобы меня вырвало? AI_Output(self,other,"DIA_Snaf_Zutaten_KOTZ_01_01 "); //Ты не обязан это есть, но, по крайней мере, мог бы попробовать! Приходи, если сможешь раздобыть то, о чем я просил. AI_Output(self,other,"DIA_Snaf_Zutaten_KOTZ_01_02 "); //Я уже отправил одного за припасами, но он так и не вернулся: небось, сбежал в Новый Лагерь. Snaf_Zutaten = LOG_RUNNING; Log_CreateTopic(CH1_SnafsRecipe,LOG_MISSION); Log_SetTopicStatus(CH1_SnafsRecipe,LOG_RUNNIN G); B_LogEntry(CH1_SnafsRecipe,"Повар Снаф, живущий во внешнем кольце Старого Лагеря, послал меня раздобыть 3 мясных жука и 5 адских грибов для своего нового рецепта."); Info_ClearChoices(DIA_Snaf_Zutaten); };
func void DIA_Snaf_Zutaten_DoIt() { AI_Output(other,self,"DIA_Snaf_Zutaten_DoIt_15_00 "); //Звучит неплохо. AI_Output(self,other,"DIA_Snaf_Zutaten_DoIt_01_01 "); //Тогда иди и раздобудь то, о чем я тебя просил. AI_Output(self,other,"DIA_Snaf_Zutaten_DoIt_01_02 "); //Я уже отправил одного за припасами, но он так и не вернулся: небось, сбежал в Новый Лагерь. Snaf_Zutaten = LOG_RUNNING; Snaf_FreeMBRagout = TRUE; Log_CreateTopic(CH1_SnafsRecipe,LOG_MISSION); Log_SetTopicStatus(CH1_SnafsRecipe,LOG_RUNNIN G); B_LogEntry(CH1_SnafsRecipe,"Повар Снаф, живущий во внешнем кольце Старого Лагеря, послал меня раздобыть 3 мясных жука и 5 адских грибов для своего нового рецепта. Я даже смогу попробовать его варево."); Info_ClearChoices(DIA_Snaf_Zutaten); };
|
|
|
29.08.2010, 21:01
|
#2310
|
|
Re: М: Скриптинг в Готике
Оно так и есть. Да. Но когда я в условии пишу:
Cпойлер(щелкните, чтобы прочесть):
instance DIA_Rupert_Killer(C_Info) { * * *npc = VLK_458_Rupert; * * *nr = 4; * * *condition = DIA_Rupert_Killer_Condition; * * *information = DIA_Rupert_Killer_Info; * * *permanent = FALSE; * * *description = "Что ты здесь делаешь?"; };
func int DIA_Rupert_Killer_Condition() { * * *if(Npc_KnowsInfo(other,DIA_Rupert_Murder_Yes)) * * *{ * * * * * * * * *return TRUE; * * *}; };
func void DIA_Rupert_Killer_Info() { * * *AI_Output(other,self,"DIA_Rupert_Killer_15_19"); * * *//Что ты знаешь про убийство Рамиреза? * * *AI_Output(self,other,"DIA_Rupert_Killer_03_32"); * * *//Что?! Я ничего н-не знаю... Отстань. * * *AI_StopProcessInfos(self); * * };
Оно мне пишет: Unknown identifier - DIA_RUPERT_KILLER_YES Так что приходится писать только DIA_RUPERT_KILLER в условии вместо DIA_RUPERT_KILLER_YES func int у меня реагирует только на сам диалог а не на его вариант выбора.
|
|
|
29.08.2010, 21:37
|
#2311
|
|
Re: М: Скриптинг в Готике
2orebaron25: Что-то я не совсем понял.
Оно мне пишет: Unknown identifier - DIA_RUPERT_KILLER_YES
Так что приходится писать только DIA_RUPERT_KILLER в условии вместо DIA_RUPERT_KILLER_YES
|
А где конкретно ты писал DIA_RUPERT_KILLER_YES? Приведи пожалуйста тот вариант, в котором тебе ошибку выдает.
|
|
|
29.08.2010, 22:23
|
#2312
|
|
Re: М: Скриптинг в Готике
Хорошо типичный вариант.Вот диалог с кассией:
Cпойлер(щелкните, чтобы прочесть):
instance DIA_Cassia_Arto(C_Info) { * * *npc = VLK_447_Cassia; * * *nr = 2; * * *condition = DIA_Cassia_Arto_Condition; * * *information = DIA_Cassia_Arto_Info; * * *permanent = FALSE; * * *description = "Ты что-то знаешь про Арто?."; };
func int DIA_Cassia_Arto_Condition() { * * *if((Join_Thiefs == TRUE)) * * *{ * * * * * * * * *return TRUE; * * *}; };
func void DIA_Cassia_Arto_Info() { * * *AI_Output(other,self,"DIA_Cassia_Arto_15_05"); * * *//Ты что-то знаешь про Арто?. * * *AI_Output(self,other,"DIA_Cassia_Arto_16_11"); * * *//Зачем тебе это? * * *Info_ClearChoices(DIA_Cassia_Arto); * * *Info_AddChoice(DIA_Cassia_Arto,"Я хочу найти его.",DIA_Cassia_Arto_Find); * * *Info_AddChoice(DIA_Cassia_Arto,"Не твое собачье дело.",DIA_Cassia_Arto_Dog); * * *Info_AddChoice(DIA_Cassia_Arto,"Ты можешь заткнутся и ответить на вопрос?.",DIA_Cassia_Arto_Shut); };
func void DIA_Cassia_Arto_Shut() { * * *AI_Output(other,self,"DIA_Cassia_Arto_Shut_15_06" ); *//Ты можешь заткнутся и ответить на вопрос? * * *AI_Output(self,other,"DIA_Cassia_Arto_Shut_16_12" ); *//Да как ты смеешь так разговаривать со мной? * * *AI_Output(self,other,"DIA_Cassia_Arto_Shut_16_13" ); *//Ответа ты не получишь. * * *Info_ClearChoices(DIA_Cassia_Arto); * * *Info_AddChoice(DIA_Cassia_Arto,"Да пошла ты в задницу,тварь!",DIA_Cassia_Arto_Shut_french connection uk); * * *Info_AddChoice(DIA_Cassia_Arto,"Ладно,прости,я сорвался.",DIA_Cassia_Arto_Shut_Well); };
func void DIA_Cassia_Arto_Find() { * * *AI_Output(other,self,"DIA_Cassia_Arto_Find_15_06" ); *//Я хочу найти его. * * *AI_Output(self,other,"DIA_Cassia_Arto_Find_16_12" ); *//(удивленно) Зачем? Умереть решил? * * *AI_Output(other,self,"DIA_Cassia_Arto_Find_15_07" ); *//Не совсем. Я найду его и тогда ему,так сказать,(громко) "не поздоровится". * * *AI_Output(self,other,"DIA_Cassia_Arto_Find_16_13" ); *//ТЫ убьешь Арто?! В это я не верю. * * *AI_Output(other,self,"DIA_Cassia_Arto_Find_15_08" ); *//Как хочешь. Но скажи мне что ты знаешь. * * *AI_Output(self,other,"DIA_Cassia_Arto_Find_16_14" ); //Это идиотская затея. Арто - личность загадочная. Я не знаю,где искать его. * * *AI_Output(self,other,"DIA_Cassia_Arto_Find_16_15" ); *//Попробуй поговорить с Рамирезом. * * *Info_ClearChoices(DIA_Cassia_Arto); };
А вот диалог с Рамирезом который должен начатся только при выборе варианта DIA_Cassia_Arto_find (вышеупомянутое)
Cпойлер(щелкните, чтобы прочесть):
instance DIA_Ramirez_Arto(C_Info) { * * *npc = VLK_445_Ramirez; * * *nr = 8; * * *condition = DIA_Ramirez_Arto_Condition; * * *information = DIA_Ramirez_Arto_Info; * * *permanent = FALSE; * * *description = "Что ты знаешь про Арто?"; };
func int DIA_Ramirez_Arto_Condition() { * * *if(Npc_KnowsInfo(other,DIA_Cassia_Arto_Find) && (Join_Thiefs == TRUE)) * * *{ * * * * * *return TRUE; * * *}; };
func void DIA_Ramirez_Arto_Info() { * * *AI_Output(other,self,"DIA_Ramirez_Arto_15_07"); * * *//Что ты знаешь про Арто?. * * *AI_Output(self,other,"DIA_Ramirez_Arto_16_25"); * * *//C чего ты взял , что я знаю что-то? * * *AI_Output(other,self,"DIA_Ramirez_Arto_15_08"); * * *//(серьезно) Кассия мне сказала об этом. * * *AI_Output(self,other,"DIA_Ramirez_Arto_16_26"); //Значит ты был у Кассии. Но почему Я должен тебе помочь? * * *Info_ClearChoices(DIA_Ramirez_Arto); * * *Info_AddChoice(DIA_Ramirez_Arto,"Мы должны держатся вместе.",DIA_Ramirez_Arto_Together); * * *Info_AddChoice(DIA_Ramirez_Arto,"Понятия не имею.",DIA_Ramirez_Arto_Know); * * *Info_AddChoice(DIA_Ramirez_Arto,"Потому что иначе - я убью тебя!.",DIA_Ramirez_Arto_Kill); * * *Info_AddChoice(DIA_Ramirez_Arto,"Что ты хочешь за свою информацию?.",DIA_Ramirez_Arto_What); };
При компиляции мне пишет: Unknown identifier - DIA_CASSIA_ARTO_FIND в диалоге с рамирезом.
|
|
|
30.08.2010, 00:50
|
#2315
|
|
Re: М: Скриптинг в Готике
2orebaron25: Ну тогда попробуй ввести глобальную переменную, и после фразы Кассии "Попробуй поговорить с Рамирезом" присвой ей значение, например 1, а в диалоге с Рамирезом проверить ее.
Cпойлер(щелкните, чтобы прочесть):
func int DIA_Ramirez_Arto_Condition() { * * if (x == 1) && (Join_Thiefs == TRUE)) * * { * * * * * return TRUE; * * }; };
например так. По идее должно сработать. Вот только как ввести глобальную переменную я не знаю, не нужно было пока :)
|
|
|
30.08.2010, 01:12
|
#2317
|
|
Re: М: Скриптинг в Готике
2orebaron25: Вот, узнал, глобальные переменные вводятся в файле Story_Globals, тип var int, потом в диалоге просто присвоить TRUE или FALSE, и еще в func void DIA_Cassia_Arto_Find() в начале лучше эту переменную обнулить на всякий случай. Насчет дневника и квеста не знаю, а насчет смерти - вроде нужно менять гильдию, от нее зависит обморок или мгновенная смерть. Попробуй в диалоге с нужным НПС B_ChangeGuild(НПС,GIL_None), вместо GIL_None можно поставить нужную гильдию, например ту же бандитскую GIL_Bdt. Правда я не знаю, сработает ли это все или нет.
|
|
|
30.08.2010, 12:18
|
#2319
|
|
Re: М: Скриптинг в Готике
2orebaron25:
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Cassia_Arto_Find() { * *x = 0; * * AI_Output(other,self,"DIA_Cassia_Arto_Find_15_06") ; *//Я хочу найти его. * * AI_Output(self,other,"DIA_Cassia_Arto_Find_16_12") ; *//(удивленно) Зачем? Умереть решил? * * AI_Output(other,self,"DIA_Cassia_Arto_Find_15_07") ; *//Не совсем. Я найду его и тогда ему,так сказать,(громко) "не поздоровится". * * AI_Output(self,other,"DIA_Cassia_Arto_Find_16_13") ; *//ТЫ убьешь Арто?! В это я не верю. * * AI_Output(other,self,"DIA_Cassia_Arto_Find_15_08") ; *//Как хочешь. Но скажи мне что ты знаешь. * * AI_Output(self,other,"DIA_Cassia_Arto_Find_16_14") ; //Это идиотская затея. Арто - личность загадочная. Я не знаю,где искать его. * * AI_Output(self,other,"DIA_Cassia_Arto_Find_16_15") ; *//Попробуй поговорить с Рамирезом. * * x = 1; * * Info_ClearChoices(DIA_Cassia_Arto); };
func int DIA_Ramirez_Arto_Condition() { * * if (x == 1) && (Join_Thiefs == TRUE)) * * { * * * * * return TRUE; * * }; };
Вот это должно сработать, только не забудь эту переменную прописать в Story_Globals.
|
|
|
Здесь присутствуют: 18 (пользователей: 0 , гостей: 18)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 03:54. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|