Merge pull request 'Update loigic dlg pet list, dlg pet hatch and dlg pet restore.' (#180) from feature/hp_pet into develop

Reviewed-on: https://git.pthub.vn/Unity/perfect-world-unity/pulls/180
This commit is contained in:
tungdv
2026-02-27 10:48:36 +00:00
10 changed files with 263 additions and 4 deletions
@@ -18,7 +18,7 @@ using UnityEngine.UI;
namespace BrewMonster.Scripts.Managers
{
public class EC_InventoryUI : MonoBehaviour, IRefreshLayout
public class EC_InventoryUI : AUIDialog, IRefreshLayout
{
[Header("Pack Buttons (assign in Inspector)")]
@@ -1625,6 +1625,12 @@ namespace CSNetwork.S2CCommand
public int iIvtrIdx;
public int idEgg;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct CONTENTNPCSevRestorePet
{
public int iPetIdx;
};
}
// Player and NPC state
@@ -1081,5 +1081,19 @@ namespace CSNetwork.C2SCommand
};
return SerializeCommand(CommandID.SEVNPC_SERVE, cmd, content);
}
public static Octets CreateNPCSevRestorePetCmd(int i_PetIdx)
{
var cmd = new cmd_sevnpc_serve
{
service_type = NPC_service_type.GP_NPCSEV_RESTOREPET,
len = (uint)Marshal.SizeOf<CONTENTNPCSevRestorePet>()
};
CONTENTNPCSevRestorePet content = new CONTENTNPCSevRestorePet()
{
iPetIdx = i_PetIdx,
};
return SerializeCommand(CommandID.SEVNPC_SERVE, cmd, content);
}
}
}
@@ -2021,6 +2021,12 @@ namespace CSNetwork
gamedatasend.Data = C2SCommandFactory.CreateNPCSevHatchPetCmd(iIvtrIdx, idEgg);
SendProtocol(gamedatasend);
}
public void c2s_SendCmdNPCSevRestorePet(int iPetIdx)
{
gamedatasend gamedatasend = new gamedatasend();
gamedatasend.Data = C2SCommandFactory.CreateNPCSevRestorePetCmd(iPetIdx);
SendProtocol(gamedatasend);
}
// Cross-server get in (C++: c2s_CmdNPCSevCrossServerGetIn) — TODO: implement C2S packet when needed
public void c2s_CmdNPCSevCrossServerGetIn()
@@ -783,6 +783,10 @@ namespace BrewMonster.Network
{
Instance._gameSession.c2s_SendCmdNPCSevHatchPet(iIvtrIdx, idEgg);
}
public static void c2s_CmdNPCSevRestorePet(int iPetIdx)
{
Instance._gameSession.c2s_SendCmdNPCSevRestorePet(iPetIdx);
}
}
/// <summary>
@@ -533,7 +533,7 @@ namespace BrewMonster.UI
SetDataPtr(null, "");
GetGameUIMan().EndNPCService();
Show(false);
GetGameUIMan().GetDialog("Win_Inventory").Show(false);
GetGameUIMan().GetDialog("Win_Inventory")?.Show(false);
GetHostPlayer().GetPack(Inventory_type.IVTRTYPE_PACK).UnfreezeAllItems();
}
}
@@ -27,6 +27,8 @@ namespace BrewMonster.UI
[SerializeField] private TextMeshProUGUI[] m_pTxt_Level = new TextMeshProUGUI[CDLGPETLIST_SLOT_MAX];
[SerializeField] private Button m_pBtnClose;
[SerializeField] private Sprite m_spriteDefault_Icon;
[SerializeField] private Button[] m_pBtn_Tab;
[SerializeField] private GameObject[] m_mask_off_pBtn_Tab;
int m_nPageIndex;
string strFile = "";
string strText = "";
@@ -146,7 +148,25 @@ namespace BrewMonster.UI
{
Show(false);
});
UpdateList();
for(int i = 0; i < m_pBtn_Tab.Length; i++)
{
m_pBtn_Tab[i].onClick.RemoveAllListeners();
if(i == 0)
{
m_pBtn_Tab[i].onClick.AddListener(() =>
{
OnClickBtnTab(0);
});
}
else if(i == 1)
{
m_pBtn_Tab[i].onClick.AddListener(() =>
{
OnClickBtnTab(1);
});
}
}
OnClickBtnTab(0);
}
bool IsPetDye(int nSlot)
@@ -273,5 +293,15 @@ namespace BrewMonster.UI
{
GetHostPlayer().RecallPet();
}
public void OnClickBtnTab(int index)
{
m_nPageIndex = index;
for(int i = 0; i < m_pBtn_Tab.Length; i++)
{
m_mask_off_pBtn_Tab[i].SetActive(i != m_nPageIndex);
}
UpdateList();
}
}
}
@@ -345,7 +345,13 @@ namespace BrewMonster.UI
private void OnCommandConfirm()
{
// TODO
if (m_nSlot >= 0)
{
GetHostPlayer().RestorePet(m_nSlot);
GetGameUIMan()?.EndNPCService();
Show(false);
//GetGameUIMan()->m_pDlgPetList->Show(false);
}
}
private void SetPet(int nSlot)
@@ -3218,6 +3218,81 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &1563131212404254231
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1367151585653230994}
- component: {fileID: 4002396222024976400}
- component: {fileID: 5927240598748978092}
m_Layer: 5
m_Name: MaskOff
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1367151585653230994
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1563131212404254231}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2427007445932155897}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4002396222024976400
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1563131212404254231}
m_CullTransparentMesh: 1
--- !u!114 &5927240598748978092
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1563131212404254231}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.69803923}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &1598487822700303523
GameObject:
m_ObjectHideFlags: 0
@@ -3945,6 +4020,7 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 878817954833932422}
- {fileID: 7306643221236935726}
m_Father: {fileID: 628038525523165487}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -8960,6 +9036,12 @@ MonoBehaviour:
- {fileID: 5057683854687741650}
m_pBtnClose: {fileID: 8122086289517642079}
m_spriteDefault_Icon: {fileID: 21300000, guid: 1356336560449e54a921e7243886103d, type: 3}
m_pBtn_Tab:
- {fileID: 7762720709650526177}
- {fileID: 6105035509064218572}
m_mask_off_pBtn_Tab:
- {fileID: 8218472400492161409}
- {fileID: 1563131212404254231}
--- !u!1 &4205984255684239874
GameObject:
m_ObjectHideFlags: 0
@@ -12301,6 +12383,7 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 674781935163886888}
- {fileID: 1367151585653230994}
m_Father: {fileID: 628038525523165487}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -15527,6 +15610,81 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &8218472400492161409
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7306643221236935726}
- component: {fileID: 4273877355682388422}
- component: {fileID: 5328584516814327022}
m_Layer: 5
m_Name: MaskOff
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7306643221236935726
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8218472400492161409}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2711780913503914813}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4273877355682388422
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8218472400492161409}
m_CullTransparentMesh: 1
--- !u!114 &5328584516814327022
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8218472400492161409}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.69803923}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &8232183239187098781
GameObject:
m_ObjectHideFlags: 0
+35
View File
@@ -215,5 +215,40 @@ namespace BrewMonster
return true;
}
// Restore pet
public bool RestorePet(int iPetIdx)
{
CECPetData pPet = m_pPetCorral.GetPetData(iPetIdx);
if (pPet == null || iPetIdx == m_pPetCorral.GetActivePetIndex())
return false;
CECGameRun pGameRun = EC_Game.GetGameRun();
// Check money
DATA_TYPE DataType = DATA_TYPE.DT_INVALID;
object ob_pdbe = ElementDataManProvider.GetElementDataMan().get_data_ptr((uint)pPet.GetEggID(), ID_SPACE.ID_SPACE_ESSENCE,ref DataType);
if (DataType != DATA_TYPE.DT_PET_EGG_ESSENCE || ob_pdbe == null)
return false;
PET_EGG_ESSENCE pdbe = (PET_EGG_ESSENCE)ob_pdbe;
if (GetMoneyAmount() < pdbe.money_restored)
{
pGameRun.AddFixedMessage((int)FixedMsg.FIXMSG_NEEDMONEY);
return false;
}
// Check package space
if (m_pPack.GetEmptySlotNum() == 0)
{
pGameRun.AddFixedMessage((int)FixedMsg.FIXMSG_PACKISFULL);
return false;
}
UnityGameSession.c2s_CmdNPCSevRestorePet(iPetIdx);
return true;
}
}
}