AMXX-BG.INFO fm_cstrike.inc Raw include

fm_cstrike.inc

Original include source with line numbers.

Back Download .inc
1 #if defined _fm_cstrike_included || defined _cstrike_included
2 #endinput
3 #endif
4
5 #define _cstrike_included
6 #define _fm_cstrike_included
7
8
9 #include <amxmodx>
10 #include <fakemeta>
11 #include <hamsandwich>
12
13
14 #define EXTRAOFFSET 5
15 #define EXTRAOFFSET_WEAPONS 4
16 #define ACTUAL_EXTRA_OFFSET 20
17
18
19 // "weapon_*" offsets
20 #define OFFSET_WEAPONID 43
21 #define OFFSET_WEAPONCLIP 52
22 #define OFFSET_SILENCER_FIREMODE 74
23
24
25 // "player" offsets
26 #define OFFSET_ARMORTYPE 112
27 #define OFFSET_TEAM 114
28 #define OFFSET_MONEY 115
29 #define OFFSET_PRIMWEAPON 116
30 #define OFFSET_LASTACTIVITY 124
31 #define OFFSET_INTERALMODEL 126
32 #define OFFSET_NVGOGGLES 129
33 #define OFFSET_BOMB_DEFUSE 193
34 #define OFFSET_ISVIP 209
35 #define OFFSET_TKED 216
36 #define OFFSET_HOSTAGEKILLS 217
37 #define OFFSET_MAPZONE 235
38 #define OFFSET_DRIVING 350
39 #define OFFSET_STATIONARY 362
40 enum
41 {
42 OFFSET_AMMO_AWP = 377,
43 OFFSET_AMMO_SCOUT, // AK47, G3SG1
44 OFFSET_AMMO_M249,
45 OFFSET_AMMO_M4A1, // FAMAS, AUG, SG550, GALIL, SG552
46 OFFSET_AMMO_M3, // XM1014
47 OFFSET_AMMO_USP, // UMP45, MAC10
48 OFFSET_AMMO_FIVESEVEN, // P90
49 OFFSET_AMMO_DEAGLE,
50 OFFSET_AMMO_P228,
51 OFFSET_AMMO_GLOCK18, // MP5NAVY, TMP, ELITE
52 OFFSET_AMMO_FLASHBANG,
53 OFFSET_AMMO_HEGRENADE,
54 OFFSET_AMMO_SMOKEGRENADE,
55 OFFSET_AMMO_C4
56 };
57 #define OFFSET_SHIELD 510
58 #define OFFSET_DEATHS 555
59
60
61 // "hostage_entity" offsets
62 #define OFFSET_HOSTAGEFOLLOW 86
63 #define OFFSET_HOSTAGENEXTUSE 100
64 #define OFFSET_HOSTAGELASTUSE 483
65 #define OFFSET_HOSTAGEID 487
66
67
68 // "armoury_entity" offsets
69 #define OFFSET_CSATYPE 34
70
71
72 // C4 offsets
73 #define OFFSET_C4_EXPLODETIME 100
74 #define OFFSET_C4_DEFUSING 0x181
75
76
77 stock fm_cs_get_user_deaths(client)
78 {
79 return get_pdata_int(client, OFFSET_DEATHS, EXTRAOFFSET);
80 }
81
82 stock fm_cs_set_user_deaths(client, deaths)
83 {
84 set_pdata_int(client, OFFSET_DEATHS, deaths, EXTRAOFFSET);
85
86 static ScoreInfo;
87 if( ScoreInfo || (ScoreInfo = get_user_msgid("ScoreInfo")) )
88 {
89 emessage_begin(MSG_BROADCAST, ScoreInfo);
90 ewrite_byte(client);
91 ewrite_short(get_user_frags(client));
92 ewrite_short(deaths);
93 ewrite_short(0);
94 ewrite_short(_:fm_cs_get_user_team(client));
95 emessage_end();
96 }
97 }
98
99 stock fm_cs_get_hostage_foll(entity)
100 {
101 return get_pdata_int(entity, OFFSET_HOSTAGEFOLLOW, EXTRAOFFSET);
102 }
103
104 stock fm_cs_set_hostage_foll(entity, followentity=0)
105 {
106 set_pdata_int(entity, OFFSET_HOSTAGEFOLLOW, followentity, EXTRAOFFSET);
107 }
108
109 stock fm_cs_get_hostage_id(entity)
110 {
111 return get_pdata_int(entity, OFFSET_HOSTAGEID, EXTRAOFFSET);
112 }
113
114 static const _CSW_to_offset[] =
115 {
116 0, OFFSET_AMMO_P228, OFFSET_AMMO_SCOUT, OFFSET_AMMO_HEGRENADE, OFFSET_AMMO_M3, OFFSET_AMMO_C4, OFFSET_AMMO_USP, OFFSET_AMMO_SMOKEGRENADE,
117 OFFSET_AMMO_GLOCK18, OFFSET_AMMO_FIVESEVEN, OFFSET_AMMO_USP, OFFSET_AMMO_M4A1, OFFSET_AMMO_M4A1, OFFSET_AMMO_M4A1, OFFSET_AMMO_USP, OFFSET_AMMO_GLOCK18,
118 OFFSET_AMMO_AWP, OFFSET_AMMO_GLOCK18, OFFSET_AMMO_M249, OFFSET_AMMO_M3, OFFSET_AMMO_M4A1, OFFSET_AMMO_GLOCK18, OFFSET_AMMO_SCOUT, OFFSET_AMMO_FLASHBANG,
119 OFFSET_AMMO_DEAGLE, OFFSET_AMMO_M4A1, OFFSET_AMMO_SCOUT, 0, OFFSET_AMMO_FIVESEVEN
120 };
121
122 stock fm_cs_get_user_bpammo(client, weapon)
123 {
124 return get_pdata_int(client, _CSW_to_offset[weapon], EXTRAOFFSET);
125 }
126
127 stock fm_cs_set_user_bpammo(client, weapon, ammo)
128 {
129 set_pdata_int(client, _CSW_to_offset[weapon], ammo, EXTRAOFFSET);
130 }
131
132 #define HAS_DEFUSE_KIT (1<<16)
133
134 stock fm_cs_get_user_defuse(client)
135 {
136 return (get_pdata_int(client, OFFSET_BOMB_DEFUSE, EXTRAOFFSET) & HAS_DEFUSE_KIT) ? 1 : 0;
137 }
138
139 stock fm_cs_set_user_defuse(client, defusekit=1, r=0, g=160, b=0, icon[]="defuser", flash=0)
140 {
141 static StatusIcon;
142
143 new kit = get_pdata_int(client, OFFSET_BOMB_DEFUSE, EXTRAOFFSET);
144
145 if( defusekit && !(kit & HAS_DEFUSE_KIT) )
146 {
147 set_pev(client, pev_body, 1);
148
149 set_pdata_int(client, OFFSET_BOMB_DEFUSE, (kit | HAS_DEFUSE_KIT), EXTRAOFFSET);
150
151 if( StatusIcon || (StatusIcon = get_user_msgid("StatusIcon")) )
152 {
153 emessage_begin(MSG_ONE_UNRELIABLE, StatusIcon, _, client);
154 ewrite_byte((flash == 1) ? 2 : 1);
155 ewrite_string(icon);
156 ewrite_byte(r);
157 ewrite_byte(g);
158 ewrite_byte(b);
159 emessage_end();
160 }
161 }
162 else if( !defusekit && (kit & HAS_DEFUSE_KIT) )
163 {
164 set_pev(client, pev_body, 0);
165
166 set_pdata_int(client, OFFSET_BOMB_DEFUSE, (kit & ~HAS_DEFUSE_KIT), EXTRAOFFSET);
167
168 if( StatusIcon || (StatusIcon = get_user_msgid("StatusIcon")) )
169 {
170 emessage_begin(MSG_ONE_UNRELIABLE, StatusIcon, _, client);
171 ewrite_byte(0);
172 ewrite_string("defuser");
173 emessage_end();
174 }
175 }
176 }
177
178 stock fm_cs_get_user_buyzone(client)
179 {
180 return (fm_cs_get_user_mapzones(client) & CS_MAPZONE_BUY) ? 1 : 0;
181 }
182
183 stock fm_cs_get_user_hasprim(client)
184 {
185 return get_pdata_int(client, OFFSET_PRIMWEAPON, EXTRAOFFSET);
186 }
187
188 stock fm_cs_get_user_model(client, model[], len)
189 {
190 engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, client), "model", model, len);
191 }
192
193 stock fm_cs_set_user_model(client, const model[])
194 {
195 engfunc(EngFunc_SetClientKeyValue, client, engfunc(EngFunc_GetInfoKeyBuffer, client), "model", model);
196 }
197
198 stock fm_cs_reset_user_model(client)
199 {
200 dllfunc(DLLFunc_ClientUserInfoChanged, client, engfunc(EngFunc_GetInfoKeyBuffer, client));
201 }
202
203 stock fm_cs_get_user_money(client)
204 {
205 return get_pdata_int(client, OFFSET_MONEY, EXTRAOFFSET);
206 }
207
208 stock fm_cs_set_user_money(client, money, flash=1)
209 {
210 set_pdata_int(client, OFFSET_MONEY, money, EXTRAOFFSET);
211
212 static Money;
213 if( Money || (Money = get_user_msgid("Money")) )
214 {
215 emessage_begin(MSG_ONE_UNRELIABLE, Money, _, client);
216 ewrite_long(money);
217 ewrite_byte(flash ? 1 : 0);
218 emessage_end();
219 }
220 }
221
222 #define HAS_NVGOGGLES (1<<0)
223
224 stock fm_cs_get_user_nvg(client)
225 {
226 return (get_pdata_int(client, OFFSET_NVGOGGLES, EXTRAOFFSET) & HAS_NVGOGGLES) ? 1 : 0;
227 }
228
229 stock fm_cs_set_user_nvg(client, nvgoggles=1)
230 {
231 new kit = get_pdata_int(client, OFFSET_NVGOGGLES, EXTRAOFFSET);
232
233 if( nvgoggles && !(kit & HAS_NVGOGGLES) )
234 {
235 set_pdata_int(client, OFFSET_NVGOGGLES, (kit | HAS_NVGOGGLES), EXTRAOFFSET);
236 }
237 else if( !nvgoggles && (kit & HAS_NVGOGGLES) )
238 {
239 set_pdata_int(client, OFFSET_NVGOGGLES, (kit & ~HAS_NVGOGGLES), EXTRAOFFSET);
240 }
241 }
242
243 #define CAN_PLANT_BOMB (1<<8)
244
245 stock fm_cs_get_user_plant(client)
246 {
247 return (get_pdata_int(client, OFFSET_BOMB_DEFUSE, EXTRAOFFSET) & CAN_PLANT_BOMB) ? 1 : 0;
248 }
249
250 stock fm_cs_set_user_plant(client, plant=1, showbombicon=1)
251 {
252 static StatusIcon;
253
254 new kit = get_pdata_int(client, OFFSET_BOMB_DEFUSE, EXTRAOFFSET);
255
256 if( plant && !(kit & CAN_PLANT_BOMB) )
257 {
258 set_pdata_int(client, OFFSET_BOMB_DEFUSE, (kit | CAN_PLANT_BOMB), EXTRAOFFSET);
259
260 if( showbombicon && (StatusIcon || (StatusIcon = get_user_msgid("StatusIcon"))) )
261 {
262 emessage_begin(MSG_ONE_UNRELIABLE, StatusIcon, _, client);
263 ewrite_byte(1);
264 ewrite_string("c4");
265 ewrite_byte(0);
266 ewrite_byte(160);
267 ewrite_byte(0);
268 emessage_end();
269 }
270 }
271 else if( !plant && (kit & CAN_PLANT_BOMB) )
272 {
273 set_pdata_int(client, OFFSET_BOMB_DEFUSE, (kit & ~CAN_PLANT_BOMB), EXTRAOFFSET);
274
275 if( StatusIcon || (StatusIcon = get_user_msgid("StatusIcon")) )
276 {
277 emessage_begin(MSG_ONE_UNRELIABLE, StatusIcon, _, client);
278 ewrite_byte(0);
279 ewrite_string("c4");
280 emessage_end();
281 }
282 }
283 }
284
285 enum CsTeams
286 {
287 CS_TEAM_UNASSIGNED, // 0
288 CS_TEAM_T, // 1
289 CS_TEAM_CT, // 2
290 CS_TEAM_SPECTATOR // 3
291 };
292
293 enum CsInternalModel
294 {
295 CS_DONTCHANGE, // 0
296 CS_CT_URBAN, // 1
297 CS_T_TERROR, // 2
298 CS_T_LEET, // 3
299 CS_T_ARCTIC, // 4
300 CS_CT_GSG9, // 5
301 CS_CT_GIGN, // 6
302 CS_CT_SAS, // 7
303 CS_T_GUERILLA, // 8
304 CS_CT_VIP, // 9
305 CZ_T_MILITIA, // 10
306 CZ_CT_SPETSNAZ // 11
307 };
308
309 stock fm_cs_set_user_team(client, {CsTeams,_}:team, {CsInternalModel,_}:model=CS_DONTCHANGE)
310 {
311 new CsTeams:oldteam = fm_cs_get_user_team(client);
312 if( oldteam != team )
313 {
314 switch( oldteam )
315 {
316 case CS_TEAM_T:
317 {
318 if( is_user_alive(client) && (pev(client, pev_weapons) & (1<<CSW_C4)) )
319 {
320 engclient_cmd(client, "drop", "weapon_c4");
321 }
322 }
323 case CS_TEAM_CT:
324 {
325 fm_cs_set_user_defuse(client, 0);
326 }
327 }
328 }
329
330 set_pdata_int(client, OFFSET_TEAM, _:team, EXTRAOFFSET);
331
332 if( model != CS_DONTCHANGE )
333 {
334 set_pdata_int(client, OFFSET_INTERALMODEL, _:model, EXTRAOFFSET);
335 }
336
337 dllfunc(DLLFunc_ClientUserInfoChanged, client, engfunc(EngFunc_GetInfoKeyBuffer, client));
338
339 static const team_names[CsTeams][] =
340 {
341 "UNASSIGNED",
342 "TERRORIST",
343 "CT",
344 "SPECTATOR"
345 };
346
347 static TeamInfo;
348 if( TeamInfo || (TeamInfo = get_user_msgid("TeamInfo")) )
349 {
350 emessage_begin(MSG_BROADCAST, TeamInfo);
351 ewrite_byte(client);
352 ewrite_string(team_names[team]);
353 emessage_end();
354 }
355 }
356
357 stock CsTeams:fm_cs_get_user_team(client, &{CsInternalModel,_}:model=CS_DONTCHANGE)
358 {
359 model = CsInternalModel:get_pdata_int(client, OFFSET_INTERALMODEL, EXTRAOFFSET);
360
361 return CsTeams:get_pdata_int(client, OFFSET_TEAM, EXTRAOFFSET);
362 }
363
364 #define PLAYER_IS_VIP (1<<8)
365
366 stock fm_cs_get_user_vip(client)
367 {
368 return (get_pdata_int(client, OFFSET_ISVIP, EXTRAOFFSET) & PLAYER_IS_VIP) ? 1 : 0;
369 }
370
371 #define SCOREATTRIB_NOTHING 0
372 #define SCOREATTRIB_DEAD (1<<0)
373 #define SCOREATTRIB_BOMB (1<<1)
374 #define SCOREATTRIB_VIP (1<<2)
375
376 stock fm_cs_set_user_vip(client, vip=1, model=1, scoreboard=1)
377 {
378 static ScoreAttrib;
379
380 new isvip = fm_cs_get_user_vip(client);
381
382 if( vip && !isvip )
383 {
384 set_pdata_int(client, OFFSET_ISVIP, (isvip | PLAYER_IS_VIP), EXTRAOFFSET);
385
386 if( model )
387 {
388 set_pdata_int(client, OFFSET_INTERALMODEL, _:CS_CT_VIP, EXTRAOFFSET);
389 dllfunc(DLLFunc_ClientUserInfoChanged, client, engfunc(EngFunc_GetInfoKeyBuffer, client));
390 }
391
392 if( scoreboard )
393 {
394 if( ScoreAttrib || (ScoreAttrib = get_user_msgid("ScoreAttrib")) )
395 {
396 emessage_begin(MSG_BROADCAST, ScoreAttrib);
397 ewrite_byte(client);
398 ewrite_byte(SCOREATTRIB_VIP);
399 emessage_end();
400 }
401 }
402 }
403 else if( !vip && isvip )
404 {
405 if( model )
406 {
407 static const CsInternalModel:models[4] =
408 {
409 CS_CT_GIGN,
410 CS_CT_GSG9,
411 CS_CT_SAS,
412 CS_CT_URBAN
413 };
414
415 set_pdata_int(client, OFFSET_INTERALMODEL, models[random(sizeof(models))], EXTRAOFFSET);
416 dllfunc(DLLFunc_ClientUserInfoChanged, client, engfunc(EngFunc_GetInfoKeyBuffer, client));
417 }
418
419 if( scoreboard )
420 {
421 if( ScoreAttrib || (ScoreAttrib = get_user_msgid("ScoreAttrib")) )
422 {
423 emessage_begin(MSG_BROADCAST, ScoreAttrib);
424 ewrite_byte(client);
425 ewrite_byte(is_user_alive(client) ? SCOREATTRIB_NOTHING : SCOREATTRIB_DEAD);
426 emessage_end();
427 }
428 }
429 }
430 }
431
432 stock fm_cs_get_user_tked(client)
433 {
434 return get_pdata_int(client, OFFSET_TKED, EXTRAOFFSET);
435 }
436
437 stock fm_cs_set_user_tked(client, tk=1, subtract=1)
438 {
439 set_pdata_int(client, OFFSET_TKED, tk ? 1 : 0, EXTRAOFFSET);
440
441 if( subtract )
442 {
443 new frags = get_user_frags(client) - subtract;
444
445 set_pev(client, pev_frags, float(frags));
446
447 static ScoreInfo;
448 if( ScoreInfo || (ScoreInfo = get_user_msgid("ScoreInfo")) )
449 {
450 emessage_begin(MSG_BROADCAST, ScoreInfo);
451 ewrite_byte(client);
452 ewrite_short(frags);
453 ewrite_short(fm_cs_get_user_deaths(client));
454 ewrite_short(0);
455 ewrite_short(_:fm_cs_get_user_team(client));
456 emessage_end();
457 }
458 }
459 }
460
461 stock fm_cs_get_user_driving(client)
462 {
463 return get_pdata_int(client, OFFSET_DRIVING, EXTRAOFFSET);
464 }
465
466 #define HAS_SHIELD (1<<24)
467
468 stock fm_cs_get_user_shield(client)
469 {
470 return (get_pdata_int(client, OFFSET_SHIELD, EXTRAOFFSET) & HAS_SHIELD) ? 1 : 0;
471 }
472
473 stock fm_cs_get_user_stationary(client)
474 {
475 return get_pdata_int(client, OFFSET_STATIONARY, EXTRAOFFSET);
476 }
477
478 enum CsArmorType
479 {
480 CS_ARMOR_NONE,
481 CS_ARMOR_KEVLAR,
482 CS_ARMOR_VESTHELM
483 };
484
485 stock fm_cs_get_user_armor(client, &CsArmorType:armortype)
486 {
487 armortype = CsArmorType:get_pdata_int(client, OFFSET_ARMORTYPE, EXTRAOFFSET);
488
489 static Float:armorvalue;
490 pev(client, pev_armorvalue, armorvalue);
491 return floatround(armorvalue);
492 }
493
494 stock fm_cs_set_user_armor(client, armorvalue, CsArmorType:armortype)
495 {
496 set_pdata_int(client, OFFSET_ARMORTYPE, _:armortype, EXTRAOFFSET);
497
498 set_pev(client, pev_armorvalue, float(armorvalue));
499
500 if( armortype != CS_ARMOR_NONE )
501 {
502 static ArmorType;
503 if( ArmorType || (ArmorType = get_user_msgid("ArmorType")) )
504 {
505 emessage_begin(MSG_ONE_UNRELIABLE, ArmorType, _, client);
506 ewrite_byte((armortype == CS_ARMOR_VESTHELM) ? 1 : 0);
507 emessage_end();
508 }
509 }
510 }
511
512 #define GLOCK18_SEMIAUTOMATIC 0
513 #define GLOCK18_BURST 2
514
515 #define FAMAS_AUTOMATIC 0
516 #define FAMAS_BURST 16
517
518 stock fm_cs_get_weapon_burst(entity)
519 {
520 new firemode = get_pdata_int(entity, OFFSET_SILENCER_FIREMODE, EXTRAOFFSET_WEAPONS);
521
522 switch( fm_cs_get_weapon_id(entity) )
523 {
524 case CSW_GLOCK18:
525 {
526 if( firemode == GLOCK18_BURST ) return 1;
527 }
528 case CSW_FAMAS:
529 {
530 if( firemode == FAMAS_BURST ) return 1;
531 }
532 }
533
534 return 0;
535 }
536
537 stock fm_cs_set_weapon_burst(entity, burstmode=1)
538 {
539 new weapon = fm_cs_get_weapon_id(entity);
540 if( weapon != CSW_GLOCK18 && weapon != CSW_FAMAS ) return;
541
542 static TextMsg;
543
544 static const messages[3][] =
545 {
546 "#Switch_To_BurstFire",
547 "#Switch_To_SemiAuto",
548 "#Switch_To_FullAuto"
549 };
550
551 static type;
552 new firemode = get_pdata_int(entity, OFFSET_SILENCER_FIREMODE, EXTRAOFFSET_WEAPONS);
553
554 switch( weapon )
555 {
556 case CSW_GLOCK18:
557 {
558 if( burstmode && firemode == GLOCK18_SEMIAUTOMATIC )
559 {
560 type = 0;
561 firemode = GLOCK18_BURST;
562 }
563 else if( !burstmode && firemode == GLOCK18_BURST )
564 {
565 type = 1;
566 firemode = GLOCK18_SEMIAUTOMATIC;
567 }
568 else return;
569 }
570 case CSW_FAMAS:
571 {
572 if( burstmode && firemode == FAMAS_AUTOMATIC )
573 {
574 type = 0;
575 firemode = FAMAS_BURST;
576 }
577 else if( !burstmode && firemode == FAMAS_BURST )
578 {
579 type = 2;
580 firemode = FAMAS_AUTOMATIC;
581 }
582 else return;
583 }
584 }
585
586 set_pdata_int(entity, OFFSET_SILENCER_FIREMODE, firemode, EXTRAOFFSET_WEAPONS);
587
588 new client = pev(entity, pev_owner);
589 if( is_user_alive(client) )
590 {
591 if( TextMsg || (TextMsg = get_user_msgid("TextMsg")) )
592 {
593 emessage_begin(MSG_ONE_UNRELIABLE, TextMsg, _, client);
594 ewrite_byte(4);
595 ewrite_string(messages[type]);
596 emessage_end();
597 }
598 }
599 }
600
601 #define M4A1_SILENCED (1<<2)
602 #define M4A1_ATTACHSILENCEANIM 6
603 #define M4A1_DETACHSILENCEANIM 13
604
605 #define USP_SILENCED (1<<0)
606 #define USP_ATTACHSILENCEANIM 7
607 #define USP_DETACHSILENCEANIM 15
608
609 stock fm_cs_get_weapon_silen(entity)
610 {
611 new weapon = fm_cs_get_weapon_id(entity);
612 if( weapon != CSW_M4A1 && weapon != CSW_USP ) return;
613
614 new silencemode = get_pdata_int(entity, OFFSET_SILENCER_FIREMODE, EXTRAOFFSET_WEAPONS);
615
616 switch( weapon )
617 {
618 case CSW_M4A1:
619 {
620 return (silencemode & M4A1_SILENCED);
621 }
622 case CSW_USP:
623 {
624 return (silencemode & USP_SILENCED);
625 }
626 }
627
628 return 0;
629 }
630
631 stock fm_cs_set_weapon_silen(entity, silence=1, draw_animation=1)
632 {
633 new weapon = fm_cs_get_weapon_id(entity);
634 if( weapon != CSW_M4A1 && weapon != CSW_USP ) return;
635
636 new silencemode = get_pdata_int(entity, OFFSET_SILENCER_FIREMODE, EXTRAOFFSET_WEAPONS);
637
638 static animation;
639 switch( weapon )
640 {
641 case CSW_M4A1:
642 {
643 if( silence && !(silencemode & M4A1_SILENCED) )
644 {
645 silencemode |= M4A1_SILENCED;
646 animation = M4A1_ATTACHSILENCEANIM;
647 }
648 else if( !silence && (silencemode & M4A1_SILENCED) )
649 {
650 silencemode &= ~M4A1_SILENCED;
651 animation = M4A1_DETACHSILENCEANIM;
652 }
653 else return;
654 }
655 case CSW_USP:
656 {
657 if( silence && !(silencemode & USP_SILENCED) )
658 {
659 silencemode |= USP_SILENCED;
660 animation = USP_ATTACHSILENCEANIM;
661 }
662 else if( !silence && (silencemode & USP_SILENCED) )
663 {
664 silencemode &= ~USP_SILENCED;
665 animation = USP_DETACHSILENCEANIM;
666 }
667 else return;
668 }
669 }
670
671 set_pdata_int(entity, OFFSET_SILENCER_FIREMODE, silencemode, EXTRAOFFSET_WEAPONS);
672
673 if( draw_animation )
674 {
675 new client = pev(entity, pev_owner);
676 if( pev_valid(client) )
677 {
678 set_pev(client, pev_weaponanim, animation);
679 }
680 }
681 }
682
683 stock fm_cs_get_weapon_ammo(entity)
684 {
685 return get_pdata_int(entity, OFFSET_WEAPONCLIP, EXTRAOFFSET_WEAPONS);
686 }
687
688 stock fm_cs_set_weapon_ammo(entity, clip)
689 {
690 set_pdata_int(entity, OFFSET_WEAPONCLIP, clip, EXTRAOFFSET_WEAPONS);
691 }
692
693 stock fm_cs_get_weapon_id(entity)
694 {
695 return get_pdata_int(entity, OFFSET_WEAPONID, EXTRAOFFSET_WEAPONS);
696 }
697
698 stock fm_cs_user_spawn(client)
699 {
700 ExecuteHamB(Ham_CS_RoundRespawn, client);
701 }
702
703 #define CSA_MP5NAVY 0
704 #define CSA_TMP 1
705 #define CSA_P90 2
706 #define CSA_MAC10 3
707 #define CSA_AK47 4
708 #define CSA_SG552 5
709 #define CSA_M4A1 6
710 #define CSA_AUG 7
711 #define CSA_SCOUT 8
712 #define CSA_G3SG1 9
713 #define CSA_AWP 10
714 #define CSA_M3 11
715 #define CSA_XM1014 12
716 #define CSA_M249 13
717 #define CSA_FLASHBANG 14
718 #define CSA_HEGRENADE 15
719 #define CSA_VEST 16
720 #define CSA_VESTHELM 17
721 #define CSA_SMOKEGRENADE 18
722
723 stock const _CSA_to_CSW[] =
724 {
725 CSW_MP5NAVY, CSW_TMP, CSW_P90, CSW_MAC10, CSW_AK47, CSW_SG552, CSW_M4A1, CSW_AUG, CSW_SCOUT, CSW_G3SG1,
726 CSW_AWP, CSW_M3, CSW_XM1014, CSW_M249, CSW_FLASHBANG, CSW_HEGRENADE, CSW_VEST, CSW_VESTHELM, CSW_SMOKEGRENADE
727 };
728
729 stock const _CSW_to_CSA[] =
730 {
731 -1, -1, CSA_SCOUT, CSA_HEGRENADE, CSA_XM1014, -1, CSA_MAC10, CSA_AUG, CSA_SMOKEGRENADE,
732 -1, -1, -1, -1, -1, -1, -1, -1, CSA_AWP, CSA_MP5NAVY, CSA_M249, CSA_M3, CSA_M4A1, CSA_TMP,
733 CSA_G3SG1, CSA_FLASHBANG, -1, CSA_SG552, CSA_AK47, CSA_P90, CSA_VEST, CSA_VESTHELM
734 };
735
736 stock fm_cs_get_armoury_type(entity)
737 {
738 new CSA_type = get_pdata_int(entity, OFFSET_CSATYPE, EXTRAOFFSET_WEAPONS);
739
740 return (0 <= CSA_type < sizeof(_CSA_to_CSW)) ? _CSA_to_CSW[CSA_type] : -1;
741 }
742
743 stock fm_cs_set_armoury_type(entity, type)
744 {
745 if( !(0 <= type < sizeof(_CSW_to_CSA)) ) return;
746
747 new CSA_type = _CSW_to_CSA[type];
748 if( CSA_type == -1 ) return;
749
750 set_pdata_int(entity, OFFSET_CSATYPE, CSA_type, EXTRAOFFSET_WEAPONS);
751 }
752
753 #define CS_MAPZONE_BUY (1<<0)
754 #define CS_MAPZONE_BOMBTARGET (1<<1)
755 #define CS_MAPZONE_HOSTAGE_RESCUE (1<<2)
756 #define CS_MAPZONE_ESCAPE (1<<3)
757 #define CS_MAPZONE_VIP_SAFETY (1<<4)
758
759 stock fm_cs_get_user_mapzones(client)
760 {
761 return get_pdata_int(client, OFFSET_MAPZONE, EXTRAOFFSET);
762 }
763
764 stock fm_cs_set_user_mapzones(client, mapzones)
765 {
766 set_pdata_int(client, OFFSET_MAPZONE, mapzones, EXTRAOFFSET);
767 }
768
769 enum
770 {
771 CS_RESET_ZOOM = 0, // Reset any zoom blocking (when using this type, mode has no effect)
772 CS_SET_NO_ZOOM, // Disable any sort of zoom (ie: to disable zoom in all weapons use this with mode=0)
773 CS_SET_FIRST_ZOOM, // Set first zoom (awp style)
774 CS_SET_SECOND_ZOOM, // Set second zoom (awp style)
775 CS_SET_AUGSG552_ZOOM, // Set aug/sg552 zoom style
776 };
777
778 stock fm_cs_get_user_submodel(client)
779 {
780 return pev(client, pev_body);
781 }
782
783 stock fm_cs_set_user_submodel(client, value)
784 {
785 set_pev(client, pev_body, value);
786 }
787
788 stock Float:fm_cs_get_user_lastactivity(client)
789 {
790 return get_pdata_float(client, OFFSET_LASTACTIVITY, EXTRAOFFSET);
791 }
792
793 stock fm_cs_set_user_lastactivity(client, Float:value)
794 {
795 set_pdata_float(client, OFFSET_LASTACTIVITY, value, EXTRAOFFSET);
796 }
797
798 stock fm_cs_get_user_hostagekills(client)
799 {
800 return get_pdata_int(client, OFFSET_HOSTAGEKILLS, EXTRAOFFSET);
801 }
802
803 stock fm_cs_set_user_hostagekills(client, value)
804 {
805 set_pdata_int(client, OFFSET_HOSTAGEKILLS, value, EXTRAOFFSET);
806 }
807
808 stock Float:fm_cs_get_hostage_lastuse(entity)
809 {
810 return get_pdata_float(entity, OFFSET_HOSTAGELASTUSE, EXTRAOFFSET);
811 }
812
813 stock fm_cs_set_hostage_lastuse(entity, Float:value)
814 {
815 set_pdata_float(entity, OFFSET_HOSTAGELASTUSE, value, EXTRAOFFSET);
816 }
817
818 stock Float:fm_cs_get_hostage_nextuse(entity)
819 {
820 return get_pdata_float(entity, OFFSET_HOSTAGENEXTUSE, EXTRAOFFSET);
821 }
822
823 stock fm_cs_set_hostage_nextuse(entity, Float:value)
824 {
825 set_pdata_float(entity, OFFSET_HOSTAGENEXTUSE, value, EXTRAOFFSET);
826 }
827
828 stock Float:fm_cs_get_c4_explode_time(entity)
829 {
830 return get_pdata_float(entity, OFFSET_C4_EXPLODETIME, EXTRAOFFSET);
831 }
832
833 stock fm_cs_set_c4_explode_time(entity, Float:value)
834 {
835 set_pdata_float(entity, OFFSET_C4_EXPLODETIME, value, EXTRAOFFSET);
836 }
837
838 stock bool:fm_cs_get_c4_defusing(entity)
839 {
840 return bool:get_pdata_int(entity, OFFSET_C4_DEFUSING, ACTUAL_EXTRA_OFFSET);
841 }
842
843 stock fm_cs_set_c4_defusing(entity, bool:defusing)
844 {
845 set_pdata_int(entity, OFFSET_C4_DEFUSING, _:defusing, ACTUAL_EXTRA_OFFSET);
846 }
847 /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
848 *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
849 */
850