예제 #1
0
        public override void OnHitNPC(NPC target, int damage, float knockback, bool crit)
        {
            FishPlayer        pl    = Main.player[projectile.owner].GetModPlayer <FishPlayer>();
            PoweredBaitDebuff pbdbf = mod.GetBuff <PoweredBaitDebuff>();

            if (pl.hasAnyBaitDebuffs())
            {
                target.AddBuff(pbdbf.Type, 120);
                FishGlobalNPC gnpc    = target.GetGlobalNPC <FishGlobalNPC>();
                List <Player> players = new List <Player>();
                players.Add(Main.player[projectile.owner]);
                List <int> debuffs = pbdbf.getBaitDebuffsFromPlayers(players);
                pbdbf.addAllBuffsToList(target, gnpc, debuffs);
            }
        }
예제 #2
0
        public void addAllBuffsToList(NPC npc, FishGlobalNPC fnpc, List <int> recurringDebuffs)
        {
            int size = fnpc.debuffsPresent.Count;

            for (int i = 0; i < recurringDebuffs.Count; i++)
            {
                if (!fnpc.debuffsPresent.Contains(recurringDebuffs[i]))
                {
                    fnpc.debuffsPresent.Add(recurringDebuffs[i]);
                }
            }
            if (size < fnpc.debuffsPresent.Count)
            {
                fnpc.debuffsPresent.Sort();
                fnpc.updateCurrentInflictedBaitDebuffs(npc);
            }
        }
예제 #3
0
        public override void Update(NPC npc, ref int buffIndex)
        {
            List <int>    recurringDebuffs = getBaitDebuffsFromPlayers(Bobber.getOwnersOfBobbersAttatchedTo(npc));
            FishGlobalNPC fnpc             = npc.GetGlobalNPC <FishGlobalNPC>();

            if (recurringDebuffs.Count > 0)
            {
                npc.buffTime[buffIndex] = 120;
                addAllBuffsToList(npc, fnpc, recurringDebuffs);
            }
            int id = 0;

            for (int i = 0; i < fnpc.debuffsPresent.Count; i++)
            {
                id = fnpc.debuffsPresent[i];
                fnpc.UpdateDebuffsByID(npc, ref id, 120, buffIndex);
            }
            if (npc.buffTime[buffIndex] <= 2)
            {
                fnpc.debuffsPresent.Clear();
            }
        }
예제 #4
0
        public override void Update(NPC npc, ref int buffIndex)
        {
            FishGlobalNPC gnpc = npc.GetGlobalNPC <FishGlobalNPC>();

            gnpc.solarFire = true;
        }
예제 #5
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());
                }
            }
        }
예제 #6
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());
                }
            }
        }
예제 #7
0
        private bool hitAndAttachProjectile(NPC npc)
        {
            if (!npc.active || npc.immortal || npc.dontTakeDamage)
            {
                if (npc.type != NPCID.TargetDummy)
                {
                    return(false);
                }
            }
            if (!attatchesToAllies &&
                (npc.friendly && !(npc.type == NPCID.Guide && Main.player[projectile.owner].killGuide) && !(npc.type == NPCID.Clothier && Main.player[projectile.owner].killClothier))
                )
            {
                return(false);
            }
            if (!npc.friendly && !attatchesToEnemies)
            {
                return(false);
            }

            bool?b = NPCLoader.CanBeHitByProjectile(npc, projectile);

            if (b.HasValue && !b.Value)
            {
                return(false);
            }
            b = ProjectileLoader.CanHitNPC(projectile, npc);
            if (b.HasValue && !b.Value)
            {
                return(false);
            }
            b = PlayerHooks.CanHitNPCWithProj(projectile, npc);
            if (b.HasValue && !b.Value)
            {
                return(false);
            }

            npcIndex = (short)npc.whoAmI;
            npc.PlayerInteraction(projectile.owner);
            FishGlobalNPC fnpc = npc.GetGlobalNPC <FishGlobalNPC>(mod);

            fnpc.isHooked++;
            FishPlayer fOwner = Main.player[projectile.owner].GetModPlayer <FishPlayer>(mod);

            if (fOwner.seals)
            {
                fnpc.isSealed++;
            }
            projectile.Center = npc.Center;
            updatePos         = false;


            if (Main.netMode != 0)
            {
                /*
                 * ModPacket pk = mod.GetPacket();
                 * pk.Write((byte)2);
                 * pk.Write((ushort)(projectile.whoAmI));
                 * pk.Write(npcIndex);
                 * pk.Write(projectile.ai[0]);
                 * pk.Send();*/
                NetMessage.SendData(27, -1, -1, null, projectile.whoAmI, 0f, 0f, 0f, 0, 0, 0);
            }

            /*  if(projectile.damage > 0)
             * {
             *    //Main.NewText("Entered npc " + npcIndex + " into bobber " + projectile.whoAmI + " from player " + projectile.owner + ";");
             *    damageNPC(npc);
             * }*/
            return(true);
        }