Core/MapEditor/Behavior/Bhv_Evt.cs
@@ -43,9 +43,7 @@ public virtual void Export(BinaryWriter bw) { bw.Write((byte)type); Debug.LogFormat("type: {0}", type); bw.Write(id); Debug.LogFormat("id: {0}", id); } #endif } Core/MapEditor/Behavior/Bhv_Evt_RefreshMonster.cs
@@ -71,7 +71,23 @@ 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; @@ -171,10 +187,10 @@ 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; Core/MapEditor/Behavior/Bhv_MonsterData.cs
@@ -16,8 +16,8 @@ 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)); @@ -27,7 +27,6 @@ public void Load(BinaryReader br) { npcID = br.ReadInt32(); resName = br.ReadString(); ai = br.ReadByte(); float _x = br.ReadSingle(); float _y = br.ReadSingle(); Core/MapEditor/Data/MapTrigger.cs
@@ -16,6 +16,7 @@ public Evt.E_EventType type; public E_TriggerType triggerType; public int prevID; public int nextID; public int id; public int[] evevntIDs; public Vector3 position; @@ -28,6 +29,7 @@ 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(); Core/MapEditor/Editor/MapEditor.cs
@@ -82,6 +82,14 @@ 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"); Core/NetworkPackage/DTCFile/ServerPack/H08_Event/DTC0820_tagMissionDict.cs
@@ -28,7 +28,8 @@ 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); } } Core/SFX/SFXPlayUtility.cs
@@ -148,6 +148,7 @@ } EffectConfig _effectModel = EffectConfig.Get(id); if (_effectModel.setParent > 0) { _controller.transform.SetParent(parent); Fight/Actor/HeroBehaviour.cs
@@ -894,6 +894,15 @@ m_Hero.SelectTarget = null; } var _clientNpc = _target as GA_NpcClientFightNorm; if (_clientNpc.belongEventID != -1) { var _eventHandler = ClientSceneManager.Instance.GetEventHandler(_clientNpc.belongEventID) as EventRefreshNPCHandler; if (_eventHandler != null) { _eventHandler.NpcDead(_clientNpc.NpcConfig.NPCID); } } // 前期战斗只发送石头人的 //if (1000 == _target.NpcConfig.NPCID) //{ Fight/GameActor/GA_NpcClientFightNorm.cs
@@ -3,6 +3,7 @@ public class GA_NpcClientFightNorm : GActorNpcFight { public int belongEventID; private HeadUpName m_HeadUpName; private LifeBar m_LifeBar; @@ -135,6 +136,8 @@ m_Obstacle = null; } belongEventID = -1; base.OnUnit(); } Fight/Stage/Dungeon/DungeonStage.cs
@@ -8,9 +8,7 @@ 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() { @@ -31,11 +29,6 @@ SoundPlayer.Instance.PlayBackGroundMusic(mapResConfig.Music); SceneResourcesReplace(); foreach (var _t in m_TransferGroupList) { _t.UnInit(); } m_TransferGroupList.Clear(); // 做一些前期战斗的预加载 // if (!PreFightMission.Instance.IsFinished()) // { @@ -114,7 +107,7 @@ _hero.SkillMgr.ResetAllCD(); } HandleMapData(); ClientSceneManager.Instance.Init(); GA_Hero.s_MapSwitching = false; } @@ -124,7 +117,6 @@ base.UnInitialize(); StopAllCoroutines(); mapData = null; if (s_MapAreaDict != null) { @@ -150,7 +142,7 @@ CameraController.Instance.StopZoom(); CameraController.Instance.StopShake(); } ClientSceneManager.Instance.UnInit(); GAMgr.Instance.UnInit(); DropItemManager.ReleaseAll(); SFXPlayUtility.Instance.Unitialize(); @@ -168,10 +160,7 @@ DropItemManager.Update(); foreach (var _trasfer in m_TransferGroupList) { _trasfer.Update(); } ClientSceneManager.Instance.Update(); // if (PreFightMission.Instance.IsFinished() == false) // { @@ -274,48 +263,7 @@ } } 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() { @@ -475,23 +423,6 @@ 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() Fight/Stage/MapEditor/Game/ClientSceneManager.cs
New file @@ -0,0 +1,159 @@ 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>(); public void Handle_0820(H0820_tagMissionDict package) { if (package.DictKey.Equals("riggerID")) { SnxxzGame.Instance.StartCoroutine(DelayTrigger((int)package.DictValue)); } } 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(); 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()); } m_ReadyRemoveEventHandlerList.Clear(); } 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(int id) { while (StageLoad.Instance.isLoading) { yield return null; } 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 != id) { 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; } } } Fight/Stage/MapEditor/Game/ClientSceneManager.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: b5880d5e8e289c74cab760bb8367869c timeCreated: 1551698978 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Fight/Stage/MapEditor/Game/EventRefreshNPCHandler.cs
New file @@ -0,0 +1,137 @@ 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>((uint)_data.npcID, E_ActorGroup.Enemy); _npc.Pos = _data.position; _npc.belongEventID = m_Evt.id; } } private void RefreshAll() { if (m_RefreshCount < m_Evt.monsters.Length) { foreach (var _data in m_Evt.monsters) { var _npc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightNorm>((uint)_data.npcID, E_ActorGroup.Enemy); _npc.Pos = _data.position; _npc.belongEventID = m_Evt.id; } 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; } } Fight/Stage/MapEditor/Game/EventRefreshNPCHandler.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: c7f7e93eba93cd044bdd4b6ddc9aa334 timeCreated: 1551667471 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Fight/Stage/MapEditor/Game/IEventHandler.cs
New file @@ -0,0 +1,11 @@ using H2Engine; public interface IEventHandler { int GetEventID(); Evt.E_EventType GetEventType(); void Init(Evt evt); bool IsCompelete(); void Update(); void UnInit(); } Fight/Stage/MapEditor/Game/IEventHandler.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 8831940d4fa557e42825777dcd3ca1b7 timeCreated: 1551684662 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Fight/Stage/MapEditor/Game/TriggerHandler.cs
New file @@ -0,0 +1,12 @@ using H2Engine; using UnityEngine; public class TriggerHandler { private MapTrigger m_Trigger; public TriggerHandler(MapTrigger trigger) { m_Trigger = trigger; } } Fight/Stage/MapEditor/Game/TriggerHandler.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: d4b520a4d7e5d434a8cbbfa2f21eaadc timeCreated: 1551678527 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Utility/RuntimeLogUtility.cs
@@ -188,9 +188,27 @@ 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); @@ -216,6 +234,7 @@ 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();