DrAkE

V.I.P. Member
  • Hozzászólások

    2.124
  • Csatlakozott

  • Utoljára aktív

Közösségi hírnév

787 Közkedvelt

3 követő

DrAkE felhasználóról

  • Rang
    Veterán
  • Születésnap 1994-11-21

Utolsó profil megtekintők

878 profil megtekintés
  1. Vagy! csak átállítasz egy értéket element datában, és érzékeled kliens oldalon hogy változott az értéke, és annak megfelelően lejátsza az adott járműre a mozgatást.
  2. Attól függetlenül RAGEMP-n játszanak 2000-en, FiveM-en pedig 20.000-en. Azon az RP szerveren meg vannak nagyon max 20-an vagy 30-an :D
  3. Igazából nem a RAGE:MP a legismertebb, FiveM-en többen játszanak :D
  4. Majd ha feledésbe merül a kód, és majd pár hónapra rá ránézel a dolgokra, akkor is ezt mondd :D Csak feleslegesen van bonyolítva az egész. És még a precompiler is sírni fog mikor több százezres kódnál be kell illesztenie mindezen szavakat. (Meg egy sima változónak a nevét miért rövidíted makróval??? make no sense)
  5. Ezekkel a rövidítésekkel nem, hogy megkönnyíted a dolgod programozás terén, de még több ideig is fogja fordítani, emellett átláthatatlan, és csak az idődet fogja elvenni.
  6. Magát a jelszót hashelve küldd el a szervernek, amit a szerveren tovább hashelhetsz egy bizonyos salt-tal. A salt-nak egy általad megadott karakternek kell lennie és nem véletlenszerűnek. Ha mindig véletlenszerű lenne nem tudnád összevetni, hogy helyes jelszót írt-e be vagy sem, mivel nem lenne meg a salt hozzá (bár van aki elmenti adatbázisban minden egyes emberhez tartozó saját saltot).
  7. A szervergép azért van, hogy terhelni lehessen. Ha már belebasznak egy bölömbika processzort ne csak super mariozni akarjanak már rajta az emberek. Azért van, hogy ki lehessen használni. Másrészről érdemes a jelszót kliens oldalon hashelni és úgy elküldeni, ugyanis az RPC-k sima bájtokat küldenek, így lényegében akármilyen egyszerűbb hálózat figyelő programmal kilehet figyelni egyes emberek jelszavát. Összedobtam egy gyors kis tesztet, megnézzük mennyi idő alatt fut le: local TEST_SETTINGS = { interval = 10000, salt_1 = randomString(16), salt_2 = randomString(16), } local tick = getTickCount() for i = 1, TEST_SETTINGS.interval do local password = randomString(32) hash("sha512", hash("sha512", TEST_SETTINGS.salt_1) .. hash("sha512", password) .. hash("sha512", TEST_SETTINGS.salt_2)) end print(string.format("Executed in %dms", getTickCount() - tick)) Természetesen a jelszó minden egyes ciklusnál egy tetszőleges 32 karakter hosszúságú szöveg ami alfanumerikus karaktereket tartalmaz. A fenti kód az én gépemen átlagban véve 310ms alatt futott le. Most annak az esélye, hogy éles szerveren egy adott pillanatban, egy csettintésre összejönne 10.000 kérés, azt nem tartom valószínűnek. Az egyes algoritmusokat brute forceolni tudják csak. Saját algoritmust meg nem érdemes fejleszteni se, hiszen a meglévőeket hozzártő szakemberek írták, és fejlesztik azt.
  8. (RIP nem néztem a dátumot) Egy megadott fájlban elhelyezed a lokalizációs szövegeket az alábbi táblázat formátumban: local Localization = { ["en_EN"] = { ["dashboard_welcome_text"] = "Welcome Aboard", }, ["hu_HU"] = { ["dashboard_welcome_text"] = "Üdvözöllek", } } Aztán pedig elmented (bár ezt már rád bízom, hogyan is): OOP: playerElement:setData("Player:Localization", "hu_HU", false) Non-OOP: setElementData(playerElement, "Player:Localization", "hu_HU", false)
  9. Hát igazság szerint SA-MPban a textdrawok értékei (hol legyen a maga a textdraw, szöveg, szín, stb) azt szerver oldalon tárolja ugyanúgy. Ettől eltekintve jól látod a dolgokat. A szerver tárolja a főbb adatokat, a kliens meg a megjelenítő. A chatnél természetesen a szerver ilyenkor csak közvetítő szerepet lát el, nem tárolja a chat szövegét, hiszen a szerverre nézve felesleges adatnak számít.
  10. GDPR = General Data Protection Regulation. Szerintem már a nevében benne van mi is a GDPR. A felhasználók adatait kellőképpen kell titkosítani, illetve tárolni. Minden adatokkal kapcsolatos dolgokkal tájékoztatni kell a felhasználót, illetve biztosítani kell az adathordozhatóságát. Másrészről, mint cég/magánszemély, köteles vagy ÁSZF-et készíteni, hiszen egy szolgáltatást nyújtasz, és amint valaki bérel tőled valamiféle szolgáltatást, szerződés jön létre. Ezt a szerződést taglalja magában az ÁSZF.
  11. Ha egy szervert akarsz csinálni, akkor valószínűleg a közösségért, és az élményért teszed. Ha ezt az elvet követjük, akkor szerver van a kliensért, vagy a kliens a szerverért? Egyik sincs meg a másik nélkül. Programozók első íratlan törvénye, hogy sose bízz a felhasználóban. Semmi olyan dolgot nem szabad a kliens oldalt tárolni, amiből esetleg plusz információhoz juthat, vagy esetleg felhasználhatja azokat. A szervergép azért szervergép, hogy lehessen terhelni, a kiszolgálókért van és nem fordítva. Másrészről a kliens oldalt legtöbb esetben design elemek megjelenítésére és utasítások kiadására használatosak, de ettől függetlenül még szerver oldalon le kell kezelni minden eshetőséget (ha a játékos hamis adatokat adna meg valamely úton módon (bug, vagy valahogyan hackelt klienssel játszik)). Természetesen vannak kivételek, van amit jobb megírni kliens oldalon. Sokan az SQL lekérdezéseket is félnek használni szerver oldalon, pedig azok aszinkron megoldással vannak tervezve, és egy bonyolultabb lekérdezés is lefut 0,3ms alatt. Mi van akkor, ha a játékos hozzáfér a játék memóriájához, funkcióihoz, és áttudja rakni a CP-ket a saját pozíciójára, így érzékelve azt, hogy elvégezte a munkát? (nem sok az esély rá természetesen, de kitudja mikor lesz egy rosszakaró)
  12. https://www.autoalkatreszonline24.hu/kulso-visszapillanto/vw/golf-iv-1j1
  13. https://wiki.multitheftauto.com/wiki/DxDrawText dxDrawTextnek van wordBreak paramétere, ami arra szolgál, hogy ha a szöveg túlmenne a meghatározott szövegdobozon kívülre, akkor a szót új sorba rakja.
  14. "Rockstar Games\GTA San Andreas\audio\streams" mappában vannak fájlok? Illetve próbáltad Rendszergazda jogosultságokkal futtatni a SA:MP-ot?
  15. local hangulatjelek = { {":D", "#dec277*nevet*#FFFFFF"}, {":)", "#dec277*mosolyog*#FFFFFF"}, {":(", "#dec277*szomorú*#FFFFFF"}, {";)", "#dec277*kacsint*#FFFFFF"}, {"xD", "#dec277*röhög*#FFFFFF"}, {"XD", "#dec277*röhög*#FFFFFF"}, {":O", "#dec277*csodálkozik*#FFFFFF"}, {":/", "#dec277*fintorog*#FFFFFF"}, } for k, v in ipairs(hangulatjelek) do msg = msg:gsub(v[1], v[2]) end return msg