Jump to content
  • 0

pomoc Dialog a cyklus for


Paulee

Dotaz

Zdravím,

po pár měsících přestávky jsem se rozhodl, že si něco pro sebe udělám pro zahnání nudy, abych se přiučil něco nového atp. A proto jsem tady. Potřeboval bych poradit s jednou věcí, se kterou jsem se ještě nesetkal, snažil jsem se to samozřejmě vygooglit, ale nějak dvakrát chytrej jsem z toho nebyl. Jde o to, že si chci udělat systém zbraní v dialogu, které lze ovládat přes administraci. Jedna s funkcí chci aby byla, že si Admin může říct, kolik to bude vlastně slotů v dialogu ukazovat. Vím, že se to dělá přes fuknci for, která zjistí maximální počet slotů a vypíše to do listu dialogu. 

Bohužel si s tím nějak nevím rady, jak vypsat ty sloty v dialogu a propojit to s administrací pro jednoduché ovládání. Proto vás prosím o pomoc, nebo mi to nějak zkusit vysvětlit názornými ukázkami atp.

Za každou pomoc budu rád.

 

Přeji hezký den,

s pozdravem Paulee.

 

 

Link to comment
Share on other sites

25 odpovědí na tuto otázku

Recommended Posts

  • 0

V priloženom pwn súbore môžeš pozrieť ako som to myslel ja ;) Máš to ovela jednoduchšie a funkcie si môžeš dorobiť :d WeapData - prvý parameter je cena a druhý počet nábojov, alebo ak si to prepíšeš ináč, to je na tebe ;) Ak by si niečomu nerozumel alebo nevedel, napíš buď sem alebo mne do správy

 

PS: máš tam aj príklad ako spraviť, aby ti do dialogu vypísalo len zbrane ktoré "povolíš"

Weapon.pwn

Edited by Quiter
Link to comment
Share on other sites

  • 1

Tak ja by som skúsil niečo takéto..

CMD:nastavitsloty(...)
{
if(sscanf...)
MaximumSlots = params;
return 1;
}

CMD:weapons(...)
{
	new sString[140];
	for(new i; i < MaximumSlots; i++) format(sString, sizeof(sString), "%s%s\n", sString, /* Premenná ktorá zistí aká zbraň je na danom slote */);
    ShowPlayerDialog(...);
    return 1;
}

Neskúšal som to, ale malo by ti to vytvoriť toľko riadkov, koľko má premenná MaximumSlots..

Edited by EvoLve.
Link to comment
Share on other sites

  • 1

V OnDialogResponse(...) musíš rozlišovat návratové hodnoty. Pokud podle id najdeš nějaký dialog a popřípadě vykonáš nějaký kód, tak vrátíš 1 (return 1;). Tím řekneš dialog byl nalezen, dále v hledání nepokračuj. Pokud ovšem dojedeš až na konec callbacku bez toho, aniž bys našel správný dialog, tak vrať 0 (return 0;). Tím řekneš, že jsi dialog nenašel a má pokračovat v dalších skriptech. 

Jelikož se OnDialogResponse(...) volá nejdřív ve filtersciptech, tak máš chybu nejspíš v nějakým z těch fs, jelikož nejspíš vracíš vždy 1, nehledě na to zda jsi dialog našel nebo ne. 

Takže tvůj kód by ve všech FS a GM měl vypadat nějak takto:

public OnDialogResponse (playerid, dialogid, response, listitem, inputtext [])
{
    switch(dialogid)
    {
        case DIALOG_1:
        {
        //nějaký kód dialogu - response, listitem, atd...
		return 1;			//dialog si našel a vykonal jsi, co jsi chtěl - vracíš 1;
		}
        case DIALOG_2:
        {
        //nějaký kód dialogu - response, listitem, atd...
		return 1;			//dialog si našel a vykonal jsi, co jsi chtěl - vracíš 1;
        }
	//po posledním dialogu - tedy na konci callbacku vracíš 0
	}
	return 0; //vracíš 0 jako že dialog nebyl nalezen a má hledat dále někde jinde
}

Ještě by byla možnost, že by se ti to mohlo krýt s jiným (stejná ID), ale to by se ti zobrazil aspoň nějaký jiný....

Edited by GaRGoyLeS
Link to comment
Share on other sites

  • 1
if(response)
{
  new Slot = 0;
  for(new i=0;i<MAX_WEAPON;i++)
  {
    if(AllowWeap[i])
    {
      Slot++; 
      if(listitem == Slot-1) // Porovná, či sa listitem rovná vybranému slotu (zníženému o 1 pretože listitem začína na 0)
      {
        GivePlayerWeapon(playerid, i, WeapData[1]); // pridá hráčovi zbraň
        break; // Ukončí cyklus
      }
    }
  }
}

Tu máš ešte ako administratívne upraviť cenu a náboje

WeapData[31][0] = 1368; // Nastavím zbrani č.31 cenu 1368
WeapData[31][1] = 250; // Nastavím zbrani č.31 250 nábojov

 

Link to comment
Share on other sites

  • 0

Takže, jsem to zatím nějak takhle splácal, na optimalizaci a ukázněnost kodu nekoukejte, jde mi o funkčnost a teď si zas nevím rady, jak přiřadit té funkci právě to číslo, které se zádá do inputu.

#include <a_samp>
#include <zcmd>

#define DIALOG_DOPLNKY 10000
#define DIALOG_ADOPLNKY 10001
#define DIALOG_SDOPLNKY 10002
#define MAX_SLOTS   8

new SLOT[MAX_SLOTS];

/*Toto jsou nové doplnky podle nového systému*/

CMD:doplnky(playerid, params[]) {

    new sString[140];
	for(new i; i < MAX_SLOTS; i++) format(sString, sizeof(sString), "%s%s\n", sString);
    ShowPlayerDialog(playerid, DIALOG_DOPLNKY, DIALOG_STYLE_LIST, "Doplnky by Paulee", sString, "Potvrdit", "Zavřít");
	return (true);
}

CMD:adoplnky(playerid, params[]) {

    new sString[140];
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Nemůžeš použít tento příkaz.");
	for(new i; i < MAX_SLOTS; i++) format(sString, sizeof(sString), "%s%s\n", sString);
	ShowPlayerDialog(playerid, DIALOG_ADOPLNKY, DIALOG_STYLE_LIST, "Doplnky by Paulee - Administrace", sString, "Potvrdit", "Zavřít");
	return (true);
}

CMD:sdoplnky(playerid, params[]) {

    new sString[140];
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Nemůžeš použít tento příkaz.");
	for(new i; i < MAX_SLOTS; i++)
	format(sString, sizeof(sString), "Zadej počet slotů pro zbrane! Maximum je %d\nTed je slotu: %d", MAX_SLOTS, SLOT[i]);
	ShowPlayerDialog(playerid, DIALOG_SDOPLNKY, DIALOG_STYLE_INPUT, "Doplnky by Paulee - Sloty", sString, "Potvrdit", "Zavřít");
	return (true);
}

public OnDialogResponse (playerid, dialogid, response, listitem, inputtext [])
{
    switch(dialogid)
    {
        case DIALOG_SDOPLNKY:
        {
            if(response == 1)
            {
                switch(listitem)
                {
                    case 0:
                    {
                    //tutaj mi chybí prirazení slotu pro tu funkci
                    //strlen(inputtext) = SEM NEVÍM CO MÁM PRESNE DOSADIT
					new string[100];
					format(string, sizeof(string), "Počet slotu jste nastavil na %d", strlen(inputtext));
					SendClientMessage(playerid, -1, string);
					}
				}
			}
		}
	}
	return 1;
}

Poradíte prosím? Popřípadně nějaké narážky na funkčnost kodu, která by se dala změnit/vylepšit?

Opět budu rád za každou odpověď.

Link to comment
Share on other sites

  • 0

Pozerám na to 10 minút, a stále si niesom istá či ti to pôjde :d Totiž.. vo všetkých príkazoch máš for na MAX_SLOTS.. Ale MAX_SLOTS je define, ktoré sa v hre nedá nijako zmeniť.. Takže čísla si tam síce dáš, ale nič sa nezmení.. Ako som hore písal, vytvor si premennú nejakú, ktorú budeš meniť v hre, a podľa tej premennej dáš aj for..

a SLOT[ i] vždy bude 8.. Lebo MAX_SLOTS je 8, takže i bude 8 :)

 

Edited by EvoLve.
BBCode :D
Link to comment
Share on other sites

  • 0

Hm, taky na to teď koukám. Ale já budu chtít s tou proměnnou dále pracovat, na ukládání, práci v dialozích atp. Tak já už nevím, jak se s tím poprat :/

Link to comment
Share on other sites

  • 0

Trošku jsem to poupravil, přidal jsem tam abych viděl jak to bude vypadat, názvy zbraní, které bych pak chtěl dát pro výběr v administraci do listu. Ale nastal tu menší problém. Po zádání počtu slotu se nic nestane. OnDialogResponse se vůbec nevyvolá.

 

 
 
 

#include <a_samp>
#include <zcmd>

#define DIALOG_DOPLNKY 10000
#define DIALOG_ADOPLNKY 10001
#define DIALOG_SDOPLNKY 10002
#define MAX_SLOTS   8

new zbran;
new SLOTS = 4;

/*Toto jsou nové doplnky podle nového systému*/

CMD:doplnky(playerid, params[]) {

    new sString[140];
	for(new i; i < SLOTS; i++) format(sString, sizeof(sString), "%s\n%s\n", sString, WeaponName(zbran));
    ShowPlayerDialog(playerid, DIALOG_DOPLNKY, DIALOG_STYLE_LIST, "Doplnky by Paulee", sString, "Potvrdit", "Zavřít");
	return (true);
}

CMD:adoplnky(playerid, params[]) {

    new sString[140];
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Nemůžeš použít tento příkaz.");
	for(new i; i < SLOTS; i++) format(sString, sizeof(sString), "%s%s\n", sString);
	ShowPlayerDialog(playerid, DIALOG_ADOPLNKY, DIALOG_STYLE_LIST, "Doplnky by Paulee - Administrace", sString, "Potvrdit", "Zavřít");
	return (true);
}

CMD:sdoplnky(playerid, params[]) {

    new sString[140];
	if(!IsPlayerAdmin(playerid)) 	return SendClientMessage(playerid, -1, "Nemůžeš použít tento příkaz.");
	if(SLOTS > MAX_SLOTS)           return SendClientMessage(playerid, -1, "Už je zde maximální počet slotů!.");
	for(new i; i < SLOTS; i++)
	format(sString, sizeof(sString), "Zadej počet slotů pro zbrane! Maximum je %d\nTed je slotu: %d", MAX_SLOTS, SLOTS);
	ShowPlayerDialog(playerid, DIALOG_SDOPLNKY, DIALOG_STYLE_INPUT, "Doplnky by Paulee - Sloty", sString, "Potvrdit", "Zavřít");
	return (true);
}

public OnDialogResponse (playerid, dialogid, response, listitem, inputtext [])
{
    switch(dialogid)
    {
        case DIALOG_SDOPLNKY:
        {
            if(response == 1)
            {
                switch(listitem)
                {
                    case 0:
                    {
					new string[100];
					SLOTS = strlen(inputtext);
					format(string, sizeof(string), "Počet slotu jste nastavil na %d", strlen(inputtext));
					SendClientMessage(playerid, -1, string);
					}
				}
			}
		}
	}
	return 1;
}

stock WeaponName(weapon)
{
   new Nazev[50];
   if     (weapon ==  0) Nazev = "Nezadáno";
   else if(weapon ==  1) Nazev = "Boxer";
   else if(weapon ==  2) Nazev = "Golfová hůl";
   else if(weapon ==  3) Nazev = "Obušek";
   else if(weapon ==  4) Nazev = "Nůž";
   else if(weapon ==  5) Nazev = "Baseballka";
   else if(weapon ==  6) Nazev = "Lopata";
   else if(weapon ==  7) Nazev = "Kulecníková hůl";
   else if(weapon ==  8) Nazev = "Katana";
   else if(weapon ==  9) Nazev = "Motorovka";
   else if(weapon == 10) Nazev = "Dildo";
   else if(weapon == 11) Nazev = "Dildo2";
   else if(weapon == 12) Nazev = "Vibrátor";
   else if(weapon == 13) Nazev = "Vibrátor2";
   else if(weapon == 14) Nazev = "Kvetiny";
   else if(weapon == 15) Nazev = "Hůl";
   else if(weapon == 16) Nazev = "Granát";
   else if(weapon == 17) Nazev = "Slzný plyn";
   else if(weapon == 18) Nazev = "Molotov Cocktail";
   else if(weapon == 22) Nazev = "9mm";
   else if(weapon == 23) Nazev = "Silent 9mm";
   else if(weapon == 24) Nazev = "Desert eagle";
   else if(weapon == 25) Nazev = "Brokovnice";
   else if(weapon == 26) Nazev = "Sawnoff";
   else if(weapon == 27) Nazev = "Combat";
   else if(weapon == 28) Nazev = "Uzi";
   else if(weapon == 29) Nazev = "Mp5";
   else if(weapon == 30) Nazev = "AK47";
   else if(weapon == 31) Nazev = "M4";
   else if(weapon == 32) Nazev = "Tec-9";
   else if(weapon == 33) Nazev = "Puška";
   else if(weapon == 34) Nazev = "Odstrelovacka";
   else if(weapon == 35) Nazev = "Raketomet";
   else if(weapon == 36) Nazev = "Teplonavadecí raketomet";
   else if(weapon == 37) Nazev = "Plamenomet";
   else if(weapon == 38) Nazev = "Minigun";
   else if(weapon == 39) Nazev = "Dálkove rizené výbušniny";
   else if(weapon == 40) Nazev = "Detonátor";
   else if(weapon == 41) Nazev = "Spray";
   else if(weapon == 42) Nazev = "Hasicí přistroj";
   else if(weapon == 43) Nazev = "Foták";
   else if(weapon == 44) Nazev = "Nocní videní";
   else if(weapon == 45) Nazev = "Infracervená vize";
   else if(weapon == 46) Nazev = "Padák";
   else if(weapon == 47) Nazev = "Brnení";
   return Nazev;
}
 
Edited by Paulee
Link to comment
Share on other sites

  • 0

Ja ti neviem, mne príde že ideš na to príliš komplikovane :/

Sprav si tak, že budeš mať kompletný zoznam zbraní podla ich ID, a admin bude iba povolovať/zakazovať jej zobrazenie v dialogu... Následne cyklom for prejdi všetky zbrane, a pokial má zbraň nastavené zobrazenie tak mu ju zobraz :d

Budeš na to potrebovať 2 premenné...

new WeapName[][] = 

{

"Zbraň1", "Zbraň2", // atď, nepamätám si v akom idú poradí

};

new bool:AllowWeapon[MAX_WEAPON_ID]; // nezabudni nadefinovať max weapon id

 

 

PS:

format(sString, sizeof(sString), "%s%s\n", sString);

Toto ti nikdy v živote nebude fungovať... :/ máš tam 2x %s ale len 1 parameter... 

Edited by Quiter
Link to comment
Share on other sites

  • 0
před 6 minutami, Quiter said:

Ja ti neviem, mne príde že ideš na to príliš komplikovane :/

Sprav si tak, že budeš mať kompletný zoznam zbraní podla ich ID, a admin bude iba povolovať/zakazovať jej zobrazenie v dialogu... Následne cyklom for prejdi všetky zbrane, a pokial má zbraň nastavené zobrazenie tak mu ju zobraz :d

Budeš na to potrebovať 2 premenné...

new WeapName[][] = 

{

"Zbraň1", "Zbraň2", // atď, nepamätám si v akom idú poradí

};

new bool:AllowWeapon[MAX_WEAPON_ID]; // nezabudni nadefinovať max weapon id

 

 

PS:


format(sString, sizeof(sString), "%s%s\n", sString);

Toto ti nikdy v živote nebude fungovať... :/ máš tam 2x %s ale len 1 parameter... 

No nevím, já to chci udělat tak, aby na každý slot přes administraci šlo nastavit určitá zbraň, kolik bude stát a počet nábojů. Takhle tam bude jen zbran, jestli jsem to dobře pochopil. Teď mě i napadlo, že bych to dal DIALOG_STYLE_TABLIST, ale v životě jsem s ním nic neudělal. 

Každopádně díky za odpověď.

 

PS: O tom formatu vím, proto tam mám už dosazené něco jiného, je to i ve spoileru.

Edited by Paulee
Link to comment
Share on other sites

  • 0

Jediné co mě teď furt zařáží je, že mi nefunguje OnDialogResponse.

Spoiler

#include <a_samp>
#include <zcmd>

#define DIALOG_DOPLNKY 10000
#define DIALOG_ADOPLNKY 10001
#define DIALOG_SDOPLNKY 10002
#define MAX_SLOTS   8

new zbran;
new SLOTS = 4,
	cena = 0,
	naboje = 0;

/*Toto jsou nové doplnky podle nového systému*/

CMD:doplnky(playerid, params[]) {

    new sString[140];
    zbran = 0;
	for(new i; i < SLOTS; i++) format(sString, sizeof(sString), "Zbran\tCena\tNaboje\n\%s\t%d\t%d\t%s\n", WeaponName(zbran), cena, naboje, sString);
    ShowPlayerDialog(playerid, DIALOG_DOPLNKY, DIALOG_STYLE_TABLIST_HEADERS, "Doplnky by Paulee", sString, "Potvrdit", "Zavřít");
	return (true);
}

CMD:adoplnky(playerid, params[]) {

    new sString[140];
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Nemůžeš použít tento příkaz.");
	for(new i; i < SLOTS; i++) format(sString, sizeof(sString), "%s%s\n", sString);
	ShowPlayerDialog(playerid, DIALOG_ADOPLNKY, DIALOG_STYLE_LIST, "Doplnky by Paulee - Administrace", sString, "Potvrdit", "Zavřít");
	return (true);
}

CMD:sdoplnky(playerid, params[]) {

    new sString[140];
	if(!IsPlayerAdmin(playerid)) 	return SendClientMessage(playerid, -1, "Nemůžeš použít tento příkaz.");
	for(new i; i < SLOTS; i++)
	format(sString, sizeof(sString), "Zadej počet slotů pro zbrane! Maximum je %d\nTed je slotu: %d", MAX_SLOTS, SLOTS);
	ShowPlayerDialog(playerid, DIALOG_SDOPLNKY, DIALOG_STYLE_INPUT, "Doplnky by Paulee - Sloty", sString, "Potvrdit", "Zavřít");
	return (true);
}

public OnDialogResponse (playerid, dialogid, response, listitem, inputtext [])
{
    switch(dialogid)
    {
        case DIALOG_SDOPLNKY:
        {
            if(response == 1)
            {
                switch(listitem)
                {
                    case 0:
                    {
                   	if(SLOTS > MAX_SLOTS)           return SendClientMessage(playerid, -1, "Už je zde maximální počet slotů!.");
					new string[100];
					SLOTS = strlen(inputtext);
					format(string, sizeof(string), "Počet slotu jste nastavil na %d", strlen(inputtext));
					SendClientMessage(playerid, -1, string);
					return 1;
					}
				}
			}
		}
	}
	return 1;
}

stock WeaponName(weapon)
{
   new Nazev[50];
   if     (weapon ==  0) Nazev = "Nezadáno";
   else if(weapon ==  1) Nazev = "Boxer";
   else if(weapon ==  2) Nazev = "Golfová hůl";
   else if(weapon ==  3) Nazev = "Obušek";
   else if(weapon ==  4) Nazev = "Nůž";
   else if(weapon ==  5) Nazev = "Baseballka";
   else if(weapon ==  6) Nazev = "Lopata";
   else if(weapon ==  7) Nazev = "Kulecníková hůl";
   else if(weapon ==  8) Nazev = "Katana";
   else if(weapon ==  9) Nazev = "Motorovka";
   else if(weapon == 10) Nazev = "Dildo";
   else if(weapon == 11) Nazev = "Dildo2";
   else if(weapon == 12) Nazev = "Vibrátor";
   else if(weapon == 13) Nazev = "Vibrátor2";
   else if(weapon == 14) Nazev = "Kvetiny";
   else if(weapon == 15) Nazev = "Hůl";
   else if(weapon == 16) Nazev = "Granát";
   else if(weapon == 17) Nazev = "Slzný plyn";
   else if(weapon == 18) Nazev = "Molotov Cocktail";
   else if(weapon == 22) Nazev = "9mm";
   else if(weapon == 23) Nazev = "Silent 9mm";
   else if(weapon == 24) Nazev = "Desert eagle";
   else if(weapon == 25) Nazev = "Brokovnice";
   else if(weapon == 26) Nazev = "Sawnoff";
   else if(weapon == 27) Nazev = "Combat";
   else if(weapon == 28) Nazev = "Uzi";
   else if(weapon == 29) Nazev = "Mp5";
   else if(weapon == 30) Nazev = "AK47";
   else if(weapon == 31) Nazev = "M4";
   else if(weapon == 32) Nazev = "Tec-9";
   else if(weapon == 33) Nazev = "Puška";
   else if(weapon == 34) Nazev = "Odstrelovacka";
   else if(weapon == 35) Nazev = "Raketomet";
   else if(weapon == 36) Nazev = "Teplonavadecí raketomet";
   else if(weapon == 37) Nazev = "Plamenomet";
   else if(weapon == 38) Nazev = "Minigun";
   else if(weapon == 39) Nazev = "Dálkove rizené výbušniny";
   else if(weapon == 40) Nazev = "Detonátor";
   else if(weapon == 41) Nazev = "Spray";
   else if(weapon == 42) Nazev = "Hasicí přistroj";
   else if(weapon == 43) Nazev = "Foták";
   else if(weapon == 44) Nazev = "Nocní videní";
   else if(weapon == 45) Nazev = "Infracervená vize";
   else if(weapon == 46) Nazev = "Padák";
   else if(weapon == 47) Nazev = "Brnení";
   return Nazev;
}

 

Nevíte prosím proč? Vůbec se mi OnDialogResponse nevyvolá :/.

Link to comment
Share on other sites

  • 0
před 26 minutami, GaRGoyLeS said:

V OnDialogResponse(...) musíš rozlišovat návratové hodnoty. Pokud podle id najdeš nějaký dialog a popřípadě vykonáš nějaký kód, tak vrátíš 1 (return 1;). Tím řekneš dialog byl nalezen, dále v hledání nepokračuj. Pokud ovšem dojedeš až na konec callbacku bez toho, aniž bys našel správný dialog, tak vrať 0 (return 0;). Tím řekneš, že jsi dialog nenašel a má pokračovat v dalších skriptech. 

Jelikož se OnDialogResponse(...) volá nejdřív ve filtersciptech, tak máš chybu nejspíš v nějakým z těch fs, jelikož nejspíš vracíš vždy 1, nehledě na to zda jsi dialog našel nebo ne. 

Takže tvůj kód by ve všech FS a GM měl vypadat nějak takto:


public OnDialogResponse (playerid, dialogid, response, listitem, inputtext [])
{
    switch(dialogid)
    {
        case DIALOG_1:
        {
        //nějaký kód dialogu - response, listitem, atd...
		return 1;			//dialog si našel a vykonal jsi, co jsi chtěl - vracíš 1;
		}
        case DIALOG_2:
        {
        //nějaký kód dialogu - response, listitem, atd...
		return 1;			//dialog si našel a vykonal jsi, co jsi chtěl - vracíš 1;
        }
	//po posledním dialogu - tedy na konci callbacku vracíš 0
	}
	return 0; //vracíš 0 jako že dialog nebyl nalezen a má hledat dále někde jinde
}

Ještě by byla možnost, že by se ti to mohlo krýt s jiným (stejná ID), ale to by se ti zobrazil aspoň nějaký jiný....

Díky moc za odpověď, bohužel beze změny. Stále to nejde. Příkaz /doplnky funguje zatím dobře, hodil jsem tam nulové hodnoty abych viděl, jak to bude vypadat. 

Spoiler

#include <a_samp>
#include <zcmd>

#define DIALOG_DOPLNKY 10000
#define DIALOG_ADOPLNKY 10001
#define DIALOG_SDOPLNKY 10002
#define MAX_SLOTS   8

new zbran;
new SLOTS = 4,
	cena = 0,
	naboje = 0;

/*Toto jsou nové doplnky podle nového systému*/

CMD:doplnky(playerid, params[]) {

    new sString[140];
    zbran = 0;
	for(new i; i < SLOTS; i++) format(sString, sizeof(sString), "Zbran\tCena\tNaboje\n\%s\t%d\t%d\t%s\n", WeaponName(zbran), cena, naboje, sString);
    ShowPlayerDialog(playerid, DIALOG_DOPLNKY, DIALOG_STYLE_TABLIST_HEADERS, "Doplnky by Paulee", sString, "Potvrdit", "Zavřít");
	return (true);
}

CMD:adoplnky(playerid, params[]) {

    new sString[140];
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Nemůžeš použít tento příkaz.");
	for(new i; i < SLOTS; i++) format(sString, sizeof(sString), "%s%s\n", sString);
	ShowPlayerDialog(playerid, DIALOG_ADOPLNKY, DIALOG_STYLE_LIST, "Doplnky by Paulee - Administrace", sString, "Potvrdit", "Zavřít");
	return (true);
}

CMD:sdoplnky(playerid, params[]) {

    new sString[140];
	if(!IsPlayerAdmin(playerid)) 	return SendClientMessage(playerid, -1, "Nemůžeš použít tento příkaz.");
	for(new i; i < SLOTS; i++)
	format(sString, sizeof(sString), "Zadej počet slotů pro zbrane! Maximum je %d\nTed je slotu: %d", MAX_SLOTS, SLOTS);
	ShowPlayerDialog(playerid, DIALOG_SDOPLNKY, DIALOG_STYLE_INPUT, "Doplnky by Paulee - Sloty", sString, "Potvrdit", "Zavřít");
	return (true);
}

public OnDialogResponse (playerid, dialogid, response, listitem, inputtext [])
{
    switch(dialogid)
    {
        case DIALOG_SDOPLNKY:
        {
            if(response == 1)
            {
                switch(listitem)
                {
                    case 0:
                    {
                   	if(SLOTS > MAX_SLOTS)           return SendClientMessage(playerid, -1, "Už je zde maximální počet slotů!.");
					new string[100];
					SLOTS = strlen(inputtext);
					format(string, sizeof(string), "Počet slotu jste nastavil na %d", strlen(inputtext));
					SendClientMessage(playerid, -1, string);
					return 1;
					}
				}
			}
  		}
	}
	return 0;
}

stock WeaponName(weapon)
{
   new Nazev[50];
   if     (weapon ==  0) Nazev = "Nezadáno";
   else if(weapon ==  1) Nazev = "Boxer";
   else if(weapon ==  2) Nazev = "Golfová hůl";
   else if(weapon ==  3) Nazev = "Obušek";
   else if(weapon ==  4) Nazev = "Nůž";
   else if(weapon ==  5) Nazev = "Baseballka";
   else if(weapon ==  6) Nazev = "Lopata";
   else if(weapon ==  7) Nazev = "Kulecníková hůl";
   else if(weapon ==  8) Nazev = "Katana";
   else if(weapon ==  9) Nazev = "Motorovka";
   else if(weapon == 10) Nazev = "Dildo";
   else if(weapon == 11) Nazev = "Dildo2";
   else if(weapon == 12) Nazev = "Vibrátor";
   else if(weapon == 13) Nazev = "Vibrátor2";
   else if(weapon == 14) Nazev = "Kvetiny";
   else if(weapon == 15) Nazev = "Hůl";
   else if(weapon == 16) Nazev = "Granát";
   else if(weapon == 17) Nazev = "Slzný plyn";
   else if(weapon == 18) Nazev = "Molotov Cocktail";
   else if(weapon == 22) Nazev = "9mm";
   else if(weapon == 23) Nazev = "Silent 9mm";
   else if(weapon == 24) Nazev = "Desert eagle";
   else if(weapon == 25) Nazev = "Brokovnice";
   else if(weapon == 26) Nazev = "Sawnoff";
   else if(weapon == 27) Nazev = "Combat";
   else if(weapon == 28) Nazev = "Uzi";
   else if(weapon == 29) Nazev = "Mp5";
   else if(weapon == 30) Nazev = "AK47";
   else if(weapon == 31) Nazev = "M4";
   else if(weapon == 32) Nazev = "Tec-9";
   else if(weapon == 33) Nazev = "Puška";
   else if(weapon == 34) Nazev = "Odstrelovacka";
   else if(weapon == 35) Nazev = "Raketomet";
   else if(weapon == 36) Nazev = "Teplonavadecí raketomet";
   else if(weapon == 37) Nazev = "Plamenomet";
   else if(weapon == 38) Nazev = "Minigun";
   else if(weapon == 39) Nazev = "Dálkove rizené výbušniny";
   else if(weapon == 40) Nazev = "Detonátor";
   else if(weapon == 41) Nazev = "Spray";
   else if(weapon == 42) Nazev = "Hasicí přistroj";
   else if(weapon == 43) Nazev = "Foták";
   else if(weapon == 44) Nazev = "Nocní videní";
   else if(weapon == 45) Nazev = "Infracervená vize";
   else if(weapon == 46) Nazev = "Padák";
   else if(weapon == 47) Nazev = "Brnení";
   return Nazev;
}

 

Takhle to mám teď, ale jak jsem již napsal. Pořád to nejde.

Snímek obrazovky (33).png

Link to comment
Share on other sites

  • 0

Je tam celý kód. Jinak ho volám v příkazu /sdoplnky.

CMD:sdoplnky(playerid, params[]) {

    new sString[140];
	if(!IsPlayerAdmin(playerid)) 	return SendClientMessage(playerid, -1, "Nemůžeš použít tento příkaz.");
	for(new i; i < SLOTS; i++)
	format(sString, sizeof(sString), "Zadej počet slotů pro zbrane! Maximum je %d\nTed je slotu: %d", MAX_SLOTS, SLOTS);
	ShowPlayerDialog(playerid, DIALOG_SDOPLNKY, DIALOG_STYLE_INPUT, "Doplnky by Paulee - Sloty", sString, "Potvrdit", "Zavřít");
	return (true);
}

 

Link to comment
Share on other sites

  • 0
před 11 hodinami, GaRGoyLeS said:

Tak musí být chyba někde jinde... Zkus si s tím různě pohrát, změnit id, nebo vypni všechny ostatní fs,... musí tam být nějaký malinký zádrhel :/ 

FS tam mám pouze ten jeden. Mod tam je GrandLarc, který je tak málo obsáhlý, že to tím podle mě nebude.

před 9 hodinami, Quiter said:

V priloženom pwn súbore môžeš pozrieť ako som to myslel ja ;) Máš to ovela jednoduchšie a funkcie si môžeš dorobiť :d WeapData - prvý parameter je cena a druhý počet nábojov, alebo ak si to prepíšeš ináč, to je na tebe ;) Ak by si niečomu nerozumel alebo nevedel, napíš buď sem alebo mne do správy

 

PS: máš tam aj príklad ako spraviť, aby ti do dialogu vypísalo len zbrane ktoré "povolíš"

Weapon.pwn

Vypadá to dobře, už vím jak si to myslel. Je pravda, že já to myslel složitěji na sloty, do kterých se pak dosadí zbraň. Ale je i možnost tam rovnou zbraň dosadit a v administraci pak vybrat. Jediné co mě trošku zaráží je, že chci aby počet nábojů a cena vybírala v administraci. Ty to máš rovnou takhle v poli, což nevím no. Zkusím si s tím zas pohrát. Určitě dám vědět.

Zatím děkuji moc za každou odpověď ;).

Edited by Paulee
Link to comment
Share on other sites

  • 0
Spoiler

#include <a_samp>
#include <zcmd>

#define MAX_WEAPON 		48
#define DIALOG_DOPLNKY  10000

new bool:AllowWeap[MAX_WEAPON];

new WeapData[MAX_WEAPON][2] =
{
	{0,0},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1}
};

new WeapName[MAX_WEAPON][] =
{
	"Nezadáno",
	"Boxer",
	"Golfová hůl",
	"Obušek",
	"Nůž",
	"Baseballka",
	"Lopata",
	"Kulecníková hůl",
	"Katana",
	"Motorovka",
	"Dildo",
	"Dildo2",
	"Vibrátor",
	"Vibrátor2",
	"Kvetiny",
	"Hůl",
	"Granát",
	"Slzný plyn",
	"Molotov Cocktail",
	"...", // 19
	"...", // 20
	"...", // 21
	"9mm",
	"Silent 9mm",
	"Desert eagle",
	"Brokovnice",
	"Sawnoff",
	"Combat",
	"Uzi",
	"Mp5",
	"AK47",
	"M4",
	"Tec-9",
	"Puška",
	"Odstrelovacka",
	"Raketomet",
	"Teplonavadecí raketomet",
	"Plamenomet",
	"Minigun",
	"Dálkove rizené výbušniny",
	"Detonátor",
	"Spray",
	"Hasicí přistroj",
	"Foták",
	"Nocní videní",
	"Infracervená vize",
	"Padák",
	"Brnení"
};

main()
{
	print("\n----------------------------------");
	print(" Blank Gamemode by your name here");
	print("----------------------------------\n");
}

public OnGameModeInit()
{
	// Don't use these lines if it's a filterscript
	SetGameModeText("Blank Script");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	/*for(new i=0;i<MAX_WEAPON;i++)
	{
		if(random(2) == 0) AllowWeap[i] = false; else AllowWeap[i] = true;
	}
	for(new i=0;i<MAX_WEAPON;i++)
	{
	    if(AllowWeap[i]) printf("%s\t%d\t%d", WeapName[i], WeapData[i][0], WeapData[i][1]);
	}*/
	return 1;
}

CMD:doplnky(playerid, params[]) {

	new string[1000];
	SendClientMessage(playerid, -1, "Bagr");
	for(new i=0;i<MAX_WEAPON;i++)
	{
		if(random(2) == 0) AllowWeap[i] = false; else AllowWeap[i] = true;
	}
 	for(new i=0;i<MAX_WEAPON;i++)
	{
	    if(AllowWeap[i]) format(string, sizeof(string), "Zbran\tCena\tNaboje\n%s\t%d\t%d\t%s\n", WeapName[i], WeapData[i][0], WeapData[i][1], string);
	}
	ShowPlayerDialog(playerid, DIALOG_DOPLNKY, DIALOG_STYLE_TABLIST_HEADERS, "Doplnky by Paulee", string, "Potvrdit", "Zavřít");
	return (true);
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_DOPLNKY:
        {
            if(response == 1)
            {
                switch(listitem)
                {
                    case 0:
                    {
                    	new string[1000];
                    	SendClientMessage(playerid, -1, "Bagr");
						for(new i=0;i<MAX_WEAPON;i++)
						{
	    					if(AllowWeap[i]) format(string, sizeof(string), "Právě sis vybral na %s, %d, %d", WeapName[i], WeapData[i][0], WeapData[i][1]);
      					}
      					SendClientMessage(playerid, 0xFFFFFF, string);
						return (true);
					}
				}
			}
  		}
	}
	return 1;
}

 

Mám to teď takhle, OnDialogResponse záhadně už funguje, ale mám tu další problém. Hodí mi to seznam všech zbraní, to ano. Teď je to tak, že když kliknu na první zbraň, tak to napíše tu větu. Ale jak udělám aby to fungovalo na všechny pozice v listu? A abych tohle tam nemusel mít 10x... Poradíte prosím?

Link to comment
Share on other sites

  • 0

Díky moc, funguje.

CMD:doplnky(playerid, params[]) {

	new string[1000];
	SendClientMessage(playerid, -1, "Bagr");
	for(new i=0;i<MAX_WEAPON;i++)
	{
		if(random(2) == 0) AllowWeap[i] = false; else AllowWeap[i] = true;
	}
 	for(new i=0;i<MAX_WEAPON;i++)
	{
	    if(AllowWeap[i]) format(string, sizeof(string), "Zbran\tCena\tNaboje\n%s\t%d\t%d\t%s\n", WeapName[i], WeapData[i][0], WeapData[i][1], string);
	}
	ShowPlayerDialog(playerid, DIALOG_DOPLNKY, DIALOG_STYLE_TABLIST_HEADERS, "Doplnky by Paulee", string, "Potvrdit", "Zavřít");
	return (true);
}

Proč je tam vůbec random? Zbraně do té tabulky to hází fakt náhodně, když jsem to dal pryč, nefungovalo to vůbec. V dialogu kliknu na boxer a dá mi to to, co je zapsáno správně v tom slotu, ale v dialogu je to proházené.

Link to comment
Share on other sites

  • 0

Už to funguje dobře, ale proč ty tečky se tam někdy objeví a někdy né? Působi to pak divně...

 

Celé to funguje nějak divně. Zbraně mi ze slotů mizí a zase se objevují, když k nim zadám nějaké parametry.

 

Spoiler

#include <a_samp>
#include <zcmd>

#define MAX_WEAPON 		48
#define DIALOG_DOPLNKY  10000
#define DIALOG_ADOPLNKY 10001

new bool:AllowWeap[MAX_WEAPON];

new WeapData[MAX_WEAPON][2] =
{
	{0,0},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1},
	{500,1}
};

new WeapName[MAX_WEAPON][] =
{
	"Nezadáno",
	"Boxer",
	"Golfová hůl",
	"Obušek",
	"Nůž",
	"Baseballka",
	"Lopata",
	"Kulecníková hůl",
	"Katana",
	"Motorovka",
	"Dildo",
	"Dildo2",
	"Vibrátor",
	"Vibrátor2",
	"Kvetiny",
	"Hůl",
	"Granát",
	"Slzný plyn",
	"Molotov Cocktail",
	"...", // 19
	"...", // 20
	"...", // 21
	"9mm",
	"Silent 9mm",
	"Desert eagle",
	"Brokovnice",
	"Sawnoff",
	"Combat",
	"Uzi",
	"Mp5",
	"AK47",
	"M4",
	"Tec-9",
	"Puška",
	"Odstrelovacka",
	"Raketomet",
	"Teplonavadecí raketomet",
	"Plamenomet",
	"Minigun",
	"Dálkove rizené výbušniny",
	"Detonátor",
	"Spray",
	"Hasicí přistroj",
	"Foták",
	"Nocní videní",
	"Infracervená vize",
	"Padák",
	"Brnení"
};


public OnGameModeInit()
{
	// Don't use these lines if it's a filterscript
	SetGameModeText("Blank Script");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	/*for(new i=0;i<MAX_WEAPON;i++)
	{
		if(random(2) == 0) AllowWeap[i] = false; else AllowWeap[i] = true;
	}
	for(new i=0;i<MAX_WEAPON;i++)
	{
	    if(AllowWeap[i]) printf("%s\t%d\t%d", WeapName[i], WeapData[i][0], WeapData[i][1]);
	}*/
	return 1;
}

CMD:doplnky(playerid, params[]) {

	new string[2000];
	SendClientMessage(playerid, -1, "Bagr");
	for(new i=0;i<MAX_WEAPON;i++)
	{
		if(random(2) == 0) AllowWeap[i] = false; else AllowWeap[i] = true;
	}
 	for(new i=0;i<MAX_WEAPON;i++)
	{
	    if(AllowWeap[i]) format(string, sizeof(string), "%s\tZbran\tCena\tNaboje\n%s\t%d\t%d\t", string, WeapName[i], WeapData[i][0], WeapData[i][1]);
	}
	ShowPlayerDialog(playerid, DIALOG_DOPLNKY, DIALOG_STYLE_TABLIST_HEADERS, "Doplnky by Paulee", string, "Potvrdit", "Zavřít");
	return (true);
}

CMD:adoplnky(playerid, params[]) {

    new string[2000];
	SendClientMessage(playerid, -1, "Bagr");
	for(new i=0;i<MAX_WEAPON;i++)
	{
		if(random(2) == 0) AllowWeap[i] = false; else AllowWeap[i] = true;
	}
 	for(new i=0;i<MAX_WEAPON;i++)
	{
	    if(AllowWeap[i]) format(string, sizeof(string), "%s\tZbran\tCena\tNaboje\n%s\t%d\t%d\t", string, WeapName[i], WeapData[i][0], WeapData[i][1]);
	}
	ShowPlayerDialog(playerid, DIALOG_ADOPLNKY, DIALOG_STYLE_TABLIST_HEADERS, "Doplnky by Paulee - Administrace", string, "Potvrdit", "Zavřít");
	return (true);
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case DIALOG_DOPLNKY:
        {
            if(response)
			{
	  			new Slot = 0;
	  			for(new i=0;i<MAX_WEAPON;i++)
				{
   					if(AllowWeap[i])
			 		{
   						Slot++;
   						if(listitem == Slot-1)
						{
   							GivePlayerWeapon(playerid, i, WeapData[i][1]); 
   							GivePlayerMoney(playerid, -WeapData[i][0]);
   							break;
			      		}
	    			}
		  		}
			}
  		}
  		case DIALOG_ADOPLNKY:
        {
            if(response)
			{
	  			new Slot = 0;
	  			for(new i=0;i<MAX_WEAPON;i++)
				{
   					if(AllowWeap[i])
			 		{
   						Slot++;
   						if(listitem == Slot-1)
						{
							WeapData[i][0] = 123456;
							WeapData[i][1] = 654321;
   							break; 
			      		}
	    			}
		  		}
			}
  		}
	}
	return 0;
}

 

Jak v příkazu /doplnky tak i /adoplnky se mi věci objevují a zase mizí, když k nim dám ty parametry přes /adoplnky. Nevíte prosím co s tím?

Edited by Paulee
Link to comment
Share on other sites

  • 0
CMD:adoplnky(playerid, params[]) {

    new string[2000];
	SendClientMessage(playerid, -1, "Bagr");
	/*for(new i=0;i<MAX_WEAPON;i++) // Bodky sa ti zobrazujú kvôli tomuto, vždy keď napíšeš príkaz /adoplnky tak sa všetkym zbraniam náhodne nastaví zobrazenie/skrytie
	{
		if(random(2) == 0) AllowWeap[i] = false; else AllowWeap[i] = true;
	}*/
 	for(new i=0;i<MAX_WEAPON;i++)
	{
	    if(AllowWeap[i]) format(string, sizeof(string), "%s\tZbran\tCena\tNaboje\n%s\t%d\t%d\t", string, WeapName[i], WeapData[i][0], WeapData[i][1]);
	}
	ShowPlayerDialog(playerid, DIALOG_ADOPLNKY, DIALOG_STYLE_TABLIST_HEADERS, "Doplnky by Paulee - Administrace", string, "Potvrdit", "Zavřít");
	return (true);
}

 

Spravil by som ten príkaz trošku inak :d

Sprav si že /adoplnky zobrazí úplne všetky zbrane a farebne rozlišuj ktoré sú zobrazené a ktoré nie

Príklad:

for(new i=0;i<MAX_WEAPON;i++)
{
	if(AllowWeap[i]) format(string, sizeof(string), "%s\tZbran\tCena\tNaboje\n{00FF00}%s\t%d\t%d\t", string, WeapName[i], WeapData[i][0], WeapData[i][1]);
    else format(string, sizeof(string), "%s\tZbran\tCena\tNaboje\n{990000}%s\t%d\t%d\t", string, WeapName[i], WeapData[i][0], WeapData[i][1]);
}

Samozrejme všetky zbrane zobraz len adminom!! Hráčovi stále zobraz len tie, ktoré sú povolené...

 

No a keď použije /adoplnky a v tomto dialogu zvolí niektorú zbraň, tak mu zobraz ďalší dialog s možnosťami:

Zakázať/Povoliť zbraň

Upraviť cenu

Upraviť počet nábojov

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...