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: solyom1992 - 2013. november 20. - 17:10:09

Cím: nextspec
Írta: solyom1992 - 2013. november 20. - 17:10:09
hi találtam egy spec \"rendszert\" de csak a legnagyobb és a leg kissebb játékos id-k között váltogat mi lehet vele a gond?
 

forward SpectateOn(playerid);
public SpectateOn(playerid)
{
TogglePlayerSpectating(playerid, 1);
for(new i=0; i   {
    if(IsPlayerConnected(i))
    {
       SpectatedPlayer[playerid] = i;
   PlayerSpectatePlayer(playerid, i);
}
}
IsPlayerSpectating[playerid] = true;
new str[128];
format(str, 128, \"You are now spectating %s (ID:%d).\", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
SendClientMessage(playerid, colorSPECTATE, str);
}
forward SpectateOff(playerid);
public SpectateOff(playerid)
{
TogglePlayerSpectating(playerid, 0);
SpectatedPlayer[playerid] = 0;
IsPlayerSpectating[playerid] = false;
SendClientMessage(playerid, colorSPECTATE, \"You stopped spectating.\");
}
forward SpectateNext(playerid);
public SpectateNext(playerid)
{
for(new i=SpectatedPlayer[playerid]; i   {
if(i==MAX_PLAYERS) i=0;
if(IsPlayerConnected(i))
{
   PlayerSpectatePlayer(playerid, i);
   SpectatedPlayer[playerid] = i;
}
}
new str[128];
format(str, 128, \"You are now spectating %s (ID:%d).\", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
SendClientMessage(playerid, colorSPECTATE, str);
return 1;
}
forward SpectatePrevious(playerid);
public SpectatePrevious(playerid)
{
for(new i=SpectatedPlayer[playerid]; i>-1; i--)
{
    if(i==-1) i=MAX_PLAYERS;
if(IsPlayerConnected(i))
{
   PlayerSpectatePlayer(playerid, i);
   SpectatedPlayer[playerid] = i;
}
}
new str[128];
format(str, 128, \"You are now spectating %s (ID:%d).\", GetName(SpectatedPlayer[playerid]), SpectatedPlayer[playerid]);
SendClientMessage(playerid, colorSPECTATE, str);
return 1;
}
Cím: nextspec
Írta: Kovacs_Richard - 2013. november 21. - 07:54:19
if(IsPlayerConnected(i))
{
   PlayerSpectatePlayer(playerid, i);
   SpectatedPlayer[playerid] = i;
}

 
helyett: (2 helyen is szerepel!)
 
if(IsPlayerConnected(i))
{
   PlayerSpectatePlayer(playerid, i);
   SpectatedPlayer[playerid] = i;
   break;
}

 
azért kell ez a break oda mert eddig lefutott végig a ciklus, tehát végig ment az összes játékoson és mindre beállította a specet de ugye csak egy embert lehet specelni ezért az utolsó jött ki mindig (elõrõl és hátulról nézve), ez a break megszakítja az 1. talált játékosnál
és mégegy megjegyzés:
 
new str[128];
format(str, 128, \"You are now spectating %s (ID:%d).\"

 
jelezném feléd, hogy 30+20+3+1=54 lehet ennek a stringnek a max hossza szóval felesleges 128 cella
 
You are now spectating  (ID:).    +    MAX_PLAYER-NAME    +    ID:999    +    szöveg végét jelzõ \\0 karakter

 
csak jeleztem, ha nem szeretnéd feleslegesen lefoglalni a ramot :)
Cím: nextspec
Írta: solyom1992 - 2013. november 21. - 10:39:50
igysem jó :/ igy meg egy id-nél leragad és kész
Cím: nextspec
Írta: Kovacs_Richard - 2013. november 22. - 07:36:50
ja igen, mivel a 2 ciklust módosítani kell, mert a specelt játékostól kezdi az ellenõrzést:
NEXT:
 
for(new i=SpectatedPlayer[playerid]+1; i
PREV:
[code=pawn]for(new i=SpectatedPlayer[playerid]-1; i
Ezt is módosítanám, mivel saját magára is ráugrana a spec:
[code=pawn]if(IsPlayerConnected(i))
Cím: nextspec
Írta: solyom1992 - 2013. november 22. - 11:06:12
köszönöm a segítséget amint tudom tesztelni megfelelõen mondom az eredményt xd