Пример #1
0
    private bool CreateState(StateMachineInfo.StateDetail s, StateMachineInfo parent)
    {
        if (!s.valid)
        {
            return(false);
        }

        StateMachineState state = null;

        var skillID = SkillToStateInfo.GetSkillID(creature.weaponID, s.ID);

        if (skillID < 0)
        {
            var list = AwakeInfo.GetSkillIDList(s.hash);
            if (list != null && list.Count > 0)
            {
                var ss = new List <StateMachineInfo.StateDetail>();
                foreach (var id in list)
                {
                    var lv = creature.GetSkillLevel(id);
                    if (lv > 0)
                    {
                        var ainfo      = ConfigManager.Get <AwakeInfo>(id);
                        var stateLevel = ainfo?.states.Find(Item => Item.state == s.state);
                        if (stateLevel != null)
                        {
                            lv = stateLevel.level;
                        }
                    }

                    if (lv >= 0)
                    {
                        var os = StateOverrideInfo.GetOriginOverrideState(info, s, lv);
                        if (os != null)
                        {
                            ss.Add(os);
                        }
                    }
                }
                s = StateOverrideInfo.StateOverride.Combin(s, ss);
            }

            if (!s.valid)
            {
                return(false);
            }

            state = StateMachineState.Create(this, parent, s, SkilLEntry.empty);
        }
        else
        {
            var skill = creature.GetSkillEntry(skillID);
            var level = skill.valid ? skill.level : 0;
            var ls    = level <= 0 ? s : StateOverrideInfo.GetOverrideState(info, s, level);

            if (!ls.valid)
            {
                return(false);
            }

            state = StateMachineState.Create(this, parent, ls, skill);
        }

        states.Add(state);

        if (state.passive)
        {
            m_passiveHash.Set(s.ID, states.Count - 1);
        }
        if (s.coolGroup != 0)
        {
            m_coolGroups.GetDefault(s.coolGroup).Add(state);
        }

        return(true);
    }
Пример #2
0
    public static StateMachineState Create(StateMachine stateMachine, StateMachineInfo parent, StateMachineInfo.StateDetail info, SkilLEntry skill)
    {
        var state = Create(false);

        state.stateMachine = stateMachine;
        state.parent       = parent;
        state.info         = info;

        state.OnInitialize();

        if (skill.valid)
        {
            state.m_skill = skill.skillId;
            state.m_level = skill.level;

            state.m_skillDamageMul  = state.m_skill > -1 && state.m_level > -1 ? UpSkillInfo.GetOverrideDamage(state.m_skill, state.m_level) : 0;
            state.m_skillDamageMul *= 1 + skill.addtion; // @TODO: ??
        }

        return(state);
    }