|
|
11.01.2007, 13:03
|
#1601
|
|
Re: М: Скриптинг в Готике
Закончил перевод статьи “Синтаксис скриптового языка Daedalus”. Местами неточно, но в целом перевод неплохой. Кого заинтересовало, следуйте по ссылке: ----------------------------------------- Синтаксис скриптового языка Daedalus Размер: 15,4 Кб скача тьДобавление от 01/11/07, в 12:23:41
У кого проблемы с закачкой файлов с сервера AxFile.com можете прочитать статью здесь
|
|
|
06.02.2007, 03:05
|
#1603
|
|
Re: М: Скриптинг в Готике
Подскажите как здесь исправить ошибку (possible error, function should return value(line 12)):
Код:
func void zs_watchinextremo(){ * * *Perception_Set_Normal(); * * *AI_SetWalkMode(self,NPC_WALK); * * *AI_GotoWP(self,self.wp); * * *AI_AlignToWP(self); * * *AI_PlayAni(self,"T_STAND_2_CLAPHANDS");};func int zs_watchinextremo_loop(){ * * * *};func void zs_watchinextremo_end(){ * * *AI_PlayAni(self,"T_CLAPHANDS_2_STAND"); * * *AI_ContinueRoutine(self);};
|
|
|
06.02.2007, 03:20
|
#1604
|
|
Re: М: Скриптинг в Готике
2NightRAVеn:
Подскажите как здесь исправить ошибку (possible error, function should return value(line 12)):
|
В нашем моде StrongHand сия функция выглядит так: func void ZS_WatchInExtremo() { Perception_Set_Normal(); AI_SetWalkMode(self,NPC_WALK); AI_GotoWP(self,self.wp); AI_AlignToWP(self); }; func int zs_WatchInExtremo_Loop() { AI_PlayAni(self,"T_STAND_2_CLAPHANDS"); return LOOP_END; }; func void zs_WatchInExtremo_End() { AI_PlayAni(self,"T_CLAPHANDS_2_STAND"); AI_ContinueRoutine(self); }; и люди хлопают :)
|
|
|
06.02.2007, 14:57
|
#1605
|
|
Re: М: Скриптинг в Готике
|
|
|
07.02.2007, 02:02
|
#1606
|
|
Re: М: Скриптинг в Готике
2Etlendio:
Сделай, чтоб функция возвращала значение
|
Ну да, правильный и своевременный ответ :) 2Etlendio:
или скачай чистые скрипты для Г1 от Руссобита с моего сайта
|
А кто сказал, что разработка ведется на движке Г1, и приведенная функция в "чистых" скриптах без этой же ошибки? :) NOTE: Функция Perception_Set_Normal(); используется в скриптах Г2а, и скорее всего приведенная функция была изъята из "читых" скриптов Г1 и портирована в проект Г2а.
|
|
|
27.02.2007, 16:06
|
#1608
|
|
Re: М: Скриптинг в Готике
2Всем: Я знаю что вопрос для вас наитупейший, и страшно ламерский, но мож подскажите тупому начинающему скриптеру как скомпелировать в GS 3.10 необходимые для работы мода файлы.Например: Я создал свой мир и хочу вставить туда наёмника кое-как написанного мною, но не знаю как... По идее после этого должны вылезти Gothic.dat, OU.BIN, и GOTHIC.src, и если я запакую их вместе с миром в *.mod то он должен начать работать, ведь так?
З.Ы. Подскажите несчастному ламеру, я ведь специализируюсь на спейсере и максе, и в основном над мирами работаю и нифига не шарю в скриптинге, могу лишь кое-как написать скрипт неписи... Но начинать то надо с малого!
2MaGoth: Мир скорее как дополнение к Хоринису, точнее оттуда в него будет вести портал...,с ним будет связан сюжет мода... Я вот думаю сделать чтоб в гавани Хориниса появился чел, который как бы "отвозил" туда ГГ на лодке, но я не знаю как активировать смену левела с помощью скрипта, да и не умею я диалоги делать...
|
|
|
27.02.2007, 17:32
|
#1609
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2Злой творец:
Как встывлять непесей в мир я тебе уже ответил. И еще небольшое дополнение по вставке в новый мир непесей. Тебе нужно прописать мир в скриптах. А именно: [spoiler] 1) В файле Startup.d пишем в конце новую функцию:
func void STARTUP_НАЗВАНИЕ_ТВОЕГО_ФАЙЛА_МИРА() { Здесь прописываем непесей которые должны грузится в мир изначально, те которые будут вставлятся позже пишем в файлах диалогов соответствующих непесей. ПРИМЕР: ... * * *Wld_InsertNpc(DJG_373_Stracha,"TW_CAMPHUNTER_ENTR ANCE_01"); * * *Wld_InsertNpc(DJG_6030_Oxotnic,"TW_CAMPHUNTER_STR EET_05"); * * *Wld_InsertNpc(DJG_6031_Oxotnic,"TW_OXRANAMIDLASA_ 1"); * * *Wld_InsertNpc(DJG_374_Stracha,"TW_CAMPHUNTER_ENTR ANCE_02"); ... };
После того как прописал непесей и зверье куда нужно, функция готова осталось только обозначить ее выполнение, для этого после функции вставки пишем еще одну функцию - инициализацию нового мира:
func void INIT__НАЗВАНИЕ_ТВОЕГО_ФАЙЛА_МИРА() { * *B_InitMonsterAttitudes(); * *B_InitGuildAttitudes(); * *B_InitNpcGlobals(); };
После этого сограняем внесенные изменения, и компилим скрипты. новые dat и Ou файлы копируем куда нуна и тестим мир. :)))
2) Теперь по тому как попасть в новый мир:
- Для этого нужно использовать триггеры. - Триггеры создаются в спейсере, и прописываются в скриптах, об этом подробно написано на сайте кaмрада basilio58.
Удачи... ;) [/spoiler]
|
|
|
28.02.2007, 10:16
|
#1611
|
|
Re: М: Скриптинг в Готике
2Злой творец:
Я знаю как вставить непися в мир, я не знаю как скомпелировать все необходимые для мода скрипты в компиляторе Вама, при создании нового решения пишет цитирую: "Не удаётся скопировать файл.Указано неправильное или слишком длинное имя файла. Задайте другое имя."
|
Сначала внимательно прочитай manual_ru.doc, далее - используй версию 3.11, если хорошо не знаешь программу - не меняй установки по-умолчанию, и никогда не используй в именах файлов и папок русские символы.
|
|
|
03.04.2007, 16:43
|
#1612
|
|
Re: М: Скриптинг в Готике
Подскажите как исправить ошибку: неизвестный идентификатор ELSE
Код:
func void samuel_hi_info(){ AI_Output(other,self,"Samuel_Hi_11_1"); //Sei gegrьЯt, ehrwьrdiger Magier! hero.guild = GIL_None; else { AI_Output(self,other,"Samuel_Hi_11_2"); //Nicht so schьchtern! Ich bin Samuel, der oberste Waldmagier! AI_Output(self,other,"Samuel_Hi_11_3"); //Aha, du bist also der Neue... Ich kann dich in die sechs Kreise der Magie einfьhren wenn du ein Magier bist. };};
|
|
|
03.04.2007, 17:53
|
#1613
|
|
|
|
|
A.G.F.C.
Регистрация: 04.09.2006
Сообщений: 20
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2DimonKDF:
Подскажите как исправить ошибку: неизвестный идентификатор ELSE
|
Все правильно там и будет ошибка, условие Else не может быть отдельно от блока If, а у тебя он отсутствует.. Пример:
Код:
func void samuel_hi_info(){ If (нужное условие) { выполеняется при верном условии } else { выполеняется при верном условии };};
Или так:
Код:
func void samuel_hi_info(){ If (нужное условие) { выполеняется при верном условии } Else If (нужное условие) { выполеняется при верном условии } Else If (нужное условие) { выполеняется при верном условии } else { выполеняется при верном условии };};
Данного построения блока условий в приведенной тобой функции нет, отсюда и ошибка.. И еще отпиши:Что за мод, и откуда? В какой проге работаешь версию.. ;)
|
|
|
07.04.2007, 16:25
|
#1615
|
|
Re: М: Скриптинг в Готике
2John White:
Прошу укажите мне изменения в датнике от Г1, которые позволяют активировать концерт в Старом Лагере!
|
2 года назад на самой первой странице темы нашего разрабатываемого мода был описан этот процесс : http://agfc.ru/showthread.php?&s=35&t=1113515834&start=0 кроме описанного там, стоит уделить внимание диалогу рудокопа Гримма... dia_vlk_580_grim.d
Cпойлер(щелкните, чтобы прочесть):
instance DIA_Grim_INEXTREMO(C_Info) { npc = Vlk_580_Grim; nr = 1; condition = DIA_Grim_INEXTREMO_Condition; information = DIA_Grim_INEXTREMO_Info; permanent = 0; important = 1; };
func int DIA_Grim_INEXTREMO_Condition() { if(Kapitel == 2) { return TRUE; }; return FALSE; };
func void DIA_Grim_INEXTREMO_Info() { AI_Output(self,other,"DIA_Grim_INEXTREMO_06_0 1"); //Эй, слышал новости? AI_Output(self,other,"DIA_Grim_INEXTREMO_06_0 2"); //In Extremo здесь! Они там, на сцене. AI_Output(self,other,"DIA_Grim_INEXTREMO_06_0 3"); //Торопись, а то пропустишь все интересное! Npc_ExchangeRoutine(self,"InExtremo"); AI_StopProcessInfos(self); };
instance DIA_Grim_INEXTREMOAWAY(C_Info) { npc = Vlk_580_Grim; nr = 1; condition = DIA_Grim_INEXTREMOAWAY_Condition; information = DIA_Grim_INEXTREMOAWAY_Info; permanent = 0; description = "Где In Extremo?"; };
func int DIA_Grim_INEXTREMOAWAY_Condition() { if(Npc_KnowsInfo(hero,DIA_Grim_INEXTREMO) && (Kapitel == 3)) { return TRUE; }; return FALSE; };
func void DIA_Grim_INEXTREMOAWAY_Info() { AI_Output(hero,self,"DIA_Grim_INEXTREMOAWAY_15_01 "); //Где In Extremo? AI_Output(self,hero,"DIA_Grim_INEXTREMOAWAY_06_02 "); //Они уехали. Жаль, я уже привык проводить вечера перед сценой. AI_StopProcessInfos(self); };
|
|
|
10.04.2007, 13:56
|
#1616
|
|
Re: М: Скриптинг в Готике
Плиз, скажите как исправить ошибку: неизвестный идентификатор |
Код:
func void b_magicarrow(var C_Npc oth,var C_Npc slf){ var int magiecounter; var C_Item othweapinhand1; magiecounter = Hlp_Random(100); if(Npc_HasReadiedRangedWeapon(other) && (MAGIEZUWEISUNG == FALSE) && Npc_IsPlayer(oth)) { othweapinhand1 = Npc_GetReadiedWeapon(other); MAGIEZUWEISUNG = TRUE; }; if((MAGIEZUWEISUNG == TRUE) && (othweapinhand1.munition == ItRw_Addon_MagicArrow) && (MAGIESCHADEN == FALSE)) { MAGIESCHADEN = TRUE; MAGIEZUWEISUNG = FALSE; }; if((MAGIESCHADEN == TRUE) && (magiecounter <= 35)) { Wld_PlayEffect("spellFX_Fear",slf,slf,0,0,0,FALSE); slf.aivar[AIV_MM_REAL_ID] = ID_GOBBO_SKELETON; || (slf.aivar[AIV_MM_REAL_ID] == ID_SKELETON) || (slf.aivar[AIV_MM_REAL_ID] == ID_ZOMBIE); if() { slf.attribute[ATR_HITPOINTS] = slf.attribute[ATR_HITPOINTS] - 35; } else { slf.attribute[ATR_HITPOINTS] = slf.attribute[ATR_HITPOINTS] - 25; }; MAGIEZUWEISUNG = FALSE; MAGIESCHADEN = FALSE; if(slf.attribute[ATR_HITPOINTS] < 1) { B_GivePlayerXP(slf.level * 10); }; } else { MAGIEZUWEISUNG = FALSE; };};
|
|
|
11.04.2007, 17:58
|
#1618
|
|
Re: М: Скриптинг в Готике
Соурсер пишет: нельзя преобразовать тип int в instance *
Код:
func void DIA_Addon_Ramon_FirstWarn_Info(){ * * *=>if(Npc_HasItems(other,itwr_anfangsbrief >= 1) && (SCHATTEN == TRUE)) * * *{ * * * * * *AI_Output(self,other,"DIA_Addon_Ramon_FirstWarn_07_00"); * * *//Wie ich sehe, gehцrst du den Schatten an! * * * * * *AI_Output(other,self,"DIA_Addon_Ramon_FirstWarn_15_01"); * * *//(grinst) * * * * * *AI_Output(self,other,"DIA_Addon_Ramon_FirstWarn_07_02"); * * *//Das ist aber immer noch kein Grund, dich einfach so ins Lager zu lassen! Du brauchst Mogambos Erlaubnis. * * * * * *AI_Output(other,self,"DIA_Addon_Ramon_FirstWarn_15_03"); * * *//Ich habe hier ein Schreiben von Dexter.. * * * * * *AI_Output(self,other,"DIA_Addon_Ramon_FirstWarn_07_04"); * * *//Zeig her.. * * * * * *B_GiveInvItems(other,self,itwr_anfangsbrief,1); * * * * * *B_UseFakeScroll(); * * * * * *AI_Output(self,other,"DIA_Addon_Ramon_FirstWarn_15_05"); * * *//Ok, jetzt kann ich dich ins Lager reinlassen! * * * * * *AI_Output(self,other,"DIA_Addon_Ramon_FirstWarn_15_06"); * * *//Willkommen im Lager! Komm aber ja nicht auf die Idee Дrger zu machen! * * * * * *B_GiveInvItems(self,other,itwr_anfangsbrief,1); * * * * * *self.aivar[AIV_PASSGATE] = TRUE; * * * * * *Player_HasTalkedToBanditCamp = TRUE; * * * * * *B_GivePlayerXP(XP_Addon_Hinein); * * * * * *AI_StopProcessInfos(self); * * * * * *AI_Teleport(Carlos,"BL_WAIT_FINN"); * * * * * *B_StartOtherRoutine(Carlos,"START"); * * * * * *B_StartOtherRoutine(Finn,"START"); * * *} * * *else if(Ramon_News == FALSE) * * *{ * * * * * *AI_Output(self,other,"DIA_Addon_Ramon_FirstWarn_07_12"); * * *//Hey, was willst du? Kann mir nicht vorstellen, dass du 'ne Erlaubnis fьr's Lager hast. * * * * * *AI_Output(other,self,"DIA_Addon_Ramon_FirstWarn_jo_15_13"); * * *//Ich wurde von Dexter beauftragt Raven und seine Leute zu helfen! * * * * * *AI_Output(self,other,"DIA_Addon_Ramon_FirstWarn_jo_07_14"); * * *//Ach was? Dann gib' mir ein Beweis! * * * * * *AI_Output(other,self,"DIA_Addon_Ramon_FirstWarn_jo_07_15"); * * *//Ich hatte ein Schreiben von Dexter, aber den hat jetzt Mogambo! * * * * * *AI_Output(self,other,"DIA_Addon_Ramon_FirstWarn_jo_07_16"); * * *//Dann hol' den und verschwende nicht meine Zeit! * * * * * *Ramon_News = TRUE; * * *} * * *else * * *{ * * * * * *AI_Output(self,other,"DIA_Addon_Ramon_FirstWarn_07_19"); * * *//Hey, langsam! Du kommst nicht rein - also verschwinde! * * * * * *AI_StopProcessInfos(self); * * *}; * * *other.aivar[AIV_LastDistToWP] = Npc_GetDistToWP(other,BDT_1071_Checkpoint); * * *self.aivar[AIV_Guardpassage_Status] = GP_FirstWarnGiven;};
|
|
|
12.04.2007, 02:59
|
#1619
|
|
Re: М: Скриптинг в Готике
2DimonKDF:
Соурсер пишет: нельзя преобразовать тип int в instance
|
Какая странная запись... 2DimonKDF:
=>if(Npc_HasItems(other,itwr_anfangsbrief >= 1) && (SCHATTEN == TRUE))
|
такой вариант более приемлим: if(Npc_HasItems(other,itwr_anfangsbrief) >= 1) && (SCHATTEN == TRUE)
|
|
|
28.04.2007, 22:43
|
#1620
|
|
Re: М: Скриптинг в Готике
Хелло. У меня тут проблема. Создал инстанцию где НПС учит ГГ силе и ловкости. Проблема тут только - Когда нажимаю у себя +1 Сила или +1 Ловкость, то всё нормально - всмысле очков не хватает и так далее. А вот если на +5 нажать то у меня улучшается навык, даже если очков не хватает. Плюс жуткий глюк. После такого приёма у меня в инфе где Очки обучения вместо "0" очков опыта где-то "434564644646..." вот столько. Выглядит страшно! Вот скрипт-инстанция:
Код:
instance Info_DARLOC_TEACHME(C_Info){ * * *npc = non_5_darloc; * * *nr = 3; * * *condition = Info_darloc_teachme_condition; * * *information = Info_darloc_teachme_info; * * *permanent = 1; * * *description = "Обучи меня.";};func int Info_darloc_teachme_condition(){ * * *if((DARLOC_TEACH == TRUE) && Npc_KnowsInfo(hero,dia_darloc_youcanteachme)) * * *{ * * * * * *return 1; * * *};};var int darloc_merke_str;var int darloc_merke_dex;func void Info_darloc_teachme_info(){ * * *AI_Output(hero,self,"Info_darloc_Teach_15_00"); * * *//Обучи меня. * * *DARLOC_MERKE_STR = hero.attribute[ATR_STRENGTH]; * * *DARLOC_MERKE_DEX = hero.attribute[ATR_DEXTERITY]; * * *Info_ClearChoices(Info_darloc_teachme); * * *Info_AddChoice(Info_darloc_teachme,DIALOG_BACK,Info_darloc_teachme_back); * * *Info_AddChoice(Info_darloc_teachme,B_BuildLearnString(NAME_LearnStrength_5,5 * LPCOST_ATTRIBUTE_STRENGTH,0),Info_Darloc_TeachMe_str_5); * * *Info_AddChoice(Info_darloc_teachme,B_BuildLearnString(NAME_LearnStrength_1,LPCOST_ATTRIBUTE_STRENGTH,0),Info_Darloc_TeachMe_str_1); * * *Info_AddChoice(Info_darloc_teachme,B_BuildLearnString(NAME_LearnDexterity_5,5 * LPCOST_ATTRIBUTE_DEXTERITY,0),Info_Darloc_TeachMe_dex_5); * * *Info_AddChoice(Info_darloc_teachme,B_BuildLearnString(NAME_LearnDexterity_1,LPCOST_ATTRIBUTE_DEXTERITY,0),Info_Darloc_TeachMe_dex_1);};func void Info_darloc_teachme_back(){ * * *if(DARLOC_MERKE_STR < hero.attribute[ATR_STRENGTH]) * * *{ * * * * * *AI_Output(self,hero,"Info_darloc_teachme_BACK_11_00"); * * *//Твои мускулы окрепли! * * *}; * * *if(DARLOC_MERKE_DEX < hero.attribute[ATR_DEXTERITY]) * * *{ * * * * * *AI_Output(self,hero,"Info_darloc_teachme_BACK_11_01"); * * *//Ты стал более проворнее и ловче. * * *}; * * *AI_Output(self,hero,"Info_darloc_teachme_BACK_11_02"); * * *//Заходи еще, тебе нужно окрепнуть. * * *Info_ClearChoices(Info_darloc_teachme);};func void Info_Darloc_TeachMe_STR_1(){ * * *B_BuyAttributePoints (hero, ATR_STRENGTH, LPCOST_ATTRIBUTE_STRENGTH); * * *Info_ClearChoices (Info_Darloc_TeachMe); * * *Info_AddChoice (Info_Darloc_TeachMe, DIALOG_BACK, Info_Darloc_TeachMe_BACK); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnStrength_5, 5 * LPCOST_ATTRIBUTE_STRENGTH, 0), Info_Darloc_TeachMe_STR_5); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnStrength_1, LPCOST_ATTRIBUTE_STRENGTH, 0), Info_Darloc_TeachMe_STR_1); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnDexterity_5, 5 * LPCOST_ATTRIBUTE_DEXTERITY, 0), Info_Darloc_TeachMe_DEX_5); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnDexterity_1, LPCOST_ATTRIBUTE_DEXTERITY, 0), Info_Darloc_TeachMe_DEX_1);};func void Info_Darloc_TeachMe_STR_5(){ * * *B_BuyAttributePoints (hero, ATR_STRENGTH, 5 * LPCOST_ATTRIBUTE_STRENGTH); * * *Info_ClearChoices (Info_Darloc_TeachMe); * * *Info_AddChoice (Info_Darloc_TeachMe, DIALOG_BACK, Info_Darloc_TeachMe_BACK); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnStrength_5, 5 * LPCOST_ATTRIBUTE_STRENGTH, 0), Info_Darloc_TeachMe_STR_5); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnStrength_1, LPCOST_ATTRIBUTE_STRENGTH, 0), Info_Darloc_TeachMe_STR_1); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnDexterity_5, 5 * LPCOST_ATTRIBUTE_DEXTERITY, 0), Info_Darloc_TeachMe_DEX_5); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnDexterity_1, LPCOST_ATTRIBUTE_DEXTERITY, 0), Info_Darloc_TeachMe_DEX_1);};func void Info_Darloc_TeachMe_DEX_1(){ * * *B_BuyAttributePoints (hero, ATR_DEXTERITY, LPCOST_ATTRIBUTE_DEXTERITY); * * *Info_ClearChoices (Info_Darloc_TeachMe); * * *Info_AddChoice (Info_Darloc_TeachMe, DIALOG_BACK, Info_Darloc_TeachMe_BACK); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnStrength_5, 5 * LPCOST_ATTRIBUTE_STRENGTH, 0), Info_Darloc_TeachMe_STR_5); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnStrength_1, LPCOST_ATTRIBUTE_STRENGTH, 0), Info_Darloc_TeachMe_STR_1); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnDexterity_5, 5 * LPCOST_ATTRIBUTE_DEXTERITY, 0), Info_Darloc_TeachMe_DEX_5); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnDexterity_1, LPCOST_ATTRIBUTE_DEXTERITY, 0), Info_Darloc_TeachMe_DEX_1);};func void Info_Darloc_TeachMe_DEX_5(){ * * *B_BuyAttributePoints (hero, ATR_DEXTERITY, 5 * LPCOST_ATTRIBUTE_DEXTERITY); * * *Info_ClearChoices (Info_Darloc_TeachMe); * * *Info_AddChoice (Info_Darloc_TeachMe, DIALOG_BACK, Info_Darloc_TeachMe_BACK); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnStrength_5, 5 * LPCOST_ATTRIBUTE_STRENGTH, 0), Info_Darloc_TeachMe_STR_5); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnStrength_1, LPCOST_ATTRIBUTE_STRENGTH, 0), Info_Darloc_TeachMe_STR_1); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnDexterity_5, 5 * LPCOST_ATTRIBUTE_DEXTERITY, 0), Info_Darloc_TeachMe_DEX_5); * * *Info_AddChoice (Info_Darloc_TeachMe, B_BuildLearnString (NAME_LearnDexterity_1, LPCOST_ATTRIBUTE_DEXTERITY, 0), Info_Darloc_TeachMe_DEX_1);};
|
|
|
29.04.2007, 12:36
|
#1623
|
|
Re: М: Скриптинг в Готике
Такой-вот вопрос: Прокомментируте каждую строку в скрипте: Скрипт НПС:
Код:
instance PAL_299_Sergio(Npc_Default){ name[0] = "Сержио"; - имя guild = GIL_PAL; - гильдия id = 299; - номер voice = 4; -голос flags = 0; npcType = npctype_main; - основной класс НПС B_SetAttributesToChapter (self, 4); fight_tactic = FAI_HUMAN_STRONG; - тактика боя EquipItem (self, ItMw_2h_Pal_Sword); - одетое оружие B_CreateAmbientInv (self); CreateInvItems (self, ItKe_Innos_MIS, 1); - предмет инвенторя CreateInvItems (self, ItPo_Health_02, 4); - предмет инвенторя B_SetNpcVisual (self, MALE, "Hum_Head_Fighter", Face_N_Normal_Erpresser, BodyTex_N, ItAr_PAL_M); - визуальные данные Mdl_SetModelFatness (self, 0); - полнота Mdl_ApplyOverlayMds (self, "Humans_Militia.mds"); - модель НПС B_GiveNpcTalents (self); B_SetFightSkills (self, 65); daily_routine = Rtn_Start_299;};
Скрипт оружия:
Код:
instance ItMw_1h_Pal_Sword(C_Item){ name = "Меч паладина"; - название mainflag = ITEM_KAT_NF; flags = ITEM_SWD; material = MAT_METAL; - материал value = Value_PalSchwert; damageTotal = Damage_PalSchwert; damagetype = DAM_EDGE; range = Range_PalSchwert; cond_atr[2] = ATR_STRENGTH; cond_value[2] = Condition_PalSchwert; visual = "ItMw_030_1h_PAL_Sword_02.3DS"; - модель description = name; - имя в инвентаре text[2] = NAME_Damage; count[2] = damageTotal; text[3] = NAME_Str_needed; count[3] = cond_value[2]; text[4] = NAME_OneHanded; text[5] = NAME_Value; count[5] = value;};
|
|
|
29.04.2007, 18:45
|
#1626
|
|
Re: М: Скриптинг в Готике
2MaGoth: У меня версия 3.13. 2marazmus: Хмм. Возможно. Надо будет проверить его. Если сможешь, скажи, что не так в скрипте. У меня Г1. МаГот прав Вот скрипт B_BuyAttributePoints:
Код:
func void B_BuyAttributePoints(var C_Npc typ,var int atr,var int AtrPlus){ var int Typ_Atr; var string AtrPlusSTRING; var string PrintSTRING; if(atr == ATR_STRENGTH) { Typ_Atr = typ.attribute[ATR_STRENGTH]; } else if(atr == ATR_DEXTERITY) { Typ_Atr = typ.attribute[ATR_DEXTERITY]; } else if(atr == ATR_MANA_MAX) { Typ_Atr = typ.attribute[ATR_MANA_MAX]; }; AtrPlusSTRING = IntToString(AtrPlus); if(!typ.lp < AtrPlus) { if((Typ_Atr + AtrPlus) <= 100) { typ.lp = typ.lp - AtrPlus; if(atr == ATR_STRENGTH) { typ.attribute[ATR_STRENGTH] = typ.attribute[ATR_STRENGTH] + AtrPlus; PrintSTRING = ConcatStrings("Сила +",AtrPlusSTRING); PrintScreen(PrintSTRING,-1,-1,"FONT_OLD_20_WHITE.TGA",1); } else if(atr == ATR_DEXTERITY) { typ.attribute[ATR_DEXTERITY] = typ.attribute[ATR_DEXTERITY] + AtrPlus; PrintSTRING = ConcatStrings("Ловкость +",AtrPlusSTRING); PrintScreen(PrintSTRING,-1,-1,"FONT_OLD_20_WHITE.TGA",1); } else if(atr == ATR_MANA_MAX) { typ.attribute[ATR_MANA_MAX] = typ.attribute[ATR_MANA_MAX] + AtrPlus; PrintSTRING = ConcatStrings("Маг. сила +",AtrPlusSTRING); PrintScreen(PrintSTRING,-1,-1,"FONT_OLD_20_WHITE.TGA",1); }; } else { PrintScreen("Дальнейшее улучшение невозможно!",-1,-1,"FONT_OLD_20_WHITE.TGA",1); B_Say(self,other,"$NOLEARNOVERMAX"); }; } else { PrintScreen("Недостаточно очков обучения!",-1,-1,"FONT_OLD_20_WHITE.TGA",1); B_Say(self,other,"$NOLEARNNOPOINTS"); };};
|
|
|
29.04.2007, 20:18
|
#1628
|
|
|
|
|
A.G.F.C.
Регистрация: 02.09.2005
Сообщений: 6
|
|
|
|
|
|
Re: М: Скриптинг в Готике
2Седрик:
Код:
AtrPlusSTRING = IntToString(AtrPlus); if(!typ.lp < AtrPlus)
Собака убита и зарыта здесь :) Восклицательный знак нужно вынести за скобки. Ну или просто переписать условие, используя другие операторы ("больше", к примеру).
|
|
|
01.05.2007, 12:26
|
#1630
|
|
Re: М: Скриптинг в Готике
2DimonKDF:
Где в скриптах находится Хроманин.
|
Gothic\_work\DATA\scripts\_decompiled\Items\Missio nItems_1.d
|
|
|
02.05.2007, 11:44
|
#1632
|
|
Re: М: Скриптинг в Готике
2alexxmmt:
можно ли отслеживать время через скрипты и соответственно времени совершать какие-либо действия скриптово?
|
Неа :) Объектам можно поставить график через Wld_SetObjectRoutine - это да. Например, чтобы ворота были открыты только днём. Но даже это будет слегка глючить после сна недалеко от этого объекта.
|
|
|
03.05.2007, 18:56
|
#1633
|
|
Re: М: Скриптинг в Готике
2dixie: жаль :( 2ALL:Не работает скрипт if(!Npc_CanSeeNpc(self,other)). Возможно ли исправить?
Код:
func void ZS_ReactToDamage(){ // разрешить НПС нормальный набор восприятий Perception_Set_Normal(); // если НПС не видит агрессора if(!Npc_CanSeeNpc(self,other)) { // НПС умирает :) еще бы, со спины... AI_StartState(self,ZS_Dead,0,""); Wld_PlayEffect("FX_EARTHQUAKE",self,self,0,0,0,FALSE); }; // НПС смотрит на агрессора B_LookAtNpc(self,other); // НПС выбирает оружие для поражения агрессора B_SelectWeapon(self,other); // НПС поворачивается к агрессору B_TurnToNpc(self,other); // НПС говорит агрессору (SVM фраза "Парень, никогда так больше не делай!") B_Say (self, other, "$WHATAREYOUDOING"); // очистка счетчика секунд self.aivar[AIV_StateTime] = 0;};
|
|
|
03.05.2007, 20:51
|
#1635
|
|
Re: М: Скриптинг в Готике
2marazmus: так?
Код:
// если НПС видит агрессора if(Npc_CanSeeNpc(self,other)) { return; } else { AI_StartState(self,ZS_Dead,0,""); Wld_PlayEffect("FX_EARTHQUAKE",self,self,0,0,0,FALSE); };
|
|
|
03.05.2007, 21:34
|
#1636
|
|
Re: М: Скриптинг в Готике
2alexxmmt:
Не работает скрипт if(!Npc_CanSeeNpc(self,other)). Возможно ли исправить?
|
Вы в этом уверены? :) 2alexxmmt:
// НПС умирает :) еще бы, со спины... AI_StartState(self,ZS_Dead,0,""); Wld_PlayEffect("FX_EARTHQUAKE",self,self,0,0,0,FAL SE);
|
Настораживает эта вырезка. Это каким таким образом НПЦ должен помереть? :) Перевод в состояние AI_StartState(self,ZS_Dead,0,""); не причиняет реальной смерти - это состояние по идее должно наступать ПОСЛЕ смерти :) А вот чтобы реально грохнуть НПЦ, вернее применить функцию B_KillNpc(self); ну или просто обнулить его жизненную энергию. Да и к тому же смущает сама реализация идеи: Функция состояния ZS_ по идее должна наступать ПОСЛЕ совершенного действия вызванного восприятим. ИМХО подобная идея должна быть реализована через функцию восприятия повреждения B_AssessDamage например вставить куда-нить блок в функцию... func void B_AssessDamage() { // если НПС не видит агрессора if(!Npc_CanSeeNpc(self,other)) { // НПС умирает :) еще бы, со спины... Npc_ChangeAttribute(self,ATR_HITPOINTS,-self.attribute[ATR_HITPOINTS_MAX]); Wld_PlayEffect("FX_EARTHQUAKE",other,other,0,0,0,F ALSE); }; }; не уверен, но помоему эффект землетрясения лучше повесить на АГРЕССОРА Wld_PlayEffect("FX_EARTHQUAKE",other,other,0,0,0,F ALSE); , т.к. неизвестно как он будет работать с трупом :)
|
|
|
03.05.2007, 22:44
|
#1638
|
|
Re: М: Скриптинг в Готике
2alexxmmt:
Где отследить или просчитать в скриптах момент попадания оружием по ГГ или НПС ?
|
Хых, думаю, что "момент попадания оружием", как легко уловить из смысла относится к тому, что я указал в предыдущем ответе, т.е. к функции восприятия повреждения B_AssessDamage По ГГ попадание оружия проследить в скриптах еще НИКОМУ (ИМХО) не удавалось, скорее всего это невозможно. По другим НПЦ, я уже указал функцию: B_AssessDamage(), которая вызывается через восприятие: PERC_ASSESSDAMAGE где self - атакуемый, other - агрессор.
|
|
|
04.05.2007, 13:19
|
#1639
|
|
Re: М: Скриптинг в Готике
2Ukur:
По ГГ попадание оружия проследить в скриптах еще НИКОМУ (ИМХО) не удавалось, скорее всего это невозможно.
|
ГЫ :) Ну теоретически можно рассадить по всей поверхности тех же мясных жуков - чтобы они следили за здоровьем ГГ ;)
|
|
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 16:25. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|