refactor(RespawnEquipment): 优化复活装备配置逻辑并更新文档
重构了CustomRevivalSuitCfg类的配置逻辑,支持小队和单人玩家的装备配置,同时更新了README.md文档以反映新的功能和使用说明。移除了不再使用的RemovePlayerRevivalEquipmentData方法,并修复了PlayerRevivalEquipmentData类的初始化逻辑。
This commit is contained in:
@@ -6,24 +6,51 @@
|
||||
|
||||
在init.c中.通常都是将大堆的代码直接带入到文件中, 导致init.c中的代码臃肿不堪,难以维护,对于此种情况,请参考本代码示例, 正确的处理在init.c中的代码逻辑
|
||||
|
||||
擅于使用 #include 标签来引入外部的.c文件, 将一些方法封装成一个类,进行调用, 而不是所有的代码都插入到init.c中. 参阅Scripts文件夹中的代码, 已经init.c的第一行.
|
||||
擅于使用 #include 标签来引入外部的.c文件, 将一些方法封装成一个类,进行调用, 而不是所有的代码都插入到init.c中. 参阅Scripts文件夹中的代码, 以及init.c的第一行.
|
||||
|
||||
#### 代码的功能:
|
||||
|
||||
代码编写了一个服主常用的功能, 给指定ID的玩家创建一套复活时穿戴的装备, 支持枪械配件的组装.
|
||||
代码编写了一个服主常用的功能, 给~~指定ID的~~单人或者小队玩家创建一套复活时穿戴的装备, 支持枪械配件的组装.
|
||||
|
||||
注意:JSON文件会自动生成在Profile目录下, `\DcrServerModCfg\CustomRevivalSuitCfg\CustomRevivalSuitCfg.json`
|
||||
不要复制此处的配置.
|
||||
```json
|
||||
{
|
||||
"PlayerRevivalEquipmentDataList": [
|
||||
{
|
||||
// 队伍的名字, 方便识别
|
||||
"TeamName": "暗夜",
|
||||
//队伍成员列表, 只填写17位SteamID
|
||||
"TeamMembers": [
|
||||
"76561198422667486"
|
||||
],
|
||||
// 小队装备, 这些装备会刷新在玩家的插槽中.
|
||||
"Equipments": [
|
||||
"WoolGloves_White",
|
||||
"BaseballCap_Black",
|
||||
"Jeans_Blue",
|
||||
"Wellies_Black",
|
||||
"TShirt_Black"
|
||||
],
|
||||
// 小队的额外物品, VIP玩家除了会得到系统默认的物品外,还会得到这里的物品
|
||||
"ItemList": [
|
||||
"Apple"
|
||||
],
|
||||
// 小队成员默认的出生武器, 只能配置一把枪械.
|
||||
"WeaponData": {
|
||||
// 枪械的代码
|
||||
"WeaponName": "FAL",
|
||||
"Desc": "武器配件中,一级配件(比如枪托,弹夹)放在前排,二级配件(比如电池)其次 以此类推",
|
||||
"WeaponComponents": [
|
||||
"Fal_FoldingBttstck",
|
||||
"Mag_FAL_20Rnd"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### 如何使用:
|
||||
将Scripts文件夹和init.c文件一同放置到你的任务文件中, 如果自己的init.c有其他编写的代码, 请插入到现在的init.c中.
|
||||
启动服务端后, 会在你的Profile目录下创建配置文件, 请自行通过配置给不同的玩家创建出生装备.
|
||||
|
||||
#### 可行的尝试:
|
||||
|
||||
对于懂代码的服主,可以尝试自行修改代码,实现一些额外的功能.
|
||||
|
||||
- 玩家进入游戏时的状态处理
|
||||
|
||||
- 玩家退出游戏时的物品处理
|
||||
|
||||
- 利用invoke进行实时的监控玩家.
|
||||
|
||||
- 监控客户端的RPC通讯
|
||||
启动服务端后, 会在你的Profile目录下创建配置文件, 请自行通过配置给不同的玩家创建出生装备.
|
||||
@@ -2,7 +2,7 @@
|
||||
* @file config.c
|
||||
* @author 稻草人
|
||||
* @version 1.0
|
||||
* @date 2025-00-01
|
||||
* @date 2025-02-12
|
||||
* @copyright Copyright (c) 2025
|
||||
*
|
||||
* @brief This file contains the configuration for the custom revival suit feature.
|
||||
@@ -20,9 +20,10 @@ static ref CustomRevivalSuitCfg GetCustomRevivalSuitCfg()
|
||||
|
||||
class CustomRevivalSuitCfg
|
||||
{
|
||||
protected static string profileDir = "$profile:DcrServerModCfg\\CustomRevivalSuitCfg";
|
||||
protected static string profileName = "\\CustomRevivalSuitCfg.json";
|
||||
protected static string profilePath = profileDir + profileName;
|
||||
string profileDir = "$profile:DcrServerModCfg\\CustomRevivalSuitCfg";
|
||||
string profileName = "\\CustomRevivalSuitCfg.json";
|
||||
string profilePath = profileDir + profileName;
|
||||
string desc = "上面的变量不要修改, 由于1.27的更新,导致上述变量在外部.c文件中无法被引用";
|
||||
|
||||
ref array< ref PlayerRevivalEquipmentData > PlayerRevivalEquipmentDataList;
|
||||
|
||||
@@ -52,28 +53,22 @@ class CustomRevivalSuitCfg
|
||||
ref PlayerRevivalEquipmentData GetPlayerRevivalEquipmentData( string steamid )
|
||||
{
|
||||
foreach ( ref PlayerRevivalEquipmentData playerData : PlayerRevivalEquipmentDataList )
|
||||
if ( playerData.SteamId == steamid )
|
||||
{
|
||||
if ( !playerData ) continue;
|
||||
ref TStringArray TeamMembers = playerData.TeamMembers;
|
||||
if ( TeamMembers && TeamMembers.Find( steamid ) > -1 )
|
||||
return playerData;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void RemovePlayerRevivalEquipmentData( string steamid )
|
||||
{
|
||||
foreach ( ref PlayerRevivalEquipmentData playerData : PlayerRevivalEquipmentDataList )
|
||||
{
|
||||
if ( playerData.SteamId == steamid )
|
||||
{
|
||||
PlayerRevivalEquipmentDataList.RemoveItem( playerData );
|
||||
SaveConfig()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class PlayerRevivalEquipmentData
|
||||
{
|
||||
string SteamId;
|
||||
// string SteamId;
|
||||
string TeamName;
|
||||
ref TStringArray TeamMembers; // 兼容个人和队伍,单人玩家 == 单人队伍
|
||||
|
||||
ref TStringArray Equipments;
|
||||
ref TStringArray ItemList;
|
||||
@@ -81,7 +76,11 @@ class PlayerRevivalEquipmentData
|
||||
|
||||
void PlayerRevivalEquipmentData( string steamid )
|
||||
{
|
||||
SteamId = steamid;
|
||||
// SteamId = steamid;
|
||||
TeamName = "小队名字";
|
||||
TeamMembers = new TStringArray();
|
||||
TeamMembers.Insert( steamid );
|
||||
|
||||
Equipments = { "WoolGloves_White", "BaseballCap_Black",
|
||||
"Jeans_Blue", "Wellies_Black", "TShirt_Black"
|
||||
};
|
||||
|
||||
@@ -2,12 +2,10 @@
|
||||
|
||||
void main()
|
||||
{
|
||||
//INIT ECONOMY--------------------------------------
|
||||
Hive ce = CreateHive();
|
||||
if ( ce )
|
||||
ce.InitOffline();
|
||||
|
||||
//DATE RESET AFTER ECONOMY INIT-------------------------
|
||||
int year, month, day, hour, minute;
|
||||
int reset_month = 9, reset_day = 20;
|
||||
GetGame().GetWorld().GetDate(year, month, day, hour, minute);
|
||||
@@ -34,6 +32,10 @@ void main()
|
||||
|
||||
class CustomMission: MissionServer
|
||||
{
|
||||
//------------------------------------------------------------------
|
||||
// 初始化方法:在服务器启动时调用
|
||||
// 功能:加载复活套装配置并打印加载状态
|
||||
//------------------------------------------------------------------
|
||||
override void OnInit()
|
||||
{
|
||||
super.OnInit();
|
||||
@@ -42,7 +44,15 @@ class CustomMission: MissionServer
|
||||
if ( g_CustomRevivalSuitCfg )
|
||||
Print( "[复活套装]: 已加载" );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// 创建角色方法:在玩家首次加入或重生时调用
|
||||
// 参数:
|
||||
// identity - 玩家身份信息
|
||||
// pos - 出生位置
|
||||
// ctx - 上下文参数
|
||||
// characterName - 角色名称
|
||||
// 返回:PlayerBase - 创建的角色对象
|
||||
//------------------------------------------------------------------
|
||||
override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
|
||||
{
|
||||
Entity playerEnt;
|
||||
@@ -53,7 +63,15 @@ class CustomMission: MissionServer
|
||||
|
||||
return m_player;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// 初始装备设置方法:在玩家重生时调用
|
||||
// 功能:根据玩家身份加载VIP装备,并设置默认装备, 如果玩家不是VIP,则使用
|
||||
// 默认的系统装备, 注意如果你要添加非VIP玩家的装备,
|
||||
// 请在 DefaultPlayerEquipment 方法中添加.
|
||||
// 参数:
|
||||
// player - 玩家对象
|
||||
// clothesChosen - 是否已选择服装
|
||||
//------------------------------------------------------------------
|
||||
override void StartingEquipSetup( PlayerBase player, bool clothesChosen )
|
||||
{
|
||||
GetCustomRevivalSuitCfg();
|
||||
@@ -69,7 +87,13 @@ class CustomMission: MissionServer
|
||||
}
|
||||
DefaultPlayerEquipment( player, clothesChosen, isVIP );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// 处理VIP装备方法:为VIP玩家设置自定义装备
|
||||
// 参数:
|
||||
// player - 玩家对象
|
||||
// equ_data - VIP装备数据
|
||||
// VIP玩家的出生装备处理方法, 这里根据josn配置的来生成, 不懂,请勿改动
|
||||
//------------------------------------------------------------------
|
||||
void ProcessVIPEquipment( PlayerBase player, ref PlayerRevivalEquipmentData equ_data )
|
||||
{
|
||||
if ( !equ_data ) return;
|
||||
@@ -102,7 +126,11 @@ class CustomMission: MissionServer
|
||||
ItemBase.Cast( weapon.GetInventory().CreateInInventory( attachment ) );
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// 设置随机健康值方法:为物品设置随机的健康值
|
||||
// 参数:
|
||||
// itemEnt - 物品实体
|
||||
//------------------------------------------------------------------
|
||||
void SetRandomHealth(EntityAI itemEnt)
|
||||
{
|
||||
if (itemEnt)
|
||||
@@ -111,7 +139,14 @@ class CustomMission: MissionServer
|
||||
itemEnt.SetHealth01( "", "", rndHlt );
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// 默认装备设置方法:为玩家设置默认的初始装备
|
||||
// 参数:
|
||||
// player - 玩家对象
|
||||
// clothesChosen - 是否已选择服装
|
||||
// isVIP - 是否为VIP玩家
|
||||
// 这里的代码是原版init.c中 StartingEquipSetup 方法中的内容, 只是换了个方法名字
|
||||
//------------------------------------------------------------------
|
||||
void DefaultPlayerEquipment( PlayerBase player, bool clothesChosen, bool isVIP )
|
||||
{
|
||||
EntityAI itemClothing;
|
||||
|
||||
Reference in New Issue
Block a user