Показать сообщение отдельно
Старый 29.08.2011, 11:39   #2473
Dimus

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2ElderGamer:
В принципе, да.

Вот часть наработок по правке ошибок:
Cпойлер(щелкните, чтобы прочесть):
1. Можно нормально торговать с Силасом (раньше торговля срабатывала только один раз).
Исправления в скрипте Story\MISSIONS\DIA_ORG_841_Silas.d:
instance DIA_Silas_Trade(C_Info)
{
* * *npc = ORG_841_Silas;
* * *nr = 1;
* * *condition = DIA_Silas_Trade_Condition;
* * *information = DIA_Silas_Trade_Info;
* * *permanent = 1;
* * *description = "Я хочу пить.";
* * *trade = 1;
};

2. Восстановлен голос у одного из скребков в Лощине (до этого у него был голос 02).
Исправлен скрипт Story\B\Info_SFB_5_Pre.d:
func void Info_SFB_5_Pre_Info()
{
* * *AI_Output(self,other,"Info_SFB_5_EinerVonEuchWerd en_05_00"); * * *//Привет!
};

func void Info_SFB_5_EinerVonEuchWerden_Info()
{
* * *AI_Output(other,self,"Info_SFB_5_EinerVonEuchWerd en_15_00"); * * *//Что если я хочу присоединиться к вам?
* * *AI_Output(self,other,"Info_SFB_5_EinerVonEuchWerd en_05_01"); * * *//Присоединиться к нам? И кем ты хочешь быть - водоносом?
* * *AI_Output(other,self,"Info_SFB_5_EinerVonEuchWerd en_15_02"); * * *//Нет, рудокопом.
* * *AI_Output(self,other,"Info_SFB_5_EinerVonEuchWerd en_05_03"); * * *//Послушай, что я скажу тебе: никто ДОБРОВОЛЬНО не становится рудокопом.
* * *AI_Output(self,other,"Info_SFB_5_EinerVonEuchWerd en_05_04"); * * *//Конечно, если ты настаиваешь... Иди и поговори со Суини - уверен, у него найдется для тебя старая кирка.
};

func void Info_SFB_5_WichtigePersonen_Info()
{
* * *AI_Output(other,self,"Info_SFB_5_WichtigePersonen _15_00"); * * *//Кого здесь можно считать важным человеком?
* * *AI_Output(self,other,"Info_SFB_5_WichtigePersonen _05_01"); * * *//Важным? Меня, конечно.
* * *AI_Output(self,other,"Info_SFB_5_WichtigePersonen _05_02"); * * *//Я думаю, ты хотел спросить, кто здесь главный.
* * *AI_Output(self,other,"Info_SFB_5_WichtigePersonen _05_03"); * * *//Я думаю, тебе стоит поговорить с наемниками или с ворами. Магов Воды ты даже не увидишь.
* * *AI_Output(self,other,"Info_SFB_5_WichtigePersonen _05_04"); * * *//Суини - большая задница, но считает себя большой шишкой. На самом деле он просто раскладывает кирки и делает то, что ему прикажет Окил.
};

func void Info_SFB_5_DasLager_Info()
{
* * *AI_Output(other,self,"Info_SFB_5_DasLager_15_00") ; * * *//Что хорошего в этом Лагере?
* * *AI_Output(self,other,"Info_SFB_5_DasLager_05_01") ; * * *//Это зависит от человека. Одним не достанется ничего, кроме работы, другие получат чертову уйму удовольствия.
};

func void Info_SFB_5_DieLage_Info()
{
* * *AI_Output(other,self,"Info_SFB_5_DieLage_15_00"); * * *//Как здесь живется?
* * *AI_Output(self,other,"Info_SFB_5_DieLage_05_01"); * * *//Отлично!
* * *AI_Output(self,other,"Info_SFB_5_DieLage_05_02"); * * *//Именно потому, что нам так нравится здесь, мы изо всех сил пытаемся отсюда выбраться.
* * *AI_Output(self,other,"Info_SFB_5_DieLage_05_03"); * * *//Как, ты думаешь, называется это место? Это тюрьма, а в тюрьме жить никому не нравится.
};

3. Пришедшие вместе с идолом Люкором на орочье кладбище стражи убиваются в скриптах игры (раньше это делали орки).
Для этого был изменён скрипт Story\Startup.d:
func void startup_orcgraveyard()
{
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_006");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_015");
* * *Wld_InsertNpc(TPL_1445_Templer,"GRYD_016");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_019B");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_019D");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_020B");
* * *Wld_InsertNpc(TPL_1446_Templer,"GRYD_020");
* * *Wld_InsertNpc(GUR_1211_BaalLukor,"GRYD_025");
* * *Wld_InsertNpc(TPL_1443_Templer,"GRYD_025");
* * *Wld_InsertNpc(TPL_1444_Templer,"GRYD_025");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_048");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_048");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_043");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_031");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_032");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_037");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_040");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_047");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_047");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_061");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_062");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_058");
* * *Wld_InsertNpc(OrcScoutGYD,"GRYD_068");
* * *Wld_InsertNpc(OrcWarrior2,"GRYD_055");
* * *B_KillNPC(TPL_1443_Templer);
* * *B_KillNPC(TPL_1444_Templer);
* * *B_KillNPC(TPL_1445_Templer);
* * *B_KillNPC(TPL_1446_Templer);
};

4. Вставлены в мир шантажист и его помощник (взято из Golden Mod, требуется начать новую игру).
Изменен скрипт Story\Startup.d:
func void Startup_Sub_Surface()
{
<...>
* * *Wld_InsertNpc(Org_874_Raeuber,"LOCATION_11_08");
* * *Wld_InsertNpc(ORG_888_Erpresser,"WP_BANDIT_ERPRES SER");
* * *Wld_InsertNpc(ORG_889_CoErpresser,"WP_BANDIT_COER PRESSER");
* * *Wld_InsertNpc(Non_1500_Gilbert,"LOCATION_01_07");
<...>
};

А также скрипты Story\NPC\ORG_888_Erpresser.d:
instance ORG_888_Erpresser(Npc_Default)
{
* * *name[0] = "Шантажист";
* * *npcType = npctype_main;
* * *guild = GIL_ORG;
* * *level = 15;
* * *voice = 13;
* * *id = 888;
* * *attribute[ATR_STRENGTH] = 86;
* * *attribute[ATR_DEXTERITY] = 60;
* * *attribute[ATR_MANA_MAX] = 0;
* * *attribute[ATR_MANA] = 0;
* * *attribute[ATR_HITPOINTS_MAX] = 270;
* * *attribute[ATR_HITPOINTS] = 270;
* * *Mdl_SetVisual(self,"HUMANS.MDS");
* * *Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds");
* * *Mdl_SetVisualBody(self,"hum_body_Naked0",0,1,"Hum _Head_Fatbald",35,2,org_armor_h);
* * *B_Scale(self);
* * *Mdl_SetModelFatness(self,0);
* * *fight_tactic = FAI_HUMAN_MASTER;
* * *Npc_SetTalentSkill(self,NPC_TALENT_BOW,1);
* * *Npc_SetTalentSkill(self,NPC_TALENT_1H,2);
* * *CreateInvItems(self,ItKeLockpick,3);
* * *CreateInvItems(self,ItMiNugget,20);
* * *CreateInvItems(self,ItFoRice,8);
* * *CreateInvItems(self,ItFoBooze,3);
* * *CreateInvItems(self,ItLsTorch,2);
* * *CreateInvItems(self,ItFo_Potion_Health_01,3);
* * *CreateInvItem(self,ItMi_Stuff_Plate_01);
* * *CreateInvItem(self,ItMi_Stuff_Cup_01);
* * *CreateInvItem(self,ItFoMutton);
* * *CreateInvItem(self,ItFoLoaf);
* * *CreateInvItem(self,ItAt_Claws_01);
* * *EquipItem(self,ItMw_1H_Mace_War_02);
* * *EquipItem(self,ItRw_Bow_Long_01);
* * *CreateInvItems(self,ItAmArrow,20);
* * *start_aistate = ZS_Erpresser;
* * *daily_routine = rtn_start_888;
};


func void rtn_start_888()
{
* * *TA_StandAround(13,0,14,0,"WP_BANDIT_ERPRESSER");
* * *TA_StandAround(14,0,13,0,"WP_BANDIT_ERPRESSER");
};

func void rtn_qd_888()
{
* * *TA_StandAround(13,0,14,0,"WP_BANDIT_1_D");
* * *TA_StandAround(14,0,13,0,"WP_BANDIT_1_D");
};

и Story\NPC\ORG_889_CoErpresser.d:
instance ORG_889_CoErpresser(Npc_Default)
{
* * *name[0] = "Помощник шантажиста";
* * *npcType = npctype_ambient;
* * *guild = GIL_ORG;
* * *level = 11;
* * *voice = 7;
* * *id = 889;
* * *attribute[ATR_STRENGTH] = 60;
* * *attribute[ATR_DEXTERITY] = 30;
* * *attribute[ATR_MANA_MAX] = 0;
* * *attribute[ATR_MANA] = 0;
* * *attribute[ATR_HITPOINTS_MAX] = 227;
* * *attribute[ATR_HITPOINTS] = 227;
* * *Mdl_SetVisual(self,"HUMANS.MDS");
* * *Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds");
* * *Mdl_SetVisualBody(self,"hum_body_Naked0",0,2,"Hum _Head_Pony",8,1,org_armor_m);
* * *B_Scale(self);
* * *Mdl_SetModelFatness(self,0);
* * *fight_tactic = FAI_HUMAN_Strong;
* * *Npc_SetTalentSkill(self,NPC_TALENT_BOW,2);
* * *Npc_SetTalentSkill(self,NPC_TALENT_2H,1);
* * *Npc_SetTalentSkill(self,NPC_TALENT_1H,1);
* * *CreateInvItems(self,ItKeLockpick,1);
* * *CreateInvItems(self,ItMiNugget,12);
* * *CreateInvItems(self,ItFoRice,7);
* * *CreateInvItems(self,ItFoBooze,5);
* * *CreateInvItems(self,ItLsTorch,1);
* * *CreateInvItems(self,ItFo_Potion_Health_01,2);
* * *CreateInvItem(self,ItMi_Stuff_Barbknife_01);
* * *CreateInvItem(self,ItFoLoaf);
* * *CreateInvItem(self,ItAt_Teeth_01);
* * *EquipItem(self,ItMw_1H_Mace_War_01);
* * *EquipItem(self,ItRw_Bow_Long_01);
* * *CreateInvItems(self,ItAmArrow,20);
* * *daily_routine = rtn_start_889;
};


func void rtn_start_889()
{
* * *TA_StandAround(13,0,14,0,"WP_BANDIT_COERPRESSER") ;
* * *TA_StandAround(14,0,13,0,"WP_BANDIT_COERPRESSER") ;
};

func void rtn_qd_889()
{
* * *TA_StandAround(13,0,14,0,"WP_BANDIT_2_D");
* * *TA_StandAround(14,0,13,0,"WP_BANDIT_2_D");
};

ВСТАВКА НЕ РАБОТАЕТ, Т.К. В МИРЕ WORLD.ZEN ДЛЯ НИХ НЕТ СЛЕДУЮЩИХ WAYPOINTS:
WP_BANDIT_ERPRESSER, WP_BANDIT_1_D, WP_BANDIT_COERPRESSER, WP_BANDIT_2_D.
Проверить вэйпойнт, на котором они стоят в моде TLVH: OW_PATH_067?

5. Герой теперь платит шантажисту 10 кусков руды, а не 3 куска. Вдобавок в случае отказа платить помощник шантажиста тоже атакует героя (взято из Golden Mod).
Исправлен скрипт Story\MISSIONS\DIA_ORG_888_Erpresser.d:
func void Info_Erpresser_Choice_AufsMaul()
{
* * *var C_Npc coerpresser;
* * *AI_Output(other,self,"Info_Erpresser_Choice_AufsM aul_15_01"); * * *//Ну, почему бы тебе не подойти сюда и не забрать свою руду?
* * *AI_Output(self,other,"Info_Erpresser_Choice_AufsM aul_13_02"); * * *//Спасибо, парень. Выручил.
* * *self.aivar[AIV_HAS_ERPRESSED] = 2;
* * *Info_ClearChoices(Info_Erpresser);
* * *AI_StopProcessInfos(self);
* * *Npc_SetTarget(self,other);
* * *coerpresser = Hlp_GetNpc(ORG_889_CoErpresser);
* * *Npc_SetTarget(coerpresser,other);
* * *AI_StartState(coerpresser,ZS_Attack,1,"");
* * *AI_StartState(self,ZS_Attack,1,"");
};

func void Info_Erpresser_Choice_Zahlen()
{
* * *var C_Npc coerpresser;
* * *if(Npc_HasItems(other,ItMiNugget) >= 10)
* * *{
* * * * * *AI_Output(other,self,"Info_Erpresser_Choice_Zahle n_15_01"); * * *//Вот, 10 кусков.
* * * * * *AI_Output(self,other,"Info_Erpresser_Choice_Zahle n_13_02"); * * *//Вот досада.
* * * * * *B_GiveInvItems(other,self,ItMiNugget,10);
* * * * * *self.aivar[AIV_HAS_ERPRESSED] = 1;
* * * * * *Info_ClearChoices(Info_Erpresser);
* * * * * *AI_StopProcessInfos(self);
* * *}
* * *else
* * *{
* * * * * *AI_Output(other,self,"Info_Erpresser_Choice_Zahle n_15_03"); * * *//У-мм... Кажется, у меня сейчас нет 10 кусков...
* * * * * *AI_Output(self,other,"Info_Erpresser_Choice_Zahle n_13_04"); * * *//Какая жалость...
* * * * * *self.aivar[AIV_HAS_ERPRESSED] = 2;
* * * * * *Info_ClearChoices(Info_Erpresser);
* * * * * *AI_StopProcessInfos(self);
* * * * * *Npc_SetTarget(self,other);
* * * * * *coerpresser = Hlp_GetNpc(ORG_889_CoErpresser);
* * * * * *Npc_SetTarget(coerpresser,other);
* * * * * *AI_StopProcessInfos(self);
* * * * * *AI_StartState(coerpresser,ZS_Attack,1,"");
* * * * * *AI_StartState(self,ZS_Attack,1,"");
* * *};
};

6. Можно поговорить с помощником шантажиста (взято из Golden Mod, требуется начать новую игру).
Добавлен скрипт Story\MISSIONS\DIA_ORG_889_CoErpresser.d:
instance INFO_COERPRESSER_EXIT(C_Info)
{
* * *npc = ORG_889_CoErpresser;
* * *nr = 999;
* * *condition = info_coerpresser_exit_condition;
* * *information = info_coerpresser_exit_info;
* * *important = 1;
* * *permanent = 1;
};


func int info_coerpresser_exit_condition()
{
* * *if(Npc_IsInState(self,ZS_Talk))
* * *{
* * * * * *return 1;
* * *};
};

func void info_coerpresser_exit_info()
{
* * *AI_Output(other,self,"Info_CoErpresser_Exit_Info_ 15_00"); * * *//Постой!
* * *AI_Output(self,other,"Info_CoErpresser_Exit_Info_ 05_00"); * * *//Если ты заплатил, то можешь пройти.
* * *AI_StopProcessInfos(self);
};

7. Исправлен сброс силы после 100 в 0 при обучении у Горацио (взято из Golden Mod).
Исправлен скрипт Story\MISSIONS\DIA_BAU_901_Horatio.d:
func void DIA_Horatio_HelpSTR_LEARN_NOW()
{
* * *if(other.attribute[ATR_STRENGTH] <= (100 - 5))
* * *{
* * * * * *other.attribute[ATR_STRENGTH] = other.attribute[ATR_STRENGTH] + 5;
* * * * * *PrintScreen("Сила +5",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
* * *}
* * *else if(other.attribute[ATR_STRENGTH] < 100)
* * *{
* * * * * *other.attribute[ATR_STRENGTH] = 100;
* * * * * *PrintScreen("Сила: 100",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
* * *}
* * *else
* * *{
* * * * * *PrintScreen("Я уже слишком силен",-1,-1,"FONT_OLD_20_WHITE.TGA",2);
* * *};
* * *AI_Output(self,other,"DIA_Horatio_HelpSTR_LEARN_N OW_09_00"); * * *//Если ты хочешь иметь сильный удар, ты должен знать, как это делается. Это первое, чему учат кузнеца.
* * *AI_Output(self,other,"DIA_Horatio_HelpSTR_LEARN_N OW_09_01"); * * *//Учись вкладывать в удар всю руку, от плеча до запястья.
* * *AI_Output(self,other,"DIA_Horatio_HelpSTR_LEARN_N OW_09_02"); * * *//Чем лучше у тебя это получается, тем сильнее удар. Я думаю, ты освоишь это довольно быстро.
};

8. При повышении маны у мага Огня Торреза стали те же диалоги, что и у других магов и гуру.
Исправлен скрипт Story\MISSIONS\DIA_KDF_405_Torrez.d:
func void KDF_405_Torrez_MANA_Info()
{
* * *AI_Output(other,self,"KDF_405_Torrez_MANA_Info_15 _01"); * * *//Я хотел бы увеличить свою магическую силу.
* * *AI_Output(self,other,"KDF_405_Torrez_MANA_Info_04 _02"); * * *//Я могу помочь тебе увеличить силу. Как использовать ее - твое дело.
* * *Info_ClearChoices(KDF_405_Torrez_MANA);
* * *Info_AddChoice(KDF_405_Torrez_MANA,DIALOG_BACK,KD F_405_Torrez_MANA_BACK);
* * *Info_AddChoice(KDF_405_Torrez_MANA,B_BuildLearnSt ring(NAME_LearnMana_5,5 * LPCOST_ATTRIBUTE_MANA,0),KDF_405_Torrez_MANA_MAN_5 );
* * *Info_AddChoice(KDF_405_Torrez_MANA,B_BuildLearnSt ring(NAME_LearnMana_1,LPCOST_ATTRIBUTE_MANA,0),KDF _405_Torrez_MANA_MAN_1);
};

func void KDF_405_Torrez_MANA_MAN_1()
{
* * *B_BuyAttributePoints(other,ATR_MANA_MAX,1);
* * *Info_ClearChoices(KDF_405_Torrez_MANA);
* * *Info_AddChoice(KDF_405_Torrez_MANA,DIALOG_BACK,KD F_405_Torrez_MANA_BACK);
* * *Info_AddChoice(KDF_405_Torrez_MANA,B_BuildLearnSt ring(NAME_LearnMana_5,5 * LPCOST_ATTRIBUTE_MANA,0),KDF_405_Torrez_MANA_MAN_5 );
* * *Info_AddChoice(KDF_405_Torrez_MANA,B_BuildLearnSt ring(NAME_LearnMana_1,LPCOST_ATTRIBUTE_MANA,0),KDF _405_Torrez_MANA_MAN_1);
};

func void KDF_405_Torrez_MANA_MAN_5()
{
* * *B_BuyAttributePoints(other,ATR_MANA_MAX,5);
* * *Info_ClearChoices(KDF_405_Torrez_MANA);
* * *Info_AddChoice(KDF_405_Torrez_MANA,DIALOG_BACK,KD F_405_Torrez_MANA_BACK);
* * *Info_AddChoice(KDF_405_Torrez_MANA,B_BuildLearnSt ring(NAME_LearnMana_5,5 * LPCOST_ATTRIBUTE_MANA,0),KDF_405_Torrez_MANA_MAN_5 );
* * *Info_AddChoice(KDF_405_Torrez_MANA,B_BuildLearnSt ring(NAME_LearnMana_1,LPCOST_ATTRIBUTE_MANA,0),KDF _405_Torrez_MANA_MAN_1);
};

8. Исправлены ошибки, приводящие к невозможности вступления в маги Огня (взято из Golden Mod).
Это находится в скрипте Story\MISSIONS\DIA_KDF_402_Corristo.d:
func int Info_Corristo_Intruder_Condition()
{
* * *if(Npc_IsInState(self,ZS_Talk) && !(Npc_KnowsInfo(hero,GRD_200_Thorus_WANNABEMAGE) || Npc_KnowsInfo(hero,DIA_Milten_GotoCorristo) || (CorKalom_BringMCQBalls == LOG_SUCCESS)))
* * *{
* * * * * *return 1;
* * *};
};

func int KDF_402_Corristo_WANNBEKDF_Condition()
{
* * *if(((CorKalom_BringMCQBalls == LOG_SUCCESS) || Npc_KnowsInfo(hero,DIA_Milten_GotoCorristo) || Npc_KnowsInfo(hero,GRD_200_Thorus_WANNABEMAGE)) && (Npc_GetTrueGuild(hero) == GIL_STT))
* * *{
* * * * * *return TRUE;
* * *};
};

func void KDF_402_Corristo_ROBE_Info()
{
* * *Snd_Play("MFX_Heal_Cast");
* * *CreateInvItem(hero,kdf_armor_l);
* * *CreateInvItem(self,ItAmArrow);
* * *B_GiveInvItems(self,hero,ItAmArrow,1);
* * *Npc_RemoveInvItem(hero,ItAmArrow);
* * *AI_Output(self,other,"KDF_402_Corristo_ROBE_Info_ 14_01"); * * *//Произнеся слова клятвы, ты связал свою жизнь с Огнем.
* * *AI_Output(self,other,"KDF_402_Corristo_ROBE_Info_ 14_02"); * * *//Носи это одеяние в знак нерушимости связи.
* * *AI_StopProcessInfos(self);
* * *AI_EquipBestArmor(hero);
* * *AI_UnequipWeapons(hero);
* * *Npc_SetTrueGuild(hero,GIL_KDF);
* * *hero.guild = GIL_KDF;
* * *Mdl_ApplyOverlayMds(hero,"Humans_Mage.mds");
* * *Mdl_RemoveOverlayMds(hero,"Humans_Relaxed.mds");
* * *hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS_MAX];
* * *B_LogEntry(GE_BecomeFiremage,"Я прошел проверку и принес клятву Огню. С этого момента я ношу красное облачение магов круга Огня!");
* * *Log_CreateTopic(GE_TeacherOC,LOG_NOTE);
* * *B_LogEntry(GE_TeacherOC,"Корристо может посвятить меня в новые круги магии, а также помочь с тренировкой маны. Его можно найти в доме магов Огня.");
};

9. Бладвин теперь вымогает руду только у нейтралов (GIL_None).
Скрипт Story\MISSIONS\DIA_GRD_233_Bloodwyn.d:
func int Info_Bloodwyn_Hello_Condition()
{
* * *if((Kapitel < 2) && (Npc_GetTrueGuild(other) == GIL_None))
* * *{
* * * * * *return 1;
* * *};
};
То же самое нужно сделать в скрипте Шакала (Story\MISSIONS\DIA_GRD_201_Jackal.d). Хотя я считаю, что условие Kapitel < 2 здесь явно лишнее.

10. Торуса больше нельзя подкупить, если герой уже получил разрешение на встречу с Гомезом.
Скрипт Story\MISSIONS\DIA_GRD_200_Thorus.d:
func int Info_Thorus_Give1000Ore_Condition()
{
* * *if(Npc_KnowsInfo(hero,Info_Thorus_BribeGuard) && (Diego_GomezAudience == FALSE))
* * *{
* * * * * *return 1;
* * *};
};

11. Ю'Берион экипирован именным посохом света (Stab_des_Lichts) - НУЖНО НАЧАТЬ НОВУЮ ИГРУ.
Скрипт Story\NPC\GUR_1200_YBerion.d:
instance GUR_1200_YBerion(Npc_Default)
{
* * *name[0] = "Ю'Берион";
* * *npcType = npctype_main;
* * *guild = GIL_GUR;
* * *level = 30;
* * *flags = NPC_FLAG_IMMORTAL;
* * *voice = 12;
* * *id = 1200;
* * *attribute[ATR_STRENGTH] = 60;
* * *attribute[ATR_DEXTERITY] = 45;
* * *attribute[ATR_MANA_MAX] = 50;
* * *attribute[ATR_MANA] = 50;
* * *attribute[ATR_HITPOINTS_MAX] = 400;
* * *attribute[ATR_HITPOINTS] = 400;
* * *Mdl_SetVisual(self,"HUMANS.MDS");
* * *Mdl_ApplyOverlayMds(self,"Humans_Mage.mds");
* * *Mdl_SetVisualBody(self,"hum_body_Naked0",1,1,"Hum _Head_Bald",83,0,gur_armor_h);
* * *B_Scale(self);
* * *Mdl_SetModelFatness(self,0);
* * *fight_tactic = FAI_HUMAN_MAGE;
* * *Npc_SetTalentSkill(self,NPC_TALENT_MAGE,6);
* * *EquipItem(self,Stab_des_Lichts);
* * *CreateInvItem(self,ItArRunePyrokinesis);
* * *daily_routine = Rtn_start_1200;
};

12. Разблокирована для использования частица ледяного голема (работает аналогично руне "Ледяная стрела").
Скрипт Items\Animaltrophy.d:
instance ItAt_IceGolem_02(C_Item)
{
* * *name = "Частица ледяного голема";
* * *mainflag = ITEM_KAT_RUNE;
* * *flags = 0;
* * *spell = SPL_THUNDERBOLT;
* * *value = Value_Eistueck;
* * *visual = "ItAt_IceGolem_01.3DS";
* * *material = MAT_STONE;
* * *description = name;
* * *text[0] = "Это частица побежденного";
* * *text[1] = "ледяного голема.";
* * *text[4] = NAME_Value;
* * *count[4] = Value_Eistueck;
};
В нём убраны 2 строки, требующие для использования предмета наличие у ГГ 500 маны:
* * *cond_atr[2] = ATR_MANA_MAX;
* * *cond_value[2] = 500;

13. Логическая ошибка в скрипте Story\Missions\DIA_Org_826_Mordrag.d - после того, как герой по заданию Торуса выгнал Мордрага из Старого лагеря, не пропадает возможность пойти вместе с ним в Новый лагерь. В результате если предложить Мордрагу прогуляться вместе до Нового лагеря, у него начинают одновременно работать две противоположных модели поведения: вести за собой героя и убегать от героя, т.к. до этого был побит им.
Поэтому предлагаю добавить дополнительное условие в функции:
func int Org_826_Mordrag_GotoNewcamp_Condition()
{
* * if(Npc_KnowsInfo(hero,Org_826_Mordrag_JoinNewcamp) && (MordragKO_HauAb == FALSE))
* * {
* * * * * return 1;
* * };
};

14. Исправлен баг, из-за которого в случае убийства крутильщиков болотника нельзя завершить квест "Монополия на болотник" (Story\Missions\DIA_GUR_1201_CorKalom.d). IMHO наилучшее решение найдено в моде TLVH:
func void Info_Kalom_Success_Info()
{
* * *var C_Npc Killian;
* * *var C_Npc Renyu;
* * *var C_Npc Jacko;
* * *Killian = Hlp_GetNpc(Org_861_Killian);
* * *Renyu = Hlp_GetNpc(Org_860_Renyu);
* * *Jacko = Hlp_GetNpc(Org_862_Jacko);
* * *AI_Output(other,self,"Mis_1_Psi_Kalom_Success_18_ 00"); * * *//По поводу болотника в Новом Лагере...
* * *AI_Output(self,other,"Mis_1_Psi_Kalom_Success_10_ 01"); * * *//Да?
* * *if((Npc_IsDead(Jacko) && Npc_IsDead(Renyu) && Npc_IsDead(Killian)) || (Stooges_Fled == TRUE))
* * *{
* * * * * *AI_Output(other,self,"Mis_1_Psi_Kalom_Success_18_ 04"); * * *//Вопрос решен.
* * * * * *AI_Output(self,other,"Mis_1_Psi_Kalom_Success_10_ 05"); * * *//Ты удивляешь меня. Я недооценивал твои способности.
* * * * * *Kalom_DrugMonopol = LOG_SUCCESS;
* * * * * *B_LogEntry(CH1_DrugMonopol,"Я проинформировал Кор Галома, что про конкурентов из Нового Лагеря он может забыть. Он снова был очень 'дружелюбен'.");
* * * * * *Log_SetTopicStatus(CH1_DrugMonopol,LOG_SUCCESS);
* * * * * *B_GiveXP(XP_DrugMonopol);
* * *}
* * *else
* * *{
* * * * * *AI_Output(other,self,"Mis_1_Psi_Kalom_Success_18_ 02"); * * *//Я не нашел этих людей.
* * * * * *AI_Output(self,other,"Mis_1_Psi_Kalom_Success_10_ 03"); * * *//Ничего другого я от тебя и не ожидал.
* * *};
};


Пожелания:
1. Если не удастся разобраться с триггером, закрывающим вход в "затопленную" шахту СЛ, то можно убить всех находящихся там стражей с помощью функции B_KillNPC() по аналогии со стражами на орочьем кладбище.

2. Ликвидировать эксплойт, позволяющий бесконечно выпрашивать воду у рисового лорда (ограничить выдачу воды не более 2 раз в день). Неудачная попытка исправления была в Golden Mod.
Ответить с цитированием