Search the Community
Showing results for tags 'banka'.
-
EASY BANKSYSTEM Předtím, než tohle někdo z uživatelů napíše, rád bych řekl, že takové návody jsou roky staré, nefunkční a nebo naprosto prasácky zpracované. Než přistoupíme k návodu, tak bych chtěl zmínit pár bodů, které v tomto návodě nebudu vysvětlovat do podrobností(až ke konci k tomu budu mít pár poznámek): Vizuální zpracování dialogů - To si může každý uživatel udělat idividuálně(v tom případě si proto si hlídejte délky v řetězcích !), Větší počet bankomatů - Chci se spíše zaměřit na ukázku, jak jednodušše na takový systém. Samozřejmě, lze i snadno aplikovat na více bankomatů, Ukládání a načítání množství peněz v bance - Kromě toho, že každý používá jiný include na ukládání a načítání, tak opravdu nemám v úmyslu ukazovat, jak ukládat jednu proměnnou. ZAČÍNÁME Samozřejmě, nahrajeme si základní include a_samp. #include <a_samp>Budeme potřebovat nějakou proměnnou, kam se bude vpisovat počet peněz v bance: new Banka[MAX_PLAYERS];Jelikož víme, že určitě nebudeme zadávat záporná čísla, a přes fci strval může projít záporné znaménko, tak pro jistotu si přidáme fci, aby zjišťovat čistě jen a pouze čísla: stock OnlyNumbers(input[]) { new i; while (i != strlen(input)) if (input[i] <= '9' && input[i] >= '0') i++; else return false; return true; }Nakonec, by bylo dobré si pojmenovat nějak id dialogů, aby si to pak každý mohl individiálně upravit. Můžeme zvolit buď preprocesorovou cestu a nebo přes výčet hodnot. My použijeme výčet hodnot a začneme například hodnotou 6666: enum { DIALOG_BANKA = 6666, DIALOG_BANKA_VLOZIT, DIALOG_BANKA_VYBRAT } Pro lajky OTEVŘENÍ DIALOGU BANKY Tady jsem raději zvolil způsob přes příkaz. Proč? Jelikož, sice je jednoduché přes pickup, ale takhle má alespoň člověk jistotu, že se otevře pouze jednou a u bankomatu. Začneme podmínkou, zda je u daných pozic(jednoho z) bankomatu: public OnPlayerCommandText(...) { if (!strcmp("/banka", cmdtext, true)) { if (IsPlayerInRangeOfPoint(playerid, 1.0, Banka_x, Banka_y, Banka_z)) {Pozice daného bankomatu si pak může každý uživatel přidat jaké chce. Pokračujeme přidáním akce, zda je na daných souřadnicích a to, že se mu ukáže dialog, v opačném případě vrátí zprávu s informací, že neni u bankomatu(na dané pozici): ShowPlayerDialog(playerid, DIALOG_BANKA, DIALOG_STYLE_LIST, "Banka", "Vložit peníze\nVybrat peníze\nStav konta", "Vybrat", "Zavrit"); }else return SendClientMessage(playerid, -1, "Nejsi u bankomatu");Samozřejmě, nesmíme zapomenout správně uzavřít všechny bloky a správné návratové hodnoty. BANKA A LISTY V DIALOGU Začneme zavoláním samotného callbacku pro dialogy a jako první si přepneme dialogid, kvůli rychlosti(i když skoro nepatrné): public OnDialogResponse(...) { switch(dialogid) {A abychom pak neměli problém s bloky, přidáme si všechny 3 podmínky na všechny dialogy rovnou a všem přidáme podmínku, pokud hráč stiskl druhé tlačítko(Zavřít), tak se "nic" nestane a dialog "se zavře". Dále přiřadíme správném návratové hodnoty, a i samotnému callbacku: case DIALOG_BANKA: { if (!response) return true; /* code */ return true; } case DIALOG_BANKA_VLOZIT: { if (!response) return true; /* code */ return true; } case DIALOG_BANKA_VYBRAT: { if (!response) return true; /* code */ return true; }Začneme hlavním dialogem a to DIALOG_BANKA. Ten bude nejsnadnější. Začneme opět přepnutím, a tentokrát listitemu, a oběma dialogům(vložit a vybrat), protože oba budou typu "input", tak je ukážeme hráči a přiřadíme jim jejich dialogid: case DIALOG_BANKA: { if (!response) return true; switch(listitem) { case 0: ShowPlayerDialog(playerid, DIALOG_BANKA_VLOZIT, DIALOG_STYLE_INPUT, "Banka", "Napište částku, kterou chcete vložit", "Potvrdit", "Zavrit"); case 1: ShowPlayerDialog(playerid, DIALOG_BANKA_VYBRAT, DIALOG_STYLE_INPUT, "Banka", "Napište částku, kterou chcete vybrat", "Potvrdit", "Zavrit");A poslední listitem bude spíše informační, tak si tam rovnou formátujeme množství peněz v bance a ukážeme to v dialogu hráči: case 2: { new s_vBance[43]; format(s_vBance, sizeof s_vBance, "Na kontě máš momentálně %i$", Banka[playerid]); ShowPlayerDialog(playerid, DIALOG_BANKA, DIALOG_STYLE_MSGBOX, "Banka", s_vBance, "Zavrit", ""); } } return true; }Další dialog bude případ, kdy vkládá peníze(DIALOG_BANKA_VLOZIT). Začneme základní podmínkou a na to použijeme naší fci, zda hráč píše pouze čísla. Pokud ne, vrátí mu to zprávu: if (!OnlyNumbers(inputtext)) return SendClientMessage(playerid, -1, "Můžete vepsat pouze čísla !");Pak samozřejmě, aby nemohl neustále vkládat 0$: if (strval(inputtext) == 0) return SendClientMessage(playerid, -1, "Nelze vložit 0$ !");A nakonec, zda počet peněz které vkládá není větší, než u sebe skutečně má: if (GetPlayerMoney(playerid) < strval(inputtext)) return SendClientMessage(playerid, -1, "Nemáte takový obnos peněz !");Pak už jen 2 operace. První, přiřadíme k naší proměnné Banka hodnotu, kterou již má a k ní přičteme počet peněz, které hráč vkládá, a druhá, odečteme hráči daný počet peněz: Banka[playerid] = Banka[playerid] + strval(inputtext); GivePlayerMoney(playerid, -strval(inputtext)); return true; }A posledním dialogem bude případ, kdy peníze vybírá(DIALOG_BANKA_VYBRAT). Opět, začneme základní podmínkou a na to použijeme naší fci, zda hráč píše pouze čísla. Pokud ne, vrátí mu zprávu: if (!OnlyNumbers(inputtext)) return SendClientMessage(playerid, -1, "Můžete vepsat pouze čísla !");Opět, aby nemohl neustále vybírat 0$: if (strval(inputtext) == 0) return SendClientMessage(playerid, -1, "Nelze vybrat 0$ !");Nakonec podmínku, zda peníze, které vybírá nejsou větší, než které v bance ve skutečni jsou: if (Banka[playerid] < strval(inputtext)) return SendClientMessage(playerid, -1, "Nemáte v bankce tolik peněz !");A na úplny konec už jen prohodíme obě operace, a to způsobem, že první, přiřadíme k naší proměnné Banka hodnotu, kterou již má a odečteme počet peněz, které hráč vybírá, a druhá, přičteme hráči daný počet peněz: Banka[playerid] = Banka[playerid] - strval(inputtext); GivePlayerMoney(playerid, strval(inputtext)); return true; } JAK NA VÍCE BANKOMATŮ? To je prosté. Buď si(například) zjistit všechny pozice a pak je v příkaze všechny kontrolovat: if (!strcmp("/banka", cmdtext, true)) { if ( IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) ) { ShowPlayerDialog(playerid, ...Nebo, skoro stejným způsobem: Deklarovat si pole s výčtem hodnot x-ové pozice, y-ové pozice a z-ové pozice a pak v cyklu je všechny zjistit najednou(něco na způsob): Je tu několik návodů, kde by se hodilo už udělat novější a vylepšenější variantu. Pokud budou dobré ohlasy, udělám další návody. PS: snad jsou všechny kódy správně. Testoval jsem a bylo funkční(až na úplně poslední, to jsem netestoval), pokud přecijen bude někde nějaká chyba, napište mi SZ, ať tu není zbytečně spam. PSS: Ano, jde to udělat ještě lépe, ale já jsem to chtěl zpracovat jednoduchou a snadně-pochopitelnou cestou. Děkuji.
-
Je to popsaný víc to popisovat ani se vyjadřovat nebudu blbne mi internet. Někdo ocení někdo ne. /* Uložiště nebo-li Banku podle vás jsem vytvořil z nudy. rEfíček 2015 Lepší pawneři mě můžou bu****vat nebo si rovnat skill's. Jinak pro ty co neumí skoro nic tohle funguje tak se nebojte (pokud jsem na něco nezapoměl ). Je to jako FS ale můžete si to udělat jako includ nebo dát do módu přímo. Jenom místo Banka[MAX_PLAYERS] si zadejte svoje to snad umíte. Popsaný to je dost přeji příjemné mazání // textu */ #include <a_samp> //------------------------------------------------------------------------------ #define MAX_BANKS 100 // maximum kolik lze vytvořit bank //------------------------------------------------------------------------------ #define D_Banka 2420 // definice dialog menu uloziste #define D_Banka_Vlozit 2421 // definice dialog vlozeni penez do uloziste #define D_Banka_Vybrat 2422 // definice dialog vybrani penez s uloziste #define D_Banka_Stav 2423 // definice dialog stav penez v ulozisti //------------------------------------------------------------------------------ new BankPickup[MAX_BANKS]; // pickup uložiště new BankCount = -1; // count new Banka[MAX_PLAYERS]; // tohle je jenom pro příklad //------------------------------------------------------------------------------ public OnFilterScriptInit(){ // Místo 0,0,0 dosadte pozice x,y,z uložiště vždy vytvoříte CreateBank(pozice x, pozice y, pozice z); CreateBank(0,0,0); CreateBank(0,0,0); return true; } //------------------------------------------------------------------------------ public OnFilterScriptExit(){ // pro me momentalne nepodstatna blbost ale podstatna blbost pro filterscript return true; } //------------------------------------------------------------------------------ public OnPlayerConnect(playerid){ Banka[playerid] = 0; // pro příklad peníze v uložišti na 0 po připojení potom si dejte login/register // kde bude logicky načítání peněz což snad umí ten kdo to využije return true; } //------------------------------------------------------------------------------ public OnPlayerPickUpPickup(playerid, pickupid){ for(new i; i <= BankCount;i++){ // count jednoduše aby bylo jasno o jaké uložiště se jedná id 0 1 2 3 ... atd if(pickupid == BankPickup[i]){ // pickup uložiště a níže co vyvolá ShowPlayerDialog(playerid,D_Banka,DIALOG_STYLE_LIST,"Uložiště peněz","Vložit\nVybrat\nStav","Vybrat","Zavřít"); } } return true; } //------------------------------------------------------------------------------ public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){ new s[200]; // string if(dialogid == D_Banka){ // dialog menu uložiště if(response == 1){ // tlačítko levé if(listitem == 0) return ShowPlayerDialog(playerid,D_Banka_Vlozit,DIALOG_STYLE_INPUT,"Uložiště peněz","Zadejte částku kterou chcete vložit.","Vložit","Zrušit"); // vložení peněz input else if(listitem == 1) return ShowPlayerDialog(playerid,D_Banka_Vybrat,DIALOG_STYLE_INPUT,"Uložiště peněz","Zadejte částku kterou chcete vybrat.","Vybrat","Zrušit"); // vybrání peněz input else if(listitem == 2){ // stav peněz v uložišti format(s, sizeof(s), "Na účtě máš $%d", Banka[playerid]); // format ShowPlayerDialog(playerid,D_Banka_Stav,DIALOG_STYLE_MSGBOX,"Uložiště peněz",s,"Zavřít",""); // dialog stav klasika msgbox } } } if(dialogid == D_Banka_Vlozit){ // dialog vlozit input if(response == 1){ // tlačítko levé new money = strval(inputtext); // new money se rovná inputtext částka kterou jste zadali přes strval if(GetPlayerMoney(playerid) < money) return SendClientMessage(playerid, -1, "Nemáš dostatek peněz."); // zjistí kolik máte peněz u sebe a kolik chcete vložit if(money <= 0) return SendClientMessage(playerid, -1, "Nemůžeš zadat 0 nebo -."); // zjistí jestli jste nezadal 0 nebo -částku Banka[playerid] += money; // dá peníze do uložiště GivePlayerMoney(playerid,-money); // sebere vám peníze které jste vložili SendClientMessage(playerid, -1, "Úspěšně si vložil peníze na účet."); // zpráva } } if(dialogid == D_Banka_Vybrat){ // dialog vybrat input if(response == 1){ // tlačítko levé new money = strval(inputtext); // new money se rovná inputtext částka kterou jste zadali přes strval if(Banka[playerid] < money) return SendClientMessage(playerid, -1, "Tolik peněz na účtě nemáš."); // zjistí peníze v uložišti a kolik si chcete vybrat if(money <= 0) return SendClientMessage(playerid, -1, "Nemůžeš zadat 0 nebo -."); // zjistí jestli jste nezadal 0 nebo -částku Banka[playerid] -= money; // sebere peníze s uložiště GivePlayerMoney(playerid,money); // dá vám peníze SendClientMessage(playerid, -1, "Úspěšně si vybral peníze s účtu."); // zpráva } } return true; } //------------------------------------------------------------------------------ stock CreateBank(Float:x, Float:y, Float:z){ // stock pro vytváření uložišt/bank BankCount++; // +1 count vždy připočte podle toho kolik jste uložišt vytvořili if(BankCount >= MAX_BANKS) return print("Byl prekrocen max. pocet bank."); // zjistí jestli není překročen limit BankPickup[BankCount] = CreatePickup(1274,1,x,y,z,0); // vytvoří pickup zeleného $ // sem si můžete přidat třeba mapikonu return BankCount; // return count klasika }
-
Zdravím nedávno mi psal nějaký jedinec že shání mou Bankuv2 tu jsem neměl tak mě ukecal k vytvoření nové. Script sem nezkoušel takže nevím jestli tam nějak bugy nejsou. Credit's : Slice >> formatnumber.inc Y_LEss >> sscanf.inc Script : http://pawn-code.eu/Banka.pawn Direct Download : Download%20Banka"]http://pawn-code.eu/Banka.download[/url] Třeba to někdo využijete. Lovu zdar.