Jump to content

Search the Community

Showing results for tags 'string'.

  • 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

Found 8 results

  1. Ahoj mám malý problém. Vytvořil jsem si jednuduché editování objektů a potřebuji přeparsovat řetězec (inputtext) do celého čísla (do object id). Dříve, když fungovalo fórum samp, tak si myslím, že se to tam dalo najít ale Googlil jsem a nenašel jsem, jak to provést. Zkoušel jsem funkci intval(), která neexistuje nebo netuším v jakém includu se nachází :). Byl by prosím někdo schopen poradit? Moc děkuji za odpovědi
  2. Ahojte a zdravím všechny, chtěl bych vás zde poprosit o malou pomoc. Přes příkaz /setwarp na SAMP serveru si vytvořím warp (údaje o pozici a příkaz se ukládá přes MYSQL do databáze) a potřebuju přes /warps tyto warpy vypsat. Zezačátku se mi povedlo warpy vypsat jednotlivě, tzn. jeden warp - jeden řádek, tohle ale nechci. Chtěl bych warpy nacyklovat ->vložit do pole a pak je vypsat jako jeden text. Můj kód zatím vypadá takto samozřejmě s errorem a netuším jak dál: mysql_query(Database, "SELECT * FROM `samp_warps` ORDER BY `warp_command` ASC"); new rowCount; //vytvoření proměnné pro uložení celkového počtu warpů cache_get_row_count(rowCount); //vytáhnutí počtu warpů a zapsaní do proměnné rowCount new warps[MAX_STRING] = {}; //vytvoření prázdného pole (MAX_STRING je definován) for(new i = 0; i <= rowCount; i++ ) //začátek cyklu pro vytáhnutí jednotlivého warpu z databáze { new mysqlSelectWarp[65]; format(mysqlSelectWarp, sizeof(mysqlSelectWarp), "SELECT * FROM `samp_warps` WHERE id='%i'", i++); mysql_query(Database, mysqlSelectWarp); //dotaz pro jeden WARP new warpName[20]; cache_get_value_name(i, "warp_command", warpName, sizeof(warpName)); //vytáhnutí sloupce s příkazem (jméno warpu) warps[i] = warpName; //tuto původně jsem myslel, že by fungovalo jako vložení stringu do proměnné a zde je error: error 006: must be assigned to an array } Je tedy možné nějak toto zprovoznit? Děkuji předem
  3. Obtížnost: Osnova: 1. Úvod, co je řetězec 2. Nulový znak 3. Ukládání hodnot do řetězce 4. Závěr 1. Úvod Zdravím Vás, dostali jsme se už ke třetímu návodu pro začínající pawnery. Ještě než se do toho pustíme, doporučuji, abyste si přečetli předchozí dva návody (návod na pole – návod na proměnnou), zejména návod na pole, bez něj budete mít problémy pochopit problematiku řetězců. O řetězci (angl. string) byla řeč již dříve. Zopakujeme si to hlavní – je to pole znaků, do kterého ukládáme texty, zprávy, hesla atd. Každá buňka obsahuje jeden znak. Do poslední buňky nic neukládáme. Proč vlastně do poslední buňky nic neukládáme? Kvůli nulovému znaku. 2. Nulový znak Je načase, abychom si konečně vysvětlili, proč u řetězců potřebujeme buňku navíc, proč tuhle poslední buňku nikdy nezaplňujeme. Je to kvůli tzv. nulovému znaku (také EOS – End of String). Tenhle konkrétní znak (mimochodem vypadá takhle – '\0') v Pawn totiž určuje konec řetězce. Jazyk po nás požaduje, abychom mu sdělili, když řetězec skončí. Proto je nezbytné k délce řetězce vždy přičíst jeden znak navíc, ten je vyhrazen pro tento nulový znak. . new pozdrav[4+1]; //deklarace řetězce, která je nám důvěrně známa z předchozího návodu na pole pozdrav = "ahoj"; //uložení pozdravu do řetězce . Slovo "ahoj" má 4 znaky, celkem tedy potřebujeme řetězec o délce pěti znaků (4 + nulový znak). Abychom měli představu, jak to v tom řetězci vypadá, rozpitváme si ho: . pozdrav[0] = 'a' pozdrav[1] = 'h' pozdrav[2] = 'o' pozdrav[3] = 'j' pozdrav[4] = '\0' //onen nulový znak v páté buňce s indexem 4 . Ať už potřebujeme řetězec k čemukoli, vždy musíme myslet na tento nulový znak. Pro příklad, pokud funkce SendClientMessage může odeslat zprávu o maximální délce 144 znaků, řetězec s touto zprávou musí mít délku 145. 3. Ukládání hodnot do řetězce Existuje více způsobů, jak můžeme do řetězce něco uložit. Vlastně jich je spousta, my si ukážeme ty základní. a) Přímé ukládání pomocí operátoru přiřazení Tím mám na mysli rovnítko (=). Takhle jsme to dělali doposud, uvedeme identifikátor řetězce (bez hranatých závorek), rovnítko a poté text ohraničený uvozovkami ("). . pozdrav = "ahoj"; . Tento způsob ukládání lze použít, když přesně víme, co tam chceme uložit. Také je nutno podotknout, že ukládaný text nesmí být delší, než je délka řetězce. Upřímně si myslím, že s tímto se v praxi moc nepotkáte (akorát při inicializaci). Často je potřeba text upravit, dosadit do něj hodnoty proměnné apod. K těmto účelům nám slouží formátování. b ) Formátování Když formátujeme text, označujeme tím proces, při kterém do něj vkládáme hodnoty jiných proměnných a řetězců. Slouží nám k tomu funkce format. . format(output[], len, const format[], {Float,_}:...) . Za "output[]" dosadíme řetězec, kam chceme výsledný text uložit. Parametr "len" po nás chce délku výsledného textu. "const format[]" je onen text, který chceme formátovat. To poslední – "{Float,_}:..." – jsou proměnné/řetězce, které chceme dosadit. Ukažme si to na příkladu: . new hrac[4+1] = "Pepa"; //takto vypadá inicializace řetězce new penize = 500, score = 1000; //proměnné, které budeme dosazovat new vysledek[100]; //výsledný řetězec, kde bude nás formátovaný text format(vysledek, sizeof vysledek, "Hráč %s má %d dolarů a %d skóre.", hrac, penize, score); . V řetězci vysledek teď budeme mít: Hráč Pepa má 500 dolarů a 1000 skóre. . Ve fomátované zprávě jsme použili jisté znaky – %s a %d. Těmto znakům se říká specifikátory. Aby ta funkce format věděla, kam má to hrac, penize a score dosadit, musíme mu to dát nějak vědět. To je účel specifikátorů. Uvádíme je vždy v tom pořadí, v jakém po sobě jdou proměnné/řetězce, které dosazujeme. Máme následující specifikátory: %d nebo %i – celá čísla %s – řetězec %f – čísla s desetinnou čárkou %c – znak Nejsou všechny, ale jako základ nám tohle postačí. 4. Závěr A to by k řetězcům bylo všechno. Konečně již víme, co je nulový znak a k čemu slouží. Už víme, jak do řetězců ukládat běžný, ale také formátovaný text. Jediné, na co jsem ještě zapomněl – pomocí sizeof jsme zjistili velikost řetězce vysledek (počet buněk toho řetězce). Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
  4. Obtížnost: Osnova: 1. Úvod, co je to pole 2. Deklarace pole 3. Práce s indexy (přiřazování hodnot) 4. Pole a řetězec 5. Vícerozměrné pole 6. Závěr 1. Úvod Zdravím, tohle je druhý ze série návodů pro začínající pawnery. Návod navazuje na ten předchozí o proměnných (klik). Znalost proměnných je nutná k pochopení tohoto návodu, proto Vám doporučuji, abyste si nejprve přečetli ten první návod (odkaz je k dispozici). Co je to pole? Pole (angl. array) je, zjednodušeně řečeno, proměnná, do které můžeme ukládat více hodnot. Funguje to tak, že se nám v paměti vymezí prostor a tento prostor se nám rozdělí na tolik buněk, kolik určíme. Jako kdybychom vzali dort a rozkrojili ho na námi určený počet kousků. K těmto jednotlivým buňkám (kouskům dortu) pak přistupujeme pomocí tzv. indexů. 2. Deklarace pole Jako první začneme s deklarací pole. Ta funguje stejně jako u proměnné, akorát s malým rozdílem. . new hraci[3]; . Opět jsme použili slůvko new, opět jsme zvolili název a opět jsme to všechno zakončili středníkem. Co se tedy změnilo? Hned za název jsme přidali hranaté závorky [ ] a do nich jsme vepsali velikost pole. Je tam 3, což znamená, že pole s názvem hraci má celkem 3 buňky. Samozřejmě můžeme deklarovat více polí naráz a přidat k nim různé tagy (pro různé datové typy), stejně jako u proměnných. . new hraci[3], Float:souradnice[4], bool:admin[10]; . 3. Práce s indexy (přiřazování hodnot) Nyní máme vytvořené pole. Jak teď do jednotlivých buněk uložíme hodnoty? Budeme k nim přistupovat přes, již zmíněné, indexy. Každá buňka má svůj unikátní index. Indexy vždy začínají od nuly. Poslední index bude vždy o jedno menší, než je velikost pole. Takže naše pole hraci bude mít indexy 0 až 2, pole souradnice bude mít indexy 0 až 3 a pole admin bude mít indexy 0 až 9. Teď pojďme poli hraci přiřadit nějaké hodnoty. . hraci[0] = 1; hraci[1] = 0; hraci[2] = -3; . Takhle jsme všem třem buňkám určili hodnotu. Indexy zapisujeme tam, kde jsme při deklaraci zapisovali velikost. Pro procvičení to samé uděláme i s druhým polem. . souradnice[0] = 4.7; //ukládáme čísla s desetinnou čárkou souradnice[1] = 8.52; souradnice[2] = -1.02; souradnice[3] = -0.5; . Pro zajímavost (rozklikněte spoiler): 4. Pole a řetězec Už u proměnných jsme narazili na tento způsob deklarace – jednalo se o řetězce. Je načase si říci, že řetězec není nic jiného než pole znaků. Každá buňka obsahuje jeden znak z řetězce. Podívejme se na následující příklad: . new pozdrav[4+1]; //deklarace pole znaků (řetězce), nezapomeňme přičíst jedničku (znak) navíc pozdrav = "ahoj"; . Teď máme v poli/řetězci pozdrav slovo "ahoj". Když si ho rozpitváme, zjistíme, že každý index v sobě má jedno písmeno. . pozdrav[0] = 'a' pozdrav[1] = 'h' pozdrav[2] = 'o' pozdrav[3] = 'j' . Index 4 jsem záměrně nezmínil. Proč? Podrobněji se tomu budu věnovat v návodu o řetězcích, prozatím si vystačíme s informací, že jedná-li se o řetězec (u ostatních polí to neplatí), musí poslední buňka zůstat nezměněná. Necháme ji prostě tak, jak je. Pro zajímavost (rozklikněte spoiler): 5. Vícerozměrné pole (pro středně pokročilé – rozklikněte spoiler) 6. Závěr A jsme na konci. Nyní už víme, jak funguje pole, jak jej vytvořit a jak s ním pracovat. Taky jsme si řekli něco málo o principu vícerozměrných polí a o tom, jaký vztah má řetězec k poli. Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
  5. Obtížnost: Osnova: 1. Úvod, co je to proměnná 2. Deklarace (vytvoření) proměnné 3. Přiřazování hodnot 4. Datové typy (tagy) 5. Lokální a globální proměnná 6. Závěr 1. Úvod Zdravím Vás, tohle je první ze série návodů věnujících se základům jazyka Pawn. Cílem těchto návodů je seznámit Vás se strukturami tohoto jazyka, s jeho syntaxí a s jeho využitím v praxi. Tento návod se bude věnovat proměnné. Co je to proměnná? Pod pojmem proměnná si můžeme představit nějaké místo v paměti, které má svůj název a do kterého si pro naše potřeby ukládáme hodnoty. Všichni proměnné už známe, a to z matematiky – zde proměnné jako x a y používáme nepřetržitě. A funguje to i podobně – v matematice za ně můžeme dosazovat různé hodnoty, v programování do nich také ukládáme různé hodnoty. 2. Deklarace (vytvoření) proměnné Prvním naším krokem bude deklarace proměnné. Když mluvíme o deklaraci proměnné, máme na mysli, víceméně, její vytvoření. To provedeme následovně: . new id; . Pomocí slova new deklarujeme nové proměnné. Jinak to nejde, jazyk to od nás vyžaduje. id je název (identifikátor) naší nové proměnné. V názvu můžeme používat standardní písmena (A až Z, a až z), číslice (0 až 9) a podtržítko (_). Název bychom měli volit tak, aby odpovídal tomu, k čemu budeme proměnnou potřebovat (např. penize – pro ukládání peněz apod.) Středníkem (;) deklaraci ukončíme. Jazyku tak sdělíme fakt, že jsme s tímto příkazem (s deklarací proměnné) skončili. Takhle to funguje i u jiných příkazů, ne jenom u deklarací. Pokud potřebujeme deklarovat více proměnných najednou, je to možné provést tak, že jednotlivé názvy oddělíme čárkou, takhle: . new id, penize, score; . Takto jsme vytvořili 3 proměnné naráz. 3. Přiřazování hodnot Teď už víme, jak proměnnou vytvořit. Jak do ní ale uložím hodnotu? To udělám pomocí operátoru rovnítko / rovná se (=). . id = 5; . Na levé straně (tzv. lvalue) máme proměnnou, do které chceme ukládat, poté následuje rovnítko, které nám určí, že do proměnné ukládáme hodnotu, a nakonec přichází samotná hodnota (tzv. rvalue). Hodnotou může být číslo, ale také jiná proměnná nebo výraz. Stejně jako deklaraci, tak i tento příkaz zakončíme středníkem. Ono středníkem budeme ukončovat téměř všechno, ale to brzy samo vyjde najevo. Pokud bychom chtěli přiřadit hodnotu už při deklaraci, tak i to nám Pawn dovoluje: . new id = 7; new id = 1, penize = 5000, score = -100; //znak mínus (-) před hodnotou nám značí zápornou hodnotu . Pro zajímavost (rozklikněte spoiler): 4. Datové typy (tagy) Už umíme proměnnou vytvořit a přiřadit jí hodnotu. Teď si musíme říct něco o datových typech. Datový typ nám určuje, jaké hodnoty můžeme do proměnné uložit. Může se jednat o běžná celá čísla (ty jsme používali do teď), ale pak také můžeme ukládat čísla s desetinnou čárkou, různé texty, znaky apod. Čím se nám to bude lišit, když budeme chtít do proměnné uložit např. číslo s desetinnou čárkou? Bude se to lišit způsobem deklarace. Vyjmenujme si všechny běžné datové typy a způsob, kterým je budeme deklarovat. a) Celá čísla (7, 666, -5, -114 apod.) new cela_cisla; //deklarujeme tak, jak jsme se před chvílí naučili cela_cisla = 7; . b ) Reálná čísla – čísla s desetinnou čárkou (3.14159, 10.254, -177.8, -23.23 apod.) new Float:realna_cisla; //před název proměnné jsme přidali tzv. tag, a to tag "Float:" realna_cisla = 3.14159; //tečka (.) nám v programování představuje desetinnou čárku . c) Logické hodnoty (true a false) Logické hodnoty máme jen dvě, a to pravda (true) a nepravda (false). . new bool:logicke_hodnoty; //doplníme tag "bool:" logicke_hodnoty = true; . d) Znaky Znakem může být cokoliv, co najdete na klávesnici – písmeno, číslice, vykřičník, pomlčka atd. Deklarace se neliší od celých čísel, ale ukládání ano! . new znak; //stejné jako u celých čísel znak = 'a'; //ukládaný znak musíme vložit mezi apostrofy (') . e) Řetězec/string ("abcd1234?!", "jak se máš?", "jsem programátor" apod.) Řetězec není nic jiného než posloupnost několika znaků. Jsou to slova, věty, hesla, vše, co nás napadne. Liší se deklarací i ukládáním! . new retezec[10+1]; //v hranatých závorkách [] udáváme délku řetězce, to je ta 10, a navíc přičteme ještě jedničku kvůli potřebám jazyka Pawn retezec = "abcd1234?!"; //ukládaný řetězec znaků musíme vložit mezi uvozovky (") . Pro zajímavost (rozklikněte spoiler): Těch tagů je omnoho více, ale když teď známe jejich princip, nebude těžké se vypořádat ani s těmi ostatními. 5. Lokální a globální proměnná Proměnná se dělí na dva typy podle toho, kde ji deklarujete. Globální proměnná se nejčastěji deklaruje nahoře ve scriptu, těsně pod #include a #define. S touto proměnnou můžete pracovat všude ve scriptu. Oproti tomu lokální proměnná se deklaruje v určitém bloku (bloky nám určují složené závorky { }) a má platnost pouze v něm a v podřazených blocích. Názorná ukázka: . public OnPlayerConnect(playerid) { if(playerid == 0) { new id; id = 5; //bude fungovat, tohle je stejný blok, kde je deklarace if(IsPlayerInAnyVehicle(playerid)) { id = 0; //bude fungovat, tohle je podřazený blok } } id = 7; //nebude fungovat, zahlásí nám to chybu, protože tohle už je nadřazený blok } . 6. Závěr A takhle jsme došli ke konci návodu o proměnné. Dnes jsme se dozvěděli, co je to proměnná, k čemu slouží, jak do ní ukládat hodnoty a výrazy, jaké hodnoty do ní lze ukládat a jak ji rozdělujeme dle platnosti. Navíc jsme si také ukázali, jak psát do kódu komentáře, to jsou ty poznámky, které jsme uvedli za znaky // (dvě lomítka). Za ně si lze psát své vlastní poznatky, připomínky atd. Ještě jednou říkám, že tento návod slouží pro úplné začátečníky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu. Ověřený návod Tento návod prošel validací, a lze ho proto považovat za ověřený.
  6. 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. ( )
  7. Prosím poradil by mi někdo co to znamená v pawnu string? Myslím si že je to něco duležitého a musí se to využívat tak prosím poradte dekuji..
  8. chocholda

    ostatní Sloučení Dvou Polí

    Zdravím.. Řeším tady jeden problém.. Potřeboval bych poradit, jak sloučit dvě pole? Respektive stringy: Mám dvě proměnné $a a $b: Obě proměnné jsou stringy, a obě zapsané ve tvaru id:počet,id:počet,id:počet ... Čili pomocí funkce explode(",",$a); je možné z každé z těch proměnných udělat pole, kde každý prvek bude id:počet, čili třeba: 5:2 A já bych potřeboval, aby to sloučilo tyhle dvě pole (nebo proměnné, to je jedno, stejně bych to pak zase převedl na string) podle id.. čili například pokud: $a = 2:2,4:15,33:2,20:1 $b = 1:1,3:4,2:1,20:5 tak aby mi to z toho udělalo: $c = 1:1,2:3,3:4,4:15,20:6,33:2 (snad barvy pomůžou v orientaci ) Předěm díky, pokud někdo pomůžete a poradíte chochy CHtěl bych poprosit někoho z moderátorů, aby to přesunul do sekce Help.. Omylem jsem to dal sem.. Díky
×
×
  • Create New...