|
Re: Gothic 1, 2, 3: Технические вопросы
Новая порция исправленных ошибок для включения в состав G2a_NR_ScriptPatch от Efectivo: 1. В инвентаре Ангуса есть записка бандита Тома. Изменён скрипт Story\NPC\PIR_1370_Addon_Angus.d:
Cпойлер(щелкните, чтобы прочесть):
instance PIR_1370_Addon_Angus(Npc_Default) { * * *name[0] = "Ангус"; * * *guild = GIL_PIR; * * *id = 1370; * * *voice = 6; * * *flags = FALSE; * * *npcType = npctype_main; * * *B_SetAttributesToChapter(self,2); * * *fight_tactic = FAI_HUMAN_NORMAL; * * *EquipItem(self,ItMw_Addon_PIR2hAxe); * * *CreateInvItems(self,ItRi_Addon_MorgansRing_Missio n,1); * * *CreateInvItems(self,ItWr_Addon_Pirates_01,1); * * *B_SetNpcVisual(self,MALE,"Hum_Head_FatBald",Face_ N_NormalBart21, BodyTex_N,ITAR_PIR_M_Addon); * * *Mdl_SetModelFatness(self,1.3); * * *Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds"); * * *B_GiveNpcTalents(self); * * *B_SetFightSkills(self,30); * * *daily_routine = Rtn_Start_1370; };
2. У Самуэля можно купить рецепт изготовления напитка 'Быстрая селедка'. За это отвечает скрипт Story\B_GiveTradeInv\B_GiveTradeInv_Addon_Samuel.d :
Cпойлер(щелкните, чтобы прочесть):
* * *if((Kapitel >= 2) && (Samuel_ItemsGiven_Chapter_2 == FALSE)) * * *{ * * * * * *CreateInvItems(slf,ItMi_Gold,100); * * * * * *CreateInvItems(slf,ItFo_Addon_Rum,2); * * * * * *CreateInvItems(slf,ItFo_Booze,3); * * * * * *CreateInvItems(slf,ItFo_Beer,6); * * * * * *CreateInvItems(slf,ItFo_Wine,2); * * * * * *CreateInvItems(slf,ItFo_Bacon,2); * * * * * *CreateInvItems(slf,ItMi_Flask,4); * * * * * *CreateInvItems(slf,ItPl_SwampHerb,4); * * * * * *CreateInvItems(slf,ItMi_Joint,1); * * * * * *CreateInvItems(slf,ItWr_Addon_Piratentod,1); * * * * * *Samuel_ItemsGiven_Chapter_2 = TRUE; * * *};
3. Скелеты-маги могут вызывать не больше 5 скелетов (взято из патча от Lord Sargon). Нужно править скрипты AI\Magic\B_SelectSpell.d:
Cпойлер(щелкните, чтобы прочесть):
* * *if(slf.guild == GIL_SKELETON_MAGE) * * *{ * * * * * *if(Npc_HasItems(slf,ItRu_SumSkel) == 0) * * * * * *{ * * * * * * * * *CreateInvItems(slf,ItRu_SumSkel,1); * * * * * *}; * * * * * *if(Npc_HasItems(slf,ItRu_IceCube) == 0) * * * * * *{ * * * * * * * * *CreateInvItems(slf,ItRu_IceCube,1); * * * * * *}; * * * * * *if(Npc_HasItems(slf,ItRu_Icebolt) == 0) * * * * * *{ * * * * * * * * *CreateInvItems(slf,ItRu_Icebolt,1); * * * * * *}; * * * * * *if(slf.aivar[AIV_SelectSpell] >= 6) * * * * * *{ * * * * * * * * *slf.aivar[AIV_SelectSpell] = 1; * * * * * *}; * * * * * *if(!Npc_IsInState(oth,ZS_MagicFreeze) && (slf.aivar[AIV_SelectSpell] == 0)) * * * * * *{ * * * * * * * * *B_ReadySpell(slf,SPL_IceCube,SPL_Cost_IceCube); * * * * * * * * *return TRUE; * * * * * *} * * * * * *else if((slf.aivar[AIV_SelectSpell] == 1) && (slf.lp < 5)) * * * * * *{ * * * * * * * * *B_ReadySpell(slf,SPL_SummonSkeleton,SPL_Cost_Summ onSkeleton); * * * * * * * * *return TRUE; * * * * * *} * * * * * *else * * * * * *{ * * * * * * * * *B_ReadySpell(slf,SPL_Icebolt,SPL_COST_Icebolt); * * * * * * * * *return TRUE; * * * * * *}; * * *};
и AI\Magic\Spells\Spell_SummonSkeleton.d:
Cпойлер(щелкните, чтобы прочесть):
func void Spell_Cast_SummonSkeleton() { * * *if(Npc_GetActiveSpellIsScroll(self)) * * *{ * * * * * *self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll; * * *} * * *else * * *{ * * * * * *self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_SummonSkeleton; * * *}; * * *self.aivar[AIV_SelectSpell] += 1; * * *if(Npc_IsPlayer(self)) * * *{ * * * * * *Wld_SpawnNpcRange(self,Summoned_Skeleton,1,500); * * *} * * *else * * *{ * * * * * *self.lp += 1; * * * * * *Wld_SpawnNpcRange(self,Skeleton,1,500); * * *}; };
4. Нельзя бесконечно отдавать квестовые предметы следующим неписям (взято из патча от Lord Sargon): - старые монеты Василию (Story\Dialoge\DIA_BAU_907_Wasili.d):
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Wasili_BringOldCoin_Info() { * * *var int OldCoinCount; * * *var int XP_BringOldCoins; * * *var int OldCoinGeld; * * *AI_Output(other,self,"DIA_Wasili_BringOldCoin_15_ 00"); * * *//Нужны еще старинные монетки? * * *AI_Output(self,other,"DIA_Wasili_BringOldCoin_01_ 01"); * * *//Конечно. У тебя есть еще? * * *OldCoinCount = Npc_HasItems(other,ItMi_OldCoin); * * *if(OldCoinCount == 1) * * *{ * * * * * *AI_Output(other,self,"DIA_Wasili_BringOldCoin_15_ 02"); * * *//Одна. * * * * * *B_GivePlayerXP(XP_BringOldCoin); * * * * * *B_GiveInvItems(other,self,ItMi_OldCoin,1); * * * * * *Npc_RemoveInvItem(self,ItMi_OldCoin); * * * * * *OldCoinCounter = OldCoinCounter + 1; * * *} * * *else * * *{ * * * * * *AI_Output(other,self,"DIA_Wasili_BringOldCoin_15_ 03"); * * *//Несколько. * * * * * *B_GiveInvItems(other,self,ItMi_OldCoin,OldCoinCou nt); * * * * * *Npc_RemoveInvItems(self,ItMi_OldCoin,Npc_HasItems( self,ItMi_O ldCoin)); * * * * * *XP_BringOldCoins = OldCoinCount * XP_BringOldCoin; * * * * * *OldCoinCounter = OldCoinCounter + OldCoinCount; * * * * * *B_GivePlayerXP(XP_BringOldCoins); * * *}; * * *AI_Output(self,other,"DIA_Wasili_BringOldCoin_01_ 04"); * * *//Спасибо. Вот твои деньги. Приноси мне все, что найдешь. * * *OldCoinGeld = OldCoinCount * WasilisOldCoinOffer; * * *CreateInvItems(self,ItMi_Gold,OldCoinGeld); * * *B_GiveInvItems(self,other,ItMi_Gold,OldCoinGeld); };
- драконью кровь Яну (Story\Dialoge\DIA_DJG_714_Jan.d):
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Jan_DragonBlood_1() { * * *var int DragonBloodCount; * * *var int DragonBloodGeld; * * *var int XP_DJG_BringDragonBloods; * * *var string BloodText; * * *var string BloodLeft; * * *DragonBloodCount = 1; * * *B_GiveInvItems(other,self,ItAt_DragonBlood,Dragon BloodCount); * * *XP_DJG_BringDragonBloods = DragonBloodCount * XP_AmbientKap4; * * *B_GivePlayerXP(XP_DJG_BringDragonBloods); * * *DragonBloodGeld = DragonBloodCount * Value_DragonBlood; * * *CreateInvItems(self,ItMi_Gold,DragonBloodGeld); * * *B_GiveInvItems(self,other,ItMi_Gold,DragonBloodGe ld); * * *Npc_RemoveInvItem(self,ItAt_DragonBlood); * * *Info_ClearChoices(DIA_Jan_DragonBlood); * * *Info_AddChoice(DIA_Jan_DragonBlood,Dialog_Back,DI A_Jan_DragonBlood_BACK); * * *if(Npc_HasItems(other,ItAt_DragonBlood) >= 1) * * *{ * * * * * *Info_AddChoice(DIA_Jan_DragonBlood,"(Все)",DIA_Ja n_DragonBlood_all); * * * * * *Info_AddChoice(DIA_Jan_DragonBlood,"(Одну пробирку)",DIA_Jan_DragonBlood_1); * * *}; * * *BloodLeft = IntToString(Npc_HasItems(other,ItAt_DragonBlood)); * * *BloodText = ConcatStrings(BloodLeft,PRINT_NumberLeft); * * *AI_PrintScreen(BloodText,-1,-1,FONT_ScreenSmall,2); };
func void DIA_Jan_DragonBlood_all() { * * *var int DragonBloodCount; * * *var int DragonBloodGeld; * * *var int XP_DJG_BringDragonBloods; * * *var string BloodText; * * *var string BloodLeft; * * *DragonBloodCount = Npc_HasItems(other,ItAt_DragonBlood); * * *B_GiveInvItems(other,self,ItAt_DragonBlood,Dragon BloodCount); * * *XP_DJG_BringDragonBloods = DragonBloodCount * XP_AmbientKap4; * * *B_GivePlayerXP(XP_DJG_BringDragonBloods); * * *DragonBloodGeld = DragonBloodCount * Value_DragonBlood; * * *CreateInvItems(self,ItMi_Gold,DragonBloodGeld); * * *B_GiveInvItems(self,other,ItMi_Gold,DragonBloodGe ld); * * *Npc_RemoveInvItems(self,ItAt_DragonBlood,DragonBlo odCount); * * *Info_ClearChoices(DIA_Jan_DragonBlood); * * *Info_AddChoice(DIA_Jan_DragonBlood,Dialog_Back,DI A_Jan_DragonBlood_BACK); * * *if(Npc_HasItems(other,ItAt_DragonBlood) >= 1) * * *{ * * * * * *Info_AddChoice(DIA_Jan_DragonBlood,"(Все)",DIA_Ja n_DragonBlood_all); * * * * * *Info_AddChoice(DIA_Jan_DragonBlood,"(Одну пробирку)",DIA_Jan_DragonBlood_1); * * *}; * * *BloodLeft = IntToString(Npc_HasItems(other,ItAt_DragonBlood)); * * *BloodText = ConcatStrings(BloodLeft,PRINT_NumberLeft); * * *AI_PrintScreen(BloodText,-1,-1,FONT_ScreenSmall,2); };
- рога мракориса Бастеру (Story\Dialoge\DIA_SLD_802_Buster.d):
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Buster_BringTrophyShadowbeast_Info() { * * *var int BusterTrophyShadowbeastCount; * * *var int XP_BringBusterTrophyShadowbeast; * * *var int XP_BringBusterTrophyShadowbeasts; * * *var int BustersBusterTrophyShadowbeastOffer; * * *var int BusterTrophyShadowbeastGeld; * * *if(Kapitel >= 5) * * *{ * * * * * *AI_Output(self,other,"DIA_Buster_BringTrophyShado wbeast_13_00"); * * *//Мой торговец из города передал прощальный привет. * * * * * *AI_Output(other,self,"DIA_Buster_BringTrophyShado wbeast_15_01"); * * *//Что это значит? * * * * * *AI_Output(self,other,"DIA_Buster_BringTrophyShado wbeast_13_02"); * * *//Он мертв. Можешь оставить эти рога себе. Теперь я все равно не знаю, что с ними делать. * * * * * *MIS_Buster_KillShadowbeasts_DJG = LOG_SUCCESS; * * * * * *B_GivePlayerXP(XP_Ambient); * * *} * * *else if(Npc_HasItems(other,ItAt_ShadowHorn) >= 1) * * *{ * * * * * *BusterTrophyShadowbeastCount = Npc_HasItems(other,ItAt_ShadowHorn); * * * * * *XP_BringBusterTrophyShadowbeast = 30 * XP_PER_VICTORY; * * * * * *BustersBusterTrophyShadowbeastOffer = Value_ShadowHorn + Buster_Bonus; * * * * * *if(BusterTrophyShadowbeastCount == 1) * * * * * *{ * * * * * * * * *AI_Output(other,self,"DIA_Buster_BringTrophyShado wbeast_15_05"); * * *//Я принес тебе рог мракориса. * * * * * * * * *B_GivePlayerXP(XP_BringBusterTrophyShadowbeast); * * * * * * * * *B_GiveInvItems(other,self,ItAt_ShadowHorn,1); * * * * * * * * *Npc_RemoveInvItem(self,ItAt_ShadowHorn); * * * * * * * * *BusterTrophyShadowbeastCounter = BusterTrophyShadowbeastCounter + 1; * * * * * *} * * * * * *else * * * * * *{ * * * * * * * * *AI_Output(other,self,"DIA_Buster_BringTrophyShado wbeast_15_06"); * * *//Я принес рога мракорисов для твоего торговца. * * * * * * * * *B_GiveInvItems(other,self,ItAt_ShadowHorn,BusterT rophyShadowbeastCount); * * * * * * * * *Npc_RemoveInvItems(self,ItAt_ShadowHorn,BusterTrop hyShadowbeastCount); * * * * * * * * *XP_BringBusterTrophyShadowbeasts = BusterTrophyShadowbeastCount * XP_BringBusterTrophyShadowbeast; * * * * * * * * *BusterTrophyShadowbeastCounter = BusterTrophyShadowbeastCounter + BusterTrophyShadowbeastCount; * * * * * * * * *B_GivePlayerXP(XP_BringBusterTrophyShadowbeasts); * * * * * *}; * * * * * *AI_Output(self,other,"DIA_Buster_BringTrophyShado wbeast_13_07"); * * *//Отлично. Давай сюда. И принеси еще, если сможешь. Кто знает, как долго торговцу будут интересны эти рога. * * * * * *AI_Output(self,other,"DIA_Buster_BringTrophyShado wbeast_13_08"); * * *//Вот твоя доля. * * * * * *BusterTrophyShadowbeastGeld = BusterTrophyShadowbeastCount * BustersBusterTrophyShadowbeastOffer; * * * * * *CreateInvItems(self,ItMi_Gold,BusterTrophyShadowb eastGeld); * * * * * *B_GiveInvItems(self,other,ItMi_Gold,BusterTrophyS hadowbeastGeld); * * *} * * *else if(PLAYER_TALENT_TAKEANIMALTROPHY[TROPHY_ShadowHorn] == FALSE) * * *{ * * * * * *AI_Output(other,self,"DIA_Buster_ANIMALTROPHYSHAD OWBEAST_15_03") ; * * *//А как нужно потрошить мракориса? * * * * * *AI_Output(self,other,"DIA_Buster_ANIMALTROPHYSHAD OWBEAST_13_04") ; * * *//Ты этого не знаешь? Ох, парень, я думал о тебе лучше. * * * * * *Info_ClearChoices(DIA_Buster_BringTrophyShadowbea st); * * * * * *Info_AddChoice(DIA_Buster_BringTrophyShadowbeast, "Я вернусь к тебе с рогами.",DIA_Buster_BringTrophyShadowbeast_back); * * * * * *Info_AddChoice(DIA_Buster_BringTrophyShadowbeast, B_BuildLearnString(" Научи меня.",B_GetLearnCostTalent(other,NPC_TALENT_TAKEA NIMALTROPHY,TROPHY_Shadow Horn)),DIA_Buster_BringTrophyShadowbeast_teach); * * *} * * *else * * *{ * * * * * *Info_ClearChoices(DIA_Buster_BringTrophyShadowbea st); * * * * * *Info_AddChoice(DIA_Buster_BringTrophyShadowbeast, "Я вернусь к тебе с рогами.",DIA_Buster_BringTrophyShadowbeast_back); * * *}; };
- и медовый табак Абуину (Story\Dialoge\DIA_VLK_456_Abuyin.d):
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Abuyin_Trade_Info() { * * *Abuyin_Score = 0; * * *Abuyin_Score = Npc_HasItems(other,ItMi_Honigtabak) * VALUE_ItMi_HonigTabak; * * *AI_Output(other,self,"DIA_Abuyin_Trade_15_00"); * * *//Я принес тебе медового табака. * * *B_GiveInvItems(other,self,ItMi_Honigtabak,Npc_Has Items(other,ItMi_Honigtabak)); * * *Npc_RemoveInvItems(self,ItMi_Honigtabak,Npc_HasIte ms(self,ItMi_Honigtabak)); * * *B_GiveInvItems(self,other,ItMi_Gold,Abuyin_Score) ; * * *AI_Output(self,other,"DIA_Abuyin_Trade_13_01"); * * *//Для меня огромное удовольствие иметь с тобой дело. };
5. У всех драконов восстановлен имевшийся раньше иммунитет к заклинанию 'Страх' (взято из G2MDK). Для этого нужно взять из G2MDK скрипты AI\Magic\Spells\Spell_Fear.d и AI\Magic\ZS_Magic\ZS_MagicFlee.d. 6. Туда же нужно включить исправление обнаруженного форумцем Skaarj бага при получении Пардосом целебного эликсира (скрипт Story\Dialoge\DIA_STRF_1122_Addon_Pardos.d):
Cпойлер(щелкните, чтобы прочесть):
func void DIA_Addon_Pardos_trank_03() { if(B_GiveInvItems(other,self,ItPo_Health_03,1)) { B_UseItem(self,ItPo_Health_03); }; Info_ClearChoices(DIA_Addon_Pardos_trank); Pardos_Geheilt = TRUE; B_SayPardosThanks(); B_GivePlayerXP(XP_Ambient * 3); };
|