示例#1
0
文件: Flag.cs 项目: C0BR4X/Bomberman
    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();
            }
        }
    }
示例#2
0
    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);
    }
示例#3
0
文件: FlagScript.cs 项目: RSK11/ctf
 // 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;
 }
示例#4
0
文件: AI.cs 项目: RSK11/ctf
    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);
    }
示例#5
0
        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++;
        }
示例#6
0
    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>");
            }
        }
示例#8
0
文件: Bat.cs 项目: RSK11/ctf
 // 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;
         }
     }
 }
示例#9
0
    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);
    }
示例#10
0
        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();
            }
        }
示例#11
0
    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);
    }
示例#12
0
文件: FlagScript.cs 项目: RSK11/ctf
 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;
     }
 }
示例#13
0
 public override void PlayerJoin(int id, string name)
 {
     playerList[id] = new CTFPlayer(id, name, Vector2.Zero, this);
 }
示例#14
0
文件: Flag.cs 项目: C0BR4X/Bomberman
 public void Dropped()
 {
     this.player = null;
     taken       = false;
     GetComponent <Collider>().enabled = true;
 }
示例#15
0
文件: HealthScript.cs 项目: RSK11/ctf
 public void SetPlayer(CTFPlayer target)
 {
     player = target;
 }