Advertisement
GammixSAMP

playercalls.inc - By Gammix

May 12th, 2015
457
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.51 KB | None | 0 0
  1. /*
  2. Player Callbacks Include (playercalls.inc)
  3. * Some usefull player callbacks and with interesting capabilities!
  4. * For example: return 0 in a callback like OnPlayerPosChange, and the player can't move!
  5. * And few functions!
  6.  
  7. Author: (creator)
  8. * Gammix
  9.  
  10. (c) Copyright 2015
  11. * This file is provided as is (no warranties).
  12. */
  13.  
  14. /*
  15. FUNCTIONS:
  16. native IsPlayerPaused(playerid);
  17. native GetPlayerPausedTime(playerid);
  18.  
  19. CALLBACKS:
  20. public OnPlayerPosChange(playerid, Float:newx, Float:newy, Float:newz, Float:oldx, Float:oldy, Float:oldz);
  21. public OnPlayerFacingAngleChange(playerid, Float:newangle, Float:oldangle);
  22. public OnPlayerWeaponChange(playerid, newweapon, oldweapon);
  23. public OnPlayerHealthChange(playerid, Float:newhealth, Float:oldhealth);
  24. public OnPlayerArmourChange(playerid, Float:newarmour, Float:oldarmour);
  25. public OnPlayerVirtualWorldChange(playerid, newworld, oldworld);
  26. public OnPlayerSkinChange(playerid, newskin, oldskin);
  27. public OnPlayerPingChange(playerid, newping, oldping);
  28. public OnPlayerAmmoChange(playerid, weaponid, newammo, oldammo);
  29. public OnPlayerKillPlayer(playerid, killerid, weaponid);
  30. public OnPlayerPause(playerid);
  31. public OnPlayerUnpause(playerid, time);
  32. public OnPlayerFakeKill(playerid, count);
  33. public OnPlayerMoneyChange(playerid, newmoney, oldmoney);
  34. public OnPlayerScoreChange(playerid, newscore, oldscore);
  35. */
  36.  
  37. #define PAUSE_CHECK_TIME 5 // This is the time after which the player will be considered as PAUSED.
  38. //#define ANTI_FAKE_KILL //comment this if you don't want anti fake kill system
  39.  
  40. enum PlayerCallEnum
  41. {
  42. Float:P_HEALTH,
  43. Float:P_ARMOUR,
  44.  
  45. Float:P_X,
  46. Float:P_Y,
  47. Float:P_Z,
  48. Float:P_ANGLE,
  49.  
  50. P_WORLDID,
  51.  
  52. P_SKIN,
  53.  
  54. P_WEAPON,
  55. P_AMMO,
  56.  
  57. P_MONEY,
  58. P_SCORE,
  59.  
  60. P_PING,
  61.  
  62. P_LAST_UPDATE,
  63. bool:P_PAUSED,
  64. P_PAUSED_TIME,
  65. P_PAUSED_TIMER,
  66.  
  67. P_DEATHS,
  68. P_DEATH_TICK
  69. }
  70. static gPlayerCall[MAX_PLAYERS][PlayerCallEnum];
  71.  
  72. static bool:gHasCallback[12] = false;
  73.  
  74. //internal function
  75. stock static CALL_IsPlayerInClassSelection(playerid)
  76. {
  77. new Float: health = 0.0;
  78. GetPlayerHealth(playerid, health);
  79. if(GetPlayerState(playerid) == PLAYER_STATE_WASTED && health > 0.0) return true;
  80. return false;
  81. }
  82. //
  83.  
  84. #if ! defined IsValidWeapon
  85. #define IsValidWeapon(%0) \
  86. (%0 < 47)
  87. #endif
  88.  
  89. #if defined FILTESCRIPT
  90.  
  91. public OnFilterScriptInit()
  92. {
  93. //for onplayerupdate only
  94. gHasCallback[0] = funcidx("OnPlayerUnpause") != -1;
  95. gHasCallback[1] = funcidx("OnPlayerPosChange") != -1;
  96. gHasCallback[2] = funcidx("OnPlayerFacingAngleChange") != -1;
  97. gHasCallback[3] = funcidx("OnPlayerWeaponChange") != -1;
  98. gHasCallback[4] = funcidx("OnPlayerHealthChange") != -1;
  99. gHasCallback[5] = funcidx("OnPlayerArmourChange") != -1;
  100. gHasCallback[6] = funcidx("OnPlayerVirtualWorldChange") != -1;
  101. gHasCallback[7] = funcidx("OnPlayerSkinChange") != -1;
  102. gHasCallback[8] = funcidx("OnPlayerPingChange") != -1;
  103. gHasCallback[9] = funcidx("OnPlayerAmmoChange") != -1;
  104. gHasCallback[10] = funcidx("OnPlayerMoneyChange") != -1;
  105. gHasCallback[11] = funcidx("OnPlayerScoreChange") != -1;
  106.  
  107. #if defined Calls_OnFilterScriptInit
  108. return Calls_OnFilterScriptInit();
  109. #else
  110. return 1;
  111. #endif
  112. }
  113. #if defined _ALS_OnFilterScriptInit
  114. #undef OnFilterScriptInit
  115. #else
  116. #define _ALS_OnFilterScriptInit
  117. #endif
  118. #define OnFilterScriptInit Calls_OnFilterScriptInit
  119. #if defined Calls_OnFilterScriptInit
  120. forward Calls_OnFilterScriptInit();
  121. #endif
  122.  
  123. #else
  124.  
  125. public OnGameModeInit()
  126. {
  127. //for onplayerupdate only
  128. gHasCallback[0] = funcidx("OnPlayerUnpause") != -1;
  129. gHasCallback[1] = funcidx("OnPlayerPosChange") != -1;
  130. gHasCallback[2] = funcidx("OnPlayerFacingAngleChange") != -1;
  131. gHasCallback[3] = funcidx("OnPlayerWeaponChange") != -1;
  132. gHasCallback[4] = funcidx("OnPlayerHealthChange") != -1;
  133. gHasCallback[5] = funcidx("OnPlayerArmourChange") != -1;
  134. gHasCallback[6] = funcidx("OnPlayerVirtualWorldChange") != -1;
  135. gHasCallback[7] = funcidx("OnPlayerSkinChange") != -1;
  136. gHasCallback[8] = funcidx("OnPlayerPingChange") != -1;
  137. gHasCallback[9] = funcidx("OnPlayerAmmoChange") != -1;
  138. gHasCallback[10] = funcidx("OnPlayerMoneyChange") != -1;
  139. gHasCallback[11] = funcidx("OnPlayerScoreChange") != -1;
  140.  
  141. #if defined Calls_OnGameModeInit
  142. return Calls_OnGameModeInit();
  143. #else
  144. return 1;
  145. #endif
  146. }
  147. #if defined _ALS_OnGameModeInit
  148. #undef OnGameModeInit
  149. #else
  150. #define _ALS_OnGameModeInit
  151. #endif
  152. #define OnGameModeInit Calls_OnGameModeInit
  153. #if defined Calls_OnGameModeInit
  154. forward Calls_OnGameModeInit();
  155. #endif
  156.  
  157. #endif
  158.  
  159. stock GetPlayerPausedTime(playerid)
  160. {
  161. return gPlayerCall[playerid][P_PAUSED_TIME];
  162. }
  163.  
  164. stock IsPlayerPaused(playerid)
  165. {
  166. return gPlayerCall[playerid][P_PAUSED];
  167. }
  168.  
  169. public OnPlayerConnect(playerid)
  170. {
  171. gPlayerCall[playerid][P_PAUSED] = false;
  172. gPlayerCall[playerid][P_PAUSED_TIME] = 0;
  173. gPlayerCall[playerid][P_PAUSED_TIMER] = SetTimerEx("CALLS_OnPlayerPause", 1000, true, "i", playerid);
  174.  
  175. gPlayerCall[playerid][P_DEATHS] = 0;
  176. gPlayerCall[playerid][P_DEATH_TICK] = 0;
  177.  
  178. #if defined Calls_OnPlayerConnect
  179. return Calls_OnPlayerConnect(playerid);
  180. #else
  181. return 1;
  182. #endif
  183. }
  184. #if defined _ALS_OnPlayerConnect
  185. #undef OnPlayerConnect
  186. #else
  187. #define _ALS_OnPlayerConnect
  188. #endif
  189. #define OnPlayerConnect Calls_OnPlayerConnect
  190. #if defined Calls_OnPlayerConnect
  191. forward Calls_OnPlayerConnect(playerid);
  192. #endif
  193.  
  194. public OnPlayerDisconnect(playerid, reason)
  195. {
  196. gPlayerCall[playerid][P_PAUSED] = false;
  197. gPlayerCall[playerid][P_PAUSED_TIME] = 0;
  198. KillTimer(gPlayerCall[playerid][P_PAUSED_TIMER]);
  199.  
  200. #if defined Calls_OnPlayerDisconnect
  201. return Calls_OnPlayerDisconnect(playerid, reason);
  202. #else
  203. return 1;
  204. #endif
  205. }
  206. #if defined _ALS_OnPlayerDisconnect
  207. #undef OnPlayerDisconnect
  208. #else
  209. #define _ALS_OnPlayerDisconnect
  210. #endif
  211. #define OnPlayerDisconnect Calls_OnPlayerDisconnect
  212. #if defined Calls_OnPlayerDisconnect
  213. forward Calls_OnPlayerDisconnect(playerid, reason);
  214. #endif
  215.  
  216. public OnPlayerSpawn(playerid)
  217. {
  218. GetPlayerPos(playerid, gPlayerCall[playerid][P_X], gPlayerCall[playerid][P_Y], gPlayerCall[playerid][P_Z]);
  219. GetPlayerFacingAngle(playerid, gPlayerCall[playerid][P_ANGLE]);
  220.  
  221. gPlayerCall[playerid][P_WORLDID] = GetPlayerVirtualWorld(playerid);
  222.  
  223. GetPlayerHealth(playerid, gPlayerCall[playerid][P_HEALTH]);
  224. GetPlayerArmour(playerid, gPlayerCall[playerid][P_ARMOUR]);
  225.  
  226. gPlayerCall[playerid][P_SKIN] = GetPlayerSkin(playerid);
  227.  
  228. gPlayerCall[playerid][P_WEAPON] = GetPlayerWeapon(playerid);
  229. gPlayerCall[playerid][P_AMMO] = GetPlayerAmmo(playerid);
  230.  
  231. gPlayerCall[playerid][P_MONEY] = GetPlayerMoney(playerid);
  232. gPlayerCall[playerid][P_SCORE] = GetPlayerScore(playerid);
  233.  
  234. gPlayerCall[playerid][P_PING] = GetPlayerPing(playerid);
  235.  
  236. #if defined Calls_OnPlayerSpawn
  237. return Calls_OnPlayerSpawn(playerid);
  238. #else
  239. return 1;
  240. #endif
  241. }
  242. #if defined _ALS_OnPlayerSpawn
  243. #undef OnPlayerSpawn
  244. #else
  245. #define _ALS_OnPlayerSpawn
  246. #endif
  247. #define OnPlayerSpawn Calls_OnPlayerSpawn
  248. #if defined Calls_OnPlayerSpawn
  249. forward Calls_OnPlayerSpawn(playerid);
  250. #endif
  251.  
  252. public OnPlayerUpdate(playerid)
  253. {
  254. //OnPlayerUnpause
  255. if(gHasCallback[0])
  256. {
  257. gPlayerCall[playerid][P_LAST_UPDATE] = GetTickCount();
  258.  
  259. if(gPlayerCall[playerid][P_PAUSED])
  260. {
  261. if(CallLocalFunction("OnPlayerUnpause", "ii", playerid, gPlayerCall[playerid][P_PAUSED_TIME]))
  262. {
  263. gPlayerCall[playerid][P_PAUSED] = false;
  264. gPlayerCall[playerid][P_PAUSED_TIME] = 0;
  265. }
  266. }
  267. }
  268.  
  269. //OnPlayerPosChange
  270. if(gHasCallback[1])
  271. {
  272. static Float:player_pos[3];
  273. GetPlayerPos(playerid, player_pos[0], player_pos[1], player_pos[2]);
  274. if( player_pos[0] != gPlayerCall[playerid][P_X] ||
  275. player_pos[1] != gPlayerCall[playerid][P_Y] ||
  276. player_pos[2] != gPlayerCall[playerid][P_Z])
  277. {
  278. if(CallLocalFunction("OnPlayerPosChange", "iffffff", playerid, player_pos[0], player_pos[1], player_pos[2], gPlayerCall[playerid][P_X], gPlayerCall[playerid][P_Y], gPlayerCall[playerid][P_Z]))
  279. {
  280. GetPlayerPos(playerid, gPlayerCall[playerid][P_X], gPlayerCall[playerid][P_Y], gPlayerCall[playerid][P_Z]);
  281. }
  282. else
  283. {
  284. SetPlayerPos(playerid, gPlayerCall[playerid][P_X], gPlayerCall[playerid][P_Y], gPlayerCall[playerid][P_Z]);
  285. }
  286. }
  287. }
  288.  
  289. //OnPlayerFacingAngleChange
  290. if(gHasCallback[2])
  291. {
  292. static Float:player_angle;
  293. GetPlayerFacingAngle(playerid, player_angle);
  294. if(player_angle != gPlayerCall[playerid][P_ANGLE])
  295. {
  296. if(CallLocalFunction("OnPlayerFacingAngleChange", "iff", playerid, player_angle, gPlayerCall[playerid][P_ANGLE]))
  297. {
  298. GetPlayerFacingAngle(playerid, gPlayerCall[playerid][P_ANGLE]);
  299. }
  300. else
  301. {
  302. SetPlayerFacingAngle(playerid, gPlayerCall[playerid][P_ANGLE]);
  303. }
  304. }
  305. }
  306.  
  307. //OnPlayerWeaponChange
  308. if(gHasCallback[3])
  309. {
  310. static player_weapon;
  311. player_weapon = GetPlayerWeapon(playerid);
  312. if(player_weapon != gPlayerCall[playerid][P_WEAPON])
  313. {
  314. if(CallLocalFunction("OnPlayerWeaponChange", "iii", playerid, player_weapon, gPlayerCall[playerid][P_WEAPON]))
  315. {
  316. gPlayerCall[playerid][P_WEAPON] = player_weapon;
  317. }
  318. else
  319. {
  320. SetPlayerArmedWeapon(playerid, gPlayerCall[playerid][P_WEAPON]);
  321. }
  322. }
  323. }
  324.  
  325. //OnPlayerHealthChange
  326. if(gHasCallback[4])
  327. {
  328. static Float:player_health;
  329. GetPlayerHealth(playerid, player_health);
  330. if(player_health != gPlayerCall[playerid][P_HEALTH])
  331. {
  332. if(CallLocalFunction("OnPlayerHealthChange", "iff", playerid, player_health, gPlayerCall[playerid][P_HEALTH]))
  333. {
  334. GetPlayerHealth(playerid, gPlayerCall[playerid][P_HEALTH]);
  335. }
  336. else
  337. {
  338. SetPlayerHealth(playerid, gPlayerCall[playerid][P_HEALTH]);
  339. }
  340. }
  341. }
  342.  
  343. //OnPlayerArmourChange
  344. if(gHasCallback[5])
  345. {
  346. static Float:player_armour;
  347. GetPlayerArmour(playerid, player_armour);
  348. if(player_armour != gPlayerCall[playerid][P_ARMOUR])
  349. {
  350. if(CallLocalFunction("OnPlayerArmourChange", "iff", playerid, player_armour, gPlayerCall[playerid][P_ARMOUR]))
  351. {
  352. GetPlayerArmour(playerid, gPlayerCall[playerid][P_ARMOUR]);
  353. }
  354. else
  355. {
  356. SetPlayerArmour(playerid, gPlayerCall[playerid][P_ARMOUR]);
  357. }
  358. }
  359. }
  360.  
  361. //OnPlayerVirtualWorldChange
  362. if(gHasCallback[6])
  363. {
  364. static player_world;
  365. player_world = GetPlayerVirtualWorld(playerid);
  366. if(player_world != gPlayerCall[playerid][P_WORLDID])
  367. {
  368. if(CallLocalFunction("OnPlayerVirtualWorldChange", "iii", playerid, player_world, gPlayerCall[playerid][P_WORLDID]))
  369. {
  370. gPlayerCall[playerid][P_WORLDID] = player_world;
  371. }
  372. else
  373. {
  374. SetPlayerVirtualWorld(playerid, gPlayerCall[playerid][P_WORLDID]);
  375. }
  376. }
  377. }
  378.  
  379. //OnPlayerSkinChange
  380. if(gHasCallback[7])
  381. {
  382. static player_skin;
  383. player_skin = GetPlayerSkin(playerid);
  384. if(player_skin != gPlayerCall[playerid][P_SKIN])
  385. {
  386. if(CallLocalFunction("OnPlayerSkinChange", "iii", playerid, player_skin, gPlayerCall[playerid][P_SKIN]))
  387. {
  388. gPlayerCall[playerid][P_SKIN] = player_skin;
  389. }
  390. else
  391. {
  392. SetPlayerSkin(playerid, gPlayerCall[playerid][P_SKIN]);
  393. }
  394. }
  395. }
  396.  
  397. //OnPlayerPingChange
  398. if(gHasCallback[8])
  399. {
  400. static player_ping;
  401. player_ping = GetPlayerPing(playerid);
  402. if(player_ping != gPlayerCall[playerid][P_PING])
  403. {
  404. CallLocalFunction("OnPlayerPingChange", "iii", playerid, player_ping, gPlayerCall[playerid][P_PING]);
  405.  
  406. gPlayerCall[playerid][P_PING] = player_ping;
  407. }
  408. }
  409.  
  410. //OnPlayerAmmoChange
  411. if(gHasCallback[9])
  412. {
  413. //OnPlayerAmmoChange
  414. static player_ammo;
  415. static player_current_weapon;
  416. player_current_weapon = GetPlayerWeapon(playerid);
  417. player_ammo = GetPlayerAmmo(playerid);
  418. if(player_ammo != gPlayerCall[playerid][P_AMMO])
  419. {
  420. if(CallLocalFunction("OnPlayerAmmoChange", "iiii", playerid, player_current_weapon, player_ammo, gPlayerCall[playerid][P_AMMO]))
  421. {
  422. gPlayerCall[playerid][P_AMMO] = player_ammo;
  423. }
  424. else
  425. {
  426. SetPlayerAmmo(playerid, player_current_weapon, gPlayerCall[playerid][P_AMMO]);
  427. }
  428. }
  429. }
  430.  
  431. //OnPlayerMoneyChange
  432. if(gHasCallback[10])
  433. {
  434. static player_money;
  435. player_money = GetPlayerMoney(playerid);
  436. if(player_money != gPlayerCall[playerid][P_MONEY])
  437. {
  438. if(CallLocalFunction("OnPlayerMoneyChange", "iii", playerid, player_money, gPlayerCall[playerid][P_MONEY]))
  439. {
  440. gPlayerCall[playerid][P_MONEY] = player_money;
  441. }
  442. else
  443. {
  444. ResetPlayerMoney(playerid);
  445. GivePlayerMoney(playerid, gPlayerCall[playerid][P_MONEY]);
  446. }
  447. }
  448. }
  449.  
  450. //OnPlayerScoreChange
  451. if(gHasCallback[11])
  452. {
  453. static player_score;
  454. player_score = GetPlayerScore(playerid);
  455. if(player_score != gPlayerCall[playerid][P_SCORE])
  456. {
  457. if(CallLocalFunction("OnPlayerScoreChange", "iii", playerid, player_score, gPlayerCall[playerid][P_SCORE]))
  458. {
  459. gPlayerCall[playerid][P_SCORE] = player_score;
  460. }
  461. else
  462. {
  463. SetPlayerScore(playerid, gPlayerCall[playerid][P_SCORE]);
  464. }
  465. }
  466. }
  467.  
  468. #if defined Calls_OnPlayerUpdate
  469. return Calls_OnPlayerUpdate(playerid);
  470. #else
  471. return 1;
  472. #endif
  473. }
  474. #if defined _ALS_OnPlayerUpdate
  475. #undef OnPlayerUpdate
  476. #else
  477. #define _ALS_OnPlayerUpdate
  478. #endif
  479. #define OnPlayerUpdate Calls_OnPlayerUpdate
  480. #if defined Calls_OnPlayerUpdate
  481. forward Calls_OnPlayerUpdate(playerid);
  482. #endif
  483.  
  484. public OnPlayerDeath(playerid, killerid, reason)
  485. {
  486. //anti fake kill and OnPlayerKillPlayer callback
  487. if( killerid != INVALID_PLAYER_ID &&
  488. playerid != INVALID_PLAYER_ID &&
  489. ! IsPlayerNPC(killerid) &&
  490. ! IsPlayerNPC(playerid))
  491. {
  492. #if defined ANTI_FAKE_KILL
  493. if(gettime() - gPlayerCall[playerid][P_DEATH_TICK] < 5 * 100)
  494. {
  495. gPlayerCall[playerid][P_DEATHS] ++;
  496. if(gPlayerCall[playerid][P_DEATHS] > 1)
  497. {
  498. CallLocalFunction("OnPlayerFakeKill", "ii", playerid, gPlayerCall[playerid][P_DEATHS]);
  499. gPlayerCall[playerid][P_DEATHS] = 0;
  500. return 0;
  501. }
  502. }
  503. else
  504. {
  505. gPlayerCall[playerid][P_DEATHS] = 1;
  506. gPlayerCall[playerid][P_DEATH_TICK] = gettime();
  507. }
  508. #endif
  509.  
  510. reason = GetPlayerWeapon(killerid);
  511. if(! IsValidWeapon(reason)) reason = 0;
  512.  
  513. CallLocalFunction("OnPlayerKillPlayer", "iii", playerid, killerid, reason);
  514. }
  515.  
  516. #if defined Calls_OnPlayerDeath
  517. return Calls_OnPlayerDeath(playerid, killerid, reason);
  518. #else
  519. return 1;
  520. #endif
  521. }
  522. #if defined _ALS_OnPlayerDeath
  523. #undef OnPlayerDeath
  524. #else
  525. #define _ALS_OnPlayerDeath
  526. #endif
  527. #define OnPlayerDeath Calls_OnPlayerDeath
  528. #if defined Calls_OnPlayerDeath
  529. forward Calls_OnPlayerDeath(playerid, killerid, reason);
  530. #endif
  531.  
  532. //internal callbacks
  533. forward CALLS_OnPlayerPause(playerid);
  534. public CALLS_OnPlayerPause(playerid)
  535. {
  536. new CurrentTime = GetTickCount();
  537. new PlayerState = GetPlayerState(playerid);
  538.  
  539. if(! gPlayerCall[playerid][P_PAUSED])
  540. {
  541. if(! CALL_IsPlayerInClassSelection(playerid))
  542. {
  543. if((CurrentTime - gPlayerCall[playerid][P_LAST_UPDATE]) >= (PAUSE_CHECK_TIME * 1000))
  544. {
  545. if( (PlayerState == PLAYER_STATE_ONFOOT) ||
  546. (PlayerState == PLAYER_STATE_DRIVER) ||
  547. (PlayerState == PLAYER_STATE_PASSENGER))
  548. {
  549. if(CallLocalFunction("OnPlayerPause", "i", playerid))
  550. {
  551. gPlayerCall[playerid][P_PAUSED] = true;
  552. gPlayerCall[playerid][P_PAUSED_TIME] = 0;
  553. }
  554. }
  555. }
  556. }
  557. }
  558. else
  559. {
  560. gPlayerCall[playerid][P_PAUSED_TIME] += 1;
  561. }
  562. return 1;
  563. }
  564.  
  565. forward OnPlayerPosChange(playerid, Float:newx, Float:newy, Float:newz, Float:oldx, Float:oldy, Float:oldz);
  566. forward OnPlayerFacingAngleChange(playerid, Float:newangle, Float:oldangle);
  567. forward OnPlayerWeaponChange(playerid, newweapon, oldweapon);
  568. forward OnPlayerHealthChange(playerid, Float:newhealth, Float:oldhealth);
  569. forward OnPlayerArmourChange(playerid, Float:newarmour, Float:oldarmour);
  570. forward OnPlayerVirtualWorldChange(playerid, newworld, oldworld);
  571. forward OnPlayerSkinChange(playerid, newskin, oldskin);
  572. forward OnPlayerPingChange(playerid, newping, oldping);
  573. forward OnPlayerAmmoChange(playerid, weaponid, newammo, oldammo);
  574. forward OnPlayerKillPlayer(playerid, killerid, weaponid);
  575. forward OnPlayerPause(playerid);
  576. forward OnPlayerUnpause(playerid, time);
  577. forward OnPlayerFakeKill(playerid, count);
  578. forward OnPlayerMoneyChange(playerid, newmoney, oldmoney);
  579. forward OnPlayerScoreChange(playerid, newscore, oldscore);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement