示例#1
0
func FxPointingTimer(object target, int index, int time) {
	if(time > PT0D_Duration) {
		RemoveObject(target);
		return -1;
	}

	var clonk = GetCursor(EffectVar(0, target, index));
	var obj = EffectVar(1, target, index);
	var msg = EffectVar(2, target, index);

	// Zeiger hat kein Ziel mehr? Löschen.
	if(!obj) {
		RemoveObject(target);
		return -1;
	}

	var ang = Angle(GetX(clonk), GetY(clonk), GetX(obj), GetY(obj)) - 90;
	var dst = Min(PT0D_Distance, Distance(GetX(clonk), GetY(clonk), GetX(obj), GetY(obj)) / 2);

	SetR(ang + 90, target);
	SetPosition(GetX(clonk) + Cos(ang, dst), GetY(clonk) + Sin(ang, dst), target);

	var r, g, b, a;
	SplitRGBaValue(GetClrModulation(target), r, g, b, a);

	a = EvalEase(alphaEase, Min(254, time));
	SetClrModulation(RGBa(r, g, b, a), target);
	Message("<c %x>%s</c>", target, RGBa(r, g, b, 255 - a), msg);

	return true;
}
示例#2
0
global func FxFadeInTimer(target, no) {
	EffectVar(0, target, no)-=EffectVar(2, target, no);
	SetObjAlpha(EffectVar(0, target, no),target);
	
	if (EffectVar(0, target, no) <= EffectVar(1, target, no)) { 
		return -1; 
	}
}
示例#3
0
func FxPointingStart(object target, int index, int temp, int plr, object obj, string msg) {
	SetVisibility(VIS_Owner, target);
	CreateParticle("PSpark", 0, 0, 0, 0, 500, GetClrModulation(), this, true);
	EffectVar(0, target, index) = plr;
	EffectVar(1, target, index) = obj;
	EffectVar(2, target, index) = msg;
	return true;
}
示例#4
0
global func FxIntScheduleTimer(object pObj,  int iEffect)
{
  // Nur eine bestimmte Anzahl Ausführungen
  var fDone = (--EffectVar(1, pObj, iEffect) <= 0);
  // Ausführen
  eval(EffectVar(0, pObj, iEffect));
  return(-fDone);
}
示例#5
0
global func FxIntScheduleCallTimer(object pObj, int iEffect)
{
  // Nur eine bestimmte Anzahl Ausführungen
  var fDone = (--EffectVar(1, pObj, iEffect) <= 0);
  // Ausführen
  Call(EffectVar(0, pObj, iEffect), EffectVar(3, pObj, iEffect), EffectVar(4, pObj, iEffect), EffectVar(5, pObj, iEffect), EffectVar(6, pObj, iEffect), EffectVar(7, pObj, iEffect));
  // Nur eine bestimmte Anzahl Ausführungen
  return (-fDone);
}
示例#6
0
global func FxFadeOutStart(target, no, temp, level, amount) {
	if(!level) {
		EffectVar(1, target, no) = 255;
	} else {
		EffectVar(1, target, no) = level;
	}

	EffectVar(2, target, no) = Max(1,amount);
}
示例#7
0
// Einen Script zeitverzögert und ggf. wiederholt ausführen
global func Schedule(string strScript, int iInterval, int iRepeat, object pObj)
{
  
  // Default
  if(!iRepeat) iRepeat = 1;
  if(!pObj) pObj = this();
  // Effekt erzeugen
  var iEffect = AddEffect("IntSchedule", pObj, 1, iInterval, pObj);
  if(iEffect <= 0) return(false);
  // Variablen setzen
  EffectVar(0, pObj, iEffect) = strScript;
  EffectVar(1, pObj, iEffect) = iRepeat;
  return(true);
}
示例#8
0
// AddEffect("Attach", [Objekt das attached werden soll], 1, 1, 0, 0, [Objekt an das attached werden soll]);
global func FxAttachStart(object pTarget, int iEffectNumber, int iTemp, object pObj) {
	if(!iTemp) {
		if(!pObj || !pTarget)
			return -1;
		EffectVar(0, pTarget, iEffectNumber) = pObj;
	}
}
示例#9
0
global func FxIntRemoveNotifierStart(object target, int effectNumber, int temp, callback)
{
	if(!temp)
	{
		EffectVar(0, target, effectNumber) = callback;
	}
}
示例#10
0
global func FxAttachTimer(object pTarget, int iEffectNumber) {
	var pObj = EffectVar(0, pTarget, iEffectNumber);
	if(!pObj)
		return -1;
	pTarget -> SetPosition(GetX(pObj), GetY(pObj));
	pTarget -> SetXDir(GetXDir(pObj));
	pTarget -> SetYDir(GetYDir(pObj));
}
示例#11
0
// Eine Funktion zeitverzögert und ggf. wiederholt aufrufen
global func ScheduleCall(object pObj, string strFunction, int iInterval, int iRepeat, par0, par1, par2, par3, par4)
{
  // Default
  if(!iRepeat) iRepeat = 1;
  if(!pObj) pObj = this();
  // Effekt erzeugen
  var iEffect = AddEffect("IntScheduleCall", pObj, 1, iInterval, pObj);
  if(iEffect <= 0) return(false);
  // Variablen setzen
  EffectVar(0, pObj, iEffect) = strFunction;
  EffectVar(1, pObj, iEffect) = iRepeat;
  // EffectVar(2): Nur zur Abwärtskompatibilität reserviert
  EffectVar(2, pObj, iEffect) = pObj; 
  for(var i = 0; i < 5; i++)
    EffectVar(i + 3, pObj, iEffect) = Par(i + 4);
  return(true);
}
示例#12
0
文件: Script.c 项目: lluchs/ClonkMars
global func FxSmokeTrailTimer(object pTarget, int iEffectNumber, int iEffectTime)
{
  var iStrength = EffectVar(0, pTarget, iEffectNumber);
  var iAStr = EffectVar(1, pTarget, iEffectNumber);
  var iX = EffectVar(2, pTarget, iEffectNumber);
  var iY = EffectVar(3, pTarget, iEffectNumber);
  var iXDir = EffectVar(4, pTarget, iEffectNumber);
  var iYDir = EffectVar(5, pTarget, iEffectNumber);

  iAStr = Max(1,iAStr-iAStr/10+Random(2));
  iAStr--;
  iYDir += GetGravity()*2/3;
  iYDir += GetWind(iX,iY)/20;

  var xdir = iXDir*iAStr/iStrength;
  var ydir = iYDir*iAStr/iStrength;

  // Neu: Random
  iX += RandomX(-3,3);
  iY += RandomX(-3,3);
  
  // zuerst zeichnen
  CreateParticle("Smoke3",iX,iY,RandomX(-2,2),RandomX(-2,2)-3,20+iAStr*8,RGBa(128,128,128,55+35*iAStr/iStrength));
  CreateParticle("Blast",iX,iY,0,0,10+iAStr*8,RGBa(250,100+Random(100),100,160));

  // dann nächste position berechnen
  iX += xdir/100;
  iY += ydir/100;
  
  if(GBackSemiSolid(iX,iY))
    return -1;
  if(iAStr <= 1)
    return -1;
    
  EffectVar(1, pTarget, iEffectNumber) = iAStr;
  EffectVar(2, pTarget, iEffectNumber) = iX;
  EffectVar(3, pTarget, iEffectNumber) = iY;
  EffectVar(5, pTarget, iEffectNumber) = iYDir;
}
示例#13
0
global func ClearScheduleCall(object pObj, string strFunction)
{
  var i, iEffect;
  // Von Effektzahl abwärts zählen, da Effekte entfernt werden
  i = GetEffectCount("IntScheduleCall", pObj);
  while (i--)
    // Alle ScheduleCall-Effekte prüfen
    if (iEffect = GetEffect("IntScheduleCall", pObj, i))
      // Gesuchte Zielfunktion
      if (EffectVar(0, pObj, iEffect) S= strFunction)      
        // Effekt löschen
        RemoveEffect(0, pObj, iEffect);
}
示例#14
0
global func FxIntRemoveNotifierStop(object target, int effectNumber, int reason, bool temp)
{
	if(!temp)
	{
		if(reason == FX_Call_RemoveClear)
		{
			Call(EffectVar(0, target, effectNumber), target);
		}
		else if(reason == FX_Call_RemoveDeath)
		{
			return FX_Stop_Deny;
		}
	}
}
示例#15
0
global func FxFadeOutTimer(target, no) {
	EffectVar(0, target, no)+= EffectVar(2, target, no);
	SetObjAlpha(EffectVar(0, target, no),target);
	
	if (EffectVar(0, target, no) >= EffectVar(1, target, no)) { 
		if (EffectVar(1, target, no) >= 255) {
			RemoveObject(target); 
			return -1; 
		}
	}
}
示例#16
0
文件: Script.c 项目: lluchs/ClonkMars
// Variablen:
// 0 - Stärke
// 1 - momentane Stärke
// 2 - X-Position
// 3 - Y-Position
// 4 - Anfangs-X-Geschwindigkeit
// 5 - Anfangs-Y-Geschwindigkeit
global func FxSmokeTrailStart(object pTarget, int iEffectNumber, int iTemp, iStrength, iAngle, iX, iY)
{
  if(iTemp)
    return;
  
  if(iAngle%90 == 1) iAngle += 1;
  iStrength = Max(iStrength,5);

  EffectVar(0, pTarget, iEffectNumber) = iStrength;
  EffectVar(1, pTarget, iEffectNumber) = iStrength;
  EffectVar(2, pTarget, iEffectNumber) = iX;
  EffectVar(3, pTarget, iEffectNumber) = iY;
  EffectVar(4, pTarget, iEffectNumber) = +Sin(iAngle,iStrength*40);
  EffectVar(5, pTarget, iEffectNumber) = -Cos(iAngle,iStrength*40);
}
示例#17
0
global func FxFadeInStart(target, no, temp, level, amount) {
	EffectVar(0, target, no) = 255;
	EffectVar(1, target, no) = level;
	EffectVar(2, target, no) = Max(1,amount);
}
示例#18
0
func FxLogTimer(pObj, iNumber)
{
  // Langsam ausfaden	
  if(!--EffectVar(0, pObj, iNumber)) return(-1);
  CustomMessage(Format("     %s", EffectVar(1, pObj, iNumber)), pObj, NO_OWNER, 20, 0, RGBa(255,255,255,Max(255-EffectVar(0, pObj, iNumber)/4)), 0, 0, MSG_NoLinebreak);
}
示例#19
0
func FxLogStart(pObj, iNumber, fTmp, szMessage)
{
  if(fTmp) return();
  EffectVar(0, pObj, iNumber) = 255*4;
  EffectVar(1, pObj, iNumber) = szMessage;
}
示例#20
0
global func DoDmg(int iDmg, int iType, object pTarget, int iPrecision, int dmgplayer, id idKillIcon, int iKillAttachment)
{
  //Existenz bestätigen
  if(!pTarget)
    if(!(pTarget = this))
      return;

  if(!iPrecision)
    iPrecision = 10;

  var dmg, dmgdealer = dmgplayer-1;

  if(dmgdealer < 0)
    dmgdealer = GetController(pTarget);

  var red = pTarget->~OnDmg(iDmg, iType);
  dmg = iDmg*(100-red)*iPrecision;

  if(!dmg || red == 100) return;

  //Killer setzen
  if(this && pTarget->GetOCF() & OCF_CrewMember || dmgplayer)
    SetKiller(dmgdealer, pTarget);

  if(GetOCF(pTarget) & OCF_CrewMember)
  {
    if(!idKillIcon && this)//Kein Killicon?
    {
      idKillIcon = this->~GetKillIcon();

      if(!idKillIcon)
        idKillIcon = GetID(this);

      if(idKillIcon->~IsClonk())
        idKillIcon = 0;      
    }
    if(!idKillIcon)
      {
        if(iType)
        {
          if(iType == DMG_Fire)
            idKillIcon = GSAM;
          else if(iType == DMG_Explosion)
            idKillIcon = BOOM;
          else if(iType == DMG_Energy)
            idKillIcon = ENAM;
          else if(iType == DMG_Bio)
            idKillIcon = GLOB;
          else if(iType == DMG_Projectile)
            idKillIcon = STAM;
        }
        else
          idKillIcon = KAMB;
      }

    pTarget->~KillIcon(idKillIcon);
    pTarget->~KillAttachment(iKillAttachment, true);
  }

  //Schaden machen
  var pFrom;
  if(pTarget != this)
    pFrom = this;
  if(!pFrom) pFrom = GetCrew(dmgdealer);

  //Wird gerade eingeblendet: Entfernen
  if(GetEffect("FadeIn4K", this))
  {
    EffectVar(0, this, GetEffect("FadeIn4K", this)) = 0;
    SetClrModulation(RGBa(255, 255, 255, 0), this);
  }

  pTarget->~LastDamageType(iType);
  pTarget->~OnHit(dmg/1000, iType, pFrom);
  if(GetCategory(pTarget) & C4D_Living)
    return DoEnergy(-dmg, pTarget, true, 0, dmgplayer);
  return DoDamage(dmg/1000, pTarget, 0, dmgplayer);
}
示例#21
0
global func FxDisappearTimer(pTarget, iNumber)
{
  if(Contained(pTarget)) return(EffectVar(0, pTarget, iNumber)=0);
  EffectVar(0, pTarget, iNumber)++;
  if(EffectVar(0, pTarget, iNumber)>2000) return(RemoveObject(pTarget));
}