Пример #1
0
        internal bool UseSkill(Character invoker, MonsterSkillType skill, Point target)
        {
            // Find the method implementing the skill
            MethodInfo skillMethod = GetType().GetMethod("Handle" + skill.ToString(), BindingFlags.NonPublic | BindingFlags.Instance);

            // And invoke it
            return (bool)skillMethod.Invoke(this, new object[] { invoker, skill, target });
        }
Пример #2
0
 public MonsterSkill(
     string id, string name, MonsterSkillType skillType, MonsterSkillTargetType targetType,
     int range, int charge, EffectType effectType, string overview)
 {
     this.Id                     = id;
     this.Name                   = name;
     this.MonsterSkillType       = skillType;
     this.MonsterSkillTargetType = targetType;
     this.Range                  = range;
     this.Charge                 = charge;
     this.EffectType             = effectType;
     this.Overview               = overview;
 }
Пример #3
0
        private bool HandleDoubleSwing(Character invoker, MonsterSkillType skill, Point target)
        {
            Character targetCharacter = ValidTarget(invoker, target, 1);
            if (targetCharacter == null)
                return false;

            // If we get here, it's a valid double swing. Attack two times in a row.
            CoreGameEngine.Instance.SendTextOutput(String.Format("{0} wildly swings at {1} twice.", invoker.Name, targetCharacter.Name));
            m_engine.Attack(invoker, target);
            m_engine.Attack(invoker, target);

            return true;
        }
Пример #4
0
        private bool HandleRush(Character invoker, MonsterSkillType skill, Point target)
        {
            Character targetCharacter = ValidTarget(invoker, target, 2);
            if (targetCharacter == null)
                return false;

            // If we get here, it's a valid rush. Move towards target and attack at reduced time cost.
            CoreGameEngine.Instance.SendTextOutput(String.Format("{0} rushes towards {1} and attacks.", invoker.Name, targetCharacter.Name));
            List<Point> pathToPoint = CoreGameEngine.Instance.PathToPoint(invoker, target, false, false, true);
            m_engine.Move(invoker, PointDirectionUtils.ConvertTwoPointsToDirection(invoker.Position, pathToPoint[0]));
            m_engine.Attack(invoker, target);

            return true;
        }
Пример #5
0
        private bool HandleFirstAid(Character invoker, MonsterSkillType skill, Point target)
        {
            Character targetCharacter = ValidTargetLessThanOrEqualTo(invoker, target, 1);
            if (targetCharacter == null)
                return false;

            // If we get here, it's a valid first aid. Increase target's HP by amount
            string targetString = targetCharacter == invoker ? "themself" : "the " + targetCharacter.Name;
            CoreGameEngine.Instance.SendTextOutput(String.Format("The {0} applies some fast combat medicine on {1}.", invoker.Name, targetString));
            int amountToHeal = (new DiceRoll(4, 3)).Roll();
            targetCharacter.Heal(amountToHeal, false);
            CoreGameEngine.Instance.Wait(invoker);
            return true;
        }
Пример #6
0
        private bool HandleSlingStone(Character invoker, MonsterSkillType skill, Point target)
        {
            Character targetCharacter = ValidTargetLessThanOrEqualTo(invoker, target, SlingDistance);
            if (targetCharacter == null)
                return false;

            List<Point> targetList = new List<Point>() { target };
            CoreGameEngine.Instance.FilterNotTargetablePointsFromList(targetList, invoker.Position, invoker.Vision, true);
            CoreGameEngine.Instance.FilterNotVisibleBothWaysFromList(invoker.Position, targetList);

            if (targetList.Count < 1)
                return false;

            CoreGameEngine.Instance.SendTextOutput(String.Format("{0} slings a stone at {1}.", invoker.Name, targetCharacter.Name));           
            CoreGameEngine.Instance.CombatEngine.RangedBoltToLocation(invoker, target, (new DiceRoll(5, 3)).Roll(), null, null);
            
            // Rest to pass a turn
            CoreGameEngine.Instance.Wait(invoker);
            return true;
        }
    /// <summary>
    /// スキルの色のスプライトを取得
    /// </summary>
    /// <param name="skillType"></param>
    /// <returns></returns>
    private Sprite GetSkillColorImageSprite(MonsterSkillType skillType)
    {
        // キャッシュから取得
        bool exists = skillColorSpriteDic.ContainsKey(skillType);

        if (exists)
        {
            return(skillColorSpriteDic[skillType]);
        }

        // パスを作成
        string typeStr = "red";

        if (skillType == MonsterSkillType.COUNTER)
        {
            typeStr = "blue";
        }
        string imagePath = IMAGE_SKILL_COLOR_RESOURCE_PREFIX + typeStr;

        // スプライトを取得
        return(Resources.Load <Sprite>(imagePath));
    }
Пример #8
0
 public bool UseSkill(ICharacterCore invoker, MonsterSkillType skill, Point target)
 {
     return UseSkill((Character)invoker, skill, target);
 }
Пример #9
0
 internal bool UseMonsterSkill(Character invoker, MonsterSkillType skill, Point target)
 {
     return m_monsterSkillEngine.UseSkill(invoker, skill, target);
 }