public func Activate(oCaller, oClonk) { if(!oClonk) oClonk = oCaller; // Effekt prüfen var iChkEff; if (iChkEff = CheckEffect("ExtinguishPSpell", oExtiObj, 180)) return(iChkEff!=-1 && RemoveObject()); // Lavafässer zu Granit werden lassen var obj; if (obj = FindContents(LBRL, oClonk)) if (!CheckEffect("ExtinguishPSpell", obj, 180)) { var mat = "Granite"; // Granit nicht geladen -> Stein casten if (!MaterialLoaded(Material(mat))) mat = "Rock"; // Stein nicht geladen -> Kohle casten if (!MaterialLoaded(Material(mat))) mat = "Coal"; // Material schleudern var amount = Min(400, obj->GetAmount()*3); CastPXS(mat, amount, 40, AbsX(GetX(oClonk)), AbsY(GetY(oClonk))); // Objekt entfernen RemoveObject(obj); } // Nächstes brennendes Objekt finden var oExtiObj, iExtiCount; // Den Clonk selbst? if(OnFire(oClonk)) iExtiCount += DoExtinguish(oClonk, oCaller); // Nächstliegende Objekte SetPosition(GetX(oCaller), GetY(oCaller)); // Suchradius ist abhängig von Höhe des Aufrufenden - ein Zauberturm hat einen größeren Radius var iSearchRadius = GetObjHeight(oCaller) * 3; while(oExtiObj = FindObject(0, 0, 0, -1, -1, 0, 0, 0, 0, oExtiObj)) if(ObjectDistance(oCaller, oExtiObj) > iSearchRadius) break; else if(OnFire(oExtiObj)) iExtiCount += DoExtinguish(oExtiObj, oCaller); else if (oExtiObj->~MagicExtinguish(oCaller)) iExtiCount += DoExtinguish(oExtiObj, oCaller); // Irgendwas gelöscht? if (!iExtiCount) return(0, Message("$NoExtinguish$", oClonk), RemoveObject()); // Einmaliger Effekt pro Zauber Sound("Splash1"); return(true); }
uint8 _SpellScript::EffectHook::GetAffectedEffectsMask(SpellInfo const* spellEntry) { uint8 mask = 0; if ((effIndex == EFFECT_ALL) || (effIndex == EFFECT_FIRST_FOUND)) { for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) { if ((effIndex == EFFECT_FIRST_FOUND) && mask) return mask; if (CheckEffect(spellEntry, i)) mask |= (uint8)1<<i; } } else { if (CheckEffect(spellEntry, effIndex)) mask |= (uint8)1<<effIndex; } return mask; }
public func Activate(caster, real_caster) { var clonk = caster; if (real_caster) clonk = real_caster; Sound("Magic1"); var iChkEff; if (iChkEff = CheckEffect("FirefistNSpell", 0, 130)) return(iChkEff!=-1 && RemoveObject()); var obj, nocrcnt; if (InLiquid(clonk) && (obj = FindContents(METL, clonk))) { var torpedo; SetDir(DIR_Left(), torpedo=CreateObject(TRP1,-15,+10,-1)); if (torpedo) { torpedo->Launch(torpedo); // Kleiner Trick damit das Torpedo in die richtige Richtung schwimmt torpedo->SetController(GetOwner(clonk)); // Damit eventuelle Tötungen auch gezählt werden } else ++nocrcnt; SetDir(DIR_Right(), torpedo=CreateObject(TRP1,+15,+10,-1)); if (torpedo) { torpedo->Launch(torpedo); torpedo->SetController(GetOwner(clonk)); } else ++nocrcnt; if (nocrcnt < 2) RemoveObject(obj); } else { var firefist=CreateObject(FSHW,-15,0,GetOwner(clonk)); if (firefist) { firefist->SetController(GetOwner(clonk)); ObjectSetAction(firefist,"Left"); } else ++nocrcnt; firefist=CreateObject(FSHW,+15,0,GetOwner(clonk)); if (firefist) { firefist->SetController(GetOwner(clonk)); ObjectSetAction(firefist,"Right"); } else ++nocrcnt; } RemoveObject(); return(nocrcnt < 2); }
func Activate(pCaster,pRealcaster) { var pClonk, pComboObj, fBlast; if(pRealcaster) pClonk=pRealcaster; else pClonk=pCaster; var iResult; if (iResult = CheckEffect("LightningNSpell", 0, 125)) return(iResult!=-1 && RemoveObject()); // Zielen wenn möglich if (pClonk->~DoSpellAim(this())) return(1); var obj = CreateObject(MCLX, 0, 0, GetOwner(pClonk)); obj->Launch(pClonk, GetDir(pClonk), GetX(pClonk), GetY(pClonk), 0); Sound("Thunder*"); RemoveObject(); return(1); }
func Activate(pCaster,pRealcaster) { var pClonk; if(pRealcaster) pClonk=pRealcaster; else pClonk=pCaster; var iResult; if (iResult = CheckEffect("Blast", 0, 125)) return(iResult!=-1 && RemoveObject()); // Zielen wenn möglich if (pClonk->~DoSpellAim(this())) return(1); // Blitz erzeugen var obj = CreateObject(_LVS, 0, 0, GetOwner(pClonk)); obj->Launch(pClonk, GetDir(pClonk), GetX(pClonk), GetY(pClonk), 0); Sound("Inflame"); RemoveObject(); return(1); }
public func Activate(oCaller, oClonk) { if(!oClonk) oClonk = oCaller; // Effekt prüfen var iChkEff; if (iChkEff = CheckEffect("WarmPSpell", oExtiObj, 180)) return(iChkEff!=-1 && RemoveObject()); // Nächstes gerforenes Objekt finden var oExtiObj, iExtiCount, pObj; // Den Clonk selbst? if(Frozen(oClonk)) iExtiCount += DoUnfreeze(oClonk, oCaller); else if(oClonk->~MagicWarm(1800)) iExtiCount += DoUnfreeze(oClonk, oCaller); else if(pObj = Contents(0,oClonk)) if(GetID(pObj)==METL) if(GetDefHeight(ANML)) { RemoveObject(pObj); CreateContents(ANML, oClonk); return(RemoveObject()); } // Nächstliegende Objekte SetPosition(GetX(oCaller), GetY(oCaller)); // Suchradius ist abhängig von Höhe des Aufrufenden - ein Zauberturm hat einen größeren Radius var iSearchRadius = GetObjHeight(oCaller) * 3; while(oExtiObj = FindObject(0, 0, 0, -1, -1, 0, 0, 0, 0, oExtiObj)) if(ObjectDistance(oCaller, oExtiObj) > iSearchRadius) break; else if(Frozen(oExtiObj)) iExtiCount += DoUnfreeze(oExtiObj, oCaller); else if (oExtiObj->~MagicUnfreeze(oCaller)) iExtiCount += DoUnfreeze(oExtiObj, oCaller); // Irgendwas erwärmt? if (!iExtiCount) { Message("$NoUnfreeze$", oClonk); RemoveObject(); return 0; } // Einmaliger Effekt pro Zauber Sound("Inflame"); return(true); }
public func Activate(pCaller, pClonk) { if(!pClonk) pClonk = pCaller; // Effekt prüfen var iChkEff; if (iChkEff = CheckEffect("CookPSpell", pCaller, 180)) return(iChkEff!=-1 && RemoveObject()); // Inhalt untersuchen var obj = Contents(0, pClonk), obj2; var res; if(!obj) res = 0; else if(obj->~Cook()) res = 1; // Kochbar? else if(obj->~Bake()) res = 1; // Backbar? else if(GetAlive(obj)) { Kill(obj); res=1; } // Tötbar? if(!res) return(0, Message("$NoCook$", pCaller), RemoveObject()); // Einmaliger Effekt pro Zauber Sound("Cook"); CastParticles("Fire", 20, 30, 0, 0, 50, 70, RGBa(255, 100, 0, 50), RGBa(200, 100, 0, 75),pClonk); CastParticles("Fire2", 100, 50, 0, 0, 50, 70, RGBa(255, 100, 0, 50), RGBa(200, 100, 0, 75),pClonk); return(true); }