Guest User

Untitled

a guest
May 24th, 2012
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.57 KB | None | 0 0
  1. //-----------------------------------------------------------------------------------|
  2. // [svGroups] |
  3. // |
  4. // |
  5. // - You may not remove these credits |
  6. // - You may not claim this script as yours |
  7. // |
  8. // |
  9. // |
  10. // [VERSION 1.3] Created by SuperViper |
  11. //-----------------------------------------------------------------------------------|
  12.  
  13. #include <a_samp>
  14.  
  15. // ==================================== SETTINGS ================================== ///
  16. // //|
  17. /* Comment if you would like to use regular 'for' loops instead of foreach */ //|
  18. #define USE_FOREACH //|
  19. // //|
  20. /* Comment if you would like to use regular 'ALS' hooks instead of y_hooks */ //|
  21. #define USE_YHOOKS //|
  22. // //|
  23. /* Maximum amount of groups you need. The lower the amount, the less memory used */ //|
  24. #define GROUP_AMOUNT 15 //|
  25. // //|
  26. // ================================================================================ ///
  27.  
  28. #if defined USE_FOREACH
  29. #tryinclude <foreach>
  30. #endif
  31.  
  32. #if defined USE_YHOOKS
  33. #tryinclude <YSI\y_hooks>
  34. #endif
  35.  
  36. #define SVCS_svGroups
  37.  
  38. forward svGroups_OnPlayerInBlockedCar(playerid, vehicleid, ispassenger, playergroupid);
  39.  
  40. enum e_svGroups_Data
  41. {
  42. svMembers,
  43. Float: svSpawn[4],
  44. svSpawnInterior,
  45. svSpawnWorld,
  46. bool: svUsingSkin,
  47. svSkin,
  48. Float: svHealth,
  49. Float: svArmor,
  50. svWeapons[5],
  51. svWeaponAmmo[5],
  52. svColor,
  53. }
  54.  
  55. new svGroups_Data[GROUP_AMOUNT][e_svGroups_Data], svGroups_PlayerGroup[MAX_PLAYERS], bool: svGroups_Debugging;
  56. new svGroups_VehicleGroup[MAX_VEHICLES][40];
  57.  
  58. #if defined USE_YHOOKS
  59. hook OnPlayerConnect(playerid)
  60. {
  61. svGroups_PlayerGroup[playerid] = 0;
  62. return 1;
  63. }
  64.  
  65. hook OnPlayerDisconnect(playerid)
  66. {
  67. if(svGroups_PlayerGroup[playerid] > 0)
  68. {
  69. svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svMembers]--;
  70. }
  71. return 1;
  72. }
  73.  
  74. hook OnPlayerSpawn(playerid)
  75. {
  76. if(svGroups_PlayerGroup[playerid] > 0)
  77. {
  78. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][0] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][1] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][2] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][3] > 0.0)
  79. {
  80. SetPlayerVirtualWorld(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawnWorld]);
  81. SetPlayerInterior(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawnInterior]);
  82. SetPlayerPos(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][0], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][1], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][2]);
  83. SetPlayerFacingAngle(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][3]);
  84. }
  85.  
  86. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svUsingSkin] == true)
  87. {
  88. SetPlayerSkin(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSkin]);
  89. }
  90.  
  91. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svHealth] > 0.0)
  92. {
  93. SetPlayerHealth(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svHealth]);
  94. }
  95.  
  96. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svArmor] > 0.0)
  97. {
  98. SetPlayerArmour(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svArmor]);
  99. }
  100.  
  101. for(new i = 0; i < 5; i++)
  102. {
  103. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeapons][i] > 0 && svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeaponAmmo][i] > 0)
  104. {
  105. GivePlayerWeapon(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeapons][i], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeaponAmmo][i]);
  106. }
  107. }
  108. }
  109. return 1;
  110. }
  111. #else
  112. forward svGroups_OnPlayerConnect();
  113. public OnPlayerConnect(playerid)
  114. {
  115. svGroups_PlayerGroup[playerid] = 0;
  116. return CallRemoteFunction("svGroups_OnPlayerConnect", "d", playerid);
  117. }
  118.  
  119. #if defined _ALS_OnPlayerConnect
  120. #undef OnPlayerConnect
  121. #else
  122. #define _ALS_OnPlayerConnect
  123. #endif
  124. #define OnPlayerConnect svGroups_OnPlayerConnect
  125.  
  126. forward svGroups_OnPlayerDisconnect();
  127. public OnPlayerDisconnect(playerid)
  128. {
  129. if(svGroups_PlayerGroup[playerid] > 0)
  130. {
  131. svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svMembers]--;
  132. }
  133. return CallRemoteFunction("svGroups_OnPlayerDisconnect", "d", playerid);
  134. }
  135.  
  136. #if defined _ALS_OnPlayerDisconnect
  137. #undef OnPlayerDisconnect
  138. #else
  139. #define _ALS_OnPlayerDisconnect
  140. #endif
  141. #define OnPlayerDisconnect svGroups_OnPlayerDisconnect
  142.  
  143. forward svGroups_OnPlayerSpawn(playerid);
  144. public OnPlayerSpawn(playerid)
  145. {
  146. if(svGroups_PlayerGroup[playerid] > 0)
  147. {
  148. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][0] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][1] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][2] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][3] > 0.0)
  149. {
  150. SetPlayerVirtualWorld(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawnWorld]);
  151. SetPlayerInterior(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawnInterior]);
  152. SetPlayerPos(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][0], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][1], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][2]);
  153. SetPlayerFacingAngle(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][3]);
  154. }
  155.  
  156. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svUsingSkin] == true)
  157. {
  158. SetPlayerSkin(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSkin]);
  159. }
  160.  
  161. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svHealth] > 0.0)
  162. {
  163. SetPlayerHealth(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svHealth]);
  164. }
  165.  
  166. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svArmor] > 0.0)
  167. {
  168. SetPlayerArmour(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svArmor]);
  169. }
  170.  
  171. for(new i = 0; i < 5; i++)
  172. {
  173. if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeapons][i] > 0 && svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeaponAmmo][i] > 0)
  174. {
  175. GivePlayerWeapon(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeapons][i], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeaponAmmo][i]);
  176. }
  177. }
  178. }
  179. return CallRemoteFunction("svGroups_OnPlayerSpawn", "d", playerid);
  180. }
  181.  
  182. #if defined _ALS_OnPlayerSpawn
  183. #undef OnPlayerSpawn
  184. #else
  185. #define _ALS_OnPlayerSpawn
  186. #endif
  187. #define OnPlayerSpawn svGroups_OnPlayerSpawn
  188.  
  189. forward svGroups_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
  190. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  191. {
  192. if(svGroups_VehicleGroup[vehicleid][0] != 'n')
  193. {
  194. new tempString[8];
  195. format(tempString, sizeof(tempString), "[%d]", svGroups_PlayerGroup[playerid]);
  196. if(strfind(VehicleGroup[vehicleid], tempString) == -1)
  197. {
  198. CallRemoteFunction("svGroups_OnPlayerInBlockedCar", "dddd", playerid, vehicleid, ispassenger, svGroups_PlayerGroup[playerid]);
  199. ClearAnimations(playerid);
  200. return 1;
  201. }
  202. }
  203. return CallRemoteFunction("svGroups_OnPlayerEnterVehicle", "ddd", playerid, vehicleid, ispassenger);
  204. }
  205.  
  206. #if defined _ALS_OnPlayerEnterVehicle
  207. #undef OnPlayerEnterVehicle
  208. #else
  209. #define _ALS_OnPlayerEnterVehicle
  210. #endif
  211. #define OnPlayerEnterVehicle svGroups_OnPlayerEnterVehicle
  212. #endif
  213.  
  214. stock svGroup_Debug(bool: togDebug)
  215. {
  216. if(togDebug == false)
  217. {
  218. print("(svGroups) Debugging has been turned off");
  219. }
  220. else if(togDebug == true)
  221. {
  222. print("(svGroups) Debugging has been turned on");
  223. }
  224.  
  225. return svGroups_Debugging = togDebug;
  226. }
  227.  
  228. stock svGroup_SetPlayer(playerid, groupid)
  229. {
  230. if(svGroups_Debugging == true)
  231. {
  232. printf("(svGroups) SetPlayer(playerid = %d, groupid = %d)", playerid, groupid);
  233. }
  234.  
  235. if(svGroups_PlayerGroup[playerid] > 0)
  236. {
  237. svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svMembers]--;
  238. }
  239.  
  240. if(groupid > 0)
  241. {
  242. svGroups_Data[groupid - 1][svMembers]++;
  243. }
  244.  
  245. return svGroups_PlayerGroup[playerid] = groupid;
  246. }
  247.  
  248. stock svGroup_GetPlayer(playerid)
  249. {
  250. if(svGroups_Debugging == true)
  251. {
  252. printf("(svGroups) GetPlayer(playerid = %d)", playerid);
  253. }
  254.  
  255. return svGroups_PlayerGroup[playerid];
  256. }
  257.  
  258. stock svGroup_CountMembers(groupid)
  259. {
  260. if(svGroups_Debugging == true)
  261. {
  262. printf("(svGroups) CountMembers(groupid = %d)", groupid);
  263. }
  264.  
  265. return svGroups_Data[groupid - 1][svMembers];
  266. }
  267.  
  268. stock svGroup_SetHealth(groupid, Float: Health)
  269. {
  270. if(svGroups_Debugging == true)
  271. {
  272. printf("(svGroups) SetHealth(groupid = %d, Health = %f)", groupid, Health);
  273. }
  274.  
  275. new playersInGroup;
  276.  
  277. #if defined USE_FOREACH
  278. foreach(new i: Player)
  279. {
  280. if(svGroups_PlayerGroup[i] == groupid)
  281. {
  282. SetPlayerHealth(i, Health);
  283. playersInGroup = 1;
  284. }
  285. }
  286. #else
  287. for(new i = 0; i < MAX_PLAYERS; i++)
  288. {
  289. if(IsPlayerConnected(i))
  290. {
  291. if(svGroups_PlayerGroup[i] == groupid)
  292. {
  293. SetPlayerHealth(i, Health);
  294. playersInGroup = 1;
  295. }
  296. }
  297. }
  298. #endif
  299.  
  300. return playersInGroup;
  301. }
  302.  
  303. stock svGroup_SetArmor(groupid, Float: Armor)
  304. {
  305. if(svGroups_Debugging == true)
  306. {
  307. printf("(svGroups) SetArmor(groupid = %d, Armor = %f)", groupid, Armor);
  308. }
  309.  
  310. new playersInGroup;
  311.  
  312. #if defined USE_FOREACH
  313. foreach(new i: Player)
  314. {
  315. if(svGroups_PlayerGroup[i] == groupid)
  316. {
  317. SetPlayerArmour(i, Armor);
  318. playersInGroup = 1;
  319. }
  320. }
  321. #else
  322. for(new i = 0; i < MAX_PLAYERS; i++)
  323. {
  324. if(IsPlayerConnected(i))
  325. {
  326. if(svGroups_PlayerGroup[i] == groupid)
  327. {
  328. SetPlayerArmour(i, Armor);
  329. playersInGroup = 1;
  330. }
  331. }
  332. }
  333. #endif
  334.  
  335. return playersInGroup;
  336. }
  337.  
  338. stock svGroup_SetSpawn(groupid, Float: sX, Float: sY, Float: sZ, sInterior = 0, sVirtualWorld = 0, Float: sA)
  339. {
  340. if(svGroups_Debugging == true)
  341. {
  342. printf("(svGroups) SetSpawn(groupid = %d, sX = %f, sY = %f, sZ = %f, sInterior = %d, sVirtualWorld = %d, sA = %f)", groupid, sX, sY, sZ, sInterior, sVirtualWorld, sA);
  343. }
  344.  
  345. return svGroups_Data[groupid - 1][svSpawn][0] = sX, svGroups_Data[groupid - 1][svSpawn][1] = sY, svGroups_Data[groupid - 1][svSpawn][2] = sZ, svGroups_Data[groupid - 1][svSpawnInterior] = sInterior, svGroups_Data[groupid - 1][svSpawnWorld] = sVirtualWorld, svGroups_Data[groupid - 1][svSpawn][3] = sA;
  346. }
  347.  
  348. stock svGroup_SetSpawnInfo(groupid, skin, Float: sHealth = 0.0, Float: sArmor = 0.0, weapon1 = 0, weapon1ammo = 0, weapon2 = 0, weapon3ammo = 0, weapon4 = 0, weapon4ammo = 0, weapon5 = 0, weapon5ammo = 0, color = -1)
  349. {
  350. if(svGroups_Debugging == true)
  351. {
  352. printf("(svGroups) SetSpawnInfo(groupid = %d, skin = %d, sHealth = %f, sArmor = %f, weapon1 = %d, weapon1ammo = %d, weapon2 = %d, weapon2ammo = %d, weapon3 = %d, weapon3ammo = %d, weapon4 = %d, weapon4ammo = %d, weapon5 = %d, weapon5ammo = %d, color = %d)", groupid, skin, sHealth, sArmor, weapon1, weapon1ammo, weapon2, weapon2ammo, weapon3, weapon3ammo, weapon4, weapon4ammo, weapon5, weapon5ammo, color);
  353. }
  354.  
  355. return svGroups_Data[groupid - 1][svSkin] = skin, svGroups_Data[groupid - 1][svUsingSkin] = true, svGroups_Data[groupid - 1][svHealth] = sHealth, svGroups_Data[groupid - 1][svArmor] = sArmor, svGroups_Data[groupid - 1][svWeapons][0] = weapon1, svGroups_Data[groupid - 1][svWeaponAmmo][0] = weapon1ammo, svGroups_Data[groupid - 1][svWeapons][1] = weapon2, svGroups_Data[groupid - 1][svWeaponAmmo][1] = weapon2ammo, svGroups_Data[groupid - 1][svWeapons][2] = weapon3, svGroups_Data[groupid - 1][svWeaponAmmo][2] = weapon3ammo, svGroups_Data[groupid - 1][svWeapons][3] = weapon4, svGroups_Data[groupid - 1][svWeaponAmmo][3] = weapon4ammo, svGroups_Data[groupid - 1][svWeapons][4] = weapon5, svGroups_Data[groupid - 1][svWeaponAmmo][4] = weapon5ammo, svGroups_Data[groupid - 1][svColor] = color;
  356. }
  357.  
  358. stock svGroup_ToggleControllable(groupid, bool: controllable)
  359. {
  360. if(svGroups_Debugging == true)
  361. {
  362. printf("(svGroups) ToggleControllable(groupid = %d, controllable = %d)", groupid, controllable);
  363. }
  364.  
  365. new playersInGroup;
  366.  
  367. #if defined USE_FOREACH
  368. foreach(new i: Player)
  369. {
  370. if(svGroups_PlayerGroup[i] == groupid)
  371. {
  372. TogglePlayerControllable(i, controllable);
  373. playersInGroup = 1;
  374. }
  375. }
  376. #else
  377. for(new i = 0; i < MAX_PLAYERS; i++)
  378. {
  379. if(IsPlayerConnected(i))
  380. {
  381. if(svGroups_PlayerGroup[i] == groupid)
  382. {
  383. TogglePlayerControllable(i, controllable);
  384. playersInGroup = 1;
  385. }
  386. }
  387. }
  388. #endif
  389.  
  390. return playersInGroup;
  391. }
  392.  
  393. stock svGroup_GiveMoney(groupid, money)
  394. {
  395. if(svGroups_Debugging == true)
  396. {
  397. printf("(svGroups) GiveMoney(groupid = %d, money = %d)", groupid, money);
  398. }
  399.  
  400. new playersInGroup;
  401.  
  402. #if defined USE_FOREACH
  403. foreach(new i: Player)
  404. {
  405. if(svGroups_PlayerGroup[i] == groupid)
  406. {
  407. GivePlayerMoney(i, money);
  408. playersInGroup = 1;
  409. }
  410. }
  411. #else
  412. for(new i = 0; i < MAX_PLAYERS; i++)
  413. {
  414. if(IsPlayerConnected(i))
  415. {
  416. if(svGroups_PlayerGroup[i] == groupid)
  417. {
  418. GivePlayerMoney(i, money);
  419. playersInGroup = 1;
  420. }
  421. }
  422. }
  423. #endif
  424.  
  425. return playersInGroup;
  426. }
  427.  
  428. stock svGroup_SetVehicleGroup(vehicleid, groupid)
  429. {
  430. if(svGroups_Debugging == true)
  431. {
  432. printf("(svGroups) SetVehicleGroup(vehicleid = %d, groupid = %d)", vehicleid, groupid);
  433. }
  434.  
  435. return (groupid > 0) ? format(svGroups_VehicleGroup[vehicleid], 40, "[%d]", groupid) : svGroups_VehicleGroup[vehicleid] = "n";
  436. }
  437.  
  438. stock svGroup_AddVehicleToGroup(vehicleid, groupid)
  439. {
  440. if(svGroups_Debugging == true)
  441. {
  442. printf("(svGroups) AddVehicleToGroup(vehicleid = %d, groupid = %d)", vehicleid, groupid);
  443. }
  444.  
  445. return format(svGroups_VehicleGroup[vehicleid], 50, "%s[%d]", svGroups_VehicleGroup[vehicleid], groupid);
  446. }
  447.  
  448. stock svGroup_RemoveVehicleFromGroup(vehicleid, groupid)
  449. {
  450. if(svGroups_Debugging == true)
  451. {
  452. printf("(svGroups) RemoveVehicleFromGroup(vehicleid = %d, groupid = %d)", vehicleid, groupid);
  453. }
  454.  
  455. new tempString[8], strFound;
  456. format(tempString, sizeof(tempString), "[%d]", groupid);
  457. strFound = strfind(svGroups_VehicleGroup[vehicleid], tempString);
  458. return (strFound > -1) ? strdel(svGroups_VehicleGroup[vehicleid], strFound, strFound + strlen(tempString)) : -1;
  459. }
  460.  
  461. stock svGroup_IsVehicleInGroup(vehicleid, groupid)
  462. {
  463. if(svGroups_Debugging == true)
  464. {
  465. printf("(svGroups) IsVehicleInGroup(vehicleid = %d, groupid = %d)", vehicleid, groupid);
  466. }
  467.  
  468. new tempString[8];
  469. format(tempString, sizeof(tempString), "[%d]", groupid);
  470. return (strfind(svGroups_VehicleGroup[vehicleid], tempString) > -1) ? 1 : 0;
  471. }
  472.  
  473. #if defined SVCS_svAddons
  474. public OnVehicleCreate(vehicleid)
  475. {
  476. svGroups_VehicleGroup[vehicleid] = "n";
  477. return 1;
  478. }
  479. #else
  480. stock svGroups_CreateVehicle(vehicletype, Float: x, Float: y, Float: z, Float: rotation, color1, color2, respawn_delay)
  481. {
  482. new vehicleid = CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay);
  483. svGroups_VehicleGroup[vehicleid] = "n";
  484. return vehicleid;
  485. }
  486.  
  487. #if defined _ALS_CreateVehicle
  488. #undef CreateVehicle
  489. #else
  490. #define _ALS_CreateVehicle
  491. #endif
  492. #define CreateVehicle svGroups_CreateVehicle
  493.  
  494. stock svGroups_AddStaticVehicle(modelid, Float: spawn_x, Float: spawn_y, Float: spawn_z, Float: z_angle, color1, color2)
  495. {
  496. new vehicleid = AddStaticVehicle(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2);
  497. svGroups_VehicleGroup[vehicleid] = "n";
  498. return vehicleid;
  499. }
  500.  
  501. #if defined _ALS_AddStaticVehicle
  502. #undef AddStaticVehicle
  503. #else
  504. #define _ALS_AddStaticVehicle
  505. #endif
  506. #define AddStaticVehicle svGroups_AddStaticVehicle
  507.  
  508. stock svGroups_AddStaticVehicleEx(modelid, Float: spawn_x, Float: spawn_y, Float: spawn_z, Float: z_angle, color1, color2, respawn_delay)
  509. {
  510. new vehicleid = AddStaticVehicleEx(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2, respawn_delay);
  511. svGroups_VehicleGroup[vehicleid] = "n";
  512. return vehicleid;
  513. }
  514.  
  515. #if defined _ALS_AddStaticVehicleEx
  516. #undef AddStaticVehicleEx
  517. #else
  518. #define _ALS_AddStaticVehicleEx
  519. #endif
  520. #define AddStaticVehicleEx svGroups_AddStaticVehicleEx
  521. #endif
Advertisement
Add Comment
Please, Sign In to add comment