Sistem pljacke

Započeo DomacX3, Jun 09, 2019, 20:21:17 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Problem(error/warning): Znaci napravio sam sistem pljackanja koji bi kada se ukuca /pljacka provjerio u kojem enterijeru je igrac. Provjerio bi listu enterijera preko petlje te bi se zapocela pljacka kada bi pronasao prvi ID. To je radilo savrseno, no jedan problem je bio to sto bi mogao robati neke enterijere koje ne bi smio (npr. CJ-eva kuca, policijska stanica, itd.). Zato sam odlucio napraviti jos jednu listu, a to su koordinate od svakog enterijera koji se moze robati. Napravio sam da kada se kuca /pljacka provjeri da li je igrac blizu tih koordinata, i ako je zapocne se pljacka. No, iz nekog razloga, server mi samo vrati "SERVER: Unknown command", a kada npr. probam robati kada nisam u enterijeru ili sam policajac itd komanda normalno vrati porukud da ne mogu robati. Postavio sam jedan thread na SAMP forumima, no tamo nitko nije dosao do rjesenja pa se nadam da ce mi tu netko pomoci (posto je skripta ipak na balkanskom pa ce vam biti lakse razumjeti :) )
Deo skripte: [pawn]
new EnterijerPljacka[]={17, 10, 18, 16, 4, 6, 1, 7, 3, 15, 14, 5, 11, 9, 2};
new Float:EnterijerLokacije[][] =
{
    {-25.884498,-185.868988,1003.546875},
    {6.091179,-29.271898,1003.549438},
    {-30.946699,-89.609596,1003.546875},
    {-25.132598,-139.066986,1003.546875},
    {-27.312299,-29.277599,1003.557250},
    {-26.691598,-55.714897,1003.546875},
    {286.148986,-40.644397,1001.515625},
    {286.800994,-82.547599,1001.515625},
    {296.919982,-108.071998,1001.515625},
    {314.820983,-141.431991,999.601562},
    {316.524993,-167.706985,999.593750},
    {833.269775,10.588416,1004.179687},
    {-103.559165,-24.225606,1000.718750},
    {-2240.468505,137.060440,1035.414062},
    {207.737991,-109.019996,1005.132812},
    {204.332992,-166.694992,1000.523437},
    {207.054992,-138.804992,1003.507812},
    {203.777999,-48.492397,1001.804687},
    {226.293991,-7.431529,1002.210937},
    {161.391006,-93.159156,1001.804687},
    {493.390991,-22.722799,1000.679687},
    {501.980987,-69.150199,998.757812},
    {-227.027999,1401.229980,27.765625},
    {457.304748,-88.428497,999.554687},
    {454.973937,-110.104995,1000.077209},
    {435.271331,-80.958938,999.554687},
    {681.557861,-455.680053,-25.609874},
    {375.962463,-65.816848,1001.507812},
    {369.579528,-4.487294,1001.858886},
    {373.825653,-117.270904,1001.499511},
    {381.169189,-188.803024,1000.632812},
    {1212.019897,-28.663099,1000.953125},
    {761.412963,1440.191650,1102.703125},
    {1204.809936,-11.586799,1000.921875},
    {-2640.762939,1406.682006,906.460937}
};

CMD:pljacka(playerid, params[])
{
   new vijesti[128];
   new ime[MAX_PLAYER_NAME];
   GetPlayerName(playerid, ime, sizeof(ime));
   print("Komanda je upisana...");
   
   if(PlayerInfo[playerid][pTeam] == 1) return SCM(playerid, -1, "{ff0000}PLJACKA:{FFFFFF} Vi ste policajac! Ne mozete pljackati ducane!");
   print("Provjereno: Da li je policajac?");
   if(GetPlayerInterior(playerid) == 0) return SCM(playerid, -1, "{ff0000}PLJACKA: {FFFFFF}Morate biti u ducanu koji se moze pljackati!");
   print("Provjereno: Da li je interior 0?");
   if(CanRob[playerid] == 0) return SCM(playerid, -1, "{ff0000}PLJACKA:{FFFFFF} Morate pricekati prije nego sto biste opet pljackali!");
   print("Provjereno: Moze li igrac pljackati?");
   for(new i = 0; i < sizeof(EnterijerLokacije); i++)
   {
      print("Petlja se pokrece...");
       if(IsPlayerInRangeOfPoint(playerid, 50.0, EnterijerLokacije
  • , EnterijerLokacije[1], EnterijerLokacije[2]))
            {
             print("Zapocinje se pljacka nigeri!!!!! NAPOKON!");
             if(GetPlayerWeapon(playerid) == 0) return SCM(playerid, -1, "{ff0000}PLJACKA:{FFFFFF} Morate imati oruzije u ruci za pljacku!");
             SetTimerEx("PljackaVrijeme", 120000, false, "i", playerid);
             PlayAudioStreamForPlayer(playerid, "https://www.iradeo.com/stream/157252.pls");
             VrijemePljacke = 30;
             CanRob[playerid] = 0;
             UsredPljacke[playerid] = 1;
             TimerPljacka = SetTimer("Pljackanje", 1000, true);
             PlayerInfo[playerid][pWanted] += 4;
             SetPlayerWantedLevel(playerid, PlayerInfo[playerid][pWanted]);
             SCM(playerid, -1, "{ff0000}PLJACKA:{ffffff} Zapoceli ste pljacku! Pricekajte 30 sekundi...");
             SCM(playerid, -1, "{ff0000}PLJACKA:{ffffff} Kamere su vas uhvatile, te je pljacka bila prijavljena policiji!");
             SCM(playerid, -1, "{ff0000}PLJACKA:{ffffff} Vas wanted level je sada veci za {FF0000}4!");
             format(vijesti, sizeof(vijesti), "{00a9ff}VIJESTI: {00bbff}%s je poceo/la pljackati ducan/kucu. Pljacka je prijavljena policiji!", ime);
             SetPlayerShopName(playerid,"");
             SendClientMessageToAll(-1, vijesti);
             break;
          }
          else return SCM(playerid, -1, "{FF0000}PLJACKA: {FFFFFF}Ovaj biznis ne mozete pljackati!");
       }
       
       return 1;
    }
    [/pawn]
    Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [ code ]Ne crasha mi sever.[ /code ]
    Slika/video ingame problema(obavezno ako je ingame problem): Sumnjam da je potrebno. Udjem u enterijer i kada kucam /pljacka pise mi "SERVER: Unknown command" . Takodjer, u konzoli mi zadnje vrati "Petlja se pokrece..." kao sto se vidi u 'print' funkciji.

Ne možeš da koristiš else return kod petlji ako barem hoćeš da se izvrše ..
Nema potrebe za toliki range oko provere igračeve pozicije.
Upravo sam testirao kod i radi savršeno kod mene .

[pawn]
IsPlayerNearRobLocation(playerid)
{
    for(new p = 0; p < sizeof(EnterijerLokacije); p++)
    {
        if(IsPlayerInRangeOfPoint(playerid, 30.0, EnterijerLokacije[p][0], EnterijerLokacije[p][1], EnterijerLokacije[p][2])) return 1;
    }
    return 0;
}

if(!IsPlayerNearRobLocation(playerid))
    return SendClientMessage(playerid, -1, "Ovaj biznis se ne mozes opljackati ili niste na odgovarajucoj lokaciji !");

[/pawn]
Poslednja Izmena: Jun 09, 2019, 21:58:35 POSLE PODNE od Terzic

Citat: Terzic poslato Jun 09, 2019, 21:56:06 POSLE PODNE
Ne možeš da koristiš else return kod petlji ako barem hoćeš da se izvrše ..
Nema potrebe za toliki range oko provere igračeve pozicije.
Upravo sam testirao kod i radi savršeno kod mene .

[pawn]
IsPlayerNearRobLocation(playerid)
{
    for(new p = 0; p < sizeof(EnterijerLokacije); p++)
    {
        if(IsPlayerInRangeOfPoint(playerid, 30.0, EnterijerLokacije[p][0], EnterijerLokacije[p][1], EnterijerLokacije[p][2])) return 1;
    }
    return 0;
}

if(!IsPlayerNearRobLocation(playerid))
    return SendClientMessage(playerid, -1, "Ovaj biznis se ne mozes opljackati ili niste na odgovarajucoj lokaciji !");

[/pawn]

Brt hvala ti puno na odgovoru, ali ako nije problem mozes li mi objasniti kakva je to funkcija "IsPlayerNearRobLocation". Sutra kad dodjem doma cu isprobati skriptu. :)

Citat: DomacX3 poslato Jun 09, 2019, 23:07:51 POSLE PODNE
Brt hvala ti puno na odgovoru, ali ako nije problem mozes li mi objasniti kakva je to funkcija "IsPlayerNearRobLocation". Sutra kad dodjem doma cu isprobati skriptu. :)
Mozes i bez nje ali ako koristis negde jos bilo bi pozeljno. Ona ti jednostavno proverava da li je igrac na toj poziciji ili ne ..

Citat: Terzic poslato Jun 09, 2019, 23:19:48 POSLE PODNE
Mozes i bez nje ali ako koristis negde jos bilo bi pozeljno. Ona ti jednostavno proverava da li je igrac na toj poziciji ili ne ..

Aa znaci  tu funkciju mogu staviti ovako npr.
[pawn]
stock IsPlayerNearRobLocation(playerid)
{
//blablabla
}
[/pawn]

I onda ga tako koristiti? Ako da, onda se slazem da bi to bilo vrlo korisno :) Budem to sutra isprobao pa ti kazem kako radi. Jos jednom hvala!

Citat: DomacX3 poslato Jun 09, 2019, 23:23:43 POSLE PODNE
Aa znaci  tu funkciju mogu staviti ovako npr.
[pawn]
stock IsPlayerNearRobLocation(playerid)
{
//blablabla
}
[/pawn]

I onda ga tako koristiti? Ako da, onda se slazem da bi to bilo vrlo korisno :) Budem to sutra isprobao pa ti kazem kako radi. Jos jednom hvala!
Da, to koristi ako pozivas vise puta. I procitaj razliku izmedju stocka i plain funkcija

Citat: Terzic poslato Jun 09, 2019, 23:29:17 POSLE PODNE
Da, to koristi ako pozivas vise puta. I procitaj razliku izmedju stocka i plain funkcija

U redu, puno ti hvala! :)

Citat: Terzic poslato Jun 09, 2019, 21:56:06 POSLE PODNE
Ne možeš da koristiš else return kod petlji ako barem hoćeš da se izvrše ..
Nema potrebe za toliki range oko provere igračeve pozicije.
Upravo sam testirao kod i radi savršeno kod mene .

[pawn]
IsPlayerNearRobLocation(playerid)
{
    for(new p = 0; p < sizeof(EnterijerLokacije); p++)
    {
        if(IsPlayerInRangeOfPoint(playerid, 30.0, EnterijerLokacije[p][0], EnterijerLokacije[p][1], EnterijerLokacije[p][2])) return 1;
    }
    return 0;
}

if(!IsPlayerNearRobLocation(playerid))
    return SendClientMessage(playerid, -1, "Ovaj biznis se ne mozes opljackati ili niste na odgovarajucoj lokaciji !");

[/pawn]

BRATE HVALA TI PUNO RADI BEZ PROBLEMA!!!!! :D :D Ne znas koliko sam zahvalan s ovim sam se mucio nekoliko dana! :D