update info item for dlgInstall after the merge

This commit is contained in:
VuNgocHaiC7
2026-02-11 17:36:16 +07:00
parent 0702571c04
commit 363520be53
5 changed files with 129 additions and 15 deletions
@@ -158,19 +158,15 @@ namespace BrewMonster.Scripts.Managers
{
if (buttons == null)
{
Debug.LogWarning($"[UpdatePackageCooldowns] Buttons list is null for package {package}");
return;
}
var items = model.GetInventoryData(package);
if (items == null)
{
Debug.LogWarning($"[UpdatePackageCooldowns] Items dictionary is null for package {package}");
return;
}
Debug.Log($"[UpdatePackageCooldowns] Updating package {package} with {buttons.Count} buttons and {items.Count} items");
for (int slot = 0; slot < buttons.Count; slot++)
{
var button = buttons[slot];
@@ -1088,6 +1088,16 @@ namespace BrewMonster.Scripts.Managers
/// </summary>
public virtual bool SetItemInfo(byte[] pInfoData, int iDataLen)
{
if (pInfoData != null && iDataLen > 0)
{
this.Content = new byte[iDataLen];
Buffer.BlockCopy(pInfoData, 0, this.Content, 0, iDataLen);
}
else
{
this.Content = null;
}
m_bNeedUpdate = false;
m_bUpdating = false;
m_strDesc = string.Empty;
@@ -1305,9 +1305,17 @@ namespace CSNetwork.GPDataType
public uint count;
public ushort crc;
public ushort content_length;
public byte[] content;
//public byte[] content;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_empty_item_slot
{
public byte byPackage;
public byte bySlot;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_get_own_money
{
@@ -411,12 +411,17 @@ namespace BrewMonster
private void ClearEquipSlot()
{
if (m_FirstInvSlot >= 0)
{
ReturnItemToInventory(m_FirstInvSlot);
}
m_SelectedEquip?.Freeze(false);
m_SelectedEquip = null;
m_FirstInvSlot = -1;
m_TxtFirstName.text = "___";
ClearSlotIcon(m_SlotFirstParent);
if(m_Mode == InstallMode.Disenchase)
if (m_Mode == InstallMode.Disenchase)
{
m_install_price = -1;
m_TxtMoney.text = "0";
@@ -425,6 +430,11 @@ namespace BrewMonster
private void ClearMaterialSlot()
{
if (m_SecondInvSlot >= 0)
{
ReturnItemToInventory(m_SecondInvSlot);
}
m_SelectedMaterial?.Freeze(false);
m_SelectedMaterial = null;
m_SecondInvSlot = -1;
@@ -450,7 +460,7 @@ namespace BrewMonster
// PAUIDIALOG pMsgBox;
CECHostPlayer pHost = GetHostPlayer();
if (pHost != null || m_Mode == InstallMode.Enchase)
if (pHost != null && m_Mode == InstallMode.Enchase)
{
// if( !m_pItema->GetDataPtr("ptr_CECIvtrItem") ) return;
string message = "";
@@ -529,16 +539,18 @@ namespace BrewMonster
// pMsgBox.SetLife(3);
return;
}
//pr
UnityGameSession.c2s_CmdNPCSevEmbed(
(ushort)m_SecondInvSlot, (ushort)m_FirstInvSlot,
pIvtrB.GetTemplateID(), pIvtrA.GetTemplateID());
// ClearEquipment();
// ClearStone();
ClearEquipSlot();
ClearMaterialSlot();
pHost.GetPack(InventoryConst.IVTRTYPE_PACK).UnfreezeAllItems();
message = GetGameUIMan().GetStringFromTable(228);
CECUIManager.Instance.ShowMessageBox("", message);
// GetGameUIMan().MessageBox("", GetGameUIMan().GetStringFromTable(228),
// MB_OK, A3DCOLORRGBA(255, 255, 255, 160), &pMsgBox);
// pMsgBox.SetLife(3);
+94 -6
View File
@@ -1,5 +1,6 @@
using BrewMonster;
using BrewMonster.Assets.PerfectWorld.Scripts.Players;
using BrewMonster.Assets.PerfectWorld.Scripts.UI;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.PerfectWorld.Scripts.Vfx;
@@ -19,6 +20,7 @@ using PerfectWorld.Scripts.Managers;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using UnityEngine;
@@ -27,9 +29,8 @@ using static BrewMonster.Scripts.Managers.EC_Inventory;
using static CECPlayerWrapper;
using cmd_select_target = CSNetwork.GPDataType.cmd_select_target;
using Host_work_ID = BrewMonster.Scripts.CECHPWork.Host_work_ID;
using Trace_reason = BrewMonster.CECHPWorkTrace.Trace_reason;
using ObjectCoords = System.Collections.Generic.List<CSNetwork.GPDataType.OBJECT_COORD>;
using System.Linq;
using Trace_reason = BrewMonster.CECHPWorkTrace.Trace_reason;
namespace BrewMonster
{
@@ -2604,10 +2605,97 @@ namespace BrewMonster
{
case CommandID.OWN_ITEM_INFO:
{
Debug.Log("[Inventory] OWN_ITEM_INFO received");
//Debug.Log("[Inventory] OWN_ITEM_INFO received");
//var data = Msg.dwParam1 as byte[];
//int hostId = Convert.ToInt32(Msg.dwParam3);
//LogInventoryPacket("OWN_ITEM_INFO", data, hostId);
//Handmade
var data = Msg.dwParam1 as byte[];
int hostId = Convert.ToInt32(Msg.dwParam3);
LogInventoryPacket("OWN_ITEM_INFO", data, hostId);
if (data == null || data.Length == 0)
return;
byte byPackage = data[0];
byte bySlot = data[1];
int type = BitConverter.ToInt32(data, 2);
int expire_date = BitConverter.ToInt32(data, 6);
int state = BitConverter.ToInt32(data, 10);
uint count = BitConverter.ToUInt32(data, 14);
ushort crc = BitConverter.ToUInt16(data, 18);
ushort content_length = BitConverter.ToUInt16(data, 20);
byte[] content = null;
if (content_length > 0 && 22 + content_length <= data.Length)
{
content = new byte[content_length];
Buffer.BlockCopy(data, 22, content, 0, content_length);
string hexDebug = BitConverter.ToString(content);
//Debug.Log($"[OWN_ITEM_INFO] Full Content Hex ({content_length} bytes): {hexDebug}");
}
//Debug.Log($"[OWN_ITEM_INFO] Parsed: package={byPackage}, slot={bySlot}, tid={type}, count={count}, content_len={content_length}");
EC_Inventory pInventory = GetInventory(byPackage);
EC_IvtrItem newItem = EC_IvtrItem.CreateItem(type, expire_date, (int)count);
if (newItem != null)
{
newItem.SetProcType(state);
newItem.GetDetailDataFromLocal();
if (content != null && content.Length > 0)
{
newItem.SetItemInfo(content, content_length);
}
pInventory.SetItem(bySlot, newItem);
//Debug.Log($"[OWN_ITEM_INFO] Fixed Update: Pack {byPackage} Slot {bySlot} - Type {type}");
}
if (byPackage == InventoryConst.IVTRTYPE_EQUIPPACK)
{
UpdateEquipSkins();
}
else if (byPackage == InventoryConst.IVTRTYPE_PACK)
{
if (newItem.IsEquipment())
{
// TODO
}
}
var ui = GameObject.FindFirstObjectByType<EC_InventoryUI>();
if (ui != null)
{
ui.RefreshAll();
//Debug.Log($"[OWN_ITEM_INFO] Refreshed inventory UI after updating item at package={byPackage}, slot={bySlot}");
}
break;
}
case CommandID.EMPTY_ITEM_SLOT:
{
var data = Msg.dwParam1 as byte[];
cmd_empty_item_slot pCmd = GPDataTypeHelper.FromBytes<cmd_empty_item_slot>(data);
EC_Inventory pInventory = GetPack(pCmd.byPackage);
if (pInventory == null)
return;
EC_IvtrItem pItem = pInventory.GetItem(pCmd.bySlot);
if (pItem != null)
{
//UpdateRemovedItemSC(pItem->GetTemplateID(), pCmd->byPackage, pCmd->bySlot);
}
pInventory.SetItem(pCmd.bySlot, null);
var ui = GameObject.FindFirstObjectByType<EC_InventoryUI>();
if (ui != null)
{
ui.RefreshAll();
}
break;
}
}
@@ -7385,7 +7473,7 @@ namespace BrewMonster
}
return iReason == 0 ? true : false;
}
private void OnMsgHstEmbedItem(ECMSG Msg)
public void OnMsgHstEmbedItem(ECMSG Msg)
{
cmd_embed_item pCmd = GPDataTypeHelper.FromBytes<cmd_embed_item>((byte[])Msg.dwParam1);
EC_IvtrItem pEquip = m_pPack.GetItem(pCmd.equip_idx);