|
|
10.03.2008, 03:38
|
#2001
|
|
Re: М: Скриптинг в Готике
2Magmatic:
func int DIA_Dar_Kameradenschwein_Condition() { if(Dar_LostAgainstCipher == TRUE) { self.aivar[AIV_LastFightComment] = FALSE; }; }; // ошибка, функция должна возвращать значение
|
Многие ошибки можно исправить, сравнивая с ОРИГИНАЛЬНЫМИ немецкими скриптами из пакета G2MDK FUNC INT DIA_Dar_Kameradenschwein_Condition() { if (Dar_LostAgainstCipher == TRUE) { self.aivar[AIV_LastFightComment] == FALSE; //geht NUR bei ECHTER Important-Info! return TRUE; }; };
|
|
|
10.03.2008, 14:41
|
#2002
|
|
Re: М: Скриптинг в Готике
2Magmatic:
1.Что за гильдии Strf и Dmt ?
|
Старатели и ищущие.
2.Как задать взаимодействие новой гильдии с остальными чтобы другие гильдии реагировали на новую.
|
Wld_SetGuildAttitude(var int guild1, var int attitude, var int guild2);
5. Есть где нибудь ссылка (только не на сайты KillerXXX) где можно скачать рабочую прогу NSC Script Generator 2.2. Она устанавливается, но не работает.
|
.Net Framework установлен?
|
|
|
13.03.2008, 14:54
|
#2004
|
|
Re: М: Скриптинг в Готике
2 Magmatic: Здесь Нефариус немного ошибся, гильдия STRF (нем. Straefling) - не [strike]старатели[/strike], а каторжники. 1. А гильдия OUT - вообще сборная солянка, кого в ней только нет: крестьяне (Секоб, Тилл, Бальтазар, Рега, Бабера и пр.); бандиты (Моргахард и компания); менты (Мика); палы (Маркос, Тенгрон, Файет и пара безимянных палов); каторжники (Фед, Тонак, Пардос); прочие с пометкой "VLK" (Рамирез, Кассия, Джо, Граймс, Билгот, Тальбин, Энгром, Гестат).
2. Есть такая гильдия "дружественные орки" (GIL_FRIENDLY_ORC), единственный её представитель - Ур-Шак.
|
|
|
13.03.2008, 15:58
|
#2005
|
|
Re: М: Скриптинг в Готике
Не совсем по скриптам, но все же вопрос.
; List of vdf-files which have been added to the original gothic ; [separate them by spaces, include their extension ".mod"] vdf=...
|
Как подразумевается в строке vdf указывается порядок загрузки mod.файлов, т.е. таким образом реализуется подключение патчей, озвучания, видео и прочих дополнений к существующим модификациям. А теперь, собственно вопрос. В Г2А - никаких пробем, все грузится и работает без проблем. А в Г1 логику уловить не удалось. если указана последоватлеьность "a.mod b.mod" - грузится только "b.mod" если b.mod убарть из папки модов и запихнуть под видом b.vdf - работает, но через раз.
|
|
|
13.03.2008, 17:15
|
#2006
|
|
Re: М: Скриптинг в Готике
2360:
А в Г1 логику уловить не удалось. если указана последоватлеьность "a.mod b.mod" - грузится только "b.mod" если b.mod убарть из папки модов и запихнуть под видом b.vdf - работает, но через раз.
|
Файлы *.mod нужно разделять двойным пробелом.
|
|
|
13.03.2008, 17:19
|
#2007
|
|
Re: М: Скриптинг в Готике
2360:
А в Г1 логику уловить не удалось. если указана последоватлеьность "a.mod b.mod" - грузится только "b.mod" если b.mod убарть из папки модов и запихнуть под видом b.vdf - работает, но через раз.
|
Логика в г1 точно такая же как как в Г2а, а приоритет загрузки .mod файлов определяется не порядком в ini файле, а по дате создания .vdf или .mod архива, причем, если .vdf будет новее .mod он также перекроет своими данными .mod Единственное существенной отличие в загрузке .mod от .vdf, что .mod рассматривается игрой только, через INI файл мода, а .vdf всегда.
|
|
|
14.03.2008, 23:01
|
#2010
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от FiG link=board=gothic&t=1105030050&goto=4082291 date=03/14/08, в 19:38:31
ммм... а может кто нибудь скажет как распотрошить движок г2 и вносить изменения? (ну ведь вы делали)
|
Делали Г2? ;D Насколько мне известно камрад Vam занимался (и занимается) декомпиляцией движка Г1, о Г2 по-моему пока даже и речи не было. А собственно, вам с какой целью это надо? :) Готика ведь очень гибкая в плане модификаций ;)
|
|
|
14.03.2008, 23:36
|
#2011
|
|
Re: М: Скриптинг в Готике
> Насколько мне известно камрад Vam занимался
|
он и вторую вроде разбирал...
Готика ведь очень гибкая в плане модификаций
|
не настолько, насколько нужно p.s может кто знает ка сделать в готике parallax mapping ? xD ну или хотя бы bump mapping это зашито в библиотеках или в ехешнике?
|
|
|
17.03.2008, 09:16
|
#2012
|
|
Re: М: Скриптинг в Готике
2FiG:
он и вторую вроде разбирал...
|
Вторая находится в работе...
может кто знает ка сделать в готике parallax mapping ? xD ну или хотя бы bump mapping, это зашито в библиотеках или в ехешнике?
|
Эти фишки в Готиках могут быть реализованы только в движке (экзешник) с использованием библиотек DirectX. Но, пока нет полных исходников движка, об этом можно только мечтать... :(
|
|
|
19.03.2008, 13:42
|
#2014
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от FiG link=board=gothic&t=1105030050&goto=4090288 date=03/18/08, в 20:47:49
...а может кто привести пример самого простого скрипта для изготовления чего либо посредством диалога с MOBом (рунный стол, точильный камень и т.п)
|
А может проще открыть папочку с соответствующими диалогами? Или просто поиском в скриптах? Чем ждать ответа на форуме....лень... :(
|
|
|
25.03.2008, 12:43
|
#2016
|
|
Re: М: Скриптинг в Готике
2basilio
Cпойлер(щелкните, чтобы прочесть):
func void potionalchemy_s1() { var C_Npc her;//заводим переменную хер her = Hlp_GetNpc(PC_Hero);//"присваиваем ей главгероя" if(Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))"если id игрока = id хер-а т.е героя..." { self.aivar[AIV_INVINCIBLE] = TRUE; // невидимым становится?? PLAYER_MOBSI_PRODUCTION = MOBSI_PotionAlchemy;//как я понял, устанавливается анимация... AI_ProcessInfos(her);// и начинается диалог? }; };
ну и как я тут сам разберусь?
|
|
|
26.03.2008, 00:10
|
#2017
|
|
Re: М: Скриптинг в Готике
2FiG: *А вы ниже по контексту смотрите. Взаимодействие с MOBом вызывает ф-цию (указывается в спейсере) в вашем случае это ф-ция potionalchemy_s1. Функция проверяет, взаимодействует ли герой с мобом - в этом случае начинается диалог. Диалог с мобом выглядит практичесики так же как и с нпц:
//Добавляем (например) выход из диалога.
instance PC_MakeSome_End(C_Info) { * * *npc = PC_Hero; * * *nr = 999; * * *condition = PC_MakeSome_End_Condition; * * *information = PC_MakeSome_End_Info; * * *permanent = TRUE; * * *description = Dialog_Ende; };
//Условие, проверяем переменную PLAYER_MOBSI_PRODUCTION, в вашем случае написано MOBSI_PotionAlchemy, но константу можно задать любую, в т.ч. и пользовательскую, обработка же её происходит именно здесь. Именно здесь происходит привязка диалога к взаимодейтсвию с конкретным мобом.
func int PC_MakeSome_End_Condition() { * * *if(PLAYER_MOBSI_PRODUCTION == MOBSI_PotionAlchemy) * * *{ * * * * * *return TRUE; * * *}; };
//Сам выход
func void PC_MakeSome_End_Info() { AI_StopProcessInfos(self); self.aivar[AIV_INVINCIBLE] = FALSE; PLAYER_MOBSI_PRODUCTION = MOBSI_NONE; };
|
|
|
|
04.04.2008, 19:17
|
#2019
|
|
Re: М: Скриптинг в Готике
2SMErtNIK: Конкретно за реакции (не только на нападение) отвечают восприятия персонажа. В вашем случае это
Npc_PercEnable(self,PERC_ASSESSDAMAGE,ZS_ReactToDa mage);
|
Следовательно интересующая вас функция -
Лежит она в папке AI/ZS_Human/ или AI/Human/ZS_Human/ для Г1 и Г2 соответсвенно.
|
|
|
07.04.2008, 23:13
|
#2022
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от K@ncler link=board=gothic&t=1105030050&goto=4128954 date=04/07/08, в 18:29:59
А можно ли в Г2 движок сделать как Г3 (или наоборот)????
|
Перефразировав известного математика, добавлю: "Дайте нам исходный код и мы переделаем весь двиг!"
|
|
|
08.04.2008, 13:46
|
#2023
|
|
Re: М: Скриптинг в Готике
2John White:
7 апреля 2008, 18:29, K@ncler писал: А можно ли в Г2 движок сделать как Г3 (или наоборот)???? Перефразировав известного математика, добавлю: "Дайте нам исходный код и мы переделаем весь двиг!"
|
Я вообще пока не очень понимаю, что там Вам делает... Но насколько мне известно пока он не заявлял, что собирается делиться с кем-то исходниками движка, даже если они будут ;)
|
|
|
13.04.2008, 19:50
|
#2025
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: М: Скриптинг в Готике
Обычно обсчет скриптов идет только когда происходящее видно игроку. По идее должно работать, легче самому запустить и проверить :) Для упрощения конструкции можно обьявить две переменные рядом с функцией, затем присвоить этим переменным результаты функций, чтобы получилось что-то типа
Код:
Dist1 = Npc_GetDistToWP(self, wp1);Dist2 = Npc_GetDistToWP(self, wp2);if (Dist1 < Dist 2) { ... }
|
|
|
13.04.2008, 20:28
|
#2026
|
|
Re: М: Скриптинг в Готике
2okin: по идее должно работать, ибо ф-ция возварщае значение int. Вот только мне не совсем понятен смысл такой конструкции - вы проверяете к какому вейпоинту ближе находится тот или иной нпц? Есть например такое решение -
Код:
if (Hlp_StrCmp(Npc_GetNearestWP(self),wp1)){//ближе к wp1}else if (Hlp_StrCmp(Npc_GetNearestWP(self),wp2)){//ближе к wp2};
Немного через голову, правда, но все же :)
|
|
|
14.04.2008, 12:14
|
#2027
|
|
Re: М: Скриптинг в Готике
360
if (Hlp_StrCmp(Npc_GetNearestWP(self),wp1))
|
Не совсем то, что нужно... Мне ведь не ближайший вп нужен, а определить, какой ближе из двух (на самом деле из шести), разбросанных по миру. Пытаюсь сделать колечко телепортации, у которого точка выхода зависит от точки входа. Плюс парочка триггеров на сладкое, срабатывающих с определенной вероятностью, - для большей непредсказуемости перемещений. То есть закономерность, конечно, есть, но забавная ;D Пока пробовала с тремя вп на маленьком кусочке, все работало. Дописала остальное и увеличила расстояния - появились косяки... Могла просто где-то что-то напутать, но вроде уже несколько раз проверяла... Поэтому вопрос - marazmus
Обычно обсчет скриптов идет только когда происходящее видно игроку.
|
В данном случае тоже так? Пытаться определить расстояние за пределами видимости бесполезно? Тогда придется извращаться...
|
|
|
14.04.2008, 12:58
|
#2028
|
|
Re: М: Скриптинг в Готике
2okin: ага, задумку понял. Если вы проверяете дистанцию между ГГ и вейпоинтом - проблем быть не должно. Т.е. если self - ГГ, то дистанция будет определяться независимо от положения ГГ в мире (если, конечно, он не перейдейт в другой мир, ZEN в плане ;D). Если бы скриптовой язык готики имел больше функций обработки массивов, то можно было бы получить 6 дистанций, загнать их в массив, найти минимальное значение, вернуть ключ и вуаля. А так прихдится писать разветвленную и громозкую систему условий. Возможно где-то в ней ошибки. Например, я быстренько сделал вот такой скрипт (Г1), дистанция пишется в дневник вполне исправно.
Код:
instance MapRing(C_Item){ name = NAME_Ring; mainflag = ITEM_KAT_MAGIC; flags = ITEM_RING; value = 0; visual = "ItMi_Ring_01.3ds"; visual_skin = 0; material = MAT_METAL; on_equip = Equip_MapRing; on_unequip = UnEquip_MapRing; description = "Кольцо"; text[2] = ""; text[3] = ""; text[5] = NAME_Value; count[5] = value;};func void Equip_MapRing(){ var int oc; var int nc; oc=Npc_GetDistToWP(self, "OCC_CENTER_1"); nc=Npc_GetDistToWP(self, "NC_DAM"); Log_CreateTopic("Дистанция",LOG_NOTE); Log_CreateTopic("Старый Лагерь",LOG_NOTE); Log_CreateTopic("Плотина",LOG_NOTE); if (oc<nc) { B_LogEntry("Дистанция", "Старый Лагерь ближе плотины."); } else if (oc>nc) { B_LogEntry("Дистанция", "Плотина ближе Старого Лагеря"); } else { B_LogEntry("Дистанция", "Расстояния одинаковы"); }; B_LogEntry("Старый Лагерь", IntToString(oc)); B_LogEntry("Плотина", IntToString(nc)); };func void UnEquip_MapRing(){};
Если ГГ использует кольцо в любой точке мира oldworld.zen - информация выводится вполне корректно ;)
|
|
|
22.04.2008, 18:27
|
#2031
|
|
Re: М: Скриптинг в Готике
2niccolo:
Подскажите пожалуйста, где зарыты: ebrh2.3ds Hum_EBRS_ARMOR.asc В 1-й и 2-й Готиках. Спасибо.
|
Это меш и анимашка, насколько мне помниться они валяются в скомпиленном виде ebrh2.3ds в meshes.vdf, а Hum_EBRS_ARMOR.asc в anims.vdf в скомпиленном виде...
|
|
|
22.04.2008, 19:20
|
#2032
|
|
Re: М: Скриптинг в Готике
2DarkSeducer:
в скомпиленном виде ebrh2.3ds в meshes.vdf
|
и при этом имеют в скомпиленном виде расширение .MRM, а не .3ds. .3ds сырье можно найти в пакете модостроителя GMDK для Г1, или G2MDK для г2а.
|
|
|
22.04.2008, 19:33
|
#2033
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от Ukur link=board=gothic&t=1105030050&goto=4160802 date=04/22/08, в 18:20:23
2DarkSeducer: и при этом имеют в скомпиленном виде расширение .MRM, а не .3ds. .3ds сырье можно найти в пакете модостроителя GMDK для Г1, или G2MDK для г2а.
|
Спасибо, нашёл, скачал. А каким инструментом можно декомпилировать файлы .MDM и .MRM и компилировать обратно в них?
|
|
|
22.04.2008, 20:02
|
#2034
|
|
Re: М: Скриптинг в Готике
2niccolo:
А каким инструментом можно декомпилировать файлы .MDM и .MRM и компилировать обратно в них?
|
Декомпилятора мешей не существует, остальное GothicSourcer
|
|
|
24.04.2008, 00:25
|
#2036
|
|
Re: М: Скриптинг в Готике
2niccolo: В готике 1 (да и в г2, скорее всего, так же), за это отвечает ф-ция B_giveXP которая, помимо дачи эскпы, проводит проверку на достижение нового урвоня. Функция расположена в Story\B\B_GiveXp.d Собственно, вот проверка на достижение нового уровня:
Код:
* * *if(hero.exp >= hero.exp_next) * * *{ * * *hero.level = hero.level + 1; * * *hero.exp_next = hero.exp_next + ((hero.level + 1) * 500); * * *hero.attribute[ATR_HITPOINTS_MAX] = hero.attribute[ATR_HITPOINTS_MAX] + HP_PER_LEVEL; * * *hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + HP_PER_LEVEL; * * *hero.lp = hero.lp + LP_PER_LEVEL; * * *PrintScreen(NAME_LevelUp,-1,_YPOS_MESSAGE_LEVELUP,"font_old_20_white.tga",_TIME_MESSAGE_LEVELUP); * * *Snd_Play("LevelUp"); * * *};
Где: hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + HP_PER_LEVEL и hero.attribute[ATR_HITPOINTS_MAX] = hero.attribute[ATR_HITPOINTS_MAX] + HP_PER_LEVEL - рост ЖС на размер, указанный в константе HP_PER_LEVEL Собственно, для маны можно также задать, только вместо [ATR_HITPOINTS] и [ATR_HITPOINTS_MAX] следует добавить строчки с [ATR_MANA] и [ATR_MANA_MAX]. Вместо константы HP_PER_LEVEL можете прописать свою для маны или просто число.
|
|
|
24.04.2008, 13:35
|
#2037
|
|
Re: М: Скриптинг в Готике
2360: Спасибо, очень ясно и подробно. ------ Я нигде не нашёл описания aivar[AIV_IMPORTANT] = TRUE что это значит? для чего добавляется self.? где описано содержимое сундуков. ----- Я сейчас меняю характеристики всех персонажей Готики-1, убираю неуязвимость для большего реализма и делаю всех более живучими, сильными, ловкими и вооружёнными, так, чтобы и рудокоп или падальщик) смогли за себя нормально постоять, поднимаю также их уровень для увеличения экспы. Основная идея в том, чтобы сделать трудным возможность побить крутого чувака и отобрать у него что-нибудь ценное. Основная проблема в том, чтобы сделать грамотно и не переборщить. Если кто-то делал что-нибудь подобное, есть какие-нибудь советы?
|
|
|
24.04.2008, 13:53
|
#2038
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2niccolo: self. одна из 3-х глобальных переменных двига для управления игры, позиционируется как на Гг так и на Непесей, связана с двигом и интелектом скриптов на прямую т.е. ни удалять ее ни изменять нельзя. (в туторе Вама читай, там расписано чуток ;))
Теперь по остальному, реализм в топку... бесмертие как было так пусть и остается, все равно на том что есть, более или менее реалистичность не реализовать, издержки двига. Что до баланса, то он есть в Готе только тогда, когда Гг на "0" уровне против волка, дальше уже песня о танках... ;D
|
|
|
24.04.2008, 14:07
|
#2039
|
|
Re: М: Скриптинг в Готике
2niccolo:
для чего добавляется self.?
|
self в случае НПЦ это глобальная ссылка на его класс. т.е. если например написать self.name[0]="Василий" то нпц в скриптах которого (например, в диалогах) присутвует данная строчка, переименутся в Василия :), установка self.attribute[ATR_HITPOINTS]=0 убьет его и т.д. В примере с левел-апом идет глобальная ссылка на ГГ. Вместо self можно работать и c любой другой переменной типа C_NPC.
Код:
var C_Npc MyNpc;MyNpc = Hlp_GetNpc(Sld_700_Lee);MyNpc.name[0]="Генерал Ли";
где описано содержимое сундуков.
|
В zen-файлах. Содержимое именных сунудуков можно менять скриптами :)
aivar[AIV_IMPORTANT] = TRUE
|
Я глубоко в этом не разбирался, но похоже она влияет на диалоги с important=1; Ибо делая вариант, когда о преступлениях ГГ в Готике 1 сообщалось как в Г3, я столкнулся с проблемой, что НПЦ сам не начинал диалога, а говорил фарзу о преступлении в начале диалога с ГГ. Добавление от 04/24/08, в 13:27:44 2MaGoth:
Теперь по остальному, реализм в топку... бесмертие как было так пусть и остается, все равно на том что есть, более или менее реалистичность не реализовать, издержки двига. Что до баланса, то он есть в Готе только тогда, когда Гг на "0" уровне против волка, дальше уже песня о танках...
|
Ну в Г1 боевой баланс хоть поприличнее Г2 - минимального урона то нет ;D, а делать автолевелинг монстров ИМХО еще хуже, так что действительно лучше ничего не трогать :)
|
|
|
Здесь присутствуют: 3 (пользователей: 0 , гостей: 3)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 19:49. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|