forked from Mirrors/openclonk
80 lines
1.7 KiB
C
80 lines
1.7 KiB
C
![]() |
/*-- Melee --*/
|
||
|
|
||
![]() |
#include Library_Goal
|
||
![]() |
|
||
|
protected func InitializePlayer(int newplr, int x, int y, object base, int team)
|
||
|
{
|
||
|
// If the player is in a team, don't change hostility.
|
||
|
if (team) return;
|
||
|
|
||
|
// Otherwise, make all other players enemies.
|
||
|
for (var i = 0; i < GetPlayerCount(); i++)
|
||
|
{
|
||
|
var plr = GetPlayerByIndex(i);
|
||
![]() |
if (plr == newplr) continue;
|
||
![]() |
|
||
![]() |
SetHostility(newplr, plr, true, true);
|
||
|
SetHostility(plr, newplr, true, true);
|
||
|
}
|
||
![]() |
return inherited(newplr, x, y, base, team, ...);
|
||
![]() |
}
|
||
|
|
||
|
private func CheckTeamHostile(int plr1, int plr2)
|
||
|
{
|
||
|
var team1 = GetPlayerTeam(plr1);
|
||
![]() |
if (team1 != GetPlayerTeam(plr2))
|
||
![]() |
return true;
|
||
![]() |
if (team1)
|
||
![]() |
return false;
|
||
|
return Hostile(plr1, plr2);
|
||
|
}
|
||
|
|
||
|
public func IsFulfilled()
|
||
|
{
|
||
|
// If Teams.txt-Teams still need to be chosen, the goal cannot be fulfilled.
|
||
|
if (GetPlayerTeam(GetPlayerByIndex()) == -1) return;
|
||
|
|
||
![]() |
for (var i = 0; i < GetPlayerCount(); i++)
|
||
![]() |
{
|
||
|
var plr = GetPlayerByIndex(i);
|
||
|
// Compare with other players.
|
||
![]() |
for (var j = i + 1; j < GetPlayerCount(); j++)
|
||
![]() |
{
|
||
![]() |
var plr2cmp = GetPlayerByIndex(j);
|
||
![]() |
// Still enemy players out there?
|
||
![]() |
if (CheckTeamHostile(plr, plr2cmp) ) return false;
|
||
![]() |
}
|
||
|
}
|
||
![]() |
|
||
![]() |
// No enemy players, goal fulfilled.
|
||
|
return true;
|
||
|
}
|
||
|
|
||
![]() |
public func Activate(int byplr)
|
||
![]() |
{
|
||
|
// Count enemy players.
|
||
|
var hostile_count;
|
||
![]() |
for (var i = 0; i < GetPlayerCount(); i++)
|
||
![]() |
{
|
||
|
var plr = GetPlayerByIndex(i);
|
||
![]() |
if (plr == byplr)
|
||
![]() |
continue;
|
||
![]() |
if (Hostile(plr, byplr) )
|
||
![]() |
hostile_count++;
|
||
|
}
|
||
|
|
||
|
// Output
|
||
![]() |
if (!hostile_count)
|
||
![]() |
MessageWindow("$MsgGoalFulfilled$", byplr);
|
||
|
else
|
||
|
MessageWindow(Format("$MsgGoalUnfulfilled$", hostile_count), byplr);
|
||
|
return;
|
||
|
}
|
||
|
|
||
![]() |
public func GetShortDescription(int plr)
|
||
|
{
|
||
|
return ""; // TODO
|
||
|
}
|
||
|
|
||
![]() |
local Name = "$Name$";
|