From e2e63b83f24cf8fade7006033943bfb90c2cdcad Mon Sep 17 00:00:00 2001 From: VDH Date: Thu, 29 Jan 2026 19:24:42 +0700 Subject: [PATCH] convert ui code --- .../Scripts/Common/EC_Resource.cs | 5 + .../Scripts/Common/EC_Resource.cs.meta | 2 + .../Scripts/Network/CSNetwork/GameSession.cs | 2 - .../Scripts/Objet/Shortcut/CECShortcutSet.cs | 410 ++++++++++++------ Assets/PerfectWorld/Scripts/UI/Action.meta | 8 + .../Scripts/UI/Action/CDlgSkillSubAction.cs | 72 +++ .../UI/Action/CDlgSkillSubAction.cs.meta | 2 + Assets/PerfectWorld/Scripts/UI/Emote.meta | 8 + .../Scripts/UI/Emote/CDlgTaskAction.cs | 15 + .../Scripts/UI/Emote/CDlgTaskAction.cs.meta | 2 + .../Scripts/UI/GamePlay/EC_GameUIMan.cs | 5 +- Assets/Scripts/CECHostPlayer.cs | 7 - Assets/Scripts/Utilities/EC_Resource.cs | 86 +++- 13 files changed, 473 insertions(+), 151 deletions(-) create mode 100644 Assets/PerfectWorld/Scripts/Common/EC_Resource.cs create mode 100644 Assets/PerfectWorld/Scripts/Common/EC_Resource.cs.meta create mode 100644 Assets/PerfectWorld/Scripts/UI/Action.meta create mode 100644 Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs create mode 100644 Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs.meta create mode 100644 Assets/PerfectWorld/Scripts/UI/Emote.meta create mode 100644 Assets/PerfectWorld/Scripts/UI/Emote/CDlgTaskAction.cs create mode 100644 Assets/PerfectWorld/Scripts/UI/Emote/CDlgTaskAction.cs.meta diff --git a/Assets/PerfectWorld/Scripts/Common/EC_Resource.cs b/Assets/PerfectWorld/Scripts/Common/EC_Resource.cs new file mode 100644 index 0000000000..e699ac5919 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Common/EC_Resource.cs @@ -0,0 +1,5 @@ +using UnityEngine; + +namespace BrewMonster +{ +} diff --git a/Assets/PerfectWorld/Scripts/Common/EC_Resource.cs.meta b/Assets/PerfectWorld/Scripts/Common/EC_Resource.cs.meta new file mode 100644 index 0000000000..0ae7e1884c --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Common/EC_Resource.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1c12399ff0e62e146b5951b866e5ab91 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs index 9b8592ffa2..ec28f2f135 100644 --- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs @@ -960,7 +960,6 @@ namespace CSNetwork EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SETCOOLTIME, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader); break; case CommandID.COMBO_SKILL_PREPARE: - BMLogger.LogError("### GameDataSend: COMBO_SKILL_PREPARE"); EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_COMBO_SKILL_PREPARE, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize); break; case CommandID.PLAYER_EXT_PROP_BASE: @@ -1675,7 +1674,6 @@ namespace CSNetwork { gamedatasend gamedatasend = new gamedatasend(); gamedatasend.Data = C2SCommandFactory.CreateTaskNotifyCmd(pData, dwDataSize); - BMLogger.Log($"[MH Task] c2s_SendCmdTaskNotify Command ID : {pData[0]} Size: {dwDataSize}"); SendProtocol(gamedatasend); } diff --git a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs index 49088daa56..3df3048ca5 100644 --- a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs +++ b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs @@ -10,15 +10,22 @@ * * Copyright (c) 2005 Archosaur Studio, All Rights Reserved. */ - +using static BrewMonster.CECSCCommand.CommandID; +using static BrewMonster.Scripts.RoleExpression; +using static BrewMonster.Scripts.DescriptipionMsg; using BrewMonster.Assets.PerfectWorld.Scripts.Skills; using BrewMonster.Network; +using BrewMonster.Scripts; using BrewMonster.Scripts.Skills; +using CSNetwork.C2SCommand; using CSNetwork.GPDataType; +using CSNetwork.S2CCommand; using System; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; +using static BrewMonster.EC_Resource; +using static BrewMonster.IconResourceType; namespace BrewMonster { @@ -636,28 +643,28 @@ namespace BrewMonster break; } -/* case CECShortcut.ShortcutType.SCT_ITEM: - { - int iPack = BitConverter.ToInt32(pDataBuf, offset); - offset += sizeof(int); - int iIvtrSlot = BitConverter.ToInt32(pDataBuf, offset); - offset += sizeof(int); - int idItem = BitConverter.ToInt32(pDataBuf, offset); - offset += sizeof(int); + /* case CECShortcut.ShortcutType.SCT_ITEM: + { + int iPack = BitConverter.ToInt32(pDataBuf, offset); + offset += sizeof(int); + int iIvtrSlot = BitConverter.ToInt32(pDataBuf, offset); + offset += sizeof(int); + int idItem = BitConverter.ToInt32(pDataBuf, offset); + offset += sizeof(int); - CECInventory pPack = pHost.GetPack(iPack); - if (pPack == null) - { - Debug.LogError("CECShortcutSet::LoadConfigData - Invalid inventory"); - return false; - } + CECInventory pPack = pHost.GetPack(iPack); + if (pPack == null) + { + Debug.LogError("CECShortcutSet::LoadConfigData - Invalid inventory"); + return false; + } - CECIvtrItem pItem = pPack.GetItem(iIvtrSlot); - if (pItem != null) - CreateItemShortcut(iSlot, iPack, iIvtrSlot, pItem); + CECIvtrItem pItem = pPack.GetItem(iIvtrSlot); + if (pItem != null) + CreateItemShortcut(iSlot, iPack, iIvtrSlot, pItem); - break; - }*/ + break; + }*/ case CECShortcut.ShortcutType.SCT_SKILLGRP: { @@ -677,59 +684,59 @@ namespace BrewMonster break; } - /*case CECShortcut.ShortcutType.SCT_PET: - { - if (dwVer >= 4) + /*case CECShortcut.ShortcutType.SCT_PET: { - int iPetIndex = BitConverter.ToInt32(pDataBuf, offset); - offset += sizeof(int); + if (dwVer >= 4) + { + int iPetIndex = BitConverter.ToInt32(pDataBuf, offset); + offset += sizeof(int); - if (iPetIndex >= 0) - CreatePetShortcut(iSlot, iPetIndex); + if (iPetIndex >= 0) + CreatePetShortcut(iSlot, iPetIndex); + } + else + { + Debug.LogError("CECShortcutSet::LoadConfigData - Invalid version for pet"); + return false; + } + break; } - else - { - Debug.LogError("CECShortcutSet::LoadConfigData - Invalid version for pet"); - return false; - } - break; - } - case CECShortcut.ShortcutType.SCT_AUTOFASHION: - { - if (dwVer >= 5) + case CECShortcut.ShortcutType.SCT_AUTOFASHION: { - int iAutoFashionIndex = BitConverter.ToInt32(pDataBuf, offset); - offset += sizeof(int); + if (dwVer >= 5) + { + int iAutoFashionIndex = BitConverter.ToInt32(pDataBuf, offset); + offset += sizeof(int); - if (iAutoFashionIndex >= 0) - CreateAutoFashionShortcut(iSlot, iAutoFashionIndex); + if (iAutoFashionIndex >= 0) + CreateAutoFashionShortcut(iSlot, iAutoFashionIndex); + } + else + { + Debug.LogError("CECShortcutSet::LoadConfigData - Invalid version for auto fashion"); + return false; + } + break; } - else - { - Debug.LogError("CECShortcutSet::LoadConfigData - Invalid version for auto fashion"); - return false; - } - break; - } - case CECShortcut.ShortcutType.SCT_SYSMODULE: - { - if (dwVer > 10) + case CECShortcut.ShortcutType.SCT_SYSMODULE: { - int iSys = BitConverter.ToInt32(pDataBuf, offset); - offset += sizeof(int); + if (dwVer > 10) + { + int iSys = BitConverter.ToInt32(pDataBuf, offset); + offset += sizeof(int); - if (iSys >= 0) - CreateSystemModuleShortcut(iSlot, iSys); - } - else - { - Debug.LogError("CECShortcutSet::LoadConfigData - Invalid version for system module"); - return false; - } - break; - }*/ + if (iSys >= 0) + CreateSystemModuleShortcut(iSlot, iSys); + } + else + { + Debug.LogError("CECShortcutSet::LoadConfigData - Invalid version for system module"); + return false; + } + break; + }*/ /* default: //TODO: uncomment @@ -781,15 +788,22 @@ namespace BrewMonster { return m_iSCType; } + public virtual string GetDesc() { return ""; } public virtual CECShortcut Clone() { return new CECShortcut(); } public virtual bool Execute() { return true; } + // Get icon file + public virtual string GetIconFile() + { + // Return a default icon file name + return "unknown"; + } } // Shortcut type - public enum ShortcutType + public enum ShortcutType { SCT_UNKNOWN = -1, @@ -814,7 +828,7 @@ namespace BrewMonster CMD_FINDTARGET, CMD_ASSISTATTACK, CMD_INVITETOTEAM, - CMD_LEAVETEAM, + CMD_LEAVETEAM, CMD_KICKTEAMMEM, CMD_FINDTEAM, CMD_STARTTRADE, @@ -830,25 +844,93 @@ namespace BrewMonster } public CECSCCommand(int iCommand) { - m_iSCType = (int)ShortcutType.SCT_COMMAND; + m_iSCType = (int)ShortcutType.SCT_COMMAND; m_iCommand = iCommand; - m_dwParam = 0; + m_dwParam = 0; } + public override string GetDesc() + { + CECStringTab pDescTab = EC_Game.GetItemDesc(); + string szDesc = (""); + switch ((CommandID)m_iCommand) + { + case CMD_SITDOWN: szDesc = pDescTab.GetWideString((int)CMDDESC_SITDOWN); break; + case CMD_WALKRUN: szDesc = pDescTab.GetWideString((int)CMDDESC_WALKRUN); break; + case CMD_NORMALATTACK: szDesc = pDescTab.GetWideString((int)CMDDESC_NORMALATTACK); break; + case CMD_FINDTARGET: szDesc = pDescTab.GetWideString((int)CMDDESC_FINDTARGET); break; + case CMD_ASSISTATTACK: szDesc = pDescTab.GetWideString((int)CMDDESC_ASSISTATTACK); break; + case CMD_INVITETOTEAM: szDesc = pDescTab.GetWideString((int)CMDDESC_INVITETOTEAM); break; + case CMD_LEAVETEAM: szDesc = pDescTab.GetWideString((int)CMDDESC_LEAVETEAM); break; + case CMD_KICKTEAMMEM: szDesc = pDescTab.GetWideString((int)CMDDESC_KICKTEAMMEM); break; + case CMD_FINDTEAM: szDesc = pDescTab.GetWideString((int)CMDDESC_FINDTEAM); break; + case CMD_STARTTRADE: szDesc = pDescTab.GetWideString((int)CMDDESC_STARTTRADE); break; + case CMD_SELLBOOTH: szDesc = pDescTab.GetWideString((int)CMDDESC_SELLBOOTH); break; + case CMD_BUYBOOTH: szDesc = pDescTab.GetWideString((int)CMDDESC_BUYBOOTH); break; + case CMD_INVITETOFACTION: szDesc = pDescTab.GetWideString((int)CMDDESC_INVITETOFACTION); break; + case CMD_FLY: szDesc = pDescTab.GetWideString((int)CMDDESC_FLY); break; + case CMD_PICKUP: szDesc = pDescTab.GetWideString((int)CMDDESC_PICKUP); break; + case CMD_GATHER: szDesc = pDescTab.GetWideString((int)CMDDESC_GATHER); break; + case CMD_RUSHFLY: szDesc = pDescTab.GetWideString((int)CMDDESC_RUSHFLY); break; + case CMD_BINDBUDDY: szDesc = pDescTab.GetWideString((int)CMDDESC_BINDBUDDY); break; + + case CMD_PLAYPOSE: + { + switch ((RoleExpression)m_dwParam) + { + case ROLEEXP_WAVE: szDesc = pDescTab.GetWideString((int)FACEDESC_WAVEHAND); break; + case ROLEEXP_NOD: szDesc = pDescTab.GetWideString((int)FACEDESC_NOD); break; + case ROLEEXP_SHAKEHEAD: szDesc = pDescTab.GetWideString((int)FACEDESC_SHADEHEAD); break; + case ROLEEXP_SHRUG: szDesc = pDescTab.GetWideString((int)FACEDESC_SHRUG); break; + case ROLEEXP_LAUGH: szDesc = pDescTab.GetWideString((int)FACEDESC_LAUGH); break; + case ROLEEXP_ANGRY: szDesc = pDescTab.GetWideString((int)FACEDESC_ANGRY); break; + case ROLEEXP_STUN: szDesc = pDescTab.GetWideString((int)FACEDESC_FAINT); break; + case ROLEEXP_DEPRESSED: szDesc = pDescTab.GetWideString((int)FACEDESC_SAD); break; + case ROLEEXP_KISSHAND: szDesc = pDescTab.GetWideString((int)FACEDESC_KISSHAND); break; + case ROLEEXP_SHY: szDesc = pDescTab.GetWideString((int)FACEDESC_SHY); break; + case ROLEEXP_SALUTE: szDesc = pDescTab.GetWideString((int)FACEDESC_SALUTE); break; + case ROLEEXP_SITDOWN: szDesc = pDescTab.GetWideString((int)FACEDESC_SITDOWN); break; + case ROLEEXP_ASSAULT: szDesc = pDescTab.GetWideString((int)FACEDESC_CHARGE); break; + case ROLEEXP_THINK: szDesc = pDescTab.GetWideString((int)FACEDESC_THINK); break; + case ROLEEXP_DEFIANCE: szDesc = pDescTab.GetWideString((int)FACEDESC_CHALLENGE); break; + case ROLEEXP_VICTORY: szDesc = pDescTab.GetWideString((int)FACEDESC_WIN); break; + case ROLEEXP_GAPE: szDesc = pDescTab.GetWideString((int)FACEDESC_GAPE); break; + case ROLEEXP_KISS: szDesc = pDescTab.GetWideString((int)FACEDESC_KISS); break; + case ROLEEXP_FIGHT: szDesc = pDescTab.GetWideString((int)FACEDESC_FIGHT); break; + case ROLEEXP_ATTACK1: szDesc = pDescTab.GetWideString((int)FACEDESC_ATTACK1); break; + case ROLEEXP_ATTACK2: szDesc = pDescTab.GetWideString((int)FACEDESC_ATTACK2); break; + case ROLEEXP_ATTACK3: szDesc = pDescTab.GetWideString((int)FACEDESC_ATTACK3); break; + case ROLEEXP_ATTACK4: szDesc = pDescTab.GetWideString((int)FACEDESC_ATTACK4); break; + case ROLEEXP_DEFENCE: szDesc = pDescTab.GetWideString((int)FACEDESC_DEFENCE); break; + case ROLEEXP_FALL: szDesc = pDescTab.GetWideString((int)FACEDESC_FALL); break; + case ROLEEXP_FALLONGROUND: szDesc = pDescTab.GetWideString((int)FACEDESC_FALLONGROUND); break; + case ROLEEXP_LOOKAROUND: szDesc = pDescTab.GetWideString((int)FACEDESC_LOOKAROUND); break; + case ROLEEXP_DANCE: szDesc = pDescTab.GetWideString((int)FACEDESC_DANCE); break; + case ROLEEXP_FASHIONWEAPON: szDesc = pDescTab.GetWideString((int)FACEDESC_FASHIONWEAPON); break; + default: + break; + } + + break; + } + default: + return (""); + } + + return szDesc; + } public CECSCCommand(CECSCCommand src) { m_iCommand = src.m_iCommand; - m_dwParam = src.m_dwParam; + m_dwParam = src.m_dwParam; } - public const int CMD_PLAYPOSE = 1; // Example constant - // public override ShortcutType GetType() => ShortcutType.SCT_COMMAND; public override CECShortcut Clone() => new CECSCCommand(this); public int GetCommandID() => 0; public int GetParam() => 0; - + // Set / Get command parameter public void SetParam(uint dwParam) { m_dwParam = dwParam; } - + // Execute shortcut public override bool Execute() { @@ -864,44 +946,112 @@ namespace BrewMonster // // if (bForbidCmd) // { - // g_pGame->GetGameRun()->AddFixedMessage(FIXMSG_CMD_INCOOLTIME); + // g_pGame.GetGameRun().AddFixedMessage(FIXMSG_CMD_INCOOLTIME); // return false; // } // } switch (m_iCommand) { - // case CMD_SITDOWN: pHost->CmdSitDown(!pHost->IsSitting()); break; - // case CMD_WALKRUN: pHost->CmdWalkRun(!pHost->GetWalkRunFlag()); break; - // case CMD_NORMALATTACK: pHost->CmdNormalAttack(); break; - // case CMD_FINDTARGET: pHost->CmdFindTarget(); break; - // case CMD_ASSISTATTACK: pHost->CmdAssistAttack(); break; - // case CMD_INVITETOTEAM: pHost->CmdInviteToTeam(); break; - // case CMD_LEAVETEAM: pHost->CmdLeaveTeam(); break; - // case CMD_KICKTEAMMEM: pHost->CmdKickTeamMember(); break; - // case CMD_FINDTEAM: pHost->CmdFindTeam(); break; - // case CMD_STARTTRADE: pHost->CmdStartTrade(); break; - // case CMD_SELLBOOTH: pHost->CmdSellBooth(); break; - // case CMD_BUYBOOTH: pHost->CmdBuyBooth(); break; + // case CMD_SITDOWN: pHost.CmdSitDown(!pHost.IsSitting()); break; + // case CMD_WALKRUN: pHost.CmdWalkRun(!pHost.GetWalkRunFlag()); break; + // case CMD_NORMALATTACK: pHost.CmdNormalAttack(); break; + // case CMD_FINDTARGET: pHost.CmdFindTarget(); break; + // case CMD_ASSISTATTACK: pHost.CmdAssistAttack(); break; + // case CMD_INVITETOTEAM: pHost.CmdInviteToTeam(); break; + // case CMD_LEAVETEAM: pHost.CmdLeaveTeam(); break; + // case CMD_KICKTEAMMEM: pHost.CmdKickTeamMember(); break; + // case CMD_FINDTEAM: pHost.CmdFindTeam(); break; + // case CMD_STARTTRADE: pHost.CmdStartTrade(); break; + // case CMD_SELLBOOTH: pHost.CmdSellBooth(); break; + // case CMD_BUYBOOTH: pHost.CmdBuyBooth(); break; case (int)CommandID.CMD_PLAYPOSE: pHost.CmdStartPose((int)m_dwParam); break; - // case CMD_INVITETOFACTION: pHost->CmdInviteToFaction(); break; + // case CMD_INVITETOFACTION: pHost.CmdInviteToFaction(); break; // case CMD_FLY: // { // // Èç¹ûÆï³ËÒª·ÉÐУ¬ÔòÕâЩ action switcher£¬·ñÔò CmdFly - // if (!pHost->GetActionSwitcher() || !pHost->GetActionSwitcher()->OnRideToFlyAction()) - // pHost->CmdFly(); + // if (!pHost.GetActionSwitcher() || !pHost.GetActionSwitcher().OnRideToFlyAction()) + // pHost.CmdFly(); // break; // } - // case CMD_PICKUP: pHost->CmdPickup(); break; - // case CMD_GATHER: pHost->CmdGather(); break; - // case CMD_RUSHFLY: pHost->CmdRushFly(); break; - // case CMD_BINDBUDDY: pHost->CmdBindBuddy(pHost->GetSelectedTarget()); break; + // case CMD_PICKUP: pHost.CmdPickup(); break; + // case CMD_GATHER: pHost.CmdGather(); break; + // case CMD_RUSHFLY: pHost.CmdRushFly(); break; + // case CMD_BINDBUDDY: pHost.CmdBindBuddy(pHost.GetSelectedTarget()); break; default: return false; } return true; } - + public override string GetIconFile() + { + string szIconFile = ""; + switch ((CommandID)m_iCommand) + { + case CommandID.CMD_SITDOWN: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_SITDOWN); break; + case CommandID.CMD_WALKRUN: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_WALKRUN); break; + case CommandID.CMD_NORMALATTACK: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_NORMALATTACK); break; + case CommandID.CMD_FINDTARGET: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_FINDTARGET); break; + case CommandID.CMD_ASSISTATTACK: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_ASSISTATTACK); break; + case CommandID.CMD_INVITETOTEAM: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_INVITETOTEAM); break; + case CommandID.CMD_LEAVETEAM: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_LEAVETEAM); break; + case CommandID.CMD_KICKTEAMMEM: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_KICKTEAMMEM); break; + case CommandID.CMD_FINDTEAM: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_FINDTEAM); break; + case CommandID.CMD_STARTTRADE: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_STARTTRADE); break; + case CommandID.CMD_SELLBOOTH: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_SELLBOOTH); break; + case CommandID.CMD_BUYBOOTH: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_BUYBOOTH); break; + case CommandID.CMD_INVITETOFACTION: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_INVITETOFACTION); break; + case CommandID.CMD_FLY: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_FLY); break; + case CommandID.CMD_PICKUP: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_PICKUP); break; + case CommandID.CMD_GATHER: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_GATHER); break; + case CommandID.CMD_RUSHFLY: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_RUSHFLY); break; + case CommandID.CMD_BINDBUDDY: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_BINDBUDDY); break; + + case CommandID.CMD_PLAYPOSE: + { + switch ((RoleExpression)m_dwParam) + { + case RoleExpression.ROLEEXP_WAVE: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_WAVE); break; + case RoleExpression.ROLEEXP_NOD: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_NOD); break; + case RoleExpression.ROLEEXP_SHAKEHEAD: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_SHAKEHEAD); break; + case RoleExpression.ROLEEXP_SHRUG: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_SHRUG); break; + case RoleExpression.ROLEEXP_LAUGH: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_LAUGH); break; + case RoleExpression.ROLEEXP_ANGRY: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_ANGRY); break; + case RoleExpression.ROLEEXP_STUN: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_STUN); break; + case RoleExpression.ROLEEXP_DEPRESSED: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_DEPRESSED); break; + case RoleExpression.ROLEEXP_KISSHAND: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_KISSHAND); break; + case RoleExpression.ROLEEXP_SHY: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_SHY); break; + case RoleExpression.ROLEEXP_SALUTE: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_SALUTE); break; + case RoleExpression.ROLEEXP_SITDOWN: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_SITDOWN); break; + case RoleExpression.ROLEEXP_ASSAULT: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_ASSAULT); break; + case RoleExpression.ROLEEXP_THINK: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_THINK); break; + case RoleExpression.ROLEEXP_DEFIANCE: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_DEFIANCE); break; + case RoleExpression.ROLEEXP_VICTORY: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_VICTORY); break; + case RoleExpression.ROLEEXP_GAPE: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_GAPE); break; + case RoleExpression.ROLEEXP_KISS: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_KISS); break; + case RoleExpression.ROLEEXP_FIGHT: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_FIGHT); break; + case RoleExpression.ROLEEXP_ATTACK1: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_ATTACK1); break; + case RoleExpression.ROLEEXP_ATTACK2: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_ATTACK2); break; + case RoleExpression.ROLEEXP_ATTACK3: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_ATTACK3); break; + case RoleExpression.ROLEEXP_ATTACK4: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_ATTACK4); break; + case RoleExpression.ROLEEXP_DEFENCE: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_DEFENCE); break; + case RoleExpression.ROLEEXP_FALL: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_FALL); break; + case RoleExpression.ROLEEXP_FALLONGROUND: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_FALLONGROUND); break; + case RoleExpression.ROLEEXP_LOOKAROUND: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_LOOKAROUND); break; + case RoleExpression.ROLEEXP_DANCE: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_DANCE); break; + case RoleExpression.ROLEEXP_FASHIONWEAPON: szIconFile = res_IconFile((int)IconResourceType.RES_ICON_CMD_EXP_FASHIONWEAPON); break; + default: + break; + } + + break; + } + default: + return ""; + } + + return szIconFile; + } // Get item cool time int GetCoolTime(ref int piMax/* NULL */) { @@ -921,15 +1071,15 @@ namespace BrewMonster break; case CommandID.CMD_BINDBUDDY: - { - // CECCounter& cnt = pHost->GetBindCmdCoolCnt(); - // iTime = cnt.GetPeriod() - cnt.GetCounter(); - // - // if (piMax) - // *piMax = cnt.GetPeriod(); + { + // CECCounter& cnt = pHost.GetBindCmdCoolCnt(); + // iTime = cnt.GetPeriod() - cnt.GetCounter(); + // + // if (piMax) + // *piMax = cnt.GetPeriod(); - break; - } + break; + } default: // if (piMax) *piMax = 0; @@ -940,37 +1090,37 @@ namespace BrewMonster } } - /* public class CECSCSkill : CECShortcut - { - private CECSkill m_pSkill; - public override ShortcutType GetType() => ShortcutType.SCT_SKILL; - public override CECShortcut Clone() => null; - public bool Init(CECSkill pSkill) { m_pSkill = pSkill; return true; } - public CECSkill GetSkill() => m_pSkill; - public void SetSkill(CECSkill pSkill) { m_pSkill = pSkill; } - } + /* public class CECSCSkill : CECShortcut + { + private CECSkill m_pSkill; + public override ShortcutType GetType() => ShortcutType.SCT_SKILL; + public override CECShortcut Clone() => null; + public bool Init(CECSkill pSkill) { m_pSkill = pSkill; return true; } + public CECSkill GetSkill() => m_pSkill; + public void SetSkill(CECSkill pSkill) { m_pSkill = pSkill; } + } - public class CECSCItem : CECShortcut - { - private int m_iInventory; - private int m_iIvtrSlot; - private int m_iItemTID; - private bool m_bAutoFind; + public class CECSCItem : CECShortcut + { + private int m_iInventory; + private int m_iIvtrSlot; + private int m_iItemTID; + private bool m_bAutoFind; - public override ShortcutType GetType() => ShortcutType.SCT_ITEM; - public override CECShortcut Clone() => null; - public bool Init(int iIvtr, int iSlot, CECIvtrItem pItem) - { - m_iInventory = iIvtr; - m_iIvtrSlot = iSlot; - return true; - } - public int GetInventory() => m_iInventory; - public int GetIvtrSlot() => m_iIvtrSlot; - public int GetItemTID() => m_iItemTID; - public bool GetAutoFindFlag() => m_bAutoFind; - public void MoveItem(int iIvtr, int iSlot) { m_iInventory = iIvtr; m_iIvtrSlot = iSlot; } - }*/ + public override ShortcutType GetType() => ShortcutType.SCT_ITEM; + public override CECShortcut Clone() => null; + public bool Init(int iIvtr, int iSlot, CECIvtrItem pItem) + { + m_iInventory = iIvtr; + m_iIvtrSlot = iSlot; + return true; + } + public int GetInventory() => m_iInventory; + public int GetIvtrSlot() => m_iIvtrSlot; + public int GetItemTID() => m_iItemTID; + public bool GetAutoFindFlag() => m_bAutoFind; + public void MoveItem(int iIvtr, int iSlot) { m_iInventory = iIvtr; m_iIvtrSlot = iSlot; } + }*/ /* public class CECSCSkillGrp : CECShortcut { diff --git a/Assets/PerfectWorld/Scripts/UI/Action.meta b/Assets/PerfectWorld/Scripts/UI/Action.meta new file mode 100644 index 0000000000..e656994f37 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Action.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11093b8e0b61f8e46a8847e31fe74326 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs b/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs new file mode 100644 index 0000000000..1120776060 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs @@ -0,0 +1,72 @@ +using BrewMonster.Assets.PerfectWorld.Scripts.UI.GamePlay; +using BrewMonster.UI; +using System; +using System.Collections.Generic; +using TMPro; +using UnityEngine; +using UnityEngine.UI; +using static UnityEditor.AddressableAssets.Build.Layout.BuildLayout; + +namespace BrewMonster +{ + public class CDlgSkillSubAction : MonoBehaviour + { + [SerializeField] List m_aActionInfo = new List(); + + private void OnEnable() + { + OnShowDialog(); + } + public void OnShowDialog() + { + AUIImagePicture pImage; + TextMeshProUGUI pLabel; + CECShortcut pSCThis; + string strFile = ""; + var gameUIMan = CECUIManager.Instance.GetInGameUIMan(); + + CECGameRun pGameRun = CECGameRun.Instance; + int[] objCount = { 9, 3, 3, 30 }; + CECShortcutSet[] a_pSC = + { + pGameRun.GetGenCmdShortcuts(), + pGameRun.GetTeamCmdShortcuts(), + pGameRun.GetTradeCmdShortcuts(), + pGameRun.GetPoseCmdShortcuts() + }; + int count = 0; + for (int i = 0; i < a_pSC.Length; i++) + { + for (int j = 0; j < objCount[i]; j++) + { + pImage = m_aActionInfo[count].image; + pLabel = m_aActionInfo[count].pLabel; + + if (!pImage) break; + + if (j < a_pSC[i].GetShortcutNum()) + { + pSCThis = a_pSC[i].GetShortcut(j); + pImage.SetDataPtr(pSCThis, "ptr_CECShortcut"); + + strFile = pSCThis.GetIconFile(); + gameUIMan.SetCover(pImage, strFile, EC_GAMEUI_ICONS.ICONS_ACTION); + + pLabel.SetText(pSCThis.GetDesc()); + } + else + { + /* pImage->Show(false); + pLabel->Show(false);*/ + } + count++; + } + } + } + [Serializable] + public struct ActionInfo + { + public AUIImagePicture image; + public TextMeshProUGUI pLabel; + } +} diff --git a/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs.meta b/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs.meta new file mode 100644 index 0000000000..771166f069 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Action/CDlgSkillSubAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1eda03e6b4326e14b95d57bf324b96bb \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/UI/Emote.meta b/Assets/PerfectWorld/Scripts/UI/Emote.meta new file mode 100644 index 0000000000..243b63faf5 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Emote.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d97873e24020e642b7c6f6b79ea8c2c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PerfectWorld/Scripts/UI/Emote/CDlgTaskAction.cs b/Assets/PerfectWorld/Scripts/UI/Emote/CDlgTaskAction.cs new file mode 100644 index 0000000000..6d27c4b246 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Emote/CDlgTaskAction.cs @@ -0,0 +1,15 @@ +using BrewMonster.UI; +using UnityEngine; + +namespace BrewMonster +{ + public class CDlgTaskAction : AUIDialog + { + public void OnShowDialog() + { + uint param = GetData(); + + + } + } +} diff --git a/Assets/PerfectWorld/Scripts/UI/Emote/CDlgTaskAction.cs.meta b/Assets/PerfectWorld/Scripts/UI/Emote/CDlgTaskAction.cs.meta new file mode 100644 index 0000000000..6e9112aa2f --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Emote/CDlgTaskAction.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a5f25e21a0550df41af0c2e57639635a \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/UI/GamePlay/EC_GameUIMan.cs b/Assets/PerfectWorld/Scripts/UI/GamePlay/EC_GameUIMan.cs index f8579c4dcd..779899e538 100644 --- a/Assets/PerfectWorld/Scripts/UI/GamePlay/EC_GameUIMan.cs +++ b/Assets/PerfectWorld/Scripts/UI/GamePlay/EC_GameUIMan.cs @@ -25,6 +25,7 @@ namespace BrewMonster.UI private Dictionary m_IconMap; private const string SKILL_ICONLIST_NAME = "iconlist_skill_multisprite"; + private const string ACTION_ICONLIST_NAME = "iconlist_action_multisprite"; public static bool TALKPROC_IS_TERMINAL(uint id) { @@ -165,9 +166,9 @@ namespace BrewMonster.UI m_pDlgTask = GetDialog(CECUIHelper.DlgTaskName).GetComponent(); m_pDlgTask.Show(false); - m_IconMap[(byte)EC_GAMEUI_ICONS.ICONS_SKILL] =("iconlist_skill_multisprite", Resources.LoadAll("iconlist_skill_multisprite")); + m_IconMap[(byte)EC_GAMEUI_ICONS.ICONS_SKILL] =(SKILL_ICONLIST_NAME, Resources.LoadAll(SKILL_ICONLIST_NAME)); + m_IconMap[(byte)EC_GAMEUI_ICONS.ICONS_ACTION] =(ACTION_ICONLIST_NAME, Resources.LoadAll(ACTION_ICONLIST_NAME)); } - public void SetCover(AUIImagePicture pImgPic, string nameImage, EC_GAMEUI_ICONS iCONS_SKILL) { pImgPic.SetImage(m_IconMap[(byte)iCONS_SKILL].Item2.FirstOrDefault(s => s.name == nameImage)); diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index d86883aaf3..3bf174ecb6 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -623,7 +623,6 @@ namespace BrewMonster private void OnMsgComboSkillPrepare(ECMSG Msg) { - BMLogger.LogError("OnMsgComboSkillPrepare"); cmd_combo_skill_prepare cmd = GPDataTypeHelper.FromBytes((byte[])Msg.dwParam1); uint skillID = (uint)cmd.skill_id; @@ -1015,8 +1014,6 @@ namespace BrewMonster m_pCurSkill = null; } - Debug.Log("HOST_STOP_SKILL"); - AP.AP_ActionEvent((int)AP_EVENT.AP_EVENT_STOPSKILL); if (pSkillToMatch != null) { @@ -3671,9 +3668,6 @@ namespace BrewMonster float fBorderLine = fWaterHeight - 2.0f; if (vPos.y <= fBorderLine) break; - // ·þÎñÆ÷¶Ë½«Ë®ÃæÒÔÏÂ2Ã×ÒÔÉÏ´¦ÀíΪ run_speed£¨ÓÐÎÊÌ⣩ - // µ«Î´Ê¹ÓüÓËÙ¼¼ÄÜʱ swim_speed СÓÚ run_speed£¬ - // ¿ÉÒÔÔÚË®ÃæÒÔÏÂ2Ã×ÒÔÉÏ»ñÈ¡³¬¹ý swim_speed µÄËÙ¶È£¬Òò´Ë£¬´Ë´¦È¡Á½Õß½ÏСֵΪºÏÀí×ö·¨ fSpeedSev = Math.Min(m_ExtProps.mv.run_speed, fSpeedSev); break; } @@ -3691,7 +3685,6 @@ namespace BrewMonster // Return-town skill is very special, handle it separately // 回城技能非常特殊,单独处理 - Debug.Log($"ApplySkillShortcut: Checking skill {idSkill}, ID_RETURNTOWN_SKILL={ID_RETURNTOWN_SKILL}"); if (idSkill == ID_RETURNTOWN_SKILL) { Debug.Log($"ApplySkillShortcut: Skill 167 detected, calling ReturnToTargetTown"); diff --git a/Assets/Scripts/Utilities/EC_Resource.cs b/Assets/Scripts/Utilities/EC_Resource.cs index e45e849346..636e3bf06e 100644 --- a/Assets/Scripts/Utilities/EC_Resource.cs +++ b/Assets/Scripts/Utilities/EC_Resource.cs @@ -28,6 +28,7 @@ namespace BrewMonster "程序联入/金币效果.gfx", // RES_GFX_ITEMFLASH, "程序联入/鼠标悬浮.gfx", // RES_GFX_CURSORHOVER, "程序联入/目标被选中.gfx", // RES_GFX_SELECTED, + "程序联入/目标被选中.gfx", // RES_GFX_SELECTED, "程序联入/海底飘尘.gfx", // RES_GFX_FLOATING_DUST, "程序联入/人物游动水圈.gfx", // RES_GFX_WATER_WAVE_STILL, "程序联入/人物游动水波.gfx", // RES_GFX_WATER_WAVE_MOVE, @@ -51,7 +52,73 @@ namespace BrewMonster "人物/通用/其它/境界提升.gfx", "策划联入/状态效果/斗气%d级.gfx", }; - + public static string res_IconFile(int n) + { + return l_aIconFiles[n]; + } + + public static readonly string[] l_aIconFiles = + { + "打坐.dds", + "走跑转换.dds", + "普通攻击.dds", + "寻找目标.dds", + "协助攻击.dds", + + "邀请加入.dds", + "脱离队伍.dds", + "踢出队伍.dds", + "寻找队伍.dds", + "交易命令.dds", + + "摆摊卖.dds", + "摆摊买.dds", + "邀请加入.dds", + "飞行.dds", + "招手.dds", // RES_ICON_CMD_EXP_WAVE, + + "点头.dds", // RES_ICON_CMD_EXP_NOD, + "摇头.dds", // RES_ICON_CMD_EXP_SHAKEHEAD, + "耸肩膀.dds", // RES_ICON_CMD_EXP_SHRUG, + "大笑.dds", // RES_ICON_CMD_EXP_LAUGH, + "生气.dds", // RES_ICON_CMD_EXP_ANGRY, + + "晕倒.dds", // RES_ICON_CMD_EXP_STUN, + "沮丧.dds", // RES_ICON_CMD_EXP_DEPRESSED, + "飞吻.dds", // RES_ICON_CMD_EXP_KISSHAND, + "害羞.dds", // RES_ICON_CMD_EXP_SHY, + "抱拳.dds", // RES_ICON_CMD_EXP_SALUTE, + + "坐下.dds", // RES_ICON_CMD_EXP_SITDOWN, + "冲锋.dds", // RES_ICON_CMD_EXP_ASSAULT, + "思考.dds", // RES_ICON_CMD_EXP_THINK, + "挑衅.dds", // RES_ICON_CMD_EXP_DEFIANCE, + "胜利.dds", // RES_ICON_CMD_EXP_VICTORY, + + "伸懒腰.dds", // RES_ICON_CMD_EXP_GAPE + "亲吻.dds", // RES_ICON_CMD_EXP_KISS + "战斗.dds", // RES_ICON_CMD_EXP_FIGHT, + "攻击1.dds", // RES_ICON_CMD_EXP_ATTACK1, + "攻击2.dds", // RES_ICON_CMD_EXP_ATTACK2, + + "攻击3.dds", // RES_ICON_CMD_EXP_ATTACK3, + "攻击4.dds", // RES_ICON_CMD_EXP_ATTACK4, + "防御.dds", // RES_ICON_CMD_EXP_DEFENCE, + "摔倒.dds", // RES_ICON_CMD_EXP_FALL, + "倒地.dds", // RES_ICON_CMD_EXP_FALLONGROUND, + + "张望.dds", // RES_ICON_CMD_EXP_LOOKAROUND, + "舞蹈1.dds", // RES_ICON_CMD_EXP_DANCE, + "舞蹈2.dds", // RES_ICON_CMD_EXP_FASHIONWEAPON + "拾取.dds", // RES_ICON_CMD_PICKUP + "挖掘.dds", // RES_ICON_CMD_GATHER + "加速飞行.dds", // RES_ICON_CMD_RUSHFLY + + "相依相偎的动作.dds", // RES_ICON_CMD_BINDBUDDY + "亲亲密密的动作.dds", // RES_ICON_CMD_TWOKISS + "跳跃的动作1.dds", // RES_ICON_CMD_JUMPTRICK, + "跳跃的动作2.dds", // RES_ICON_CMD_RUNTRICK, +}; public static string res_GFXFile(int n) { if (n < 0 || n >= l_aGFXFiles.Length) @@ -78,7 +145,7 @@ namespace BrewMonster NUM_RES_CURSOR, } -// GFX resource + // GFX resource enum GfxResourceType { RES_GFX_LEVELUP = 0, @@ -113,11 +180,11 @@ namespace BrewMonster NUM_RES_GFX, }; -// Sound resource + // Sound resource -// Texture resource + // Texture resource -// Shader resource + // Shader resource enum ShaderResourceType { RES_SHD_HAIR = 0, @@ -134,8 +201,7 @@ namespace BrewMonster NUM_RES_SHADER, // 10 }; - -// Icon resource + // Icon resource enum IconResourceType { RES_ICON_CMD_SITDOWN = 0, @@ -201,7 +267,7 @@ namespace BrewMonster NUM_RES_ICON, }; -// Model resource + // Model resource enum ModelResourceType { RES_MOD_GOLD = 0, @@ -266,7 +332,7 @@ namespace BrewMonster NUM_RES_MODEL, }; -// model file for change shape 2 + // model file for change shape 2 enum ResourceModelType { RES_MOD_CHANGESAHPE_NULL, // 0 @@ -290,7 +356,7 @@ namespace BrewMonster RES_MOD_FORCHANGESAHPE_NUM, }; -// Some unicode string resources + // Some unicode string resources enum UnicodeStringResourceType { RES_FONT_TITLE = 0,