public static ServerPlayer CreateNewPlayer(Player p) { var instance = new ServerPlayer(p); PlayerHooks.SetStartInventory(p); var player = new PlayerInfo { Name = p.name, ID = ServerSideCharacter2.PlayerCollection.GetNextID(), HasPassword = false, Group = "default", Password = "", LifeMax = 100, StatLife = 100, ManaMax = 20, StatMana = 20, KillCount = 0, Rank = 1500, EloRank = 1500, }; var i = 0; foreach (var item in ServerSideCharacter2.Config.startUpInventory) { player.inventory[i++] = item; } instance._info = player; instance.LoadFromInfo(); OnPlayerNewAccount?.Invoke(instance, new EventArgs()); return(instance); }
//------------------------------------------------------// //------------------BASE PLAYER CLASS-------------------// //------------------------------------------------------// // Contains methods relating to players. // //------------------------------------------------------// // Author(s): Grox the Great // //------------------------------------------------------// //NOTE: DO NOT CALL IN ANY ConsumeAmmo HOOK!!! Will cause an infinite loop! public static bool ConsumeAmmo(Player player, Item item, Item ammo) { bool consume = true; if (player.magicQuiver && ammo.ammo == AmmoID.Arrow && Main.rand.Next(5) == 0) { consume = false; } if (player.ammoBox && Main.rand.Next(5) == 0) { consume = false; } if (player.ammoPotion && Main.rand.Next(5) == 0) { consume = false; } if (player.ammoCost80 && Main.rand.Next(5) == 0) { consume = false; } if (player.ammoCost75 && Main.rand.Next(4) == 0) { consume = false; } if (!PlayerHooks.ConsumeAmmo(player, item, ammo)) { consume = false; } if (!ItemLoader.ConsumeAmmo(item, ammo, player)) { consume = false; } return(consume); }
protected void PostAccessoryUpdate(SGAPlayer sgaplayer) { Player player = sgaplayer.player; //Main.NewText(sgaplayer.energyShieldAmmountAndRecharge.Item2); if (sgaplayer.GetEnergyShieldAmmountAndRecharge.Item2 > 0) { if (sgaplayer.energyShieldAmmountAndRecharge.Item3 < 1 && !sgaplayer.Shieldbreak) { sgaplayer.ShieldRecharge(); if (sgaplayer.energyShieldAmmountAndRecharge.Item3 == 0) { sgaplayer.StartShieldRecharge(); } float rechargerate = (sgaplayer.jellybruSet ? 600f : 180f); float multime = 1f; PlayerHooks.NaturalLifeRegen(player, ref multime); rechargerate /= multime; sgaplayer.energyShieldAmmountAndRecharge.Item1 = (int)MathHelper.Clamp((int)Math.Ceiling(sgaplayer.energyShieldAmmountAndRecharge.Item1 + (sgaplayer.energyShieldAmmountAndRecharge.Item2 / rechargerate)), 0, sgaplayer.energyShieldAmmountAndRecharge.Item2); } } if (sgaplayer.energyShieldReservation > 0) { int percent = (int)(player.statLifeMax2 * (1f - sgaplayer.energyShieldReservation)); if (player.statLife > percent) { player.statLife = percent; } } }
public static int CalculatePriceForHeal() { int health = Main.player[Main.myPlayer].statLifeMax2 - Main.player[Main.myPlayer].statLife; int num27 = Main.player[Main.myPlayer].statLifeMax2 - Main.player[Main.myPlayer].statLife; for (int k = 0; k < Player.MaxBuffs; k++) { int num6 = Main.player[Main.myPlayer].buffType[k]; if (Main.debuff[num6] && Main.player[Main.myPlayer].buffTime[k] > 5 && BuffLoader.CanBeCleared(num6)) { num27 += 1000; } } int num23 = num27; PlayerHooks.ModifyNursePrice(Main.player[Main.myPlayer], Main.npc[Main.player[Main.myPlayer].talkNPC], health, true, ref num23); if (num23 > 0) { num23 = (int)((double)num23 * 0.75); if (num23 < 1) { num23 = 1; } } return(num23); }
public bool HasPermissionToCreateProjectile(TSPlayer ply) { if (ply == null) return false; if (ply.HasPermission(Permissions.canusebannedprojectiles)) return true; PermissionHookResult hookResult = PlayerHooks.OnPlayerProjbanPermission(ply, this); if (hookResult != PermissionHookResult.Unhandled) return hookResult == PermissionHookResult.Granted; var cur = ply.Group; var traversed = new List<Group>(); while (cur != null) { if (AllowedGroups.Contains(cur.Name)) { return true; } if (traversed.Contains(cur)) { throw new InvalidOperationException("Infinite group parenting ({0})".SFormat(cur.Name)); } traversed.Add(cur); cur = cur.Parent; } return false; // could add in the other permissions in this class instead of a giant if switch. }
public static void Heal() { int num27 = CalculatePriceForHeal(); int health = Main.player[Main.myPlayer].statLifeMax2 - Main.player[Main.myPlayer].statLife; if (health == 0) { return; } if (Main.player[Main.myPlayer].BuyItem(num27, -1)) { AchievementsHelper.HandleNurseService(num27); Main.PlaySound(SoundID.Item4, -1, -1); Main.player[Main.myPlayer].HealEffect(health, true); Main.player[Main.myPlayer].statLife += health; if (true) { for (int i = 0; i < Player.MaxBuffs; i++) { int num9 = Main.player[Main.myPlayer].buffType[i]; if (Main.debuff[num9] && Main.player[Main.myPlayer].buffTime[i] > 0 && BuffLoader.CanBeCleared(num9)) { Main.player[Main.myPlayer].DelBuff(i); i = -1; } } } PlayerHooks.PostNurseHeal(Main.player[Main.myPlayer], Main.npc[Main.player[Main.myPlayer].talkNPC], health, true, num27); } }
private void PlayerHooks_KeyPressed(object sender, KeyboardEventArgs e) { //Utils.ShowInfoMessage($"Pressing {string.Join(", ", e.Keys.Select(k => k.ToString()))}"); // Release if (e.Keys.Count == 0) { if (keyCombination.Count > 1) { PlayerHooks.InvokeKeysTapped(keyCombination); keyCombination = new List <Keys>(); } else { Keys[] oldPressedKeys = Main.oldKeyState.GetPressedKeys(); if (oldPressedKeys.Length == 1) { PlayerHooks.InvokeKeysTapped(oldPressedKeys.ToList()); } } } else if (e.Keys.Count > 1 && e.Keys.Count > keyCombination.Count) { keyCombination = e.Keys; } }
public override void HoldItem(Player player) { if (player.noBuilding || player.whoAmI != Main.myPlayer || Shovel <= 0) { return; } if (player.position.X / 16f - Player.tileRangeX - item.tileBoost > Player.tileTargetX || (player.position.X + player.width) / 16f + Player.tileRangeX + item.tileBoost - 1f < Player.tileTargetX || player.position.Y / 16f - Player.tileRangeY - item.tileBoost > Player.tileTargetY || (player.position.Y + player.height) / 16f + Player.tileRangeY + item.tileBoost - 2f < Player.tileTargetY) { return; } if (item.pick > 0) { Pick = item.pick; item.pick = 0; if (player.selectedItem == 58) { Main.mouseItem = item.Clone(); } } if (!Main.GamepadDisableCursorItemIcon) { player.showItemIcon = true; Main.ItemIconCacheUpdate(item.type); } Tile tile = Main.tile[Player.tileTargetX, Player.tileTargetY]; if (tile.active() && !Main.tileAxe[tile.type] && !Main.tileHammer[tile.type] && player.toolTime == 0 && player.itemAnimation > 0 && player.controlUseItem) { PickTile(player, Player.tileTargetX, Player.tileTargetY); player.itemTime = (int)(item.useTime * player.pickSpeed / PlayerHooks.TotalUseTimeMultiplier(player, item)); } }
public override void PostBuyItem(NPC vendor, Item[] shopInventory, Item item) { Item shopItem = shopInventory.FirstOrDefault(x => x.type == item.type); if (ShopStackUI.visible && !Terraria.UI.ItemSlot.ShiftInUse && PlayerHooks.CanBuyItem(player, Main.npc[player.talkNPC], shopInventory, shopItem) && (Main.mouseItem.stack < Main.mouseItem.maxStack) && (Main.mouseItem.stack < ShopStackUI.Instance.ShopStack) && player.BuyItem(shopItem.GetStoreValue(), shopItem.shopSpecialCurrency)) { Main.mouseItem.stack++; if (Main.stackSplit == 0) { Main.stackSplit = 15; } else { Main.stackSplit = Main.stackDelay; } if (shopItem.buyOnce && --shopItem.stack <= 0) { shopItem.SetDefaults(0, false); } //PlayerHooks.PostBuyItem(player, Main.npc[player.talkNPC], shopInventory, Main.mouseItem); } }
bool canHit(NPC npc) { if (!(NPCLoader.CanBeHitByProjectile(npc, projectile) ?? true)) { return(false); } if (!(PlayerHooks.CanHitNPCWithProj(projectile, npc) ?? true)) { return(false); } Player player = Main.player[projectile.owner]; if (npc.friendly) { switch (npc.type) { case NPCID.Guide: return(player.killGuide); case NPCID.Clothier: return(player.killClothier); default: return(false); } } return(true); }
public override void PostItemCheck() { if (triggerItemTime) { player.itemTime = PlayerHooks.TotalUseTime(player.HeldItem.useTime * player.tileSpeed, player, player.HeldItem); } triggerItemTime = false; }
//// public static void FullVanillaReset(Player player) { for (int i = 0; i < player.inventory.Length; i++) { player.inventory[i] = new Item(); } for (int i = 0; i < player.armor.Length; i++) { player.armor[i] = new Item(); } for (int i = 0; i < player.bank.item.Length; i++) { player.bank.item[i] = new Item(); } for (int i = 0; i < player.bank2.item.Length; i++) { player.bank2.item[i] = new Item(); } for (int i = 0; i < player.bank3.item.Length; i++) { player.bank3.item[i] = new Item(); } for (int i = 0; i < player.dye.Length; i++) { player.dye[i] = new Item(); } for (int i = 0; i < player.miscDyes.Length; i++) { player.miscDyes[i] = new Item(); } for (int i = 0; i < player.miscEquips.Length; i++) { player.miscEquips[i] = new Item(); } for (int i = 0; i < player.buffType.Length; i++) { player.buffType[i] = 0; player.buffTime[i] = 0; } player.trashItem = new Item(); if (player.whoAmI == Main.myPlayer) { Main.mouseItem = new Item(); } player.statLifeMax = 100; player.statManaMax = 20; player.extraAccessory = false; player.anglerQuestsFinished = 0; player.bartenderQuestLog = 0; player.downedDD2EventAnyDifficulty = false; player.taxMoney = 0; PlayerHooks.SetStartInventory(player); }
public RegionFlags( Main game ) : base(game) { Order = 3; regions = new FlaggedRegionManager(); players = new RegionPlayer[255]; npchooks = new NPCHooks( regions ); playerhooks = new PlayerHooks( regions ); }
private bool hitAndAttachProjectile(NPC npc) { if (!npc.active || npc.immortal || npc.dontTakeDamage || (npc.friendly && !(npc.type == NPCID.Guide && Main.player[projectile.owner].killGuide) && !(npc.type == NPCID.Clothier && Main.player[projectile.owner].killClothier)) ) { if (npc.type != NPCID.TargetDummy) { 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.GetGlobalNPC <FishGlobalNPC>(mod).isHooked++; if (Main.player[projectile.owner].GetModPlayer <FishPlayer>(mod).seals) { npc.GetGlobalNPC <FishGlobalNPC>(mod).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); }
private bool hitAndAttachProjectile(Player p) { if (!attatchesToAllies && (!p.hostile || p.team == Main.player[projectile.owner].team)) { return(false); } if (!attatchesToEnemies && (p.hostile && p.team != Main.player[projectile.owner].team)) { return(false); } bool?b = PlayerHooks.CanHitPvpWithProj(projectile, p); if (b.HasValue && !b.Value) { return(false); } b = ProjectileLoader.CanHitPvp(projectile, p); if (b.HasValue && !b.Value) { return(false); } npcIndex = (short)(p.whoAmI + Main.npc.Length); FishPlayer fOwner = Main.player[projectile.owner].GetModPlayer <FishPlayer>(mod); p.GetModPlayer <FishPlayer>(mod).isHooked++; if (fOwner.seals) { p.GetModPlayer <FishPlayer>(mod).isSealed++; } projectile.Center = p.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) * { * damagePlayer(p); * }*/ return(true); }
public override bool UseItem(Player player) { if (player.itemAnimation > 0 && !player.GetModPlayer <SteviesModPlayer>().extendedLungs&& player.itemTime == 0) { player.itemTime = PlayerHooks.TotalUseTime(item.useTime, player, item); player.breath += 100; player.breathMax = 300; player.GetModPlayer <SteviesModPlayer>().extendedLungs = true; } return(false); }
public override bool UseItem(Item item, Player player) { if (item.healLife > 0 && player.GetModPlayer <OlympiumPlayer>().eleutherios) { int healLife = item.healLife; PlayerHooks.GetHealLife(player, item, false, ref healLife); player.AddBuff(ModContent.BuffType <EleutheriosBuff>(), (int)(healLife / 5f) * 60); } return(false); }
public sealed override bool PreAI() { SafeAI(); projectile.scale = projectile.ai[0] < 10 ? (projectile.ai[0] / 10f) : 1; Player player = Main.player[projectile.owner]; player.heldProj = projectile.whoAmI; if (player.HeldItem.useTurn) { player.direction = Math.Sign(player.velocity.X); if (player.direction == 0) { player.direction = player.oldDirection; } } int degrees = (int)((player.itemAnimation * -0.7) + 55) * player.direction * (int)player.gravDir; if (player.direction == 1) { degrees += 180; } if (!_statBuffed) { _statBuffed = true; float damageMult = player.meleeDamage; float damageFlat = 0; float add = 0; PlayerHooks.ModifyWeaponDamage(player, player.HeldItem, ref add, ref damageMult, ref damageFlat); minDamage = (int)(minDamage * damageMult) + (int)damageFlat; maxDamage = (int)(maxDamage * (1 + ((damageMult - 1) / 6))) + (int)damageFlat; } radians = degrees * (Math.PI / 180); if (player.channel && !released) { if (projectile.ai[0] == 0) { player.itemTime = 180; player.itemAnimation = 180; } if (projectile.ai[0] < ChargeTime) { projectile.ai[0]++; float rot = Main.rand.NextFloat(MathHelper.TwoPi); if (DustType != -1) { Dust.NewDustPerfect(projectile.Center + Vector2.One.RotatedBy(rot) * 35, DustType, -Vector2.One.RotatedBy(rot) * 1.5f, 0, default, projectile.ai[0] / 100f);
public override void ModifyHitNPC(Projectile projectile, NPC target, ref int damage, ref float knockback, ref bool crit, ref int hitDirection) { Player player = Main.player[projectile.owner]; int critChance = player.HeldItem.crit; ItemLoader.GetWeaponCrit(player.HeldItem, player, ref AlchemistPlayer.ModPlayer(player).arcaneCrit); PlayerHooks.GetWeaponCrit(player, player.HeldItem, ref AlchemistPlayer.ModPlayer(player).arcaneCrit); if (critChance >= 100 || Main.rand.Next(1, 101) <= critChance) { crit = true; } }
public override void UseStyle(Player player) { int totalTime = PlayerHooks.TotalUseTime(item.useTime, player, item); if (player.itemTime == totalTime / 2) { if (!firstuse && done) { firstuse = true; } } }
public override void UseStyle(Player player) { if (checkWarpLocation(player.GetModPlayer <tsorcRevampPlayer>().warpX, player.GetModPlayer <tsorcRevampPlayer>().warpY)) { if (Main.rand.NextBool()) //ambient dust during use // position, width, height, type, speed.X, speed.Y, alpha, color, scale { Dust.NewDust(player.position, player.width, player.height, 57, 0f, 0.5f, 150, default(Color), 1f); } if (player.itemTime == 0) { Main.NewText("Picking up where you left off...", 255, 240, 20); player.itemTime = (int)(item.useTime / PlayerHooks.TotalUseTimeMultiplier(player, item)); } else if (player.itemTime == (int)(item.useTime / PlayerHooks.TotalUseTimeMultiplier(player, item)) / 2) { for (int dusts = 0; dusts < 70; dusts++) //dusts on tp (source) { Dust.NewDust(player.position, player.width, player.height, 57, player.velocity.X * 0.5f, (player.velocity.Y * 0.5f) + 0.5f, 150, default(Color), 1.5f); } //destroy grapples player.grappling[0] = -1; player.grapCount = 0; for (int p = 0; p < 1000; p++) { if (Main.projectile[p].active && Main.projectile[p].owner == player.whoAmI && Main.projectile[p].aiStyle == 7) { Main.projectile[p].Kill(); } } player.position.X = (float)(player.GetModPlayer <tsorcRevampPlayer>().warpX * 16) - (float)((float)player.width / 2.0); player.position.Y = (float)(player.GetModPlayer <tsorcRevampPlayer>().warpY * 16) - (float)player.height; player.velocity.X = 0f; player.velocity.Y = 0f; player.fallStart = (int)player.Center.Y; for (int dusts = 0; dusts < 70; dusts++) //dusts on tp (destination) { Dust.NewDust(player.position, player.width, player.height, 57, player.velocity.X * 0.5f, (player.velocity.Y * 0.5f) + 0.5f * 0.5f, 150, default(Color), 1.5f); } } } else { Main.NewText("Your warp location is broken! Please file a bug report!", 255, 240, 20); } }
private void damagePlayer(Player p) { if (Main.netMode != 1 && projectile.damage > 0) { FishPlayer owner = Main.player[projectile.owner].GetModPlayer <FishPlayer>(mod); int dmg = (int)Math.Round(projectile.damage * (owner.bobberDamage + escalationBonus(owner))); dmg = Main.DamageVar(dmg); if (dmg < 1) { dmg = 1; } bool crit = Main.rand.Next(100) < owner.bobberCrit + Main.player[projectile.owner].inventory[Main.player[projectile.owner].selectedItem].crit; ProjectileLoader.ModifyHitPvp(projectile, p, ref dmg, ref crit); PlayerHooks.ModifyHitPvpWithProj(projectile, p, ref dmg, ref crit); Main.player[projectile.owner].OnHit(p.Center.X, p.Center.Y, p); /* if (crit) * { * dmg *= 2; * }*/ dmg = (int)p.Hurt(PlayerDeathReason.ByProjectile(projectile.owner, projectile.whoAmI), dmg, projectile.direction, true, false, crit, -1); if (Main.netMode == 2) { ModPacket pk = mod.GetPacket(); pk.Write((byte)3); pk.Write(dmg); pk.Send(projectile.owner, -1); } else { if (Main.player[projectile.owner].accDreamCatcher) { Main.player[projectile.owner].addDPS(dmg); } } ProjectileLoader.OnHitPvp(projectile, p, dmg, crit); PlayerHooks.OnHitPvpWithProj(projectile, p, dmg, crit); if (Main.netMode != 0) { NetMessage.SendPlayerHurt(p.whoAmI, PlayerDeathReason.ByProjectile(projectile.owner, projectile.whoAmI), dmg, projectile.direction, crit, true, 0, -1, -1); } } }
// UseStyle is called each frame that the item is being actively used. public override void UseStyle(Player player) { // Each frame, make some dust if (Main.rand.NextBool()) { int dust = Dust.NewDust(player.position, player.width, player.height, 57, 0f, 0f, 0, default(Color), 1.5f); Main.dust[dust].noGravity = true; Main.dust[dust].velocity *= 3f; Main.dust[dust].scale += 0.6f; } // This sets up the itemTime correctly. if (player.itemTime == 0) { player.itemTime = (int)(item.useTime / PlayerHooks.TotalUseTimeMultiplier(player, item)); } else if (player.itemTime == (int)(item.useTime / PlayerHooks.TotalUseTimeMultiplier(player, item)) / 2) { // This code runs once halfway through the useTime of the item. You'll notice with magic mirrors you are still holding the item for a little bit after you've teleported. // Make dust 70 times for a cool effect. for (int d = 0; d < 70; d++) { int dust2 = Dust.NewDust(player.position, player.width, player.height, 57, player.velocity.X * 0.5f, player.velocity.Y * 0.5f, 0, default(Color), 1.5f); Main.dust[dust2].noGravity = true; Main.dust[dust2].velocity *= 3f; Main.dust[dust2].scale += 0.6f; } // This code releases all grappling hooks and kills them. player.grappling[0] = -1; player.grapCount = 0; for (int p = 0; p < 1000; p++) { if (Main.projectile[p].active && Main.projectile[p].owner == player.whoAmI && Main.projectile[p].aiStyle == 7) { Main.projectile[p].Kill(); } } // The actual method that moves the player back to bed/spawn. player.Spawn(); // Make dust 70 times for a cool effect. This dust is the dust at the destination. for (int d = 0; d < 70; d++) { int dust3 = Dust.NewDust(player.position, player.width, player.height, 57, 0f, 0f, 0, default(Color), 1.5f); Main.dust[dust3].noGravity = true; Main.dust[dust3].velocity *= 3f; Main.dust[dust3].scale += 0.6f; } } }
public override bool UseItem(Player player) { if (player.itemAnimation > 0 && player.itemTime == 0 && player.GetModPlayer <KeyPlayer>().ChargedCrystals == 7) { player.itemTime = PlayerHooks.TotalUseTime(item.useTime, player, item); player.GetModPlayer <KeyPlayer>().maxMP += 25; player.GetModPlayer <KeyPlayer>().ChargedCrystals += 1; player.GetModPlayer <KeyPlayer>().currentMP += 25; if (Main.myPlayer == player.whoAmI) { CombatText.NewText(player.getRect(), Color.DodgerBlue, 25); } } return(false); }
public override void ModifyHitNPC(Projectile projectile, NPC target, ref int damage, ref float knockback, ref bool crit, ref int hitDirection) { if (!(projectile.modProjectile is ClickerProjectile clickerProjectile && clickerProjectile.isClickerProj)) { return; } Player player = Main.player[projectile.owner]; // Vanilla crit chance calculations. Crit chance of the currently held weapon matters, regardless of the damage type of the weapon. int critChance = player.HeldItem.crit; ItemLoader.GetWeaponCrit(player.HeldItem, player, ref critChance); PlayerHooks.GetWeaponCrit(player, player.HeldItem, ref critChance); crit = critChance >= 100 || Main.rand.Next(1, 101) <= critChance; }
public override bool UseItem(Player player) { foreach (NPC npc in Main.npc) { if (npc.active && npc.type == ModContent.NPCType <PixieLamp>()) { return(false); } } if (player.itemAnimation > 0 && player.itemTime == 0) { player.itemTime = (int)(item.useTime / PlayerHooks.TotalUseTimeMultiplier(player, item)); NPC.NewNPC((int)player.Center.X, (int)player.Center.Y, ModContent.NPCType <PixieLamp>(), 0, 0.0f, 0.0f, 0.0f, 0.0f, 255); } return(base.UseItem(player)); }
private void SyncSavingToClient() { lock (this) { NetMessage.SendData(MessageID.SyncPlayer, -1, -1, NetworkText.FromLiteral(Main.player[playerID].name), playerID, 0f, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.PlayerControls, -1, -1, NetworkText.Empty, playerID, 0f, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.PlayerHealth, -1, -1, NetworkText.Empty, playerID); NetMessage.SendData(MessageID.PlayerPvP, -1, -1, NetworkText.Empty, playerID, 0f, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.PlayerTeam, -1, -1, NetworkText.Empty, playerID, 0f, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.PlayerMana, -1, -1, NetworkText.Empty, playerID); NetMessage.SendData(MessageID.PlayerBuffs, -1, -1, NetworkText.Empty, playerID, 0f, 0f, 0f, 0, 0, 0); Main.player[playerID].trashItem = new Item(); SyncItemData(); PlayerHooks.SyncPlayer(Main.player[playerID], -1, -1, false); } }
/// <summary> /// Checks to see if a player has a specific permission. /// Fires the <see cref="PlayerHooks.OnPlayerPermission"/> hook which may be handled to override permission checks. /// If the OnPlayerPermission hook is not handled and the player is assigned a temporary group, this method calls <see cref="Group.HasPermission"/> on the temporary group and returns the result. /// If the OnPlayerPermission hook is not handled and the player is not assigned a temporary group, this method calls <see cref="Group.HasPermission"/> on the player's current group. /// </summary> /// <param name="permission">The permission to check.</param> /// <returns>True if the player has that permission.</returns> public bool HasPermission(string permission) { if (PlayerHooks.OnPlayerPermission(this, permission)) { return(true); } if (tempGroup != null) { return(tempGroup.HasPermission(permission)); } else { return(Group.HasPermission(permission)); } }
public override bool UseItem(Player player) { if (player.itemAnimation > 0 && player.statManaMax >= 200 && player.statManaMax < 300 && player.itemTime == 0) { player.itemTime = PlayerHooks.TotalUseTime(item.useTime, player, item); player.statManaMax2 += 10; player.GetModPlayer <TemperatePlayer>().ArcaneCrystals += 1; player.statMana += 10; if (Main.myPlayer == player.whoAmI) { player.ManaEffect(10); } AchievementsHelper.HandleSpecialEvent(player, AchievementHelperID.Special.ConsumeStar); } return(false); }
public override void PostAI(Projectile projectile) { if (projectile.type == 439) { Player player = Main.player[projectile.owner]; Item item = player.inventory[player.selectedItem]; int time = (int)((float)item.useTime / PlayerHooks.TotalUseTimeMultiplier(player, item)); projectile.ai[0] += 20f / time - 1; projectile.ai[1] += 20f / time - 1; } if (projectile.type == ProjectileID.VortexBeater) { Player player = Main.player[projectile.owner]; Item item = player.inventory[player.selectedItem]; int time = (int)((float)item.useTime / PlayerHooks.TotalUseTimeMultiplier(player, item)); projectile.ai[0] += 20f / time - 1; projectile.ai[1] -= 20f / time - 1; if (projectile.ai[0] >= 40f) { projectile.ai[1] -= .1f; if (Main.rand.Next(1, 10) == 1) { projectile.soundDelay--; } } if (projectile.ai[0] >= 80f) { projectile.ai[1] -= .2f; if (Main.rand.Next(1, 10) <= 2) { projectile.soundDelay--; } } if (projectile.ai[0] >= 120f) { projectile.ai[1] -= .3f; if (Main.rand.Next(1, 10) <= 3) { projectile.soundDelay--; } } } }
public override void ModifyTooltips(Item item, List <TooltipLine> tooltips) { try { if (IsExplosive(item)) { if (NeedsDamageLine(item) && Origins.ExplosiveBaseDamage.ContainsKey(item.type)) { Main.HoverItem.damage = Origins.ExplosiveBaseDamage[item.type]; Player player = Main.player[item.owner]; tooltips.Insert(1, new TooltipLine(mod, "Damage", $"{player.GetWeaponDamage(Main.HoverItem)} {Language.GetText("explosive")}{Language.GetText("LegacyTooltip.55")}")); int crit = player.GetWeaponCrit(item); ItemLoader.GetWeaponCrit(item, player, ref crit); PlayerHooks.GetWeaponCrit(player, item, ref crit); tooltips.Insert(2, new TooltipLine(mod, "CritChance", $"{crit}{Language.GetText("LegacyTooltip.41")}")); return; } else { for (int i = 1; i < tooltips.Count; i++) { TooltipLine tooltip = tooltips[i]; if (tooltip.Name.Equals("Damage")) { tooltip.text = tooltip.text.Insert(tooltip.text.IndexOf(' '), " " + Language.GetText("explosive")); return; } } } } else { switch (item.type) { case ItemID.MiningHelmet: tooltips.Insert(3, new TooltipLine(mod, "Tooltip0", "3% increased explosive critical strike chance")); break; case ItemID.MiningShirt: tooltips.Insert(3, new TooltipLine(mod, "Tooltip0", "5% increased explosive damage")); break; } } } catch (Exception e) { mod.Logger.Error(e); } }