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); }
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); } }
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); }
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); }
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); }
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); } }
public override void HandlePacket(BinaryReader reader, int whoAmI) { MPPacketHandler.HandlePacket(reader, whoAmI); }