Skip to content

Commit cb372d3

Browse files
PencilMarioclaude
andcommitted
fix: 修复CheatCommand缺少目标用户的问题
- 修改CheatCommand函数,添加可选的target参数 - 当指定target时,让该目标玩家执行命令 - 当未指定target或target无效时,使用默认行为(找第一个有效玩家) - 在GiveAmmoToAllSurvivors中为每个生还者指定其自己作为target - 这样每个生还者都能正确地为自己补充弹药 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
1 parent 52bda38 commit cb372d3

1 file changed

Lines changed: 25 additions & 13 deletions

File tree

‎addons/sourcemod/scripting/l4d_tankfight.sp‎

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,7 @@ int ProcessPredictModel(float vPos[3], float vAng[3])
10041004
*/
10051005
void SpawnPainPillsAtPosition(const float vPos[3], const float vAng[3])
10061006
{
1007-
int entity = CreateEntityByName("item_pain_pills");
1007+
int entity = CreateEntityByName("weapon_pain_pills");
10081008
if (entity == -1) return;
10091009

10101010
DispatchSpawn(entity);
@@ -1020,7 +1020,7 @@ void GiveAmmoToAllSurvivors()
10201020
{
10211021
if (IsClientInGame(i) && IsSurvivor(i) && IsPlayerAlive(i))
10221022
{
1023-
CheatCommand("give", "ammo");
1023+
CheatCommand("give", "ammo", i);
10241024
}
10251025
}
10261026
}
@@ -1159,20 +1159,32 @@ int PickTankVariant()
11591159
return 2;
11601160
}
11611161

1162-
void CheatCommand(const char[] sCmd, const char[] sArgs = "")
1162+
void CheatCommand(const char[] sCmd, const char[] sArgs = "", int target = 0)
11631163
{
1164-
for (int i = 1; i< MaxClients + 1; i++){
1165-
if (IsClientInGame(i) && !IsFakeClient(i)){
1166-
int admindata = GetUserFlagBits(i);
1167-
SetUserFlagBits(i, ADMFLAG_ROOT);
1168-
int iFlags = GetCommandFlags(sCmd);
1169-
SetCommandFlags(sCmd, iFlags & ~FCVAR_CHEAT);
1170-
FakeClientCommand(i, "%s %s", sCmd, sArgs);
1171-
SetCommandFlags(sCmd, iFlags);
1172-
SetUserFlagBits(i, admindata);
1173-
break;
1164+
int client = target;
1165+
1166+
// 如果没有指定target或target无效,找到第一个有效的玩家(默认行为)
1167+
if (!client || !IsClientInGame(client) || IsFakeClient(client))
1168+
{
1169+
for (int i = 1; i <= MaxClients; i++)
1170+
{
1171+
if (IsClientInGame(i) && !IsFakeClient(i))
1172+
{
1173+
client = i;
1174+
break;
1175+
}
11741176
}
11751177
}
1178+
1179+
if (!client) return;
1180+
1181+
int admindata = GetUserFlagBits(client);
1182+
SetUserFlagBits(client, ADMFLAG_ROOT);
1183+
int iFlags = GetCommandFlags(sCmd);
1184+
SetCommandFlags(sCmd, iFlags & ~FCVAR_CHEAT);
1185+
FakeClientCommand(client, "%s %s", sCmd, sArgs);
1186+
SetCommandFlags(sCmd, iFlags);
1187+
SetUserFlagBits(client, admindata);
11761188
}
11771189
void TeleportAllSurvivorToPercentFlow(float TargetPercent)
11781190
{

0 commit comments

Comments
 (0)