From f1ece16c08d8c01e1d49a25f0314a96c021e73cb Mon Sep 17 00:00:00 2001 From: Jan <> Date: Fri, 10 Jul 2015 18:11:22 +0200 Subject: r0.921 --- .../AdditionalSpells.c4d/Deflection.c4d/Script.c | 112 +++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c (limited to 'TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c') diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c new file mode 100644 index 0000000..b3e4179 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c @@ -0,0 +1,112 @@ +/* Zurückwerfen */ + +#strict 2 + +func Activate(pCaster,pRealcaster) +{ + var pClonk=pRealcaster; + if(!pClonk) pClonk=pCaster; + + // Auswählen wenn möglich + if (pCaster->~DoSpellSelect(this,300)) return 1; + + // Clonk kann nicht auswählen: Clonk bekommst selbst ein Schild + if (SelectorTarget(pClonk)) + return ActivateTarget(pClonk, pClonk); + + // ansonsten geth nich + RemoveObject(); + return 0; +} + +public func ActivateTarget(object pCaller, object pTarget) +{ + // Effekt geben + AddEffect("DeflectionPSpell",pTarget,250,2,0,GetID()); + // Objekt löschen + return RemoveObject(); +} + +public func SelectorTarget(object pTarget) +{ + // nur außerhalb von Gebäuden + if(Contained(pTarget)) return; + // muss ein Mannschaftsmitglied sein + if(!(GetOCF(pTarget)&OCF_CrewMember)) return; + // muss verbündet sein oder NTMG muss aktiviert sein + if(Hostile(GetOwner(),GetOwner(pTarget)) && !ObjectCount(NTMG)) return; + // sichtbar + if(!Visible(GetOwner(),pTarget)) return; + // darf noch keinen Effekt haben + if(GetEffect("DeflectionPSpell", pTarget)) return; + return 1; +} + +func FxDeflectionPSpellStart(pClonk, iEffectNumber, iTemp) +{ + if(iTemp) return; + // Zeit setzen + EffectVar(0,pClonk,iEffectNumber)+=450; +} + +func FxDeflectionPSpellTimer(pClonk, iEffectNumber, iEffectTime) +{ + // Zeit um + if(!EffectVar(0,pClonk,iEffectNumber)--) return -1; + // Nicht in Gebäuden + if(Contained(pClonk)) return; + //Funken an der benötigten Stelle + for(var pObj in FindObjects(Find_OCF(OCF_HitSpeed1),Find_Layer(GetObjectLayer()), Find_NoContainer(), Find_Category(C4D_Object), Find_Distance(21, GetX(pClonk), GetY(pClonk)), Find_Not(Find_Distance(11, GetX(pClonk), GetY(pClonk))))) + { + // Wenn das Objekt auf den Clonk zufliegt + if( (GetXDir(pObj)<0) == (GetX(pObj)>GetX(pClonk)) || (GetYDir(pObj)<0) == (GetY(pObj)>GetY(pClonk))) + { + // Eigenen Stab ignorieren + if(GetEffect("StaffFlight", pObj)) + if(EffectVar(0, pObj, GetEffect("StaffFlight", pObj))==pClonk) + continue; + if(Abs(GetXDir(pObj))<5) SetXDir(GetXDir(pObj)+RandomX(-10,10), pObj); + if(Abs(GetYDir(pObj))<5) SetYDir(3, pObj); + SetSpeed(-GetXDir(pObj),-GetYDir(pObj), pObj); + CreateParticle("NoGravSpark", AbsX(GetX(pObj)), AbsY(GetY(pObj)), 0, 0, 80, RGB(80,50,50)); + if(!GetEffect("IntDeflected", pObj)) + EffectVar(0,pClonk,iEffectNumber) = Max(EffectVar(0,pClonk,iEffectNumber)-50,0); + AddEffect("IntDeflected", pObj, 1, 20); + Sound("Rip", 0, pObj); + } + } + // Partikel Kreiseffekt + if(Mod(iEffectTime,4)) return; + var iAngle = iEffectTime*10; + while(iAngle>=360) iAngle -= 360; + var px= Sin(iAngle, 15); + var py= Cos(iAngle, 15); + CreateParticle("NoGravSpark", px+GetX(pClonk), py+GetY(pClonk), 0, 0, 50, RGB(50,80,50), pClonk); + CreateParticle("NoGravSpark",-py+GetX(pClonk), px+GetY(pClonk), 0, 0, 50, RGB(50,50,80), pClonk); + CreateParticle("NoGravSpark",-px+GetX(pClonk),-py+GetY(pClonk), 0, 0, 50, RGB(50,80,50), pClonk); + CreateParticle("NoGravSpark", py+GetX(pClonk),-px+GetY(pClonk), 0, 0, 50, RGB(50,50,80), pClonk); + return 1; +} + +private func FxDeflectionPSpellEffect(string szNewEffectName, object pTarget, int iNumber) +{ + // Andere Effekte aufnehmen + if(szNewEffectName == "DeflectionPSpell") + { + if(EffectVar(0,pTarget,iNumber)>50) return -1; + return -2; + } +} + +private func FxDeflectionPSpellAdd(object pTarget, int iNumber, string szNewEffectName, int iNewEffectTimer, int iChange0, int iChange1, int iChange2, int iTime) { + // Effekt übernehmen + EffectVar(0,pTarget,iNumber) += 300; + if(EffectVar(0,pTarget,iNumber)> 600) EffectVar(0,pTarget,iNumber)=600; +} + +protected func FxDeflectionPSpellInfo() { return "{{MDFL}} $SpellInfo$"; } + +/* Zaubercombo */ + +public func GetSpellStaff() { return SMAR; } +public func GetSpellStaffCombo() { return ("56"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig) -- cgit v1.2.3-54-g00ecf