Jump to content

Quiter

Uživatel
  • Příspěvků

    827
  • Registrován

  • Aktivní

  • Vítězných dnů

    32

Příspěvky posted by Quiter

  1. 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?

    • Děkuji (+1) 1
  2. před 4hodinami, Lukasz said:

    Jo, jsem slepý.

    Ono by bylo stejně asi lepší vzít reálný počet hráčů na serveru, vygenerovat podle toho náhodné číslo a dopočítat k jakému playerid to sedí. Ono když ti GetPlayerPoolSize() vrátí třeba 100 (na jeho serveru nereálné, pokud to nezaplní NPC), na serveru máš ale jen dva hráče, tak to pak dá zabrat trefit se do správného playerid.

    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. 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.

  4. 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ť

    • Líbí se mi to! (+1) 4
  5. 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)

     

  6. před 29minutami, Anonimus24 said:

    ZDE: error
     

    
    C:\Users\START\Desktop\samp server\pawno\include\a_samp.inc(265) : error 029: invalid expression, assumed zero
    
    public SAMP_INCLUDES_VERSION = 0x037030;

    ten  řádek který jsi chtěl z a-samp

    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

  7. 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

     

  8. 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

    • Líbí se mi to! (+1) 2
  9. 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

    • Paráda! (+1) 1
  10. 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..

     

  11. 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.

     

    • Líbí se mi to! (+1) 2
  12. před 15hodinami, Mivčo said:

     

    
    DestroySelectionMenu(playerid);
    CreateSelectionMenu(playerid);
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), LC2SA4SAMP_VWORLD);

     

    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 :)

  13. 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)

  14. 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 :)

  15. 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

  16. 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...