Jump to content

ExiRang

Uživatel
  • Příspěvků

    139
  • Registrován

  • Aktivní

  • Vítězných dnů

    1

Příspěvky posted by ExiRang

  1. DonMafia:

     

    O mně můžeš říct to samé? Začal jsem v 16, před 8 lety.

     

    Na tvém místě bych se nepovyšoval. To jen značí, že mód nebude stát za nic. Což ostatně značí i 10 000 skriptů na vše možné.

     

    Další All-in-one nápad. O ničem. 

  2. Začnu hned od první věci co jsem si všiml. Autoškola jde udělat 2x za sebou, i když jsem vlastníkem průkazu. To si myslím, že by se nemělo stát, přinejmenším bych hráče po splnění zkoušky spawnul jinde než na pickupu pro začátek autoškoly a tu bych pro něj pak zamkl (aby se nedostal do interiéru. Narazil jsem na podivný název - Autobus škola - na tom jsem se hodně zasmál :d Mimochodem stejná chyba jako u klasické autoškoly pro skupinu B. Rozhodně bych nechal autoškoly na všechny skupiny (ano, autoškola se dělí na skupiny, pro které chceš řidičské oprávnění) na jednom místě. Hraju, hraju, najednou ke mně přijde lékař a zatkne mě, přitom v okamžiku kdy se chtěl zaměstnat, mu to mód nepovolil, protože neměl zbrojní průkaz, který si ani následně nedělal).

     

    Pak jsou tam chyby spíš na logické úrovni. Teleportnu se pomocí příkazu /sf (nebo jakéhokoli jiného na stejném principu), skryjí se mi zbraně, nikde mě nic neinformuje, proč se mi skryly zbraně, nemohu se bránit útoku jiných hráčů.

     

    Tutoriál na začátku hraní je otravný, 90% lidí ho přeskočí. Status Nováček by měl být nějak viditelný i mně. Co udělá takový Nováček, když k němu někdo přiběhne a začne po něm házet granáty? Začne se bránit. Pokud by byl dostatečně informován, že se mu nemůže nic stát, nebránil by se a nepřišel tak ani o status Nováček.

     

    Přemýšleli jste o zneužívání povolání během hraní? 

     

    Nápady jsou tam dobré, ale zdaleka nejsou dotažené do konce a doprovází je mnohdy základní chyby.

    Za mě 4 body z 10.

  3.  ____

    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.

  4. Problém vyřešen. Na řádku měl:

    CreateDynamicObject(1239,31.0,1226.8239,-773.0059,1084.0048,0.0,0.0,31.0);
    

    Ale funkce vypadá takto:

    CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 300.0);
    
  5. handstyle:

     

    "WEBDESIGN NAVRHOL EnG A NAKÓDOVAL HO EnG" > Používej raději "Created by EnG" ;)

     

    K CSS3 a HTML5:

    Zajímalo by mě jak řešíš podporu pro starší prohlížeče, které CSS3 a HTML5 nepodporují?

     

    Web vypadá jako nedávno vytvořený. Když ti skončila doména, měl jsi přece hotovo. Mohl jsi alespoň zprovoznit odkaz na reference + přidat reference.

  6. 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.

  7. co je na tom "profi" ? :d

     

    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.

  8. 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
    menu1.png
     
    Myší najeto na 6. položku:
    menu2.png
     
     
    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í.

  9. Nejlepší způsob, který existuje, je ten co zmínil niCe... Já ho používám už půl roku. Má své mouchy například (zatím o jiném nevím) u Infernusu, kde se velocity zvedá i potom. Ale není to 100% způsob. Spolehlivější je informovat adminy. A kontrolovat to v OnPlayerUpdate. Sekundový časovač je k ničemu. Příklad: Přijdu na server k někomu. Zmáčku v autě velmi krátce (defaultní) klávesu R (funkce sobeitu, prudké zrychlení a naražení do překážky). Vem si že přede mnou bude hráč, kterého ten náraz odhodí. Dostane větší zrychlení než by měl. => Dostane kick.

     

    Dostane ho neoprávněně a už může být naštvaný. Takže: OnPlayerUpdate a kontrola zrychlení (jen jestli nepřekročil maximálku - ono to stačí i na L. ALT) a při větším zrychlení okamžitý kick (zabrání se tím poškození auta jiného hráče). Ovšem je to na úkor zátěže.

  10. Nejsem pravý pawner. Jsem levý pawner, který nemá rád NEreálnou zemi. A lidi tam chodí jen proto, že ten server má hodně hráčů a mají tam hovadiny, které, jak už jsem řekl, s REÁLEM nemají nic. A WTLS... Ano, to je jediný úspěšný server, který je propracovaný. Ten si zaslouží i více hráčů než RZE.

    Ke všemu: Mód nedělal pravý pawner. Kdyby jo, udělá vše sám. 75% módu je nakopírovaných z ostatních módů, či skriptů.

    • Líbí se mi to! (+1) 4
  11. /givecash ID -1000000 vam da penize.

    /bug jde bez textu

    /navrh jde bez textu

    Dane platim z minusu a dostavam XP (zkusenosti) za radne placeni dani. Dohromady tam neni vubec nic. Na zaver se mi ukazalo Server closed the connection. Pry jsem byl vybanovany (mi rekl kamarad, ktery nasledne byl taky vybanovany), ale duvod nikde.

    *Blby admin - nechape ze nekdo ma v samp download 1600 kb/s a mysli ze to je rychlost normalni. Leroy (at si prosim liskne).

    - z niceho nic prileti a "like a boss" nas zabije stihackou. Si mysli ze kdyz je admin tak je king.

     

    Udelal bych zmenu a zacal bych modem, skoncil bych admin teamem.

    0 / 1000 a to davam obvykle jen 480 / 1000 za to ze nekdo jen prezentuje mod. Smazte to.Mimochodem ten kdo to psal at se nauci cestinu.

  12. Myslel jsem to tak, že pokud ti vadí že existuje, tak sem psát nemusíš. Říká ti něco KONSTRUKTIVNÍ KRITIKA? To ten tvůj názor vůbec nebyl. Je jich možná dost, ale neviděl jsem ještě nějaký, který by měl i český / slovenský překlad pro větší pohodlí těch neznalých cizím jazykům. Navíc, jako jeden z mála má zobrazení stavu konverze videa - to jsem moc taky neviděl.

  13. Zdravím, představuji vám web http://youtube.k3s4.sk

     

    Jeho cíl je stahování videa z YouTube a převedení do MP3. Stahuje se video v nejlepší dostupné kvalitě typu mp4 / webm a konvertuje se do MP3 160 kbps. Někdy později bych přidal i více informací, až uvidím, že se hodně používá.

     

    Jedna designová vada je zobrazení stavu konvertování (je v takovém škaredém šedém rámečku). Je zde i možnost stáhnout MP3 pomocí naskenování QR kódu a změna do jiného jazyka. Tak hodnoťte :)

    • Líbí se mi to! (+1) 1
×
×
  • Create New...