PDA

Просмотр полной версии : [Вопрос] Помогите с /capture.



Maksim97
31.05.2014, 15:40
1 вопрос, как сделать так что бы можно было Каптить доступно только 10 минут после нового часа.
и 2 вопрос как сделать так что бы квадрат захваченный мигал красным а не той и другой банды , например: капт Grove/Vagos мигает он цветом Grove и Vagos.

Вот команда сама:

else if(!strcmp(cmd,"/capture",true))//GzCheck
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pMemberop] == 12 || PlayerInfo[playerid][pMemberop] == 13 || PlayerInfo[playerid][pMemberop] == 15 || PlayerInfo[playerid][pMemberop] == 17 || PlayerInfo[playerid][pMemberop] == 18)
{
if(PlayerInfo[playerid][pRank] < 7) return SendClientMessage(playerid,COLOR_GREY,"Команда доступна с 7 ранга и выше.");
if(capt == 1) return SendClientMessage(playerid,COLOR_GRAD1,"{FF0000}x {AFAFAF}В Данное время, капт запрещен.");
new tmphour, tmpminute, tmpsecond;
gettime(tmphour, tmpminute, tmpsecond);
tmphour = shifthour;
switch(tmpminute)
{
case 0..10:
{
for(new i = 0;i<130;i++)
{
if(PlayerToKvadrat(playerid,GZInfo[i][gCoords][0], GZInfo[i][gCoords][1],GZInfo[i][gCoords][2],GZInfo[i][gCoords][3]) && GZInfo[i][gFrakVlad] != PlayerInfo[playerid][pMemberop])
{
new namegang[24],namegangv[24];
switch(PlayerInfo[playerid][pMemberop])
{
case 15: namegang = "Groove Street Gang";
case 17: namegang = "Aztecas Gang";
case 12: namegang = "Ballas Gang";
case 18: namegang = "Rifa Gang";
case 13: namegang = "Vagos Gang";
}
switch(GZInfo[i][gFrakVlad])
{
case 15: namegangv = "Groove Street Gang";
case 17: namegangv = "Aztecas Gang";
case 12: namegangv = "Ballas Gang";
case 18: namegangv = "Rifa Gang";
case 13: namegangv = "Vagos Gang";
}
if(FrakCD[GZInfo[i][gFrakVlad]] == 1 || FrakCD[PlayerInfo[playerid][pMemberop]] == 1) return SendClientMessage(playerid,COLOR_GREY,"Банда уже воюет за территорию");
if(!IsPlayerInBandOnline(GZInfo[i][gFrakVlad])) return SendClientMessage(playerid,COLOR_GREY, "Банда на которую вы собираетесь напасть нет в сети!");
if(IsATerra(playerid)) return SendClientMessage(playerid,COLOR_GREY,"Нельзя захватить эту территорию");
format(stringer,sizeof(stringer),"Банда {4169E1}%s{FFFFFF} напала на вашу территорию.",namegang);
SendFamilyMessage(GZInfo[i][gFrakVlad],COLOR_WHITE,stringer);
format(stringer,sizeof(stringer),"Член вашей банды {4169E1}%s{FFFFFF} напал на территорию {4169E1}%s{FFFFFF}.",PlayerInfo[playerid][pNames],namegangv);
SendFamilyMessage(PlayerInfo[playerid][pMemberop],COLOR_WHITE,stringer);
SendMes(playerid,COLOR_WHITE,"Территория будет мигать 10 минут.");
GangZoneFlashForAll(GZInfo[i][gID],COLOR_REDD);
GZInfo[i][gNapad] = PlayerInfo[playerid][pMemberop];
GZInfo[i][gTime] = 600;
capture[PlayerInfo[playerid][pMemberop]] = 1;
FrakCD[PlayerInfo[playerid][pMemberop]] = 1;
FrakCD[GZInfo[i][gFrakVlad]] = 1;
return true;
}
}
}
default: SendClientMessage(playerid,COLOR_GRAD1,"{FF0000}x {AFAFAF}Каптить доступно только 10 минут после нового часа.");
}
}
}
return true;
}


stock GzCheck()
{
if(capture[12] == 1 || capture[13] == 1 || capture[15] == 1 || capture[17] == 1 || capture[18] == 1)
{
for(new i = 0;i<130;i++)
{
if(GZInfo[i][gTime] > 0)
{
GZInfo[i][gTime]--;
if(GZInfo[i][gTime] == 300)
{
SendFamilyMessage(GZInfo[i][gFrakVlad],COLOR_WHITE,"{4169E1}[Внимание] До захвата территории осталось 5 минут.");
SendFamilyMessage(GZInfo[i][gNapad],COLOR_WHITE,"{4169E1}[Внимание] До захвата территории осталось 5 минут.");
}
else if(GZInfo[i][gTime] == 120)
{
SendFamilyMessage(GZInfo[i][gFrakVlad],COLOR_WHITE,"{4169E1}[Внимание] До захвата территории осталось 2 минуты.");
SendFamilyMessage(GZInfo[i][gNapad],COLOR_WHITE,"{4169E1}[Внимание] До захвата территории осталось 2 минуты.");
}
else if(GZInfo[i][gTime] == 1)
{
new asd = 0,asd1 = 0;
foreach(Player,x)
{
if(PlayerToKvadrat(x,GZInfo[i][gCoords][0], GZInfo[i][gCoords][1],GZInfo[i][gCoords][2],GZInfo[i][gCoords][3]))
{
if(PlayerInfo[x][pMemberop] == GZInfo[i][gFrakVlad]) asd++;
if(PlayerInfo[x][pMemberop] == GZInfo[i][gNapad]) asd1++;
}
}
if(asd >= asd1)
{
SendFamilyMessage(GZInfo[i][gFrakVlad],COLOR_WHITE,"{4169E1}[Внимание] Вам удалось отстоять свою территорию.");
SendFamilyMessage(GZInfo[i][gNapad],COLOR_WHITE,"{4169E1}[Внимание] Вам не удалось завоевать территорию.");
GangZoneStopFlashForAll(i);
GangZoneHideForAll(i);
switch(GZInfo[i][gFrakVlad])
{
case 12: GangZoneShowForAll(GZInfo[i][gID],0xd200ff99);
case 18: GangZoneShowForAll(GZInfo[i][gID],0x007fffAA);
case 13: GangZoneShowForAll(GZInfo[i][gID],0xcfbe0899);
case 15: GangZoneShowForAll(GZInfo[i][gID],0x06b50699);
case 17: GangZoneShowForAll(GZInfo[i][gID],0x03c3b899);
default: GangZoneShowForAll(GZInfo[i][gID],0xFFBE0065);
}
GZInfo[i][gNapad] = 0;
}
else if(asd < asd1)
{
SendFamilyMessage(GZInfo[i][gFrakVlad],COLOR_WHITE,"{4169E1}[Внимание] Вы потеряли контроль над одной из своих территорий.");
SendFamilyMessage(GZInfo[i][gNapad],COLOR_WHITE,"{4169E1}[Внимание] Вы приобрели контроль над новой территорией.");
GangZoneStopFlashForAll(i);
GangZoneHideForAll(i);
switch(GZInfo[i][gNapad])
{
case 12: GangZoneShowForAll(GZInfo[i][gID],0xd200ff99);
case 18: GangZoneShowForAll(GZInfo[i][gID],0x007fffAA);
case 13: GangZoneShowForAll(GZInfo[i][gID],0xcfbe0899);
case 15: GangZoneShowForAll(GZInfo[i][gID],0x06b50699);
case 17: GangZoneShowForAll(GZInfo[i][gID],0x03c3b899);
default: GangZoneShowForAll(GZInfo[i][gID],0xFFBE0065);
}
GZInfo[i][gFrakVlad] = GZInfo[i][gNapad];
GZInfo[i][gNapad] = 0;

}
GZInfo[i][gTime] = 0;
FrakCD[GZInfo[i][gNapad]] = 0;
FrakCD[GZInfo[i][gFrakVlad]] = 0;
SaveGZ();
}
}
}
}
return true;
}

DeimoS
31.05.2014, 15:45
Оххх, старые-добрые вопросы о каптах. Что же вы не можете открыть гугл и поискать там ответы на свои вопросы? Тем более тема с каптами затрагивалась миллиард раз... Хотя да, лучше потратить на ожидание ответа несколько часов, чем найти самостоятельно ответ за 10 минут.

Ну да ладно...
1) gettime + запись времени предыдущего капта
2) Второй параметр для вас - http://wiki.sa-mp.com/wiki/GangZoneFlashForAll

Maksim97
31.05.2014, 15:57
Я просто новичок в pawn и решил свою систему capt'a удалить и вставить на textdraw и вот так у меня получилось(

- - - Добавлено - - -


stock CaptureTimes()
{
new hour, minute, second;
gettime(hour, minute, second);
if(hour == 06 && minute == 00 || hour == 07 && minute == 00 || hour == 08 && minute == 00 || hour == 09 && minute == 00 || hour == 10 && minute == 00 || hour == 11 && minute == 00 || hour == 12 && minute == 00 || hour == 13 && minute == 00 || hour == 14 && minute == 00 || hour == 15 && minute == 00 || hour == 16 && minute == 00 || hour == 17 && minute == 00 || hour == 18 && minute == 00
|| hour == 19 && minute == 00 || hour == 20 && minute == 00 || hour == 21 && minute == 00 || hour == 22 && minute == 00 || hour == 23 && minute == 45 || hour == 00 && minute == 00 || hour == 01 && minute == 00 || hour == 02 && minute == 00 || hour == 03 && minute == 00 || hour == 04 && minute == 00 || hour == 05 && minute == 00) return true;
else return false;
}

У меня вот есть время капта но почему то он может каптить в любое время.

DeimoS
31.05.2014, 16:01
Ну так если вы новичок в Pawn, зачем пытаетесь прыгнуть выше головы? Изучите основы: функции, принципы написания кода и прочее. Или вы думаете, что кто-то вас научит Pawn? :)

И что вообще вы хотели сказать своим вторым постом?

- - - Добавлено - - -



stock CaptureTimes()
{
new hour, minute, second;
gettime(hour, minute, second);
if(hour == 06 && minute == 00 || hour == 07 && minute == 00 || hour == 08 && minute == 00 || hour == 09 && minute == 00 || hour == 10 && minute == 00 || hour == 11 && minute == 00 || hour == 12 && minute == 00 || hour == 13 && minute == 00 || hour == 14 && minute == 00 || hour == 15 && minute == 00 || hour == 16 && minute == 00 || hour == 17 && minute == 00 || hour == 18 && minute == 00
|| hour == 19 && minute == 00 || hour == 20 && minute == 00 || hour == 21 && minute == 00 || hour == 22 && minute == 00 || hour == 23 && minute == 45 || hour == 00 && minute == 00 || hour == 01 && minute == 00 || hour == 02 && minute == 00 || hour == 03 && minute == 00 || hour == 04 && minute == 00 || hour == 05 && minute == 00) return true;
else return false;
}

У меня вот есть время капта но почему то он может каптить в любое время.

Н-да...

stock CaptureTimes()
{
new minute;
gettime(_, minute, _);
switch(minute)
{
case 0..10: return 1;
}
return 0;
}
Если функция вызывается с 0 до 10 минут - вернёт единицу и разрешит капт. Иначе вернёт 0

Maksim97
31.05.2014, 16:34
stock CaptureTimes()
{
new minute;
gettime(_, minute, _);
switch(minute)
{
case 0..10: return 1;
}
return 0;
}

Сделал так но всё равно полсе рестарт могу каптить в любое время:)

DeimoS
31.05.2014, 17:29
else if(!strcmp(cmd,"/capture",true))//GzCheck
{
if(12 > PlayerInfo[playerid][pMemberop] > 18) return 1;
if(PlayerInfo[playerid][pRank] < 7) return SendClientMessage(playerid,COLOR_GREY,"Команда доступна с 7 ранга и выше.");
if(capt == 1) return SendClientMessage(playerid,COLOR_GRAD1,"{FF0000}x {AFAFAF}В Данное время, капт запрещен.");
new capt_minute;
gettime(_, capt_minute, _);
switch(capt_minute)
{
case 0..10:
{
for(new i; i < sizeof(GZInfo); i++)
{
if(!PlayerToKvadrat(playerid,GZInfo[i][gCoords][0], GZInfo[i][gCoords][1],GZInfo[i][gCoords][2],GZInfo[i][gCoords][3]) || GZInfo[i][gFrakVlad] == PlayerInfo[playerid][pMemberop]) continue;
new namegang[24],namegangv[24];
switch(PlayerInfo[playerid][pMemberop])
{
case 15: namegang = "Groove Street Gang";
case 17: namegang = "Aztecas Gang";
case 12: namegang = "Ballas Gang";
case 18: namegang = "Rifa Gang";
case 13: namegang = "Vagos Gang";
}
switch(GZInfo[i][gFrakVlad])
{
case 15: namegangv = "Groove Street Gang";
case 17: namegangv = "Aztecas Gang";
case 12: namegangv = "Ballas Gang";
case 18: namegangv = "Rifa Gang";
case 13: namegangv = "Vagos Gang";
}
if(FrakCD[GZInfo[i][gFrakVlad]] == 1 || FrakCD[PlayerInfo[playerid][pMemberop]] == 1) return SendClientMessage(playerid,COLOR_GREY,"Банда уже воюет за территорию");
if(!IsPlayerInBandOnline(GZInfo[i][gFrakVlad])) return SendClientMessage(playerid,COLOR_GREY, "Банда на которую вы собираетесь напасть нет в сети!");
if(IsATerra(playerid)) return SendClientMessage(playerid,COLOR_GREY,"Нельзя захватить эту территорию");
format(stringer,sizeof(stringer),"Банда {4169E1}%s{FFFFFF} напала на вашу территорию.",namegang);
SendFamilyMessage(GZInfo[i][gFrakVlad],COLOR_WHITE,stringer);
format(stringer,sizeof(stringer),"Член вашей банды {4169E1}%s{FFFFFF} напал на территорию {4169E1}%s{FFFFFF}.",PlayerInfo[playerid][pNames],namegangv);
SendFamilyMessage(PlayerInfo[playerid][pMemberop],COLOR_WHITE,stringer);
SendMes(playerid,COLOR_WHITE,"Территория будет мигать 10 минут.");
GangZoneFlashForAll(GZInfo[i][gID],COLOR_REDD);
GZInfo[i][gNapad] = PlayerInfo[playerid][pMemberop];
GZInfo[i][gTime] = 600;
capture[PlayerInfo[playerid][pMemberop]] = 1;
FrakCD[PlayerInfo[playerid][pMemberop]] = 1;
FrakCD[GZInfo[i][gFrakVlad]] = 1;
return 1;
}
}
default: SendClientMessage(playerid,COLOR_GRAD1,"{FF0000}x {AFAFAF}Каптить доступно только 10 минут после нового часа.");
}
return 1;
}

Maksim97
31.05.2014, 17:44
Не могу разобраться в чём warning заключается.

C:\Users\Ïîëüçîâàòåëü\Desktop\edit.pwn(2071) : warning 204: symbol is assigned a value that is never used: "GzCheckOn"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.


Команда от мода Skrilax-rp я так понимаю? Систему capt'a я удалял полностью , а ставил с паблика.

DeimoS
31.05.2014, 17:52
Команда ваша. Оптимизирована и переделана под более логичный вид.
А варнинг означает то, что вы не используете функцию. Просто удалите её

Maksim97
01.06.2014, 00:08
Да Всё хорошо но одно но textdraw капта теперь не работает .

- - - Добавлено - - -

И что ещё заметил


if(12 > PlayerInfo[playerid][pMemberop] > 18) return 1;

RM Могут каптить Sa news тоже:D

DeimoS
01.06.2014, 08:24
Да Всё хорошо но одно но textdraw капта теперь не работает .

Ну это уже никак к команде не относится, по-моему. Смотрите код, где должен обновляться текстдрав и смотрите условия, при которых текстдрав обновляется и которые не срабатывают


И что ещё заметил


if(12 > PlayerInfo[playerid][pMemberop] > 18) return 1;

RM Могут каптить Sa news тоже:D

Ну так подгоните ID фракций под себя. Я сделал так, как было у вас в команде

Maksim97
01.06.2014, 14:20
Ну вот я добавил в /capture
if(GzCheckOn == 0)
{
GzCheckTimer = SetTimer("GzCheck", 1000,1);
GzCheckOn = 1;
}
return 1;

Stock GzCheck сменил на Public Public GzCheck

И всё равно не высвечивается !