Jump to content

Search the Community

Showing results for tags 'návod'.

  • 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. Zdravíčko... Dnes bych chtěl přispět do seznamu tutoriálů ohledně PHP a přesněji bych se chtěl věnovat SAMPQuery aneb Jak si vypsat data ze serveru. Dnes si zpracujeme status serveru. Úvod -> Máme tu pár bodů co musíme splnit považuji je za hotové či již připravené a to:. - Webový server (funkční) - Editor - Základní dovednosti v PHP Pokud nemáte základní dovednosti je tu mnoho tutoriálů, které Vám to můžou vysvětlit z toho důvodu já jsem již tyto tutoriály nepsal. Požadované soubory -> Jelikož SAMPQuery není přímo v PHP includováno tak nám jeden hodný programátor udělal zjednodušenou formu zápisu díky obalení všech funkcí do přijatelnějšího tvaru. Tomu se říká API. Stáhneme si tedy tento balík. PHP-SA-MP-API-1.1.zip Pokud zde download nefunguje odkazuji na téma na fóru forum.sa-mp.com : http://forum.sa-mp.com/member.php?u=115444 Po extrahování tohoto balíku se nám zobrazí složka: Vidíme, že tu máme dva soubory s příponou .class a také přidané s příponou Example. Soubory s části názvu Example jsou v podstatě ukázky použití v praxi, proto si jeden takový otevřeme. A to SampQueryExample.php. Soubor vypadá asi nějak takto. Vidíme tam includování souboru SampQuery.class.php, můžeme vidět později initializaci třídy SampQuery s parametry IP a portu. Vlastní třída pro vytváření statusu -> Vytvoříme si vlastní třídy. Pokud někdo zase neví odkazuji na další návody tu na fóru nebo někde jinde popřípadě dopíši později. Proč vlastní třídu? Kvůli přehlednosti a funkčnosti a nejspíše i bezpečnosti. To už záleží, jak se nám povede Jak to vypadá ještě neupraveně: A co to dělá? Zapnutý server: Vypíše základní data. Vypnutý server: Takže základ by nám již fungoval. Popis funkcí: -> Vytvoření třídy a vytvoření pomocných proměnných aby byli dostupné po celé třídě. -> private $query z toho důvodu, protože nechceme aby se k naší instanci dostal i někdo jiný krom nás. (Jednoduše řečeno) -> Funkce __construct je jedna z magických metod PHP, volá se vždy při initializaci třídy. -> V této funkci nastavujeme naše proměnné ze začátku. -> require_once načte obsah soubory SampQuery.class.php PS: Já ho mám ve složce libs -> Funkce ini nám inicializuje třídu popřípadě vyhodí error pokud ji již máme "načtenou". -> Dále se zkouší připojit na server abychom zjistili či funguje. -> Funkce vrací hodnotu true / false -> Funkce render bude využita pro vykreslení našich dat v šabloně. Zjištuje také podmínkou funkce ini jestli je server funkční pokud ne vypisuje zprávu. var_dump je zde pouze pro testování výstupu. Použití ve vašem webu: -> require_once načteme náš soubor se třídou. -> vytvoříme instanci třídy s pomocí new a tu uložíme do proměnné $banner a přidáme do parametrů i IP a port -> Podotýkám u PORTU jsme nemuseli použít "" aneb je to celé číslo. Jednoduché, že? Závěrem: Doufám, že Vám tento tutoriál byl k něčemu v dalším dílu tohoto se podíváme na lepší vykreslování přidáme více obrázků a možnost přepínat mezi nimi. Zdroják: www.zip
  2. if(!strcmp(cmdtext, "/s", true)) { if(IsPlayerInAnyVehicle(playerid)) { new vehicleid = GetPlayerVehicleID(playerid); GetVehiclePos(vehicleid, posX[playerid], posY[playerid], posZ[playerid]); GetVehicleZAngle(vehicleid, posA[playerid]); } else { GetPlayerPos(playerid, posX[playerid], posY[playerid], posZ[playerid]); GetPlayerFacingAngle(playerid, posA[playerid]); } Interior[playerid] = GetPlayerInterior(playerid); VirtualWorld[playerid] = GetPlayerVirtualWorld(playerid); SendClientMessage(playerid, -1, "{FFFFFF}[{3399FF}Aw{FFFFFF}]{3399FF}:{FFFFFF} You have saved your position"); SendClientMessage(playerid, -1, "{FFFFFF}[{3399FF}Aw{FFFFFF}]{3399FF}:{FFFFFF} Type {3399FF}/r {FFFFFF}or press {3399FF}Y {FFFFFF}to load your position"); Saved[playerid] = 1; return 1; } if(!strcmp(cmdtext, "/r", true)) { if(Saved[playerid] == 1) { if(IsPlayerInAnyVehicle(playerid)) { new vehicleid = GetPlayerVehicleID(playerid); SetVehiclePos(vehicleid, posX[playerid], posY[playerid], posZ[playerid]); SetVehicleZAngle(vehicleid, posA[playerid]); LinkVehicleToInterior(vehicleid, Interior[playerid]); SetVehicleVirtualWorld(vehicleid, VirtualWorld[playerid]); } else { SetPlayerPos(playerid, posX[playerid], posY[playerid], posZ[playerid]); SetPlayerFacingAngle(playerid, posA[playerid]); SetPlayerInterior(playerid, Interior[playerid]); SetPlayerVirtualWorld(playerid, VirtualWorld[playerid]); } SendClientMessage(playerid, -1, "{FFFFFF}[{3399FF}Aw{FFFFFF}]{3399FF}:{FFFFFF} You have loaded your position"); } else { SendClientMessage(playerid, -1, "{FFFFFF}[{FF0000}Aw{FFFFFF}]{FF0000}: {FFFFFF} You cant do that since you have not saved any positions yet"); SendClientMessage(playerid, -1, "{FFFFFF}[{3399FF}Aw{FFFFFF}]{3399FF}:{FFFFFF} Type {3399FF}/s {FFFFFF}to save a position"); } return 1; } ahoj potreboval bych pomoct jak muzu udelat tak abych mohl tlacitko ''Y'' pouzivat jako to /r jakoze vratit na ulozenou pozici kdyz jsem to zkousel if(newkeys == KEY_YES) { vlozil jsem funkci /r } tak mi to nahazelo hodne chyb :/
  3. Viděl jsem tu případy kdy někteří vytváří pro každou zprávu textdraw... Ale na co? Stačí vám jeden textdraw na kolik zpráv chcete. Ukážu vám teď jak na to v klasickém pawnu bez použití YSI a podobně to si potom každý může udělat sám. 1. Vytvoříme si textdraw. ( já si udělal klasický text s použitím fontu 2 ) textdraw = TextDrawCreate(188.000000, 384.000000, "~n~"); TextDrawBackgroundColor(textdraw, 255); TextDrawFont(textdraw, 2); TextDrawLetterSize(textdraw, 0.270000, 1.000000); TextDrawColor(textdraw, -1); TextDrawSetOutline(textdraw, 1); TextDrawSetProportional(textdraw, 1); 2. Otevřeme si .pwn 3. Někam nahoru vložíme: new Text:Textdraw[MAX_PLAYERS]; 4. Do OnGameModeInit vložíme náš textdraw tímto stylem: for(new i = 0; i < MAX_PLAYERS; i++){ Textdraw[i] = TextDrawCreate(188.000000, 384.000000, "~n~"); TextDrawBackgroundColor(Textdraw[i], 255); TextDrawFont(Textdraw[i], 2); TextDrawLetterSize(Textdraw[i], 0.270000, 1.000000); TextDrawColor(Textdraw[i], -1); TextDrawSetOutline(Textdraw[i], 1); TextDrawSetProportional(Textdraw[i], 1); } 5. Vytvoříme si stock pro zprávu. stock InfoMessage(playerid, time, text[]){ // time nastavíte sekundy například 2 a samozřejmě "text" TextDrawHideForPlayer(playerid, Textdraw[playerid]); // schová v případě zprávu která už je vytvořená TextDrawSetString(Textdraw[playerid], text); // nastaví text zprávy TextDrawShowForPlayer(playerid, Textdraw[playerid]); // zobrazí zprávu SetTimerEx("InfoMessageHide", time*1000, false, "i", playerid); // skryje informační zprávu return true; } 6. Vytvoříme si public pro schování zprávy. forward InfoMessageHide(playerid); public InfoMessageHide(playerid){ return TextDrawHideForPlayer(playerid,Textdraw[playerid]); } A máme hotovo... Zprávy potom vytváříte takto: InfoMessage(playerid, 3, "zprava"); // protože se jedná o textdraw nepište do zprávy háčky, čárky a podobně... 3 je počet sekund To je vše...
  4. #1 Úvod Nová série poučných slov o skriptování v PAWN Intro Po posledních zkušenostech zde na fóru, a nebo i jiných nováčků, kteří se mě ptali na pomoc, jsem byl velice zděšen, jak chápou pawno. (Po první větě můžu naokraj říct, že je psaní textu delšího rázu za trest, zvláště pomocí debilních nefungujících BBcodů. Ale to bylo z jiného soudku.) Zvýrazněné slova jsou velmi důležitá pro pochopení. Po delším pozorování komunity jsem uznal, že snad 95% lidí nemá ponětí o tom, co dělá. První příklad Jak jsem již řekl v předešlé větě, uvedu příklad. #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 Většina z vás by řekla, že je to potřebný kód, bez kterého nepůjdou příkazy, nebo to je pro vás strašně složitá definice nějakých sraček a nebo by to prostě házelo errory Tohle není vysvětlení toho, proč to tam je. Většina malých mozečků nepochopí reálné vysvětlení, ale nehodlám rozebírat psychickou vyspělost jedince. Ten kdo to svým způsobem nepochopí, nemá na to, aby se tomuto dále věnoval. Ano, myslím tím děti, co toto nedělají ze zájmu a přiučení něčemu novému, ale toho, aby si zajezdili autem ve hře. V podstatě se jedná o funkci, která "přesune příkaz" do nové funkce po vyvoláni callbacku OnPlayerCommandText. Umožňuje nám rychlý zápis příkazů bez počátečního lomítka / a do druhého parametru funkce dcmd_prikaz pošle obsah za příkazem a vrátí hodnotu 1, protože to callback informuje o tom, že příkaz byl zpracován. Důvod, proč vám to vykládám na tomto příkladu, je, aby jste pochopili mechaniku obecně a tím všechno. Třetí věc a také důvod, proč jsem založil toto téma je že nemá smysl zakládat hloupé tutorialy na to, jak něco udělat. Většina z nich, bez urážky, je jako "od robota pro robota"; vysvětlení nedostačující a jak jsem již zmínil - témata typu: "bez toho by vám to nešlo, tak si to ku*va zkopírujte". A to nepočítám optimalizaci, způsob a tak podobně. Rozhodl jsem se založit novou sérii návodů pro chápání samotné mechaniky a logiky, protože je to jen o fantazii, představivosti a logice. Podle toho všeho si můžete vytvořit naprosto vše špičkové kvality. Osobně jsem měl podobné začátky, ale čím dřív se zlozvyk eliminuje, tím lépe. Nekonečným kopírováním kódu jsem ztratil spoustu let praxe. Díky této zkušenosti může pawn sloužit i jako odrazový můstek pro daleko složitější jazyky. Doufám, že toto téma bude vnímáno jen přínosně a kladně. Prozatím sbohem, I'll be back. ]mxco[
  5. TextDraw namísto GameTextForAll Úvod: Tento návod je zaměřen na TextDrawy a jejich využití namísto GameTextForAll jelikož když máte logo serveru přes TextDraw a použijete GameTextForAll / ForPlayer tak text draw zmizí. Proto jsem se rozhodl udělat provás tento malý TuT. Co potřebujeme(?): TextDraw Editor by Zamaroht(http://samp-scripts.com/post/11314/[0.3x_RC1+]_Zamaroht_TextDraw_Editor_with_Model_Previews/adri1/filterscript/other) Vysvětlení: Budeme pracovat s dcmd které nám usnadní v tomto práci, také budeme pracovat se stringama. Zapotřebí je testovací server aby jste mohli vytvořit grafickou předlohu. Ve hře si vytvořímte grafickou předlohu kterou pak uložíte. Jděte do scriptfiles a otevřete textový dokument (s názvem vašeho projektu) a tam máte vše co potřebujete (zkopírujete kód který vypadá nějak takto: Textdraw0 = TextDrawCreate(410.000000, 200.000000, "Tvůj text"); TextDrawBackgroundColor(Textdraw0, 255);TextDrawFont(Textdraw0, 1); TextDrawLetterSize(Textdraw0, 0.500000, 1.000000);TextDrawColor(Textdraw0, -2139062017); TextDrawSetOutline(Textdraw0, 0);TextDrawSetProportional(Textdraw0, 1); TextDrawSetShadow(Textdraw0, 1);TextDrawUseBox(Textdraw0, 1); TextDrawBoxColor(Textdraw0, -2139062017); TextDrawTextSize(Textdraw0, 490.000000, 10.000000); Nahoře do GM / FS dáme #define Textdraw0 (nebo jaké číslo vám to tam hodí) aby nám to fungovalo dáme nahoře do mádu definici dcmd. #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 Příklad: A teď se dostáváme k samotném tvoření "dannu". do OnGameModeInit() dáme celý kód který vám to vyhodí do scripfiles. (ten kód který je nahoře ale VÁŠ kód). Pak dáte Úplně dolů dáme dcmd ve kterém bude náš příkaz a za ním (playerid,params[]) dcmd_dann(playerid,params[]) Aby nám neházelo upozornění dáme pod toto { #pragma unused playerid Teď jsme se dostali k samotnému nastavení textu. TextDrawSetString(Textdraw0,params); Pokud máte Textdraw5 nebo jiné číslo tak ho musíte udělat i zde! Teď dáme ještě že po zadání příkazu se tento TextDraw ukáže všem hráčům. TextDrawShowForAll(Textdraw0); return 1; } Teď jdeme do OnPlayerCommandText a dáme sem definici pro naše dcmd. zadáme někam do toho publicu: dcmd(dann,4,cmdtext); dcmd(dann = příkaz 4 = počet písmen na rozeznání příkazu cmdtext = text v příkazu Tipy: Na serveru když zadáte /dann [TEXT] tak pro změnu barev dejte ~r~ (červená) podle této tabulky se podívejte na barvy - ~n~ = New line ~r~ = Red ~g~ = Green ~b~ = Blue ~w~ = White ~y~ = Yellow ~p~ = Purple ~l~ = Black ~h~ = Turns text lighter ~u~ = Grey up arrow ~d~ = Grey down arrow ~~ = Grey right arrow ( http://weedarr.wikidot.com/game-text#toc8 ) Závěr: Toto by bylo z tohoto TuT vše, pokud máte nějaké návrhy na rychlejší úpravu nebo něco takového tak uričtě pište Pokud by vám to nefungovalo pište zprávu. ( )
  6. Mikoo

    pomoc Navod

    Čaute nemohol by tu spraviť niekdo apravit tutorial na vytvaranie domov ? ?
  7. Šablona pro psaní návodů Veškeré nové návody budou odpovídat této šabloně. Návody se následně budou schvalovat a budou podle zaměření přesunuty do příslušné sekce. Své návody můžete zakládat v podsekci "Nové návody". Vyhrazujeme si právo návody upravovat, aby byl sjednocen styl a podobně. Každý návod bude mít vystihující název, prefix tématu NÁVOD a obtížnost od 1 (nejlehčí) do 5 (nejtěžší) za názvem v hranatých závorkách. Příklady vyhovujících titulků: Proměnná [*] Práce s bity [*****] Časovače [**] Samotné téma s návodem musí obsahovat obtížnost od 1 do 5 (musí se shodovat s obtížností v názvu) a osnovu; každý bod osnovy bude mít vlastní nadpis. Příklad vyhovujícího návodu: Proměnná Obtížnost: 1/5 Osnova/obsah: 1. Úvod 2. Co je to proměnná 3. Příklady proměnných 4. Závěr 1. Úvod Tento návod by se měl týkat proměnných, ale místo toho slouží jako šablona pro další návody. 2. Co je to proměnná Proměnná je pojmenované místo v paměti, do kterého ukládáme různé hodnoty (celá čísla, desetinná čísla atd.), se kterými pak dále pracujeme. Super vysvětlení, že? 3. Příklady proměnných Zde jsou nějaké příklady proměnných: new cislo = 5; //proměnná s celým číslem new Float:desetinne = 3.14; //proměnná s desetinným číslem new bool:logicka = true; //proměnná s logickou hodnotou 4. Závěr Děkuji za přečtení mého návodu, snad vám pomohl ve vaší cestě k tomu stát se dobrým pawnerem. Případné otázky směřujte do příspěvků. Tento návod by neměl problém se schválením (co se struktury týče). Dodržujte strukturu návodu! Nedodržení šablony může vést k odstranění návodu!
  8. Zdravim Chcem ukazat návod nováčikom ako si môžu založiť TDM mod Tento návod som preložil zo sa-mp.com pre ľudí ktorý si chcú zakladať TDM mód a nemaju šajnu o tom ako to zakladat Je to veľmi lahké Zaklad Modu: #include <a_samp> Musí tam byt Team a farby #define Policia 1 #define Terrorista 2 #define PoliceCOLOR 0x00FF00AA #define TerrorCOLOR 0xFF00FFAA #define Farba_Cervena 0xFF0011FF Nemožte zabudnut na premenu na Body a Peniaze enum pInfo //pInfo Premena { pBody, pPeniaze, } Newy: new PlayerData[MAX_PLAYERS][pInfo]; new Team[MAX_PLAYERS]; new prachy[MAX_PLAYERS]; V publicu OnGameModeInit musite mat nazov Modu a obleky SetGameModeText("TDM"); // Nazov Modu AddPlayerClass(265,2431.3733,-1679.4271,13.7673,0,24,100,0,0,0,0); // Oblek Policajta AddPlayerClass(28,2167.8926,-1670.0753,15.0805,0,24,100,0,0,0,0); // Oblek Terroristu Do OnPlayerRequestClass(playerid, classid) dáte toto aby ste si mohli vyberat teamy switch(classid) { case 0: // Policajt { Team[playerid] = Policia; // Vybrat si Team za Policajta { SetPlayerColor(playerid,PoliceCOLOR); //Farba Policajta } } case 1: // Terrorista { Team[playerid] = Terrorista; // Vybrat si Team za Terroristu { SetPlayerColor(playerid, TerrorCOLOR); //Farba Terroristu } } } } Do public OnPlayerDeath(playerid, killerid, reason) dáte toto aby ste dostavaly Body a Penaze a tak if(Team[killerid] == Team[playerid]) { SendClientMessage(killerid,Farba_Cervena, "Zabil si spoluhrača odratame ti $1000 a 4 Body."); //Sprava o Zabití PlayerData[killerid][pPeniaze] -= 1000; SetPlayerMoney(killerid, PlayerData[killerid][pPeniaze]); SetPlayerScore(killerid, PlayerData[killerid][pBody] - 4); } else if(Team[killerid] != Team[playerid]) { PlayerData[playerid][pPeniaze] -=100; PlayerData[killerid][pPeniaze] +=100; SetPlayerMoney(playerid, PlayerData[playerid][pPeniaze]); SetPlayerMoney(killerid, PlayerData[killerid][pPeniaze]); SetPlayerScore(playerid, PlayerData[playerid][pBody]-1); SetPlayerScore(killerid, PlayerData[killerid][pBody]+1); } SendDeathMessage(killerid, playerid, reason); return 1; } Potom pridate do GM alebo do FS Stock lebo inak vam bude ukazovat errory: Stock stock SetPlayerMoney(playerid,moneyafter) //Stock { prachy[playerid]=moneyafter; GivePlayerMoney(playerid,moneyafter-GetPlayerMoney(playerid)); }
  9. Menší tutoriál pro začátečníky. Nejdřív je třeba dát si do módu někam třeba úplně dolu stock který zjistí jméno hráče podle id: stock PlayerName(playerid) { new pname[24]; GetPlayerName(playerid,pname,24); return pname; } Stock se používá stylem PlayerName(playerid) můžete ho použít ne jen v těchto zprávách ale v celém módě určitě lepší jak u každého textu používat GetPlayerName. Teď k samotným zprávám jako první si uděláme zprávu při připojení. Stačí do OnPlayerConnect vložit: new string[128]; // string[128] číslice 128 znamenají délku textu kterou si lze nastavit tímto způsobem. format(string, sizeof(string), "Hráč %s se připojil na server.", PlayerName(playerid)); SendClientMessageToAll(0xffffffaa, string); // SendClientMessageToAll (zpráva pro všechny přítomné hráče na serveru), 0xffffffaa (barva kterou lze jednoduše změnit např.: 0xff0000aa = ČERVENÁ) Mělo by to vypadat takto: public OnPlayerConnect(playerid) { new string[128]; format(string, sizeof(string), "Hráč %s se připojil na server.", PlayerName(playerid)); SendClientMessageToAll(0xffffffaa, string); return 1; } Dále si uděláme odpojení na 3 způsoby a to pád hry, odpojení a vyhození ze serveru: Stačí do OnPlayerDisconnect vložit: new string[128]; // string[128] číslice 128 znamenají délku textu kterou si lze nastavit tímto způsobem. switch(reason) { case 0: format(string, sizeof(string), "Hráči %s spadla hra.", PlayerName(playerid)); case 1: format(string, sizeof(string), "Hráč %s se odpojil ze serveru.", PlayerName(playerid)); case 2: format(string, sizeof(string), "Hráč %s byl vyhozen ze serveru.", PlayerName(playerid)); } SendClientMessageToAll(0xffffffaa, string); // SendClientMessageToAll (zpráva pro všechny přítomné hráče na serveru), 0xffffffaa (barva kterou lze jednoduše změnit např.: 0xff0000aa = ČERVENÁ) Mělo by to vypadat takto: public OnPlayerDisconnect(playerid, reason) { new string[128]; switch(reason) { case 0: format(string, sizeof(string), "Hráči %s spadla hra.", PlayerName(playerid)); case 1: format(string, sizeof(string), "Hráč %s se odpojil ze serveru.", PlayerName(playerid)); case 2: format(string, sizeof(string), "Hráč %s byl vyhozen ze serveru.", PlayerName(playerid)); } SendClientMessageToAll(0xffffffaa, string); return 1; } A prakticky to je vše úpravy si už můžete dělat každý sám. (pro hatery - i tohle přijde vhod pokud to už znáte nebo to nevyužijete nehejtujte to)
  10. Zdravim. Nedávno jsem si všimnul jednoho FS jmenem Audio Reklama a byl tam komentar ze by nekdo uz mohl vymyslet system aby se nemusel nahrávat zvuk a ten potom pouštět. Takže sem trochu projel jiné zdroje a zde máte řešení: stock TTS(playerid, text[], lang[]) // Text-To-Speak(ID hráče, text který chceme přehrát, jazyk) { new str[128]; // vytvoření nového stringu format(str, sizeof str, "translate.google.com/translate_tts?tl=%s&q=%s", lang, text); // format stringu PlayAudioStreamForPlayer(playerid, str); // prehrani zvukove stopy return 1; } Příklad použití: TTS(playerid, "Vítejte na nejkrutopřísnějším serveru na světě.", "cs"); Podporované jazyky: všechny které má google nadabované ale doporučuji používat: cs - český jazyk sk - slovenský jazyk en - anglický jazyk (tento jazyk má asi nejlepší dabing) A předem upozorňuji že je to vše pouze ženský hlas. Doufám že se to někomu bude hodit 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. Zdravím nedávno mi psal Tango stím že by rád sesmolil návod týkající se pawn a různých fíglů.. Já jsem se rozhodl tento návod pojmou spíše směrem k editoru než k samotnému jazyku. Tudíž Tangovi nechávám prostor. Fígly: Sprovoznění parametrů kompilace: - Stačí si ve složce obsahující pawncc.exe pawno.exe apod vytvořit soubor pawn.cfg Ignorace konkrétní chyby: - Do výše zmíněného souboru si vepište příkaz -w[error_number] Já konkrétně jsem si zakázal chybu týkající se nepoužití proměnné ( Symbol is never used ) Tudíž můj kód vypadá takto: -w203 Více složek s includy: - Pokud tvoříte více projektů a každý projekt má své includy tak je jednou z možností includy rozházet do složek např: include/[Projekt] include/[Projekt2] Ale i na toto existuje krásná funkce a to přímo na konkrétním příkladě: -i=C:\Pawno\projects\Virtual_City\include -i=[CESTA] Debug level 3 - Běžně to nejspíš nevyužijete ale pokud vás zajímá plný debug včetně velikosti hlavičky a podobných kravin tak stačí do souboru přidat -d3 Inicializace hodnot - Hodnoty v tomto souboru lze inicializovat tím že ji napíšete přímo za písmeno označující parametr. -d3 Ale pro přehlednost například lze hodnoty inicializovat také -d=3 -d:3 S dalšími fígly přijdu až přijdu na to co přesně dělají tak abych Vám to zde mohl přetlumočit 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ý
  12. 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ý
  13. 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ý.
  14. Ahoj! Vítám vás u mého prvního tutoriálu! Doufám že vám pomohu;) #include <a_samp> public OnFilterScriptInit()//toto se vyvolá při načtení FS { SetTimer("tip",60*1000,true);//timer na 1 minutu return 1; } forward tip(); public tip() { new nahodny = random(4);//na 5 tipů switch(nahodny) { case 0: SendClientMessageToAll(0x00FF00FF,"[TIP] text1"); case 1: SendClientMessageToAll(0x00FF00FF,"[TIP] text2"); case 2: SendClientMessageToAll(0x00FF00FF,"[TIP] text3"); case 3: SendClientMessageToAll(0x00FF00FF,"[TIP] text4"); case 4: SendClientMessageToAll(0x00FF00FF,"[TIP] text5"); } } V tom SendClientMessageToAll si změnte akorát to text, pokud chcete více tipů,tak na řádku 12 do random() napíšete kolik chcete tipů pokud 10 tak napíšete 9, atd... a napíšete i case 5: ...... Doufám že vám návod pomohl děkuji Rudewolff;)
  15. 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 ...
  16. 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% !
  17. 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.
  18. Chcete sa naučiť programovať v C++ pozrite video https://www.youtube.com/watch?v=vacwllMjyGk budem točiť sériu
  19. 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ý
  20. Zdravím, normálně sem nic nedávám ani tu nepíšu žádné tutoriály ale našel jsem v počítači něco z dávnější doby a myslím si že se to někomu i hodí. Jak to použít normálně v módu? Do public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) vložíme: if(newkeys & KEY_FIRE && ProhWeap(playerid) && !IsPlayerAdmin(playerid)) { ResetPlayerWeapons(playerid); return 1; } Následně to funguje tak že pokud vystřelíte s té určité zbraně tak vám to resetuje kompletně zbraně no můžete si tam dát místo ResetPlayerWeapons(playerid); třeba funkci pro ban např: BanEx(playerid,"Weapon Hack"); a nějakou zprávu. Také v případě že se jedná o rcon admina jako o vás tak to bude ignorovat použití zbraně kterou jste zakázali. Celé by to mělo vypadat takto: public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(newkeys & KEY_FIRE && ProhWeap(playerid) && !IsPlayerAdmin(playerid)) { ResetPlayerWeapons(playerid); return 1; } return 0; } Následně si vložíte do módu stock který zjistí jaké ty zbraně jsou zakázané: stock ProhWeap(playerid) { new wp = GetPlayerWeapon(playerid); if(wp = ID ZBRANE || wp = ID ZBRANE || wp = ID ZBRANE || wp = ID ZBRANE) { return true; } return false; } Místo ID ZBRANĚ si dáte id té zbraně kterou chcete zakázat, id zbraní najdete na google, wiki a podobně. Vždy když chce přidat zbraň napíšete || wp = ID ZBRANE tak aby na konci kde máte ) nebylo || každopádně pokud chcete ubrat uděláte to samé ale opačně. Myslím si že netřeba to moc vysvětlovat ale i pro nějaké "lidi": new wp = GetPlayerWeapon(playerid); toto zjišťuje o jakou zbraň se jedná. A nevím co více k tomu říct ----------------------------------------------------------------------------------------------- Ještě vám sem dám co jsem zkoušel udělat já po pravdě nevím jestli je to funkční/není protože jsem to nezkoušel. Je to celkem staré a udělané na způsob includu. Mělo by se ukládat do PW.txt ukládat Zbran1 =, Zbran2 = atd... kde si následně napíšete ID ZBRANĚ: Vytvoříte si například includ: WH.pwn vložíte ho do includu ve vašem pawnu a do něj dáte: new PWS[11]; forward PW_Load(); forward PW_OnPlayerKeyStateChange(playerid, newkeys, oldkeys); public PW_Load() { new soubor[50]; format(soubor, sizeof(soubor), "PW.txt"); PWS[0] = dini_Get(soubor, "Zbran1"); PWS[1] = dini_Get(soubor, "Zbran2"); PWS[2] = dini_Get(soubor, "Zbran3"); PWS[3] = dini_Get(soubor, "Zbran4"); PWS[4] = dini_Get(soubor, "Zbran5"); PWS[5] = dini_Get(soubor, "Zbran6"); PWS[6] = dini_Get(soubor, "Zbran7"); PWS[7] = dini_Get(soubor, "Zbran8"); PWS[8] = dini_Get(soubor, "Zbran9"); PWS[9] = dini_Get(soubor, "Zbran10"); PWS[10] = dini_Get(soubor, "Zbran11"); return true; } public PW_OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(newkeys & KEY_FIRE && ProhWeap(playerid) && !IsPlayerAdmin(playerid)) { ResetPlayerWeapons(playerid); return 1; } return 0; } stock ProhWeap(playerid) { new wp = GetPlayerWeapon(playerid); PW_Load(); if(wp = PWS[0] || wp = PWS[1] || wp = PWS[2] || wp = PWS[3] || wp = PWS[4] || wp = PWS[5] || wp = PWS[6] || wp = PWS[7] || wp = PWS[8] || wp = PWS[9] || wp = PWS[10]) { return true; } return false; } Následně ve svém módu úplně nahoru dáte #include <WH.pwn> A do publicu OnPlayerKeyStateChange dáte: PW_OnPlayerKeyStateChange(playerid, newkeys, oldkeys); Také si nezapomeňte do scriptfiles vytvořit soubor: PW.txt Prakticky po případě si to můžete upravit/opravit a využít jak chcete... Mě to vůbec nezajímá a ani to nehodlám využívat. Díky. A nepište hodnocení dokud si to nezkusíte protože si nejsem jistý s tím ukládáním už od pohledu Ale opravovat vám to nebudu :d Asi by bylo lepší místo Zbran1 Zbran2 atd... ukládat -1 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ý
  21. Zdravím, mám v módu pěknou vychytávku a rozhodl jsem se s vámi o ni podělit o co jde? Transformace vozidla během pohybu k čemu to je? k ničemu k rychlé změně vozidla jak na to? pokud nemáme, nadefinujeme si DCMD #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 a vytvoříme proměnné s názvy aut new VehiclesModels[212][] = { {"Landstalker"}, {"Bravura"}, {"Buffalo"}, {"Linerunner"}, {"Perrenial"}, {"Sentinel"}, {"Dumper"}, {"Firetruck"}, {"Trashmaster"}, {"Stretch"}, {"Manana"}, {"Infernus"}, {"Voodoo"}, {"Pony"}, {"Mule"}, {"Cheetah"}, {"Ambulance"}, {"Leviathan"}, {"Moonbeam"}, {"Esperanto"}, {"Taxi"}, {"Washington"}, {"Bobcat"}, {"Mr Whoopee"}, {"BF Injection"}, {"Hunter"}, {"Premier"}, {"Enforcer"}, {"Securicar"}, {"Banshee"}, {"Predator"}, {"Bus"}, {"Rhino"}, {"Barracks"}, {"Hotknife"}, {"Trailer 1"}, {"Previon"}, {"Coach"}, {"Cabbie"}, {"Stallion"}, {"Rumpo"}, {"RC Bandit"}, {"Romero"}, {"Packer"}, {"Monster"}, {"Admiral"}, {"Squalo"}, {"Seasparrow"}, {"Pizzaboy"}, {"Tram"}, {"Trailer 2"}, {"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"}, {"Police Maverick"}, {"Boxville"}, {"Benson"}, {"Mesa"}, {"RC Goblin"}, {"Hotring Racer A"}, {"Hotring Racer B"}, {"Bloodring Banger"}, {"Rancher"}, {"Super GT"}, {"Elegant"}, {"Journey"}, {"Bike"}, {"Mountain Bike"}, {"Beagle"}, {"Cropdust"}, {"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 LA"}, {"Hustler"}, {"Intruder"}, {"Primo"}, {"Cargobob"}, {"Tampa"}, {"Sunrise"}, {"Merit"}, {"Utility"}, {"Nevada"}, {"Yosemite"}, {"Windsor"}, {"Monster A"}, {"Monster B"}, {"Uranus"}, {"Jester"}, {"Sultan"}, {"Stratum"}, {"Elegy"}, {"Raindance"}, {"RC Tiger"}, {"Flash"}, {"Tahoma"}, {"Savanna"}, {"Bandito"}, {"Freight Flat"}, {"Streak Carriage"}, {"Kart"}, {"Mower"}, {"Duneride"}, {"Sweeper"}, {"Broadway"}, {"Tornado"}, {"AT-400"}, {"DFT-30"}, {"Huntley"}, {"Stafford"}, {"BF-400"}, {"Newsvan"}, {"Tug"}, {"Trailer 3"}, {"Emperor"}, {"Wayfarer"}, {"Euros"}, {"Hotdog"}, {"Club"}, {"Freight Carriage"}, {"Trailer 3"}, {"Andromada"}, {"Dodo"}, {"RC Cam"}, {"Launch"}, {"Police Car (LSPD)"}, {"Police Car (SFPD)"}, {"Police Car (LVPD)"}, {"Police Ranger"}, {"Picador"}, {"S.W.A.T. Van"}, {"Alpha"}, {"Phoenix"}, {"Glendale"}, {"Sadler"}, {"Luggage Trailer A"}, {"Luggage Trailer B"}, {"Stair Trailer"}, {"Boxville"}, {"Farm Plow"}, {"Utility Trailer"} }; vytvoříme příkaz a začneme do něho přidávat následující kód dcmd_transform(playerid,params[]) { return 1 } zjistíme v čem hráč sedí, pozici vozidla, úhly a rychlost new veh = GetPlayerVehicleID(playerid); //zjistíme ID vozidla new Float:X,Float:Y,Float:Z; //určíme proměnné pro pozici new Float:VX,Float:VY,Float:VZ; //určíme proměnné pro rychlost new Float:RX,Float:RY,Float:RZ; //určíme proměnné pro rotaci GetVehiclePos(veh,X,Y,Z); //zjistíme pozici GetVehicleVelocity(veh,VX,VY,VZ); //zjisítme rychlost GetVehicleRotation(veh, RX, RY, RZ); //zjistíme rotaci zajistíme params v příkazu (v tomto případě funguje na jméno vozidla) new car = -1; //zadáme proměnnou ID vozidla for(new i=0;i<212;i++) //cyklus (celkem 212 vozidel) { if(strfind(params,VehiclesModels[i],true) != -1) //pokud v hodnotě params najde název vozidla { car= 400 + i; //vozidla začínají ID 400 break; //stopneme cyklus } } if(car == -1) //pokud ID zůstalo -1 { car = strval(params); //proměnná se nastavila na hodnotu params (id vozidla) if(car < 400 || car > 611) return SendClientMessage(playerid,0xaaaaaaFF, "Špatné ID. ID Aut: 400-611"); //pokud není hodnota v rozmezí } vytvoříme hráčovi auto for(new i=0;i<MAX_PLAYERS_EX;i++) //cyklus { new iseat[MAX_PLAYERS_EX]; //nastavíme proměnnou pro sedadlo if(IsPlayerInVehicle(i,veh)) //pokud je hráč v autě { iseat[i] = GetPlayerVehicleSeat(i); //zjistíme kdo kde sedí RemovePlayerFromVehicle(i); //vyhodíme hráče z auta DestroyVehicle(veh); //zničíme auto new kara = CreateVehicle(car,X,Y,Z,-RX,1,1,9999); //vytvoříme nové auto (námi zadané) PutPlayerInVehicle(i, kara, iseat[i]); //posadíme všechny hráče na jejich místa //následující 4 řádky jsem přidal jelikož neznámou záhadou řádek výše nefungoval a prazatím jsem ho nevyřešil, kdyby se to někomu povedlo, dejte vědět, díky if(iseat[i] == 0) PutPlayerInVehicle(i, kara, 0); if(iseat[i] == 1) PutPlayerInVehicle(i, kara, 1); if(iseat[i] == 2) PutPlayerInVehicle(i, kara, 2); if(iseat[i] == 3) PutPlayerInVehicle(i, kara, 3); SetVehicleVelocity(kara,VX,VY,VZ); //nastavíme rychlost auta } } Přidáme příkaz do OnPlayerCommand... A to je celé děkuji za pozornost, třeba se to někomu i hodí Pokud někomu nebude fungovat > špatně kopíroval > zkuste zapojit mozek a trošku "programovat" mě funguje nádherně a při transformaci auto sebou ani necukne
  22. 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:
  23. 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ý
  24. 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
  25. 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.
×
×
  • Create New...