Jump to content

Dingen saven niet


1112rutger

Recommended Posts

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?

Link to comment
Delen op andere websites

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

Link to comment
Delen op andere websites

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

Link to comment
Delen op andere websites

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?

Link to comment
Delen op andere websites

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.

Link to comment
Delen op andere websites

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

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.

Link to comment
Delen op andere websites

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?

Link to comment
Delen op andere websites

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

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