Tests for gloves, knifes and agents (success)
This commit is contained in:
134
skins/skins.cs
134
skins/skins.cs
@@ -16,6 +16,7 @@ class SkinsManager
|
||||
plugin.RegisterListener<Listeners.OnEntitySpawned>((entity) => { OnEntitySpawned(entity); });
|
||||
plugin.RegisterListener<Listeners.OnEntityParentChanged>((entity, parent) => { OnEntityParentChanged(entity, parent); });
|
||||
plugin.RegisterEventHandler<EventItemPickup>(OnItemEquip);
|
||||
plugin.RegisterEventHandler<EventPlayerSpawn>(OnPlayerSpawn);
|
||||
}
|
||||
|
||||
public void OnEntitySpawned(CEntityInstance entity)
|
||||
@@ -27,6 +28,26 @@ class SkinsManager
|
||||
|
||||
}
|
||||
|
||||
private HookResult OnPlayerSpawn(EventPlayerSpawn @event, GameEventInfo info)
|
||||
{
|
||||
var player = @event.Userid;
|
||||
|
||||
if (player == null || !player.IsValid) return HookResult.Continue;
|
||||
|
||||
// On attend la frame suivante pour s'assurer que le moteur du jeu a fini
|
||||
// d'attribuer le corps (Pawn) et l'équipement par défaut au joueur.
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
if (player.IsValid && player.PlayerPawn.IsValid && player.PawnIsAlive)
|
||||
{
|
||||
ApplySportGlovesPandorasBox(player);
|
||||
ApplyAgentSirBloodyMiamiDarryl(player);
|
||||
}
|
||||
});
|
||||
|
||||
return HookResult.Continue;
|
||||
}
|
||||
|
||||
private HookResult OnItemEquip(EventItemPickup @event, GameEventInfo info)
|
||||
{
|
||||
var player = @event.Userid;
|
||||
@@ -54,6 +75,10 @@ class SkinsManager
|
||||
{
|
||||
ApplyAK47Skin1171(weapon, player);
|
||||
}
|
||||
else if (weapon.DesignerName.Contains("knife") || weapon.DesignerName.Contains("bayonet"))
|
||||
{
|
||||
ApplyButterflyKnifeFade(weapon, player);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -88,4 +113,113 @@ class SkinsManager
|
||||
Utilities.SetStateChanged(weapon, "CBaseEntity", "m_nFallbackSeed");
|
||||
Utilities.SetStateChanged(weapon, "CBaseEntity", "m_flFallbackWear");
|
||||
}
|
||||
|
||||
public void ApplyButterflyKnifeFade(CBasePlayerWeapon weapon, CCSPlayerController player)
|
||||
{
|
||||
// Vérifier si l'arme est un couteau (pour ne pas transformer un pistolet en couteau)
|
||||
if (!weapon.DesignerName.Contains("knife") && !weapon.DesignerName.Contains("bayonet")) return;
|
||||
|
||||
ushort butterflyDefIndex = 515;
|
||||
|
||||
// Changement de la sous-classe pour charger le bon modèle d'animation et de mesh
|
||||
if (weapon.AttributeManager.Item.ItemDefinitionIndex != butterflyDefIndex)
|
||||
{
|
||||
weapon.AcceptInput("ChangeSubclass", value: butterflyDefIndex.ToString());
|
||||
}
|
||||
|
||||
weapon.AttributeManager.Item.ItemDefinitionIndex = butterflyDefIndex;
|
||||
weapon.AttributeManager.Item.EntityQuality = 3; // Qualité "Étoile" / rare, obligatoire pour les couteaux
|
||||
|
||||
weapon.AttributeManager.Item.AttributeList.Attributes.RemoveAll();
|
||||
weapon.AttributeManager.Item.NetworkedDynamicAttributes.Attributes.RemoveAll();
|
||||
|
||||
weapon.AttributeManager.Item.ItemID = SpawnedWeaponId;
|
||||
weapon.AttributeManager.Item.ItemIDLow = (uint)(SpawnedWeaponId & 0xFFFFFFFF);
|
||||
weapon.AttributeManager.Item.ItemIDHigh = (uint)(SpawnedWeaponId >> 32);
|
||||
|
||||
weapon.AttributeManager.Item.AccountID = (uint)player.SteamID;
|
||||
|
||||
// Application du skin Fade (38)
|
||||
weapon.FallbackPaintKit = 38;
|
||||
weapon.FallbackSeed = 0; // Pattern 0, modifiable pour des variations de Fade
|
||||
weapon.FallbackWear = 0.01f; // Factory New
|
||||
|
||||
var handle = weapon.AttributeManager.Item.NetworkedDynamicAttributes.Handle;
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(handle, "set item texture prefab", 38);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(handle, "set item texture seed", 0);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(handle, "set item texture wear", 0.01f);
|
||||
|
||||
weapon.AcceptInput("SetBodygroup", value: "body,0");
|
||||
|
||||
Utilities.SetStateChanged(weapon, "CBaseEntity", "m_nFallbackPaintKit");
|
||||
Utilities.SetStateChanged(weapon, "CBaseEntity", "m_nFallbackSeed");
|
||||
Utilities.SetStateChanged(weapon, "CBaseEntity", "m_flFallbackWear");
|
||||
}
|
||||
|
||||
public void ApplySportGlovesPandorasBox(CCSPlayerController player)
|
||||
{
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid) return;
|
||||
|
||||
CEconItemView item = pawn.EconGloves;
|
||||
|
||||
item.NetworkedDynamicAttributes.Attributes.RemoveAll();
|
||||
item.AttributeList.Attributes.RemoveAll();
|
||||
|
||||
// 5030 = Sport Gloves
|
||||
item.ItemDefinitionIndex = 5030;
|
||||
|
||||
item.ItemID = SpawnedWeaponId;
|
||||
item.ItemIDLow = (uint)(SpawnedWeaponId & 0xFFFFFFFF);
|
||||
item.ItemIDHigh = (uint)(SpawnedWeaponId >> 32);
|
||||
item.AccountID = (uint)player.SteamID;
|
||||
|
||||
// 10037 = Pandora's Box, 0.06f = Factory New (min float pour ce skin)
|
||||
int paintKit = 10037;
|
||||
float wear = 0.06f;
|
||||
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture prefab", paintKit);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture seed", 0);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.NetworkedDynamicAttributes.Handle, "set item texture wear", wear);
|
||||
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.AttributeList.Handle, "set item texture prefab", paintKit);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.AttributeList.Handle, "set item texture seed", 0);
|
||||
CAttributeListSetOrAddAttributeValueByName.Invoke(item.AttributeList.Handle, "set item texture wear", wear);
|
||||
|
||||
item.Initialized = true;
|
||||
|
||||
// Rafraîchissement visuel pour éviter les superpositions de modèles
|
||||
player.ExecuteClientCommand("lastinv");
|
||||
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
if (pawn.IsValid)
|
||||
{
|
||||
pawn.AcceptInput("SetBodygroup", value: "first_or_third_person,0");
|
||||
plugin.AddTimer(0.2f, () =>
|
||||
{
|
||||
if (pawn.IsValid) pawn.AcceptInput("SetBodygroup", value: "first_or_third_person,1");
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void ApplyAgentSirBloodyMiamiDarryl(CCSPlayerController player)
|
||||
{
|
||||
// L'agent est exclusif à l'équipe Terroriste (TeamNum 2)
|
||||
if (player.TeamNum != 2) return;
|
||||
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
if (player.IsValid && player.PlayerPawn.IsValid && player.PawnIsAlive)
|
||||
{
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn != null)
|
||||
{
|
||||
// CS2 requiert généralement le préfixe "characters/" au lieu de "agents/" en interne
|
||||
pawn.SetModel("agents/models/tm_professional/tm_professional_varf.vmdl");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user