Jump to content
Geplaatst:
comment_1688443

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?

Featured Replies

Geplaatst:
  • Auteur
comment_1690699

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:
comment_1690721

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:
  • Auteur
comment_1692513

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:
comment_1694476

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:
  • Auteur
comment_1694678

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:
comment_1694752

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:
  • Auteur
comment_1695182

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:
  • Auteur
comment_1695633

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

Recent actief 0

  • Er zijn hier geen geregistreerde gebruikers aanwezig.