Compare commits

...

8 Commits

Author SHA1 Message Date
Dawid Bepierszcz
a633873980 Update WeaponPaints.cs 2025-09-17 20:11:30 +02:00
Dawid Bepierszcz
d7af2fea89 Merge pull request #440 from stefanx111/fix-bugs
fix knife, gloves, keychain seed
2025-09-17 20:10:42 +02:00
stefanx111
5b43b2daef fix weapon name in menu for M4A4 2025-08-11 12:32:50 +03:00
stefanx111
23cd692032 revert IncrementWearForWeaponWithStickers 2025-08-11 10:20:11 +03:00
stefanx111
b801b6592a fix gloves overlapping when change team 2025-08-11 09:59:24 +03:00
stefanx111
be8633f82b fix keychain seed 2025-08-10 20:13:00 +03:00
stefanx111
191773fc5a fix gloves and knives 2025-08-10 20:12:14 +03:00
stefanx111
40e18c9663 we don't need IncrementWearForWeaponWithStickers anymore 2025-08-06 16:16:23 +03:00
4 changed files with 36 additions and 20 deletions

View File

@@ -13,7 +13,7 @@ namespace WeaponPaints
[GameEventHandler] [GameEventHandler]
public HookResult OnClientFullConnect(EventPlayerConnectFull @event, GameEventInfo info) public HookResult OnClientFullConnect(EventPlayerConnectFull @event, GameEventInfo info)
{ {
CCSPlayerController? player = @event.Userid; CCSPlayerController? player = @event.Userid;
if (player is null || !player.IsValid || player.IsBot || if (player is null || !player.IsValid || player.IsBot ||
@@ -142,7 +142,10 @@ namespace WeaponPaints
GivePlayerMusicKit(player); GivePlayerMusicKit(player);
GivePlayerAgent(player); GivePlayerAgent(player);
GivePlayerGloves(player); Server.NextFrame(() =>
{
GivePlayerGloves(player);
});
GivePlayerPin(player); GivePlayerPin(player);
return HookResult.Continue; return HookResult.Continue;

View File

@@ -25,7 +25,7 @@ public partial class WeaponPaints
{"weapon_g3sg1", "G3SG1"}, {"weapon_g3sg1", "G3SG1"},
{"weapon_galilar", "Galil AR"}, {"weapon_galilar", "Galil AR"},
{"weapon_m249", "M249"}, {"weapon_m249", "M249"},
{"weapon_m4a1", "M4A1"}, {"weapon_m4a1", "M4A4"},
{"weapon_mac10", "MAC-10"}, {"weapon_mac10", "MAC-10"},
{"weapon_p90", "P90"}, {"weapon_p90", "P90"},
{"weapon_mp5sd", "MP5-SD"}, {"weapon_mp5sd", "MP5-SD"},

View File

@@ -37,6 +37,9 @@ namespace WeaponPaints
weapon.AttributeManager.Item.ItemDefinitionIndex = (ushort)newDefIndex.Key; weapon.AttributeManager.Item.ItemDefinitionIndex = (ushort)newDefIndex.Key;
weapon.AttributeManager.Item.EntityQuality = 3; weapon.AttributeManager.Item.EntityQuality = 3;
weapon.AttributeManager.Item.AttributeList.Attributes.RemoveAll();
weapon.AttributeManager.Item.NetworkedDynamicAttributes.Attributes.RemoveAll();
break; break;
} }
default: default:
@@ -96,9 +99,8 @@ namespace WeaponPaints
weapon.AttributeManager.Item.AttributeList.Attributes.RemoveAll(); weapon.AttributeManager.Item.AttributeList.Attributes.RemoveAll();
weapon.AttributeManager.Item.NetworkedDynamicAttributes.Attributes.RemoveAll(); weapon.AttributeManager.Item.NetworkedDynamicAttributes.Attributes.RemoveAll();
weapon.AttributeManager.Item.ItemID = 16384; UpdatePlayerEconItemId(weapon.AttributeManager.Item);
weapon.AttributeManager.Item.ItemIDLow = 16384 & 0xFFFFFFFF;
weapon.AttributeManager.Item.ItemIDHigh = weapon.AttributeManager.Item.ItemIDLow >> 32;
weapon.AttributeManager.Item.CustomName = weaponInfo.Nametag; weapon.AttributeManager.Item.CustomName = weaponInfo.Nametag;
weapon.FallbackPaintKit = weaponInfo.Paint; weapon.FallbackPaintKit = weaponInfo.Paint;
@@ -136,7 +138,7 @@ namespace WeaponPaints
UpdatePlayerWeaponMeshGroupMask(player, weapon, isLegacyModel); UpdatePlayerWeaponMeshGroupMask(player, weapon, isLegacyModel);
} }
// silly method to update sticker when call RefreshWeapons() // silly method to update sticker when call RefreshWeapons()
private void IncrementWearForWeaponWithStickers(CCSPlayerController player, CBasePlayerWeapon weapon) private void IncrementWearForWeaponWithStickers(CCSPlayerController player, CBasePlayerWeapon weapon)
{ {
@@ -170,7 +172,7 @@ namespace WeaponPaints
foreach (var sticker in weaponInfo.Stickers) foreach (var sticker in weaponInfo.Stickers)
{ {
int stickerSlot = weaponInfo.Stickers.IndexOf(sticker); int stickerSlot = weaponInfo.Stickers.IndexOf(sticker);
CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle, CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle,
$"sticker slot {stickerSlot} id", ViewAsFloat(sticker.Id)); $"sticker slot {stickerSlot} id", ViewAsFloat(sticker.Id));
if (sticker.OffsetX != 0 || sticker.OffsetY != 0) if (sticker.OffsetX != 0 || sticker.OffsetY != 0)
@@ -187,7 +189,7 @@ namespace WeaponPaints
CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle, CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle,
$"sticker slot {stickerSlot} rotation", sticker.Rotation); $"sticker slot {stickerSlot} rotation", sticker.Rotation);
} }
if (_temporaryPlayerWeaponWear.TryGetValue(player.Slot, out var playerWear) && if (_temporaryPlayerWeaponWear.TryGetValue(player.Slot, out var playerWear) &&
playerWear.TryGetValue(weaponDefIndex, out float storedWear)) playerWear.TryGetValue(weaponDefIndex, out float storedWear))
{ {
@@ -215,7 +217,7 @@ namespace WeaponPaints
CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle, CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle,
"keychain slot 0 offset z", keyChain.OffsetZ); "keychain slot 0 offset z", keyChain.OffsetZ);
CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle, CAttributeListSetOrAddAttributeValueByName.Invoke(weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle,
"keychain slot 0 seed", keyChain.Seed); "keychain slot 0 seed", ViewAsFloat(keyChain.Seed));
} }
private static void GiveKnifeToPlayer(CCSPlayerController? player) private static void GiveKnifeToPlayer(CCSPlayerController? player)
@@ -378,9 +380,14 @@ namespace WeaponPaints
pawn.SetModel(model); pawn.SetModel(model);
} }
CEconItemView item = pawn.EconGloves;
item.NetworkedDynamicAttributes.Attributes.RemoveAll();
item.AttributeList.Attributes.RemoveAll();
Instance.AddTimer(0.08f, () => Instance.AddTimer(0.08f, () =>
{ {
CEconItemView item = pawn.EconGloves;
try try
{ {
if (!player.IsValid) if (!player.IsValid)
@@ -396,13 +403,19 @@ namespace WeaponPaints
return; return;
item.ItemDefinitionIndex = gloveId; item.ItemDefinitionIndex = gloveId;
item.ItemIDLow = 16384 & 0xFFFFFFFF;
item.ItemIDHigh = 16384; UpdatePlayerEconItemId(item);
item.NetworkedDynamicAttributes.Attributes.RemoveAll();
CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture prefab", weaponInfo.Paint); CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture prefab", weaponInfo.Paint);
CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture seed", weaponInfo.Seed); CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture seed", weaponInfo.Seed);
CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture wear", weaponInfo.Wear); CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture wear", weaponInfo.Wear);
item.AttributeList.Attributes.RemoveAll();
CAttributeListSetOrAddAttributeValueByName.Invoke(item.AttributeList.Handle, "set item texture prefab", weaponInfo.Paint);
CAttributeListSetOrAddAttributeValueByName.Invoke(item.AttributeList.Handle, "set item texture seed", weaponInfo.Seed);
CAttributeListSetOrAddAttributeValueByName.Invoke(item.AttributeList.Handle, "set item texture wear", weaponInfo.Wear);
item.Initialized = true; item.Initialized = true;
SetBodygroup(pawn, "default_gloves", 1); SetBodygroup(pawn, "default_gloves", 1);

View File

@@ -21,11 +21,11 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
public override void Load(bool hotReload) public override void Load(bool hotReload)
{ {
// Hardcoded hotfix needs to be changed later // Hardcoded hotfix needs to be changed later (Not needed 17.09.2025)
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) //if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
Patch.PerformPatch("0F 85 ? ? ? ? 31 C0 B9 ? ? ? ? BA ? ? ? ? 66 0F EF C0 31 F6 31 FF 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 0F 29 45 ? 48 C7 45 ? ? ? ? ? C7 45 ? ? ? ? ? 66 89 45 ? E8 ? ? ? ? 41 89 C5 85 C0 0F 8E", "90 90 90 90 90 90"); // Patch.PerformPatch("0F 85 ? ? ? ? 31 C0 B9 ? ? ? ? BA ? ? ? ? 66 0F EF C0 31 F6 31 FF 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 48 C7 45 ? ? ? ? ? 0F 29 45 ? 48 C7 45 ? ? ? ? ? C7 45 ? ? ? ? ? 66 89 45 ? E8 ? ? ? ? 41 89 C5 85 C0 0F 8E", "90 90 90 90 90 90");
else //else
Patch.PerformPatch("74 ? 48 8D 0D ? ? ? ? FF 15 ? ? ? ? EB ? BA", "EB"); // Patch.PerformPatch("74 ? 48 8D 0D ? ? ? ? FF 15 ? ? ? ? EB ? BA", "EB");
Instance = this; Instance = this;
@@ -140,4 +140,4 @@ public partial class WeaponPaints : BasePlugin, IPluginConfig<WeaponPaintsConfig
throw; throw;
} }
} }
} }