ExiRang 28 Odesláno: 18. Únor, 2014 Share Odesláno: 18. Únor, 2014 Zdravím vás. S tvorbou věcí do SA-MP končím, takže se s vámi podělím o menu, které se mělo původně nacházet jen v módu The San Fierro City. S módem jsme však skončili z důvodu nedostatku času a nabývajícího odporu k tvorbě. Skriptů mám dost, ale většinou jsou to takové blbůstky. Ovšem tento skript, se kterým se s vámi podělím, je škoda jen tak nechat ležet. Dal jsem si s ním spoustu práce a vypadá hodně slušně. Dá se použít i ve větších projektech. A co že to tedy je? Jedná se o klikatelné menu, které se dynamicky vytváří pomocí textdrawů. Tímto menu se dají v pohodě nahradit dialogy, nebo třeba původní GTA menu. Začnu popisem, jak menu vypadá, jak funguje. Vlastní přizpůsobení menu:Menu se dá nastavit přesně podle vašich představ (samozřejmě v rámci možností samp).Začnu vzhledem. Menu se dá nastavit barva pozadí, šířka a umístění na obrazovce (X, Y).U titulku můžete samozřejmě nastavit text, styl písma a barvu textu.Další, co už se vzhledu netýká, je, komu chcete menu zobrazit, jaké ID menu má mít (pro identifikaci menu jako v dialozích) a jestli má menu mít možnost být zavřené (zmáčknutí ESC).Pokud zvolíte, že menu nesmí být zavíratelné (hráč musí zvolit nějakou položku aby mohl zavřít menu), bude se menu při zmáčknutí ESC znovu otvírat. V opačném případě se vyvolá callback funkce, ve které se dozvíte, že hráč zavřel menu, menu se skryje a pak je jen na vás, co s tím budete dělat, jestli ho zničíte, nebo znovu zobrazíte (což je zbytečné, pokud nastavíte menu, že jej nelze zavřít).Při tvorbě musíte zadat i pozadí položky při najetí (u textdrawů zatím nelze vícebarevné označení aktivní položky). Což znamená, že každá položka bude po najetí myší označená stejně. Každé položce se však dá nastavit jakákoliv barva pozadí, různý styl písma u každé položky a barva písma. Další věc co můžete nastavit položce, je, jestli bude klikatelná. Pokud zvolíte že ne, nepůjde na ni kliknout (hodí se například pro podnadpisy). Položkám se však nedá zpětně měnit žádné nastavení. Callbacky:V skriptu se nachází 2 callbacky, které musíte mít vložené v módu / skriptu. Pokud tak neučiníte, bude vám compiler hlásit, že jste je nezapsali, neuvedli - chcete-li (anglicky: function "XXX" is not implemented). Takže o jaké callbacky jde: public OnPlayerClickPlayerMenu(playerid, menuid, listitem) { } public OnPlayerClosePlayerMenu(playerid, menuid) { } Nepotřebují returny, ale já defaultně používám v ukázce return 1; Funkce pro vytváření menu:Tak a už se dostáváme k samotným funkcím, které se budou používat pro vytváření menu, přidávání položek, zobrazování, skrývání, ničení nebo pro kontrolu existence menu. Varování! Pokud již máte pro hráče nějaké menu vytvořené a zavoláte znovu tuto funkci, vytvořené menu se zničí! Menu vytvoříte jednoduše tímto příkazem: playerMenuCreate(playerid, menuid, Float:menuX, Float:menuY, Float:menuWidth, titleText[], titleFont, titleColor, backgroundColor, buttonColorHover, bool:isExitable); playerid = ID hráče, pro kterého se menu má vytvořit menuid = nastavení ID menu, podle kterého pak budete určovat, v jakém menu uživatel kliknul, případně jaké menu zavřel menuX, menuY = určení pozice menu menuWidth = určení šířky menu titleText = text, který bude uvedený v titulku menu titleFont = styl písma (jako u textdrawů) titleColor = barva textu v titulku menu backgroundColor = barva pozadí celého menu buttonColorHover = barva označení tlačítka po najetí na něj isExitable = true / false | určení, jestli menu půjde zavřít pomocí klávesy ESC Takže máte inicializované menu.Nyní je třeba přidat nějaké položky, na které pak budete moci klikat: playerMenuAddItem(playerid, itemText[], itemFont, textColor, buttonColor, bool:isDisabled); playerid = ID hráče, kterému se položka do menu přidá itemText = text v položce itemFont = styl písma v položce textColor = barva textu v položce buttonColor = barva pozadí položky isDisabled = určení, jestli položka nebude klikatelná, nebo ano Maximální počet položek je limitován (v definici MAX_MENU_ITEMS) defaultně na 15 položek Už máte sestavené menu.Pro zjištění, jestli nějaké menu hráč má vytvořené (je jedno jestli zobrazené nebo skryté), je zde funkce: playerMenuExists(playerid); Vrací hodnotu true při existenci. V opačném případě vrátí false. Menu nyní stačí zobrazit hráči: playerMenuShow(playerid); playerid = ID hráče, kterému se sestavené menu (pro něj) zobrazí Pro skrytí menu slouží funkce: playerMenuHide(playerid); Pro zničení menu (pokud ho již nepotřebujete) je tato funkce: playerMenuDestroy(playerid); Kompletní ukázka použití se nachází níže u přiloženého includu. V includu se dále nachází definice MAX_PLAYERS_EX s výchozí hodnotou 250. Pokud ji chcete nastavit v módu / FS, před includováním si ji definujte sami. Ukázka: #define MAX_PLAYERS_EX 100 #include menu_system To samé s MAX_MENU_ITEMS. Menu používá 2 + počet položek * 2 player textdrawů. Obrázková ukázka menu: Myší najeto na první položku Myší najeto na 6. položku: Includ (+ obyčejná ukázka):Pastebin: http://pastebin.com/8Y7HgdGH Kód: #if defined menu_system #endinput #endif #define menu_system #if !defined MAX_PLAYERS_EX #define MAX_PLAYERS_EX 250 #endif #if !defined MAX_MENU_ITEMS #define MAX_MENU_ITEMS 15 #endif //#################################| Natives |################################## /* native playerMenuCreate(playerid, menuid, Float:menuX, Float:menuY, Float:menuWidth, titleText[], titleFont, titleColor, backgroundColor, buttonColorHover, bool:isExitable); native playerMenuAddItem(playerid, itemText[], itemFont, textColor, buttonColor, bool:isDisabled); native playerMenuShow(playerid); native playerMenuHide(playerid); native playerMenuDestroy(playerid); native bool:playerMenuExists(playerid); */ //#################################| Forwards |################################# forward playerMenuCreate(playerid, menuid, Float:pm_x, Float:pm_y, Float:pm_width, titleText[], titleFont, titleColor, bgColor, buttonColorIn, bool:exitable); forward playerMenuAddItem(playerid, itemText[], itemFont, textColor, buttonColor, bool:disabled); forward playerMenuShow(playerid); forward playerMenuHide(playerid); forward playerMenuDestroy(playerid); forward bool:playerMenuExists(playerid); //Callbacks forward OnPlayerClickPlayerMenu(playerid, menuid, listitem); forward OnPlayerClosePlayerMenu(playerid, menuid); //################################| Variables |################################# enum PLAYER_MENU_DATA{ bool:menuExitable, bool:menuCreated, Float:itemWidth, Float:itemPosX, Float:itemPosY, itemColorIn, itemsCount, menuID } new playerMenuData[MAX_PLAYERS_EX][PLAYER_MENU_DATA]; new PlayerText:playerMenuBackground[MAX_PLAYERS_EX]; new PlayerText:playerMenuItem[MAX_PLAYERS_EX][MAX_MENU_ITEMS * 2]; new PlayerText:playerMenuTitle[MAX_PLAYERS_EX]; //#################################| Publics |################################## public playerMenuCreate(playerid, menuid, Float:pm_x, Float:pm_y, Float:pm_width, titleText[], titleFont, titleColor, bgColor, buttonColorIn, bool:exitable){ if(playerMenuExists(playerid)){ playerMenuDestroy(playerid); } //Background new Float:TXTD_posX = pm_x + pm_width; playerMenuBackground[playerid] = CreatePlayerTextDraw(playerid, TXTD_posX, pm_y, "_"); PlayerTextDrawBackgroundColor(playerid, playerMenuBackground[playerid], 255); PlayerTextDrawFont(playerid, playerMenuBackground[playerid], 1); PlayerTextDrawLetterSize(playerid, playerMenuBackground[playerid], 1.0, 1.6); PlayerTextDrawColor(playerid, playerMenuBackground[playerid], -1); PlayerTextDrawSetOutline(playerid, playerMenuBackground[playerid], 0); PlayerTextDrawSetProportional(playerid, playerMenuBackground[playerid], 0); PlayerTextDrawSetShadow(playerid, playerMenuBackground[playerid], 1); PlayerTextDrawUseBox(playerid, playerMenuBackground[playerid], 1); PlayerTextDrawBoxColor(playerid, playerMenuBackground[playerid], bgColor); PlayerTextDrawTextSize(playerid, playerMenuBackground[playerid], pm_x, 1.0); PlayerTextDrawSetSelectable(playerid, playerMenuBackground[playerid], 0); //Title playerMenuTitle[playerid] = CreatePlayerTextDraw(playerid, pm_x + 4, pm_y + 2, titleText); PlayerTextDrawBackgroundColor(playerid, playerMenuTitle[playerid], 255); PlayerTextDrawFont(playerid, playerMenuTitle[playerid], titleFont); PlayerTextDrawLetterSize(playerid, playerMenuTitle[playerid], 0.44, 1.0); PlayerTextDrawColor(playerid, playerMenuTitle[playerid], titleColor); PlayerTextDrawSetOutline(playerid, playerMenuTitle[playerid], 0); PlayerTextDrawSetProportional(playerid, playerMenuTitle[playerid], 1); PlayerTextDrawSetShadow(playerid, playerMenuTitle[playerid], 1); PlayerTextDrawSetSelectable(playerid, playerMenuTitle[playerid], 0); //Settings for buttons playerMenuData[playerid][menuExitable] = exitable; playerMenuData[playerid][menuCreated] = true; playerMenuData[playerid][itemColorIn] = buttonColorIn; playerMenuData[playerid][itemsCount] = 0; playerMenuData[playerid][itemWidth] = pm_width - 6; playerMenuData[playerid][itemPosX] = pm_x + 3; playerMenuData[playerid][itemPosY] = pm_y + 16; playerMenuData[playerid][menuID] = menuid; } public playerMenuAddItem(playerid, itemText[], itemFont, textColor, buttonColor, bool:disabled){ if(playerMenuExists(playerid)){ if(playerMenuData[playerid][itemsCount] + 1 < MAX_MENU_ITEMS){ new ID = playerMenuData[playerid][itemsCount] * 2; PlayerTextDrawLetterSize(playerid, playerMenuBackground[playerid], 1.0, 1.7 + (++playerMenuData[playerid][itemsCount] * 1.885)); //Menu item background playerMenuItem[playerid][ID] = CreatePlayerTextDraw(playerid, playerMenuData[playerid][itemPosX], playerMenuData[playerid][itemPosY] + ((playerMenuData[playerid][itemsCount] - 1) * 17), "LD_SPAC:white"); PlayerTextDrawBackgroundColor(playerid, playerMenuItem[playerid][ID], 255); PlayerTextDrawFont(playerid, playerMenuItem[playerid][ID], 4); PlayerTextDrawLetterSize(playerid, playerMenuItem[playerid][ID], 1.0, 1.0); PlayerTextDrawColor(playerid, playerMenuItem[playerid][ID], buttonColor); PlayerTextDrawSetOutline(playerid, playerMenuItem[playerid][ID], 0); PlayerTextDrawSetProportional(playerid, playerMenuItem[playerid][ID], 1); PlayerTextDrawSetShadow(playerid, playerMenuItem[playerid][ID], 1); PlayerTextDrawUseBox(playerid, playerMenuItem[playerid][ID], 1); PlayerTextDrawBoxColor(playerid, playerMenuItem[playerid][ID], 255); PlayerTextDrawTextSize(playerid, playerMenuItem[playerid][ID], playerMenuData[playerid][itemWidth], 17.0); if(!disabled) PlayerTextDrawSetSelectable(playerid, playerMenuItem[playerid][ID], 1); else PlayerTextDrawSetSelectable(playerid, playerMenuItem[playerid][ID], 0); //Menu item text ID++; if(itemFont > 3) itemFont = 3; else if(itemFont < 0) itemFont = 0; playerMenuItem[playerid][ID] = CreatePlayerTextDraw(playerid, playerMenuData[playerid][itemPosX] + 3, playerMenuData[playerid][itemPosY] + ((playerMenuData[playerid][itemsCount] - 1) * 17) + 3, itemText); PlayerTextDrawBackgroundColor(playerid, playerMenuItem[playerid][ID], 255); PlayerTextDrawFont(playerid, playerMenuItem[playerid][ID], itemFont); PlayerTextDrawLetterSize(playerid, playerMenuItem[playerid][ID], 0.44, 1.0); PlayerTextDrawColor(playerid, playerMenuItem[playerid][ID], textColor); PlayerTextDrawSetOutline(playerid, playerMenuItem[playerid][ID], 0); PlayerTextDrawSetProportional(playerid, playerMenuItem[playerid][ID], 1); PlayerTextDrawSetShadow(playerid, playerMenuItem[playerid][ID], 1); PlayerTextDrawSetSelectable(playerid, playerMenuItem[playerid][ID], 0); } } } public playerMenuShow(playerid){ if(playerMenuExists(playerid)){ PlayerTextDrawShow(playerid, playerMenuBackground[playerid]); PlayerTextDrawShow(playerid, playerMenuTitle[playerid]); for(new i; i < playerMenuData[playerid][itemsCount] * 2; i++){ PlayerTextDrawShow(playerid, playerMenuItem[playerid][i]); } SelectTextDraw(playerid, playerMenuData[playerid][itemColorIn]); } } public playerMenuHide(playerid){ if(playerMenuExists(playerid)){ PlayerTextDrawHide(playerid, playerMenuBackground[playerid]); PlayerTextDrawHide(playerid, playerMenuTitle[playerid]); for(new i; i < playerMenuData[playerid][itemsCount] * 2; i++){ PlayerTextDrawHide(playerid, playerMenuItem[playerid][i]); } CancelSelectTextDraw(playerid); } } public playerMenuDestroy(playerid){ if(playerMenuExists(playerid)){ PlayerTextDrawDestroy(playerid, playerMenuBackground[playerid]); PlayerTextDrawDestroy(playerid, playerMenuTitle[playerid]); for(new i; i < playerMenuData[playerid][itemsCount] * 2; i++){ PlayerTextDrawDestroy(playerid, playerMenuItem[playerid][i]); } playerMenuData[playerid][menuCreated] = false; playerMenuData[playerid][itemColorIn] = 0; playerMenuData[playerid][itemsCount] = 0; playerMenuData[playerid][itemWidth] = 0; playerMenuData[playerid][itemPosX] = 0; playerMenuData[playerid][itemPosY] = 0; playerMenuData[playerid][menuID] = 0; } } public bool:playerMenuExists(playerid){ return playerMenuData[playerid][menuCreated]; } public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid){ if(playerMenuExists(playerid)){ for(new i; i < playerMenuData[playerid][itemsCount]; i++){ if(playertextid == playerMenuItem[playerid][i * 2]){ OnPlayerClickPlayerMenu(playerid, playerMenuData[playerid][menuID], i); return 1; } } } return 0; } public OnPlayerClickTextDraw(playerid, Text:clickedid){ if(playerMenuExists(playerid) && _:clickedid == 65535){ if(!playerMenuData[playerid][menuExitable]) playerMenuShow(playerid); else{ playerMenuHide(playerid); OnPlayerClosePlayerMenu(playerid, playerMenuData[playerid][menuID]); } } return 0; } //##################################| USAGE |################################### /* ## IMPORTANT public OnPlayerConnect(playerid){ playerMenuDestroy(playerid); return 1; } public OnPlayerDisconnect(playerid, reason){ playerMenuDestroy(playerid); return 1; } ## CALLBACKS CATCHING RESPONSES public OnPlayerClickPlayerMenu(playerid, menuid, listitem){ if(menuid == 1){ switch(listitem){ case 0: return SendClientMessage(playerid, 0xff5555ff, "Klikl jsi na 1. polozku"); case 1: return SendClientMessage(playerid, 0xff5555ff, "Klikl jsi na 2. polozku"); case 2: return SendClientMessage(playerid, 0xff5555ff, "Klikl jsi na 3. polozku"); } playerMenuHide(playerid); playerMenuDestroy(playerid); } return 1; } public OnPlayerClosePlayerMenu(playerid, menuid){ playerMenuHide(playerid); playerMenuDestroy(playerid); return 1; } ## CREATING MENU public OnPlayerCommandText(playerid, cmdtext[]){ if(!strcmp("/test", cmdtext, true)){ playerMenuCreate(playerid, 1, 200, 200, 200, 0x595959aa, "Nadpis menu", 1, 0xffffffff, 0xabababff); playerMenuAddItem(playerid, "Nadpis v menu", 2, 0xccccccff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 1", 2, 0xccccccff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 2", 2, 0xccccccff, 0x232323ff, false); playerMenuShow(playerid); return 1; } return 0; } */ Podrobnější ukázka (plně funkční) + má vlastní zjednodušující funkce na výpis formátovaných zpráv:Pastebin: http://pastebin.com/e2pGd6cY Kód: #include a_samp #include menu_system stock FormattedSCM(playerid, color, str[], {Float,_}:...){ new output[140], tmpOp[12], args = numargs(), args_readed = 2; if(args > 3){ for(new i; str[i]!='\0'; i++){ if(str[i] == '%' && args_readed < args){ switch(str[++i]){ case 's':{ new tmpchr; new a; args_readed++; while(a==a){ tmpchr = getarg(args_readed,a++); if(tmpchr=='\0') break; format(output, sizeof(output), "%s%c", output, tmpchr); } } case 'c','d','f','i','x':{ format(tmpOp, sizeof(tmpOp),"%%s%%%c",str[i]); format(output, sizeof(output), tmpOp, output, getarg(++args_readed)); strdel(tmpOp,0,strlen(tmpOp)); } case '%': format(output,sizeof(output),"%s%%%%",output); default: format(output,sizeof(output),"%s%c",output,str[i]); } } else{ format(output,sizeof(output),"%s%c",output,str[i]); } } } else{ strdel(output,0,sizeof(output)); strins(output,str,0); } if(playerid < 0) SendClientMessageToAll(color, output); else SendClientMessage(playerid, color, output); } public OnPlayerConnect(playerid){ playerMenuDestroy(playerid); return 1; } public OnPlayerDisconnect(playerid, reason){ playerMenuDestroy(playerid); return 1; } public OnPlayerClickPlayerMenu(playerid, menuid, listitem){ FormattedSCM(-1, 0x33ff33ff, "Opened menu / Playerid: %d | MenuID: %d | ListItem: %d", playerid, menuid, listitem); playerMenuHide(playerid); playerMenuDestroy(playerid); return 1; } public OnPlayerClosePlayerMenu(playerid, menuid){ FormattedSCM(-1, 0x33ff33ff, "Closed menu / Playerid: %d | MenuID: %d", playerid, menuid); playerMenuHide(playerid); playerMenuDestroy(playerid); return 1; } public OnPlayerCommandText(playerid, cmdtext[]){ if(!strcmp("/create", cmdtext, true)){ playerMenuCreate(playerid, random(1000), 20+random(130), 20+random(130), 160+random(100), "Testovaci menu", 1, 0xffffffff, 0x59595977, 0x898989ff, true); playerMenuAddItem(playerid, "Polozka 1", 1, 0x666666ff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 2", 1, 0x777777ff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 3", 1, 0x888888ff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 4", 1, 0x999999ff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 5", 1, 0xaaaaaaff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 6", 1, 0xbbbbbbff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 7", 1, 0xccccccff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 8", 1, 0xddddddff, 0x232323ff, false); playerMenuAddItem(playerid, "Polozka 9", 1, 0xeeeeeeff, 0x232323ff, false); playerMenuShow(playerid); return 1; } return 0; } Vysvětlení funkce FormattedSCM: FormattedSCM(playerid, barva, string, parametry...); Použití: FormattedSCM(playerid, 0xFFFFFFFF, "Ahoj já jsem %s věta a obsahuji navíc číslo %d.", "testovací", 6); Pokud za playerid dáte -1, zpráva se pošle všem. Nic jsem nekopíroval, vše je čistě má práce. Pokud se někdo diví, proč mám v includu použití popsané anglicky, je to proto, že jsem zvyklý psát kód v angličtině, tak jsem tam dopsal anglicky i použití, které jsem tu ostatně celkem podrobně popsal. Doufám, že se vám skript hodí, protože mně už k ničemu není. Link to comment Share on other sites More sharing options...
PinkSmoothie 104 Odesláno: 18. Únor, 2014 Share Odesláno: 18. Únor, 2014 co je na tom "profi" ? Link to comment Share on other sites More sharing options...
Tanga 131 Odesláno: 18. Únor, 2014 Share Odesláno: 18. Únor, 2014 NJ, tiež nechápem čo je na tom profi, ale rozhodne je to super, že si vytvoril takto upravovateľné funkcie resp procedúry.Tu človek zriedka vidí niečo super . Link to comment Share on other sites More sharing options...
ExiRang 28 Odesláno: 18. Únor, 2014 Author Share Odesláno: 18. Únor, 2014 co je na tom "profi" ? Děkuji za tvoji vyčerpávající otázku. Mimochodem pokud sis přečetl titulek a pak prohlídl obrázky, na kterých jsem naházel položky v šedé barvě, je to opravdu málo k pochopení. Profi je myšlené spíš z pohledu obsluhy menu. Ale tak abyste neřekli, já to slovíčko vymažu, ať tu nemluvíte celou dobu jen o něm. Link to comment Share on other sites More sharing options...
Mattsy 29 Odesláno: 19. Únor, 2014 Share Odesláno: 19. Únor, 2014 Pekné až na tie proporcie textu..sú hrozne sploštené, vyzerá to neprirodzene A inak, sa mi to zdá alebo naozaj tie farby položiek idú postupne od šedej až po bielu? Link to comment Share on other sites More sharing options...
ExiRang 28 Odesláno: 19. Únor, 2014 Author Share Odesláno: 19. Únor, 2014 Pekné až na tie proporcie textu..sú hrozne sploštené, vyzerá to neprirodzene A inak, sa mi to zdá alebo naozaj tie farby položiek idú postupne od šedej až po bielu? Tak proporce si každý už může v kódu doladit podle sebe a nebo změní styl písma, který na to asi taky bude mít vliv. A ano, ty barvy jsou ve stupních šedi. Když si rozevřeš „Podrobnější ukázka“ v prvním příspěvku (poslední spoiler), uvidíš jak jsem dal barvy. Moc jsem si nehrál s tím, aby to na screenech vypadalo nejlíp. No a dají se využít třeba jako náhrada dialogů, nebo třeba klasického GTA menu. Link to comment Share on other sites More sharing options...
TheKid 16 Odesláno: 24. Únor, 2014 Share Odesláno: 24. Únor, 2014 Epické postni to i na samp forum,tam to bude mit větší ohlas Link to comment Share on other sites More sharing options...
ExiRang 28 Odesláno: 1. Březen, 2014 Author Share Odesláno: 1. Březen, 2014 Epické postni to i na samp forum,tam to bude mit větší ohlas Jo no, tady si ty lamy nezaslouží nic. Neocení to, ale za rok to bude mít zas 80% CZ/SK serverů. Link to comment Share on other sites More sharing options...
PinkSmoothie 104 Odesláno: 1. Březen, 2014 Share Odesláno: 1. Březen, 2014 Jo no, tady si ty lamy nezaslouží nic. Neocení to, ale za rok to bude mít zas 80% CZ/SK serverů. ____ radsej si uvedom ze toto ma uz teraz 80percent "uspesnych" zahranicnych serverov,... podla mna to ma byt samozrejmost kazdeho servera ktory chce nieco dosiahnut. cz/sk samp scena je strasne pozadu. A co mam ocenit? ved to ani nevyzera pekne. btw 80% czsk serverov ma rze7.4 Link to comment Share on other sites More sharing options...
TheRohlikar 21 Odesláno: 1. Březen, 2014 Share Odesláno: 1. Březen, 2014 AW.Tom, neoceníte kvalitu žádné práce. Podívej se někdy na SA-MP Forum.com. Ocení tam i to, když uděláš blbý příkaz na přidání peněz, hp, vesty, atd. Toto je komunita na **** Skvělá práce - 9/10 ! (Vždy jde něco vylepšit) Link to comment Share on other sites More sharing options...
PinkSmoothie 104 Odesláno: 1. Březen, 2014 Share Odesláno: 1. Březen, 2014 AW.Tom, neoceníte kvalitu žádné práce. Podívej se někdy na SA-MP Forum.com. Ocení tam i to, když uděláš blbý příkaz na přidání peněz, hp, vesty, atd. Toto je komunita na **** Skvělá práce - 9/10 ! (Vždy jde něco vylepšit) _________ lol a zato ze niekto oceni blbost tak ju mam ocenit aj ja? potom to tak dopada ked kazdy robi to co ostatni debili. Link to comment Share on other sites More sharing options...
ExiRang 28 Odesláno: 1. Březen, 2014 Author Share Odesláno: 1. Březen, 2014 ____ radsej si uvedom ze toto ma uz teraz 80percent "uspesnych" zahranicnych serverov,... podla mna to ma byt samozrejmost kazdeho servera ktory chce nieco dosiahnut. cz/sk samp scena je strasne pozadu. A co mam ocenit? ved to ani nevyzera pekne. btw 80% czsk serverov ma rze7.4 Ty jsi strašný odborník. Zasvěť mě. Ukaž mi 80% zahraničních serverů, které toto mají. CZ/SK nejsou zaostalí. Zaostalí jsou jen ti, co mají RZE a 15 FS (in 1) loaded. Jak říkám do roka to bude mít 80% CZ/SK serverů. Zbytek není zaostalej, chce něčeho dosáhnout a není samozřejmost, že toto má. Vůbec jsi nepochopil, k čemu jsem to sem dával. Je to crasher tvého mozku. Omlovám se za pi**viny, které tu teď řeším, ale bohužel... Když tu začne někdo shazovat kvalitu nějaké práce a sám umí ho***, se kterým se navíc vychloubá (mám na mysli příšerné hry v C#, dobově tak z 1990), tak to nedokážu přehlížet. AW.Tom nejdřív zprovozni mozek, pak se ozývej. Jo a hlavně začni, jak tu bývá zvykem, křičet, že jsem to okopčil z nějakých zahraničních serverů. To pak bude nejnádhernější konec. Rohlikar: Už mě moc nenapadlo co bych ještě přidal, takže jsem to nechal tak, navíc už Pawn ani nekódím. Každopádně díky. Link to comment Share on other sites More sharing options...
WARNING EPIC CODE 0 Odesláno: 1. Květen, 2014 Share Odesláno: 1. Květen, 2014 Dobréé ;) Link to comment Share on other sites More sharing options...
Paulee 16 Odesláno: 14. Květen, 2014 Share Odesláno: 14. Květen, 2014 Dík už vím jak udělat klikací menu přes textdraw díky Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now