Gothic 2 npc nie reaguje na wyciągnięty czar. 3875 1

O temacie

Autor Graveir

Zaczęty 25.10.2020 roku

Wyświetleń 3875

Odpowiedzi 1

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Mam dwa problemy z wymienionym tematem. A mianowicie:
1)Wyciągam czar, który ma zmienione nazwy visualfx i pfx(różniące się od "nazwy czaru") i npc mają wywalone na fakt ich wyciągnięcia. Więc zamiast powiedzieć "Skończ z tą magią" po prostu nie reagują. Jednak czar "wyświetla" się poprawnie w ręce.
2)Wyciągam czar, który ma takie same nazwy(przykładowo Firerain2 w każdym skrypcie) i npc na niego reagują, jednak zamiast pojawić się odpowiedni efekt w ręce, jest trzymana runa.
Dodatkowo za ubicie czarem nie dostaję expa, a npc zamiast oglądać walkę i przykładowo zaatakować nas po zabiciu innego npc'a, mówią tylko "O walka" i wracają do swoich rutyn(nawet nie atakują).
Skrypt czaru(lekkie zmiany w stosunku do tego, co podrzucał Nefario z Rozdroży)
const int SPL_COST_Pyrokinesis1 = 10;
const int SPL_DAMAGE_Pyrokinesis1 = 30;
 
instance Spell_Pyrokinesis1(C_Spell_Proto)
{
time_per_mana = 500;
damage_per_level = SPL_DAMAGE_Pyrokinesis1;
spellType = SPELL_BAD;
damagetype = DAM_MAGIC;
targetCollectAlgo = TARGET_COLLECT_FOCUS;
targetCollectRange = 1000;
targetCollectType = TARGET_TYPE_NPCS;
};
 
 
func int Spell_Logic_Pyrokinesis1(var int manaInvested)
{
if(!Npc_IsInState(other,zs_psidefense) || Npc_IsPlayer(other))
{
if(self.attribute[ATR_MANA] < SPL_COST_Pyrokinesis1)
{
return SPL_DONTINVEST;
};
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_Pyrokinesis1;
};
Npc_ClearAIQueue(other);
AI_StandupQuick(other);
AI_StartState(other,zs_psidefense,1,"");
B_MagicHurtNpc(self,other,SPL_DAMAGE_Pyrokinesis1);
if(other.attribute[ATR_Hitpoints] <= 0)
{
Npc_ClearAIQueue(other);
AI_Standup(other);
return SPL_SENDCAST;
};
}
else if(Npc_IsInState(other,zs_psidefense))
{
if(self.attribute[ATR_MANA] < SPL_COST_Pyrokinesis1)
{
return SPL_DONTINVEST;
};
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_Pyrokinesis1;
};
Npc_ClearAIQueue(other);
AI_StandupQuick(other);
AI_StartState(other,zs_psidefense,1,"");
B_MagicHurtNpc(self,other,SPL_DAMAGE_Pyrokinesis1);
if(other.attribute[ATR_Hitpoints] <= 0)
{
Npc_ClearAIQueue(other);
AI_Standup(other);
return SPL_SENDCAST;
};
};

/* if(self.attribute[ATR_MANA] < SPL_COST_Pyrokinesis1)
{
return SPL_DONTINVEST;
};
*/

/* if(Npc_GetStateTime(other) >= 1)
{
Npc_SetStateTime(other,0);
//B_MagicHurtNpc(self,other,SPL_DAMAGE_Pyrokinesis1);
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_Pyrokinesis1;
};
if(other.attribute[ATR_Hitpoints] <= 0)
{
Npc_ClearAIQueue(other);
AI_Standup(other);
return SPL_SENDCAST;
};
};
*/
return SPL_NEXTLEVEL;
};
 
func void Spell_Cast_Pyrokinesis1(var int spellLevel)
{
self.aivar[AIV_SelectSpell] += 1;
};
Wpisy do Constants.d
const int SPL_Pyrokinesis1 = 125;
"Pyrokinesis1" // 125 SPL_Pirokineza
Wpis do Spell_ProcessMana.d
if (activeSpell == SPL_Pyrokinesis1 ) { return Spell_Logic_Pyrokinesis1 (manaInvested); };
ZS_Psidefense.d
func void ZS_PsiDefense()
{
PrintDebugNpc (PD_ZS_CHECK, "ZS_PsiDefense");

Npc_PercEnable  (self, PERC_ASSESSDAMAGE , ZS_ReactToDamage);
Npc_PercEnable (self, PERC_ASSESSSTOPMAGIC, B_StopPsiDefense);

if ( !Npc_HasBodyFlag(self, BS_FLAG_INTERRUPTABLE) )
{
PrintDebugNpc (PD_MAGIC, "bodystate not interuptable, standing up...");
AI_StandUp (self);
};
};


func void ZS_PsiDefense_Loop()
{
PrintDebugNpc (PD_ZS_LOOP, "ZS_PsiDefense Loop");
if ( !Npc_IsDead(self) && !Npc_IsInState(self, ZS_Unconscious) && !C_BodystateContains(self,BS_SWIM) &&  !C_BodystateContains(self,BS_DIVE) )
{
PrintDebugNpc (PD_MAGIC, "...NSC ist nicht bewußtlos / tot / schwimmend / tauchend");
AI_PlayAni (other, "S_CON_VICTIM");
};
};


func void ZS_PsiDefense_End()
{
PrintDebugNpc (PD_ZS_CHECK, "ZS_PsiDefense End");

};

func void B_StopPsiDefense ()
{
Npc_PercEnable (self, PERC_ASSESSMAGIC, B_AssessMagic); //falls in diesem Frame (während des Ausführens des B_) noch ein neuer Spruch wirkt

Npc_ClearAIQueue(self);
AI_StandUp (self);

if (self.guild < GIL_SEPERATOR_HUM)
{
B_AssessDamage();
AI_ContinueRoutine (self);
}
else
{
Npc_SetTempAttitude (self, ATT_HOSTILE);
AI_ContinueRoutine (self);
};
};
VisualFXInst.d
INSTANCE spellFX_Pyrokinesis1(CFx_Base_Proto)
{
visname_S = "MFX_Pyrokinesis1_INIT";
visAlpha = 1;

emtrjmode_s = "FIXED";
emTrjOriginNode = "ZS_RIGHTHAND";
emtrjtargetnode = "BIP01 HEAD";
emtrjnumkeys = 1;
emtrjnumkeysvar = 1;
emtrjangleelevvar = 15;
emtrjangleheadvar = 0;
emtrjdynupdatedelay = 0;
emFXInvestTarget_S = "spellFX_Pyrokinesis1_target";
emTrjTargetRange = 0;
emTrjTargetElev = 0;

};


INSTANCE spellFX_Pyrokinesis1_KEY_CAST (C_ParticleFXEmitKey)
{
pfx_ppsIsLoopingChg = 1;
};

INSTANCE spellFX_Pyrokinesis1_TARGET(CFx_Base_Proto)
{
visname_S = "MFX_Pyrokinesis1_TARGET";

emtrjmode_s = "FIXED";
emTrjOriginNode = "BIP01 HEAD";
lightPresetname = "FIRESMALL";
emTrjTargetRange = 0;
emTrjTargetElev = 0;
sendAssessMagic = 1;
emtrjdynupdatedelay = 0.01;

sfxid = "MFX_Telekinesis_target";
sfxisambient = 1;
};
PFXInstMagic.d
INSTANCE MFX_Pyrokinesis1_INIT (C_PARTICLEFX)
{
     ppsvalue = 800.000000000;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 1.000000000;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "15";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2.000000000;
     dirmode_s = "NONE";
     dirfor_s = "object";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180.000000000;
     dirangleelevvar = 180.000000000;
     velavg = 0.010000000;
     lsppartavg = 150.000000000;
     flygravity_s = "0 0 0";
     flycolldet_b = 0;
     visname_s = "HUMANBURN.TGA";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 18.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255 255 255";
     vistexcolorend_s = "255 150 0";
     vissizestart_s = "5 5";
     vissizeendscale = 8.000000000;
     visalphafunc_s = "ADD";
     visalphastart = 255.000000000;
};

INSTANCE MFX_Pyrokinesis1_ORIGIN (C_PARTICLEFX)
{
     ppsvalue = 20.000000000;
     ppsscalekeys_s = "3 2 1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 2.000000000;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpisvolume = 1;
     shpdim_s = "30";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2.000000000;
     dirmode_s = "TARGET";
     dirfor_s = "object";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180.000000000;
     dirangleelevvar = 180.000000000;
     velavg = 0.008000000;
     velvar = 0.029999999;
     lsppartavg = 2000.000000000;
     flygravity_s = "0 0 0";
     flycolldet_b = 0;
     visname_s = "FIREFLARE.TGA";
     visorientation_s = "NONE";
     vistexanifps = 18.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255 220 220";
     vistexcolorend_s = "255 220 220";
     vissizestart_s = "10 10";
     vissizeendscale = 8.000000000;
     visalphafunc_s = "ADD";
     visalphastart = 100.000000000;
};

INSTANCE MFX_Pyrokinesis1_TARGET (C_PARTICLEFX)
{
     ppsvalue = 50.000000000;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 2.000000000;
     shptype_s = "SPHERE";
     shpfor_s = "WORLD";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "200";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2.000000000;
     dirmode_s = "TARGET";
     dirfor_s = "object";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180.000000000;
     dirangleelevvar = 180.000000000;
     velavg = 0.300000012;
     lsppartavg = 1000.000000000;
     flygravity_s = "0 0 0";
     flycolldet_b = 0;
     visname_s = "FIREFLARE.TGA";
     visorientation_s = "NONE";
     vistexanifps = 18.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "20 0 0";
     vistexcolorend_s = "255 200 200";
     vissizestart_s = "10 10";
     vissizeendscale = 20.000000000;
     visalphafunc_s = "ADD";
     visalphastart = 255.000000000;
     visalphaend = 50.000000000;
     trlfadespeed = 0.400000006;
     trltexture_s = "MFX_PYROKINESIS_TARGETTRAIL.TGA";
     trlwidth = 4.000000000;
};
Więc przy tym, co jest teraz, wywołuje się "akcja" problemu nr 2.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry