func Enrg() { if(FindContents(ZPM_)) { return(FindContents(ZPM_)->Energ()); } return(0); }
func Piccheck() { if(FindContents(ZPM_)) { SetVisibility(VIS_All()); SetAction(GetAction(FindContents(ZPM_))); } else { SetAction("Inactive"); SetVisibility(VIS_None()); } return(1); }
func Minus() { if(timer > 0) { timer--; return(1); } if(FindContents(ZPM_)) { FindContents(ZPM_)->Minus(); timer = 50; } return(1); }
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); }
global func FxPotionSupplyTimer(pTarget) { if(!Random(50) || GetCon(pTarget) !=100) return(); var i,p; for(i=0; i<ObjectCount(0,0,0,0,0,0,0,0,pTarget); ++i) { if(Contents(i, pTarget)->~IsPotion()) p++; } if(p>3) return(0); var rnd=Random(8); if(!rnd--) if(!FindContents(PFIR, pTarget)) CreateContents(PFIR, pTarget); if(!rnd--) if(!FindContents(PFIS, pTarget)) CreateContents(PFIS, pTarget); if(!rnd--) if(!FindContents(PHEA, pTarget)) CreateContents(PHEA, pTarget); if(!rnd--) if(!FindContents(PIMM, pTarget)) CreateContents(PIMM, pTarget); if(!rnd--) if(!FindContents(PMAN, pTarget)) CreateContents(PMAN, pTarget); if(!rnd--) if(!FindContents(PMON, pTarget)) CreateContents(PMON, pTarget); if(!rnd--) if(!FindContents(PSTO, pTarget)) CreateContents(PSTO, pTarget); if(!rnd--) if(!FindContents(PWIP, pTarget)) CreateContents(PWIP, pTarget); return(1); }
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); }
public func Activate(caster, real_caster) { // Zaubernden Clonk ermitteln var clonk = caster; if (real_caster) clonk = real_caster; // Kombiniert mit Beton -> Clonk in den Boden stecken var obj; if (!Contained(clonk) && (obj = FindContents(CNCR, clonk))) { var height = GetDefCoreVal("Height", "DefCore", GetID(clonk)); var radius = RandomX(25, 35); var x = GetX(clonk); var y = GetY(clonk); // Unter dem Clonk freischütteln und buddeln DigFree(x, y+height+radius, height/2); ShakeFree(x, y+height+(radius/2), radius); // Tiefstes freigeschüttelte Y-Position ermitteln while (!GBackSolid(AbsX(x), AbsY(y++ + height))) {} // Effekte! DrawParticleLine("MSpark", 0, 0, 0, AbsY(y), height*3/2, height*5/2, RGBa(255-Random(50),255-Random(50), 0,128), RGBa(155-Random(50),155-Random(50), 0,128), -10); // Zauberer an ermittelte Stelle versetzen SetPosition(x, y, clonk); // Objekt entfernen RemoveObject(obj); } // Sonst normale Wirkung (Gravitation erhöhen) else { // Gravitation bereits auf Maximum? if (GetGravity() >= 290) return(0, Message("$MsgAlreadyMaxed$", caster), RemoveObject()); // Sonst erhöhen // Effekt global starten if (!AddEffect("GravChangeUSpell", 0, 150, 80, 0, MGDW, 20)) return(0, RemoveObject()); Message("$MsgRaised$", caster, GetGravity()); } Sound("Magic1"); RemoveObject(); return(1); }
public func Activate(caster, real_caster) { // Zaubernden Clonk ermitteln var clonk = caster; if (real_caster) clonk = real_caster; // Richtungsvorzeichen ermitteln var dir_sign = -1; if (GetDir(caster) == DIR_Right()) dir_sign = +1; // Evtl. mit Flint kombinieren var obj; if (obj = FindContents(FLNT, clonk)) { // Holz erzeugen, anzünden und in Guckrichtung schleudern var wood = CreateObject(WOOD, 5*dir_sign, 0, -1); Incinerate(wood); // Richtigen Controller setzen SetController(GetController(clonk),wood); SetXDir(40*dir_sign, wood); SetYDir(-10, wood); // Flint verbrauchen RemoveObject(obj); } // Evtl. mit Pfeil kombinieren else { obj = FindContents(ARRW, clonk); if(!obj) if(FindContents(ARWP, clonk)) obj = FindContents(ARWP, clonk)->GetItem(); if(obj) { // Ein paar Objekte schleudern var fling_cnt = RandomX(4, 10); var fling_obj; while (fling_obj = FindObject(0, 0, 0, -1, -1, OCF_InFree(), 0, 0, NoContainer(), fling_obj)) { // Zu weit weg vom Clonk? if (ObjectDistance(clonk, fling_obj) > 5*GetDefCoreVal("Width", "DefCore", GetID(caster))) break; // Der Wolf konnte keine Steinhütten wegblasen - Clonks können keine Hütten mit Fundament wegblasen if (!LocalN("basement", fling_obj)) { var pBasement = Local(9, fling_obj); if (GetType(pBasement) != C4V_C4Object()) pBasement=0; if (pBasement) if (!PrivateCall(pBasement, "BasementID")) pBasement=0; if (!pBasement) { SetXDir(dir_sign*Min(80, 80*350/GetMass(fling_obj)), fling_obj); SetYDir(-Min(20, 20/GetMass(fling_obj)), fling_obj); // Bei Objekten noch den Controller anpassen if(GetCategory(fling_obj) & C4D_Object()) SetController(GetController(clonk),fling_obj); } } // Schon genügend Objekte geschleudert? if (!fling_cnt--) break; } if (!Contained(clonk)) { Fling(clonk, 8*dir_sign, -2); } // Pfeil verbrauchen RemoveObject(obj); } // Sonst normale Wirkung else { AddEffect("WindUSpell", 0, 104, 50, 0, GetID(), GetDir(caster)); Sound("Wind2"); } } RemoveObject(); return(1); }
func GetZpm() { return(FindContents(ZPM_)); }