1112rutger Geplaatst: 11 juli 2010 Rapport Geplaatst: 11 juli 2010 Ik heb het volgende: Command die de skin saved dcmd_skin(playerid, params[]) { new number; new otherplayerID; if(PlayerInfo[playerid][rank] >= 5) { if(sscanf(params, "ui", otherplayerID, number)) { SendClientMessage(playerid, color_dred, "USAGE: /setskin <ID> <SkinID>"); return 1; } SetPlayerSkin(otherplayerID,number); PlayerInfo[playerid][skin] = GetPlayerSkin(otherplayerID); printf("%s new skin: %i ",GetPlayerNameEx(otherplayerID), GetPlayerSkin(otherplayerID)); } else { SendClientMessage(playerid, color_red, "You're not allowed to do that!"); } return 1; } Als diegene uitlogt: public OnPlayerDisconnect(playerid, reason) { format(UserFile, sizeof(UserFile), "UserFiles/%s.txt", udb_encode(playername)); GetPlayerName(playerid, playername, sizeof(playername)); dini_IntSet(UserFile, "rank:", PlayerInfo[playerid][rank]); dini_IntSet(UserFile, "skin:", GetPlayerSkin(playerid)); dini_IntSet(UserFile, "team:", PlayerInfo[playerid][team]); printf("%s logged out Skin: %i, Team: %s, Rank: %s", GetPlayerNameEx(playerid),GetPlayerSkin(playerid), GetPlayerFac(playerid), GetPlayerRank(playerid)); logged[playerid] = 0; return 1; } Als diegene inlogt: ( in een dialog zit:) if(logged[playerid] == 0) { format(UserFile, sizeof(UserFile), "UserFiles/%s.txt", udb_encode(playername)); format(message, sizeof(message), "%s you have succesfully logged in.", playername, inputtext); SendClientMessage(playerid, color_green, message); logged[playerid] = 1; SetPlayerSkin(playerid, dini_Int(UserFile, "skin:")); PlayerInfo[playerid][team] = dini_Int(UserFile, "team:"); PlayerInfo[playerid][rank] = dini_Int(UserFile, "rank:"); printf("%s logged in Skin: %i, Team: %s, Rank: %s", GetPlayerNameEx(playerid),PlayerInfo[playerid][skin], GetPlayerFac(playerid), GetPlayerRank(playerid)); TogglePlayerControllable(playerid,1); } Probleem: Ik heb de printf er tussen gevoegt om ik mijn console te kijken of de skin, team en rank saved als diegene in of uitlogt, maar ook als hij de command invoert. In mijn log heb ik gezien dat als je de command invoert, de skin saved. Als je uitlogt, saved de skin. Als je inlogt: Zie ik (soort van): Skin: 0 Team: 0 Rank 0. Dus bij het uitloggen gaat het volgens mij fout? Hoe los ik dit op? Reageren
1112rutger Geplaatst: 15 juli 2010 Auteur Rapport Geplaatst: 15 juli 2010 Het probleem heb ik nog steeds, heb alles geprobeert (zelfs heel me script verbouwd naar een fwrite/fread enz systeem, werkte ook niet maar dat komt omdat het een lastig systeem is denk ik). Een vriend van me komt er ook niet uit, ik hoop een van jullie wel? Kijk er a.u.b even naar, want dit probleem is echt een pain in the %#@!... Reageren
Wanted Geplaatst: 15 juli 2010 Rapport Geplaatst: 15 juli 2010 Je hebt wat problemen met wanneer je PlayerInfo[playerid][skin] gebruikt, en wanneer je GetPlayerSkin(playerid); gebruikt. Ook haal je playerid en otherPlayerID door de war. dcmd_skin(playerid, params[]) { new number; new otherplayerID; if(PlayerInfo[playerid][rank] >= 5) { if(sscanf(params, "ui", otherplayerID, number)) { SendClientMessage(playerid, color_dred, "USAGE: /setskin <ID> <SkinID>"); return 1; } SetPlayerSkin(otherplayerID,number); PlayerInfo[otherplayerID][skin] = GetPlayerSkin(otherplayerID); printf("%s new skin: %i ",GetPlayerNameEx(otherplayerID), PlayerInfo[otherplayerID][skin]); } else { SendClientMessage(playerid, color_red, "You're not allowed to do that!"); } return 1; } public OnPlayerDisconnect(playerid, reason) { format(UserFile, sizeof(UserFile), "UserFiles/%s.txt", udb_encode(playername)); GetPlayerName(playerid, playername, sizeof(playername)); dini_IntSet(UserFile, "rank:", PlayerInfo[playerid][rank]); // Mag ik vragen waarom er overal ':' achterstaat? Dini zet daar automatisch een '=' neer. dini_IntSet(UserFile, "skin:", PlayerInfo[playerid][skin]); dini_IntSet(UserFile, "team:", PlayerInfo[playerid][team]); printf("%s logged out Skin: %i, Team: %s, Rank: %s", GetPlayerNameEx(playerid),PlayerInfo[playerid][skin], GetPlayerFac(playerid), GetPlayerRank(playerid)); logged[playerid] = 0; return 1; } if(logged[playerid] == 0) { format(UserFile, sizeof(UserFile), "UserFiles/%s.txt", udb_encode(playername)); format(message, sizeof(message), "%s you have succesfully logged in.", playername, inputtext); // 'inputtext' doet hier niets? SendClientMessage(playerid, color_green, message); logged[playerid] = 1; PlayerInfo[playerid][skin] = dini_Int(UserFile, "skin:"); PlayerInfo[playerid][team] = dini_Int(UserFile, "team:"); PlayerInfo[playerid][rank] = dini_Int(UserFile, "rank:"); printf("%s logged in Skin: %i, Team: %s, Rank: %s", GetPlayerNameEx(playerid),PlayerInfo[playerid][skin], GetPlayerFac(playerid), GetPlayerRank(playerid)); TogglePlayerControllable(playerid,1); } Nu moet je iets vergelijkbaars als dit bij OnPlayerSpawn neerzetten: if(PlayerInfo[playerid][skin] > 0) { SetPlayerSkin(playerid, PlayerInfo[playerid][skin]); } Let op dat er fouten in deze code kunnen zitten, heb dit bericht even snel getypt. MVG, Wanted Reageren
1112rutger Geplaatst: 17 juli 2010 Auteur Rapport Geplaatst: 17 juli 2010 Dingen saven nu, maar een probleem. Als 2 mensen op het zelfde moment inloggen, verwisseld het script de namen. Dus bijvoorbeeld meneer A krijgt meneer B's zijn stats, en meneer B's meneer A's zijn stats. Hoe los ik dit op? Reageren
Big Boss Geplaatst: 21 juli 2010 Rapport Geplaatst: 21 juli 2010 Er is maar een zeer kleine kans dat twee of meer mensen op exact hetzelfde moment inloggen. Ik schat dat jouw inlog script uitgevoerd wordt in nog geen 3 milliseconden (mijn hele OnGameModeInit met een boel code wordt uitgevoerd in 7 ms). In het stukje script wat nu beschikbaar is zie ik trouwens dat je de variabelen niet reset bij OnPlayerConnect/OnPlayerDisconnect. Dit kan voor problemen zorgen. Reageren
Ice-cup Geplaatst: 22 juli 2010 Rapport Geplaatst: 22 juli 2010 (bewerkt) NVM. Bewerkt: 22 juli 2010 door Ice-cup Reageren
1112rutger Geplaatst: 22 juli 2010 Auteur Rapport Geplaatst: 22 juli 2010 (bewerkt) Big Boss; Wat bedoel je precies met "Resetten"? Want het is toch zo dat als je gegevens reset, dat ze dan terug gaan naar bijv. 0? Maar ze moeten natuurlijk saven op de gegeven variabele? EDIT: Ik heb trouwens ook gemerkt dat zelfs als meneer B niet online is, dat je als meneer A zijnde toch zijn stats kunt krijgen. Dus het script hosselt alle gegevens door elkaar, dus alle gegevens van de UserFiles. Bewerkt: 22 juli 2010 door 1112rutger Reageren
Big Boss Geplaatst: 22 juli 2010 Rapport Geplaatst: 22 juli 2010 Ja, je moet alles terug naar de standaardwaarden zetten nadat alle stats van de vertrekkende speler zijn opgeslagen. Dit doe je bij voorkeur helemaal op het einde bij OnPlayerDisconnect (na al je 'dini_IntSet) en voor de veiligheid kan je het ook nog eens helemaal aan het begin bij OnPlayerConnect doen. Reageren
1112rutger Geplaatst: 23 juli 2010 Auteur Rapport Geplaatst: 23 juli 2010 Mhm, volgens mij werkt alles nu. Maar nu: (Bij login): strcat(PlayerInfo[playerid][fname], dini_Get(UserFile, "fname:")); Bij connect/disconnect: PlayerInfo[playerid][fname] = 0; Maar bij: Een command: format(string4,sizeof(string4),"<---------------------[%s]------------------------------->",PlayerInfo[playerid][fname] ); Werkt het niet en zie ik alleen <----[]---->. In de Userfile word er wel gesaved (die fname:). Enig idee? Reageren
Big Boss Geplaatst: 23 juli 2010 Rapport Geplaatst: 23 juli 2010 Zou je je PlayerInfo enum eens willen posten? Reageren
1112rutger Geplaatst: 23 juli 2010 Auteur Rapport Geplaatst: 23 juli 2010 Mhm, het loginnen werkt nog steeds niet , hier is de enum: enum pinfo { team, rank, skin, alcohol, fname }; new PlayerInfo[MAX_PLAYERS][pinfo]; Reageren
Big Boss Geplaatst: 24 juli 2010 Rapport Geplaatst: 24 juli 2010 Maak van fname eens fname[24]. Als je een langere family/faction (?) name hebt dan 24 karakters moet je dat nog even aanpassen. De maximale lengte van een playername is echter 24. Reageren
1112rutger Geplaatst: 24 juli 2010 Auteur Rapport Geplaatst: 24 juli 2010 Mhm, gedaan dus nu is het: enum pinfo { team, rank, skin, alcohol, fname[24] }; new PlayerInfo[MAX_PLAYERS][pinfo]; Werkt helaas nog niet . En over het inloggen (dat echter een groter probleem is want mensen krijgen rechten die ze niet behoren te krijgen), ik heb het idee dat het met name op mijn gekochte server is, want als ik X keer inlog op mijn 127.0.0.1 server inlog, werkt alles (met meerdere userfiles in het scriptfiles foldertje). 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.