diff --git a/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs b/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs index 8802f06b2e..4c5e2eb46a 100644 --- a/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs +++ b/Assets/PerfectWorld/Scripts/NPC/CECNPC.cs @@ -68,53 +68,6 @@ public class CECNPC : CECObject m_pNPCModelPolicy = new CECNPCModelDefaultPolicy(this); } - // Add this field to CECNPC class - private bool m_bHasRelatedTask = false; - - private float _timerCheckTask = 0; - public void UpdateTaskIcon() - { - // Check if npcUI is assigned - if (m_npcUI == null) - { - m_npcUI = GetComponentInChildren(); - if (m_npcUI == null) return; - } - - // 2. Get Host Player & Interface - var host = CECGameRun.Instance.GetHostPlayer(); - if (host == null) return; - - var taskInterface = host.GetTaskInterface(); - if (taskInterface == null) - { - if (m_bHasRelatedTask) // only update if state changed - { - m_npcUI.SetTaskIconMain(false); - m_bHasRelatedTask = false; - } - return; - } - - // Get NPC Template ID - int npcTemplateID = m_NPCInfo.tid; - - // Check if there are tasks related to this NPC - bool hasTask = taskInterface.HasTaskRelatedToNPC(npcTemplateID); - - // Update icon only if state changed - if (m_bHasRelatedTask != hasTask) - { - m_bHasRelatedTask = hasTask; - m_npcUI.SetTaskIconMain(hasTask); - - if (hasTask) - { - Debug.Log($"[Icon] NPC {m_strName} (TID: {npcTemplateID})"); - } - } - } - public string GetName() { @@ -226,8 +179,6 @@ public class CECNPC : CECObject new Vector2(m_vServerPos.x, m_vServerPos.z), new Vector2(pHost.transform.position.x, pHost.transform.position.z)); } - - UpdateTaskIcon(); return true; } @@ -561,13 +512,6 @@ public class CECNPC : CECObject { StartAdjustTransparency(-1.0f, GetTransparentLimit(), 500); } - - _timerCheckTask += Time.deltaTime; - if (_timerCheckTask > 1.0f) - { - _timerCheckTask = 0; - UpdateTaskIcon(); - } } private void TickWork_Dead(float deltaTime) diff --git a/Assets/PerfectWorld/Scripts/NPC/CECNPCServer.cs b/Assets/PerfectWorld/Scripts/NPC/CECNPCServer.cs index 83d88af57c..396a07045f 100644 --- a/Assets/PerfectWorld/Scripts/NPC/CECNPCServer.cs +++ b/Assets/PerfectWorld/Scripts/NPC/CECNPCServer.cs @@ -1,4 +1,7 @@ using BrewMonster; +using BrewMonster.Network; +using BrewMonster.Scripts; +using BrewMonster.Scripts.Task; using CSNetwork.GPDataType; using System; using System.Runtime.InteropServices; @@ -10,12 +13,17 @@ public class CECNPCServer : CECNPC { NPC_ESSENCE? m_pDBEssence; MONSTER_ESSENCE? m_pMonEssence; - float m_fTaxRate = 0.05f; // Tax rate + float m_fTaxRate = 0.05f; // Tax rate + + private IconTaskType m_TaskIcon = IconTaskType.QI_NONE; + private CECCounter m_TaskCounter = new CECCounter(); + public override void SetUpCECNPC(CECNPCMan pNPCMan) { base.SetUpCECNPC(pNPCMan); m_iCID = (int)Class_ID.OCID_SERVER; m_pDBEssence = null; + m_TaskCounter.SetPeriod(1000); } public override bool Init(int tid, in info_npc info, ReadOnlySpan packet, int infoOffset) { @@ -57,11 +65,20 @@ public class CECNPCServer : CECNPC transform.position = EC_Utility.ToVector3(info.pos); StartWork((int)WorkType.WT_NOTHING, (int)WorkID.WORK_STAND); - - UpdateTaskIcon(); return true; } + protected override void Update() + { + base.Update(); + + if (m_TaskCounter.IncCounter(Time.deltaTime * 1000)) + { + m_TaskCounter.Reset(); + UpdateCurTaskIcon(); + } + } + // Get way point ID bound with this NPC public uint? GetWayPointID() { @@ -83,4 +100,222 @@ public class CECNPCServer : CECNPC { return 1.0f + m_pDBEssence.Value.tax_rate; } + + private void UpdateCurTaskIcon() + { + var pHost = CECGameRun.Instance.GetHostPlayer(); + if (pHost == null || pHost.GetTaskInterface() == null) + { + return; + } + + if (m_pDBEssence == null) + { + return; + } + + var pTaskMan = EC_Game.GetTaskTemplateMan(); + var pDataMan = ElementDataManProvider.GetElementDataMan(); + var pTask = pHost.GetTaskInterface(); + + const uint TASK_HAVE_COMPLETE = 0x10000000; + const uint TASK_COMPLETE = 0x01; + const uint TASK_INCOMPLETE = 0x02; + const uint TASK_CANGET = 0x04; + const uint TASK_CANNOTGET = 0x08; + const uint TASK_COMPLETE_TYPE1 = 0x10; + const uint TASK_CANGET_TYPE1 = 0x20; + const uint TASK_COMPLETE_TYPE2 = 0x40; + const uint TASK_CANGET_TYPE2 = 0x80; + const uint TASK_COMPLETE_TYPE3 = 0x100; + const uint TASK_CANGET_TYPE3 = 0x200; + const uint TASK_COMPLETE_TYPE4 = 0x400; + const uint TASK_CANGET_TYPE4 = 0x800; + + m_TaskIcon = IconTaskType.QI_NONE; + uint taskFlag = 0; + + BMLogger.Log($"[UpdateCurTaskIcon] NPC {m_NPCInfo.nid}, id_task_in_service={m_pDBEssence.Value.id_task_in_service}, id_task_out_service={m_pDBEssence.Value.id_task_out_service}"); + if (m_pDBEssence.Value.id_task_in_service != 0) + { + DATA_TYPE dt = DATA_TYPE.DT_INVALID; + var serviceData = pDataMan.get_data_ptr(m_pDBEssence.Value.id_task_in_service, ID_SPACE.ID_SPACE_ESSENCE, ref dt); + + if (serviceData != null && dt == DATA_TYPE.DT_NPC_TASK_IN_SERVICE) + { + var inService = (NPC_TASK_IN_SERVICE)serviceData; + + for (int i = 0; i < inService.id_tasks.Length; i++) + { + uint idTask = inService.id_tasks[i]; + if (idTask <= 0 || !pTask.HasTask(idTask)) + continue; + + BMLogger.Log($"[UpdateCurTaskIcon] Check IN task {idTask}, HasTask={pTask.HasTask(idTask)}, CanFinish={pTask.CanFinishTask((idTask))}"); + + var pTaskTemp = pTaskMan.GetTaskTemplByID(idTask); + if (pTaskTemp == null) + continue; + + if (pTask.CanFinishTask(idTask)) + { + taskFlag |= TASK_HAVE_COMPLETE; + + if (pTaskTemp.IsKeyTask()) + { + m_TaskIcon = IconTaskType.QI_IN_K; + BMLogger.Log($"[UpdateCurTaskIcon] Set icon QI_IN_K for task {idTask}"); + UpdateTaskIconUI(); + return; + } + else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTEvent || pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTDaily) + { + taskFlag |= TASK_COMPLETE_TYPE3; + } + else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTQiShaList) + { + taskFlag |= TASK_COMPLETE_TYPE2; + } + else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTFaction || pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTFunction) + { + taskFlag |= TASK_COMPLETE_TYPE1; + } + else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTMajor) + { + taskFlag |= TASK_COMPLETE_TYPE4; + } + else + { + taskFlag |= TASK_COMPLETE; + } + } + else + { + taskFlag |= TASK_INCOMPLETE; + } + } + } + } + + if ((taskFlag & TASK_HAVE_COMPLETE) != 0) + { + if ((taskFlag & TASK_COMPLETE_TYPE4) != 0) + m_TaskIcon = IconTaskType.QI_IN_TYPE4; + else if ((taskFlag & TASK_COMPLETE_TYPE3) != 0) + m_TaskIcon = IconTaskType.QI_IN_TYPE3; + else if ((taskFlag & TASK_COMPLETE_TYPE2) != 0) + m_TaskIcon = IconTaskType.QI_IN_TYPE2; + else if ((taskFlag & TASK_COMPLETE) != 0) + m_TaskIcon = IconTaskType.QI_IN; + else if ((taskFlag & TASK_COMPLETE_TYPE1) != 0) + m_TaskIcon = IconTaskType.QI_IN_TYPE1; + + BMLogger.Log($"[UpdateCurTaskIcon] Set complete icon {m_TaskIcon}"); + UpdateTaskIconUI(); + return; + } + + if (m_pDBEssence.Value.id_task_out_service != 0) + { + DATA_TYPE dt = DATA_TYPE.DT_INVALID; + var serviceData = pDataMan.get_data_ptr( + m_pDBEssence.Value.id_task_out_service, + ID_SPACE.ID_SPACE_ESSENCE, + ref dt + ); + + if (serviceData != null && dt == DATA_TYPE.DT_NPC_TASK_OUT_SERVICE) + { + var outService = (NPC_TASK_OUT_SERVICE)serviceData; + + if (outService.storage_id != 0 && outService.storage_open_item != 0) + { + var pack = pHost.GetInventory(InventoryConst.IVTRTYPE_PACK); + if (pack != null && pack.GetItemTotalNum((int)outService.storage_open_item) > 0) + { + taskFlag |= TASK_CANGET_TYPE2; + } + } + + // Check normal tasks + for (int i = 0; i < outService.id_tasks.Length; i++) + { + uint idTask = outService.id_tasks[i]; + if (idTask <= 0) + continue; + + BMLogger.Log($"[UpdateCurTaskIcon] Check OUT task {idTask}, CanShow={pTask.CanShowTask(idTask)}, CanDeliver={pTask.CanDeliverTask(idTask)}"); + + if (!pTask.CanShowTask(idTask)) + continue; + + var pTaskTemp = pTaskMan.GetTaskTemplByID(idTask); + if (pTaskTemp == null) + continue; + + if (pTask.CanDeliverTask(idTask) == 0) + { + if (pTaskTemp.IsKeyTask()) + { + m_TaskIcon = IconTaskType.QI_OUT_K; + BMLogger.Log($"[UpdateCurTaskIcon] Set icon QI_OUT_K for task {idTask}"); + UpdateTaskIconUI(); + return; + } + else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTEvent || pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTDaily) + { + taskFlag |= TASK_CANGET_TYPE3; + } + else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTQiShaList) + { + taskFlag |= TASK_CANGET_TYPE2; + } + else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTFaction || pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTFunction) + { + taskFlag |= TASK_CANGET_TYPE1; + } + else if (pTaskTemp.GetType() == (uint)ENUM_TASK_TYPE.enumTTMajor) + { + taskFlag |= TASK_CANGET_TYPE4; + } + else + { + taskFlag |= TASK_CANGET; + } + } + else + { + taskFlag |= TASK_CANNOTGET; + } + } + } + } + + // Set icon by available task priority + if ((taskFlag & TASK_CANGET_TYPE4) != 0) + m_TaskIcon = IconTaskType.QI_OUT_TYPE4; + else if ((taskFlag & TASK_CANGET_TYPE3) != 0) + m_TaskIcon = IconTaskType.QI_OUT_TYPE3; + else if ((taskFlag & TASK_CANGET_TYPE2) != 0) + m_TaskIcon = IconTaskType.QI_OUT_TYPE2; + else if ((taskFlag & TASK_CANGET) != 0) + m_TaskIcon = IconTaskType.QI_OUT; + else if ((taskFlag & TASK_CANGET_TYPE1) != 0) + m_TaskIcon = IconTaskType.QI_OUT_TYPE1; + else if ((taskFlag & TASK_INCOMPLETE) != 0) + m_TaskIcon = IconTaskType.QI_IN_N; + else if ((taskFlag & TASK_CANNOTGET) != 0) + m_TaskIcon = IconTaskType.QI_OUT_N; + + BMLogger.Log($"[UpdateCurTaskIcon] Final icon {m_TaskIcon}, taskFlag={taskFlag}"); + UpdateTaskIconUI(); + } + + private void UpdateTaskIconUI() + { + if(m_npcUI != null) + { + m_npcUI.SetTaskIcon(m_TaskIcon); + } + } } diff --git a/Assets/PerfectWorld/Scripts/Task/ATaskTemplMan.cs b/Assets/PerfectWorld/Scripts/Task/ATaskTemplMan.cs index b3a1af2b43..efae8f7f98 100644 --- a/Assets/PerfectWorld/Scripts/Task/ATaskTemplMan.cs +++ b/Assets/PerfectWorld/Scripts/Task/ATaskTemplMan.cs @@ -300,96 +300,28 @@ namespace BrewMonster.Scripts.Task return tasks; } - // Add this method to ATaskTemplMan class if not exists - public List GetAllTopTasks() + public int GetStorageRefreshPerDay(uint storageId) { - List topTasks = new List(); + if (storageId == 0 || storageId > TaskInterfaceConstants.TASK_STORAGE_COUNT) + return 0; - // Iterate through all task templates and collect top-level tasks - // Assuming you have a dictionary or collection of all tasks - foreach (var kvp in m_TaskTemplMap) // Replace with your actual collection name + if (!m_StorageEssenseMap.TryGetValue(storageId, out uint essenceId)) + return 0; + + DATA_TYPE dt = DATA_TYPE.DT_INVALID; + var serviceData = m_pEleDataMan.get_data_ptr( + essenceId, + ID_SPACE.ID_SPACE_ESSENCE, + ref dt + ); + + if (serviceData != null && dt == DATA_TYPE.DT_NPC_TASK_OUT_SERVICE) { - var templ = kvp.Value; - if (templ != null && templ.m_pParent == null) // Top-level task has no parent - { - topTasks.Add(templ); - } + var outService = (NPC_TASK_OUT_SERVICE)serviceData; + return (int)outService.storage_refresh_per_day; } - return topTasks; - } - - // Alternative method if you want to check by NPC ID directly - public List GetAvailableTasksForNPC(int npcID) - { - List availableTasks = new List(); - - foreach (var kvp in m_TaskTemplMap) // Replace with your actual collection name - { - var templ = kvp.Value; - if (templ != null && - templ.m_pParent == null && - templ.m_FixedData.m_ulDelvNPC == npcID) - { - availableTasks.Add(templ); - } - } - - return availableTasks; - } - - // Add this method to ATaskTemplMan class - - /// - /// Get all task templates (for iterating to find available tasks) - /// Lấy tất cả task templates (để duyệt tìm nhiệm vụ có thể nhận) - /// - public List GetAllTaskTemplates() - { - List allTasks = new List(); - - // Assuming you have a collection storing all task templates - // Replace m_TaskMap with your actual collection name - if (m_TaskTemplMap != null) - { - foreach (var kvp in m_TaskTemplMap) - { - if (kvp.Value != null) - { - allTasks.Add(kvp.Value); - } - } - } - - return allTasks; - } - - /// - /// Get list of tasks delivered by a specific NPC - /// - public List GetTasksFromNPC(int npcID) - { - var result = new List(); - - // Check if NPC info map is available - if (m_NPCInfoMap != null && m_NPCInfoMap.TryGetValue((uint)npcID, out var npcInfo)) - { - return new List(); - } - else - { - // Fallback - foreach (var kvp in m_TaskTemplMap) - { - var templ = kvp.Value; - if (templ != null && templ.m_FixedData.m_ulDelvNPC == npcID) - { - result.Add(templ); - } - } - } - - return result; + return 0; } // General method to read a struct from a FileStream diff --git a/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs b/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs index 2a6ca41983..86a961fd34 100644 --- a/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs +++ b/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs @@ -531,85 +531,6 @@ namespace BrewMonster.Scripts.Task return m_pActiveListBuf; } - // Trong file CECTaskInterface.cs - - public bool HasTaskRelatedToNPC(int npcID) - { - // Check tasks is active - ActiveTaskList activeList = GetActiveTaskList(); - if (activeList != null && activeList.m_TaskEntries != null) - { - for (int i = 0; i < activeList.m_uTaskCount; i++) - { - var entry = activeList.m_TaskEntries[i]; - if (entry == null) continue; - - ATaskTempl templ = entry.GetTempl(); - if (templ == null) continue; - - // Check if this NPC is the target of the task - if (IsNPCTargetOfTask(templ, entry, npcID)) - { - return true; - } - } - } - - // Check tasks new - ATaskTemplMan taskMan = GetTaskTemplMan(); - if (taskMan != null) - { - List npcTasks = taskMan.GetTasksFromNPC(npcID); - if (npcTasks != null) - { - uint ulCurTime = GetCurTime(); - foreach (var templ in npcTasks) - { - // Check prerequisite - if (templ.CheckPrerequisite(this, activeList, ulCurTime) == 0) - { - return true; - } - } - } - } - - return false; - } - - // Check NPC is target of the task - private bool IsNPCTargetOfTask(ATaskTempl templ, ActiveTaskEntry entry, int npcID) - { - var data = templ.m_FixedData; - - // Task completed case - if (entry.IsFinished()) - { - if (data.m_ulAwardNPC == npcID) return true; - } - else - { - // NPC target - if (data.m_ulNPCMoving == npcID) return true; - - // Pos target - if (data.m_ulNPCDestSite == npcID) return true; - - // Security target - if (data.m_ulNPCToProtect == npcID) return true; - - if (data.m_enumMethod == (ulong)TaskCompletionMethod.enumTMTalkToNPC) - { - if (data.m_ulNPCMoving == 0 && data.m_ulAwardNPC == npcID) - { - return true; - } - } - } - return false; - } - - // private void InitActiveTaskList() // { // ActiveTaskList pLst = GetActiveTaskList(); diff --git a/Assets/PerfectWorld/Scripts/UI/GamePlay/UINPC.cs b/Assets/PerfectWorld/Scripts/UI/GamePlay/UINPC.cs index dac452d005..e025511e22 100644 --- a/Assets/PerfectWorld/Scripts/UI/GamePlay/UINPC.cs +++ b/Assets/PerfectWorld/Scripts/UI/GamePlay/UINPC.cs @@ -5,6 +5,27 @@ using UnityEngine.UI; namespace BrewMonster { + + public enum IconTaskType + { + QI_NONE = -1, + QI_OUT = 2, // task tu chan (nhan) + QI_IN = 2, // task tu chan (hoan thanh) + QI_OUT_N = 3, // chua du dieu kien nhan task + QI_IN_N = 3, // task nhan nhung chua lam (chua xong) + QI_OUT_K = 0, // chua biet + QI_IN_K = 5, // chua biet + + QI_OUT_TYPE1 = 5, // task bang hoi (nhan) + QI_IN_TYPE1 = 5, // task bang hoi (hoan thanh) + QI_OUT_TYPE2 = 1, // chua biet + QI_IN_TYPE2 = 1, // chua biet + QI_OUT_TYPE3 = -1, // task daily (nhan) + QI_IN_TYPE3 = -1, // task daily (hoan thanh) + QI_OUT_TYPE4 = 0, // task chinh (nhan) + QI_IN_TYPE4 = 4, // task chinh (hoan thanh) + } + public class UINPC : MonoBehaviour { [SerializeField] private TextMeshProUGUI _nameText; @@ -13,6 +34,21 @@ namespace BrewMonster [Header("List Icon Task")] [SerializeField] private GameObject _iconTaskMain; + [SerializeField] private List _listIconTask; + + private Image _cachedIconImage; + + private void Awake() + { + if (_iconTaskMain != null) + { + _cachedIconImage = _iconTaskMain.GetComponent(); + if (_cachedIconImage == null) + { + BMLogger.LogError($"[UINPC] _iconTaskMain doesn't have Image component!"); + } + } + } // Start is called once before the first execution of Update after the MonoBehaviour is created public void SetName(string name) @@ -30,10 +66,30 @@ namespace BrewMonster _healthText.text = healthText; } + public void SetTaskIcon(IconTaskType iconType) + { + if (_iconTaskMain == null || _cachedIconImage == null) + { + return; + } + int iconIndex = (int)iconType; + + if (iconIndex >= 0 && _listIconTask != null && iconIndex < _listIconTask.Count) + { + _cachedIconImage.sprite = _listIconTask[iconIndex]; + _iconTaskMain.SetActive(true); + } + else + { + _iconTaskMain.SetActive(false); + } + } + public void SetTaskIconMain(bool isShow) { - if(_iconTaskMain != null) + if (_iconTaskMain != null) _iconTaskMain.SetActive(isShow); } } } + diff --git a/Assets/PerfectWorld/UI/TaskIcon/ChuTuyen.png b/Assets/PerfectWorld/UI/TaskIcon/iconTask1.png similarity index 100% rename from Assets/PerfectWorld/UI/TaskIcon/ChuTuyen.png rename to Assets/PerfectWorld/UI/TaskIcon/iconTask1.png diff --git a/Assets/PerfectWorld/UI/TaskIcon/ChuTuyen.png.meta b/Assets/PerfectWorld/UI/TaskIcon/iconTask1.png.meta similarity index 93% rename from Assets/PerfectWorld/UI/TaskIcon/ChuTuyen.png.meta rename to Assets/PerfectWorld/UI/TaskIcon/iconTask1.png.meta index 205d22fd18..5d9e0cd89c 100644 --- a/Assets/PerfectWorld/UI/TaskIcon/ChuTuyen.png.meta +++ b/Assets/PerfectWorld/UI/TaskIcon/iconTask1.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d2ab8e4bde76db4478aff9994361b46a +guid: 4276d7122cfaf624f8aa32336fc90f1c TextureImporter: internalIDToNameTable: [] externalObjects: {} @@ -110,7 +110,7 @@ TextureImporter: serializedVersion: 2 sprites: - serializedVersion: 2 - name: ChuTuyen_0 + name: iconTask1_0 rect: serializedVersion: 2 x: 201 @@ -125,8 +125,8 @@ TextureImporter: physicsShape: [] tessellationDetail: 0 bones: [] - spriteID: 42af0f91f2269ff47b862dbb765d32f2 - internalID: -338310257 + spriteID: 3577b54168afc5242a9c02dce91f1260 + internalID: 1049366989 vertices: [] indices: edges: [] @@ -135,7 +135,7 @@ TextureImporter: customData: physicsShape: [] bones: [] - spriteID: f1f78b52002efcf4da3264912e38dddb + spriteID: 16fc5ffd47ee2f1429eb79e647db644d internalID: 0 vertices: [] indices: @@ -145,7 +145,7 @@ TextureImporter: spriteCustomMetadata: entries: [] nameFileIdTable: - ChuTuyen_0: -338310257 + iconTask1_0: 1049366989 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/PerfectWorld/UI/TaskIcon/TuChan.png b/Assets/PerfectWorld/UI/TaskIcon/iconTask2.png similarity index 100% rename from Assets/PerfectWorld/UI/TaskIcon/TuChan.png rename to Assets/PerfectWorld/UI/TaskIcon/iconTask2.png diff --git a/Assets/PerfectWorld/UI/TaskIcon/TuChan.png.meta b/Assets/PerfectWorld/UI/TaskIcon/iconTask2.png.meta similarity index 78% rename from Assets/PerfectWorld/UI/TaskIcon/TuChan.png.meta rename to Assets/PerfectWorld/UI/TaskIcon/iconTask2.png.meta index 7bc9174a94..9761116bfd 100644 --- a/Assets/PerfectWorld/UI/TaskIcon/TuChan.png.meta +++ b/Assets/PerfectWorld/UI/TaskIcon/iconTask2.png.meta @@ -1,12 +1,12 @@ fileFormatVersion: 2 -guid: cd36f0d3de378e94caea2807302f7a18 +guid: 454cf3e89d0aaa54b9c60ca081ff5f46 TextureImporter: internalIDToNameTable: [] externalObjects: {} serializedVersion: 13 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 sRGBTexture: 1 linearTexture: 0 fadeOut: 0 @@ -37,13 +37,13 @@ TextureImporter: filterMode: 1 aniso: 1 mipBias: 0 - wrapU: 0 - wrapV: 0 + wrapU: 1 + wrapV: 1 wrapW: 0 - nPOTScale: 1 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - spriteMode: 0 + spriteMode: 2 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 @@ -52,9 +52,9 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 0 + alphaIsTransparency: 1 spriteTessellationDetail: -1 - textureType: 0 + textureType: 8 textureShape: 1 singleChannelComponent: 0 flipbookRows: 1 @@ -108,12 +108,34 @@ TextureImporter: forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 - sprites: [] + sprites: + - serializedVersion: 2 + name: iconTask2_0 + rect: + serializedVersion: 2 + x: 178 + y: 221 + width: 616 + height: 628 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 88c7b386a6be7bd4dbb002f3a93895a1 + internalID: -61588767 + vertices: [] + indices: + edges: [] + weights: [] outline: [] customData: physicsShape: [] bones: [] - spriteID: + spriteID: a16d633ba72e5c04487f3be78b1735bc internalID: 0 vertices: [] indices: @@ -122,7 +144,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + iconTask2_0: -61588767 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/PerfectWorld/UI/TaskIcon/MoRong.png b/Assets/PerfectWorld/UI/TaskIcon/iconTask3.png similarity index 100% rename from Assets/PerfectWorld/UI/TaskIcon/MoRong.png rename to Assets/PerfectWorld/UI/TaskIcon/iconTask3.png diff --git a/Assets/PerfectWorld/UI/TaskIcon/iconTask3.png.meta b/Assets/PerfectWorld/UI/TaskIcon/iconTask3.png.meta new file mode 100644 index 0000000000..21628b1b33 --- /dev/null +++ b/Assets/PerfectWorld/UI/TaskIcon/iconTask3.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 13278f4394269834cb244620cd66c803 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: iconTask3_0 + rect: + serializedVersion: 2 + x: 154 + y: 231 + width: 632 + height: 655 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 252520bbad7c9374e90d1c950b8482d6 + internalID: 1481922406 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: fdab89333c5e8344e98af4bef992c422 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + iconTask3_0: 1481922406 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PerfectWorld/UI/TaskIcon/iconTask4.png b/Assets/PerfectWorld/UI/TaskIcon/iconTask4.png new file mode 100644 index 0000000000..480fc4bb02 Binary files /dev/null and b/Assets/PerfectWorld/UI/TaskIcon/iconTask4.png differ diff --git a/Assets/PerfectWorld/UI/TaskIcon/MoRong.png.meta b/Assets/PerfectWorld/UI/TaskIcon/iconTask4.png.meta similarity index 78% rename from Assets/PerfectWorld/UI/TaskIcon/MoRong.png.meta rename to Assets/PerfectWorld/UI/TaskIcon/iconTask4.png.meta index 1e0d1b93ab..5422378e51 100644 --- a/Assets/PerfectWorld/UI/TaskIcon/MoRong.png.meta +++ b/Assets/PerfectWorld/UI/TaskIcon/iconTask4.png.meta @@ -1,12 +1,12 @@ fileFormatVersion: 2 -guid: 7c5f76c428f533d4ca3a449e2bc02ff5 +guid: f666d782d2b84fa48912bb3166f214aa TextureImporter: internalIDToNameTable: [] externalObjects: {} serializedVersion: 13 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 sRGBTexture: 1 linearTexture: 0 fadeOut: 0 @@ -37,13 +37,13 @@ TextureImporter: filterMode: 1 aniso: 1 mipBias: 0 - wrapU: 0 - wrapV: 0 + wrapU: 1 + wrapV: 1 wrapW: 0 - nPOTScale: 1 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - spriteMode: 0 + spriteMode: 2 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 @@ -52,9 +52,9 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 0 + alphaIsTransparency: 1 spriteTessellationDetail: -1 - textureType: 0 + textureType: 8 textureShape: 1 singleChannelComponent: 0 flipbookRows: 1 @@ -108,12 +108,34 @@ TextureImporter: forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 - sprites: [] + sprites: + - serializedVersion: 2 + name: iconTask4_0 + rect: + serializedVersion: 2 + x: 67 + y: 108 + width: 330 + height: 312 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 591aabfa2f20afb4ea7673f8c6f3b77b + internalID: 799372409 + vertices: [] + indices: + edges: [] + weights: [] outline: [] customData: physicsShape: [] bones: [] - spriteID: + spriteID: c8e66269510e1524eb24b5af756fb09f internalID: 0 vertices: [] indices: @@ -122,7 +144,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + iconTask4_0: 799372409 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/PerfectWorld/UI/TaskIcon/iconTask5.png b/Assets/PerfectWorld/UI/TaskIcon/iconTask5.png new file mode 100644 index 0000000000..e44343f1c9 Binary files /dev/null and b/Assets/PerfectWorld/UI/TaskIcon/iconTask5.png differ diff --git a/Assets/PerfectWorld/UI/TaskIcon/iconTask5.png.meta b/Assets/PerfectWorld/UI/TaskIcon/iconTask5.png.meta new file mode 100644 index 0000000000..3b7c056b7d --- /dev/null +++ b/Assets/PerfectWorld/UI/TaskIcon/iconTask5.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: c27a0fab8aef4d74787fe56595601d9f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: iconTask5_0 + rect: + serializedVersion: 2 + x: 169 + y: 91 + width: 247 + height: 246 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 81a887702ec996041a55a92f080c99e2 + internalID: 1342343447 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: ee5d2861e27ff8f43bb7b8face30c7bb + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + iconTask5_0: 1342343447 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PerfectWorld/UI/TaskIcon/iconTask6.png b/Assets/PerfectWorld/UI/TaskIcon/iconTask6.png new file mode 100644 index 0000000000..d48c823f4b Binary files /dev/null and b/Assets/PerfectWorld/UI/TaskIcon/iconTask6.png differ diff --git a/Assets/PerfectWorld/UI/TaskIcon/iconTask6.png.meta b/Assets/PerfectWorld/UI/TaskIcon/iconTask6.png.meta new file mode 100644 index 0000000000..97a2fc5987 --- /dev/null +++ b/Assets/PerfectWorld/UI/TaskIcon/iconTask6.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 6deb3d497e3c2a44cb875be0f13bbf36 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: iconTask6_0 + rect: + serializedVersion: 2 + x: 93 + y: 79 + width: 313 + height: 343 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 18be220273ab7564389626093c9fa09a + internalID: 1458661374 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 33b9f9e65720df144a10109ca92117d7 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + iconTask6_0: 1458661374 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/NPC/NPCServer.prefab b/Assets/Resources/NPC/NPCServer.prefab index b4a8d93276..598d8a71ce 100644 --- a/Assets/Resources/NPC/NPCServer.prefab +++ b/Assets/Resources/NPC/NPCServer.prefab @@ -147,7 +147,7 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3297168817873124018} - m_LocalRotation: {x: -0.08684798, y: 0.24095127, z: 0.02165367, w: 0.9664011} + m_LocalRotation: {x: -3.7702125e-16, y: 0.97228837, z: 0.23378475, w: 1.5679955e-15} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -255,7 +255,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &7509779512108699303 RectTransform: m_ObjectHideFlags: 0 @@ -303,7 +303,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: -338310257, guid: d2ab8e4bde76db4478aff9994361b46a, type: 3} + m_Sprite: {fileID: 1049366989, guid: 4276d7122cfaf624f8aa32336fc90f1c, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -362,6 +362,13 @@ MonoBehaviour: _healthText: {fileID: 0} _healthImage: {fileID: 0} _iconTaskMain: {fileID: 5100466107490290627} + _listIconTask: + - {fileID: 1049366989, guid: 4276d7122cfaf624f8aa32336fc90f1c, type: 3} + - {fileID: -61588767, guid: 454cf3e89d0aaa54b9c60ca081ff5f46, type: 3} + - {fileID: 1481922406, guid: 13278f4394269834cb244620cd66c803, type: 3} + - {fileID: 799372409, guid: f666d782d2b84fa48912bb3166f214aa, type: 3} + - {fileID: 1342343447, guid: c27a0fab8aef4d74787fe56595601d9f, type: 3} + - {fileID: 1458661374, guid: 6deb3d497e3c2a44cb875be0f13bbf36, type: 3} --- !u!1 &6510845919681767284 GameObject: m_ObjectHideFlags: 0 @@ -388,7 +395,7 @@ RectTransform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6510845919681767284} - m_LocalRotation: {x: 0.028356783, y: 0.9830809, z: 0.02226828, w: 0.17958853} + m_LocalRotation: {x: 0.15080568, y: -0.8027092, z: -0.16719593, w: 0.5522329} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0