Advertisement
hadesownage

Untitled

Jul 4th, 2015
519
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.82 KB | None | 0 0
  1. /* Warcraft 3 Frozen Throne V5.0 Powered by ONEMDX
  2.  
  3. Credits :
  4. - Geesu - Based War3FT Plugin
  5. - Aragon - Help with changerace menu
  6. - SMaster - Help with fix the loot item sprite on box
  7. - Askhanar & Aragon - Credits Systems
  8. - Ahile - New Sugestions
  9. - CheepSuit - FlameThrower
  10. - K2mia - For ilusion help
  11. - Yaur - For portal code
  12. - The blizzard dev team for world of warcraft
  13.  
  14. Thanks for help , i've learned a lot of things from all of you . Respect
  15.  
  16. */
  17.  
  18. #pragma tabsize 0
  19. //#pragma semicolon 1
  20.  
  21. new const WC3NAME[] = "Warcraft 3 Frozen Throne";
  22. new const WC3AUTHOR[] = "ONEMDX";
  23. new const WC3VERSION[] = "5.0";
  24. new const WC3DATE[] = __DATE__;
  25.  
  26. // Let AMX X know that we NEED these modules (as of amx x 1.75)
  27. #pragma reqclass xstats
  28. #pragma reqlib engine
  29. #pragma reqlib fun
  30. #pragma reqlib fakemeta
  31. #pragma reqlib cstrike
  32. #pragma reqlib dodfun
  33. #pragma loadlib sqlite
  34. #pragma loadlib mysql
  35.  
  36. #include <amxmodx>
  37. #include <amxmisc>
  38. #include <engine>
  39. #include <fun>
  40. #include <fakemeta>
  41. #include <cstrike>
  42. #include <dodfun>
  43. #include <dodx>
  44. #include <dbi>
  45. #include <sqlx>
  46. #include <hamsandwich>
  47. #include <dhudmessage>
  48. #include <sockets>
  49.  
  50. // Header files that contain function declarations and variables
  51. #include "war3ft/constants.inl"
  52. #include "war3ft/db/db_common.h"
  53. #include "war3ft/db/db_mysqlx.h"
  54. #include "war3ft/db/db_sqlite.h"
  55. #include "war3ft/items.h"
  56. #include "war3ft/dod_h.inl"
  57. #include "war3ft/XP.h"
  58. #include "war3ft/war3ft.h"
  59. #include "war3ft/cstrike.h"
  60. #include "war3ft/menus.h"
  61. #include "war3ft/shared.h"
  62. #include "war3ft/ultimates.h"
  63. #include "war3ft/loot.h"
  64.  
  65.  
  66. // Source Code
  67. #include "war3ft/cvar.inl"
  68.  
  69. #include "war3ft/race_undead.inl" // Undead Scourge - 1
  70. #include "war3ft/race_human.inl" // Human Alliance - 2
  71. #include "war3ft/race_orc.inl" // Orcish Horde - 3
  72. #include "war3ft/race_elf.inl" // Night Elf - 4
  73. #include "war3ft/race_blood.inl" // Blood Mage - 5
  74. #include "war3ft/race_shadow.inl" // Shadow Hunter - 6
  75. #include "war3ft/race_warden.inl" // Warden - 7
  76. #include "war3ft/race_crypt.inl" // Crypt Lord - 8
  77. #include "war3ft/race_draenei.inl" // Draenei Alliance - 9
  78. #include "war3ft/race_worgen.inl" // Worgen - 10
  79. #include "war3ft/race_bloodelf.inl" // Blood Elf - 11
  80. #include "war3ft/race_troll.inl" // Trolls - 12
  81. #include "war3ft/race_warlock.inl" // Warlock - 13
  82. #include "war3ft/race_priest.inl" // Priest - 14
  83. #include "war3ft/race_death.inl" // Death Knight - 15
  84. #include "war3ft/race_druid.inl" // Druid - 16
  85.  
  86.  
  87.  
  88. #include "war3ft/forwards.inl"
  89. #include "war3ft/effects.inl"
  90. #include "war3ft/XP.inl"
  91. #include "war3ft/db/db_mysqlx.inl"
  92. #include "war3ft/db/db_sqlite.inl"
  93. #include "war3ft/db/db_common.inl"
  94. #include "war3ft/war3ft.inl"
  95. #include "war3ft/events.inl"
  96. #include "war3ft/clientCommands.inl"
  97. #include "war3ft/items.inl"
  98. #include "war3ft/stocks.inl"
  99. #include "war3ft/shared.inl"
  100. #include "war3ft/menus.inl"
  101. #include "war3ft/motd.inl"
  102. #include "war3ft/language.inl"
  103. #include "war3ft/admin.inl"
  104. #include "war3ft/ultimates.inl"
  105. #include "war3ft/util.inl"
  106. #include "war3ft/skill_manager.inl"
  107.  
  108. #include "war3ft/cstrike.inl"
  109. #include "war3ft/dod.inl"
  110.  
  111. #include "war3ft/gold_system.inl"
  112. #include "war3ft/loot.inl"
  113.  
  114. //==============================================================
  115.  
  116. new const LicensedIP[][] =
  117. {
  118. "89.33.151.119"
  119. }
  120.  
  121. new const g_szLicensedDNS[ ] = "War3ft.Professional-Gaming.Ro";
  122.  
  123. //=================================================================
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132. public plugin_init()
  133. {
  134.  
  135.  
  136. //============================== Plugin =====================================================
  137. register_plugin( WC3NAME, WC3VERSION, WC3AUTHOR );
  138.  
  139. WC3_DetermineGame();
  140.  
  141. gmsgDeathMsg = get_user_msgid( "DeathMsg" );
  142. gmsgScreenFade = get_user_msgid( "ScreenFade" );
  143. gmsgScreenShake = get_user_msgid( "ScreenShake" );
  144. gmsgScoreInfo = get_user_msgid( "ScoreInfo" );
  145.  
  146. register_forward(FM_ClientUserInfoChanged, "ChangeName");
  147. SymbolsName = register_cvar("fr_name_symbols", "~`"); //| Symbols Name Restricted |//
  148.  
  149.  
  150. register_concmd( "playerskills" , "CMD_Handler" , -1 );
  151.  
  152. register_clcmd( "debug" , "CMD_Handler" , -1 );
  153. register_clcmd( "levitation" , "CMD_Handler" , -1 );
  154. register_clcmd( "war3menu" , "CMD_Handler" , -1 );
  155. register_clcmd( "changerace" , "CMD_Handler" , -1 );
  156. register_clcmd( "selectskill" , "CMD_Handler" , -1 );
  157. register_clcmd( "skillsinfo" , "CMD_Handler" , -1 );
  158. register_clcmd( "resetskills" , "CMD_Handler" , -1 );
  159. register_clcmd( "resetxp" , "CMD_Handler" , -1 );
  160. register_clcmd( "itemsinfo" , "CMD_Handler" , -1 );
  161. register_clcmd( "itemsinfo2" , "CMD_Handler" , -1 );
  162. register_clcmd( "shopmenu" , "CMD_Handler" , -1 );
  163. register_clcmd( "shopmenu2" , "CMD_Handler" , -1 );
  164. register_clcmd( "ability" , "CMD_Handler" , -1 );
  165. register_clcmd( "ankh" , "CMD_Handler" , -1 );
  166. register_clcmd( "amulet" , "CMD_Handler" , -1 );
  167. register_clcmd( "boots" , "CMD_Handler" , -1 );
  168. register_clcmd( "claws" , "CMD_Handler" , -1 );
  169. register_clcmd( "cloak" , "CMD_Handler" , -1 );
  170. register_clcmd( "chameleon" , "CMD_Handler" , -1 );
  171. register_clcmd( "frost" , "CMD_Handler" , -1 );
  172. register_clcmd( "gloves" , "CMD_Handler" , -1 );
  173. register_clcmd( "health" , "CMD_Handler" , -1 );
  174. register_clcmd( "helm" , "CMD_Handler" , -1 );
  175. register_clcmd( "mask" , "CMD_Handler" , -1 );
  176. register_clcmd( "mole" , "CMD_Handler" , -1 );
  177. register_clcmd( "necklace" , "CMD_Handler" , -1 );
  178. register_clcmd( "rings" , "CMD_Handler" , -1 );
  179. register_clcmd( "socks" , "CMD_Handler" , -1 );
  180. register_clcmd( "scroll" , "CMD_Handler" , -1 );
  181. register_clcmd( "tome" , "CMD_Handler" , -1 );
  182. register_clcmd( "level" , "CMD_Handler" , -1 );
  183. register_clcmd( "say" , "cmd_Say" , -1 );
  184. register_clcmd( "say_team" , "cmd_Say" , -1 );
  185. register_clcmd( "war3help" , "CMD_Handler" , -1 );
  186. register_clcmd( "ultimate" , "cmd_Ultimate" , -1 );
  187. register_clcmd( "fullupdate" , "cmd_fullupdate" , -1 );
  188. register_clcmd( "drop" , "on_Drop" , -1 );
  189. register_clcmd( "jointeam" , "cmd_Jointeam" , -1 );
  190.  
  191.  
  192.  
  193. register_clcmd( "shopmenu3" , "CMD_Handler" , -1 );
  194. register_clcmd( "armor" , "CMD_Handler" , -1 );
  195. register_clcmd( "grenade" , "CMD_Handler" , -1 );
  196. register_clcmd( "mirror" , "CMD_Handler" , -1 );
  197. register_clcmd( "accelerator" , "CMD_Handler" , -1 );
  198. register_clcmd( "death" , "CMD_Handler" , -1 );
  199. register_clcmd( "healing" , "CMD_Handler" , -1 );
  200. register_clcmd( "potion" , "CMD_Handler" , -1 );
  201. register_clcmd( "scepter" , "CMD_Handler" , -1 );
  202. register_clcmd( "scanner" , "CMD_Handler" , -1 );
  203. register_clcmd( "steel" , "CMD_Handler" , -1 );
  204.  
  205.  
  206.  
  207. register_clcmd( "shopmenu4" , "CMD_Handler" , -1 );
  208. register_clcmd( "assasin" , "CMD_Handler" , -1 );
  209. register_clcmd( "snake" , "CMD_Handler" , -1 );
  210. register_clcmd( "portal" , "CMD_Handler" , -1 );
  211. register_clcmd( "omniscience" , "CMD_Handler" , -1 );
  212. register_clcmd( "infinity" , "CMD_Handler" , -1 );
  213. register_clcmd( "flame" , "CMD_Handler" , -1 );
  214. register_clcmd( "flames" , "CMD_Handler" , -1 );
  215. register_clcmd( "skull" , "CMD_Handler" , -1 );
  216. register_clcmd( "book" , "CMD_Handler" , -1 );
  217. register_clcmd( "spikes" , "CMD_Handler" , -1 );
  218.  
  219.  
  220.  
  221.  
  222. register_clcmd( "trade" , "CMD_Handler" , -1 );
  223. register_clcmd( "trademenu" , "CMD_Handler" , -1 );
  224.  
  225. register_clcmd("say /gold","Show_Credits")
  226. register_clcmd("say_team /gold","Show_Credits")
  227. register_clcmd("say gold","Show_Credits")
  228. register_clcmd("say_team gold","Show_Credits")
  229.  
  230.  
  231. register_clcmd("amx_donategold", "GiveCredits");
  232.  
  233. register_concmd("amx_givegold", "Give_Credits", ADMIN_CVAR, "Name/@T/@CT/@All -> Amount");
  234. register_concmd("amx_resetgold", "Reset_Credits", ADMIN_CVAR, "Name/@T/@CT/@All");
  235.  
  236. new DataDir[64]
  237. get_datadir(DataDir, 63)
  238. format(File, 127, "%s/War3ftGold.dat", DataDir)
  239.  
  240.  
  241.  
  242. // Admin Commands
  243. register_concmd( "wc3_givexp" , "ADMIN_Handler" , -1 , " -- Gives XP to players" );
  244. register_concmd( "wc3_setlevel" , "ADMIN_Handler" , -1 , " -- Sets a player's level" );
  245. register_concmd( "wc3_giveitem" , "ADMIN_Handler" , -1 , " -- Gives an item to a player" );
  246. register_concmd( "wc3_enable" , "ADMIN_Handler" , -1 , " -- Enables war3ft" );
  247. register_concmd( "wc3_disable" , "ADMIN_Handler" , -1 , " -- Disables war3ft" );
  248.  
  249. // Depreciated Admin Commands
  250. register_concmd( "amx_givexp" , "ADMIN_Handler" , -1 , " -- Gives XP to players" );
  251.  
  252. // Server Admin Commands (used by external plugins)
  253. register_srvcmd( "amx_takexp" , "ADMIN_ServerHandler" );
  254. register_srvcmd( "changexp" , "ADMIN_ServerHandler" );
  255.  
  256. // Register forwards (from fakemeta)
  257. register_forward( FM_TraceLine , "TRIGGER_TraceLine" );
  258.  
  259. register_event( "DeathMsg" , "on_DeathMsg" , "a" );
  260. register_event( "CurWeapon" , "on_CurWeapon" , "be" , "1=1" );
  261. register_event( "HideWeapon" , "on_CurWeapon" , "b" );
  262. // register_event( "ResetHUD" , "on_ResetHud" , "b" );
  263. register_event( "TextMsg" , "on_GameRestart" , "a" , "2&#Game_will_restart_in" );
  264. register_event( "HLTV" , "EVENT_NewRound" , "a" , "1=0" , "2=0" );
  265.  
  266. register_forward(FM_CmdStart, "FWD_CmdStart");
  267.  
  268. register_forward(FM_Touch,"player_Touch");
  269.  
  270. register_touch("skull_arrow", "*", "touch_skull_arrow");
  271.  
  272. set_task(0.5, "TASK_BAR", _, _, _, "b") ;
  273.  
  274. register_dictionary( "war3FT.txt");
  275.  
  276. RegisterHam( Ham_TakeDamage, "player", "EVENT_TakeDamage" );
  277. RegisterHam( Ham_Spawn, "player", "EVENT_Spawn", 1);
  278. RegisterHam( Ham_Player_PreThink, "player", "HAM_Player_PreThink", 1);
  279.  
  280. register_touch("worldspawn","player","Touch_Climb");
  281. register_touch("func_brush","player","Touch_Climb");
  282. register_touch("func_breakable","player","Touch_Climb");
  283.  
  284.  
  285.  
  286. set_task(0.01, "check_duck", 0, "", 0, "b") ;
  287.  
  288. // Game Specific Initialization
  289. if ( g_MOD == GAME_CSTRIKE || g_MOD == GAME_CZERO )
  290. {
  291. gmsgBarTime = get_user_msgid( "BarTime" );
  292. gmsgStatusText = get_user_msgid( "StatusText" );
  293. gmsgStatusIcon = get_user_msgid( "StatusIcon" );
  294.  
  295. register_logevent( "on_PlayerAction" , 3 , "1=triggered" );
  296. register_logevent( "on_FreezeTimeComplete" , 2 , "0=World triggered" , "1=Round_Start" );
  297. register_logevent( "on_EndRound" , 2 , "0=World triggered" , "1=Round_End" );
  298.  
  299. register_event( "SendAudio" , "on_TerroristWin" , "a" , "2=%!MRAD_terwin" );
  300. register_event( "SendAudio" , "on_CTWin" , "a" , "2=%!MRAD_ctwin" );
  301. register_event( "ArmorType" , "on_ArmorType" , "be" );
  302. register_event( "Battery" , "on_Battery" , "be" );
  303. register_event( "WeapPickup" , "on_WeapPickup" , "b" );
  304. register_event( "StatusValue" , "on_ShowStatus" , "be" , "1=2" ,"2!0" );
  305. register_event( "StatusValue" , "on_HideStatus" , "be" , "1=1" ,"2=0" );
  306. register_event( "SetFOV" , "on_Zoom" , "be" );
  307. register_event( "BarTime" , "on_BombPlanting" , "be" , "1=3" );
  308. register_event( "BarTime" , "on_BombStopPlanting" , "b" , "1=0" );
  309.  
  310. register_event("Damage", "Event_Damage", "b", "2>0", "3=0")
  311.  
  312. // Old Style
  313. register_menucmd( register_menuid( "BuyItem" ) , (1<<3) , "cmd_hegren" );
  314. //register_menu("ChangeRace", 1023, "_MENU_ChangeRace")
  315. register_menu("ChangeRace", 32767, "_MENU_ChangeRace")
  316. // VGUI
  317. register_menucmd( -34 , (1<<3) , "cmd_hegren" );
  318.  
  319. // Steam
  320. register_clcmd( "hegren" , "cmd_hegren" );
  321.  
  322. // Old style menu (now its jointeam client command)
  323. register_menucmd( register_menuid( "Team_Select" , 1 ) , (1<<0)|(1<<1)|(1<<4) , "cmd_Teamselect" );
  324.  
  325. // Condition Zero
  326. if ( g_MOD == GAME_CZERO )
  327. {
  328. register_event("TextMsg", "on_GameRestart", "a", "2&#Game_Commencing")
  329. }
  330. // Counter-Strike
  331. else
  332. {
  333. register_event("TextMsg", "on_GameRestart", "a", "2&#Game_C")
  334. }
  335. }
  336. else if ( g_MOD == GAME_DOD )
  337. {
  338. gmsgHudText = get_user_msgid( "HudText" );
  339.  
  340. register_statsfwd( XMF_SCORE );
  341. register_statsfwd( XMF_DAMAGE );
  342.  
  343. register_event( "RoundState" , "EVENT_DOD_EndRound" , "a" , "1=3" , "1=4" );
  344. }
  345.  
  346. // Plugin initialization procedures
  347. WC3_Init();
  348.  
  349. arrIntTotalLootEntity = ArrayCreate(1, 1);
  350. arrIntOriginsLootX = ArrayCreate(1, 1);
  351. arrIntOriginsLootY = ArrayCreate(1, 1);
  352. arrIntOriginsLootZ = ArrayCreate(1, 1);
  353. arrIntItemVictimShop1 = ArrayCreate(1, 1);
  354. arrIntItemVictimShop2 = ArrayCreate(1, 1);
  355. arrIntItemVictimShop3 = ArrayCreate(1, 1);
  356. arrIntDrawSpriteItems = ArrayCreate(1, 1);
  357. arrIntScaleSpriteItems = ArrayCreate(1, 1);
  358.  
  359. arrIntLootRemove = ArrayCreate(1, 1);
  360.  
  361.  
  362. register_concmd( "test", "test" );
  363. register_concmd( "test2", "test2" );
  364.  
  365.  
  366. }
  367.  
  368. public test2(id)
  369. {
  370. /*WC3_Log( true, "[MYSQLX] Attempting to re-establish connection to MySQL server" );
  371. // Close the connection
  372. MYSQLX_Close();
  373.  
  374. // Re-open the connection
  375. MYSQLX_Init();*/
  376.  
  377. new players[32], num, i;
  378. get_players( players, num );
  379.  
  380. for ( i = 0; i < num; i++ )
  381. {
  382. static s_Classname[ 8 ];
  383. pev ( i, pev_classname, s_Classname, charsmax ( s_Classname ) );
  384.  
  385. server_print( "%d: %s", i, s_Classname );
  386. }
  387. }
  388.  
  389. public test(id)
  390. {
  391. new players[32], num, i, szName[32];
  392. get_players( players, num );
  393.  
  394. for ( i = 0; i < num; i++ )
  395. {
  396. get_user_name( players[i], szName, 31 );
  397.  
  398. WC3_Log( true, "**** %s ****", szName );
  399.  
  400. SM_DebugPrint( players[i] );
  401.  
  402. WC3_Log( true, " %s ", szName );
  403. }
  404. }
  405.  
  406. public plugin_end()
  407. {
  408. new szCurMap[32];
  409. get_mapname( szCurMap, 31 );
  410. WC3_Log( false, "** Map '%s' ended", szCurMap );
  411.  
  412. if ( !WC3_Check() )
  413. {
  414. return;
  415. }
  416.  
  417. if ( !get_pcvar_num( CVAR_wc3_save_xp ) )
  418. {
  419. return;
  420. }
  421.  
  422. FWD_Destroy();
  423. DB_SaveAll( false );
  424. DB_Prune();
  425. DB_Close();
  426.  
  427.  
  428. return;
  429. }
  430.  
  431. public plugin_precache()
  432. {
  433. WC3_Precache();
  434.  
  435.  
  436. format(szModelItems, charsmax(szModelItems), "%s","models/warcraft3/newkorobka.mdl");
  437. format(szModelArXpHpItems, charsmax(szModelArXpHpItems), "%s","models/warcraft3/arxphpx.mdl");
  438.  
  439. format(szSpriteItems, charsmax(szSpriteItems), "%s","sprites/warcraft3/loot_icon.spr");
  440. format(szSpriteNoItems, charsmax(szSpriteNoItems), "%s","sprites/warcraft3/loot_icon2.spr");
  441.  
  442.  
  443. //format(szSpriteItemWhite, charsmax(szSpriteItemWhite), "%s","sprites/white.spr");
  444.  
  445.  
  446. // Precache
  447. engfunc(EngFunc_PrecacheModel, szModelItems);
  448. engfunc(EngFunc_PrecacheModel, szModelArXpHpItems);
  449. idSpriteItems = engfunc(EngFunc_PrecacheModel,szSpriteItems);
  450. idSpriteNoItems = engfunc(EngFunc_PrecacheModel,szSpriteNoItems);
  451. //idSpriteItemWhite = engfunc(EngFunc_PrecacheModel,szSpriteItemWhite);
  452.  
  453.  
  454.  
  455. }
  456.  
  457. public client_putinserver( id )
  458. {
  459. if ( !WC3_Check() )
  460. {
  461. return;
  462. }
  463. LoadCredits(id) ;
  464.  
  465. g_frags[ id ] = 0;
  466.  
  467. // Check for steam ID pending
  468. static szPlayerID[32];
  469. get_user_authid( id, szPlayerID, 31 );
  470.  
  471. // Then the player doesn't have a steam id, lets make them reconnect
  472. if ( equal(szPlayerID, "STEAM_ID_PENDING") )
  473. {
  474. client_cmd( id, "reconnect" );
  475. }
  476.  
  477. // Get the user's ID!
  478. DB_FetchUniqueID( id );
  479.  
  480. p_data_b[id][PB_ISCONNECTED] = true;
  481.  
  482. if ( g_MOD == GAME_CSTRIKE || g_MOD == GAME_CZERO )
  483. {
  484. // Check user's cvar if the user isn't a bot and if we're not running a 64-bit server
  485. if ( !is_user_bot( id ) && !is_amd64_server() )
  486. {
  487. query_client_cvar( id, "cl_minmodels", "_CS_CheckMinModelsValue" );
  488. }
  489.  
  490. if ( g_MOD == GAME_CZERO )
  491. {
  492. // Only want to run this if: mod is CZ (zbot not supported), client is a bot,
  493. // these are CZ bots (bot_quota), and the ham has not been registed yet.
  494. if ( (pev(id, pev_flags) & FL_FAKECLIENT) && get_pcvar_num(CVAR_bot_quota) > 0 && !g_bCZBotRegisterHam )
  495. {
  496. // Delay for private data to initialize
  497. set_task( 0.1, "CZ_BotHookHam", id )
  498. }
  499. }
  500. }
  501.  
  502. // Start showing the user their money
  503. else if ( g_MOD == GAME_DOD )
  504. {
  505. p_data[id][P_MONEY] = get_pcvar_num( CVAR_wc3_dod_start_money );
  506. static parm[3];
  507. parm[0] = id;
  508. parm[1] = 0;
  509. _DOD_showMoney( parm );
  510. }
  511.  
  512. return;
  513. }
  514.  
  515. public client_connect( id )
  516. {
  517. if ( !WC3_Check() )
  518. {
  519. return;
  520. }
  521.  
  522. g_frags[ id ] = 0;
  523.  
  524. static sName[32];
  525. get_user_name(id, sName, sizeof sName - 1);
  526. static sChars[32];
  527. get_pcvar_string(SymbolsName, sChars, sizeof sChars - 1);
  528. for(new i = 0 ; i < strlen(sName) ; i++) {
  529. for(new j = 0 ; j < strlen(sChars) ; j++) {
  530. if(sName[i] == sChars[j]) {
  531. server_cmd("kick #%d ^"Numele tau contine caractere nepermise.^"", get_user_userid(id));
  532. break;
  533. }
  534. else {
  535. LoadCredits(id);
  536. }
  537. }
  538. }
  539.  
  540. // Initialize this player
  541. WC3_PlayerInit( id );
  542.  
  543. client_cmd( id, "hud_centerid 0" );
  544.  
  545. PrintConnectMessage ( id );
  546.  
  547.  
  548. p_data[id][P_RESPAWNBY] = 0;
  549. p_data[id][P_SPECMODE] = 0;
  550.  
  551. p_data_b[id][PB_ISBURNING] = false;
  552. p_data_b[id][PB_JUSTJOINED] = true;
  553. p_data_b[id][PB_CAN_RENDER] = true;
  554. p_data_b[id][PB_HAS_SPAWNED] = false;
  555. p_data_b[id][PB_SKINSWITCHED] = false;
  556.  
  557. // User should have no items on connect...
  558. g_iShopMenuItems[id][0] = -1;
  559. g_iShopMenuItems[id][1] = -1;
  560. g_iShopMenuItems[id][2] = -1;
  561.  
  562. // Automatically set their XP if it's enabled
  563. if ( get_pcvar_num( CVAR_wc3_xp_auto_average ) && !get_pcvar_num( CVAR_wc3_save_xp ) )
  564. {
  565. new iTotalXP;
  566. new iNum, i;
  567. for( i = 1; i <= MAXPLAYERS; i++ )
  568. {
  569. if ( p_data[i][P_XP] > 0 )
  570. {
  571. iNum++;
  572. iTotalXP += p_data[i][P_XP];
  573. }
  574. }
  575. if ( iNum > 0 && iTotalXP > 0 )
  576. {
  577. p_data[id][P_XP] = iTotalXP/iNum;
  578. }
  579. }
  580.  
  581. if ( g_MOD == GAME_CSTRIKE || g_MOD == GAME_CZERO )
  582. {
  583. p_data[id][P_HECOUNT] = 0;
  584. p_data[id][P_FLASHCOUNT] = 0;
  585. }
  586. else if ( g_MOD == GAME_DOD )
  587. {
  588. p_data[id][P_MONEY] = 0;
  589. }
  590.  
  591. // Reset the "cheat" variables
  592. new j;
  593. for ( j = 0; j < MAX_RACES; j++ )
  594. {
  595. g_bGivenLevel10[id][j] = false;
  596. }
  597.  
  598. CS_GetIcon( id );
  599.  
  600. return;
  601. }
  602.  
  603. public client_disconnect( id )
  604. {
  605. if ( !WC3_Check() )
  606. {
  607. return;
  608. }
  609.  
  610. // Update the user's timestamps for each race if we're saving XP
  611. DB_UpdateTimestamp( id );
  612.  
  613. // Remove the money task when a user disconnects
  614. if ( g_MOD == GAME_DOD )
  615. {
  616. task_exists( TASK_MONEYLOOP + id ) ? remove_task( TASK_MONEYLOOP + id ) : 0;
  617. }
  618.  
  619.  
  620. p_data[id][P_SPECMODE] = 0;
  621. p_data_b[id][PB_ISBURNING] = false;
  622. p_data_b[id][PB_DIEDLASTROUND] = false;
  623. p_data_b[id][PB_JUSTJOINED] = false;
  624. p_data_b[id][PB_ISCONNECTED] = false;
  625. bIgnoreArmorSet[id] = false;
  626.  
  627. // Reset xp assist
  628. for ( new i = 0; i < MAXPLAYERS; i++ )
  629. {
  630. g_iDamageDealt[id][i] = 0;
  631. }
  632.  
  633. // Save the user's XP if we have XP to save
  634. if ( get_pcvar_num( CVAR_wc3_save_xp ) && !is_user_bot(id) && p_data[id][P_RACE] && p_data[id][P_XP] )
  635. {
  636. DB_SaveXP( id, true );
  637. }
  638.  
  639. if ( get_pcvar_num( CVAR_wc3_psychostats ) )
  640. {
  641. static szWeapon[64];
  642.  
  643. static szTeam[16], szName[32], szAuthid[32];
  644. new iWeap, iUserid = get_user_userid( id );
  645.  
  646. if ( is_user_connected(id) )
  647. {
  648. get_user_team( id, szTeam, 15 );
  649. }
  650. get_user_name( id, szName, 31 );
  651. get_user_authid( id, szAuthid, 31 );
  652.  
  653. for ( iWeap = CSW_WAR3_MIN; iWeap <=CSW_WAR3_MAX; iWeap++ )
  654. {
  655. format( szWeapon, 63, "" );
  656.  
  657. switch( iWeap )
  658. {
  659. case CSW_LIGHTNING: LANG_GetSkillName( ULTIMATE_CHAINLIGHTNING , LANG_SERVER, szWeapon , 63, 20 );
  660. case CSW_SUICIDE: LANG_GetSkillName( ULTIMATE_SUICIDE , LANG_SERVER, szWeapon , 63, 21 );
  661. case CSW_IMMOLATE: LANG_GetSkillName( ULTIMATE_IMMOLATE , LANG_SERVER, szWeapon , 63, 22 );
  662. case CSW_LOCUSTS: LANG_GetSkillName( ULTIMATE_LOCUSTSWARM , LANG_SERVER, szWeapon , 63, 23 );
  663. case CSW_SERPENTWARD: LANG_GetSkillName( SKILL_SERPENTWARD , LANG_SERVER, szWeapon , 63, 24 );
  664. case CSW_SHADOW: LANG_GetSkillName( SKILL_SHADOWSTRIKE , LANG_SERVER, szWeapon , 63, 25 );
  665. case CSW_THORNS: LANG_GetSkillName( SKILL_THORNS , LANG_SERVER, szWeapon , 63, 26 );
  666. case CSW_CARAPACE: LANG_GetSkillName( SKILL_SPIKEDCARAPACE , LANG_SERVER, szWeapon , 63, 27 );
  667. case CSW_CARRION: LANG_GetSkillName( SKILL_CARRIONBEETLES , LANG_SERVER, szWeapon , 63, 28 );
  668. case CSW_ORB: LANG_GetSkillName( PASS_ORB , LANG_SERVER, szWeapon , 63, 29 );
  669. case CSW_CONCOCTION: LANG_GetSkillName( PASS_UNSTABLECONCOCTION , LANG_SERVER, szWeapon , 63, 30 );
  670. }
  671.  
  672. replace( szWeapon, 63, " ", "_" );
  673.  
  674. new WEAPON = iWeap - CSW_WAR3_MIN;
  675.  
  676. if ( iStatsShots[id][WEAPON] || iStatsHits[id][WEAPON] || iStatsKills[id][WEAPON] || iStatsHS[id][WEAPON] || iStatsTKS[id][WEAPON] || iStatsDamage[id][WEAPON] || iStatsDeaths[id][WEAPON] || iStatsHead[id][WEAPON] || iStatsChest[id][WEAPON] || iStatsStomach[id][WEAPON] || iStatsLeftArm[id][WEAPON] || iStatsRightArm[id][WEAPON] || iStatsLeftLeg[id][WEAPON] || iStatsRightLeg[id][WEAPON] )
  677. {
  678.  
  679. // Counter-Strike/Condition Zero log format is different than the DOD
  680. if ( g_MOD == GAME_CSTRIKE || g_MOD == GAME_CZERO )
  681. {
  682. log_message("^"%s<%d><%s><%s>^" triggered ^"weaponstats^" (weapon ^"%s^") (shots ^"%d^") (hits ^"%d^") (kills ^"%d^") (headshots ^"%d^") (tks ^"%d^") (damage ^"%d^") (deaths ^"%d^")", szName, iUserid, szAuthid, szTeam, szWeapon, iStatsShots[id][WEAPON], iStatsHits[id][WEAPON], iStatsKills[id][WEAPON], iStatsHS[id][WEAPON], iStatsTKS[id][WEAPON], iStatsDamage[id][WEAPON], iStatsDeaths[id][WEAPON] );
  683. }
  684.  
  685. // Day of Defeat log format
  686. else if ( g_MOD == GAME_DOD )
  687. {
  688. log_message("^"%s<%d><%s><%s>^" triggered ^"weaponstats^" (weapon ^"%s^") (shots ^"%d^") (hits ^"%d^") (kills ^"%d^") (headshots ^"%d^") (tks ^"%d^") (damage ^"%d^") (deaths ^"%d^") (score ^"%d^")", szName, iUserid, szAuthid, szTeam, szWeapon, iStatsShots[id][WEAPON], iStatsHits[id][WEAPON], iStatsKills[id][WEAPON], iStatsHS[id][WEAPON], iStatsTKS[id][WEAPON], iStatsDamage[id][WEAPON], iStatsDeaths[id][WEAPON], 0 );
  689. }
  690.  
  691. log_message("^"%s<%d><%s><%s>^" triggered ^"weaponstats2^" (weapon ^"%s^") (head ^"%d^") (chest ^"%d^") (stomach ^"%d^") (leftarm ^"%d^") (rightarm ^"%d^") (leftleg ^"%d^") (rightleg ^"%d^")", szName, iUserid, szAuthid, szTeam, szWeapon, iStatsHead[id][WEAPON], iStatsChest[id][WEAPON], iStatsStomach[id][WEAPON], iStatsLeftArm[id][WEAPON], iStatsRightArm[id][WEAPON], iStatsLeftLeg[id][WEAPON], iStatsRightLeg[id][WEAPON] );
  692.  
  693. iStatsShots[id][WEAPON] = 0;
  694. iStatsHits[id][WEAPON] = 0;
  695. iStatsKills[id][WEAPON] = 0;
  696. iStatsHS[id][WEAPON] = 0;
  697. iStatsTKS[id][WEAPON] = 0;
  698. iStatsDamage[id][WEAPON] = 0;
  699. iStatsDeaths[id][WEAPON] = 0;
  700. iStatsHead[id][WEAPON] = 0;
  701. iStatsChest[id][WEAPON] = 0;
  702. iStatsStomach[id][WEAPON] = 0;
  703. iStatsLeftArm[id][WEAPON] = 0;
  704. iStatsRightArm[id][WEAPON] = 0;
  705. iStatsLeftLeg[id][WEAPON] = 0;
  706. iStatsRightLeg[id][WEAPON] = 0;
  707. }
  708. }
  709. }
  710. PrintDisconnectMessage ( id );
  711. }
  712.  
  713. public client_PreThink( id )
  714. {
  715. if ( !WC3_Check() )
  716. {
  717. return;
  718. }
  719.  
  720. if ( p_data_b[id][PB_ISCONNECTED] )
  721. {
  722. if ( is_user_alive( id ) )
  723. {
  724.  
  725. // Counter-Strike or Condition Zero
  726. if ( g_MOD == GAME_CSTRIKE || g_MOD == GAME_CZERO )
  727. {
  728.  
  729. // This is used so we can't hear the undead's footsteps at level 3
  730. if ( SM_GetSkillLevel( id, SKILL_UNHOLYAURA ) > 0 && !p_data_b[id][PB_STUNNED] && !p_data_b[id][PB_SLOWED] && SM_GetSkillLevel( id, SKILL_RUN ) > 0 )
  731. {
  732. new Float:vel[3];
  733. entity_get_vector( id, EV_VEC_velocity, vel );
  734.  
  735. // When this is true, the user is walking... lets hope :P
  736. if ( vector_length( vel ) < 180.0 )
  737. {
  738. entity_set_int( id, EV_INT_flTimeStepSound, 999 );
  739. }
  740.  
  741. // Otherwise if we just set it on the previous tick we need to set it back
  742. else if ( entity_get_int(id, EV_INT_flTimeStepSound) > 500 )
  743. {
  744. entity_set_int( id, EV_INT_flTimeStepSound, 200 );
  745. }
  746. }
  747. }
  748.  
  749. // Day of Defeat
  750. else if ( g_MOD == GAME_DOD )
  751. {
  752.  
  753. // Set the user's speed
  754. SHARED_SetSpeed( id );
  755.  
  756. static iSkillLevel;
  757. iSkillLevel = SM_GetSkillLevel( id, SKILL_UNHOLYAURA );
  758.  
  759. // Give the user more stamina
  760. if ( iSkillLevel > 0 )
  761. {
  762. if ( entity_get_float( id, EV_FL_fuser4 ) < p_unholy_dod[iSkillLevel-1] )
  763. {
  764. entity_set_float( id, EV_FL_fuser4, p_unholy_dod[iSkillLevel-1] );
  765. }
  766.  
  767. }
  768.  
  769. // Give the user more stamina
  770. if ( ITEM_Has( id, ITEM_BOOTS ) > ITEM_NONE && entity_get_float( id, EV_FL_fuser4 ) < DOD_BOOT_SPEED )
  771. {
  772. entity_set_float( id, EV_FL_fuser4, DOD_BOOT_SPEED );
  773. }
  774. }
  775.  
  776. // Amulet of the Cat
  777. if ( ITEM_Has( id, ITEM_AMULET ) > ITEM_NONE || SM_GetSkillLevel( id, SKILL_RUN ) > 0 )
  778. {
  779. entity_set_int( id, EV_INT_flTimeStepSound, 999 );
  780. }
  781. }
  782.  
  783. // User is dead
  784. else
  785. {
  786.  
  787. // Check to see if spectated player has changed
  788. new iTarget = entity_get_int( id, EV_INT_iuser2 );
  789.  
  790. new Float:fTime = halflife_time();
  791.  
  792. // Then we are looking at a new player or the last hud message has disappeared
  793. if ( g_iSpectatingID[id] != iTarget || g_fLastSpecDisplay[id] <= fTime )
  794. {
  795.  
  796. // We have a valid target!!
  797. if ( SHARED_ValidPlayer( iTarget ) && iTarget != id )
  798. {
  799. WC3_ShowSpecInfo( id, iTarget );
  800.  
  801. g_fLastSpecDisplay[id] = fTime + SPEC_HOLDTIME;
  802. }
  803.  
  804. g_iSpectatingID[id] = iTarget;
  805. }
  806. }
  807. }
  808.  
  809. return;
  810. }
  811.  
  812. public plugin_natives()
  813. {
  814. set_module_filter( "module_filter" );
  815. set_native_filter( "native_filter" );
  816. set_error_filter( "error_filter" );
  817.  
  818. register_native("set_user_credits", "set_user_credits", 1);
  819. register_native("get_user_credits", "get_user_credits", 1);
  820. }
  821.  
  822. public error_filter( error_code, bool:debugging, message[] )
  823. {
  824. new szBuffer[256];
  825. dbg_fmt_error( szBuffer, 255 );
  826.  
  827. log_amx( "[ERROR] '%s' '%d' '%d' '%s'", message, error_code, debugging, szBuffer );
  828.  
  829. //L 12/27/2006 - 16:48:08: [war3ft.amxx] [ERROR] '[CSTRIKE] Invalid player 5' '10' '1' 'Run time error 10: native error (native "cs_set_user_money")'
  830.  
  831. // We want to ignore invalid player messages that are generated by cstrike! - they're annoying + don't actually matter all that much...
  832. /*if ( error_code == AMX_ERR_NATIVE )
  833. {
  834. if ( containi( message, "" ) )
  835. {
  836. }
  837. }*/
  838. }
  839.  
  840. public module_filter( const module[] )
  841. {
  842. WC3_DetermineGame();
  843.  
  844. // We don't need the cstrike module when we're DOD
  845. if ( g_MOD == GAME_DOD && equal( module, "cstrike" ) )
  846. {
  847. return PLUGIN_HANDLED;
  848. }
  849.  
  850. // And we don't need any dod modules when we're in CS/CZ!
  851. else if ( ( g_MOD == GAME_CSTRIKE || g_MOD == GAME_CZERO ) && equal( module, "dodfun" ) )
  852. {
  853. return PLUGIN_HANDLED;
  854. }
  855.  
  856. // We don't need to display a message, we'll display it later if we need to (when the DB is set up if XP Saving is on)
  857. else if ( equal( module, "dbi" ) || equal( module, "sqlx" ) )
  858. {
  859. return PLUGIN_HANDLED;
  860. }
  861.  
  862. // Dammit plugin can't load now :/ - technically we should never get here unless the module doesn't exist in the modules folder
  863. else
  864. {
  865. WC3_Log( true, "Please enable the '%s' module in your modules.ini file", module );
  866.  
  867. return PLUGIN_CONTINUE;
  868. }
  869.  
  870. return PLUGIN_HANDLED;
  871. }
  872.  
  873. public native_filter( const name[], index, trap )
  874. {
  875. if ( !trap )
  876. {
  877. return PLUGIN_HANDLED;
  878. }
  879.  
  880. return PLUGIN_CONTINUE;
  881. }
  882.  
  883. stock ChatColor(const id, const input[], any:...)
  884. {
  885. new count = 1, players[32]
  886. static msg[191]
  887. vformat(msg, 190, input, 3)
  888.  
  889. replace_all(msg, 190, "!g", "^4") // Green Color
  890. replace_all(msg, 190, "!y", "^1") // Default Color
  891. replace_all(msg, 190, "!t", "^3") // Team Color
  892. replace_all(msg, 190, "!t2", "^0") // Team2 Color
  893.  
  894. if (id) players[0] = id; else get_players(players, count, "ch")
  895. {
  896. for (new i = 0; i < count; i++)
  897. {
  898. if (is_user_connected(players[i]))
  899. {
  900. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
  901. write_byte(players[i]);
  902. write_string(msg);
  903. message_end();
  904. }
  905. }
  906. }
  907. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement