Example #1
0
 private Skill(uint skillID, string skillName, SkillType type, SkillProperty property, SkillCost cost, string desc)
 {
     SkillID     = skillID;
     SkillName   = skillName;
     SkillType   = type;
     Property    = property;
     Cost        = cost;
     Description = desc;
 }
Example #2
0
    public string ResourcesDir = "";             //资源路径


    public void Skill(SkillProperty skillProperty)
    {
        if (skillProperty.flashing <= 0)                  //未在冷却
        {
            skillProperty.flashing = skillProperty.flash; //重置冷却
            {
                //技能动画
                heroAnime.StartSkill(skillProperty.skillName);

                //产生技能子弹
                Vector3 offset = gameObject.transform.position;
                //调整子弹位置
                bool xDir = gameObject.GetComponent <Character>().xDirection;
                if (xDir)
                {
                    offset.x += skillProperty.xOffset;
                }
                else
                {
                    offset.x -= skillProperty.xOffset;
                }
                offset.y += skillProperty.yOffset;
                GameObject skillBullet = Instantiate(skillDict[skillProperty.skillName + "Bullet"],
                                                     offset, transform.rotation);


                if (skillBullet.GetComponent <BulletBase>().kind == 1)
                {
                    skillBullet.transform.SetParent(gloableBullet.transform, true);
                }
                else
                {
                    skillBullet.transform.SetParent(gameObject.transform, true);
                }
                //确定方向
                //float x = -1;
                //if (gameObject.GetComponent<Character>().xDirection)
                //    x = 1;
                //skill1Bullet.GetComponent<BulletBase>().direction = new Vector2(x, 0);
                skillBullet.GetComponent <BulletBase>().xDirection = xDir;
                skillBullet.GetComponent <BulletBase>().belong     = gameObject;
                //确定子弹技能伤害
                skillBullet.GetComponent <BulletBase>().damage = skillProperty.damage;
            }

            //后摇僵直
            GetComponent <Character>().action = false;
            herorigidbody.velocity            = new Vector2(0, 0);
            //重置后摇时间
            skillProperty.staying = skillProperty.stay;

            //延时结束技能动画
            StartCoroutine(SkillAnimeEnd(skillProperty.skillName, skillProperty.animeTime));
        }
    }
Example #3
0
    Rect CreateSkillBt(Transform skill, int seg)
    {
        SkillProperty sProperty     = skill.GetComponent <SkillProperty>();
        Texture2D     manaCost      = numIcon.GetManaTexture(sProperty.SkillCost);
        Rect          manaRect      = new Rect(btSize + leftMargin + 5, topMargin + segment * 3 + 50 + 30 * seg, 16, 16);
        Rect          skillNameRect = new Rect(btSize + leftMargin + 22, topMargin + segment * 3 + 50 + 30 * seg, 150, 30);

        GUI.DrawTexture(manaRect, manaCost);
        GUI.Label(skillNameRect, sProperty.SkillName, subStyle);
        return(new Rect(manaRect.x, manaRect.y, manaRect.width + skillNameRect.width, skillNameRect.height));
    }
        public static GenericMenu GeneratePropertyMenu(SkillProperty fsmProperty)
        {
            TypeHelpers.targetFsmProperty = fsmProperty;
            GenericMenu result     = new GenericMenu();
            Type        globalType = ReflectionUtils.GetGlobalType(fsmProperty.TargetTypeName);

            if (globalType != null)
            {
                TypeHelpers.AddPropertyMenuItems(ref result, globalType, "", 0, fsmProperty.setProperty);
            }
            return(result);
        }
Example #5
0
    public Skill(IObject obj, int skillId)
    {
        if (mSkillProperty != null)
        {
            return;
        }

        mSelfObj = obj;
        mSkillId = skillId;

        mSkillProperty = XmlManager.Instance.GetSkillProperty(mSkillId);
    }
Example #6
0
    public Transform GetSkill(Transform chess)
    {
        Transform theSkill = null;

        Transform[] skills = chess.GetComponent <SkillSets>().Skills;
        foreach (Transform skill in skills)
        {
            SkillProperty skillProperty = skill.GetComponent <SkillProperty>();
            if (skillProperty.SType == SkillType.EnhanceSelf)
            {
                theSkill = skill;
                break;
            }
        }
        return(theSkill);
    }
        private static void OpenSubPropertyMenu()
        {
            SkillEditor.OnRepaint = (SkillEditor.RepaintDelegate)Delegate.Remove(SkillEditor.OnRepaint, new SkillEditor.RepaintDelegate(TypeHelpers.OpenSubPropertyMenu));
            string        text        = TypeHelpers.subPropertyPath;
            SkillProperty fsmProperty = TypeHelpers.targetFsmProperty;
            GenericMenu   genericMenu = new GenericMenu();
            Type          globalType  = ReflectionUtils.GetGlobalType(fsmProperty.TargetTypeName);

            if (globalType != null)
            {
                string path         = TypeHelpers.NicifyPropertyPath(text);
                Type   propertyType = ReflectionUtils.GetPropertyType(globalType, text);
                TypeHelpers.AddPropertyMenuItems(ref genericMenu, propertyType, path, 0, fsmProperty.setProperty);
            }
            TypeHelpers.subPropertyPath = "";
            genericMenu.ShowAsContext();
        }
Example #8
0
    bool LoadSkillProperty()
    {
        byte[] asset = ResourceManager.Instance.GetXml("SkillProperty");
        if (asset == null)
        {
            return(false);
        }

        TbXmlNode docNode = TbXml.Load(asset).docNode;

        if (docNode == null)
        {
            return(false);
        }

        List <TbXmlNode> xmlNodeList = docNode.GetNodes("SkillProperty/Property");
        int xmlNodeListLength        = xmlNodeList.Count;

        if (xmlNodeListLength < 1)
        {
            return(false);
        }

        for (int i = 0; i < xmlNodeListLength; ++i)
        {
            SkillProperty sp   = new SkillProperty();
            TbXmlNode     node = xmlNodeList[i] as TbXmlNode;
            sp.mSkillId               = node.GetIntValue("No");
            sp.mSkillName             = node.GetStringValue("Name");
            sp.mSkillOwnerId          = node.GetIntValue("Model");
            sp.mSkillIndex            = node.GetIntValue("SkillNumber");
            sp.mSkillSpace            = node.GetFloatValue("SkillSpace");
            sp.mSkillConsumptionType  = (SkillConsumptionType)node.GetIntValue("SkillConsumptionType");
            sp.mSkillConsumptionValue = node.GetIntValue("SkillConsumptionValue");
            sp.mAnimatorSkillProperty = new AnimatorSkillProperty();

            mSkillPropertyDic.Add(sp.mSkillId, sp);
        }

        return(true);
    }
        public static GenericMenu GenerateObjectTypesMenu(SkillProperty fsmProperty)
        {
            TypeHelpers.RebuildTypeList();
            TypeHelpers.targetFsmProperty = fsmProperty;
            GenericMenu genericMenu = new GenericMenu();

            using (List <Type> .Enumerator enumerator = TypeHelpers.ObjectTypeList.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    Type   current  = enumerator.get_Current();
                    string fullName = current.get_FullName();
                    if (fullName != null)
                    {
                        string text = fullName.Replace('.', '/');
                        genericMenu.AddItem(new GUIContent(text), false, new GenericMenu.MenuFunction2(TypeHelpers.SetFsmPropertyTargetType), fullName);
                    }
                }
            }
            return(genericMenu);
        }
Example #10
0
    public int CalculateAttack(SkillProperty skill, SkillDefProperty receiver, bool isNormalAtk, HeaderProto.ESkillEffect byskilleffect, out bool isSuper, out bool bDodge)
    {
        //首先判断是否命中...
        isSuper = false;
        bDodge  = false;
        float hitRate = skill.hitRate - receiver.dodgeRate;

        if (hitRate <= 0.0f)
        {
            bDodge = true;
            return(0);
        }
        int hit = Random.Range(0, 10001);

        if (hit > (int)(hitRate * 10000))
        {
            bDodge = true;
            return(0);
        }
        //判断是否暴击...
        float superAttack = 0.0f;
        float superRate   = skill.superRate - receiver.toughness;

        if (superRate > 0.0f)
        {
            int super = Random.Range(0, 10001);

            if (super <= (int)(superRate * 10000))
            {
                isSuper     = true;
                superAttack = skill.superAttack - receiver.superDef;
                if (superAttack < 1.0f)
                {
                    superAttack = 1.0f;
                }
                skill.atk        = (int)((float)skill.atk * superAttack);
                skill.iceAtk     = (int)((float)skill.iceAtk * superAttack);
                skill.fireAtk    = (int)((float)skill.fireAtk * superAttack);
                skill.thunderAtk = (int)((float)skill.thunderAtk * superAttack);
                skill.poisonAtk  = (int)((float)skill.poisonAtk * superAttack);
            }
        }
        float attPerSec = skill.attPerSecond;
        int   def       = receiver.def;

        if (skill.type == SkillType.Skill_Ice)
        {
            def = receiver.iceDef;
        }
        else if (skill.type == SkillType.Skill_Fire)
        {
            def = receiver.fireDef;
        }
        else if (skill.type == SkillType.Skill_Poison)
        {
            def = receiver.poisonDef;
        }
        else if (skill.type == SkillType.Skill_Thunder)
        {
            def = receiver.thunderDef;
        }

        def = (int)(def * (1.0f - skill.passThrough));
        //计算减伤...
        float hurtDec = def / ((float)def + receiver.level * 270 + 2700);
        //计算最终伤害...
        int damage = (int)((((skill.atk + skill.iceAtk + skill.fireAtk + skill.poisonAtk + skill.thunderAtk) * skill.Y + skill.Z) *
                            (1.0f + skill.YZFix) + skill.ZFix) * skill.damagePer);
        //伤害附加 减伤
        int hurt = 0;

        if (byskilleffect == HeaderProto.ESkillEffect.SKILL_EFFECT_CURE_HP ||
            byskilleffect == HeaderProto.ESkillEffect.SKILL_EFFECT_CURE_MP)
        {
            hurt = damage;
        }
        else
        {
            hurt = (int)(damage * (1.0f + skill.hurtOtherModify + skill.PropertyModify + skill.BodyTypeModify + skill.StateModify) * (1.0f - hurtDec) * (1.0f + receiver.beHurtModify));
        }
        if (hurt <= 0)
        {
            hurt = Random.Range(1, 6);
        }
        return(hurt);
    }
Example #11
0
    //virtual protected void CastSkill(Transform skillTrans)    //施放指定技能
    //{

    //    if (skillTrans.GetComponent<SkillProperty>().flashing <= 0) //未在冷却
    //    {
    //        skillTrans.GetComponent<SkillProperty>().flashing = skillTrans.GetComponent<SkillProperty>().flash; //重置冷却
    //        gameObject.GetComponent<Hero1Skill>().Skill
    //            (skillTrans.gameObject.GetComponent<SkillProperty>().skillName);  //施放skill

    //        //后摇僵直
    //        GetComponent<Character>().action = false;
    //        herorigidbody.velocity = new Vector2(0, 0);
    //        //重置后摇时间
    //        skillTrans.GetComponent<SkillProperty>().staying = skillTrans.GetComponent<SkillProperty>().stay;

    //    }
    //}
    virtual protected void CastSkill(SkillProperty skillProperty)    //施放指定技能
    {
        heroSkill.Skill
            (skillProperty);      //施放skill
    }
Example #12
0
    IEnumerator State(shuxing enemyshuxing, SkillProperty name, float addState, float keeptime)
    {
        switch (name)
        {
        case SkillProperty.Attack:
            if (keeptime <= 0)
            {
                enemyshuxing.Attack1 += addState;
            }
            else
            {
                enemyshuxing.Attack1 += addState;
                yield return(new WaitForSeconds(keeptime));

                enemyshuxing.Attack1 -= addState;
            }
            break;

        case SkillProperty.DEF:
            if (keeptime <= 0)
            {
                enemyshuxing.DEF1 += addState;
            }
            else
            {
                enemyshuxing.DEF1 += addState;
                yield return(new WaitForSeconds(keeptime));

                enemyshuxing.DEF1 -= addState;
            }
            break;

        case SkillProperty.Field:
            if (keeptime <= 0)
            {
                enemyshuxing.Field1 += addState;
            }
            else
            {
                enemyshuxing.Field1 += addState;
                yield return(new WaitForSeconds(keeptime));

                enemyshuxing.Field1 -= addState;
            }
            break;

        case SkillProperty.HP:
            if (keeptime <= 0)
            {
                enemyshuxing.HP1 += addState;
            }
            else
            {
                enemyshuxing.HP1 += addState;
                yield return(new WaitForSeconds(keeptime));

                enemyshuxing.HP1 -= addState;
            }
            break;

        case SkillProperty.HPre:
            if (keeptime <= 0)
            {
                enemyshuxing.HPre1 += addState;
            }
            else
            {
                enemyshuxing.HPre1 += addState;
                yield return(new WaitForSeconds(keeptime));

                enemyshuxing.HPre1 -= addState;
            }
            break;

        case SkillProperty.MoveSpeed:
            if (keeptime <= 0)
            {
                enemyshuxing.MoveSpeed1 += addState;
            }
            else
            {
                enemyshuxing.MoveSpeed1 += addState;
                yield return(new WaitForSeconds(keeptime));

                enemyshuxing.MoveSpeed1 -= addState;
            }
            break;
        }
    }
Example #13
0
 public void ShangHaiJiSuan(shuxing enemyshuxing, SkillProperty name, float addState, float keeptime)
 {
     StartCoroutine(State(enemyshuxing, name, addState, keeptime));
 }
Example #14
0
 public static GenericMenu GeneratePropertyMenu(SkillProperty fsmProperty)
 {
     return(TypeHelpers.GeneratePropertyMenu(fsmProperty));
 }
Example #15
0
 protected override void InternalDispose()
 {
     this.property.OnChanged -= this._OnAttrChanged;
     this.property            = null;
     this._data = null;
 }
Example #16
0
    public DamageResult testHurt(sdActorInterface _gameActor, Hashtable _state, sdActorInterface targetActor, int hitPointIndex, HeaderProto.ESkillEffect bySkillEffect)
    {
        DamageResult dr;

        dr.damage     = 0;
        dr.bubbleType = Bubble.BubbleType.eBT_BaseHurt;
        dr.attracker  = _gameActor;

        Hashtable recProp = targetActor.GetProperty();

        if (recProp == null)
        {
            return(dr);
        }
        SkillProperty skillProp = new SkillProperty();

        int   dmgMin            = (int)_gameActor["AtkDmgMin"];
        int   dmgMax            = (int)_gameActor["AtkDmgMax"];
        int   iceAtt            = (int)_gameActor["IceAtt"];
        int   fireAtt           = (int)_gameActor["FireAtt"];
        int   poisonAtt         = (int)_gameActor["PoisonAtt"];
        int   thunerAtt         = (int)_gameActor["ThunderAtt"];
        int   intervalPerAttack = (int)_gameActor["AttSpeed"];       // ms per attack
        float attackPerSecond   = 1000.0f / (float)intervalPerAttack;
        int   d10000            = ((int[])_state["dwAtkPowerPer[10]"])[hitPointIndex];
        int   dx = ((int[])_state["dwDmg[10]"])[hitPointIndex];
        int   byPeriodicDamageType = 0;                   //(int)_state.stateData["byPeriodicDamage"];

        Hashtable attTable = new Hashtable();
        int       phyAtt   = dmgMin;

        //如果最小攻击力 大于 最大攻击力 直接取最小攻击力...
        if (dmgMax > dmgMin)
        {
            phyAtt = Random.Range(dmgMin, dmgMax);
        }

        float iPercentFix = 0.0f;
        int   iDamageFix  = 0;

        switch ((EPeriodicDamage)byPeriodicDamageType)
        {
        ///每波伤害相同...
        case    EPeriodicDamage.PERIODIC_DAMAGE_SAME: {} break;

        ///固定值递增:Data + DataPeriodic * (Index)...
        case    EPeriodicDamage.PERIODIC_DAMAGE_INCREASE: {
            iDamageFix = (int)_state["dwPeriodicTraumaHP"] * (hitPointIndex + 1);
        } break;

        ///百分比递增:HP*(Data + DataPeriodic * (Index))...
        case        EPeriodicDamage.PERIODIC_DAMAGE_INCREASE_PERCENT: {
            iPercentFix = ((int)_state["dwPeriodicTraumaHP"] / 10000.0f) * (hitPointIndex + 1);
        } break;

        ///固定值递减:Data - DataPeriodic * (Index)...
        case    EPeriodicDamage.PERIODIC_DAMAGE_DECREASE: {
            iDamageFix = -(int)_state["dwPeriodicTraumaHP"] * (hitPointIndex + 1);
        } break;

        ///百分比递减:HP*(Data - DataPeriodic * (Index))...
        case    EPeriodicDamage.PERIODIC_DAMAGE_DECREASE_PERCENT: {
            iPercentFix = -((int)_state["dwPeriodicTraumaHP"] / 10000.0f) * (hitPointIndex + 1);
        } break;

        ///第一波伤害最大,其余伤害相同,第一波伤害计算公式:...
        ///固定值方式:Data - DataPeriodic...
        case    EPeriodicDamage.PERIODIC_DAMAGE_FIRST: {
            if (hitPointIndex == 0)
            {
                iDamageFix = (int)_state["dwPeriodicTraumaHP"];
            }
        } break;

        ///百分比方式:HP*(Data + DataPeriodic)...
        case    EPeriodicDamage.PERIODIC_DAMAGE_FIRST_PERCENT: {
            if (hitPointIndex == 0)
            {
                iPercentFix = ((int)_state["dwPeriodicTraumaHP"] / 10000.0f);
            }
        } break;

        ///最后一波伤害最大,其余伤害相同,第一波伤害计算公式:
        ///固定值方式:Data + DataPeriodic
        case        EPeriodicDamage.PERIODIC_DAMAGE_END: {
            if (hitPointIndex == -1)
            {
                iPercentFix = (int)_state["dwPeriodicTraumaHP"];
            }
        } break;

        ///百分比方式:HP*(Data + DataPeriodic)...
        case    EPeriodicDamage.PERIODIC_DAMAGE_END_PERCENT: {
            if (hitPointIndex == -1)
            {
                iPercentFix = ((int)_state["dwPeriodicTraumaHP"] / 10000.0f);
            }
        } break;
        }
        int skillHit    = (int)_state["dwHitPer"];
        int skillCri    = (int)_state["dwCriticalPer"];
        int skillCriDmg = (int)_state["dwCriticalDmgPer"];

        skillProp.atk        = phyAtt;
        skillProp.iceAtk     = iceAtt;
        skillProp.fireAtk    = fireAtt;
        skillProp.poisonAtk  = poisonAtt;
        skillProp.thunderAtk = thunerAtt;
        skillProp.Y          = (float)d10000 / 10000.0f;
        skillProp.Z          = dx;
        skillProp.YZFix      = iPercentFix;
        skillProp.ZFix       = iDamageFix;
        skillProp.hitRate    = (float)_gameActor["Hit"] * fPropertyScale + (float)_gameActor["HitPer"] * 0.0001f + (skillHit) * 0.0001f;
        int pierce = _gameActor["Pierce"];

        skillProp.passThrough = (float)pierce / (float)(pierce + (int)recProp["Level"] * 270 + 2700);

        skillProp.superAttack  = (float)_gameActor["CriDmg"] * 0.0001f + (skillCriDmg) * 0.0001f;
        skillProp.superRate    = (float)_gameActor["Cri"] * fPropertyScale + (float)_gameActor["CriPer"] * 0.0001f + (skillCri) * 0.0001f;
        skillProp.attPerSecond = attackPerSecond;
        if (_state.ContainsKey("dwDamagePer"))
        {
            skillProp.damagePer = ((int)_state["dwDamagePer"]) * 0.0001f;
        }
        else
        {
            skillProp.damagePer = 1.0f;
        }
        if (_gameActor.Property.ContainsKey("HurtOtherModify"))
        {
            skillProp.hurtOtherModify = ((int)_gameActor["HurtOtherModify"]) * 0.0001f;
        }
        else
        {
            skillProp.hurtOtherModify = 0.0f;
        }

        //属性修正aaa
        int attAttr = (int)_state["byDamegePro"];

        if (attAttr == 0)
        {
            skillProp.type = SkillType.Skill_Physic;
        }
        else if (attAttr == 1)
        {
            skillProp.type = SkillType.Skill_Ice;
        }
        else if (attAttr == 2)
        {
            skillProp.type = SkillType.Skill_Fire;
        }
        else if (attAttr == 3)
        {
            skillProp.type = SkillType.Skill_Poison;
        }
        else if (attAttr == 4)
        {
            skillProp.type = SkillType.Skill_Thunder;
        }
        skillProp.PropertyModify = CalulatePropertyModify(_gameActor, attAttr);
        ///体型修正aaaa
        skillProp.BodyTypeModify = CalulateBodyModify(_state, targetActor);
        //控制状态修正aaa
        skillProp.StateModify = CalulateStateModify(_gameActor, targetActor);

        SkillDefProperty defProp = new SkillDefProperty();

        defProp.level = (int)recProp["Level"];
        defProp.def   = (int)recProp["Def"];
        int dodge = (int)recProp["Dodge"];

        defProp.dodgeRate  = dodge * fPropertyScale;
        defProp.dodgeRate += ((int)recProp["DodgePer"]) * 0.0001f;
        defProp.fireDef    = (int)recProp["FireDef"];
        defProp.iceDef     = (int)recProp["IceDef"];
        defProp.poisonDef  = (int)recProp["PoisonDef"];
        int criDmgDef = (int)recProp["CriDmgDef"];

        defProp.superDef   = (float)criDmgDef * 0.0001f;
        defProp.thunderDef = (int)recProp["ThunderDef"];
        int flex = (int)recProp["Flex"];

        defProp.toughness = (float)flex * fPropertyScale;
        if (recProp.ContainsKey("BeHurtModify"))
        {
            defProp.beHurtModify = ((int)recProp["BeHurtModify"]) * 0.0001f;
        }
        else
        {
            defProp.beHurtModify = 0.0f;
        }

        bool isNormalAtk = false;

        if (attAttr == 0)
        {
            isNormalAtk = true;
        }

        bool isSuper;
        bool bDodge;

        dr.damage = CalculateAttack(skillProp, defProp, isNormalAtk, bySkillEffect, out isSuper, out bDodge);
        CalculateBubbleType(_state, _gameActor, targetActor, isSuper, bDodge, ref dr);
        if (bySkillEffect == HeaderProto.ESkillEffect.SKILL_EFFECT_CURE_HP)
        {
            targetActor.AddHP(dr.damage);
        }
        else if (bySkillEffect == HeaderProto.ESkillEffect.SKILL_EFFECT_CURE_MP)
        {
            targetActor.AddSP(dr.damage);
        }
        else if (bySkillEffect == HeaderProto.ESkillEffect.SKILL_EFFECT_DAMAGE_SP)
        {
            targetActor.AddSP(-dr.damage);
        }
        else
        {
            if (targetActor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_UNBEAT))
            {
                dr.bubbleType = Bubble.BubbleType.eBT_Dodge;
                dr.damage     = 0;
            }
            targetActor.OnHurt(dr);
        }
        if (_state.Contains("WeaponHitType"))
        {
            targetActor.DoHittedAudio((string)_state["WeaponHitType"]);
        }
        if (targetActor.actorType == ActorType.AT_Monster && dr.damage > 0)
        {
            sdGameMonster monster     = (sdGameMonster)targetActor;
            int           monsterType = (int)monster.Property["BodyType"];
            if (_state.Contains("ParentID") && _state.Contains("dwTemplateID"))            //临时代码判断是技能伤害aa
            {
                int id = (int)_state["dwTemplateID"];
                _gameActor.OnAttackRestore(id, dr.damage, monsterType);
            }
        }
        //是否打断被击目标的某些buffer
        if (_state.ContainsKey("BreakState"))
        {
            int[] buffID = (int[])(_state["BreakState"]);
            if (buffID.Length == 2)
            {
                targetActor.RemoveBuff(buffID[0], buffID[1]);
            }
        }
        return(dr);
    }
Example #17
0
 void Start()
 {
     playerA  = GameObject.Find("pSummonerA").transform;
     playerB  = GameObject.Find("pSummonerB").transform;
     property = transform.GetComponent <SkillProperty>();
 }
Example #18
0
        private static object TryConvertValue(Type fieldType, object currentValue, object value)
        {
            if (value == null)
            {
                return(null);
            }
            Type type = value.GetType();

            if (fieldType == typeof(GameObject))
            {
                if (type.IsSubclassOf(typeof(Component)))
                {
                    return(((Component)value).get_gameObject());
                }
            }
            else
            {
                if (fieldType == typeof(SkillGameObject))
                {
                    if (type == typeof(GameObject))
                    {
                        return(new SkillGameObject(value as GameObject));
                    }
                    if (type.IsSubclassOf(typeof(Component)))
                    {
                        return(new SkillGameObject(((Component)value).get_gameObject()));
                    }
                }
                else
                {
                    if (fieldType == typeof(SkillOwnerDefault))
                    {
                        if (type == typeof(GameObject))
                        {
                            SkillOwnerDefault fsmOwnerDefault = new SkillOwnerDefault();
                            fsmOwnerDefault.set_OwnerOption(1);
                            fsmOwnerDefault.set_GameObject(value as GameObject);
                            return(fsmOwnerDefault);
                        }
                        if (type.IsSubclassOf(typeof(Component)))
                        {
                            GameObject gameObject = ((Component)value).get_gameObject();
                            if (gameObject != SkillEditor.SelectedFsmGameObject)
                            {
                                SkillOwnerDefault fsmOwnerDefault2 = new SkillOwnerDefault();
                                fsmOwnerDefault2.set_OwnerOption(1);
                                fsmOwnerDefault2.set_GameObject(gameObject);
                                return(fsmOwnerDefault2);
                            }
                            return(new SkillOwnerDefault());
                        }
                    }
                    else
                    {
                        if (fieldType == typeof(SkillProperty))
                        {
                            SkillProperty fsmProperty  = currentValue as SkillProperty;
                            SkillProperty fsmProperty2 = new SkillProperty();
                            SkillProperty arg_14D_0    = fsmProperty2;
                            SkillObject   fsmObject    = new SkillObject();
                            fsmObject.set_Value(value as Object);
                            arg_14D_0.TargetObject   = fsmObject;
                            fsmProperty2.setProperty = (fsmProperty != null && fsmProperty.setProperty);
                            return(fsmProperty2);
                        }
                        if (fieldType == typeof(SkillObject))
                        {
                            SkillObject fsmObject2 = new SkillObject();
                            fsmObject2.set_Value(value as Object);
                            return(fsmObject2);
                        }
                        if (fieldType == typeof(SkillMaterial))
                        {
                            SkillMaterial fsmMaterial = new SkillMaterial();
                            fsmMaterial.set_Value(value as Material);
                            return(fsmMaterial);
                        }
                        if (fieldType == typeof(SkillTexture))
                        {
                            SkillTexture fsmTexture = new SkillTexture();
                            fsmTexture.set_Value(value as Texture);
                            return(fsmTexture);
                        }
                        if (fieldType == typeof(SkillEventTarget))
                        {
                            if (type == typeof(PlayMakerFSM))
                            {
                                return(new SkillEventTarget
                                {
                                    target = 3,
                                    fsmComponent = value as PlayMakerFSM
                                });
                            }
                            if (type == typeof(GameObject))
                            {
                                SkillEventTarget fsmEventTarget = new SkillEventTarget();
                                fsmEventTarget.target = 1;
                                SkillEventTarget  arg_253_0        = fsmEventTarget;
                                SkillOwnerDefault fsmOwnerDefault3 = new SkillOwnerDefault();
                                fsmOwnerDefault3.set_OwnerOption(1);
                                fsmOwnerDefault3.set_GameObject(value as GameObject);
                                arg_253_0.gameObject = fsmOwnerDefault3;
                                return(fsmEventTarget);
                            }
                        }
                        else
                        {
                            if (fieldType == typeof(SkillString))
                            {
                                if (type == typeof(PlayMakerFSM))
                                {
                                    SkillString fsmString = new SkillString();
                                    fsmString.set_Value(((PlayMakerFSM)value).get_FsmName());
                                    return(fsmString);
                                }
                                if (type == typeof(AnimationClip))
                                {
                                    SkillString fsmString2 = new SkillString();
                                    fsmString2.set_Value(((AnimationClip)value).get_name());
                                    return(fsmString2);
                                }
                            }
                        }
                    }
                }
            }
            return(value);
        }
	public void SkillDamage( SkillProperty _Attacker , SkillProperty _Defender )
	{
		Debug.Log( "SkillDamage()" ) ;
		if( null == _Attacker || 
			null == _Defender )
		{
			return ;
		}
		
		// attacker 的 attack property 會被 defender 的 defense property 抵銷
		Debug.Log( "_Attacker.AttackProperty=" + _Attacker.AttackProperty.CreatePropertyString() ) ;
		Debug.Log( "_Defender.DefenseProperty=" + _Defender.DefenseProperty.CreatePropertyString() ) ;
		
		string [] keys = _Attacker.AttackProperty.GetKeys() ;
		for( int i = 0 ; i < keys.Length ; ++i )
		{
			int attackPower = _Attacker.AttackProperty.GetProperty( keys[ 0 ] ) ;
			Debug.Log( "attackPower" + attackPower ) ;
			int attckPowerRemain = 
				_Defender.DefenseProperty.AddPropertyToArmor( keys[ 0 ] , -attackPower ) ;
			
			Debug.Log( "attckPowerRemain" + attckPowerRemain ) ;
			_Attacker.AttackProperty.AssignProperty( keys[ 0 ] , attckPowerRemain ) ;
			
			
			Debug.Log( "_Attacker.AttackProperty for " + keys[ 0 ] + " = " + _Attacker.AttackProperty.GetProperty( keys[ 0 ] ) ) ;
			Debug.Log( "_Defender.DefenseProperty for " + keys[ 0 ] + " = " + _Defender.DefenseProperty.GetProperty( keys[ 0 ] ) ) ;
			
			
		}
	}
Example #20
0
    public UICommands GetFirstCommand(Transform chess)
    {
        UICommands        uiCmds        = UICommands.none;
        CharacterProperty chessProperty = chess.GetComponent <CharacterProperty>();

        if (chessProperty.Summoner)
        {
            if (MapHelper.Attackable(chess))
            {
                if (KillAble(chess, 0, chessProperty.Damage))
                {
                    uiCmds = UICommands.Attack;
                }
                else
                {
                    uiCmds = UICommands.Defense;
                }
            }
            else
            {
                uiCmds = UICommands.Move;
                Transform map = GetMoveTarget(chess);
                if (map == null)
                {
                    uiCmds = UICommands.Defense;
                }
            }
        }
        else
        {
            if (MapHelper.Attackable(chess))
            {
                if (KillAble(chess, 0, chessProperty.Damage) || KillAble(chess, 1, 0))
                {
                    uiCmds = UICommands.Attack;
                }
                else
                {
                    uiCmds = UICommands.none;
                }
            }
            else
            {
                uiCmds = UICommands.Move;
            }

            if (uiCmds == UICommands.none)
            {
                Transform[] skills = chess.GetComponent <SkillSets>().Skills;
                foreach (Transform skill in skills)
                {
                    if (currentSelect.player.GetComponent <ManaCounter>().Mana >= skill.GetComponent <SkillProperty>().SkillCost)
                    {
                        SkillProperty skillProperty = skill.GetComponent <SkillProperty>();
                        if (skillProperty.SType == SkillType.EnhanceSelf && skillProperty.Mode == PowerType.Damage)
                        {
                            int newDamage = chessProperty.Damage + skillProperty.ModeValue;
                            if (KillAble(chess, 0, newDamage))
                            {
                                uiCmds = UICommands.Skill;
                            }
                            else
                            {
                                uiCmds = UICommands.Move;
                            }
                        }
                        else
                        {
                            uiCmds = UICommands.Move;
                        }
                    }
                    else
                    {
                        uiCmds = UICommands.Move;
                    }
                }
            }
        }
        return(uiCmds);
    }
 void Start()
 {
     playerA = GameObject.Find("pSummonerA").transform;
     playerB = GameObject.Find("pSummonerB").transform;
     property = transform.GetComponent<SkillProperty>();
 }
Example #22
0
    public UICommands GetSecondCommand(Transform chess)
    {
        UICommands        uiCmds  = UICommands.none;
        CharacterProperty chessP  = chess.GetComponent <CharacterProperty>();
        AIMoveStore       chessAI = new AIMoveStore(chess);

        if (chessAI.CmdsUsed.Count <= 1)
        {
            if (chessP.Summoner)
            {
                if (chessAI.CmdsLeft.Contains(UICommands.Attack) && MapHelper.Attackable(chess))
                {
                    if (KillAble(chess, 0, chessP.Damage))
                    {
                        uiCmds = UICommands.Attack;
                    }
                    else if (chessAI.CmdsLeft.Contains(UICommands.Defense))
                    {
                        uiCmds = UICommands.Defense;
                    }
                }
                else if (chessAI.CmdsUsed.Contains(UICommands.Move))
                {
                    uiCmds = UICommands.Defense;
                }
                else if (chessAI.CmdsUsed.Contains(UICommands.Defense))
                {
                    //check if summonable
                    Transform summonGF  = GetSummonGF(chess);
                    Transform summonPos = GetSummonPosition(chess);
                    if (summonGF != null && summonPos != null)
                    {
                        uiCmds = UICommands.Summon;
                    }
                }
            }
            else
            {
                if (MapHelper.Attackable(chess))
                {
                    if (KillAble(chess, 0, chessP.Damage) || KillAble(chess, 1, 0))
                    {
                        if (chessAI.CmdsLeft.Contains(UICommands.Attack))
                        {
                            uiCmds = UICommands.Attack;
                        }
                    }
                    else
                    {
                        Transform[] skills = chess.GetComponent <SkillSets>().Skills;
                        foreach (Transform skill in skills)
                        {
                            if (currentSelect.player.GetComponent <ManaCounter>().Mana >= skill.GetComponent <SkillProperty>().SkillCost)
                            {
                                SkillProperty skillProperty = skill.GetComponent <SkillProperty>();
                                if (skillProperty.SType == SkillType.EnhanceSelf && skillProperty.Mode == PowerType.Damage)
                                {
                                    int newDamage = chessP.Damage + skillProperty.ModeValue;
                                    if (KillAble(chess, 0, newDamage) && chessAI.CmdsLeft.Contains(UICommands.Skill))
                                    {
                                        uiCmds = UICommands.Skill;
                                    }
                                    else if (chessAI.CmdsLeft.Contains(UICommands.Move))
                                    {
                                        uiCmds = UICommands.Move;
                                    }
                                }
                                else if (chessAI.CmdsLeft.Contains(UICommands.Move))
                                {
                                    uiCmds = UICommands.Move;
                                }
                            }
                            else if (chessAI.CmdsLeft.Contains(UICommands.Move))
                            {
                                uiCmds = UICommands.Move;
                            }
                        }
                    }
                }
            }
        }
        else
        {
            print("what a f**k, it's not second move");
        }

        return(uiCmds);
    }
Example #23
0
 public Skill()
 {
     this.property            = new SkillProperty();
     this.property.OnChanged += this._OnAttrChanged;
 }