foreach

Započeo M.Bond, Februar 03, 2022, 00:28:55 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

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]
Poslednja Izmena: Februar 04, 2022, 22:00:41 POSLE PODNE od 'xza

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.

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...

Sad kada bolje pogledam upravu si, ali sto bi ta dodatna provera pravila problem. Testiracu svakako.

Ne znam kako ti funkcionise taj sistem, ali sam siguran da ti taj foreach ni ne treba  :D :D
Poslednja Izmena: Februar 03, 2022, 01:13:53 PRE PODNE od Fr0z3n

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).

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]
Poslednja Izmena: Februar 03, 2022, 01:32:34 PRE PODNE od Fr0z3n


Zar ne treba onda !IsPlayerConnected , pomeso si dole varijable kome ce sta slati al dobro nije to problem.