public void OnTriggerEnter(Collider other) { if (other.CompareTag("Player")) { player = other.GetComponent <CTFPlayer>(); if (player.playerNumber != team && !taken && home) { player.TakeFlag(this); taken = true; home = false; GetComponent <Collider>().enabled = false; } if (player.playerNumber == team && player.carryFlag && !taken && home) //same team, delivered to home flag { player.DeliveredFlag(); } if (player.playerNumber == team && !taken && !home) { GoHome(); } } }
public override void MessageHandle(EZUDP.MessageBuffer msg) { try { if ((Protocol)msg.ReadShort() == Protocol.MapArgument) { switch ((Protocol_CTF)msg.ReadShort()) { case Protocol_CTF.FlagGrabbed: { CTFPlayer player = (CTFPlayer)playerList[msg.ReadByte()]; player.GrabFlag(flags[(player.Team.id + 1) % 2]); break; } case Protocol_CTF.FlagDropped: flags[msg.ReadByte()].Drop(msg.ReadVector2(), msg.ReadVector2()); break; case Protocol_CTF.FlagReturned: flags[msg.ReadByte()].Return(); break; case Protocol_CTF.FlagCaptured: FlagCaptured(flags[msg.ReadByte()]); break; case Protocol_CTF.RoundTimer: roundTimer = new Timer(msg.ReadFloat(), false); UpdateTimeText(); break; case Protocol_CTF.FlagPosition: flags[msg.ReadByte()].ReceivePosition(msg.ReadVector2(), msg.ReadVector2()); break; case Protocol_CTF.TeamScore: score[0] = msg.ReadByte(); score[1] = msg.ReadByte(); UpdateScoreText(); break; } } } catch (Exception e) { Log.Write(ConsoleColor.Yellow, "Packet corrupt!"); Log.Write(ConsoleColor.Red, e.Message); Log.Write(ConsoleColor.DarkRed, e.StackTrace); } if (msg != null) { msg.Reset(); } base.MessageHandle(msg); }
// Move to the ground and clear the current parent public void Drop(Vector3 ground) { if (par != null) { par.flag = null; par = null; } transform.position = ground; attached = false; }
public virtual void Look() { List <double> ins = new List <double>(); double enemyAngle = 0; double enemyDist = 2; double enemyHasFlag = 0; double haveFlag = 0; Vector3 ray = new Vector3(); Collider[] hits = Physics.OverlapSphere(transform.position, sightRadius); foreach (Collider hit in hits) { ray = hit.transform.position - transform.position; if (Vector3.Angle(body.transform.forward, ray) < sightAngle) { if (hit.CompareTag("Contestant")) { CTFPlayer player = hit.gameObject.GetComponent <CTFPlayer>(); if (player.team != team && ((ray.magnitude / sightRadius < enemyDist && enemyHasFlag == 0) || player.flag)) { AngDist(hit.transform.position, out enemyAngle, out enemyDist); if (player.flag) { enemyHasFlag = 1; } } } else if (hit.CompareTag("Flag")) { if (hit.gameObject.GetComponent <FlagScript>().team != team) { goalCheck = hit.transform.position; } } } } if (flag) { haveFlag = 1; } ins.Add(enemyAngle); ins.Add(enemyDist); ins.Add(enemyHasFlag); AngDist(goalCheck, out enemyAngle, out enemyDist); ins.Add(enemyAngle); ins.Add(enemyDist); ins.Add(haveFlag); AngDist(sim.goals[team].transform.position, out enemyAngle, out enemyDist); ins.Add(enemyAngle); ins.Add(enemyDist); directions = brain.Run(ins); }
public static void Returned(Mobile m) { CTFPlayer player = Players[m] as CTFPlayer; if (player == null) { player = new CTFPlayer(m); Players.Add(m, player); } player.Returns++; }
public override void PlayerLeave(Client c) { CTFPlayer player = (CTFPlayer)GetPlayer(c); if (player.HoldingFlag) { player.DropFlag(); } base.PlayerLeave(c); }
void RemovePlayer(CTFPlayer player) { if (player.hasFlag) { CTFFlag flag = player.team == Team.A ? FlagB : FlagA; flag.DropFlag(player.transform.position); player.player.SendNetworkUpdate(); player.hasFlag = false; SendMessage($"{ctf.configData.Messaging.MainColor}{player.player.displayName}</color>{ctf.configData.Messaging.MSGColor} {msg("has dropped")} </color>{ctf.configData.Messaging.MainColor}{ctf.GetTeamName(flag.team)}'s</color>{ctf.configData.Messaging.MSGColor} {msg("flag")}!</color>"); } }
// Damage any enemy player hit void OnTriggerEnter(Collider coll) { if (timer < 0f) { CTFPlayer gps = coll.GetComponent <CTFPlayer>(); if (gps != null && gps.team != team && hit) { gps.Damage((coll.ClosestPoint(transform.position) - transform.position).normalized); hit = false; } } }
public void Return() { holder = null; base.Position = originPosition; MessageBuffer msg = new MessageBuffer(); msg.WriteShort((short)Protocol.MapArgument); msg.WriteShort((short)Protocol_CTF.FlagReturned); msg.WriteByte(ownerID); Map.SendToAllPlayers(msg); }
public static void Load() { string basePath = Path.Combine("Saves", "CTFScore"); string idxPath = Path.Combine(basePath, "CTFLScore.idx"); string binPath = Path.Combine(basePath, "CTFLScore.bin"); if (File.Exists(idxPath) && File.Exists(binPath)) { // Declare and initialize reader objects. FileStream idx = new FileStream(idxPath, FileMode.Open, FileAccess.Read, FileShare.Read); FileStream bin = new FileStream(binPath, FileMode.Open, FileAccess.Read, FileShare.Read); BinaryReader idxReader = new BinaryReader(idx); BinaryFileReader binReader = new BinaryFileReader(new BinaryReader(bin)); // Start by reading the number of duels from an index file int playerCount = idxReader.ReadInt32(); for (int i = 0; i < playerCount; ++i) { CTFPlayer player = new CTFPlayer(); // Read start-position and length of current order from index file long startPos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); // Point the reading stream to the proper position binReader.Seek(startPos, SeekOrigin.Begin); try { player.Deserialize(binReader); if (binReader.Position != (startPos + length)) { throw new Exception(String.Format("***** Bad serialize on CTFScore[{0}] *****", i)); } } catch { //handle } if (player != null && player.Mobile != null) { Players.Add(player.Mobile, player); } } // Remember to close the streams idxReader.Close(); binReader.Close(); } }
public void Drop() { if (holder == null) { return; } base.Position = holder.Position + new Vector2(0, 2f); velocity = TKMath.GetAngleVector(90 + ((float)Map.rng.NextDouble() - 0.5f) * 2 * 70f) * 10f; holder = null; MessageBuffer msg = new MessageBuffer(); msg.WriteShort((short)Protocol.MapArgument); msg.WriteShort((short)Protocol_CTF.FlagDropped); msg.WriteByte(ownerID); msg.WriteVector(base.Position); msg.WriteVector(velocity); Map.SendToAllPlayers(msg); }
void Update() { // Perform the rising from the ground animation if (rising) { if (timer >= riseTime) { rising = false; transform.position = home; } else { transform.position = home + ((riseTime - timer) / riseTime) * dropoff; timer += Time.deltaTime; } } // If the flag is not being carried, check if gets picked up else if (!attached) { Collider[] hits = Physics.OverlapCapsule(transform.position, transform.position + Vector3.up * 12f, .25f); for (int ind = 0; ind < hits.Length && !attached; ind++) { CTFPlayer player = hits[ind].GetComponent <CTFPlayer>(); if (player != null && player.flag == null && !player.dead) { par = player; player.flag = this; attached = true; } } } // If the flag is being carried, position it accordingly else { transform.position = par.transform.position + offset + par.Forward() * amnt; } }
public override void PlayerJoin(int id, string name) { playerList[id] = new CTFPlayer(id, name, Vector2.Zero, this); }
public void Dropped() { this.player = null; taken = false; GetComponent <Collider>().enabled = true; }
public void SetPlayer(CTFPlayer target) { player = target; }