using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Addon;
namespace Teleport
{
public class Class1 : CPlugin
{
Dictionary
<string, Vector
> flagsorigin
= new Dictionary
<string, Vector
>(); Dictionary
<string, Vector
> flagsdesti
= new Dictionary
<string, Vector
>(); Dictionary
<int,
int> HudElem
= new Dictionary
<int,
int>();
public override void OnServerLoad()
{
ServerPrint("Teleport plugin loaded!");
}
public override void OnMapChange()
{
makeflags();
}
public override void OnFastRestart()
{
makeflags();
}
public static double Distance(Vector vec1, Vector vec2)
{
return Math.Sqrt(Math.Pow(vec1.X - vec2.X, 2) + Math.Pow(vec1.Y - vec2.Y, 2) + Math.Pow(vec1.Z - vec2.Z, 2));
}
public override void OnAddonFrame()
{
foreach (string key in flagsorigin.Keys)
{
if (key.Split(',')[0] == GetDvar("mapname"))
{
if (GetClients() != null)
{
foreach (ServerClient Client in GetClients())
{
HudElem hud = GetHudElement(HudElem[Client.ClientNum]);
if (Distance
(new Vector
(Client.
OriginX, Client.
OriginY, Client.
OriginZ), flagsorigin
[key
]) <= 50f
) {
hud.SetString("Press ^2" + Buttons.Activate + "^7 to teleport!");
{
if (Client.Other.ButtonPressed(Buttons.Activate))
{
Client.OriginX = flagsdesti[key].X;
Client.OriginY = flagsdesti[key].Y;
Client.OriginZ = flagsdesti[key].Z;
}
}
}
else
{
hud.SetString("");
}
}
}
}
}
}
void makeflags()
{
try
{
string flag = GetServerCFG("TELEPORTER", "flags", "0");
if (flag != "0")
{
for (int i = 1; i <= int.Parse(flag); i++)
{
string flaged = GetServerCFG("TELEPORTER", string.Format("flag{0}", i.ToString()), "null");
if (flaged != null)
{
string map = flaged.Split(',')[0];
string vector = flaged.Split(',')[1];
string vector2 = vector.Split('(')[1];
string vector3 = vector2.Split(')')[0];
string vec1 = vector3.Split('_')[0];
string vec2 = vector3.Split('_')[1];
string vec3 = vector3.Split('_')[2];
Vector vec
= new Vector
(Convert.
ToSingle(vec1
), Convert.
ToSingle(vec2
), Convert.
ToSingle(vec3
)); if (!flagsorigin.ContainsValue(vec))
flagsorigin.Add(string.Format("{0},{1}", map, i.ToString()), vec);
vector = flaged.Split(',')[2];
vector2 = vector.Split('(')[1];
vector3 = vector2.Split(')')[0];
vec1 = vector3.Split('_')[0];
vec2 = vector3.Split('_')[1];
vec3 = vector3.Split('_')[2];
vec
= new Vector
(Convert.
ToSingle(vec1
), Convert.
ToSingle(vec2
), Convert.
ToSingle(vec3
)); if (!flagsdesti.ContainsValue(vec))
flagsdesti.Add(string.Format("{0},{1}", map, i.ToString()), vec);
}
}
foreach (string key in flagsdesti.Keys)
{
if (key.Split(',')[0] == GetDvar("mapname"))
{
Entity en = SpawnModel("script_brushmodel", "prop_flag_neutral", flagsdesti[key]);
}
}
foreach (string key in flagsdesti.Keys)
{
if (key.Split(',')[0] == GetDvar("mapname"))
{
Entity en = SpawnModel("script_brushmodel", "prop_flag_neutral", flagsorigin[key]);
}
}
}
}
catch (Exception e)
{
ServerPrint(e.ToString());
}
}
private int CreateHud(int ClientNum)
{
HudElem hud = CreateNewHudElem();
hud.Type = HudElementTypes.Text;
hud.ShowToEnt = ClientNum;
hud.HideInMenu = true;
hud.Font = HudElementFonts.Default;
hud.FontScale = 1.4f;
hud.PointType = 120f;
hud.OriginY = 300f;
hud.OriginX = -100f;
hud.SetString("");
return hud.HudElementNum;
}
public override void OnPlayerDisconnect(ServerClient Client)
{
if (HudElem.ContainsKey(Client.ClientNum))
{
HudElem hud2 = GetHudElement(HudElem[Client.ClientNum]);
hud2.Type = HudElementTypes.None;
HudElem.Remove(Client.ClientNum);
}
}
public override void OnPlayerConnect(ServerClient Client)
{
int HudElem1 = CreateHud(Client.ClientNum);
if (HudElem.ContainsKey(Client.ClientNum))
HudElem[Client.ClientNum] = HudElem1;
else
HudElem.Add(Client.ClientNum, HudElem1);
}
}
}