Merge remote-tracking branch 'origin/master' into Auction
| | |
| | |
|
| | | public class PlayerSkillDatas
|
| | | {
|
| | | private Dictionary<int, PlayerSkillData> _playerSkills = new Dictionary<int, PlayerSkillData>();
|
| | | private Dictionary<int, PlayerSkillData> _quickSkills = new Dictionary<int, PlayerSkillData>();
|
| | | public static event Action OnQuickSkillRefresh;
|
| | | public static event Action OnRefreshSkill;
|
| | | private Dictionary<int, PlayerSkillData> m_PlayerSkills = new Dictionary<int, PlayerSkillData>();
|
| | | private Dictionary<int, PlayerSkillData> m_QuickSkills = new Dictionary<int, PlayerSkillData>();
|
| | | private Dictionary<int, List<int>> filterPlayerSkillDic = new Dictionary<int, List<int>>();
|
| | | private Dictionary<int, int> filterQuickSkillDic = new Dictionary<int, int>();
|
| | |
|
| | | public static event Action OnQuickSkillRefresh;
|
| | | public static event Action OnRefreshSkill;
|
| | | private bool hasInitQuickSkill = false;
|
| | |
|
| | | private bool isServerPrepare = false;
|
| | |
|
| | | SkillModel m_Model;
|
| | |
| | | }
|
| | |
|
| | | PlayerSkillData data = null;
|
| | | _playerSkills.TryGetValue(vNetData.NewSkillID, out data);
|
| | | m_PlayerSkills.TryGetValue(vNetData.NewSkillID, out data);
|
| | | if (data == null)
|
| | | {
|
| | | data = new PlayerSkillData(vNetData.NewSkillID, 1);
|
| | | _playerSkills.Add(data.id, data);
|
| | | m_PlayerSkills.Add(data.id, data);
|
| | | }
|
| | |
|
| | | model.CheckEquipPassSkill(data);
|
| | |
|
| | | bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
|
| | |
|
| | | |
| | | if (hasInitQuickSkill)
|
| | | {
|
| | | int pos = ContainsQuickSkillType(data.id);
|
| | | if (pos != -1)
|
| | | {
|
| | | SetQuickSkill(pos, data.id);
|
| | | }
|
| | | }
|
| | |
|
| | | PlayerSkillData olddata = null;
|
| | | _playerSkills.TryGetValue(vNetData.OldSkillID, out olddata);
|
| | | m_PlayerSkills.TryGetValue(vNetData.OldSkillID, out olddata);
|
| | | if (olddata != null)
|
| | | {
|
| | | if (hasInitQuickSkill)
|
| | | {
|
| | | int pos = ContainsQuickSkill(olddata.id);
|
| | | if (pos != -1 && !fitter)
|
| | | {
|
| | | SetQuickSkill(pos, data.id);
|
| | | }
|
| | | }
|
| | | _playerSkills.Remove(vNetData.OldSkillID);
|
| | | m_PlayerSkills.Remove(vNetData.OldSkillID);
|
| | | olddata = null;
|
| | | }
|
| | |
|
| | |
| | |
|
| | | public void SetQuickSkills()
|
| | | {
|
| | | _quickSkills.Clear();
|
| | | m_QuickSkills.Clear();
|
| | | for (int i = 0; i < SkillModel.QUICK_SKILL_COUNT; i++)
|
| | | {
|
| | | _quickSkills.Add(i, null);
|
| | | m_QuickSkills.Add(i, null);
|
| | | }
|
| | | for (int i = 0; i <= SkillModel.QUICK_SKILL_COUNT; i++)
|
| | | {
|
| | |
| | | {
|
| | | continue;
|
| | | }
|
| | | var config = SkillConfig.Get(id);
|
| | | if (config == null)
|
| | | {
|
| | | continue;
|
| | | }
|
| | | PlayerSkillData data = GetSKillById(id);
|
| | | if (data == null)
|
| | | {
|
| | |
| | | }
|
| | | if (!GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id))
|
| | | {
|
| | | _quickSkills[i] = data;
|
| | | m_QuickSkills[i] = data;
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | |
|
| | | public void UpdateQuickSkill(PlayerSkillData data)
|
| | | {
|
| | | if (!hasInitQuickSkill) return;
|
| | | if (!hasInitQuickSkill)
|
| | | {
|
| | | return;
|
| | | }
|
| | | bool fitter = GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(data.id);
|
| | | if (fitter || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
|
| | | {
|
| | |
| | | public PlayerSkillData GetQuickSkillByPos(int pos)
|
| | | {
|
| | | PlayerSkillData data = null;
|
| | | _quickSkills.TryGetValue(pos, out data);
|
| | | m_QuickSkills.TryGetValue(pos, out data);
|
| | | return data;
|
| | | }
|
| | |
|
| | | public PlayerSkillData GetSKillById(int id)
|
| | | {
|
| | | PlayerSkillData data = null;
|
| | | _playerSkills.TryGetValue(id, out data);
|
| | | m_PlayerSkills.TryGetValue(id, out data);
|
| | | return data;
|
| | | }
|
| | |
|
| | | public Dictionary<int, PlayerSkillData> GetQuickSkills()
|
| | | {
|
| | | return _quickSkills;
|
| | | return m_QuickSkills;
|
| | | }
|
| | |
|
| | | public void SetQuickSkill(int pos, int id)
|
| | |
| | | {
|
| | | return;
|
| | | }
|
| | | if (data.skillCfg == null || PlayerDatas.Instance.baseData.LV < data.skillCfg.LearnLVReq
|
| | | || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
|
| | | if (data.skillCfg == null || data.skillCfg.FuncType != SkillModel.ACT_SKILL_TYPE)
|
| | | {
|
| | | ServerTipDetails.DisplayNormalTip(Language.Get("L1009"));
|
| | | return;
|
| | | }
|
| | | bool change = false;
|
| | | for (int i = 0; i < _quickSkills.Count; i++)
|
| | | for (int i = 0; i < m_QuickSkills.Count; i++)
|
| | | {
|
| | | PlayerSkillData skill = null;
|
| | | _quickSkills.TryGetValue(i, out skill);
|
| | | m_QuickSkills.TryGetValue(i, out skill);
|
| | | if (skill == null)
|
| | | {
|
| | | continue;
|
| | |
| | | else if (skill.id == id)
|
| | | {
|
| | | change = true;
|
| | | PlayerSkillData temp = _quickSkills[pos];
|
| | | _quickSkills[pos] = skill;
|
| | | _quickSkills[i] = temp;
|
| | | PlayerSkillData temp = m_QuickSkills[pos];
|
| | | m_QuickSkills[pos] = skill;
|
| | | m_QuickSkills[i] = temp;
|
| | | break;
|
| | | }
|
| | | }
|
| | | if (!change)
|
| | | {
|
| | | _quickSkills[pos] = data;
|
| | | m_QuickSkills[pos] = data;
|
| | | }
|
| | |
|
| | | for (int i = 0; i < _quickSkills.Count; i++)
|
| | | for (int i = 0; i < m_QuickSkills.Count; i++)
|
| | | {
|
| | | PlayerSkillData skill = null;
|
| | | _quickSkills.TryGetValue(i, out skill);
|
| | | m_QuickSkills.TryGetValue(i, out skill);
|
| | | if (skill != null)
|
| | | {
|
| | | string val = MathUtils.Convert10To64(skill.id);
|
| | |
| | |
|
| | | public Dictionary<int, PlayerSkillData> GetAllSkill()
|
| | | {
|
| | | return _playerSkills;
|
| | | return m_PlayerSkills;
|
| | | }
|
| | |
|
| | | public int ContainsQuickSkill(int id)
|
| | | {
|
| | | foreach (int pos in _quickSkills.Keys)
|
| | | foreach (int pos in m_QuickSkills.Keys)
|
| | | {
|
| | | if (_quickSkills[pos] == null) continue;
|
| | | if (_quickSkills[pos].id == id) return pos;
|
| | | if (m_QuickSkills[pos] == null) continue;
|
| | | if (m_QuickSkills[pos].id == id) return pos;
|
| | | }
|
| | | return -1;
|
| | | }
|
| | |
|
| | | public int ContainsQuickSkillType(int id)
|
| | | {
|
| | | foreach (int pos in m_QuickSkills.Keys)
|
| | | {
|
| | | if (m_QuickSkills[pos] == null)
|
| | | {
|
| | | continue;
|
| | | }
|
| | | var quickSkillConfig = SkillConfig.Get(m_QuickSkills[pos].id);
|
| | | var skillConfig = SkillConfig.Get(id);
|
| | | if (quickSkillConfig != null && skillConfig != null
|
| | | && quickSkillConfig.SkillTypeID == skillConfig.SkillTypeID)
|
| | | {
|
| | | return pos;
|
| | | }
|
| | | }
|
| | | return -1;
|
| | | }
|
| | |
| | |
|
| | | public PlayerSkillData GetSkillBySkillTypeID(int typeID)
|
| | | {
|
| | | foreach (var skill in _playerSkills.Values)
|
| | | foreach (var skill in m_PlayerSkills.Values)
|
| | | {
|
| | | if (skill.typeID == typeID)
|
| | | return skill;
|
| | |
| | | public int GetSkillCountByType(int _type)
|
| | | {
|
| | | var count = 0;
|
| | | foreach (var _skill in _playerSkills.Values)
|
| | | foreach (var _skill in m_PlayerSkills.Values)
|
| | | {
|
| | | if (_skill.skillCfg.FuncType == _type)
|
| | | {
|
| | |
| | |
|
| | | public void ClearSkillData()
|
| | | {
|
| | | _quickSkills.Clear();
|
| | | _playerSkills.Clear();
|
| | | m_QuickSkills.Clear();
|
| | | m_PlayerSkills.Clear();
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | public virtual void Export(BinaryWriter bw) |
| | | { |
| | | bw.Write((byte)type); |
| | | Debug.LogFormat("type: {0}", type); |
| | | bw.Write(id); |
| | | Debug.LogFormat("id: {0}", id); |
| | | } |
| | | #endif |
| | | } |
| | |
| | | int _count = br.ReadInt32(); |
| | | for (int i = 0; i < _count; ++i) |
| | | { |
| | | var _go = new GameObject(); |
| | | var _resName = br.ReadString(); |
| | | GameObject _go = null; |
| | | |
| | | if (!string.IsNullOrEmpty(_resName.Trim())) |
| | | { |
| | | string _path = "Assets/ResourcesOut/Mob/Prefab_Race_" + _resName + ".prefab"; |
| | | _go = AssetDatabase.LoadAssetAtPath<GameObject>(_path); |
| | | if (_go) |
| | | { |
| | | _go = Instantiate(_go); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | _go = GameObject.CreatePrimitive(PrimitiveType.Capsule); |
| | | } |
| | | |
| | | _go.transform.SetParent(transform); |
| | | _go.transform.localPosition = Vector3.zero; |
| | | _go.transform.eulerAngles = Vector3.zero; |
| | |
| | | for (int i = monsterList.Count - 1; i >= 0; --i) |
| | | { |
| | | EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); |
| | | EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50)); |
| | | EditorGUILayout.LabelField(monsterList[i].npcID.ToString(), guiSkin.textField, GUILayout.Height(20)); |
| | | EditorGUILayout.LabelField("模型名", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(50)); |
| | | EditorGUILayout.LabelField(monsterList[i].resName, guiSkin.textField, GUILayout.Height(22), GUILayout.Width(70)); |
| | | EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(50)); |
| | | EditorGUILayout.LabelField(monsterList[i].npcID.ToString(), guiSkin.textField, GUILayout.Height(20), GUILayout.Width(70)); |
| | | EditorGUILayout.LabelField("模型名", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(50)); |
| | | EditorGUILayout.LabelField(monsterList[i].resName, guiSkin.textField, GUILayout.Height(20), GUILayout.Width(70)); |
| | | if (GUILayout.Button("定高", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20))) |
| | | { |
| | | Vector3 _pos = monsterList[i].transform.position; |
| | |
| | | _obj.transform.localScale = Vector3.one; |
| | | |
| | | var _monsterData = _obj.AddComponent<Bhv_MonsterData>(); |
| | | _monsterData.npcID = id; |
| | | _monsterData.npcID = (uint)id; |
| | | _monsterData.resName = name; |
| | | |
| | | return _monsterData; |
| | |
| | | EditorGUILayout.BeginVertical(guiSkin.box); |
| | | EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); |
| | | EditorGUI.indentLevel += 1; |
| | | showDetail = EditorGUILayout.Foldout(showDetail, " 触发器ID:" + id, true, guiSkin.customStyles[3]); |
| | | showDetail = EditorGUILayout.Foldout(showDetail, "", true, guiSkin.customStyles[3]); |
| | | EditorGUILayout.LabelField("触发器ID:", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(70)); |
| | | id = EditorGUILayout.IntField(id, guiSkin.textField, GUILayout.Height(22), GUILayout.Width(60)); |
| | | GUILayout.FlexibleSpace(); |
| | | if (GUILayout.Button("查找", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22))) |
| | | { |
| | | Selection.activeGameObject = gameObject; |
| | |
| | | public class Bhv_MonsterData : MonoBehaviour |
| | | { |
| | | [HideInInspector] |
| | | public int npcID; |
| | | public uint npcID; |
| | | [HideInInspector] |
| | | public string resName; |
| | | [HideInInspector] |
| | |
| | | |
| | | public void Save(BinaryWriter bw) |
| | | { |
| | | bw.Write(npcID); |
| | | bw.Write(resName); |
| | | bw.Write(npcID); |
| | | bw.Write(ai); |
| | | bw.Write((float)System.Math.Round(transform.position.x, 2)); |
| | | bw.Write((float)System.Math.Round(transform.position.y, 2)); |
| | |
| | | |
| | | public void Load(BinaryReader br) |
| | | { |
| | | npcID = br.ReadInt32(); |
| | | resName = br.ReadString(); |
| | | npcID = br.ReadUInt32(); |
| | | ai = br.ReadByte(); |
| | | float _x = br.ReadSingle(); |
| | | float _y = br.ReadSingle(); |
| | |
| | | [System.Serializable] |
| | | public class MonsterData |
| | | { |
| | | public int npcID; |
| | | public uint npcID; |
| | | public Vector3 position; |
| | | public int ai; |
| | | |
| | | public void Load(BinaryReader br) |
| | | { |
| | | npcID = br.ReadInt32(); |
| | | npcID = br.ReadUInt32(); |
| | | ai = br.ReadByte(); |
| | | float _x = br.ReadSingle(); |
| | | float _y = br.ReadSingle(); |
| | |
| | | public Evt.E_EventType type; |
| | | public E_TriggerType triggerType; |
| | | public int prevID; |
| | | public int nextID; |
| | | public int id; |
| | | public int[] evevntIDs; |
| | | public Vector3 position; |
| | |
| | | triggerType = (E_TriggerType)br.ReadByte(); |
| | | type = (Evt.E_EventType)br.ReadByte(); |
| | | prevID = br.ReadInt32(); |
| | | nextID = br.ReadInt32(); |
| | | float _pX = br.ReadSingle(); |
| | | float _pY = br.ReadSingle(); |
| | | float _pZ = br.ReadSingle(); |
| | |
| | | |
| | | public override void OnInspectorGUI() |
| | | { |
| | | if (GUILayout.Button("测试")) |
| | | { |
| | | var m = MapData.LoadFormFile(10120); |
| | | if (m == null) |
| | | { |
| | | Debug.Log("加载失败"); |
| | | } |
| | | } |
| | | if (gUISkin == null) |
| | | { |
| | | gUISkin = AssetDatabase.LoadAssetAtPath<GUISkin>("Assets/Scripts/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin"); |
| | |
| | | taskmodel.TaskRefreshes((int)vNetData.MissionID, vNetData.DictKeyLen, vNetData.DictKey, (int)vNetData.DictValue);//任务字典 |
| | | taskmodel.Task0820(vNetData); |
| | | taskmodel.GetTaskGetOnNow((int)vNetData.MissionID, vNetData.DictKey); |
| | | PreFightMission.Instance.HandleNewPlayerMission(vNetData); |
| | | // PreFightMission.Instance.HandleNewPlayerMission(vNetData); |
| | | ClientSceneManager.Instance.Handle_0820(vNetData); |
| | | } |
| | | } |
| | | |
| | |
| | | }
|
| | |
|
| | | EffectConfig _effectModel = EffectConfig.Get(id);
|
| | | |
| | | if (_effectModel.setParent > 0)
|
| | | {
|
| | | _controller.transform.SetParent(parent);
|
| | |
| | | skill.hitTargetList.Clear();
|
| | | skill.hitClientBattleTargetList.Clear();
|
| | |
|
| | | SoSkill _soSkill = ScriptableObjectLoader.LoadSoSkill(skill.id);
|
| | | SoSkill _soSkill = ScriptableObjectLoader.LoadSoSkill(skill.skillInfo.config.SkillTypeID);
|
| | | if (_soSkill == null)
|
| | | {
|
| | | DebugEx.LogWarningFormat("技能: {0} 没有配置SoSkill文件, 将没有范围检测能力.", skill.id);
|
| | |
| | | m_Hero.SelectTarget = null;
|
| | | }
|
| | |
|
| | | var _clientNpc = _target as GA_NpcClientFightNorm;
|
| | | if (_clientNpc.belongEventID != -1)
|
| | | {
|
| | | ClientSceneManager.Instance.NpcDead(_clientNpc.belongEventID, _clientNpc);
|
| | | }
|
| | | // 前期战斗只发送石头人的
|
| | | //if (1000 == _target.NpcConfig.NPCID)
|
| | | //{
|
| | |
| | | public ulong CurHP;
|
| | | public uint CurHPEx;
|
| | | }
|
| | |
|
| | | public static bool CanAttack(E_SkillCastTarget castTarget, GActorFight caster, GActorFight target)
|
| | | {
|
| | | if (target == null || caster == null || caster.ActorInfo.serverDie)
|
| | | {
|
| | | return false;
|
| | | }
|
| | |
|
| | | switch (castTarget)
|
| | | {
|
| | | case E_SkillCastTarget.None:
|
| | | return false;
|
| | | case E_SkillCastTarget.Self:
|
| | | return target == caster;
|
| | | case E_SkillCastTarget.TeamMate:
|
| | | return target.ActorInfo.teamID == caster.ActorInfo.teamID;
|
| | | case E_SkillCastTarget.Friend:
|
| | | break;
|
| | | case E_SkillCastTarget.CanAttacked:
|
| | | return target.CanAtked();
|
| | | case E_SkillCastTarget.SelfAndFriend:
|
| | | return target == caster;
|
| | | case E_SkillCastTarget.PlayerDeadBody:
|
| | | return target.ActorInfo.serverDie && target is GActorPlayerBase;
|
| | | case E_SkillCastTarget.UnDeadPlayer:
|
| | | return !target.ActorInfo.serverDie && target is GActorPlayerBase;
|
| | | case E_SkillCastTarget.CanAttackedMonster:
|
| | | return target is GA_NpcFightNorm && target.CanAtked();
|
| | | case E_SkillCastTarget.CanAttackedPlayer:
|
| | | return target is GActorPlayerBase && target.CanAtked();
|
| | | case E_SkillCastTarget.All:
|
| | | return true;
|
| | | case E_SkillCastTarget.PetToOwner:
|
| | | return target.ActorInfo.ownerSID == caster.ServerInstID && caster is GA_Pet;
|
| | | case E_SkillCastTarget.SummonToOwner:
|
| | | return target.ActorInfo.ownerSID == caster.ServerInstID && caster is GA_NpcSummonFight;
|
| | | case E_SkillCastTarget.Monster:
|
| | | var _npc = target as GActorNpcFight;
|
| | | if (_npc == null)
|
| | | {
|
| | | return false;
|
| | | }
|
| | | return _npc.NpcConfig.IsBoss < 2;
|
| | | case E_SkillCastTarget.FriendNpc:
|
| | | return (target is GActorNpcFight && target.ActorInfo.faction != 0 && target.ActorInfo.faction == PlayerDatas.Instance.baseData.faction);
|
| | | }
|
| | | return true;
|
| | | }
|
| | | }
|
| | |
| | | /// </summary>
|
| | | [XLua.LuaCallCSharp]
|
| | | public class SkillHelper : Singleton<SkillHelper>
|
| | | |
| | |
|
| | | {
|
| | | private Dictionary<int, SkillInfo> m_SkillInfoDict;
|
| | | private Dictionary<int, List<SkillInfo>> m_SkillToSpSkill;
|
| | |
| | | {
|
| | | effectValue = new Dictionary<int, EffectValue>();
|
| | |
|
| | | soFile = ScriptableObjectLoader.LoadSoSkill(skillID);
|
| | |
|
| | | if (soFile)
|
| | | {
|
| | | HasHitEvent = soFile.animationEventList.Count > 0;
|
| | | if (HasHitEvent)
|
| | | {
|
| | | HasHitEvent = false;
|
| | | SoConfigBase _soConfig = null;
|
| | | int _param;
|
| | | int _id;
|
| | | SoSkill.E_AttackType _type;
|
| | | for (int i = 0; i < soFile.animationEventList.Count; ++i)
|
| | | {
|
| | | if (soFile.animationEventList[i].frameEventType != E_FrameEventType.OnSkillEvent)
|
| | | {
|
| | | continue;
|
| | | }
|
| | |
|
| | | _soConfig = null;
|
| | | _param = soFile.animationEventList[i].intParam;
|
| | | _id = SoSkill.GetFrameEventId(_param);
|
| | | _type = SoSkill.GetAttactType(_param);
|
| | |
|
| | | if (_type == SoSkill.E_AttackType.Sweep)
|
| | | {
|
| | | _soConfig = ScriptableObjectLoader.LoadSoSweepHit(_id);
|
| | | }
|
| | | else if (_type == SoSkill.E_AttackType.FlyObject)
|
| | | {
|
| | | _soConfig = ScriptableObjectLoader.LoadSoFlyObject(_id);
|
| | | }
|
| | |
|
| | | if (_soConfig != null && _soConfig.floodPercent != 0)
|
| | | {
|
| | | HasHitEvent = true;
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | config = SkillConfig.Get(skillID);
|
| | |
|
| | | if (config != null)
|
| | | {
|
| | | if (config.Effect1 > 0)
|
| | |
| | | effectValue[config.Effect5] = _effectValue;
|
| | | }
|
| | | }
|
| | |
|
| | | soFile = ScriptableObjectLoader.LoadSoSkill(config.SkillTypeID);
|
| | |
|
| | | if (soFile)
|
| | | {
|
| | | HasHitEvent = soFile.animationEventList.Count > 0;
|
| | | if (HasHitEvent)
|
| | | {
|
| | | HasHitEvent = false;
|
| | | SoConfigBase _soConfig = null;
|
| | | int _param;
|
| | | int _id;
|
| | | SoSkill.E_AttackType _type;
|
| | | for (int i = 0; i < soFile.animationEventList.Count; ++i)
|
| | | {
|
| | | if (soFile.animationEventList[i].frameEventType != E_FrameEventType.OnSkillEvent)
|
| | | {
|
| | | continue;
|
| | | }
|
| | |
|
| | | _soConfig = null;
|
| | | _param = soFile.animationEventList[i].intParam;
|
| | | _id = SoSkill.GetFrameEventId(_param);
|
| | | _type = SoSkill.GetAttactType(_param);
|
| | |
|
| | | if (_type == SoSkill.E_AttackType.Sweep)
|
| | | {
|
| | | _soConfig = ScriptableObjectLoader.LoadSoSweepHit(_id);
|
| | | }
|
| | | else if (_type == SoSkill.E_AttackType.FlyObject)
|
| | | {
|
| | | _soConfig = ScriptableObjectLoader.LoadSoFlyObject(_id);
|
| | | }
|
| | |
|
| | | if (_soConfig != null && _soConfig.floodPercent != 0)
|
| | | {
|
| | | HasHitEvent = true;
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | return;
|
| | | }
|
| | |
|
| | | if (!IsMoveValid())
|
| | | {
|
| | | return;
|
| | | }
|
| | |
|
| | | if (Input.GetMouseButtonDown(0))
|
| | | {
|
| | | if (UIUtility.IsPointerOverGameObject())
|
| | |
| | | OnClickedFloor(_destPosition);
|
| | | }
|
| | |
|
| | | if (!IsMoveValid())
|
| | | {
|
| | | return;
|
| | | }
|
| | |
|
| | | m_PrevClickPosition = _destPosition;
|
| | | PlayerDatas.Instance.hero.MoveToPosition(_destPosition);
|
| | |
|
| | |
| | | return;
|
| | | }
|
| | |
|
| | | if (SelectTarget != null)
|
| | | {
|
| | | E_SkillCastTarget _targetType = (E_SkillCastTarget)(_skill.skillInfo.config.Tag / 10);
|
| | | E_SkillCastType _castType = (E_SkillCastType)(_skill.skillInfo.config.Tag % 10);
|
| | | if (_castType == E_SkillCastType.NeedTarget)
|
| | | {
|
| | | if (!AttackHandler.CanAttack(_targetType, this, SelectTarget as GActorNpcFight))
|
| | | {
|
| | | SysNotifyMgr.Instance.ShowTip("SkillSelectedTarget");
|
| | | return;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | if (!PreFightMission.Instance.IsFinished())
|
| | | {
|
| | | if (skillID == 190)
|
| | |
| | | |
| | | public class GA_NpcClientFightNorm : GActorNpcFight |
| | | { |
| | | public int belongEventID; |
| | | private HeadUpName m_HeadUpName; |
| | | private LifeBar m_LifeBar; |
| | | |
| | |
| | | m_Obstacle = null; |
| | | } |
| | | |
| | | belongEventID = -1; |
| | | |
| | | base.OnUnit(); |
| | | } |
| | | |
| | |
| | | public class DungeonStage : Stage
|
| | | {
|
| | | public static Dictionary<MapArea.E_Type, List<MapArea>> s_MapAreaDict;
|
| | | private static List<TransferGroup> m_TransferGroupList = new List<TransferGroup>();
|
| | | public static MapType CurrentMapType;
|
| | | private H2Engine.MapData mapData;
|
| | |
|
| | | public override void Initialize()
|
| | | {
|
| | |
| | | SoundPlayer.Instance.PlayBackGroundMusic(mapResConfig.Music);
|
| | | SceneResourcesReplace();
|
| | |
|
| | | foreach (var _t in m_TransferGroupList)
|
| | | {
|
| | | _t.UnInit();
|
| | | }
|
| | | m_TransferGroupList.Clear();
|
| | | // 做一些前期战斗的预加载
|
| | | // if (!PreFightMission.Instance.IsFinished())
|
| | | // {
|
| | |
| | | _hero.SkillMgr.ResetAllCD();
|
| | | }
|
| | |
|
| | | HandleMapData();
|
| | | ClientSceneManager.Instance.Init();
|
| | |
|
| | | GA_Hero.s_MapSwitching = false;
|
| | | }
|
| | |
| | | base.UnInitialize();
|
| | |
|
| | | StopAllCoroutines();
|
| | | mapData = null;
|
| | |
|
| | | if (s_MapAreaDict != null)
|
| | | {
|
| | |
| | | CameraController.Instance.StopZoom();
|
| | | CameraController.Instance.StopShake();
|
| | | }
|
| | |
|
| | | ClientSceneManager.Instance.UnInit();
|
| | | GAMgr.Instance.UnInit();
|
| | | DropItemManager.ReleaseAll();
|
| | | SFXPlayUtility.Instance.Unitialize();
|
| | |
| | |
|
| | | DropItemManager.Update();
|
| | |
|
| | | foreach (var _trasfer in m_TransferGroupList)
|
| | | {
|
| | | _trasfer.Update();
|
| | | }
|
| | | ClientSceneManager.Instance.Update();
|
| | |
|
| | | // if (PreFightMission.Instance.IsFinished() == false)
|
| | | // {
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | private void HandleMapData()
|
| | | {
|
| | | mapData = H2Engine.MapData.LoadFormFile(PlayerDatas.Instance.baseData.MapID);
|
| | | if (mapData == null)
|
| | | {
|
| | | return;
|
| | | }
|
| | | // 目前版本只处理刷场景物件
|
| | | // foreach (var _trigger in mapData.triggers)
|
| | | // {
|
| | | // if (_trigger.triggerType != H2Engine.MapTrigger.E_TriggerType.EnterStage)
|
| | | // {
|
| | | // continue;
|
| | | // }
|
| | |
|
| | | // foreach (var _id in _trigger.evevntIDs)
|
| | | // {
|
| | | // var _event = mapData.eventDict[_id];
|
| | | // if (_event.type == H2Engine.Evt.E_EventType.SceneObject)
|
| | | // {
|
| | | // var _refreshSceneObject = _event as H2Engine.Evt_RefreshSceneObject;
|
| | | // if (_refreshSceneObject != null)
|
| | | // {
|
| | | // foreach (var _sceneObjData in _refreshSceneObject.sceneObjects)
|
| | | // {
|
| | | // var _prefab = InstanceResourcesLoader.LoadModelPrefab(InstanceResourcesLoader.raceSuffix, _sceneObjData.resName, false);
|
| | | // if (_prefab)
|
| | | // {
|
| | | // var _go = GameObject.Instantiate(_prefab);
|
| | | // _go.transform.position = _sceneObjData.position;
|
| | | // _go.transform.eulerAngles = _sceneObjData.eulerAngles;
|
| | | // }
|
| | | // }
|
| | | // }
|
| | | // }
|
| | | // }
|
| | | // }
|
| | | foreach (var _trasfer in mapData.transfers)
|
| | | {
|
| | | m_TransferGroupList.Add(new TransferGroup(_trasfer));
|
| | | }
|
| | | }
|
| | |
|
| | | private void HandleAutoFight()
|
| | | {
|
| | |
| | | default:
|
| | | break;
|
| | | }
|
| | | }
|
| | |
|
| | | public Vector3 GetCloseTransPoint(Vector3 pos)
|
| | | {
|
| | | // 遍历找到离给定点最近并且可寻路至的传送点 P
|
| | | // 找到 P点的 另一端 P1
|
| | | // 判断当前传入的点是否可以寻路至 P1
|
| | | // 不行的话重新寻找 可以的话返回 P1 的坐标
|
| | | float _compareDis;
|
| | | float _dis;
|
| | |
|
| | | foreach (var _p in m_TransferGroupList)
|
| | | {
|
| | |
|
| | | }
|
| | |
|
| | | return Vector3.zero;
|
| | | }
|
| | |
|
| | | private void SceneResourceReplace10010()
|
| New file |
| | |
| | | using H2Engine; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | |
| | | public class ClientSceneManager : Singleton<ClientSceneManager> |
| | | { |
| | | private H2Engine.MapData m_MapData; |
| | | private List<TransferGroup> m_TransferGroupList = new List<TransferGroup>(); |
| | | private Dictionary<int, IEventHandler> m_EventHandlerDict = new Dictionary<int, IEventHandler>(); |
| | | private List<IEventHandler> m_ReadyRemoveEventHandlerList = new List<IEventHandler>(); |
| | | private Dictionary<int, uint> m_TriggerIDToMissionIDDict = new Dictionary<int, uint>(); |
| | | private List<int> m_ReadyRemoveTriggerList = new List<int>(); |
| | | private Dictionary<int, List<GActorNpcFight>> m_EventActorDict = new Dictionary<int, List<GActorNpcFight>>(); |
| | | |
| | | private IEnumerator DelayUnTrigger(int id) |
| | | { |
| | | while (m_MapData == null) |
| | | { |
| | | yield return null; |
| | | } |
| | | |
| | | Debug.LogFormat("= 结束触发: {0} =", id); |
| | | foreach (var _trigger in m_MapData.triggers) |
| | | { |
| | | if (_trigger.id != id) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (_trigger.evevntIDs == null |
| | | || _trigger.evevntIDs.Length == 0) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | Debug.LogFormat("= 触发器有: {0} 个事件 =", _trigger.evevntIDs.Length); |
| | | foreach (var _eventID in _trigger.evevntIDs) |
| | | { |
| | | if (!m_EventActorDict.ContainsKey(_eventID)) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (m_EventActorDict[_eventID] == null |
| | | || m_EventActorDict[_eventID].Count == 0) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | Debug.LogFormat("= 残留有: {0} 个NPC =", m_EventActorDict[_eventID].Count); |
| | | foreach (var _npc in m_EventActorDict[_eventID]) |
| | | { |
| | | _npc.KillerServerInstID = PlayerDatas.Instance.PlayerId; |
| | | _npc.ActorInfo.serverDie = true; |
| | | GAMgr.Instance.ServerDie(_npc.ServerInstID); |
| | | GAMgr.Instance.DelayDie(_npc); |
| | | _npc.Die(PlayerDatas.Instance.PlayerId); |
| | | } |
| | | |
| | | m_EventHandlerDict.Remove(_eventID); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | } |
| | | |
| | | public void NpcBorn(int eventID, GActorNpcFight npc) |
| | | { |
| | | if (!m_EventActorDict.ContainsKey(eventID)) |
| | | { |
| | | m_EventActorDict.Add(eventID, new List<GActorNpcFight>()); |
| | | } |
| | | |
| | | if (!m_EventActorDict[eventID].Contains(npc)) |
| | | { |
| | | m_EventActorDict[eventID].Add(npc); |
| | | Debug.LogFormat("= 为事件: {0} 增加Npc: {1}", eventID, npc.ServerInstID); |
| | | } |
| | | } |
| | | |
| | | public void NpcDead(int eventID, GActorNpcFight npc) |
| | | { |
| | | if (eventID < 0 || npc == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | var _eventHandler = GetEventHandler(eventID) as EventRefreshNPCHandler; |
| | | if (_eventHandler != null) |
| | | { |
| | | _eventHandler.NpcDead(npc.NpcConfig.NPCID); |
| | | } |
| | | |
| | | if (m_EventActorDict.ContainsKey(eventID)) |
| | | { |
| | | if (m_EventActorDict[eventID].Contains(npc)) |
| | | { |
| | | m_EventActorDict[eventID].Remove(npc); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void Handle_0820(H0820_tagMissionDict package) |
| | | { |
| | | m_ReadyRemoveTriggerList.Clear(); |
| | | |
| | | foreach (var _triggerID in m_TriggerIDToMissionIDDict.Keys) |
| | | { |
| | | if (m_TriggerIDToMissionIDDict[_triggerID] == package.MissionID) |
| | | { |
| | | if (package.DictKey.Equals("state")) |
| | | { |
| | | if (package.DictValue > 2) |
| | | { |
| | | m_ReadyRemoveTriggerList.Add(_triggerID); |
| | | SnxxzGame.Instance.StartCoroutine(DelayUnTrigger(_triggerID)); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | foreach (var _id in m_ReadyRemoveTriggerList) |
| | | { |
| | | m_TriggerIDToMissionIDDict.Remove(_id); |
| | | } |
| | | |
| | | |
| | | if (package.DictKey.Equals("riggerID")) |
| | | { |
| | | int _triggerID = (int)package.DictValue; |
| | | if (_triggerID == 0) |
| | | { |
| | | foreach (var _removeTriggerID in m_TriggerIDToMissionIDDict.Keys) |
| | | { |
| | | SnxxzGame.Instance.StartCoroutine(DelayUnTrigger(_removeTriggerID)); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | m_TriggerIDToMissionIDDict[_triggerID] = package.MissionID; |
| | | SnxxzGame.Instance.StartCoroutine(DelayTrigger(package.MissionID, _triggerID)); |
| | | } |
| | | } |
| | | else if (package.DictKey.Equals("xinshou")) |
| | | { |
| | | if (package.DictValue == 0) |
| | | { |
| | | Debug.LogFormat("= 退出了前端模式 ="); |
| | | } |
| | | else |
| | | { |
| | | Debug.LogFormat("= 进入了前端模式 ="); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private bool m_Inited = false; |
| | | |
| | | public void Init() |
| | | { |
| | | if (m_Inited) |
| | | { |
| | | return; |
| | | } |
| | | m_Inited = true; |
| | | |
| | | int _mapID = PlayerDatas.Instance.baseData.MapID; |
| | | m_MapData = MapData.LoadFormFile(_mapID); |
| | | if (m_MapData == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | foreach (var _trasfer in m_MapData.transfers) |
| | | { |
| | | m_TransferGroupList.Add(new TransferGroup(_trasfer)); |
| | | } |
| | | |
| | | } |
| | | |
| | | public void UnInit() |
| | | { |
| | | foreach (var _t in m_TransferGroupList) |
| | | { |
| | | _t.UnInit(); |
| | | } |
| | | m_TransferGroupList.Clear(); |
| | | |
| | | foreach (var _triggerID in m_TriggerIDToMissionIDDict.Keys) |
| | | { |
| | | DelayUnTrigger(_triggerID); |
| | | } |
| | | |
| | | m_Inited = false; |
| | | } |
| | | |
| | | public void Update() |
| | | { |
| | | foreach (var _trasfer in m_TransferGroupList) |
| | | { |
| | | _trasfer.Update(); |
| | | } |
| | | |
| | | m_ReadyRemoveEventHandlerList.Clear(); |
| | | |
| | | foreach (var _eventHandler in m_EventHandlerDict.Values) |
| | | { |
| | | _eventHandler.Update(); |
| | | if (_eventHandler.IsCompelete()) |
| | | { |
| | | m_ReadyRemoveEventHandlerList.Add(_eventHandler); |
| | | } |
| | | } |
| | | |
| | | foreach (var _eventHandler in m_ReadyRemoveEventHandlerList) |
| | | { |
| | | _eventHandler.UnInit(); |
| | | m_EventHandlerDict.Remove(_eventHandler.GetEventID()); |
| | | } |
| | | } |
| | | |
| | | public IEventHandler GetEventHandler(int id) |
| | | { |
| | | if (m_EventHandlerDict.ContainsKey(id)) |
| | | { |
| | | return m_EventHandlerDict[id]; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public Vector3 GetCloseTransPoint(Vector3 pos) |
| | | { |
| | | // 遍历找到离给定点最近并且可寻路至的传送点 P |
| | | // 找到 P点的 另一端 P1 |
| | | // 判断当前传入的点是否可以寻路至 P1 |
| | | // 不行的话重新寻找 可以的话返回 P1 的坐标 |
| | | float _compareDis; |
| | | float _dis; |
| | | |
| | | foreach (var _p in m_TransferGroupList) |
| | | { |
| | | |
| | | } |
| | | |
| | | return Vector3.zero; |
| | | } |
| | | |
| | | private IEnumerator DelayTrigger(uint missionID, int triggerID) |
| | | { |
| | | if (triggerID == 0) |
| | | { |
| | | yield return SnxxzGame.Instance.StartCoroutine(DelayUnTrigger(triggerID)); |
| | | yield break; |
| | | } |
| | | |
| | | while (StageLoad.Instance.isLoading) |
| | | { |
| | | yield return null; |
| | | } |
| | | |
| | | Debug.LogFormat("= 任务: {0} 触发: {1} =", missionID, triggerID); |
| | | |
| | | if (m_MapData == null) |
| | | { |
| | | Init(); |
| | | } |
| | | |
| | | if (m_MapData.triggers == null |
| | | || m_MapData.triggers.Length == 0) |
| | | { |
| | | yield break; |
| | | } |
| | | |
| | | foreach (var _trigger in m_MapData.triggers) |
| | | { |
| | | if (_trigger.id != triggerID) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (_trigger.evevntIDs == null |
| | | || _trigger.evevntIDs.Length == 0) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | foreach (var _eventID in _trigger.evevntIDs) |
| | | { |
| | | if (!m_MapData.eventDict.ContainsKey(_eventID)) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | var _event = m_MapData.eventDict[_eventID]; |
| | | if (_event.type == Evt.E_EventType.Enemy) |
| | | { |
| | | var _refreshEvent = new EventRefreshNPCHandler(); |
| | | _refreshEvent.Init(_event as Evt_RefreshMonster); |
| | | m_EventHandlerDict.Add(_refreshEvent.GetEventID(), _refreshEvent); |
| | | } |
| | | } |
| | | |
| | | break; |
| | | } |
| | | } |
| | | } |
| New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: b5880d5e8e289c74cab760bb8367869c |
| | | timeCreated: 1551698978 |
| | | licenseType: Pro |
| | | MonoImporter: |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| New file |
| | |
| | | using UnityEngine; |
| | | using H2Engine; |
| | | |
| | | public class EventRefreshNPCHandler : IEventHandler |
| | | { |
| | | private Evt_RefreshMonster m_Evt = null; |
| | | |
| | | private int m_DeadCount = 0; |
| | | private float m_Duration = 0; |
| | | private int m_RefreshCount = -1; |
| | | private float m_RefreshInterval = 0; |
| | | |
| | | public int GetEventID() |
| | | { |
| | | if (m_Evt != null) |
| | | { |
| | | return m_Evt.id; |
| | | } |
| | | return -1; |
| | | } |
| | | |
| | | public Evt.E_EventType GetEventType() |
| | | { |
| | | return Evt.E_EventType.Enemy; |
| | | } |
| | | |
| | | public void Init(Evt evt) |
| | | { |
| | | m_Evt = evt as Evt_RefreshMonster; |
| | | m_DeadCount = 0; |
| | | m_Duration = 0; |
| | | m_RefreshCount = -1; |
| | | m_RefreshInterval = 0; |
| | | } |
| | | |
| | | public void Update() |
| | | { |
| | | if (IsCompelete() && m_Duration > 0) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | m_Duration += Time.deltaTime; |
| | | |
| | | // 此模式下刷出第一只怪 |
| | | if (m_Evt.refreshType == Evt_RefreshMonster.E_RefreshType.OneByOnePrevDie) |
| | | { |
| | | if (m_RefreshCount == -1) |
| | | { |
| | | RefreshNpc(); |
| | | } |
| | | } |
| | | else if (m_Evt.refreshType == Evt_RefreshMonster.E_RefreshType.All) |
| | | { |
| | | RefreshAll(); |
| | | } |
| | | else if (m_Evt.refreshType == Evt_RefreshMonster.E_RefreshType.OneByOneTime) |
| | | { |
| | | m_RefreshInterval += Time.deltaTime; |
| | | if (m_RefreshInterval > m_Evt.refreshParam) |
| | | { |
| | | m_RefreshInterval = 0; |
| | | RefreshNpc(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void NpcDead(int npcID) |
| | | { |
| | | m_DeadCount += 1; |
| | | Debug.LogFormat("通知死亡: {0}, 当前计数: {1}", npcID, m_DeadCount); |
| | | if (m_Evt.refreshType == Evt_RefreshMonster.E_RefreshType.OneByOnePrevDie) |
| | | { |
| | | RefreshNpc(); |
| | | } |
| | | |
| | | CA225_tagCMClientTaskCount _a225 = new CA225_tagCMClientTaskCount |
| | | { |
| | | CountID = (uint)npcID |
| | | }; |
| | | GameNetSystem.Instance.SendInfo(_a225); |
| | | } |
| | | |
| | | private void RefreshNpc() |
| | | { |
| | | m_RefreshCount += 1; |
| | | if (m_RefreshCount >= 0 && m_RefreshCount < m_Evt.monsters.Length) |
| | | { |
| | | var _data = m_Evt.monsters[m_RefreshCount]; |
| | | var _npc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightNorm>(_data.npcID, E_ActorGroup.Enemy); |
| | | _npc.Pos = _data.position; |
| | | _npc.belongEventID = m_Evt.id; |
| | | ClientSceneManager.Instance.NpcBorn(m_Evt.id, _npc); |
| | | } |
| | | } |
| | | |
| | | private void RefreshAll() |
| | | { |
| | | if (m_RefreshCount < m_Evt.monsters.Length) |
| | | { |
| | | foreach (var _data in m_Evt.monsters) |
| | | { |
| | | var _npc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightNorm>(_data.npcID, E_ActorGroup.Enemy); |
| | | _npc.Pos = _data.position; |
| | | _npc.belongEventID = m_Evt.id; |
| | | ClientSceneManager.Instance.NpcBorn(m_Evt.id, _npc); |
| | | } |
| | | m_RefreshCount = m_Evt.monsters.Length; |
| | | } |
| | | } |
| | | |
| | | public void UnInit() |
| | | { |
| | | Debug.LogFormat("事件: {0} => UnInit()", m_Evt.id); |
| | | } |
| | | |
| | | public bool IsCompelete() |
| | | { |
| | | if (m_Evt == null) |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | if (m_Evt.overCondition == Evt_RefreshMonster.E_OverCondition.DeadCount) |
| | | { |
| | | if (m_Evt.conditionParam <= 0) |
| | | { |
| | | return m_DeadCount >= m_Evt.monsters.Length; |
| | | } |
| | | |
| | | return m_DeadCount >= m_Evt.conditionParam; |
| | | } |
| | | else if (m_Evt.overCondition == Evt_RefreshMonster.E_OverCondition.Time) |
| | | { |
| | | return m_Duration >= m_Evt.conditionParam && m_DeadCount >= m_Evt.monsters.Length; |
| | | } |
| | | return false; |
| | | } |
| | | } |
| New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: c7f7e93eba93cd044bdd4b6ddc9aa334 |
| | | timeCreated: 1551667471 |
| | | licenseType: Pro |
| | | MonoImporter: |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| New file |
| | |
| | | using H2Engine; |
| | | |
| | | public interface IEventHandler |
| | | { |
| | | int GetEventID(); |
| | | Evt.E_EventType GetEventType(); |
| | | void Init(Evt evt); |
| | | bool IsCompelete(); |
| | | void Update(); |
| | | void UnInit(); |
| | | } |
| New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: 8831940d4fa557e42825777dcd3ca1b7 |
| | | timeCreated: 1551684662 |
| | | licenseType: Pro |
| | | MonoImporter: |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| New file |
| | |
| | | using H2Engine; |
| | | using UnityEngine; |
| | | |
| | | public class TriggerHandler |
| | | { |
| | | private MapTrigger m_Trigger; |
| | | |
| | | public TriggerHandler(MapTrigger trigger) |
| | | { |
| | | m_Trigger = trigger; |
| | | } |
| | | } |
| New file |
| | |
| | | fileFormatVersion: 2 |
| | | guid: d4b520a4d7e5d434a8cbbfa2f21eaadc |
| | | timeCreated: 1551678527 |
| | | licenseType: Pro |
| | | MonoImporter: |
| | | serializedVersion: 2 |
| | | defaultReferences: [] |
| | | executionOrder: 0 |
| | | icon: {instanceID: 0} |
| | | userData: |
| | | assetBundleName: |
| | | assetBundleVariant: |
| | |
| | | break; |
| | | case "Btn_SkillXp": |
| | | Prompting((int)SkillEffects.skillEffect_xp); |
| | | switch (PlayerDatas.Instance.baseData.Job) |
| | | { |
| | | case 1: |
| | | if (PlayerDatas.Instance.skill.GetSKillById(150) != null) |
| | | { |
| | | BoolFb = true; |
| | | AccordingBool = true; |
| | | SkillsHole = (int)SkillEffects.skillEffect_xp; |
| | | SkillSelectedXp.SetActive(true); |
| | | } |
| | | break; |
| | | case 2: |
| | | if (PlayerDatas.Instance.skill.GetSKillById(250) != null) |
| | | { |
| | | BoolFb = true; |
| | | AccordingBool = true; |
| | | SkillsHole = (int)SkillEffects.skillEffect_xp; |
| | | SkillSelectedXp.SetActive(true); |
| | | } |
| | | break; |
| | | var skillModel = ModelCenter.Instance.GetModel<SkillModel>();
|
| | | var xpSkillId = skillModel.GetXpSkillID(); |
| | | if (PlayerDatas.Instance.skill.GetSKillById(xpSkillId) != null)
|
| | | {
|
| | | BoolFb = true;
|
| | | AccordingBool = true;
|
| | | SkillsHole = (int)SkillEffects.skillEffect_xp;
|
| | | SkillSelectedXp.SetActive(true);
|
| | | } |
| | | break; |
| | | default: |
| | |
| | | case SkillEffects.skillEffect_xp: |
| | | _LongPressShowPanel = XpSkillInfo.GetChild(0).GetComponent<LongPressShowPanel>(); |
| | | break; |
| | | } |
| | | PlayerSkillData _PlayerSkillData=null; |
| | | }
|
| | | PlayerSkillData _PlayerSkillData = null; |
| | | if ((SkillEffects)SkillsHole == SkillEffects.skillEffect_xp) |
| | | { |
| | | if (PlayerDatas.Instance.baseData.Job == 1) |
| | | { |
| | | _PlayerSkillData = PlayerDatas.Instance.skill.GetSKillById(150); |
| | | } |
| | | else if (PlayerDatas.Instance.baseData.Job == 2) |
| | | { |
| | | _PlayerSkillData = PlayerDatas.Instance.skill.GetSKillById(250); |
| | | } |
| | | {
|
| | | var skillModel = ModelCenter.Instance.GetModel<SkillModel>();
|
| | | var xpSkillId = skillModel.GetXpSkillID(); |
| | | _PlayerSkillData = PlayerDatas.Instance.skill.GetSKillById(xpSkillId);
|
| | | } |
| | | else |
| | | { |
| | |
| | | SysNotifyMgr.Instance.ShowTip("Skill7Btn_Unlock"); |
| | | break; |
| | | case SkillEffects.skillEffect_xp: |
| | | if (PlayerDatas.Instance.baseData.Job == 1 && PlayerDatas.Instance.skill.GetSKillById(150) == null) |
| | | { |
| | | SysNotifyMgr.Instance.ShowTip("SkillXpBtn_Unlock"); |
| | | } |
| | | if (PlayerDatas.Instance.baseData.Job == 2 && PlayerDatas.Instance.skill.GetSKillById(250) == null) |
| | | var skillModel = ModelCenter.Instance.GetModel<SkillModel>(); |
| | | var xpSkillId = skillModel.GetXpSkillID(); |
| | | if (PlayerDatas.Instance.skill.GetSKillById(xpSkillId) == null) |
| | | { |
| | | SysNotifyMgr.Instance.ShowTip("SkillXpBtn_Unlock"); |
| | | } |
| | |
| | | m_Skill7.RemoveAllListeners(); |
| | | skillXP.RemoveAllListeners(); |
| | | PlayerSkillDatas.OnRefreshSkill -= OnSkillRefresh; |
| | | if(AchievementGoto.achievementType == AchievementGoto.ExcuteSkill) |
| | | if (AchievementGoto.achievementType == AchievementGoto.ExcuteSkill) |
| | | { |
| | | AchievementGoto.achievementType = 0; |
| | | } |
| | |
| | | m_Skill7.SetSkillData(indexSkillDataDict[6]); |
| | | |
| | | m_BlinkSkill.SetSkillData(PlayerDatas.Instance.skill.GetSKillById(190)); |
| | | switch (PlayerDatas.Instance.baseData.Job) |
| | | { |
| | | case 1: |
| | | m_SkillXP.SetSkillData(PlayerDatas.Instance.skill.GetSKillById(150)); |
| | | break; |
| | | case 2: |
| | | m_SkillXP.SetSkillData(PlayerDatas.Instance.skill.GetSKillById(250)); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | var model = ModelCenter.Instance.GetModel<SkillModel>();
|
| | | var skillXpId = model.GetXpSkillID(); |
| | | m_SkillXP.SetSkillData(PlayerDatas.Instance.skill.GetSKillById(skillXpId)); |
| | | } |
| | | |
| | | void SwitchTarget() |
| | |
| | | } |
| | | |
| | | void CastSkillXp() |
| | | { |
| | | switch (PlayerDatas.Instance.baseData.Job) |
| | | { |
| | | case 1: |
| | | if (PlayerDatas.Instance.skill.GetSKillById(150) == null) |
| | | { |
| | | DebugEx.Log("技能未解锁"); |
| | | return; |
| | | } |
| | | |
| | | DoCastSkill(150); |
| | | break; |
| | | case 2: |
| | | if (PlayerDatas.Instance.skill.GetSKillById(250) == null) |
| | | { |
| | | DebugEx.Log("技能未解锁"); |
| | | return; |
| | | } |
| | | |
| | | DoCastSkill(250); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | |
| | | |
| | | {
|
| | | var model = ModelCenter.Instance.GetModel<SkillModel>();
|
| | | var skillXpId = model.GetXpSkillID();
|
| | | if (PlayerDatas.Instance.skill.GetSKillById(skillXpId) == null)
|
| | | {
|
| | | DebugEx.Log("技能未解锁");
|
| | | return;
|
| | | }
|
| | | DoCastSkill(skillXpId); |
| | | } |
| | | |
| | | void PrepareCastSkill1() |
| | |
| | | |
| | | void PrepareCastSkillXp() |
| | | { |
| | | switch (PlayerDatas.Instance.baseData.Job) |
| | | { |
| | | case 1: |
| | | if (PlayerDatas.Instance.skill.GetSKillById(150) == null) |
| | | { |
| | | DebugEx.Log("技能未解锁"); |
| | | return; |
| | | } |
| | | |
| | | DoPrepareCast(150); |
| | | break; |
| | | case 2: |
| | | if (PlayerDatas.Instance.skill.GetSKillById(250) == null) |
| | | { |
| | | DebugEx.Log("技能未解锁"); |
| | | return; |
| | | } |
| | | |
| | | DoPrepareCast(250); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | var model = ModelCenter.Instance.GetModel<SkillModel>();
|
| | | var skillXpId = model.GetXpSkillID();
|
| | | if (PlayerDatas.Instance.skill.GetSKillById(skillXpId) == null)
|
| | | {
|
| | | DebugEx.Log("技能未解锁");
|
| | | return;
|
| | | }
|
| | | DoPrepareCast(skillXpId); |
| | | } |
| | | |
| | | void PrepareCastBlinkSkill() |
| | |
| | | {
|
| | | int skillID;
|
| | | xpSkillsDic.TryGetValue(PlayerDatas.Instance.baseData.Job, out skillID);
|
| | |
|
| | | var model = ModelCenter.Instance.GetModel<TreasureSkillModel>();
|
| | | TreasureSkill skill;
|
| | | if (model.TryGetSkill(skillID, out skill))
|
| | | {
|
| | | return skill.GetSkillConfig(skill.level).SkillID;
|
| | | }
|
| | | return skillID;
|
| | | }
|
| | | #endregion
|
| | |
| | |
|
| | | if (!isMax)
|
| | | {
|
| | | m_Item.SetItem(config.ExAttr4, config.ExAttr5);
|
| | | var nextConfig = potential.GetSkillConfig(potential.level + 1);
|
| | | m_Item.SetItem(nextConfig.ExAttr4, nextConfig.ExAttr5);
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | TreasurePotential potential;
|
| | | if (model.TryGetPotential(selectPotentialId, out potential))
|
| | | {
|
| | | var config = potential.GetSkillConfig(potential.level);
|
| | | ModelCenter.Instance.GetModel<GetItemPathModel>().SetChinItemModel(config.ExAttr4);
|
| | | var upConfig = potential.GetSkillConfig(potential.level + 1);
|
| | | ModelCenter.Instance.GetModel<GetItemPathModel>().SetChinItemModel(upConfig.ExAttr4);
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | error = 1;
|
| | | return false;
|
| | | }
|
| | | var config = skill.GetSkillConfig(skill.level);
|
| | | var count = packModel.GetItemCountByID(PackType.Item, config.ExAttr4);
|
| | | if (count < config.ExAttr5)
|
| | | var upConfig = skill.GetSkillConfig(skill.level + 1);
|
| | | var count = packModel.GetItemCountByID(PackType.Item, upConfig.ExAttr4);
|
| | | if (count < upConfig.ExAttr5)
|
| | | {
|
| | | error = 2;
|
| | | return false;
|
| | |
| | | return false;
|
| | | }
|
| | | }
|
| | | var count = packModel.GetItemCountByID(PackType.Item, config.ExAttr4);
|
| | | if (count < config.ExAttr5)
|
| | | var upConfig = potential.GetSkillConfig(potential.level + 1);
|
| | | var count = packModel.GetItemCountByID(PackType.Item, upConfig.ExAttr4);
|
| | | if (count < upConfig.ExAttr5)
|
| | | {
|
| | | error = 13;
|
| | | return false;
|
| | |
| | | {
|
| | | var nextSkillConfig = SkillConfig.Get(skill.skillId + skill.level);
|
| | | m_SkillDescNext.text = nextSkillConfig.Description;
|
| | | m_Item.SetItem(config.ExAttr4, config.ExAttr5);
|
| | | m_Item.SetItem(nextSkillConfig.ExAttr4, nextSkillConfig.ExAttr5);
|
| | | m_GetWay.AddListener(() =>
|
| | | {
|
| | | WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.Daily_EmperorRelic);
|
| | |
| | | [SerializeField] UI3DModelInteractProcessor m_InteractProcessor;
|
| | | [SerializeField] ColorCorrectionCurves m_CameraColor;
|
| | |
|
| | | public bool interactable {
|
| | | public bool interactable
|
| | | {
|
| | | get { return m_Interactable; }
|
| | | set { m_Interactable = value; }
|
| | | }
|
| | |
| | |
|
| | | int m_HorseModelId = 0;
|
| | | GameObject horseModel = null;
|
| | | public GameObject NpcModelHorse {
|
| | | public GameObject NpcModelHorse
|
| | | {
|
| | | get { return horseModel; }
|
| | | set { horseModel = value; }
|
| | | }
|
| | |
| | | GameObject npcModel = null;
|
| | | SFXController m_NpcEffect;
|
| | | readonly List<SFXController> m_BindEffectList = new List<SFXController>();
|
| | | public GameObject NpcModelPet {
|
| | | public GameObject NpcModelPet
|
| | | {
|
| | | get { return npcModel; }
|
| | | set { npcModel = value; }
|
| | | }
|
| | |
| | | public static UI3DModelExhibition Instance { get; private set; }
|
| | |
|
| | | static UI3DModelExhibition m_InstanceClone1 = null;
|
| | | public static UI3DModelExhibition InstanceClone1 {
|
| | | get {
|
| | | public static UI3DModelExhibition InstanceClone1
|
| | | {
|
| | | get
|
| | | {
|
| | | if (m_InstanceClone1 == null)
|
| | | {
|
| | | CreateCloneStage();
|
| | |
| | |
|
| | | public static GameObject LoadUIWing(int _id)
|
| | | {
|
| | | var prefab = InstanceResourcesLoader.LoadModelRes(_id, true);
|
| | | var prefab = InstanceResourcesLoader.LoadModelRes(_id, false);
|
| | | if (prefab == null)
|
| | | {
|
| | | return null;
|
| | |
| | |
|
| | | public static void ReleaseUIWing(int _id, GameObject _model)
|
| | | {
|
| | | var prefab = InstanceResourcesLoader.LoadModelRes(_id, true);
|
| | | var prefab = InstanceResourcesLoader.LoadModelRes(_id, false);
|
| | | var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
|
| | | var animator = _model.GetComponent<Animator>();
|
| | | if (animator != null)
|
| | |
| | | private Vector2 _start;
|
| | | private Vector2 _end;
|
| | |
|
| | | private int _triggerID;
|
| | |
|
| | | public override void OnInspectorGUI()
|
| | | {
|
| | | GUILayout.Space(5);
|
| | |
|
| | | EditorGUILayout.BeginHorizontal();
|
| | | _triggerID = EditorGUILayout.IntField("触发器ID", _triggerID);
|
| | | if (GUILayout.Button("触发客户端触发器"))
|
| | | {
|
| | | }
|
| | | EditorGUILayout.EndHorizontal();
|
| | |
|
| | | if (GUILayout.Button("清空任务"))
|
| | | {
|
| | | CA225_tagCMClientTaskCount _a225 = new CA225_tagCMClientTaskCount
|
| | | {
|
| | | CountID = 10000
|
| | | };
|
| | | GameNetSystem.Instance.SendInfo(_a225);
|
| | | }
|
| | |
|
| | | EditorGUILayout.LabelField("Log存储路径", RuntimeLogUtility.s_LogPath);
|
| | |
|
| | |
| | | RuntimeLogUtility.TEST_CLIENT_PVP = EditorGUILayout.Toggle("模拟客户端PVP状态", RuntimeLogUtility.TEST_CLIENT_PVP);
|
| | | RuntimeLogUtility.TEST_CLIENT_PVP_AI = EditorGUILayout.Toggle("模拟客户端PVP的AI状态", RuntimeLogUtility.TEST_CLIENT_PVP_AI);
|
| | |
|
| | |
|
| | | if (GUILayout.Button("创建PVP敌方"))
|
| | | {
|
| | | GActorPlayerBase.PlayerInfo _playerInfo = new GActorPlayerBase.PlayerInfo();
|