Jump to content
Geplaatst:
comment_1970081

Ik heb het spectate systeem van Ladmin4v2 gebruikt voor mijn gamemode maar het spectate systeem werkt niet goed op mijn gamemode =/

ID 0 crasht de hele server als hij een andere persoon wilt spectaten.

Edit:

Ik heb mijn server met meer dan 4 mensen getest en nog steeds ID 0 crasht de hele server =/

Ik dacht om iets anders te proberen maar ik weet niet hoe dat moet.

Wat ik wil doen is:

EDIT:

FIXED!

//On Top
#define isPlaying 1
#define isDead 2

static gTeam[MAX_PLAYERS];

//OnPlayerSpawn
gTeam[playerid] = isPlaying;

//OnPlayerDeath
gTeam[playerid] = isDead;

//En als die gaat spectaten dan wil ik dit veranderen:
for(new x=PlayerInfo[playerid][specID]+1; x<=MAX_PLAYERS; x++)

naar

for(new x=isPlaying+1; x<=MAX_PLAYERS; x++)
//Maar ik weet niet of ik daar IsPlaying moet schrijven of gTeam[x] == isPlaying of iets anders?

script:

//OnTop of script
enum PlayerData
{
SpecID
}
new PlayerInfo[MAX_PLAYERS][PlayerData];

//somewhere in ur script
stock StartSpectate(playerid, specplayerid)
{
for(new x=0; x<MAX_PLAYERS; x++) {
 if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && PlayerInfo[x][specID] == playerid) {
 AdvanceSpectate(x);
}
}

SetPlayerInterior(playerid,GetPlayerInterior(specplayerid));
TogglePlayerSpectating(playerid, 1);
if(IsPlayerInAnyVehicle(specplayerid))
{
PlayerSpectateVehicle(playerid, GetPlayerVehicleID(specplayerid));
}
else
{
PlayerSpectatePlayer(playerid, specplayerid);
}
return 1;
}

stock StopSpectate(playerid)
{
TogglePlayerSpectating(playerid, 0);
return 1;
}

stock AdvanceSpectate(playerid)
{
if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && PlayerInfo[playerid][specID] != INVALID_PLAYER_ID)
{
 for(new x=PlayerInfo[playerid][specID]+1; x<=MAX_PLAYERS; x++)
{
 if(x >= MAX_PLAYERS) x = 0;
	 if(IsPlayerConnected(x) && x != playerid)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && PlayerInfo[x][specID] != INVALID_PLAYER_ID)
{
 continue;
}
else
{
 StartSpectate(playerid, x);
 break;
}
}
}
}
return 1;
}

stock ReverseSpectate(playerid)
{
if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && PlayerInfo[playerid][specID] != INVALID_PLAYER_ID)
{
 for(new x=PlayerInfo[playerid][specID]-1; x>=0; x--))
{
	 if(x < 0) x = MAX_PLAYERS -1;
	 if(IsPlayerConnected(x) && x != playerid)
{
if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && PlayerInfo[x][specID] != INVALID_PLAYER_ID || (GetPlayerState(x) != 1 && GetPlayerState(x) != 2 && GetPlayerState(x) != 3))
{
 continue;
}
else
{
 StartSpectate(playerid, x);
 break;
}
}
}
}
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
{
if(newkeys & KEY_HANDBRAKE)//Right Mouse
{
 AdvanceSpectate(playerid);
}
if(newkeys & KEY_FIRE)//Left Mouse
{
 ReverseSpectate(playerid);
}
}
return 1;
}

//when player dies [OnPlayerDeath]
for(new x=PlayerInfo[playerid][specID]+1; x<=MAX_PLAYERS; x++)
{
 if(x == MAX_PLAYERS) x = 0;
 if(IsPlayerConnected(x) && x != playerid)
{
StartSpectate(playerid, x);
break;
}
}

Ik heb een race gamemode dus wanneer mensen dood gaan gaan ze op spectate mode en waneer de laatse persoon die overgebleven is heeft gewonnen of is ook dood dan de huidige map eindigd en de andere map loads.

ID 0 crasht de hele server als hij op links / rechts muisbuttons drukt om van players te wisselen.

maar als je ID 1 of hoger bent dan crasht het server niet.

Ik hoop dat iemand mij kan helpen,

Thanks!

Bewerkt: door Never

Featured Replies

Geplaatst:
comment_1970084

Crasht de server ook als je naar rechts gaat? Want ik zie zo alleen maar een mogelijk foutje in het naar links gaan.

Onder ReverseSpectate:

if(x == 0) x = MAX_PLAYERS;

Dat moet zijn:

if(x < 0) x = MAX_PLAYERS - 1;

Omdat hij anders buiten het bereik gaat. Hij zal checken of playerid '-1' bestaat, daarna '-2', daarna '-3'. Zo blijft 'ie doorgaan tot de server crasht, aangezien hij toch geen beschikbare speler kan vinden. ;)

Geplaatst:
comment_1970088

Je kunt proberen om bij AdvanceSpectate dit te veranderen:

if(x == MAX_PLAYERS) x = 0;

naar...

if(x >= MAX_PLAYERS) x = 0;

Dat maakt het wel iets veiliger, maar ik weet niet of daar überhaupt de fout zat.

Bewerkt: door Basssss

Geplaatst:
comment_1970092

Dat maakt het wel iets veiliger, maar ik weet niet of daar überhaupt de fout zat.

Inderdaad, heb het net gemeld in de tracker. :engel:

Edit: En ik denk dat een post i.p.v. een triplepost ook wel iets veiliger is. ^_^

>>> Door Thundercover: Het waren drie posts met verschillende instellingen. :puh:<<<

Bewerkt: door Thundercover

Geplaatst:
  • Auteur
comment_1970093

dankjewel Bassss dat je mij helpt knipoog.gif

Thank you very much! biertje.gif

Edit:

Ik heb mijn server met meer dan 4 mensen getest en nog steeds ID 0 crasht de hele server =/

Ik dacht om iets anders te proberen maar ik weet niet hoe dat moet.

Wat ik wil doen is:

//On Top
#define isPlaying 1
#define isDead 2

static gTeam[MAX_PLAYERS];

//OnPlayerSpawn
gTeam[playerid] = isPlaying;

//OnPlayerDeath
gTeam[playerid] = isDead;

//En als die gaat spectaten dan wil ik dit veranderen:
for(new x=PlayerInfo[playerid][specID]+1; x<=MAX_PLAYERS; x++)

naar

for(new x=isPlaying+1; x<=MAX_PLAYERS; x++)

//Maar ik weet niet of ik daar IsPlaying moet schrijven of gTeam[playerid] == isPlaying of iets anders?

Maar ik weet niet of ik daar IsPlaying moet schrijven of gTeam[playerid] == isPlaying of iets anders? kan iemand mij daarmee helpen?

Thanks!

Bewerkt: door Never

Geplaatst:
  • Auteur
comment_1971484

Dat klopt niet helemaal. isPlaying is altijd 1. Je doet nu 'new x = isPlaying + 1'. Hier is isPlaying altijd 1, dus 1 + 1 = altijd 2. :puh:

Oh oke dan

Thanks for Reply :)

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

Recent actief 0

  • Er zijn hier geen geregistreerde gebruikers aanwezig.