Merge remote-tracking branch 'origin/develop' into implement_task_UI

# Conflicts:
#	Assets/PerfectWorld/Scripts/Move/CECPlayer.cs
#	Assets/Scripts/CECHostPlayer.cs
This commit is contained in:
MinhHai
2025-11-12 16:57:45 +07:00
182 changed files with 199688 additions and 1352 deletions
+6 -3
View File
@@ -1,4 +1,5 @@
using BrewMonster;
using CSNetwork.GPDataType;
using BrewMonster;
using BrewMonster.Scripts.World;
using CSNetwork.GPDataType;
using CSNetwork.Protocols.RPCData;
@@ -6,9 +7,7 @@ using System.Data;
using BrewMonster.Network;
using CSNetwork;
using Unity.Cinemachine;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UIElements;
public partial class CECGameRun : MonoBehaviour, IMsgHandler
{
@@ -127,6 +126,10 @@ public partial class CECGameRun : MonoBehaviour, IMsgHandler
{
instance = null;
}
public GameObject InstantiateObject(GameObject prefab)
{
return Instantiate(prefab, transform);
}
//private void Update()
//{
+229 -13
View File
@@ -21,7 +21,7 @@ using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using BrewMonster.Scripts.Task;
using BrewMonster.PerfectWorld.Scripts.Vfx;
using TMPro;
using Unity.VisualScripting;
using UnityEditor.Experimental.GraphView;
@@ -35,6 +35,7 @@ using Scene = UnityEngine.SceneManagement.Scene;
using Trace_reason = CECHPWorkTrace.Trace_reason;
using Host_work_ID = BrewMonster.Scripts.CECHPWork.Host_work_ID;
using BrewMonster.Scripts;
using BrewMonster.Scripts.World;
public partial class CECHostPlayer : CECPlayer
{
@@ -59,6 +60,8 @@ public partial class CECHostPlayer : CECPlayer
private int m_iJumpCount = 0;
private bool m_bJumpInWater = false;
public A3DVECTOR3 m_vVelocity; // Velocity
bool m_bChangingFace; // true, host is changing face
private int m_iRoleCreateTime;
private int m_iRoleLastLoginTime; // Role last login time
private int m_iAccountTotalCash;
@@ -108,6 +111,10 @@ public partial class CECHostPlayer : CECPlayer
RaycastHit lastGroundHit;
Camera mainCam;
private BaseVfxObject m_pSelectedGFX;
public bool IsChangingFace() { return m_bChangingFace; }
private void Awake()
{
base.Awake();
@@ -188,15 +195,16 @@ public partial class CECHostPlayer : CECPlayer
// btnJump.onClick.AddListener(HandleJump);
}
private void Update()
protected override void Update()
{
base.Update();
#if UNITY_EDITOR
if (Input.GetKeyDown(KeyCode.C))
{
ApplySkillShortcut(1);
}
#endif
//Debug.Log($"(ulong)Time.deltaTime * 1000 {(ulong)(Time.deltaTime * 1000)}");
m_MoveCtrl.Tick((ulong)(Time.deltaTime * 1000));
// Nếu có thay đổi runtime, có thể lấy lại mỗi vài giây/Start nếu bạn thích:
@@ -253,17 +261,20 @@ public partial class CECHostPlayer : CECPlayer
SelectTarget(m_idUCSelTarget);
}
/* if (idTraceTarget != 0)
{
if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_ATTACK)
{
if (!CanDo(ActionCanDo.CANDO_MELEE))
return;
NormalAttackObject(idTraceTarget, bForceAttack);
}
}*/
if (idTraceTarget != 0)
{
if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_ATTACK)
{
if (!CanDo(ActionCanDo.CANDO_MELEE))
return;
NormalAttackObject(idTraceTarget, bForceAttack);
}
}
}
m_pWorkMan?.Tick(Time.deltaTime);
// Update GFXs
UpdateGFXs(Time.deltaTime);
}
public void StopMovement()
@@ -1107,7 +1118,19 @@ public partial class CECHostPlayer : CECPlayer
{
return;
}
LoadGfx();
}
public async void LoadGfx()
{
// Load GFX
var gfxCaster = EC_Game.GetGFXCaster();
// m_pMoveTargetGFX = g_pGame->GetGFXCaster()->LoadGFXEx(res_GFXFile(RES_GFX_MOVETARGET));
m_pSelectedGFX = await gfxCaster.LoadGFXEx(EC_Resource.res_GFXFile((int)GfxResourceType.RES_GFX_SELECTED));
// m_pHoverGFX = g_pGame->GetGFXCaster()->LoadGFXEx(res_GFXFile(RES_GFX_CURSORHOVER));
// m_pFloatDust = g_pGame->GetGFXCaster()->LoadGFXEx(res_GFXFile(RES_GFX_FLOATING_DUST));
if (true /*CECUIConfig::Instance().GetGameUI().bEnableActionSwitch*/)
{
m_pActionSwitcher = new CECActionSwitcher(this);
@@ -1144,7 +1167,87 @@ public partial class CECHostPlayer : CECPlayer
SetModelHostPlayer();
//Debug.LogError("Pos Character = " + pos);
}
#region Task
public void OnMsgHstTaskData(ECMSG Msg)
{
int cmd = Convert.ToInt32(Msg.dwParam2);
if (cmd == CommandID.TASK_DATA)
{
//Debug.Log("[Dat]- OnMsgHstTaskData- TASK_DATA");
//a_LogOutput(1, "[Dat]- EC_HostMsg- OnMsgHstTaskData- TASK_DATA");
//cmd_task_data* pCmd = (cmd_task_data*)Msg.dwParam1;
//ASSERT(pCmd);
//int iActiveListSize = (int)pCmd.active_list_size;
//BYTE* pData = (BYTE*)pCmd + sizeof(size_t);
//void* pActiveListbuf = pData;
//pData += iActiveListSize;
//int iFinishedListSize = *(int*)pData;
//pData += sizeof(int);
//void* pFinishedListBuf = pData;
//pData += iFinishedListSize;
//int iFinishTimeListSize = *(int*)pData;
//pData += sizeof(int);
//void* pFinishTimeListBuf = pData;
//pData += iFinishTimeListSize;
//int iFinishedCountListSize = *(int*)pData;
//pData += sizeof(int);
//void* pFinishedCountListBuf = pData;
//pData += iFinishedCountListSize;
//int iStorageTasksListSize = *(int*)pData;
//pData += sizeof(int);
//void* pStorageTaskListBuf = pData;
//pData += iStorageTasksListSize;
//A3DRELEASE(m_pTaskInterface);
//todo
//var m_pTaskInterface = new CECTaskInterface(this);
//if (!m_pTaskInterface.Init(null, 0, null, 0,
// null, 0, null, 0, null, 0))
//{
// //a_LogOutput(1, "CECHostPlayer::OnMsgHstTaskData, failed to initialize task interface");
// return;
//}
//m_pTaskInterface.CheckPQEnterWorldInit();
//// check if player has equipped goblin
//if (m_pEquipPack.GetItem(EQUIPIVTR_GOBLIN) != NULL)
//{
// CECIvtrGoblin* pIvtrGoblin = (CECIvtrGoblin*)m_pEquipPack.GetItem(EQUIPIVTR_GOBLIN);
// m_pGoblin = new CECHostGoblin();
// m_pGoblin.Init(pIvtrGoblin.GetTemplateID(), pIvtrGoblin, this);
//}
//// Note: this command now is also used as the end flag of responding
//// for GET_ALL_DATA request
//g_pGame.GetGameSession().LoadConfigData();
//// ¸ù¾Ý×°±¸°ü¹ü¸üÐÂ×°±¸¼¼Äܵ½¼¼ÄÜÁбí
//if (UpdateEquipSkills())
// UpdateEquipSkillCoolDown();
}
else if (cmd == CommandID.TASK_VAR_DATA)
{
//cmd_task_var_data* pCmd = (cmd_task_var_data*)Msg.dwParam1;
//ASSERT(pCmd);
//if (m_pTaskInterface)
// OnServerNotify(m_pTaskInterface, pCmd.data, pCmd.size);
//else
// ASSERT(m_pTaskInterface);
}
}
#endregion
private bool NormalAttackObject(int idTarget, bool bForceAttack, bool bMoreClose = false)
{
if (idTarget == 0 || idTarget == m_PlayerInfo.cid)
@@ -2218,6 +2321,119 @@ public partial class CECHostPlayer : CECPlayer
// }
// return fSpeedSev;
//}
void UpdateGFXs(float dwDeltaTime)
{
// if (m_pLevelUpGFX)
// m_pLevelUpGFX->SetParentTM(GetAbsoluteTM());
// if (m_pHoverGFX)// && m_idCurHover != m_idSelTarget)
// {
// if (!IsChangingFace() && (ISPLAYERID(m_idCurHover) || ISNPCID(m_idCurHover)))
// {
// CECObject* pObject = pWorld->GetObject(m_idCurHover, 1);
// if (pObject)
// {
// if (m_pHoverGFX->GetState() == ST_STOP)
// m_pHoverGFX->Start();
//
// m_pHoverGFX->SetParentTM(pObject->GetAbsoluteTM());
// }
// else
// m_pHoverGFX->Stop();
// }
// else
// m_pHoverGFX->Stop();
// }
if (m_pSelectedGFX)
{
if (!IsChangingFace() && (GPDataTypeHelper.ISPLAYERID(m_idSelTarget) || GPDataTypeHelper.ISNPCID(m_idSelTarget)))
{
var pObject =EC_ManMessageMono.Instance?.GetObject(m_idSelTarget, 1);
if (pObject)
{
if (m_pSelectedGFX.GetState() == GFX_STATE.ST_STOP)
m_pSelectedGFX.Play();
// m_pSelectedGFX.SetParentTM(pObject.GetAbsoluteTM());
m_pSelectedGFX.transform.parent = pObject.transform;
m_pSelectedGFX.transform.localPosition = Vector3.zero;
}
else
m_pSelectedGFX.Stop();
}
else
m_pSelectedGFX.Stop();
}
// if (m_pFloatDust)
// {
// A3DTerrainWater* pWater = g_pGame->GetGameRun()->GetWorld()->GetTerrainWater();
//
// if (pWater->IsUnderWater(m_CameraCoord.GetPos()))
// {
// if (m_pFloatDust->GetState() == ST_STOP)
// {
// m_pFloatDust->Start(true);
// m_pFloatDust->TickAnimation(2000);
// }
//
// m_pFloatDust->SetParentTM(GetAbsoluteTM());
// }
// else if (m_pFloatDust->GetState() != ST_STOP)
// m_pFloatDust->Stop();
// }
// UpdateMonsterSpiritGfx(dwDeltaTime);
}
// Level up
public void LevelUp()
{
// CECGameSession *pSession = g_pGame->GetGameSession();
//
// m_BasicProps.iLevel++;
// g_pGame->GetGameRun()->AddFixedMessage(FIXMSG_LEVELUP, m_BasicProps.iLevel);
//
// // Get all extend properties
// pSession->c2s_CmdGetExtProps();
// if (m_pLevelUpGFX)
// m_pLevelUpGFX->Start(true);
PlayGfx(EC_Resource.res_GFXFile((int)GfxResourceType.RES_GFX_LEVELUP), null, 1f,1);//PLAYERMODEL_TYPEALL
// // Popup notify bubble text
// BubbleText(BUBBLE_LEVELUP, 0);
//
// // Notify my friends that my level changed
// ACHAR szInfo[40];
// a_sprintf(szInfo, _AL("L%d"), m_BasicProps.iLevel);
//
// for (int i=0; i < m_pFriendMan->GetGroupNum(); i++)
// {
// CECFriendMan::GROUP* pGroup = m_pFriendMan->GetGroupByIndex(i);
// for (int j=0; j < pGroup->aFriends.GetSize(); j++)
// {
// CECFriendMan::FRIEND* pFriend = pGroup->aFriends[j];
// if (pFriend->IsGameOnline())
// {
// pSession->SendPrivateChatData(pFriend->GetName(),
// szInfo, GNET::CHANNEL_USERINFO, pFriend->id);
// }
// }
// }
//
// if (GetBasicProps().iLevel==30)
// {
// CECGameUIMan* pGameUI = g_pGame->GetGameRun()->GetUIManager()->GetInGameUIMan();
// pGameUI->AddChatMessage(pGameUI->GetStringFromTable(9638), GP_CHAT_SYSTEM);
// }
// if (GetBasicProps().iLevel>31)
// {
// CECGameUIMan* pGameUI = g_pGame->GetGameRun()->GetUIManager()->GetInGameUIMan();
// ((CDlgOnlineAward*)pGameUI->GetDialog("Win_AddExp2"))->RestartWhenLevelup();
// }
}
}
public enum StateAnim
+1 -1
View File
@@ -38,7 +38,7 @@ public class PlayerVisual : MonoBehaviour
var player = GetComponentInParent<CECPlayer>();
if (player == null)
{
BrewMonster.BMLogger.LogWarning("player == null");
BMLogger.LogWarning("player == null");
return;
}
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4ae2a189a9875cc42933bdde5dfa273e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+299
View File
@@ -0,0 +1,299 @@
using UnityEngine;
namespace BrewMonster
{
public class EC_Resource
{
// Cursor resource
static readonly string[] l_aCurFiles =
{
"cursors/normal.ani",
"cursors/attack.cur",
"cursors/talk.cur",
"cursors/pick.cur",
"cursors/repair.cur",
"cursors/hand.cur",
"cursors/flag.cur",
"cursors/dig.ani",
"cursors/gourd.cur",
};
// GFX resource
private static readonly string[] l_aGFXFiles = // use where?
{
"程序联入/角色升级人类.gfx", // RES_GFX_LEVELUP,
"程序联入/角色出现人类.gfx", // RES_GFX_PLAYERAPPEAR,
"被击中/被击中效果.gfx", // RES_GFX_HIT,
"程序联入/指向标.gfx", // RES_GFX_MOVETARGET,
"程序联入/金币效果.gfx", // RES_GFX_ITEMFLASH,
"程序联入/鼠标悬浮.gfx", // RES_GFX_CURSORHOVER,
"程序联入/目标被选中.gfx", // RES_GFX_SELECTED,
"程序联入/海底飘尘.gfx", // RES_GFX_FLOATING_DUST,
"程序联入/人物游动水圈.gfx", // RES_GFX_WATER_WAVE_STILL,
"程序联入/人物游动水波.gfx", // RES_GFX_WATER_WAVE_MOVE,
"程序联入/水中呼吸气泡.gfx", // RES_GFX_AIR_BUBBLE,
"程序联入/水中游动气泡.gfx", // RES_GFX_SWIM_BUBBLE,
"程序联入/白虎变.gfx", // RES_GFX_TRANSFORM_TIGER,
"程序联入/火狐变.gfx", // RES_GFX_TRANSFORM_FOX,
"程序联入/加血.gfx", // RES_GFX_RED_MEDICINE,
"程序联入/加魔.gfx", // RES_GFX_BLUE_MEDICINE,
"程序联入/加血加魔.gfx", // RES_GFX_PURPLE_MEDICINE,
"程序联入/解毒.gfx", // RES_GFX_JIEDU_MEDICINE,
"程序联入/物防符释放.gfx", // RES_GFX_PHYSIC_ARMORRUNE,
"程序联入/法防符释放.gfx", // RES_GFX_MAGIC_ARMORRUNE,
"程序联入/决斗状态.gfx", // RES_GFX_INDUEL,
"程序联入/控制投石车红.gfx", // RES_GFX_TANKLEADER_RED,
"程序联入/控制投石车蓝.gfx", // RES_GFX_TANKLEADER_BLUE,
"怪物/宠物通用/精灵升级.gfx",// RES_GFX_GOBLIN_LEVELUP,
"程序联入/角色升级人类.gfx", // RES_GFX_INVISIBLE_DETECTED
"策划联入/状态效果/黑色连线.gfx", // RES_GFX_MONSTER_SPIRIT_LINE
"程序联入/光球特效_子效果01.gfx", // RES_GFX_MONSTER_SPIRIT_BALL
"人物/通用/其它/境界提升.gfx",
"策划联入/状态效果/斗气%d级.gfx",
};
public static string res_GFXFile(int n)
{
if (n < 0 || n >= l_aGFXFiles.Length)
{
BMLogger.LogError("Dat: res_GFXFile is out of range");
return null;
}
return l_aGFXFiles[n];
}
}
// Cursor resource
enum CursorResourceType
{
RES_CUR_NORMAL = 0,
RES_CUR_ATTACK,
RES_CUR_TALK,
RES_CUR_PICKUP,
RES_CUR_REPAIR,
RES_CUR_HAND,
RES_CUR_FLAG,
RES_CUR_DIG,
RES_CUR_SWALLOW,
NUM_RES_CURSOR,
}
// GFX resource
enum GfxResourceType
{
RES_GFX_LEVELUP = 0,
RES_GFX_PLAYERAPPEAR,
RES_GFX_HIT,
RES_GFX_MOVETARGET,
RES_GFX_ITEMFLASH,
RES_GFX_CURSORHOVER,
RES_GFX_SELECTED,
RES_GFX_FLOATING_DUST,
RES_GFX_WATER_WAVE_STILL,
RES_GFX_WATER_WAVE_MOVE,
RES_GFX_AIR_BUBBLE,
RES_GFX_SWIM_BUBBLE,
RES_GFX_TRANSFORM_TIGER,
RES_GFX_TRANSFORM_FOX,
RES_GFX_RED_MEDICINE,
RES_GFX_BLUE_MEDICINE,
RES_GFX_PURPLE_MEDICINE,
RES_GFX_JIEDU_MEDICINE,
RES_GFX_PHYSIC_ARMORRUNE,
RES_GFX_MAGIC_ARMORRUNE,
RES_GFX_INDUEL,
RES_GFX_TANKLEADER_RED,
RES_GFX_TANKLEADER_BLUE,
RES_GFX_GOBLIN_LEVELUP,
RES_GFX_INVISIBLE_DETECTED,
RES_GFX_MONSTER_SPIRIT_LINE,
RES_GFX_MONSTER_SPIRIT_BALL,
RES_GFX_REALM_LEVELUP,
RES_GFX_BATTLEFURY,
NUM_RES_GFX,
};
// Sound resource
// Texture resource
// Shader resource
enum ShaderResourceType
{
RES_SHD_HAIR = 0,
RES_SHD_GOATEE,
RES_SHD_FACE,
RES_SHD_EYE,
RES_SHD_BROW,
RES_SHD_MOUTH, // 5
RES_SHD_NOSE,
RES_SHD_EYEBALL,
RES_SHD_MOUSTACHE,
RES_SHD_BODY,
NUM_RES_SHADER, // 10
};
// Icon resource
enum IconResourceType
{
RES_ICON_CMD_SITDOWN = 0,
RES_ICON_CMD_WALKRUN,
RES_ICON_CMD_NORMALATTACK,
RES_ICON_CMD_FINDTARGET,
RES_ICON_CMD_ASSISTATTACK,
RES_ICON_CMD_INVITETOTEAM, // 5
RES_ICON_CMD_LEAVETEAM,
RES_ICON_CMD_KICKTEAMMEM,
RES_ICON_CMD_FINDTEAM,
RES_ICON_CMD_STARTTRADE,
RES_ICON_CMD_SELLBOOTH, // 10
RES_ICON_CMD_BUYBOOTH,
RES_ICON_CMD_INVITETOFACTION,
RES_ICON_CMD_FLY,
RES_ICON_CMD_EXP_WAVE,
RES_ICON_CMD_EXP_NOD, // 15
RES_ICON_CMD_EXP_SHAKEHEAD,
RES_ICON_CMD_EXP_SHRUG,
RES_ICON_CMD_EXP_LAUGH,
RES_ICON_CMD_EXP_ANGRY,
RES_ICON_CMD_EXP_STUN, // 20
RES_ICON_CMD_EXP_DEPRESSED,
RES_ICON_CMD_EXP_KISSHAND,
RES_ICON_CMD_EXP_SHY,
RES_ICON_CMD_EXP_SALUTE,
RES_ICON_CMD_EXP_SITDOWN, // 25
RES_ICON_CMD_EXP_ASSAULT,
RES_ICON_CMD_EXP_THINK,
RES_ICON_CMD_EXP_DEFIANCE,
RES_ICON_CMD_EXP_VICTORY,
RES_ICON_CMD_EXP_GAPE, // 30
RES_ICON_CMD_EXP_KISS,
RES_ICON_CMD_EXP_FIGHT,
RES_ICON_CMD_EXP_ATTACK1,
RES_ICON_CMD_EXP_ATTACK2,
RES_ICON_CMD_EXP_ATTACK3, // 35
RES_ICON_CMD_EXP_ATTACK4,
RES_ICON_CMD_EXP_DEFENCE,
RES_ICON_CMD_EXP_FALL,
RES_ICON_CMD_EXP_FALLONGROUND,
RES_ICON_CMD_EXP_LOOKAROUND, // 40
RES_ICON_CMD_EXP_DANCE,
RES_ICON_CMD_EXP_FASHIONWEAPON,
RES_ICON_CMD_PICKUP,
RES_ICON_CMD_GATHER,
RES_ICON_CMD_RUSHFLY,
RES_ICON_CMD_BINDBUDDY,
RES_ICON_CMD_TWOKISS, // Ç×Ç×ÃÜÃÜ
RES_ICON_CMD_JUMPTRICK,
RES_ICON_CMD_RUNTRICK,
NUM_RES_ICON,
};
// Model resource
enum ModelResourceType
{
RES_MOD_GOLD = 0,
RES_MOD_TEMP,
RES_MOD_WARRIOR_M,
RES_MOD_WARRIOR_F,
RES_MOD_MAGE_M,
RES_MOD_MAGE_F,
RES_MOD_MONK_M,
RES_MOD_MONK_F,
RES_MOD_HAG_M,
RES_MOD_HAG_F,
RES_MOD_ORC_M,
RES_MOD_ORC_F,
RES_MOD_GHOST_M,
RES_MOD_GHOST_F,
RES_MOD_ARCHOR_M,
RES_MOD_ARCHOR_F,
RES_MOD_ANGEL_M,
RES_MOD_ANGEL_F,
RES_MOD_JIANLING_M,
RES_MOD_JIANLING_F,
RES_MOD_MEILING_M,
RES_MOD_MEILING_F,
RES_MOD_ORC_TIGER,
RES_MOD_ORC_FOX,
RES_MOD_SHADOW_FISH_M,
RES_MOD_SHADOW_FISH_F,
RES_MOD_MONEYFROG,
RES_MOD_WEDDING_KID_M,
RES_MOD_WEDDING_KID_F,
RES_MOD_SOLDIER,
RES_MOD_TREEBIRD,
RES_MOD_EVIL_TIGER,
RES_MOD_RED_SQUIRREL,
RES_MOD_LAND_TURTLE,
RES_MOD_BRIDE_COUSIN,
RES_MOD_SENTRY_PUPPET,
RES_MOD_PENGUIN_KING,
RES_MOD_PENGUIN_QUEEN,
RES_MOD_SNOW_RABBIT,
RES_MOD_TEDDY_BEAR,
RES_MOD_RED_SQUIRREL_BIG,
RES_MOD_TREEBIRD_BIG,
RES_MOD_SENTRY_ANGRY,
RES_MOD_SENTRY_DEPRESSED,
RES_MOD_SENTRY_LOST,
RES_MOD_SNOW_RABBIT_BLAZE,
RES_MOD_DRAGON,
RES_MOD_ORC_PANDER,
RES_MOD_ORC_FOX2,
RES_MOD_DEFAULT_BOOTH_M,
RES_MOD_DEFAULT_BOOTH_F,
RES_MOD_YEYING_M,
RES_MOD_YEYING_F,
RES_MOD_YUEXIAN_M,
RES_MOD_YUEXIAN_F,
RES_MOD_YEYING_RESHAPE_M,
RES_MOD_YEYING_RESHAPE_F,
RES_MOD_YUEXIAN_RESHAPE_M,
RES_MOD_YUEXIAN_RESHAPE_F,
NUM_RES_MODEL,
};
// model file for change shape 2
enum ResourceModelType
{
RES_MOD_CHANGESAHPE_NULL, // 0
RES_MOD_CHARIOT_1,
RES_MOD_CHARIOT_2,
RES_MOD_CHARIOT_3,
RES_MOD_CHARIOT_4,
RES_MOD_CHARIOT_5, //5
RES_MOD_CHARIOT_6,
RES_MOD_CHARIOT_7,
RES_MOD_CHARIOT_8,
RES_MOD_CHARIOT_9,
RES_MOD_DEPRESSEC_AGED_PERSION, //10
RES_MOD_RED_BEAR,
RES_MOD_PONYCAR,
RES_MOD_SNOWMAN,
RES_MOD_CHANGESAHPE_MONEY_FROG = 26,
RES_MOD_CHANGESAHPE_USED = 52, // 26-52 Òѱ»Ê¹ÓÃ
RES_MOD_FORCHANGESAHPE_NUM,
};
// Some unicode string resources
enum UnicodeStringResourceType
{
RES_FONT_TITLE = 0,
RES_FONT_DAMAGE,
NUM_RES_FONT,
};
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 47d8b4297c6ec224d9d91a7d6ccf1146