Jump to content

Dingen saven niet


Recommended Posts

Geplaatst:

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?

Geplaatst:

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 %#@!... :)

Geplaatst:

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

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

Geplaatst:

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?

Geplaatst:

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.

Geplaatst: (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: door 1112rutger
Geplaatst:

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.

Geplaatst:

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?

Geplaatst:

Mhm, het loginnen werkt nog steeds niet :(,

hier is de enum:

enum pinfo
{
team,
rank,
skin,
alcohol,
fname
};
new PlayerInfo[MAX_PLAYERS][pinfo];

Geplaatst:

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.

Geplaatst:

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

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