Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: M.Bond poslato Februar 03, 2022, 00:28:55 PRE PODNE

Naslov: foreach
Poruka od: M.Bond poslato Februar 03, 2022, 00:28:55 PRE PODNE
Problem: Imam problem sa foreachom. Detaljno cu objasniti sada. Ovo je deo skripte mobitela sa tdovima. Testirao sam ovo sa troje ljudi. Ukoliko ID veci od 0 zove ID 0 sve radi kako treba. Problem nastaje kada ID 0 zove druge igrace koji su IDevi veci od 0. I takodje nastaje kada IDovi veci od 0 se medjusobno zovu. Nadam se da ste skapirali. Problem je taj da im baca eror "Taj igrac nije na serveru!". Sada ovako, "new broj = PlayerInfo[playerid][pImenik1Broj];" ovo je ispravno uporedjivao sam i sve je to dobro. Kolko sam ja razumeo problem je sa forechom. Da li neko ima neko resenje ?
Deo skripte: [pawn]   if(playertextid == MobitelImenikTD41[playerid])
   {
      if(PlayerInfo[playerid][pImenik1Broj] == 0) return SendErrorMessage(playerid, "Vi nemate kontakt pod ovim slotom!");
      if(TelefonZvoni[playerid] == true) return SendErrorMessage(playerid, "Telefon vam zvoni, prvo se javite ili prekinite!");
      new broj = PlayerInfo[playerid][pImenik1Broj];
      new string[128];
      UgasiMobitelBackGround(playerid);
      foreach(Player, i)
      {
         if(IsPlayerConnected(i))
         {
            if(broj == PlayerInfo[pBrojTelefona])
            {
               if(TelefonZvoni == true) return SendErrorMessage(playerid, "Tom igracu vec zvoni telefon!");
                  if(TelefonRazgovor != -1) return SendErrorMessage(playerid, "Taj igrac vec prica na telefon!");
               TelefonRazgovor = playerid;
               TelefonRazgovor[playerid] = i;
               TelefonZvoni = true;
               format(string, sizeof(string), "{999793}[MOBILE] "BELA"Zvoni vam mobilni telefon | Za javljanje /p, da prekines /h | Pozivatelj : %d", PlayerInfo[playerid][pBrojTelefona]);
               SCM(i, -1, string);
                  format(string,sizeof(string), "* Mobilni od %s zvoni.", GetName(i));
               ProxDetector(10.0, i, string, proxy_boja,proxy_boja,proxy_boja,proxy_boja,proxy_boja);
               format(string,sizeof(string), "* %s zove na telefon.", GetName(playerid));
               ProxDetector(10.0, playerid, string, proxy_boja,proxy_boja,proxy_boja,proxy_boja,proxy_boja);
               SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USECELLPHONE);
               UgasiMobitelBackGround(playerid);
               return 1;
            } else return SendErrorMessage(playerid, "Taj igrac nije na serveru!");
         }
      }
   }[/pawn]
Naslov: Odg: foreach
Poruka od: M.Bond poslato Februar 03, 2022, 00:35:15 PRE PODNE
U sustini ova varijabla "broj" je broj telefona tog lika sto mu je u kontaktu. Moram da napomenem. To sve radi perfektno uporedjivao sam. Problem je sto foreach kao da u ovom primerom ima propusta. Naveo sam gore.
Naslov: Odg: foreach
Poruka od: Fr0z3n poslato Februar 03, 2022, 00:59:58 PRE PODNE
A sto bi izbacivalo da li je igrac na serveru za proveru na neki drugi zahtev, ako nije na serveru nije, nema potrebe za jos jedan if
Ne razumem zasto sve morate da iskomplikujete bez ikakve logike...
Naslov: Odg: foreach
Poruka od: M.Bond poslato Februar 03, 2022, 01:07:03 PRE PODNE
Sad kada bolje pogledam upravu si, ali sto bi ta dodatna provera pravila problem. Testiracu svakako.
Naslov: Odg: foreach
Poruka od: Fr0z3n poslato Februar 03, 2022, 01:12:26 PRE PODNE
Ne znam kako ti funkcionise taj sistem, ali sam siguran da ti taj foreach ni ne treba  :D :D
Naslov: Odg: foreach
Poruka od: M.Bond poslato Februar 03, 2022, 01:15:13 PRE PODNE
Nisi razumeo onda poentu ovoga. Funkcijom foreach pretrazujem sve igrace koji su online da li je njihov broj telefona jednak broju iz imenika. A problemi nastaju (imas gore).
Naslov: Odg: foreach
Poruka od: Fr0z3n poslato Februar 03, 2022, 01:30:59 PRE PODNE
try this!

[pawn]if(playertextid == MobitelImenikTD41[playerid])
{
   if(PlayerInfo[playerid][pImenik1Broj] == 0)
      return SendErrorMessage(playerid, "Vi nemate kontakt pod ovim slotom!");

   if(TelefonZvoni[playerid])
      return SendErrorMessage(playerid, "Telefon vam zvoni, prvo se javite ili prekinite!");

   new string[22 + MAX_PLAYER_NAME],
      broj = PlayerInfo[playerid][pImenik1Broj];

   UgasiMobitelBackGround(playerid);

   foreach(Player, i)
   {

      if(broj != PlayerInfo[pBrojTelefona])
         return false;

      else continue;

      if(IsPlayerConnected(i))
         return SendErrorMessage(playerid, "Taj igrac nije connectovan!")

      if(TelefonZvoni)
         return SendErrorMessage(playerid, "Tom igracu vec zvoni telefon!");

        if(TelefonRazgovor != -1)
           return SendErrorMessage(playerid, "Taj igrac vec prica na telefon!");

      TelefonRazgovor = playerid;
      TelefonRazgovor[playerid] = i;
      TelefonZvoni = !TelefonZvoni; // true - fasle / false - true

      va_SendClientMessage(playerid, 0XFFFFFFFF, "{999793}[MOBILE] "BELA"Zvoni vam mobilni telefon | Za javljanje /p, da prekines /h | Pozivatelj : %d", PlayerInfo[playerid][pBrojTelefona]);
        format(string,sizeof(string), "* Mobilni od %s zvoni.", GetName(i));
      ProxDetector(10.0, i, string, proxy_boja,proxy_boja,proxy_boja,proxy_boja,proxy_boja);
      format(string,sizeof(string), "* %s zove na telefon.", GetName(playerid));
      ProxDetector(10.0, playerid, string, proxy_boja,proxy_boja,proxy_boja,proxy_boja,proxy_boja);
      SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USECELLPHONE);
      UgasiMobitelBackGround(playerid);
   }
}[/pawn]
Naslov: Odg: foreach
Poruka od: M.Bond poslato Februar 03, 2022, 01:42:14 PRE PODNE
Vazi testiracu
Naslov: Odg: foreach
Poruka od: M.Bond poslato Februar 03, 2022, 01:48:47 PRE PODNE
Zar ne treba onda !IsPlayerConnected , pomeso si dole varijable kome ce sta slati al dobro nije to problem.
Naslov: Odg: foreach
Poruka od: M.Bond poslato Februar 03, 2022, 12:05:02 POSLE PODNE
Nasao sam resenje.