Exemple #1
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);
}
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;
}
Exemple #3
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 #4
0
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);
}
Exemple #5
0
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);
}
Exemple #6
0
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);
}
Exemple #7
0
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);
}