-
Příspěvků
212 -
Registrován
-
Aktivní
-
Vítězných dnů
44
Content Type
Profiles
Forums
Calendar
Gallery
SA-MP
Everything posted by DuFF
-
Ahoj, používaš CreateDynamicObject (streamer plugin) alebo CreateObject? Ak náhodou používaš streamer, je možné, že ti na serveri chýba správna verzia pluginu v zložke plugins, prípadne ho nemáš správne zapísaný v server.cfg.
-
ukázka [Work in Progress] Závody na štýl Trackmanie
DuFF replied to DuFF's topic in Herní (SA:MP, CS apod.)
Bojím sa, že to nepôjde tak jednoducho. Nie je to cieľová priamka, ale cieľová úsečka. Ak by to bola priamka, myslím, že na nejakej pokrútenej trase by si mohol prejsť cieľovou priamkou ešte pred skutočným cieľom. Ale asi by to išlo vyriešiť cez dynamické zóny zo streameru, ktoré sa dajú definovať 2 bodmi ako navrhuješ a spravia matiku za mňa. -
ukázka [Work in Progress] Závody na štýl Trackmanie
DuFF replied to DuFF's topic in Herní (SA:MP, CS apod.)
Pre jednoduchosť je to zatiaľ podľa posledného checkpointu. Bolo by treba domyslieť, ako by tú cieľovú čiaru hráči definovali in-game pri tvorbe vlastných závodov -
Zdravím, po dlhšom čase som sa vrátil k dlho odloženému rozpracovanému projektu. Ide o závody, ktoré sú podobné hre Trackmania. Snažíte sa prekonať trať v čo najkratšom čase a môžete si pri tom zapnúť "ducha", ktorý vám bude ukazovať trasu hráča s najlepším časom, prípadne inú jazdu (podľa vášho výberu). Primárny cieľ módu bol vytvoriť server na tréning gang race závodov známych zo serveru SuperParba. Preto je aktuálne väčšina závodov "ukradnutá" z tohto serveru. S trochou kreativity sa ale dajú postaviť aj rôzne stunt trate atď... Aktuálne je napríklad postavených pár tratí pre skoky na bicykli. Aktuálne featury: /race - Presun do class selection (výber závodu) /r - Reset závodu /tops - zobrazenie 15 najlepších jázd vybraného závodu + detailné medzičasy u každého checkpointu; možnosť použiť každú topku ako NPC Globálne topky - po prekonaní najlepšieho času na trase sa vypíše všetkým hráčom správa do chatu. Osobné topky - po prekonaní osobného rekordu sa vypíše správa do chatu. Hlavná featura - NPC duch Každá jedna jazda je nahrávaná do scriptfiles (StartRecordingPlayerData). Po dokončení jazdy sa súbor s nahrávkou presunie zo scriptfiles do zložky npcmodes pomocou FileManager plugin-u, a je tak ihneď pripravená na prehrávanie. Každá nahrávka má unikátny názov, ktorý sa spolu s ostatnými dátami o jazde ukladá do databázy. Môžete si tak otvoriť tabuľku najlepších časov a ľubovoľnú jazdu z tabuľky použiť ako NPC. Taktiež môžete ako ducha použiť svoju poslednú jazdu príkazom /setlastplayback. TODO: - Tachometer - Textdraw s časom - Možnosť tvorby vlastnej trate - Would be nice to have: Podpora objektov v závode + primitívny map editor pri stavbe tratí Kde si mód skúsiť? Keďže stále prebieha vývoj, server je momentálne uzamknutý. V prípade veľkého záujmu môžete napísať správu. Videoukážka:
-
Najblizšie, čo k tomu mám, je môj prehistorický pokus o kópiu rze 8 s pomocou DeAmxu :D Nejaký základ tam je, ale moc sa to netestovalo a milion vecí chýba. Možno keď pekne poprosíš @ATomas-a, tak ti už teraz po rokoch podaruje zdroják k 7.4 rzeduff.pwn
-
Je na čase skúsiť si ladenie programu (debugging). V Pawn sa to rieši vypisovaním správ do konzole (print, printf) / chatu (SendClientMessageToAll). V tvojom prípade chceme overiť nasledovné: 1. Načítajú sa dáta po pripojení správne? 2. Neresetujú sa dáta náhodou v OnPlayerSpawn? 3. Volá sa GivePlayerWeapon v OnPlayerSpawn so správnymi dátami? Poďme overiť bod 1... do LoadUser_data hneď za riadok INI_Int("pZbran2naboje",PlayerInfo[playerid][pZbran2naboje]); vlož výpis načítaných dát. Napríklad: print("Výpis načítaných zbraní:") printf("zbran0: %d", PlayerInfo[playerid][pZbran0]); printf("zbran0naboje: %d", PlayerInfo[playerid][pZbran0naboje]); printf("zbran1: %d", PlayerInfo[playerid][pZbran1]); printf("zbran1naboje: %d", PlayerInfo[playerid][pZbran1naboje]); printf("zbran2: %d", PlayerInfo[playerid][pZbran2]); printf("zbran2naboje: %d", PlayerInfo[playerid][pZbran2naboje]); Potom sa v hre prihlás a v server logu by si mal uvidieť, aké dáta sa načítali. Ak tam uvidíš správne dáta, musíš patrať ďalej... Bod 2... V OnPlayerSpawn skontroluj, či sa ti náhodou zbrane neresetujú if(Deathreset[playerid] == 1) { PlayerInfo[playerid][pZbran0] = 0; PlayerInfo[playerid][pZbran0naboje] = 0; PlayerInfo[playerid][pZbran1] = 0; PlayerInfo[playerid][pZbran1naboje] = 0; PlayerInfo[playerid][pZbran2] = 0; PlayerInfo[playerid][pZbran2naboje] = 0; print("Reset hráčových zbraní"); // do server logu SendClientMessageToAll(-1, "Reset hráčových zbraní"); // alebo priamo v hre do chatu, aby si to hneď videl } Keď sa spawneš a uvidíš v chate "Reset hráčových zbraní" bez toho, že by predtým zomrel, tak vieš, že je chyba v tejto časti kódu. Bod 3... V OnPlayerSpawn tesne pred tým, ako hráčovi givneš zbrane, znova skontroluj hodnoty pZbran0, pZbran0naboje, ... print("Výpis zbraní pred givnutím:") printf("zbran0: %d", PlayerInfo[playerid][pZbran0]); printf("zbran0naboje: %d", PlayerInfo[playerid][pZbran0naboje]); printf("zbran1: %d", PlayerInfo[playerid][pZbran1]); printf("zbran1naboje: %d", PlayerInfo[playerid][pZbran1naboje]); printf("zbran2: %d", PlayerInfo[playerid][pZbran2]); printf("zbran2naboje: %d", PlayerInfo[playerid][pZbran2naboje]); Skontroluj, či to vypíše správne dáta do konzole (server logu).
-
Aká je funkcia toho Deathresetu? Nebolo by jednoduchšie nastaviť pZbran0, pZbran0naboje, pZbran1, ... na 0 priamo v OnPlayerDeath a v OnPlayerSpawn to potom už neriešiť? Myslím, že vtedy by si Deathreset vôbec nepotreboval. Ukáž ešte prosím všetky miesta, kde pracuješ s Deathreset.
-
milous sa ti snažil naznačiť, že chyba je tu: case CCP1: { DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid,1142.7788,1264.6090,11.4266,5.0); autoskolac[playerid] = CCP1; } AK hráč vezme 1. checkpoint Cčka, do autoskolac ukladáš zase 1. checkpoint Cčka. Chceš tam autoskolac[playerid] = CCP2 a podobne to posunúť všade (v Cčku). Čo sa týka returnu, skús si najskôr prečítať ako funguje napríklad tu: https://sampwiki.blast.hk/wiki/Control_Structures#return Pamätám si, že keď som sa učil pawn (moja prvá skúsenosť s programovaním), tak som return dlho nechápal, až kým som nenarazil na tento článok.
-
Namiesto case 1, 2, 3... Používaj vo switchi tie svoje definície a podobné chyby uvidíš v budúcnosti ľahšie
-
Tento istý stock nie, pretože v ňom "natvrdo" používaš "pVodickyB". Ideálne by si mal spraviť stock, ktorý dostane ako parameter číslo 0/1 reprezentujúce, či hráč vlastní/nevlastní daný preukaz, a vráti text "Vlastni"/"Nevlastni". Napríklad: stock VlastniPreukaz(vlastni) { new text[10]; if (vlastni) text = "Vlastni"; else text = "Nevlastni"; return text; } // Použitie v kóde: VlastniPreukaz(PlayerInfo[playerid][pVodickyB]) // Alebo pre iný preukaz: VlastniPreukaz(PlayerInfo[playerid][pZbrojny])
-
Warning je spôsobený tým, že lokálna premenná "autoskolabb" má rovnaký názov ako stock "autoskolabb". Jedno z nich premenuj a warning by ti mal zmiznúť. K Hipovej odpovedi: Pawn compiler poskytnutý v zipe so serverom od sa-mp teamu má problémy s vracaním "string literal" - prestane reagovať. Mám pocit, že to je už vyriešené v compileri od Zeexa, ale nie som si istý.
-
Toto je fakt na samostatný topic a rovno prilož aj kód
-
Ahoj, čím skôr sa naučíš správne formátovať svoj kód, tým menej podobného utrpenia zažiješ v budúcnosti. Dobrá prax je posunúť telo bloku - to medzi { a } - o 1 tabulátor (alebo 4 medzery) doprava. Potom vždy ľahko vidíš, ktorá zátvorka uzatvára ktorý blok a vieš ľahšie vložiť kód do správnej časti. Porovnaj svoj kód s formátovanou verziou v spoileri. Čo z toho sa ti ľahšie číta? Na záver ešte dodám, že keď už máš v OnDialogResponse switch na dialogid, tak ho kľudne využi a pridaj do neho ďalšie možnosti (case DIALOG_WARPY, case DIALOG_AUTOSKOLA). Môžeš sa tak vyhnúť zbytočným ifom.
-
Pokiaľ viem, team open.mp zatiaľ riešil iba náhradu samp serveru a ku klientovi sa ešte nedostali. Toto bol problém v klientovi.
-
Ak to niekoho stále zaujíma, dnes som narazil na pekný článok o RCE, čo bolo fixnuté v R5: https://www.blast.hk/threads/204306/
-
Ahoj, skús drobnú úpravu v OnDialogResponse: if (dialogid == REG_DIALOG) // Všimni si, že som odstránil && response==1 z podmienky { if (!response) // Ak hráč stlačí pravé tlačítko dialogu (v tvojom prípade "Ukončit"), response má hodnotu 0 { // Sem vlož kód na zobrazenie registračného dialogu alebo kicknutie hráča zo serveru return 1; } if(strlen(inputtext) == 0) { SendClientMessage(playerid, B_CERV, "[ ! ] Moc kratke heslo!"); new message[256]; format(message, sizeof(message), "\n\n{FFFFFF}Vítaj {00FF00}%s{FFFFFF} na servery {00FF00}Realný Svet\n\n{FFFFFF}Pre registraciu si zvol {FF0000}Heslo\n\n", Jmeno(playerid)); ShowPlayerDialog(playerid, REG_DIALOG, DIALOG_STYLE_PASSWORD, "Registracia", message, "Prihlásit", "Ukončit"); } else { if (udb_Create(Jmeno(playerid),inputtext)) { new message[256]; format(message, sizeof(message), "\n\n{FFFFFF}Vítaj {00FF00}%s{FFFFFF} späť na servery {00FF00}Realný Svet\n\n{FFFFFF}Pre prihlásenie zadaj {FF0000}heslo!\n\n", Jmeno(playerid)); ShowPlayerDialog(playerid, LOG_DIALOG, DIALOG_STYLE_PASSWORD, "Prihlasenie", message, "Prihlásit", "Ukončit"); } else { new message[256]; format(message, sizeof(message), "\n\n{FFFFFF}Vítaj {00FF00}%s{FFFFFF} na servery {00FF00}Realný Svet\n\n{FFFFFF}Pre registraciu si zvol {FF0000}Heslo\n\n", Jmeno(playerid)); ShowPlayerDialog(playerid, REG_DIALOG, DIALOG_STYLE_PASSWORD, "Registrace", message, "Prihlásit", "Ukončit"); } } }
-
Áno, to by malo fungovať (za predpokladu, že SeskokTopName má fakt 2. rozmer o veľkosti aspoň 250)
-
Ahoj, ak používaš sscanf2, musíš pri stringoch uvádzať aj ich dĺžku. Ak máš teda v kóde new msg[50], použi if(sscanf(params, "s[50]", msg)). Viac nájdeš na: https://sampforum.blast.hk/showthread.php?tid=570927 v časti o stringoch.
-
Superpařba - podvodné navyšování hráčů pomocí botů
DuFF replied to ChcemeSPbezbotu's topic in Herní servery
Na SuperParbe mám nahranú nejakú tú tisícku hodín a je fajn, že sa na tento problém upozorňuje. Sám som sa proti tomu snažil bojovať - v čase 2:33 na videu je môj príspevok. Mrzí ma však rétorika, akou to je podané. Veľmi rýchlo sa to zmení od objektívnych faktov k prehnaným tvrdeniam typu "při hraní nepotkáte skoro žádné hráče" a celé to ide smerom "SP bad, WTLS good". Na SuperParbe je stále aktívna komunita a takéto videá s cieľom pochovať konkurenčný portál to iba potvrdzujú. -
Ahoj, predpokladám, že v scriptoch, kde máš goto/warpy, sa používa na zmenu pozície funkcia SetPlayerPos. Potrebuješ docieliť, aby sa pri každom volaní SetPlayerPos aktualizovali hodnoty v premenných xo, yo a zo. Vyriešiš to pomocou tzv. hookovania funkcií. Tanga má o tom návod: https://pawno.cz/index.php?/topic/54592-hookovanie-funkcií-callbackov/ Chceš teda vytvoriť niečo takéto: stock SetPlayerPosEx(playerid, Float:x, Float:y, Float:z) { // Update premenných xo, yo, zo xo[playerid] = x; yo[playerid] = y; zo[playerid] = z; // Volanie pôvodnej SetPlayerPos return SetPlayerPos(playerid, x, y, z); } #if defined _ALS_SetPlayerPos #undef SetPlayerPos #else #define _ALS_SetPlayerPos #endif #define SetPlayerPos SetPlayerPosEx Máš antiairbrk v rovnakom móde/filterscripte ako goto a warpy? Ak nie, pravdepodobne budeš musieť ešte čarovať s includami a CallRemoteFunction.
-
Za predpokladu, že ten cheat používa rovnakú animáciu skoku ako klasický skok... Po stlačení KEY_JUMP (je jedno, čím hráč skáče, vždy to bude KEY_JUMP) by som kontroloval zmenu hráčovej výšky po ukončení animácie skoku. V OnPlayerUpdate by som si zapamätal hráčovu pôvodnú výšku prvýkrát po stlačení KEY_JUMP. Následne by som čakal, kým hráčovi zmizne animácia skoku (GetPlayerAnimationIndex). Po zmiznutí animácie by som zistil hráčovu výšku znova a urobil rozdiel s pôvodnou výškou. Treba si dať pozor na situácie, kedy hráča počas skoku niečo warpne/počas skoku do neho niečo narazí a odhodí ho, ...
-
pomoc GTA SA Inštalácia Módov (CLEO 4)
DuFF replied to sakulmore's question in Herní (SA:MP, CS apod.)
Nefunguje ti klasicky Alt + Enter prepnutie hry do okna? Už si nespomínam, či nejak išlo nastaviť zapínanie hry v režime okna bez 3rd party programov. Každopádne mám radosť, že si našiel riešenie -
pomoc GTA SA Inštalácia Módov (CLEO 4)
DuFF replied to sakulmore's question in Herní (SA:MP, CS apod.)
Sorry, s DXWnd nemám skúsenosti. K čomu presne to potrebuješ? Skúšal si spustiť hru bez toho? Blbne myš aj v tom prípade? Z mojich skúseností problémy s myšou dinput8.dll vždy vyriešilo -
pomoc GTA SA Inštalácia Módov (CLEO 4)
DuFF replied to sakulmore's question in Herní (SA:MP, CS apod.)
Na cleo sa doporučuje verzia hry 1.0 US. Je to akýsi štandard pre módy, ktoré pracujú s pamäťou. Hodí sa to hlavne ak plánuješ nejaké zložitejšie módy do sampu, ktoré vyžadujú sampfuncs. Na sampfuncs potom budeš potrebovať verziu sampu R1. S tým je však aktuálne problém, pretože R1 je deravá (obsahuje RCE - servery ti môžu ovládať PC), takže veľmi nedoporučujem. Našiel som nejaký svoj upload z 2016, kde by mala byť verzia hry 1.0 US a cleo inštalačka, ktorá mi s ňou fungovala bez problémov. Zvyšok súborov v packu môžeš ignorovať: https://mega.nz/file/xBtgTD6J#7rrTPWiyl4-q4XwKbz3BcLvPAPiKX0XcdzOHbxfTcsY Skús a daj vedieť, či ti to fixlo myš -
CPU Fan Error je problém s chladičom. Podľa 2. fotky to vyzerá tak, že máš 2 chladiče a nedokáže to zistiť rýchlosť jedného z nich. Je možné, že je iba nesprávne zapojený?