diff --git a/Assets/PerfectWorld/Prefab/Task/TaskTrace/DlgTaskTrace.prefab b/Assets/PerfectWorld/Prefab/Task/TaskTrace/DlgTaskTrace.prefab index d018538122..82e651990d 100644 --- a/Assets/PerfectWorld/Prefab/Task/TaskTrace/DlgTaskTrace.prefab +++ b/Assets/PerfectWorld/Prefab/Task/TaskTrace/DlgTaskTrace.prefab @@ -36,9 +36,9 @@ RectTransform: m_Father: {fileID: 8222630393730529017} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: -10, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 272, y: 0} + m_SizeDelta: {x: 544, y: 0} m_Pivot: {x: 0.5, y: 1} --- !u!222 &9154858122360570458 CanvasRenderer: @@ -68,7 +68,21 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: + m_text: 'asfasf + + asfasf + + asfasf + + asfasf + + asfasf + + asfasf + + asfasf + +' m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} @@ -180,7 +194,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_IgnoreLayout: 0 m_MinWidth: -1 - m_MinHeight: 370 + m_MinHeight: 300 m_PreferredWidth: -1 m_PreferredHeight: -1 m_FlexibleWidth: -1 @@ -1261,6 +1275,7 @@ GameObject: m_Component: - component: {fileID: 8222630393730529017} - component: {fileID: 2639351263650743997} + - component: {fileID: 4142611820152313966} m_Layer: 5 m_Name: Content m_TagString: Untagged @@ -1302,6 +1317,32 @@ MonoBehaviour: m_EditorClassIdentifier: m_HorizontalFit: 0 m_VerticalFit: 1 +--- !u!114 &4142611820152313966 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5003895622590170670} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &6318768709065201913 GameObject: m_ObjectHideFlags: 0 @@ -1394,7 +1435,7 @@ MonoBehaviour: m_Content: {fileID: 8222630393730529017} m_Horizontal: 0 m_Vertical: 1 - m_MovementType: 2 + m_MovementType: 1 m_Elasticity: 0.1 m_Inertia: 1 m_DecelerationRate: 0.135 diff --git a/Assets/PerfectWorld/Scripts/Objet/CECMatter.cs b/Assets/PerfectWorld/Scripts/Objet/CECMatter.cs index 719ca858c0..f96cae980d 100644 --- a/Assets/PerfectWorld/Scripts/Objet/CECMatter.cs +++ b/Assets/PerfectWorld/Scripts/Objet/CECMatter.cs @@ -166,14 +166,18 @@ namespace PerfectWorld.Scripts // use same rotation as Prefab // matterObject.transform.localRotation = Quaternion.identity; matterObject.SetActive(true); - // Add a collider if it doesn't have one if (matterObject.GetComponent() == null) { var collider = matterObject.AddComponent(); - collider.size = matterObject.GetComponentInChildren().bounds.size; + //this is a workaround to fix the collider size issue when load prefab go wrong at some point + //TODO: remove this workaround after the prefab load issue is fixed + Vector3 size = matterObject.GetComponentInChildren().bounds.size; + if (size.x == 0) size.x = 0.5f; + if (size.y == 0) size.y = 0.5f; + if (size.z == 0) size.z = 0.5f; + collider.size = size; } - // Create text object to display item name above the cube // CreateItemNameText(matterObject, info.tid); diff --git a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs index b5b489c30b..65be9d097b 100644 --- a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs +++ b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs @@ -924,8 +924,8 @@ namespace BrewMonster m_dwParam = src.m_dwParam; } public override CECShortcut Clone() => new CECSCCommand(this); - public int GetCommandID() => 0; - public int GetParam() => 0; + public int GetCommandID() => m_iCommand; + public int GetParam() => (int)m_dwParam; // Set / Get command parameter public void SetParam(uint dwParam) { m_dwParam = dwParam; } diff --git a/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs b/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs index a7fda57d52..81383cce4d 100644 --- a/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs +++ b/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs @@ -1848,7 +1848,7 @@ namespace BrewMonster.Scripts.Task List aEntries = new List(pList.m_TaskEntries); ATaskTempl pTempl; - if (emotion < (int)TaskInterface.CommandTaskAction.CMD_EMOTION_BINDBUDDY)// pTempl->m_uiEmotion ֵΪ0±íʾ²»¼ì²é£¬ËùÒÔËùÓбíÇéÐòºÅ¶¼ºóÒÆ1 + if (emotion < (int)TaskInterface.CommandTaskAction.CMD_EMOTION_BINDBUDDY)// pTempl->m_uiEmotion ֵΪ0±íʾ²»¼ì²é£¬ËùÒÔËùÓбíÇéÐòºÅ¶¼ºóÒÆ1 // pTempl->m_uiEmotion value of 0 means don't check, so all emote sequence numbers are shifted by 1 emotion += 1; for (int i = 0; i < pList.m_uTaskCount; i++) @@ -1865,7 +1865,16 @@ namespace BrewMonster.Scripts.Task // Check if map does not contain OR value == false if (!m_emotionTask.TryGetValue(id, out bool exists) || !exists) { - m_emotionTask[id] = (pTempl.m_FixedData.m_uiEmotion == (uint)emotion); + bool matches = (pTempl.m_FixedData.m_uiEmotion == (uint)emotion); + m_emotionTask[id] = matches; + + // WORKAROUND: Trigger quest check immediately when emotion matches + // TODO: Remove this workaround after animation completion is properly handled + // This ensures the server is notified right away instead of waiting for the next periodic check + if (matches) + { + TaskClient.OnTaskCheckStatus(this); + } } } } diff --git a/Assets/PerfectWorld/Scripts/Task/TaskClient.cs b/Assets/PerfectWorld/Scripts/Task/TaskClient.cs index da8da4bc20..aca5e061e8 100644 --- a/Assets/PerfectWorld/Scripts/Task/TaskClient.cs +++ b/Assets/PerfectWorld/Scripts/Task/TaskClient.cs @@ -361,8 +361,10 @@ namespace BrewMonster.Scripts.Task { if (!needServerCheck || pTask == null || pTempl == null || entry == null) return; - // Only auto-check for wait-time tasks (the reported broken case). - if ((TaskCompletionMethod)pTempl.m_FixedData.m_enumMethod != TaskCompletionMethod.enumTMWaitTime) + // Auto-check for wait-time tasks and simple client tasks (emote/action tasks) + TaskCompletionMethod method = (TaskCompletionMethod)pTempl.m_FixedData.m_enumMethod; + if (method != TaskCompletionMethod.enumTMWaitTime && + method != TaskCompletionMethod.enumTMSimpleClientTask) return; if (entry.IsFinished()) return; diff --git a/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs b/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs index 1d518858fa..03de032a53 100644 --- a/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs +++ b/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs @@ -1,4 +1,5 @@ using BrewMonster.Assets.PerfectWorld.Scripts.UI.GamePlay; +using BrewMonster.Network; using BrewMonster.UI; using System; using System.Collections.Generic; @@ -56,6 +57,10 @@ namespace BrewMonster { var actionTP = Instantiate(actionTemplate, actionContain); actionTP.gameObject.SetActive(true); + + // Set up click handler for action items / 为动作项设置点击处理程序 + SetupActionClickHandler(actionTP); + m_aActionInfo.Add(new ActionInfo { image = actionTP, @@ -109,6 +114,35 @@ namespace BrewMonster } } } + /// + /// Set up click handler for action items, similar to wave hand logic / 为动作项设置点击处理程序,类似于挥手逻辑 + /// + private void SetupActionClickHandler(AUIImagePicture actionImage) + { + if (actionImage == null) return; + + Debug.Log($"CDlgSkillSubAction::SetupActionClickHandler():: Setting up click handler for action item: {actionImage.name}"); + // Get the button component / 获取按钮组件 + var button = actionImage.GetComponentInChildren(); + if (button == null) + return; + + // Remove existing listeners and add our custom handler / 移除现有监听器并添加我们的自定义处理程序 + button.onClick.RemoveAllListeners(); + button.onClick.AddListener(() => OnActionClicked(actionImage)); + } + + /// + /// Handle action icon click, similar to wave hand logic / 处理动作图标点击,类似于挥手逻辑 + /// + private void OnActionClicked(AUIImagePicture actionImage) + { + if (actionImage == null) return; + + // Get the shortcut from the action image / 从动作图像获取快捷方式 + actionImage.Execute(); + } + [Serializable] public struct ActionInfo { diff --git a/Assets/PerfectWorld/Scripts/UI/GamePlay/AUIImagePicture.cs b/Assets/PerfectWorld/Scripts/UI/GamePlay/AUIImagePicture.cs index 9f885cfeb8..364fbb1d92 100644 --- a/Assets/PerfectWorld/Scripts/UI/GamePlay/AUIImagePicture.cs +++ b/Assets/PerfectWorld/Scripts/UI/GamePlay/AUIImagePicture.cs @@ -64,9 +64,17 @@ namespace BrewMonster.Assets.PerfectWorld.Scripts.UI.GamePlay { if (pSC != null) { - pSC.Execute(); - - SetInteract(false); + // Execute the shortcut - this will trigger CmdStartPose which sends network message + // The quest completion happens when OnMsgPlayerDoEmote receives the server response + // and calls SetEmotion, similar to how OnClickedWaveHand works + bool executed = pSC.Execute(); + + // Only disable interaction if execution succeeded + // This ensures the network message is sent before we disable the button + if (executed) + { + SetInteract(false); + } } else { diff --git a/Assets/Prefabs/UI/CDlgInfoTooltip.prefab b/Assets/Prefabs/UI/CDlgInfoTooltip.prefab index 3936cf02b8..9b980fd868 100644 --- a/Assets/Prefabs/UI/CDlgInfoTooltip.prefab +++ b/Assets/Prefabs/UI/CDlgInfoTooltip.prefab @@ -368,6 +368,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e8681072225697243a08644ceda976a3, type: 3} m_Name: m_EditorClassIdentifier: + skillNameText: {fileID: 0} + imageProgress: {fileID: 0} panelRoot: {fileID: 6830833846243993097} descriptionText: legacy: {fileID: 0} diff --git a/Assets/Prefabs/UI/SkillUI.prefab b/Assets/Prefabs/UI/SkillUI.prefab index 917033093b..06190b6a0b 100644 --- a/Assets/Prefabs/UI/SkillUI.prefab +++ b/Assets/Prefabs/UI/SkillUI.prefab @@ -2713,6 +2713,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4d2e79da3ae98154c98516f50b73a81b, type: 3} m_Name: m_EditorClassIdentifier: + skillNameText: {fileID: 0} + imageProgress: {fileID: 0} ptSkillContainer: {fileID: 5209698742198332103} psSkillContainer: {fileID: 6640795756162075713} psSkillSlotList: [] @@ -3815,7 +3817,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 149.24545, y: 0.00000023857865} + m_AnchoredPosition: {x: 149.24545, y: 0} m_SizeDelta: {x: 154.1473, y: 37} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &5506685427520632045 @@ -5138,6 +5140,7 @@ GameObject: - component: {fileID: 6710103663631289946} - component: {fileID: 523329600507644709} - component: {fileID: 912173140299320127} + - component: {fileID: 6034688251073174200} m_Layer: 5 m_Name: icon m_TagString: Untagged @@ -5178,7 +5181,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 67fd391520cbfd44f84a1c6bb57673c0, type: 3} m_Name: m_EditorClassIdentifier: - skillbutton: {fileID: 0} + skillbutton: {fileID: 6034688251073174200} skillImage: {fileID: 79341390793448853} borderImage: {fileID: 5124956242307597890} cooldownTime: 0 @@ -5221,6 +5224,50 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &6034688251073174200 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3331107676278791390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 0} + m_OnClick: + m_PersistentCalls: + m_Calls: [] --- !u!1 &3406708742645219522 GameObject: m_ObjectHideFlags: 0 @@ -13021,6 +13068,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7304a7aa2183ad34babf66894ed22f7e, type: 3} m_Name: m_EditorClassIdentifier: + skillNameText: {fileID: 0} + imageProgress: {fileID: 0} m_pSubRank: {fileID: 1851903413579782982} m_pSubSkill: {fileID: 7688900625148083785} m_contentRoot: {fileID: 8302858527499935758} @@ -13213,6 +13262,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 05377af3dd0a3a84fbff62d8e0a572f9, type: 3} m_Name: m_EditorClassIdentifier: + skillNameText: {fileID: 0} + imageProgress: {fileID: 0} m_skillNameLbl: {fileID: 7381636566794381957} skillLevel: {fileID: 1095789015156331712} m_highlight: {fileID: 0} @@ -13380,6 +13431,7 @@ GameObject: - component: {fileID: 6897593266829550523} - component: {fileID: 6263047871981887699} - component: {fileID: 8452392559284459496} + - component: {fileID: 5320015828055191291} m_Layer: 5 m_Name: icon m_TagString: Untagged @@ -13420,7 +13472,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 67fd391520cbfd44f84a1c6bb57673c0, type: 3} m_Name: m_EditorClassIdentifier: - skillbutton: {fileID: 0} + skillbutton: {fileID: 5320015828055191291} skillImage: {fileID: 4930055916587000086} borderImage: {fileID: 3406708742645219522} cooldownTime: 0 @@ -13463,6 +13515,50 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5320015828055191291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8033079540058746360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 8452392559284459496} + m_OnClick: + m_PersistentCalls: + m_Calls: [] --- !u!1 &8090171231683763887 GameObject: m_ObjectHideFlags: 0