GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: tudvari - 2014. március 23. - 23:27:25

Cím: Ciklushiba
Írta: tudvari - 2014. március 23. - 23:27:25
Sziasztok!
Ez miért nem mûködik?
A lényege az,hogy beírsz egy V-s kocsi ID-t,és hozzád teleportálja.De minden ID-re azt írja,hogy nincs ilyen.Szerintem jónak kéne lennie,de úgy látszik mégsem.Elõre is köszönöm a segítséget.
 
if (sscanf(params,\"i\", id)) return SendClientMessage(playerid,SZURKE, \"Használat: /getv [V-s kocsi ID-je]\");
   {
      for(new i=0;i>=MAX_VEHICLES;i++)
      {
          if(JarmuInfo[iD] == id)
          {
            veh = i;
          }
      }
      if(veh == 0) return SendClientMessage(playerid,HIBA,\"Nincs ilyen V-s kocsi!\");
      new Float:x,Float:y,Float:z;
      GetPlayerPos(playerid,x,y,z);
      SetVehiclePos(veh,x,y,z);
      new string[256];
      format(string,sizeof(string),\"%s magához teleportáltatta a %d-s ID-jû V-s kocsit!\",GetPlayerNameEx(playerid),id);
      AdminnakUzenet(VNARANCS,string,2);
      format(string,sizeof(string),\"Magadhoz teleportáltad a %d-s ID-jû V-s kocsi!\",id);
      SendClientMessage(playerid,VKEK,string);
 
   }
Cím: Ciklushiba
Írta: Konstantin - 2014. március 23. - 23:37:51
Nem oldja meg a hibát(bár lehet), használj foreach-ot, sokkal gyorsabb ciklust, és nem kell semmit létrehoznod, csupán csinálsz iterátort, beleírod a jármût és már vonatkozhat az összes valódi jármûre.
http://sampforum.hu/index.php?topic=12093.0
Cím: Ciklushiba
Írta: Dfoglalo - 2014. március 23. - 23:48:34
Idézetet írta: Konstantin date=1395614271\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47340\" data-ipsquote-contentclass=\"forums_Topic
Nem oldja meg a hibát(bár lehet), használj foreach-ot, sokkal gyorsabb ciklust, és nem kell semmit létrehoznod, csupán csinálsz iterátort, beleírod a jármût és már vonatkozhat az összes valódi jármûre.
http://sampforum.hu/index.php?topic=12093.0
 
A foreach is for ciklust használ...


Esetleg veh == invaild vehicle id, vagy ugyenz id == -vel?
Cím: Ciklushiba
Írta: tudvari - 2014. március 24. - 00:03:38
Az nem jó,mert itt nem vehicleid-t nézek.Hanem a jármûveknek csináltam egy változót,ami a V-s kocsi ID-jük.
0 ha normál kocsi(frakció,munka stb.),és valamilyen más pozitív szám,ha van tulajdonosa.
Cím: Ciklushiba
Írta: Konstantin - 2014. március 24. - 00:24:38
Idézetet írta: Dfoglalo date=1395614914\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47340\" data-ipsquote-contentclass=\"forums_Topic


Nem oldja meg a hibát(bár lehet), használj foreach-ot, sokkal gyorsabb ciklust, és nem kell semmit létrehoznod, csupán csinálsz iterátort, beleírod a jármût és már vonatkozhat az összes valódi jármûre.
http://sampforum.hu/index.php?topic=12093.0
 
A foreach is for ciklust használ...


Esetleg veh == invaild vehicle id, vagy ugyenz id == -vel?
 
[/quote]
hatalmas különbség van ez:
foreach(Playeri, i)

 és ez:
for(new i=0;i>=MAX_PLAYERS;i++)

 sokkal gyorsabb a for ciklusnál, de a foreach nem csak erre jó, de ha a kérdezõ is ezt használná könnyebb dolga is lenne.
Cím: Ciklushiba
Írta: tudvari - 2014. március 24. - 01:03:28
De attól még nem lesz jó a scriptem.
Ui.: Ez az iterátor pontosan mit is takar?Rendben,hogy ha az iterátor Player/NPC,akkor playerekön,npc-ken fut le,de mi máson lehet még?
Cím: Ciklushiba
Írta: divkn - 2014. március 24. - 01:21:27
Nem tudom hogy hogyan oldottad meg, de nincs szükség szerintem a ciklusra.
 

CMD:getv(playerid,params[])
{
    new id;
    if (sscanf(params,\"i\", id)) return SendClientMessage(playerid,SZURKE, \"Használat: /getv [V-s kocsi ID-je]\");
    // Ha megadott jármû létezik-e és V-s kocsi, akkor...
    if(IsValidVehicle(id) && bool:JarmuInfo[id][Vs_kocsi] == true)
    {
        new Float:p[3];
        GetPlayerPos(playerid,p[0],p[1],p[2]);
        SetVehiclePos(id,p[0],p[1],p[2]);
        // ...
    }
    return 1;
}

 


Foreach csak azért gyorsabb, mert csak annyiszor ismétlõdik, amennyi értéket megadtál/megadott a szerver.
Errõl van egy egszerûbb változata. http://sampforum.hu/index.php?topic=49300
Cím: Ciklushiba
Írta: Kovacs_Richard - 2014. március 24. - 01:26:25
for(new i=0;i>=MAX_VEHICLES;i++)

 
nem tudom hogy  címet elolvasva nektek miért nem bökte ki a szemeteket (fõleg a téma nyitónak)...én ránézésbõl megláttam hogy ennek nem így kéne kinéznie!
 
new i=0;i>=MAX_VEHICLES

 
i = 0 és a ciklus addig fut amíg i értéke 2000 VAGY ANNÁL NAGYOBB!
ja és ide raknék 1 break-et: (ha már úgyis meg van a jármû azonosító ne nézze tovább...
 
veh = i;
Cím: Ciklushiba
Írta: tudvari - 2014. március 24. - 09:13:46
Jaaaj köszi :D::D:D
Nem vettem észre xd
Egyébként kell oda ciklus.
Mert nem vehicleid-t ír be a játékos,hanem a V-s kocsijáak a számát,ami különbözik a vehicleid-tõl.És a játékos csak a kosijának a számát tudja,a vehicleid-t nem.
Köszönöm a segítséget.+1
Zárom!
Cím: Ciklushiba
Írta: tudvari - 2014. március 23. - 23:27:25
Sziasztok!
Ez miért nem mûködik?
A lényege az,hogy beírsz egy V-s kocsi ID-t,és hozzád teleportálja.De minden ID-re azt írja,hogy nincs ilyen.Szerintem jónak kéne lennie,de úgy látszik mégsem.Elõre is köszönöm a segítséget.
 
if (sscanf(params,\"i\", id)) return SendClientMessage(playerid,SZURKE, \"Használat: /getv [V-s kocsi ID-je]\");
   {
      for(new i=0;i>=MAX_VEHICLES;i++)
      {
          if(JarmuInfo[iD] == id)
          {
            veh = i;
          }
      }
      if(veh == 0) return SendClientMessage(playerid,HIBA,\"Nincs ilyen V-s kocsi!\");
      new Float:x,Float:y,Float:z;
      GetPlayerPos(playerid,x,y,z);
      SetVehiclePos(veh,x,y,z);
      new string[256];
      format(string,sizeof(string),\"%s magához teleportáltatta a %d-s ID-jû V-s kocsit!\",GetPlayerNameEx(playerid),id);
      AdminnakUzenet(VNARANCS,string,2);
      format(string,sizeof(string),\"Magadhoz teleportáltad a %d-s ID-jû V-s kocsi!\",id);
      SendClientMessage(playerid,VKEK,string);
 
   }
Cím: Ciklushiba
Írta: Konstantin - 2014. március 23. - 23:37:51
Nem oldja meg a hibát(bár lehet), használj foreach-ot, sokkal gyorsabb ciklust, és nem kell semmit létrehoznod, csupán csinálsz iterátort, beleírod a jármût és már vonatkozhat az összes valódi jármûre.
http://sampforum.hu/index.php?topic=12093.0
Cím: Ciklushiba
Írta: Dfoglalo - 2014. március 23. - 23:48:34
Idézetet írta: Konstantin date=1395614271\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47340\" data-ipsquote-contentclass=\"forums_Topic
Nem oldja meg a hibát(bár lehet), használj foreach-ot, sokkal gyorsabb ciklust, és nem kell semmit létrehoznod, csupán csinálsz iterátort, beleírod a jármût és már vonatkozhat az összes valódi jármûre.
http://sampforum.hu/index.php?topic=12093.0
 
A foreach is for ciklust használ...


Esetleg veh == invaild vehicle id, vagy ugyenz id == -vel?
Cím: Ciklushiba
Írta: tudvari - 2014. március 24. - 00:03:38
Az nem jó,mert itt nem vehicleid-t nézek.Hanem a jármûveknek csináltam egy változót,ami a V-s kocsi ID-jük.
0 ha normál kocsi(frakció,munka stb.),és valamilyen más pozitív szám,ha van tulajdonosa.
Cím: Ciklushiba
Írta: Konstantin - 2014. március 24. - 00:24:38
Idézetet írta: Dfoglalo date=1395614914\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47340\" data-ipsquote-contentclass=\"forums_Topic


Nem oldja meg a hibát(bár lehet), használj foreach-ot, sokkal gyorsabb ciklust, és nem kell semmit létrehoznod, csupán csinálsz iterátort, beleírod a jármût és már vonatkozhat az összes valódi jármûre.
http://sampforum.hu/index.php?topic=12093.0
 
A foreach is for ciklust használ...


Esetleg veh == invaild vehicle id, vagy ugyenz id == -vel?
 
[/quote]
hatalmas különbség van ez:
foreach(Playeri, i)

 és ez:
for(new i=0;i>=MAX_PLAYERS;i++)

 sokkal gyorsabb a for ciklusnál, de a foreach nem csak erre jó, de ha a kérdezõ is ezt használná könnyebb dolga is lenne.
Cím: Ciklushiba
Írta: tudvari - 2014. március 24. - 01:03:28
De attól még nem lesz jó a scriptem.
Ui.: Ez az iterátor pontosan mit is takar?Rendben,hogy ha az iterátor Player/NPC,akkor playerekön,npc-ken fut le,de mi máson lehet még?
Cím: Ciklushiba
Írta: divkn - 2014. március 24. - 01:21:27
Nem tudom hogy hogyan oldottad meg, de nincs szükség szerintem a ciklusra.
 

CMD:getv(playerid,params[])
{
    new id;
    if (sscanf(params,\"i\", id)) return SendClientMessage(playerid,SZURKE, \"Használat: /getv [V-s kocsi ID-je]\");
    // Ha megadott jármû létezik-e és V-s kocsi, akkor...
    if(IsValidVehicle(id) && bool:JarmuInfo[id][Vs_kocsi] == true)
    {
        new Float:p[3];
        GetPlayerPos(playerid,p[0],p[1],p[2]);
        SetVehiclePos(id,p[0],p[1],p[2]);
        // ...
    }
    return 1;
}

 


Foreach csak azért gyorsabb, mert csak annyiszor ismétlõdik, amennyi értéket megadtál/megadott a szerver.
Errõl van egy egszerûbb változata. http://sampforum.hu/index.php?topic=49300
Cím: Ciklushiba
Írta: Kovacs_Richard - 2014. március 24. - 01:26:25
for(new i=0;i>=MAX_VEHICLES;i++)

 
nem tudom hogy  címet elolvasva nektek miért nem bökte ki a szemeteket (fõleg a téma nyitónak)...én ránézésbõl megláttam hogy ennek nem így kéne kinéznie!
 
new i=0;i>=MAX_VEHICLES

 
i = 0 és a ciklus addig fut amíg i értéke 2000 VAGY ANNÁL NAGYOBB!
ja és ide raknék 1 break-et: (ha már úgyis meg van a jármû azonosító ne nézze tovább...
 
veh = i;
Cím: Ciklushiba
Írta: tudvari - 2014. március 24. - 09:13:46
Jaaaj köszi :D::D:D
Nem vettem észre xd
Egyébként kell oda ciklus.
Mert nem vehicleid-t ír be a játékos,hanem a V-s kocsijáak a számát,ami különbözik a vehicleid-tõl.És a játékos csak a kosijának a számát tudja,a vehicleid-t nem.
Köszönöm a segítséget.+1
Zárom!