SHOW:
|
|
- or go back to the newest paste.
1 | #pragma newdecls required | |
2 | ||
3 | #include <sourcemod> | |
4 | #include <sdktools> | |
5 | ||
6 | #define MAXLIST 11 | |
7 | ||
8 | int iWeapon[2048 + 1], iAmmo[MAXPLAYERS + 1][2][2]; | |
9 | bool iCookies[MAXPLAYERS + 1][2], iState[MAXPLAYERS + 1], IsMelee[MAXPLAYERS + 1][2], IsDual[MAXPLAYERS + 1][2]; | |
10 | char sClassnameWeapon[MAXPLAYERS + 1][2][36]; | |
11 | ||
12 | static const char gModelsItemsList[MAXLIST][] = | |
13 | { | |
14 | "models/weapons/melee/v_katana.mdl", //0 | |
15 | "models/weapons/melee/v_fireaxe.mdl", //1 | |
16 | "models/weapons/melee/v_machete.mdl", //2 | |
17 | "models/weapons/melee/v_crowbar.mdl", //3 | |
18 | "models/v_models/v_knife_t.mdl", //4 | |
19 | - | if (StrEqual(sCommand, "say") || StrEqual(sCommand, "say_team")) |
19 | + | "models/weapons/melee/v_frying_pan.mdl", //5 |
20 | - | { |
20 | + | "models/weapons/melee/v_bat.mdl", //6 |
21 | - | char sArg[2]; |
21 | + | "models/weapons/melee/v_cricket_bat.mdl", //7 |
22 | - | GetCmdArg(1, sArg, sizeof(sArg)); |
22 | + | "models/weapons/melee/v_tonfa.mdl", //8 |
23 | - | if(strcmp(sArg, "s") == 0) |
23 | + | "models/weapons/melee/v_electric_guitar.mdl", //9 |
24 | - | { |
24 | + | "models/weapons/melee/v_golfclub.mdl" //10 |
25 | }; | |
26 | ||
27 | - | } |
27 | + | |
28 | - | } |
28 | + | |
29 | - | return Plugin_Continue; |
29 | + | |
30 | RegConsoleCmd("s", cSwitch); | |
31 | RegConsoleCmd("sm_s", cSwitch); | |
32 | } | |
33 | ||
34 | public Action HookPlayerChat(int iClient, const char[] sCommand, int iArgs) | |
35 | - | |
35 | + | |
36 | if (StrEqual(sCommand, "say") || StrEqual(sCommand, "say_team")) | |
37 | { | |
38 | char sArg[2]; | |
39 | GetCmdArg(1, sArg, sizeof(sArg)); | |
40 | if(strcmp(sArg, "s") == 0) | |
41 | { | |
42 | cSwitch(iClient, 0); | |
43 | return Plugin_Continue; | |
44 | } | |
45 | } | |
46 | return Plugin_Continue; | |
47 | } | |
48 | ||
49 | public Action cSwitch (int client, int args) | |
50 | - | |
50 | + | |
51 | int iSlot = GetPlayerWeaponSlot(client, 1), AmmoType, Ammo, iClip; | |
52 | ||
53 | if(!iState[client]) | |
54 | { | |
55 | if(!iCookies[client][0]) | |
56 | { | |
57 | - | |
57 | + | |
58 | { | |
59 | GetEntityClassname(iSlot, sClassnameWeapon[client][0], sizeof sClassnameWeapon[][]); | |
60 | if(strcmp(sClassnameWeapon[client][0], "weapon_melee") == 0) | |
61 | { | |
62 | IsMelee[client][0] = true; | |
63 | GetEntPropString(iSlot, Prop_Data, "m_strMapSetScriptName", sClassnameWeapon[client][0], sizeof sClassnameWeapon[][]); | |
64 | if(!sClassnameWeapon[client][0]) | |
65 | { | |
66 | char ModelName[128], sExplodeString[MAXLIST - 6][36]; | |
67 | int iNum; | |
68 | GetEntPropString(iSlot, Prop_Data, "m_ModelName", ModelName, sizeof ModelName); | |
69 | for(int i; i < MAXLIST; i++) | |
70 | { | |
71 | if(strcmp(ModelName, gModelsItemsList[i]) == 0) | |
72 | { | |
73 | iNum = ExplodeString(gModelsItemsList[i], "/", sExplodeString, sizeof sExplodeString, sizeof sExplodeString[]); | |
74 | ReplaceString(sExplodeString[iNum - 1], sizeof sExplodeString[], "v_", ""); | |
75 | if(StrContains(sExplodeString[iNum - 1], "knife") > 0) | |
76 | ReplaceString(sExplodeString[iNum - 1], sizeof sExplodeString[], "_t.mdl", ""); | |
77 | else | |
78 | ReplaceString(sExplodeString[iNum - 1], sizeof sExplodeString[], ".mdl", ""); | |
79 | TrimString(sExplodeString[iNum - 1]); | |
80 | Format(sClassnameWeapon[client][0], sizeof sClassnameWeapon[][], "%s", sExplodeString[iNum - 1]); | |
81 | break; | |
82 | } | |
83 | - | |
83 | + | |
84 | } | |
85 | } | |
86 | else if(strcmp(sClassnameWeapon[client][0], "weapon_pistol") == 0 && GetEntProp(iSlot, Prop_Send, "m_hasDualWeapons")) | |
87 | IsDual[client][0] = true; | |
88 | ||
89 | if(!IsMelee[client][0]) | |
90 | { | |
91 | AmmoType = GetEntProp(iSlot, Prop_Send, "m_iPrimaryAmmoType"); | |
92 | Ammo = GetEntProp(client, Prop_Send, "m_iAmmo", _, AmmoType); | |
93 | iClip = GetEntProp(iSlot, Prop_Send, "m_iClip1"); | |
94 | } | |
95 | ||
96 | iAmmo[client][0][0] = iClip; | |
97 | iAmmo[client][0][1] = Ammo; | |
98 | ||
99 | RemovePlayerItem(client, iSlot); | |
100 | AcceptEntityInput(iSlot, "kill"); | |
101 | iCookies[client][0] = true; | |
102 | if(iCookies[client][1]) | |
103 | { | |
104 | iSlot = GetPlayerWeaponSlot(client, 1); | |
105 | if(!IsValidEntity(iSlot)) | |
106 | { | |
107 | if(!IsMelee[client][1]) | |
108 | { | |
109 | if(IsDual[client][1]) | |
110 | { | |
111 | int entity; | |
112 | for(int i; i <= 2; i++) | |
113 | { | |
114 | entity = CreateEntityByName(sClassnameWeapon[client][1]); | |
115 | DispatchSpawn(entity); | |
116 | if(IsValidEntity(entity)) | |
117 | { | |
118 | AcceptEntityInput(entity, "Use", client); | |
119 | } | |
120 | } | |
121 | ||
122 | iWeapon[entity] = GetClientUserId(client); | |
123 | CreateTimer(0.02, tXclip2, EntIndexToEntRef(entity)); | |
124 | iCookies[client][1] = false; | |
125 | IsDual[client][1] = false; | |
126 | } | |
127 | else | |
128 | { | |
129 | int entity = CreateEntityByName(sClassnameWeapon[client][1]); | |
130 | DispatchSpawn(entity); | |
131 | if(IsValidEntity(entity)) | |
132 | - | |
132 | + | |
133 | AcceptEntityInput(entity, "Use", client); | |
134 | iCookies[client][1] = false; | |
135 | } | |
136 | iWeapon[entity] = GetClientUserId(client); | |
137 | CreateTimer(0.02, tXclip2, EntIndexToEntRef(entity)); | |
138 | } | |
139 | } | |
140 | else | |
141 | { | |
142 | int entity = MeleeAwfull(sClassnameWeapon[client][1]); | |
143 | AcceptEntityInput(entity, "Use", client); | |
144 | iCookies[client][1] = false; | |
145 | IsMelee[client][1] = false; | |
146 | } | |
147 | } | |
148 | } | |
149 | } | |
150 | } | |
151 | else | |
152 | { | |
153 | iSlot = GetPlayerWeaponSlot(client, 1); | |
154 | if(!IsValidEntity(iSlot)) | |
155 | { | |
156 | if(!IsMelee[client][0]) | |
157 | { | |
158 | if(IsDual[client][0]) | |
159 | { | |
160 | int entity; | |
161 | for(int i; i <= 2; i++) | |
162 | { | |
163 | entity = CreateEntityByName(sClassnameWeapon[client][0]); | |
164 | DispatchSpawn(entity); | |
165 | if(IsValidEntity(entity)) | |
166 | { | |
167 | AcceptEntityInput(entity, "Use", client); | |
168 | } | |
169 | } | |
170 | ||
171 | iWeapon[entity] = GetClientUserId(client); | |
172 | CreateTimer(0.02, tXclip, EntIndexToEntRef(entity)); | |
173 | iCookies[client][0] = false; | |
174 | IsDual[client][0] = false; | |
175 | } | |
176 | else | |
177 | { | |
178 | int entity = CreateEntityByName(sClassnameWeapon[client][0]); | |
179 | DispatchSpawn(entity); | |
180 | if(IsValidEntity(entity)) | |
181 | { | |
182 | AcceptEntityInput(entity, "Use", client); | |
183 | iCookies[client][0] = false; | |
184 | } | |
185 | iWeapon[entity] = GetClientUserId(client); | |
186 | CreateTimer(0.02, tXclip, EntIndexToEntRef(entity)); | |
187 | } | |
188 | } | |
189 | else | |
190 | { | |
191 | int entity = MeleeAwfull(sClassnameWeapon[client][0]); | |
192 | AcceptEntityInput(entity, "Use", client); | |
193 | iCookies[client][0] = false; | |
194 | IsMelee[client][0] = false; | |
195 | } | |
196 | } | |
197 | } | |
198 | iState[client] = true; | |
199 | } | |
200 | else | |
201 | { | |
202 | if(!iCookies[client][1]) | |
203 | { | |
204 | if(IsValidEntity(iSlot)) | |
205 | { | |
206 | GetEntityClassname(iSlot, sClassnameWeapon[client][1], sizeof sClassnameWeapon[][]); | |
207 | if(strcmp(sClassnameWeapon[client][1], "weapon_melee") == 0) | |
208 | { | |
209 | IsMelee[client][1] = true; | |
210 | GetEntPropString(iSlot, Prop_Data, "m_strMapSetScriptName", sClassnameWeapon[client][1], sizeof sClassnameWeapon[][]); | |
211 | if(!sClassnameWeapon[client][1]) | |
212 | { | |
213 | char ModelName[128], sExplodeString[MAXLIST - 6][36]; | |
214 | int iNum; | |
215 | GetEntPropString(iSlot, Prop_Data, "m_ModelName", ModelName, sizeof ModelName); | |
216 | for(int i; i < MAXLIST; i++) | |
217 | { | |
218 | if(strcmp(ModelName, gModelsItemsList[i]) == 0) | |
219 | { | |
220 | iNum = ExplodeString(gModelsItemsList[i], "/", sExplodeString, sizeof sExplodeString, sizeof sExplodeString[]); | |
221 | ReplaceString(sExplodeString[iNum - 1], sizeof sExplodeString[], "v_", ""); | |
222 | if(StrContains(sExplodeString[iNum - 1], "knife") > 0) | |
223 | ReplaceString(sExplodeString[iNum - 1], sizeof sExplodeString[], "_t.mdl", ""); | |
224 | else | |
225 | ReplaceString(sExplodeString[iNum - 1], sizeof sExplodeString[], ".mdl", ""); | |
226 | TrimString(sExplodeString[iNum - 1]); | |
227 | Format(sClassnameWeapon[client][1], sizeof sClassnameWeapon[][], "%s", sExplodeString[iNum - 1]); | |
228 | break; | |
229 | } | |
230 | } | |
231 | } | |
232 | } | |
233 | else if(strcmp(sClassnameWeapon[client][1], "weapon_pistol") == 0 && GetEntProp(iSlot, Prop_Send, "m_hasDualWeapons")) | |
234 | { | |
235 | IsDual[client][1] = true; | |
236 | } | |
237 | ||
238 | if(!IsMelee[client][1]) | |
239 | { | |
240 | AmmoType = GetEntProp(iSlot, Prop_Send, "m_iPrimaryAmmoType"); | |
241 | Ammo = GetEntProp(client, Prop_Send, "m_iAmmo", _, AmmoType); | |
242 | iClip = GetEntProp(iSlot, Prop_Send, "m_iClip1"); | |
243 | } | |
244 | ||
245 | iAmmo[client][1][0] = iClip; | |
246 | iAmmo[client][1][1] = Ammo; | |
247 | ||
248 | RemovePlayerItem(client, iSlot); | |
249 | AcceptEntityInput(iSlot, "kill"); | |
250 | iCookies[client][1] = true; | |
251 | if(iCookies[client][0]) | |
252 | { | |
253 | iSlot = GetPlayerWeaponSlot(client, 1); | |
254 | if(!IsMelee[client][0]) | |
255 | { | |
256 | if(IsDual[client][0]) | |
257 | { | |
258 | int entity; | |
259 | for(int i; i <= 2; i++) | |
260 | { | |
261 | entity = CreateEntityByName(sClassnameWeapon[client][0]); | |
262 | DispatchSpawn(entity); | |
263 | if(IsValidEntity(entity)) | |
264 | { | |
265 | AcceptEntityInput(entity, "Use", client); | |
266 | } | |
267 | } | |
268 | iWeapon[entity] = GetClientUserId(client); | |
269 | CreateTimer(0.02, tXclip, EntIndexToEntRef(entity)); | |
270 | iCookies[client][0] = false; | |
271 | IsDual[client][0] = false; | |
272 | } | |
273 | else | |
274 | { | |
275 | int entity = CreateEntityByName(sClassnameWeapon[client][0]); | |
276 | DispatchSpawn(entity); | |
277 | if(IsValidEntity(entity)) | |
278 | { | |
279 | AcceptEntityInput(entity, "Use", client); | |
280 | iCookies[client][0] = false; | |
281 | } | |
282 | iWeapon[entity] = GetClientUserId(client); | |
283 | CreateTimer(0.02, tXclip, EntIndexToEntRef(entity)); | |
284 | } | |
285 | } | |
286 | else | |
287 | { | |
288 | int entity = MeleeAwfull(sClassnameWeapon[client][0]); | |
289 | AcceptEntityInput(entity, "Use", client); | |
290 | iCookies[client][0] = false; | |
291 | IsMelee[client][0] = false; | |
292 | } | |
293 | } | |
294 | } | |
295 | } | |
296 | else | |
297 | { | |
298 | iSlot = GetPlayerWeaponSlot(client, 1); | |
299 | if(!IsValidEntity(iSlot)) | |
300 | - | |
300 | + | |
301 | if(!IsMelee[client][1]) | |
302 | { | |
303 | if(IsDual[client][1]) | |
304 | { | |
305 | int entity; | |
306 | for(int i; i <= 2; i++) | |
307 | { | |
308 | entity = CreateEntityByName(sClassnameWeapon[client][1]); | |
309 | DispatchSpawn(entity); | |
310 | if(IsValidEntity(entity)) | |
311 | { | |
312 | AcceptEntityInput(entity, "Use", client); | |
313 | } | |
314 | } | |
315 | iWeapon[entity] = GetClientUserId(client); | |
316 | CreateTimer(0.02, tXclip2, EntIndexToEntRef(entity)); | |
317 | iCookies[client][1] = false; | |
318 | IsDual[client][1] = false; | |
319 | } | |
320 | - | |
320 | + | |
321 | { | |
322 | int entity = CreateEntityByName(sClassnameWeapon[client][1]); | |
323 | DispatchSpawn(entity); | |
324 | if(IsValidEntity(entity)) | |
325 | { | |
326 | AcceptEntityInput(entity, "Use", client); | |
327 | iCookies[client][1] = false; | |
328 | } | |
329 | iWeapon[entity] = GetClientUserId(client); | |
330 | CreateTimer(0.02, tXclip2, EntIndexToEntRef(entity)); | |
331 | } | |
332 | } | |
333 | else | |
334 | { | |
335 | int entity = MeleeAwfull(sClassnameWeapon[client][1]); | |
336 | - | |
336 | + | |
337 | iCookies[client][1] = false; | |
338 | - | GetEntPropString(iMWeapon, Prop_Data, "m_ModelName", ModelName, sizeof ModelName); |
338 | + | |
339 | - | |
339 | + | |
340 | } | |
341 | } | |
342 | iState[client] = false; | |
343 | } | |
344 | return Plugin_Handled; | |
345 | } | |
346 | ||
347 | public Action tXclip(Handle timer, int entity) | |
348 | { | |
349 | entity = EntRefToEntIndex(entity); | |
350 | if(entity != INVALID_ENT_REFERENCE) | |
351 | { | |
352 | int iAmmoType = GetEntProp(entity, Prop_Send, "m_iPrimaryAmmoType"); | |
353 | if(iAmmoType) | |
354 | { | |
355 | int Clip, Ammo, client; | |
356 | client = GetClientOfUserId(iWeapon[entity]); | |
357 | Clip = iAmmo[client][0][0]; | |
358 | Ammo = iAmmo[client][0][1]; | |
359 | ||
360 | int iCurrentWeapon = GetPlayerWeaponSlot(client, 1); | |
361 | SetEntProp(client, Prop_Send, "m_iAmmo", Ammo, _, iAmmoType); | |
362 | SetEntProp(iCurrentWeapon, Prop_Send, "m_iClip1", Clip); | |
363 | } | |
364 | } | |
365 | } | |
366 | ||
367 | public Action tXclip2(Handle timer, int entity) | |
368 | { | |
369 | entity = EntRefToEntIndex(entity); | |
370 | if(entity != INVALID_ENT_REFERENCE) | |
371 | { | |
372 | int iAmmoType = GetEntProp(entity, Prop_Send, "m_iPrimaryAmmoType"); | |
373 | if(iAmmoType) | |
374 | { | |
375 | int Clip, Ammo, client; | |
376 | client = GetClientOfUserId(iWeapon[entity]); | |
377 | Clip = iAmmo[client][1][0]; | |
378 | Ammo = iAmmo[client][1][1]; | |
379 | ||
380 | int iCurrentWeapon = GetPlayerWeaponSlot(client, 1); | |
381 | SetEntProp(client, Prop_Send, "m_iAmmo", Ammo, _, iAmmoType); | |
382 | SetEntProp(iCurrentWeapon, Prop_Send, "m_iClip1", Clip); | |
383 | } | |
384 | } | |
385 | } | |
386 | ||
387 | int MeleeAwfull(const char[] Melee) | |
388 | { | |
389 | int iMWeapon = CreateEntityByName("weapon_melee"); | |
390 | ||
391 | if (IsValidEntity(iMWeapon)) | |
392 | { | |
393 | DispatchKeyValue(iMWeapon, "melee_script_name", Melee); | |
394 | DispatchSpawn(iMWeapon); | |
395 | ||
396 | char ModelName[128]; | |
397 | GetEntPropString(iMWeapon, Prop_Data, "m_ModelName", ModelName, sizeof ModelName); | |
398 | ||
399 | if (StrContains( ModelName, "hunter", false ) != -1) | |
400 | AcceptEntityInput(iMWeapon, "kill"); | |
401 | } | |
402 | return iMWeapon; | |
403 | } |