Merge pull request 'feature/friend_ui' (#266) from feature/friend_ui into develop

Reviewed-on: https://git.pthub.vn/Unity/perfect-world-unity/pulls/266
This commit is contained in:
hainh
2026-03-20 09:48:22 +00:00
4 changed files with 254 additions and 3 deletions
@@ -1588,6 +1588,11 @@ namespace CSNetwork.GPDataType
public byte byPackage;
public byte bySlot;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_pickup_money
{
public int amount;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_produce_start
@@ -401,7 +401,9 @@ namespace BrewMonster.Scripts.UI
break;
}
}
}
itemInfoPanel.SetActive(false);
}
void OnAwardItemClicked(string hint, bool isOn, AwardItem awardItem)
{
@@ -513,4 +515,4 @@ namespace BrewMonster.Scripts.UI
LayoutRebuilder.ForceRebuildLayoutImmediate(parent);
}
}
}
}
+28 -1
View File
@@ -196,6 +196,7 @@ namespace BrewMonster
{
var money = GPDataTypeHelper.FromBytes<CSNetwork.GPDataType.cmd_get_own_money>(data);
SetMoneyAmount(money.amount);
m_iMaxMoney = (int)money.max_amount;
EC_InventoryUI ui = GameObject.FindFirstObjectByType<EC_InventoryUI>();
if (ui != null && ui.gameObject.activeInHierarchy)
@@ -797,7 +798,33 @@ namespace BrewMonster
// Add money amount
private int AddMoneyAmount(int iAmount)
{
m_iMoneyCnt += (uint)iAmount;
long next = (long)m_iMoneyCnt + iAmount;
if (next < 0)
{
next = 0;
}
if(m_iMaxMoney > 0 && next > m_iMaxMoney)
{
next = m_iMaxMoney;
}
m_iMoneyCnt = (uint)next;
ulong amount = m_iMoneyCnt;
ulong maxAmount = m_iMaxMoney > 0 ? (ulong)m_iMaxMoney : amount;
EC_InventoryUI ui = GameObject.FindFirstObjectByType<EC_InventoryUI>();
if(ui != null && ui.gameObject.activeInHierarchy)
{
ui.UpdateMoney(amount, maxAmount);
}
else
{
EC_InventoryUI.CacheMoney(amount, maxAmount);
}
//m_iMoneyCnt += (uint)iAmount;
return (int)m_iMoneyCnt;
}
+217
View File
@@ -544,6 +544,9 @@ namespace BrewMonster
case EC_MsgDef.MSG_HST_USEITEM:
OnMsgHstUseItem(Msg);
break;
case EC_MsgDef.MSG_HST_PICKUPMONEY:
OnMsgHstPickupMoney(Msg);
break;
case EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break;
case EC_MsgDef.MSG_HST_ATTACKONCE: OnMsgHstAttackOnce(Msg); break;
case EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break;
@@ -612,11 +615,206 @@ namespace BrewMonster
}
}*/
}
private void OnMsgHstPickupMoney(ECMSG msg)
{
var data = msg.dwParam1 as byte[];
if (data == null || data.Length == 0)
return;
cmd_pickup_money pCmd = GPDataTypeHelper.FromBytes<cmd_pickup_money>(data);
AddMoneyAmount(pCmd.amount);
CECGameRun pGameRun = EC_Game.GetGameRun();
pGameRun.AddFixedMessage((int)FixedMsg.FIXMSG_PICKUPMONEY);
BubbleText((int)BubbleTextType.BUBBLE_MONEY, (uint)pCmd.amount);
}
private void BubbleText(int iIndex, uint dwNum, int p1 = 0)
{
bool isHost = IsHostPlayer();
if (isHost)
{
CECHostPlayer pHost = EC_Game.GetGameRun().GetHostPlayer();
if (iIndex == (int)BubbleTextType.BUBBLE_EXP)
{
bool hasBookExp = pHost != null && pHost.m_ReincarnationTome.tome_active != 0;
int msgId = (int)dwNum > 0 ?
(hasBookExp ? (int)FixedMsg.FIXMSG_GOT_BOOKEXP : (int)FixedMsg.FIXMSG_GOTEXP) :
(int)FixedMsg.FIXMSG_LOSTEXP;
EC_Game.GetGameRun()?.AddFixedChannelMsg(msgId, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
}
if (iIndex == (int)BubbleTextType.BUBBLE_SP)
{
EC_Game.GetGameRun()?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOTSP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
}
if (iIndex == (int)BubbleTextType.BUBBLE_REALMEXP)
{
EC_Game.GetGameRun()?.AddFixedChannelMsg((int)FixedMsg.FIXMSG_GOT_REALMEXP, (int)ChatChannel.GP_CHAT_FIGHT, (int)dwNum);
}
}
Vector3 vPos;
if (IsInChariot())
{
var dummy = GetDummyModel((int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2);
if (dummy != null)
{
// TODO
//vPos = GetPos() + g_vAxisY * (dummy.GetModelAABB().Extents.y * 2.3f);
}
else
{
vPos = EC_Utility.ToVector3(GetPos()) + g_vAxisY * (m_aabb.Extents.y * 2.5f);
}
//CECBubbleDecal* pBubbleDecal = m_pBubbleTexts->AddDecal(vPos, CECDecal::DCID_ICONDECAL);
//CECIconDecal* pDecal = (CECIconDecal*)pBubbleDecal->GetDecal();
//switch (iIndex)
//{
// case BUBBLE_DAMAGE:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// if (p1 & 0x0001)
// pDecal->AddIcon(CECImageRes::IMG_DEADLYSTRIKE, 0, dwCol);
// else if (p1 & 0x0002)
// pDecal->AddIcon(CECImageRes::IMG_RETORT, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_EXP:
// pDecal->AddIcon(CECImageRes::IMG_GOTEXP, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// // pDecal->SetScreenPos(80, 70);
// // pDecal->EnableScreenPos(true);
// break;
// case BUBBLE_SP:
// pDecal->AddIcon(CECImageRes::IMG_GOTSP, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// // pDecal->SetScreenPos(80, 90);
// // pDecal->EnableScreenPos(true);
// break;
// case BUBBLE_MONEY:
// pDecal->AddIcon(CECImageRes::IMG_GOTMONEY, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_LEVELUP:
// pDecal->AddIcon(CECImageRes::IMG_LEVELUP, 0, dwCol);
// break;
// case BUBBLE_HITMISSED:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// pDecal->AddIcon(CECImageRes::IMG_HITMISSED, 0, dwCol);
// break;
// case BUBBLE_INVALIDHIT:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// pDecal->AddIcon(CECImageRes::IMG_INVALIDHIT, 0, dwCol);
// break;
// case BUBBLE_IMMUNE:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// pDecal->AddIcon(CECImageRes::IMG_IMMUNE, 0, dwCol);
// break;
// case BUBBLE_HPWARN:
// dwCol = A3DCOLORRGB(255, 255, 255);
// pDecal->AddIcon(CECImageRes::IMG_HPWARN, 0, dwCol);
// break;
// case BUBBLE_MPWARN:
// dwCol = A3DCOLORRGB(255, 255, 255);
// pDecal->AddIcon(CECImageRes::IMG_MPWARN, 0, dwCol);
// break;
// case BUBBLE_REBOUND:
// pDecal->AddIcon(CECImageRes::IMG_REBOUND, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_BEAT_BACK:
// pDecal->AddIcon(CECImageRes::IMG_BEAT_BACK, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_ADD:
// dwCol = A3DCOLORRGB(126, 206, 244);
// pDecal->AddIcon(CECImageRes::IMG_ADD, 0, dwCol);
// pDecal->AddNumIcons(CECImageRes::IMG_POPUPNUM, dwNum, dwCol);
// break;
// case BUBBLE_DODGE_DEBUFF:
// if (!bHost)
// dwCol = A3DCOLORRGB(237, 56, 0);
// pDecal->AddIcon(CECImageRes::IMG_DODGE_DEBUFF, 0, dwCol);
// break;
// default:
// return;
}
else
{
vPos = EC_Utility.ToVector3(GetPos()) + g_vAxisY * (m_aabb.Extents.y * 2.5f);
}
}
private bool IsInChariot()
{
CECGameRun pRun = EC_Game.GetGameRun();
if(pRun == null)
return false;
CECHostPlayer pHost = pRun.GetHostPlayer();
if (pHost && pHost.GetBattleInfo().IsChariotWar() && GetShapeType() == (int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2
&& GetDummyModel((int)PLAYERMODEL_TYPE.PLAYERMODEL_DUMMYTYPE2))
{
return true;
}
return false;
}
private BATTLEINFO m_BattleInfo;
private BATTLEINFO GetBattleInfo()
{
return m_BattleInfo;
}
private void NotifyUIUpdateTeam(bool showDialog = false)
{
//try
//{
// var ui = EC_Game.GetGameRun()?.GetUIManager()?.GetInGameUIMan();
// var ui = EC_Game.GetGameRun()?.GetUIManager()?.GetInGameUIMan();
// if (ui is CECGameUIMan gui)
// gui.UpdateTeam(false);
//}
@@ -3319,6 +3517,25 @@ namespace BrewMonster
LIES_DISABLEFIGHT = 0x000B,
}
public enum BubbleTextType
{
BUBBLE_DAMAGE = 0,
BUBBLE_EXP,
BUBBLE_SP,
BUBBLE_MONEY,
BUBBLE_LEVELUP,
BUBBLE_HITMISSED,
BUBBLE_INVALIDHIT,
BUBBLE_IMMUNE,
BUBBLE_HPWARN,
BUBBLE_MPWARN,
BUBBLE_REBOUND, // ·´µ¯
BUBBLE_BEAT_BACK, // ·´»÷
BUBBLE_ADD, // ÎüѪµÄ¼ÓºÅ
BUBBLE_DODGE_DEBUFF,
BUBBLE_REALMEXP,
}
// ½øÈë»ùµØÐÅÏ¢
public struct FACTION_FORTRESS_ENTER
{