Jump to content

Account+Admin probleem..


Recommended Posts

Geplaatst: (bewerkt)

Hey,

Eerst wil ik ff zeggen dat ik nieuw ben hier, ik ben van plan om hier wel regelmatig te posten en geen one day-poster te zijn (als je begrijpt wat ik bedoel).

Nu over mijn probleem.

In opdracht van een goede vriend van mij ben ik bezig om een nieuw soort GameMode te maken, een Convoy server word het. Dat houdt in dat iedereen een trucker is, samen moet je verschillende opdrachten doen en door heel San Andreas rijden met vrachtwagens. De basisscript werkt 100%, je kan kiezen tussen man en vrouw en er zijn al een paar vrachtwagens/trailers bij de playerspawn. Nu volg ik dus wat tutorials om een accountsysteem te maken en een adminsysteem, ik heb het scriptje zelf wel kunnen maken, alleen als ik deze in de script stop waar de server op runt en hem dan wil opslaan, geeft 'ie een paar errors. Het is me nog onduidelijk wat ik verkeerd heb gedaan, en nu is mijn vraag of iemand dit voor of met mij kan oplossen.

Alvast bedankt ;)

EDIT: Errors:

error 003: declaration of a local variable must appear in a compound block

error 017: undefined symbol "cmd"

warning 215: expression has no effect

error 001: expected token: ";", but found "]"

fatal error 107: too many error messages on one line

Bewerkt: door InfernusDrifter
Geplaatst:

Ik denk dat er hier iets is misgegaan:

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/mycommand", cmdtext, true, 10) == 0)
   new cmd[256],tmp[256], tmp2[256];
   new idx;
   new string[256];
   cmd = strtok(cmdtext, idx);
   GetPlayerName(playerid, playername, sizeof(playername));
   if(strcmp(cmd, "/register", true) == 0);
   tmp = strtok(cmdtext, idx);
   if(!strlen(tmp));
   SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /register (password)");
   }
   else {
   if (!dini_Exists(udb_encode(playername)));
   dini_Create(udb_encode(playername));
   dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));
   dini_IntSet(udb_encode(playername), "adminlevel", 0);
   dini_IntSet(udb_encode(playername), "money", 0);
   format(string, sizeof(string), "Your account is registered! You can now log in.", playername, tmp);
   SendClientMessage(playerid, COLOR_YELLOW, string);
   }
   else {
   format(string, sizeof(string), "is already registered.", playername,tmp);
   SendClientMessage(playerid, COLOR_RED, string);
   }}
   if(strcmp(cmd, "/login", true) == 0);
   {
   GetPlayerName(playerid, playername, sizeof(playername));
   if(logged[playerid] == 1)
   {
   SendClientMessage(playerid, COLOR_RED, "You are already logged in!");
   }
   if(!strlen(tmp)){
   SendClientMessage(playerid, COLOR_YELLOW, "Use: /login (password)");
   }
   else {
   if (dini_Exists(udb_encode(playername)));
   tmp2 = dini_Get(udb_encode(playername), "password");
   if (udb_hash(tmp) != strval(tmp2));
   SendClientMessage(playerid, COLOR_RED, "Wrong password!");
   }
   else {
   logged[playerid] = 1;
   money[playerid] = dini_Int(udb_encode(playername), "money");
   adminlevel[playerid] = dini_Int(udb_encode(playername), "adminlevel");
   format(string, sizeof(string), "%s, you are now logged in. Your adminlevel is %d and you have %d dollar", playername, adminlevel[playerid], money[playerid]);
   SendClientMessage(playerid, COLOR_GREEN, string);
   GivePlayerMoney(playerid, money[playerid]);
   }
   }
   else {
   format(string, sizeof(string), "The account %s, doesn't exist yet. Type /register [password] to make an account", playername);
   SendClientMessage(playerid, COLOR_RED, string);
}}
return 1;

Geplaatst:

Dat weet ik zelfs zeker. Er is heel wat fout in die code. Ten eerste is het makkelijker voor je als je je eigen code ïndenteerd. Ïndenteren is gewoon een tab na elke '{' plaatsen, en een tab terug na een '}'. Bovendien hoort er na een 'if(...)' geen ';' te staan.

Maar hier is je code terug, geïndenteerd en al. Deze code zou geen errors moeten geven.

In ieder geval, veel succes met je script!

MVG,

Wanted

public OnPlayerCommandText(playerid, cmdtext[])
{
   new cmd[256], tmp[256], tmp2[256];
   new idx;
   new string[256];
   cmd = strtok(cmdtext, idx);
   GetPlayerName(playerid, playername, sizeof(playername));

   if (strcmp(cmd, "/register", true) == 0)
   {
   	tmp = strtok(cmdtext, idx);
   	if(!strlen(tmp))
   	{
   		SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /register (password)");
   	}
   	else
   	{
    	if(!dini_Exists(udb_encode(playername)))
    	{
		dini_Create(udb_encode(playername));
    		dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));
    		dini_IntSet(udb_encode(playername), "adminlevel", 0);
    		dini_IntSet(udb_encode(playername), "money", 0);

    		format(string, sizeof(string), "Your account is registered! You can now log in.", playername, tmp);
    		SendClientMessage(playerid, COLOR_YELLOW, string);

    	}
    	else
	{
    		format(string, sizeof(string), "is already registered.", playername,tmp);
    		SendClientMessage(playerid, COLOR_RED, string);
    	}
	return 1;
}
   }

   if (strcmp(cmd, "/login", true) == 0)
   {
   	if(logged[playerid] == 1)
   	{
   		SendClientMessage(playerid, COLOR_RED, "You are already logged in!");
   	}

   	if(!strlen(tmp))
{
   		SendClientMessage(playerid, COLOR_YELLOW, "Use: /login (password)");
   	}
   	else
{
   		if(dini_Exists(udb_encode(playername)))
   		{
   			tmp2 = dini_Get(udb_encode(playername), "password");
   			if (udb_hash(tmp) != strval(tmp2))
   			{
   				SendClientMessage(playerid, COLOR_RED, "Wrong password!");
   			}
   			else
		{
   				logged[playerid] = 1;
   				money[playerid] = dini_Int(udb_encode(playername), "money");
   				adminlevel[playerid] = dini_Int(udb_encode(playername), "adminlevel");

   				format(string, sizeof(string), "%s, you are now logged in. Your adminlevel is %d and you have %d dollar", playername, adminlevel[playerid], money[playerid]);
   				SendClientMessage(playerid, COLOR_GREEN, string);
   				GivePlayerMoney(playerid, money[playerid]);
		}
	}
	else
	{
   			format(string, sizeof(string), "The account %s, doesn't exist yet. Type /register [password] to make an account", playername);
   			SendClientMessage(playerid, COLOR_RED, string);
	}
	return 1;
}
   }
   return 1;
}

Geplaatst:

Heel erg bedankt, ik krijg nu alsnog wat errors, maar ik denk dat dat probleem bij mij ligt.

(103) : error 029: invalid expression, assumed zero

(103) : error 035: argument type mismatch (argument 2)

(103) : error 020: invalid symbol name ""

(103) : fatal error 107: too many error messages on one line

Had er eerst 6, die hadden te maken met define enzo, ik was gewoon vergeten #define .... te doen ;p

Geplaatst:

GetPlayerName(playerid, playername, sizeof(playername));

Heb je wel new playername[MAX_PLAYER_NAME];

?

Geplaatst:

Bedankt allemaal, 't probleem heb ik samen opgelost met een goede vriend en ervaren scripter.

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