|
|
12.09.2005, 09:32
|
#241
|
|
Re: Уроки скриптологии
2Vendiga:
Ой, а почему уроки прекратились? Что уже нечему учть?
|
Учить ещё есть чему, а вот времени на это уже нет. Все силы "брошены" на новую версию декомпилятора. Да, большинству из вас уже не нужна учеба, сами кого захотите научите. ;)
|
|
|
12.09.2005, 16:48
|
#242
|
|
Re: Уроки скриптологии
2Vam:
Да, большинству из вас уже не нужна учеба, сами кого захотите научите.
|
Да, многому.... основному ::) Но вот дальше бурить самые потаённые глубины скриптов... Здесь либо без пол-литра, либо без Vam'a не обойдёшься :D
|
|
|
03.10.2005, 11:47
|
#244
|
|
Re: Уроки скриптологии
2eLong:
Просттите, я просмотрел, или здесь нет описания AI?
|
Вся AI Готики 2 полностью рассмотрена начиная с 4 страницы (пост 79).
|
|
|
04.11.2005, 21:03
|
#246
|
|
Re: Уроки скриптологии
[quote=Stel1 link=board=gothic&t=1098161614&start=225#244 date=11/04/05, в 16:37:58]
Добавление от 11/04/05, в 16:57:58 После декомпиляции gothic.dat декомпилятором Vama скрипты выглядят не наглядно, там трудно что либо разобрать, [] квадратик заменяет начало новой строки. А можно их привести в более наглядный вид? Ну типа как немецкие?
|
Странно... instance BDT_1096_ADDON_LENNAR_ANEWFACE(C_Info) { * * *npc = BDT_1096_Addon_Lennar; * * *condition = bdt_1096_addon_lennar_anewface_condition; * * *information = bdt_1096_addon_lennar_anewface_info; * * *important = TRUE; * * *permanent = FALSE; };
func int bdt_1096_addon_lennar_anewface_condition() { * * *return TRUE; }; ********
Это не наглядно? Хм... И какие еще []? Пользуйся UltraEdit и настрой его (значки всякие лишние, типа начала строки...)!
|
|
|
06.11.2005, 01:18
|
#248
|
|
Re: Уроки скриптологии
Цитата:
Сообщение от Stel1 link=board=gothic&t=1098161614&start=225#246 date=11/04/05, в 21:07:28
Я понял это блокнот так галимо открывает в word нормально
|
А второй Почему мой созданный меч не пашет в русских скриптах пишет "Unknow indintifired (или что-то так) ScHasMyWeapon.d *"ItMw_MySword"". А в немецкой пашет. Я компилирую спейсером т.к. декомпилятор вама выдаёт ошибки програмистов.
|
Ну так спейсер и не обращает внимания на твои ошибки :D, а декомпилятор, обращает. Пиши скрипты без ошибок ;)
|
|
|
09.12.2005, 03:07
|
#251
|
|
Re: Уроки скриптологии
Читаю тут на досуге сведенные TycoooN`ом "Уроки скриптологии", выложенные в таверне, и сходу вижу такую запись:
Тема первая: Типы переменных. В скриптах используется всего несколько типов переменных: VOID - "пустой" тип INT - целое число FLOAT - число с плавающей точкой STRING - строка текста CLASS - структура с внутренними типами и функциями PROTOTYPE - обычно инициализация класса, но возможно и другое использование INSTANCE - пока сказать нечего. вот, кажется, и все типы.
|
И думается мне "а что же подумают новички, типа меня, об загадочном INSTANCE? еще ведь легендами какими обсадят и пустят черти какими слухами в народ". Может, с учетом накопленного опыта, продумать, как подредактировать имеющиеся пробелы? Для порядку, такскать, поскольку в сведенном виде (спасибо TycoooN) сей документ (спасибо Vam) особенно эффективен и полезен. Добавление от 12/09/05, в 02:27:48
подскажите как сделать собственную книгу или письмо в Г2, вернее мне скрипт для этого нужен.
|
Items\IT_Written.d Содержимое этого файла ОЧЕНЬ тебе поможет.
|
И вот таких вопросов-ответов масса, насколько я помню. По ним бы FAQ сделать было бы полезно. Извиняюсь за оффтоп, но он по делу.
|
|
|
28.04.2006, 18:56
|
#254
|
|
Re: Уроки скриптологии
2Antolflash:
А теперь главный вопрос! Где это хранится??? в какой папке, и с помощью чего открыть????
|
Папка со скриптами любой Готики - ..\_work\data\scripts\Content - сюжетные скрипты, ..\_work\data\scripts\System - системные скрипты. Любые *.d файлы открываются и редактируются любым текстовым редактором. Если же эти папки отсутствуют и есть только папка ..\_work\data\scripts\_compiled, то скрипты нужно сначала получить, запустив Декомпилятор скриптов Готики, но это уже другая тема... (см. здесь)
|
|
|
19.05.2006, 19:41
|
#255
|
|
Re: М: Уроки скриптологии
Вопрос по названиям предметов в скриптах. Поле "name" отвечает за отображаемое название предмета на земле, поле "description" - за отображение названия предмета в инвентаре. А вот какое поле отвечает за ОПИСАНИЕ предмета в инвентаре? Например: ЯБЛОКО. МЯГКОЕ И СОЧНОЕПример скрипта ниже
instance ItMW_Addon_Knife01(C_Item) { name = "Складной нож"; mainflag = ITEM_KAT_NF; flags = ITEM_SWD; material = MAT_METAL; value = Value_Wolfsmesser; damageTotal = Damage_Wolfsmesser; damagetype = DAM_EDGE; range = Range_Wolfsmesser; on_equip = Equip_1H_03; on_unequip = UnEquip_1H_03; cond_atr[2] = ATR_STRENGTH; cond_value[2] = Condition_Wolfsmesser; visual = "ItMw_012_1h_Knife_02.3DS"; description = "Маленький нож. Хорошо прятать в сапог"; text[2] = NAME_Damage; count[2] = damageTotal; text[3] = NAME_Str_needed; count[3] = cond_value[2]; text[4] = NAME_ADDON_BONUS_1H; count[4] = Waffenbonus_03; text[5] = NAME_Value; count[5] = value; };
|
Распишите плз за что отвечает каждая строка?
|
|
|
20.05.2006, 10:20
|
#256
|
|
Re: М: Уроки скриптологии
2fokon:
Распишите плз за что отвечает каждая строка?
|
Похоже ты не очень хорошо читал Уроки скриптологии, в них рассмотрено множество описаний предметов, но повторить не сложно: instance ItMW_Addon_Knife01(C_Item) { * * // название предмета в фокусе * * name = "Складной нож"; * * // флаг категории предмета - оружие блжнего радиуса поражения * * mainflag = ITEM_KAT_NF; * * // другие флаги - тип оружия - меч * * flags = ITEM_SWD; * * // материал предмета - металлический * * material = MAT_METAL; * * // стоимость предмета в "рублях" * * value = Value_Wolfsmesser; * * // суммарное повреждение, наносимое оружием * * damageTotal = Damage_Wolfsmesser; * * // тип наносимого повреждения - повреждение острым оружием * * damagetype = DAM_EDGE; * * // радиус поражения оружия ближнего боя * * range = Range_Wolfsmesser; * * // функция, вызываемая при экипировке * * on_equip = Equip_1H_03; * * // функция, вызываемая, когда предмет снимается и убирается в инвентарь * * on_unequip = UnEquip_1H_03; * * // для применения предмета требуется сила * * cond_atr[2] = ATR_STRENGTH; * * // значение силы для применения предмета * * cond_value[2] = Condition_Wolfsmesser; * * // имя файла изображения предмета * * visual = "ItMw_012_1h_Knife_02.3DS"; * * // название предмета в инвентаре * * description = "Маленький нож. Хорошо прятать в сапог"; * * // далее text[] и count[] соответственно строки описания предмета в инвентаре и значения этих характеристик, индекс массивов - номер строки записи, при пропущенном индексе выводится пустая строка * * // третья строка - "Повреждение: значение повреждения" * * text[2] = NAME_Damage; * * count[2] = damageTotal; * * // четвертая строка - "Необходимо силы: значение силы" * * text[3] = NAME_Str_needed; * * count[3] = cond_value[2]; * * // пятая строка - "Бонус к одноручному умению - значение бонуса" * * text[4] = NAME_ADDON_BONUS_1H; * * count[4] = Waffenbonus_03; * * // шестая строка - "Ценность: значение стоимости" * * text[5] = NAME_Value; * * count[5] = value; };
...вот и всё, для других предметов аналогично.
|
|
|
31.05.2006, 20:56
|
#259
|
|
Re: М: Уроки скриптологии
Цитата:
Сообщение от marazmus link=board=gothic&t=1098161614&start=250#257 date=05/30/06, в 23:23:20
Поставь "защищаемому" монстру такую же гильдию, что и у людей, которые его защищают. В случае нападения на монстра люди будут атаковать напавшего, так как это будет нападение на "своего".
|
Речь идёт о Г1... Пробовал. У монстра остаётся 1 хитпойнт, после чего он успешно "восстаёт из мёртвых". Смутно понимаю, что нужно править zs_unconscious.d, и zs_dead.d, но как определить именно конкретного монстра?
|
|
|
31.05.2006, 21:22
|
#260
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: М: Уроки скриптологии
По поводу Г1 - не спец, извини. Под Г1 ничего не скриптил. Но файл GUILDS.D, определяющий отношения между гильдиями, там тоже есть.
Если остается 1 хитпойнт - значит, ты прописал ему гильдию, которая "дружественна" или "нейтральна" ГГ. В этом случае, победив персонажа, ты его не убиваешь, а только отправляешь в "нокдаун". Я тоже склоняюсь к тому, что нужно копать zs_unconcious.d, если неохота возиться с гильдиями. А монстру просто прописать ID, и по нему определять в zs_unconcious.d факт "побеждения". Потом переводить побежденного монстра в состояние zs_dead.
p.s. А "защитники" нападают на тебя? Решил эту задачу? p.p.s. Может, перенесем обсуждение в тему "Скриптинг в Готике"? Там это будет более уместно. Может, модераторы "откусят" наш кусок обсуждения и перекинут в эту тему?
|
|
|
11.07.2006, 19:57
|
#262
|
|
Re: М: Уроки скриптологии
2Soullesser:
Подскажите плз где можно скачать ворлд мейкер для Готики..
|
Тебе надо сюда. Там есть практически всё, что нужно для модостроения. А вопросы по модостроению задаются здесь.
|
|
|
31.07.2006, 15:01
|
#264
|
|
Re: М: Уроки скриптологии
2-AlexX-:
как узнать, что ГГ ударил NPC сдади?
|
Это сделать нельзя, движок не определяет с какой стороны НПС насесен удар, и в скриптах это никак не отражается. Хотя можно попробовать внести в функцию реакции на повреждение B_AssessDamage анализ, видит ли жертва агрессора, используя функцию движка Npc_CanSeeNpc.
Как сделать так, чтобы NPC реагировали на увиденные ими трупы других NPC ?
|
Это сделать можно. Есть восприятие - PERC_ASSESSBODY (восприятие НПС мертвого тела). Обработчик этого восприятия реализован только для монстров, если у монстра стоит флаг пожирать падаль и рядом есть труп, то движок выдает реакцию на восприятие и включается обработчик его B_MM_AssessBody, в котором монстр бежит к трупу и "кушает" его. Необходимо написать обработчик этого восприятия для людей и активировать это восприятие.
|
|
|
01.08.2006, 23:10
|
#266
|
|
Re: М: Уроки скриптологии
2Тёмный маг:
Я хочу что бы при прочтении книги “ItWr_Book_Mis” появился предмет “ItMw_2H_Blessed_02” на вэйпоинте под названием “NW_Farm3” (к примеру), но при этом только один раз, а не при каждом прочтении книги.
|
Поставь просто флаг, т.е. заводим глобальную переменную, при чтении смотрим, если она = FALSE, то ставим предмет и присваиваем ей значение TRUE. Это всё... ::)
|
|
|
16.08.2006, 19:21
|
#267
|
|
Re: М: Уроки скриптологии
Не могли бы вы, добрые люди, помочь чуток? Я вот вроде отпечатывал всё нормально, но компилятор упорно материться...
Info_ClearChoices (dia_vlk_432_moe); * * *Info_AddChoice (dia_vlk_432_moe, "А не пошел бы ты к такой то бабушке?", dia_vlk_432_moe_1); * *Info_AddChoice (dia_vlk_432_moe, "Хорошо, я согласен", dia_vlk_432_moe_2); };
func void dia_vlk_432_moe_1 () { * * *AI_Output (other, self, "dia_vlk_432_moe_1_02_01"); // А не пошел бы ты к такой то бабушке * * *AI_Output (self, other, "dia_vlk_432_moe_1_01_01"); // Парень, ты, наверное, меня не понял. Ну это не беда, я тебе сейчас всё объясню. * * *B_Attack(self,other,AR_NONE,1); * * *AI_StopProcessInfos(self); };
func void dia_vlk_432_moe_2 () { * * *AI_Output(other,self,"dia_vlk_432_moe_2_02_01"); // Хорошо, я согласен * * *AI_Output(self,other,"dia_vlk_432_moe_2_01_01"); // Ты все правильно сделал. Не забудь наведывать ко мне каждый день. * * *B_GiveInvItems(other,self,ItMi_Gold, 20); * * *B_LogEntry (TOPIC_BlackHawks, "Теперь я каждый день должен платить Мо по 20 золотых"); * * *AI_StopProcessInfos(self); };
На выделенную жирным строчку компилятор упорно матерится, что там не тот тип... *Не поможете, а? *::)
|
|
|
16.08.2006, 22:20
|
#268
|
|
Re: М: Уроки скриптологии
2Pui-LeGuDaa:
На выделенную жирным строчку компилятор упорно матерится, что там не тот тип... Не поможете, а?
|
Приведи полное сообщение компилятора, может ты со строкой ошибся, здесь похоже всё нормально. Какой компилятор используешь?
|
|
|
17.08.2006, 18:32
|
#270
|
|
Re: М: Уроки скриптологии
Цитата:
Сообщение от Pui-LeGuDaa link=board=gothic&t=1098161614&start=250#268 date=08/17/06, в 00:02:24
Скажите мне плиз тег на спойлер, я бы спойлер сделал со скриптом.
|
Тег на спойлер:[Spoiler] ...Spoiler TEXT */Spoiler соответственно - "Spoiler" в квадратных скобках [/Spoiler]
|
|
|
17.08.2006, 18:46
|
#271
|
|
Re: М: Уроки скриптологии
Вот значит весь скрипт. Осторожно, больше двухсот строк, точнее почти 300. [spoiler]instance dia_vlk_432_moe (C_Info) { * * *npc = vlk_432_moe; * * *nr = 1; * * *condition = dia_vlk_432_moe_condition; * * *information = dia_vlk_432_moe_info; * * *permanent = false; * * *important = true; };
func int dia_vlk_432_moe_condition () { * * *return TRUE; };
func void dia_vlk_432_moe_info () { * * *AI_Output (self, other, "dia_vlk_432_moe_01_01"); // Íå òîðîïèñü ; äðóæîê, ðàçãîâîð ; åñòü. * * *AI_Output (other, self, "dia_vlk_432_moe_02_01"); // ×òî òåáå íóæíî? * * *AI_Output (self, other, "dia_vlk_432_moe_01_02"); // Òû ïðèøåë íà íàùó òåððèòîð&# 232;þ è çäåñü äåéñòâóþ ; äðóãèå çàêîíû, íåæåëè â îñòàëüíû&# 245; ÷àñòÿõ ãîðîäà. * * *AI_Output (self, other, "dia_vlk_432_moe_01_03"); // Åñëè òû õî÷åøü ñïîêîéíî ; æèòü è ãóëÿòü ãäå õî÷åøü, òî çà ýòî íóæíî íàì çàïëàòèò&# 252;. * * *AI_Output (other, self, "dia_vlk_432_moe_02_02"); // À êòî âû òàêèå, ÷òîáû ÿ âàì ïëàòèë? * * *AI_Output (self, other, "dia_vlk_432_moe_01_04"); // Ìû? Òû ðàçâå íå ñëûøàë î áàíäå "×åðíûå ßñòðåáû"? * * *AI_Output (other, self, "dia_vlk_432_moe_01_03"); // Íåò, íå ñëûøàë. * * *AI_Output (self, other, "dia_vlk_432_moe_01_05"); // Íó, òåïåðü çíà÷èò óñëûøàë. * * *AI_Output (self, other, "dia_vlk_432_moe_01_06"); //  îáùåì, òû äîëæåí áóäåøü ïëàòèòü íàì êàæäûé äåíü ïî 20 ìîíåò. ß äóìàþ, äëÿ òåáÿ ýòî íå ñîñòàâèò ; òðóäà. * * *Info_ClearChoices (dia_vlk_432_moe); * * *Log_CreateTopic (TOPIC_BlackHawks, LOG_MISSION); * *Log_SetTopicStatus (TOPIC_BlackHawks, LOG_RUNNING); * *B_LogEntry (TOPIC_BlackHawks, " ïîðòó ÿ âñòðåòèë ; Ìî, ÷ëåíà áàíäû ×åðíûõ ßñòðåáîâ ;. Îí âûìîãàå ó ìåíÿ äåíüãè."); * * *Info_ClearChoices (dia_vlk_432_moe); * * *Info_AddChoice (dia_vlk_432_moe, "À íå ïîøåë áû òû ê òàêîé-òî áàáóøêå?", dia_vlk_432_moe_1); * *Info_AddChoice (dia_vlk_432_moe, "Õîðîøî, ÿ ñîãëàñåí." , dia_vlk_432_moe_2); };
func void dia_vlk_432_moe_1 () { * * *AI_Output (other, self, "dia_vlk_432_moe_1_02_01"); // À íå ïîøåë áû òû ê òàêîé-òî áàáóøêå? * * *AI_Output (self, other, "dia_vlk_432_moe_1_01_01"); // Ïàðåíü, òû, íàâåðíîå ;, ìåíÿ íå ïîíÿë. Íó, ýòî íå áåäà, ñåé÷àñ ÿ òåáå âñ¸ îáúÿñíþ. * * *B_Attack(self,other,AR_NONE,1); * * *AI_StopProcessInfos(self); };
func void dia_vlk_432_moe_2 () { * * *AI_Output(other,self,"dia_vlk_432_moe_2_02_01"); // Õîðîøî, ÿ ñîãëàñåí ;. * * *AI_Output(self,other,"dia_vlk_432_moe_2_01_01"); // Òû âñå ïðàâèëüí&# 238; ñäåëàë. Íå çàáóäü íàâåäûâà&# 242;üñÿ êî ìíå êàæäûé äåíü. * * *B_GiveInvItems(other,self,ItMi_Gold, 20); * * *B_LogEntry (TOPIC_BlackHawks, "Òåïåðü ÿ äîëæåí êàæäûé äåíü ïëàòèòü Ìî 20 çîëîòûõ."); * * *AI_StopProcessInfos(self); };
instance dia_vlk_432_moe_afterfight_loose (C_Info) { * * *npc = vlk_432_moe; * * *nr = 2; * * *condition = dia_vlk_432_moe_afterfight_loose_condition; * * *information = dia_vlk_432_moe_afterfight_loose_info; * * *permanent = false; * * *important = true; };
func int dia_vlk_432_moe_afterfight_loose_condition () { * * *if((self.aivar[AIV_LastFightAgainstPlayer] == FIGHT_LOST) && Npc_IsInState(self,ZS_Talk)) * * *{ * * * * * *return TRUE; * * *}; };
func void dia_vlk_432_moe_afterfight_loose_info () { * * *AI_Output(self,other,"dia_vlk_432_moe_faterfight_ loose_02_01"); // À òû óïåðòûé ïàðåíü. È ÿ çàìàðàë ñâîé ñþðòóê, ïîýòîìó òû áóäåøü ïëàòèòü íå 20, à 40 çîëîòûõ. * * *AI_Output(self,other,"dia_vlk_432_moe_faterfight_ loose_02_02"); // ß äóìàþ ýòî íàó÷èò òåáÿ óâàæàòü ñòàðøèõ. Òû ìåíÿ ïîíÿë? * * *AI_Output(other,self,"dia_vlk_432_moe_faterfight_ loose_01_01"); // Äà, ÿ âñå ïîíÿë. * * *B_LogEntry(TOPIC_BlackHawks, "Òåïåðü ÿ äîëæåí êàæäûé äåíü ïëàòèòü Ìî 40 çîëîòûõ."); * * *AI_StopProcessInfos(self); };
instance dia_vlk_432_moe_afterfight_win (C_Info) { * * *npc = vlk_432_moe; * * *nr = 2; * * *condition = dia_vlk_432_moe_afterfight_win_condition; * * *information = dia_vlk_432_moe_afterfight_win_info; * * *permanent = false; * * *important = true; };
func int dia_vlk_432_moe_afterfight_win_condition () { * * *if((self.aivar[AIV_LastFightAgainstPlayer] != FIGHT_LOST) && Npc_IsInState(self,ZS_Talk)) * * *{ * * * * * *return TRUE; * * *}; };
func void dia_vlk_432_moe_afterfight_win_info () { * * *AI_Output(self,other,"dia_vlk_432_moe_faterfight_ win_02_01"); // Ïàðåíü, ó òåáÿ áîëüøèå íåïðèÿòí&# 238;ñòè! ß òàê ýòî äåëî íå îñòàâëþ. * * *B_LogEntry(TOPIC_BlackHawks, "ß ïîáåäèë Ìî, îí îáåùàë ìíå óñòðîèòü ; íåïðèÿòí&# 238;ñòè."); * * *AI_StopProcessInfos(self); };
* * * instance dia_vlk_432_moe_pay (C_Info) { * * *npc = vlk_432_moe; * * *nr = 3; * * *condition = dia_vlk_432_moe_pay_condition; * * *information = dia_vlk_432_moe_pay_info; * * *permanent = true; * * *important = true; };
func int dia_vlk_432_moe_pay_condition () { * * *If(Npc_KnowsInfo(other, dia_vlk_432_moe_2)) * * *{ * * *return TRUE; * * *}; };
func void dia_vlk_432_moe_pay_info () { * * *AI_Output ( self, other, "dia_vlk_432_moe_pay_01_01"); // Òû, íàâåðíîå ;, ïðèí¸ñ äåíüãè? * * *Info_Addchoice (dia_vlk_432_moe_pay, "Äà, âîò îíè.", dia_vlk_432_moe_pay_yes); * * *Info_Addchoice (dia_vlk_432_moe_pay, "Òû íè÷åãî íå ïîëó÷èøü!" , dia_vlk_432_moe_pay_no); };
func void dia_vlk_432_moe_pay_info_yes () { * * *AI_Output ( other, self, "dia_vlk_432_moe_pay_yes_02_01"); // Äà, âîò îíè. * * *if(B_GiveInvItems(other,self,ItMi_Gold,20)) * * *{ * * * * * *AI_Output(self,other,"DIA_vlk_432_moe_pay_yes_01_ 01"); * * *//Íó õîðîøî, ìîæåøü èäòè. * * * * * *AI_StopProcessInfos(self); * * *} * * *else if(Npc_HasItems(hero,ItMi_Gold) <20) * * *{ * * * * * *AI_Output(self,other,"DIA_vlk_432_moe_pay_yes_01_ 01"); * * *// Çäåñü íå âñ¸! Òû ðåøèë ïåðåõèòð&# 232;òü ìåíÿ! * * * * * *B_Attack(self,other,AR_NONE,1); * * *}; }; * * * instance dia_vlk_432_moe_pay40 (C_Info) { * * *npc = vlk_432_moe; * * *nr = 4; * * *condition = dia_vlk_432_moe_pay40_condition; * * *information = dia_vlk_432_moe_pay40_info; * * *permanent = true; * * *important = true; };
func int dia_vlk_432_moe_pay40_condition () * * *{ * * *If (Npc_KnowsInfo(other, dia_vlk_432_moe_afterfight_loose)) * * *{ * * *return TRUE; * * *}; };
func void dia_vlk_432_moe_pay40_info () { * * *AI_Output ( self, other, "dia_vlk_432_moe_pay40_01_01"); // Òû, íàâåðíîå ;, ïðèí¸ñ äåíüãè? * * *Info_Addchoice (dia_vlk_432_moe_pay40, "Äà, âîò îíè.", dia_vlk_432_moe_pay40_yes); * * *Info_Addchoice (dia_vlk_432_moe_pay40, "Òû íè÷åãî íå ïîëó÷èøü!" , dia_vlk_432_moe_pay40_no); };
func void dia_vlk_432_moe_pay40_info_yes () { * * *AI_Output ( other, self, "dia_vlk_432_moe_pay40_yes_02_01"); // Äà, âîò îíè. * * *if(B_GiveInvItems(other,self,ItMi_Gold,40)) * * *{ * * * * * *AI_Output(self,other,"DIA_vlk_432_moe_pay40_yes_0 1_01"); * * *//Íó õîðîøî, ìîæåøü èäòè. * * * * * *AI_StopProcessInfos(self); * * * * * * * * *} * * *else if(Npc_HasItems(hero,ItMi_Gold) >40) * * *{ * * * * * *AI_Output(self,other,"DIA_vlk_432_moe_pay40_yes_0 1_01"); * * *// Çäåñü íå âñ¸! Òû ðåøèë ïåðåõèòð&# 232;òü ìåíÿ! * * * * * *B_Attack(self,other,AR_NONE,1); * * * * * *AI_StopProcessInfos(self); * * *}; };
instance dia_moe_ment (C_Info) { * * *npc = vlk_432_moe; * * *nr = 5; * * *condition = dia_moe_ment_condition; * * *information = dia_moe_ment_info; * * *permanent = true; * * *important = true; };
func int dia_moe_ment_condition () { * * *If(other.guild == GIL_MIL) * * *{ * * *return TRUE; * * *}; };
func void dia_moe_ment_info () { * * *AI_Output ( self, other, "dia_moe_ment_01_01"); // Ýé, ïàðíè! Âîò ýòîò òèï, ïðî êîòîðîãî ; ÿ âàì ãîâîðèë! * * *AI_Output ( other, self, "dia_moe_ment_02_01"); // Òåáå ïîêàçàëî&# 241;ü ìàëî ïðîøëîãî ; ðàçãîâîð&# 224;? * * *AI_Output ( self, other, "dia_moe_ment_01_02"); // Ñåé÷àñ ÿ òåáå çàäàì, ìåíòîâñê&# 224;ÿ ñêîòèíà! * * *B_LogEntry(TOPIC_BlackHawks, "Âñÿ áàíäà ×åðíûõ ßñòðåáîâ ; õî÷åò ìåíÿ óáèòü. ß äîëæåí ïîãîâîðè&# 242;ü ïî ýòîìó ïîâîäó ñ Ëîðäîì Àíäðå."); * * *B_Attack(self,other,AR_NONE,1); * * *AI_StopProcessInfos(self); };
instance dia_moe_join (C_Info) { * * *npc = vlk_432_moe; * * *nr = 6; * * *condition = dia_moe_join_condition; * * *information = dia_moe_join_info; * * *permanent = false; * * *important = true; };
func int dia_moe_join_condition () { * * *If(other.guild != GIL_MIL) && (other.guild != GIL_PAL) * * *{ * * * * * *return TRUE; * * *}; };
func void dia_moe_join_info () { * * *AI_Output ( self, other, "dia_moe_join_01_01"); // Ýé, ïàðåíü! * * *AI_Output ( other, self, "dia_moe_join_02_01"); // ×òî? Îïÿòü çà ñòàðîå? * * *AI_Output ( self, other, "dia_moe_join_01_02"); // Íåò. Ó ìåíÿ åñòü ê òåáå äåëî. * * *AI_Output ( * * *other, self, "dia_moe_join_02_02"); // Êàêîå åùå äåëî? * * *AI_Output ( self, other, "dia_moe_join_01_03"); // Òîáîé çàèíòåðå&# 241;îâàëñÿ íàø áîññ, Îñêàð. Îí õîòåë áû âñòðåòèò&# 252;ñÿ ñ òîáîé. * * *AI_Output ( other, self, "dia_moe_join_02_03"); // ×òîáû ìåíÿ ïðèêîí÷è&# 242;ü? * * *AI_Output ( self, other, "dia_moe_join_01_04"); // Íåò, ÷òîáû ïîãîâîðè&# 242;ü. Ïðèõîäè â ïîëíî÷ü â òàâåðíó Êàðäèôà, îí áóäåò æäàòü òåáÿ. * * *B_LogEntry(TOPIC_BlackHawks, "Ìåíÿ õî÷åò âèäåòü ãëàâàðü áàíäû. Ìíå íóæíî ïðèéòèâ òàâåðíó Êàðäèôà â ïîëíî÷ü."); * * *AI_StopProcessInfos(self); };
instance dia_moe_enter (C_Info) { * * *npc = vlk_432_moe; * * *nr = 7; * * *condition = dia_moe_enter_condition; * * *information = dia_moe_enter_info; * * *permanent = true; * * *important = true; };
func int dia_moe_enter_condition () { * * *if(Wld_IsTime(0,0,2,0)) * * *{ * * * * * *return TRUE; * * *}; };
func void dia_moe_enter_info () { * * *AI_Output ( self, other, "dia_moe_enter_01_01"); // ×òî òåáå çäåñü íóæíî? * * *AI_Output ( other, self, "dia_moe_enter_02_01"); // Õî÷ó ïîñèäåòü ; â òàâåðíå. * * *AI_Output ( other, self, "dia_moe_enter_01_02"); // Ïðèõîäè ïîçæå, òàâåðíà óæå ïåðåïîëí&# 229;íà. * * *AI_StopProcessInfos(self); };
instance dia_moe_enterjoin (C_Info) { * * * * * *npc = vlk_432_moe; * * *nr = 8; * * *condition = dia_moe_enterjoin_condition; * * *information = dia_moe_enterjoin_info; * * *important = true; * * *permanent = false; };
func int dia_moe_enterjoin_condition () { * * *If(Npc_KnowsInfo(other, dia_moe_join)) * * *{ * * * * * *return true; * * *}; };
func void dia_moe_enterjoin_info () { * * *AI_Output ( self, other, "dia_moe_enterjoin_01_01"); // Ñòîé. ×òî òåáå çäåñü íóæíî? * * *AI_Output ( other, self, "dia_moe_enterjoin_02_01"); // Ìåíÿ æäåò âàø áîññ. * * *AI_Output ( self, other, "dia_moe_enterjoin_01_02"); // Ïðîõîäè. * * *AI_StopProcessInfos(self); }; [/spoiler]
Да что ж ты будешь делать. Текст из ноутпада не делаеться по-русски
|
|
|
18.08.2006, 10:21
|
#274
|
|
Re: М: Уроки скриптологии
2Pui-LeGuDaa:
но у меня ведь инстанция разделяется на две ветки.
|
Инстанция ни на что разделяться не может, это диалог может идти разными путями.
А мне нужно, чтобы при условии посылания Мо, ГГ платил 40, а при условии того, что платит сразу, платит 40 монет.
|
Я не знаю по логике, что тебе нужно и как ты строишь диалог, но могу сказать одно, что у функции // возвращает TRUE, если НПС npc уже получил информацию instanceInfo, иначе FALSE. func int Npc_KnowsInfo(C_NPC npc, int instanceInfo); вторым аргументом должна быть прописана инстанция диалога (какая не знаю, у тебя их много, всё зависит от логики диалога), а у тебя прописано имя функции, вот тебе и ошибка - несоответствие типов (нельзя преобразовать func к int).
|
|
|
18.08.2006, 12:58
|
#276
|
|
Re: М: Уроки скриптологии
Объясните пожалуйста суть проблемы. Вобщем, декомпилировал я файл gothic.dat. Подкорректировал тексты в скриптах *d, затем сохранил, нажал Compile. Вроде бы после этого скрипты скопилировались в dat файл. Заменил им оригинальный файл, но ничего не происходит. что мне делать? Если можно, то объясните поподробнее. Это единственный сайт, где я надеюсь на хорошую помощь)
Добавление от 08/18/06, в 12:00:33 В игре как были тексты изначально, так и остались. Что характерно, с menu.dat у меня всё полкчилось, а вот с самым глаdysv? что-то не так. Gothic.dat и Ou.bin расфасовал по отдельным папкам.
|
|
|
18.08.2006, 22:39
|
#277
|
|
Re: М: Уроки скриптологии
Товарищи, с вопросами прошу переехать в соответствующие темы: 1. Вопросы по модостроению - все вопросы по модостроению за исключением скриптинга. 2. Скриптинг в Готике - понятно для каких вопросов. 3. Декомпилятор скриптов Готики - все вопросы по программе GothicSourcer и работе с ним. Эта тема, как написано в аннотации, предназначена для уроков, здесь можно предлагать свои решения каких-либо проблем связанных со скриптингом. Отвечаю здесь Wirtus'у: последний раз.
Заменил им оригинальный файл, но ничего не происходит. что мне делать? Если можно, то объясните поподробнее.
|
Если gothic.dat и ou.bin файлы GothicSourcer'ом были созданы и правильно вставлены тобой в игру, то необходимо: - начинать игру заново, чтобы увидеть изменения - удалить файл vdfs.dmp (насчет этого не уверен, но не помешает).
|
|
|
01.09.2006, 15:57
|
#278
|
|
Re: М: Уроки скриптологии
Статью по созданию динамических моделей можно прочитать здесь.
|
|
|
08.09.2006, 02:31
|
#280
|
|
Re: М: Уроки скриптологии
2Ork Warrior:
Извините может я лезу не в ту тему но можно ли изменит походку героя в 1 готике ну например как у гуру или у стражника?
|
void Mdl_ApplyOverlayMds (c_npc n0, string s1); - запустить файл анимации s1 с расширением mds для НПС n0. Пример Походка со сложенными руками (Гуру, Маги огня, Маги воды, Послушники и пр...): Mdl_ApplyOverlayMds(self,"Humans_Mage.mds"); Пример Военная походка (Стражник, Наемник и пр.): Mdl_ApplyOverlayMds(self,"Humans_Militia.mds"); Пример Расслабленная походка (Воры, Призраки и пр): Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds"); Пример Сутулая походка (Шахтеры, Крестьяне и пр): Mdl_ApplyOverlayMds(self,"Humans_Tired.mds"); Пример Благородная походка (Рудные бароны): Mdl_ApplyOverlayMds(self,"Humans_Arrogance.mds"); P.S. Советую почитать данную тему с 1 страницы.
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 21:39. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|