Skip to content

Commit 9ce3dfa

Browse files
committed
fix: fix issues
1 parent 6230823 commit 9ce3dfa

File tree

7 files changed

+59
-24
lines changed

7 files changed

+59
-24
lines changed

Config.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ public class ModelConfig : BasePluginConfig
7676
[JsonPropertyName("ModelChangeCooldownSecond")] public float ModelChangeCooldownSecond { get; set; } = 0f;
7777
[JsonPropertyName("Inspection")] public InspectionConfig Inspection { get; set; } = new InspectionConfig();
7878

79+
[JsonPropertyName("BasicPermission")] public string BasicPermission { get; set; } = "";
80+
[JsonPropertyName("DisableDefaultModelLeg")] public bool DisableDefaultModelLeg { get; set; } = false;
7981
[JsonPropertyName("DisableInstantChange")] public bool DisableInstantChange { get; set; } = false;
8082
[JsonPropertyName("DisablePrecache")] public bool DisablePrecache { get; set; } = false;
8183
[JsonPropertyName("DisableRandomModel")] public bool DisableRandomModel { get; set; } = false;

PlayerModelChanger.cs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace PlayerModelChanger;
1313
public partial class PlayerModelChanger : BasePlugin, IPluginConfig<ModelConfig>
1414
{
1515
public override string ModuleName => "Player Model Changer";
16-
public override string ModuleVersion => "1.8.5";
16+
public override string ModuleVersion => "1.8.6";
1717

1818
public override string ModuleAuthor => "samyyc";
1919
public required ModelConfig Config { get; set; }
@@ -38,7 +38,8 @@ public override void Load(bool hotReload)
3838
case "mysql":
3939
Storage = new MySQLStorage(Config.MySQLIP, Config.MySQLPort, Config.MySQLUser, Config.MySQLPassword, Config.MySQLDatabase, Config.MySQLTable);
4040
break;
41-
};
41+
}
42+
;
4243
if (Storage == null)
4344
{
4445
throw new Exception("[PlayerModelChanger] Failed to initialize storage. Please check your config");
@@ -220,10 +221,7 @@ public HookResult OnPlayerSpawnEvent(EventPlayerSpawn @event, GameEventInfo info
220221
}
221222
if (botmodel != null)
222223
{
223-
AddTimer(0.03f, () =>
224-
{
225-
SetModelNextServerFrame(player, botmodel, botmodel.Disableleg);
226-
});
224+
SetModelNextServerFrame(player, botmodel, botmodel.Disableleg);
227225
}
228226
else
229227
{
@@ -274,27 +272,25 @@ public HookResult OnPlayerSpawnEvent(EventPlayerSpawn @event, GameEventInfo info
274272
}
275273
}
276274

277-
AddTimer(0.03f, () =>
275+
Server.NextFrame(() =>
278276
{
277+
if (!Service.MapDefaultModelInitialized(player))
278+
{
279+
Service.SetMapDefaultModel(player, player.PlayerPawn.Value.CBodyComponent!.SceneNode!.GetSkeletonInstance().ModelState.ModelName);
280+
}
279281
Server.NextFrame(() =>
280282
{
281-
if (!Service.MapDefaultModelInitialized(player))
283+
var model = Service.GetPlayerNowTeamModel(player);
284+
if (model != null)
282285
{
283-
Service.SetMapDefaultModel(player, player.PlayerPawn.Value.CBodyComponent!.SceneNode!.GetSkeletonInstance().ModelState.ModelName);
286+
SetModelNextServerFrame(player, model, model.Disableleg);
284287
}
285-
Server.NextFrame(() =>
288+
else
286289
{
287-
var model = Service.GetPlayerNowTeamModel(player);
288-
if (model != null)
289-
{
290-
SetModelNextServerFrame(player, model, model.Disableleg);
291-
}
292-
else
293-
{
294-
var originalRender = player.PlayerPawn.Value.Render;
295-
player.PlayerPawn.Value.Render = Color.FromArgb(255, originalRender.R, originalRender.G, originalRender.B);
296-
}
297-
});
290+
var originalRender = player.PlayerPawn.Value.Render;
291+
player.PlayerPawn.Value.Render = Color.FromArgb(Config.DisableDefaultModelLeg ? 254 : 255, originalRender.R, originalRender.G, originalRender.B);
292+
Utilities.SetStateChanged(player.PlayerPawn.Value, "CBaseModelEntity", "m_clrRender");
293+
}
298294
});
299295
});
300296
}
@@ -311,19 +307,23 @@ public Task SetModelNextServerFrame(CCSPlayerController player, Model? model, bo
311307
return Server.NextFrameAsync(() =>
312308
{
313309
var pawn = player.Pawn.Value!;
310+
var originalRender = pawn.Render;
314311
if (model == null)
315312
{
316313
var defaultModel = Service.GetMapDefaultModel(player);
317314
if (defaultModel != null)
318315
{
319316
pawn.SetModel(defaultModel);
317+
320318
}
319+
pawn.Render = Color.FromArgb(Config.DisableDefaultModelLeg ? 254 : 255, originalRender.R, originalRender.G, originalRender.B);
320+
Utilities.SetStateChanged(pawn, "CBaseModelEntity", "m_clrRender");
321+
321322
return;
322323
}
323324
pawn.SetModel(model.Path);
324-
var originalRender = pawn.Render;
325325
pawn.Render = Color.FromArgb(disableleg ? 254 : 255, originalRender.R, originalRender.G, originalRender.B);
326-
326+
Utilities.SetStateChanged(pawn, "CBaseModelEntity", "m_clrRender");
327327

328328
ulong meshgroupmask = pawn.CBodyComponent.SceneNode.GetSkeletonInstance().ModelState.MeshGroupMask;
329329
if (Service.InitMeshgroupPreference(player, model, meshgroupmask))

Service.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public void SetPlayerModel(ulong steamid, string? modelIndex, Side side, bool pe
100100
if (Utils.CanPlayerSetModelInstantly(player, side))
101101
{
102102
var model = GetPlayerModel(player, side);
103-
Utils.InstantUpdatePlayer(player, model, _Config.Inspection.Enable && modelIndex != "@random");
103+
Utils.InstantUpdatePlayer(player, model, _Config.Inspection.Enable);
104104
}
105105
}
106106
}

Utils.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,20 @@ public static void ExecuteSide(Side? side, Action? whenAll, Action whenT, Action
2424
action();
2525
}
2626

27+
public static bool PlayerHasBasicPermission(CCSPlayerController player)
28+
{
29+
var basicPermission = PlayerModelChanger.getInstance().Config.BasicPermission;
30+
if (basicPermission == "")
31+
{
32+
return true;
33+
}
34+
if (PlayerHasPermission(player, [basicPermission], []))
35+
{
36+
return true;
37+
}
38+
return false;
39+
}
40+
2741
public static bool PlayerHasPermission(CCSPlayerController player, string[] permissions, string[] permissionsOr)
2842
{
2943

512 Bytes
Binary file not shown.
272 Bytes
Binary file not shown.

commands/PlayerCommand.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ public void ChangeModelCommand(CCSPlayerController player, CommandInfo commandIn
2828
{
2929
return;
3030
}
31+
if (!Utils.PlayerHasBasicPermission(player))
32+
{
33+
commandInfo.ReplyToCommand(Localizer["model.nochangepermission"]);
34+
return;
35+
}
3136

3237
var modelIndex = commandInfo.GetArg(1);
3338

@@ -75,6 +80,11 @@ public void GetAllModelsCommand(CCSPlayerController player, CommandInfo commandI
7580
{
7681
return;
7782
}
83+
if (!Utils.PlayerHasBasicPermission(player))
84+
{
85+
commandInfo.ReplyToCommand(Localizer["model.nochangepermission"]);
86+
return;
87+
}
7888
if (commandInfo.ArgCount == 1)
7989
{
8090
OpenSelectSideMenu(player);
@@ -96,6 +106,15 @@ public void GetAllModelsCommand(CCSPlayerController player, CommandInfo commandI
96106
[CommandHelper(minArgs: 0, usage: "", whoCanExecute: CommandUsage.CLIENT_ONLY)]
97107
public void MeshgroupCommand(CCSPlayerController player, CommandInfo commandInfo)
98108
{
109+
if (Config.DisablePlayerSelection)
110+
{
111+
return;
112+
}
113+
if (!Utils.PlayerHasBasicPermission(player))
114+
{
115+
commandInfo.ReplyToCommand(Localizer["model.nochangepermission"]);
116+
return;
117+
}
99118
OpenSelectMeshgroupMenu(player);
100119
}
101120
}

0 commit comments

Comments
 (0)