Пример #1
0
        public override bool CheckDead(NPC npc)
        {
            if (HaveBufferProperty("GrowtherStep"))
            {
                switch (GetBufferProperty("GrowtherStep"))
                {
                case "Mini":
                    SetBufferProperty("GrowtherStep", "Normal");
                    break;

                case "Normal":
                    SetBufferProperty("GrowtherStep", "Giant");
                    break;

                case "Giant":
                    SetBufferProperty("GrowtherStep", "Colossus");
                    break;

                case "Colossus":
                    SetBufferProperty("GrowtherStep", "Titan");
                    break;

                case "Titan":
                    return(false);
                }
                npc      = NPCUtils.SizeShiftMult(npc, GetBufferProperty("GrowtherStep"));
                npc.life = npc.lifeMax;
                MPPacketHandler.SendNpcUpdate(mod, npc);
                //NetMessage.SendData(23, -1, -1, null, npc.whoAmI);
            }
            return(true);
        }
Пример #2
0
        public override void NPCLoot(NPC npc)
        {
            if (HaveModifier(NPCModifier.Cluster) && !HaveBufferProperty("clustered"))
            {
                int clusterRN = Mathf.RandomInt(4, 8);
                for (int i = 0; i < clusterRN; i++)
                {
                    NPCUtils.SpawnSized(npc, specialBuffer);
                }
            }

            if (npc.damage == 0)
            {
                return;
            }
            if (npc.townNPC)
            {
                return;
            }

            Player player = Array.Find(Main.player, p => p.active);

            if (Main.netMode == 0)
            {
                player = Main.LocalPlayer; //if local , well it's simple
            }
            else if (Main.player[npc.target].active)
            {
                player = Main.player[npc.target];
            }
            else
            {
                return;
            }
            int XPToDrop = NPCUtils.GetExp(npc);

            if (npc.rarity > 0)
            {
                XPToDrop = (int)(XPToDrop * 1.5f);
            }
            if (npc.boss)
            {
                XPToDrop = XPToDrop * 2;
                WorldManager.OnBossDefeated(npc);
            }

            XPToDrop = Mathf.CeilInt(XPToDrop * Config.gpConfig.XpMultiplier);

            int xplevel = level + tier;

            if (!Config.gpConfig.XPReduction)
            {
                xplevel = int.MaxValue;
            }
            MPPacketHandler.SendXPPacket(mod, XPToDrop, xplevel);
            if (Main.netMode == 0)
            {
                player.GetModPlayer <RPGPlayer>().AddXp(XPToDrop, xplevel);
            }
        }
Пример #3
0
 public override void OnHitByProjectile(NPC npc, Projectile projectile, int damage, float knockback, bool crit)
 {
     if (HaveModifier(NPCModifier.Dancer))
     {
         if (Mathf.Random(0, 1) < 0.2f)
         {
             damage = 0;
             Main.PlaySound(SoundID.DoubleJump, npc.position);
         }
     }
     base.OnHitByProjectile(npc, projectile, damage, knockback, crit);
     MPPacketHandler.SendNpcUpdate(mod, npc);
     //NetMessage.SendData(23, -1, -1, null, npc.whoAmI);
 }
Пример #4
0
 public override void OnHitByProjectile(NPC npc, Projectile projectile, int damage, float knockback, bool crit)
 {
     base.OnHitByProjectile(npc, projectile, damage, knockback, crit);
     MPPacketHandler.SendNpcUpdate(mod, npc);
     //NetMessage.SendData(23, -1, -1, null, npc.whoAmI);
 }
Пример #5
0
 public override void OnHitByItem(NPC npc, Player player, Item item, int damage, float knockback, bool crit)
 {
     base.OnHitByItem(npc, player, item, damage, knockback, crit);
     MPPacketHandler.SendNpcUpdate(mod, npc);
     //NetMessage.SendData(23, -1, -1, null, npc.whoAmI);
 }
Пример #6
0
        public override void PostAI(NPC npc)
        {
            Effect(npc);
            if (npc.dontTakeDamage && dontTakeDamageTime > 0)
            {
                dontTakeDamageTime -= NPCUtils.DELTATIME;
                if (dontTakeDamageTime <= 0)
                {
                    npc.dontTakeDamage = false;
                    dontTakeDamageTime = 0;
                }
            }

            if (!StatsCreated && Main.netMode != 1)
            {
                StatsCreated = true;
                SetInit(npc);
                SetStats(npc);
                //MPDebug.Log(mod,"Server Side : \n"+ npc.GetGivenOrTypeNetName()+ " ID : "+ npc.whoAmI + "\nLvl."+ (getLevel+getTier)+"\nHealth : " + npc.life + " / " + npc.lifeMax + "\nDamage : " + npc.damage + "\nDef : " + npc.defense + "\nTier : " + getRank + "\n");
                MPPacketHandler.SendNpcSpawn(mod, npc, tier, level, this);
                //NetMessage.SendData(23, -1, -1, null, npc.whoAmI);

                npc.GivenName = NPCUtils.GetNpcNameChange(npc, tier, level, Rank);
            }

            if (Main.netMode == 1)
            {
                if (!StatsFrame0)
                {
                    StatsFrame0 = true;
                }

                else if (!StatsCreated)
                {
                    StatsCreated = true;
                    MPPacketHandler.AskNpcInfo(mod, npc);
                }
            }



            if (Main.netMode != 1)
            {
                debuffDamage += NPCUtils.UpdateDOT(npc);
                int applydamage = 0;

                if (debuffDamage > 0)
                {
                    applydamage    = Mathf.FloorInt(debuffDamage);
                    debuffDamage  -= applydamage;
                    npc.life      -= applydamage;
                    npc.lifeRegen -= applydamage;
                    if (npc.life <= 0)
                    {
                        npc.checkDead();
                    }
                }


                if (HaveModifier(NPCModifier.Berserker))
                {
                    npc.damage = Mathf.RoundInt((float)baseDamage * (2 - ((float)npc.life / (float)npc.lifeMax)));
                }

                //MPPacketHandler.SendNpcUpdate(mod,npc);
            }
        }
Пример #7
0
 public override void HandlePacket(BinaryReader reader, int whoAmI)
 {
     MPPacketHandler.HandlePacket(reader, whoAmI);
 }