· 9 years ago · Jan 15, 2017, 08:58 AM
1new Handle:SQLConn;
2new Handle:SQLTuple;
3
4new Players[MAX_SERVERS];
5new MaxPlayers[MAX_SERVERS];
6new Hostnames[MAX_SERVERS][48];
7new Maps[MAX_SERVERS][48];
8new IPs[MAX_SERVERS][32];
9new OtherServers;
10
11public plugin_init()
12{
13 register_plugin("KushServers", "3.0b", "Kushfield"); // MUUDA HILJEM!
14
15 register_clcmd("say /server", "Servers_Menu");
16 register_clcmd("say /redirect", "Servers_Menu");
17 register_clcmd("say /servers", "Servers_Menu");
18 register_clcmd("say /hop", "Servers_Menu");
19 register_clcmd("say_team /server", "Servers_Menu");
20 register_clcmd("say_team /redirect", "Servers_Menu");
21 register_clcmd("say_team /servers", "Servers_Menu");
22 register_clcmd("say_team /hop", "Servers_Menu");
23
24 set_task(2.0, "KushServerInfo_init");
25}
26
27public plugin_end()
28{
29 SQL_FreeHandle(SQLConn);
30 SQL_FreeHandle(SQLTuple);
31}
32
33public client_authorized(id)
34{
35 if(get_playersnum(1) == MaxPlayers[0])
36 Redirect_User(id);
37}
38
39public KushServerInfo_init()
40{
41 SQLTuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_NAME);
42
43 new ErrorCode, Error[512];
44 SQLConn = SQL_Connect(SQLTuple, ErrorCode, Error, 511);
45 if(!SQLConn) return log_amx("[KushServers] SQL Error: %s", Error);
46
47 get_cvar_string("net_address", IPs[0], 31);
48 get_cvar_string("hostname", Hostnames[0], 47);
49 get_mapname(Maps[0], 47);
50 MaxPlayers[0] = get_maxplayers();
51
52 //if(equali(IPs[0], "0.0.0.0", 7)) replace(IPs[0], 31, "0.0.0.0", "90.191.77.243");
53
54 new query[256];
55 formatex(query, charsmax(query), "CREATE TABLE IF NOT EXISTS `kushserverinfo` (`ip` VARCHAR(32), `name` VARCHAR(48), `map` VARCHAR(48), `players` INT(11), `maxplayers` INT(11), `updated` INT(11), PRIMARY KEY(`ip`));");
56 SQL_ThreadQuery(SQLTuple, "QueryHandle", query);
57 formatex(query, charsmax(query), "DELETE FROM `kushserverinfo` WHERE `updated` < UNIX_TIMESTAMP() - 900;");
58 SQL_ThreadQuery(SQLTuple, "QueryHandle", query);
59
60 KushServerInfo();
61 set_task(15.0, "KushServerInfo", _, _, _, "b");
62 return PLUGIN_HANDLED;
63}
64
65public KushServerInfo()
66{
67 new query[256];
68 formatex(query, charsmax(query), "REPLACE INTO `kushserverinfo` VALUES ('%s', '%s', '%s', %i, %i, UNIX_TIMESTAMP());", IPs[0], Hostnames[0], Maps[0], get_playersnum(1), MaxPlayers[0]);
69 SQL_ThreadQuery(SQLTuple, "QueryHandle", query);
70 formatex(query, charsmax(query), "SELECT `ip`, `name`, `map`, `players`, `maxplayers` FROM `kushserverinfo` WHERE `ip` != '%s' ORDER BY (CASE WHEN `ip` LIKE '%s%%' THEN 1 ELSE 2 END), `ip` ASC;", IPs[0], IPs[0][0]);
71 SQL_ThreadQuery(SQLTuple, "GetServers_QueryHandler", query);
72 return PLUGIN_CONTINUE;
73}
74
75public Servers_Menu(id)
76{
77 new menu = menu_create("\yOur other servers:", "Servers_MenuHandler");
78
79 new formats[128];
80 for(new i = 1; i<=OtherServers; i++)
81 {
82 formatex(formats, 127, "%s\y (\r%i\y/\r%i\y) -\r %s", Hostnames[i], Players[i], MaxPlayers[i], Maps[i]);
83 menu_additem(menu, formats);
84 }
85
86 menu_setprop(menu, MPROP_PERPAGE, 5);
87 menu_display(id, menu, 0);
88 return PLUGIN_HANDLED;
89}
90
91public Servers_MenuHandler(id, menu, item)
92{
93 if(item != MENU_EXIT) Redirect_User(id, item+1);
94 menu_destroy(menu);
95 return PLUGIN_HANDLED;
96}
97
98Redirect_User(id, server = 0)
99{
100 new name[32];
101 get_user_name(id, name, 31);
102 if(server)
103 {
104 client_print_color(0, print_team_blue, "^4%s^3 has been redirected to^4 %s^3 (^4/server^3)", name, Hostnames[server]);
105 server_print("%s has been redirected to %s (/server)", name, Hostnames[server]);
106 }
107 else
108 {
109 server = random_num(1, OtherServers);
110 server_print("%s has been redirected to %s (server full)", name, Hostnames[server]);
111 }
112
113 client_cmd(id,"echo ^"^";^"Connect^" %s", IPs[server]);
114 client_cmd(id,"^"connect^"%s", IPs[server]);
115}
116
117public QueryHandle(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
118{
119 if(iFailState != TQUERY_SUCCESS)
120 {
121 log_amx("[KushServers] SQL Error: %s", szError);
122 }
123 SQL_FreeHandle(hQuery);
124 return PLUGIN_CONTINUE;
125}
126
127public GetServers_QueryHandler(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
128{
129 OtherServers = 0;
130 if(iFailState != TQUERY_SUCCESS)
131 {
132 log_amx("[KushServers] SQL Error: %s", szError);
133 }
134 else if(SQL_NumResults(hQuery))
135 {
136 while(SQL_MoreResults(hQuery))
137 {
138 if(OtherServers >= MAX_SERVERS) return log_amx("[KushServers] Error: Amount of server info in the database exceeds the set maximum of %i!", MAX_SERVERS);
139 OtherServers++;
140 SQL_ReadResult(hQuery, 0, IPs[OtherServers], 31);
141 SQL_ReadResult(hQuery, 1, Hostnames[OtherServers], 47);
142 SQL_ReadResult(hQuery, 2, Maps[OtherServers], 47);
143 Players[OtherServers] = SQL_ReadResult(hQuery, 3);
144 MaxPlayers[OtherServers] = SQL_ReadResult(hQuery, 4);
145 SQL_NextRow(hQuery);
146 }
147 }
148 SQL_FreeHandle(hQuery);
149 return PLUGIN_CONTINUE;
150}