Jump to content
  • 0

pomoc [HELP] Alias - Ukládání nicků


T.Evil

Dotaz

Ahoj,
když se připojí nový hráč vytvořím si soubor s názvem jeho IP adresy. Do tohoto souboru uložím jeho nick.
Mám tedy IP.ini a uvnitř Nick. Dále si vytvořím podmínku. Když se hráč připojí pod stejnou ip adresu s jiným nickem,
otevřu soubor této IP a připíšu další nick. Problém je že přepisuju furt ten jeden ... "Alias". Existuje u ini způsob jako to ukládat
jako Alias, Alias1, Alias2 ... nebo tak ?icon_e_biggrin.gif Nebo se mam na to rovnou vysrat a ukládat to do TXT? icon_e_biggrin.gificon_e_biggrin.gif


OnPlayerConnect

//kód předtim
else if(!fexist(User(playerid)) && fexist(IP(playerid))) //Neexistuje nick ale existuje IP adresa
{
    PlayerInfo[playerid][FirstSpawn] = 2;
    SetPlayerColor(playerid, 0xFFFFFFFF);
		
    new INI:file = INI_Open(IP(playerid));
    INI_WriteString(file, "Alias", GetName(playerid)); //Přepíše Alias(nick) který jsem uložil s Ipčkem poprvé co se připojil
    INI_Close(file);
    return 1;
}
//kód potom

Potřeboval bych si při každém novém nicku uložit nový nick na té IP adrese icon_e_biggrin.gif

Edited by T.Evil
Link to comment
Share on other sites

11 odpovědí na tuto otázku

Recommended Posts

  • 0

Na take ukladanie pouzi includ file, nie INI.

Da sa to aj s ini pripadne, ale je to skarede. V jednom tagu budeš mať celkovy počet mien (napr. 6)
a cez format() budeš lepiť dokopy napr.
Meno1
Meno2
Meno3
.. a pouzijes ich ako tagy.


Jo ahlavne mam pocit ze to co robis je cele zle... IPčky su niečo na čo sa nikdy neda spoliehat od viac ludi na sieti, cez dynamicke IPčky po odosielanie dat s falošnou IP.

Link to comment
Share on other sites

  • 0

Já to dělám kvůli tomu abych viděl kolik a jaký jména jsou na jedný ip, což se může hodit ve hře icon_e_biggrin.gif
Pomocí INI to ukládám do souboru s názvem tý IP a v INI souboru mám

Jméno1 = Alias
Jméno2 = Alias

Jméno3 = Alias
...

Teď řešim jak to readnout a udělat z toho cmd:alias
po jehož zadání ti vyskočí text IP: x.x.x.x.x - Alias = Jméno1, Jméno2, Jméno3 ...

 

CMD:alias(playerid, params[])
{
        new string[258],IPadress[16],alias[258], targetid;
        if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid,0xFFFFFFFF,"text");
	if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, 0xFFFFFFFF, "text");
	if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid,0xFFFFFFFF,"text");

	GetPlayerIp(targetid, IPadress, sizeof(IPadress)) ;

	new INI:file = INI_Open(IP(targetid));
	INI_String("Alias", alias, sizeof(alias)) ;
	INI_Close(file);
	
	
	format(string, sizeof(string), "IP: {FFFFFF}%s{CC0000} - {FFFFFF}%s{CC0000} !", IPadress, alias);
    SendClientMessageToAll(0xCC000022, string);

    
	return 1;

}

Tohle je totální bordel, zatim to mám rozpracovaný icon_e_biggrin.gif Ale docela v tom tápu icon_e_biggrin.gif

Edited by T.Evil
Link to comment
Share on other sites

  • 0

Ak to chceš len aby si zistil koľko hráčov hrá na 1 IP, tak by som ti doporučil robiť klasicky, 1 uživateľ = 1 súbor s jeho menom - meno je unikátne, nebudú 2 rovnaké :p

Popri registrácii si zapíš jeho meno do klasického texťáku pod seba (zoznam všetkých registrovaných hráčov). Následne tento súbor prečítaj, riadok po riadku a postupne čítaj z "hráčovho" súboru jeho IP (nezabudni si tú IP ukladať k nemu do súboru). Ako ich budeš porovnávať je už len na tebe ;) 

 

PS: odporúčam si vytvoriť premennú do ktorej uložiš všetky IPčky a druhú do ktorej uložíš mená - všetko len v tom príkaze ALIAS aby ti to zbytočne nezaberalo dlhodobo pamäť

Link to comment
Share on other sites

  • 0

Je dost neefektivní mít zapsané všechny hráče v jednom souboru a dodatečně otevírat hráčské soubory a kontrolovat IP.

Lepší je mít pro každou IP soubor se seznamem jmen, bez použití ini.

Link to comment
Share on other sites

  • 0

Jj právě chci mít 1 soubor s názvem IP a v tom jména všech co na tý ip byli.
Musel bych zbytečně přepisovat celej kód kdybych to měl udělat bez použití ini.

Takhle mi zbejvá už jenom načíst si jména a poslat to do SendClientMessage
tak nějak jak jsem to psal nahoře cmd:alias. Jestli to nejde tak to budu muset
předělat ale kdyby to šlo.. Byl bych rád :d

Link to comment
Share on other sites

  • 0
else if(!fexist(User(playerid)) && fexist(IP(playerid))) //Neexistuje nick ale existuje IP adresa
{
    PlayerInfo[playerid][FirstSpawn] = 2;
    SetPlayerColor(playerid, 0xFFFFFFFF);
		
    new INI:file = INI_Open(IP(playerid));
    for(new i=0;i<MAX_PLAYERS_REGISTER;i++) // nadefinuj si MAX_PLAYERS_REGISTER - platí pre 1 IP!! kludne tam daj aj 10000000, cyklus sa zastaví na najnižšom možnom čísle
    {
      new str[8], storage[MAX_PLAYER_NAME+1]; // str - pre formát, storage - meno hráča
      format(str, sizeof(str), "Alias%d", i); // str = Alias0, Alias1, ...
      INI_String(str, storage, sizeof(storage)); // načítame názov zo súboru
      printf("Meno: %s - Znaky: %d", storage, strlen(storage)); // Toto je kontrola, ak by to nefungovalo, skontroluj akú dĺžku to vracia 
      if(strlen(storage) == 0) // ak je dĺžka názvu 0, resp. ak pod týmto aliasom ešte nie je uložené meno
      {
        INI_WriteString(file, "Alias", GetName(playerid)); //Přepíše Alias(nick) který jsem uložil s Ipčkem poprvé co se připojil
        break; // ukončíme cyklus, načo by bežal ďalej keď sme meno zapísali
      }    
    }
    INI_Close(file);
    return 1;
}

Načítanie sprav podobným spôsobom

Link to comment
Share on other sites

  • 0

INI_String(str, storage, sizeof(storage));

Takto nelze načíst string a když použiju INI_Load dostanu error argument 2 mismatch a INI_Load(str); funguje ale 

print je "Meno: - Znaky: 0"

 

Jinak díky :)

Edited by T.Evil
Link to comment
Share on other sites

  • 0
INI_String(str, storage, sizeof(storage));

Takto nelze načíst string a když použiju INI_Load dostanu error argument 2 mismatch a INI_Load(str); funguje ale 

print je "Meno: - Znaky: 0"

 

Jinak díky icon_e_smile.gif

 

 

Prepáč, INI som nikdy nepoužíval... každopádne chápeš ako som to myslel, nie?

 

Uvediem príklad:

 

INI:

Alias0=Quiter

Alias1=T.Evil

 

Takže script prečíta Alias0, vráti 6 tak skočí ďalej, prečíta Alias1, vráti 6 tak skočí ďalej, prečíta Alias2, vráti 0 (pravdepodobne, neviem ako je to u INI), tak pod Alias2 zapíše meno a ukončí cyklus

Edited by Quiter
Link to comment
Share on other sites

  • 0

Hh, jo když mám

INI:

Alias0: BlaBla
Alias1: BlaBla
Alias2: BlaBla

Tak si to dokážu přečíst jak potřbeuju to umim. Problém v ini_string je že ti to dycky přepíše Alias0 pokud to chci ukládat jednou funkcí a né třema.
Pro každej string neboli nick bych musel vytvořit speciální funkci kterou to budu ukládat. Podobně jako když ukládám statistiky či data.

Nicméně já to ukládal takhle:

BlaBla = Alias
BlaBla2 = Alias
Blabla3 = Alias

A chtěl jsem loadnout Alias = BlaBla, BlaBla2, BlaBla3 ... Ale to je zbytečně složitý takže seru na ini co se týče ukládání ip a nicků. TXT to jistí :d
 

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