Uruchamianie pluginu po wejściu na serwer
Najlepsza odpowiedź
_McHappy
06.11.2016 23:46
Poprawiam, w wersji 1. oprócz wspomnianych anty-zabezpieczeń, trzeba było poprawić buga.
Jeżeli lista serwerów została wyświetlona podczas, gdy otworzone było menu vgui (motd, wybór teamu), handle do menu był zwalniany, z czego wynikał brak reakcji na wybór gracza.
Wersja poprawiona (+metoda ex0):
#include <amxmodx> #include <amxmisc> #define PLUGIN "Menu serwerow" #define VERSION "0.2.2" #define AUTHOR "Sebul" #define SERVERS_FILE "servers_list.ini" #define MAX_SERVERS 32 #define MAX_CHARACTERS 63 new g_servers[MAX_SERVERS][2][MAX_CHARACTERS+1], g_number_server, cvar_pokaz_ip; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /server", "show_server"); register_clcmd("say_team /server", "show_server"); cvar_pokaz_ip = register_cvar("server_show_ip", "1"); register_event( "TeamInfo", "event_druzyna", "a") set_task(1.0, "load_servers"); } public load_servers() { new file_serwers[64]; get_configsdir(file_serwers, 63); formatex(file_serwers, 63, "%s/%s", file_serwers, SERVERS_FILE); g_number_server = 0; new fHandle = fopen(file_serwers, "rt"); if(fHandle) { new data_server[128]; while(g_number_server<MAX_SERVERS && !feof(fHandle)) { fgets(fHandle, data_server, 127); if(!data_server[0] || data_server[0] == ' ' || data_server[0] == ';') continue; if(parse(data_server, g_servers[g_number_server][0], MAX_CHARACTERS, g_servers[g_number_server][1], MAX_CHARACTERS) != 2) continue; ++g_number_server; } fclose(fHandle); } else log_amx("Brak '%s' na serwerze", file_serwers); } public show_server(id) { new menu = menu_create("Lista serwerow - polacz z:", "show_server_handle"); for(new i=0,formats[256],pokaz=get_pcvar_num(cvar_pokaz_ip); i<g_number_server; ++i) { formatex(formats, 255, "%s%s%s", g_servers[i][0], pokaz ? " - \y" : "", pokaz ? g_servers[i][1] : ""); menu_additem(menu, formats); } menu_setprop(menu, MPROP_BACKNAME, "Wroc"); menu_setprop(menu, MPROP_NEXTNAME, "Dalej"); menu_setprop(menu, MPROP_EXITNAME, "Wyjscie"); menu_display(id, menu); return PLUGIN_HANDLED; } public show_server_handle(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } client_cmd(id, ";^"Connect^" %s", g_servers[item][1]); menu_destroy(menu); return PLUGIN_HANDLED; } public event_druzyna() { new id = read_data(1); show_server(id); }Przejdź do postu

RedPower
04.11.2016
Witam,
Proszę o pomoc odnośnie pluginu "serwer".
Chciałbym aby menu serwerów było wyświetlane zaraz po wejściu na serwer najlepiej na środku ekranu.
Z góry dziękuję
#include <amxmodx> #include <amxmisc> #define PLUGIN "Menu serwerow" #define VERSION "0.2.1" #define AUTHOR "Sebul" #define SERVERS_FILE "servers_list.ini" #define MAX_SERVERS 32 #define MAX_CHARACTERS 63 new g_servers[MAX_SERVERS][2][MAX_CHARACTERS+1], g_number_server, cvar_pokaz_ip; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /server", "show_server"); register_clcmd("say_team /server", "show_server"); cvar_pokaz_ip = register_cvar("server_show_ip", "1"); set_task(4.0, "load_servers"); } public load_servers() { new file_serwers[64]; get_configsdir(file_serwers, 63); formatex(file_serwers, 63, "%s/%s", file_serwers, SERVERS_FILE); g_number_server = 0; new fHandle = fopen(file_serwers, "rt"); if(fHandle) { new data_server[128]; while(g_number_server<MAX_SERVERS && !feof(fHandle)) { fgets(fHandle, data_server, 127); if(!data_server[0] || data_server[0] == ' ' || data_server[0] == ';') continue; if(parse(data_server, g_servers[g_number_server][0], MAX_CHARACTERS, g_servers[g_number_server][1], MAX_CHARACTERS) != 2) continue; ++g_number_server; } fclose(fHandle); } else log_amx("Brak '%s' na serwerze", file_serwers); } public show_server(id) { new menu = menu_create("Lista serwerow - polacz z:", "show_server_handle"); for(new i=0,formats[256],pokaz=get_pcvar_num(cvar_pokaz_ip); i<g_number_server; ++i) { formatex(formats, 255, "%s%s%s", g_servers[i][0], pokaz ? " - \y" : "", pokaz ? g_servers[i][1] : ""); menu_additem(menu, formats); } menu_setprop(menu, MPROP_BACKNAME, "Wroc"); menu_setprop(menu, MPROP_NEXTNAME, "Dalej"); menu_setprop(menu, MPROP_EXITNAME, "Wyjscie"); menu_display(id, menu); return PLUGIN_HANDLED; } public show_server_handle(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } client_cmd(id, "wait;Connect %s", g_servers[item][1]); menu_destroy(menu); return PLUGIN_HANDLED; }
_McHappy
04.11.2016
Na środku ekranu się nie da.
Menu wyświetlane zaraz po wejściu gracza na serwer:
#include <amxmodx> #include <amxmisc> #define PLUGIN "Menu serwerow" #define VERSION "0.2.1" #define AUTHOR "Sebul" #define TASK_SHOW_SERVER 775 #define SERVERS_FILE "servers_list.ini" #define MAX_SERVERS 32 #define MAX_CHARACTERS 63 new g_servers[MAX_SERVERS][2][MAX_CHARACTERS+1], g_number_server, cvar_pokaz_ip; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /server", "show_server"); register_clcmd("say_team /server", "show_server"); cvar_pokaz_ip = register_cvar("server_show_ip", "1"); register_message(get_user_msgid("ShowMenu"), "message_show_menu") set_task(1.0, "load_servers"); } public load_servers() { new file_serwers[64]; get_configsdir(file_serwers, 63); formatex(file_serwers, 63, "%s/%s", file_serwers, SERVERS_FILE); g_number_server = 0; new fHandle = fopen(file_serwers, "rt"); if(fHandle) { new data_server[128]; while(g_number_server<MAX_SERVERS && !feof(fHandle)) { fgets(fHandle, data_server, 127); if(!data_server[0] || data_server[0] == ' ' || data_server[0] == ';') continue; if(parse(data_server, g_servers[g_number_server][0], MAX_CHARACTERS, g_servers[g_number_server][1], MAX_CHARACTERS) != 2) continue; ++g_number_server; } fclose(fHandle); } else log_amx("Brak '%s' na serwerze", file_serwers); } public show_server(id) { new menu = menu_create("Lista serwerow - polacz z:", "show_server_handle"); for(new i=0,formats[256],pokaz=get_pcvar_num(cvar_pokaz_ip); i<g_number_server; ++i) { formatex(formats, 255, "%s%s%s", g_servers[i][0], pokaz ? " - \y" : "", pokaz ? g_servers[i][1] : ""); menu_additem(menu, formats); } menu_setprop(menu, MPROP_BACKNAME, "Wroc"); menu_setprop(menu, MPROP_NEXTNAME, "Dalej"); menu_setprop(menu, MPROP_EXITNAME, "Wyjscie"); menu_display(id, menu); return PLUGIN_HANDLED; } public show_server_handle(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } client_cmd(id, "wait;Connect %s", g_servers[item][1]); menu_destroy(menu); return PLUGIN_HANDLED; } public _show_server(id) { id-=TASK_SHOW_SERVER; if(is_user_connected(id)) show_server(id); } public message_show_menu(msgid, dest, id) set_task(0.1, "_show_server", id+TASK_SHOW_SERVER);
RedPower
05.11.2016
Menu jest wyświetlane lecz gdy chce się połączyć z serwerem nic się nie dzieje
Użytkownik RedPower edytował ten post 05.11.2016 08:59
KrwioPijca
05.11.2016
Dzieje się tak ponieważ gracze non steam mają zabezpieczenia przed takimi komendami, by je obejść musiałbyś poszukać na internecie.
NEQU#
05.11.2016
Na ns nie zadziała raczej, dla steama musisz podmienić komendy..
np.
client_cmd(id, "echo ^"^";^"connect^"%s", g_servers[item][1])
ex0
06.11.2016
Niestety nadal nic się nie dzieje
client_cmd(id, ";^"Connect^" %s", g_servers[item][1]);
Najlepsza odpowiedź
_McHappy
06.11.2016
Poprawiam, w wersji 1. oprócz wspomnianych anty-zabezpieczeń, trzeba było poprawić buga.
Jeżeli lista serwerów została wyświetlona podczas, gdy otworzone było menu vgui (motd, wybór teamu), handle do menu był zwalniany, z czego wynikał brak reakcji na wybór gracza.
Wersja poprawiona (+metoda ex0):
#include <amxmodx> #include <amxmisc> #define PLUGIN "Menu serwerow" #define VERSION "0.2.2" #define AUTHOR "Sebul" #define SERVERS_FILE "servers_list.ini" #define MAX_SERVERS 32 #define MAX_CHARACTERS 63 new g_servers[MAX_SERVERS][2][MAX_CHARACTERS+1], g_number_server, cvar_pokaz_ip; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /server", "show_server"); register_clcmd("say_team /server", "show_server"); cvar_pokaz_ip = register_cvar("server_show_ip", "1"); register_event( "TeamInfo", "event_druzyna", "a") set_task(1.0, "load_servers"); } public load_servers() { new file_serwers[64]; get_configsdir(file_serwers, 63); formatex(file_serwers, 63, "%s/%s", file_serwers, SERVERS_FILE); g_number_server = 0; new fHandle = fopen(file_serwers, "rt"); if(fHandle) { new data_server[128]; while(g_number_server<MAX_SERVERS && !feof(fHandle)) { fgets(fHandle, data_server, 127); if(!data_server[0] || data_server[0] == ' ' || data_server[0] == ';') continue; if(parse(data_server, g_servers[g_number_server][0], MAX_CHARACTERS, g_servers[g_number_server][1], MAX_CHARACTERS) != 2) continue; ++g_number_server; } fclose(fHandle); } else log_amx("Brak '%s' na serwerze", file_serwers); } public show_server(id) { new menu = menu_create("Lista serwerow - polacz z:", "show_server_handle"); for(new i=0,formats[256],pokaz=get_pcvar_num(cvar_pokaz_ip); i<g_number_server; ++i) { formatex(formats, 255, "%s%s%s", g_servers[i][0], pokaz ? " - \y" : "", pokaz ? g_servers[i][1] : ""); menu_additem(menu, formats); } menu_setprop(menu, MPROP_BACKNAME, "Wroc"); menu_setprop(menu, MPROP_NEXTNAME, "Dalej"); menu_setprop(menu, MPROP_EXITNAME, "Wyjscie"); menu_display(id, menu); return PLUGIN_HANDLED; } public show_server_handle(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } client_cmd(id, ";^"Connect^" %s", g_servers[item][1]); menu_destroy(menu); return PLUGIN_HANDLED; } public event_druzyna() { new id = read_data(1); show_server(id); }
Użytkownik _McHappy edytował ten post 06.11.2016 23:48