diff options
Diffstat (limited to 'TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c')
| -rw-r--r-- | TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c new file mode 100644 index 0000000..f8a20b7 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c @@ -0,0 +1,79 @@ +/*-- Klaue --*/ + +#strict 2 + +static const AFTF_Speed=45; + +local pClonk; +local pTimer, iSpeed, iAngle; +local iDamage; + +protected func Initialize() +{ + // Geschwindigkeit setzen + iSpeed=AFTF_Speed; + iDamage = 30; + return 1; +} + +public func Activate(pCaster,iNewAngle) +{ + // Clonk und Winkel speichern + pClonk=pCaster; + iAngle=iNewAngle; + + // Geschwindigkeit passend setzen + var iAdd=0; + if(iAngle >= 0) iAdd=180; + SetAction("Open"); + SetR(iAngle+90+iAdd); + SetXDir(Cos(iAngle-90,AFTF_Speed)); + SetYDir(Sin(iAngle-90,AFTF_Speed)); + + // Richtung anpassen + if(iAngle < 0) { SetDir(DIR_Right); } + else { SetDir(DIR_Left); } +} + +protected func Check() +{ + // Die Zeit vorbei oder stehen geblieben + if(++pTimer > 45 || iSpeed<=0) + { + // Ein letzer Effekt + CastParticles("PSpark",10,10,0,0,60,160,RGB(150,150,240),RGB(210,210,255)); + RemoveObject(); + } + + // In Materie wird die Klaue langsamer + if(GBackSolid()) + { + iSpeed-=6; + SetXDir(Cos(iAngle-90,iSpeed)); + SetYDir(Sin(iAngle-90,iSpeed)); + } + + if(!iDamage) return; + + // Clonks suchen + for(var pClnk in FindObjects(Find_OCF(OCF_Alive),Find_Distance(23,0,0),Find_NoContainer())) + { + // Nur Feine, außer die Regel ist aktiviert +// if(!ObjectCount(NTMG) && !Hostile(GetOwner(),GetOwner(pClnk))) continue; + + // Nicht in den ersten Frames den Zauberer selber treffen + if(pClnk == pClonk && pTimer < 5) continue; + + // Clonk wegschleudern + pClnk->SetAction("Tumble"); + SetPosition(GetX(pClnk),GetY(pClnk)-2,pClnk); + SetXDir(GetXDir(pClnk)+RandomX(-10,10),pClnk); + SetYDir(-20,pClnk); + + var iDmg = iSpeed/5; + if(iDmg>iDamage) iDmg = iDamage; + iDamage-=iDmg; + // Und wehtun + DoEnergy(-iDmg,pClnk); + } +} |
