Merge pull request 'feature/fix-teamate' (#200) from feature/fix-teamate into develop

Reviewed-on: https://git.pthub.vn/Unity/perfect-world-unity/pulls/200
This commit is contained in:
hainh
2026-03-05 10:44:53 +00:00
4 changed files with 257 additions and 60 deletions
@@ -0,0 +1,220 @@
using BrewMonster.Network;
using BrewMonster.Scripts.Pet;
using CSNetwork.GPDataType;
using ModelRenderer.Scripts.GameData;
using System;
using System.Collections.Generic;
using System.IO;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace BrewMonster.UI
{
public class DlgPetDetail : AUIDialog
{
[SerializeField] private Image m_iconPet;
[SerializeField] private TMP_Text m_textPetName;
[SerializeField] private TMP_Text m_textLevel;
[SerializeField] private TMP_Text m_textExp;
[SerializeField] private TMP_Text m_descPet;
[SerializeField] private Sprite m_spriteDefault_Icon;
private int m_nSlot;
public void UpdatePet(int nSlot)
{
if (nSlot != -1)
{
m_nSlot = nSlot;
Show(true);
UpdatePetInternal();
}
}
private void UpdatePetInternal()
{
var pDB = ElementDataManProvider.GetElementDataMan();
if(pDB == null)
{
return;
}
var host = CECGameRun.Instance?.GetHostPlayer();
if (host == null)
return;
var pPetCorral = host.GetPetCorral();
if(pPetCorral == null)
return;
var pPet = pPetCorral.GetPetData(m_nSlot);
if(pPet == null)
return;
int nLevel = pPet.GetLevel();
m_textPetName.text = pPet.GetName();
m_textPetName.text = pPet.GetName();
m_textLevel.text = "Cấp " + nLevel.ToString();
m_textExp.text = "EXP " + $"{pPet.GetExp()} / {pPet.GetMaxExp()}";
DATA_TYPE dataType = DATA_TYPE.DT_INVALID;
var petEssenceData = pDB.get_data_ptr((uint)pPet.GetTemplateID(), ID_SPACE.ID_SPACE_ESSENCE, ref dataType);
if (petEssenceData != null && dataType == DATA_TYPE.DT_PET_ESSENCE)
{
var pPetEssence = (PET_ESSENCE)petEssenceData;
UpdatePetIcon(pPetEssence);
if (pPet.GetClass() == (int)GP_PET_TYPE.GP_PET_CLASS_MOUNT ||
pPet.GetClass() == (int)GP_PET_TYPE.GP_PET_CLASS_COMBAT ||
pPet.GetClass() == (int)GP_PET_TYPE.GP_PET_CLASS_EVOLUTION)
{
string description = BuildPetDescription(pPet, pPetEssence, nLevel);
m_descPet.text = description;
}
}
else
{
if(m_spriteDefault_Icon != null)
m_iconPet.sprite = m_spriteDefault_Icon;
}
}
private void UpdatePetIcon(PET_ESSENCE pPetEssence)
{
if (m_iconPet == null)
return;
try
{
string strFile = Path.GetFileNameWithoutExtension(pPetEssence.FileIcon).ToLower();
var sprite = EC_Game.GetGameRun().GetUIManager().GetSpriteInListIvtr(strFile);
if (sprite != null)
{
m_iconPet.sprite = sprite;
m_iconPet.enabled = true;
m_iconPet.color = Color.white;
}
else
{
m_iconPet.sprite = m_spriteDefault_Icon;
}
}
catch (Exception ex)
{
Debug.LogError($"[DlgPetDetail] Error loading pet icon: {ex.Message}");
m_iconPet.sprite = m_spriteDefault_Icon;
}
}
private string BuildPetDescription(CECPetData pPet, PET_ESSENCE pEssence, int nLevel)
{
string desc = "";
// Loyalty
int intimacy = pPet.GetIntimacy();
string loyaltyLevel = GetLoyaltyLevel(intimacy);
desc += $"Lòng trung thành: {loyaltyLevel} ({intimacy})\n";
// Hunger
int hunger = pPet.GetHunger();
string hungerLevel = GetHungerLevel(hunger);
desc += $"Đói: {hungerLevel} \n";
// Move Speed
float speed = pEssence.speed_a + pEssence.speed_b * (nLevel - 1);
desc += $"Tốc độ di chuyển: {speed:F2}\n";
// Required Level
desc += $"Cấp yêu cầu: {pEssence.level_require}\n";
return desc;
}
private string GetLoyaltyLevel(int intimacy)
{
if (intimacy <= 50)
{
return " Nho hon bang 50";
}
else if(intimacy <= 150)
{
return "Bang 50 den 150";
}
else if (intimacy <= 500)
{
return "Bang 300 den 500";
}
else
{
return "Lon hon bang 500";
}
}
private string GetHungerLevel(int hunger)
{
if(hunger == (int)CECPetData.ePetData_HUNGER_LEVEL.HUNGER_LEVEL_0)
{
return "Chet doi";
}
else if(hunger == (int)CECPetData.ePetData_HUNGER_LEVEL.HUNGER_LEVEL_1)
{
return "Rat doi";
}
else if (hunger == (int)CECPetData.ePetData_HUNGER_LEVEL.HUNGER_LEVEL_2)
{
return "doi";
}
else if (hunger == (int)CECPetData.ePetData_HUNGER_LEVEL.HUNGER_LEVEL_4)
{
return "binh thuong";
}
else if (hunger == (int)CECPetData.ePetData_HUNGER_LEVEL.HUNGER_LEVEL_7)
{
return "no";
}
else
{
return "rat no";
}
}
private void ClearPetDetail()
{
if(m_textPetName != null)
{
m_textPetName.text = "___";
}
if(m_textLevel != null)
{
m_textLevel.text = "___";
}
if(m_textExp != null)
{
m_textExp.text = "___";
}
if (m_iconPet != null && m_spriteDefault_Icon != null)
{
m_iconPet.sprite = m_spriteDefault_Icon;
}
if(m_descPet != null)
{
m_descPet.text = "___";
}
}
//public override bool Render()
//{
// if (m_nSlot >= 0)
// {
// UpdatePetInternal();
// }
// return base.Render();
//}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ce0ac818dfef5e04e92aa1ed022893bd
@@ -316,18 +316,12 @@ namespace BrewMonster.UI
[SerializeField] private Button m_btnHome;
[SerializeField] private Button m_btnOut;
[Header("Pet Decs")]
[SerializeField] private Image m_iconPet;
[SerializeField] private TMP_Text m_namePet;
[SerializeField] private TMP_Text m_levelPet;
[SerializeField] private TMP_Text m_expPet;
[SerializeField] private Sprite m_spriteDefault_Icon;
[Header("References")]
[SerializeField] private DlgPetDetail m_dlgPetDetail;
private List<DlgPetListBox> m_spawnedSlots = new List<DlgPetListBox>();
private int m_nPageIndex = 0;
private CECPetData m_currentSelectedPet;
private int m_currentSelectSlotIndex;
private int m_currentSelectSlotIndex = -1;
public void OnInitDialog()
{
@@ -408,51 +402,15 @@ namespace BrewMonster.UI
if (pPetData != null)
{
m_currentSelectSlotIndex = slotIndex;
UpdatePetDetails(pPetData);
UpdateButtonStates();
if (m_dlgPetDetail != null)
{
m_dlgPetDetail.UpdatePet(slotIndex);
}
}
}
private void UpdatePetDetails(CECPetData pPet)
{
if (pPet == null)
{
m_namePet.text = "___";
m_levelPet.text = "___";
m_expPet.text = "___";
if(m_spriteDefault_Icon != null)
m_iconPet.sprite = m_spriteDefault_Icon;
return;
}
m_currentSelectedPet = pPet;
m_namePet.text = pPet.GetName();
m_levelPet.text = $"Cấp {pPet.GetLevel()}";
int currentExp = pPet.GetExp();
int maxExp = pPet.GetMaxExp();
m_expPet.text = $"EXP: {currentExp} / {maxExp}";
UpdatePetIcon(pPet.GetTemplateID());
}
private void UpdatePetIcon(int templateID)
{
var pDB = ElementDataManProvider.GetElementDataMan();
DATA_TYPE dataType = new DATA_TYPE();
object pDBEssence = pDB.get_data_ptr((uint)templateID, ID_SPACE.ID_SPACE_ESSENCE, ref dataType);
if (pDBEssence != null)
{
PET_ESSENCE pPET = (PET_ESSENCE)pDBEssence;
string strFile = Path.GetFileNameWithoutExtension(pPET.FileIcon).ToLower();
m_iconPet.sprite = EC_Game.GetGameRun().GetUIManager().GetSpriteInListIvtr(strFile);
}
else
{
if(m_spriteDefault_Icon != null)
m_iconPet.sprite = m_spriteDefault_Icon;
}
}
private void UpdateButtonStates()
{
+27 -10
View File
@@ -236,18 +236,18 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 606266655932021657}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
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:
- {fileID: 1624473230281581442}
- {fileID: 6586898985852894528}
m_Father: {fileID: 7889082681244863727}
m_Father: {fileID: 2996968374502470470}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0}
m_AnchorMax: {x: 0.5, y: 0}
m_AnchoredPosition: {x: 0, y: 54.85501}
m_AnchoredPosition: {x: 486.0603, y: 87.08179}
m_SizeDelta: {x: 548, y: 109.71002}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7484416968689902533
@@ -1469,11 +1469,7 @@ MonoBehaviour:
m_btnClose: {fileID: 8122086289517642079}
m_btnHome: {fileID: 2385823678917970113}
m_btnOut: {fileID: 3388903545038814812}
m_iconPet: {fileID: 3806612095625030478}
m_namePet: {fileID: 3493020700139178670}
m_levelPet: {fileID: 7602645980480065390}
m_expPet: {fileID: 1618158093982489839}
m_spriteDefault_Icon: {fileID: 21300000, guid: a5366f3bce011c046902e39b6bd3a077, type: 3}
m_dlgPetDetail: {fileID: 1175093797040640902}
--- !u!1 &5447703489185023651
GameObject:
m_ObjectHideFlags: 0
@@ -1485,8 +1481,9 @@ GameObject:
- component: {fileID: 7889082681244863727}
- component: {fileID: 1820092494333766511}
- component: {fileID: 5179896020678852059}
- component: {fileID: 1175093797040640902}
m_Layer: 5
m_Name: right_petInfo
m_Name: pet_detail_info
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -1509,7 +1506,6 @@ RectTransform:
- {fileID: 2365663903306128583}
- {fileID: 5708822584962701248}
- {fileID: 8882903949157006170}
- {fileID: 6165010831916478045}
m_Father: {fileID: 2996968374502470470}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0.5}
@@ -1555,6 +1551,26 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &1175093797040640902
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5447703489185023651}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ce0ac818dfef5e04e92aa1ed022893bd, type: 3}
m_Name:
m_EditorClassIdentifier:
skillNameText: {fileID: 0}
imageProgress: {fileID: 0}
m_iconPet: {fileID: 3806612095625030478}
m_textPetName: {fileID: 3493020700139178670}
m_textLevel: {fileID: 7602645980480065390}
m_textExp: {fileID: 1618158093982489839}
m_descPet: {fileID: 164215783080885169}
m_spriteDefault_Icon: {fileID: 21300000, guid: 8b997e886fff00540b9c069a9dff12af, type: 3}
--- !u!1 &6029267655065740123
GameObject:
m_ObjectHideFlags: 0
@@ -1680,6 +1696,7 @@ RectTransform:
- {fileID: 232399539067632254}
- {fileID: 7889082681244863727}
- {fileID: 3045035826663144425}
- {fileID: 6165010831916478045}
m_Father: {fileID: 5951834544630940226}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}