Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        //------------------------------------------------------//
        //------------------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);
        }
Ejemplo n.º 3
0
        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;
                }
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
		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.
		}
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
        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;
            }
        }
Ejemplo n.º 8
0
        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));
            }
        }
Ejemplo n.º 9
0
        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);
            }
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
 public override void PostItemCheck()
 {
     if (triggerItemTime)
     {
         player.itemTime = PlayerHooks.TotalUseTime(player.HeldItem.useTime * player.tileSpeed, player, player.HeldItem);
     }
     triggerItemTime = false;
 }
Ejemplo n.º 12
0
        ////

        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);
        }
Ejemplo n.º 13
0
 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);
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
 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);
 }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        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);
Ejemplo n.º 19
0
        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;
            }
        }
Ejemplo n.º 20
0
        public override void UseStyle(Player player)
        {
            int totalTime = PlayerHooks.TotalUseTime(item.useTime, player, item);

            if (player.itemTime == totalTime / 2)
            {
                if (!firstuse && done)
                {
                    firstuse = true;
                }
            }
        }
Ejemplo n.º 21
0
        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);
                }
            }
        }
Ejemplo n.º 23
0
        // 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;
                }
            }
        }
Ejemplo n.º 24
0
 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;
        }
Ejemplo n.º 26
0
 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));
 }
Ejemplo n.º 27
0
 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);
     }
 }
Ejemplo n.º 28
0
        /// <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));
            }
        }
Ejemplo n.º 29
0
 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--;
                    }
                }
            }
        }
Ejemplo n.º 31
0
        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);
            }
        }