Jump to content

ATomas

Uživatel
  • Příspěvků

    2927
  • Registrován

  • Aktivní

  • Vítězných dnů

    80

Everything posted by ATomas

  1. Mozna pretexturovanim na tom indexu kde to blika.
  2. Jen poznamka k tomu stock. Ano compilator nevyhodi hlasku ze jsi to nepouzil a zaroven to danou funkci/promenou nezahrne do kompilovaneho kodu amx (tedy zmensi celkovou velikost vysledneho strojoveho kodu)
  3. return nemusi byt uvede nvzdy, jen v pripade kdyz potrebujes aby ti funkce neco vratila A nebo si to nainicializuje rovnou do pole a pri startu si jen vytvori ty pickupy texty atp a pak nemusi resit pri compile-time kolik ma nemek Ale je pravda ze se k pawnu vratil po hodne dloube dobe. Tenhle property system jsem uz nekde videl to je od mavericka tusim... A jeste to pouziti dini to uz je fakt historie
  4. Protoze se trochu zabejva optimaliazci a kdyz pouzijes PoolSize tak nemusis provadet x zbytecnych operaci pri cyklu s IsPlayerConnected. I kdyz pravdou je ze by efektivnejsi bylo nejake pole, ktere by obsahovalo pouze idcka pripojenych hracu. A kdyz uz jsme u toho, uplne nej by bylo udelat sa-mp multithread, to by vyresilo drtivou vetsinu problemu
  5. no lze public OnPlayerConnect(playerid) { if(GetPlayerPoolSize() == 1) //vytvor vozidla return 1; } public OnPlayerDisconnect(playerid,reason) { if(GetPlayerPoolSize() == 0) //smaz vozidla return 1; }
  6. To je ale kravina To se s zmenis u sebe html stranku nemeni nic na strane serveru Nehlede nato ze ta stranka po prihlaseni na steam vubec € neukazuje
  7. Jsem jsem to spravne pochopil, tak operator '*' escapuje znaky (ve smyslu HTML entit?) a posle je na vystup (echo) ?
  8. ATomas

    návod PHP II. Cykly

    A Foreach lze procházet jakékoliv pole. Jeho kouzlo je v tom že projde vždy celé pole bez ohledu na tom jak pole vypadá. Narozdíl od normálních programovacích jazyků, kde pole je v paměti uspořádáno lineárně a vždy za sebou (Kvůli rychlosti) - tj ten důvod proč se špatně "natahuje", tak php s polem pracuje úplně jinak. Ve výsledku lze pole indexovat až do úplných extémů jako třba mít "mezery" mezi indexy. To kdyby jsme procházeli for cyklem, tak nám přibudou zbytečné iterace, zato foreach proběhl pole a jeho náročnost je vždy rovna počtu prvků pole. Jak rád s oblibou říkám, PHP nám dovolí napsat jakoukoli prasárnu, proto ho má asi tolik lidí v oblibě Ale slyšel jsem že se prej Phynton snaží PHP nehradit a je na dobré cestě, no snad se alespoň lidi naučí tabovat
  9. ATomas

    návod PHP III. Databáze

    Každý databázový system použitý na amíru je lepší než PDO, ale jde o to jak velký projekt děláš, na kolika strojích pojede a každý stroj si si může nárokovat jiný DB systém. A pokud to pak máš nějak udržovat, tak je jednodužší PDO i za cenu toho, že bude o malinko pomalejší. Ale zase děláme weby, jestl ise stránka bude načítat 1s nebo 2s je úplně fuk
  10. ATomas

    návod PHP III. Databáze

    PDO je univerzalni db system. Tedy napises appku v PDO a pak si tam muzes nasadit MySQL, FireBird nebo cokoliv chces bez toho, aby jsi primo neco prepisoval v kodu. Zapisování SQL příkazu stylem Už je dneska standard, pomocí prepare a execute se da lehce předejít věcem jako SQL injection (kotrola a escapovaní znaků atp...)
  11. Dobre tedy. OnPlayerRequestClass se rozhodne nevola s potvrzenim dialogu nato ma dialog svou funkci. Ale OnPlayerRequestClass se vola v okamziku, kdyz je clientova hra pripravena na vyber postavy, tzn to je okamzik kdy mu mas tu kameru nastavit. A SpawnPlayer musis dat az prave ten dialog potvrdi (OnDialogResponse) Pseudo-kod: public OnPlayerConnect(playerid) { ShowPlayerDialog("prihlas se zadej heslo"); } public OnPlayerRequestClass(playerid) { SetCameraPos(...) //osobne bych ten dialog dal radeji sem. } public OnDialogResponse(playerid) { if(dialog == login) { SpawnPlayer(playerid); SCM("prihlasil ses hraj") } }
  12. Funkce SpawnPlayer zrusi dane nastaveni hracske kamery a prepne ji na pohled z 3 osoby, jako normal kdyz hrajes. A protoze v OnPlayerRequestClass volas timerem funkci SkipSpawn, ktera hrace spawne (mimochodem nechapu smysl timeru s 1ms, neni lepsi to volat naprimo? ), tak si tu kameru sice nastavis, ale hned zase vypnes. Reseni? Prodlud ten timer alespon na par vterin. BTW nikde v kodu co jsi nam ukazal nevidim prihlasovaci dialog.
  13. ATomas

    pomoc Čítanie

    Logicky predpoklad je, ze pokud si neudelas plugin tak file.inc bude vzdy nejrychlejsi A myslim ze pawn ma hodne veci, kterejma by te mohl prekvapit. BTW dynamicky pocet parametru funguje v funkci uplne v pohode. Rad bych videl ten exhample, ale nejak nechapu jak to souvisi s tohle temou. V dokumentaci od compuphase a verzi co pouziva sa-mp je nekolik rozdilu (napriklad stredniky)
  14. ATomas

    pomoc Čítanie

    No tak napsal ze to chce pres file.inc coz je rozhodne dobry krok. A pouzit strfind na hledani jednoho znaku? To fakt neni dobry krok. new name[24],pos,pos2,Data[128],File:soubor = fopen("soubor.txt",io_read); if(soubor) { fread(soubor,Data);//v promene Data mame "Meno - Jozo | Heslo - 123 | Peniaze - 99999 | Skore - 500" //pro cisla: //pro prvni pos = chrfind('-',Data)+2;//strval(Data[pos]); //a pro vsechny dalsi pos = chrfind('-',Data,pos)+2;//strval(Data[pos]); //a pokud chci string: pos = chrfind('-',Data)+2; pos2 = chrfind('|',Data,pos); strcat(name,Data[pos],pos2-pos);//a v promene name je string napr: "Jozo" <- zde by sel efektivneji pouzit i memcpy fclose(soubor); } else print("Nemam pristup k souboru");
  15. Ti to prelozim, aby jsi tomurozumel, nebo se alespon pokusim. Tabovat znamena ze smazes #pragma tabsize 0 prootze to je prasarna a pak je jednoduche pravidlo po kazde zavorce { budes psat o jeden TAB navic a po kazde zavorce } budes psat o jeden tab o min. vysledkem bude ze budes mit vzdy zavorky { a } pod sebou. A prootze jsou parove tj v celem modu musis mit stejny pocet { a }. Pokud stejny pocet nemas, tak to compiler neumi prelozit a bude ti hazet chyby na mistech kde chyby realne nejsou.
  16. dej si ip clienta toto "localhost:7777" bez uvozovek a pak se muzes pripojit na ten tvuj server, ale pozor pujde se tam pripojit pouze tobe.
  17. Jo pravda to * je tam fakt lehko prehlednutelne 1) K + K + K = 30 -> K = 10 K + 2P + 2P = 18 -> 4P = 8 -> P = 2 2P - 2B = 2 -> 2B = 2 -> B = 1 B + K * P = 1 + 10 + 2 = 21 2) K+K+K = 30 -> K = 10 K + P*P + P*P = 18 -> 2(P*P) = 8 -> P*P = 4 -> P = +-2 (budu brat +2) P*P - B*B = 2 -> B*B = 2 -> B = +-1.41 (budu brat +1.41) B + K * P = 1.41 + 10 + 2 = 21.41
  18. Tak ja bych to osobne chapal dvema zpusoby: Nejdriv si to oznacime: Kun = K Podkova = P Bota = B 1) K + K + K = 30 -> K = 10 K + 2P + 2P = 18 -> 4P = 8 -> P = 2 2P - 2B = 2 -> 2B = 2 -> B = 1 B + K + P = 1 + 10 + 2 = 13 2) K+K+K = 30 -> K = 10 K + P*P + P*P = 18 -> 2(P*P) = 8 -> P*P = 4 -> P = +-2 (budu brat +2) 2P - 2B = 2 -> 2B = 2 -> B = 1 B+K+P = 1 + 10 + 2 = 13 Co cert nechtel oba dva maji stejny vysledek .D
  19. - Nejdriv bych ti doporucil aby sis na local svr poridil crashdetect, je to sikovna vecicka, ktera ti dokaze odkryt runtime chybu, tzn chybu ktera ti zastavi kod. napr zasah na neplatny index pole atp... - Druha varianta, ktera mne napada je ta, ze si nekde to pole vynulujes a tedy ten cyklus ti to neprojde (napr pokud to mas v OnPlayerDisconnect tak si dej pozor jestli to opravdu nejdriv ukladas a az potom nulujes promenou). Sice nevim jaky presny ucel tvuj kod ma, ale napadlo mne lepsi reseni, ktere mozna i vyresi problem: new bool:oznauto[MAX_VEHICLES] = {-1,...}; stock SaveAllVehicles(playerid) { new saveindex = 0,cesta[128]; format(cesta, sizeof(cesta), "/Auta/%d.sav", saveindex);//POZOR zde bude vzdy string "/Auta/0.sav" !!! for(new i = 0; i < MAX_VEHICLES; i++) { if(oznauto[i] != -1) { //format(cesta, sizeof(cesta), "/Auta/%d.sav", saveindex);//nema to byt na teto urovni? if(!dini_Exists(cesta)) dini_Create(cesta); //zde jsem odmazal else, sice si dini uz moc nepamatuju ale dini_create vytvori prazdny soubor a s tim else by tam nevlozil obsah dini_IntSet(cesta, "Model",AutoData[i][model]); dini_FloatSet(cesta, "X", AutoData[i][xspawn]); dini_FloatSet(cesta, "Y", AutoData[i][xspawn]); dini_FloatSet(cesta, "Z", AutoData[i][xspawn]); dini_FloatSet(cesta, "angle", AutoData[i][anglespawn]); dini_Set(cesta, "Barva1",AutoData[i][col1]); dini_Set(cesta, "Barva2",AutoData[i][col2]); dini_FloatSet(cesta, "RespawnTime", AutoData[i][respawn]); dini_Set(cesta, "Majitel", AutoData[i][majitel]); saveindex++; } } } stock CreateVehicleForPlayer(playerid,modelid, x, y, z, angle, color1, color2, respawntime) { new vehicleid = CreateVehicle(modelid, x, y, z, angle, color1, color2, respawntime); if(vehicleid != INVALID_VEHICLE_ID) oznauto[vehicleid] = playerid; return vehicleid; } Navic to ma vyhodu ze podle vehicleid si muzes zjistit kdo je majitelem vytvoreneho vozidla (-1 pokud vozidlo majitele nema)
  20. Takovy neexistuje Mluvim z vlastni zkusenosti
  21. 1. Specialni formular pro zalozeni helpu nezni spatne. Ale cekat na schvaleni od moderatoru? To celkem prodlouzi cekaci dobu na vyreseni problemu. Uz takhle se tu zadne helpy poradne nezakladaj protoze autor vzdy dostane hate zato ze si neumi poradit sam (jaka ironie, ja vim, ale tem lidem to proste nedochazi ze kdyz zalozil help, tak asi nevi, jinak by ho nezakladal). Jako tady uz neni ani komu odpovidat na help, drive jsem tu byval dost aktivni, protoze tu bylo co resit a komu pomahat. Ale tedka se tu poradne help nezalozi, a misto toho aby jste motivovali uzivatele, aby na tenhle web chodili, tak se jim jen hazou klacky pod nohy. 2. Tohle je ale dobry napad, alespon budou novacci vedet, jaky uzivatel je duveryhodny a ktery ne. Hlavne kdyz uz treba dostane dve odpovedi v helpu .D
  22. To ze to nekdo vytvoril uz pred tebou, neznamena ze kopirujes jeho praci nebo ze mu to krades. Vykasli se na hate idiotu a nenech si kazit chut k tomu neco vytvorit.
×
×
  • Create New...