/*-- Teleport --*/ #strict func Range() { var range=225; return range; } protected func Activate(object pCaster, object pRealCaster) { // Effekt erzeugen if(!pRealCaster) pRealCaster = pCaster; var possibleTargets = []; var found=0; var range=Range(); for(var obj in FindObjects(Find_Distance(range),Find_OCF(OCF_CrewMember),Find_Hostile(GetOwner(pRealCaster)),Sort_Distance())) { var dir=-1; if(GetDir(obj) == DIR_Left)dir=1; if(GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj))) || GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)+5)) || GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)-9)))continue; if(!PathFree(GetX(obj),GetY(obj),GetX(obj)+15*dir,GetY(obj) + 5))continue; var priority = 20 + ObjectDistance(pRealCaster, obj); if(GBackSemiSolid(AbsX(obj->GetX()), AbsY(obj->GetY()))) priority += 100; possibleTargets[GetLength(possibleTargets)] = [obj, priority]; } if(!GetLength(possibleTargets)) { var x = AbsX(GetX(pRealCaster)); var y = AbsY(GetY(pRealCaster)); var tim = CreateObject(TIM1, x, y, pRealCaster->GetOwner()); tim->SetVisibility(VIS_Owner); AddEffect("ScheduledRemove", tim, 1, 35 * 5, 0, MATT); CreateParticle("RangeSpark", 0, 0, 0, 0,((range)*1000/200)*2, RGB(200, 200, 100), tim, true); Sound("Error",0,0,0,GetOwner(pRealCaster)); RemoveObject(); return; } // find lowest prio target from list var currentLowest = 0xffffff; for(var pt in possibleTargets) { if(pt[1] >= currentLowest) continue; currentLowest = pt[1]; found = pt[0]; } var dir=-1; if(GetDir(found) == DIR_Left)dir=1; for(var cnt=0;cnt<5;cnt++) { CreateParticle("PSpark",AbsX(GetX(pRealCaster)+RandomX(-5,5)),AbsY(GetY(pRealCaster)+RandomX(-10,10)),0,0,150,GetColorDw(pRealCaster)); CreateParticle("PSpark",AbsX(GetX(found)+15*dir+RandomX(-5,5)),AbsY(GetY(found)+RandomX(-10,10)),0,0,150,GetColorDw(pRealCaster)); } SetSpeed(GetXDir(found),GetYDir(found),pRealCaster); SetPosition(GetX(found)+7*dir,GetY(found),pRealCaster); Sound("Scream"); return(RemoveObject()); } func FxScheduledRemoveStop(target, effect, reason, temp) { if(temp) return; if(!target) return; target->RemoveObject(); } /* Zaubercombo */ public func GetSpellClass(object pMage) { return(AIR1); } public func GetSpellCombo(pMage) { return ("222"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig)