Страница 1 из 11
Форум » PAWNO » Уроки Pawno » Сис-ма /capture (Advance Rp)
Сис-ма /capture (Advance Rp)
Дмитрий Дата: Пятница, 10.10.2014, 22:27 | Сообщение # 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, "Ваша банда снова может участвовать в захвате районов");  
             }  
        }
Прикрепления: 9101078.png(58Kb)


From Russia With Love!
Переезд на GiG-PRO.RU |---> Узнать больше <---|
Дмитрий Дата: Пятница, 10.10.2014, 22:27 | Сообщение # 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:https://www.dropbox.com/s/u8b10ywxa5g09ye/gangzone.sql


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