Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: pokerface poslato Mart 08, 2019, 21:41:46 POSLE PODNE

Naslov: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: pokerface poslato Mart 08, 2019, 21:41:46 POSLE PODNE
Problem(error/warning): Nije problem, nego vise pitanje. Ne znam na koji nacin da uradim neke od provjera koja ce odvojiti manje gangzone po koordinatama od onih vecih ako je ikako moguce.
Dio skripte:

Ovako radim CP I gangzone.


new const ZoneInfo[][E_CAPTURE_DATA] =
{
{"LV Airbase", {1231, 1203, 1628, 1867}, {1312.2656,1617.3121,10.8203},            0}, //0
{"Submarine Port", {-10, 2912, 544, 3255}, {263.7045,3031.9456,11.2221},         1}, //1
{"Haunted Base", {-605, 2537, -493, 2654}, {-564.8030,2569.7290,53.5156},              2}, //2
{"Chemical Refinery", {103, 1331, 295, 1487}, {213.5669,1350.0870,10.5859},        3}, //3
{"Desert Zone", {-376, 1801, -241, 1916}, {-305.4872,1838.8951,42.2891},            4}, //4
{"Construction Site", {-140, 1869, -91, 1931}, {-120.6943,1903.2755,15.3800},    0}, //5
{"Sniperhut", {433, 2272, 507, 2346}, {481.8103,2308.1157,38.8940},            1}, //6
{"Ranch Shack", {675, 1951, 732, 2004}, {703.2129,1963.0461,5.5391},        2}, //7
{"Ammunation", {757, 1847, 806, 1909}, {782.3793,1871.3038,4.8533},            3}, //8
{"Desert Camp", {773, 1600, 826, 1734}, {799.0922,1686.9808,5.2813},            4}, //9
{"Octane Springs", {530, 1192, 695, 1272}, {609.1064,1208.5597,11.7188},                0}, //10
{"Cluckin' Bell", {147, 1155, 204, 1199}, {171.5608,1174.5854,14.7578},            1}, //11
{"Ammo Depot", {1397, 2320, 1558, 2383}, {1444.2500,2360.1401,10.8203},            2}, //12
{"Factory", {916, 2046, 999, 2184}, {972.2277,2071.9954,10.8203},            3}, //13
{"Cargo", {1532, 525, 1710, 622}, {1672.1604,559.6873,7.1328},            4}, //14
{"Whitewood Church", {915, 1861, 969, 1912}, {929.4318,1891.6390,12.8379},  0}, //15
{"Battleship", {-869, 2171, -573, 2230}, {-645.3881,2203.3589,51.2932},            1}, //16
{"Tierra Bridge", {-1138, 2661, -867, 2741}, {-906.7224,2698.2632,41.9279},            2}, //17
{"Nuke Station", {-409, 1497, -232, 1647}, {-347.7741,1580.8589,76.3168},            3}, //18
{"F.C. Gas", {-343, 1007, -285, 1066}, {-331.6724,1040.6094,19.7422},        4}, //19
{"Weapon Depot", {-354, 797, -296, 861}, {-315.2905,829.8641,14.2422},            0}, //20
{"Blackfield", {1018, 1204, 1178, 1364}, {1166.5272,1348.1775,10.9219},      1}, //21
{"Recharge Point", {-58, 2309, 5, 2372}, {-49.5880,2353.1509,24.4427},            2}, //22
{"Xoomer", {539, 1619, 698, 1759}, {636.9102,1687.9380,6.9922},          3}, //23
{"Headquarters", {3076,2057,3158,2106}, {3092.2126,2094.6006,21.6919},    4}, //24
{"Petrol Refinery", {-77, 1461, 84, 1591}, {-38.7557,1535.7911,12.8000},              0}, //25
{"Hospital", {1018, 1721, 1117, 1803}, {1054.4314,1758.7367,10.9157},        1}, //26
{"Desert Airport", {-81, 2378, 526, 2663}, {426.4098,2500.9263,17.6634},          2}, //27
{"Quarry", {384, 715, 837, 1038}, {590.0967,869.7262,-42.4973},           3}, //28
{"Military Port", {214, 348, 521, 618}, {295.1580,406.9670,6.4504},            1}, //29
{"North Tower", {662, 2760, 876, 2901}, {712.8585,2780.5520,96.4743},            2}, //30
{"Command Center", {-1278, 2113, -1099, 2210}, {-1230.3333,2184.3452,100.9999},       4}, //31
{"Outpost", {-1540, 1927, -1420, 2075}, {-1494.8730,1972.1803,48.4219},            2}, //32
{"Bunker", {-1410, 2019, -1350, 2075}, {-1381.5803,2044.0314,52.5568},          0}, //33
    {"Bank",  {36, 1652, 209, 1746}, {147.6750,1712.1902,17.9891},                                                      1} //34
};


Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [ code ]vaš odgovor[ /code ]
Slika/video ingame problema(obavezno ako je ingame problem): link slike
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: imnaithan poslato Mart 08, 2019, 23:27:05 POSLE PODNE
Pojasni , nisam skontao sta zelis
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: pokerface poslato Mart 09, 2019, 11:39:37 PRE PODNE
Ako ti ovo gore nije jasno onda nezz. Pa lijepo, svaka od ovih GangZona sto vidis na mini-mapi je drugacija, jedne su manje a druge veće, I ja sad hocu da ih razdvojim. Tako da bi one manje zone trebalo 15 sekundi da zauzmes a one veće 30.

@Ino42O ili bilo tko, sorry za tag.

A ako nije moguce, na koji nacin da onda dodam valutu npr 0/1 na zonu koju hocu da ima 15 sekundi zauzimanja ili ne. Primjer:

{"LV Airbase", {1231, 1203, 1628, 1867}, {1312.2656,1617.3121,10.8203},  0, 1}, 1 na kraju bi znacilo da ce trebati 15 sekundi
[code]{"SubPort",{1231, 1203, 1628, 1867}, {1312.2656,1617.3121,10.8203},  0, 0}, 0 na kraju bi znacilo da ce trebati 30 sekundi, to jest standard 30 sekundi. [/code]


Ovo mi je array.


enum E_CAPTURE_ZONE
{
    E_CAPTURE_ZONE_NAME[64],
    Float:E_CAPTURE_ZONE_GANGZONE_OFFSET[4],
    Float:E_CAPTURE_ZONE_CP_OFFSET[3],
    E_CAPTURE_ZONE_OWNER,
    E_CAPTURE_ZONE_ATTACKER,
    E_CAPTURE_ZONE_COUNTDOWN,
    E_CAPTURE_ZONE_GANGZONE,
    E_CAPTURE_ZONE_CP,
    E_CAPTURE_ZONE_AREA,
    E_CAPTURE_ZONE_TIMER,
    E_CAPTURE_ZONE_PLAYERS_IN_ZONE,
    Text3D:E_CAPTURE_ZONE_LABEL
};


GameModeInit. Znaci, ovdje imam timer od 1 sekunde a svaka zona treba 30 sekundi da je zauzmes.

[code]for (new i; i < sizeof captureZone; i++)
    {
        captureZone[i][E_CAPTURE_ZONE_ATTACKER] = INVALID_PLAYER_ID;
        captureZone[i][E_CAPTURE_ZONE_COUNTDOWN] = 0;
        captureZone[i][E_CAPTURE_ZONE_GANGZONE] = GangZoneCreate(captureZone[i][E_CAPTURE_ZONE_GANGZONE_OFFSET][0], captureZone[i][E_CAPTURE_ZONE_GANGZONE_OFFSET][1], captureZone[i][E_CAPTURE_ZONE_GANGZONE_OFFSET][2], captureZone[i][E_CAPTURE_ZONE_GANGZONE_OFFSET][3]);
        captureZone[i][E_CAPTURE_ZONE_CP] = CreateDynamicCP(captureZone[i][E_CAPTURE_ZONE_CP_OFFSET][0], captureZone[i][E_CAPTURE_ZONE_CP_OFFSET][1], captureZone[i][E_CAPTURE_ZONE_CP_OFFSET][2], 3.0);
        captureZone[i][E_CAPTURE_ZONE_AREA] = CreateDynamicRectangle(captureZone[i][E_CAPTURE_ZONE_GANGZONE_OFFSET][0], captureZone[i][E_CAPTURE_ZONE_GANGZONE_OFFSET][1], captureZone[i][E_CAPTURE_ZONE_GANGZONE_OFFSET][2], captureZone[i][E_CAPTURE_ZONE_GANGZONE_OFFSET][3]);

        captureZone[i][E_CAPTURE_ZONE_CP] = CreateDynamicMapIcon(captureZone[i][E_CAPTURE_ZONE_CP_OFFSET][0], captureZone[i][E_CAPTURE_ZONE_CP_OFFSET][1], captureZone[i][E_CAPTURE_ZONE_CP_OFFSET][2], 19, -1, -1, -1, -1, 9999.0, MAPICON_LOCAL);

        format(string, sizeof(string), ""COL_WHITE"%s"COL_YELLOW"(%i)", captureZone[i][E_CAPTURE_ZONE_NAME], i);
captureZone[i][E_CAPTURE_ZONE_LABEL] = CreateDynamic3DTextLabel(string, TEAM[ captureZone[i][E_CAPTURE_ZONE_OWNER] ][E_TEAM_COLOR], captureZone[i][E_CAPTURE_ZONE_CP_OFFSET][0], captureZone[i][E_CAPTURE_ZONE_CP_OFFSET][1], captureZone[i][E_CAPTURE_ZONE_CP_OFFSET][2], 35.0, _, _, 0, 0);
captureZone[i][E_CAPTURE_ZONE_TIMER] = SetTimerEx("OnCaptureZoneUpdate", 1000, true, "i", i);
    }



Igrac ulazi u CP.

public OnPlayerEnterDynamicCP(playerid, checkpointid)
{
for (new i; i < sizeof captureZone; i++)
    {
        if (checkpointid == captureZone[i][E_CAPTURE_ZONE_CP])
        {
            if (IsPlayerInAnyVehicle(playerid))
            {
                SendClientMessage(playerid, COLOR_TOMATO, "* You cannot capture a zone in a vehicle.");
                return 1;
            }
            if(AdminDuty[playerid] == 1)
{
    SendClientMessage(playerid, COLOR_TOMATO, "No way! You can't capture zone while on duty!");
                return 1;
    }
    if(GetPlayerTeam(playerid) == captureZone[i][E_CAPTURE_ZONE_OWNER])
{
    SCM(playerid, COLOR_ORANGE_RED, "* This zone is controlled by your team.");
break;
}
            if (captureZone[i][E_CAPTURE_ZONE_ATTACKER] == INVALID_PLAYER_ID)
            {
                if ((GetPlayerTeam(playerid) >= 0 && GetPlayerTeam(playerid) < sizeof TEAM) && TEAM[GetPlayerTeam(playerid)][E_TEAM_VALID] && GetPlayerTeam(playerid) != captureZone[i][E_CAPTURE_ZONE_OWNER])
                {
                    captureZone[i][E_CAPTURE_ZONE_ATTACKER] = playerid;
                    captureZone[i][E_CAPTURE_ZONE_PLAYERS_IN_ZONE] = 1;
                    captureZone[i][E_CAPTURE_ZONE_COUNTDOWN] = 0;
                    KillTimer(captureZone[i][E_CAPTURE_ZONE_TIMER]);
                    captureZone[i][E_CAPTURE_ZONE_TIMER] = SetTimerEx("OnCaptureZoneUpdate", 1000, true, "i", i);

                    GangZoneFlashForAll(captureZone[i][E_CAPTURE_ZONE_GANGZONE], ALPHA(TEAM[GetPlayerTeam(playerid)][E_TEAM_COLOR], 100));

                    SCM(playerid, COLOR_ORANGE_RED, "Stay in the checkpoint to for "#CAPTURE_TIME" seconds to capture the zone.");

                    new string[150];
                    format(string, sizeof string, "[ZONE] "COL_WHITE"Someone is trying to capture "OLIVE_GREEN"%s "COL_WHITE"for team "DARK_RED"%s !", captureZone[i][E_CAPTURE_ZONE_NAME], TEAM[GetPlayerTeam(playerid)][E_TEAM_NAME]);
                    SendClientMessageToAll(COLOR_DARK_RED, string);
                }
                else return 1;
            }
            else if (GetPlayerTeam(playerid) == GetPlayerTeam(captureZone[i][E_CAPTURE_ZONE_ATTACKER]))
            {
                captureZone[i][E_CAPTURE_ZONE_PLAYERS_IN_ZONE]++;

                SCM(playerid, COLOR_GREEN, "* Stay in the checkpoint to assist your teammate in capturing the area.");
            }
            PlayerTextDrawShow(playerid, capturePlayerTextDraw[playerid]);
            PlayerTextDrawShow(playerid, capturePlayerPreview[playerid]);
            ShowPlayerProgressBar(playerid, capturePlayerBar[playerid]);
            return 1;
        }
    }
return 1;
}


Timer poziva ovu funkciju, u toj funkciji hocu da se provjerava ako zona ima 0/1 kako sam gore naveo da zauzimanje bude 15 sekundi, a ako ima 0 da bude normalno 30.

{"LV Airbase", {1231, 1203, 1628, 1867}, {1312.2656,1617.3121,10.8203},  0, 1}, 1 na kraju bi znacilo da ce trebati 15 sekundi
[code]{"SubPort",{1231, 1203, 1628, 1867}, {1312.2656,1617.3121,10.8203},  0, 0}, 0 na kraju bi znacilo da ce trebati 30 sekundi, to jest standard 30 sekundi. [/code]

forward OnCaptureZoneUpdate(zoneid);
public OnCaptureZoneUpdate(zoneid)
{
    captureZone[zoneid][E_CAPTURE_ZONE_COUNTDOWN] += captureZone[zoneid][E_CAPTURE_ZONE_PLAYERS_IN_ZONE];

    new string[150];
    format(string, sizeof string, "Capturing %i...", CAPTURE_TIME - captureZone[zoneid][E_CAPTURE_ZONE_COUNTDOWN]);

    for (new i, j = GetPlayerPoolSize(); i <= j; i++)
    {
         if (IsPlayerInDynamicCP(i, captureZone[zoneid][E_CAPTURE_ZONE_CP]) &&
             !IsPlayerInAnyVehicle(i) &&
             GetPlayerTeam(i) == GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]))
         {
             PlayerTextDrawSetString(i, capturePlayerTextDraw[i], string);
             SetPlayerProgressBarValue(i, capturePlayerBar[i], captureZone[zoneid][E_CAPTURE_ZONE_COUNTDOWN]);
         }
    }
    if (captureZone[zoneid][E_CAPTURE_ZONE_COUNTDOWN] > CAPTURE_TIME)
    {
        GetPlayerName(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER], string, MAX_PLAYER_NAME);
        format(string, sizeof string, "* Good job soldier. You assisted %s to capture "LIGHT_GREEN"%s. +$500", string, captureZone[zoneid][E_CAPTURE_ZONE_NAME]);

        for (new i, j = GetPlayerPoolSize(); i <= j; i++)
        {
             if (IsPlayerInDynamicCP(i, captureZone[zoneid][E_CAPTURE_ZONE_CP]) &&
                 !IsPlayerInAnyVehicle(i) &&
                 GetPlayerTeam(i) == GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]))
             {
                PlayerTextDrawHide(i, capturePlayerTextDraw[i]);
                PlayerTextDrawHide(i, capturePlayerPreview[i]);
                HidePlayerProgressBar(i, capturePlayerBar[i]);

                if (i != captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER])
                {
                    SendClientMessage(i, COLOR_GREEN, string);
                    GivePlayerCash(i, 500);
                }
}
if(GetPlayerTeam(i) == GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]))
    {
format(string, sizeof(string), "** You recieved +2 score from the captured zone by your team.");
                SCM(i, COLOR_LIGHTBLUE, string);

                SetPlayerScore(i, PInfo[i][Score] += 2);
}
             if(GetPlayerTeam(i) == captureZone[zoneid][E_CAPTURE_ZONE_OWNER])
             {
format(string, sizeof(string), "** You recieved -2 score, your team lost the zone.");
                SCM(i, COLOR_LIGHTBLUE, string);

                SetPlayerScore(i, PInfo[i][Score] -= 2);
             }
        }
        SetPlayerScore(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER], GetPlayerScore(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]) + 5);

        GivePlayerCash(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER], 4500);
        format(string, sizeof string, "[ZONE] You successfully captured "COL_ORANGE"%s. "COL_WHITE"+5 Score +$4500", captureZone[zoneid][E_CAPTURE_ZONE_NAME]);
        SendClientMessage(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER], COLOR_GREEN, string);

        PInfo[captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]][ZonesCaptured]++;

        format(string, sizeof string, ""COL_ORANGE"(!) %s team have captured '%s' .", TEAM[GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER])][E_TEAM_NAME], captureZone[zoneid][E_CAPTURE_ZONE_NAME]);
        SCMToAll(-1, string);

        new text[150];
        format(text, sizeof(text), ""COL_WHITE"%s"COL_YELLOW"(%i)", captureZone[zoneid][E_CAPTURE_ZONE_NAME], zoneid);
UpdateDynamic3DTextLabelText(captureZone[zoneid][E_CAPTURE_ZONE_LABEL], TEAM[captureZone[zoneid][E_CAPTURE_ZONE_OWNER]][E_TEAM_COLOR], text);

        captureZone[zoneid][E_CAPTURE_ZONE_OWNER] = GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]);
        captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER] = INVALID_PLAYER_ID;
        KillTimer(captureZone[zoneid][E_CAPTURE_ZONE_TIMER]);
        GangZoneStopFlashForAll(captureZone[zoneid][E_CAPTURE_ZONE_GANGZONE]);
        GangZoneShowForAll(captureZone[zoneid][E_CAPTURE_ZONE_GANGZONE], ALPHA(TEAM[captureZone[zoneid][E_CAPTURE_ZONE_OWNER]][E_TEAM_COLOR], 100));
    }
    return 1;
}


A valjda ste razumijeli sto hocu  :D :D
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: pokerface poslato Mart 09, 2019, 17:48:20 POSLE PODNE
Ima netko ideju ?
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: Hazze poslato Mart 09, 2019, 22:19:21 POSLE PODNE
pa to je malo komplikovano, trebao bi od svake gangzone bukvalno odrediti pocetak i kraj ali kao kvadrat i morao bi to pretvoriti i tako za svaku i onda samo rasporedis po velicini realno, previse komplikovano jbg a i ne vidim potrebu sto bi to radio
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: Jack1337 poslato Mart 10, 2019, 00:46:58 PRE PODNE
Ako zone nisu dinamične (da ih ingame kreiraš) nego si ih ti pravio u pawno najbolja solucija bi ti bila da uzmes igracevu poziciju (getplayerpos) i onda ifisplayerinrangeofpoint i onda tako praviš.
Npr ako je kod kordinata recimo manje zone stavis 15 sekundi tajmer a ako je kod kordinata druge zone staviš 30.
lp nadam se da sam pomogao :p
Edit - ako je dinamično mogao bi da ubacis nesto kao ajmo reći vrste zona sto nije uopste tesko uraditi.
Ako je vrsta 1 (mala) onda stavis proveru dal je zona mala i stavis 15 sekundi a ako je zona velika (2) stavis 30.
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: pokerface poslato Mart 10, 2019, 13:03:34 POSLE PODNE
Citat: Jack1337 poslato Mart 10, 2019, 00:46:58 PRE PODNE
Edit - ako je dinamično mogao bi da ubacis nesto kao ajmo reći vrste zona sto nije uopste tesko uraditi.
Ako je vrsta 1 (mala) onda stavis proveru dal je zona mala i stavis 15 sekundi a ako je zona velika (2) stavis 30.

To sam gore I napomenuo da želim tako, ali mi je već default zauzimanje 30 sekundi. A da radim novi timer se ne isplati jer već imam jedan koji je dovoljan od 1 sekunde.

#define CAPTURE_TIME 30
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: // xunder poslato Mart 10, 2019, 14:12:56 POSLE PODNE
Jednostavno izracunaj obim zone

http://prntscr.com/mvvdkr - Zona 1 = 5, Zona 2 = 6 ...


forward Float: returnZoneVolume(Float: minx, Float: miny, Float: maxx, Float: maxy);

main() {
printf("Zona 1: %.2f", returnZoneVolume(-643, 113.5, -543, 213.5));
printf("Zona 2: %.2f", returnZoneVolume(-543, 114.5, -469, 256.5));
printf("Zona 3: %.2f", returnZoneVolume(-469, 114.5, -243, 231.5));
printf("Zona 4: %.2f", returnZoneVolume(-643, 10.5, -245, 113.5));
}

Float: returnZoneVolume(Float: minx, Float: miny, Float: maxx, Float: maxy)
    return floatabs(maxx-minx) + floatabs(maxy-miny);





[/code]
Out:
[14:12:06] Zona 1: 200.00
[14:12:06] Zona 2: 216.00
[14:12:06] Zona 3: 343.00
[14:12:06] Zona 4: 501.00[/code]
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: pokerface poslato Mart 10, 2019, 14:19:46 POSLE PODNE
To sam obavio, sada samo trebam to da kako da uradim provjeru ako je zona manja, to jest ako je 1 da traje 15 sekundi
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: xLanmi poslato Mart 10, 2019, 23:38:55 POSLE PODNE
Uradis po principu kao sto ti je XUNDER Rekao samo cuvas taj obim , i proveris tipa :
[pawn]CheckZone(minx,miny,maxx, maxy) < CheckZone(minx,miny,maxx, maxy) // 1 -  prva zona , 2 - druga zona[/pawn]
A pri tome mozes uraditi i da ti pri kreiranju zone cuva u varijablu koliki je obim same zone i onda mozes proveriti tipa :
[pawn]if(ZonaInfo[ID][zObim] < 2) { // Kod } // Da ako je manji od 2 to sto trazis da ti ide 15 sekundi taj kod [/pawn]
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: pokerface poslato Mart 11, 2019, 14:35:29 POSLE PODNE
Ja sam to mislio uraditi na ovaj način.

U enum stavim ovako


enum E_CAPTURE_ZONE
{
    E_CAPTURE_ZONE_SMALL
};


I onda na kraj stavim valutu 1 to jest ako je zona mala.

{"Military Shelter", {-153.3433,2213.3953,-99.2894,2319.2996}, {-126.7931,2257.9844,28.1627}, 6, 1},


I onda dolazi ovaj kod gdje se vrsi provjera.

public OnPlayerEnterDynamicCP(playerid, checkpointid)
{
for (new i; i < sizeof captureZone; i++)
    {
        if (checkpointid == captureZone[i][E_CAPTURE_ZONE_CP])
        {
            if (IsPlayerInAnyVehicle(playerid))
            {
                SendClientMessage(playerid, COLOR_TOMATO, "* You cannot capture a zone in a vehicle.");
                return 1;
            }
            if(AdminDuty[playerid] == 1)
{
    SendClientMessage(playerid, COLOR_TOMATO, "No way! You can't capture zone while on duty!");
                return 1;
    }
    if(GetPlayerTeam(playerid) == captureZone[i][E_CAPTURE_ZONE_OWNER])
{
    SCM(playerid, COLOR_ORANGE_RED, "* This zone is controlled by your team.");
break;
}
            if (captureZone[i][E_CAPTURE_ZONE_ATTACKER] == INVALID_PLAYER_ID)
            {
                if ((GetPlayerTeam(playerid) >= 0 && GetPlayerTeam(playerid) < sizeof TEAM) && TEAM[GetPlayerTeam(playerid)][E_TEAM_VALID] && GetPlayerTeam(playerid) != captureZone[i][E_CAPTURE_ZONE_OWNER])
                {
                    captureZone[i][E_CAPTURE_ZONE_ATTACKER] = playerid;
                    captureZone[i][E_CAPTURE_ZONE_PLAYERS_IN_ZONE] = 1;
                    captureZone[i][E_CAPTURE_ZONE_COUNTDOWN] = 0;
                    KillTimer(captureZone[i][E_CAPTURE_ZONE_TIMER]);
                    captureZone[i][E_CAPTURE_ZONE_TIMER] = SetTimerEx("OnCaptureZoneUpdate", 1000, true, "i", i);

                    GangZoneFlashForAll(captureZone[i][E_CAPTURE_ZONE_GANGZONE], ALPHA(TEAM[GetPlayerTeam(playerid)][E_TEAM_COLOR], 100));

                    SCM(playerid, COLOR_ORANGE_RED, "Stay in the checkpoint to for "#CAPTURE_TIME" seconds to capture the zone.");

                    new string[150];
                    format(string, sizeof string, "[ZONE] "COL_WHITE"Someone is trying to capture "OLIVE_GREEN"%s "COL_WHITE"for team "DARK_RED"%s !", captureZone[i][E_CAPTURE_ZONE_NAME], TEAM[GetPlayerTeam(playerid)][E_TEAM_NAME]);
                    SendClientMessageToAll(COLOR_DARK_RED, string);
                }
                else return 1;
            }
            else if (GetPlayerTeam(playerid) == GetPlayerTeam(captureZone[i][E_CAPTURE_ZONE_ATTACKER]))
            {
                captureZone[i][E_CAPTURE_ZONE_PLAYERS_IN_ZONE]++;

                SCM(playerid, COLOR_GREEN, "* Stay in the checkpoint to assist your teammate in capturing the area.");
            }
else if (captureZone[i][E_CAPTURE_ZONE_SMALL] == 1) //Ako je zona 1 to jest mala
    {
        //Nezz sto da sada uradim ovdje, jer inace CAPTURE_TIME je 30 sekundi.
  }

            PlayerTextDrawShow(playerid, capturePlayerTextDraw[playerid]);
            PlayerTextDrawShow(playerid, capturePlayerPreview[playerid]);
            ShowPlayerProgressBar(playerid, capturePlayerBar[playerid]);
            return 1;
        }
    }
return 1;
}


Tu sam stavio ovaj kod ali nezz kako dalje.


else if (captureZone[i][E_CAPTURE_ZONE_SMALL] == 1) //Ako je zona 1 to jest mala
    {
        //Nezz sto da sada uradim ovdje, jer inace CAPTURE_TIME je 30 sekundi.
  }



A taj timer od 1 jedne sekunde poziva ovu funkciju kada igrac ude u CP.

forward OnCaptureZoneUpdate(zoneid);
public OnCaptureZoneUpdate(zoneid)
{
    captureZone[zoneid][E_CAPTURE_ZONE_COUNTDOWN] += captureZone[zoneid][E_CAPTURE_ZONE_PLAYERS_IN_ZONE];

    new string[150];
    format(string, sizeof string, "Capturing %i...", CAPTURE_TIME - captureZone[zoneid][E_CAPTURE_ZONE_COUNTDOWN]);

    for (new i, j = GetPlayerPoolSize(); i <= j; i++)
    {
         if (IsPlayerInDynamicCP(i, captureZone[zoneid][E_CAPTURE_ZONE_CP]) &&
             !IsPlayerInAnyVehicle(i) &&
             GetPlayerTeam(i) == GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]))
         {
             PlayerTextDrawSetString(i, capturePlayerTextDraw[i], string);
             SetPlayerProgressBarValue(i, capturePlayerBar[i], captureZone[zoneid][E_CAPTURE_ZONE_COUNTDOWN]);
         }
    }
    if (captureZone[zoneid][E_CAPTURE_ZONE_COUNTDOWN] > CAPTURE_TIME)
    {
        GetPlayerName(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER], string, MAX_PLAYER_NAME);
        format(string, sizeof string, "* Good job soldier. You assisted %s to capture "LIGHT_GREEN"%s. +$500", string, captureZone[zoneid][E_CAPTURE_ZONE_NAME]);

        for (new i, j = GetPlayerPoolSize(); i <= j; i++)
        {
             if (IsPlayerInDynamicCP(i, captureZone[zoneid][E_CAPTURE_ZONE_CP]) &&
                 !IsPlayerInAnyVehicle(i) &&
                 GetPlayerTeam(i) == GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]))
             {
                PlayerTextDrawHide(i, capturePlayerTextDraw[i]);
                PlayerTextDrawHide(i, capturePlayerPreview[i]);
                HidePlayerProgressBar(i, capturePlayerBar[i]);

                if (i != captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER])
                {
                    SendClientMessage(i, COLOR_GREEN, string);
                    GivePlayerCash(i, 500);
                }
}
if(GetPlayerTeam(i) == GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]))
    {
format(string, sizeof(string), "** You recieved +2 score from the captured zone by your team.");
                SCM(i, COLOR_LIGHTBLUE, string);

                SetPlayerScore(i, PInfo[i][Score] += 2);
}
             if(GetPlayerTeam(i) == captureZone[zoneid][E_CAPTURE_ZONE_OWNER])
             {
format(string, sizeof(string), "** You recieved -2 score, your team lost the zone.");
                SCM(i, COLOR_LIGHTBLUE, string);

                SetPlayerScore(i, PInfo[i][Score] -= 2);
             }
        }
        SetPlayerScore(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER], GetPlayerScore(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]) + 5);

        GivePlayerCash(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER], 4500);
        format(string, sizeof string, "[ZONE] You successfully captured "COL_ORANGE"%s. "COL_WHITE"+5 Score +$4500", captureZone[zoneid][E_CAPTURE_ZONE_NAME]);
        SendClientMessage(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER], COLOR_GREEN, string);

        PInfo[captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]][ZonesCaptured]++;

        format(string, sizeof string, ""COL_ORANGE"(!) %s team have captured '%s' .", TEAM[GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER])][E_TEAM_NAME], captureZone[zoneid][E_CAPTURE_ZONE_NAME]);
        SCMToAll(-1, string);

        new text[150];
        format(text, sizeof(text), ""COL_WHITE"%s"COL_YELLOW"(%i)", captureZone[zoneid][E_CAPTURE_ZONE_NAME], zoneid);
UpdateDynamic3DTextLabelText(captureZone[zoneid][E_CAPTURE_ZONE_LABEL], TEAM[captureZone[zoneid][E_CAPTURE_ZONE_OWNER]][E_TEAM_COLOR], text);

        captureZone[zoneid][E_CAPTURE_ZONE_OWNER] = GetPlayerTeam(captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER]);
        captureZone[zoneid][E_CAPTURE_ZONE_ATTACKER] = INVALID_PLAYER_ID;
        KillTimer(captureZone[zoneid][E_CAPTURE_ZONE_TIMER]);
        GangZoneStopFlashForAll(captureZone[zoneid][E_CAPTURE_ZONE_GANGZONE]);
        GangZoneShowForAll(captureZone[zoneid][E_CAPTURE_ZONE_GANGZONE], ALPHA(TEAM[captureZone[zoneid][E_CAPTURE_ZONE_OWNER]][E_TEAM_COLOR], 100));
    }
    return 1;
}


@// xunder
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: xLanmi poslato Mart 11, 2019, 15:27:52 POSLE PODNE
Ne mozes koristiti CAPTURE_TIME KAO DEFINE , vec ti se mora time nalaziti kao varijabla u tvojoj zoni , tipa captureZone[time]
i onda uradis ovo
[pawn]else if (capture
Zone[E_CAPTURE_ZONE_SMALL] == 1) //Ako je zona 1 to jest mala
            {
                captureZone[time] = 15; // i onda pozoves onaj timer preuredis ga za ovo
           }
[/pawn]
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: pokerface poslato Mart 11, 2019, 15:47:01 POSLE PODNE
Ne može tako, jer to nije način koji ja želim. Jedino onda preostaje da se moze napraviti da svaka zona ima svoje vrijeme za capture. Npr:


{"Military Shelter", {-153.3433,2213.3953,-99.2894,2319.2996}, {-126.7931,2257.9844,28.1627}, 6, 30}, //30 sekundi



{"Surf", {-153.3433,2213.3953,-99.2894,2319.2996}, {-126.7931,2257.9844,28.1627}, 6, 15}, //15 sekundi.
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: pokerface poslato Mart 11, 2019, 18:47:24 POSLE PODNE
Evo ovako, uradio sam na ovaj način ali iz nekog razlog ne pocinje zauzimanje od 20.. nego krene 9..8.. I tako dalje. I onda mi salje ovu gore poruku a nebi trebalo.

SCM(playerid, COLOR_ORANGE_RED, "Stay in the checkpoint to for "#CAPTURE_TIME" seconds to capture the zone.");


public OnPlayerEnterDynamicCP(playerid, checkpointid)
{
for (new i; i < sizeof captureZone; i++)
    {
        if (checkpointid == captureZone[i][E_CAPTURE_ZONE_CP])
        {
            if (IsPlayerInAnyVehicle(playerid))
            {
                SendClientMessage(playerid, COLOR_TOMATO, "* You cannot capture a zone in a vehicle.");
                return 1;
            }
            if(AdminDuty[playerid] == 1)
{
    SendClientMessage(playerid, COLOR_TOMATO, "No way! You can't capture zone while on duty!");
                return 1;
    }
    if(GetPlayerTeam(playerid) == captureZone[i][E_CAPTURE_ZONE_OWNER])
{
    SCM(playerid, COLOR_ORANGE_RED, "* This zone is controlled by your team.");
break;
}
            if (captureZone[i][E_CAPTURE_ZONE_ATTACKER] == INVALID_PLAYER_ID)
            {
                if ((GetPlayerTeam(playerid) >= 0 && GetPlayerTeam(playerid) < sizeof TEAM) && TEAM[GetPlayerTeam(playerid)][E_TEAM_VALID] && GetPlayerTeam(playerid) != captureZone[i][E_CAPTURE_ZONE_OWNER])
                {
                    captureZone[i][E_CAPTURE_ZONE_ATTACKER] = playerid;
                    captureZone[i][E_CAPTURE_ZONE_PLAYERS_IN_ZONE] = 1;
                    captureZone[i][E_CAPTURE_ZONE_COUNTDOWN] = 0;
                    KillTimer(captureZone[i][E_CAPTURE_ZONE_TIMER]);
                    captureZone[i][E_CAPTURE_ZONE_TIMER] = SetTimerEx("OnCaptureZoneUpdate", 1000, true, "i", i);

                    GangZoneFlashForAll(captureZone[i][E_CAPTURE_ZONE_GANGZONE], ALPHA(TEAM[GetPlayerTeam(playerid)][E_TEAM_COLOR], 100));

                    SCM(playerid, COLOR_ORANGE_RED, "Stay in the checkpoint to for "#CAPTURE_TIME" seconds to capture the zone.");

                    new string[150];
                    format(string, sizeof string, "[ZONE] "COL_WHITE"Someone is trying to capture "OLIVE_GREEN"%s "COL_WHITE"for team "DARK_RED"%s !", captureZone[i][E_CAPTURE_ZONE_NAME], TEAM[GetPlayerTeam(playerid)][E_TEAM_NAME]);
                    SendClientMessageToAll(COLOR_DARK_RED, string);
                }
                else return 1;
            }
            else if (GetPlayerTeam(playerid) == GetPlayerTeam(captureZone[i][E_CAPTURE_ZONE_ATTACKER]))
            {
                captureZone[i][E_CAPTURE_ZONE_PLAYERS_IN_ZONE]++;

                SCM(playerid, COLOR_GREEN, "* Stay in the checkpoint to assist your teammate in capturing the area.");
            }
if (captureZone[i][E_CAPTURE_ZONE_SMALL] == 1 )
    {
    captureZone[i][E_CAPTURE_ZONE_COUNTDOWN] = 20;
    KillTimer(captureZone[i][E_CAPTURE_ZONE_TIMER]);
      captureZone[i][E_CAPTURE_ZONE_TIMER] = SetTimerEx("OnCaptureZoneUpdate", 1000, true, "i", i);
     
      SCM(playerid, COLOR_ORANGE_RED, "Stay in the checkpoint for 20 seconds to capture the zone.");
      }

            PlayerTextDrawShow(playerid, capturePlayerTextDraw[playerid]);
            PlayerTextDrawShow(playerid, capturePlayerPreview[playerid]);
            ShowPlayerProgressBar(playerid, capturePlayerBar[playerid]);
            return 1;
        }
    }
return 1;
}


if (captureZone[i][E_CAPTURE_ZONE_SMALL] == 1 )
    {
    captureZone[i][E_CAPTURE_ZONE_COUNTDOWN] = 20;
    KillTimer(captureZone[i][E_CAPTURE_ZONE_TIMER]);
      captureZone[i][E_CAPTURE_ZONE_TIMER] = SetTimerEx("OnCaptureZoneUpdate", 1000, true, "i", i);
     
      SCM(playerid, COLOR_ORANGE_RED, "Stay in the checkpoint for 20 seconds to capture the zone.");
      }
Naslov: Odg: Usporedivanje Manjih/Vecih Gangzona.
Poruka od: Jack1337 poslato Mart 11, 2019, 20:03:51 POSLE PODNE
Citat: Chuffy poslato Mart 10, 2019, 13:03:34 POSLE PODNE
To sam gore I napomenuo da želim tako, ali mi je već default zauzimanje 30 sekundi. A da radim novi timer se ne isplati jer već imam jedan koji je dovoljan od 1 sekunde.

#define CAPTURE_TIME 30
Pa onda ti uzmes i napravis jos define-a tipa capture_time_small