Advertisement
ErikSon_

Dynamisches Gangfightsystem v2

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