Jump to content

Quiter

Uživatel
  • Příspěvků

    827
  • Registrován

  • Aktivní

  • Vítězných dnů

    32

Everything posted by Quiter

  1. Quiter

    hledám Filmy

    sktorrent napriklad... nie je tam toho moc ale čo je nové tak tam väčšinou je
  2. Quiter

    pomoc Voucher system

    No máš to presne opačne najpr potrebuješ spraviť databázu a potom podmienku v DB si ku každému voucheru pridáš parameter "used" alebo niečo podobne... ak bude true tak už nemôže tento voucher použiť... potom podmienka bude nejak takto: /* Nacitanie zadaneho voucheru z DB */ if (!nacitanaHodnotaUsed) { // moze pouzit /* Ulozenie dat do DB - zmena parametra Used na "true" */ } else { // nemoze pouzit } // EDIT Môže každý hráč použiť daný voucher? Pretože riešenie hore je určené tak, že voucher môžeš použiť len raz a je jedno ktorý hráč ho využije, iný hráč ho už nepoužije Myslel si to tak alebo inak?
  3. SAMP berie najnižšie volné ID pri pripojení, takže toto je veľmi ojedinelý prípad... Naviac random funguje viac menej podla rovnomerného rozdelenia, takže ak je 100 hodnôt, každá má približne 1/100 šancu, a keď budú na servery 2 hráči, tak je to cca 50 cyklov... 50 cyklov v ktorých sa skoro nič nerobí je totálne nič Samozrejme existuje lepšie riešenie... napr. použiť list (arraylist) z PawnPlus a ukladať doň pripojených hráčov... vtedy by sa ten cyklus zopakoval cca 1x (môže sa stať že vygeneruje zabijaka a teda musí znova)
  4. Treba čítať celé: Taktiež si určite pred spustením skontroluj, či je na servery viac ako 1 hráč...
  5. No takto, nech máme nejaké informácie: 1) Robil si celý ten mód alebo upravuješ nejakú verejnú verziu? 2) Vravíš že ti to píše do konzoly, tak potom kde je problém? Stlačím CTRL + F a nájdem požadovanú hlášku... Kontrola bude niekde v danom mieste +-. 3) Kde ti beží server? Na localhoste a ostatní sa pripájajú cez hamachi? Alebo máš niekde hostovaný server? Lebo ak hamachi, tak problém môže byť aj v tom... Popíš bližšie informácie Pawnera tu pravdepodobne nenájdeš, nakoľko MY čo sme na tom vyrastali tak už pracujeme na svojich projektoch (mimo pawn) a sem chodíme skôr aby sme pomohli.
  6. Quiter

    hardware Linux => WIn

    Ak tam chce WIN tak potom odzalohovat osobne veci a preinstalovat OS na windows... Pozor vsak na podporu ovladacov - ak tam je speci hardware tak nemusi existovat ovladac - jedna sa skor o starsie modely
  7. Prepáč ale teraz nehovoríš dobre... Súhlasím že GetPlayerPoolSize ti vráti aktuálne najvyššie pripojené ID, to som ani v mojom príspevku nepopieral (môžeš si ho prečítať znova). Ale funkcia RANDOM vracia čísla od 0 po zadané číslo exkluzívne, tj. ak bude random(10) tak vráti 0...9, čiže číslo 10 nebude výsledkom RANDOM... preto musíš v random použiť GetPlayerPoolSize() + 1 Presne toto som ti hore písal, že si máš najprv prečítať funkciu ktorú používaš... A k tomu kódu... Tvoj kód nebude fungovať, pretože nerozumieš princípu while cyklu... While by sa dal preložiť ako "opakuj pokiaľ platí", takže ty opakuješ ak je hráč pripojený a nie je NPC a skončíš akonáhle nájde NPC alebo nepripojeného hráča Inak povedané, ty losuješ náhodné číslo až do okamihu, kedy sa vylosuje NPC alebo nepripojený hráč... Preto musíš tvoj cyklus opraviť tak ako som ti posielal. Taktiež presne to je dôvod, prečo sa ti kód zacyklí a server padne. A to tabovanie: je pekné že TY sa orientuješ, ale projekt skoro nikdy nerobíš sám a teda v robote by si mal písať kód tak, aby keď to chytí niekto po tebe tak vedel čo si chcel robiť
  8. 1. rada - tabuj, nepoužívaj jednoriadkové podmienky s funkciou - zvyšuje to prehladnosť 2. rada - spoznaj všetky cykly uľahčí ti to prácu... je pekné že vieš while ale treba poznať aj do-while 3. rada - vždy si pozri svoj kód znova - tvoj kód hovorí, že pokiaľ je hráč pripojený A NIE JE npc, tak vylosuj nové náhodné číslo... to je blbosť, ty chceš aby sa vygenerovalo nové pokiaľ hráč NIE JE pripojený ALEBO je npc 4. rada - pozri si definiciu funkcii ktoré používaš - random je od 0 po zadané číslo ale exclusive, takže zadané číslo sa nevygeneruje, takže hráč s najvyšším ID nebude nikdy cieľom Taktiež si určite pred spustením skontroluj, či je na servery viac ako 1 hráč... Ťažko budeš hladať cieľ keď tam je len ten zabijak - tvoj kód sa zacyklí Každopádne som skúšal tvoj kód a nepadá to (samozrejme ani nefunguje), takže chyba bude buď v kóde pred alebo po. Prikladám ti cyklus ako by mal vyzerať. new randomid; do { randomid = random(GetPlayerPoolSize() + 1); } while (!IsPlayerConnected(randomid) || IsPlayerNPC(randomid) || randomid == playerid)
  9. čo by si potreboval? SQL je celkom jednoduchý jazyk Skôr tam ide o to, ako moc komplikované selecty chceš robiť A toto si určite prečítaj https://pawno.cz/index.php?/dontasktoask/
  10. kde si taky riadok vzal? odkial mas a_samp? nic podobneho sa u mna nenachadza... odporucam ten riadok zakomentovat a skusit skompilovat... alebo este v lepsom pripade stiahnut nove a_samp.inc
  11. Dávaš nám riadky zo zlého súboru pri chybe musíš aj čítať o aký súbor sa jedná -> nie všetky chyby sa nachádzajú v tvojom GM C:\Users\START\Desktop\samp server\pawno\include\a_samp.inc(265) : error 029: invalid expression, assumed zero Ty si nejak upravoval a_samp include? priloz sem ten riadok (a pozor na to ktory subor otvaras) C:\Users\START\Desktop\samp server\pawno\include\dini.inc(31) : warning 214: possibly a "const" array argument was intended: "filename" funkcie v DINI include by mala mať konštatné (const) parametre napríklad: stock nejakafunkcia(const filename[]) {} C:\Users\START\Desktop\samp server\gamemodes\SZ1.pwn(2155) : warning 214: possibly a "const" array argument was intended: "text" to iste co hore, akurat sa to uz nachadza v tvojom GM C:\Users\START\Desktop\samp server\gamemodes\SZ1.pwn(2239) : warning 239: literal array/string passed to a non-const parameter Podobne ako hore, vo funkcii by si mal mat const, myslim ze prekladac vtedy nealokuje nove miesto pre premennu ale natvrdo tam vpise dany text C:\Users\START\Desktop\samp server\gamemodes\SZ1.pwn(2540) : error 017: undefined symbol "FALSE"; did you mean "false"? Toto je snad uplne jasne nie? Miesto "FALSE" pouzi "false" - videl som to v tej definicii co si poslal hore
  12. Mne sa to napríklad stávalo keď som mal príliš vela #define Taktiež ak som napr. použil PawnPlus Ak ešte nepoužívaš novší compiler tak skús tento: https://github.com/pawn-lang/compiler/releases/ - môže pomôcť
  13. Quiter

    pomoc time

    Aha :D pekna chybicka do buducna ukaz ktory riadok je 512 (resp. ten na ktorom mas error), budeme vediet na co sa mame zamerat
  14. Quiter

    pomoc time

    No vyzera to ako keby si nemal includnuty ZCMD, pretože error ti piše že "undefined symbol "time" čo je nazov prikazu
  15. Ahojte. Na základe nedávneho príspevku som sa rozhodol spraviť include na čítanie a zápis dát. Tento include vyžaduje mať nainštalovaný plugin PawnPlus <- LINK Prečo? V scripte sú použité utriedené mapy pre optimalizáciu hľadania údajov. Prejdeme teda na použitie. Toto vložíme na začiatok vášho GM - načíta tento include do vášho GM #include <fSystem> Takto otvoríme súbor: Obsah súboru sa uloží do pamäte a je možné ho modifikovať až do doby, než súbor zatvoríte. V prípade že súbor neexistuje, vytvorí sa. new subor = DataOpen("test.txt"); // trva asi 700 tickov ak je v subore 100 000 dat // new subor obsahuje identifikator nasho suboru ktory sa pouziva vo funkciach Uložíme dáta do súboru: Maximálna dĺžka kľúča je 24. Dáta sa neuložia hneď, ukladajú sa až pri zatvorení súboru. Dáta sú ihneď dostupne, nie je potrebne zatvárať súbor, avšak bez zatvorenia súboru sa dáta neuložia! // pre demonstraciu sa ulozi 100 000 dat do suboru - pri testoch cca do 250 tickov (GetTickCount) new kluc[25]; for (new i = 0; i < 100000; ++i) { format(kluc, sizeof(kluc), "riadok%d", i); DataSetS(subor, kluc, "ahoj"); // ulozi string/array // DataSet -> ulozi integer (new) // DataSetF -> ulozi float } // kluc -> kluc pod ktorym sa ulozia nase data "ahoj" Načítame dáta zo súboru: Maximálna dĺžka kľúča je 24. // pre demonstraciu precitame 100 000 udajov, trvanie asi 150 tickov new kluc[25]; for (new i = 0; i < 100000; ++i) { format(kluc, sizeof(txt), "riadok%d", i); DataGetS(subor, kluc)); // nacita string/array // DataGet(subor, kluc) -> nacita integer // DataGetF(subor, kluc) -> nacita float if (i % 1000 == 0) { printf("%d -> %s", i, DataGetS(tst, txt)); } } Zatvoríme súbor: Pri zatvorení súboru sa ukladajú dáta do súboru. DataClose(subor); Ak chceme zatvoriť všetky súbory: DataCloseAll(); Na záver by som chcel požiadať o spätnú väzbu, či už kladnú alebo nie, vždy však poprosím aj nejaký popis. Poznámka: Odporúčam použiť novšiu verziu prekladača (napr. 3.10.0.0) fSystem.inc
  16. Pozerám na to a určite ti príde rozumne stále otvárať a zatvárať súbor? Napr. budem mať 1000 údajov o hráčovi v súbore, lebo môj GM je best pro (hehe) a teda pri načítaní údajov 1000 krát otvorim daný súbor, 1000 krát ho zatvorím a 1000 krát prejdem 1-1000 riadkov súboru, pričom pri každom riadku vykonám ešte x y ďalších operácií? -> z toho vychadza zlozitost na N^2*k -> kde N je pocet zaznamov, k je pocet operacii ktore musis spravit Ak sa mýlim a tvoj script funguje inak tak som zvedavý že ako to je vymyslené rád sa novému priučím Rozumnejsie by bolo pouzit utriedenie daneho suboru, potom ho cely nacitat do pamati, rozparsovat na jednotlive kluce a data a potom logaritmicky skakat po jednotlivych datach, zlozitejsie by bolo ukladanie. Z toho by vysla zlozitost N*k + log(N) Este by sa to dalo optimalizovat tym, ze ak sa 2x po sebe otvori rovnaky subor, nie je nutne ho opatovne otvarat... Taktiez spravit oddelenu funkciu, kde by bolo explicitne povedane, ze teraz idem nacitavat len 1 udaj
  17. Quiter

    ostatní delete

    No bol som sa tam pozrieť a nič moc veru rozdiel tam nejaký nevidím, máš tam občanku, vodičák, zbroják ako 90% týchto serverov a povolania ti asi ani nefunguju, resp. nenašiel som V nápovede máš trochu divnú vec: Bez občianskeho preukazu nemôžete robiť žiadne povolania. Prikazom /jobs si zobrazite povolania ktore môžete robiť bez občianskeho preukazu.... parafrazujem ale význam ostáva Rovnako v napovede je že /gps -> urad, skusil som /gps a nic, prikaz neexistuje Takze rad by som vedel tie rozdieli, co je na tvojom servery unikatne
  18. Quiter

    ostatní delete

    Ehm, nejak som nepochopil tie "featury"? Napr. benzínka je v každom kúsku mapy Skús to nejak viac objasniť Pote se take na serveru nachazi ruzne featury jako napr: Urad, Pizzerie, Benzinka, Ammu-Nation atd..
  19. Na tomto fóre som už dlho a práve tu som objavil krásy programovania a tiež krásu miltiplayer hier. V poslednej dobe už samp nie je také populárne ako kedysi, stále sa však nájdu mladí ľudia ktorí to vyskúšajú a snažia sa niečo vytvoriť. Presne pre nich je tento článok určený. Takže, moja idea je hlavne o tom, vytvoriť mód pre všetkých od všetkých. Jednalo by sa o verejný (a možno aj nie) repozitár na gitlabe/hube v ktorom by sa nachádzal celý server (vrátane include/pwn/amx/exe/...), takže každý nový člen by jednoducho mohol hostovať vlastný test server a spoločne by sme pracovali na móde (prípadne filterscriptoch - filé scriptoch). GM by bol členený na xy scriptov (presnejšie includov) aby mohol každý člen pracovať na vlastnej funkcionalite a taktiež by musel byť každý riadok (blok) riadne okomentovaný. Moja otázka teda znie, nachádza sa tu niekto, kto by sa pridal? Spolupráca je čiste dobrovoľná (jedine by bolo nutné požiadať o práva) a výsledný GM by bol voľne dostupný pre všetkých. Nakoľko je to len voľnočasová aktivita tak finančná odmena nie je, jednalo by sa len o zisk skúseností a možno aj dobrých základov pre ďalší postup v programovaní EDIT // Ešte upresním, nehľadám namakaných programátorov ale nováčikov ktorí majú chuť sa učiť pawn, ale pridať sa môže ktokoľvek.
  20. Quiter

    pomoc LC MOD

    Default VW je 0, nie -1 (objekty maju -1 aby boli vo všetkých, nie vozidla) Kde konkretne vytváraš to vozidlo? Pretože z toho čo píšeš som pochopil že robíš toto: 1) zadáš príkaz - to premiestni teba a tvoje aktuálne vozidlo do VW 630 000 a voláke drobné 2) vyberieš vozidlo z nejekého menu - to vytvorí vozidlo ktohovie v akom svete, pretože kód opäť nemáme k dispozícií Takže to napíš ešte raz a všetko, všetky kódy, všetko čo presne ako kde a prečo robíš... Inak nečakaj že ti niekto pomôže
  21. Quiter

    pomoc LC MOD

    Nejako nerozumiem čo po nás chceš? Splietaš niečo o autách a používaš funkcie pre hráča... Existuje funkcia ktorá ti zistí, v akom VW sa vozidlo nachádza (GetVehicleVirtalWorld s parametrom vehicleid). Ak chceš lepšiu odpoveď, poskytni lepší popis problému (a kód)
  22. Quiter

    pomoc Texture Studio

    Ostatných ignoruj, proste ti nevedia poradiť a len zbierajú príspevky (lebo očividne niekto nevie čítať predošlé príspevky a musí 10x písať to isté - spamätajte sa uživatelia). Kukám tvoj kód (ano dá sa to prečítať ale naozaj nabuduce sem skopíruj kód a nie obrázok) a stačí keď si pozrieš ako sa tvoria príkazy a ako sa robí príkaz na spawn vozidla - tj. zistiť pozíciu hráča. Celý kód spočíva v pár jednoduchých krokoch: 1) Vytvor príkaz 2) Zisti pozíciu hráča (GetPlayerPos) 3) Vytvor auto na týchto pozíciach (v podstate tvoj kód, akurát nastav pozície vozidlu) 4) Vlož hráča do auta (PutPlayerInVehicle) // EDIT Sa nedivím že toto fórum ide do hája keď uživatelia iba spamuju... Potom má help 25 príspevkov a žiaden použiteľny, všade len samí hejt že ten nevie písať, ten nevie fotiť ten nevie nič...
  23. Quiter

    pomoc Pomoc

    No v PWN maš callback OnPlayerDeath(playerid, killerid, reason) { return 1; } V tomto musis zistit akou zbranou bol zabity - to je parameter reason Nasledne si musis do nejakej globalnej premennej (alebo ak si skusenejsi tak PVar) ulozit pocet tychto zabiti - tato premenna bude dvojrozmerne pole. V pripade ze ani teraz netusis o com je rec, tak odporucam precitat si nejake tutorialy tu na fore
  24. Quiter

    pomoc Pomoc

    V GM/FS mas OnPlayerDeath(playerid, killerid, reason) reason je zbran ktorou bol zabity killerid je id hraca ktory ho zabil Takze si spravit nejake pocitadla (pre kazdeho hraca vlastnu) a tuto premennu budes navysovat
  25. Myslím že problém bude v switch chýba ti break, mám dojem že v c++ je potrebný break pre switch Tj. program sa ti neopakuje ale switch sa presunie na zvolený CASE, vykoná ho a pokračuje ďalej nasledujúcim a nasledujúcim caseom Moja rada: pridaj si viac výpisov :D alebo debug EDIT// Ešte môže nastať problém ak miešaš std::cin a inú metódu inputu ako napr. getline
×
×
  • Create New...