Jump to content

Quiter

Uživatel
  • Příspěvků

    827
  • Registrován

  • Aktivní

  • Vítězných dnů

    32

Quiter last won the day on 21. Květen 2023

Quiter had the most liked content!

Reputace

99 The Truth

1 Follower

About Quiter

  • Narozeniny 01/16/1997

Návštěvníci

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

  1. Quiter

    hledám Event system v1.0

    Tuším je v podmienkach, že zdieľané FS, GM atď musia obsahovať aj zdrojový kód. Alebo sa mýlim?
  2. To vážne nevidíš, že je to stále dokola jeden a ten istý error? Aj HIP ti to už písal... stále dokola a dokola a dokola ten istý error... Takže logicky použi stále dokola a dokola a dokola tú istú opravu... Prejdi si prosím ťa základy... Nechápem, načo chceš používať sofistikované (také čo potrebujú hlavu) knižnice, keď ti chýbajú základy.
  3. Tak inak, C:\Program Files\Rockstar Games\GTA San Andreas\SAMP\pawno\include\amx_assembly\dynamic_call.inc(42) : fatal error 100: cannot read from file: "opcode" toto je súbor a riadok v ktorom je chyba, otvor si ten súbor, nájdi daný riadok a zisti, akym spôsobom je includnuty "opcode" na toto nepotrebuješ vysoký level angličtiny :D #inlcude <opcode> // opcode je v zlozke "pawno/includes" #include <zlozka5/opcode> // opcode je v zlozke "pawno/includes/zlozka5" #include "./includes/zlozka42/opcode" // opcode je v zlozke "pawno/includes/zlozka42" - resp. zacina tam, kde spustas compilator (defaultne zlozka pawno)
  4. predpokladám že zložku / priečinok "internal" si si vytvoril ty... takže máš 2 možnosti 1) drž sa návodu a uprac si priečinky / zložky 2) prepíš YSI súbory tak, aby mali správne cesty k súborom (toto dá omnoho viac práce)
  5. Ťažko povedať či sa vtedy vôbec vykonáva OnGameModeExit - na wiki je písané že v prípade crashu sa to nevykonáva. Čo keby si na to skúsil ísť z opačného konca? Ak je problém iba to, že to hráča nekickne pri REŠTARTE servera, tak ho kickni po jeho spustení :D poznač si čas zapnutia servera (ongamemodeinit) a porovnávaj pri pripojení hráča. Ak sa hráč pripojí napr. 1 minutu (alebo skôr) od spustenia GM, tak ho kickni a napíš mu aby sa pripojil znova napr. za minútu... Nie je to síce ideálne riešenie, ale ani tvoj problém nie je normálny - stále si myslím že máš v GTA nainštalované nejaké módy ktoré to spôsobujú.
  6. Predpokladám, že celý problém je v synchronizácií - ty zavoláš Kick, a kým tá informácia dorazí ku klientovi (hráčovi), tak server je už offline - ale možno sa mýlim. Ako už bolo spomenuté, sprav si vlastný príkaz na reštart serveru: for (all players) Kick(playerid); SendRconCommand("gmx"); // ešte lepšie je dať toto do timeru napr. na 1 sekundu Zdroj Nemáš ten príkaz "kill" v nejakom FS? možno to spôsobuje problémy Posledné čo mi napadá je parkour mod :D viem že ten dosť často spôsoboval to, že ti nechal 0 HP ale nezabil ťa...
  7. Neviem či úplne chápem čo chceš, ale čo keby si každému bodu priradil "prioritu" a následne túto prioritu znižoval ak v jej okolí pribudol nový hráč? Príklad: 5 x 5 001 001 001 001 001 003 003 003 002 001 003 003 003 002 001 001 001 001 001 001 003 100 003 002 001 003 100 003 002 001 001 001 001 001 001 003 003 003 002 001 004 004 004 002 001 001 001 001 001 001 002 002 002 002 001 003 004 004 004 002 001 001 001 001 001 001 001 001 001 001 002 003 100 003 002 Najprv majú všetky maximálnu prioritu Potom vygenerujem pozíciu 1, 1 (začínam 0, 0) a všetkym okolo znížim prioritu o 2 a tým vedľa nich o 1. Potom vygenerujem pozíciu 4, 2 a opäť znížim prioritu. Prvku ktorý vygenerujem nastavím úplne najnižšiu prioritu aby mal prakticky 0 šancu že sa opäť vyskytne. Vo výsledku to pre teba znamená, že pred generovaním náhodnej pozície si musíš vypočítať súčet priorít (ideálne ako "1 / priorita"), vygenerovať číslo z tohto rozsahu a potom nájsť ktorá pozícia patrí vygenerovanej hodnote. Takže vo výsledku by to mohlo robiť to čo chceš, ale je za tým dosť réžie.
  8. Quiter

    pomoc Statistiky

    Musíš čítať celú radu ktorú ti dal DuFF Aby si nemusel otvárať súbor s topkami pri každom porovnaní, je dobré držať si jeho kópiu v pamäti. Keď to spravíš tak ti stačí len pri vypnutí a zapnutí servera riešiť súbor (alebo v nejakom intervale, povedzme 24 hod). K tvojmu problému - samozrejme že hodnota je iná, keďže ty tú hodnotu prepisuješ len keď sa hráč odpojí. Tj. ja sa odpojím, uloží sa hodnota 54, následne sa pripojím a nazbieram ďalších 36, takže mám 90. V tom príde TOP ktorý vypíše že mám najviac 54 pretože táto hodnota je zapísaná v súbore pretože som sa ešte neodpojil. Chápeš? Riešenie: pred vypísaním hodnoty prebehni v cykle všetkých hráčov a skontroluj či daný hráč nemá viac ako maximum zapísané v súbore (po novom v pamäti), ak má viac, aktualizuj si premenne TopsName a TopsHodnoty
  9. Quiter

    pomoc Include/GM

    Jednoducho #include "utils/GivePlayerMoneyEx.pwn" // tu mozes dat aj viac uzitocnych funkcii, nie len 1 #include "feature/Duels.pwn" Proste das tu funkciu GivePlayerMoneyEx PRED include s duelmi A ak to ti bude stale davat neake errory tak ich sem napis spolu s kodom
  10. Quiter

    pomoc error

    napríklad pri kóde nižšie ti chýba zátvorka pred "case 2:" (tj. neuzatváraš "case 1:") ale to nesúvisí s daným error - to ti len vytvára ďalší error :D case 1: { new i[2222]; strcat(i, "{FFFFFF}Premium účet na 5 dnů {FF1493}$500.000\n"); strcat(i, "{FFFFFF}Premium účet na 30 dnů {FF1493}$2.000.000 {FFFF00}Sleva 20%\n"); strcat(i, "{FFFFFF}Premium účet na 60 dnů {FF1493}$4.000.000 {FFFF00}Sleva 15%\n"); strcat(i, "{FFFFFF}Premium účet na 90 dnů {FF1493}$6.000.000 {FFFF00}Sleva 15%\n"); strcat(i, "{FFFFFF}Premium účet na 180 dnů {FF1493}$15.000.000\n"); strcat(i, "{FFFFFF}Premium účet na 360 dnů {FF1493}$32.000.000"); ShowPlayerDialogEx(playerid, DIALOG_HPREMIUM, DIALOG_STYLE_LIST, "Premium účet", i, "Vybrat", "Zavřít"); case 2: { Nakoľko tam už však takýto preklep máš, skontroluj si či sa ti to nestalo niekde vyššie (nad riadkom 29071) - ak ti tam chýba zátvorka, môže to spôsobiť že si mimo "switchu" Ak nevieš ako switch funguje, odporúčam si naštudovať https://www.open.mp/docs/scripting/language/Style https://en.wikipedia.org/wiki/Switch_statement Ďalšia vec, odnaučte sa tvoriť kód o dĺžke 30 000 riadkov... nikdy v živote sa to nebude dať nikde použiť a sám sa v tom stratíš (error máš na riadku 29071, ale chyba môže byť na riadku 28 456) Používaj #include a tvor menšie súbory, príklad nižšie // tvoj GM.pwn #include "./moj_uzasny_gm/user.pwn" #include "./moj_uzasny_gm/cars.pwn" #include "./moj_uzasny_gm/carsSpawn.pwn" #include "./moj_uzasny_gm/objects.pwn" #include "./moj_uzasny_gm/job.pwn" public OnGameModeInit() { /* ... nejaky kod pred */ fillUserSkins(); // nachadza sa v subore user.pwn fillCarSpawn(); // nachadza sa v subore carsSpawn.pwn fillObjects(); // nachadza sa v subore objects.pwn /* ... nejaky kod po */ } public OnDialogResponse(...) { carDialogs(... parametre); // nachadza sa v subore cars.pwn jobDialogs(... parametre); // nachadza sa v subore job.pwn } // "moj_uzasny_gm/carsSpawn.pwn" - subor ktory obsahuje len spawnovanie aut stock fillCarSpawn() { AddStaticVehicle(415, .....); AddStaticVehicle(522, .....); AddStaticVehicle(400, .....); AddStaticVehicle(550, .....); /* ... dalsich 4 500 riadkov */ } // ".../cars.pwn" - subor obsahuje dialogy pre auta #include "./dalsia_zlozka/dalsiaCastKodu.pwn" // mozes rozbit na viac suborov kvoli prehladnosti stock carDialogs(...) { switch (dialogid) { case ...: // tvoj kod break; case ...: // tvoj kod break; } } A ver mi, ked to spravne rozdelis do suborov, bude sa ti kodit omnoho jednoduchsie. Len pozor na zavislosti - kazdy subor by si mal includovat prave raz
  11. Quiter

    pomoc Palivo

    XpresS ti radí dobre (aj s tou podmienkou na pretecenie nadrze), ale je to ešte 1 nelogická vec. ForMaxPlayer(i) // spustis cyklus pre vsetkych hracov (predpokladam podla nazvu) { Car_Gas[GetPlayerVehicleID(i)] = 50; // kazdemu hracovi co sedi vo vozidle nastavis palivo na 50, ale nijako nekontrolujes ci hrac naozaj sedi vo vozidle SPIB(playerid, "~w~Dotankoval jste si vozidlo", 5); // sebe vypises spravu, ale vypises ju za kazdeho pripojeneho hraca, takze napr. 150x new engine,lights,alarm,doors,bonnet,boot,objective; GetVehicleParamsEx(GetPlayerVehicleID(i),engine,lights,alarm,doors,bonnet,boot,objective); SetVehicleParamsEx(GetPlayerVehicleID(i),1,lights,alarm,doors,bonnet,boot,objective); PalivoCas[playerid] = 120; } Takze je otazka, ci chces dotankovat len svoje vozidlo (odstran ten cyklus), alebo vsetkym hracom. Ak vsetkym hracom, tak si rozmysli ci chces tu spravu poslat hracovi ktory zadal prikaz (presun spravu a nastavenie casu mimo cyklus) alebo hracom ktorym si natankoval (zmen playerid na i)
  12. Quiter

    pomoc Jednorázová odměna

    Ak máš nejaký systém registrácie, tak najjednoduchšie je vytvoriť globalnu premennu new bool:receivedReward[MAX_PLAYERS]; nasledne pri pripojeni receivedReward[playerid] = false; a v prihlaseni (nezabudni pri odpojeni ukladat!!) receivedReward[playerid] = tvoja_funkcia_na_nacitanie_udajov_o_ulozenom_hracovi_boolean(playerid, "receivedReward"); a potom ked stlaci N pri tej npc // ak chces aby dostal odmenu a druhy krat zobrazilo dialog if (receivedReward[playerid]) { // zobraz dialog pretoze uz dostal odmenu } else { receivedReward[playerid] = true; // daj mu odmenu } // ak chces aby dostal odmenu a sucastne sa otvoril dialog if (!receivedReward[playerid]) { receivedReward[playerid] = true; // daj odmenu } // zobraz dialog Pokial nemas ziaden registracny system, tak by som to riesil tiez pomocou mena hraca (GetPlayerName) a suboru. Vytvoris si premennu rovnako ako hore, nasledne pri pripojeni otvoris subor, precitas vsetkych hracov a zistis ci sa hrac nachadza v subore. Ak ano, nastavis premennu na true. Pri pripisani odmeny nezabudni zapisat meno do suboru.
  13. Pokiaľ nemáš počítač čo používa ešte dierne pásky tak by ti mala takmer akákoľvek graf. karta pasovať. Treba si len dávať pozor na výkon zdroju a napájanie graf. karty - niektore staršie zdroje nemajú konektor na napájanie ultra výkonných graf. kariet.
  14. Quiter

    pomoc Notebook (CRASH)

    Tak to môže mať mnoho príčin... Takým lowcost riešením je reinštalácia windowsu (obnovenie systému). Ďalšou príčinou môže byť poškodený hardware, napríklad disk, ram alebo iné. Takže pokiaľ nepomôže obnova systému tak by som odporúčal vymeniť disk / ram, prípadne podľa veku ntbku uvažovať nad kúpou nového. Samozrejme do výmeny HW choď len v prípade že nepomôže reinštalácia windowsu!
  15. Úprimne, myslím že máš problém s pochopením čo je pole Keď máš na servery 1 hráča, tak je všetko v poriadku (teda až na to, že namiesto 59 sekund sa zobrazí 0 a teda každá minúta je o sekundu kratšia), ale keď sa pripojí 2. hráč, tak sa spustí ešte 1 timer a zrazu ti beží čas 2x rýchlejšie (pri 50 hráčoch 50x rýchlejšie). To isté robíš aj na konci timera Pridaj sem pre istotu kód kde spúšťaš tento timer (SetTimerEx funkciu). Riešenie: 1) buď spravíš h_sekundy a h_minuty ako new h_sekundy[MAX_PLAYERS], h_minuty[MAX_PLAYERS]; a incrementovať budeš h_sekundy[playerid]++; 2) alebo z timera odstrániš "playerid", incrementáciu necháš tak ako je, a podmienky obalíš do cyklu pre všetkých aktívnych hráčov Výber je na tebe... V prvom riešení môže mať každý hráč rôzny čas (napr. ja budem mať 15:24 a ty 08:14). V druhom riešení majú všetci hráči rovnaký herný čas. No a teraz k problému ktorý si spomínal. Predpokladám že timer spúšťaš ako SetTimer a nie SetTimerEx - to ti namiesto playerid doplní 0 a teda všetko funguje až do bodu kedy ID 0 zmení svoje nastavenia Preto pridaj časť kódu kde používaš SetTimer / SetTimerEx Teraz tá druhá časť problému s pickupmi: Opäť problém s poliami Takže ako som povedal, v oboch prípadoch máš problém s poliami, odporúčam prejsť nejaký tutorial
×
×
  • Create New...