Jump to content

Meric

Uživatel
  • Příspěvků

    90
  • Registrován

  • Aktivní

Everything posted by Meric

  1. Meric

    pomoc Systém smrti

    Tak pardon, že jsem si dovolil se zeptat, pane. To je fuk, už je to pasé. Ten includ jsem nerozchodil, byly tam interní nesrovnalosti, přes které mi nedovolilo funkčně zkompilovat skript i přestože jsem udělal dost úprav, které opravily dost těchto "chyb". Což se samozřejmě dalo čekat vzhledem k tomu, co jsem už napsal. Zkouším to teďka zase trochu jinak. Pokud mi samozřejmě nějaká hodná duše třeba ukáže jak by se to dalo obejít bez zbytečných bugů, byl bych mu určitě neskonale vděčný. :-) Mezitím zkusím nějaké jiné způsoby.
  2. Meric

    pomoc Systém smrti

    Dobře, který plugin to prosím vyžaduje? Mimochodem nahlédl jsem do includu a je tam fakt kopa věcí, co by se hádala s některými skripty v módu. A i kdybych to nějak vymyslel a smazal to a nechal tam jen to, co potřebuji, tak do kterých callbacků by asi bylo nejlepší ty fáze zařazovat, aby to bylo dostatečně efektivní?
  3. Meric

    pomoc Systém smrti

    Musí to být nutně amount? Aby se mi to nekřížilo s proměnnou Damage, kterou jsem si vytvořil kvůli úpravě hodnot poškození. A hlavně ve které části to podmínit, protože těch podmínek ohledně zdraví a vesty hráče tam mám poměrně dost, takže si ani nejsem úplně jist, kde bych to měl podmínit poté, co tu hodnotu zjistím a tak, aby to bylo efektivní afunkční.
  4. Meric

    pomoc Systém smrti

    Co jsem se tak dočetl, tak funkce GetPlayerHealth v tomhle callbacku nefunguje, nebo alespoň ne jak má. Přesto to mám úplně nejvýše v callbacku, nějak to tam toleruji. Já tam tedy zjišťuji HPčka přes hráčskou proměnnou Health. Nevím jestli jsi to tak myslel a já tě teď jen nepochopil, ale právě já té smrti a tedy následnýmu spawnu chci vyhnout a pracovat pouze s OnPlayerTakeDamage. Pak je tu tedy ten zásadní problém s hráčskými proměnnými Exprepared, InPreDeathMode a InDeathMode. Co jsem si kontroloval podmínky, tak by měly bejt správně, ale asi dávám špatný sled, jen nevím jak by měl být správně. Abych ty proměnný vysvětlil a někteří nad tím nemuseli nějak přemýšlet a louskat jak to mám zpracovaný, tak to sepíšu. Exprepared - Připraven na popravu, tj. že když ho hitneš ještě jednou, automaticky ho to hodí do druhé fáze. Jenže to se stává už při první "smrti", která tedy proběhne i se spawnem, protože dosáhne s HP na 0. Popraven - To je asi jasné, napomáhá k odkázání na update labelu a zabití v tu dobu již zbytečnýho timeru a povolení k použití příkazu /death. InPreDeathMode - 1. fáze smrti. InDeathMode - Definitivní fáze, na kterou odkazuje proměnná "Popraven". Myslím, že je to asi všem jasné, ale uvědomuji si, že můj kód je zmatený a proto to vypisuji.
  5. Ahojte. Narazil jsem na problém v publicu OnPlayerTakeDamage, kde si spravuji systém poškození a na něj napojuji i death systém. Bohužel však to má spoustu zádrhelů. Zaprvé abych se přiznal, tak jsem se už dalo by se říct že ztratil ve vlastních podmínkách. Teď nevím jak do kódu řádně a funkčně zakomponovat pojistku, která by zařídila, aby daný hráč nezemřel a tedy ho kód za žádnou cenu neodkázal na OnPlayerSpawn, tedy když poškození bude větší nebo rovno zdraví hráče, tak aby mu to na místo poškození nastavilo HPčka cca na 20 bodů zdraví. Tento systém smrti má dvě fáze - 1. kritické zranění, 2. definitivní smrt, která nastane buď po uplynutí času bez záchrany nebo při popravě. Samozřejmě pokud se tomu nějak nevyhnu tak nevadí, budu muset asi jen ukládat pozice. Každopádně dalším problémem je, že místo toho, aby to hráče hodilo nejprve do 1. fáze, tak rovnou zahyne, objeví se někde jinde (přirozeně, když se neukládá pozice a do OnPlayerSpawn by se ani dostat neměl - tedy skript by to ve finále neměl dovolit) a je je rovnou v druhé fázi, tedy té definitivní. Nevím proč, nejspíše jsem se zamotal do svých podmínek a špatně jsem je umístil a teď už nevím jak dál. Než se do mě tady někdo pustí že jsem neoriginální: Ano, vím. Ač se mi to příliš také nelíbí, jsem vzhledem k okolnostem nucen se naklonit k tomu, co ode mně poměrně velká část komunity požaduje. https://pastebin.com/1r4FmuTw Když tam uvidíte nějaké nesmysly a zbytečnosti, předem upozorňuju, že poslední dobu jsem tam zkoušel leccos metodou pokus/omyl a plácal jsem se s tím pomalu.
  6. No já Skype nemám, nebo spíše jen ne nainstalované a nemám to v plánu. Jestli nechceš posílat kód veřejně, můžeš mi to poslat do SZ.
  7. V pohodě. Můžeš ukázat jen pro mé ujasnění, jak to máš udělané?
  8. Vzhledem k tomu, že jsi se ptal také na limity CreateObject() s tím počítám. Na LARPu je to řešené tak, že se používá CreateDynamicObject a funkce AttachDynamicObjectToVehicle a pracuje se s proměnnými na sloty pro doplňky a podobně. Co je mi známo, tak na dynamické objekty nejsou početní limity a celkově na serveru jich můžeš mít neomezeně mnoho (samozřejmě načítání těch objektů už je jiná věc). Samozřejmě funkci AttachDynamicObjectToVehicle využiješ při načítání vozidel a těchto doplňků pro vozidla v nějakém stocku pro načítání vozidel co si vytvoříš nebo máš vytvořený. Zkus to zaměnit a nevyužívat samotný attachnutí po vytvoření toho objektu. Samozřejmě nevím jak to máš v plánu zpracovávat, nicméně předpokládám, že budeš chtít, aby se dalo upravovat umístění, tak tedy EditDynamicObject by měl svojí úlohu splnit. Funkci na attachnutí zkus tedy pouze u načítání vozidel. Samozřejmě nějaký zkušenější pawner (kterých je zde dost) mi může oponovat a říci, že nápad je to špatný a nemělo by se to tak dělat a tak to budu plně respektovat.
  9. Předpokládám, že pro to využíváš funkci AttachObjectToVehicle. Řekni mi, jestli se mýlím.
  10. Eh.. No, popravdě tomu pořád stále moc nerozumím, ukázal bys mi to na kódu, prosím? Dost se v tom ztrácím. Asi i to, jak zapsat nový stav kasy, protože teď mě vůbec nenapadá, jak to udělat. Samozřejmě u výplaty určitě nemůžu udělat to, že bych smazal samotné přičítání, jinak by se peníze nemohly nastackovat. Narazil jsem na logický problém a jsem celkem mimo. Tak kdybys byl tak hodný a ukázal mi to na kódu, určitě bych byl vděčný.
  11. Nevím, co přesně máš namysli tou kontrolou, ze které kasy se to má odčítat, měl jsem za to, že právě ten cyklus by měl určit tu danou kasu, protože se předpokládá, že člověk bude stát pouze u jedné. Samozřejmě zde mi přišlo zbytečný volat funkci IsPlayerInRangeOfPoint, protože to je už u příkazu /kasa. Jakou kontrolu máš přesně namysli?
  12. Ahoj, tak jsem tady zas. Mám problém se špatně fungujícím dialogem kasy. Stále mi to píše, že v kase nemám dost peněz, i přestože tam jsou. Na testovacím serveru mi to napíše ale i dá ty peníze, de facto se vykoná to, co chci, ale na veřejným, který už narozdíl od testovacího není prázdný to pouze píše tu hlášku a nedá to ani floka. Kontroloval jsem i jestli se hodnota při každé výplatě, kdy chodí i do kasy tržba ukládá. To také dělá, ale špatně. Při vytvoření podniku a upravení ceny například na 1 000 000 to funguje správně, do kasy jde každou hodinu 10 000 podle vzorce (který nejspíš upravím). Ale když k tomu koupím druhý podnik, s cenou třeba 50 000, tak místo aby do jedné kasy šlo 10 000 a do druhé 500, tak v jedné je 10 000 a v druhé 10 500. Dle toho usuzuji, že je chyba v cyklu, ale jak to změnit, aby to fungovalo, nad tím se lámu už hodiny a jsem bezradný. Nejsem sice úplně začátečník, ale nějaké ty mezery ještě mám, tak to prosím berte v úvahu, děkuji. Přiložím pro jistotu úplně vše, co nějak souvisí s kasou. Na požádání můžu poslat i další části, když to pomůže k vyřešení problémů. Budu rád za každou pomoc. :-) // EDIT: Ještě dotaz. V čem může být ten pekelný problém, když se občas stává, že se domy, garáže nebo podniky "pokazí" po restartu a musím je odebrat, aby fungovaly zase textdrawy a mapping z filterscriptů? Samozřejmě nezasažené pickupy zůstávají na místě, kde byly a ty "poškozené" mizí, pokud si dobře pamatuji na souřadnice 0 0 0. A taky se stává, že se někdy pokazí i systém ukládání a stocky na ukládání dat pro hráče a pro jejich vozidla skript za běhu ignoruje. Čím to může být způsobeno?
  13. Pff, tak já nevím. Testoval jsem to a pásku to vytvoří v místě, kde má, pak se to upravuje. Samozřejmě jeden člověk může vytvořit i více pásek, ale na místě to vytvoří jen jednu pásku s daným ID. S tou se pak pracuje a kdykoliv se může smazat. Když se to testovalo na serveru, nikdo žádnou chybu ani nehlásil, naopak si s tím policajti docela hojně hráli. :-D Každopádně to duplicitní zjišťování pozic jsem vymazal, a zkusím jak to bude fungovat bez toho cyklu tedy. Jinak jak jsi mi ukázal ten příklad zjednodušeného příkazu: EditDynamicObject(playerid, Paska[i][pObject]); LastPaskaEdit[playerid] = i; PaskaEdit[playerid] = true; Tam být musí, protože pracuji s publicem OnPlayerEditDynamicObject, jsem si tak všiml, že jsi to v příkladu neuvedl a napsal jsi tam EditPaska(playerid); jsem pak byl trochu zmaten z toho, kde jsi to vzal.
  14. Máš v globálu napsáno "#if defined FILTERSCRIPT" nebo "#define FILTERSCRIPT"? Je důležitý, aby pawno rozpoznalo, zda děláš gamemode nebo filterscript. Mělo by to být zapsáno. Viděl jsem i případy, kde to být nemusí (proč, to ti já nepovím, až tak pokročilý nejsem). Pokud to tam nemáš, tak to aspoň zkus, jestli někdo nebude mít lepší nápad.
  15. Jo, to je protože jsem ten kód celý upravoval na jiný systém a trochu to chtěl zrenovovat, abych na to nemusel mít dva různý příkazy a k tomu jsem přidal i možnost úpravy. Abych se přiznal, nejsem sice úplně začátečník, ale nejsem ani úplně pokročilý. Původně jak jste mě opravili u toho EditDynamicObject "i" na "playerid", tak tam jsem měl právě to playerid původně a taky to nefachalo, takže tohle byl spíš hokus pokus. Dost jsem už pozapomínal po době, co jsem s pawnem nedělal. Ale už je to vyřešené a děkuji vám za pomoc. Už jsem nezaznamenal chybu. Pošlu sem ještě kód, abych ukázal řešení.
  16. Ahojte, po dlouhé době jsem se dostal k pawnu a narazil jsem na problém, který jsem řešil asi 3 hodiny a furt nemůžu přijít na to, kde je chyba. Příkaz funguje jak má, ale jen u objektu s pořadovým ID 0. Tudíž když vytvořím druhou pásku, tak nejde ani upravit, ani smazat. Už mi došly nápady, poradíte mi, prosím? :-)
  17. Meric

    pomoc Unknown

    crashdetect si můžeš najít kdekoliv na netu, je to plugin. Takže až to stáhneš, tak .dll soubor a .so (pro Linux) do složky plugins a zapsat k plugins do server.cfg. K tomu -d3 přepínači. Stačí když si vytvoříš .cfg soubor s názvem pawn do složky pawno. Ten otevřeš a napíšeš tam -d3, uložíš a překompiluješ skript. Pak by ti to při kompilaci mělo vypisovat více informací, jako o počtu cells a pdoobné věci. Toho se vůbec neboj. Potom spustíš samp-server a v cmd řádku jak jsi vypsal tu chybu, tak se ti bude zobrazovat i [debug] a nějaký text. Crashdetect, případně nativechecker plugin ti v tom můžou pomoci taky detekovat problém. Oba pluginy je dobrý mít.
  18. Meric

    pomoc Unknown

    Můžeš no. A kam jsi to dal? Nejlépe, když to vložíš do globálu, kde si definuješ třeba new Auto[MAX_PLAYERS];, hlavně ne pod žádný public. A pokud to tak máš a nejde to, asi přilož kód, no. Kolik máš řádků?
  19. Meric

    pomoc Unknown

    Máš ve svým módu "main( ) { }" bez úvozovek? Jestli ne, přidej si to tam. Někam vejš do módu si to dej, pokud to nemáš.
  20. Meric

    gamemode Delete

    Jak jako "shodil"? Jak tomu mám rozumět? Jako že před 15 minutama byl zapnutej LA-RP a tys ho shodil, nebo jako co? Nechápu.
  21. Meric

    pomoc Animace

    Ano, používám SQLite, no. Já ti asi radši hodím úplně kompletní kód. Protože já teďka řeším to, že když seberu bedn a někde jí položím, má pak místo ID 2 třeba ID 560 a obsah se v té krabici pak vůbec nenachází, prostě se ztratí. Předem upozorňuju, že je to docela dost dlouhý kód. Dávám tam vše, aby jsem nemusel dodávat postupně věci a zbytečně se to neprotahovalo Kód je dost dlouhý, hlavně co se týče dialogů. UPDATE SET tam je. Hlavně mi jde o ukládání, protože potřebuju aby se ukládalo aspoň i při přesunu a později tadyta uložená data s bednou pak i do přívěsu, kterej bude na stejným principu co dialog u té bedny. https://pastebin.com/sH6kNchY EDIT: Právě jsem tam hodil nově kód, protože jsem vynechal příkaz na sebrání a pokládání, dost důležitá část.
  22. Meric

    pomoc Animace

    No, míchání systémů ukládání mýmu serveru nikdy nedělalo dobrotu. Mám vytvořený tak, že když sebereš bednu, tak se ta bedna z databáze smaže a když položíš, tak zase se tam vytvoří, jelikož UPDATE SET nefungovalo, tak jsem to musel udělat přes smazání a znovuvytvoření. Každopádně i kdybych ukládal informace o obsahu separativně od db do texťáku, stejně nevím jak bych to tam nahrál. Ce se IDček týče: Vždycky se generuje o číslo vyšší. Aspoň podle toho kolik beden existuje. Při UPDATE SET testu mi to hodilo ID 308 místo 7, nebo 8. A když jsem vypnul a zapnul server, tak bedna byla a staré pozici co byla původně a s tím prvním IDčkem, tedy 7 nebo 8. Jak úplně upravit IDčkování nevím, jsem rád, že to vůbec funguje. Ukládání informací podle ID je tedy pro mě asi méně přijatelné, snadno by došlo k chybě ohledně ztrát předmětů. Buď bych poslal kód, s tím že by se ta věc i IDčkama upravila tak, aby to podle toho nějak šlo, nebo to ukládat podle jinýho parametru. Bohužel mě žádný jiný parametr nenapadá. Každopádně díky za to k těm animacím, pomohlo to. Už to funguje. :-)
  23. Meric

    pomoc Animace

    Používám na DynamicObject ten SetPlayerAttachedObject, no. Ošéfil sjem to tak, že se to chová jako doplněk, když si přes attachments nasadíš klobouk nebo tak. Teď mi spíše jde o to vymyslet, jak udělat to, že se budou ukládat předměty, které jsou v bedně, kterou hodíš například do přívěsu náklaďáku. Protože to má fungovat tak, že dáš /prives a tam vložíš do slotu pro bednu tu bednu a pak jí můžeš vytáhnout. Ta aby v té bedně se neanulovaly informace, že v ní je určitý počet předmětů, například M4, nebo Desert Eagle, nebo Cocaine a takové. Tahle otázka ukládání mě napadla až teď, že to bude velmi komplikované, že nevím čeho se chytit.
  24. Meric

    pomoc Animace

    Jo už to vidím, pravda. Posunul jsem formátování ID textu s tím beID pod db result, kde vybírám ID přímo z databáze, která to automaticky incrementuje. Zatím to vypadá bez problému, díky. :-) Jen nevím jestli je to pravé ořechové použít u hráče SetPlayerAttachedObject nebo něco jiného. Tam není argumentace pro objectid. Chtěl bych to udělat tak, že dám /sebrat a vyloženě tu bednu sebere, bez DestroyDynamicObject. A jestli se to bez toho neobejde tak něco, abych pak mohl uchovat předměty v té bedně při přesunu. Ať už vkladu do přívěsu nebo jen čistě přesunu. Celkově jde jen o to, aby se s tím dalo manipulovat i s obsahem uvnitř, ale u této fáze jsem to jaksi nedomyslel. Je možné tohle nějak přes SQL obejít? Napadlo mě totiž akorát, že bych mohl informace o obsahu bedny nahrát do vytvořených PlayerInfo a ukládat ty informace přímo k hráči a jak bych zničil objekt bedny a všechno s ní spojený, tak při pokládání by se to naopak z hráče zase nahrálo do té bedny. Ale nevím jestli je tohle efektivní.
  25. Meric

    pomoc Animace

    No, já už to udělal a nějak jsem to ošéfoval. Nevím v jaké funkci máš nyní namysli a jak přesně to myslíš, kdyžtak mi to podrobně popiš, když budeš tak hodný. Akorát nevím, proč při spawnutí té bedny se nepřidává IDčko. Vždy se spawne bedna s ID 0. To zapřičiní, že když vytvořím dvě bedny, tak se smaže jen jedna při příkazu smazatbednu. Kód mám tady. Úplně stejně to mám i s ostatními systémy a tam se IDčka počítají. Nevím kde jsem co vynechal. Kód zde: https://pastebin.com/feA8t61j Nevíte, co jsem tam udělal za chybu? Případně jak to zjednodušit. PS: Důvod, proč tam mám SetDynamicObjectPos je, abych ten objekt donutil nebýt ve vzduchu, ale na souřadnicích, kde chci.
×
×
  • Create New...