Korzystając z przypływu dobrego nastroju i czasu postanowiłem odkopać swoje skrypty z zamierzchłych czasów. Jest w nich straszny bałagan, ale coś dla braci skrypterów poskładałem. Zrobiłem ze dwa lata temu prototyp stylu grupowego do Gothic II. Cała długość klingi zadaje teraz obrażenia, trzeba tylko trochę to zoptymalizować.
Tu macie parę meshes potrzebnych
http://speedy.sh/zA6mF/triale-do-meshes.rar
Teraz tak:
do System\VisualFX
{
PROTOTYPE ARMOR_PART_PROTO (CFx_Base)
{
visname_s = "";
visalpha = 1;
emtrjmode_s = "FIXED";
emtrjoriginnode = "";
emtrjtargetrange = 0;
emtrjnumkeys = 0;
emtrjnumkeysvar = 0;
emtrjangleelevvar = 0;
emtrjangleheadvar = 0;
emtrjeasefunc_s = "NONE";
emtrjeasevel = 1000;
emtrjdynupdatedelay = 200;
emFXCreatedOwnTrj = 1;
emfxlifespan = -1;
emselfrotvel_s = "0 0 0";
secsperdamage = -1;
emTrjDynUpdateTargetOnly= 0;
emCheckCollision = 0;
emInvestNextKeyDuration = 0;
emTrjTargetAzi = 0;
emTrjTargetElev = 0;
emTrjKeyDistVar = 0;
emFlyGravity = 0;
emSelfRotVel_S = "0 0 0";
emFXCreate_S = "BugfixFX";
emtrjloopmode_s = "LINEAR";
emFXTriggerDelay = 0.02;
visalphablendfunc_s = "NONE";
emTrjTargetNode = "";
emActionCollDyn_S = "";
emActionCollStat_S = "";
emFXCollStat_S = "";
emFXCollDyn_S = "";
emFXCollStatAlign_S = "";
emFXCollDynAlign_S = "";
lightPresetName = "";
sfxID = "";
sendAssessMagic = 0;
secsPerDamage = -1;
visalpha = 1;
emfxlifespan = 1;
//emadjustshptoorigin = 1;
};
/// XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/// XX weapon XX
///
INSTANCE av_weapon30_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon30_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon40_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon40_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon50_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon50_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon60_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon60_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon70_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon70_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon80_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon80_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon90_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon90_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon100_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon100_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon110_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon110_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon120_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon120_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon130_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon130_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon140_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon140_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon150_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon150_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
INSTANCE av_weapon160_vfx (ARMOR_PART_PROTO)
{
emfxlifespan = 1;
emTrjOriginNode = "ZS_RIGHTHAND";
visAlpha = 0;
visName_S = "av_weapon160_pfx";
visalphablendfunc_s = "NONE";
emtrjmode_s = "FIXED";
emtrjloopmode_s = "linear";
emtrjeasefunc_s = "NONE";
emTrjEaseVel = 1000;
emactioncolldyn_s = "CREATEONCE";
emActionCollStat_s = "CREATEONCE";
emcheckcollision = 1;
sendAssessMagic = 0;
emTrjTargetRange = 20;
emTrjTargetElev = 0;
emFXCreatedOwnTrj = 1;
emFXTriggerDelay = 0;
emTrjDynUpdateDelay = 200;
};
};
Teraz tworzymy taką funkcje. Zaicjonowanie zmiennych w własnym zakresie.
Func void Operators()
{
NONAME = Hlp_GetNpc (PC_hero);
targetnpc = Hlp_GetNpc(nomoretargetnpc);
ReadyHeroArmor = Npc_GetEquippedArmor(NONAME);
ReadyHeroMeleeWeap = Npc_GetReadiedWeapon(NONAME);heroweaprange = ReadyheroMeleeWeap.range;
EquipHeroMeleeWeap = Npc_GetEquippedMeleeWeapon(NONAME);
ReadyotherMeleeWeap = Npc_GetReadiedWeapon(other);otherweaprange = ReadyotherMeleeWeap.range;
ReadyotherWeap = Npc_GetReadiedWeapon(other);
////////////////////////////
cmouseleft = MEM_KeyState(MOUSE_BUTTONLEFT);
cmouseright = MEM_KeyState(MOUSE_BUTTONRIGHT);
ckeyUPar = MEM_KeyState(KEY_UPARROW);
ckeyRightar = MEM_KeyState(KEY_RIGHTARROW);
ckeyDownar = MEM_KeyState(KEY_DOWNARROW);
ckeyLeftar = MEM_KeyState(KEY_LEFTARROW);
ckeySPACE = MEM_KeyState(KEY_SPACE);
ckeyA = MEM_KeyState(KEY_A);
ckeyB = MEM_KeyState(KEY_B);
ckeyC = MEM_KeyState(KEY_C);
ckeyD = MEM_KeyState(KEY_D);
ckeyW = MEM_KeyState(KEY_W);
ckeyP = MEM_KeyState(KEY_P);
ckeyT = MEM_KeyState(KEY_T);
ckeyG = MEM_KeyState(KEY_G);
ckeyO = MEM_KeyState(KEY_O);
ckeyZ = MEM_KeyState(KEY_Z);
ckeyV = MEM_KeyState(KEY_V);
Nkey0 = MEM_KeyState(KEY_NUMPAD0);
Nkey1 = MEM_KeyState(KEY_NUMPAD1);
Nkey2 = MEM_KeyState(KEY_NUMPAD2);
Nkey3 = MEM_KeyState(KEY_NUMPAD3);
Nkey4 = MEM_KeyState(KEY_NUMPAD4);
Nkey5 = MEM_KeyState(KEY_NUMPAD5);
Nkey6 = MEM_KeyState(KEY_NUMPAD6);
Nkey7 = MEM_KeyState(KEY_NUMPAD7);
Nkey8 = MEM_KeyState(KEY_NUMPAD8);
Nkey9 = MEM_KeyState(KEY_NUMPAD9);
Nkeyrowne = MEM_KeyState(KEY_NUMPADEQUALS);
Nkeyminus = MEM_KeyState(KEY_MINUS);
Nkeyplus = MEM_KeyState(KEY_ADD);
NkeyCOMMA = MEM_KeyState(KEY_LBRACKET);
NkeySTOP = MEM_KeyState(KEY_RBRACKET);
};
Trzeba użyć pokladkową funkcje. Kto juz ma ten nie się cieszy, reszta niech poszuka instrukcji.Było gdzieś na stronie. Poklatkowiec wymagał chyba umieszczenia triggera w zenie. Pewnie są inne metody by to wywołać, ja więcej o tym nie myślałem.
func void PERFRAMEAD()
{
Wld_SendTrigger ("PERFRAMEAD");
if(PerFrameADCallTrigger_Init)
{
perfra = MEM_SearchVobByName ("PERFRAMEAD");
MEM_AssignInst (triggerAD, perfra);
PerFrameADCallTrigger_Init=FALSE;
};
triggerAD._zCVob_nextOnTimer = MEM_ReadInt(MEMINT_zTimer_Address+8);
Operators();
//-------------------------------------------LICZNIK ATAKU-(DO POPRAWY)--
if (otherhit == 0) && (otherhitsecury == 1)
{
attackhero = 0;
otherhit = 0;
otherhitsecury = otherhitsecury - 1;
};
if (C_BodyStateContains (hero, BS_HIT) ) && (otherhitsecury == 0)
{
otherhit = 0;
otherhit = otherhit + 21;
memorydamageTotal = ReadyHeroMeleeWeap.damageTotal;
otherhitsecury = otherhitsecury + 1;
};
if (otherhit >= 1)
{
otherhit = otherhit - 1;
};
if otherhit == 10
{
staminareduction(2);
};
if otherhit > 5 && otherhit < 15
{
attackhero = 1;
};
if otherhit == 15
{
attackhero = 2;
};
if otherhit == 16
{
attackhero = 0;
};
//---------------------------------------------LICZNIK PARADY-(DO POPRAWY)--
if (heroparade < 1) && (heroparadesecury == 2)
{
heroparade = 0;
heroparadesecury = 1;
};
if (C_BodyStateContains (hero, BS_Parade)) && (heroparadesecury == 1)
{
heroparadesecury = 2;
heroparade = 0;
heroparade = heroparade + 30;
};
if (heroparade >= 1)
{
heroparade = heroparade - 1;
};
//--------------------------------------------OBRAŻENIA Z TRIALA---------------------------------
if (ckeyO == KEY_PRESSED)
{
if FIGHTSTYLE < 1
{
Print ("Styl grupowy");
FIGHTSTYLE = FIGHTSTYLE + 1;
}
else if FIGHTSTYLE >= 1
{
Print ("Styl pojedynkowy");
FIGHTSTYLE = FIGHTSTYLE - 1;
};
};
if FIGHTSTYLE >= 1
{
if (otherhitsecury == 1)
{
ReadyHeroMeleeWeap.damageTotal = 0;
};
if attackhero == 1
{
if (ReadyHeroMeleeWeap.range < 40)
{
Wld_PlayEffect("av_weapon30_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 40) && (ReadyHeroMeleeWeap.range < 50)
{
Wld_PlayEffect("av_weapon40_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 50) && (ReadyHeroMeleeWeap.range < 60)
{
Wld_PlayEffect("av_weapon50_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 60) && (ReadyHeroMeleeWeap.range < 70)
{
Wld_PlayEffect("av_weapon60_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 70) && (ReadyHeroMeleeWeap.range < 80)
{
Wld_PlayEffect("av_weapon70_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 80) && (ReadyHeroMeleeWeap.range < 90)
{
Wld_PlayEffect("av_weapon80_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 90) && (ReadyHeroMeleeWeap.range < 100)
{
Wld_PlayEffect("av_weapon90_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 100) && (ReadyHeroMeleeWeap.range < 110)
{
Wld_PlayEffect("av_weapon100_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 110) && (ReadyHeroMeleeWeap.range < 120)
{
Wld_PlayEffect("av_weapon110_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 120) && (ReadyHeroMeleeWeap.range < 130)
{
Wld_PlayEffect("av_weapon120_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 130) && (ReadyHeroMeleeWeap.range < 140)
{
Wld_PlayEffect("av_weapon130_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 140) && (ReadyHeroMeleeWeap.range < 150)
{
Wld_PlayEffect("av_weapon140_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 150) && (ReadyHeroMeleeWeap.range < 160)
{
Wld_PlayEffect("av_weapon150_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
}
else if (ReadyHeroMeleeWeap.range >= 160)
{
Wld_PlayEffect("av_weapon160_vfx",hero,hero,0,obrazeniaslimweapon,DAM_blunt,false);
};
};
};
if (heroparadesecury == 1) && (hitinframe == 1)
{
Npc_PercEnable(hero,PERC_ASSESSDAMAGE,B_ASSESSDAMAGE);
};
}
Za pomocą keya O zmieniamy na grupowy. Jak pisalem mam w skryptach bałagan, ale chyba wszystkie potrzebne funkje załączyłem. Owocnego rozkminiania.