Показать сообщение отдельно
Старый 23.04.2010, 21:20   #3391
Dimus

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

По умолчанию 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);
};
Ответить с цитированием