Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //#if defined _insurgencydy_included
  2.   #endinput
  3. #endif
  4. #define _insurgencydy_included
  5.  
  6. //#include <sourcemod>
  7. //#include <sdktools>
  8. //#include <loghelper>
  9. #if defined REQUIRE_PLUGIN
  10. #undef REQUIRE_PLUGIN
  11. #include <updater>
  12. #include <smlib>
  13. #define REQUIRE_PLUGIN
  14. #else
  15. #include <updater>
  16. #include <smlib>
  17. #endif
  18.  
  19. // STATS TIME (SET DAYS AFTER STATS ARE DELETE OF NONACTIVE PLAYERS)
  20. #define PLAYER_STATSOLD 30
  21. #define MAX_DEFINABLE_WEAPONS 256
  22. #define MAX_DEFINABLE_GEAR 256
  23. #define MAX_DEFINABLE_AMMO 256
  24. #define MAX_DEFINABLE_EXPLOSIVES 256
  25. #define MAX_DEFINABLE_WEAPON_UPGRADES 256
  26.  
  27. #define MAX_WEAPON_LEN 32
  28. #define MAX_SQUAD_LEN 32
  29. #define MAX_CLASS_LEN 64
  30. #define MAX_CONTROLPOINTS 64
  31. #define PREFIX_LEN 7
  32. #define MAX_SQUADS 16
  33. #define SQUAD_SIZE 32
  34. #define MAX_MAPS 256
  35. #define MAX_GAMEMODES 32
  36.  
  37. /*              Player Flags            */
  38. #define     INS_PL_ZOOM             (1 << 0)        // 1        // Force to zoom
  39. #define     INS_PL_1                (1 << 1)        // 2        // It could be ducking but massive buggy to use
  40. #define     INS_PL_RUN              (1 << 2)        // 4        // Force to run if keep setting this, player cant normal walk or slow walk
  41. #define     INS_PL_WALK             (1 << 3)        // 8        // Force to walk only but player still can run just cannot normal walking
  42. #define     INS_PL_4                (1 << 4)        // 16       //
  43. #define     INS_PL_FOCUS            (1 << 5)        // 32       // Zoom Focus (Buggy)
  44. #define     INS_PL_SLIDE            (1 << 6)        // 64       // Force to sliding, if you keep setting this, player forever sliding lol
  45. #define     INS_PL_BUYZONE          (1 << 7)        // 128      // Buyzone, Resupply everywhere! (Note: Buyzone makes no friendlyfire damage)
  46. #define     INS_PL_8                (1 << 8)        // 256      //
  47. #define     INS_PL_BLOCKZONE        (1 << 9)        // 512      // Restricted Zone, Player will be restricted, (Note: This flag applied with INS_PL_LOWERZONE)
  48. #define     INS_PL_LOWERZONE        (1 << 10)       // 1024     // Weapon Lower Zone
  49. #define     INS_PL_SPAWNZONE        (1 << 11)       // 2048     // ENTER SPAWN ZONE (Also can resupply)
  50. #define     INS_PL_12               (1 << 12)       // 4096     //
  51.  
  52. #define     MAX_BUTTONS 25
  53. #define     INS_ATTACK1             (1 << 0)
  54. #define     INS_JUMP                (1 << 1)
  55. #define     INS_DUCK                (1 << 2)
  56. #define     INS_PRONE               (1 << 3)
  57. #define     INS_FORWARD             (1 << 4)
  58. #define     INS_BACKWARD            (1 << 5)
  59. #define     INS_USE                 (1 << 6)
  60. #define     INS_LEFT                (1 << 9)
  61. #define     INS_RIGHT               (1 << 10)
  62. #define     INS_RELOAD              (1 << 11)
  63. #define     INS_FIREMODE            (1 << 12)
  64. #define     INS_LEAN_LEFT           (1 << 13)
  65. #define     INS_LEAN_RIGHT          (1 << 14)
  66. #define     INS_SPRINT              (1 << 15)
  67. #define     INS_WALK                (1 << 16)
  68. #define     INS_SPECIAL1            (1 << 17)
  69. #define     INS_AIM                 (1 << 18)
  70. #define     INS_SCOREBOARD          (1 << 19)
  71. #define     INS_FLASHLIGHT          (1 << 22)
  72. #define     INS_AIM_TOGGLE          (1 << 27)
  73. #define     INS_ACCESSORY           (1 << 28)
  74.  
  75.  
  76. /*              COLORS                          */
  77.  
  78. #define     COLOR_INSURGENTS            "AC4029FF"
  79. #define     COLOR_SECURITY              "84961CFF"
  80. #define     COLOR_SPECTATOR             "F2EBD8FF"
  81. #define     COLOR_ALICEBLUE             "F0F8FFFF"
  82. #define     COLOR_ALLIES                "4D7942FF" // SAME AS ALLIES TEAM IN DOD:S
  83. #define     COLOR_ANCIENT               "EB4B4BFF" // SAME AS ANCIENT ITEM RARITY IN DOTA 2
  84. #define     COLOR_ANTIQUEWHITE          "FAEBD7FF"
  85. #define     COLOR_AQUA                  "00FFFFFF"
  86. #define     COLOR_AQUAMARINE            "7FFFD4FF"
  87. #define     COLOR_ARCANA                "ADE55CFF" // SAME AS ARCANA ITEM RARITY IN DOTA 2
  88. #define     COLOR_AXIS                  "FF4040FF" // SAME AS AXIS TEAM IN DOD:S
  89. #define     COLOR_AZURE                 "007FFFFF"
  90. #define     COLOR_BEIGE                 "F5F5DCFF"
  91. #define     COLOR_BISQUE                "FFE4C4FF"
  92. #define     COLOR_BLACK                 "000000FF"
  93. #define     COLOR_BLANCHEDALMOND        "FFEBCDFF"
  94. #define     COLOR_BLUE                  "99CCFFFF" // SAME AS BLU/COUNTER-TERRORIST TEAM COLOR
  95. #define     COLOR_BLUEVIOLET            "8A2BE2FF"
  96. #define     COLOR_BROWN                 "A52A2AFF"
  97. #define     COLOR_BURLYWOOD             "DEB887FF"
  98. #define     COLOR_CADETBLUE             "5F9EA0FF"
  99. #define     COLOR_CHARTREUSE            "7FFF00FF"
  100. #define     COLOR_CHOCOLATE             "D2691EFF"
  101. #define     COLOR_COLLECTORS            "AA0000FF" // SAME AS COLLECTOR'S ITEM QUALITY IN TF2
  102. #define     COLOR_COMMON                "B0C3D9FF" // SAME AS COMMON ITEM RARITY IN DOTA 2
  103. #define     COLOR_COMMUNITY             "70B04AFF" // SAME AS COMMUNITY ITEM QUALITY IN TF2
  104. #define     COLOR_CORAL                 "FF7F50FF"
  105. #define     COLOR_CORNFLOWERBLUE        "6495EDFF"
  106. #define     COLOR_CORNSILK              "FFF8DCFF"
  107. #define     COLOR_CORRUPTED             "A32C2EFF" // SAME AS CORRUPTED ITEM QUALITY IN DOTA 2
  108. #define     COLOR_CRIMSON               "DC143CFF"
  109. #define     COLOR_CYAN                  "00FFFFFF"
  110. #define     COLOR_DARKBLUE              "00008BFF"
  111. #define     COLOR_DARKCYAN              "008B8BFF"
  112. #define     COLOR_DARKGOLDENROD         "B8860BFF"
  113. #define     COLOR_DARKGRAY              "A9A9A9FF"
  114. #define     COLOR_DARKGREY              "A9A9A9FF"
  115. #define     COLOR_DARKGREEN             "006400FF"
  116. #define     COLOR_DARKKHAKI             "BDB76BFF"
  117. #define     COLOR_DARKMAGENTA           "8B008BFF"
  118. #define     COLOR_DARKOLIVEGREEN        "556B2FFF"
  119. #define     COLOR_DARKORANGE            "FF8C00FF"
  120. #define     COLOR_DARKORCHID            "9932CCFF"
  121. #define     COLOR_DARKRED               "8B0000FF"
  122. #define     COLOR_DARKSALMON            "E9967AFF"
  123. #define     COLOR_DARKSEAGREEN          "8FBC8FFF"
  124. #define     COLOR_DARKSLATEBLUE         "483D8BFF"
  125. #define     COLOR_DARKSLATEGRAY         "2F4F4FFF"
  126. #define     COLOR_DARKSLATEGREY         "2F4F4FFF"
  127. #define     COLOR_DARKTURQUOISE         "00CED1FF"
  128. #define     COLOR_DARKVIOLET            "9400D3FF"
  129. #define     COLOR_DEEPPINK              "FF1493FF"
  130. #define     COLOR_DEEPSKYBLUE           "00BFFFFF"
  131. #define     COLOR_DIMGRAY               "696969FF"
  132. #define     COLOR_DIMGREY               "696969FF"
  133. #define     COLOR_DODGERBLUE            "1E90FFFF"
  134. #define     COLOR_EXALTED               "CCCCCDFF" // SAME AS EXALTED ITEM QUALITY IN DOTA 2
  135. #define     COLOR_FIREBRICK             "B22222FF"
  136. #define     COLOR_FLORALWHITE           "FFFAF0FF"
  137. #define     COLOR_FORESTGREEN           "228B22FF"
  138. #define     COLOR_FROZEN                "4983B3FF" // SAME AS FROZEN ITEM QUALITY IN DOTA 2
  139. #define     COLOR_FUCHSIA               "FF00FFFF"
  140. #define     COLOR_FULLBLUE              "0000FFFF"
  141. #define     COLOR_FULLRED               "FF0000FF"
  142. #define     COLOR_GAINSBORO             "DCDCDCFF"
  143. #define     COLOR_GENUINE               "4D7455FF" // SAME AS GENUINE ITEM QUALITY IN TF2
  144. #define     COLOR_GHOSTWHITE            "F8F8FFFF"
  145. #define     COLOR_GOLD                  "FFD700FF"
  146. #define     COLOR_GOLDENROD             "DAA520FF"
  147. #define     COLOR_GRAY                  "CCCCCCFF" // SAME AS SPECTATOR TEAM COLOR
  148. #define     COLOR_GREY                  "CCCCCCFF"
  149. #define     COLOR_GREEN                 "3EFF3EFF"
  150. #define     COLOR_GREENYELLOW           "ADFF2FFF"
  151. #define     COLOR_HAUNTED               "38F3ABFF" // SAME AS HAUNTED ITEM QUALITY IN TF2
  152. #define     COLOR_HONEYDEW              "F0FFF0FF"
  153. #define     COLOR_HOTPINK               "FF69B4FF"
  154. #define     COLOR_IMMORTAL              "E4AE33FF" // SAME AS IMMORTAL ITEM RARITY IN DOTA 2
  155. #define     COLOR_INDIANRED             "CD5C5CFF"
  156. #define     COLOR_INDIGO                "4B0082FF"
  157. #define     COLOR_IVORY                 "FFFFF0FF"
  158. #define     COLOR_KHAKI                 "F0E68CFF"
  159. #define     COLOR_LAVENDER              "E6E6FAFF"
  160. #define     COLOR_LAVENDERBLUSH         "FFF0F5FF"
  161. #define     COLOR_LAWNGREEN             "7CFC00FF"
  162. #define     COLOR_LEGENDARY             "D32CE6FF" // SAME AS LEGENDARY ITEM RARITY IN DOTA 2
  163. #define     COLOR_LEMONCHIFFON          "FFFACDFF"
  164. #define     COLOR_LIGHTBLUE             "ADD8E6FF"
  165. #define     COLOR_LIGHTCORAL            "F08080FF"
  166. #define     COLOR_LIGHTCYAN             "E0FFFFFF"
  167. #define     COLOR_LIGHTGOLDENRODYELLOW  "FAFAD2FF"
  168. #define     COLOR_LIGHTGRAY             "D3D3D3FF"
  169. #define     COLOR_LIGHTGREY             "D3D3D3FF"
  170. #define     COLOR_LIGHTGREEN            "99FF99FF"
  171. #define     COLOR_LIGHTPINK             "FFB6C1FF"
  172. #define     COLOR_LIGHTSALMON           "FFA07AFF"
  173. #define     COLOR_LIGHTSEAGREEN         "20B2AAFF"
  174. #define     COLOR_LIGHTSKYBLUE          "87CEFAFF"
  175. #define     COLOR_LIGHTSLATEGRAY        "778899FF"
  176. #define     COLOR_LIGHTSLATEGREY        "778899FF"
  177. #define     COLOR_LIGHTSTEELBLUE        "B0C4DEFF"
  178. #define     COLOR_LIGHTYELLOW           "FFFFE0FF"
  179. #define     COLOR_LIME                  "00FF00FF"
  180. #define     COLOR_LIMEGREEN             "32CD32FF"
  181. #define     COLOR_LINEN                 "FAF0E6FF"
  182. #define     COLOR_MAGENTA               "FF00FFFF"
  183. #define     COLOR_MAROON                "800000FF"
  184. #define     COLOR_MEDIUMAQUAMARINE      "66CDAAFF"
  185. #define     COLOR_MEDIUMBLUE            "0000CDFF"
  186. #define     COLOR_MEDIUMORCHID          "BA55D3FF"
  187. #define     COLOR_MEDIUMPURPLE          "9370D8FF"
  188. #define     COLOR_MEDIUMSEAGREEN        "3CB371FF"
  189. #define     COLOR_MEDIUMSLATEBLUE       "7B68EEFF"
  190. #define     COLOR_MEDIUMSPRINGGREEN     "00FA9AFF"
  191. #define     COLOR_MEDIUMTURQUOISE       "48D1CCFF"
  192. #define     COLOR_MEDIUMVIOLETRED       "C71585FF"
  193. #define     COLOR_MIDNIGHTBLUE          "191970FF"
  194. #define     COLOR_MINTCREAM             "F5FFFAFF"
  195. #define     COLOR_MISTYROSE             "FFE4E1FF"
  196. #define     COLOR_MOCCASIN              "FFE4B5FF"
  197. #define     COLOR_MYTHICAL              "8847FFFF" // SAME AS MYTHICAL ITEM RARITY IN DOTA 2
  198. #define     COLOR_NAVAJOWHITE           "FFDEADFF"
  199. #define     COLOR_NAVY                  "000080FF"
  200. #define     COLOR_NORMAL                "B2B2B2FF" // SAME AS NORMAL ITEM QUALITY IN TF2
  201. #define     COLOR_OLDLACE               "FDF5E6FF"
  202. #define     COLOR_OLIVE                 "9EC34FFF"
  203. #define     COLOR_OLIVEDRAB             "6B8E23FF"
  204. #define     COLOR_ORANGE                "FFA500FF"
  205. #define     COLOR_ORANGERED             "FF4500FF"
  206. #define     COLOR_ORCHID                "DA70D6FF"
  207. #define     COLOR_PALEGOLDENROD         "EEE8AAFF"
  208. #define     COLOR_PALEGREEN             "98FB98FF"
  209. #define     COLOR_PALETURQUOISE         "AFEEEEFF"
  210. #define     COLOR_PALEVIOLETRED         "D87093FF"
  211. #define     COLOR_PAPAYAWHIP            "FFEFD5FF"
  212. #define     COLOR_PEACHPUFF             "FFDAB9FF"
  213. #define     COLOR_PERU                  "CD853FFF"
  214. #define     COLOR_PINK                  "FFC0CBFF"
  215. #define     COLOR_PLUM                  "DDA0DDFF"
  216. #define     COLOR_POWDERBLUE            "B0E0E6FF"
  217. #define     COLOR_PURPLE                "800080FF"
  218. #define     COLOR_RARE                  "4B69FFFF" // SAME AS RARE ITEM RARITY IN DOTA 2
  219. #define     COLOR_RED                   "FF4040FF" // SAME AS RED/TERRORIST TEAM COLOR
  220. #define     COLOR_ROSYBROWN             "BC8F8FFF"
  221. #define     COLOR_ROYALBLUE             "4169E1FF"
  222. #define     COLOR_SADDLEBROWN           "8B4513FF"
  223. #define     COLOR_SALMON                "FA8072FF"
  224. #define     COLOR_SANDYBROWN            "F4A460FF"
  225. #define     COLOR_SEAGREEN              "2E8B57FF"
  226. #define     COLOR_SEASHELL              "FFF5EEFF"
  227. #define     COLOR_SELFMADE              "70B04AFF" // SAME AS SELF-MADE ITEM QUALITY IN TF2
  228. #define     COLOR_SIENNA                "A0522DFF"
  229. #define     COLOR_SILVER                "C0C0C0FF"
  230. #define     COLOR_SKYBLUE               "87CEEBFF"
  231. #define     COLOR_SLATEBLUE             "6A5ACDFF"
  232. #define     COLOR_SLATEGRAY             "708090FF"
  233. #define     COLOR_SLATEGREY             "708090FF"
  234. #define     COLOR_SNOW                  "FFFAFAFF"
  235. #define     COLOR_SPRINGGREEN           "00FF7FFF"
  236. #define     COLOR_STEELBLUE             "4682B4FF"
  237. #define     COLOR_STRANGE               "CF6A32FF" // SAME AS STRANGE ITEM QUALITY IN TF2
  238. #define     COLOR_TAN                   "D2B48CFF"
  239. #define     COLOR_TEAL                  "008080FF"
  240. #define     COLOR_THISTLE               "D8BFD8FF"
  241. #define     COLOR_TOMATO                "FF6347FF"
  242. #define     COLOR_TURQUOISE             "40E0D0FF"
  243. #define     COLOR_UNCOMMON              "B0C3D9FF" // SAME AS UNCOMMON ITEM RARITY IN DOTA 2
  244. #define     COLOR_UNIQUE                "FFD700FF" // SAME AS UNIQUE ITEM QUALITY IN TF2
  245. #define     COLOR_UNUSUAL               "8650ACFF" // SAME AS UNUSUAL ITEM QUALITY IN TF2
  246. #define     COLOR_VALVE                 "A50F79FF" // SAME AS VALVE ITEM QUALITY IN TF2
  247. #define     COLOR_VINTAGE               "476291FF" // SAME AS VINTAGE ITEM QUALITY IN TF2
  248. #define     COLOR_VIOLET                "EE82EEFF"
  249. #define     COLOR_WHEAT                 "F5DEB3FF"
  250. #define     COLOR_WHITE                 "FFFFFFFF"
  251. #define     COLOR_WHITESMOKE            "F5F5F5FF"
  252. #define     COLOR_YELLOW                "FFFF00FF"
  253. #define     COLOR_YELLOWGREEN           "9ACD32FF"
  254.  
  255.  
  256.  
  257. native int Ins_ObjectiveResource_GetProp(const char[] prop, int size = 4, int element = 0);
  258. //native Ins_Log(ELOG_LEVEL:level,const String:format[], any:...);
  259. native int Ins_GetMaxClip1(int weapon);
  260. native int Ins_GetWeaponGetMaxClip1(int weapon);
  261. native int Ins_GetDefaultClip1(int weapon);
  262. native void Ins_DecrementAmmo(int weapon, int value);
  263.  
  264. //native Ins_AddMags(client, value);
  265. native float Ins_ObjectiveResource_GetPropFloat(const char[] prop, int size = 4, int element = 0);
  266. native int Ins_ObjectiveResource_GetPropEnt(const char[] prop, int element = 0);
  267. native bool Ins_ObjectiveResource_GetPropBool(const char[] prop, int element = 0);
  268. native int Ins_ObjectiveResource_GetPropVector(const char[] prop, float vec[3], int element = 0);
  269. native int Ins_ObjectiveResource_GetPropString(const char prop, char[] buffer, int maxlen);
  270. native bool Ins_InCounterAttack();
  271. native int Ins_GetPlayerScore(int client);
  272. native int Ins_GetPlayerClass(int client, char[] buffer, int maxlen);
  273. native Ins_GetClassName(int squad,int squad_slot);
  274.  
  275. //native GameLogic_();
  276. native void Ins_GetWeaponName(int weaponid, char[] buffer, int maxlen);
  277. native int Ins_GetWeaponId(char[] weapon_name);
  278.  
  279. int StuckCheck[MAXPLAYERS+1] = {0, ...};
  280. bool isStuck[MAXPLAYERS+1];
  281.  
  282. float Step;
  283. float RadiusSize;
  284. float Ground_Velocity[3] = {0.0, 0.0, -300.0};
  285.  
  286.  
  287. // Team numbers. This is Insurgency specific right now
  288. // TODO: Add support for DoI style factions, or make it load from a cfg file
  289. enum Teams
  290. {
  291.     TEAM_NONE = 0,
  292.     TEAM_SPECTATORS,
  293.     TEAM_SECURITY,
  294.     TEAM_INSURGENTS,
  295. }
  296.  
  297. // Round stats for players
  298. enum RoundStatFields
  299. {
  300.     STAT_KILLS = 0,
  301.     STAT_DEATHS,
  302.     STAT_SHOTS,
  303.     STAT_HITS,
  304.     STAT_GRENADES,
  305.     STAT_CAPTURES,
  306.     STAT_CACHES,
  307.     STAT_DMG_GIVEN,
  308.     STAT_DMG_TAKEN,
  309.     STAT_TEAMKILLS,
  310.     STAT_SCORE,
  311.     STAT_SUPPRESSIONS,
  312.     STAT_ACCURACY,
  313. }
  314.  
  315. // Damage hitgroups
  316. enum Hitgroups
  317. {
  318.     HITGROUP_GENERIC = 0,
  319.     HITGROUP_HEAD,
  320.     HITGROUP_CHEST,
  321.     HITGROUP_STOMACH,
  322.     HITGROUP_LEFTARM,
  323.     HITGROUP_RIGHTARM,
  324.     HITGROUP_LEFTLEG,
  325.     HITGROUP_RIGHTLEG,
  326. }
  327.  
  328. // Weapon stat fields
  329. enum WeaponStatFields
  330. {
  331.     LOG_HIT_SHOTS = 0,
  332.     LOG_HIT_HITS,
  333.     LOG_HIT_KILLS,
  334.     LOG_HIT_HEADSHOTS,
  335.     LOG_HIT_TEAMKILLS,
  336.     LOG_HIT_DAMAGE,
  337.     LOG_HIT_DEATHS,
  338.     LOG_HIT_GENERIC,
  339.     LOG_HIT_HEAD,
  340.     LOG_HIT_CHEST,
  341.     LOG_HIT_STOMACH,
  342.     LOG_HIT_LEFTARM,
  343.     LOG_HIT_RIGHTARM,
  344.     LOG_HIT_LEFTLEG,
  345.     LOG_HIT_RIGHTLEG,
  346. }
  347.  
  348. // Offset of end of weaponstats/beginning of weaponstats2
  349. #define LOG_HIT_OFFSET 7
  350.  
  351. // Log levels
  352. enum LOG_LEVEL
  353. {
  354.     DEFAULT = 0,
  355.     TRACE,
  356.     DEBUG,
  357.     INFO,
  358.     WARN,
  359.     ERROR
  360. }
  361.  
  362. // Log level names
  363. char g_sLogLevel[6][32] =
  364. {
  365.     "default",
  366.     "trace",
  367.     "debug",
  368.     "info",
  369.     "warn",
  370.     "error"
  371. };
  372.  
  373. // Global log level variable
  374. // = sizeof(g_sLogLevel);
  375. LOG_LEVEL g_iLogLevel;
  376.  
  377. /**
  378.  * Log events to console, based upon level
  379.  *
  380.  * @param level
  381.  */
  382. stock void InsLog(LOG_LEVEL level, const char[] format, any ...)
  383. {
  384.     if ((level) && (level > g_iLogLevel)) {
  385.         return;
  386.     }
  387.     char buffer[512];
  388.     char sLevel[32];
  389.     String_ToUpper(g_sLogLevel[level], sLevel, sizeof(sLevel));
  390.     VFormat(buffer, sizeof(buffer), format, 3);
  391.     PrintToServer("[%s] [%s] %s", PLUGIN_LOG_PREFIX, sLevel, buffer);
  392. }
  393.  
  394. /**
  395.  *
  396.  *
  397.  * @param
  398.  */
  399. stock void AddFolderToDownloadTable(const char[] Directory, bool recursive = false) {
  400.     char FileName[64];
  401.     char Path[512];
  402.     DirectoryListing Dir = OpenDirectory(Directory);
  403.     FileType Type;
  404.     while (Dir.GetNext(FileName, sizeof(FileName), Type))
  405.     {
  406.         if (Type == FileType_Directory && recursive)
  407.         {
  408.             FormatEx(Path, sizeof(Path), "%s/%s", Directory, FileName);
  409.             AddFolderToDownloadTable(FileName, recursive);
  410.             continue;
  411.         }
  412.         if (Type != FileType_File) {
  413.             continue;
  414.         }
  415.         FormatEx(Path, sizeof(Path), "%s/%s", Directory, FileName);
  416.         AddFileToDownloadsTable(Path);
  417.     }
  418.     return;
  419. }
  420.  
  421. /* Returns True if the client is an ingame player, False otherwise.
  422.  * Checks are performed in the order least likely to spew an error.
  423.  *
  424.  * @return                  If the client is a valid client.
  425.  */
  426. stock bool IsValidClient(int client)
  427. {
  428.     return (client > 0 && client <= MaxClients &&
  429.         IsClientConnected(client) && IsClientInGame(client) &&
  430.         !IsClientReplay(client) && !IsClientSourceTV(client));
  431. }
  432.  
  433. /**
  434.  * Counts the players in a team, alive or dead.
  435.  *
  436.  * @param team             Team index.
  437.  * @return                 Number of players.
  438.  */
  439. stock int Team_CountPlayers(int team)
  440. {
  441.     int count = 0;
  442.     for (int i = 1; i <= MaxClients; i++)
  443.     {
  444.         if (IsValidClient(i) && GetClientTeam(i) == team)
  445.         {
  446.           count++;
  447.         }
  448.     }
  449.     return count;
  450. }
  451.  
  452. /**
  453.  * Counts the number of living players in a team.
  454.  *
  455.  * @param team             Team index.
  456.  * @return                 Number of living players.
  457.  */
  458. stock int Team_CountAlivePlayers(int team)
  459. {
  460.  
  461.     int count = 0;
  462.     for (int i = 1; i <= MaxClients; i++)
  463.     {
  464.         if (IsValidClient(i) && GetClientTeam(i) == team && IsPlayerAlive(i))
  465.         {
  466.             count++;
  467.         }
  468.     }
  469.     return count;
  470.  }
  471.  
  472. /*
  473. stock Client_IsValid(int client, bool checkConnected) {
  474.     if (client > 4096) {
  475.         client = EntRefToEntIndex(client);
  476.     }
  477.  
  478.     if (client < 1 || client > MaxClients) {
  479.         return false;
  480.     }
  481.  
  482.     if (checkConnected && !IsClientConnected(client)) {
  483.         return false;
  484.     }
  485.  
  486.     return true;
  487. }
  488. */
  489.  
  490. /**
  491.  *
  492.  *
  493.  * @param
  494.  */
  495. stock bool ClientCanSeeClient(int client, int target, float distance = 0.0, float height = 50.0) {
  496.     float vTargetPosition[3];
  497.     GetEntPropVector(target, Prop_Send, "m_vecOrigin", vTargetPosition);
  498.     return ClientCanSeeVector(client, targetpos, distance, height);
  499. }
  500.  
  501.  
  502. /**
  503.  *
  504.  *
  505.  * @param
  506.  */
  507. stock bool ClientCanSeeVector(int client, float vTargetPosition[3], float distance = 0.0, float height = 50.0)
  508. {
  509.     float vClientPosition[3];
  510.     GetEntPropVector(client, Prop_Send, "m_vecOrigin", vClientPosition);
  511.     vClientPosition[2] += height;
  512.  
  513.     if (distance == 0.0 || GetVectorDistance(vClientPosition, vTargetPosition, false) < distance)
  514.     {
  515.         Handle trace = TR_TraceRayFilterEx(vClientPosition, vTargetPosition, MASK_SOLID_BRUSHONLY, RayType_EndPoint, Base_TraceFilter);
  516.  
  517.         if (TR_DidHit(trace))
  518.         {
  519.             delete trace;
  520.             return (false);
  521.         }
  522.  
  523.         delete trace;
  524.  
  525.         return (true);
  526.     }
  527.     return false;
  528. }
  529.  
  530. /**
  531.  *
  532.  *
  533.  * @param
  534.  */
  535.  
  536. public bool Base_TraceFilter(int entity, int contentsMask, any data)
  537. {
  538.     if (entity != data)
  539.         return (false);
  540.  
  541.     return (true);
  542. }
  543.  
  544. /**
  545.  *
  546.  *
  547.  * @param
  548.  */
  549. stock bool IsClientInSightRange(int client, int target, float angle = 90.0, float distance = 0.0, bool heightcheck = true, bool negativeangle = false)
  550. {
  551.     float targetpos[3];
  552. //  if (!isClientConnectedIngameAlive(target))
  553. //      ThrowError("Target is not Alive.");
  554.     GetClientAbsOrigin(target, targetpos);
  555.     return IsVectorInSightRange(client, targetpos, angle, distance, heightcheck, negativeangle);
  556. }
  557.  
  558. /**
  559.  *
  560.  *
  561.  * @param
  562.  */
  563. stock bool IsVectorInSightRange(int client, float targetpos[3], float angle = 90.0, float distance = 0.0, bool heightcheck = true, bool negativeangle = false) {
  564.     if (angle > 360.0 || angle < 0.0) {
  565.         ThrowError("Angle Max : 360 & Min : 0. %d isn't proper angle.", angle);
  566.     }
  567. //  if (!isClientConnectedIngameAlive(client))
  568. //      ThrowError("Client is not Alive.");
  569.  
  570.     float clientpos[3];
  571.     float anglevector[3];
  572.     float targetvector[3];
  573.     float resultangle;
  574.     float resultdistance;
  575.  
  576.     GetClientEyeAngles(client, anglevector);
  577.     anglevector[0] = anglevector[2] = 0.0;
  578.     GetAngleVectors(anglevector, anglevector, NULL_VECTOR, NULL_VECTOR);
  579.     NormalizeVector(anglevector, anglevector);
  580.     if (negativeangle) {
  581.         NegateVector(anglevector);
  582.     }
  583.  
  584.     GetClientAbsOrigin(client, clientpos);
  585.     if (heightcheck && distance > 0) {
  586.         resultdistance = GetVectorDistance(clientpos, targetpos);
  587.     }
  588.     clientpos[2] = targetpos[2] = 0.0;
  589.     MakeVectorFromPoints(clientpos, targetpos, targetvector);
  590.     NormalizeVector(targetvector, targetvector);
  591.  
  592.     resultangle = RadToDeg(ArcCosine(GetVectorDotProduct(targetvector, anglevector)));
  593.  
  594.     if (resultangle <= angle/2) {
  595.         if (distance > 0) {
  596.             if (!heightcheck) {
  597.                 resultdistance = GetVectorDistance(clientpos, targetpos);
  598.             }
  599.             if (distance >= resultdistance) {
  600.                 return true;
  601.             }
  602.             else {
  603.                 return false;
  604.             }
  605.         }
  606.         else {
  607.             return true;
  608.         }
  609.     }
  610.     else {
  611.         return false;
  612.     }
  613. }
  614.  
  615. /**
  616.  *
  617.  *
  618.  * @param
  619.  */
  620. stock int GetSendProp(const char[] sNetClass, const char[] sPropName, int iFail = 1)
  621. {
  622.     int m_iProp = FindSendPropInfo(sNetClass, sPropName);
  623.     if (iFail)
  624.     {
  625.         if (m_iProp == -1)
  626.         {
  627.             LogError("Can't find %s::%s", sNetClass, sPropName);
  628.         }
  629.     }
  630.     return m_iProp;
  631. }
  632.  
  633.  
  634. //Get and Set Ammo for storing weapons and ammo on death (reference weapon to make sure it exists)
  635. stock int GetWeaponAmmo(int client, int weapon, int type) {
  636.     PropType proptype = Prop_Data;
  637.     int ammoOffset = FindSendPropInfo("CINSPlayer", "m_iAmmo");
  638.     int m_iPrimaryAmmoType;
  639.     int ammo;
  640.  
  641.     //return GetEntData(client, ammoOffset+(slot*4));
  642.     // primary
  643.     if (type == 0)  {
  644.         m_iPrimaryAmmoType = GetEntProp(weapon, proptype, "m_iPrimaryAmmoType");
  645.         ammo = GetEntProp(client, proptype, "m_iAmmo", _, m_iPrimaryAmmoType);
  646.     }
  647.     // secondary
  648.     else if (type == 1)  {
  649.         m_iPrimaryAmmoType = GetEntProp(weapon, proptype, "m_iSecondaryAmmoType");
  650.         ammo = GetEntProp(client, proptype, "m_iAmmo", _, m_iPrimaryAmmoType);
  651.     }
  652.     // grenades
  653.     else if (type == 3)  {
  654.         m_iPrimaryAmmoType = GetEntProp(weapon, proptype, "m_iPrimaryAmmoType");
  655.         //PrintToServer("m_iPrimaryAmmoType %d", m_iPrimaryAmmoType);
  656.         ammo = GetEntProp(client, proptype, "m_iAmmo", _, m_iPrimaryAmmoType);
  657.     }
  658.     //PrintToServer("m_iPrimaryAmmoType: %i, Ammo %i", m_iPrimaryAmmoType, ammo);
  659.     return ammo;
  660. }
  661.  
  662. stock void SetWeaponAmmo(int client, int weapon, int ammo, int type) {
  663.     PropType proptype = Prop_Send;
  664.     //new ammoOffset = FindSendPropInfo("CBasePlayer", "m_iAmmo");
  665.     int m_ammoType;
  666.  
  667.     //return GetEntData(client, ammoOffset+(slot*4));
  668.     // primary
  669.     if (type == 0)  {
  670.         m_ammoType = GetEntProp(weapon, proptype, "m_iPrimaryAmmoType");
  671.  
  672.         //PrintToServer("ammoOffset: %i, m_ammoType %i", ammoOffset, m_ammoType);
  673.         SetEntProp(client, proptype, "m_iAmmo", ammo, _, m_ammoType);
  674.     }
  675.     // secondary
  676.     else if (type == 1)  {
  677.         m_ammoType = GetEntProp(weapon, proptype, "m_iSecondaryAmmoType");
  678.         SetEntProp(client, proptype, "m_iAmmo", ammo, _, m_ammoType);
  679.     }
  680.     // grenades
  681.     else if (type == 3)  {
  682.  
  683.     }
  684. }
  685.  
  686. //Get / Set primary ammo count as it was when died
  687. stock int GetPrimaryAmmo(int client, int weap, int type) {
  688.     //new myweapons = FindSendPropInfo("CCSPlayer", "m_hMyWeapons");
  689.     //new weap = GetEntDataEnt2(client, myweapons+ (slot*4));
  690.     if (IsValidEntity(weap)) {
  691.         if (type == 0) {
  692.             return GetEntData(weap, FindSendPropInfo("CBaseCombatWeapon", "m_iClip1"));
  693.         }
  694.         else if (type == 1) {
  695.             return GetEntData(weap, FindSendPropInfo("CBaseCombatWeapon", "m_iClip2"));
  696.         }
  697.     }
  698.     return 0;
  699. }
  700.  
  701.  
  702.  
  703.  
  704. stock int GetGrenadeAmmo(int client, int grenadeType) {
  705.     PropType proptype = Prop_Data;
  706.     int ammo;
  707.     ////PrintToServer("grenadeType %d", grenadeType);
  708.     ammo = GetEntProp(client, proptype, "m_iAmmo", _, grenadeType);
  709.     return ammo;
  710. }
  711.  
  712. stock void SetGrenadeAmmo(int client, int grenadeType, int grenadeAmount) {
  713.     PropType proptype = Prop_Data;
  714.     //PrintToServer("grenadeType %d, amount to set: %d", grenadeType, grenadeAmount);
  715.     SetEntProp(client, proptype, "m_iAmmo", grenadeAmount, _, grenadeType);
  716. }
  717.  
  718.  
  719.  
  720. /*
  721. #define Gren_M67 68
  722. #define Gren_Incen 73
  723. #define Gren_Molot 74
  724. #define Gren_M18 70
  725. #define Gren_Flash 71
  726. #define Gren_F1 69
  727. #define Gren_IED 72
  728. #define Gren_C4 72
  729. #define Gren_AT4 67
  730. #define Gren_RPG7 61
  731. */
  732.  
  733.  
  734.  
  735. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  736. //                                  Stuck START
  737. //                                  Stuck START
  738. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  739.  
  740.  
  741. stock void StartStuckDetection(int client) {
  742.     StuckCheck[client]++;
  743.     isStuck[client] = false;
  744.     //CheckIfPlayerCanMove(client, 0, 500.0, 0.0, 0.0);
  745.     // Check if player stuck in prop
  746.     isStuck[client] = CheckIfPlayerIsStuck(client);
  747.     if (isStuck[client]) {
  748.         //Can't fix
  749.         //ForcePlayerSuicide(client);
  750.         //AddLifeForStaticKilling(client);
  751.     }
  752. }
  753.  
  754.  
  755. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  756. //                                  Stuck Detection
  757. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  758.  
  759.  
  760. stock bool CheckIfPlayerIsStuck(int client) {
  761.     float vecMin[3];
  762.     float vecMax[3];
  763.     float vecOrigin[3];
  764.  
  765.     GetClientMins(client, vecMin);
  766.     GetClientMaxs(client, vecMax);
  767.     GetClientAbsOrigin(client, vecOrigin);
  768.  
  769.     TR_TraceHullFilter(vecOrigin, vecOrigin, vecMin, vecMax, MASK_SOLID, TraceEntityFilterSolid);
  770.     // head in wall ?
  771.     return TR_DidHit();
  772. }
  773.  
  774.  
  775. public bool TraceEntityFilterSolid(int entity, int contentsMask) {
  776.     return entity > 1;
  777. }
  778.  
  779.  
  780. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  781. //                                  More Stuck Detection
  782. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  783.  
  784.  
  785.  
  786. bool TryFixPosition(int client, float Radius, float pos_Z) {
  787.     float DegreeAngle;
  788.     float vecPosition[3];
  789.     float vecOrigin[3];
  790.     float vecAngle[3];
  791.  
  792.     GetClientAbsOrigin(client, vecOrigin);
  793.     GetClientEyeAngles(client, vecAngle);
  794.     vecPosition[2] = vecOrigin[2] + pos_Z;
  795.  
  796.     DegreeAngle = -180.0;
  797.     while (DegreeAngle < 180.0) {
  798.         // convert angle in radian
  799.         vecPosition[0] = vecOrigin[0] + Radius * Cosine(DegreeAngle * FLOAT_PI / 180);
  800.         vecPosition[1] = vecOrigin[1] + Radius * Sine(DegreeAngle * FLOAT_PI / 180);
  801.  
  802.         TeleportEntity(client, vecPosition, vecAngle, Ground_Velocity);
  803.         if (!CheckIfPlayerIsStuck(client)) {
  804.             return true;
  805.         }
  806.  
  807.         // + 10°
  808.         DegreeAngle += 10.0;
  809.     }
  810.  
  811.     TeleportEntity(client, vecOrigin, vecAngle, Ground_Velocity);
  812.     if (Radius <= RadiusSize) {
  813.         return TryFixPosition(client, Radius + Step, pos_Z);
  814.     }
  815.  
  816.     return false;
  817. }
  818.  
  819.  
  820.  
  821. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  822. //                                  Stuck END
  823. //                                  Stuck END
  824. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  825.  
  826.  
  827. stock bool ChangePlayerWeaponSlot(int client, int iSlot)
  828. {
  829.     int iWeapon = GetPlayerWeaponSlot(client, iSlot);
  830.     if (iWeapon > MaxClients) {
  831.         SetEntPropEnt(client, Prop_Send, "m_hActiveWeapon", iWeapon);
  832.         return true;
  833.     }
  834.     return false;
  835. }
  836.  
  837. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  838. //                                  Scream Nades START
  839. //                                  Scream Nades START
  840. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  841.  
  842. stock void PlayerGrenadeScreamRand(int client)
  843. {
  844.     switch(GetRandomInt(1, 14))
  845.     {
  846.         case 1: EmitSoundToAll("player/voice/botsurvival/leader/incominggrenade9.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  847.         case 2: EmitSoundToAll("player/voice/botsurvival/subordinate/incominggrenade9.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  848.         case 3: EmitSoundToAll("player/voice/botsurvival/leader/incominggrenade4.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  849.         case 4: EmitSoundToAll("player/voice/botsurvival/subordinate/incominggrenade4.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  850.         case 5: EmitSoundToAll("player/voice/botsurvival/subordinate/incominggrenade35.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  851.         case 6: EmitSoundToAll("player/voice/botsurvival/subordinate/incominggrenade34.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  852.         case 7: EmitSoundToAll("player/voice/botsurvival/subordinate/incominggrenade33.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  853.         case 8: EmitSoundToAll("player/voice/botsurvival/subordinate/incominggrenade23.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  854.         case 9: EmitSoundToAll("player/voice/botsurvival/leader/incominggrenade2.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  855.         case 10: EmitSoundToAll("player/voice/botsurvival/leader/incominggrenade13.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  856.         case 11: EmitSoundToAll("player/voice/botsurvival/leader/incominggrenade12.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  857.         case 12: EmitSoundToAll("player/voice/botsurvival/leader/incominggrenade11.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  858.         case 13: EmitSoundToAll("player/voice/botsurvival/leader/incominggrenade10.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  859.         case 14: EmitSoundToAll("player/voice/botsurvival/leader/incominggrenade18.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  860.     }
  861. }
  862.  
  863. stock void PlayerFireScreamRand(int client)
  864. {
  865.     //PrintToServer("SCREAM FIRE");
  866.  
  867.     switch(GetRandomInt(1, 5))
  868.     {
  869.         case 1: EmitSoundToAll("player/voice/responses/security/subordinate/damage/molotov_incendiary_detonated7.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  870.         case 2: EmitSoundToAll("player/voice/responses/security/leader/damage/molotov_incendiary_detonated6.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  871.         case 3: EmitSoundToAll("player/voice/responses/security/subordinate/damage/molotov_incendiary_detonated6.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  872.         case 4: EmitSoundToAll("player/voice/responses/security/leader/damage/molotov_incendiary_detonated5.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  873.         case 5: EmitSoundToAll("player/voice/responses/security/leader/damage/molotov_incendiary_detonated4.ogg", client, SNDCHAN_VOICE, _, _, 1.0);
  874.     }
  875. }
  876.  
  877. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  878. //                                  Scream Nades END
  879. //                                  Scream Nades END
  880. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  881.  
  882. stock void DisplayInstructorHint(int iTargetEntity, float fTime, float fHeight, float fRange, bool bFollow, bool bShowOffScreen, char[] sIconOnScreen, char[] sIconOffScreen, char[] sCmd, bool bShowTextAlways, int iColor[3], char[] sText)
  883. {
  884.     int iEntity = CreateEntityByName("env_instructor_hint");
  885.     if(iEntity <= 0)
  886.         return;
  887.        
  888.     char sBuffer[32];
  889.     FormatEx(sBuffer, sizeof(sBuffer), "%d", iTargetEntity);
  890.    
  891.     // Target
  892.     DispatchKeyValue(iTargetEntity, "targetname", sBuffer);
  893.     DispatchKeyValue(iEntity, "hint_target", sBuffer);
  894.    
  895.     // Static
  896.     FormatEx(sBuffer, sizeof(sBuffer), "%d", !bFollow);
  897.     DispatchKeyValue(iEntity, "hint_static", sBuffer);
  898.    
  899.     // Timeout
  900.     FormatEx(sBuffer, sizeof(sBuffer), "%d", RoundToFloor(fTime));
  901.     DispatchKeyValue(iEntity, "hint_timeout", sBuffer);
  902.    
  903.     // Height
  904.     FormatEx(sBuffer, sizeof(sBuffer), "%d", RoundToFloor(fHeight));
  905.     DispatchKeyValue(iEntity, "hint_icon_offset", sBuffer);
  906.    
  907.     // Range
  908.     FormatEx(sBuffer, sizeof(sBuffer), "%d", RoundToFloor(fRange));
  909.     DispatchKeyValue(iEntity, "hint_range", sBuffer);
  910.    
  911.     // Show off screen
  912.     FormatEx(sBuffer, sizeof(sBuffer), "%d", !bShowOffScreen);
  913.     DispatchKeyValue(iEntity, "hint_nooffscreen", sBuffer);
  914.    
  915.     // Icons
  916.     DispatchKeyValue(iEntity, "hint_icon_onscreen", sIconOnScreen);
  917.     DispatchKeyValue(iEntity, "hint_icon_offscreen", sIconOffScreen);
  918.    
  919.     // Command binding
  920.     DispatchKeyValue(iEntity, "hint_binding", sCmd);
  921.    
  922.     // Show text behind walls
  923.     FormatEx(sBuffer, sizeof(sBuffer), "%d", bShowTextAlways);
  924.     DispatchKeyValue(iEntity, "hint_forcecaption", sBuffer);
  925.    
  926.     // Text color
  927.     FormatEx(sBuffer, sizeof(sBuffer), "%d %d %d", iColor[0], iColor[1], iColor[2]);
  928.     DispatchKeyValue(iEntity, "hint_color", sBuffer);
  929.    
  930.     //Text
  931.     ReplaceString(sText, 254, "\n", " ");
  932.     Format(sText, 254, "%s", sText);
  933.     DispatchKeyValue(iEntity, "hint_caption", sText);
  934.  
  935.     if (fTime > 0.0)
  936.     {
  937.         Format(sBuffer, sizeof(sBuffer), "OnUser1 !self:kill::%f:1", fTime);
  938.         SetVariantString(sBuffer);
  939.         AcceptEntityInput(iEntity, "AddOutput");
  940.         AcceptEntityInput(iEntity, "FireUser1");
  941.     }
  942.    
  943.     DispatchSpawn(iEntity);
  944.     AcceptEntityInput(iEntity, "ShowHint");
  945. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement