←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Screen Menu do klas

Zablokowany

  • +
  • -
BoB0_ - zdjęcie BoB0_ 16.08.2011

Siemka.

Chciałem sobie zrobić dla zabawy screen menu z klasami z funkcją od R3X'a ale pod zmienieniu kodu plugin się nie wczytuje a errorów brak :/

Oto kawałek który zmieniłem:

public WybierzKlase(id)
{
new menu = smenu_create("Wybierz klase:", "WybierzKlase_Handle");
new klasa[50];
for(new i=1; i <= ilosc_klas; i++)
{
WczytajDane(id, i);
format(klasa, charsmax(klasa), "%s \yPoziom: %i", nazwy_klas[i], poziom_gracza[id]);
smenu_additem(menu, klasa);
}

WczytajDane(id, klasa_gracza[id]);

smenu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
smenu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
smenu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");
smenu_display(id, menu);

client_cmd(id, "spk QTM_CodMod/select");
}

public WybierzKlase_Handle(id, menu, item)
{
client_cmd(id, "spk QTM_CodMod/select");

if(item++ == MENU_EXIT)
{
smenu_destroy(menu);
return PLUGIN_CONTINUE;
}

if(item == klasa_gracza[id] && !nowa_klasa_gracza[id])
return PLUGIN_CONTINUE;

nowa_klasa_gracza[id] = item;

if(klasa_gracza[id])
client_print(id, print_chat, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie.");
else
{
UstawNowaKlase(id);
DajBronie(id);
ZastosujAtrybuty(id);
}

return PLUGIN_CONTINUE;
}


Tutaj tylko pozamieniałem menu na smenu, ale usuwałem Poprzednia strona itp i próbowałem coś poprawić mimo wszystko dalej nie działało mimo że kompilowało się bez problemów. Może pokazać jak to dobrze zrobić i czy w ogóle takie menu może czytać klasy.
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 17.08.2011

W screen menu może być max. 8 elementów menu. W wybierz klasę nie ma żądnych funkcji dotyczących menu, więc nie może to działać.
Odpowiedz

  • +
  • -
BoB0_ - zdjęcie BoB0_ 17.08.2011

Czy da się to w ogóle zrobić?
Klas mam 6.

Jeżeli się da to podrzućcie kod jak to ma wyglądać. Będę bardzo wdzięczny.
Odpowiedz

  • +
  • -
Nomaf - zdjęcie Nomaf 17.08.2011

Fili, pozycji możesz sobie upchnąć ile chcesz, byle by tylko starczyło RAM'u :)
Bobo, jak wywołujesz menu? Poprzez wpisanie komendy, tak? To źle, trzeba przez klawisz, który się przytrzymuje. Chociażby E.
Odpowiedz

  • +
  • -
BoB0_ - zdjęcie BoB0_ 17.08.2011

Wybierz klase jest przypisane do komendy /klasa. Ale na razie nie w tym problem.

Gdy dodam to co jest teraz do kody Codmod'a to plugin się nie wczytuje :/

W liście pluginów pisz error a wszystkie klasy i perki są automatycznie wyłączane.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 18.08.2011

amx_showrcon amxx list

diagnozuj
Odpowiedz

  • +
  • -
BoB0_ - zdjęcie BoB0_ 21.08.2011

Pisze tylko
bad load
czyli nic ciekawego :/

Może trzeba jakieś pliki wrzucić na serwer?

Dodaje w załączniku .sma może ktoś pomoże.

Załączone pliki

Odpowiedz

  • +
  • -
A może sma? - zdjęcie A może sma? 21.08.2011

No a wgrałeś plugin - matkę? Który umożliwia tworzenie menu?
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 21.08.2011

bad load jest wręcz arcyciekawe! oznacza, że plugin nie został dobrze zainstalowany, pewnie nie wrzuciłeś samego ScreenMenu.amxx albo wrzuciłeś ale pod codmodem
Odpowiedz

  • +
  • -
BoB0_ - zdjęcie BoB0_ 21.08.2011

R3X zrobiłem właśnie tak jak napisałeś. Dziękuję za pomoc ale jest kolejny problem. Otóż menu mam pod komendą /klasa i po wejściu na serwer wyświetal się menu trochę rozjechane ale jest. Nie mogę wybrać żadnej z opcji. Po prostu menu sobie jest na ekranie i tyle. Muszę to zbindować pod jakiś klawisz czy coś w tym stylu? Da radę zrobić to pod tą komendę?
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 21.08.2011

jak robiłem coś podobnego to /klasa robiła display, a lewy czy prawy klawisz myszy close()

a i nie wiem czy o tym już wspominałem, ale menu nie będzie działać na nieżywych graczach (chyba że na freelook)
Odpowiedz

  • +
  • -
BoB0_ - zdjęcie BoB0_ 21.08.2011

Coś takiego?

new menuklas;


register_clcmd("say /klasa", "cmdStartWybierz");
register_clcmd("say /class", "cmdStartWybierz");
register_clcmd("mouse1", "cmdStopWybierz");


public WybierzKlase(id)
{
menuklas = smenu_create("Wybierz klase:", "WybierzKlase_Handle");
new klasa[50];
for(new i=1; i <= ilosc_klas; i++)
{
WczytajDane(id, i);
format(klasa, charsmax(klasa), "%s \yPoziom: %i", nazwy_klas[i], poziom_gracza[id]);
smenu_additem(menuklas, klasa);
}

WczytajDane(id, klasa_gracza[id]);

smenu_display(id, menu);

client_cmd(id, "spk QTM_CodMod/select");
}

public WybierzKlase_Handle(id, menu, item)
{

if(item > 0)
client_print(id, print_chat, "Wybrales opcje %d", item);

client_cmd(id, "spk QTM_CodMod/select");

if(item++ == MENU_EXIT)
{
smenu_destroy(menu);
return PLUGIN_CONTINUE;
}

if(item == klasa_gracza[id] && !nowa_klasa_gracza[id])
return PLUGIN_CONTINUE;

nowa_klasa_gracza[id] = item;

if(klasa_gracza[id])
client_print(id, print_chat, "[COD:MW] Klasa zostanie zmieniona w nastepnej rundzie.");
else
{
UstawNowaKlase(id);
DajBronie(id);
ZastosujAtrybuty(id);
}

return PLUGIN_CONTINUE;
}

public cmdStartWybierz(id){
smenu_display(id, menuklas);
return PLUGIN_HANDLED;
}
public cmdStopWybierz(id){
smenu_exit(id);
return PLUGIN_HANDLED;
}


??
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 21.08.2011

nie mouse1 tylko łap cmd_start czy prethink i sprawdzaj klawisze :P to by było zbyt proste
Odpowiedz

  • +
  • -
BoB0_ - zdjęcie BoB0_ 21.08.2011

Możesz podrzucić kod jak masz pod ręką? Nie wiem ocb z tym co napisałeś.

W jaki sposób się wybiera opcje z menu?

@edit.

public fwPlayerPreThink(id){
if(!is_user_alive(id))
return FMRES_IGNORED;

static buttons, oldbuttons;
buttons = pev(id, pev_button);
oldbuttons = pev(id, pev_oldbuttons);

if(player_smenu_info(id) == menu){
if(buttons&IN_USE == 0)
smenu_exit(id);
}else{
new Float:fNow = get_gametime();
if(buttons&IN_USE && oldbuttons&IN_USE == 0)
gfLastUse[id] = fNow;
else{
if(fNow-gfLastUse[id] < 0.1)
smenu_display(id, menu, -2);
}
}
return FMRES_IGNORED;
}


Coś takiego? Na co zamienić IN_USE?
Użytkownik BoB0_ edytował ten post 21.08.2011 23:00
Odpowiedz

  • +
  • -
BoB0_ - zdjęcie BoB0_ 21.08.2011

Zrobiłem coś takiego:

public client_PreThink(id)
{
new button = get_user_button(id)

if(zmienna[id]==0 && button & IN_ATTACK) smenu_exit(id);

if(button & IN_ATTACK) zmienna[id] = 1
else zmienna[id] = 0
}


I usunąłem z tym mouse1. Jest jeszcze jeden problem. Otóż zaraz po wejściu na serwer wyświetla się to menu ale nie mogę wybrać żadnej opcji. Mogę korzystać z broni ale nie są one pokazywane. Po wciśnięciu mouse1 menu się nie zamyka. Jest widoczne przez cały czas :/
Odpowiedz

  • +
  • -
A może sma? - zdjęcie A może sma? 21.08.2011

Musisz usunąć z silnika CoDa pokazywanie menu jeżeli nie ma się klasy:

public Odrodzenie(id)
{
if(!task_exists(id+ZADANIE_POKAZ_INFORMACJE))
set_task(0.1, "PokazInformacje", id+ZADANIE_POKAZ_INFORMACJE, _, _, "b");

if(nowa_klasa_gracza[id])
UstawNowaKlase(id);

/*if(!klasa_gracza[id])
{
WybierzKlase(id);
return PLUGIN_CONTINUE;
}*/ //usun to co zakomentowałem

DajBronie(id);
ZastosujAtrybuty(id);

if(punkty_gracza[id] > 0)
PrzydzielPunkty(id);

return PLUGIN_CONTINUE;
}
Odpowiedz

  • +
  • -
BoB0_ - zdjęcie BoB0_ 21.08.2011

To wykluczyło tylko błąd po zrespieniu. Ale gdy otworzę menu przez komendę dalej nie mogę wybrać opcji i problem jest taki sam jak opisałem na górze.
Odpowiedz
Zablokowany