Страница 1 из 11
Форум » PAWNO » Уроки Pawno » [Мануал] Сис-ма /capture (Advance Rp)
[Мануал] Сис-ма /capture (Advance Rp)
Дмитрий Дата: Среда, 30.07.2014, 20:08 | Сообщение # 1 | Сообщить о нерабочей теме


Аватар для Дмитрий

Автор: Osetin

Ко всем "New"
Код
new unWar[MAX_FRACTION];   
new ooc = 0;   

new WarTime[MAX_GZ];   
new bool:GZWar[MAX_GZ];   
new GZWarer[MAX_GZ];   
new wartimer[MAX_GZ];   
new GZOwnerDeath[MAX_GZ];   
new GZOwnerKill[MAX_GZ];   
new Text: onecommand[MAX_GZ];   
new Text: twocommand[MAX_GZ];   
new Text: kolone[MAX_GZ];   
new Text: koltwo[MAX_GZ];   
new Text: fon[MAX_GZ];   
new Text: gztime[MAX_GZ];   
new Text: vremya[MAX_GZ];


Код
new GZInfo[MAX_GZ][gInfo];   
new TOTALGZ = 0;   
new gz[MAX_GZ];   

new GZColors[MAX_FRACTION] = {   
      0x00008065,   
      0x19197065,   
      0x7FFF0065,   
      0xFFA50065,   
      0xFFC1C165,   
      0x8B814C65,   
      0x4876FF65,   
      0x008B0065,   
      0xFF00FF65,   
      0xFFA50065,   
      0x8B225265,   
      0x8B000065,   
      0x5F9EA065   
};


К "forward"
Код
forward GangZoneWar(gzone, gang);


Создаём новый паблик
Код
public GangZoneWar(gzone, gang)   
{   
      if(WarTime [gzone]== 1)   
      {   
          WarTime[gzone]--;   
          if(GZOwnerKill [gzone]== GZOwnerDeath[gzone])   
          {   
              WarTime [gzone]= 180;   
              SendTeamMessage(gang, COLOR_LIGHTRED, "У вас осталось 3 минуты для того, что-бы захватить территорию");   
                 SendTeamMessage(GZInfo[gzone][gOwner], COLOR_LIGHTRED, "У вас осталось 3 минуты для того, что-бы отстоять свою территорию");   
          }   
          else if(GZOwnerKill [gzone]> GZOwnerDeath[gzone])   
          {   
              TextDrawDestroy(fon[gzone]);   
              TextDrawDestroy(onecommand[gzone]);   
              TextDrawDestroy(twocommand[gzone]);   
              TextDrawDestroy(kolone[gzone]);   
              TextDrawDestroy(koltwo[gzone]);   
                  TextDrawDestroy(gztime[gzone]);   
              TextDrawDestroy(vremya[gzone]);   
              GZWar [gzone]= false;   
              KillTimer(wartimer[gzone]);   
              SendTeamMessage(GZInfo[gzone][gOwner], COLOR_LIGHTRED, "Ваша банда отстояла свою территорию");   
              GangZoneStopFlashForAll(gz[gzone]);   
              SendTeamMessage(gang, COLOR_LIGHTRED, "Ваша банда не смогла завоевать территорию");   
          }   
          else   
          {   
              TextDrawDestroy(fon[gzone]);   
              TextDrawDestroy(onecommand[gzone]);   
              TextDrawDestroy(twocommand[gzone]);   
              TextDrawDestroy(kolone[gzone]);   
              TextDrawDestroy(koltwo[gzone]);   
                  TextDrawDestroy(gztime[gzone]);   
              TextDrawDestroy(vremya[gzone]);   
              GZWar [gzone]= false;   
              KillTimer(wartimer[gzone]);   
              SendTeamMessage(GZInfo[gzone][gOwner], COLOR_LIGHTRED, "Ваша банда не смогла отстоять свою территорию");   
              GZInfo [gzone][gOwner]= gang;   
              GangZoneStopFlashForAll(gz[gzone]);   
              SetGZToColor(gz[gzone], gzone);   
              SendTeamMessage(gang, COLOR_LIGHTRED, "Ваша банда смогла завоевать территорию");   
          }   
      }   
      else if(WarTime [gzone]< 1)   
      {   
          if(GZOwnerKill [gzone]== GZOwnerDeath[gzone])   
          {   
              WarTime [gzone]= 180;   
              SendTeamMessage(gang, COLOR_LIGHTRED, "У вас осталось 3 минуты для того, что-бы захватить территорию");   
              SendTeamMessage(GZInfo[gzone][gOwner], COLOR_LIGHTRED, "У вас осталось 3 минуты для того, что-бы отстоять свою территорию");   
          }   
          else if(GZOwnerKill [gzone]> GZOwnerDeath[gzone])   
          {   
              TextDrawDestroy(fon[gzone]);   
              TextDrawDestroy(onecommand[gzone]);   
              TextDrawDestroy(twocommand[gzone]);   
              TextDrawDestroy(kolone[gzone]);   
              TextDrawDestroy(koltwo[gzone]);   
                  TextDrawDestroy(gztime[gzone]);   
              TextDrawDestroy(vremya[gzone]);   
              GZWar [gzone]= false;   
              KillTimer(wartimer[gzone]);   
              SendTeamMessage(GZInfo[gzone][gOwner], COLOR_LIGHTRED, "Ваша банда отстояла свою территорию");   
              GangZoneStopFlashForAll(gz[gzone]);   
              SendTeamMessage(gang, COLOR_LIGHTRED, "Ваша банда не смогла завоевать территорию");   
          }   
          else   
          {   
              TextDrawDestroy(fon[gzone]);   
              TextDrawDestroy(onecommand[gzone]);   
              TextDrawDestroy(twocommand[gzone]);   
              TextDrawDestroy(kolone[gzone]);   
              TextDrawDestroy(koltwo[gzone]);   
                  TextDrawDestroy(gztime[gzone]);   
              TextDrawDestroy(vremya[gzone]);   
              GZWar [gzone]= false;   
              KillTimer(wartimer[gzone]);   
              SendTeamMessage(GZInfo[gzone][gOwner], COLOR_LIGHTRED, "Ваша банда не смогла отстоять свою территорию");   
              GZInfo [gzone][gOwner]= gang;   
              GangZoneStopFlashForAll(gz[gzone]);   
              SetGZToColor(gz[gzone], gzone);   
              SendTeamMessage(gang, COLOR_LIGHTRED, "Ваша банда смогла завоевать территорию");   
          }   
      }   
      else   
      {   
          WarTime[gzone]--;   
          if(WarTime [gzone]== 180)   
          {   
              SendTeamMessage(gang, COLOR_LIGHTRED, "У вас осталось 3 минуты для того, что-бы захватить территорию");   
              SendTeamMessage(GZInfo[gzone][gOwner], COLOR_LIGHTRED, "У вас осталось 3 минуты для того, что-бы отстоять свою территорию");   
          }   
          else if(WarTime [gzone]== 60)   
          {   
               SendTeamMessage(gang, COLOR_LIGHTRED, "У вас осталось 1 минутa для того, что-бы захватить территорию");   
                 SendTeamMessage(GZInfo[gzone][gOwner], COLOR_LIGHTRED, "У вас осталось 1 минутa для того, что-бы отстоять свою территорию");   
          }   
      }   
      new string[5];   
      format(string, sizeof(string), "%d", WarTime[gzone]);   
      TextDrawSetString(vremya[gzone], string);   
}


Ко всем пабликам или в конец мода
Код
stock PlayerToKvadrat(playerid,Float:min_x,Float:min_y,Float:max_x,Float:max_y)   
{   
      new Float:xxp,Float:yyp,Float:zzp;   
      GetPlayerPos(playerid, xxp, yyp, zzp);   
      if((xxp <= max_x && xxp >= min_x) && (yyp <= max_y && yyp >= min_y)) return 1;   
      return 0;   
}   
stock GetGZColor(gid)   
{   
      new owner = GZInfo[gid][gOwner];   
      new color = FracColor[owner];   
      return color;   
}   

stock SetGZToColor(gangzone, gid, playerid = INVALID_PLAYER_ID)   
{   
      new owner = GZInfo[gid][gOwner];   
      if(owner == 255)   
      {   
          if(playerid == INVALID_PLAYER_ID)   
          {   
              GangZoneShowForAll(gangzone, 0xFFFFFF65);   
          }   
          else   
          {   
              GangZoneShowForPlayer(playerid, gangzone, 0xFFFFFF65);   
          }   
      }   
      else   
      {   
          new color = GZColors[owner];   
          if(playerid == INVALID_PLAYER_ID)   
          {   
              GangZoneShowForAll(gangzone, color);   
          }   
          else   
          {   
              GangZoneShowForPlayer(playerid, gangzone, color);   
          }   
      }   
      return 1;   
}   

stock LoadGZ()   
{   
      format(query, sizeof(query), "SELECT * FROM `gangzone`");   
      CheckMySQL();   
      mysql_query(query);   
      mysql_store_result();   
      new gz_num = mysql_num_rows();   
      if(gz_num > -1)   
      {   
           for(new i = 1; i < gz_num+1; i++)   
          {   
              mysql_fetch_row(query);   
              sscanf(query, "e<p<|>iffffd>", GZInfo[i]);   
              gz [i]= GangZoneCreate(GZInfo[i][gMinX], GZInfo[i][gMinY], GZInfo[i][gMaxX], GZInfo[i][gMaxY]);   
              TOTALGZ++;   
                 
              WarTime [i]= 0;   
              GZWar [i]= false;   
              GZWarer [i]= 255;   
              GZOwnerKill [i]= 0;   
              GZOwnerDeath [i]= 0;   

          }   
          printf(" Gang зон загружено: %d", TOTALGZ);   
      }   
      mysql_free_result();   
}   

stock SaveGZ(gid)   
{   
      format(query, sizeof(query), "UPDATE `gangzone` SET `Owner`=%d WHERE `id`=%d", GZInfo[gid][gOwner], gid);   
      mysql_query(query);   
}


В public OnGameModeInit()
Код
LoadGZ();


В public OnGameModeExit()
Код
for(new i = 1; i <= TOTALGZ; i++)   
      {   
          SaveGZ(i);   
      }


В public OnPlayerConnect(playerid)
Код
for(new g = 1; g <= TOTALGZ; g++)   
      {   
          SetGZToColor(gz[g], g, playerid);   
      }


В public OnPlayerDeath(playerid, killerid, reason)
Код
for(new gzone = 1; gzone <= TOTALGZ; gzone++)   
      {   
          if(PlayerToKvadrat(playerid, GZInfo[gzone][gMinX], GZInfo[gzone][gMinY], GZInfo[gzone][gMaxX], GZInfo[gzone][gMaxY]))   
          {   
              if(GZWar [gzone]== true)   
              {   
                  if(PlayerInfo [playerid][pMember]== GZInfo [gzone][gOwner]&& PlayerInfo [killerid][pMember]== GZWarer[gzone])   
                  {   
                      GZOwnerDeath[gzone]++;   
                      new string[5];   
                      format(string, sizeof(string), "%d", GZOwnerDeath[gzone]);   
                      TextDrawSetString(koltwo[gzone], string);   
                  }   
                  else if(PlayerInfo [playerid][pMember]== GZWarer [gzone]&& PlayerInfo [killerid][pMember]== GZInfo[gzone][gOwner])   
                  {   
                      GZOwnerKill[gzone]++;   
                      new string[5];   
                      format(string, sizeof(string), "%d", GZOwnerKill[gzone]);   
                      TextDrawSetString(kolone[gzone], string);   
                  }   
              }   
          }   
      }


К любому таймеру
Код
for(new i = 0; i < TOTALFRAC; i++)   
          {   
              if(unWar [i]== 1)   
              {   
                  unWar [i]= 0;   
                  SendTeamMessage(i, COLOR_LIGHTGREEN, "Ваша банда снова может участвовать в захвате районов");   
              }   
         }
Прикрепления: 4923675.png(58Kb)


From Russia With Love!
Переезд на GiG-PRO.RU |---> Узнать больше <---|
Дмитрий Дата: Среда, 30.07.2014, 20:08 | Сообщение # 2 | Сообщить о нерабочей теме


Аватар для Дмитрий



Сама кмд
Код
CMD:gzcolor(playerid, params[])  
{  
     if(GetPVarInt(playerid, "Logged") == 0) return 1;  
     if(PlayerInfo[playerid] [pAdminLevel]< 4) return 1;  
     if(sscanf(params, "d", params[0])) return SendMe(playerid, COLOR_WHITE, "Использование: /gzcolor [ID фракции]");  
     #define id params[0]  
     if(id < 0 || id > TOTALFRAC) return SendMes(playerid, COLOR_GREY, "ID фракции должен быть от 0 до %d (используйте /gangid для получения ID)", TOTALFRAC);  
     for(new i = 1; i <= TOTALGZ; i++)  
     {  
         if(PlayerToKvadrat(playerid, GZInfo[i][gMinX], GZInfo[i][gMinY], GZInfo[i][gMaxX], GZInfo[i][gMaxY]))  
         {  
             GZInfo[i] [gOwner]= id;  
             SetGZToColor(gz[i], i);  
             SaveGZ(i);  
         }  
     }  
     #undef id  
     return 1;  
}  
CMD:capture(playerid, params[])  
{  
     if(GetPVarInt(playerid, "Logged") == 0) return 1;  
     new member = PlayerInfo[playerid][pMember];  
     if(member == 255 || Fraction[member] [fGang]== 0) return SendMe(playerid, COLOR_GREY, "У вас нет доступа к этой команде");  
     new second, minute, hour;  
     gettime(hour, minute, second);  
     if(hour != 11 && hour != 13 && hour != 15 && hour != 17 && hour != 19 && hour != 21 && minute != 0) return SendMe(playerid, COLOR_WHITE, "Захват территории разрешен только в 11:00, 13:00, 15:00, 17:00, 19:00 и 21:00");  
     if(PlayerInfo[playerid] [pRank]< 7) return SendMe(playerid, COLOR_GREY, "Захват территории разрешен только с 7 ранга");  
     new gzone = -1;  
     for(new g = 1; g <= TOTALGZ; g++)  
     {  
         if(PlayerToKvadrat(playerid, GZInfo[g][gMinX], GZInfo[g][gMinY], GZInfo[g][gMaxX], GZInfo[g][gMaxY]) && GZInfo[g] [gOwner]!= member)  
         {  
             gzone = g;  
         }  
     }  
     if(gzone == -1) return SendMe(playerid, COLOR_GREY, "Вы должны находится на территории другой банды");  
     if(GZInfo[gzone] [gOwner]== 255) return GZInfo[gzone] [gOwner]= member, SetGZToColor(gz[gzone], gzone);  
     new gangster = 0;  
     new owner = GZInfo[gzone][gOwner];  
     if(unWar [owner]== 1) return SendMe(playerid, COLOR_GREY, "Территорию этой банды можно будет захватить только после на следующей PayDay");  
     if(unWar [member]== 1) return SendMe(playerid, COLOR_GREY, "Ваша банда еще не окрепла. Ждите следующего PayDay'a");  
     new wared = -1;  
     for(new i = 1; i <= TOTALGZ; i++)  
     {  
         if(GZInfo[i] [gOwner]== owner && GZWar [i]== true)  
         {  
             wared = 1;  
         }  
     }  
     if(wared == 1) return SendMe(playerid, COLOR_GREY, "Кто-то уже завоевывает территорию данной банды");  
     for(new p = 0; p < MAX_PLAYERS; p++)  
     {  
         if(GetPVarInt(p, "Logged") == 1 && PlayerInfo[p] [pMember]== owner) gangster++;  
     }  
     if(gangster < 1) return SendMe(playerid, COLOR_GREY, "Членов этой банды слишком мало, вы не можете захватить ее территорию");  
     WarTime [gzone]= 600;  
     GZWar [gzone]= true;  
     GZWarer [gzone]= member;  
     new string[156];  
     format(string, sizeof(string), "На вашу территорию напала банда %s. У вас есть 10 минут что-бы отстоять ее", Fraction[member][fName]);  
     SendTeamMessage(owner, COLOR_LIGHTRED, string);  
     format(string, sizeof(string), "Ваша банда напала на территорию банды %s. У вас есть 10 минут что-бы захватить ее", Fraction[owner][fName]);  
     SendTeamMessage(member, COLOR_LIGHTRED, string);  
     GangZoneFlashForAll(gz[gzone], COLOR_RED);  
     wartimer [gzone]= SetTimerEx("GangZoneWar", 1000, true, "dd", gzone, member);  
     GZOwnerKill [gzone]= 0;  
     GZOwnerDeath [gzone]= 0;  
       
     fon [gzone]= TextDrawCreate(1, 285, "_");  
      TextDrawUseBox(fon[gzone], 1);  
       TextDrawBoxColor(fon[gzone], 0x00000075);  
        TextDrawTextSize(fon[gzone], 150.0, 400.0);  
     TextDrawLetterSize(fon[gzone], 0.0, 5.3);  
     gztime [gzone]= TextDrawCreate(10.0, 285.0, "Time:");  
     TextDrawLetterSize(gztime[gzone], 0.260000, 1.000000);  
     TextDrawColor(gztime[gzone], 0x37FA00FF);  
     TextDrawFont(gztime[gzone], 3);  
     TextDrawSetProportional(gztime[gzone], 1);  
     TextDrawSetOutline(gztime[gzone], 2);  
     vremya [gzone]= TextDrawCreate(50.0, 285.0, "360");  
     TextDrawLetterSize(vremya[gzone], 0.260000, 1.000000);  
     TextDrawColor(vremya[gzone], 0x37FA00FF);  
     TextDrawFont(vremya[gzone], 3);  
     TextDrawSetOutline(vremya[gzone], 2);  
       
     onecommand [gzone]= TextDrawCreate(10.0, 300.0, Fraction[member][fName]);  
     TextDrawLetterSize(onecommand[gzone], 0.4, 1.2);  
     TextDrawFont(onecommand[gzone], 2);  
     TextDrawSetOutline(onecommand[gzone], 2);  
     TextDrawLetterSize(onecommand[gzone], 0.260000, 1.000000);  
       
     twocommand [gzone]= TextDrawCreate(10.0, 315.0, Fraction[owner][fName]);  
     TextDrawUseBox(twocommand[gzone], 0);  
     TextDrawFont(twocommand[gzone], 3);  
     TextDrawSetOutline(twocommand[gzone], 2);  
     TextDrawLetterSize(twocommand[gzone], 0.260000, 1.000000);  
     kolone [gzone]= TextDrawCreate(133.0, 315.0, "0");  
     TextDrawFont(kolone[gzone], 3);  
     TextDrawSetOutline(kolone[gzone], 2);  
     TextDrawLetterSize(kolone[gzone], 0.260000, 1.000000);  
     koltwo [gzone]= TextDrawCreate(133.0, 300.0, "0");  
     TextDrawLetterSize(koltwo[gzone], 0.260000, 1.000000);  
     TextDrawFont(koltwo[gzone], 3);  
     TextDrawSetOutline(koltwo[gzone], 2);  
       
     for(new p = 0; p < MAX_PLAYERS; p++)  
     {  
         if(GetPVarInt(p, "Logged") == 1)  
         {  
             if(PlayerInfo[p] [pMember]== owner || PlayerInfo[p] [pMember]== member)  
             {  
                 TextDrawShowForPlayer(p,fon[gzone]);  
                 TextDrawShowForPlayer(p,gztime[gzone]);  
                 TextDrawShowForPlayer(p,vremya[gzone]);  
                 TextDrawShowForPlayer(p,onecommand[gzone]);  
                 TextDrawShowForPlayer(p,twocommand[gzone]);  
                 TextDrawShowForPlayer(p,kolone[gzone]);  
                 TextDrawShowForPlayer(p,koltwo[gzone]);  
             }  
         }  
     }  
     unWar [owner]= 1;  
     unWar [member]= 1;  
     return 1;  
}


У кого нету SendMes
В начало мода

Код
#define BYTES_PER_CELL (cellbits / 8)


Куда угодно
Код
stock SendMes(playerid, fstring[], {Float, _}:...)  
{  
static const STATIC_ARGS = 3;  
new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;  
if (n)  
{  
new message[128], arg_start, arg_end;  
#emit CONST.alt fstring  
#emit LCTRL 5  
#emit ADD  
#emit STOR.S.pri arg_start  
#emit LOAD.S.alt n  
#emit ADD  
#emit STOR.S.pri arg_end  
do  
{  
#emit LOAD.I  
#emit PUSH.pri  
arg_end -= BYTES_PER_CELL;  
#emit LOAD.S.pri arg_end  
}  
while (arg_end > arg_start);  
// Push the static format parameters.  
#emit PUSH.S fstring  
#emit PUSH.C 128  
#emit PUSH.ADR message  
n += BYTES_PER_CELL * 3;  
#emit PUSH.S n  
#emit SYSREQ.C format  
n += BYTES_PER_CELL;  
#emit LCTRL 4  
#emit LOAD.S.alt n  
#emit ADD  
#emit SCTRL 4  
return SendClientMessage(playerid, -1, message);  
}  
else return SendClientMessage(playerid, -1, fstring);  
}


Скачать таблицу gangzones: http://gigabytes.clan.su/forums-load/pawno/gangzone.sql


From Russia With Love!
Переезд на GiG-PRO.RU |---> Узнать больше <---|
Форум » PAWNO » Уроки Pawno » [Мануал] Сис-ма /capture (Advance Rp)
Страница 1 из 11
Поиск: