Guest User

Goups2

a guest
Aug 5th, 2017
544
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.72 KB | None | 0 0
  1. //====================================================================[includes]
  2. #include <a_samp>
  3. #include <a_mysql>
  4. #include <izcmd>
  5. #include <sscanf2>
  6. #include <easydialog>
  7. #include <foreach>
  8. #include <y_iterate>
  9. //=================================================================[definitions]
  10. #define FILTERSCRIPT
  11.  
  12. #define mysql_host ""
  13. #define mysql_user ""
  14. #define mysql_pass ""
  15. #define mysql_data ""
  16.  
  17. #define MAX_PERMISSION 5
  18.  
  19. #define SCM SendClientMessage
  20.  
  21. #define COLOR_GREY 0xAFAFAFAA
  22. #define COLOR_RED 0xB22222FF
  23. #define COLOR_GREEN 0x9ACD32AA
  24.  
  25. #define MAX_RANKS 5000//increase this if you like. Tho i'd prefer to put a limit for max player's group ranks.
  26. #define MAX_GROUPS 500//you can change it, if you know what you are doing.
  27. #undef MAX_PLAYERS
  28. #define MAX_PLAYERS 100
  29. #if !defined isnull
  30. #define isnull(%1) \
  31. ((%1[0] == 0) || (%1[0] == 1 && %1[1] == 0))
  32. #endif
  33.  
  34.  
  35. //=======================[variables etc]========================================
  36. new RankSelected[MAX_PLAYERS];
  37. new TempGroupID[MAX_PLAYERS];
  38. new SQL;
  39. //==============================================================================
  40. enum groupsDATA
  41. {
  42. ORM:ORM_ID,
  43. gID,
  44. gName[128],
  45. gLeaderName[32],
  46. gchat,
  47. gCredits,
  48. gResources,
  49. gWarWins,
  50. gWarLosses,
  51. gDraws,
  52. gScore
  53. };
  54. new GroupInfo[MAX_GROUPS][groupsDATA];
  55.  
  56. enum ranksDATA
  57. {
  58. ORM:ORM_ID2,
  59. rID,
  60. rgID,//group id
  61. rName[56],
  62. rLevel,
  63. rPermission[MAX_PERMISSION]// 0-NO 1-YES
  64. };
  65. new RankInfo[MAX_RANKS][ranksDATA];
  66. //==============================================================================
  67.  
  68. enum playerDATA
  69. {
  70. ORM:ORM_ID3,
  71. pID,
  72. pName[MAX_PLAYER_NAME],
  73. grouppid,//here [MAX_GROUPP] represents maximum number of groups for a player
  74. prID,//useful for locating rank id instead of name.
  75. groupcontribution,
  76. gWarKills,
  77. pGroups //should be limited to the number of MAX player groups.
  78. };
  79. new pInfo[MAX_PLAYERS][playerDATA];
  80. new groupvariables[MAX_PLAYERS][2];
  81. new Iterator:Groups<MAX_PLAYERS>;
  82. new Iterator:Ranks<MAX_RANKS>;
  83.  
  84. //==============================================================================
  85. //==========================[USEFUL FUNCTIONS]==================================
  86. //==============================================================================
  87. GetGroupID(gropname[])//very useful for getting the groupid for the functions below and in cmds.
  88. {
  89. foreach(new x : Groups)
  90. {
  91. if(!strcmp(gropname, GroupInfo[x][gName], true) && strlen(GroupInfo[x][gName]) != 0) return x;
  92. }
  93. return -1;
  94. }
  95.  
  96. GroupCheck(playerid, groupid)//a must to use.
  97. {
  98. if(pInfo[playerid][grouppid] == GroupInfo[groupid][gID])
  99. {
  100. return 1;
  101. }
  102. return 11;//11 = invalid
  103. }
  104.  
  105. forward CheckPlayerGroupPermission(playerid, groupid, permission);//should be used for checking rank's permission
  106. public CheckPlayerGroupPermission(playerid, groupid, permission)//returns 1 if everything matches
  107. {
  108. new i = GroupCheck(playerid, groupid);
  109. if(i == 11)
  110. {
  111. return 0;
  112. }
  113. else
  114. {
  115. foreach(new r : Ranks)
  116. {
  117. if(RankInfo[r][rID] == pInfo[playerid][prID] && RankInfo[r][rgID] == pInfo[playerid][grouppid])
  118. {
  119. if(RankInfo[r][rPermission][permission] == 1) //if he has the permission
  120. {
  121. return 1;
  122. }
  123. }
  124. }
  125. }
  126. return 0;
  127. }
  128.  
  129. forward CheckPlayerGroup(playerid, groupid);//groupid = group array in foreach iterator
  130. public CheckPlayerGroup(playerid, groupid)
  131. {
  132. new i = GroupCheck(playerid, groupid);
  133. if(i == 11)
  134. {
  135. return 0;
  136. }
  137. else
  138. {
  139. return 1;
  140. }
  141. }
  142.  
  143. forward ReturnGroupLevel(playerid, groupid); //same as above but returns level
  144. public ReturnGroupLevel(playerid, groupid)
  145. {
  146. new count = 0;
  147. new i = GroupCheck(playerid, groupid);
  148. if(i == 11)
  149. {
  150. return 0;
  151. }
  152. else
  153. {
  154. foreach(new r : Ranks)
  155. {
  156. if(RankInfo[r][rID] == pInfo[playerid][prID] && RankInfo[r][rgID] == pInfo[playerid][grouppid])//RankInfo[r][rgID] == pInfo[playerid][grouppid][i] .... you can remove this.. its just an extra check.
  157. {
  158. count = RankInfo[r][rLevel];
  159. }
  160. }
  161. }
  162. return count;
  163. }
  164. //==============================================================================
  165.  
  166. forward LoadPlayerGroup(playerid);
  167. public LoadPlayerGroup(playerid)
  168. {
  169. switch(orm_errno(pInfo[playerid][ORM_ID3]))
  170. {
  171. case ERROR_OK:
  172. {
  173. //stuff
  174. }
  175. case ERROR_NO_DATA:
  176. {
  177. orm_insert(pInfo[playerid][ORM_ID3], "CreatePlayerData", "d", playerid);
  178. }
  179. }
  180. orm_setkey(pInfo[playerid][ORM_ID3], "pID");
  181. return 1;
  182. }
  183.  
  184. forward CreatePlayerData(playerid);
  185. public CreatePlayerData(playerid)
  186. {
  187. orm_update(pInfo[playerid][ORM_ID3]);
  188. pInfo[playerid][grouppid] = -1;
  189. pInfo[playerid][prID] = -1;
  190. pInfo[playerid][groupcontribution] = 0;
  191. pInfo[playerid][gWarKills] = 0;
  192. pInfo[playerid][pGroups] = 0;
  193. orm_save(pInfo[playerid][ORM_ID3]);
  194. return 1;
  195. }
  196.  
  197. stock SavePlayerGStats(playerid)
  198. {
  199. if(pInfo[playerid][pID] != 0)
  200. {
  201. orm_update(pInfo[playerid][ORM_ID3]);
  202. }
  203. return 1;
  204. }
  205.  
  206. forward ShowRankEditingMenu(playerid, rank);
  207. public ShowRankEditingMenu(playerid, rank)
  208. {
  209. new dialogstr[556], string1[56], string2[56];
  210. format(string1,sizeof(string1),"Rank Name\t%s\n",RankInfo[rank][rName]);
  211. format(string2,sizeof(string2),"Rank Level\t%d\n",RankInfo[rank][rLevel]);
  212. strcat(dialogstr,string1);
  213. strcat(dialogstr,string2);
  214. if(RankInfo[rank][rPermission][0] == 1)
  215. {
  216. strcat(dialogstr,"Use Group Chat?\t{00FF00}YES\n");
  217. }
  218. else
  219. {
  220. strcat(dialogstr,"Use Group Chat?\t{FF0000}NO\n");
  221. }
  222.  
  223. if(RankInfo[rank][rPermission][1] == 1)
  224. {
  225. strcat(dialogstr,"Invite Members to the Group?\t{00FF00}YES\n");
  226. }
  227. else
  228. {
  229. strcat(dialogstr,"Invite Members to the Group?\t{FF0000}NO\n");
  230. }
  231.  
  232. if(RankInfo[rank][rPermission][2] == 1)
  233. {
  234. strcat(dialogstr,"Kick Members from the Group?\t{00FF00}YES\n");
  235. }
  236. else
  237. {
  238. strcat(dialogstr,"Kick Members from the Group?\t{FF0000}NO\n");
  239. }
  240.  
  241. if(RankInfo[rank][rPermission][3] == 1)
  242. {
  243. strcat(dialogstr,"Change members rank?\t{00FF00}YES\n");
  244. }
  245. else
  246. {
  247. strcat(dialogstr,"Change members rank?\t{FF0000}NO\n");
  248. }
  249.  
  250. if(RankInfo[rank][rPermission][4] == 1)
  251. {
  252. strcat(dialogstr,"Edit Group rank?\t{00FF00}YES\n");
  253. }
  254. else
  255. {
  256. strcat(dialogstr,"Edit Group rank?\t{FF0000}NO\n");
  257. }
  258.  
  259. ShowDialog(playerid,Show:GroupEditRank,DIALOG_STYLE_TABLIST,"Edit Rank Permissions",dialogstr,"Change","Close");
  260. return 1;
  261. }
  262.  
  263. // =============================================================================
  264. public OnFilterScriptInit()
  265. {
  266. print("_________________________________________________________________________");
  267. print("> Group System by Heller");
  268. print("> Script Name : Group System");
  269. print("> Script Version : BETA");
  270. print("> Script Coder : Heller");
  271. print("> Last Update : 7/31/2017");
  272. print("> mySQL Version : R39 - ORM queries");
  273. print("_________________________________________________________________________");
  274.  
  275. mysql_log();
  276.  
  277. SQL = mysql_connect(mysql_host, mysql_user, mysql_data, mysql_pass);
  278.  
  279. //load groups & ranks
  280. GroupsInformation();
  281. RanksInformation();
  282. return 1;
  283. }
  284.  
  285. public OnFilterScriptExit()
  286. {
  287. foreach(new b : Groups)
  288. {
  289. if(GroupInfo[b][gID] != 0) {
  290. orm_update(GroupInfo[b][ORM_ID]);
  291. }
  292. orm_destroy(GroupInfo[b][ORM_ID]);
  293.  
  294. for(new groupsDATA:e; e < groupsDATA; ++e)
  295. GroupInfo[b][e] = 0;
  296. }
  297. foreach(new i : Ranks)
  298. {
  299. if(RankInfo[i][rID] != 0) {
  300. orm_update(RankInfo[i][ORM_ID2]);
  301. }
  302. orm_destroy(RankInfo[i][ORM_ID2]);
  303.  
  304. for(new ranksDATA:e; e < ranksDATA; ++e)
  305. RankInfo[i][e] = 0;
  306. }
  307.  
  308. foreach(new players : Player)
  309. {
  310. if(pInfo[players][pID] != 0)
  311. {
  312. orm_update(pInfo[players][ORM_ID3]);
  313. }
  314. orm_destroy(pInfo[players][ORM_ID3]);
  315.  
  316. for(new playerDATA:e; e < playerDATA; ++e)
  317. pInfo[players][e] = 0;
  318. }
  319. return 1;
  320. }
  321.  
  322. public OnPlayerConnect(playerid)
  323. {
  324. groupvariables[playerid][0] = -1;
  325. groupvariables[playerid][1] = 0;
  326. GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
  327. new ORM:ormid = pInfo[playerid][ORM_ID3] = orm_create("players2", SQL);
  328.  
  329. orm_addvar_int(ormid, pInfo[playerid][pID], "pID");
  330. orm_addvar_string(ormid, pInfo[playerid][pName], 32, "pName");
  331. orm_addvar_int(ormid, pInfo[playerid][grouppid], "grouppid");
  332. orm_addvar_int(ormid, pInfo[playerid][prID], "prID");
  333. orm_addvar_int(ormid, pInfo[playerid][groupcontribution], "groupcontribution");
  334. orm_addvar_int(ormid, pInfo[playerid][gWarKills], "gWarKills");
  335. orm_addvar_int(ormid, pInfo[playerid][pGroups], "pGroups");
  336.  
  337. orm_setkey(ormid, "pName");
  338. orm_select(ormid, "LoadPlayerGroup", "d", playerid);
  339. return 1;
  340. }
  341.  
  342. public OnPlayerDisconnect(playerid,reason)
  343. {
  344. groupvariables[playerid][0] = -1;
  345. groupvariables[playerid][1] = 0;
  346. RankSelected[playerid] = -1;
  347. TempGroupID[playerid] = -1;
  348. if(pInfo[playerid][pID] != 0)
  349. {
  350. orm_update(pInfo[playerid][ORM_ID3]);
  351. }
  352. orm_destroy(pInfo[playerid][ORM_ID3]);
  353.  
  354. for(new playerDATA:e; e < playerDATA; ++e)
  355. pInfo[playerid][e] = 0;
  356. return 1;
  357. }
  358.  
  359. stock SendGroupMessage(color, groupID, string[])
  360. {
  361. foreach(new i : Player)
  362. {
  363. if(pInfo[i][grouppid] == groupID)
  364. {
  365. SendClientMessage(i, color, string);
  366. }
  367. }
  368. return 1;
  369. }
  370.  
  371. forward RanksInformation();
  372. public RanksInformation()
  373. {
  374. for(new r=0; r < cache_num_rows(); ++r)
  375. {
  376. new ORM:ormid = RankInfo[r][ORM_ID2] = orm_create("ranks2", SQL);
  377.  
  378. orm_addvar_int(ormid, RankInfo[r][rID], "rID"); //this is the key
  379. orm_setkey(ormid, "rID"); //here we declare it as the key
  380. orm_addvar_string(ormid, RankInfo[r][rName],128, "rName");
  381. orm_addvar_int(ormid, RankInfo[r][rgID], "rgID");
  382. orm_addvar_int(ormid, RankInfo[r][rLevel], "rLevel");
  383. orm_addvar_int(ormid, RankInfo[r][rPermission][0], "rPermission1");
  384. orm_addvar_int(ormid, RankInfo[r][rPermission][1], "rPermission2");
  385. orm_addvar_int(ormid, RankInfo[r][rPermission][2], "rPermission3");
  386. orm_addvar_int(ormid, RankInfo[r][rPermission][3], "rPermission4");
  387. orm_addvar_int(ormid, RankInfo[r][rPermission][4], "rPermission5");
  388. orm_apply_cache(ormid, r);
  389. orm_select(ormid, "LoadGroupRank", "d", r);
  390. }
  391. return 1;
  392. }
  393.  
  394. forward LoadGroupRank(rid);
  395. public LoadGroupRank(rid)
  396. {
  397. switch(orm_errno(RankInfo[rid][ORM_ID2]))
  398. {
  399. case ERROR_OK:
  400. {
  401. Iter_Add(Ranks, rid);//active ranks
  402. printf("Rank Loaded: [%d]", rid);
  403. }
  404. case ERROR_NO_DATA:
  405. {
  406. }
  407. }
  408. return 1;
  409. }
  410.  
  411. forward GroupsInformation();
  412. public GroupsInformation()
  413. {
  414. for(new r=0; r < cache_num_rows(); ++r)
  415. {
  416. new ORM:ormid = GroupInfo[r][ORM_ID] = orm_create("groups2", SQL);
  417.  
  418. orm_addvar_int(ormid, GroupInfo[r][gID], "gID"); //this is the key
  419. orm_setkey(ormid, "gID"); //here we declare it as the key
  420. orm_addvar_string(ormid, GroupInfo[r][gName],128, "gName");
  421. orm_addvar_string(ormid, GroupInfo[r][gLeaderName],32, "gLeaderName");
  422. orm_addvar_int(ormid, GroupInfo[r][gchat], "gchat");
  423. orm_addvar_int(ormid, GroupInfo[r][gCredits], "gCredits");
  424. orm_addvar_int(ormid, GroupInfo[r][gResources], "gResources");
  425. orm_addvar_int(ormid, GroupInfo[r][gWarWins], "gWarWins");
  426. orm_addvar_int(ormid, GroupInfo[r][gWarLosses], "gWarLosses");
  427. orm_addvar_int(ormid, GroupInfo[r][gDraws], "gDraws");
  428. orm_addvar_int(ormid, GroupInfo[r][gScore], "gScore");
  429. orm_apply_cache(ormid, r);
  430. orm_select(ormid, "LoadGroup", "d", r);
  431. }
  432. return 1;
  433. }
  434.  
  435. forward LoadGroup(gid);
  436. public LoadGroup(gid)
  437. {
  438. switch(orm_errno(GroupInfo[gid][ORM_ID]))
  439. {
  440. case ERROR_OK:
  441. {
  442. Iter_Add(Groups, gid);//active groups
  443. printf("Group Loaded: [%d]", gid);
  444. }
  445. case ERROR_NO_DATA:
  446. {
  447. }
  448. }
  449. return 1;
  450. }
  451.  
  452. forward MYSQL_SaveGroups(b);
  453. public MYSQL_SaveGroups(b)
  454. {
  455. if(GroupInfo[b][gID] != 0) {
  456. orm_update(GroupInfo[b][ORM_ID]);
  457. }
  458. return 1;
  459. }
  460.  
  461. forward GroupCreated(id, playerid, str[], playeridz);
  462. public GroupCreated(id, playerid, str[], playeridz)
  463. {
  464. orm_update(GroupInfo[id][ORM_ID]);
  465. GroupInfo[id][gchat] = 0;
  466. format(GroupInfo[id][gName],128,str);
  467. format(GroupInfo[id][gLeaderName],32,GetPlayerNamee(playerid));
  468. orm_save(GroupInfo[id][ORM_ID]);
  469. pInfo[playeridz][grouppid] = GroupInfo[id][gID];
  470. printf("New Group is created: [%d]", id);
  471. }
  472.  
  473. forward RankCreated(id, gid, name[], levl, playeridz);
  474. public RankCreated(id, gid, name[], levl, playeridz)
  475. {
  476. orm_update(RankInfo[id][ORM_ID2]);
  477. RankInfo[id][rgID] = GroupInfo[gid][gID];
  478. RankInfo[id][rLevel] = levl;
  479. format(RankInfo[id][rName],32,name);
  480. RankInfo[id][rPermission][0] = 1;
  481. RankInfo[id][rPermission][1] = 1;
  482. RankInfo[id][rPermission][2] = 1;
  483. RankInfo[id][rPermission][3] = 1;
  484. RankInfo[id][rPermission][4] = 1;
  485. orm_save(RankInfo[id][ORM_ID2]);
  486. pInfo[playeridz][prID] = RankInfo[id][rID];
  487. printf("New Rank is created for Group id:%d: [%d]",gid, id );
  488. }
  489.  
  490. forward RankCreated2(id, gid, name[], levl, playeridz);
  491. public RankCreated2(id, gid, name[], levl, playeridz)
  492. {
  493. orm_update(RankInfo[id][ORM_ID2]);
  494. RankInfo[id][rgID] = GroupInfo[gid][gID];
  495. RankInfo[id][rLevel] = levl;
  496. format(RankInfo[id][rName],32,name);
  497. RankInfo[id][rPermission][0] = 1;
  498. RankInfo[id][rPermission][1] = 1;
  499. RankInfo[id][rPermission][2] = 1;
  500. RankInfo[id][rPermission][3] = 1;
  501. RankInfo[id][rPermission][4] = 1;
  502. orm_save(RankInfo[id][ORM_ID2]);
  503. printf("New Rank is created for Group id:%d: [%d]",gid, id );
  504. }
  505.  
  506. stock GetPlayerNamee(playerid)
  507. {
  508. new name[MAX_PLAYER_NAME];
  509. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  510. return name;
  511. }
  512.  
  513.  
  514. //===========================[Commands]=========================================
  515. CMD:grouphelp(playerid,params[])
  516. {
  517. SCM(playerid,COLOR_GREY,"Group Commands");
  518. SCM(playerid,COLOR_GREY,"/groups /groupinfo(ID) /creategroup /groupinvite /g /groupkick /groupranks");
  519. SCM(playerid,COLOR_GREY,"/GroupEditRank /GroupSetRank /GroupChatLock");
  520. return 1;
  521. }
  522.  
  523. CMD:groups(playerid,params[])
  524. {
  525. if(Iter_Count(Groups) > 0)
  526. {
  527. foreach(new i : Groups)
  528. {
  529. new string[56];
  530. format(string,sizeof(string),"Groups:[%d]%s",i,GroupInfo[i][gName]);
  531. SCM(playerid,COLOR_GREEN,string);
  532. }
  533. }
  534. else
  535. {
  536. SCM(playerid,COLOR_RED,"ERROR: No groups were found.");
  537. }
  538. return 1;
  539. }
  540.  
  541. CMD:groupinfoid(playerid, params[])
  542. {
  543. new id, string[250];
  544. if(sscanf(params, "i", id)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /GroupInfoID [Group ID]");
  545. else if(!Iter_Contains(Groups, id)) return SendClientMessage(playerid,COLOR_RED,"[SERVER]: Group Does not exist");
  546. else
  547. {
  548. format(string,sizeof(string),"Group[%d]:%s\nLeader:%s\nGroup Score:%d\nWar Wins:%d\nWar Losses:%d\nDraws:%d\nCredits:%d\nResources:%d\n",
  549. GroupInfo[id][gID],
  550. GroupInfo[id][gName],
  551. GroupInfo[id][gLeaderName],
  552. GroupInfo[id][gScore],
  553. GroupInfo[id][gWarWins],
  554. GroupInfo[id][gWarLosses],
  555. GroupInfo[id][gDraws],
  556. GroupInfo[id][gCredits],
  557. GroupInfo[id][gResources]);
  558. }
  559. return ShowDialog(playerid, Show:GroupInfoDialog, DIALOG_STYLE_MSGBOX, "{808080}Group Info", string, "Close", "");
  560. }
  561.  
  562. CMD:groupinfo(playerid, params[])
  563. {
  564. new str[128], string[250];
  565. if(sscanf(params, "s[128]", str)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /GroupInfo [Group Name]");
  566. else if(IsGroupNameTaken(str) == 0) return SendClientMessage(playerid,COLOR_RED,"[SERVER]: Group Does not exist");
  567. else
  568. {
  569. new i = GetGroupID(str);
  570. format(string,sizeof(string),"Group[%d]:%s\nLeader:%s\nGroup Score:%d\nWar Wins:%d\nWar Losses:%d\nDraws:%d\nCredits:%d\nResources:%d\n",
  571. GroupInfo[i][gID],
  572. GroupInfo[i][gName],
  573. GroupInfo[i][gLeaderName],
  574. GroupInfo[i][gScore],
  575. GroupInfo[i][gWarWins],
  576. GroupInfo[i][gWarLosses],
  577. GroupInfo[i][gDraws],
  578. GroupInfo[i][gCredits],
  579. GroupInfo[i][gResources]);
  580. }
  581. return ShowDialog(playerid, Show:GroupInfoDialog, DIALOG_STYLE_MSGBOX, "{808080}Group Info", string, "Close", "");
  582. }
  583.  
  584. CMD:creategroup(playerid, params[])
  585. {
  586. new player,str[128];
  587. if(!IsPlayerAdmin(playerid)) return 0;
  588. if(sscanf(params, "us[128]", player, str)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /creategroup [Player ID/Player Name] [Group Name]");
  589. if(!IsPlayerConnected(player)) return SendClientMessage(playerid,COLOR_RED,"[ERROR]: Player hasn't connected to server yet.");
  590. if(pInfo[player][pGroups] == 10) return SendClientMessage(playerid,COLOR_RED,"[ERROR]: Player's Max Group Limit Reached.");
  591. if(IsGroupNameTaken(str) == 1) return SendClientMessage(playerid,COLOR_RED,"[ERROR]: Group Name is already taken.");
  592.  
  593. pInfo[playerid][pGroups] += 1;
  594. new i = Iter_Free(Groups);
  595. Iter_Add(Groups, i);
  596.  
  597. new ORM:ormid1 = GroupInfo[i][ORM_ID] = orm_create("groups2", SQL);
  598. orm_addvar_int(ormid1, GroupInfo[i][gID], "gID"); //this is the key
  599. orm_setkey(ormid1, "gID"); //here we declare it as the key
  600. orm_addvar_string(ormid1, GroupInfo[i][gName],128, "gName");
  601. orm_addvar_string(ormid1, GroupInfo[i][gLeaderName],32, "gLeaderName");
  602. orm_addvar_int(ormid1, GroupInfo[i][gchat], "gchat");
  603. orm_addvar_int(ormid1, GroupInfo[i][gCredits], "gCredits");
  604. orm_addvar_int(ormid1, GroupInfo[i][gResources], "gResources");
  605. orm_addvar_int(ormid1, GroupInfo[i][gWarWins], "gWarWins");
  606. orm_addvar_int(ormid1, GroupInfo[i][gWarLosses], "gWarLosses");
  607. orm_addvar_int(ormid1, GroupInfo[i][gDraws], "gDraws");
  608. orm_addvar_int(ormid1, GroupInfo[i][gScore], "gScore");
  609. orm_apply_cache(ormid1, i);
  610. orm_insert(GroupInfo[i][ORM_ID], "GroupCreated", "ddsi", i, player, str, player);
  611. new string[158];
  612. format(string,sizeof(string),"[SUCCESS]: '%s' named group has been created for '%s'.",str,GetPlayerNamee(playerid));
  613. SendClientMessage(playerid,COLOR_GREEN,string);
  614.  
  615. new o = Iter_Free(Ranks);
  616. Iter_Add(Ranks, o);
  617. new ORM:ormid = RankInfo[o][ORM_ID2] = orm_create("ranks2", SQL);
  618. orm_addvar_int(ormid, RankInfo[o][rID], "rID"); //this is the key
  619. orm_setkey(ormid, "rID"); //here we declare it as the key
  620. orm_addvar_string(ormid, RankInfo[o][rName],128, "rName");
  621. orm_addvar_int(ormid, RankInfo[o][rgID], "rgID");
  622. orm_addvar_int(ormid, RankInfo[o][rLevel], "rLevel");
  623. orm_addvar_int(ormid, RankInfo[o][rPermission][0], "rPermission1");
  624. orm_addvar_int(ormid, RankInfo[o][rPermission][1], "rPermission2");
  625. orm_addvar_int(ormid, RankInfo[o][rPermission][2], "rPermission3");
  626. orm_addvar_int(ormid, RankInfo[o][rPermission][3], "rPermission4");
  627. orm_addvar_int(ormid, RankInfo[o][rPermission][4], "rPermission5");
  628. orm_apply_cache(ormid, o);
  629. orm_insert(RankInfo[o][ORM_ID2], "RankCreated", "ddsdi", o, i, "Leader", 100, player);
  630. return 1;
  631. }
  632.  
  633. CMD:groupinvite(playerid, params[])
  634. {
  635. new grpname[128],player, str[158];
  636. if(sscanf(params, "s[128]u",grpname,player)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /groupinvite [Group Name] [Player ID]");
  637. {
  638. new i = GetGroupID(grpname);
  639. if(i != -1)
  640. {
  641. if(!CheckPlayerGroup(playerid, i)) return SCM(playerid,COLOR_RED,"You are not the member of that group.");
  642. else if(CheckPlayerGroup(player, i)) return SCM(playerid,COLOR_RED,"Player is already in your group.");
  643. else if(pInfo[player][pGroups] == 10) return SCM(playerid,COLOR_RED,"Player max group limit reached.");
  644. else if(!CheckPlayerGroupPermission(playerid, i, 1)) return SCM(playerid,COLOR_RED,"You Do not have the permission to use this command.");
  645. else
  646. {
  647. groupvariables[player][0] = playerid;
  648. groupvariables[player][1] = i;
  649. format(str,sizeof(str),"'%s' named group member is inviting you to '%s' named group, what is your answer?",GetPlayerNamee(playerid),GroupInfo[i][gName]);
  650. ShowDialog(player, Show:GInviteDialog, DIALOG_STYLE_MSGBOX, "{808080}Group System", str, "Accept", "Decline");
  651. }
  652. }
  653. else return SCM(playerid,COLOR_RED,"Group Does not exists.");
  654. }
  655. return 1;
  656. }
  657.  
  658. CMD:g(playerid,params[])
  659. {
  660. new grpname[128],str[128];
  661. if(sscanf(params, "s[128]s[128]",grpname,str)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /g [Group Name] [Chat]");
  662. {
  663. new i = GetGroupID(grpname);
  664. if(i != -1)
  665. {
  666. if(!CheckPlayerGroup(playerid, i)) return SCM(playerid,COLOR_RED,"You are not the member of that group.");
  667. else if(!CheckPlayerGroupPermission(playerid, i, 0)) return SCM(playerid,COLOR_RED,"You Do not have the permission to use this command.");
  668. else
  669. {
  670. new string[128];
  671. format(string,sizeof(string),"[%s][%s(%d)]:{FFFFFF}%s.",GroupInfo[i][gName],GetPlayerNamee(playerid),playerid,str);
  672. SendGroupMessage(COLOR_GREEN,i,string);
  673. }
  674. }
  675. else return SCM(playerid,COLOR_RED,"Group Does not exists.");
  676. }
  677. return 1;
  678. }
  679.  
  680. CMD:groupkick(playerid, params[])
  681. {
  682. new grpname[128],player, str[158];
  683. if(sscanf(params, "s[128]u",grpname,player)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /groupkick [Group Name] [Player ID]");
  684. {
  685. new i = GetGroupID(grpname);
  686. if(i != -1)
  687. {
  688. if(!CheckPlayerGroup(playerid, i)) return SCM(playerid,COLOR_RED,"You are not the member of that group.");
  689. else if(!CheckPlayerGroup(player, i)) return SCM(playerid,COLOR_RED,"Player is not in your group.");
  690. else if(!CheckPlayerGroupPermission(playerid, i, 2)) return SCM(playerid,COLOR_RED,"You Do not have the permission to use this command.");
  691. else if(ReturnGroupLevel(playerid, i) < ReturnGroupLevel(player, i)) return SCM(playerid,COLOR_RED,"You cannot kick your seniors.");
  692. else
  693. {
  694. format(str,sizeof(str),"[%s]:%s(%d) has been kicked from the group.",grpname,GetPlayerNamee(player),player);
  695. SendGroupMessage(COLOR_RED,pInfo[playerid][grouppid],str);
  696. pInfo[player][grouppid] = -1;
  697. pInfo[player][prID] = -1;
  698. }
  699. }
  700. else return SCM(playerid,COLOR_RED,"Group Does not exists.");
  701. }
  702. return 1;
  703. }
  704.  
  705. stock Name(playerid)
  706. {
  707. new name[MAX_PLAYER_NAME];
  708. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  709. return name;
  710. }
  711.  
  712. stock GetID(const name[])
  713. {
  714. foreach(new i : Player)
  715. {
  716. if(!strcmp(name, Name(i)))
  717. return i;
  718. }
  719. return -1;
  720. }
  721.  
  722. IsGroupNameTaken(grpname[])
  723. {
  724. foreach(new x : Groups)
  725. {
  726. if(!strcmp(grpname, GroupInfo[x][gName], true) && strlen(GroupInfo[x][gName]) != 0) return 1;
  727. }
  728. return 0;
  729. }
  730.  
  731. CMD:groupranks(playerid, params[])
  732. {
  733. new grpname[128];
  734. if(sscanf(params, "s[128]",grpname)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /groupranks [Group Name]");
  735. {
  736. foreach(new l : Groups)
  737. {
  738. if(!strcmp(grpname, GroupInfo[l][gName], true))
  739. {
  740. new i = pInfo[playerid][grouppid];
  741. if(i != -1)
  742. {
  743. new query[1256];
  744. mysql_format(SQL, query, sizeof(query), "SELECT * FROM `ranks2` WHERE `rgID` = %d ORDER BY `rLevel` DESC", GroupInfo[i][gID]);
  745. mysql_query(SQL, query, true);
  746. format(query, sizeof(query), "{FFFFFF}");
  747. new count = cache_num_rows();
  748. if(count > 0)
  749. {
  750. for(new r = 0; r < count; r++)
  751. {
  752. new Rank[32], Level[2];
  753. cache_get_field_content(r, "rName", Rank);
  754. cache_get_field_content(r, "rLevel", Level);
  755. format(query, sizeof(query), "(%d)%s(Level:%s)\n",(r+1),Rank,Level);
  756. }
  757. ShowDialog(playerid, Show:groupDialog, DIALOG_STYLE_TABLIST, "Group Ranks", query, "Close", "");
  758. }
  759. }
  760. break;
  761. }
  762. }
  763. }
  764. return 1;
  765. }
  766.  
  767. CMD:groupcreaterank(playerid,params[])
  768. {
  769. new grpname[128],str[32], level;
  770. if(sscanf(params, "s[128]s[32]i",grpname, str, level)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /GroupCreateRank [Group Name] [New Rank Name] [Level]");
  771. else if(level < 100 && level > 0)
  772. {
  773. new i = GetGroupID(grpname);
  774. if(i != -1)
  775. {
  776. if(!CheckPlayerGroup(playerid, i)) return SCM(playerid,COLOR_RED,"You are not the member of that group.");
  777. else if(!CheckPlayerGroupPermission(playerid, i, 4)) return SCM(playerid,COLOR_RED,"You Do not have the permission to use this command.");
  778. else if(ReturnGroupLevel(playerid, i) < level) return SCM(playerid,COLOR_RED,"Rank must be of lower level to that of yours.");
  779. else
  780. {
  781. new o = Iter_Free(Ranks);
  782. Iter_Add(Ranks, o);
  783. new ORM:ormid = RankInfo[o][ORM_ID2] = orm_create("ranks2", SQL);
  784. orm_addvar_int(ormid, RankInfo[o][rID], "rID"); //this is the key
  785. orm_setkey(ormid, "rID"); //here we declare it as the key
  786. orm_addvar_string(ormid, RankInfo[o][rName],128, "rName");
  787. orm_addvar_int(ormid, RankInfo[o][rgID], "rgID");
  788. orm_addvar_int(ormid, RankInfo[o][rLevel], "rLevel");
  789. orm_addvar_int(ormid, RankInfo[o][rPermission][0], "rPermission1");
  790. orm_addvar_int(ormid, RankInfo[o][rPermission][1], "rPermission2");
  791. orm_addvar_int(ormid, RankInfo[o][rPermission][2], "rPermission3");
  792. orm_addvar_int(ormid, RankInfo[o][rPermission][3], "rPermission4");
  793. orm_addvar_int(ormid, RankInfo[o][rPermission][4], "rPermission5");
  794. orm_apply_cache(ormid, o);
  795. orm_insert(RankInfo[o][ORM_ID2], "RankCreated2", "ddsd", o, i, str, level);
  796.  
  797. new string[158];
  798. format(string,sizeof(string),"[%s]: Successfully created the rank %s(Level:%d).",grpname,str,level);
  799. SendGroupMessage(COLOR_GREEN,pInfo[playerid][grouppid],string);
  800. }
  801. }
  802. else return SCM(playerid,COLOR_RED,"Group Does not exists.");
  803. }
  804. else return SCM(playerid,COLOR_RED,"Level limit is between 0 to 100.");
  805. return 1;
  806. }
  807.  
  808. CMD:groupeditrank(playerid,params[])
  809. {
  810. new grpname[128],str[32];
  811. if(sscanf(params, "s[128]s[32]",grpname, str)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /GroupEditRank [Group Name] [Rank Name]");
  812. else
  813. {
  814. new i = GetGroupID(grpname);
  815. if(i != -1)
  816. {
  817. if(!CheckPlayerGroup(playerid, i)) return SCM(playerid,COLOR_RED,"You are not the member of that group.");
  818. else if(!CheckPlayerGroupPermission(playerid, i, 4)) return SCM(playerid,COLOR_RED,"You Do not have the permission to use this command.");
  819. else
  820. {
  821. foreach(new rn : Ranks)
  822. {
  823. if(RankInfo[rn][rID] == pInfo[playerid][prID] && RankInfo[rn][rgID] == i && !strcmp(RankInfo[rn][rName], str,true))
  824. {
  825. if(ReturnGroupLevel(playerid, i) < RankInfo[rn][rLevel]) return SCM(playerid,COLOR_RED,"Rank must be of lower level to that of yours.");
  826. else
  827. {
  828. RankSelected[playerid] = rn;
  829. TempGroupID[playerid] = i;
  830. ShowRankEditingMenu(playerid, rn);
  831. break;
  832. }
  833. }
  834. else if(i == Iter_Last(Ranks))
  835. {
  836. SCM(playerid,COLOR_RED,"Invalid Rank.");
  837. }
  838. }
  839. }
  840. }
  841. else return SCM(playerid,COLOR_RED,"Group Does not exists.");
  842. }
  843. return 1;
  844. }
  845.  
  846. CMD:groupsetrank(playerid,params[])
  847. {
  848. new grpname[128],str[32], player;
  849. if(sscanf(params, "us[128]s[32]",player, grpname, str)) return SendClientMessage(playerid,COLOR_GREY,"[USAGE]: /GroupSetRank [playerid] [Group Name] [Rank Name]");
  850. else
  851. {
  852. new i = GetGroupID(grpname);
  853. if(i != -1)
  854. {
  855. if(!CheckPlayerGroup(playerid, i)) return SCM(playerid,COLOR_RED,"You are not the member of that group.");
  856. else if(!CheckPlayerGroup(player, i)) return SCM(playerid,COLOR_RED,"Player is not in your group.");
  857. else if(!CheckPlayerGroupPermission(playerid, i, 3)) return SCM(playerid,COLOR_RED,"You Do not have the permission to use this command.");
  858. else if(ReturnGroupLevel(playerid, i) < ReturnGroupLevel(player, i)) return SCM(playerid,COLOR_RED,"You cannot boss your seniors.");
  859. else
  860. {
  861. foreach(new rn : Ranks)
  862. {
  863. if(RankInfo[rn][rID] == pInfo[playerid][prID] && RankInfo[rn][rgID] == i)
  864. {
  865. pInfo[player][prID] = RankInfo[rn][rID];
  866. new string[158];
  867. format(string,sizeof(string),"[%s]:Rank of %s(%d) has been changed to %s.",grpname,GetPlayerNamee(player),player,str);
  868. SendGroupMessage(COLOR_GREEN,pInfo[playerid][grouppid],string);
  869. break;
  870. }
  871. else if(i == Iter_Last(Ranks))
  872. {
  873. SCM(playerid,COLOR_RED,"Invalid Rank.");
  874. }
  875. }
  876. }
  877. }
  878. else return SCM(playerid,COLOR_RED,"Group Does not exists.");
  879. }
  880. return 1;
  881. }
  882. CMD:groupchatlock(playerid,params[])
  883. {
  884. new str[128],id=pInfo[playerid][grouppid];
  885. if(strcmp(GroupInfo[id][gLeaderName], GetPlayerNamee(playerid)) != 0) return SendClientMessage(playerid,COLOR_RED,"[ERROR]: You are not a leader of any group.");
  886. if(GroupInfo[id][gchat] == 0)
  887. {
  888. GroupInfo[id][gchat] = 1;
  889. format(str,sizeof(str),"[GROUP-ATTENTION(%s)]: %s has locked the group chat.",GroupInfo[id][gName],GetPlayerNamee(playerid));
  890. SendGroupMessage(0x8080FFFF, id, str);
  891. return 1;
  892. }
  893. if(GroupInfo[id][gchat] == 1)
  894. {
  895. GroupInfo[id][gchat] = 0;
  896. format(str,sizeof(str),"[GROUP-ATTENTION(%s)]: %s has unlocked the group chat.",GroupInfo[id][gName],GetPlayerNamee(playerid));
  897. SendGroupMessage(0x8080FFFF, id, str);
  898. return 1;
  899. }
  900. return 1;
  901. }
  902. //=========================================================================[END]
  903.  
  904. Dialog:GInviteDialog(playerid, dialogid, response, listitem, inputtext[])
  905. {
  906. new str[128];
  907. if(!response)
  908. {
  909. format(str,sizeof(str),"[SYSTEM]: '%s' has declined your invite.",GetPlayerNamee(playerid));
  910. SendClientMessage(groupvariables[playerid][0],COLOR_RED,str);
  911. SendClientMessage(playerid,COLOR_RED,"[SERVER]: You have declined the invite.");
  912. groupvariables[playerid][0] = -1;
  913. groupvariables[playerid][1] = 0;
  914. }
  915. if(response)
  916. {
  917. format(str,sizeof(str),"[SYSTEM]: '%s' has accepted your invite.",GetPlayerNamee(playerid));
  918. SendClientMessage(groupvariables[playerid][0],COLOR_GREEN,str);
  919. SendClientMessage(playerid,COLOR_RED,"[SERVER]: You have accepted the invite.");
  920. pInfo[playerid][grouppid] = GroupInfo[groupvariables[playerid][1]][gID];
  921. groupvariables[playerid][0] = -1;
  922. groupvariables[playerid][1] = 0;
  923. }
  924. return 1;
  925. }
  926.  
  927. Dialog:GroupEditRank(playerid, dialogid, response, listitem, inputtext[])
  928. {
  929. if(!response)
  930. {
  931. return 0;
  932. }
  933. else if(response)
  934. {
  935. switch(listitem)
  936. {
  937. case 0:
  938. {
  939. ShowDialog(playerid,Show:RankNameChange,DIALOG_STYLE_INPUT,"Change Rank Name","Are you Sure about changing rank name?","Change","No");
  940. }
  941. case 1:
  942. {
  943. ShowDialog(playerid,Show:RankLevelChange,DIALOG_STYLE_INPUT,"Change Rank Level","Are you Sure about changing rank level?","Change","No");
  944. }
  945. case 2:
  946. {
  947. if(RankInfo[RankSelected[playerid]][rPermission][0] == 1)
  948. {
  949. RankInfo[RankSelected[playerid]][rPermission][0] = 0;
  950. }
  951. else
  952. {
  953. RankInfo[RankSelected[playerid]][rPermission][0] = 1;
  954. }
  955. ShowRankEditingMenu(playerid, RankSelected[playerid]);
  956. }
  957. case 3:
  958. {
  959. if(RankInfo[RankSelected[playerid]][rPermission][1] == 1)
  960. {
  961. RankInfo[RankSelected[playerid]][rPermission][1] = 0;
  962. }
  963. else
  964. {
  965. RankInfo[RankSelected[playerid]][rPermission][1] = 1;
  966. }
  967. ShowRankEditingMenu(playerid, RankSelected[playerid]);
  968. }
  969. case 4:
  970. {
  971. if(RankInfo[RankSelected[playerid]][rPermission][2] == 1)
  972. {
  973. RankInfo[RankSelected[playerid]][rPermission][2] = 0;
  974. }
  975. else
  976. {
  977. RankInfo[RankSelected[playerid]][rPermission][2] = 1;
  978. }
  979. ShowRankEditingMenu(playerid, RankSelected[playerid]);
  980. }
  981. case 5:
  982. {
  983. if(RankInfo[RankSelected[playerid]][rPermission][3] == 1)
  984. {
  985. RankInfo[RankSelected[playerid]][rPermission][3] = 0;
  986. }
  987. else
  988. {
  989. RankInfo[RankSelected[playerid]][rPermission][3] = 1;
  990. }
  991. ShowRankEditingMenu(playerid, RankSelected[playerid]);
  992. }
  993. case 6:
  994. {
  995. if(RankInfo[RankSelected[playerid]][rPermission][4] == 1)
  996. {
  997. RankInfo[RankSelected[playerid]][rPermission][4] = 0;
  998. }
  999. else
  1000. {
  1001. RankInfo[RankSelected[playerid]][rPermission][4] = 1;
  1002. }
  1003. ShowRankEditingMenu(playerid, RankSelected[playerid]);
  1004. }
  1005. }
  1006. }
  1007. return 1;
  1008. }
  1009.  
  1010. Dialog:RankNameChange(playerid, dialogid, response, listitem, inputtext[])
  1011. {
  1012. if(!response)
  1013. {
  1014. return ShowRankEditingMenu(playerid, RankSelected[playerid]);
  1015. }
  1016. else if(response)
  1017. {
  1018. strcat(RankInfo[RankSelected[playerid]][rName],inputtext);
  1019. ShowRankEditingMenu(playerid, RankSelected[playerid]);
  1020. }
  1021. return 1;
  1022. }
  1023.  
  1024. Dialog:RankLevelChange(playerid, dialogid, response, listitem, inputtext[])
  1025. {
  1026. if(!response)
  1027. {
  1028. return ShowRankEditingMenu(playerid, RankSelected[playerid]);
  1029. }
  1030. else if(response)
  1031. {
  1032. new level = strval(inputtext);
  1033. if(level > 100 || level < 1)
  1034. {
  1035. ShowDialog(playerid,Show:RankLevelChange,DIALOG_STYLE_INPUT,"Change Rank Level","Rank level should be between 1 to 100.","Change","No");
  1036. }
  1037. else
  1038. {
  1039. RankInfo[RankSelected[playerid]][rLevel] = level;
  1040. ShowRankEditingMenu(playerid, RankSelected[playerid]);
  1041. }
  1042. }
  1043. return 1;
  1044. }
Add Comment
Please, Sign In to add comment