summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Script.c
blob: 6172d2579f1ca4b3a14b18204efe239c14367d91 (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
/*-- Spawnpoint --*/

#strict

local initialized, angle, player, spawntimer,WpID;

func IsWaypoint() { return(1); }

global func PlaceSpawnpoint(id idObj, int iX, int iY, int timer)
{
  var spwn = CreateObject(SPNP, iX, iY, -1);
  spwn->CreateContents(idObj);
  if(timer)
    spwn->LocalN("spawntimer") = timer;
  return(spwn);
}

protected func Initialize()
{
  if(Random(4)) WpID = [FLNT,SCRL,SFLN,ROCK];
  else WpID = [EFLN,STFN,FBMP];
  // Standardtimer = 750 Frames
  spawntimer = 750;
  SetClrModulation(RGBa(0,0,0,255));
}

protected func Timer()
{
	if(!player) player = CreateArray();
  // Noch nicht initialisiert?
  if(!initialized)
    // Ein Inhaltsobjekt?
    if(Contents())
      // Initialisieren
      return(Initialized());
  // Kein Inhalt?
  if(!Contents())
    {
    return(CreateContents(WpID[Random(GetLength(WpID))]));
    }
  // Tolle Effekt starten
  angle += 10;
  if(angle >= 360) angle = 0;
  SetObjDrawTransform(1000, 0,0,0, 1000, Sin(angle, 8)*1000 - 2000,0, 1);
  if(Random(2)) CreateParticle("NoGravSpark", RandomX(-5,5), RandomX(5,10), 0, -5, 25, RGBa(210, 210, 255, 100));
  // Alle Timer runterzählen
  DecreaseTimer();
}

private func Initialized()
{
  // Unsichtbar werden
  SetAction("Invis");
  // Objekt als Layer auflegen
  SetGraphics(0, 0, GetID(Contents()), 1, 1);
  // Transformation
  SetObjDrawTransform(1000, 0,0,0, 1000, -5000,0, 1);
  // Sammeleffekt starten
//  AddEffect("Collect", this(), 1, 3, this());
  // Objekt(e) erzeugen
  // Waffen-Bleiben-Regel
//player = CreateArray();
  // Initialisiert
  initialized = true;
}

/* Timer runterzählen */

private func DecreaseTimer()
{
  // Waffen-Bleiben-Regel
  if(FindObject(WPST))
    {
    for(var i=0 ; i < GetPlayerCount() ; i++)
      // Spielertimer runterzählen
      {
      if(player[GetPlayerByIndex(i)])
        player[GetPlayerByIndex(i)] -= 5;
      if(player[GetPlayerByIndex(i)] <= 0 && !(Local() & 2**GetPlayerByIndex(i)))
        {
        // Spieler kann das Objekt wieder einsammeln
        player[GetPlayerByIndex(i)] = 0;
        Local() += 2**GetPlayerByIndex(i);
        }
      }
    }
  else
    {
    // Timer runterzählen
    player[0] -= 5;
    if(player[0] <= 0)
      {
      // Objekt ist wieder da
      player[0] = 0;
      Local() = true;
      SetVisibility(VIS_All());
      }
    }
}

/* Einsammel-Effekte */
/*
public func FxCollectTimer()
{
  // Ist ein Clonk hier? -> Einsammeln lassen
  var pObj;
  for(var pClonk in FindObjects(Find_AtPoint(), Find_OCF(OCF_CrewMember()), Find_OCF(OCF_CrewMember()), Find_NoContainer()))
    if(CheckCollect(GetOwner(pClonk)))
      {
      pObj = FindContents();
      // Kann der Clonk einsammeln?
      Collect(pObj, pClonk);
      if(Contained(pObj) == this()) RemoveObject(pObj);
      else
        {
        Sound("Grab", 0, pClonk, 0, GetOwner(pClonk)+1);
        Collected(GetOwner(pClonk));
        }
    }
}*/

public func RejectEntrance(object pClonk)
{
  // Objekt ist ein Clonk?
  if(!(GetOCF(pClonk) & OCF_CrewMember) && !(pClonk->~CanCollectFromSpawnpoints())) return(1);
  // Ich hab Contents?
  if(!Contents()) return(1);
  // Darf einsammeln
  if(CheckCollect(GetOwner(pClonk)))
  {
    var pObj = Contents();
    // Kann der Clonk einsammeln?
    if(ObjectCount(0, 0, 0, 0, 0, 0, 0, 0, pClonk) >= 1)
      return(1);
		
    Collect(pObj, pClonk);
    CreateContents(WpID[Random(GetLength(WpID))]);
    Initialized();
    if(Contained(pObj) == this()) RemoveObject(pObj);
    else
    {
      Sound("Grab", 0, pClonk, 0, GetOwner(pClonk)+1);
      Collected(GetOwner(pClonk));
    }
  }
  return(1);
}

private func CheckCollect(int iPlr) // Überprüft, ob ein Spieler das Objekt einsammeln darf
{
  // Waffen-Bleiben-Regel
  if(FindObject(WPST))
    return(Local() & 2**iPlr);
  else
    return(Local());
}

private func Collected(int iPlr) // Regelt, dass ein Spieler das Objekt einsammelt
{
  // Waffen-Bleiben-Regel
  if(FindObject(WPST))
    {
    // Spielertimer hochsetzen
    player[iPlr] = spawntimer;
    // Nicht mehr sichtbar für den Spieler
    Local() -= 2**iPlr;
    }
  else
    {
    // Timer hochsetzen
    player[0] = spawntimer;
    // Nicht mehr einsammelbar
    Local() = false;
    // Nicht mehr sichtbar
    SetVisibility(VIS_God());
    }
}