Inheritance: Codebreak.Service.World.Game.Entity.AbstractEntity, IFightObstacle
Esempio n. 1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 public void EndTurn(AbstractFighter fighter)
 {
     foreach (var challenge in m_challenges)
     {
         challenge.EndTurn(fighter);
     }
 }
Esempio n. 2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 /// <param name="weapon"></param>
 public void CheckWeapon(AbstractFighter fighter, ItemTemplateDAO weapon)
 {
     foreach (var challenge in m_challenges)
     {
         challenge.CheckWeapon(fighter, weapon);
     }
 }
Esempio n. 3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 public void CheckDeath(AbstractFighter fighter)
 {
     foreach (var challenge in m_challenges)
     {
         challenge.CheckDeath(fighter);
     }
 }
Esempio n. 4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 /// <param name="beginCell"></param>
 /// <param name="endCell"></param>
 /// <param name="movementLength"></param>
 public void CheckMovement(AbstractFighter fighter, int beginCell, int endCell, int movementLength)
 {
     foreach (var challenge in m_challenges)
     {
         challenge.CheckMovement(fighter, beginCell, endCell, movementLength);
     }
 }
Esempio n. 5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 /// <param name="castInfos"></param>
 public void CheckSpell(AbstractFighter fighter, CastInfos castInfos)
 {
     foreach (var challenge in m_challenges)
     {
         challenge.CheckSpell(fighter, castInfos);
     }
 }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="map"></param>
        /// <param name="id"></param>
        /// <param name="aggressor"></param>
        /// <param name="victim"></param>
        public AlignmentFight(MapInstance map, long id, AbstractFighter aggressor, CharacterEntity victim)
            : base(FightTypeEnum.TYPE_AGGRESSION, map, id, aggressor.Id, aggressor.AlignmentId, aggressor.CellId, victim.Id, victim.AlignmentId, victim.CellId, WorldConfig.AGGRESSION_START_TIMEOUT, WorldConfig.AGGRESSION_TURN_TIME, false, true, new HonorGainBehavior())
        {
            IsNeutralAgression = victim.AlignmentId == (int)AlignmentTypeEnum.ALIGNMENT_NEUTRAL;

            JoinFight(aggressor, Team0);
            JoinFight(victim, Team1);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="map"></param>
        /// <param name="id"></param>
        /// <param name="aggressor"></param>
        /// <param name="victim"></param>
        public AlignmentFight(MapInstance map, long id, AbstractFighter aggressor, CharacterEntity victim)
            : base(FightTypeEnum.TYPE_AGGRESSION, map, id, aggressor.Id, aggressor.AlignmentId, aggressor.CellId, victim.Id, victim.AlignmentId, victim.CellId, WorldConfig.AGGRESSION_START_TIMEOUT, WorldConfig.AGGRESSION_TURN_TIME, false, true, new HonorGainBehavior())
        {
            IsNeutralAgression = victim.AlignmentId == (int)AlignmentTypeEnum.ALIGNMENT_NEUTRAL;

            JoinFight(aggressor, Team0);
            JoinFight(victim, Team1);
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 /// <param name="cellId"></param>
 /// <param name="spellId"></param>
 /// <param name="spellLevel"></param>
 /// <param name="sprite"></param>
 /// <param name="spriteInfos"></param>
 /// <param name="duration"></param>
 /// <param name="callback"></param>
 public GameFightSpellAction(AbstractFighter fighter, int cellId, int spellId, int spellLevel, string sprite, string spriteInfos, long duration, System.Action callback)
     : base(GameActionTypeEnum.FIGHT_SPELL_LAUNCH, fighter, duration)
 {
     Callback = callback;
     CellId = cellId;
     SpellId = spellId;
     SpellLevel = spellLevel;
     Sprite = sprite;
     SpriteInfos = spriteInfos;
 }
Esempio n. 9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fighter"></param>
        public void SummonFighter(AbstractFighter fighter)
        {
            var index = m_fighterTurns.IndexOf(fighter.Invocator) + 1;

            if (index == 0)
            {
                index = m_fighterTurns.Count;
            }
            m_fighterTurns.Insert(index, fighter);
        }
Esempio n. 10
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <param name="monsterGrade"></param>
        /// <param name="invocator"></param>
        /// <param name="staticInvocation"></param>
        public MonsterEntity(long id, MonsterGradeDAO monsterGrade, AbstractFighter invocator = null, bool staticInvocation = false)
            : base(EntityTypeEnum.TYPE_MONSTER_FIGHTER, id, staticInvocation)
        {
            Grade = monsterGrade;

            Statistics = new GenericStats(monsterGrade);
            SpellBook = SpellBookFactory.Instance.Create(this);

            RealLife = MaxLife;
            SkinSize = SkinSizeBase;
            Invocator = invocator;
        }
Esempio n. 11
0
        /// <summary>
        ///
        /// </summary>
        public void OnDeath(AbstractFighter killer)
        {
            if (!DeclaredDead)
            {
                DeclaredDead = true;
                if (Cell != null)
                {
                    Cell.RemoveObject(this);

                    Cell = null;
                }
            }
        }
Esempio n. 12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fighter"></param>
        public void RemoveFighter(AbstractFighter fighter)
        {
            var index = m_fighterTurns.IndexOf(fighter);

            if (index == -1)
            {
                return;
            }
            m_fighterTurns.Remove(fighter);
            if (index <= m_currentIndex)
            {
                m_currentIndex--;
            }
        }
Esempio n. 13
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 public void SendChallengeInfos(AbstractFighter fighter)
 {
     foreach (var challenge in m_challenges)
     {
         fighter.Dispatch(WorldMessage.FIGHT_CHALLENGE_INFORMATIONS(challenge.Id,
                                                                    challenge.ShowTarget,
                                                                    challenge.TargetId,
                                                                    challenge.BasicXpBonus,
                                                                    challenge.TeamXpBonus,
                                                                    challenge.BasicDropBonus,
                                                                    challenge.TeamDropBonus,
                                                                    challenge.Success));
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="activeType"></param>
        /// <param name="fight"></param>
        /// <param name="caster"></param>
        /// <param name="castInfos"></param>
        /// <param name="cell"></param>
        /// <param name="duration"></param>
        /// <param name="actionId"></param>
        /// <param name="canGoThrough"></param>
        /// <param name="canStack"></param>
        /// <param name="hide"></param>
        protected AbstractActivableObject(FightObstacleTypeEnum type, ActiveType activeType, AbstractFight fight, AbstractFighter caster, CastInfos castInfos, int cell, int duration, int actionId, bool canGoThrough, bool canStack, bool hide = false)
        {
            m_fight        = fight;
            m_caster       = caster;
            m_spellId      = castInfos.SpellId;
            m_actionSpell  = SpellManager.Instance.GetTemplate(castInfos.Value1);
            m_actionEffect = m_actionSpell.GetLevel(castInfos.Value2);

            Cell           = fight.GetCell(cell);
            ObstacleType   = type;
            ActivationType = activeType;
            CanGoThrough   = canGoThrough;
            CanStack       = canStack;
            Color          = castInfos.Value3;
            Targets        = new List <AbstractFighter>();
            Length         = Pathfinding.GetDirection(castInfos.RangeType[1]);
            AffectedCells  = new List <FightCell>();
            Duration       = duration;
            ActionId       = actionId;
            Hide           = hide;

            foreach (var effect in m_actionEffect.Effects)
            {
                if (CastInfos.IsDamageEffect(effect.TypeEnum))
                {
                    Priority--;
                }
            }

            // On ajout l'objet a toutes les cells qu'il affecte
            foreach (var cellId in CellZone.GetCircleCells(fight.Map, cell, Length))
            {
                var fightCell = m_fight.GetCell(cellId);
                if (fightCell != null)
                {
                    fightCell.AddObject(this);
                    AffectedCells.Add(fightCell);
                }
            }

            if (Hide)
            {
                Appear(caster.Team);
            }
            else
            {
                AppearForAll();
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="target"></param>
        public void LoadTargets(AbstractFighter target)
        {
            if (!Targets.Contains(target))
            {
                Targets.Add(target);
            }

            switch (ActivationType)
            {
            case ActiveType.ACTIVE_ENDMOVE:
                foreach (var cell in AffectedCells)
                {
                    Targets.AddRange(cell.FightObjects.OfType <AbstractFighter>().Where(fighter => !Targets.Contains(fighter)));
                }
                break;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="type"></param>
        /// <param name="activeType"></param>
        /// <param name="fight"></param>
        /// <param name="caster"></param>
        /// <param name="castInfos"></param>
        /// <param name="cell"></param>
        /// <param name="duration"></param>
        /// <param name="actionId"></param>
        /// <param name="canGoThrough"></param>
        /// <param name="canStack"></param>
        /// <param name="hide"></param>
        protected AbstractActivableObject(FightObstacleTypeEnum type, ActiveType activeType, AbstractFight fight, AbstractFighter caster, CastInfos castInfos, int cell, int duration, int actionId, bool canGoThrough, bool canStack, bool hide = false)
        {
            m_fight = fight;
            m_caster = caster;
            m_spellId = castInfos.SpellId;
            m_actionSpell = SpellManager.Instance.GetTemplate(castInfos.Value1);
            m_actionEffect = m_actionSpell.GetLevel(castInfos.Value2);

            Cell = fight.GetCell(cell);
            ObstacleType = type;
            ActivationType = activeType;
            CanGoThrough = canGoThrough;
            CanStack = canStack;
            Color = castInfos.Value3;
            Targets = new List<AbstractFighter>();
            Length = Pathfinding.GetDirection(castInfos.RangeType[1]);
            AffectedCells = new List<FightCell>();
            Duration = duration;
            ActionId = actionId;
            Hide = hide;

            foreach(var effect in m_actionEffect.Effects)
            {
                if(CastInfos.IsDamageEffect(effect.TypeEnum))
                {
                    Priority--;
                }
            }

            // On ajout l'objet a toutes les cells qu'il affecte
            foreach (var cellId in CellZone.GetCircleCells(fight.Map, cell, Length))
            {
                var fightCell = m_fight.GetCell(cellId);
                if (fightCell != null)
                {
                    fightCell.AddObject(this);
                    AffectedCells.Add(fightCell);
                }
            }

            if (Hide)
                Appear(caster.Team);
            else
                AppearForAll();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="activator"></param>
        public void Activate(AbstractFighter activator)
        {
            Activated = true;

            m_fight.CurrentProcessingFighter = activator;
            m_fight.Dispatch(WorldMessage.GAME_ACTION(ActionId, activator.Id, m_spellId + "," + Cell.Id + "," + m_actionSpell.Sprite + "," + m_actionEffect.Level + ",1," + m_caster.Id));

            foreach (var target in Targets)
            {
                if (!target.IsFighterDead)
                {
                    foreach (var effect in m_actionEffect.Effects)
                    {
                        m_fight.AddProcessingTarget(new CastInfos(
                                                        effect.TypeEnum,
                                                        m_spellId,
                                                        Cell.Id,
                                                        effect.Value1,
                                                        effect.Value2,
                                                        effect.Value3,
                                                        effect.Chance,
                                                        effect.Duration,
                                                        m_caster,
                                                        target,
                                                        "",
                                                        target.Cell.Id,
                                                        isTrap: ObstacleType == FightObstacleTypeEnum.TYPE_TRAP)
                                                    );
                    }
                }
            }

            Targets.Clear();

            if (ObstacleType == FightObstacleTypeEnum.TYPE_TRAP)
            {
                Remove();
            }
        }
Esempio n. 18
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 /// <param name="weapon"></param>
 public void CheckWeapon(AbstractFighter fighter, ItemTemplateDAO weapon)
 {
     foreach (var challenge in m_challenges)
             challenge.CheckWeapon(fighter, weapon);
 }
Esempio n. 19
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="fighter"></param>
        /// <param name="team"></param>
        public void JoinFight(AbstractFighter fighter, FightTeam team)
        {
            if (team.FreePlace == null)
                return;

            if (!fighter.IsDisconnected)
            {
                if(fighter.Type == EntityTypeEnum.TYPE_CHARACTER)
                    OnCharacterJoin(fighter as CharacterEntity, team);

                fighter.JoinFight(this, team);
                Dispatch(WorldMessage.GAME_MAP_INFORMATIONS(OperatorEnum.OPERATOR_ADD, fighter));
            }

            if (fighter.MapId == Map.Id)
                SendFightJoinInfos(fighter);
        }
Esempio n. 20
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fight"></param>
 /// <param name="caster"></param>
 /// <param name="effect"></param>
 /// <param name="cell"></param>
 public FightTrap(AbstractFight fight, AbstractFighter caster, CastInfos effect, int cell)
     : base(FightObstacleTypeEnum.TYPE_TRAP, ActiveType.ACTIVE_ENDMOVE, fight, caster, effect, cell, 0, 306, true, false, true)
 {
 }
Esempio n. 21
0
 /// <summary>
 ///
 /// </summary>
 public void Dispose()
 {
     m_fighterTurns.Clear();
     m_fighterTurns   = null;
     m_currentFighter = null;
 }
Esempio n. 22
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fight"></param>
 /// <param name="caster"></param>
 /// <param name="effect"></param>
 /// <param name="cell"></param>
 public FightTrap(AbstractFight fight, AbstractFighter caster, CastInfos effect, int cell)
     : base(FightObstacleTypeEnum.TYPE_TRAP, ActiveType.ACTIVE_ENDMOVE, fight, caster, effect, cell, 0, 306, true, false, true)
 {
 }
Esempio n. 23
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 public void SendChallengeInfos(AbstractFighter fighter)
 {
     foreach (var challenge in m_challenges)
         fighter.Dispatch(WorldMessage.FIGHT_CHALLENGE_INFORMATIONS(challenge.Id,
             challenge.ShowTarget,
             challenge.TargetId,
             challenge.BasicXpBonus,
             challenge.TeamXpBonus,
             challenge.BasicDropBonus,
             challenge.TeamDropBonus,
             challenge.Success));
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="path"></param>
 public GameFightMovementAction(AbstractFighter entity, MovementPath path)
     : base(GameActionTypeEnum.MAP_MOVEMENT, entity, entity.Type == EntityTypeEnum.TYPE_CHARACTER ? 5000 : (long)path.MovementTime)
 {
     Path = path;
 }
Esempio n. 25
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 public BuffEffectManager(AbstractFighter fighter)
 {
     m_fighter = fighter;
 }
Esempio n. 26
0
 /// <summary>
 ///
 /// </summary>
 public void Dispose()
 {
     m_states.Clear();
     m_states  = null;
     m_fighter = null;
 }
Esempio n. 27
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fight"></param>
 /// <param name="caster"></param>
 /// <param name="effect"></param>
 /// <param name="cell"></param>
 /// <param name="duration"></param>
 public FightGlyph(AbstractFight fight, AbstractFighter caster, CastInfos effect, int cell, int duration)
     : base(FightObstacleTypeEnum.TYPE_GLYPH, ActiveType.ACTIVE_BEGINTURN, fight, caster, effect, cell, duration, 307, true, true)
 {
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 public FighterStateManager(AbstractFighter fighter)
 {
     m_fighter = fighter;
 }
Esempio n. 29
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="taxCollectorId"></param>
 /// <param name="attacker"></param>
 public void TaxColectorAttackerLeave(long taxCollectorId, AbstractFighter attacker)
 {
     m_taxCollectorDispatcher.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_ATTACKER_LEAVE(taxCollectorId, attacker.Id));
 }
Esempio n. 30
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 public virtual void OnKill(AbstractFighter target)
 {
     FireEvent(EntityEventType.FIGHT_KILL, target);
 }
Esempio n. 31
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="caster"></param>
        /// <param name="lostPoint"></param>
        /// <param name="mp"></param>
        /// <returns></returns>
        public int CalculDodgeAPMP(AbstractFighter caster, int lostPoint, bool mp = false)
        {
            var reality = 0;

            if (!mp)
            {
                var dodgeAPCaster = caster.APDodge;
                var dodgeAPTarget = APDodge;
                if (dodgeAPTarget == 0)
                {
                    dodgeAPTarget = 1;
                }

                for (int i = 0; i < lostPoint; i++)
                {
                    var actualAP = AP - reality;
                    var realAP   = AP;
                    if (realAP == 0)
                    {
                        realAP = 1;
                    }

                    var percentLastAP = (double)actualAP / realAP;
                    var chance        = 0.5 * ((double)dodgeAPCaster / dodgeAPTarget) * percentLastAP;
                    var percentChance = chance * 100;

                    if (percentChance > 100)
                    {
                        percentChance = 90;
                    }
                    else if (percentChance < 10)
                    {
                        percentChance = 10;
                    }

                    if (Util.Next(0, 100) < percentChance)
                    {
                        reality++;
                    }
                }
            }
            else
            {
                var dodgeMPCaster = caster.MPDodge;
                var dodgeMPTarget = MPDodge;
                if (dodgeMPTarget == 0)
                {
                    dodgeMPTarget = 1;
                }

                for (int i = 0; i < lostPoint; i++)
                {
                    var actualMP = MP - reality;
                    var realMP   = MP;
                    if (realMP == 0)
                    {
                        realMP = 1;
                    }

                    var percentLastMP = (double)actualMP / realMP;
                    var chance        = 0.5 * ((double)dodgeMPCaster / dodgeMPTarget) * percentLastMP;
                    var percentChance = chance * 100;

                    if (percentChance > 100)
                    {
                        percentChance = 90;
                    }
                    else if (percentChance < 10)
                    {
                        percentChance = 10;
                    }

                    if (Util.Next(0, 100) < percentChance)
                    {
                        reality++;
                    }
                }
            }

            return(reality);
        }
Esempio n. 32
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 public void EndTurn(AbstractFighter fighter)
 {
     foreach (var challenge in m_challenges)
             challenge.EndTurn(fighter);
 }
Esempio n. 33
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 public void RemoveFighter(AbstractFighter fighter)
 {
     m_fighters.Remove(fighter);
 }
Esempio n. 34
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 public void RemoveFighter(AbstractFighter fighter)
 {
     m_fighters.Remove(fighter);
 }
 /// <summary>
 /// 
 /// </summary>
 public void Dispose()
 {
     m_fighterTurns.Clear();
     m_fighterTurns = null;
     m_currentFighter = null;
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 public void SummonFighter(AbstractFighter fighter)
 {
     var index = m_fighterTurns.IndexOf(fighter.Invocator) + 1;
     if (index == 0)
         index = m_fighterTurns.Count;
     m_fighterTurns.Insert(index, fighter);
 }
Esempio n. 37
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 public void AddFighter(AbstractFighter fighter)
 {
     m_fighters.Add(fighter);
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="type"></param>
 /// <param name="fighter"></param>
 /// <param name="timeout"></param>
 public AbstractGameFightAction(GameActionTypeEnum type, AbstractFighter fighter, long duration)
     : base(type, fighter, duration)
 {
     Fighter = fighter;
     Timeout = Fighter.Fight.UpdateTime + duration;
 }
Esempio n. 39
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 public void CheckDeath(AbstractFighter fighter)
 {
     foreach (var challenge in m_challenges)
             challenge.CheckDeath(fighter);
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 public void RemoveFighter(AbstractFighter fighter)
 {
     var index = m_fighterTurns.IndexOf(fighter);
     if (index == -1)
         return;
     m_fighterTurns.Remove(fighter);
     if(index <= m_currentIndex)
         m_currentIndex--;
 }
Esempio n. 41
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 /// <param name="beginCell"></param>
 /// <param name="endCell"></param>
 /// <param name="movementLength"></param>
 public void CheckMovement(AbstractFighter fighter, int beginCell, int endCell, int movementLength)
 {
     foreach (var challenge in m_challenges)
             challenge.CheckMovement(fighter, beginCell, endCell, movementLength);
 }
Esempio n. 42
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fight"></param>
 /// <param name="caster"></param>
 /// <param name="effect"></param>
 /// <param name="cell"></param>
 /// <param name="duration"></param>
 public FightGlyph(AbstractFight fight, AbstractFighter caster, CastInfos effect, int cell, int duration)
     : base(FightObstacleTypeEnum.TYPE_GLYPH, ActiveType.ACTIVE_BEGINTURN, fight, caster, effect, cell, duration, 307, true, true)
 {
 }
Esempio n. 43
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 /// <param name="castInfos"></param>
 public void CheckSpell(AbstractFighter fighter, CastInfos castInfos)
 {
     foreach (var challenge in m_challenges)
             challenge.CheckSpell(fighter, castInfos);
 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="caster"></param>
        /// <param name="lostPoint"></param>
        /// <param name="mp"></param>
        /// <returns></returns>
        public int CalculDodgeAPMP(AbstractFighter caster, int lostPoint, bool mp = false)
        {
            var reality = 0;

            if (!mp)
            {
                var dodgeAPCaster = caster.APDodge;
                var dodgeAPTarget = APDodge;
                if (dodgeAPTarget == 0)
                    dodgeAPTarget = 1;

                for (int i = 0; i < lostPoint; i++)
                {
                    var actualAP = AP - reality;
                    var realAP = AP;
                    if (realAP == 0)
                        realAP = 1;

                    var percentLastAP = (double)actualAP / realAP;
                    var chance = 0.5 * ((double)dodgeAPCaster / dodgeAPTarget) * percentLastAP;
                    var percentChance = chance * 100;

                    if (percentChance > 100)
                        percentChance = 90;
                    else if (percentChance < 10)
                        percentChance = 10;

                    if (Util.Next(0, 100) < percentChance)
                        reality++;
                }
            }
            else
            {
                var dodgeMPCaster = caster.MPDodge;
                var dodgeMPTarget = MPDodge;
                if (dodgeMPTarget == 0)
                    dodgeMPTarget = 1;

                for (int i = 0; i < lostPoint; i++)
                {
                    var actualMP = MP - reality;
                    var realMP = MP;
                    if (realMP == 0)
                        realMP = 1;

                    var percentLastMP = (double)actualMP / realMP;
                    var chance = 0.5 * ((double)dodgeMPCaster / dodgeMPTarget) * percentLastMP;
                    var percentChance = chance * 100;

                    if (percentChance > 100)
                        percentChance = 90;
                    else if (percentChance < 10)
                        percentChance = 10;

                    if (Util.Next(0, 100) < percentChance)
                        reality++;
                }
            }

            return reality;
        }
Esempio n. 45
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="taxCollectorId"></param>
 /// <param name="attacker"></param>
 public void TaxCollectorAttackerJoin(long taxCollectorId, AbstractFighter attacker)
 {
     m_taxCollectorDispatcher.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_ATTACKER_JOIN(taxCollectorId, attacker));
 }
 /// <summary>
 /// 
 /// </summary>
 public void Dispose()
 {
     m_states.Clear();
     m_states = null;
     m_fighter = null;
 }
        /// <summary>
        /// 
        /// </summary>
        public void OnDeath(AbstractFighter killer)
        {
            if (!DeclaredDead)
            {
                DeclaredDead = true;
                if (Cell != null)
                {
                    Cell.RemoveObject(this);

                    Cell = null;
                }
            }
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 public virtual void OnKill(AbstractFighter target)
 {
     FireEvent(EntityEventType.FIGHT_KILL, target);
 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="activator"></param>
        public void Activate(AbstractFighter activator)
        {
            Activated = true;

            m_fight.CurrentProcessingFighter = activator;
            m_fight.Dispatch(WorldMessage.GAME_ACTION(ActionId, activator.Id, m_spellId + "," + Cell.Id + "," + m_actionSpell.Sprite + "," + m_actionEffect.Level + ",1," + m_caster.Id));

            foreach (var target in Targets)
            {
                if (!target.IsFighterDead)
                {
                    foreach (var effect in m_actionEffect.Effects)
                    {
                        m_fight.AddProcessingTarget(new CastInfos(
                                            effect.TypeEnum,
                                            m_spellId,
                                            Cell.Id,
                                            effect.Value1,
                                            effect.Value2,
                                            effect.Value3,
                                            effect.Chance,
                                            effect.Duration,
                                            m_caster,
                                            target,
                                            "",
                                            target.Cell.Id,
                                            isTrap: ObstacleType == FightObstacleTypeEnum.TYPE_TRAP)
                                         );
                    }
                }
            }

            Targets.Clear();

            if (ObstacleType == FightObstacleTypeEnum.TYPE_TRAP)
                Remove();
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="fighter"></param>
 /// <param name="cellId"></param>
 /// <param name="duration"></param>
 /// <param name="callback"></param>
 public GameFightWeaponAction(AbstractFighter fighter, int cellId, long duration, System.Action callback)
     : base(GameActionTypeEnum.FIGHT_WEAPON_USE, fighter, duration)
 {
     Callback = callback;
     CellId = cellId;
 }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="target"></param>
        public void LoadTargets(AbstractFighter target)
        {
            if(!Targets.Contains(target))
                Targets.Add(target);

            switch (ActivationType)
            {
                case ActiveType.ACTIVE_ENDMOVE:
                    foreach (var cell in AffectedCells)
                    {
                        Targets.AddRange(cell.FightObjects.OfType<AbstractFighter>().Where(fighter => !Targets.Contains(fighter)));
                    }
                    break;
            }
        }
Esempio n. 52
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 public FighterStateManager(AbstractFighter fighter)
 {
     m_fighter = fighter;
 }
Esempio n. 53
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="fighter"></param>
 public void AddFighter(AbstractFighter fighter)
 {
     m_fighters.Add(fighter);
 }