Jump to content
Geplaatst:
comment_812213

Tutorial Account-systeem



Gemaakt door Sandra18[NL]

** In deze tutorial ga ik uitleggen hoe je een account-systeem kan maken inclusief het opslaan van gegevens.

In veel servers kan je een eigen account aanmaken met een eigen wachtwoord.

Als je zo'n account hebt, kunnen er persoonlijke gegevens worden opgeslagen zoals, geld, aantal kills enzovoort.

(Welke info er word opgeslagen is natuurlijk afhankelijk van de server).

Als er een account word aangemaakt word er in de map 'scriptfiles' een nieuw bestand aangemaakt.

Deze heeft geen extentie (zoals .txt of .inc) maar je kan de bestanden gewoon met 'kladblok' openen en bewerken.

Voor een account systeem heb je de volgende include bestanden nodig:

- a_samp.inc

- dudb.inc

- dutils.inc

- dini.inc

De laatste 3 bestanden kan je >>hier<< downloaden (Puma, thnx voor de link ;))

met 'dini' kan je comunniseren met bestanden.

We gaan de volgende functies gebruiken:

- dini_Exists(udb_encode(naam)) ---> Dit kijkt of het bestand 'naam' wel of niet bestaat

- dini_Create(udb_encode(naam)) ---> Deze functie maakt een bestand aan met de naam 'naam'

- dini_IntSet(udb_encode(naam), "variabele", waarde); ---> Deze functie maakt in het bestand 'naam' een nieuwe variabele "variabele" en zet daar de waarde 'waarde' achter.

- dini_Get(udb_encode(naam), "variabele"); ---> Haalt de waarde die achter de variabele staat in het bestand 'naam' op

Voor de 'naam' gebruiken we de naam van de speler dus we noemen het 'playername'

Om die te achterhalen zullen we de volgende functie gaan gebruiken:

new playername[MAX_PLAYERNAME];
GetPlayerName(playerid, playername, sizeof(playername));

OKe, nu gaan we stap voor stap het script in elkaar zetten:

We beginnen bovenaan het script met de includes en de defines:

Je hoeft dutils en dini niet te 'includen' omdat die automatisch door dudb worden included.

We gebruiken 3 kleuren (rood, geel en groen)

#include <a_samp>
#include <dudb>

#define COLOR_RED 0xFF0000AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_GREEN 0x00FF00AA

Vervolgens moeten we een paar variabelen aanmaken.

We gebruiken:

- logged[MAX_PLAYERS] --> Hiermee slaan we voor elke speler zijn login-waarde op (0 = niet, 1=wel ingelogd)

- adminlevel[MAX_PLAYERS] --> Hiermee slaan we voor elke speler de adminlevel op

- money[MAX_PLAYERS] --> Hiermee slaan we voor elke speler het geld op

- playername[MAX_PLAYER_NAME] --> Definitie van playername

new logged[MAX_PLAYERS];
new adminlevel[MAX_PLAYERS];
new money[MAX_PLAYERS];
new playername[MAX_PLAYER_NAME];

Dan volgen nog 3 standaard callbacks:

main()
{
print("===============================");
print("AccountTutorial by Sandra18[NL]");
print("===============================");
}

public OnGameModeInit()
{
SetGameModeText("Tutorial Accounts by Sandra18[NL]");
AddPlayerClass(93, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}


public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1968.3783, 1345.1572, 17.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}

Dan volgt de OnPlayerConnect-callback:

Hier hoeven we alleen de login-waarde van de nieuwe speler op '0' te zetten, aangezien hij/zij nog niet ingelogd is als hij contact maakt met de server.

public OnPlayerConnect(playerid)
{
logged[playerid] = 0;
return 1;
}

Bij de OnPlayerSpawn-callback gaan we kijken of de speler wel of niet ingelogd is, is dat niet het geval, dan krijgt hij/zij een melding dat hij/zij zich nog moet inloggen:

public OnPlayerSpawn(playerid)
{
if(logged[playerid] == 0) {
SendClientMessage(playerid, COLOR_RED, "Je bent nog niet ingelogd! Gebruik /login [wachtwoord]!");
}
return 1;
}

Dan nu de OnPlayerCommandText-callback

Dit is het lastigste gedeelte dus lees het heel goed door en probeer te begrijpen wat er per regel gebeurt.

We beginnen met wat standaard 'defines':

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

Eerst maken we het /register [wachtwoord] commando:

(De teksten in het rood zijn aantekeningen)

(De rode aantekeningen gaan over de regel onder de aantekening zelf

//De speler typt /register in...

if(strcmp(cmd, "/register", true) == 0) {

//de tekst die achter '/register' wordt getypt, wordt opgeslagen in 'tmp'

tmp = strtok(cmdtext, idx);

//check of er überhaupt wat ingevuld word achter /register

if(!strlen(tmp)) {

//Als dat niet zo is, (!), dan moet er een berichtje worden verzonden:

SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /register (password)");

}

//Als er wel wat ingevuld wordt....

else {

//....dan moet er worden gekeken of het bestand met de naam van de speler nog niet bestaat:

if (!dini_Exists(udb_encode(playername))) {

//Bestaat die nog niet, dan moet die worden aangemaakt:

dini_Create(udb_encode(playername));

//Vervolgens moet het wachtwoord worden opgeslagen:

dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));

//Dan de variabelen 'adminlevel' en 'money', beiden met de waarde '0':

dini_IntSet(udb_encode(playername), "adminlevel", 0);

dini_IntSet(udb_encode(playername), "money", 0);

//Er moet een bericht gemaakt worden die wat info naar de speler gaat sturen:

format(string, sizeof(string), "Account %s aangemaakt! Je kunt nu inloggen met het wachtwoord: %s.", playername, tmp);

//Zend dat bericht naar de speler:

SendClientMessage(playerid, COLOR_YELLOW, string);

} //Dit was alles wat er moet gebeuren als er idd geregisteerd moet worden.

//Als blijkt dat de naam als geregisteerd is, dan moet er een bericht naar de speler verzonden worden:

else {

format(string, sizeof(string), "%s already registered.", playername,tmp);

SendClientMessage(playerid, COLOR_RED, string);

}}

return 1;

}

Nu doen we het /login [wachtwoord] commando op dezelfde manier:

// Als de speler het commando /login typt:

if(strcmp(cmd, "/login", true) == 0)

{

// Verkrijg de naam van de speler:

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

// Kijk of de speler al ingelogd is:

if(logged[playerid] == 1)

//Zo ja, dan moet er een bericht worden verzonden met de melding dat hij al ingelogd is.

{

SendClientMessage(playerid, COLOR_RED, "Je bent al ingelogd");

return 1;

}

// Sla de tekst (wachtwoord in dit geval) op in de variabele 'tmp' die achter /login getypt wordt:

tmp = strtok(cmdtext, idx);

// Als er niks word ingetypt achter /login, dan moet er een bericht verzonden worden:

if(!strlen(tmp)){

SendClientMessage(playerid, COLOR_YELLOW, "Gebruik: /login (wachtwoord)");

}

// Als er wel wat in wordt getypt....

else {

//...dan word er gekeken of het bestand met de spelersnaam wel bestaat (Met andere woorden: heeft diegene zich wel geregistreerd?

if (dini_Exists(udb_encode(playername))) {

// Zo ja, dan word uit zijn bestand de waarde achter "password" gehaald (zijn wachtwoord waarmee hij/zij zich geregisteerd heeft dus):

tmp2 = dini_Get(udb_encode(playername), "password");

// Als het wachtwoord dat de speler ingevoerd heeft niet overeenkomt met het wachtwoord in zijn bestand. (Let op het !=-teken), dan moet er een bericht worden verzonden met de melding dat hij/zij het verkeerde wachtwoord heeft getypt:

if (udb_hash(tmp) != strval(tmp2)) {

SendClientMessage(playerid, COLOR_RED, "Verkeerd wachtwoord!.");

}

// Komt het wachtwoord wel overeen....

else {

// Zet de loginwaarde van de speler op '1'

logged[playerid] = 1;

// Haal uit het bestand de waarde die achter "money" staat en sla die op in de variabele 'money[playerid]'

money[playerid] = dini_Int(udb_encode(playername), "money");

// Haal uit het bestand de waarde die achter "adminlevel" staat en sla die op in de variabele adminlevel[playerid]

adminlevel[playerid] = dini_Int(udb_encode(playername), "adminlevel");

// Stel een zin samen die aangeeft hoeveel geld en welke adminlevel de speler heeft:

format(string, sizeof(string), "%s, je bent nu ingelogd. Je hebt adminlevel %d en je hebt %d dollar", playername, adminlevel[playerid], money[playerid]);

// Stuur het bericht:

SendClientMessage(playerid, COLOR_GREEN, string);

// Geef de speler het bedrag dat zojuist in de money[playerid]-variabele is gezet:

GivePlayerMoney(playerid, money[playerid]);

}

// Dit was alles dat er moest gebeuren als de speler zich inlogt.

}

// Als het account met de spelersnaam nog niet bestaat (dus de speler heeft zich nog niet geregistreerd....:

else {

// ...Dan moet er een zin samengesteld worden die zegt dat het account met die spelers naam nog niet bestaat en dus nog geregistreerd moet worden

format(string, sizeof(string), "Het account %s, bestaat nog niet. Typ /register [wachtwoord] om een account te maken.", playername);

// Het bericht verzenden:

SendClientMessage(playerid, COLOR_RED, string);

}}

return 1;

}

Nou, dit waren de /register en /login commando's het is een beetje chaotisch, maarja, tis niet 1 van de makkelijkste dingen om uit te leggen... :N

Dan moeten we nu nog een commando maken waarmee je je admin kan maken:

Mijn idee was om in dit script 4 adminlevels te hebben:

level 0 = geen admin

level 1 = beginner-admin

level 2 = gevorderde-admin

level 3 = hoofd-admin.

Om je met dit commando hoofdadmin te maken moet je jezelf eerst met rcon inloggen: /rcon login [rcon-pass]

if(strcmp(cmd, "/maakmijadmin", true) == 0)

{

// Heeft de speler zich met rcon ingelogd? (met /rcon login [rcon-pass]:

if(IsPlayerAdmin(playerid)) {

// Heeft de speler zich wel eerst ingelogd? (met /login [wachtwoord]:

if(logged[playerid] == 1) {

// Heeft de speler nog niet level 3? (let op het != teken)

if(adminlevel[playerid] != 3) {

// Voldoet de speler aan de voorwaarden, dan word de adminlevel[playerid] op '3' gezet:

adminlevel[playerid] = 3;

// Stuur nu een berichtje:

SendClientMessage(playerid, COLOR_GREEN, "Je bent nu hoofdadmin! Gefeliciteerd!");

}

// Als de speler al level 3 is, dan moet er een berichtje worden verzonden:

else {

SendClientMessage(playerid, COLOR_RED, "Je bent al hoofdadmin!");

}}

// Als de speler zich nog niet heeft ingelogd met /login [wachtwoord]:

else {

SendClientMessage(playerid, COLOR_RED, "Je moet je eerst inloggen /login [wachtwoord]");

}}

// Als de speler zich nog niet heeft ingelogd met /rcon login [rcon-pass]:

else {

SendClientMessage(playerid, COLOR_RED, "Je moet je eerst met rcon inloggen! (/rcon login [rcon-pass])");

}

return 1;

}

Je kan uiteraard ook de level (en het geld) van een speler aanpassen door het getal achter de desbetreffende variabele te veranderen.

Als je nu commando's wilt maken die alleen door level 1 adminsgebruikt mogen worden.

Dan voeg je in die functie de volgende regel toe:

if(adminlevel[playerid] == 1

De volgende tekens kan je gebruiken.

== gelijk aan ...

< kleiner dan ...

> groter dan ...

<= kleiner of gelijk aan ...

>= groter of gelijk aan ...

!= niet gelijk aan ...

Nog een voorbeeldje:

Als een commando alleen door admins die level 2 of hoger hebben, dan voeg je deze regel toe:

if(adminlevel[playerid] >= 2

Om de OnPlayerCommandText-callback af te sluiten:

return 0;
}

Tot slot moeten we ervoor zorgen dat de gegevens van de speler worden opgeslagen zodra hij/zij de server verlaat.

Dit doen we in de callback 'OnPlayerDisconnect':

public OnPlayerDisconnect(playerid, reason)

{

// Verkrijg de naam van de speler:

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

// Haal het geld van de speler op en sla die op in de variabele 'money[playerid]'

money[playerid] = GetPlayerMoney(playerid);

// Zet in het spelerbestand achter de variabele 'money' het bedrag dat de speler heeft

dini_IntSet(udb_encode(playername), "money", money[playerid]);

// Zet in het spelerbestand achter de variabele 'adminlevel' de level van de speler:

dini_IntSet(udb_encode(playername), "adminlevel", adminlevel[playerid]);

// Zet de loginwaarde van die playerid weer op '0'

logged[playerid] = 0;

return 1;

}

Oke, dat was het, dat was de hele code...

Omdat kwaliteit van filmpjes zo slecht zijn, kan je niet lezen welke berichten er in de chat verscheinen, daarom doe ik het nu in plaats van een filmpje nu maar met woorden en een plaatje:

- Ik join de server met de naam 'GtaForum'

- Ik kies een karakter uit (maar 1 keus in dit geval)

- Ik spawn en er komt een melding: "Je bent nog niet ingelogd! Gebruik /login [wachtwoord]!"

- Ik verzin het wachtwoord 'abcdefg' (hoe origineel :7)

- Ik typ in "/login abcdefg", nu krijg ik een melding:

"Het account GtaForum, bestaat nog niet. Typ /register [wachtwoord] om een account te maken."

- Ik typ "/register abcdefg", nu komt er de melding:

"Account GtaForum aangemaakt! Je kunt nu inloggen met het wachtwoord: abcdefg."

- Nu typ ik "/login" (dus zonder wachtwoord. Nu staat er "Gebruik: /login [wachtwoord]"

- Nu een verkeerd wachtwoord: "/login 1234567". Nu staat er "Verkeerd wachtwoord!."

- Nu het goede wachtwoord: "/login abcdefg" en nu staat er

""GtaForum, je bent nu ingelogd. Je hebt adminlevel 0 en je hebt 0 dollar"

- Nu typ ik /rcon login [mijn rcon pass] en nu staat er "You are now logged in as an admin"

- Nu kan ik /maakmijadmin typen en er komt de melding: ""Je bent nu hoofdadmin! Gefeliciteerd!"

- Ik geef mezelf even (met een extra commando (niet bij dit script inbegrepen)) 9751 dollar.

- Nu verlaat ik de server.

- Als ik nu naar de map 'scriptfiles' ga en daar het bestand 'GtaForum' open, dan staan daar mijn gegevens.

(zie afbeelding onderaan).

- Als ik nu weer de server in ga, dan typ ik "/login abcdefg" dan staat er:

""GtaForum, je bent nu ingelogd. Je hebt adminlevel 3 en je hebt 9751 dollar"

Zo, nu doen mijn vingers zeer van het typen :bonk:

Omdat het hier nogal chaotisch is, heb ik het script op internet gezet zodat het er wat duidelijker uitziet

Download >>hier<< het hele script met de commentaren:

Download >>hier<< het hele script zonder de commentaren.

Als je nog vragen hebt, of foutjes ziet, of andere opmerkingen hebt, kan je ze in dit topic stellen. :)

P.s. Als je tekens zoals [ ] ( ) _ in je spelersnaam hebt staan, dan veranderd sa:mp dat in de namen van de user-files zoals je kunt zien aan mijn user-file "Sandra18[NL]" is veranderd naar "Sandra18_05NL_06"

Dit heeft geen concequenties op het inloggen enzo.

Veel succes en plezier ermee ;)

Groetjes Sandra

post-70241-1193962840_thumb.jpg

Bewerkt: door =>Sandra<=

  • Reacties 228
  • Bezichtigingen 47.6k
  • Created
  • Laatste reactie

Top Posters In This Topic

Posted Images

Featured Replies

Geplaatst:
comment_1619832

Hoi, ik heb ook een probleem. Als ik eht script wil compilen dan komen er deze errors:

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(28) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(132) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(172) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(280) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(337) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(379) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(441) : warning 219: local variable "f" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dini.inc(239) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(244) : error 021: symbol already defined: "main"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(251) : error 021: symbol already defined: "OnGameModeInit"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(259) : error 021: symbol already defined: "OnPlayerRequestClass"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(266) : error 021: symbol already defined: "OnPlayerConnect"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(271) : error 021: symbol already defined: "OnPlayerSpawn"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(278) : error 021: symbol already defined: "OnPlayerCommandText"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279) : warning 204: symbol is assigned a value that is never used: "tmp2"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279) : warning 204: symbol is assigned a value that is never used: "tmp"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279) : warning 204: symbol is assigned a value that is never used: "cmd"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279 -- 280) : warning 209: function "OnPlayerCommandText" should return a value

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(283) : error 010: invalid function or declaration

Wat kan ik hier tegen doen?

Geplaatst:
comment_1619939

Hoi, ik heb ook een probleem. Als ik eht script wil compilen dan komen er deze errors:

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(28) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(132) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(172) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(280) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(337) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(379) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(441) : warning 219: local variable "f" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dini.inc(239) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(244) : error 021: symbol already defined: "main"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(251) : error 021: symbol already defined: "OnGameModeInit"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(259) : error 021: symbol already defined: "OnPlayerRequestClass"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(266) : error 021: symbol already defined: "OnPlayerConnect"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(271) : error 021: symbol already defined: "OnPlayerSpawn"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(278) : error 021: symbol already defined: "OnPlayerCommandText"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279) : warning 204: symbol is assigned a value that is never used: "tmp2"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279) : warning 204: symbol is assigned a value that is never used: "tmp"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279) : warning 204: symbol is assigned a value that is never used: "cmd"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279 -- 280) : warning 209: function "OnPlayerCommandText" should return a value

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(283) : error 010: invalid function or declaration

Wat kan ik hier tegen doen?

Plak jij de tut wel in een leeg script??

Geplaatst:
comment_1619982

Hey, ik heb misschien een domme vraag , maar ik helemaal nieuw in het SAMP server gedoe.

Moet je het script dat je aan het maken bent , moet je dat als een nieuw script maken , of in je bestaande script van al de spawnplaatsen en commands ?

Geplaatst:
comment_1619993

Hoi, ik heb ook een probleem. Als ik eht script wil compilen dan komen er deze errors:

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(28) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(132) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(172) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(280) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(337) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(379) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dutils.inc(441) : warning 219: local variable "f" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Bureaublad\Gta SAMP eigen server\pawno\include\dini.inc(239) : warning 219: local variable "string" shadows a variable at a preceding level

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(244) : error 021: symbol already defined: "main"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(251) : error 021: symbol already defined: "OnGameModeInit"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(259) : error 021: symbol already defined: "OnPlayerRequestClass"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(266) : error 021: symbol already defined: "OnPlayerConnect"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(271) : error 021: symbol already defined: "OnPlayerSpawn"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(278) : error 021: symbol already defined: "OnPlayerCommandText"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279) : warning 204: symbol is assigned a value that is never used: "tmp2"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279) : warning 204: symbol is assigned a value that is never used: "tmp"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279) : warning 204: symbol is assigned a value that is never used: "cmd"

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(279 -- 280) : warning 209: function "OnPlayerCommandText" should return a value

C:\Documents and Settings\Calvin\Mijn documenten\Schriptaccountsysteem.pwn(283) : error 010: invalid function or declaration

Wat kan ik hier tegen doen?

Plak jij de tut wel in een leeg script??

Uhm.. ALs ik kies: New bij pawno, dan komt het standaard schript er te staan, en dan zet ik het onder dat basisschript.., ben nog beetje beginnertje daarom weet ik niet hoe alles werkt :?

Zou je anders kunnen vertellen hoe ik een nieuw script krijg? xd

  • 3 weken later...
Geplaatst:
comment_1637800

Hoi, ik ben nu denk ik iets meer dan een uurtje geleden begonnen met een gloednieuw script, ik wil deze graag zo overzichtelijk mogelijk houden, en ook meteen goed doen :puh:. Ik wil er ook zelf veel mee gaan uitproberen en prutsen om zelf bij te leren, en dat heb ik dus al gedaan door proberen het script een beetje aan te passen.

Ik wou dus adhv dit script, een login & registratiesysteem maken, maar mét dialog boxes. Volgens mij zit het meeste wel goed, alleen is er iets wat niet klopt, in de volgende lijn:

(komt uit "OnPlayerDisconnect").

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

zouden blijkbaar volgende fouten zitten (maar ik weet niet juist wat er dan verkeerd mee is, want ik heb het gewoon uit deze tutorial en in die 'categorie' komen geen dialogboxes voor):

C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(82) : error 017: undefined symbol "playername"
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(82) : error 017: undefined symbol "playername"
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(82) : error 029: invalid expression, assumed zero
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(82) : fatal error 107: too many error messages on one line

Alvast bedankt :cya:.

Bewerkt: door vice

Geplaatst:
comment_1637806

Je zult variabelen eerst moeten declareren (aanmaken), voordat je ze een waarde, tekst of andere inhoud kunt toekennen. Maak daarom eerst de variabele aan:

new playername[MAX_PLAYER_NAME]; // MAX_PLAYER_NAME staat gelijk aan de maximale lengte van een spelersnaam. Je maakt dus een nieuwe string aan met de lengte MAX_PLAYER_NAME

Je kunt dit doen binnen een callback, daardoor kan de variabele alleen binnen die callback gebruikt worden; je kan hem ook aan het begin van je code plaatsen, dan is hij overal te gebruiken.

Geplaatst:
comment_1637829

public OnPlayerDisconnect(playerid, reason)
{
GetPlayerName(playerid, playername, sizeof(playername));;
money[playerid] = GetPlayerMoney(playerid);
dini_IntSet(udb_encode(playername), "money", money[playerid]);
dini_IntSet(udb_encode(playername), "adminlevel", adminlevel[playerid]);
	dini_IntSet(udb_encode(playername), "house", house[playerid]);
   dini_IntSet(udb_encode(playername), "car", car[playerid]);
logged[playerid] = 0;
return 1;
}

"house" & "car" heb ik er zelf bijgezet, maar ze staan wel verwerkt in het registratie / login script.

(ik gebruik ze alleen nog niet)

Bewerkt: door vice

Geplaatst:
comment_1637837
// This is a comment

// uncomment the line below if you want to write a filterscript

//#define FILTERSCRIPT

#define RED 0xA00000AA

#define GREEN 0x00A000AA

#define BLUE 0x0000C7AA

#define YELLOW 0xF6F600AA

#define ORANGE 0xF6B700AA

#define GRAY 0xF6F6F6AA

#define TUTORIALTITLE 0xEAA700AA

#define TUTORIALTEXT 0xF6D700AA

#include <a_samp>

#include <dudb>

#include <dutils>

#include <dini>

#if defined FILTERSCRIPT

new logged[MAX_PLAYERS];

new adminlevel[MAX_PLAYERS];

new money[MAX_PLAYERS];

new house[MAX_PLAYERS];

new car[MAX_PLAYERS];

new playername[MAX_PLAYER_NAME];

Daar zo :puh: de onderste lijn xD.

Geplaatst:
comment_1637840

Gebruik je het als filterscript? Zonee, verwijder eens

#if defined FILTERSCRIPT

Maakt niets uit. Je hebt heb niet gedefineerd als filterscript. Ik zie zo geen fouten.

Bewerkt: door Remcconen

Geplaatst:
comment_1637847

Dan krijg ik plots veel meer fouten (is inderdaad gamemode):

C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(41) : error 026: no matching "#if..."
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(50) : error 026: no matching "#if..."
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(82) : error 036: empty statement
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(264) : error 017: undefined symbol "loginname"
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(265) : error 017: undefined symbol "loginmsg"
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(266) : error 017: undefined symbol "loginmsg"
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(268) : error 017: undefined symbol "tmp2"
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(269) : error 017: undefined symbol "tmp"
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(278) : error 017: undefined symbol "string"
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(278) : error 017: undefined symbol "string"
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(278) : error 029: invalid expression, assumed zero
C:\Users\Blabla\Desktop\SA-MP All-In-One server\gamemodes\allinone.pwn(278) : fatal error 107: too many error messages on one line

http://www.plaatscode.be/139194/

Ik heb daar even het hele script gezet (er staat niets anders in dan het login en registreet script), ik vermoed ook wel dat er iets fout is met de dialogs, het is tenslotte de eerste keer dat ik ermee werk :puh:.

EDIT: Ik had het toch even weggehaald, want er moet toch érgens een fout inzitten dacht ik xD.

Bewerkt: door vice

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.