跳到主要内容

SetPlayerSkin

描述

设置玩家的皮肤。玩家的皮肤即其角色模型。

参数名说明
playerid需要设置皮肤的玩家 ID
skinid要使用的皮肤 ID

返回值

true - 函数执行成功

false - 函数执行失败(通常表示指定玩家不存在)

注意:即使使用无效皮肤 ID(非 0-311 或 74 号皮肤),也会返回"成功",此时皮肤会被强制设为 0 号(CJ 默认模型)。

示例代码

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmdtext, "/fireman", true) == 0)
{
// 将玩家皮肤设置为ID 277(消防员模型)
SetPlayerSkin(playerid, 277);
return 1;
}
return 0;
}

SetPlayerSkinFix(playerid, skinid)
{
if (!IsPlayerConnected(playerid))
{
return 0;
}

// 过滤无效皮肤ID(0-311范围外或74号无效皮肤)
if (0 > skinid > 311 || skinid == 74)
{
return 0;
}

new
Float:tmpPos[4],
vehicleid = GetPlayerVehicleID(playerid),
seatid = GetPlayerVehicleSeat(playerid);

GetPlayerPos(playerid, tmpPos[0], tmpPos[1], tmpPos[2]);
GetPlayerFacingAngle(playerid, tmpPos[3]);

if (GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_DUCK)
{
SetPlayerPos(playerid, tmpPos[0], tmpPos[1], tmpPos[2]);
SetPlayerFacingAngle(playerid, tmpPos[3]);
TogglePlayerControllable(playerid, true); // 防止角色冻结(可选)
return SetPlayerSkin(playerid, skinid);
}
else if (IsPlayerInAnyVehicle(playerid))
{
new
tmp;

RemovePlayerFromVehicle(playerid);
SetPlayerPos(playerid, tmpPos[0], tmpPos[1], tmpPos[2]);
SetPlayerFacingAngle(playerid, tmpPos[3]);
TogglePlayerControllable(playerid, true); // 必须解除控制,防止上下车动画导致冻结
tmp = SetPlayerSkin(playerid, skinid);
PutPlayerInVehicle(playerid, vehicleid, (seatid == 128) ? 0 : seatid);
return tmp;
}
else
{
return SetPlayerSkin(playerid, skinid);
}
}

注意事项

注意

已知问题:

  • 当玩家处于下蹲、车辆内或特定动画状态时切换皮肤会导致角色冻结/异常,可通过TogglePlayerControllable解除
  • 使用GetPlayerSpecialAction检测 SPECIAL_ACTION_DUCK 状态可判断玩家是否下蹲
  • 玩家在车辆内切换皮肤可能导致周围玩家客户端崩溃
  • 玩家死亡时切换皮肤可能引发周围玩家崩溃
  • 会中断自行车乘坐状态

相关函数

相关资源