Exemple #1
0
func Enrg()
{
  if(FindContents(ZPM_))
  {
   return(FindContents(ZPM_)->Energ());
  }
  return(0);
}
Exemple #2
0
func Piccheck()
{
  if(FindContents(ZPM_))
  {
   SetVisibility(VIS_All());
   SetAction(GetAction(FindContents(ZPM_)));
  }
  else
  {
   SetAction("Inactive");
   SetVisibility(VIS_None());
  }
  return(1);
}
Exemple #3
0
func Minus()
{
  if(timer > 0)
  {
   timer--;
   return(1);
  }
  if(FindContents(ZPM_))
  {
   FindContents(ZPM_)->Minus();
   timer = 50;
  }
  return(1);
}
Exemple #4
0
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);
}
Exemple #5
0
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);
}  
Exemple #6
0
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);
}
Exemple #7
0
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);
}
Exemple #8
0
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);
}
Exemple #9
0
func GetZpm()
{
  return(FindContents(ZPM_));
}