Advertisement
Guest User

Clanwar System (c) by Kaliber

a guest
Dec 5th, 2012
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.92 KB | None | 0 0
  1. /* SaMp Include Clan System
  2.  *
  3.  * (c) by Kaliber, 2012
  4.  *
  5.  * Grundidee von PinguinLP
  6.  */
  7. #include <a_samp>
  8.  
  9. #if !defined MAX_CLANS
  10.     #define MAX_CLANS 100
  11. #endif
  12. #define rot 0xFF0000FF
  13. #define grun 0xFF0000
  14. #define gelb 0xFFFF00FF
  15.  
  16. #define c_const 900
  17. #define c_1 (c_const + 1)
  18.  
  19. forward _OnPlayerCommandText(playerid, cmdtext[]);
  20. forward _OnPlayerDeath(playerid, killerid);
  21.  
  22. enum c_Info {
  23.     c_Points,
  24.     c_Name[24],
  25.     c_ID
  26. };
  27. enum p_c_Info {
  28.     p_c_Member,
  29.     p_c_Leader
  30. };
  31. new ClanInfo[MAX_CLANS][c_Info], PlayerClan[MAX_PLAYERS][p_c_Info], evtl[MAX_PLAYERS], War_Time[MAX_PLAYERS],ClanWar[MAX_CLANS];
  32.  
  33.  
  34. public OnPlayerCommandText(playerid, cmdtext[])
  35. {
  36.     new cmd[64], tmp[64], idx, pID, string[128];
  37.     cmd = strtok(cmdtext, idx);
  38.     if(!strcmp(cmd, "/clanranglist", true))
  39.     {
  40.         new var, Rangliste[64], zw[5];
  41.         for(new i; i<MAX_CLANS; i++) if(var < ClanInfo[i][c_Points]) var = ClanInfo[i][c_Points], zw[0] = i;
  42.         format(Rangliste, 64,"{FFFFFF}1. %s: %d Punkte\n",ClanInfo[zw[0]][c_Name],var);
  43.         var = 0;
  44.         for(new i; i<MAX_CLANS; i++) if(var < ClanInfo[i][c_Points] && zw[0] != i) var = ClanInfo[i][c_Points], zw[1] = i;
  45.         format(string, sizeof string,"2. %s: %d Punkte\n",ClanInfo[zw[1]][c_Name],var),strins(Rangliste, string, strlen(Rangliste), 255);
  46.         var = 0;
  47.         for(new i; i<MAX_CLANS; i++) if(var < ClanInfo[i][c_Points] && zw[1] != i && zw[0] != i) var = ClanInfo[i][c_Points], zw[2] = i;
  48.         format(string, sizeof string,"3. %s: %d Punkte\n",ClanInfo[zw[2]][c_Name],var),strins(Rangliste, string, strlen(Rangliste), 255);
  49.         var = 0;
  50.         for(new i; i<MAX_CLANS; i++) if(var < ClanInfo[i][c_Points] && zw[2] != i && zw[1] != i && zw[0] != i) var = ClanInfo[i][c_Points], zw[3] = i;
  51.         format(string, sizeof string,"4. %s: %d Punkte\n",ClanInfo[zw[3]][c_Name],var),strins(Rangliste, string, strlen(Rangliste), 255);
  52.         var = 0;
  53.         for(new i; i<MAX_CLANS; i++) if(var < ClanInfo[i][c_Points] && zw[3] != i && zw[2] != i && zw[1] != i && zw[0] != i) var = ClanInfo[i][c_Points], zw[4] = i;
  54.         format(string, sizeof string,"5. %s: %d Punkte\n",ClanInfo[zw[4]][c_Name],var),strins(Rangliste, string, strlen(Rangliste), 255);
  55.         ShowPlayerDialog(playerid,c_1,DIALOG_STYLE_MSGBOX,"{FF0000}Clan Rangliste",Rangliste,"Bestätigen","");
  56.         return 1;
  57.     }
  58.     if(!strcmp(cmd, "/war", true))
  59.     {
  60.         if(!PlayerClan[playerid][p_c_Leader]) return SendClientMessage(playerid,rot,"Du bist nicht der Leader eines Clans !");
  61.         tmp = strtok(cmdtext, idx);
  62.         if(!tmp[0]) return SendClientMessage(playerid,rot,"Verwendung: /war [spielerid (muss der Leader eines gegnerischen Clans sein)] [Zeit (in Minuten)]");
  63.         pID = strval(tmp);
  64.         if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,rot,"Ein Spieler mit dieser spielerid ist nicht online !");
  65.         if(PlayerClan[playerid][p_c_Leader] == PlayerClan[pID][p_c_Leader]) return SendClientMessage(playerid,rot,"Du kannst nicht gegen deinen eigenen Clan einen Krieg führen !");
  66.         if(!PlayerClan[pID][p_c_Leader]) return SendClientMessage(playerid,rot,"Dieser Spieler ist kein Leader einer Clan !");
  67.         if(evtl[pID] == playerid) return SendClientMessage(playerid,rot,"Sie haben diesem Clan bereits eine Anfrage geschickt !");
  68.         tmp = strtok(cmdtext, idx);
  69.         if(!tmp[0]) return SendClientMessage(playerid,rot,"Du hast die Zeit nicht angegeben !");
  70.         new time = strval(tmp);
  71.         if(time > 60 || time < 1) return SendClientMessage(playerid,rot,"Der Clan War kann nicht länger als 60 und nicht weniger als 1ne Minute gehen !");
  72.         format(string, sizeof string,"Der Leader des Clans {FF0000}%s{FFFF00} hat ihnen eine Anfrage für einen Krieg geschickt ! (Starte den Krieg mit: /aKrieg)",GetClanName(playerid));
  73.         SendClientMessage(pID,gelb,string);
  74.         War_Time[pID] = time;
  75.         evtl[pID] = playerid;
  76.         return 1;
  77.     }
  78.     if(!strcmp(cmd, "/aKrieg", true))
  79.     {
  80.         if(!PlayerClan[playerid][p_c_Leader]) return SendClientMessage(playerid,rot,"Du bist nicht der Leader eines Clans !");
  81.         if(evtl[playerid] == -1) return SendClientMessage(playerid,rot,"Es hat niemand ihnen eine Anfrage für einen Krieg geschickt !");
  82.         if(!IsPlayerConnected(evtl[pID])){ evtl[playerid] = -1; SendClientMessage(playerid,rot,"Der Leader, der ihnen diese Anfrage geschickt hat ist offline !"); return 1; }
  83.         new c1[24], c2[24];
  84.         format(c1, 24, "%s",GetClanName(playerid)),format(c2, 24, "%s",GetClanName(evtl[playerid]));
  85.         if(ClanWar[GetClanId(c1)] == GetClanId(c2)) return SendClientMessage(playerid,rot,"Diese beiden Clans führen bereits einen War gegeneinander !");
  86.         format(string, sizeof string,"Clan Infos: Der Clan War zwischen %s und %s hat begonnen !",GetClanName(evtl[playerid]),GetClanName(playerid));
  87.         SendClientMessageToAll(grun,string);
  88.         SetTimerEx("War_End", 1000*60*War_Time[playerid], 0, "ss",c2,c1);
  89.         ClanWar[GetClanId(c1)] = GetClanId(c2);
  90.         ClanWar[GetClanId(c2)] = GetClanId(c1);
  91.         CallRemoteFunction("OnClanWarStart", "ss",c1,c2);
  92.         evtl[playerid] = -1;
  93.         War_Time[playerid] = 0;
  94.         return 1;
  95.     }
  96.     return CallLocalFunction("OnPlayerCommandText", "is",playerid,cmdtext);
  97. }
  98. forward War_End(clan1[], clan2[]);
  99. public War_End(clan1[], clan2[])
  100. {
  101.     ClanWar[GetClanId(clan1)] = 0;
  102.     ClanWar[GetClanId(clan2)] = 0;
  103.     new string[128];
  104.     format(string, sizeof string,"Clan Infos: Der Clan War zwischen %s und %s ist soeben beendet worden !",clan1,clan2);
  105.     SendClientMessageToAll(rot,string);
  106.     CallRemoteFunction("OnClanWarEnd", "ss",clan1,clan2);
  107.     return 1;
  108. }
  109. #if defined _ALS_OnPlayerCommandText
  110.     #undef OnPlayerCommandText
  111. #else
  112.     #define _ALS_OnPlayerCommandText
  113. #endif
  114. #define OnPlayerCommandText _OnPlayerCommandText
  115. public OnPlayerDeath(playerid, killerid)
  116. {
  117.     new c1[24], c2[24];
  118.     format(c1, 24, "%s",GetClanName(playerid)),format(c2, 24, "%s",GetClanName(killerid));
  119.     if(ClanWar[GetClanId(c1)] == GetClanId(c2) && GetClanId(c2) > 0)
  120.     {
  121.         ClanInfo[GetClanId(c2)][c_Points]++;
  122.     }
  123.     return CallLocalFunction("OnPlayerDeath", "ii",playerid,killerid);
  124. }
  125. #if defined _ALS_OnPlayerDeath
  126.     #undef OnPlayerDeath
  127. #else
  128.     #define _ALS_OnPlayerDeath
  129. #endif
  130. #define OnPlayerDeath _OnPlayerDeath
  131.  
  132. stock CreateClan(name[])
  133. {
  134.     if(strlen(name) >= 24) return 0;
  135.     new z = GetFreeSlot();
  136.     format(ClanInfo[z][c_Name], 24, "%s", name);
  137.     printf("Name1 inc1: %s",ClanInfo[z][c_Name]);
  138.     ClanInfo[z][c_ID] = z;
  139.     return 1;
  140. }
  141. stock DeleteClan(name[])
  142. {
  143.     new z = GetClanId(name);
  144.     for(new i; i<MAX_PLAYERS; i++)
  145.     {
  146.         if(!IsPlayerConnected(i)) continue;
  147.         if(!strcmp(GetClanName(i), name, false))
  148.         {
  149.             PlayerClan[i][p_c_Member] = 0;
  150.             PlayerClan[i][p_c_Leader] = 0;
  151.         }
  152.     }
  153.     ClanInfo[z][c_ID] = 0;
  154.     ClanInfo[z][c_Name] = "";
  155.     ClanInfo[z][c_Points] = 0;
  156.     ClanInfo[z][c_Count] = 0;
  157. }
  158.  
  159. stock GetClanName(playerid)
  160. {
  161.     new string[128];
  162.     for(new i; i<MAX_PLAYERS; i++)
  163.     {
  164.         if(ClanInfo[i][c_ID] <= 0) continue;
  165.         if(PlayerClan[playerid][p_c_Member] == ClanInfo[i][c_ID] || PlayerClan[playerid][p_c_Leader] == ClanInfo[i][c_ID])
  166.         {
  167.             format(string, 128, "%s", ClanInfo[i][c_Name]);
  168.             return string;
  169.         }
  170.     }
  171.     format(string, 128, "Es ist ein Fehler aufgetreten !");
  172.     return string;
  173. }
  174. stock AddPlayerClan(playerid, clanname[], bool:var)
  175. {
  176.     new z = GetClanId(clanname);
  177.     if(!var) PlayerClan[playerid][p_c_Member] = z;
  178.     else PlayerClan[playerid][p_c_Leader] = z;
  179. }
  180.  
  181. stock GetClanId(name[])
  182. {
  183.     new i = 1;
  184.     for(; i<MAX_CLANS; i++)
  185.     {
  186.         if(!strcmp(name, ClanInfo[i][c_Name], false)) return i;
  187.     }
  188.     return -1;
  189. }
  190.  
  191. stock GetFreeSlot()
  192. {
  193.     new i = 1;
  194.     for(; i<MAX_CLANS; i++)
  195.     {
  196.         if(ClanInfo[i][c_ID] == 0) return i;
  197.     }
  198.     return -1;
  199. }
  200. #if !defined USE_STRTOK
  201. strtok(const string[], &index)
  202. {
  203.     new length = strlen(string);
  204.     while ((index < length) && (string[index] <= ' ')) index++;
  205.     new offset = index, result[20];
  206.     while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  207.     {
  208.         result[index - offset] = string[index];
  209.         index++;
  210.     }
  211.     result[index - offset] = EOS;
  212.     return result;
  213. }
  214. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement