Add player currency
This commit is contained in:
@@ -48,6 +48,14 @@ namespace PerfectWorld.Scripts.Managers
|
||||
[SerializeField] private bool autoRefresh = true;
|
||||
[SerializeField] private float refreshInterval = 1.0f;
|
||||
[SerializeField] private bool showEquipmentDetails = true;
|
||||
|
||||
[Header("Money UI (assign any text fields to mirror money amount)")]
|
||||
[SerializeField] private List<UnityEngine.UI.Text> moneyTextsLegacy = new List<UnityEngine.UI.Text>();
|
||||
[SerializeField] private List<TMPro.TextMeshProUGUI> moneyTextsTMP = new List<TMPro.TextMeshProUGUI>();
|
||||
|
||||
[Header("Cash UI (assign any text fields to mirror cash amount)")]
|
||||
[SerializeField] private List<UnityEngine.UI.Text> cashTextsLegacy = new List<UnityEngine.UI.Text>();
|
||||
[SerializeField] private List<TMPro.TextMeshProUGUI> cashTextsTMP = new List<TMPro.TextMeshProUGUI>();
|
||||
|
||||
private float lastRefreshTime;
|
||||
|
||||
@@ -200,6 +208,56 @@ namespace PerfectWorld.Scripts.Managers
|
||||
view.RenderPackage(fashionPackButtons, fshItems, PKG_FASHION, OnInventoryButtonClicked, GetDisplayTextForItem);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update all configured money text components with the current amount.
|
||||
/// Call this when GET_OWN_MONEY arrives.
|
||||
/// </summary>
|
||||
public void UpdateMoney(ulong amount, ulong maxAmount)
|
||||
{
|
||||
string text = amount.ToString();
|
||||
if (moneyTextsLegacy != null)
|
||||
{
|
||||
for (int i = 0; i < moneyTextsLegacy.Count; i++)
|
||||
{
|
||||
var t = moneyTextsLegacy[i];
|
||||
if (t != null) t.text = text;
|
||||
}
|
||||
}
|
||||
if (moneyTextsTMP != null)
|
||||
{
|
||||
for (int i = 0; i < moneyTextsTMP.Count; i++)
|
||||
{
|
||||
var t = moneyTextsTMP[i];
|
||||
if (t != null) t.text = text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update all configured cash text components with the current boutique cash amount.
|
||||
/// Call this when PLAYER_CASH arrives.
|
||||
/// </summary>
|
||||
public void UpdateCash(int amount)
|
||||
{
|
||||
string text = amount.ToString();
|
||||
if (cashTextsLegacy != null)
|
||||
{
|
||||
for (int i = 0; i < cashTextsLegacy.Count; i++)
|
||||
{
|
||||
var t = cashTextsLegacy[i];
|
||||
if (t != null) t.text = text;
|
||||
}
|
||||
}
|
||||
if (cashTextsTMP != null)
|
||||
{
|
||||
for (int i = 0; i < cashTextsTMP.Count; i++)
|
||||
{
|
||||
var t = cashTextsTMP[i];
|
||||
if (t != null) t.text = text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnInventoryButtonClicked(byte package, int slot)
|
||||
{
|
||||
UnityGameSession.RequestCheckSecurityPassWd("");
|
||||
|
||||
@@ -326,6 +326,11 @@ namespace CSNetwork.C2SCommand
|
||||
{
|
||||
public byte byPackage;
|
||||
}
|
||||
|
||||
public struct CMD_PlayerCash
|
||||
{
|
||||
|
||||
}
|
||||
// NPC trade item structure
|
||||
public struct CMD_NPCTradeItem
|
||||
{
|
||||
|
||||
@@ -313,6 +313,10 @@ namespace CSNetwork.C2SCommand
|
||||
return octets;
|
||||
}
|
||||
|
||||
public static Octets CreateQueryPlayerCash()
|
||||
{
|
||||
return SerializeCommand(CommandID.QUERY_CASH_INFO);
|
||||
}
|
||||
public static Octets CreateEquipItem(byte iIvtrIdx, byte iEquipIdx)
|
||||
{
|
||||
var cmd = new CMD_EquipItem
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Buffers.Binary;
|
||||
using System.Collections.Generic;
|
||||
using System.Numerics;
|
||||
@@ -903,6 +903,18 @@ namespace CSNetwork.GPDataType
|
||||
public byte[] content;
|
||||
};
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_get_own_money
|
||||
{
|
||||
public uint amount;
|
||||
public uint max_amount;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct player_cash
|
||||
{
|
||||
public int cash_amount;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
public struct cmd_unfreeze_ivtr_slot
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Text;
|
||||
using System.Text;
|
||||
using System;
|
||||
using CSNetwork.Protocols;
|
||||
using CSNetwork.Protocols.RPCData;
|
||||
@@ -201,6 +201,12 @@ namespace CSNetwork
|
||||
SendProtocol(gamedatasendRequest, callback);
|
||||
}
|
||||
|
||||
public void RequestQueryPlayerCash()
|
||||
{
|
||||
gamedatasend gamedatasendRequest = new gamedatasend();
|
||||
gamedatasendRequest.Data = C2SCommandFactory.CreateQueryPlayerCash();
|
||||
SendProtocol(gamedatasendRequest);
|
||||
}
|
||||
public void RequestCheckSecurityPassWd(string password)
|
||||
{
|
||||
gamedatasend gamedatasendRequest = new gamedatasend();
|
||||
@@ -376,7 +382,7 @@ namespace CSNetwork
|
||||
break;
|
||||
}
|
||||
case CommandID.OWN_IVTR_DATA:
|
||||
case CommandID.OWN_IVTR_DETAIL_DATA:
|
||||
case CommandID.OWN_IVTR_DETAIL_DATA:
|
||||
case CommandID.GET_OWN_MONEY:
|
||||
case CommandID.CHANGE_IVTR_SIZE:
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, iHostID);
|
||||
@@ -391,6 +397,11 @@ namespace CSNetwork
|
||||
case CommandID.PLAYER_EQUIP_TRASHBOX_ITEM:
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ITEMOPERATION, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
|
||||
break;
|
||||
case CommandID.PLAYER_CASH:
|
||||
{
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, iHostID);
|
||||
break;
|
||||
}
|
||||
case CommandID.MATTER_INFO_LIST:
|
||||
EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERINFO, (int)MANAGER_INDEX.MAN_MATTER, 0, pDataBuf, pCmdHeader);
|
||||
break;
|
||||
|
||||
@@ -141,6 +141,10 @@ namespace BrewMonster.Network
|
||||
{
|
||||
Instance._gameSession.RequestInventoryAsync(byPackage, callback);
|
||||
}
|
||||
public static void RequesrQueryPlayerCash()
|
||||
{
|
||||
Instance._gameSession.RequestQueryPlayerCash();
|
||||
}
|
||||
public static void RequestDropEquipItem(byte index)
|
||||
{
|
||||
Instance._gameSession.RequestDropEquipItem(index);
|
||||
|
||||
@@ -150,6 +150,7 @@ namespace BrewMonster.UI
|
||||
// Request all known packages: 0=Inventory,1=Equipment,2=Task
|
||||
UnityGameSession.RequestAllInventoriesAsync(() => { /*BMLogger.Log("Sent Inventory Detail Requests (all packs)");*/ }, 0, 1, 2);
|
||||
UnityGameSession.RequestCheckSecurityPassWd("");
|
||||
UnityGameSession.RequesrQueryPlayerCash();
|
||||
await Task.Delay(2000);
|
||||
UnityGameSession.c2s_CmdGetAllData(true, true, false);
|
||||
EC_Game.Init();
|
||||
|
||||
@@ -9106,8 +9106,8 @@ MonoBehaviour:
|
||||
m_Calls: []
|
||||
m_text: 50,000
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
|
||||
m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
|
||||
m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
@@ -10179,6 +10179,7 @@ MonoBehaviour:
|
||||
- {fileID: 486249631205428665}
|
||||
fashionPackButtons: []
|
||||
detailPanelRoot: {fileID: 2900449705256812174}
|
||||
detailPanelOffset: {x: 20, y: 0}
|
||||
hideDetailOnStart: 1
|
||||
nameText:
|
||||
legacy: {fileID: 0}
|
||||
@@ -10233,6 +10234,11 @@ MonoBehaviour:
|
||||
autoRefresh: 1
|
||||
refreshInterval: 1
|
||||
showEquipmentDetails: 1
|
||||
moneyTextsLegacy: []
|
||||
moneyTextsTMP:
|
||||
- {fileID: 776624419558043962}
|
||||
cashTextsLegacy: []
|
||||
cashTextsTMP: []
|
||||
--- !u!114 &2043904448860146935
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -1098,7 +1098,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 176.675, y: -17.547}
|
||||
m_SizeDelta: {x: 0, y: 35.094}
|
||||
m_SizeDelta: {x: 8.29, y: 35.094}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &964534478285487384
|
||||
CanvasRenderer:
|
||||
@@ -1458,9 +1458,9 @@ RectTransform:
|
||||
- {fileID: 3465129417775596107}
|
||||
m_Father: {fileID: 6921900574306804872}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 253.67606, y: -34.225502}
|
||||
m_SizeDelta: {x: 166.4507, y: 61.887}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2471496789853926854
|
||||
@@ -1750,9 +1750,9 @@ RectTransform:
|
||||
- {fileID: 6607009122237547209}
|
||||
m_Father: {fileID: 6921900574306804872}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 753.02814, y: -34.225502}
|
||||
m_SizeDelta: {x: 166.4507, y: 61.887}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6604777758543866085
|
||||
@@ -3302,9 +3302,9 @@ RectTransform:
|
||||
- {fileID: 7368110207669039191}
|
||||
m_Father: {fileID: 6921900574306804872}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 420.12674, y: -34.225502}
|
||||
m_SizeDelta: {x: 166.4507, y: 61.887}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5818043599573700572
|
||||
@@ -3547,7 +3547,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 264.44, y: -17.547}
|
||||
m_SizeDelta: {x: 0, y: 35.094}
|
||||
m_SizeDelta: {x: 47.24, y: 35.094}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7360459856635850147
|
||||
CanvasRenderer:
|
||||
@@ -3846,9 +3846,9 @@ RectTransform:
|
||||
- {fileID: 1824832118339051429}
|
||||
m_Father: {fileID: 6921900574306804872}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 87.22535, y: -34.225502}
|
||||
m_SizeDelta: {x: 166.4507, y: 61.887}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5876619622367789936
|
||||
@@ -3967,9 +3967,9 @@ RectTransform:
|
||||
- {fileID: 1529712157810231189}
|
||||
m_Father: {fileID: 6921900574306804872}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 586.57745, y: -34.225502}
|
||||
m_SizeDelta: {x: 166.4507, y: 61.887}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &4405492307389281063
|
||||
|
||||
+1934
-114
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
using BrewMonster;
|
||||
using BrewMonster;
|
||||
using BrewMonster.Network;
|
||||
using CSNetwork;
|
||||
using CSNetwork.Common;
|
||||
@@ -608,20 +608,62 @@ public class CECHostPlayer : CECPlayer
|
||||
break;
|
||||
}
|
||||
case CommandID.OWN_IVTR_DETAIL_DATA:
|
||||
{
|
||||
PerfectWorld.Scripts.Managers.EC_Inventory.LogInventoryPacket("OWN_IVTR_DETAIL_DATA", data, hostId);
|
||||
// Parse and store
|
||||
if (data != null && data.Length >= 6)
|
||||
{
|
||||
PerfectWorld.Scripts.Managers.EC_Inventory.LogInventoryPacket("OWN_IVTR_DETAIL_DATA", data, hostId);
|
||||
// Parse and store
|
||||
if (data != null && data.Length >= 6)
|
||||
byte byPackage = data[0];
|
||||
byte ivtrSize = data[1];
|
||||
if (PerfectWorld.Scripts.Managers.EC_IvtrItem.TryParseInventoryDetail(data, out var pkg,
|
||||
out var size, out var items))
|
||||
{
|
||||
byte byPackage = data[0];
|
||||
byte ivtrSize = data[1];
|
||||
if (PerfectWorld.Scripts.Managers.EC_IvtrItem.TryParseInventoryDetail(data, out var pkg, out var size, out var items))
|
||||
PerfectWorld.Scripts.Managers.EC_Inventory.UpdatePack(pkg, size, items);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case CommandID.GET_OWN_MONEY:
|
||||
{
|
||||
if (data != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var money = GPDataTypeHelper.FromBytes<CSNetwork.GPDataType.cmd_get_own_money>(data);
|
||||
var ui = GameObject.FindFirstObjectByType<PerfectWorld.Scripts.Managers.EC_InventoryUI>();
|
||||
if (ui != null)
|
||||
{
|
||||
PerfectWorld.Scripts.Managers.EC_Inventory.UpdatePack(pkg, size, items);
|
||||
ui.UpdateMoney(money.amount, money.max_amount);
|
||||
}
|
||||
}
|
||||
break;
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogWarning($"[Inventory] Failed to parse GET_OWN_MONEY: {ex.Message}");
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CommandID.PLAYER_CASH:
|
||||
{
|
||||
if (data != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var cash = GPDataTypeHelper.FromBytes<CSNetwork.GPDataType.player_cash>(data);
|
||||
var ui = GameObject.FindFirstObjectByType<PerfectWorld.Scripts.Managers.EC_InventoryUI>();
|
||||
if (ui != null)
|
||||
{
|
||||
ui.UpdateCash(cash.cash_amount);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogWarning($"[Inventory] Failed to parse PLAYER_CASH: {ex.Message}");
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user