Jump to content

Search the Community

Showing results for tags 'navod'.

  • Search By Tags

    Oddělujte čárkami
  • Search By Author

Content Type


Fórum

  • Obecné
    • Všeobecné
    • Všechno možné
  • Programování
    • Poradna
    • Návody
    • Tvorba
    • Hledám programátora
  • Herní oblast
    • Poradna
    • Jak na to?
    • Herní kontext
    • Herní zážitky
    • Komunita
  • Grafika
    • Poradna
    • Návody
    • Tvorba
  • Ostatní
    • Hardware a software
    • Hledám/nabízím
    • Archiv
    • 3D Tisk

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Web


Facebook


Jabber


Skype


Steam


Twitter


Github


Pastebin

  1. Dobrý den takže vytejte u mého prvního TUT Co první uděláme: Zapíšeme include, a DEFINE barvy - #incldue <a_samp> #define COLOR_BLUE 0x0060FFFF vytvoříme si: enum pInfo { Povolani, } new PlayerInfo[MAX_PLAYERS][pInfo]; do OnGameModeInit nebo do OnFilterScriptInit vložíme: SetTimer("Vyplaty",1000*60*40,true); // což nám stupstí opakovací TIMER který vykoná funkci každich 40minut - 1000*60 = 1MIN pak eště to vynásobý 40 což nám dá 40minut. vytvoříme jsi public pod názvem Vyplaty takže forward Vyplaty(); // Forward vytvoří public public Vyplaty() // Vytvorený public. { return 1; } tak dotoho vložíme: for(new playerid; playerid<MAX_PLAYERS; playerid++) // toto přesně nevím co znamená takže vám to nevysvětlím. { } samozřejmě vše nad return, tak a tet pokud máte náké povolání tak si dáte: if(PlayerInfo[playerid][Povolani]==0)//Zde v závorkách si to nahradte vlastní podmínkou { GivePlayerMoney(playerid,500);// Nastaví hráči peníze. SendClientMessage(playerid, COLOR_BLUE, "Obdržel si výplatu. 500$");// Zde můžete ale i nemůsíte vypisovat že obdržel výplatu a o hodnotte kterou si nastavite } else if(PlayerInfo[playerid][Povolani]==1) // Zde v závorkách si to nahradte vlastní podmínkou { GivePlayerMoney(playerid,1500); // Nastaví hráči peníze. SendClientMessage(playerid, COLOR_BLUE, "Obdržel si výplatu. 1500$");// Zde můžete ale i nemůsíte vypisovat že obdržel výplatu a o hodnotte kterou si nastavite } else if(PlayerInfo[playerid][Povolani]==2)//Zde v závorkách si to nahradte vlastní podmínkou { GivePlayerMoney(playerid,1500);//Nastaví hráči peníze SendClientMessage(playerid, COLOR_BLUE, "Obdržel si výplatu. 1500$"); // Zde můžete ale i nemůsíte vypisovat že obdržel výplatu a o hodnotte kterou si nastavite } tak a pokud to zamestnaní nemáte tak zadáte toto: GivePlayerMoney(playerid, 1500);//Nastaví hráči peníze SendClientMessage(playerid, COLOR_BLUE, "Obdržel jsi výplatu. 1500$");// Zde můžete ale i nemůsíte vypisovat že obdržel výplatu a o hodnotte kterou si nastavite Tak. Cele to bude vypadat z povoláním: #include <a_samp> #include <YSI\y_ini> #define COLOR_BLUE 0x0060FFFF enum pInfo { Povolani, } new PlayerInfo[MAX_PLAYERS][pInfo]; public OnGameModeInit() { SetTimer("Vyplaty",1000*60*40,true); return 1; } forward Vyplaty(); public Vyplaty() { for(new playerid; playerid<MAX_PLAYERS; playerid++) // cyklus for (protože od verze 0.3e SA-MP odendalo cyklus z fce playerid) { if(PlayerInfo[playerid][Povolani]==0)//Zde v závorkách si to nahradte vlastní podmínkou { GivePlayerMoney(playerid,500);// Nastaví hráči peníze. SendClientMessage(playerid, COLOR_BLUE, "Obdržel si výplatu. 500$");// Zde můžete ale i nemůsíte vypisovat že obdržel výplatu a o hodnotte kterou si nastavite } else if(PlayerInfo[playerid][Povolani]==1) // Zde v závorkách si to nahradte vlastní podmínkou { GivePlayerMoney(playerid,1500); // Nastaví hráči peníze. SendClientMessage(playerid, COLOR_BLUE, "Obdržel si výplatu. 1500$");// Zde můžete ale i nemůsíte vypisovat že obdržel výplatu a o hodnotte kterou si nastavite } else if(PlayerInfo[playerid][Povolani]==2)//Zde v závorkách si to nahradte vlastní podmínkou { GivePlayerMoney(playerid,1500);//Nastaví hráči peníze SendClientMessage(playerid, COLOR_BLUE, "Obdržel si výplatu. 1500$"); // Zde můžete ale i nemůsíte vypisovat že obdržel výplatu a o hodnotte kterou si nastavite } } return 1; // Ukončení publicu } A když tedy to povolání nemáme tak: #include <a_samp> #define COLOR_BLUE 0x0060FFFF public OnGameModeInit() { SetTimer("Vyplaty",1000*60*40,true); return 1; } forward Vyplaty(); public Vyplaty() { for(new playerid; playerid<MAX_PLAYERS; playerid++) // cyklus for (protože od verze 0.3e SA-MP odendalo cyklus z fce playerid) { GivePlayerMoney(playerid, 1500);//Nastaví hráči peníze SendClientMessage(playerid, COLOR_BLUE, "Obdržel jsi výplatu. 1500$");// Zde můžete ale i nemůsíte vypisovat že obdržel výplatu a o hodnotte kterou si nastavite } return 1; // Ukončení publicu } Doufám že se mi moj první TUT povedl. a doufám že jsem vám pomohol, prosím ohodnotte ho od 1/10 Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný
  2. Původně jsem to v plánu neměl, ale rozhodl jsem se, že tu trochu objasním, jak funguje ternární operátor ? : Obtížnost: Jak to funguje Nejprve trochu nezbytné teorie, tento operátor se nazývá ternární, protože, jako jediný v pawn, pracuje se třemi operandy. první operand ? druhý operand : třetí operand _ Operandem nazýváme výraz, se kterým operátor pracuje. Tohle by myslím stačilo, teď se podívejme na to, jak funguje. logický výraz ? pravda : nepravda _ Operátor nejprve vyhodnotí logický výraz, pokud je tento výraz pravdivý (true), vrátí to, co je za otazníkem. Pokud je výraz nepravdivý (false), tak vrátí to, co je za dvojtečkou. Uvedu příklad: #define CERVENA 0xFF0000FF #define MODRA 0x0000FF00 new color; color = GetPlayerTeam(playerid) == 1 ? CERVENA : MODRA; Nejprve dojde k vyhodnocení logického výrazu, kterým je GetPlayerTeam(playerid) == 1. Pokud hráčův tým je skutečně tým s ID 1, tak se do proměnné color uloží hodnota za otazníkem, tedy CERVENA. Pokud ovšem má hráčův tým jiné ID, uloží se do proměnné hodnota za dvojtečkou, tedy MODRA. Využití v praxi Ne všechno se dá pochopit z teorie, proto je lepší to ukázat na několika příkladech z praxe. Hráčův tým Vezměme si ještě jednou příklad seshora a trochu jej upravme. Budeme chtít, aby se proměnné color nastavila CERVENA, pokud bude hráčův tým mít ID v rozmezí od 1 do 10. Pokud ne, nastaví se proměnné hodnota MODRA. Jak to lze řešit přes podmínky: if(GetPlayerTeam(playerid) >= 1 && GetPlayerTeam(playerid) <= 10) color = CERVENA; else color = MODRA; _ Jak my to vyřešíme šikovně přes ternární operátor: color = GetPlayerTeam(playerid) >= 1 && GetPlayerTeam(playerid) <= 10 ? CERVENA : MODRA; GetPlayerTeam(playerid) >= 1 && GetPlayerTeam(playerid) - logický výraz CERVENA - hodnota, která se uloží, když je logický výraz pravdivý/true MODRA - hodnota, která se uloží, když je logický výraz nepravdivý/false Pokud se v tom pomalu ztrácíte a přijde vám to nepřehledné, můžete si to ozávorkovat: color = (GetPlayerTeam(playerid) >= 1 && GetPlayerTeam(playerid) <= 10) ? (CERVENA) : (MODRA); _ Else if? Někteří z vás si možná řeknou "A co když potřebuji další podmínku, tedy else if?!" I tohle je samozřejmě pomocí ternárního operátoru možné, ale předem vás varuji, že se v tom možná začnete ztrácet. Zadání je následující: pokud má hráčův tým ID 1, nastaví se CERVENA, pokud má ID 2, nastaví se MODRA, pokud má jiné ID, nastaví se ZELENA. color = (GetPlayerTeam(playerid) == 1) ? (CERVENA) : ((GetPlayerTeam(playerid) == 2) ? (MODRA) : (ZELENA)); Za dvojtečku jsme přidali další ternární operátor. Pokud se ID rovná jedné, není problém, nastaví se CERVENA. Pokud se jedné nerovná, přeskočí za dvojtečku, zde narazí na další ternární operátor. Vyhodnotí další logický výraz. Pokud se ID rovná dvěma, nastaví se hodnota MODRA. Pokud to nebude ani jedna a ani dva, tak je to logicky jiné ID => nastaví se ZELENA. Šlo by to takhle větvit i dál, vždy by se za dvojtečku přidal další ternární operátor, ale při větším počtu bude lepší využít klasických podmínek, popř. switche. Příklad na závěr A dáme si ještě příklad na závěr. Skloňování v češtině programátorům leckdy dost komplikuje práci, výsledek výpisu hlášek se nám mnohdy nelíbí, například tady: new pocetHracu = 3,str[145]; format(str,sizeof str,"%i hráčů na serveru.",pocetHracu); SendClientMessageToAll(-1,str); _ Server nám vypíše tohle: 3 hráčů na serveru. _ Ale my chceme, aby vypisoval: 1 hráč na serveru. 2/3/4 hráči na serveru. 5/6/atd. hráčů na serveru. _ Zkrátka aby to vypsalo správný tvar slova hráč podle počtu. Lze to řešit přes podmínky nebo switch: switch(pocetHracu) { case 1: format(str,sizeof str,"%i hráč na serveru.",pocetHracu); case 2,3,4: format(str,sizeof str,"%i hráči na serveru.",pocetHracu); default: format(str,sizeof str,"%i hráčů na serveru.",pocetHracu); } _ Ale my si to zkrátíme na jeden řádek pomocí ternárního operátoru. format(str, sizeof str,"%i %s na serveru.",pocetHracu,(pocetHracu == 1) ? ("hráč") : ((pocetHracu < 5) ? ("hráči") : ("hráčů"))); Za specifikátor %s se dosadí jeden z tvarů slova hráč. Je to také krásná ukázka toho, že ternární operátor lze použít i v parametru funkce. Ještě jedno upozornění na závěr, když má tento operátor vracet řetězec, tak jej uzavřete do závorek vždy! Nevím, zda problém stále trvá, ale dříve byly problémy s tím, že když to nebylo v závorkách, pawno mohlo spadnout. Edit: Potvrzeno, problém stále trvá, pokud řetězec do závorek neuzavřete, kompilátor přestane pracovat. Tímto ukončuji návod, doufám, že si z něj někteří něco odnesou a že vám tento operátor třeba v něčem ulehčí nebo pomůže. Pokud jste narazili na nějakou chybu nebo se chcete na něco zeptat nebo se jen vyjádřit, pište. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
  3. Všiml jsem si že některé z help topiců jsou uplně zbytečné, stačilo by se kouknout na wikinu a bylo by to, jenže někdteří místo toho radši jdou sem a postou si sem svůj topic, aniž by se třeba koukli jestli se to tu již neřešilo. Hledal jsem zde, ale nenašel, jestli zde tento návod je, tak se omlouvám.. Jedná se o mírně upravený! překlad ze samp wiki (http://wiki.sa-mp.com/wiki/Errors_List) - jelikož jak jsem koukal tak většina lidí z help topicu angičtinu neovládaji, nebo jen základy... Takže... Error - Chyba, kdy kompilátor nemůže vygenerovat příslušný kód - Tyto chyby nesou čísla od 1 do 99 Fatal Error - Narazí-li kompilátor na tuto chybu, přeruší se kompilace a vypíše vám fatal error - Fatal Error-y nesou číla od 100 do 199 Warining - Kompilace se dokončí, ale funkce zdřejmě nebude fungovat jak má.. - Warning-y nesou čísla od 200-299 Errory (ty nejčastější) 001: expected token - Požadovaný výraz nebyl nalezen Příklad: cesta/file.pwn(18) : error 001: expected token ";", but found "return" - číslo 18 je řádek, kde se tato chyba stala (vetšinout chyba bývá o řádek výš). 15| public OnPlayerConnect(playerid) 16| { 17| SendClientMessage(playerid, BARVA_BILA, "Vítej na serveru") 18| return 1; 19| } - Zde si zkontrolujeme, kde nám chybí znaménko ";", jistě jste si všimli, že na konci řádku 17 chybí za závorkou ";", a to je ten problém, proč nám to nefunguje, oprava bude tedy vypadat takto: 17| SendClientMessage(playerid, BARVA_BILA, "Vitejte na serveru"); //doplnili jsme středník na konec řádku 002: only a single statement (or expression) can follow each “case” - Každé "case" muže ve "switch" pojmout jen jeden příkaz - Pokud chcete do case dát více příkazů, přidejte jej do složenýc závorek ( { } ), nebo jej musíte oddělit čárkou Příklad: Takto vypadá tento error: error 002: only a single statement (or expression) can follow each "case" 10| main() 11| { 12| switch(prikazy) 13| { 14| case 0: print("Prikaz 1"); print("Přikaz 2"); 15| } 16| return 1; 17| } Nám to nyní koplo tyto errory/warningy: cesta/file.pwn(14) : error 002: only a single statement (or expression) can follow each "case" cesta/file.pwn(14) : warning 215: expression has no effect cesta/file.pwn(16) : error 010: invalid function or declaration Opravíme jej takto: 10| main() 11| { 12| switch(prikazy) 13| { 14| case 0: 15| { // přiadáme složené závorky 16| print("prikaz 1"); 17| print("prikaz 2"); 18| } // přiadáme složené závorky 19| } 20| return 1; 21| } 035: argument type mismatch (argument x) - Argument který jsme do funkce dosadili není správný Příkad: cesta/file.pwn(15) : error 035: argument type mismatch (argument 1) 15| Kick("playerid"); Opravíme (najdeme si třeba na wiki) a zjistíme, že tam nemají být uvozky, takže opravíme takto: 15| Kick(playerid); 047: array sizes do not match, or destination array is too small - Velikost array je příliš malá... cesta/file.pwn(18) : error 047: array sizes do not match, or destination array is too small 14| new pozdrav[3]; 15| new zprava[] = "Pawno.cz"; ..| 18| pozdrav = zprava; Jak vidíte, máme "pozdrav", který je o velikosti 3 (3charaktery - mezera se počítá tež jako charakter), ale zpráva "Pawno.cz", má 8 charakterů, tím pádem se zpráva nedá "dosadit" do pozdrav. Tím pádem máme na výber, buď zvětšíme array, nebo zkrátíme zprávu (Mužete se s tím hudně setkat třeba u stringu..) 14| new pozdrav[9]; 15| new zprava[] = "Pawno.cz"; ..| 18| pozdrav = zprava; Tip: Operátory na pravé a levé straně se musí rovnat, nebo musí být levá strana větší. Fatal erorr-y (nejčastější) 100: cannot read from file: "<soubor>" - Máte v souboru zapsané include, ale kompilátor nemohl tento soubor najít ve složce "<cesta>/pawno/include". Tip: Pokud máte v počítačí vícekrát program pawno, může vám to způsobovat tuto chybu (pracujete v "pawno(1)", ale include máte ve složce kde máte "pawno(2)"). Warning-y (nejčastější) 202: number of arguments does not match definition - Co k tomu říct..Máte moc nebo málo argumentů.. Ukáži: 13| public OnPlayerConnect(playerid) 14| { 15| SendClientMessage(playerid, BARVA_BILA, "Vítam tě", "Welcome!"); 16| return 1; 17| } - Pokud nevíte, tak správné znění je SendClientMessage(playerid, color, const message[]), tudíž zde máme jeden argument navíc, stačí jen porovnat podle wiki (například pokud neznáte danou funkci) a opravit jej 15| SendClientMessage(playerid, BARVA_BILA, "Vítam tě"); 203: symbol is never used: "<symbol>" - V kodu je funkce, nebo proměnná která není použita. 3| new promenna; - ale tuto proměnou nepoužiju, jeduše tedy jen najdu příslušný řádek, a smažu (nemusíme, pokud víme, že proměnnou použijeme) Toto varovaní může být ignorováno Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný Návod není dokončen na 100% !
  4. Nemusíte čekat na moderátora, aby vaše téma zamkl, jednoduše stačí nahoře nad topicu kliknout na "Moderování tématu" a kliknout na "Zamknout téma" Většina lidí po vyřešení topicu napíše "Mužete lock" nebo něco podobného, ale jestli jste si všimli, tak toto psát nemusíte, stačí: Jde jen o předcházení offtopicu... - Jinak je tento návod možná zbytečný, ale možná tak ne ...
  5. Zdravím, ako si určite môžete všimnúť, v súčasnej dobe veľa jedincov na tomto fóre nevie použiť jednoduchý vyhľadávač, Google. Dúfam, že tento návod im to jasne a navždy zakóduje do mozgu. Rád by som začal týmto. Pred tým, než budete zbytočne spamovať s otázkami, použite google. Krok č. 1 - Zadávanie URL Otvoríme si webový prehliadač, do ktorého zadáme adresu www.google.sk (poprípade .cz) a stlačíme ENTER (to je to veľké tlačítko, čo máte kúsok od stredu klávesnice). Krok č. 2 - Kľúčové slová (vyhľadávanie) Následne nám nabehne okno, v ktorom máme v strede také okienko na písanie, do tohto okienka zadávajú tkz. "keywords", teda kľúčové slová, podľa ktorých nám google na 90% vyhľadá presne to, čo hľadáme. Ja si teda napríklad potrebujem nájsť VIP systém, tak si tam napíšem "VIP Systém SA:MP" a stlačím ENTER. Nezľaknite sa, ak vám google začne hneď vyhladávať, volá sa to "Dynamické hľadanie". Krok č. 3 - Výber Teraz nám naskočí široká škála možností z ktorých môžeme vyberať. Čo si vyberiete, je už len na vás. To, čo som sem dal je len zlomok zo všetkých výsledkov. Ďakujem za prečítanie, Spy.
  6. Chcete sa naučiť programovať v C++ pozrite video https://www.youtube.com/watch?v=vacwllMjyGk budem točiť sériu
  7. Tohle se hodí pro začátečníky, kteří ještě neví, jak co funguje. Tohle jsou základní vysvětlivky základních událostí s parametry a návratovými hodnotami i s poznámkami. Vše je převzaté z samp-wiki Stačí vytvořit nový projekt v pawnu, vše smažete a zkopírujete následující kód: Pokud by byly nějaké nesrovnalosti (něco se mi překládalo špatně a všechny události nemám odzkoušené), tak mi napište soukromou zprávu nebo sem do tématu. Děkuji, Mort. Informační návod - Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný
  8. V prípade ak nepoznáte ani len základy ako vytvoriť klikatelný TextDraw tak v čítaní pokračovať ani nemusíte .. Takže najprv si musíme vytvoriť nejaké TextDrawi public OnGameModeInit() { Textdraw0 = TextDrawCreate(81, 231, "TextDraw ID:0"); TextDrawLetterSize(Textdraw0, 0.35, 1.6); TextDrawTextSize(Textdraw0, 164, 13); TextDrawColor(Textdraw0, -1); TextDrawSetShadow(Textdraw0, 0); TextDrawSetSelectable(Textdraw0, true); Textdraw1 = TextDrawCreate(81, 251, "TextDraw ID:1"); TextDrawLetterSize(Textdraw1, 0.35, 1.6); TextDrawTextSize(Textdraw1, 164, 13); TextDrawColor(Textdraw1, -1); TextDrawSetShadow(Textdraw1, 0); TextDrawSetSelectable(Textdraw1, true); Textdraw2 = TextDrawCreate(81, 271, "TextDraw ID:2"); TextDrawLetterSize(Textdraw2, 0.35, 1.6); TextDrawTextSize(Textdraw2, 164, 13); TextDrawColor(Textdraw2, -1); TextDrawSetShadow(Textdraw2, 0); TextDrawSetSelectable(Textdraw2, true); return true; } Nezabudnite si vytvoriť premenné pre Textdraw0, Textdraw1, Textdraw2 Teraz prejdeme k samotnému publicu OnPlayerClickTextDraw Všetci používame klasickú metódu if(clickedid == Textdraw0) { } else if(clickedid == Textdraw1) { } ... Ale je tu aj rýchlejšia varianta a to pomocou switch() Problém je v tom, že tu sa switch používa troška odlišnejšie ako normálne. Ako na to vám ukážem teraz. public OnPlayerClickTextDraw(playerid, Text:clickedid) { switch(_:clickedid) //Tu si všimnite že sme pridali " _: " { Ďalej by ste asi použili case Textdraw0: { } case Textdraw1: { ​} .... No tu nastáva ďalšia zmena,miesto dosadenia premennej pre Textdraw musíme dosadiť jeho ID ! Ale ako ho zistím ? Jednoducho, ID sa prideľuje podľa počtu vytvorených Textdrawov (štartovné ID je 0 http://wiki.sa-mp.com/wiki/Starting_IDs ). Takže case budeme používať takto : case 0: //Textdraw0 { } case 1: //Textdraw1 { } case 2: //Textdraw2 { } Aké výhody má použiť túto metódu ? - Je to rýchlejšie - Ak vám niekto ukradne script, a má na servery aj iné Textdrawi, nebude mu fungovať Ďalej, niektorý nevedia že možno zistiť čí si hráč nezrušil výber Textdrawu klávesou ESC, aj s tým vám poradím case 65535: //Tu pozor, ESC má VŽDY ID 65535 ! Je to môj prvý návod tak dúfam že všetkému pochopíte, ak sa vám návod páčil, môžete mi dať Rep+ PS:Návod nieje skopírovaný, túto metódu nenájdete ani na ofiaciálnom fóre. Celý kód tu:
  9. Jak vytvořit pickup Obtížnost : Zdravím, takže jsem se rozhodl vytvořit pro Vás takový menší TuT, jak vytvořit pickup. Začneme vysvětlením, co to takový pickup je a k čemu se dá použít. Co je to pickup? Jak ho použít? Pickup je v podstatě létající objekt, sloužící jako ukazatel pozice. Může být použit v podstatě na nemalé množství možností. Např. : Warp - přesun do interiéru a zpět, přesun z místa A do místa B Odměna - pickup sloužící jako skrytá odměna, která slouží jako odměna pro hráče, který odměnu našel ( např. peníze, zbraně + munice, zdraví, vesta, atd ) Menu - pickup můžeme použít také jako menu u nějakého povolání, nebo jako ovládací panel u bran, mostů, závor a podobně CreatePickup [color=#000000]balik = CreatePickup(1242, 2, 1503.3359, 1432.3585, 10.1191, -1);[/color] balik - Název použitého pickupu 1242 - ID použitého pickupu - Kopletní seznam možných pickupů najdete zde. 2 - Číslo stylu pickupu - viz. vysvětlení níže. 1503.3359 - Souřadnice X 1432.3585 - Souřadnice Y 10.1191 - Souřadnice Z -1 - Virtual World - virtuální svět ( -1 - pro všechny, 1 - pro hráče, co jsou ve Virtual World 1 ) Styly pickupu Nyní samotný návod Připojíme se na jakýkoliv server (localhost, nebo na nějaký od hostingu). Půjdeme na místo, kde chceme mít pickup. Zadáme příkaz /save - tím se Nám uloží souřadnice do PC - Dokumenty/GTA San Andreas User Files/SAMP/savedpositions.txt Otevřeme soubor savedpositions.txt, ve kterém najdeme řádek s požadovanými souřadnicemi (vysvětleno níže) Vysvětlivky ( AddPlayerClass, AddStaticVehicle ) AddPlayerClass - Tato funkce Nám udává pozici postavy hráče. AddStaticVehicle - Tato funkce Nám naopak udává pozici vozidla, ve kterém hráč pozici uložil Nyní samotný code Vytvoříme si proměnnou. new balik; // proměnná pro samotný pickup Do public OnFilterScriptInit() / OnGameModeInit() - ( Záleží zda děláte FS nebo GM ) vložíme: balik = CreatePickup(1242, 2, 1503.3359, 1432.3585, 10.1191, -1); Dále musíme do pwn code zapsat, co pickup s ID "balik" bude dělat. To uděláme tak, že do public OnPlayerPickUpPickup() vložime: if( pickupid == balik) { GivePlayerWeapon(playerid, 27, 160); SendClientMessage(playerid, 0xFFFFFFAA, "[ {00FF00}!{FFFFFF} ] Našel jsi Combat brokovnici se 160 náboji!"); return 1; } PŘEČTĚTE SI TAKÉ: Jak zabránit prohazování akcí v pickupech To je asi vše, co bych Vám mohl říct o pickupech. Doufám, že se Vám TuT líbí a že někomu pomůže pochopit, jak vlastně pickup funguje. Hodnoťte, kritizujte, nadávejte. Prostě cokoliv, co Vás napadne. Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný
  10. Zdravím čítateľov tohto fóra. Pripravil som si pre vás jednoduchý tutoriál. Z názvu už môžete vedieť o čo ide. Dnes vám ukážem ako si môžete presúvať objekty z miesta na miesto pomocou jedného príkazu. Tak podme na to! Hore pod includy si vložíme: new posilovnag; // Toto je naša premena. Ak to dávate do módu toto vložte do OnGameModeInit Ak to chcete použiť do filterscriptu tak to vložte do OnFilterScriptInit posilovnag = CreateObject(ID Objektu,X,Y,Z,Rx,Rz,Ry); // Máte to vysvetlené nižšie. CreateObject - príkaz na vytvorenie objektu. ID Objektu - ID (číslo) objektu, ktorý sa vytvorí na súradniciach X,Y,Z - súradnice Rz,Rx,Ry - rotácia Teraz prejdeme na príkaz. Do OnPlayerCommandText vložíme nasledujúci kód: { if(strcmp(cmdtext, "/oposilovna", true) == 0) { MoveObject(posilovnag, X,Y,Z, rýchlosť); //Sem vložíte pozíciu keď je brána zatvorená. SendClientMessage(playerid, FARBA_TEXTU, "Posilka je otvorená."); // Odošle hráčovi správu return 1; } if(strcmp(cmdtext, "/zposilovna", true) == 0) { MoveObject(posilovnag, X,Y,Z, rýchlosť); //Sem vložíte pozíciu keď je brána otvorená. SendClientMessage(playerid, FARBA_TEXTU,"Posilka je zatvorená."); // Odošle hráčovi správu return 1; } Ideme si to rozobrať. /oposilovna - je náš príkaz na otvorenie posilky. MoveObject - príkaz na presunutie objektu, ktorý sme vyššie vytvorili. posilovnag - to sme si vytvorili úplne hore. X,Y,Z - súradnice rýchlosť - rýchlosť otvárania objektov ( doporučujem 3.0 ) SendClientMessage - pošle hráčovi správu ( v našom prípade "Posilka je otvorená/zatvorená" ) Už sme na konci tutoriálu, naozaj to nie je nič ťažké keď som to dokázal urobiť dokonca ja tak to dokáže urobiť každý. Verím, že aspoň niekomu som pomohol. Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný
  11. Dobrý deň.. Prinášam vám sem podrobný tutoriál na tachometer.. Tento krát si dám vážne záležať tak dúfam že sa vám to bude páčiť.. Takže ideme na to.. Ako prvé by sme si mali stiahnuť TextDrawEditor By Zamaroth http://forum.sa-mp.c...d.php?p=2320034 .. Pripojíme sa na server a napíšeme /text .. Spravíme si grafický návrh a dáme 'Export Project', Do scriptfiles nám vytvorí súbor s názov aký ste si zadali keď ste začali robiť projekt.. Otvoríme súbor a všetko odtiaľ prekopírujeme do OnPlayerConnect + zmeníme new Text:Textdraw0; atď na new Text:Premena[Počet Textdrawov][MAX_PLAYERS]//Dalo by sa to aj inak ale toto je najlahšie a zabere to najmenej riadkov Zabudol som vám povedať že keď zmažete premeny new Text:Textdraw0; a tak ďalej stačí 1 premena ktoré je uvedená nižšie .. Ten string sa ukladá do toho čísla 9.. Keby ste nepochopili napíšte do komentu Napríklad: Máme 8 Textdrawov tak dáme si new Text:Premena[9][MAX_PLAYERS];// 9 pretože sa počíta aj 0 takže 0,1,2,3,4,5,6,7,8 = 9 v súbore budeme mať nejaký takýto script Textdraw0 = TextDrawCreate(495.000000, 359.000000, "TEXT"); TextDrawBackgroundColor(Textdraw0, 255); TextDrawFont(Textdraw0, 2); TextDrawLetterSize(Textdraw0, 0.219999, 1.000000); TextDrawColor(Textdraw0, -1); TextDrawSetOutline(Textdraw0, 1); TextDrawSetProportional(Textdraw0, 1); TextDrawUseBox(Textdraw0, 1); TextDrawBoxColor(Textdraw0, -1936945921); TextDrawTextSize(Textdraw0, 605.000000, 23.000000); a my ho zmeníme na toto Premena[0][playerid] = TextDrawCreate(495.000000, 359.000000, "TEXT"); TextDrawBackgroundColor(Premena[0][playerid], 255); TextDrawFont(Premena[0][playerid], 2); TextDrawLetterSize(Premena[0][playerid], 0.219999, 1.000000); TextDrawColor(Premena[0][playerid], -1); TextDrawSetOutline(Premena[0][playerid], 1); TextDrawSetProportional(Premena[0][playerid], 1); TextDrawUseBox(Premena[0][playerid], 1); TextDrawBoxColor(Premena[0][playerid], -1936945921); TextDrawTextSize(Premena[0][playerid], 605.000000, 23.000000); Tak a keď si spravíme kompletný grafický návrh tachometra + prerobíme premeny na hentake a hodíme to do OnPlayerconnect tak začneme robiť script aby nám to šlapalo a aktualizovalo sa to takže: Hore do módu si hodíme: forward SecondTimer();//Naforwardujeme si public SecondTimer() do OnGameModeInit/OnFilterScriptInit si dáme: SetTimer("SecondTimer",1000,1);// vytvoríme TIMER 1 sekundový a teraz.. public SecondTimer() { for(new i; i<MAX_PLAYERS; i++)// Vytvoríme si cyklus.. { if(IsPlayerInAnyVehicle(i) && IsPlayerConnected(i) && GetPlayerVehicleID(i) != 481 && GetPlayerVehicleID(i) != 509 && GetPlayerVehicleID(i) != 510)// toto je podmienka že ak je hráč v aute a jak není na bycikloch { new str[128];// Vytvoríme premenu new str1[128];// Vytvoríme premenu new str2[128];// Vytvoríme premenu new Float:VHP;// Táto premena slúži na zistenie HP vozidla (Samozrejme že funkciou GetVehicleHealth) GetVehicleHealth(GetPlayerVehicleID(i),Float:VHP);// Zistíme HP Vozidla format(str,128,"%s",VehName[GetVehicleModel(GetPlayerVehicleID(i))-400]);//Naformátujeme si názov vozidla[/size] format(str1,128,"%.1f %%",VHP/10);//toto je formát kde pracujeme s tým HP Vozidla.. Naformatujeme si ho pomocou stringu %.1f a tie %% za tým znamenajú aby tam za tým bolo percento.. VHP sme vydelili 10 pretože normálny HP vozidla je 1000.0 pokiaľ nechcete také veľké čislo stačí dať len /10 format(str2,128,"%d KM/H %d MP/H",GetVehicleSpeed(i,true),GetVehicleSpeed(i,false));//Tento formát slúži k rýchlosti vozidla.. vo funkcií GetVehicleSpeed je true KM/H a false MP/H TextDrawSetString(Premena[čislo textdrawu][i],str);//Vložíme string do textdrawu TextDrawSetString(Premena[čislo textdrawu][i],str1);//Vložíme string do textdrawu TextDrawSetString(Premena[čislo textdrawu][i],str2);//Vložíme string do textdrawu } } return 1; } ešte by som zabudol.. Hore do módu si vložte : new VehName[][] = { "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Autobus", "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tramvaj", "Trailer", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic","Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Policejni Vrtulnik", "Boxvillde", "Benson", "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher", "Super GT", "Elegant", "Journey", "Kolo", "Mountain Bike", "Beagle", "Cropduster", "Stunt", "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune", "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite", "Windsor", "Monster", "Monster", "Uranus", "Jester", "Sultan", "Stratium", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito", "Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper", "Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400", "News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club", "Freight Box", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "Policie LS", "Policie SF", "Policie LV", "Police Ranger", "Picador", "S.W.A.T", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage", "Luggage", "Stairs", "Boxville", "Tiller", "Utility Trailer" }; a ešte si vložte do módu/FS mimo public tento stock stock GetVehicleSpeed(playerid,bool:kmh)// Autora neviem { new Float:Vx,Float:Vy,Float:Vz,Float:rtn; if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),Vx,Vy,Vz); else GetPlayerVelocity(playerid,Vx,Vy,Vz); rtn = floatsqroot(floatabs(floatpower(Vx + Vy + Vz,2))); return kmh?floatround(rtn * 100 * 1.61):floatround(rtn * 100); } //: Zabudol som vám napísať že treba zobraziť/skryť : public OnPlayerStateChange(playerid, newstate, oldstate) { if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) { TextDrawShowForPlayer(playerid, Tachometer[0][playerid]); } else if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER) { TextDrawHideForPlayer(playerid, Tachometer[0][playerid]); } return 1; } Jak by ste našli nejakú chybu napíšte !!!
  12. Mám zde návod jak získat hodně sladkostí zdarma. Cely seznam výhod, které získáte ZDE 1. Zaregistrujte si účet u DigitalOcean.com a získejte 10$ bonus, po dokončení návodu dostanete 100$ 2. Přejděte na tuto stránku v pravém sloupci pod nadpisem Register/Sign into Alumni Online zmáčkněte tlačítko Log out of Alumni Online, pod formulářem New user registration, vyplňte formulář vymyšlenými údaji (Preferred Email znamená váš existující email). 3. Po úspěšné registraci přejděte na tuto stránku a dole nastavte "My e-mail forwarding service" ukázka zde: http://prntscr.com/4xp7k9 , e-maily se budou přesměrovávat na váš pravý email 4. Zaregistrujte si Github účet na e-mail, který jste si vytvořili v předešlém kroku ([email protected]), pokud máte tak se přihlašte a v nastavení přidejte nový email ([email protected]) - ten potvrďte. 5. Dále přejděte na tento odkaz a vyplňte formulář nějak takto: http://prntscr.com/4xp8zr , http://prntscr.com/4xp94l 6. Zkontrolujte váš e-mail, na který jste si přesměrovali poštu v 3. bodě 7. Zde zmáčknete Get your pack, najděte si v seznamu featur DigitalOcean a vygenerujte voucher, který zadáte po přihlášení na digitalocean zde do políčka promo code Celkem tedy získáte 110$ na Digitalocean a plno featur od Github. Upozornění: DigitalOcean požaduje potvrzení účtu kreditní kartou, ze které vám ztrhnou malou částku, která bude vrácena. Můžete použít paypal, avšak minimální vnos je 5$, který se přičte ke kreditu na DigOcean.
  13. Zdravím vás rozhodl jsem se udělat tutorial jak dát vlastní písničku do Radia. Pomocí svého Webu. (Tím pádem jistota že písničky budou hrát i když budete mít winamp vypnutý.) Řekl bych že mužem jít nato. 1.Krok Najdete mi nějaký pěkný web.Stačí zadarmo nějaký slabší z prostorem. Např: sweb.cz 2.Krok Dejme tomu že budem natom SWEBU Vytvoříme Účet a Zaregistrujeme se 3.Krok Půjdeme do Správce Souboru FTP Kde nahrajeme naší písničku Pak rozklikneme naší písničku 1 Krok.=Správce Souborů 2 Krok = Nahraní souboru - Vyberem Písničku 3 Krok .Rozkliknem písničku Po rozkliknutí se dostanem jsem 4.Krok Jak zkopírujem odkaz: Půjdem pro programu Winamp http://www.stahuj.centrum.cz/multimedia/mp3_a_audio/prehravace/winamp/ Po otevření Půjdem v Levo nahoře -->> File Kde poté dáme PlayURL Kam dáme náš odkaz: Pak dáme View file info Kde se nám otevře tato tabulka Ve které zkopírujeme horní odkaz Už jdem do pawna ! Zapneme PAWNO Vytvoříme si třeba dialog na příkaz /rap Pomocí INCLUDU ZCMD CMD:rap (playerid, params[]) { ShowPlayerDialog(playerid,1, DIALOG_STYLE_LIST, "Výběr Songů CZ/SK Rap:","Majk Spirit- Legendárná \nMajk Spirit - Ženy treba Lubit\nTafrob a Jay - Bratři jak se patří\nTafrob - Rolovací\nEktor - Je mi to Fuk\nEktor - Jak Jinak\nDJ Wich _ Rasco (The Untouchables) - Grizzly (CZ_SK rmx)", "Okey", "Ukončit"); return 1; } ShowPlayerDialog = Otevření Dialogu playerid = Že se otevře hráči který napiše /Rap takže = Vaše ID 1 = ID Dialogu DIALOG_STYLE_LIST = Styl Dialogu Pokud neovládáte Dialog určitě Informace najdete zde na: pawno.cz Poté co jsme si vytvořili vyvolaní dialogu ted do něj musíme dát ty funkce: A aby ste to nekopčili dáme vám obrázek: PlayAudioStreamForPlayer = Spuštění Audio Streamu pro Hráče playerid = id hráče ( Takže vaše) " odkaz " = Nezapomeňte na uvozovky ); = Ukončení Funkce A máme hotovo mužeme jít do hry kde napišem /Rap a máme radio
  14. Tu som to dal bo nějaký karko nevěděl ako taku kravinu urobit Nikdy to nebylo testováno ale mělo by to fungovat v pořádku po případě to opravím... Je to starší udělám vám s toho návod v CODE popis najdete za // new engine,lights,alarm,doors,bonnet,boot,objective; // tohle dáte jednoduše někam nahoru do módu public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(newkeys == KEY_YES) // Nastartuje motor slačením 'Y' { if(GetPlayerState(playerid) == 2) // Zjistí jestli je řidič. { SendClientMessage(playerid, -1,"Startuji motor..."); // Taková ta zpráva. SetTimerEx("EStart",3000,0,"i",playerid); // Toto vám za 3 sec nastartuje motor je to schválně kvuli zprávě 'Startuji motor...' } } if(newkeys == KEY_NO) // Vypne motor slačením 'N' { if(GetPlayerState(playerid) == 2) // Zjistí jestli je řidič. { GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objective); SetVehicleParamsEx(GetPlayerVehicleID(playerid),0,lights,alarm,doors,bonnet,boot,objective); SendClientMessage(playerid, -1,"Motor byl vypnut!"); // Taková ta zpráva. } } return 1; } forward EStart(playerid); public EStart(playerid) { GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objective); SetVehicleParamsEx(GetPlayerVehicleID(playerid),1,lights,alarm,doors,bonnet,boot,objective); SendClientMessage(playerid, -1,"Motor byl nastartován!"); // Taková ta zpráva. // Můžete si třeba tu udělat pár randomu že mu to chcíplo ale to kazí hru hráči tak jsem to udělal takto jednoduše. return 1; } No omlouvám se že vám to tu nerozepíšu ale myslím si že vám bohatě stačí co je za // funguje to na jednoduchém principu motory všech vozidel sou vypnuté, sednete jako řidič dáte 'Y' nahodíte motor do 3s po té 'N' ho vypnete. Můžete si i dodělat podmínku neco[MAX_PLAYERS]; kde nastavíte v Motor byl nastartován! neco[playerid] = 1; a při opuštění vozidla třeba if(neco[playerid] == 1) { //sem funkci co mu vypne motor a neco[playerid] = 0;} a je to Snad vám to k nečemu bude Ještě musíte mít na serveru auta co budou mít engine na 0 Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný
  15. Ahoj, řekl bych že ne každý kdo poprvé vidí MTA SA map editor ví kde, co a jak začít. Natočil jsem takový videonávod, kde se budu snažit vše popsat. Možná je nic moc, ale to hlavní je myslím v prvních 10 minutách. http://www.youtube.com/watch?v=tOQxRHRhOWA
  16. Zdravím, dostal jsem nápad jak by se dalo zpřehlednit vytváření návodů. Níže v tomto příspěvku by se měly zobrazovat témata s obory, které by potřebovaly nějaký návod. Tyto obory nejsou vymyšlené a je potřeba aby jste je vymysleli vy. Návody může psát kdokoliv, samozřejmě já se k nim přidám. Příklad: Něčemu nerozumíte zajdete si sem (na forum) a návod tu na to není. Můžete to vylepšit tím, že napíšete sem do topicu obor a téma pro který by jste potřebovaly návod. Já ho přidám to tabulky v prvním tomto příspěvku. Příklad 2: Jste zkušený v nějakém oboru a nudíte se občas nebo chcete někomu pomoci. Zajdete si na tento topic, najdete si obor který umíte a na uvedené téma napíšete návod. Dále napíšete sem, že je návod napsaný, abych mohl změnit status návodu za napsaný. Přidání má podmínku že uvedený návod, který by jste chtěli, neexistuje nebo je zastaralý, případně málo pochopitelný ) Veškeré připomínky nebo cokoliv jiného pište přímo sem. Nezapomeňte aspoň někdo pro začátek něco napsat aby to nebylo prázdné
  17. Dobrý deň.. Môj posledný tutoriál ohľadom banky sa moc nevydaril tak teraz vám sem prinášam nový s viac popísanými funkciami a bez bugov .. Takže. Začneme premenami.. new BankMoney[MAX_PLAYERS]; - Do tejto premeny budeme ukládať hráčove peniaze ktoré má uložené v banke. Teraz si vytvoríme pickup do ktorého keď vstúpime tak sa nám zobrazí dialog z bankovými funkciami. do OnGameModeInit si vložíme : CreatePickup(1274,1,X,Y,Z,VW); - Funkcia CreatePickup ma takéto parametre: - 1274 - ID Pickupu.. Všetky pickupy nájdete na http://wiki.sa-mp.com/wiki/Pickup_IDs - 1 - TYP, 1 znamená že nikdy nezmizne všetky TYPY nájdete na http://wiki.sa-mp.com/wiki/PickupTypes - X,Y,Z - Súradnice kde sa má pickup vytvoriť.. - VW - To je niečo ako hráčov svet.. Keď dáte napr. 3 tak ho bude vidieť iba hráč ktorý je v tom virtual worlde.. Ak chcete aby sa zobrazoval v každom VW zadajte tam -1 takže.. Pickup máme vytvorený. Teraz ideme do funkcie OnPlayerPickupPickup: public OnPlayerPickUpPickup(playerid, pickupid) { if(IsPlayerInRangeOfPoint(playerid,radius,X,Y,Z)) { ShowPlayerDialogEx(playerid,ID,DIALOG_STYLE_LIST,"Banka","Vybrať\nVložiť\nStav","Vybrať","Zrušiť"); } return 1; } - funkcia IsPlayerInRangeOfPoint bola už preddefinovaná v SAMPe takže sa nemusíte strachovať že nebudete mať stock alebo define na to .. Táto funkcia slúži na kontrolu pozície.. Takže si ju prebereme: - playerid - toto je všetkým hadam jasné.. - radius - radius znamená že do akej vzdialenosti od pickupu sa má dialog otvoriť.. - X,Y,Z - Sem vložíme súradnice ktoré sme dávali aj pri funkcií CreatePickup.. - funkcia ShowPlayerDialog slúži na otvorenie dialógu Čo k tomu viac dodať.. Rozoberieme si aj tú: - playerid - toto je všetkým hadam jasné.. - ID - toto je dialogid.. Nikdy nemôžete dať na 2 dialógy to isté ID lebo sa vám bugnú.. - DIALOG_STYLE_LIST - je štýl dialógu.. Všetky štýly nájdete na http://wiki.sa-mp.co...i/Dialog_Styles - "banka" - nadpis v dialógu. - "vybrať\nvložiť\nstav" - toto sú vlastne kolonky ktoré sa dajú stlačiť.. Pozor jak tam nedáte \n dá sa vám to do jedného riadku a bude to nefunkčné.. - "Vybrať" - tlačidlo 1 (response 1) - "Zrušiť" - tlačidlo 0 (response 0) teraz keď už sme si spravili dialóg presunieme sa do public OnDialogResponse.. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == ID) { if(response == 1) { if(listitem == 0) { ShowPlayerDialogEx(playerid,DIALOG_VYBRAT,DIALOG_STYLE_INPUT,"Vybrať peniaze","Napíš koľko chceš vybrať","Vybrať","Zrušiť"); } else if(listitem == 1) { ShowPlayerDialogEx(playerid,DIALOG_VLOZIT,DIALOG_STYLE_INPUT,"Vložiť peniaze","Napíš koľko chceš vložiť","Vložiť","Zrušiť"); } else if(listitem == 2) { new string[128]; format(string,128,"Na tvojom účte je %d $",BankMoney[playerid]); ShowPlayerDialogEx(playerid,DIALOG_STAV,DIALOG_STYLE_MSGBOX,"Stav účtu",string,"OK",""); } } } if(dialogid == DIALOG_VYBRAT) { if(response == 1) { if(BankMoney[playerid] < strval(inputtext)) return SendClientMessage(playerid,-1,"Nemáš toľko na účte"); if(!IsNumeric(inputtext)) return SendClientMessage(playerid,-1,"Musíš zadať číselnú hodnotu !"); BankMoney[playerid]-=strval(inputtext); GivePlayerMoney(playerid,strval(inputtext)); } } if(dialogid == DIALOG_VLOZIT) { if(response == 1) { if(strval(inputtext) > GetPlayerMoney(playerid)) return SendClientMessage(playerid,-1,"Zle zadaná čiastka !"); if(!IsNumeric(inputtext)) return SendClientMessage(playerid,-1,"Musíš zadať číselnú hodnotu !"); BankMoney[playerid]+=strval(inputtext); GivePlayerMoney(playerid,-strval(inputtext)); } } return 1; } Funkcie ktoré nemusia byť nováčikom jasné: - strval(string) - Funkcia ktorá premieňa na čísla.. Neviem ako to mám presne popísať.. - format : - string - premena stringu (new string[128]) - 128 - Veľkosť poľa ktorá bola nadefinovaná v stringu - format - Vlastne sa používa na zobrazenie hodnoty ktorá je ukrytá v premene.. - argumenty - Vlastne tak ako my sme mali mali sme %d tj celé čislo a chceli sme vedieť koľko má dolárov tak sme do argumenta dali BankMoney[playerid].. Keby ste tomu stále nerozumeli tak si to pozrite tu http://wiki.sa-mp.com/wiki/Format - GivePlayerMoney - funkcia pomocou ktorej pripočitáme / odpočitáme hráčovi peniaze.. - playerid, čiastka, tj napr GivePlayerMoney(playerid,4000); pripočíta hráčovi 4000 $.. Všetko ostatné ako je dialogid response atď nejdem vysvetlovať.. Jak neviete robiť s dialógmi tu je nato podrobný tutoriál http://pawno.cz/topi...-vsetko-o-nich/ Niekde do módu si vložte tento stock ale nie do publicu !! stock IsNumeric(const string[]) { new length=strlen(string); if (length==0) return false; for (new i = 0; i < length; i++) { if ((string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+')|| (string[i]=='-' && i!=0)|| (string[i]=='+' && i!=0)) return false; } if (length==1 && (string[0]=='-' || string[0]=='+')) return false; return true; } a ešte tento .. Použil som ShowPlayerDialogEx kvôli tomu aby vám nepreskakovali kolonky.. Hore do módu : new bool:ShowedPlayerDialog[MAX_PLAYERS]; Niekde do módu nie do publicu ! stock ShowPlayerDialogEx(playerid, id, style, lis[], mess[], button1[], button2[]) { if(ShowedPlayerDialog[playerid] == true) return false; ShowPlayerDialog(playerid, id, style, lis, mess, button1, button2); ShowedPlayerDialog[playerid] = true; return true; } Do OnDialogResponse pod prvú "{" ShowedPlayerDialog[playerid]=false; Ukladanie : Do OnPlayerConnect: new cesta[50]; format(cesta,50, "/Banky/%s.sav", PlayerName(playerid)); BankMoney[playerid] = dini_Int(cesta, "banka"); Do OnPlayerDisconnect: new cesta[50]; format(cesta, 50, "/Banky/%s.sav", PlayerName(playerid)); if(!dini_Exists(cesta)) { dini_Create(cesta); } else { dini_IntSet(cesta, "banka", BankMoney[playerid]); } stock PlayerName.. : stock PlayerName(playerid) { new name[128]; GetPlayerName(playerid, name, 128); return name; } Na dini tu dával mattsy tutoriál takže to popisovať nemusím.. // Dúfam že sa to bude všetký páčiť a najmä tým ktorý nechceli aby som tento tutoriál spravil .. P.S Nekopírujte ale naučte sa to Jak sa chcete niečo spýtať alebo vám to bolo málo objasnené napíšte mi na skype tomas.spanik1 !
  18. Tanga

    návod Pickupy

    Čo je to pickup: • Pickup je niečo, čo sa dá zodvihnúť. Kde sa používa pickup: • Napríklad zbrane čo vypadnú z mŕtvoly, alebo keď zabijete niekoho, často z neho vypadnú peniaze vo forme pickupu, ktorý môžete zobrať. Alebo srdce na vyliečenie. Postup pri vytvorení pickupu: Tvar funkcie pickupu: Pridelenie vlastností pickupu: Príklady použitia pickupu: 1. Pridanie života: 2. Zrušenie pôvodného obchodu ammunation LS: Informační návod - Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný
  19. Úvod Takže zdravím všechny lidi kteří zabloudily na tento topic, tenhle tut je hlavně pro začátečníky takže se prosím zdržte komentářu jako ":D To je úplná blbost to by dokázal každý." tohle může napsat každý ale nějakým začátečníkům se to snad hodit může takže jdeme na věc. Samotné příkazy a vysvětlivky Jako první si můsíme v FS/GM najít public OnPlayerCommandText(playerid, cmdtext[]) tento "kód" je takzvaný public do něj se píšou všechny funkce samotného pracování FS/GM (samozřejmně jen příkazy a dcmd definy). A pro začátek je podle mě nejlepší si vysvětlit příkaz /kill a pak si ho vysvětlíme i v dcmd formě. Takže ten public viz. nahoře defaultně vypadá takto: public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp("/mycommand", cmdtext, true, 10) == 0) { // Do something here return 1; } return 0; } Místo /mycommand si dáme příkaz který chceme aby hráč napsal a vykonala se příslušná funkc. My si místo // Do something here dáme samotnou funkci na odebrání nebo přidání hráčovi zdraví. Místo // Do something here si dáme toto: SetPlayerHealth(playerid, 0); SetPlayerHealth = Tato funkce hráčovi přídá/odebere zdraví playerid = to znamená že ten hráč který zadal příkaz tak tomu se funkce vykoná !! nikomu jinému !! 0 = tohle je "počet" zdraví 100 maximum 0 minimum pokud nastavíme na 0 umře na 100 plně se mu doplní zdraví A pardon sem zapoměl můžeme si nastavit i aby se mu napsalo že úspěšně spáchal sebevraždu i barevně. Pokud to chcete tak si pod SetPlayerHealth dejte toto: SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!"); SendClientMessage = Funkce která hráči vypíše zprávu playerid = to znamená že ten hráč který zadal příkaz tak tomu se funkce vykoná !! nikomu jinému !! 0xFFFF00AA = toto je kód barvy ( v HEX kódu který si někde najděte třeba zde: http://pawno.cz/topic/24346-barvy-bez-prace/ ) "Úspěšně si spáchal sebevraždu!" = Toto je co chcete aby se hráči vypsalo za zprávu !! vždy musí zpráva obsahovat uvozovky !! Tak to by byl příkaz na /kill a ve výsledku celý public bude vypadat asi takto: public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp("/kill", cmdtext, true, 10) == 0) { SetPlayerHealth(playerid, 0); SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!"); return 1; } return 0; } A jak vytvořit příkaz je hodně způsobu třeba tento přes ten public nebo přes dcmd a to si teď ukážeme. Takže kamkoliv do FS/GM !! né do publicu !! napíšeme: dcmd_kill(playerid, params[]) { return 1; } to je samotný příkaz ale aby nám to nepsalo errory tak si úplně nahoru do FS/GM pod #include <a_samp> dáme toto: #define dcmd(%1,%2,%3) if((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 to je definice pro funkci dcmd aby nám fungovala a teď ještě jednu věc aby vám dcmd příkaz fungoval si musíme do publicu jak jsme dělaly první příkaz napsat jednu věc takže váš public by měl celkově vypdat asi takto: public OnPlayerCommandText(playerid, cmdtext[]) { dcmd(kill,4,cmdtext); if (strcmp("/kill", cmdtext, true, 10) == 0) { SetPlayerHealth(playerid, 0); SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!"); return 1; } return 0; } a jak jsme si už předem vytvořily toto: dcmd_kill(playerid, params[]) { return 1; } tak nad return 1; napíšeme toto: SetPlayerHealth(playerid, 0); SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!"); Tak a vysvětlím vám poslední věc tohle: dcmd(kill,4,cmdtext); To je to jak jsme si vložily k starému příkazu takže dcmd = typ příkazu kill = jméno příkazu !! bez / !! 4 = počet písmen v slově kill cmdtext = že se píše do chatu Tak a to je všechno tak čau a doufám že jsem někomu pomohl
  20. Zdravím dávám sem TUT na TextDraw já osobně sem měl problém z pozicema a TextDrawem... Tak sem udělal TUT pro nováčky jako sem já // Někam na vrch new Text:TD; // Do OnGameModeInit TD = TextDrawCreate(281 ,191 , "Lerry"); //281 pohybujete textem na vrch a důle // 191 znamená do prava nebo do leva TextDrawFont(TD , 0); TextDrawLetterSize(TD , 1, 7); //(TD , 1, 7); toto znamená velikost textu TextDrawColor(TD , 0x35e612FF); TextDrawSetOutline(TD , true); TextDrawSetProportional(TD , true); TextDrawSetShadow(TD , 1); Já používam texdraw editor ODKAZ http://bsndesign.webs.com/tde.htm Dofám že sem někomu pomohl kdyby nějaké chyby tak opravte (a nenadávejte že je to na nic)
  21. Zdravím, tak ma napadlo sa podeliť o môj prvý ammo shop pokial ma ešte teší že som ho vytvoril s pomocou wiki. Na začiatok: new ammo; Druhá fáza je vytvoriť pickup v amme ////////////ammonation ammo = CreatePickup(1254, 19, 312.4347,-165.6759,999.6010); NOTE: 1254 je síce vesta ale mne sa to páči, je to netradičné a nevidno to nejak často na serveroch. Tretia fáza je OnPlayerPickUpPickup public OnPlayerPickUpPickup(playerid, pickupid) { if(pickupid == ammo)//ammo - zbrane { ShowPlayerDialog(playerid, 111, DIALOG_STYLE_LIST, "StuntPark Ammonation", "Health $2,000\nArmour $2,000\nDesert Eagle $500\nSawnoff Shotgun $1,000\nMP5 $1,500\nAK-47 $4,000\nM4 $4,000\nSniper Rifle $3,500\nGranade $3,000", "Buy", "Exit"); return 1; } Stvrtá fáza je dialog sám o sebe public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 111) // Color Settings { if(!response) return SendClientMessage(playerid, 0xFFFFFFAA, "Odišiel si."); switch(listitem) { case 0: // Zivot { if(GetPlayerMoney(playerid) < 2000) return SendClientMessage(playerid, 0xFFFFFF, "{C0C0C0}Nemáš dostatok penazí."); GivePlayerMoney(playerid, -2000); SetPlayerHealth(playerid, 100); return 1; } case 1: // vesta { if(GetPlayerMoney(playerid) < 2000) return SendClientMessage(playerid, 0xFFFFFF, "{C0C0C0}Nemáš dostatok penazí."); GivePlayerMoney(playerid, -2000); SetPlayerArmour(playerid, 100); return 1; } case 2: // Desert Eagle { if(GetPlayerMoney(playerid) < 500) return SendClientMessage(playerid, 0xFFFFFF, "{C0C0C0}Nemáš dostatok penazí."); GivePlayerMoney(playerid, -500); GivePlayerWeapon(playerid, 24, 50); return 1; } case 3: // Sawnoff Shotgun { if(GetPlayerMoney(playerid) < 1000) return SendClientMessage(playerid, 0xFFFFFF, "{C0C0C0}Nemáš dostatok penazí."); GivePlayerMoney(playerid, -1000); GivePlayerWeapon(playerid, 26, 50); return 1; } case 4: // MP5 { if(GetPlayerMoney(playerid) < 1500) return SendClientMessage(playerid, 0xFFFFFF, "{C0C0C0}Nemáš dostatok penazí."); GivePlayerMoney(playerid, -1500); GivePlayerWeapon(playerid, 29, 100); return 1; } case 5: // Ak-47 { if(GetPlayerMoney(playerid) < 4000) return SendClientMessage(playerid, 0xFFFFFF, "{C0C0C0}Nemáš dostatok penazí."); GivePlayerMoney(playerid, -4000); GivePlayerWeapon(playerid, 30, 150); return 1; } case 6: // M4 { if(GetPlayerMoney(playerid) < 4000) return SendClientMessage(playerid, 0xFFFFFF, "{C0C0C0}Nemáš dostatok penazí."); GivePlayerMoney(playerid, -4000); GivePlayerWeapon(playerid, 31, 150); return 1; } case 7: // Sniper Rifle { if(GetPlayerMoney(playerid) < 3500) return SendClientMessage(playerid, 0xFFFFFF, "{C0C0C0}Nemáš dostatok penazí."); GivePlayerMoney(playerid, -3500); GivePlayerWeapon(playerid, 34, 30); return 1; } case 8: // granade { if(GetPlayerMoney(playerid) < 3000) return SendClientMessage(playerid, 0xFFFFFF, "{C0C0C0}Nemáš dostatok penazí."); GivePlayerMoney(playerid, -3000); GivePlayerWeapon(playerid, 16, 10); return 1; } if(GetPlayerMoney a <3500 (ukážka) - zisti či má hráč danú sumu pri sebe. Ked nemá napíše mu správa že nemá dostatok penazí, GivePlayerMoney a -3500 mu ich odoberie (Pozor musi tam byť -). GivePlayerWeapon nám sám o sebe hovori že vrah je na svete Tento Tut som sice robil s pomocou wiki nie je to nič moc, ked som na niečo zabudol pište hned ale po jednom! PS: Samozrejme si músite vytvoriť aj vlastné ammu ale to nechám na vás.
  22. Zdravim, rozhodl jsem se pro vas udelal tut jak na nejoptimalizovanejsi streamer funguje na principu ze nekontrolujete kazdy object zvlast jako to u streameru byva ale kontrolujete jestli je nebo neni v zone a podle toho zobrazite nebo schovate objekty vytvorime si public ktery se bude vyvolavat kazdou terinu (nebo pridame do publicu) SetTimer("MultiTimer",1000,1); forward MultiTimer(); public MultiTimer() { for(new i;i pokud nemate stock IsPlayerInArea(playerid,Float:minx1,Float:maxx1,Float:miny1,Float:maxy1) { new Float:x,Float:y,Float:z; GetPlayerPos(playerid,x,y,z); if(x > minx1 && x < maxx1 && y > miny1 && y < maxy1) return 1; return 0; } jak vidite je to velmi jednoduche a vymyslel by to asi kazdy takze pokud chcete setrit svoji milovanou CPU tak prvni co odstranite je CreateDynamictObject nebo Xstreamer;o++)>;i++) Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný
  23. ATomas

    návod Barvy

    Zdravim, mnoho lidi pouziva v pawnu barvy a vubec nemaji paru jak to vlastne funguje a ty kteri nepouzivaji treba Xtreme Vehicle Plotter nebo neco podobneho tak jen zoufale hledaji barvy nebo take v te paletne barev nemuze treba trefit nejaky cisty odstin funguje to jednoduse kazdy kod barvy je zadan: 0xCCZZMMST 0x je zacatek pawn hexove barvy CC je mnozstvi cervene barvy ZZ je mnozstvi zelene barvy MM je mnozstvi modre barvy ST je pruhlednost barvy zapisuje se v sestnackove soustave (0 1 2 3 4 5 6 7 8 9 A B C D E F) zjednodusene vzdy kdyz ma nastat neco vetsiho nez F (15) tak pribide cislo pred tim takze maximalni hodnota je 256 (resp. 255 protoze je prvni 0) ale nemuzete do barev psat 255 musite to napsat jako FF 00 je nepouzit vubec tu barvu a FF je opak tudiz nejvetsi "svetlost","cistota" atd.. takze vlastne michate barvy z palety tri barev. pokud nekdo nespal pri hodinach fyziky tak vi ze kazdy barva ma svou vlnovou delku. pokud chcete vytvorit cervenou tak staci zadat jen mnozstvi cervene a zbytek nechat na nule 0xFF0000FF zelena 0x00FF00FF modra 0x0000FFFF pokud chcete vytvorit bilou tak pouzitete vsechny barvy na maximum takze 0xFFFFFFFF kdyz zadate vsechny tri barvy ve stejnem mnozstvi vytvorite odstin sede 0xAAAAAAFF takze se muzete dostat az na cernou 0x000000FF pokud chcete vytvorit zlutou 0xFFFF00FF takze az si budete nekdy tvorit vlastni barvu a porad se vam tam bude plest nejaka barva ktere se nemuzete zbavit ze se proste nemuzete mysi trefit presne na to prave policko tak si ji muzete takto poupravit doufam ze sem nekterym trochu osvetlil fungovani kodu barev Návod označen jako platný Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný
  24. Vítám vás u mého prvního tutoriálu. Připravil jsem si pro vás základní informace o AMT. AMT = Arezu's Mapping Toolbo AMT je addon do MTA:SA, pomocí kterýho mužeme tvořit loopingy, kopírovat objekty a mnoho další. Instalace: Instalace AMT je jednoduchá, budeme k tomu potřebovat pouze MTA:SA a AMT. Download: AMT: http://pawno.cz/files/file/187-mtasa-addon-amt/ MTA:SA: http://pawno.cz/files/file/162-mta-map-editor-nove-objekty-samp/ Stažený soubor amt dáme do C:\Program Files\Rockstar Games\GTA San Andreas\MAP_Editor\server\mods\deathmatch\resources Když soubor uspěšně vložíme do uvedené cesty, tak můžeme zapnout MTA:SA, tam dáme MAP EDITOR a poté se objěvíme v prázdné mapě (možná už máte nějakou postavenou). ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1. Pomocí tlačítka T se zobrazí lišta pro psaní. Do ní napíšeme /start amt a poté se nám zobrazí v pravém rohu tabulka. Obrázek tu 2. Po zadaní textu se nám objěví tato tabulka: http://2i.cz/e746a78d5e 3. Tato tabulka obsahuje Generator a Duplicator, mezi tabulkama přechazíme pomocí šipek co je v tabulce. Generator: http://2i.cz/e746a78d5e Duplicator: http://2i.cz/09a84963b0 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4. Tak, teď už se vrhneme na tvoření loopingů. Přidal sem popis tabulky, kterou teď budeme potřebovat: http://2i.cz/18b95872a1 5. Vytvoříme si nějaký objekt ze kterého půjde utvořit loop (dveře,plot, vrata a jakýkoliv předmět který je rovný). http://2i.cz/c56485af7c Na obrázku vidíme, že z objektů "trčí" šipky. Šipky určují směr loopingů. Červená šípka určuje na jakou stranu se bude looping výšit, zelená šipka poukazuje na směr. Šipky můžeme měnit pomocí levého tlačítka a kliknutím na "kolečko". 6. Takže teď si popíšeme funkci "Offset" kterou docela poměrně používám. Funkce Offset má za úkol měnit vzdálenost mezi začátkem a koncem. Čím větší offset tím větší vzdálenost bude. Př: http://2i.cz/2i/i/528a6d0d/e16e12ec3fe72f3d1295d835e3b37554/9fce2f05d6.f.png - u prvního obrázku je nastaven offset na 50, u druhého je pouze 20. 7. AMT má také funkci, že looping vždy nemusí být celej. Stačí zadat do políčka Loop: 0.50. Loop teď bude pouze poloviční. http://2i.cz/2i/i/528a699e/166e3fb0c4c92daef99b8f2ae5e29c6a/a302e3c91a.f.jpg Na obrázku můžete vidět že 1. loop je celý. Teda (1) Na druhém obrázku je čtvrtina loopu tedy (0.25) = čísla v závorce znamenají jaké číslo je v řádku loop. -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 8. Teď přejdeme z Generátoru na Duplicator. Takže si o něm něco řekneme. Tato funkce nám hodně usnadní práci při dělaní silnic nebo něco podobního. Funguje to tak, že si dáme dva objekty vedle sebe POZOR MUSÍTE JE MÍT SPOJENÉ PŘESNĚ, JESTLI BUDETE DĚLAT VELKÉ VZDÁLENOSTI BUDOU VÁM VIDĚT CHYBY! a ty objekty to zkopíruje. Takže budeme muset vybrat dva elementy(objekty) co se zkopírují. Pod tím máme Copies což znamená kolikrát se to zkopíruje. Když máme dva objekty, které chceme zkopírovat 5x, tak budeme mít 7objektů. (2+5) Př:http://www.2i.cz/9031d0fa29 se změní na: http://www.2i.cz/8120c1eb38 Tak, tohle je konec tutoriálu, myslím že jsem to popsal dostatečně a že z toho každý pochopí. Kdybyste našli chybu, tak mi jí prosím napište. Ale nejspíš tam budu mít gramatické chyby. Když mi nejde pawno, tak aspoň že umím vytvořit mapu.
  25. Zdravím, věnujete se mapování do hry SA:MP ? Určitě využíváte MTA, a proč ? Jako vždy se vytvoří jedna věc a všichni se ji stále drží ono se těžko opouští něco na co jste zvyklí ale když ta druhá možnost má spoustu dalších vylepšení tak proč nepoužívat ji ? O čem to píši ? Píši o SA-MP Map Construction. Tento program je podle mého nejlepší pro práci s objekty, obsahuje základní tak i různé další funkce které vám práci zpříjemní a zjednodušení... Pár výhod: - Přesné usazování objektů - Optimalizovanost (Renderování mapy je rychlé a nezatěžuje počítač, já osobně mám v editoru 95FPS a to používám kalkulačku) - Možnost přidávat si oblíbené objekty (Snadný přístup k nim) - Výběr předmětů (Nemusíte hledat na webových stránkách, seznam objektů/skinů/vozidel je zabudován již v editoru) - Podpora všech verzí (editor čte ze SA:MP souborů) - Možnost odstraňovat základní objekty - Výběr možnosti výstupního kódu (Již nemusíte používat konvertor pro používání streamerů vše si nastavíte uvnitř editoru) - Velice jednoduché ovládání na které si hned zvyknete (Kliknete na mapu, pak na insert object vyberete si objekt nebo rovnou vložíte ID objektu a objekt je na světě pak už si ho jen přesně nasadíte tam kam potřebujete) - Spousta dalších... Nevýhody: - Funguje pouze pro SA:MP (Nepodporuje MTA) Odkaz ke stažení: http://www.mathpudding.com/topsecretsamp/editor.rar Ukázka jedné z mnoho možností: (collision mode) Měj se MTA editore
×
×
  • Create New...