←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Problem z wyświetleniem nicku...

Zablokowany

  • +
  • -
Andrzejek - zdjęcie Andrzejek 22.11.2012

Witam, mam pewien problem z wyświetleniem nicku gracza tylko wyświetla się nazwa serwera o to funkcja chodzi o nick2:


stock menu_players(id, CsTeams:team, skip, alive, callback[], title[], any:...)
{
static i, name[32], num[5], menu, menuname[32]
vformat(menuname, charsmax(menuname), title, 7)
menu = menu_create(menuname, callback)
for(i = 1; i <= g_MaxClients; i++)
{
if(!is_user_connected(i) || (alive && !is_user_alive(i)) || (skip == i))
continue

if(!(team == CS_TEAM_T || team == CS_TEAM_CT) || ((team == CS_TEAM_T || team == CS_TEAM_CT) && (cs_get_user_team(i) == team)))
{
get_user_name(i, name, charsmax(name))
num_to_str(i, num, charsmax(num))
menu_additem(menu, name, num, 0)
}
}
menu_display(id, menu)
}

public Menu_FreeDay(id)
{
if(prowadzacy_id == id && prowadzacy == 1 && is_user_alive(id))
menu_players(id, CS_TEAM_T, id, 1, "wybor_gracza_freeday", "\yWybierz gracza:")

return PLUGIN_CONTINUE
}

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

static dst[32], data[5], access, callback

menu_item_getinfo(menu, item, access, data, charsmax(data), dst, charsmax(dst), callback)

new target[33], body
get_user_aiming(id, target[id], body)

get_user_name(id, nick, 31)
get_user_name(target[id], nick2, 31)

set_hudmessage(0, 255, 0, -1.0, 0.24, 0, 6.0, 5.0)
show_hudmessage(0, "%s dal FreeDay'a wiezniowi %s", nick, nick2)

blokada[target[id]] = true
freeday = true
entity_set_int(target[id], EV_INT_skin, 3)

return PLUGIN_HANDLED
}
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 22.11.2012

Nie czytałeś widzę mojego poradnika:
http://amxx.pl/topic...tworzenia-menu/

Tam masz ładny przykład jak dobrze zrobić menu z graczami. Możesz dodać swoje warunki tam i wszystko będzie ładnie działać. Twój sposób jest trochę na "dziko", zobacz jakie błędy popełniasz.

get_user_name z podanym 0 jako indeks powinno pokazać nazwę serwera... Tak mi się przynajmniej wydaje, sprawdź to ;)


Więc skoro to prawda, to gdzieś musiało Ci się 0 wkraść do get_user_name.
speedkill (22.11.2012 20:15):
Tak, get_user_name z indeksem 0 pokaże nazwę serwera ;)

Użytkownik GwynBleidD edytował ten post 22.11.2012 20:31
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 23.11.2012

No mam funkcje, ale nie wiem za bardzo jak to dodać do tego:


public show_przelew(id, wartosc) {
new menu = menu_create("Wybierz gracza do przelania kasy", "handle_przelew");

new players[32], num;
new name[32], info[3];
get_players(players, num);
for(new i=0; i<num; ++i) {
get_user_name(players[i], name, 31);
info[0] = wartosc;
info[1] = players[i];
info[2] = get_user_userid(players[i]);
menu_additem(menu, name, info);
}

menu_display(id, menu);
}

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

new info[3], access, callback;
menu_item_getinfo(menu, item, access, info, 3,_, _, callback);
if(is_user_connected(info[0]) && info[2] == get_user_userid(info[0]))
przelej_kase(id, info[1], info[0]);

menu_destroy(menu);
return PLUGIN_HANDLED;
}
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 23.11.2012

Nie możesz robić czegoś takiego
info[0] = wartosc;

wartość zapewne może przyjmować spore wartości i właśnie przy tych większych wartościach będzie to źle działać, bo 3 parametr "menu_additem" ma ograniczenia i większych liczb jak 127 nie przyjmie, a raczej powyżej takiej liczby, będą działy się "cuda".
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 23.11.2012

Z Deathrun_wyścig:
public ShowMenu(id){
	new Menu = menu_create("Wybierz gracza:", "MenuChoose");
	
	new szBuffer[2][64];
	
	for(new i = 1; i < 33; i++)
	{
		if(is_user_alive(i)){
			
			get_user_name(i, szBuffer[0], 63);
			num_to_str(i, szBuffer[1], 63);
			
			menu_additem(Menu, szBuffer[0], szBuffer[1]);
		}
	}
	
	menu_setprop(Menu, MPROP_EXITNAME, "Wyjdz");
	menu_display(id, Menu);
}
public MenuChoose(id, menu, item){
	if(item == MENU_EXIT){
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	new iAccess, i, iCallBack;
	new szInfo[64];
	
	menu_item_getinfo(menu, item, iAccess, szInfo, 63, _, _, iCallBack);
	i = str_to_num(szInfo); // id wybranej osoby
	
	if(is_user_alive(i)){
		//Kod
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 23.11.2012

No to widzę, że kolega jakoś szczególnie biegły w programowaniu nie jest, więc trzeba więcej pomocy ;)

Zgadzam się z kol. sebul, to nie będzie działać jak za id, userid albo wartosc podstawi się zbyt dużą liczbę... Ale i na to jest obejście, można podzielić liczbę na kilka mniejszych. Poprawiony kod z Twoimi warunkami:
stock menu_players(id, CsTeams:team, skip, alive, callback[], title[], any:...)
{
new menu, menuname[32]
vformat(menuname, charsmax(menuname), title, 7)
menu = menu_create(menuname, callback)


new players[32], num;
new name[32], info[4];
get_players(players, num);
for(new i=0; i<num; ++i) {
if(alive && !is_user_alive(i))
continue;

if(skip == i)
continue;

if(cs_get_user_team(i) != team)
continue;

get_user_name(players[i], name, 31);
info[0] = players[i];
new userid = get_user_userid(players[i]);
info[1] = userid%256;
info[2] = userid/256;
info[3] = 0; // musimy udawać, że to string, więc null na końcu
menu_additem(menu, name, info);
}

menu_display(id, menu);
}


PS. fajny warunek :D
!(team == CS_TEAM_T || team == CS_TEAM_CT) || ((team == CS_TEAM_T || team == CS_TEAM_CT)

nie prościej true? ;)
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 23.11.2012

Ten warunek był z gotowca. Chodzi mi dokładnie o menu które wyświetla wszystkich żyjących graczy z tt oraz nie wyświetla graczy którzy maja juz fd. Po wybraniu gracza wlacza się:


get_user_name(id, nick, 31)
get_user_name(target[id], nick2, 31)

set_hudmessage(0, 255, 0, -1.0, 0.24, 0, 6.0, 5.0)
show_hudmessage(0, "%s dal FreeDay'a wiezniowi %s", nick, nick2)

blokada[target[id]] = true
freeday = true
entity_set_int(target[id], EV_INT_skin, 3)

Użytkownik Andrzejek edytował ten post 23.11.2012 11:45
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 25.11.2012

O takie coś chodzi ?
public ShowMenu(id){
    new Menu = menu_create("Wybierz gracza:", "MenuChoose");

    new szBuffer[2][64];

    for(new i = 1; i < 33; i++){
        if(is_user_alive(i) && get_user_team(i) == 1){

            get_user_name(i, szBuffer[0], 63);
            num_to_str(i, szBuffer[1], 63);

            menu_additem(Menu, szBuffer[0], szBuffer[1]);
        }
    }

    menu_setprop(Menu, MPROP_EXITNAME, "Wyjdz");
    menu_display(id, Menu);
}
public MenuChoose(id, menu, item){
    if(item == MENU_EXIT){
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    new iAccess, i, iCallBack;
    new szInfo[64];

    menu_item_getinfo(menu, item, iAccess, szInfo, 63, _, _, iCallBack);
    i = str_to_num(szInfo); // id wybranej osoby

    if(is_user_alive(i) && get_user_team(i) == 1){
        //Kod dla wybranego gracza np. set_user_health(i, 120);

        new g_Name[2][64];

        get_user_name(id, g_Name[0], 63);
        get_user_name(i, g_Name[1], 63);

        set_hudmessage(0, 255, 0, -1.0, 0.24, 0, 6.0, 5.0);
        show_hudmessage(0, "%s dal FreeDay'a wiezniowi %s", g_Name[0], g_Name[1]);

        blokada[i] = true;
        freeday = true;
        entity_set_int(i, EV_INT_skin, 3);
    }

    menu_destroy(menu);
    return PLUGIN_HANDLED;
}
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 25.11.2012

A jak gracz juz ma freedaya to tez go pokazuje?
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 25.11.2012

Która zmienna odpowiada za to, czy gracz ma freeday'a czy nie ;) ?
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 25.11.2012

chyba ta:
blokada[i] = true;


Ale zawsze można zrobić osobna
Użytkownik Andrzejek edytował ten post 25.11.2012 12:36
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 25.11.2012

public ShowMenu(id){

	new Menu = menu_create("Wybierz gracza:", "MenuChoose");

	

	new szBuffer[2][64];

	

	for(new i = 1; i < 33; i++){

		if(is_user_alive(i) && get_user_team(i) == 1 && !blokada[i]){

			

			get_user_name(i, szBuffer[0], 63);

			num_to_str(i, szBuffer[1], 63);

			

			menu_additem(Menu, szBuffer[0], szBuffer[1]);

		}

	}

	

	menu_setprop(Menu, MPROP_EXITNAME, "Wyjdz");

	menu_display(id, Menu);

}

public MenuChoose(id, menu, item){

	if(item == MENU_EXIT){

		menu_destroy(menu);

		return PLUGIN_HANDLED;

	}

	

	new iAccess, i, iCallBack;

	new szInfo[64];

	

	menu_item_getinfo(menu, item, iAccess, szInfo, 63, _, _, iCallBack);

	i = str_to_num(szInfo); // id wybranej osoby

	

	if(is_user_alive(i) && get_user_team(i) == 1 && !blokada[i]){

		//Kod dla wybranego gracza np. set_user_health(i, 120);

		

		new g_Name[2][64];

		

		get_user_name(id, g_Name[0], 63);

		get_user_name(i, g_Name[1], 63);

		

		set_hudmessage(0, 255, 0, -1.0, 0.24, 0, 6.0, 5.0);

		show_hudmessage(0, "%s dal FreeDay'a wiezniowi %s", g_Name[0], g_Name[1]);

		

		blokada[i] = true;

		freeday = true;

		entity_set_int(i, EV_INT_skin, 3);

	}

	

	menu_destroy(menu);

	return PLUGIN_HANDLED;

}
Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 25.11.2012

Dzięki masz +

Można zamknać
Użytkownik Andrzejek edytował ten post 25.11.2012 13:20
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 25.11.2012

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany