private void CreateStates() { states.Clear(); m_passiveHash.Clear(); m_coolGroups.Clear(); var ss = info.states; foreach (var s in ss) { CreateState(s, info); } StateMachineInfoPassive psm = null; foreach (var sub in subStateMachines) { if (psm == null && sub is StateMachineInfoPassive) { psm = sub as StateMachineInfoPassive; } foreach (var s in sub.states) { CreateState(s, sub); } } m_laydown = GetState(StateMachineState.STATE_LAYDOWN); if (!m_laydown) { var p = psm ?? info; CreateState(StateMachineInfo.GetDefaultLaydownState(p.GetType().GetHashCode(), p.ID), p); } if (states.Count < 1) { states.Add(StateMachineState.Create(this, info, StateMachineInfo.emptyState, SkilLEntry.empty)); } }
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); }