|
|
13.08.2005, 19:02
|
#721
|
|
Re: Скриптинг в Готике
2dixie:
Ну я б не сказал Вот, например, вчера реализовал такой прикол - получение экспы за выбрасывание предмета в определенной комнате замка
|
Типа выбрась каку? ЧТо за скрипт и где прописан?
|
|
|
13.08.2005, 19:09
|
#722
|
|
Re: Скриптинг в Готике
2SATANIZMatik:
Типа выбрась каку? ЧТо за скрипт и где прописан?
|
В последней версии мода - сегодня положил ;) А реализация достаточно сложная - в комнате или рядом сидит невидимый мясной жук размером 1/100 нормального и ждет пока ГГ выкинет предмет ;) Тут когда-то описывали амулет регенерации маны - примерно по этому же принципу.
|
|
|
13.08.2005, 21:49
|
#724
|
|
Re: Скриптинг в Готике
2SATANIZMatik:
Не совсем понимаю причём тут жук? =) Надо чтоб на него упало? =) Типа раздавил жук +1000 exp. =)
|
А как ещё отловить выбрасывание предмета? Никаких функций для этого нету. У меня все на этих жуках ;) У каждого бревна невидимый жук сидит - пилишь бревно - а он тебе стрелы в инвентарь подкладывает ;) Уха точно так же варится. Одним словом, одомашненные полезные мясные баги - призраки ;) Добавление от 08/13/05, в 21:09:31
И ещё, кстати - не знаю в какую тему поместить :) Пробовал сделать в первой готике вид от первого лица. Естно, нифига не получается, потому, как, камера дергается при старте и остановке. Получилось не так, как в ShakeyCam - вроде меньше дергается, но иногда видна голова ГГ. Вот camera.dat на пробу - може кто продолжит эксперименты ;) http://home.tula.net/dixie/CAMERA.DAT
|
|
|
13.08.2005, 22:39
|
#725
|
|
Re: Скриптинг в Готике
Прошу прощения, вот небольшой кусочек скрипта, который я сделал, что не так?
instance DIA_fortuno_GREET(C_Info) { * * *npc = sek_6006_fortuno; * * *nr = 665; * * *condition = DIA_fortuno_GREET_Condition; * * *information = DIA_fortuno_GREET_Info; * * *permanent = FALSE; * * *important = TRUE; };
func int DIA_fortuno_GREET_Condition() { * * *if(Npc_IsInState(self,ZS_Talk) && (self.aivar[AIV_TalkedToPlayer] == FALSE)) * * *{ * * * * * *return TRUE; * * *}; * * *return FALSE; };
func void DIA_fortuno_GREET_Info() { * * *AI_Output(self,other,"DIA_fortuno_GREET_14_00"); * * *//Я Фортуно, помнишь, я раздавал болотник. * * *AI_Output(self,other,"DIA_fortuno_GREET_14_01"); * * *//Тебе нужны эссенции исцеления или магия Спящего? Тогда ты у нужного человека. * * *Log_CreateTopic(TOPIC_SekteTrader,LOG_NOTE); * * *B_LogEntry(TOPIC_SekteTrader,"Фортуно продает траву, магию Спящего, и напитки в лагере Сектантов."); };
var int fortuno_einmal;
instance DIA_fortuno_WAREZ(C_Info) { * * *npc = sek_6006_fortuno; * * *nr = 666; * * *condition = DIA_fortuno_WAREZ_Condition; * * *information = DIA_fortuno_WAREZ_Info; * * *permanent = TRUE; * * *trade = TRUE; * * *description = "Покажи мне свои товары"; };
func int DIA_fortuno_WAREZ_Condition() { * * *return TRUE; };
func void DIA_fortuno_WAREZ_Info() { * * *B_GiveTradeInv(self); * * *AI_Output(other,self,"DIA_fortuno_WAREZ_15_00"); * * *//Покажи мне твои товары. * * *if(fortuno_einmal == FALSE) * * *{ * * * * * *AI_Output(self,other,"DIA_Zuris_GREET_14_02"); * * *//Буквально только что я получил новые свитки. Сам Идол Тион, доверил их мне для распространению и продаже по городу. * * * * * *fortuno_einmal = TRUE; * * *}; };
Файл в котором написано товары я создал, но zSpy говорит что STORY\DIALOGE\DIA_SEK_6006_FORTUNO.D: Redefined identifier : FORTUNO_EINMAL
Заранее благодарен.
|
|
|
13.08.2005, 22:59
|
#726
|
|
Re: Скриптинг в Готике
2TSYLin: Я изучаю немецкий.
Значит: Фортуно один. =) Попробуй везде сменить имя npc.
|
|
|
14.08.2005, 00:20
|
#729
|
|
Re: Скриптинг в Готике
2TSYLin: Дей ствительно имя непися здесь ни причём ты своего непися можешь назвать как хочешь.От этого ничего не зависет.Я согласен с Finsternis,что нужно везде убрать *var int fortuno_einmal ! Попробуй сделать по примеру торговли Боспера:
instance DIA_Bosper_Trade(C_Info) { npc = VLK_413_Bosper; nr = 700; condition = DIA_Bosper_Trade_Condition; information = DIA_Bosper_Trade_Info; permanent = TRUE; description = "Покажи мне свои товары."; };
func int DIA_Bosper_Trade_Condition() { if(MIS_Bosper_WolfFurs != LOG_Running) { DIA_Bosper_Trade.trade = TRUE; }; return TRUE; };
func void DIA_Bosper_Trade_Info() { var int McBolzenAmount; var int McArrowAmount; AI_Output(other,self,"DIA_Bosper_Trade_15_00" ); //Покажи мне свои товары. if(DIA_Bosper_Trade.trade == TRUE) { B_GiveTradeInv(self); Npc_RemoveInvItems(self,ItRw_Bolt,Npc_HasItems(se lf,ItRw_Bolt)); McBolzenAmount = Kapitel * 50; CreateInvItems(self,ItRw_Bolt,McBolzenAmount) ; Npc_RemoveInvItems(self,ItRw_Arrow,Npc_HasItems(s elf,ItRw_Arrow)); McArrowAmount = Kapitel * 50; CreateInvItems(self,ItRw_Arrow,McArrowAmount) ; } else { AI_Output(self,other,"DIA_Bosper_Trade_11_01" ); //Ты здесь не для того, чтобы разглядывать мои товары, ты должен принести мне шкуры! AI_Output(self,other,"DIA_Bosper_Trade_11_02" ); //Так что берись за дело! }; }; Только вместо func int DIA_Bosper_Trade_Condition() { if(MIS_Bosper_WolfFurs != LOG_Running) { DIA_Bosper_Trade.trade = TRUE; }; return TRUE; }; поставь func int DIA_Bosper_Trade_Condition() { return TRUE; }; Вот это вообще убери var int McBolzenAmount; var int McArrowAmount; Короче отредактируй диалог под свои нужды?
Добавление от 08/13/05, в 23:35:56 Первая часть вроде правильна,а во второй попробуй это Попробуй такой диалог instance DIA_fortuno_Trade(C_Info) { npc = sek_6006_fortuno; nr = 700; condition = DIA_fortuno_Trade_Condition; information = DIA_fortuno_Trade_Info; permanent = TRUE; description = "Покажи мне свои товары."; };
func int DIA_fortuno_Trade_Condition() { return TRUE; }; func void DIA_fortuno_Trade_Info() { AI_Output(other,self,"DIA_fortunor_Trade_15_00"); //Покажи мне свои товары. B_GiveTradeInv(self); Точно не знаю правильно или нет,но попробуй!Потом скажи получилось или нет!
|
|
|
14.08.2005, 18:06
|
#733
|
|
Re: Скриптинг в Готике
2TSYLin: Попробуй создать скрипт:
instance SEK_30000_FORTUNO_NW(Npc_Default) { * * *id = 30000; \\ ID ЛЮБОГО непися, будь он в Минентале, Яркендаре, Хоринисе должно быть УНИКАЛЬНЫМ * * *name[0] = "Фортуно"; * * *guild = GIL_None; \\ если у тебя не описана гильдия послушников в файле Guilds.d то лучше, пусть он будет без гильдии * * *voice = 13; * * *flags = 0; * * *npcType = NPCTYPE_AMBIENT; * * *B_SetAttributesToChapter (self, 1); * * *aivar[AIV_IGNORE_Murder] = TRUE; * * *aivar[AIV_IGNORE_Theft] = TRUE; * * *aivar[AIV_IGNORE_Sheepkiller] = TRUE; * * *fight_tactic = FAI_HUMAN_COWARD; * * *EquipItem (self, ItMw_1h_Sld_Axe); * * *B_CreateAmbientInv (self); * * *B_SetNpcVisual (self, MALE, "Hum_Head_Bald", 8, 10, itar_nov_h); * * *Mdl_SetModelFatness (self, 0); * * *Mdl_ApplyOverlayMds (self, "Humans_Relaxed.mds"); * * *B_GiveNpcTalents (self); * * *B_SetFightSkills (self, 20); * * *daily_routine = rtn_start_30000; };
func void rtn_start_30000 () { * * *TA_Stand_Eating (5, 0, 11, 0, "NW_FARM3_OUT_06"); * * *TA_Smoke_Joint (11, 0, 24, 0, "NW_FARM3_OUT_06"); * * *TA_Pray_Sleeper (24, 0, 5, 0, "NW_FARM3_OUT_06"); };
В файле Story\Npc_Globals в начале файла напиши var C_Npc FORTUNO_NW; Далее найди в этом же файле функцию func void B_InitNpcGlobals() и после строк
if (Kapitel == 0) * * *{ * * * * * *Kapitel = 1; * * *};
напиши вот что:
FORTUNO_NW = Hlp_GetNpc (SEK_30000_FORTUNO_NW);
Далее в файле Story\Startup.d в функции func void STARTUP_NewWorld_Part_GreatPeasant_01() напиши вот что: Wld_InsertNpc (SEK_30000_FORTUNO_NW, "FARM3");
Теперь самое ответственное: Файл DIA_sek_6006_fortuno.d переименуй в DIA_ SEK_30000_FORTUNO_NW.d и везде замени npc = sek_6006_fortuno; на npc = SEK_30000_FORTUNO_NW;
Заключительный штрих – впиши в файл Gothic.scr строчки DIA_ SEK_30000_FORTUNO_NW.d SEK_30000_FORTUNO_NW.d
Если не получится то ты выдай кусок скрипта, где компилятор ругается и ошибку ZSpy.
|
|
|
15.08.2005, 01:13
|
#736
|
|
|
|
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
|
|
|
|
Re: Скриптинг в Готике
2Finsternis:
Кто знает, скажите пожалуйста: в каком файле описывается смена дня и ночи в Готе?
|
Это описано в движке, просто при наступлении определенного времени меняется освещение и прочее ::)
|
|
|
15.08.2005, 11:09
|
#737
|
|
Re: Скриптинг в Готике
2Finsternis:
Не мог бы ты поделиться своим опытом в плане "Невидимых мясных жуков" Очень мне понравилась такая фишка.
|
Очень просто ;) Создаем зверушку - бессмертного мясного жука-призрака размером 0.01 от обычного. Заметить его невозможно, можно только услышать его шуршание вблизи места, где он сидит :) [pre] prototype Mst_Default_HelperBug(C_Npc) { name[0] = ""; guild = GIL_MEATBUG; flags = NPC_FLAG_IMMORTAL | NPC_FLAG_GHOST; level = 1; noFocus = 1; bodyStateInterruptableOverride = 1; attribute[ATR_STRENGTH] = 1; attribute[ATR_DEXTERITY] = 1; attribute[ATR_HITPOINTS_MAX] = 10; attribute[ATR_HITPOINTS] = 10; attribute[ATR_MANA_MAX] = 0; attribute[ATR_MANA] = 0; protection[PROT_BLUNT] = 0; protection[PROT_EDGE] = 0; protection[PROT_POINT] = 0; protection[PROT_FIRE] = 0; protection[PROT_FLY] = 0; protection[PROT_MAGIC] = 0; damagetype = DAM_EDGE; senses = SENSE_SMELL; senses_range = 0; aivar[AIV_MM_FollowInWater] = FALSE; start_aistate = ZS_MM_AllScheduler; aivar[AIV_MM_WuselStart] = OnlyRoutine; damage [DAM_INDEX_EDGE] = 0; }; func void B_SetVisuals_HelperBug() { Mdl_SetVisual (self, "Meatbug.mds"); Mdl_SetVisualBody (self, "Mbg_Body", DEFAULT, DEFAULT, "", DEFAULT, DEFAULT, -1); Mdl_SetModelScale (self, 0.01, 0.01, 0.01); }; instance HelperBugBaumsaege(Mst_Default_HelperBug) { B_SetVisuals_HelperBug (); aivar[AIV_MM_REAL_ID] = ID_MEATBUG_BAUMSAEGE; }; [/pre] В ZS_MM_AllScheduler прописываем в самом начале: [pre] if ((self.guild == GIL_MEATBUG)) { if (self.aivar[AIV_MM_REAL_ID] == ID_MEATBUG_BAUMSAEGE) { AI_StartState (self, ZS_MM_Rtn_Baumsaege, 1, ""); return; } [/pre] Создаем ZS_MM_Rtn_Baumsaege.d и в нем пишем эту самую операцию: [pre] func void ZS_MM_Rtn_Baumsaege() { Perception_Set_Helper_Rtn (); B_MM_DeSynchronize (); if (Hlp_StrCmp (Npc_GetNearestWP (self), self.wp) == FALSE) { AI_GotoWP (self, self.wp); }; }; var int SayOneTimeBaumsaege; func int ZS_MM_Rtn_Baumsaege_Loop() { if (Npc_GetStateTime(self) >= 5) { Npc_SetStateTime (self, 0); if (Npc_GetBodyState (hero) == BS_MOBINTERACT_INTERRUPT) { var string DetMob; DetMob = Npc_GetDetectedMob(hero); if (Hlp_StrCmp (DetMob, "BAUMSAEGE")) { if (KnowHowToMakeArrows == TRUE) { B_GiveInvItems(self, hero, ItRw_Arrow, 1); } else if (SayOneTimeBaumsaege == FALSE) { AI_PrintScreen ("Интересно - а что бы я мог так напилить?", -1, YPOS_ItemGiven, FONT_ScreenSmall, 2); SayOneTimeBaumsaege = TRUE; }; }; }; }; return LOOP_CONTINUE; }; func void ZS_MM_Rtn_Baumsaege_End() { }; [/pre] Т.е. баг сидит и проверяет - если ГГ делает что-то стоя у бревна - значит пришла пора подкладывать ему в инвентарь стрелы. Perception_Set_Helper_Rtn () здесь на всякий случай отрубает багу "органы чувств". Т.е. [pre] Npc_PercDisable (self, PERC_ASSESSMAGIC); Npc_PercDisable (self, PERC_ASSESSDAMAGE); и.т.п. [/pre] Осталось только вставить наших багов рядом с бревнами: [pre] Wld_InsertNpc (HelperBugBaumsaege, "NW_CITY_MERCHANT_SHOP01_FRONT_01"); Wld_InsertNpc (HelperBugBaumsaege, "NW_CITY_POOR_SAW"); Wld_InsertNpc (HelperBugBaumsaege, "NW_TAVERNE_03"); Wld_InsertNpc (HelperBugBaumsaege, "NW_CITY_HABOUR_08"); Wld_InsertNpc (HelperBugBaumsaege, "NW_CASTLEMINE_TROLL_04_C"); Wld_InsertNpc (HelperBugBaumsaege, "NW_CASTLEMINE_TOWER__MOBSI"); Wld_InsertNpc (HelperBugBaumsaege, "NW_BIGFARM_KITCHEN_OUT_01"); Wld_InsertNpc (HelperBugBaumsaege, "NW_FARM3_STABLE_OUT_01"); Wld_InsertNpc (HelperBugBaumsaege, "NW_FARM4_TILL"); [/pre] Теперь при первой попытке попилить любое бревно в Хоринисе вылезет фраза "И чтобы я мог так напилить"? После разговора с тем, кто учить пилить стрелы ставим KnowHowToMakeArrows в TRUE и теперь можно просто оставить ГГ пилить у ближайшего бревна, а самому пойти в магазин за пивом ;) Скорость невелика - за время похода он напилит 300-400 стрел. И еще - если жук больше не нужен, можно его самоубить ;) Но делать это надо только в _End() функции. Если убить бага в _Loop(), то игра трапнется. Т.е., например: [pre] func int ZS_MM_Rtn_DropItem_Loop() { if (Npc_GetStateTime(self) >= 2) { Npc_SetStateTime (self, 0); if (HeroHasAnItem) { if (Npc_HasItems (hero, ItKe_OC_Store) == 0) { var c_npc own; // кому пренадлежит комната, в которой ГГ? own = Npc_GetPortalOwner(hero); HeroHasAnItem = FALSE; if (Hlp_IsValidNpc(own)) { if (Hlp_GetInstanceID (own) == Hlp_GetInstanceID (Engor)) { B_GivePlayerXP(XP_Ambient * 2); if ((MIS_CassiaGoldCup == LOG_Running) || (MIS_CassiaGoldCup == LOG_Success)) { B_LogEntry (Topic_CassiaGoldCup, "Я подбросил ключ в комнату Энгора."); }; // баг сделал дело, прекращаем цикл return LOOP_END; }; }; }; } else if (Npc_HasItems (hero, ItKe_OC_Store) >= 1) { HeroHasAnItem = TRUE; }; }; return LOOP_CONTINUE; }; func void ZS_MM_Rtn_DropItem_End() { self.flags = NPC_FLAG_GHOST; // сбросим флаг бессмертия Npc_ChangeAttribute (self, ATR_HITPOINTS, -self.attribute[ATR_HITPOINTS_MAX]); }; [/pre]
|
|
|
16.08.2005, 20:04
|
#740
|
|
Re: Скриптинг в Готике
2Отец Левонтий:
Я хочу сделать так, чтобы если ГГ попадает в триггер, то он превращается в падальщика.
|
Это не превращение - это установка инфы - в кого превращаться. Превращение жестко зашито в коде (и даже привязано к номерам заклинаний - т.е. нового заклинания не сделаешь). Превратиться можно только через кастование заклинания.
|
|
|
17.08.2005, 00:18
|
#741
|
|
Re: Скриптинг в Готике
Превращение жестко зашито в коде
|
В каком коде?
Превратиться можно только через кастование заклинания.
|
Значит мне остается только мечтать о моей идее?
|
|
|
17.08.2005, 00:26
|
#742
|
|
Re: Скриптинг в Готике
2Отец Левонтий: У меня возникла та же проблема, только я хотел превратить ГГ в орка. В принципе я нашел выход из ситуации - я изменил гильдию, анимацию и визуализацию - почти все работает, только вот у орка почему-то видна только голова и часть левой руки, что не так, я не понял. :(
Кто сможет, подскажите пожалуйста.
Вот код скрипта "превращения":
*Npc_SetTrueGuild (self, *GIL_ORC); *self.guild = *GIL_ORC; *Mdl_SetVisual (self, "Orc.mds"); *Mdl_SetVisualBody (self, "Orc_BodyElite", DEFAULT, DEFAULT, "Orc_HeadWarrior", DEFAULT, DEFAULT, -1);
Я так подозреваю, что дело в меш модели ГГ - она не совпадает с моделью орка, поэтому все протекает немного коряво. :-/
Заранее спасибо за помощь. ;)
|
|
|
17.08.2005, 01:04
|
#743
|
|
Re: Скриптинг в Готике
2Отец Левонтий:
В самой готике.
Значит мне остается только мечтать о моей идее?
|
Можешь попробовать как-ньть заклинание кастануть. Но, наверно, тоже не получится.
|
|
|
17.08.2005, 20:54
|
#745
|
|
|
|
|
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
|
|
|
|
|
|
Re: Скриптинг в Готике
2BVPROGS: Попробуй так: AI_Teleport(BVPROGS_777_IVAN,hero.wp); или AI_Teleport(BVPROGS_777_IVAN,Npc_GetNearestWP(hero));
|
|
|
18.08.2005, 11:03
|
#748
|
|
Re: Скриптинг в Готике
2Finsternis: Помнишь ты задавал вопрос связанный с орком!Так вот после этого я вспомнил мод бумшак как же там то получилось неписю присвоить визуалицию орка!Я искал,но не нашёл где там находится файл PC_HERO.d.Я попытался сам присвоить визуалициб орка воина изменил визуалицию нашего непися на это Mdl_SetVisual(self,"Orc.mds"); Mdl_SetVisualBody(self,"Orc_BodyWarrior",DEFAULT, DEFAULT,"Orc_HeadWarrior",DEFAULT,DEFAULT,-1); Захожу в игру и я играю за орка и всё там налезает1 Так что попробуй вместо Mdl_SetVisual (self, "Orc.mds"); Mdl_SetVisualBody (self, "Orc_BodyElite", DEFAULT, DEFAULT, "Orc_HeadWarrior", DEFAULT, DEFAULT, -1); поставить это Mdl_SetVisual(self,"Orc.mds"); Mdl_SetVisualBody(self,"Orc_BodyWarrior",DEFAULT, DEFAULT,"Orc_HeadWarrior",DEFAULT,DEFAULT,-1); Потому что может быть действительно элитного орка визуалиция не налезает,а вот орка воина нализает на все 100%!Так что попробуй!Удачи
|
|
|
18.08.2005, 15:51
|
#750
|
|
Re: Скриптинг в Готике
2SATANIZMatik: Сейчас попробую и шкуру элитнека нацепить!Вечером дм ответ!
Добавление от 08/18/05, в 15:10:09 2SATANIZMatik: C элитным орком тоже всё работает!Проверял!если не веришь то зайди в Gothic II\_work\Data\Scripts\Content\Story\NPC в файл PC_Hero.d.И там измени вместо Mdl_SetVisual(self,"HUMANS.MDS"); Mdl_SetVisualBody(self,"hum_body_Naked0",9,0,"Hum _Head_Pony",Face_N_Player,0,NO_ARMOR); на это Mdl_SetVisual(self,"Orc.mds"); Mdl_SetVisualBody(self,"Orc_BodyElite",DEFAULT,DEF AULT,"Orc_HeadWarrior",DEFAULT,DEFAULT,-1); Потом откомпилируй!Зайди в игру заного и смотри!
Добавление от 08/18/05, в 15:11:43 2Finsternis: Не мог бы ты выложить весь скрипт,а не только код!
|
|
|
18.08.2005, 16:23
|
#751
|
|
Re: Скриптинг в Готике
2DEDROIT:
Да вот он весь скрипт: instance ItAm_Amulet_of_Lunatics(C_Item) { name = NAME_Amulett; mainflag = ITEM_KAT_MAGIC; flags = ITEM_AMULET; value = 0; visual = "ItAm_Hp_01.3ds"; visual_skin = 0; material = MAT_METAL; on_equip = Equip_ItAm_Amulet_of_Lunatics; on_unequip = UnEquip_ItAm_Amulet_of_Lunatics; wear = WEAR_EFFECT; effect = "SPELLFX_ITEMGLIMMER"; description = "Амулет сумасшедших"; inv_zbias = INVCAM_ENTF_AMULETTE_STANDARD; };
func void Equip_ItAm_Amulet_of_Lunatics() { Npc_SetTrueGuild (self, GIL_ZOMBIE); self.guild = GIL_ZOMBIE; Mdl_SetVisual (self, "Zombie.mds"); Mdl_SetVisualBody (self, "Zom_Body", 0, 0, "Zom_Head", 1, DEFAULT, -1);
};
func void UnEquip_ItAm_Amulet_of_Lunatics() { Npc_SetTrueGuild (self, GIL_NONE); self.guild = GIL_NONE; Mdl_SetVisual (self, "HUMANS.MDS"); Mdl_SetVisualBody (self, "hum_body_Naked0", 9, 0, "Hum_Head_Pony", Face_N_Player, 0, NO_ARMOR); };
Это только начало моей идеи, коли получится...
|
|
|
18.08.2005, 17:27
|
#753
|
|
Re: Скриптинг в Готике
2DEDROIT:
Но почему то когдая это вставляю компилятор выдаёт ошибку!
|
Насчет ошибки поподробней можно.
|
|
|
18.08.2005, 17:48
|
#754
|
|
Re: Скриптинг в Готике
2Vam: Вот скрипт который я вставляю instance ItAm_Amulet_of_Lunatics(C_Item) { * * name = NAME_Amulett; * * mainflag = ITEM_KAT_MAGIC; * * flags = ITEM_AMULET; * * value = 0; * * visual = "ItAm_Hp_01.3ds"; * * visual_skin = 0; * * material = MAT_METAL; * * on_equip = Equip_ItAm_Amulet_of_Lunatics; * * on_unequip = UnEquip_ItAm_Amulet_of_Lunatics; * * wear = WEAR_EFFECT; * * effect = "SPELLFX_ITEMGLIMMER"; * * description = "Амулет сумасшедших"; * * inv_zbias = INVCAM_ENTF_AMULETTE_STANDARD; };
func void Equip_ItAm_Amulet_of_Lunatics() { * * * Npc_SetTrueGuild (self,GIL_ORC); * * *self.guild = *GIL_ORC; * * *Mdl_SetVisual(self,"Orc.mds"); * * *Mdl_SetVisualBody(self,"Orc_BodyShaman",DEFAULT,D EFAULT,"Orc_HeadShaman",DEFAULT,DEFAULT,-1); * * *B_SetVisuals_OrcShaman(); }; func void UnEquip_ItAm_Amulet_of_Lunatics() { * * Npc_SetTrueGuild (self,GIL_NONE); * * self.guild = *GIL_NONE; * * Mdl_SetVisual (self, "HUMANS.MDS"); * * Mdl_SetVisualBody (self, "hum_body_Naked0", 9, 0, "Hum_Head_Pony", Face_N_Player, 0, NO_ARMOR); }; А вот ошибка 00:01 Fatal:-1 U: PAR:ITEMS/IT_AMULETTE.D:Unknown indetifier:B_SETVISUALS_ORCSHAMAN(line 474)...<zParser.cpp,#599>
|
|
|
18.08.2005, 18:02
|
#755
|
|
Re: Скриптинг в Готике
подскажите пожалуста что делать.
скрипт
func void B_PlayerFindItem(var int itm,var int amount) { var string concatText; var string itemname; if(Npc_IsPlayer(self)) { CreateInvItems(self,itm,amount); itemname = item.name; if(itm == ItMi_Gold) { concatText = ConcatStrings(IntToString(amount),PRINT_GoldErhalt en); Print(concatText); Snd_Play("Geldbeutel"); } else if(amount == 1) { concatText = ConcatStrings(itemname,PRINT_Addon_erhalten); Print(concatText); } else { concatText = ConcatStrings(IntToString(amount),PRINT_ItemsErhal ten); concatText = ConcatStrings(concatText," ("); concatText = ConcatStrings(concatText,itemname); concatText = ConcatStrings(concatText,")"); Print(concatText); }; }; };
компилятор пишет что Redefined identifier B_PlayerFindItem
Заранее спасибо.
|
|
|
18.08.2005, 18:07
|
#757
|
|
Re: Скриптинг в Готике
2DEDROIT:
А вот ошибка 00:01 Fatal:-1 U: PAR:ITEMS/IT_AMULETTE.D:Unknown indetifier:B_SETVISUALS_ORCSHAMAN(line 474)...<zParser.cpp,#599>
|
Всё дело в том, что твой скрипт находится в папке Items, которая компилится раньше, чем папка Story\NPC, где находится эта функция, нужно эту функцию перетащить в свой файл (один из способов) Добавление от 08/18/05, в 17:11:35 2TSYLin:
компилятор пишет что Redefined identifier B_PlayerFindItem
|
Имя B_PlayerFindItem в твоих скриптах объявлено более одного раза, поищи и удали ненунжное, или замени на другое.
|
|
|
18.08.2005, 20:09
|
#758
|
|
Re: Скриптинг в Готике
Я столкнулся с новой проблемой. Вот функции инициализации мира:
func void STARTUP_CASTLEOFVALKIRIES() { * * *Wld_InsertNpc (Guard_Brige_L, "D_BRCKE_L"); * * *Wld_InsertNpc (PC_Hero, "D_SP_01"); * * *Wld_InsertNpc (Guard_Brige_r, "D_BRCKE_R"); };
func void INIT_CASTLEOFVALKIRIES() { * * *B_InitMonsterAttitudes (); * * *B_InitGuildAttitudes (); * * *B_InitNpcGlobals (); };
До того, как я вставил неписей Guard_Brige_L и Guard_Brige_r все работало замечательно – по крайней мере мир грузился. Теперь, когда я вставил стражей моста при начале новой игры комп виснет, приходится перегружать. Что не так, я не знаю, при компиляции ошибок нет. Вот функции рутины моих стражей моста:
func void Rtn_Start_30000() { * * *TA_Guard_Passage (8, 0, 23, 0, "D_BRCKE_L"); * * *TA_Guard_Passage (23, 0, 8, 0, "D_BRCKE_L"); }; *
func void Rtn_Start_30001() { * * *TA_Guard_Passage (8, 0, 23, 0, "D_BRCKE_R"); * * *TA_Guard_Passage (23, 0, 8, 0, "D_BRCKE_R"); };
Рядом с вейпоинтом D_BRCKE_R поставил фрипоинт Guarding_Bridg_R, а рядом с D_BRCKE_L поставил Guarding_Bridg_L.
2DEDROIT: Ты же вроде хотел вставить элитного орка,а сейчас почему зомби! Просто я начинал с орка - не получилось, потом проверил на зомби - получилось, и я, видать, сохранился случайно.
|
|
|
18.08.2005, 21:36
|
#759
|
|
Re: Скриптинг в Готике
Ещё один вопрос, скопировал из Тёмного мага следущий скрипт
var int bad_ritual;
prototype DEFAULT_DARKMAGE(C_Npc) { * * *attribute[ATR_STRENGTH] = 10; * * *aivar[REAL_STRENGTH] = 10; * * *attribute[ATR_DEXTERITY] = 10; * * *aivar[REAL_DEXTERITY] = 10; * * *attribute[ATR_MANA_MAX] = 10; * * *aivar[REAL_MANA_MAX] = 10; * * *attribute[ATR_MANA] = 10; * * *attribute[ATR_HITPOINTS_MAX] = 40; * * *attribute[ATR_HITPOINTS] = 40; * * *HitChance[NPC_TALENT_1H] = 0; * * *HitChance[NPC_TALENT_2H] = 0; * * *HitChance[NPC_TALENT_BOW] = 0; * * *HitChance[NPC_TALENT_CROSSBOW] = 0; * * *protection[PROT_EDGE] = 0; * * *protection[PROT_BLUNT] = 0; * * *protection[PROT_POINT] = 0; * * *protection[PROT_FIRE] = 0; * * *protection[PROT_MAGIC] = 0; * * *damagetype = DAM_BLUNT; * * *senses = SENSE_HEAR | SENSE_SEE; * * *senses_range = PERC_DIST_ACTIVE_MAX; * * *aivar[AIV_MM_FollowTime] = NPC_TIME_FOLLOW; * * *aivar[AIV_FightDistCancel] = FIGHT_DIST_CANCEL; * * *bodyStateInterruptableOverride = FALSE; * * *guild = GIL_BAD; * * *npcType = NPCTYPE_FRIEND; * * *level = 50; * * *voice = 4; * * *flags = NPC_FLAG_IMMORTAL; * * *B_SetAttributesToChapter(self,6); * * *B_SetNpcVisual(self,MALE,"Hum_Head_Bald",Face_N_X ardas,BodyTex_N,ITAR_Xardas); * * *Mdl_ApplyOverlayMds(self,"Humans_Mage.mds"); * * *Mdl_SetModelFatness(self,0); * * *B_SetFightSkills(self,30); * * *CreateInvItems(self,ItPo_Health_03,10); * * *senses = SENSE_SEE | SENSE_SMELL; * * *senses_range = 2000; * * *fight_tactic = FAI_HUMAN_MASTER; * * *aivar[AIV_IgnoresArmor] = TRUE; * * *B_GiveNpcTalents(self); * * *aivar[AIV_MagicUser] = MAGIC_ALWAYS; * * *aivar[AIV_EnemyOverride] = TRUE; };
instance BAD_9006_KRIEG(DEFAULT_DARKMAGE) { * * *name[0] = "Хранитель войны"; * * *id = 9006; * * *daily_routine = rtn_start_9006; };
instance BAD_9007_PEST(DEFAULT_DARKMAGE) { * * *name[0] = "Хранитель чумы"; * * *id = 9007; * * *daily_routine = rtn_start_9007; };
instance BAD_9008_HUNGER(DEFAULT_DARKMAGE) { * * *name[0] = "Хранитель голода"; * * *id = 9008; * * *daily_routine = rtn_start_9008; };
instance BAD_9009_TOD(DEFAULT_DARKMAGE) { * * *name[0] = "Хранитель смерти"; * * *id = 9009; * * *daily_routine = rtn_start_9009; };
func void rtn_start_9006() { * * *ta_hueter(0,0,12,0,"OC_RAMP_16"); * * *ta_hueter(12,0,0,0,"OC_RAMP_16"); };
func void rtn_nw_9006() { * * *ta_hueter(0,0,12,0,"NW_LITTLESTONEHENDGE"); * * *ta_hueter(12,0,0,0,"NW_LITTLESTONEHENDGE"); };
func void rtn_tot_9006() { * * *ta_hueter(0,0,12,0,"TOT"); * * *ta_hueter(12,0,0,0,"TOT"); };
func void rtn_start_9007() { * * *ta_hueter(0,0,12,0,"NW_CITY_KANAL_06"); * * *ta_hueter(12,0,0,0,"NW_CITY_KANAL_06"); };
func void rtn_ritual_9007() { * * *ta_hueter(0,0,12,0,"NW_LITTLESTONEHENDGE_02"); * * *ta_hueter(12,0,0,0,"NW_LITTLESTONEHENDGE_02"); };
func void rtn_start_9008() { * * *ta_hueter(0,0,12,0,"NW_FARM2_PATH_02"); * * *ta_hueter(12,0,0,0,"NW_FARM2_PATH_02"); };
func void rtn_ritual_9008() { * * *ta_hueter(0,0,12,0,"NW_LITTLESTONEHENDGE"); * * *ta_hueter(12,0,0,0,"NW_LITTLESTONEHENDGE"); };
func void rtn_start_9009() { * * *ta_hueter(0,0,12,0,"ADW_MINE_MC_01"); * * *ta_hueter(12,0,0,0,"ADW_MINE_MC_01"); };
func void rtn_nw_9009() { * * *ta_hueter(0,0,12,0,"NW_LITTLESTONEHENDGE_01"); * * *ta_hueter(12,0,0,0,"NW_LITTLESTONEHENDGE_01"); };
func void rtn_tot_9009() { * * *ta_hueter(0,0,12,0,"TOT"); * * *ta_hueter(12,0,0,0,"TOT"); };
func void zs_bad_routine() { * * *Perception_Set_Normal(); * * *AI_SetWalkMode(self,NPC_WALK); * * *if(Npc_GetDistToWP(self,self.wp) > 1000) * * *{ * * * * * *if(Npc_GetDistToNpc(self,hero) < 10000) * * * * * *{ * * * * * * * * *AI_PlayAni(self,"T_RUN_2_MAG"); * * * * * * * * *AI_PlayAni(self,"T_MAG_2_MAGRUN"); * * * * * * * * *AI_PlayAni(self,"T_MAGRUN_2_HEASHOOT"); * * * * * * * * *Wld_PlayEffect("spellFX_Teleport",self,self,0,0,0 ,FALSE); * * * * * *}; * * * * * *AI_Teleport(self,self.wp); * * *}; * * *AI_GotoWP(self,self.wp); * * *AI_AlignToWP(self); };
func int zs_bad_routine_loop() { * * *var int randomMove; * * *if(KENNT_STEINKREIS) * * *{ * * * * * *if((((self.id == 9006) && Npc_KnowsInfo(hero,bad_krieg_speak)) || ((self.id == 9009) && Npc_KnowsInfo(hero,bad_tod_speak))) && (CurrentLevel != NEWWORLD_ZEN) && (Npc_GetDistToWP(self,"TOT") > 1000) && (self.aivar[AIV_INVINCIBLE] == FALSE)) * * * * * *{ * * * * * * * * *Npc_ExchangeRoutine(self,"Tot"); * * * * * * * * *return LOOP_END; * * * * * *}; * * * * * *if((((self.id == 9006) && Npc_KnowsInfo(hero,bad_krieg_speak)) || ((self.id == 9009) && Npc_KnowsInfo(hero,bad_tod_speak))) && (CurrentLevel != NEWWORLD_ZEN) && (Npc_GetDistToWP(self,"TOT") <= 1000)) * * * * * *{ * * * * * * * * *self.flags = 0; * * * * * * * * *Npc_ChangeAttribute(self,ATR_HITPOINTS,-self.attribute[ATR_HITPOINTS_MAX]); * * * * * * * * *return LOOP_END; * * * * * *}; * * * * * *if((self.id == 9007) && Npc_KnowsInfo(hero,bad_pest_speak) && (Npc_GetDistToWP(self,"NW_LITTLESTONEHENDGE_02") > 1000) && (self.aivar[AIV_INVINCIBLE] == FALSE)) * * * * * *{ * * * * * * * * *Npc_ExchangeRoutine(self,"Ritual"); * * * * * * * * *return LOOP_END; * * * * * *}; * * * * * *if((self.id == 9008) && Npc_KnowsInfo(hero,bad_hunger_speak) && (Npc_GetDistToWP(self,"NW_LITTLESTONEHENDGE") > 1000) && (self.aivar[AIV_INVINCIBLE] == FALSE)) * * * * * *{ * * * * * * * * *Npc_ExchangeRoutine(self,"Ritual"); * * * * * * * * *return LOOP_END; * * * * * *}; * * *}; * * *if((BAD_RITUAL == 1) && (self.id == 9006)) * * *{ * * * * * *Wld_PlayEffect("FX_EarthQuake",self,self,0,0,0,FA LSE); * * * * * *AI_PlayAni(self,"T_PRACTICEMAGIC5"); * * * * * *Wld_PlayEffect("spellFX_INCOVATION_VIOLET",self,s elf,0,0,0,FALSE); * * * * * *BAD_RITUAL = 2; * * * * * *return LOOP_CONTINUE; * * *}; * * *if((BAD_RITUAL == 2) && (self.id == 9007)) * * *{ * * * * * *AI_PlayAni(self,"T_PRACTICEMAGIC5"); * * * * * *Wld_PlayEffect("spellFX_INCOVATION_VIOLET",self,s elf,0,0,0,FALSE); * * * * * *BAD_RITUAL = 3; * * * * * *return LOOP_CONTINUE; * * *}; * * *if((BAD_RITUAL == 3) && (self.id == 9008)) * * *{ * * * * * *AI_PlayAni(self,"T_PRACTICEMAGIC5"); * * * * * *Wld_PlayEffect("spellFX_INCOVATION_VIOLET",self,s elf,0,0,0,FALSE); * * * * * *BAD_RITUAL = 4; * * * * * *return LOOP_CONTINUE; * * *}; * * *if((BAD_RITUAL == 4) && (self.id == 9009)) * * *{ * * * * * *Wld_PlayEffect("FX_EarthQuake",self,self,0,0,0,FA LSE); * * * * * *AI_PlayAni(self,"T_PRACTICEMAGIC5"); * * * * * *Wld_PlayEffect("spellFX_INCOVATION_VIOLET",self,s elf,0,0,0,FALSE); * * * * * *BAD_RITUAL = 5; * * * * * *return LOOP_CONTINUE; * * *}; * * *if(Npc_GetStateTime(self) > 5) * * *{ * * * * * *randomMove = Hlp_Random(6); * * * * * *if(randomMove == 0) * * * * * *{ * * * * * * * * *AI_PlayAni(self,"R_LEGSHAKE"); * * * * * *}; * * * * * *if(randomMove == 1) * * * * * *{ * * * * * * * * *AI_PlayAni(self,"R_SCRATCHLSHOULDER"); * * * * * *}; * * * * * *if(randomMove == 2) * * * * * *{ * * * * * * * * *AI_PlayAni(self,"R_SCRATCHEGG"); * * * * * *}; * * * * * *if(randomMove == 3) * * * * * *{ * * * * * * * * *AI_PlayAni(self,"R_SCRATCHHEAD"); * * * * * *}; * * * * * *if(randomMove == 4) * * * * * *{ * * * * * * * * *AI_PlayAni(self,"R_SCRATCHRSHOULDER"); * * * * * *}; * * * * * *if(randomMove == 5) * * * * * *{ * * * * * * * * *AI_PlayAni(self,"T_PRACTICEMAGIC"); * * * * * *}; * * * * * *Npc_SetStateTime(self,0); * * *}; * * *return LOOP_CONTINUE; };
func void zs_bas_routine_end() { };
zSpy пишет что unknown identifier ta_hueter
ожет быть надо где-нибудь что-нибудь прописать?
2Vam: Большое спасибо
|
|
|
18.08.2005, 21:48
|
#760
|
|
Re: Скриптинг в Готике
2TSYLin:
ожет быть надо где-нибудь что-нибудь прописать?
|
Ты забыл взять из файла ..\AI\Human\TA.d функцию ta_hueter и переписать к себе.
|
|
|
Здесь присутствуют: 19 (пользователей: 0 , гостей: 19)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 05:38. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|