-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrrm_attribute_clip.sp
143 lines (117 loc) · 4.28 KB
/
rrm_attribute_clip.sp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Copyright (C) 2024 Katsute | Licensed under CC BY-NC-SA 4.0
#pragma semicolon 1
#define RRM_VERSION "1.0"
#include <sourcemod>
#include <sdkhooks>
#include <tf2attributes>
#include <tf2>
#include <tf2_stocks>
#include <rrm>
#pragma newdecls required
int gEnabled = 0;
float gMul = 0.0;
ConVar cMin = null, cMax = null, cDelay = null;
float gMin = 0.0, gMax = 0.0, gDelay = 0.0;
public Plugin myinfo = {
name = "[RRM] Clip Size Modifier",
author = "Katsute",
description = "Modifier that modifies clip size.",
version = "1.0"
};
public void OnPluginStart(){
cMin = CreateConVar("rrm_attribute_clip_min", "0.5", "Minimum value for the random number generator.");
cMax = CreateConVar("rrm_attribute_clip_max", "4.0", "Maximum value for the random number generator.");
cDelay = CreateConVar("rrm_attribute_clip_delay", "1.2", "Delay to apply attribute.");
cMin.AddChangeHook(OnConvarChanged);
cMax.AddChangeHook(OnConvarChanged);
cDelay.AddChangeHook(OnConvarChanged);
gMin = cMin.FloatValue;
gMax = cMax.FloatValue;
gDelay = cDelay.FloatValue;
HookEvent("post_inventory_application", PostInventoryApplication);
if(RRM_IsRegOpen())
RegisterModifiers();
AutoExecConfig(true, "rrm_attribute_clip", "rrm");
}
public int RRM_OnRegOpen(){
RegisterModifiers();
}
void RegisterModifiers(){
RRM_Register("Clip Size", gMin, gMax, false, RRM_Callback_Attribute);
}
public void OnConvarChanged(Handle convar, char[] oldValue, char[] newValue){
if (StrEqual(oldValue, newValue, true))
return;
float fNewValue = StringToFloat(newValue);
if(convar == cMin)
gMin = fNewValue;
else if(convar == cMax)
gMax = fNewValue;
else if(convar == cDelay)
gDelay = fNewValue;
}
public int RRM_Callback_Attribute(bool enable, float value){
gEnabled = enable;
if(gEnabled)
gMul = value;
for(int i = 1; i <= MaxClients; i++){
if(IsClientInGame(i)){
int health = GetClientHealth(i);
TF2_RemoveAllWeapons(i);
TF2_RegeneratePlayer(i);
SetEntityHealth(i, health < 1 ? 1 : health);
}
}
return gEnabled;
}
public void PostInventoryApplication(const Handle event, const char[] name, const bool dontBroadcast){
if(gEnabled){
int client = GetClientOfUserId(GetEventInt(event, "userid"));
CreateTimer(gDelay, PostInventoryApplicationDelayed, client, TIMER_FLAG_NO_MAPCHANGE);
}
}
public Action PostInventoryApplicationDelayed(const Handle timer, const int client){
if(gEnabled && IsClientInGame(client)){
int primary = GetPlayerWeaponSlot(client, 0);
int secondary = GetPlayerWeaponSlot(client, 1);
int melee = GetPlayerWeaponSlot(client, 2);
if(primary != -1 && TF2Attrib_GetByDefIndex(primary, 2050) == Address_Null){
ApplyPrimary(primary);
TF2Attrib_SetByDefIndex(primary, 2050, 1.0);
}
if(secondary != -1 && TF2Attrib_GetByDefIndex(secondary, 2050) == Address_Null){
ApplySecondary(secondary);
TF2Attrib_SetByDefIndex(secondary, 2050, 1.0);
}
if(melee != -1 && TF2Attrib_GetByDefIndex(melee, 2050) == Address_Null){
ApplyMelee(melee);
TF2Attrib_SetByDefIndex(melee, 2050, 1.0);
}
}
return Plugin_Continue;
}
public void ApplyAttribute(const int ent, const int attribute, const float value){
if(ent != -1 && IsValidEntity(ent)){
Address addr = TF2Attrib_GetByDefIndex(ent, attribute);
float current = addr != Address_Null ? TF2Attrib_GetValue(addr) : 1.0;
TF2Attrib_SetByDefIndex(ent, attribute, current * value);
}
}
public void ApplyPrimary(const int ent){
int index = GetEntProp(ent, Prop_Send, "m_iItemDefinitionIndex");
if(index != 441 && index != 588)
ApplyAttribute(ent, 4, gMul);
else
ApplyAttribute(ent, 335, gMul);
ApplyAttribute(ent, 97, (1/gMul) > 1.0 ? 1.0 : (1/gMul));
}
public void ApplySecondary(const int ent){
int index = GetEntProp(ent, Prop_Send, "m_iItemDefinitionIndex");
if(index != 442 && index != 595)
ApplyAttribute(ent, 4, gMul);
else
ApplyAttribute(ent, 335, gMul);
ApplyAttribute(ent, 97, (1/gMul) > 1.0 ? 1.0 : (1/gMul));
}
public void ApplyMelee(const int ent){
}