Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Menu w pętelce


  • Zamknięty Temat jest zamknięty
11 odpowiedzi w tym temacie

#1 exexe

    Pomocny

  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:63
  • Lokalizacja::)
Offline

Napisano 28.04.2011 16:58

Witam.

Mam takie pytanie, robię menu w pętelce z użyciem const i enum, ale nie bardzo łapie jak pobierać położenie ? Jak ktoś nie wie o co chodzi, to pisać śmiało, wytłumaczę. Jeśli by się komuś chciało, to proszę też o zoptymalizowanie tego kodu, z góry dzięki.

Napisałem coś takiego, ale nie działa, proszę o poprawę lub napisanie tego od nowa:
#include <amxmodx>
#include <fun>

#define PLUGIN "Test"
#define VERSION "0.1"
#define AUTHOR "x123"

enum
{
PIERWSZY,
DRUGI,
TRZECI,
CZWARTY,

TOTAL
};

new const g_type_names[TOTAL][] =
{
"115",
"130",
"170",
"200"
};

new g_type_prices[TOTAL] =
{
115,
130,
170,
200
};

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /menu", "menus");
}

public menus(id)
{
new menu = menu_create("Testowo", "menus_handler");
new opcja[64], numer[6];

for ( new i = 0; i <= TOTAL; i++ )
{
formatex(opcja, 63, "%s", g_type_names[i]);
menu_additem(menu, opcja, numer[i]);
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(menu, MPROP_EXITNAME, "Wyjscie");
menu_display(id, menu, 0);
}

public menus_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
set_user_health(id, g_type_prices[key]);
menu_destroy(menu);
return PLUGIN_HANDLED;
}


Za każdą pomoc stawiam plusy !

Użytkownik x123 edytował ten post 28.04.2011 17:44

  • +
  • -
  • 0

#2 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 28.04.2011 17:03

Co do enuma, to daj go tak
enum _:enumTOTAL
{
PIERWSZY,
DRUGI,
TRZECI,
CZWARTY
};

i używaj "enumTOTAL", a co do Twojego pytania, to nie bardzo rozumiem... O jakie położenie chodzi?
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#3 exexe

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:63
  • Lokalizacja::)
Offline

Napisano 28.04.2011 17:34

W BM (plugin) enum jest napisany tak jak mówię i jakoś działa.

Co do położenia, chodziło mi o to:
new key = str_to_num(data);
set_user_health(id, g_type_prices[key]);
Nie jestem pewny czy to działa i czy dobrze to robię.

Zrobiłem tak:
#include <amxmodx>
#include <fun>

#define PLUGIN "Test"
#define VERSION "0.1"
#define AUTHOR "x123"

enum _:TOTAL
{
PIERWSZY,
DRUGI,
TRZECI,
CZWARTY
};

new const g_type_names[TOTAL][] =
{
"115",
"130",
"170",
"200"
};

new g_type_prices[TOTAL] =
{
115,
130,
170,
200
};

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /menu", "menus");
}

public menus(id)
{
new menu = menu_create("Testowo", "menus_handler");
new opcja[64], numer[6];

for ( new i = 0; i <= TOTAL; i++ )
{
formatex(opcja, 63, "%s", g_type_names[i]);
menu_additem(menu, opcja, numer[i]);
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(menu, MPROP_EXITNAME, "Wyjscie");
menu_display(id, menu, 0);
}

public menus_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
set_user_health(id, g_type_prices[key]);
menu_destroy(menu);
return PLUGIN_HANDLED;
}


Są błędy:
L 04/28/2011 - 18:30:06: [AMXX] Displaying debug trace (plugin "test.amxx")
L 04/28/2011 - 18:30:06: [AMXX] Run time error 4: index out of bounds 
L 04/28/2011 - 18:30:06: [AMXX]    [0] test.sma::menus (line 46)

Linie 44-48:
       
for ( new i = 0; i <= TOTAL; i++ )
{
formatex(opcja, 63, "%s", g_type_names[i]);
menu_additem(menu, opcja, numer[i]);
}


Co jest źle ?

Użytkownik x123 edytował ten post 28.04.2011 17:37

  • +
  • -
  • 0

#4 Muzzi

    Guru

  • Przyjaciel

Reputacja: 228
Wszechwidzący

  • Postów:772
  • Lokalizacja:Kraków
Offline

Napisano 28.04.2011 17:36

Napisz dokładnie o co CI chodzi bo nie da się Ciebie zrozumieć.
  • +
  • -
  • 0

#5 exexe

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:63
  • Lokalizacja::)
Offline

Napisano 28.04.2011 17:43

Chcę menu w pętelce, nabazgrałem coś, ale nie działa.
Co chcę: wpisuje /menu, otwiera się menu, gdy nacisnę 2 przycisk, hp ustawia się na 130, tak jak w pluginie.
Niezrozumiale, wiem, ale nie potrafię tego dokładnie opisać.
  • +
  • -
  • 0

#6 Svizz

    Zaawansowany

  • Użytkownik

Reputacja: 33
Życzliwy

  • Postów:142
  • GG:
  • Imię:Svizz
  • Lokalizacja:Polska :)
Offline

Napisano 28.04.2011 17:55

A więc o jakim położeniu ty mówiłeś?
  • +
  • -
  • 0

#7 exexe

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:63
  • Lokalizacja::)
Offline

Napisano 28.04.2011 17:57

new g_type_prices[TOTAL] =
{
115,
130,
170,
200
};


2 pozycja to 130, gdy w menu wybierzesz 2 przycisk to dostaniesz 130 hp, już rozumiecie ?
To jest to "położenie".

Użytkownik x123 edytował ten post 28.04.2011 17:58

  • +
  • -
  • 0

#8 Knopers

    Nie patrz tak na mnie !

  • Przyjaciel

Reputacja: 588
Wszechwiedzący

  • Postów:2 013
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Cz-wa
Offline

Napisano 28.04.2011 18:30

for ( new i = 0; i <= TOTAL; i++ )
Na:
for ( new i = 0; i <= TOTAL - 1; i++ )

  • +
  • -
  • 1

#9 exexe

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:63
  • Lokalizacja::)
Offline

Napisano 28.04.2011 20:15

Zrobiłem na 2 sposoby:

1.
#include <amxmodx>
#include <fun>

#define PLUGIN "Test"
#define VERSION "0.1"
#define AUTHOR "x123"

enum _:TOTAL
{
PIERWSZY,
DRUGI,
TRZECI,
CZWARTY
};

new const g_type_names[TOTAL][] =
{
"115",
"130",
"170",
"200"
};

new g_type_prices[TOTAL] =
{
115,
130,
170,
200
};

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /menu", "menus");
}

public menus(id)
{
new menu = menu_create("Testowo", "menus_handler");
new opcja[64], numer[6];

for ( new i = 0; i <= TOTAL - 1; i++ )
{
formatex(opcja, 63, "%s", g_type_names[i]);
menu_additem(menu, opcja, numer[i]);
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(menu, MPROP_EXITNAME, "Wyjscie");
menu_display(id, menu, 0);
}

public menus_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
set_user_health(id, g_type_prices[key]);
menu_destroy(menu);
return PLUGIN_HANDLED;
}


2.

#include <amxmodx>
#include <fun>

#define PLUGIN "Test"
#define VERSION "0.1"
#define AUTHOR "x123"

enum
{
PIERWSZY,
DRUGI,
TRZECI,
CZWARTY,

TOTAL
};

new const g_type_names[TOTAL][] =
{
"115",
"130",
"170",
"200"
};

new g_type_prices[TOTAL] =
{
115,
130,
170,
200
};

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /menu", "menus");
}

public menus(id)
{
new menu = menu_create("Testowo", "menus_handler");
new opcja[64], numer[6];

for ( new i = 0; i <= TOTAL - 1; i++ )
{
formatex(opcja, 63, "%s", g_type_names[i]);
menu_additem(menu, opcja, numer[i]);
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(menu, MPROP_EXITNAME, "Wyjscie");
menu_display(id, menu, 0);
}

public menus_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
set_user_health(id, g_type_prices[key]);
menu_destroy(menu);
return PLUGIN_HANDLED;
}


W obu przypadkach jest tak samo, daje tylko 115 hp, pozostałe funkcje nie reagują.
  • +
  • -
  • 0

#10 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 28.04.2011 22:59

#include <amxmodx>
#include <fun>

#define PLUGIN "Test"
#define VERSION "0.1"
#define AUTHOR "x123"

enum _:TOTAL
{
PIERWSZY,
DRUGI,
TRZECI,
CZWARTY
};

new const g_type_names[TOTAL][] =
{
"115",
"130",
"170",
"200"
};

new g_type_prices[TOTAL] =
{
115,
130,
170,
200
};

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /menu", "menus");
}

public menus(id)
{
new menu = menu_create("Testowo", "menus_handler");
new opcja[64];

for ( new i = 0; i < TOTAL; i++ )
{
formatex(opcja, 63, "%s", g_type_names[i]);
menu_additem(menu, opcja);
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(menu, MPROP_EXITNAME, "Wyjscie");
menu_display(id, menu);
}

public menus_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}

set_user_health(id, g_type_prices[item]);

menu_destroy(menu);
return PLUGIN_HANDLED;
}

Tak powinno chyba śmigać, tylko dodałbym jeszcze warunek, żeby sprawdzało, czy gracz żyje, bo tak nie wiem czy nie będzie czasami sypało errorów.

Użytkownik sebul edytował ten post 28.04.2011 23:01

  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo


#11 exexe

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:63
  • Lokalizacja::)
Offline

Napisano 29.04.2011 12:34

Kolego sebul jesteś wielki, działa tak jak chciałem, wielkie dziękuje, plusiki już poleciały :blaga: ^D^
Dostałeś też za inny post plusika, bo bardzo mi pomogłeś.

Temat do zamknięcia, dziękuje za udzieloną pomoc.
  • +
  • -
  • 0

#12 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 29.04.2011 13:13

Ale jeszcze w sumie można by to napisać trochę krócej.
#include <amxmodx>
#include <fun>

#define PLUGIN "Test"
#define VERSION "0.1"
#define AUTHOR "x123"


#define TOTAL 4

new const g_type_names[TOTAL][] =
{
"115",
"130",
"170",
"200"
};

new g_type_prices[TOTAL] =
{
115,
130,
170,
200
};

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /menu", "menus");
}

public menus(id)
{
new menu = menu_create("Testowo", "menus_handler");
new opcja[64];

for ( new i = 0; i < TOTAL; i++ )
{
formatex(opcja, 63, "%s", g_type_names[i]);
menu_additem(menu, opcja);
}
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(menu, MPROP_EXITNAME, "Wyjscie");
menu_display(id, menu);
}

public menus_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}

if(is_user_alive(id)) set_user_health(id, g_type_prices[item]);

menu_destroy(menu);
return PLUGIN_HANDLED;
}

Czyli ten enum raczej był zbędny tutaj.
  • +
  • -
  • 1

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych