Never Geplaatst: 8 oktober 2012 Rapport Geplaatst: 8 oktober 2012 (bewerkt) 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: 16 oktober 2012 door Never Reageren
Basssss Geplaatst: 8 oktober 2012 Rapport Geplaatst: 8 oktober 2012 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. Reageren
Never Geplaatst: 8 oktober 2012 Auteur Rapport Geplaatst: 8 oktober 2012 Oh dankje! Ja als ik op rechtermuisknop drukte crashde het ook Thank you very much! Reageren
Basssss Geplaatst: 8 oktober 2012 Rapport Geplaatst: 8 oktober 2012 (bewerkt) 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: 8 oktober 2012 door Basssss Reageren
Basssss Geplaatst: 8 oktober 2012 Rapport Geplaatst: 8 oktober 2012 (bewerkt) Dat maakt het wel iets veiliger, maar ik weet niet of daar überhaupt de fout zat. Inderdaad, heb het net gemeld in de tracker. 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. <<< Bewerkt: 8 oktober 2012 door Thundercover Reageren
Never Geplaatst: 8 oktober 2012 Auteur Rapport Geplaatst: 8 oktober 2012 (bewerkt) dankjewel Bassss dat je mij helpt Thank you very much! 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: 9 oktober 2012 door Never Reageren
Basssss Geplaatst: 15 oktober 2012 Rapport Geplaatst: 15 oktober 2012 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. Reageren
Never Geplaatst: 15 oktober 2012 Auteur Rapport Geplaatst: 15 oktober 2012 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. Oh oke dan Thanks for Reply Reageren
Recommended Posts
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.