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); } }
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); } }
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(); } }
public override void Update(NPC npc, ref int buffIndex) { FishGlobalNPC gnpc = npc.GetGlobalNPC <FishGlobalNPC>(); gnpc.solarFire = true; }
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()); } } }
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()); } } }
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); }