Advertisement
ErikSon_

Dynamisches Gangfightsystem by ErikSon

Aug 8th, 2014
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 19.92 KB | None | 0 0
  1. #include <a_samp>
  2. #include <ocmd>
  3. #include <m_zones>
  4. #include <dini>
  5.  
  6. //Colors
  7. #define Schwarz         0x000000FF
  8. #define Rot             0xE10000FF
  9. #define Gelb            0xFFE600FF
  10. #define HBlau           0x00FFFFFF
  11. #define DBlau           0x0000FFFF
  12. #define Blau            0x2E9AFEFF
  13. #define HGruen          0x00FF00FF
  14. #define Orange          0xFFAB00FF
  15. #define Weiss           0xFFFFFFFF
  16. #define Grau            0xA0A0A0FF
  17. #define Grauu           0x646464FF
  18. #define Gold            0xD4A017AA
  19. #define Lila            0x7800FFFF
  20. #define Pink            0xFF00CDFF
  21. #define Gruen           0x009F32FF
  22. #define HellGrau        0xDCDCDCFF
  23. #define DunkelGrau      0x787878FF
  24. #define OAmtFarbe       0xC3FF00FF
  25. #define Braun           0x663300FF
  26. #define DBraun          0x550000FF
  27. #define TWeiss          0xFFFFFF00
  28.  
  29.  
  30. /*      Settings        */
  31. #define MAX_GZ              40                                      //Maximale Gangzonen festlegen
  32. #define MaxPoints           100                                     //Wie viel Punkte eine Fraktion haben muss, um den Gangfight gewinnen zu können
  33. #define GFTime              60                                      //Wie lange ein Gangfight dauert
  34. #define GFRuhe              30                                      //Wie lange die Zone nach einem Gangfight nicht mehr angegriffen werden darf
  35. #define FlaggeZeit          30                                      //Wie viel Sekunden es dauert, eine Flagge zu erobern
  36. #define MAX_FRAKTIONEN      21                                      //Anzahl der Fraktionen festlegen [+1]
  37. #define G_FILE              "/Gangzonen.ini"                        //Wo die Gangzonen gespeichert werden sollen
  38.  
  39. stock bool:NoGang(playerid){
  40.     switch(GetPVarInt(playerid,"Fraktion")){ //PVar anpassen
  41.         case 10,11,12,13:return true; //Gang-IDs anpassen
  42.         default:return false;
  43.     }
  44.     return false;
  45. }
  46.  
  47. stock bool:Leader(playerid){
  48.     switch(GetPVarInt(playerid,"FrakRank")){ //PVar anpassen
  49.         case 7:return true; //Leader-Rank anpassen
  50.         default:return false;
  51.     }
  52.     return false;
  53. }
  54.  
  55. stock GetFraktion(playerid)return GetPVarInt(playerid,"Fraktion");//PVar anpassen
  56.  
  57. stock FrakColor(fid){
  58.     new color;
  59.     switch(fid)
  60.     {
  61.         case 0:color = 0x000000FF;
  62.         case 1:color = 0xE10000FF;
  63.         case 2:color = 0x646464FF;
  64.         //...
  65.         default:color = 0xFFFFFFFF;
  66.     }
  67.     return color;
  68. }
  69.  
  70. stock FrakName(fid){
  71.     new name[16];
  72.     switch(fid){
  73.         case 0:name = "No-one";
  74.         case 1:name = "Frak_01";
  75.         case 2:name = "Frak_02";
  76.         //...
  77.         default:name = "Unnamed";
  78.     }
  79.     return name;
  80. }
  81. /*      Settings        */
  82.  
  83. #define dInt            dini_Int
  84. #define dIntSet         dini_IntSet
  85. #define dGet            dini_Get
  86. #define dSet            dini_Set
  87. #define dFloatSet       dini_FloatSet
  88. #define dFloat          dini_Float
  89. #define dExist          dini_Exists
  90. #define Connected       IsPlayerConnected
  91. #define InVehicle       IsPlayerInVehicle
  92. #define InAnyVehicle    IsPlayerInAnyVehicle
  93. #define GetPos          GetPlayerPos
  94. #define SetPos          SetPlayerPos
  95. #define RangeOfPoint    IsPlayerInRangeOfPoint
  96.  
  97. new fmex[128];
  98. #define SCMToAllF(%0,%1,%2)  format(fmex,128,%1,%2) && SendClientMessageToAll(%0, fmex)
  99. #define SCMF(%0,%1,%2)  format(fmex,128,%2) && SendClientMessage(%0,%1,fmex)
  100. #define SCMToAll(%0,%1) format(fmex,128,%1) && SendClientMessageToAll(%0,%1)
  101.  
  102.  
  103. new Text:GFPunkte_o,
  104.     Text:GFPunkte_a,
  105.     Text:GFZeit,
  106.     ImGF[MAX_FRAKTIONEN],
  107.     PlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];
  108.    
  109. enum eGZ
  110. {
  111.     Float:max_x,
  112.     Float:max_y,
  113.     Float:min_x,
  114.     Float:min_y,
  115.     Float:flagge_x,
  116.     Float:flagge_y,
  117.     Float:flagge_z,
  118.     owner,
  119.     zid,
  120.     erstellt,
  121.     Text3D:label,
  122.     pickup,
  123.     ruhe,
  124.     ruhetimer
  125. };
  126. new GZ[MAX_GZ][eGZ];
  127.  
  128. enum eGF
  129. {
  130.     owner,
  131.     angreifer,
  132.     punkte_o,
  133.     punkte_a,
  134.     timer,
  135.     zeit,
  136.     started,
  137.     flaggetimer,
  138.     flaggeerobert,
  139.     flaggewerobert
  140. };
  141. new GF[MAX_GZ][eGF];
  142.  
  143. enum eC
  144. {
  145.     Float:min_x,
  146.     Float:min_y,
  147.     Float:max_x,
  148.     Float:max_y,
  149.     zid,
  150.     create
  151. }
  152. new CZ[MAX_PLAYERS][eC];
  153.  
  154. forward Gangwar(zoneid);
  155. forward GFRuheTimer(zoneid);
  156. forward FlaggeErobern(playerid,zone);
  157.  
  158. public OnFilterScriptInit(){
  159.     M_Init();
  160.     GFPunkte_o = TextDrawCreate(19, 326, "Punkte (Owner): ");
  161.     TextDrawFont(GFPunkte_o , 3);
  162.     TextDrawLetterSize(GFPunkte_o , 0.3, 2.1);
  163.     TextDrawColor(GFPunkte_o , Blau);
  164.     TextDrawSetOutline(GFPunkte_o , 0);
  165.     TextDrawSetProportional(GFPunkte_o , 1);
  166.     TextDrawSetShadow(GFPunkte_o , 1);
  167.    
  168.     GFPunkte_a = TextDrawCreate(19, 346, "Punkte (angreifer): ");
  169.     TextDrawFont(GFPunkte_a , 3);
  170.     TextDrawLetterSize(GFPunkte_a , 0.3, 2.1);
  171.     TextDrawColor(GFPunkte_a , Rot);
  172.     TextDrawSetOutline(GFPunkte_a , 0);
  173.     TextDrawSetProportional(GFPunkte_a , 1);
  174.     TextDrawSetShadow(GFPunkte_a , 1);
  175.    
  176.     GFZeit = TextDrawCreate(19, 306, "Zeit: ");
  177.     TextDrawFont(GFZeit , 3);
  178.     TextDrawLetterSize(GFZeit , 0.3, 2.1);
  179.     TextDrawColor(GFZeit , HGruen);
  180.     TextDrawSetOutline(GFZeit , 0);
  181.     TextDrawSetProportional(GFZeit , 1);
  182.     TextDrawSetShadow(GFZeit , 1);
  183.    
  184.     if(!dExist(G_FILE))dini_Create(G_FILE), SaveGZ(), LoadGZ();
  185.     for(new i = 0; i<MAX_FRAKTIONEN; i++)ImGF[i] = 0;
  186.     return LoadGZ();
  187. }
  188.  
  189. public OnFilterScriptExit(){
  190.     return SaveGZ();
  191. }
  192.  
  193. public OnPlayerConnect(playerid){
  194.     GetPlayerName(playerid,PlayerName[playerid],MAX_PLAYER_NAME);
  195.     return M_Connect(playerid);
  196. }
  197.  
  198. public OnPlayerDeath(playerid,killerid,reason){
  199.     if(M_IsPlayerInAnyZone(playerid)){
  200.         new zone = M_GetPlayerCurrentZone(playerid);
  201.         if(GF[zone][started] != 1)return 1;
  202.         if((GetFraktion(playerid) == GF[zone][owner]) && (GetFraktion(killerid) == GF[zone][angreifer])){
  203.             GF[zone][punkte_a] ++;
  204.             GameTextForPlayer(killerid,"Gangfightkill!",888*2,6);
  205.         }
  206.         else if((GetFraktion(playerid) == GF[zone][angreifer]) && (GetFraktion(killerid) == GF[zone][owner])){
  207.             GF[zone][punkte_o] ++;
  208.             GameTextForPlayer(killerid,"Gangfightkill!",888*2,6);
  209.         }
  210.        
  211.         if((GF[zone][punkte_o] == MaxPoints) || (GF[zone][punkte_a] == MaxPoints))GF[zone][zeit] = GFTime;
  212.        
  213.         new str[64]; format(str,sizeof(str),"Punkte (Owner): %i",GF[zone][punkte_o]);
  214.         TextDrawSetString(GFPunkte_o,str);
  215.         format(str,sizeof(str),"Punkte (angreifer): %i",GF[zone][punkte_a]);
  216.         TextDrawSetString(GFPunkte_a,str);
  217.     }
  218.     return 1;
  219. }
  220.  
  221. public FlaggeErobern(playerid,zone)
  222. {
  223.     new str[64];
  224.     GF[zone][flaggeerobert] ++;
  225.     if(GF[zone][flaggeerobert] >= FlaggeZeit && GF[zone][flaggewerobert] == 1)
  226.     {
  227.         if(!IsPlayerInRangeOfPoint(playerid,15,GZ[zone][flagge_x],GZ[zone][flagge_y],GZ[zone][flagge_z]))
  228.         {
  229.             format(str,sizeof(str),"|Gangfight| %s hat es nicht geschafft, die Flagge zu erobern! |Gangfight|",PlayerName[playerid]);
  230.             for(new i = 0; i<MAX_PLAYERS; i++)
  231.             {
  232.                 if(!IsPlayerConnected(i))continue;
  233.                 if((GetFraktion(i) != GZ[zone][owner]) && (GetFraktion(i) != GF[zone][angreifer]))continue;
  234.                 GF[zone][flaggeerobert] = 0,GF[zone][flaggewerobert] = 0;
  235.                 KillTimer(GF[zone][flaggetimer]);
  236.                 return SCMF(i,Gelb,str);
  237.             }
  238.             return 1;
  239.         }
  240.         GF[zone][punkte_a] += 3;
  241.         if((GF[zone][punkte_o] == MaxPoints) || (GF[zone][punkte_a] == MaxPoints))GF[zone][zeit] = GFTime; 
  242.         format(str,sizeof(str),"Punkte (Owner): %i",GF[zone][punkte_o]);
  243.         TextDrawSetString(GFPunkte_o,str);
  244.         format(str,sizeof(str),"Punkte (angreifer): %i",GF[zone][punkte_a]);
  245.         TextDrawSetString(GFPunkte_a,str);
  246.         format(str,sizeof(str),"|Gangfight| %s hat die Flagge erobert! |Gangfight|",PlayerName[playerid]);
  247.         for(new i = 0; i<MAX_PLAYERS; i++)
  248.         {
  249.             if(!IsPlayerConnected(i))continue;
  250.             if((GetFraktion(i) != GZ[zone][owner]) && (GetFraktion(i) != GF[zone][angreifer]))continue;
  251.             GF[zone][flaggeerobert] = 0,GF[zone][flaggewerobert] = 0;
  252.             KillTimer(GF[zone][flaggetimer]);
  253.             return SCMF(i,Gelb,str);
  254.         }
  255.         return 1;
  256.     }
  257.     return 1;
  258. }
  259.  
  260. public Gangwar(zoneid)
  261. {
  262.     if(GF[zoneid][started] != 1)return KillTimer(GF[zoneid][timer]);
  263.     GF[zoneid][zeit] ++;
  264.     new strin[128];
  265.     new str[64]; format(str,sizeof(str),"Zeit: %i / %i Minuten",GF[zoneid][zeit],GFTime);
  266.     TextDrawSetString(GFZeit,str);
  267.     if(GF[zoneid][punkte_a] >= MaxPoints || GF[zoneid][punkte_o] >= MaxPoints)
  268.     {
  269.         ImGF[GF[zoneid][owner]] = 0,ImGF[GF[zoneid][angreifer]] = 0;
  270.         if(GF[zoneid][punkte_o] > GF[zoneid][punkte_a])format(strin,sizeof(strin),"Die Gang '%s' hat den Gangfight gegen die Fraktion '%s' mit %i / %i gewonnen.",FrakName(GF[zoneid][owner]),FrakName(GF[zoneid][angreifer]),GF[zoneid][punkte_o],GF[zoneid][punkte_a]);
  271.         else if(GF[zoneid][punkte_a] > GF[zoneid][punkte_o])
  272.         {
  273.             format(strin,sizeof(strin),"Die Gang '%s' hat den Gangfight gegen die Fraktion '%s' mit %i / %i gewonnen.",FrakName(GF[zoneid][angreifer]),FrakName(GF[zoneid][owner]),GF[zoneid][punkte_a],GF[zoneid][punkte_o]);
  274.             GZ[zoneid][owner] = GF[zoneid][angreifer];
  275.         }
  276.         SCMToAll(DBlau,strin);
  277.         GF[zoneid][punkte_o] = 0,GF[zoneid][punkte_a] = 0;
  278.         M_ZoneStopFlashForAll(zoneid);
  279.         M_DestroyZone(zoneid);
  280.         GZ[zoneid][ruhe] = GFRuhe;
  281.         GZ[zoneid][ruhetimer] = SetTimerEx("GFRuheTimer",888*60,true,"i",zoneid);
  282.         return SaveGZ_(zoneid),LoadGZ_(zoneid);
  283.     }
  284.     else if(GF[zoneid][zeit] >= GFTime)
  285.     {
  286.         GF[zoneid][started] = 0;
  287.         if(GF[zoneid][punkte_o] > GF[zoneid][punkte_a])format(strin,sizeof(strin),"Die Gang '%s' hat den Gangfight gegen die Fraktion '%s' mit %i / %i gewonnen.",FrakName(GF[zoneid][owner]),FrakName(GF[zoneid][angreifer]),GF[zoneid][punkte_o],GF[zoneid][punkte_a]);
  288.         else if(GF[zoneid][punkte_a] > GF[zoneid][punkte_o])
  289.         {
  290.             format(strin,sizeof(strin),"Die Gang '%s' hat den Gangfight gegen die Fraktion '%s' mit %i / %i gewonnen.",FrakName(GF[zoneid][angreifer]),FrakName(GF[zoneid][owner]),GF[zoneid][punkte_a],GF[zoneid][punkte_o]);
  291.             GZ[zoneid][owner] = GF[zoneid][angreifer];
  292.         }
  293.         SCMToAll(DBlau,strin);
  294.         GF[zoneid][punkte_o] = 0,GF[zoneid][punkte_a] = 0;
  295.         M_ZoneStopFlashForAll(zoneid);
  296.         M_DestroyZone(zoneid);
  297.         GZ[zoneid][ruhe] = GFRuhe;
  298.         GZ[zoneid][ruhetimer] = SetTimerEx("GFRuheTimer",888*60,true,"i",zoneid);
  299.         return SaveGZ_(zoneid),LoadGZ_(zoneid);
  300.     }
  301.     return 1;
  302. }
  303.  
  304. public GFRuheTimer(zoneid)
  305. {
  306.     GZ[zoneid][ruhe] --;
  307.     if(GZ[zoneid][ruhe] <= 0)return KillTimer(GZ[zoneid][ruhetimer]);
  308.     return 1;
  309. }
  310.  
  311. public M_OnPlayerEnterZone(playerid,zoneid)
  312. {
  313.     return 1;
  314. }
  315.  
  316. public M_OnPlayerLeaveZone(playerid,zoneid)
  317. {
  318.     return 1;
  319. }
  320.  
  321.  
  322.  
  323. ocmd:angriff(playerid,params[])
  324. {
  325.     if(NoGang(playerid))return SCMF(playerid,Rot,"Du bist in keiner Gang / Mafia!");
  326.     if(!Leader(playerid))return SCMF(playerid,Rot,"Du bist kein Leader!");
  327.     if(!M_IsPlayerInAnyZone(playerid))return SCMF(playerid,Rot,"Du bist in keiner Zone!");
  328.     new zone = M_GetPlayerCurrentZone(playerid);
  329.     if(GZ[zone][owner] == GetFraktion(playerid))return SCMF(playerid,Rot,"Du kannst deine eigene Zone nicht angreifen!");
  330.     if(GZ[zone][ruhe] >= 1)return SCMF(playerid,Rot,"Die Zone kann noch nicht angegriffen werden!");
  331.     if(!IsPlayerInRangeOfPoint(playerid,5,GZ[zone][flagge_x],GZ[zone][flagge_y],GZ[zone][flagge_z]))return SCMF(playerid,Rot,"Du stehst nicht an der Flagge dieser Zone!");
  332.     if(GF[zone][started] == 1)return SCMF(playerid,Rot,"Der Gangfight wurde bereits gestartet!");
  333.     if(ImGF[GF[zone][owner]] >= 1)return SCMF(playerid,Rot,"Diese Gang ist bereits in einem Gangfight!");
  334.     if(GZ[zone][owner] <= 0)
  335.     {
  336.         GZ[zone][owner] = GetFraktion(playerid);
  337.         return SaveGZ_(zone),LoadGZ_(zone);
  338.     }
  339.     for(new i = 0; i<MAX_PLAYERS; i++)
  340.     {
  341.         if(!IsPlayerConnected(i))continue;
  342.         if(GetFraktion(i) != GF[zone][owner])continue;
  343.         if(!Leader(i))continue;
  344.         if(i == INVALID_PLAYER_ID)
  345.         {
  346.             SCMF(playerid,Rot,"Der Leader dieser Gang ist nicht online!");
  347.             break;
  348.         }
  349.     }
  350.     M_ZoneFlashForAll(zone,FrakColor(GetFraktion(playerid)));
  351.     GF[zone][angreifer] = GetFraktion(playerid);
  352.     GF[zone][owner] = GZ[zone][owner],GF[zone][flaggewerobert] = 0;
  353.     GF[zone][started] = 1,GF[zone][punkte_o] = 0, GF[zone][punkte_a] = 0,GF[zone][zeit] = 0;
  354.     ImGF[GetFraktion(playerid)] = 1,ImGF[GF[zone][owner]] = 1;
  355.    
  356.     for(new i = 0; i<MAX_PLAYERS; i++)
  357.     {
  358.         if(!IsPlayerConnected(i))continue;
  359.         if((GetFraktion(i) != GF[zone][owner]) && (GetFraktion(i) != GF[zone][angreifer]))continue;
  360.         TextDrawShowForPlayer(i,GFPunkte_o);
  361.         TextDrawShowForPlayer(i,GFPunkte_a);
  362.         TextDrawShowForPlayer(i,GFZeit);
  363.     }
  364.     TextDrawShowForPlayer(playerid,GFPunkte_o);
  365.     TextDrawShowForPlayer(playerid,GFPunkte_a);
  366.     TextDrawShowForPlayer(playerid,GFZeit);
  367.    
  368.     new str[64]; format(str,sizeof(str),"Zeit: %i / %i Minuten",GF[zone][zeit],GFTime);
  369.     TextDrawSetString(GFZeit,str);
  370.     format(str,sizeof(str),"Punkte (Owner): %i",GF[zone][punkte_o]);
  371.     TextDrawSetString(GFPunkte_o,str);
  372.     format(str,sizeof(str),"Punkte (angreifer): %i",GF[zone][punkte_a]);
  373.     TextDrawSetString(GFPunkte_a,str);
  374.     SCMF(playerid,Rot,"Du hast den Gangfight gestartet!");
  375.     return GF[zone][timer] = SetTimerEx("Gangwar",888*60,true,"i",zone);
  376. }
  377.  
  378.  
  379. ocmd:flagge(playerid,params[])
  380. {
  381.     if(NoGang(playerid))return SCMF(playerid,Rot,"Du bist in keiner Gang / Mafia!");
  382.     if(!M_IsPlayerInAnyZone(playerid))return SCMF(playerid,Rot,"Du bist in keiner Zone!");
  383.     new zone = M_GetPlayerCurrentZone(playerid);
  384.     if(GZ[zone][owner] == GetFraktion(playerid))return SCMF(playerid,Rot,"Du kannst deine eigene Flagge nicht erobern!");
  385.     if(GF[zone][started] != 1)return SCMF(playerid,Rot,"Der Gangfight wurde noch nicht gestartet!");
  386.     if(GF[zone][flaggewerobert] >= 1)return SCMF(playerid,Rot,"Die Flagge wird bereits erobert!");
  387.     new i = 0,str[128]; format(str,sizeof(str),"|Gangfight| %s hat begonnen, die Flagge zu erobern! |Gangfight|",PlayerName[playerid]);
  388.     for(; i<MAX_PLAYERS; i++)
  389.     {
  390.         if(!IsPlayerConnected(i))continue;
  391.         if((GetFraktion(i) != GZ[zone][owner]) && (GetFraktion(i) != GF[zone][angreifer]))continue;
  392.         SCMF(i,Gelb,str);
  393.     }
  394.     GF[zone][flaggeerobert] = 0;
  395.     GF[zone][flaggewerobert] = 1;
  396.     return GF[zone][flaggetimer] = SetTimerEx("FlaggeErobern",888,true,"ii",playerid,zone);
  397. }
  398.  
  399.  
  400. ocmd:creategangzone(playerid,params[])
  401. {
  402.     if(!IsPlayerAdmin(playerid))return 1;
  403.     new Float:x,Float:y,Float:z;
  404.     GetPlayerPos(playerid,x,y,z);
  405.     CZ[playerid][min_x] = x, CZ[playerid][min_y] = y, CZ[playerid][create] = 1;
  406.     SCMF(playerid,Blau,"Bitte überquere jetzt die Zone um die Zone richtig zu erstellen.");
  407.     return SCMF(playerid,Rot,"Wenn du die Zone überquert hast, tippe '/zoneende'.");
  408. }
  409.  
  410. ocmd:zoneende(playerid,params[])
  411. {
  412.     if(CZ[playerid][create] != 1)return SCMF(playerid,Rot,"Um eine Gangzone zu erstellen, benutze '/creategangzone'!");
  413.     new Float:x,Float:y,Float:z,i,str[64];
  414.     GetPlayerPos(playerid,x,y,z);
  415.     CZ[playerid][max_x] = x,CZ[playerid][max_y] = y;
  416.     for(; i<MAX_GZ; i++)
  417.     {
  418.         if(GZ[i][erstellt] == 1)continue;
  419.         GZ[i][min_x] = CZ[playerid][min_x],GZ[i][min_y] = CZ[playerid][min_y],GZ[i][max_x] = CZ[playerid][max_x],GZ[i][max_y] = CZ[playerid][max_y];
  420.         GZ[i][zid] = i,GZ[i][erstellt] = 1,GZ[i][owner] = 0,CZ[i][zid] = i;
  421.         format(str,64,"%i| Besitzer: '%s'",GZ[i][zid],FrakName(GZ[i][owner]));
  422.         M_CreateZone(GZ[i][min_x],GZ[i][min_y],GZ[i][max_x],GZ[i][max_y],FrakColor(GZ[i][owner]),str,FrakColor(GZ[i][owner]));
  423.         break;
  424.     }
  425.     return SCMF(playerid,Blau,"Nun gehe zum Angriffspunkt hin und tippe '/cflagge'.");
  426. }
  427.  
  428. ocmd:cflagge(playerid,params[])
  429. {
  430.     if(CZ[playerid][create] != 1)return SCMF(playerid,Rot,"Um eine Gangzone zu erstellen, benutze '/creategangzone'!");
  431.     new Float:x,Float:y,Float:z;
  432.     GetPlayerPos(playerid,x,y,z);
  433.     GZ[CZ[playerid][zid]][flagge_x] = x, GZ[CZ[playerid][zid]][flagge_y] = y, GZ[CZ[playerid][zid]][flagge_z] = z,CZ[playerid][create] = 0;
  434.     GZ[CZ[playerid][zid]][pickup] = CreatePickup(1314,1,x,y,z,0);
  435.     GZ[CZ[playerid][zid]][label] = Create3DTextLabel("Tippe '/angriff', um das Gebiet anzugreifen.\nTippe '/flagge', um die Flagge zu erobern.",Rot,x,y,z,20,0);
  436.     SaveGZ();
  437.     return SCMF(playerid,Blau,"Du hast die Zone erfolgreich erstellt.");
  438. }
  439. ocmd:destroyzone(playerid,params[])
  440. {
  441.     if(!IsPlayerAdmin(playerid))return 1;
  442.     if(!M_IsPlayerInAnyZone(playerid))return SCMF(playerid,Rot,"Du bist in keiner Zone!");
  443.     new zone = M_GetPlayerCurrentZone(playerid);
  444.     DisableZone(zone);
  445.     return SCMF(playerid,Blau,"Du hast die Zone erfolgreich gelöscht.");
  446. }
  447.  
  448. stock LoadGZ()
  449. {
  450.     new i = 0,gz[32],str[64],counter = 0; format(gz,32,G_FILE);
  451.     for(; i<MAX_GZ; i++)
  452.     {
  453.         GZ[i][zid] = i;
  454.         format(str,64,"Zone%d_owner",i); GZ[i][owner] = dInt(gz,str);
  455.         format(str,64,"Zone%d_maxX",i); GZ[i][max_x] = dFloat(gz,str);
  456.         format(str,64,"Zone%d_maxY",i); GZ[i][max_y] = dFloat(gz,str);
  457.         format(str,64,"Zone%d_minX",i); GZ[i][min_x] = dFloat(gz,str);
  458.         format(str,64,"Zone%d_minY",i); GZ[i][min_y] = dFloat(gz,str);
  459.         format(str,64,"Zone%d_flaggeX",i); GZ[i][flagge_x] = dFloat(gz,str);
  460.         format(str,64,"Zone%d_flaggeY",i); GZ[i][flagge_y] = dFloat(gz,str);
  461.         format(str,64,"Zone%d_flaggeZ",i); GZ[i][flagge_z] = dFloat(gz,str);
  462.         format(str,64,"Zone%d_erstellt",i); GZ[i][erstellt] = dInt(gz,str);
  463.         format(str,64,"%d |Besitzer: '%s'",i,FrakName(GZ[i][owner]));
  464.         if(GZ[i][erstellt] != 1)continue;
  465.         M_CreateZone(GZ[i][min_x],GZ[i][min_y],GZ[i][max_x],GZ[i][max_y],FrakColor(GZ[i][owner]),str,FrakColor(GZ[i][owner]));
  466.         GZ[i][pickup] = CreatePickup(1314,1,GZ[i][flagge_x],GZ[i][flagge_y],GZ[i][flagge_z],0);
  467.         GZ[i][label] = Create3DTextLabel("Tippe '/angriff', um das Gebiet anzugreifen.\nTippe '/flagge', um die Flagge zu erobern.",Rot,GZ[i][flagge_x],GZ[i][flagge_y],GZ[i][flagge_z],20,0);
  468.         counter ++;
  469.         break;
  470.     }
  471.     return printf("  '%d' Gangzone(n) wurde(n) erfolgreich erstellt und geladen.",counter);
  472. }
  473.  
  474. stock LoadGZ_(zoneid)
  475. {
  476.     new gz[32],str[64]; format(gz,sizeof(gz),G_FILE);
  477.     GZ[zoneid][zid] = zoneid;
  478.     format(str,64,"Zone%d_owner",zoneid); GZ[zoneid][owner] = dInt(gz,str);
  479.     format(str,64,"Zone%d_maxX",zoneid); GZ[zoneid][max_x] = dFloat(gz,str);
  480.     format(str,64,"Zone%d_maxY",zoneid); GZ[zoneid][max_y] = dFloat(gz,str);
  481.     format(str,64,"Zone%d_minX",zoneid); GZ[zoneid][min_x] = dFloat(gz,str);
  482.     format(str,64,"Zone%d_minY",zoneid); GZ[zoneid][min_y] = dFloat(gz,str);
  483.     format(str,64,"Zone%d_flaggeX",zoneid); GZ[zoneid][flagge_x] = dFloat(gz,str);
  484.     format(str,64,"Zone%d_flaggeY",zoneid); GZ[zoneid][flagge_y] = dFloat(gz,str);
  485.     format(str,64,"Zone%d_flaggeZ",zoneid); GZ[zoneid][flagge_z] = dFloat(gz,str);
  486.     format(str,64,"Zone%d_erstellt",zoneid); GZ[zoneid][erstellt] = dInt(gz,str);
  487.     format(str,64,"%d |Besitzer: '%s'",zoneid,FrakName(GZ[zoneid][owner]));
  488.     M_CreateZone(GZ[zoneid][min_x],GZ[zoneid][min_y],GZ[zoneid][max_x],GZ[zoneid][max_y],FrakColor(GZ[zoneid][owner]),str,FrakColor(GZ[zoneid][owner]));
  489.     GZ[zoneid][pickup] = CreatePickup(1314,1,GZ[zoneid][flagge_x],GZ[zoneid][flagge_y],GZ[zoneid][flagge_z],0);
  490.     GZ[zoneid][label] = Create3DTextLabel("Tippe '/angriff', um das Gebiet anzugreifen.\nTippe '/flagge', um die Flagge zu erobern.",Rot,GZ[zoneid][flagge_x],GZ[zoneid][flagge_y],GZ[zoneid][flagge_z],20,0);
  491.     return 1;
  492. }
  493.  
  494. stock SaveGZ()
  495. {
  496.     new i = 0,gz[32],str[64]; format(gz,32,G_FILE);
  497.     for(; i<MAX_GZ; i++)
  498.     {
  499.         format(str,64,"Zone%d_owner",i); dIntSet(gz,str,GZ[i][owner]);
  500.         format(str,64,"Zone%d_maxX",i); dFloatSet(gz,str,GZ[i][max_x]);
  501.         format(str,64,"Zone%d_maxY",i); dFloatSet(gz,str,GZ[i][max_y]);
  502.         format(str,64,"Zone%d_minX",i); dFloatSet(gz,str,GZ[i][min_x]);
  503.         format(str,64,"Zone%d_minY",i); dFloatSet(gz,str,GZ[i][min_y]);
  504.         format(str,64,"Zone%d_flaggeX",i); dFloatSet(gz,str,GZ[i][flagge_x]);
  505.         format(str,64,"Zone%d_flaggeY",i); dFloatSet(gz,str,GZ[i][flagge_y]);
  506.         format(str,64,"Zone%d_flaggeZ",i); dFloatSet(gz,str,GZ[i][flagge_z]);
  507.         format(str,64,"Zone%d_erstellt",i); dIntSet(gz,str,GZ[i][erstellt]);
  508.     }
  509.     return 1;
  510. }
  511.  
  512. stock SaveGZ_(zoneid)
  513. {
  514.     new gz[32],str[64]; format(gz,32,G_FILE);
  515.     format(str,64,"Zone%d_owner",zoneid); dIntSet(gz,str,GZ[zoneid][owner]);
  516.     format(str,64,"Zone%d_maxX",zoneid); dFloatSet(gz,str,GZ[zoneid][max_x]);
  517.     format(str,64,"Zone%d_maxY",zoneid); dFloatSet(gz,str,GZ[zoneid][max_y]);
  518.     format(str,64,"Zone%d_minX",zoneid); dFloatSet(gz,str,GZ[zoneid][min_x]);
  519.     format(str,64,"Zone%d_minY",zoneid); dFloatSet(gz,str,GZ[zoneid][min_y]);
  520.     format(str,64,"Zone%d_flaggeX",zoneid); dFloatSet(gz,str,GZ[zoneid][flagge_x]);
  521.     format(str,64,"Zone%d_flaggeY",zoneid); dFloatSet(gz,str,GZ[zoneid][flagge_y]);
  522.     format(str,64,"Zone%d_flaggeZ",zoneid); dFloatSet(gz,str,GZ[zoneid][flagge_z]);
  523.     format(str,64,"Zone%d_erstellt",zoneid); dIntSet(gz,str,GZ[zoneid][erstellt]);
  524.     return 1;
  525. }
  526.  
  527. stock DisableAll()
  528. {
  529.     new i = 0;
  530.     for(; i<MAX_GZ; i++)
  531.     {
  532.         M_DestroyZone(i);
  533.         DestroyPickup(GZ[i][pickup]);
  534.         Delete3DTextLabel(GZ[i][label]);
  535.     }
  536.     return 1;
  537. }
  538.  
  539. stock DisableZone(zoneid)
  540. {
  541.     DestroyPickup(GZ[zoneid][pickup]);
  542.     Delete3DTextLabel(GZ[zoneid][label]);
  543.     GZ[zoneid][min_x] = 0,GZ[zoneid][min_y] = 0,GZ[zoneid][max_x] = 0,GZ[zoneid][max_y] = 0,GZ[zoneid][flagge_x] = 0,GZ[zoneid][flagge_y] = 0,GZ[zoneid][flagge_z] = 0;
  544.     return M_DestroyZone(zoneid);
  545. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement