Exemplo n.º 1
0
        public override void HandlePacket(BinaryReader reader, int whoAmI)
        {
            int i = reader.ReadByte();

            try
            {
                if (i == 0 && Main.netMode == 2)
                {
                    int idx  = reader.ReadInt16();
                    int proj = reader.ReadUInt16();
                    int posX = reader.ReadInt32();
                    int posY = reader.ReadInt32();
                    if (idx <= -1)
                    {
                        return;
                    }
                    Bobber bob    = (Bobber)(Main.projectile[proj].modProjectile);
                    Entity target = bob.projectile;
                    if (idx < Main.npc.Length)
                    {
                        target = Main.npc[idx];
                    }
                    else if (idx < Main.npc.Length + Main.player.Length)
                    {
                        target = Main.player[idx - Main.npc.Length];
                    }


                    bob.npcIndex = (short)idx;

                    target.Center         = new Microsoft.Xna.Framework.Vector2(posX, posY);
                    bob.projectile.Center = target.Center;
                }
                if (i == 1 && Main.netMode == 2)
                {
                    int        p      = reader.ReadUInt16();
                    int        mimicX = reader.ReadInt32();
                    int        mimicY = reader.ReadInt32();
                    FishPlayer f      = Main.player[p].GetModPlayer <FishPlayer>(this);
                    if (f != null)
                    {
                        f.mimicX       = mimicX;
                        f.mimicY       = mimicY;
                        f.mimicToSpawn = true;
                    }
                }
                if (i == 2)
                {
                    int   proj     = reader.ReadUInt16();
                    short npcIndex = reader.ReadInt16();
                    float ai0      = reader.ReadSingle();
                    Main.projectile[proj].ai[0] = ai0;
                    ((Bobber)(Main.projectile[proj].modProjectile)).npcIndex = npcIndex;
                }
                if (i == 3 && Main.netMode == 1)
                {
                    int dmg = reader.ReadInt32();
                    if (Main.player[Main.myPlayer].accDreamCatcher)
                    {
                        Main.player[Main.myPlayer].addDPS(dmg);
                    }
                }
                if (i == 4 && Main.netMode != 2)
                {
                    int    p      = reader.ReadUInt16();
                    int    heal   = reader.ReadInt32();
                    Player player = Main.player[p];
                    if (player.statLifeMax2 > player.statLife)
                    {
                        player.statLife += heal;
                        if (player.statLife > player.statLifeMax2)
                        {
                            player.statLife = player.statLifeMax2;
                        }
                        player.HealEffect(heal);
                    }
                }

                if (i == 5 && Main.netMode != 2)
                {
                    int    p      = reader.ReadUInt16();
                    int    syphon = reader.ReadInt32();
                    Player player = Main.player[p];
                    if (player.statManaMax2 > player.statMana)
                    {
                        player.statMana += syphon;
                        if (player.statMana > player.statManaMax2)
                        {
                            player.statMana = player.statManaMax2;
                        }
                        player.ManaEffect(syphon);
                    }
                }
                if (i == 6)
                {
                    int   who = reader.ReadInt16();
                    float x   = reader.ReadSingle();
                    float y   = reader.ReadSingle();
                    //float xSpeed = reader.ReadSingle();
                    //float ySpeed = reader.ReadSingle();

                    if (who >= 0 && who < Main.npc.Length)
                    {
                        FishGlobalNPC npcGlobal = Main.npc[who].GetGlobalNPC <FishGlobalNPC>();
                        //npcGlobal.newSpeed = new Vector2(xSpeed, ySpeed);
                        npcGlobal.newCenter = new Vector2(x, y);
                    }
                    else if (who >= Main.npc.Length && who < Main.npc.Length + Main.player.Length)
                    {
                        FishPlayer p = Main.player[who - Main.npc.Length].GetModPlayer <FishPlayer>();
                        //p.newSpeed = new Vector2(xSpeed, ySpeed);
                        p.newCenter = new Vector2(x, y);
                    }
                    else
                    {
                        return;
                    }
                    if (Main.netMode == NetmodeID.Server)
                    {
                        ModPacket pk = GetPacket();
                        pk.Write((byte)6);
                        pk.Write((short)who);
                        pk.Write(x);
                        pk.Write(y);
                        // pk.Write(xSpeed);
                        // pk.Write(ySpeed);
                        pk.Send();
                    }
                }
                if (i == 7)
                {
                    int   who = reader.ReadInt16();
                    float x   = reader.ReadSingle();
                    float y   = reader.ReadSingle();
                    //float xSpeed = reader.ReadSingle();
                    //float ySpeed = reader.ReadSingle();

                    if (Main.netMode != NetmodeID.MultiplayerClient && who != Main.myPlayer)
                    {
                        FishPlayer p = Main.player[who].GetModPlayer <FishPlayer>();
                        //p.newSpeed = new Vector2(xSpeed, ySpeed);
                        p.newCenter = new Vector2(x, y);
                    }
                    else
                    {
                        return;
                    }
                    if (Main.netMode == NetmodeID.Server)
                    {
                        ModPacket pk = GetPacket();
                        pk.Write((byte)7);
                        pk.Write((short)who);
                        pk.Write(x);
                        pk.Write(y);
                        // pk.Write(xSpeed);
                        // pk.Write(ySpeed);
                        pk.Send();
                    }
                }
            }
            catch (Exception ex)
            {
                if (Main.netMode != 2)
                {
                    Main.NewText("Exception on message " + i + ": " + ex.ToString());
                }
                else
                {
                    Console.WriteLine("Exception on message " + i + ": " + ex.ToString());
                }
            }
        }
Exemplo n.º 2
0
        public override void HandlePacket(BinaryReader reader, int whoAmI)
        {
            int i = reader.ReadByte();

            try
            {
                if (i == 0 && Main.netMode == 2)
                {
                    int idx  = reader.ReadInt16();
                    int proj = reader.ReadUInt16();
                    int posX = reader.ReadInt32();
                    int posY = reader.ReadInt32();
                    if (idx <= -1)
                    {
                        return;
                    }
                    Bobber bob    = (Bobber)(Main.projectile[proj].modProjectile);
                    Entity target = bob.projectile;
                    if (idx < Main.npc.Length)
                    {
                        target = Main.npc[idx];
                    }
                    else if (idx < Main.npc.Length + Main.player.Length)
                    {
                        target = Main.player[idx - Main.npc.Length];
                    }


                    bob.npcIndex = (short)idx;

                    target.Center         = new Microsoft.Xna.Framework.Vector2(posX, posY);
                    bob.projectile.Center = target.Center;
                }
                if (i == 1 && Main.netMode == 2)
                {
                    int        p      = reader.ReadUInt16();
                    int        mimicX = reader.ReadInt32();
                    int        mimicY = reader.ReadInt32();
                    FishPlayer f      = Main.player[p].GetModPlayer <FishPlayer>(this);
                    if (f != null)
                    {
                        f.mimicX       = mimicX;
                        f.mimicY       = mimicY;
                        f.mimicToSpawn = true;
                    }
                }
                if (i == 2)
                {
                    int   proj     = reader.ReadUInt16();
                    short npcIndex = reader.ReadInt16();
                    float ai0      = reader.ReadSingle();
                    Main.projectile[proj].ai[0] = ai0;
                    ((Bobber)(Main.projectile[proj].modProjectile)).npcIndex = npcIndex;
                }
                if (i == 3 && Main.netMode == 1)
                {
                    int dmg = reader.ReadInt32();
                    if (Main.player[Main.myPlayer].accDreamCatcher)
                    {
                        Main.player[Main.myPlayer].addDPS(dmg);
                    }
                }
                if (i == 4 && Main.netMode != 2)
                {
                    int    p      = reader.ReadUInt16();
                    int    heal   = reader.ReadInt32();
                    Player player = Main.player[p];
                    if (player.statLifeMax2 > player.statLife)
                    {
                        player.statLife += heal;
                        if (player.statLife > player.statLifeMax2)
                        {
                            player.statLife = player.statLifeMax2;
                        }
                        player.HealEffect(heal);
                    }
                }

                if (i == 5 && Main.netMode != 2)
                {
                    int    p      = reader.ReadUInt16();
                    int    syphon = reader.ReadInt32();
                    Player player = Main.player[p];
                    if (player.statManaMax2 > player.statMana)
                    {
                        player.statMana += syphon;
                        if (player.statMana > player.statManaMax2)
                        {
                            player.statMana = player.statManaMax2;
                        }
                        player.ManaEffect(syphon);
                    }
                }
                if (i == 6)
                {
                    int   who = reader.ReadInt16();
                    float x   = reader.ReadSingle();
                    float y   = reader.ReadSingle();
                    //float xSpeed = reader.ReadSingle();
                    //float ySpeed = reader.ReadSingle();

                    if (who >= 0 && who < Main.npc.Length)
                    {
                        FishGlobalNPC npcGlobal = Main.npc[who].GetGlobalNPC <FishGlobalNPC>();
                        //npcGlobal.newSpeed = new Vector2(xSpeed, ySpeed);
                        npcGlobal.newCenter = new Vector2(x, y);
                    }
                    else if (who >= Main.npc.Length && who < Main.npc.Length + Main.player.Length)
                    {
                        FishPlayer p = Main.player[who - Main.npc.Length].GetModPlayer <FishPlayer>();
                        //p.newSpeed = new Vector2(xSpeed, ySpeed);
                        p.newCenter = new Vector2(x, y);
                    }
                    else
                    {
                        return;
                    }
                    if (Main.netMode == NetmodeID.Server)
                    {
                        ModPacket pk = GetPacket();
                        pk.Write((byte)6);
                        pk.Write((short)who);
                        pk.Write(x);
                        pk.Write(y);
                        // pk.Write(xSpeed);
                        // pk.Write(ySpeed);
                        pk.Send();
                    }
                }
                if (i == 7)
                {
                    int   who = reader.ReadInt16();
                    float x   = reader.ReadSingle();
                    float y   = reader.ReadSingle();
                    //float xSpeed = reader.ReadSingle();
                    //float ySpeed = reader.ReadSingle();

                    if (Main.netMode != NetmodeID.MultiplayerClient && who != Main.myPlayer)
                    {
                        FishPlayer p = Main.player[who].GetModPlayer <FishPlayer>();
                        //p.newSpeed = new Vector2(xSpeed, ySpeed);
                        p.newCenter = new Vector2(x, y);
                    }
                    else
                    {
                        return;
                    }
                    if (Main.netMode == NetmodeID.Server)
                    {
                        ModPacket pk = GetPacket();
                        pk.Write((byte)7);
                        pk.Write((short)who);
                        pk.Write(x);
                        pk.Write(y);
                        // pk.Write(xSpeed);
                        // pk.Write(ySpeed);
                        pk.Send();
                    }
                }
                if (i == 9)
                {
                    for (int k = 0; k < Main.player.Length; k++)
                    {
                        if (Main.player[k].active && !Main.player[k].dead)
                        {
                            FishPlayer pl = Main.player[k].GetModPlayer <FishPlayer>();
                            if (pl.hasAnyBaitBuffs() || pl.hasAnyBaitDebuffs())
                            {
                                pl.updateBaits();
                            }
                        }
                    }
                }
                if (i == 10)
                {
                    int   plr     = reader.ReadInt16();
                    int[] buffs   = new int[4];
                    int[] debuffs = new int[4];
                    // ErrorLogger.Log("Recieved update package. Player no " + plr);
                    int        buffTime = reader.ReadInt32();
                    FishPlayer pl       = Main.player[plr].GetModPlayer <FishPlayer>();
                    for (int k = 0; k < pl.baitBuff.Length; k++)
                    {
                        buffs[k] = reader.ReadInt32();
                    }
                    for (int k = 0; k < pl.baitDebuff.Length; k++)
                    {
                        debuffs[k] = reader.ReadInt32();
                    }
                    if (Main.netMode == NetmodeID.MultiplayerClient && Main.myPlayer == plr)
                    {
                        return;
                    }
                    int pbtype = BuffType <PoweredBaitBuff>();
                    for (int j = 0; j < 22; j++)
                    {
                        if (pl.player.buffType[j] == pbtype)
                        {
                            pl.player.buffTime[j] = buffTime;
                            pl.baitTimer          = buffTime;
                            for (int k = 0; k < pl.baitBuff.Length; k++)
                            {
                                pl.addBaitBuffs(buffTime, k, buffs[k]);
                            }
                            for (int k = 0; k < pl.baitDebuff.Length; k++)
                            {
                                pl.addBaitDebuffs(buffTime, k, debuffs[k]);
                            }
                        }
                    }
                    for (int j = 0; j < 22; j++)
                    {
                        if (pl.player.buffType[j] <= 0)
                        {
                            pl.player.buffType[j] = pbtype;
                            pl.player.buffTime[j] = buffTime;
                            pl.baitTimer          = buffTime;
                            for (int k = 0; k < pl.baitBuff.Length; k++)
                            {
                                pl.addBaitBuffs(buffTime, k, buffs[k]);
                            }
                            for (int k = 0; k < pl.baitDebuff.Length; k++)
                            {
                                pl.addBaitDebuffs(buffTime, k, debuffs[k]);
                            }
                        }
                    }
                    if (Main.netMode == NetmodeID.Server)
                    {
                        ModPacket pk = GetPacket();
                        pk.Write((byte)10);
                        pk.Write((short)plr);
                        pk.Write(buffTime);
                        for (int k = 0; k < pl.baitBuff.Length; k++)
                        {
                            pk.Write(pl.baitBuff[k]);
                        }
                        for (int k = 0; k < pl.baitDebuff.Length; k++)
                        {
                            pk.Write(pl.baitDebuff[k]);
                        }
                        pk.Send();
                    }
                }
                if (i == 12)
                {
                    int        updatee = reader.ReadInt32();
                    int        count   = reader.ReadInt32();
                    List <int> debuffs = new List <int>();
                    for (int k = 0; k < count; k++)
                    {
                        debuffs.Add(reader.ReadInt32());
                    }
                    if (updatee >= Main.npc.Length)
                    {
                        FishPlayer pl = Main.player[updatee - Main.npc.Length].GetModPlayer <FishPlayer>();
                        pl.debuffsPresent.Clear();
                        pl.debuffsPresent.AddRange(debuffs);
                    }
                    else
                    {
                        NPC           npc   = Main.npc[updatee];
                        FishGlobalNPC fgnpc = npc.GetGlobalNPC <FishGlobalNPC>();
                        fgnpc.debuffsPresent.Clear();
                        fgnpc.debuffsPresent.AddRange(debuffs);
                    }
                    if (Main.netMode == NetmodeID.Server)
                    {
                        ModPacket pk = GetPacket();
                        pk.Write((byte)UnuBattleRods.Message.DebuffUpdate);
                        pk.Write(updatee);
                        pk.Write(count);
                        for (int k = 0; k < count; k++)
                        {
                            pk.Write(debuffs[k]);
                        }
                        pk.Send();
                    }
                }
                if (i == 14)//Syncronize Config to server options
                {
                    byte flags = reader.ReadByte();
                    harderLureRecipes = ((flags & 1) == 1);
                    allowFishedItems  = ((flags & 2) == 2);
                    int fishCount = reader.ReadInt32();
                    fishToReplace.Clear();
                    for (int k = 0; k < fishCount; k++)
                    {
                        fishToReplace.Add(reader.ReadString());
                    }
                }
            }
            catch (Exception ex)
            {
                if (Main.netMode != 2)
                {
                    Main.NewText("Exception on message " + i + ": " + ex.ToString());
                }
                else
                {
                    Console.WriteLine("Exception on message " + i + ": " + ex.ToString());
                }
            }
        }