Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

DuFF

Uživatel
  • Příspěvků

    99
  • Registrován

  • Aktivní

  • Vítězných dnů

    12

DuFF last won the day on Září 12

DuFF had the most liked content!

Reputace

29 Dwaine

About DuFF

  • Moto
    Dwaine
  • Narozeniny 22.8.1998

Kontaktní údaje

  • Skype
    lupino297

Návštěvníci

699 profile views
  1. Trochu si ten login prekombinoval, skús to nejak takto: 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.
  2. 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).
  3. 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á.
  4. Ospravedlňujem sa za otváranie starého topicu, ale všimol som dosť podstatný bug. Nie je ošetrený výber (ani vklad) zápornej čiastky. Funkcia OnlyNumbers mi síce zabráni napísať do dialogu priamo zápornú hodnotu, ale myslím, že mi nič nebráni docieliť zápornú hodnotu pomocou overflowu. Napríklad tak, že by som do dialogu na výber peňazí napísal sumu 2147483649 (2^31 + 1). Funkcia OnlyNumbers ma nezastaví, pretože každý znak v reťazci "2147483649" je platná číslica. strval("2147483649") vracia hodnotu -2147483647. if (GetPlayerMoney(playerid) < strval(inputtext)) ma nezastaví, pretože budem mať pri sebe viac $ ako -2147483647. Riadok GivePlayerMoney(playerid, -strval(inputtext)); nakoniec spôsobí, že mi server vyplatí 2147483647 $ aj napriek tomu, že som v banke nemusel mať uložené vôbec nič.
  5. DuFF

    VIP - GAMING

    Bohužiaľ (pre niekoho vďakabohu), realita je taká, že všetky známejšie rze servery sú už buď úplne mŕtve (progamers, sacz, nfs, tgr, avalon, play sector, velka parba, psycho social, real national...) alebo postupne zomierajú aj napriek (aspoň minimálnej) snahe majiteľov a admin teamu (bfs, snk, ...).
  6. Zdravím, má niekto nápad, ako sa bez použitia hrubej sily dopracovať k riešeniu rovnice 2 * n^2 = d^2 + d, ak musí platiť 50 <= d <= 500 a n <= d? Použitím hrubej sily som sa síce dopracoval k jedinému možnému riešeniu (d = 288, n = 204), ale verím, že na to existuje aj krajší postup. // Edit: n a d sú prirodzené čísla.
  7. Predpokladám, že ide o obdĺžnikovú (výška nás nezaujíma) zónu zadanú 2 protiľahlými bodmi. Označme tieto body A, B a príslušné súradnice týchto bodov Ax, Ay, Bx a By. Na tomto obrázku vidno zónu, ktorej Ax = 1, Ay = 2, Bx = 3 a By = 5. V tejto zóne ležia všetky body, ktorých súradnica x je väčšia alebo rovná 1 a menšia alebo rovná 3 a zároveň ich súradnica y je väčšia alebo rovná 2 a menšia alebo rovná 5. Vidíš, že v zóne ležia všetky body, ktorých súradnica x je medzi Ax a Bx a zároveň ich súradnica y je medzi Ay a By. Mohol by si teda napísať niečo takéto: Tento kód má jeden problém - musíš vždy zabezpečiť, aby bolo Ax vždy menšie alebo rovné Bx a Ay vždy menšie alebo rovné By. Aby si si nemusel dávať taký veľký pozor, môžeš vo funkcii kontrolovať, či to naozaj platí a v prípade potreby argumenty vymeniť.
  8. Máš už vytvorenú mysql databázu a funkčné ukladanie banov do nej? To by som riešil ako prvé. Na webe sa potom už len na túto databázu pripojíš, pomocou jednoduchého query získaš zoznam banov a následne cyklom každý ban zobrazíš ako nejaké html elementy (pravdepodobne to chceš ako tabuľku).
  9. Ja by som toto zakomponoval skôr do funkcie, ktorou budem zvyšovať XP hráča. Rovno by som mu v nej zvýšil level, ak by to bolo možné a zavolal nejaký callback, napr. OnPlayerLevelIncreased(playerid), ktorý by mal na starosti odmeny za nový level (toľkokrát, na koľko levelov by mal hráč XP). // Edit: prikladám kód pre zmätených (netestoval som)
  10. Práve som testoval tento kód a po zadaní príkazu /createpickup sa pickup vedľa mňa vytvoril. Keď som sa naň postavil, zobrazila sa mi tiež hláška „Skrytý balíček“. Toto bude pravdepodobne dôvod, prečo sa ti pickup nezobrazil. Parameter pickupType som dal účelovo ako posledný, aby mohol byť nepovinný (defaultne PICKUP_TYPE_UNDEFINED). Ak vymeníš poradie parametrov v definícii funkcie, musíš vymeniť aj poradie argumentov vo volaní funkcie. Predpokladám, že upravená definícia funkcie u teba vyzerá nasledovne: stock CreatePickupEx(model, type, Float:X, Float:Y, Float:Z, E_PICKUP_TYPE:pickupType, virtualworld) V tomto prípade chceš funkciu volať nasledovne: CreatePickupEx(1279, 15, x, y, z, PICKUP_TYPE_PACKAGE, -1); Navrhujem ti vyskúšať najskôr neupravenú verziu funkcie a do úprav sa púšťať až keď ti bude neupravená verzia fungovať. Modifikátor „stock“ pri funkcii znamená, že funkcia bude do výsledného .amx súboru zahrnutá iba vtedy, ak sa niekde v kóde používa. Ak ju nikde nepoužiješ, kompilátor ju bude ignorovať a na rozdiel od klasickej funkcie (bez modifikátoru) nedostaneš varovanie, že funkcia nie je nikde použitá. Využíva sa to napríklad v includoch (väčšinou nepotrebuješ použiť všetky funkcie, ktoré include obsahuje). Viac o funkciách a modifikátore stock sa môžeš dočítať napríklad tu.
  11. Nebude lepší nápad uložiť si pre každý pickup, či ide o skrytý balíček, o pickup na opravu auta, (prípadne o nejaký iný typ), alebo to nie je žiaden z týchto prípadov? Tých 16 kB ( ak správne počítam 4096 * 4 B ) pamäte nikoho nezabije a ak potom budeš mať viac pickupov rovnakého typu, budeš môcť v konštantnom čase zistiť, aký typ pickupu si zobral. Momentálne musíš napríklad na zistenie, či si zobral repair pickup, prechádzať celé pole s repair pickupmi. Myslím to nejak takto (kód som neskúšal, nezaručujem funkčnosť, chcem iba ukázať myšlienku): A ešte lepší nápad by bol asi využiť Streamer plugin, jeho CreateDynamicPickup, Streamer_SetArrayData a Streamer_GetArrayData. Ako na to sa môžeš dočítať napríklad tu.
  12. DuFF

    pomoc pomoc?

    V tom prípade by som ti navrhol prečítať si ešte 5-krát a pomaly upozornenie z môjho predchádzajúceho príspevku.
  13. DuFF

    pomoc pomoc?

    Riadky, ktoré si poslal, používajú Streamer Plugin. Musíš si ho stiahnuť (napríklad z tohto odkazu). V stiahnutom archíve v priečinku pawno/include nájdeš include streamer.inc, ktorý si vlož do priečinku include vo svojom priečinku s pawnom. Následne môžeš skompilovať tento kód: Upozorňujem ťa ešte na to, že ak sa pokúsiš spustiť tento filterscript na nejakom serveri, musí na ňom bežať Streamer Plugin. Nahráš ho tam tak, že si zo stiahnutého archívu z priečinku plugins vyberieš streamer.dll (ak používaš Windows) alebo streamer.so (ak používaš Linux alebo máš server hosťovaný na Fakahede) a vybraný súbor umiestniš do priečinku plugins vo svojom samp serveri (prípadne na hostingu). Potom už len tento plugin zapíšeš do server.cfg podobným spôsobom, ako tam zapisuješ filterscripty. Do server.cfg zapíšeš "plugins streamer.dll" alebo "plugins streamer.so" (podľa toho, ktorý súbor si nahral do priečinku plugins).
  14. DuFF

    pomoc pomoc?

    Ukáž nám kód, ktorý sa pokúšaš skompilovať a robí ti problémy. Ak chceš pridať mapu do filterscriptu, pridaj riadky s CreateObject do public OnFilterScriptInit. Ak ju chceš pridať do herného módu, pridaj tieto riadky do public OnGameModeInit. Ukážka, ako by mal vyzerať kód filterscriptu, ktorý na server pridá nejaké objekty: Tiež môžeš zvážiť využitie streameru - hlavne ak sa chystáš pridávať väčšie množstvo objektov.
  15. DuFF

    pomoc GTA - bug

    Skús možno ešte spustiť hru ako administrátor. Možno bude iba problém s právami na zápis do dokumentov.
×
×
  • Create New...