[G2 NK] Czy czary obszarowe są hardcodowane? 3185 5

O temacie

Autor Graveir

Zaczęty 1.02.2017 roku

Wyświetleń 3185

Odpowiedzi 5

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Witam, mam pytanie takie jak w temacie - czy czary obszarowe są jakoś hardcodowane w silniku gry? Pytam, ponieważ dodałem do gry 4 czary(multiteleportacji, przemiany w orka i 2 czary zadające obrażenia jednemu celowi) i przy próbie dodania 5 czaru bojowego nie działają obrażenia(jest efekt trzymania w ręce + efekt wyzwolenia czaru oraz zabiera odpowiednią ilość many, jednak nie zadaje obrażeń). Nie wiem, co mogłem zrobić źle, więc poniżej podam listę rzeczy, które dodałem z wskazaniem plików, w których się znajdują. Na start skrypt czaru:
// *****************
// SPL_LightUndead
// *****************

const int SPL_Cost_LightUndead = 35;
const int SPL_Damage_LightUndead = 250; //soll halt wirklich killen!

INSTANCE Spell_LightUndead(C_Spell_Proto)
{
time_per_mana = 0;
damage_per_level = SPL_Damage_LightUndead;
targetCollectAlgo = TARGET_COLLECT_NONE;
};

func int Spell_Logic_LightUndead (var int manaInvested)
{
if (Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
{
return SPL_SENDCAST;
}
else if (self.attribute[ATR_MANA] >= SPL_Cost_LightUndead)
{
return SPL_SENDCAST;
}
else //nicht genug Mana
{
return SPL_SENDSTOP;
};
};


func void Spell_Cast_LightUndead()
{
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_LightUndead;
};

self.aivar[AIV_SelectSpell] += 1;
};
Dodałem również "wpis" do visualfxinst:
Spoiler
INSTANCE spellFX_Lightundead(CFx_Base_Proto)
{

      visname_S = "MFX_MassDeath_INIT";
      emtrjmode_s = "FIXED";
emTrjOriginNode = "ZS_RIGHTHAND";
      emtrjloopmode_s = "NONE";
emFXCreatedOwnTrj = 0;

};

INSTANCE spellFX_Lightundead_KEY_INIT(C_ParticleFXEmitKey)
{
visname_S = "MFX_MassDeath_INIT";
};

INSTANCE spellFX_Lightundead_KEY_INVEST_1 (C_ParticleFXEmitKey)
{
visname_S = "MFX_MASSDEATH_RIGHTHAND";
emCreateFXID = "spellFX_MassDeath_LEFTHAND";
};


INSTANCE spellFX_Lightundead_KEY_CAST(C_ParticleFXEmitKey)
{
emCreateFXID = "spellFX_MassDeath_EXPLOSION";
pfx_ppsIsLoopingChg = 1;
};


instance spellFX_Lightundead_EXPLOSION (CFx_Base_Proto)
{
visname_S = "MFX_MASSDEATH_EXPLOSION";

emtrjmode_s = "FIXED";
emTrjOriginNode = "Bip01 L Hand";
emFXCreate_S =  "spellFX_MassDeath_GROUND";

};


INSTANCE spellFX_Lightundead_GROUND (CFx_Base_Proto)
{
visname_S = "MFX_MassDeath_CAST";
emTrjOriginNode = "BIP01 R Foot";
emActionCollDyn_S = "CREATEONCE";
      emFXCollDyn_S = "spellFX_MassDeath_COLLIDEDYNFX";
      emFXCollDynAlign_S = "COLLISIONNORMAL";
      emCheckCollision = 1;
      LightPresetName = "REDAMBIENCE";
      sfxid = "MFX_Massdeath_Cast";
sfxisambient = 1;
};

instance spellFX_Lightundead_LEFTHAND (CFx_Base_Proto)
{
visname_S = "MFX_MASSDEATH_LEFTHAND";
visAlpha = 1;

emtrjmode_s = "FIXED";
emTrjOriginNode = "Bip01 L Hand";

emFXCreate_S = "FX_EARTHQUAKE";

};

INSTANCE spellFX_Lightundead_SUB (CFx_Base_Proto) // vorrübergehend, bis er hardcodiert nicht mehr gesucht wird
{
      visname_S = "";
      emtrjmode_s = "FIXED";
emTrjOriginNode = "BIP01 HEAD";
};


INSTANCE spellFX_Lightundead_COLLIDEDYNFX (CFx_Base_Proto)
{
visname_S = "MFX_Massdeath_TARGET";
emTrjOriginNode = "BIP01";
emFXCreatedOwnTrj = 1;
emtrjmode_s = "FIXED";
sfxid = "MFX_MassdeatH_Target";
};
Poszedł również wpis do PfxInstMagic:
Spoiler
INSTANCE MFX_LIGHTUNDEAD_INIT (C_PARTICLEFX)
{
     ppsvalue = 50;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "8";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 5;
     dirmode_s = "RAND";
     dirfor_s = "object";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180;
     dirangleelevvar = 180;
     velavg = 0.00999999978;
     velvar = 9.99999975e-005;
     lsppartavg = 1000;
     flygravity_s = "0 0 0";
     visname_s = "MFX_MAGICCLOUD.TGA";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 25;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255 20 20";
     vistexcolorend_s = "0 50 255";
     vissizestart_s = "10 10";
     vissizeendscale = 5;
     visalphafunc_s = "ADD";
     visalphastart = 255;
     useemittersfor = 1;
};

INSTANCE MFX_LIGHTUNDEAD_LEFTHAND (C_PARTICLEFX)
{
     ppsvalue = 10;
     ppsscalekeys_s = "1 1 1 1 1 1 1";
     ppsissmooth = 1;
     ppsfps = 2;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "3";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 5;
     dirmode_s = "DIR";
     dirfor_s = "OBJECT";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleelev = 90;
     velavg = 0.00100000005;
     lsppartavg = 1000;
     flygravity_s = "0 -0.0000001 0";
     visname_s = "MFX_LIGHT_RAY.TGA";
     visorientation_s = "NONE";
     vistexisquadpoly = 1;
     vistexanifps = 2;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255  80 80";
     vistexcolorend_s = "255 80 80";
     vissizestart_s = "2 35";
     vissizeendscale = 10;
     visalphafunc_s = "ADD";
     visalphastart = 255;
     useemittersfor = 1;
};

INSTANCE MFX_LIGHTUNDEAD_RIGHTHAND (C_PARTICLEFX)
{
     ppsvalue = 10;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 6;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "3";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 5;
     dirmode_s = "DIR";
     dirfor_s = "OBJECT";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleelev = 90;
     lsppartavg = 1000;
     flygravity_s = "0 -0.0000001 0";
     visname_s = "MFX_LIGHT_RAY.TGA";
     visorientation_s = "NONE";
     vistexisquadpoly = 1;
     vistexanifps = 2;
     vistexaniislooping = 1;
     vistexcolorstart_s = "150 150 255";
     vistexcolorend_s = "0 0 255";
     vissizestart_s = "2 35";
     vissizeendscale = 10;
     visalphafunc_s = "ADD";
     visalphastart = 255;
     useemittersfor = 1;
};



INSTANCE MFX_LIGHTUNDEAD_INIT_GLOW (C_PARTICLEFX)
{
     ppsvalue = 100.000000000;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     shptype_s = "POINT";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "5";
     shpscalekeys_s = "1 2 1 2";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 0.500000000;
     dirmode_s = "RAND";
     dirfor_s = "object";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180.000000000;
     dirangleelevvar = 180.000000000;
     velavg = 0.600000024;
     velvar = 0.020000000;
     lsppartavg = 2000.000000000;
     flygravity_s = "0 0 0";
     flycolldet_b = 0;
     visname_s = "MFX_Spell_Star.tga";
     visorientation_s = "NONE";
     vistexisquadpoly = 1;
     vistexanifps = 25.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255 150 0";
     vistexcolorend_s = "255 0 0";
     vissizestart_s = "1 1";
     vissizeendscale = 1.000000000;
     visalphafunc_s = "ADD";
     visalphastart = 255.000000000;
     trlfadespeed = 0.800000012;
     trltexture_s = "MFX_FIRERAIN_RAINTRAIL.TGA";
     trlwidth = 1.000000000;
};

INSTANCE MFX_LIGHTUNDEAD_EXPLOSION (C_PARTICLEFX)
{
     ppsvalue = 1000;
     ppsscalekeys_s = "1";
     ppsissmooth = 1;
     ppsfps = 5;
     shptype_s = "POINT";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "5";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2;
     dirmode_s = "RAND";
     dirfor_s = "OBJECT";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180;
     dirangleelev = -90;
     velavg = 0.00999999978;
     lsppartavg = 500;
     lsppartvar = 200;
     flygravity_s = "0";
     visname_s = "HEAVENLIGHT.TGA";
     visorientation_s = "VELO";
     vistexanifps = 2;
     vistexaniislooping = 2;
     vistexcolorstart_s = "255 0 255";
     vistexcolorend_s = "255 100 255";
     vissizestart_s = "1 30";
     vissizeendscale = 20;
     visalphafunc_s = "ADD";
     visalphastart = 255;
};

INSTANCE MFX_LIGHTUNDEAD_CAST (C_PARTICLEFX)
{
     ppsvalue = 60;
     ppsscalekeys_s = "1 1 2 2 2 3 3 4 4 5";
     ppsissmooth = 1;
     ppsfps = 3;
     shptype_s = "CIRCLE";
     shpfor_s = "WORLD";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "120";
     shpscalekeys_s = "1 2 3 4 5 6 7 8 9 10";
     shpscaleissmooth = 1;
     shpscalefps = 3;
     dirmode_s = "RAND";
     dirfor_s = "object";
     diranglehead = 90;
     dirangleheadvar = 45;
     dirangleelev = 90;
     dirangleelevvar = 45;
     velavg = 0.100000001;
     lsppartavg = 1500;
     lsppartvar = 300;
     flygravity_s = "0 0.00008 0";
     visname_s = "MFX_MAGICCLOUD.TGA";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 25;
     vistexaniislooping = 2;
     vistexcolorstart_s = "255 0 255";
     vistexcolorend_s = "0 0 255";
     vissizestart_s = "20 20";
     vissizeendscale = 20;
     visalphafunc_s = "ADD";
     visalphastart = 255;
     trltexture_s = "LIGHTNING_BIG_A0.TGA";
};

INSTANCE MFX_LIGHTUNDEAD_TARGET (C_PARTICLEFX)
{
     ppsvalue = 5;
     ppsscalekeys_s = "3 3 3 2 2 1 1";
     ppsissmooth = 1;
     ppsfps = 1;
     shptype_s = "CIRCLE";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpisvolume = 1;
     shpdim_s = "50";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscalefps = 15;
     dirmode_s = "DIR";
     dirfor_s = "object";
     diranglehead = 90;
     dirangleheadvar = 45;
     dirangleelev = 90;
     dirangleelevvar = 45;
     velavg = 9.99999975e-005;
     lsppartavg = 1000;
     lsppartvar = 300;
     flygravity_s = "0 0.0001 0";
     visname_s = "HEAVENLIGHT.TGA";
     visorientation_s = "NONE";
     vistexisquadpoly = 1;
     vistexanifps = 25;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255 150 150";
     vistexcolorend_s = "150 150 255";
     vissizestart_s = "5 50";
     vissizeendscale = 10;
     visalphafunc_s = "ADD";
     visalphastart = 255;
     trltexture_s = "LIGHTNING_BIG_A0.TGA";
};
Dodałem również nazwę czaru do C_CanNpcCollideWithSpell.d(pod Massdeath):
|| (spellType == SPL_LightUndead)
W constants dodałem takie coś:
const string spellFxInstanceNames[MAX_SPELL] =
{
"Lightundead", // 92 SPL_Reserved_92
oraz
const string spellFxAniLetters[MAX_SPELL] =
{
"MSD",  // 92 SPL_Reserved_92
No i w pliku text.d dodałem:
const string TXT_SPELLS[MAX_SPELL] =
{
"Mroczna błyskawica zagłady", // 92 SPL_Reserved_92
No i nie licząc tego, że nie zadaje obrażeń, to efekty wizualne + zabierana mana są prawidłowe. Ktoś ma jakiś pomysł, gdzie jest pies pogrzebany?
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Moim zdaniem powinno się dodawać i powiększać tablicę spellów. Ja mam ponad 10 czarów i wszystkie działają jak należy.

const int MAX_SPELL               = 113;   // 59 (Gothic), 68 (Gothic2), 100 (G2Addon)
w pliku constants.

Jedynie raz miałem problem, w którym to czar mi nie wywoływał efektu / nie zadawał obrażeń itp. Skasowałem go całkowicie, włączyłem grę ponownie, wyłączyłem, zaimplementowałem znowu i wszystko działało jak należy. Był to bodajże spell 109. Ale tak czy inaczej, nie wykorzystuj czarów "zarezerwowanych", bo mają one coś w silniku zapisane. Nie wiem dokładnie o co chodzi, ale prawdopodobnie mają one swoje "klasy" (healing spell etc.), gdzie jeden spell ma zablokowane zadawanie obrażeń, a drugi jeszcze coś innego.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Czyli w constants mam dodać 2 linijki i zmienić MAX_SPELL na 113?
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Zwiększyć limit czarów o ilość czarów, które chcesz dodać. Czyli jeśli oryginalnie jest 100 czarów, zmień na 101 i dodaj swój czar na miejsce 100.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Edit: Dobra, było pomieszane w skryptach, ale w końcu udało mi się. Wszystko działa jak należy.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Musisz wszędzie pozmieniać. Nie tylko tutaj. W każdym pliku, gdzie są zapisane czary.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.


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