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); }
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); }