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

Quiter

Uživatel
  • Příspěvků

    801
  • Registrován

  • Aktivní

  • Vítězných dnů

    27
  • Bodů

    36 [ Donate ]

Quiter last won the day on 8. Červen

Quiter had the most liked content!

Reputace

90 The Truth

About Quiter

  • Moto
    Barry Thorne "Big Bear"
  • Narozeniny 16.1.1997

Návštěvníci

The recent visitors block is disabled and is not being shown to other users.

  1. 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?
  2. 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)
  3. Treba čítať celé: Taktiež si určite pred spustením skontroluj, či je na servery viac ako 1 hráč...
  4. 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.
  5. 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
  6. 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ť
  7. 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)
  8. č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/
  9. 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
  10. 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
  11. 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ť
  12. 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
  13. 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
  14. 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
  15. 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
×
×
  • Create New...