summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c
blob: 60dc5f2a037d1f720fcd1d0cf63f2b5a239f3ee8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*-- Teleport --*/

#strict

func Range()
{
  var range=225;
  return range;
}



protected func Activate(object pCaster, object pRealCaster)
{
    // Effekt erzeugen
    if(!pRealCaster) pRealCaster = pCaster;
  
  var possibleTargets = [];
  var found=0;
  var range=Range();
  for(var obj in FindObjects(Find_Distance(range),Find_OCF(OCF_CrewMember),Find_Hostile(GetOwner(pRealCaster)),Sort_Distance()))
  {
   var dir=-1;
   if(GetDir(obj) == DIR_Left)dir=1;
   
   if(GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)))
   || GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)+5))
   || GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)-9)))continue;
   if(!PathFree(GetX(obj),GetY(obj),GetX(obj)+15*dir,GetY(obj) + 5))continue;
   
   var priority = 20 + ObjectDistance(pRealCaster, obj);
   if(GBackSemiSolid(AbsX(obj->GetX()), AbsY(obj->GetY())))
		priority += 100;

	possibleTargets[GetLength(possibleTargets)] = [obj, priority];	
	   	
  }
  
  if(!GetLength(possibleTargets))
  {
  	var x = AbsX(GetX(pRealCaster));
  	var y = AbsY(GetY(pRealCaster));
  	var tim = CreateObject(TIM1, x, y, pRealCaster->GetOwner());
  	tim->SetVisibility(VIS_Owner);
  	AddEffect("ScheduledRemove", tim, 1, 35 * 5, 0, MATT);
  	CreateParticle("RangeSpark", 0, 0, 0, 0,((range)*1000/200)*2, RGB(200, 200, 100), tim, true);
	Sound("Error",0,0,0,GetOwner(pRealCaster));
	RemoveObject();
	return;
  }


	// find lowest prio target from list
	var currentLowest = 0xffffff;
	for(var pt in possibleTargets)
	{
		if(pt[1] >= currentLowest) continue;
		currentLowest = pt[1];
		found = pt[0];
	}

  var dir=-1;
  if(GetDir(found) == DIR_Left)dir=1;

  for(var cnt=0;cnt<5;cnt++)
  {
   CreateParticle("PSpark",AbsX(GetX(pRealCaster)+RandomX(-5,5)),AbsY(GetY(pRealCaster)+RandomX(-10,10)),0,0,150,GetColorDw(pRealCaster));
   CreateParticle("PSpark",AbsX(GetX(found)+15*dir+RandomX(-5,5)),AbsY(GetY(found)+RandomX(-10,10)),0,0,150,GetColorDw(pRealCaster));
  }
  SetSpeed(GetXDir(found),GetYDir(found),pRealCaster);
  SetPosition(GetX(found)+7*dir,GetY(found),pRealCaster);
  
  Sound("Scream");
  return(RemoveObject());
}


func FxScheduledRemoveStop(target, effect, reason, temp)
{
	if(temp) return;
	if(!target) return;
	target->RemoveObject();
}

/* Zaubercombo */

public func GetSpellClass(object pMage) { return(AIR1); }
public func GetSpellCombo(pMage) { return ("222"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig)