Innych kurwa, innych xd
Wchodzisz do g1 scripts/content/MAGIC:
Otwiersz plik: Spells_Process_mana.d szukasz linijki:
if (Npc_GetActiveSpell(self) == SPL_CHAINLIGHTNING ) { return Spell_Logic_ChainLightning (manaInvested); };
wchodzisz do g2 scripts/content/ai/magic:
Otwierasz plik: Spell_ProcesMana.d szukasz linijki:
if (activeSpell == SPL_SummonMud ) { return Spell_Logic_SummonMud (manaInvested); };
Pod tą linijką wklejasz tą linijkę z g1 która jest powyżej,,,,, masz? świetnie.
teraz wchodzisz do:
G1 scripts/content/MAGIC:
Otwierasz plik: spells_process_mana_released.d i szukasz:
if (Npc_GetActiveSpell (self) == SPL_CHAINLIGHTNING) {
// Npc_SendSinglePerc (self, other, PERC_ASSESSSTOPMAGIC);
return SPL_SENDSTOP;
};
Następnie G2:
scripts/content/AI/Magic:
Otwierasz plik: Spell_ProcessMana_Release:
Widzisz że linijki się czymś różnią co? Nie martw się dam ci gotowy skrypt wklej to:
if (activeSpell == SPL_CHAINLIGHTNING ) { return SPL_SENDCAST; };
Ehh nie napisałem ci w którym miejscu, dasz radę całe forum w ciebie wierzy

aa czekaj widzisz tą linijkę?
var int activeSpell; activeSpell = Npc_GetActiveSpell(self);
var int activeSpell; to zmienna
activeSpell = Npc_GetActiveSpell(self); mówi że aktive spell jest tym samym co npc_getactivespell To tylko takie ułatwienie podczas pisania:)
hmm czas na stałe:
G1: scripts/content/_Intern:
otwierasz plik magic_intern.d
szukasz linijki:
const int SPL_CHAINLIGHTNING= 40;
Wchodzisz do g2
scripts/content/_intern
Otwierasz plik:
Constants.d
szukasz:
const int SPL_Reserved_90 = 90;
Zamieniasz ją na to co wkleiłem ci powyżej z g1 ale zostawiasz że =90; ma to wyglądać tak:
const int SPL_CHAINLIGHTNING = 90;
dobra czas na reszte
Idziesz do pliku:
g1 scripts/content/magic:
Otwierasz plik: Spells_params.d
szukasz linijki:
"Chainlightning",
wracasz do pliku constans.d w g2
szukasz:
"Light", // 90 SPL_Reserved_90
Zamieniasz na to z g1
masz ? spoko
wróć do pliku: Spells_params.d z g1 i znajdź:
"LIN", // SPL_CHAINLIGHTNING
Masz? ok wracamy do constants.d z g2
znajdź:
"XXX", // 90 SPL_Reserved_90
To wyżej to po to abyś wiedział gdzie to jest, w g2 niema animacji LIN więc zamiast XXX użyj np:
FBT ma to wyglądać tak
"FBT", // 90 SPL_Reserved_90
Idymy do Pliku: G2 scripts/content/AI/Magic/Spells
Znajdź plik Spell_Firebolt.d skopiuj wklej powstanie plik o nazwie KopiaSpell_Firebolt.d zmień jego nazwę na Spell_ChainLightNing.d
masz? ok otwórz ten plik skasuj jego zawartość i wklej to:
const int SPL_Cost_ChainLightNing = 5; // Stała która mówi że zużycie magii dla czaru wynosi 5
const int SPL_Damage_ChainLightNing = 25; // Stała która mówi że obrażenia zadawane tego czaru to 25
INSTANCE Spell_ChainLightNing (C_Spell_Proto) //Nazwa czaru dla skryptów
{
time_per_mana = 0; // prawdopodobnie czas ładowania czaru, tego się nie ładuje tylko wali od razu
damage_per_level = SPL_Damage_ChainLightNing;// jakie są obrażenia czaru, odnosi sie do stałej powyżej
damageType = DAM_MAGIC;// jakie są obrażenia czaru, w tym wypadku obrażenia są magiczne
};
func int Spell_Logic_Firebolt (var int manaInvested) //funkcja która decyduje ile many zabierze użycie tego czaru
{
if (Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll)) //mówi: jesli npc self ma aktywny czar i ilośc many npc jest większa bądź równa spl_cost_scroll
{
return SPL_SENDCAST;// TO UŻYJE CZARU
}
else if (self.attribute[ATR_MANA] >= SPL_Cost_ChainLightNing)//mówi: jesli ilośc many npc jest większa bądź równa stałej która jest na początku pliku
// czyli jesli jest większ bądź równa 5
{
return SPL_SENDCAST;//To uzyje czaru
}
else //Jak ma za mało many
{
return SPL_SENDSTOP;//Nie użyje czaru
};
};
func void Spell_Cast_ChainLightNing()
{
if (Npc_GetActiveSpellIsScroll(self))// Jesli npc ma aktywny czar
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;// mana tego npc równa się mana tego npc odjąć Spl_Cost_Scroll
}
else//albo
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_ChainLightNing;// Mana tego npc równa się mana tego npc odjąć stała many która jest na początku tego pliku czyli 5
};
self.aivar[AIV_SelectSpell] += 1;// npc zachowanie to wybór czaru
};
INSTANCE ItRu_ChainLightNing (C_Item)
{
name = NAME_Rune;
mainflag = ITEM_KAT_RUNE;
flags = 0;
value = Value_Ru_Firebolt;
visual = "ItRu_FireBolt.3DS";
material = MAT_STONE;
spell = SPL_ChainLightNing;
mag_circle = 0;
wear = WEAR_EFFECT;
effect = "SPELLFX_WEAKGLIMMER_YELLOW";
description = "Grom";
TEXT [0] = NAME_Mag_Circle;
COUNT [0] = mag_circle;
TEXT [1] = NAME_Manakosten;
COUNT [1] = SPL_COST_FIREBOLT;
TEXT [2] = NAME_Dam_Magic;
COUNT [2] = SPL_DAMAGE_FIREBOLT;
TEXT [5] = NAME_Value;
COUNT [5] = value;
};
Odjebałeś kawał dobrej roboty...ahh pozostały piepszone pfxy
otwórz
g2:
scripts/system/VisualFX
Otwórz plik: VisualFXInst.d
przejdź do linijki 3520 i wklej to:
INSTANCE spellFX_ChainLightning(CFx_Base_Proto)
{
visName_S = "lightning_big_a0.tga";
visSize_S = "3 3";
visAlphaBlendFunc_S = "ADD";
visTexAniFPS = 17;
visTexAniIsLooping = 1;
emFXCreate_S = "spellFX_ChainLightning_Origin";
emtrjmode_s = "FIXED";
emtrjNumKeys = 12;
emtrjnumkeysvar = 3;
emtrjangleelevvar = 20.;
emtrjangleheadvar = 20.;
emtrjloopmode_s = "none";
emTrjOriginNode = "ZS_RIGHTHAND";
emtrjeasefunc_s = "LINEAR";
emtrjdynupdatedelay = 200000.0;
emselfrotvel_s = "0 0 50";
emTrjTargetRange = 20;
emTrjTargetElev = 0;
};
INSTANCE spellFX_ChainLightning_ORIGIN (CFx_Base_Proto)
{
visname_S = "MFX_Lightning_Origin";
emtrjmode_s = "FIXED";
emTrjOriginNode = "ZS_RIGHTHAND";
lightPresetname = "AURA";
};
INSTANCE spellFX_ChainLightning_Origin_KEY_OPEN (C_ParticleFXEmitKEy)
{
LightRange = 0.01;
};
INSTANCE spellFX_ChainLightning_Origin_KEY_INIT (C_ParticleFXEmitKEy)
{
LightRange = 0.01;
};
INSTANCE spellFX_ChainLightning_Origin_KEY_INVEST_1 (C_ParticleFXEmitKey)
{
sfxID = "MFX_Lightning_Origin";
LightRange = 200;
};
czas na plik:
scripts/system/pfx
otwórz plik: PfxInstMagic.d
Linijka 190 wklej to:
INSTANCE MFX_LIGHTNING_ORIGIN (C_PARTICLEFX)
{
ppsvalue = 60.000000000;
ppsscalekeys_s = "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 = "10";
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.001000000;
velvar = 0.000100000;
lsppartavg = 150.000000000;
flygravity_s = "0 0 0";
visname_s = "LIGHTNING_BIG_A0.TGA";
visorientation_s = "VELO";
vistexisquadpoly = 1;
vistexanifps = 25.000000000;
vistexaniislooping = 1;
vistexcolorstart_s = "200 255 255";
vistexcolorend_s = "0 100 255";
vissizestart_s = "15 15";
vissizeendscale = 1.000000000;
visalphafunc_s = "ADD";
visalphastart = 255.000000000;
visalphaend = 255.000000000;
};
Stworzyłeś czar Bravo:)