←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Menu graczy z poradnika GwynBleidD'a

  • +
  • -
Lacostii - zdjęcie Lacostii 04.01.2014

Witam serdecznie,

chciałem skorzystać z gotowca do utworzenia menu graczy z tego poradnika, lecz nie wychodzi:

http://amxx.pl/topic...tworzenia-menu/

 

A swój problem opisałem w ostatnim poście, lecz jak nie dostałem odpowiedzi to zakładam osobny temat:

Ten post: http://amxx.pl/topic...e-2#entry600649

 

Taki mam kod obecnie:

public handleSay(id){
	new args[64], arg1[16], arg2[32];
	
	read_args(args, charsmax(args))
	remove_quotes(args)

	strbreak(args, arg1, charsmax(arg1), arg2, charsmax(arg2))
	if (equal(arg1,"/daj", 4)){
		if(arg2[0]){
			new wartosc = str_to_num(arg2)
			if(wartosc <= 0){
				ColorChat(id, GREEN,"[AP] ^x01Poprawne polecenie: ^x04/daj liczba")
				return PLUGIN_HANDLED;
			}

			if(wartosc <= zp_get_user_ammo_packs(id))
				show_przelew(id, wartosc)
			else{
				ColorChat(id, GREEN,"[AP] ^x01Nie posiadasz tyle AP !")
				return PLUGIN_HANDLED;
			}
		}
		else{
			ColorChat(id, GREEN,"[AP] ^x01Poprawne polecenie: ^x04/daj liczba")
			return PLUGIN_HANDLED;
		}
	}
	return PLUGIN_CONTINUE;
}

public show_przelew(id, wartosc){
	new menu = menu_create("Wybierz gracza ktoremu dasz AP", "handle_przelew");
	new players[32], num;
	new name[32], info[25];
	get_players(players, num);
	
	for(new i=0; i<num; ++i){
		if(id == players[i] || is_user_hltv(players[i])) continue;
		get_user_name(players[i], name, 31);
		formatex(info, 24, "%08X%08X%08X", wartosc, players[i], 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[25], access, callback;
	menu_item_getinfo(menu, item, access, info, 24,_, _, callback);
	new tid = hexstr_to_num(info[8], 8);
	new tuserid = hexstr_to_num(info[16], 8);
	new wartosc = hexstr_to_num(info, 8);
	
	client_print(0,print_chat,"id: %d tid: %d tuserid: %d wartosc: %d",id,tid,tuserid,wartosc)
	
	if(is_user_connected(tid) && tuserid == get_user_userid(tid)){
		zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - wartosc)
		zp_set_user_ammo_packs(tid, zp_get_user_ammo_packs(tid) + wartosc)
		
		new aName[32], vName[32]
		get_user_name(id, aName, 31)
		get_user_name(tid, vName, 31)
	
		set_hudmessage(255, 0, 0, -1.0, 0.3, 0, 6.0, 6.0)
		show_hudmessage(0, "%s przekazal %d Ammo Packi dla %s!", aName, wartosc, vName)
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

hexstr_to_num(string[], chars) {
	new result=0;
	for(new i=0; i<chars && string[i]!='^0'; ++i)
		result = result<<4 + (string[i]>'9'?string[i]>'F'?string[i]-'a'+10:string[i]-'A'+10:string[i]-'0');
		
	return result;
}

W tej linijce sprawdzającej ( client_print(0,print_chat ....) , wszystkie wartości oprócz ID są zerem.

Myślę, że ta heksalna technika mogła zawieść ;>


Użytkownik Lacostii edytował ten post 04.01.2014 13:24
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 04.01.2014

A wyświetl bezpośrednio info jako string, zobaczymy czy zawiniła moja metoda konwersji HEXów, czy wpisywanie ich do stringa.
Odpowiedz

  • +
  • -
Lacostii - zdjęcie Lacostii 05.01.2014

userid: 387
[Human] Tester bieli :  /daj 10
string: 0000000A0000000300000183
id: 2 tid: 0 tuserid: 0 wartosc: 0

Pobrałem jeszcze userid przy tworzeniu menu.

Odpowiedz

  • +
  • -
Lacostii - zdjęcie Lacostii 05.01.2014

Załatwiłem to w ten sposób:

public show_przelew(id, wartosc){
	new menu = menu_create("Wybierz gracza ktoremu dasz AP", "handle_przelew");
	new players[32], num;
	new name[32], info[16];
	get_players(players, num);
	
	for(new i=0; i<num; ++i){
		if(id == players[i] || is_user_hltv(players[i])) continue;
		get_user_name(players[i], name, 31);
		formatex(info, 15, "%d %d %d", wartosc, players[i], 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[16], access, callback;
	menu_item_getinfo(menu, item, access, info, 15,_, _, callback);
	
	new arg1[7], arg2[7], arg3[7];
	strbreak(info, arg1, charsmax(arg1), arg2, charsmax(arg2))
	strbreak(arg2, arg2, charsmax(arg2), arg3, charsmax(arg3))
	
	new wartosc = str_to_num(arg1)
	new tid = str_to_num(arg2)
	new tuserid = str_to_num(arg3)

	if(is_user_connected(tid) && tuserid == get_user_userid(tid)){
		zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - wartosc)
		zp_set_user_ammo_packs(tid, zp_get_user_ammo_packs(tid) + wartosc)
		
		new aName[32], vName[32]
		get_user_name(id, aName, 31)
		get_user_name(tid, vName, 31)
	
		set_hudmessage(255, 0, 0, -1.0, 0.3, 0, 6.0, 6.0)
		show_hudmessage(0, "%s przekazal %d Ammo Packi dla %s!", aName, wartosc, vName)
	}
	
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

Obyło się bez tych heksadecymalnych cudów od których głowa boli ;P.

Odpowiedz