Jump to content

Spectate probleem


Never

Recommended Posts

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
Link to comment
Delen op andere websites

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

Link to comment
Delen op andere websites

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
Link to comment
Delen op andere websites

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
Link to comment
Delen op andere websites

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
Link to comment
Delen op andere websites

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

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...