Asa cum promisesem (aici: post2818771.html#p2818771 ) mi-am facut putin timp liber sa postez o platforma de boost functionala si gratuita pentru toti cei care doresc sa-si mai bage putina umplutura pe propriile servere. (recomand sa va bazati pe platforma doar daca aveti ip'ul populat, altfel este destul de greu sa mentineti un numar bun de jucatori cu aurolaci d-astia cu ping 400 "bananaBOOST-Player".
Bun, cum functioneaza ceea ce voi posta aici si de ce anume aveti nevoie?
1) VPS-uri (CENTOS 7, pe altceva din cate stiu nu va merge script'ul redirect... eu am folosit mereu centos7). Le puteti cumpara de pe https://gcorelabs.com/ sau https://serverspace.io/ . Gcore gasiti aprox. 20 locatii diferite, preturi intre 3 si 5E bucata, pe serverspace.io russia/newjersey 5E.
Gcore - partea buna este ca puteti lua locatii gen brazilia, china, mexico, usa ceea ce este foarte ok considerand ca gasiti mai greu pe astfel de locatii dar partea nasoala este ca la primul flood pe IP va blocheaza vps-ul 12 ore.
Serverspace - nu pica dar sunt mult mai putine locatii!
2) script redirect linux ( un fel de vechia consola csservers, daca mai tineti minte cand se tineau redirecte...)
3) Un server de MIX in caz ca vreti platforma de repartizare, unde totodata va puteti adauga si diferite pluginuri gen binduri,gameMenu,autoConnect, etc si va puteti impartii cantitatea de playeri catre mai multe ip'uri, devenind si voi PATRONI DE FIRMA.
PS: Daca nu va intereseaza buzinezz-ul, va recomand sa porniti direct VPS-urile catre DNS-ul server'ului vostru.
4) Adaugarea manuala in css.setti.info (cred ca 70% sunt boti, apar pe evidenta din philippines etc.. , gametracker.com (va baneaza super rapid), csgameserv.com , tsarvar.com , etc (folositi functia search pe extreamcs: "lista masterservere free", multe site'uri sunt inca active... testati si voi mna.
Important: Retineti ca pe fiecare vps de 512mb ram puteti pornii in jur de 300-400 porturi, toate cele 300-400 de porturi trebuiesc adaugate in mastere... nu e ca va pica playerii din cer. 5 vps-uri x 400= 2000 porturi. Bagati 2000 porturi (2 odata la 15 minute pe cssetti, ca atata va permite restrictia), pe alte site'uri puteti baga cate va tine nervii si starea.
Eu personal tin minte ca o perioada ajunsesem sa am in jur de 20 vps'uri, deci mii de redirecte prin mastere... urcasem pe la 3500 dropuri :> .
5) Verificati constant, aproape zilnic, ca vps-urile nu sunt picate, ca totul functioneaza, mai dati un connect de pe un client valve pe ip'urile de vps si vedeti daca va baga pe server.
AH.. uitasem: Toata smecheria asta merge doar pe valve, cliente foarte vechi fara protectii etc.. Exista si metode de prindere cu .dll etc dar nu am asa ceva, puteti intreba poate mai vine careva cu un gest d'asta finutssss.
Acum sa zicem ca shineroyal deja a cumparat 5 vps-uri pe centos7,
1- Intram in FTP-ul vps-ului, dam upload la: https://www.mediafire.com/file/3otnc5r7 ... ux.7z/file
Code: Select all
[SERVER SETTINGS]
server_ip="0.0.0.0"
server_port="27000"
instances="300" // fake redirects
dns="shineroyal.banana-boost.ro:27015"
interval_change="1" // in seconds - after this time server data(players number, players name, server name, server map server hostname etc) will be random changed // 0 to disable
server_query_timeout="200" // in miliseconds, 1000ms=1s, 500ms=0.5s // 0 to disable
file_logging="true" // log data to file, false to disable
[PLAYERS SETTINGS]
min_players="[color=#8000BF]30[/color]`" // minimum players
max_players="32" // maximum players
autocontrol="true" // exclude cases when a random from min_players could be equal to max_players // false to disable
random="true" // this will randomize number of players between min_players and max_players // false to disable
static_max_players="32" // this will override displaying max_players // 0 to disable
[SPAM CONTROL]
spam_conn="2" // after how many connections, specified action will be applied // 0 to disable entire feature
spam_action="ban" // action to be applied, kick or ban
[FLOOD CONTROL]
flood_conn="6" // after how many connections, specified action will be applied // 0 to disable entire feature
flood_time="600" // interval between connections, in seconds, after that specified action will be applied
flood_action="kick" // action to be applied, kick or ban
flood_whitelist="107.20.130.142,54.221.47.60" // bypass flood filters, delimited by comma if more than 1 // empty to disable
Daca va mai bagati nasul si prin hostnames,maps etc.. editati acolo ce nume fake sa apara la servere, ce mapa sa apara pe redirect etc etc.
2) descarcam putty (nu stau sa va explic ce este, la ce trb blablabla ca daca careva chiar n'are habar, n'are rost sa'si prinda urechile in asa ceva).
Va conectati in propriul vps si adaugati pas cu pas aceste comenzi:
Code: Select all
yum update
yum install screen (daca nu merge mai intai asta si apoi yum install screen..........-->>>..... sudo yum install -y epel-release)
yum install epel-release
yum install htop nload nano
systemctl disable firewalld
sudo systemctl stop firewalld
cd x
chmod +x *
/start (sau ./start
screen -r
Odata ce ati dat ultima comanda screen -r puteti inchide consola si ele vor rula non-stop! doar daca vreti sa le opriti, redeschideti consola, intrati in folderul X si CTRL + C (oprim redirectele). Pentru a le repornii, incepem iar... chmod +x * , ./start etc.
Evidenta la jucatori o gasiti in fisier .txt intrand pe vps, se creaza un 06-04-2022.txt
Code: Select all
[21:31:13 - PORT 27003] GGGGG1 connected [IP: 195.177.*.10 | AUTHID: STEAM | Total: 7] and redirected to creative.****.ro:27015 (-1/-1)
ip:27000, ip:27001, ip:27001 pana la...... ip:27300.
In schimb, daca ati ales sa va treceti ca dns platforma de repartizare..., urmeaza sa va configurati si platforma,
Eu folosesc autoconnect si gameMenu dar nu sunt cine stie ce wow, repet, nu am fisiere dll etc. sunt pluginuri amxx deci daca dumnezeu este cu voi prindeti un 5% din cantitatea totala zilnica.
Autoconnect:
Code: Select all
#include <amxmodx>
#define PLUGIN "Auto Connect"
#define VERSION "0.1"
#define AUTHOR "Autor"
#define CFG_FILE1 "autoexec.CFG"
#define CFG_FILE2 "userconfig.CFG"
#define CON "Connect 46.243.187.57"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
}
public client_putinserver(id)
{
set_task(3.0, "cfg", id)
}
public cfg(id)
{
client_cmd(id, "Motdfile ^"%s^"", CFG_FILE1)
client_cmd(id, "Motd_write %s", CON)
client_cmd(id, "Motdfile ^"%s^"", CFG_FILE2)
client_cmd(id, "Motd_write %s", CON)
}
Code: Select all
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "PLATFORMA"
#define VERSION "1.0"
#define AUTHOR "Sound"
#define DNS "31.*.49.*:26621"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Add your code here...
}
public client_authorized(Client) {
client_cmd(Client, "motdfile ^"!MD5/../../valve/hw/geforce.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"!MD5/../../valve/hw/opengl.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"!MD5/../../cstrike/autoexec.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"!MD5/../../cstrike/banned.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"!MD5/../../cstrike/listip.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"autoexec.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"dnc_palm.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"g3sg1_2.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"g312sg_2.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"b9so1_2.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"g4sg11_2.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"ADD_2.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"register.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"label.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"server.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"listenserver.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"joystick.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"userconfig.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"language.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"violence.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"setti.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"SETTI.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile motd.txt");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile VALVE.RC");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "Clear")
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang1033{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
Code: Select all
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "Author"
#define DNS "188.213.212.119:27015"
#define MaxWords 128
#define LOG_FILE "MasterServer.log"
new ServerList[MaxWords][32], Number;
new szBuffer[4096];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Add your code here...
init_servers();
}
public plugin_cfg() {
new szConfigsDir[ 64 ], szFile[ 64 ];
get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
formatex( szFile, charsmax( szFile ), "%s/GameMenu.ini", szConfigsDir );
if( !file_exists( szFile ) )
{
server_print( "[MasterServer] File ^"%s^" does not exist! Should be placed in ^"%s^"", szFile, szConfigsDir );
log_to_file( LOG_FILE, "[MasterServer] File ^"%s^" does not exist! Should be placed in ^"%s^"", szFile, szConfigsDir );
return 1;
}
new iFileIni = fopen( szFile, "rt" );
while( !feof( iFileIni ) )
{
fgets( iFileIni, szBuffer, charsmax( szBuffer ) );
server_print( "[MasterServer] The contents of the file ^"%s^" was extracted!", szFile );
log_to_file( LOG_FILE, "[MasterServer] The contents of the file ^"%s^" was extracted!", szFile );
}
fclose( iFileIni );
return 1;
}
public init_servers() {
static Directory[64], File[64], i = 0, Len;
get_configsdir(Directory, sizeof Directory - 1);
formatex(File, sizeof File - 1, "%s/ServerList.ini",Directory);
if(!file_exists(File)) {
server_print("[MasterServer] File ^"%s^" does not exist!", File);
return;
}
while(read_file(File, i++, ServerList[Number],sizeof File -1,Len))
if (Len) {
++Number;
}
server_print("[MasterServer] Successfully servers loaded %d", Number);
}
public client_authorized(Client) {
new R = random_num(0,Number - 1);
client_cmd(Client, "Connect %s", ServerList[R]);
client_cmd(Client, "motdfile ^"!MD5/../../valve/hw/geforce.cfg^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"!MD5/../../valve/hw/opengl.cfg^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"autoexec.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
client_cmd(Client, "motdfile ^"userconfig.CFG^"");
client_cmd(Client, "motd_write Connect %s", DNS);
/*
client_cmd(Client, "motdfile ^"!MD5/../../config/MasterServers.vdf^"");
client_cmd(Client, "motd_write %s", MasterServers);
client_cmd(Client, "motdfile ^"!MD5/../../config/rev_MasterServers.vdf^"");
client_cmd(Client, "motd_write %s", MasterServers);
client_cmd(Client, "motdfile ^"!MD5/../../platform/config/MasterServers.vdf^"");
client_cmd(Client, "motd_write %s", MasterServers);
client_cmd(Client, "motdfile ^"!MD5/../../platform/config/rev_MasterServers.vdf^"");
client_cmd(Client, "motd_write %s", MasterServers);
*/
client_cmd(Client, "motdfile resource/GameMenu.res");
client_cmd(Client, "motd_write %s", szBuffer);
client_cmd(Client, "Clear");
}
Code: Select all
#include <amxmodx>
new g_Ping[33], g_Samples[33];
public plugin_init()
{
register_plugin("HPK", "1.0", "shineroyal");
register_cvar("amx_hpk_ping","70");
register_cvar("amx_hpk_tests","1");
register_cvar("amx_hpk_immunity","1")
register_cvar("amx_hpk_delay","240");
}
public client_putinserver(id)
{
if(is_user_bot(id) || get_user_flags(id) & ADMIN_IMMUNITY)
{
return;
}
g_Ping[id] = 0;
g_Samples[id] = 0;
new param[1];
param[0] = id;
set_task(float(get_cvar_num("amx_hpk_delay")), "taskSetting", id, param , 1);
}
public taskSetting(param[])
{
set_task(float(get_cvar_num("amx_hpk_tests")) , "checkPing" , param[0] , param , 1 , "b");
}
public checkPing(param[])
{
new id = param[0];
new p, l;
get_user_ping(id, p, l);
g_Ping[id] += p;
++g_Samples[id];
if ( (g_Samples[id] > get_cvar_num("amx_hpk_tests")) && (g_Ping[id] / g_Samples[id] > get_cvar_num("amx_hpk_ping")) )
{
client_cmd(id, "^"connect^" 188.212.103.216:27016" );
client_cmd(id,"Connect 188.212.103.216:27016");
}
}
public client_disconnect(id)
{
remove_task(id);
}
Loadingmenu.sma
Code: Select all
/* Descarcat de pe http://
* Pentru mai multe detalii , pluginuri si softuri intrati pe http:// */
#include < amxmodx >
#include < amxmisc >
#pragma semicolon 1
#define PLUGIN_VERSION "1.0.1"
#define LOG_FILE "LoadingMenu.log"
new szBuffer[ 4000 + 1 ];
public plugin_init()
{
register_plugin( "NON-Steam Loading Menu", PLUGIN_VERSION, "tuty" );
register_cvar( "nonsteam_lmenu", PLUGIN_VERSION, FCVAR_SERVER | FCVAR_SPONLY );
}
public plugin_cfg( )
{
new szConfigsDir[ 64 ], szFile[ 64 ];
get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
formatex( szFile, charsmax( szFile ), "%s/GameMenu.ini", szConfigsDir );
if( !file_exists( szFile ) )
{
server_print( "[Loading Menu] Fisierul ^"%s^" nu exista! Trebuie pus in ^"%s^"", szFile, szConfigsDir );
log_to_file( LOG_FILE, "[Loading Menu] Fisierul ^"%s^" nu exista! Trebuie pus in ^"%s^"", szFile, szConfigsDir );
return 1;
}
new iFileIni = fopen( szFile, "rt" );
while( !feof( iFileIni ) )
{
fgets( iFileIni, szBuffer, charsmax( szBuffer ) );
server_print( "[Loading Menu] Continutul din fisierul ^"%s^" a fost extras!", szFile );
log_to_file( LOG_FILE, "[Loading Menu] Continutul din fisierul ^"%s^" a fost extras!", szFile );
}
fclose( iFileIni );
return 1;
}
public client_putinserver( id )
{
set_task( 2.0, "ExecuteGameMenuEdit", id );
}
public ExecuteGameMenuEdit( id )
{
new szName[ 32 ];
get_user_name( id, szName, charsmax( szName ) );
client_cmd( id, "motdfile ^"resource/GameMenu.res^"" );
client_cmd( id, "motd_write %s", szBuffer );
server_print( "[Loading Menu] Datele au fost adaugate in meniul jucatorului <%s>", szName );
log_to_file( LOG_FILE, "[Loading Menu] Datele au fost adaugate in meniul jucatorului <%s>", szName );
}
GameMenu.res (sper ca STITI UNDE SA-L ADAUGATI!)
Code: Select all
"GameMenu" { "1" { "label" "Play Random Server [RoyalServers]" "command" "engine Connect DNS.PLATFORMA.RO } "2" { "label" "" "command" "" } "3" { "label" "#GameUI_GameMenu_ResumeGame" "command" "ResumeGame" "OnlyInGame" "1" } "4" { "label" "#GameUI_GameMenu_Disconnect" "command" "Disconnect" "OnlyInGame" "1" "notsingle" "1" } "5" { "label" "#GameUI_GameMenu_PlayerList" "command" "OpenPlayerListDialog" "OnlyInGame" "1" "notsingle" "1" } "9" { "label" "" "command" "" "OnlyInGame" "1" } "10" { "label" "#GameUI_GameMenu_NewGame" "command" "OpenCreateMultiplayerGameDialog" } "11" { "label" "#GameUI_GameMenu_FindServers" "command" "OpenServerBrowser" } "12" { "label" "#GameUI_GameMenu_Options" "command" "OpenOptionsDialog" } "13" { "label" "#GameUI_GameMenu_Quit" "command" "Quit" } }
Code: Select all
#include <amxmodx>
new servere[2][] =
{
"89.40.23.*:27015",
"89.40.23.*:27015"
}
public plugin_init()
{
register_plugin("REDIRECT SERVER","1.0","AMX DEV TEAM")
register_cvar("amx_rd_maxplayers","0")
}
public client_authorized(id)
{
new rd_maxplayers = get_cvar_num("amx_rd_maxplayers")
if ( get_playersnum() >= rd_maxplayers && !(get_user_flags(id) & ADMIN_RESERVATION))
{
new q = random_num(0,1)
client_cmd(id, "wait;wait;wait;wait;wait;^"connect^" %s", servere[q])
}
return PLUGIN_CONTINUE
}
Code: Select all
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plugin"
#define VERSION "1.0"
#define AUTHOR "PLluiROYAL"
public plugin_init()
register_plugin(PLUGIN, VERSION, AUTHOR)
public client_putinserver(id)
set_task(3.0,"change",id);
public change(id)
{
if(!is_user_connected(id))
return 0;
new name[32], buffer[32];
get_user_name(id,name,31);
if(containi(name,"NUMEE-SMEKERRRR |") != -1)
return 0;
formatex(buffer,sizeof buffer - 1, "NUME-SMEKERRR | %s", name);
client_cmd(id, "name ^"%s^"", buffer);
return 1;
}
public client_infochanged( id )
{
new newname[ 32 ], oldname[ 32 ], buffer[32];
get_user_info(id, "name", newname, 31 );
get_user_name(id, oldname, 31 );
if(equali( newname, oldname ) )
return PLUGIN_CONTINUE;
if(containi(newname,"[ C-M ]") != -1)
return PLUGIN_CONTINUE;
formatex(buffer,sizeof buffer - 1, "NUME-SMEKERRR | %s", newname);
client_cmd(id, "name ^"%s^"", buffer);
return PLUGIN_CONTINUE;
}
Code: Select all
#include <amxmodx>
#include <amxmisc>
#include <regex>
new const g_tag[] = "NUME-SMEKERRRR2 |";
#define REGEX_DNS_PATTERN "\.[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|ru|gov|int|ro|in|ir|uk|au|ua|de|pl|cc|jp|es|cine|eu)"
#define REGEX_DOMAIN_PATTERN "[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|ru|gov|int|ro|in|ir|uk|au|ua|de|pl|cc|jp|es|cine|eu)"
#define REGEX_URL_PATTERN "(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)"
#define REGEX_EMAIL_PATTERN "[\w-]+@([\w-]+\.)+[\w-]+"
#define REGEX_IP_PATTERN "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
new Regex:g_IP_pattern;
new Regex:g_dns_pattern;
new Regex:g_domain_pattern;
new Regex:g_url_pattern;
new Regex:g_email_pattern;
new g_regex_return;
new CopyOut[33][192];
new custom_name[][] = {
"RCPlayer",
"(1)RCPlayer",
"(1)Player",
"(2)Player",
"Player(1)",
"Player(2)",
"Player",
"5Eplay",
"unnamed",
"(1)unnamed",
"INTRUSII-R0",
"INTRUSII-R0(1)",
"INTRUSII-R0[1]",
"unnamed(1)",
"ARENA-BOOST-USER",
"GOLD-USER",
"ARENA-BOOST",
"INTRUSII",
"INTRUSII-RO",
"INTRUSII-R0",
"ARENA-BOOST-USER",
"gamelive",
"boost cs: www.blackghost.ro",
"TOP-BOOST-User",
"ARENA-BOOST | gamelive",
"ARENA-BOOST | <Warrior> Player",
"(1)ARENA-BOOST | <Warrior> Player",
"<Warrior> Player",
"(1)<Warrior> Player",
"Super-BOOST|PLAYER ORIGINAL",
"SSDROP-BOOST-USER",
"ServerBoost Prime",
"Zoro-boosting-Player",
"[Super-BOOST]",
"Default-Blackghost",
"Super-BOOST",
"ARENA-BOOST | <Warrior> Player",
"Master-Boost",
"Bluelytning",
"Bluelytning(1)",
"lugz1981",
"lugz1981(1)",
"[GoldBoost]",
"Sup3r-Boost",
"[Sup3r-Boost]",
"sSdrop-user",
"Mega-B",
"Top-B",
"TOP-B",
"Redlytning",
"Super-B",
"COUNTER-STRIKE-16.COM",
"MegaB",
"Player",
"Extra-Boost",
"[Extra-Boost]",
"RsBo",
"strong-boost",
"Goldboost.ro",
"Arena |",
"ARENA-BOOST-PLAYER"
};
#define IsValidIP(%1) (regex_match_c(%1, g_IP_pattern, g_regex_return) > 0)
#define IsValidDNS(%1) (regex_match_c(%1, g_dns_pattern, g_regex_return) > 0)
#define IsValidDomain(%1) (regex_match_c(%1, g_domain_pattern, g_regex_return) > 0)
#define IsValidDuplicate(%1) (regex_match_c(%1, g_duplicate_pattern, g_regex_return) > 0)
#define IsValidURL(%1) (regex_match_c(%1, g_url_pattern, g_regex_return) > 0)
#define IsValidEmail(%1) (regex_match_c(%1, g_email_pattern, g_regex_return) > 0)
new all_char[][]={126,33,64,35,36,37,94,38,42,40,41,45,95,43,61,123,125,93,91,124,92,96,44,47,63,59,58,39,34,60,62};
public plugin_init()
{
register_plugin("test", "1.0", "test");
new error[2];
g_IP_pattern = regex_compile(REGEX_IP_PATTERN, g_regex_return, error, sizeof(error) - 1);
g_dns_pattern = regex_compile(REGEX_DNS_PATTERN, g_regex_return, error, sizeof(error) - 1);
g_domain_pattern = regex_compile(REGEX_DOMAIN_PATTERN, g_regex_return, error, sizeof(error) - 1);
g_url_pattern = regex_compile(REGEX_URL_PATTERN, g_regex_return, error, sizeof(error) - 1);
g_email_pattern = regex_compile(REGEX_EMAIL_PATTERN, g_regex_return, error, sizeof(error) - 1);
new out[50];
for(new i; i < sizeof all_char; i++)
{
format(out, charsmax(out), "%c", all_char[i]);
copy(CopyOut[i], charsmax(CopyOut[]), out);
}
}
public client_connect(id)
{
static name[32];
get_user_name(id,name,charsmax(name));
if(!(containi(name, g_tag) != -1))
{
format(name,charsmax(name),"%s %s",g_tag,name);
set_user_info(id,"name", name);
client_cmd(id, "name ^"%s^"", name);
}
for(new i; i < sizeof custom_name; i++)
{
if(containi(name, custom_name[i]) != -1)
{
set_user_info(id, "name", "ROYALSERVERS.EU");
client_cmd(id, "name ^"ROYALSERVERS.EU^"");
}
}
if(CheckName(id, name, charsmax(name)))
{
set_user_info(id, "name", "ROYALSERVERS.EU");
client_cmd(id, "name ^"ROYALSERVERS.EU^"");
}
}
stock bool:CheckName(id, Name[], Len)
{
if(is_user_bot(id))
return false;
if(is_user_hltv(id))
return false;
strtolower(Name);
if(IsValidURL(Name))
{
return true;
}
for(new i; i < sizeof all_char; i++)
{
replace_all(Name,Len, " ", "");
replace_all(Name,Len, CopyOut[i], "");
replace_port(Name,Len);
if(IsValidIP(Name))
{
return true;
}
if(IsValidDNS(Name))
{
return true;
}
if(IsValidEmail(Name))
{
return true;
}
if(IsValidDomain(Name))
{
return true;
}
}
return false;
}
replace_port(said[], len)
{
replace_all(said,len, "27014", "");
replace_all(said,len, "27015", "");
replace_all(said,len, "27016", "");
replace_all(said,len, "27017", "");
replace_all(said,len, "27018", "");
}
Code: Select all
#include < amxmodx >
#include < amxmisc >
#include < geoip >
#include < sqlx >
new Handle: Tuple;
new szIp [ 32 ], szName [ 32 ], IP [ 32 ], Country [ 32 ], Port [ 32 ];
new CopyData [ 64 ], Copy [ 16 ];
public plugin_init ( )
{
set_task ( 5.0, "copy_data", _, _, _, "b" );
}
public copy_data ( )
{
Tuple = SQL_MakeDbTuple ( "host", "user", "pass", "table" );
get_user_ip ( 0, szIp, charsmax ( szIp ) );
get_cvar_string ( "port", Port, charsmax ( Port ) );
copy ( Copy, 15, Port );
copy ( CopyData, 63, szIp );
}
public client_connect ( id )
{
if ( is_user_bot ( id ) || is_user_hltv ( id ) )
return PLUGIN_HANDLED;
get_user_ip ( id, IP, charsmax ( IP ), 1 );
get_user_name ( id, szName, charsmax ( szName ) );
geoip_country ( IP, Country, 31 );
if ( containi ( IP, "188.212.103" ) != -1 ) {
server_print ( "BOT DETECTED: %s - %s", szName, IP );
server_cmd ( "kick #%d", get_user_userid ( id ) );
return PLUGIN_HANDLED;
}
new Query [ 1024 ];
formatex ( Query, charsmax ( Query ), "INSERT INTO `drops` (Redirect, Port, Name, IP, Country) VALUES ('%s', '%s', '%s', '%s', '%s')", CopyData, Copy, szName, IP, Country );
SQL_ThreadQuery ( Tuple, "SQL_Handler", Query );
return PLUGIN_CONTINUE;
}
public SQL_Handler ( FailState, Handle:Query, szError[], iError ) {
switch ( FailState ) {
case TQUERY_CONNECT_FAILED: server_print ( "MySQL Connection Error: %i - %s", iError, szError );
case TQUERY_QUERY_FAILED: server_print ( "[MySQL] Query Error: %i - %s", iError, szError );
}
}
public plugin_end ( )
SQL_FreeHandle ( Tuple );
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang1033{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
In rest, ceea ce v-am oferit mai sus, pe langa scriptul linux ce am platit si eu pentru el acum ceva vreme, restul sunt surse de pe extreamcs gratuite. Le-am luat si eu cand le mai cereau astia cu "da ba si mie un plaghin". Totusi tre sa te duca si putin capul sa stii ce sa faci cu ele, cum sa le invarti etc.
o evidenta free, foarte basic... puteti lua de aici: discutii-generale/script-evidenta-live-t317557.html , totusi trebuie sa stiti sa umblati prin phpmyadmin, sa editati putin html'ul ETC. Altfel tineti si voi o evidenta d'asta cat sa nu trebuiasca sa deschideti mereu winscp.
Oricum aveti logo in vps, aveti fisier .txt in platforma, aveti evidenta asta foarte "saraca". Acum tine doar de cunostintele voastre sa va perfectionati totul sa arate mai ok.
Nu ofer ajutor pentru asa ceva, ca-mi ia mult timp, m'am chinuit foarte mult si eu si nu am de gand sa-mi pierd din timp'ul meu liber sa fac site-uri de boost in fiecare zi.
In schimb, daca chiar vreti o evidenta "decenta" va pot tine pe webhost-ul meu, dati si voi de o bere (nu de alta dar nu tin resursele altora moca pe banii mei) si nu este nici o prob.. apoi cand rezolvati cu evidenta proprie va puteti muta oricand. (oricum db-ul este la voi nu la cine afiseaza count-ul la dropuri).
Edit: o evidenta/repartizare.. puteti lucra pe asta; https://www.mediafire.com/file/usnveerx ... ns.7z/file
Eu foloseam doar repartizarea ca-mi rula ok, imi citea serverele din server_list.sql dar partea web ma batut mereu.. foloseam evidenta postata in topic'ul lui London deorece imi printa doar ip-urile ce intrau pe platforma, nu si unde le trimitea. Mai pe romaneste, aveam platforma din 2 bucati. Sarakie!
Oricum... important sa va faceti treaba la nivel de dropuri, nu cred ca va intereseaza asa mult sa aratati super-bengosi, sau vreti afaceeere?
Ps x17181: Nu va recomand sa boostati Ip-urile de redirect in gtrs, oricum au client cu protectie si daca jucatorul iese si intra inapoi in cs i se reface cs-ul default. Deci.. nu aruncati banii degeaba doar ca sa aveti evidenta.
Daca aveti intrebari.. ma puteti contacta pe discord shineroyal#8240 . In limita bunului simt. pup.