Jump to content
  • 0

pomoc Problém s reg/log systémom


shapeshifting

Dotaz

Zdravím, snažil som sa spraviť simple reg/log systém na svoj nový cw/tg server, ale mám menši problém. Compile mi vyjde bez erroru alebo warningu, ale keď to nahodím do hry, tak mi to nevytvorí ani txt súbor v zložke Accounts, a ani mi to nepíše texty ktoré som si dal. Ďakujem každému za pomoc.  Inak nie som v pawne profík, učím sa to, ďakujem.

Spoiler

#include <a_samp>
#include <dini>

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2

#define COLOR_WHITE 0xFFFFFF
#define COLOR_RED 0xFF0000

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

#else

main()
{
    print("\n----------------------------------");
    print("[RED] 00:00 [BLUE]");
    print("----------------------------------\n");
}

#endif

public OnGameModeInit()
{
    SetGameModeText("[RED] 00:00 [BLUE]");
    AddPlayerClass(102, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(103, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(104, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(105, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(106, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(107, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(108, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(109, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(110, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(114, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(115, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(116, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(117, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(45,  1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(122, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(123, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(154, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(173, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(174, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(175, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(192, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(193, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(194, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(195, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(214, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(215, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(216, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(219, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(224, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(225, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(226, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(230, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(231, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(232, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(233, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(251, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(261, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(293, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(294, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(300, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(304, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(305, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(306, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(307, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(308, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(309, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, -1172.2090,-68.9843,14.1440);
    SetPlayerFacingAngle(playerid,133.4445);
    SetPlayerCameraPos(playerid, -1178.7427,-74.3183,14.1440);
    SetPlayerCameraLookAt(playerid, -1172.2090,-68.9843,14.1440);
    return 1;
}

public OnPlayerConnect(playerid)
{
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Please enter a password","Submit","Cancel");
    
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/time 0", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 0, 0);
        return 1;
    }
    if (strcmp("/time 1", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 1, 0);
        return 1;
    }
    if (strcmp("/time 2", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 2, 0);
        return 1;
    }
    if (strcmp("/time 3", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 3, 0);
        return 1;
    }
    if (strcmp("/time 4", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 4, 0);
        return 1;
    }
    if (strcmp("/time 5", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 5, 0);
        return 1;
    }
    if (strcmp("/time 6", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 6, 0);
        return 1;
    }
    if (strcmp("/time 7", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 7, 0);
        return 1;
    }
    if (strcmp("/time 8", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 8, 0);
        return 1;
    }
    if (strcmp("/time 9", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 9, 0);
        return 1;
    }
    if (strcmp("/time 10", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 10, 0);
        return 1;
    }
    if (strcmp("/time 11", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 11, 0);
        return 1;
    }
    if (strcmp("/time 12", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 12, 0);
        return 1;
    }
    if (strcmp("/time 13", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 13, 0);
        return 1;
    }
    if (strcmp("/time 14", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 14, 0);
        return 1;
    }
    if (strcmp("/time 15", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 15, 0);
        return 1;
    }
    if (strcmp("/time 16", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 16, 0);
        return 1;
    }
    if (strcmp("/time 17", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 17, 0);
        return 1;
    }
    if (strcmp("/time 18", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 18, 0);
        return 1;
    }
    if (strcmp("/time 19", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 19, 0);
        return 1;
    }
    if (strcmp("/time 20", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 20, 0);
        return 1;
    }
    if (strcmp("/time 21", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 21, 0);
        return 1;
    }
    if (strcmp("/time 22", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 22, 0);
        return 1;
    }
    if (strcmp("/time 23", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 23, 0);
        return 1;
    }
    if (strcmp("/time", cmdtext, true, 10) == 0)
    {
        SendClientMessage(playerid, COLOR_WHITE, "* Usage: /time [0-23]");
        return 1;
    }
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid==DIALOG_REGISTER)
    {
        if(response==0)
        {
            SendClientMessage(playerid,COLOR_RED,"You cancel a registration.");
            Kick(playerid);
            return 1;
        }
        if(response==0)
        {
            if(strlen(inputtext))
            {
                SendClientMessage(playerid,COLOR_RED,"You password is short.");
                ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Please enter a password","Submit","Cancel");
                return 1;
            }
            else
            {
                Register(playerid,inputtext);
                return 1;
            }
        }
    }
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

stock Register(playerid,key[])
{
    new letters[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(letters,sizeof(letters),"/Accounts/%s.txt",name);
    dini_Create(letters);
    dini_Set(letters,"Password",key);
    SendClientMessage(playerid,COLOR_RED,"Successful registration.");
    return 1;
}

 

[ Login nieje spravený, chcel som skúsiť len register ]

Link to comment
Share on other sites

10 odpovědí na tuto otázku

Recommended Posts

  • 2

Problém je v tejto časti:

On 12. 9. 2020 at 2:38, ThaDonMachiaveceli said:

if(response==0)
        {
            if(strlen(inputtext))

Pravdepodobne si chcel napísať if (response == 1).

Každopádne táto podmienka je zbytočná a môžeš ju z kódu odstrániť, pretože o 5 riadkov vyššie kontroluješ, či je response 0 a ak je, tak ukončíš funkciu returnom. Ak sa teda vykoná kód z tejto časti, máš istotu, že response nie je 0 (aj bez ďalšieho overovania podmienkou).

Momentálne sa ti deje to, že kód v tele tvojej podmienky sa nemôže nikdy vykonať. Je to z toho dôvodu, že ak je response 0, funkciu ukončíš o pár riadkov vyššie returnom. Naopak, ak response nie je 0, funkcia sa síce neukončí, ale podmienka response == 0 nie je splnená, a tak sa nevykoná jej telo.

Druhý problém je s podmienkou if(strlen(inputtext)).
Ak by si to nechal takto, ako to je teraz, na každé neprázdne heslo by ti vypísalo správu, že ty heslo je krátke.
Pravdepodobne si chcel napísať napríklad if(strlen(inputtext) < 6).

Tip:
Aj keď to nie je všeobecne dobrá prax, v pawne je užitočné používať debugovacie správy. Napríklad aby si zistil, ktorá vetva podmienky sa vykonala, prípadne kde sa ukončilo vykonávanie funkcie. Jednoducho na nejaké miesto v kóde pridaj printf("<nejaký unikátny text>"); a keď tento text potom nájdeš v server logu, budeš vedieť, že sa ten blok kódu, do ktorého si vložil print, vykonal. Keby si takýto print vložil na začiatok svojej funkcie Register, zistil by si, že sa táto funkcia nikdy nevolá.

Edited by DuFF
  • Děkuji (+1) 1
Link to comment
Share on other sites

  • 1

Trochu si ten login prekombinoval, skús to nejak takto:

Spoiler

if (dialogid == DIALOG_LOGIN)
{
    // Ak hráč zavrel prihlasovací dialog / klikol na Cancel, zobraz dialog znova a ukonči funkciu (returnom)
    if (response == 0) 
        return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Account is already registered!\nPlease enter a password.", "Submit", "Cancel");

    // Hráč klikol na tlačítko na tlačítko Submit, skús ho prihlásiť (funkcia Login mu zobrazí prihlasovací dialog znova, ak zadá nesprávne heslo)
    Login(playerid, inputtext);
    return 1;
}

 

Ak sa rozhodneš pridávať hashovanie, urobíš to vo funkciách Register a Login.

Pre začiatočníka to nie je najľahšie na pochopenie, ale skúsim:
Trik je v tom, že neukladáš priamo heslo, ale iba jeho hash - reťazec, ktorý vznikol aplikovaním hashovacej funkcie na heslo a náhodný reťazec (salt).
Pri prihlasovaní potom rovnakou hashovacou funkciou a rovnakým saltom zahashuješ heslo, ktoré hráč zadal do prihlasovacieho dialogu. Ak sa tento nový hash zhoduje s hashom, ktorý si uložil do súboru pri registrácii, je veľmi vysoká šanca, že hráč zadal správne heslo (niektoré hashovacie funkcie majú kolízie a tak sa môže stať, že 2 rôzne heslá majú rovnaký hash).

Teda čo musíš urobiť:
Vo funkcii Register vygeneruješ náhodný salt, zahashuješ  hráčovo heslo pomocou vygenerovaného saltu a salt a hash si uložíš do súboru (budeš ich potrebovať pri overení správnosti hesla pri prihlasovaní).
Vo funkcii Login potom prečítaš zo súboru salt, zahashuješ hráčovo heslo pomocou prečítaného saltu, prečítaš zo súboru hash, ktorý si tam uložil pri registrácii a porovnáš (napríklad pomocou funkcie strcmp), či sa nový hash rovná tomu prečítanému zo súboru. Ak áno, hráč zadal správne heslo. Ak nie, zobrazíš mu znova prihlasovací dialog. 

Edited by DuFF
  • Děkuji (+1) 1
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0
před 17 hodinami, DuFF said:

Problém je v tejto časti:

Pravdepodobne si chcel napísať if (response == 1).

Každopádne táto podmienka je zbytočná a môžeš ju z kódu odstrániť, pretože o 5 riadkov vyššie kontroluješ, či je response 0 a ak je, tak ukončíš funkciu returnom. Ak sa teda vykoná kód z tejto časti, máš istotu, že response nie je 0 (aj bez ďalšieho overovania podmienkou).

Momentálne sa ti deje to, že kód v tele tvojej podmienky sa nemôže nikdy vykonať. Je to z toho dôvodu, že ak je response 0, funkciu ukončíš o pár riadkov vyššie returnom. Naopak, ak response nie je 0, funkcia sa síce neukončí, ale podmienka response == 0 nie je splnená, a tak sa nevykoná jej telo.

Druhý problém je s podmienkou if(strlen(inputtext)).

Ak by si to nechal takto, ako to je teraz, na každé neprázdne heslo by ti vypísalo správu, že ty heslo je krátke.

Pravdepodobne si chcel napísať napríklad if(strlen(inputtext) < 6).

Tip:

Aj keď to nie je všeobecne dobrá prax, v pawne je užitočné používať debugovacie správy. Napríklad aby si zistil, ktorá vetva podmienky sa vykonala, prípadne kde sa ukončilo vykonávanie funkcie. Jednoducho na nejaké miesto v kóde pridaj printf("<nejaký unikátny text>"); a keď tento text potom nájdeš v server logu, budeš vedieť, že sa ten blok kódu, do ktorého si vložil print, vykonal. Keby si takýto print vložil na začiatok svojej funkcie Register, zistil by si, že sa táto funkcia nikdy nevolá.

Ďakujem ti :D Naozaj to bola ta funkcia if(response == 1). A to inputtext tiež opravené. Ale chcel by som sa ťa spýtať, že keď by som dal do toho dialogu PASSWORD, namiesto INPUT, nepokazil by som to že?

Link to comment
Share on other sites

  • 0
před 17 hodinami, ThaDonMachiaveceli said:

keď by som dal do toho dialogu PASSWORD, namiesto INPUT, nepokazil by som to že?

Nič by sa nepokazilo, hráč by iba videl namiesto zadávaných znakov v dialogu bodky. 

Môj osobný názor ale je, že je fajn schovávať heslo pri logine, ale pri registrácii by som ho hráčovi radšej zobrazil, aby mal istotu, že sa zaregistruje pod správnym heslom (caps lock, num lock, preklepy, ... vedia spôsobiť problémy).

Edited by DuFF
  • Děkuji (+1) 1
Link to comment
Share on other sites

  • 0

DuFF, dával som si pozor pri logine na tie chyby čo si písal, ale zase mi to nijak nenačíta login i keď ten účet v databáze mám.

 

Spoiler

#include <a_samp>
#include <dini>

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2

#define COLOR_WHITE 0xFFFFFF
#define COLOR_RED 0xFF0000

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

#else

main()
{
    print("\n----------------------------------");
    print("[RED] 00:00 [BLUE]");
    print("----------------------------------\n");
}

#endif

public OnGameModeInit()
{
    SetGameModeText("[RED] 00:00 [BLUE]");
    AddPlayerClass(102, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(103, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(104, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(105, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(106, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(107, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(108, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(109, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(110, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(114, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(115, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(116, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(117, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(45,  1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(122, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(123, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(154, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(173, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(174, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(175, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(192, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(193, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(194, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(195, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(214, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(215, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(216, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(219, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(224, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(225, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(226, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(230, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(231, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(232, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(233, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(251, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(261, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(293, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(294, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(300, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(304, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(305, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(306, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(307, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(308, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    AddPlayerClass(309, 1958.3783, 1343.1572, 15.3746, 269.1425, 26, 26, 26, 9999, 26, 26);
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, -1172.2090,-68.9843,14.1440);
    SetPlayerFacingAngle(playerid,133.4445);
    SetPlayerCameraPos(playerid, -1178.7427,-74.3183,14.1440);
    SetPlayerCameraLookAt(playerid, -1172.2090,-68.9843,14.1440);
    return 1;
}

public OnPlayerConnect(playerid)
{
    new letters[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(letters,sizeof(letters),"/Accounts/%s.txt",name);
    if(dini_Exists(letters))
    {
        ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Account is already registered!\nPlease enter a password.","Submit","Cancel");
    }
    else
    {
        ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Please enter a password.","Submit","Cancel");
    }
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/time 0", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 0, 0);
        return 1;
    }
    if (strcmp("/time 1", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 1, 0);
        return 1;
    }
    if (strcmp("/time 2", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 2, 0);
        return 1;
    }
    if (strcmp("/time 3", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 3, 0);
        return 1;
    }
    if (strcmp("/time 4", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 4, 0);
        return 1;
    }
    if (strcmp("/time 5", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 5, 0);
        return 1;
    }
    if (strcmp("/time 6", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 6, 0);
        return 1;
    }
    if (strcmp("/time 7", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 7, 0);
        return 1;
    }
    if (strcmp("/time 8", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 8, 0);
        return 1;
    }
    if (strcmp("/time 9", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 9, 0);
        return 1;
    }
    if (strcmp("/time 10", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 10, 0);
        return 1;
    }
    if (strcmp("/time 11", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 11, 0);
        return 1;
    }
    if (strcmp("/time 12", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 12, 0);
        return 1;
    }
    if (strcmp("/time 13", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 13, 0);
        return 1;
    }
    if (strcmp("/time 14", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 14, 0);
        return 1;
    }
    if (strcmp("/time 15", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 15, 0);
        return 1;
    }
    if (strcmp("/time 16", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 16, 0);
        return 1;
    }
    if (strcmp("/time 17", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 17, 0);
        return 1;
    }
    if (strcmp("/time 18", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 18, 0);
        return 1;
    }
    if (strcmp("/time 19", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 19, 0);
        return 1;
    }
    if (strcmp("/time 20", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 20, 0);
        return 1;
    }
    if (strcmp("/time 21", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 21, 0);
        return 1;
    }
    if (strcmp("/time 22", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 22, 0);
        return 1;
    }
    if (strcmp("/time 23", cmdtext, true, 10) == 0)
    {
        SetPlayerTime(playerid, 23, 0);
        return 1;
    }
    if (strcmp("/time", cmdtext, true, 10) == 0)
    {
        SendClientMessage(playerid, COLOR_WHITE, "* Usage: /time [0-23]");
        return 1;
    }
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid==DIALOG_LOGIN)
    {
        if(response==0)
        {
            SendClientMessage(playerid,COLOR_RED,"Wrong password!");
            Kick(playerid);
            return 1;
        }
          if(response==1)
        {
            if(strlen(inputtext))
            {
                SendClientMessage(playerid,COLOR_RED,"You password is short.");
                ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Account is already registered!\nPlease enter a password.","Submit","Cancel");
                return 1;
            }
            else
            {
                Login(playerid,inputtext);
                return 1;
            }
        }
    }
    if(dialogid==DIALOG_REGISTER)
    {
        if(response==0)
        {
            SendClientMessage(playerid,COLOR_RED,"You cancel a registration.");
            Kick(playerid);
            return 1;
        }
          if(response==1)
        {
            if(strlen(inputtext) <6)
            {
                SendClientMessage(playerid,COLOR_RED,"You password is short.");
                ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Please enter a password.","Submit","Cancel");
                return 1;
            }
            else
            {
                Register(playerid,inputtext);
                return 1;
            }
        }
    }
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

stock Register(playerid,key[])
{
    new letters[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(letters,sizeof(letters),"/Accounts/%s.txt",name);
    dini_Create(letters);
    dini_Set(letters,"Password",key);
    SendClientMessage(playerid,COLOR_RED,"Successful registration.");
    dini_IntSet(letters,"Level",0);
    return 1;
}

stock Login(playerid,key[])
{
    new letters[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(letters,sizeof(letters),"/Accounts/%s.txt",name);
    if(!strcmp(key,dini_Get(letters,"Password"),false))
    {
        SetPlayerScore(playerid,dini_Int(letters,"Level"));
        SendClientMessage(playerid,COLOR_RED,"Successful login.");
        return 1;
    }
    else
    {
        SendClientMessage(playerid,COLOR_RED,"Wrong Password");
        ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Account is already registered!\nPlease enter a password.","Submit","Cancel");
        return 1;
    }
}

+ ako zahashujem to heslo v mojom prípade?

Edited by ThaDonMachiaveceli
Link to comment
Share on other sites

  • 0
 		if(strlen(inputtext))
            {
                SendClientMessage(playerid,COLOR_RED,"You password is short.");
                ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Account is already registered!\nPlease enter a password.","Submit","Cancel");
                return 1;
            }
            else
            {
                Login(playerid,inputtext);
                return 1;
            }

Tu máš chybu v podmienke - ak niečo zadal (strlen != 0) tak mu zobraziš dialog... stačí ak zmeníš podmienku na !strlen(...)

Príkaz /time sa nerobí tak ako ho máš ty :) odporúčam pozrieť nejaký CMD include/plugin, tam budú aj príklady ako sa to používa

Heslo môžeš zahashovať nejako takto (funkcia a príklad je z odkazu ktorý poslal superAV):

new MyHash[65];
for (new i = strlen(name) - 1; i >= 0; i -= 2) // toto musí byť až za formatovaním stringu pre názov súboru - čiže najlepšie tesne pred uložením hesla
	name[i] = 'x'; // každé 2. písmeno meno nahradíme znakom x, tým získame relativne náhodný string ktorý poslúži ako "sol / salt" do hashovacej funkcie
SHA256_PassHash(key, name, MyHash, 65); // zahashujeme zadané heslo (key) a pridáme salt (name), cele sa to uloží do MyHash
dini_Set(letters,"Password",MyHash);

// LOGIN

new MyHash[65];
for (new i = strlen(name) - 1; i >= 0; i -= 2) // toto musí byť až za formatovaním stringu pre názov súboru - čiže najlepšie tesne pred uložením hesla
	name[i] = 'x'; // každé 2. písmeno meno nahradíme znakom x, tým získame relativne náhodný string ktorý poslúži ako "sol / salt" do hashovacej funkcie
SHA256_PassHash(key, name, MyHash, 65); // zahashujeme zadané heslo (key) a pridáme salt (name), cele sa to uloží do MyHash
if(!strcmp(MyHash,dini_Get(letters,"Password"),false))
{
	// tvoj kod prihlasenia

 

  • Děkuji (+1) 1
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...