Esempio n. 1
0
        public static int PhysicalAttack(YiObj attacker, MsgInteractType attackType = MsgInteractType.Physical)
        {
            if (!CanAttackPhysical(attacker, attacker.CurrentTarget))
            {
                return(-1);
            }

            if (attacker.HasFlag(StatusEffect.Invisibility))
            {
                attacker.RemoveStatusEffect(StatusEffect.Invisibility);
            }

            if (attacker is Player player)
            {
                if (player.AttackJob != null)
                {
                    player.AttackJob.Cancelled = true;
                }
                if (player.CurrentTarget != null && player.CurrentTarget.Alive)
                {
                    player.AttackJob = YiScheduler.Instance.DoReturn(TimeSpan.FromMilliseconds(attacker.AttackSpeed), () => MsgInteract.Handle(player, MsgInteract.Create(attacker, attacker.CurrentTarget, attackType, 0)));
                }
            }
            return(AttackCalcs.GetDamage(attacker, attacker.CurrentTarget, attackType));
        }
Esempio n. 2
0
        public static void ShareExp(YiObj attacker, YiObj target, uint bonus)
        {
            if (!Teams.ContainsKey(attacker.UniqueId))
            {
                return;
            }

            foreach (var member in Teams[attacker.UniqueId].Members.Values)
            {
                if (!Position.CanSeeBig(attacker, member))
                {
                    continue;
                }

                var exp = AttackCalcs.AdjustExp((int)bonus, attacker, target);

                if (exp > member.Level * 360)
                {
                    exp = (uint)(member.Level * 360);
                }

                if (member.Partner == attacker.Name)
                {
                    exp *= 2;
                }

                if (member.Class >= 133 && member.Class <= 135)
                {
                    exp *= 2;
                }

                //exp = (uint)Math.Round(exp*GameWorld.Maps[attacker.MapId].ExpModifier);

                (member as Player)?.Send(MsgText.Create("TeamData", member.Name, $"You've been awarded {exp} experience!", MsgTextType.Top));
                member.Experience += exp;
            }
        }