Проблем: Спам в конзолата на сървъра, изписва нули

Въпроси и проблеми свързани с ReHLDS и допълненията.
Аватар
Dvstoyanov89
Извън линия
Потребител
Потребител
Мнения: 41
Регистриран на: 11 Май 2019, 14:04
Се отблагодари: 11 пъти
Получена благодарност: 6 пъти

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от Dvstoyanov89 » 22 Юли 2019, 18:36

Здравейте, на тестов сървър излиза проблем в конзолата. Постоянно спами в конзолата, когато влезе играч.

Изображение

На снимката се вижда 5 реда, но принципно са безкрай..

Аватар
Autumn Shade
Извън линия
Потребител
Потребител
Мнения: 269
Регистриран на: 14 Мар 2019, 13:20
Се отблагодари: 48 пъти
Получена благодарност: 150 пъти

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от Autumn Shade » 22 Юли 2019, 18:39

Сигурно и плъгини нямаш на тоя сървър, те така... Дай малко информация, поспри плъгин по плъгин и кажи откъде идва проблема. Локализирай го преди да пуснеш тема, в която всички да гадаем откъде идва проблема на твоя сървър. Не е от custom.hpk, защото това е файл за спрейове.

Аватар
<VeCo>
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 145
Регистриран на: 28 Яну 2019, 19:01
Се отблагодари: 11 пъти
Получена благодарност: 80 пъти
Обратна връзка:

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от <VeCo> » 22 Юли 2019, 18:41

Спри плъгините и виж дали пак става така, явно е от някой плъгин. Винаги компилирай от .sma, не ползвай готови .amxx файлове, в които не знаеш какво има вътре.
:pepo_think3:

Аватар
Dvstoyanov89
Извън линия
Потребител
Потребител
Мнения: 41
Регистриран на: 11 Май 2019, 14:04
Се отблагодари: 11 пъти
Получена благодарност: 6 пъти

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от Dvstoyanov89 » 22 Юли 2019, 18:56

Забелязох, че това са играчите, всяка 0 е 1 играч. Понеже ползвам potti за тест и усетих, че колкото бота пусна толкова 0 излизат. Като до преди малко го нямаше това..

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от mi0 » 22 Юли 2019, 18:59

Ако искаш, качи кода Potti тук и ще го оправим.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
Dvstoyanov89
Извън линия
Потребител
Потребител
Мнения: 41
Регистриран на: 11 Май 2019, 14:04
Се отблагодари: 11 пъти
Получена благодарност: 6 пъти

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от Dvstoyanov89 » 22 Юли 2019, 19:02

Възможно ли е да не е от него, понеже и аз като вляза дето не съм бот, пак излиза 0..

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от mi0 » 22 Юли 2019, 19:26

До като не качиш кода му, ние няма как да открием.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
Dvstoyanov89
Извън линия
Потребител
Потребител
Мнения: 41
Регистриран на: 11 Май 2019, 14:04
Се отблагодари: 11 пъти
Получена благодарност: 6 пъти

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от Dvstoyanov89 » 22 Юли 2019, 20:32

Ето го кода, свален е от този форум, редактиран да е с повече ботове.

Код за потвърждение: Избери целия код

/************************************************************************************************
*
*				Potti v1.40, by p3tsin
*
*************************************************************************************************
*
*	Description:
*		Allows admins to create a bot which can be fully controlled,
*		e.g. move it and handle its menus
*
*	Commands:
*		amx_botadd <name>	- create a new bot
*		amx_botexec <cmd>	- execute a command on your bot
*		amx_botmove <0-3>	- 0: off
*					  1: copy your movements
*					  2: same as #1 + aim the same spot when shooting
*					  3: look the opposite way and do the opposite moves
*		amx_botcmds <1/0>	- when enabled, all owner commands are sent to his/her bot
*		amx_botdel		- kick your bot off the server
*
*	Server cvars:
*		potti_hudcolor <r g b>	- changes the color of the hud message
*		potti_hudpos <x y>	- changes the position of the hud message
*
*	Note:
*		When executing commands, only engine cmds will work, so for example cvars cannot
*		be changed. Also, I recommend you bind a button to "messagemode amx_botexec",
*		it will be more comfortable to use than opening console every time :)
*
*
*	To Do:
*		- nothing really (don't feel like messing with buyzone)
*
*	Known bugs:
*		- (cs) when owner is dead, pressing duck will open the specmenu which is really annoying :(
*		- (cs) can't open buymenu via fullcontrol mode if not in buyzone (or dead)
*
*
*	Changelog:
*		1.00 - Initial release
*		1.10 - Added full control mode
*		     - Shows money left on a bot when a buymenu is opened
*		1.20 - Modified so everyone (with access) can have their own bot
*		     - Cstrike-module is no more needed to display money
*		     - After dying, the owner will automatically move to spectating to his/her bot if botmove is on
*		     - Messages printed to a bot (to center and chat) are shown to its owner too
*		     - Fixed bot latency to show as "BOT"
*		     - More efficient msec calculations
*		     - Other little improvements
*		1.30 - Added support for The Specialists (press 6 to switch to kungfu when in fullcontrol mode)
*		     - Added botmove 3 to make the bot do the opposite of the owner
*		     - Added a hudtext to show player health, weapon, etc.
*		     - Access level changed from "m" to "p" ^_^
*		     - Removed mod specific definitions
*		1.40 - Changed owner input hooking style, making it possible for bots to walk and use impulses (flashlight, spray, ..)
*		     - A little tweaking here and there
*
*
*	Credits:
*		Botman - the source of PODBots helped alot while doing this
*		Lord of Destruction - aim_at_origin() base taken from set_client_aiming()
*		THE_STORM - more efficient msec calculations (from ePODbot)
*		strelomet - display bot latency as "BOT" (from YaPB)
*		Orangutanz - thanks for pointing out the few improvements ;)
*		Karko - thanks for helping with adding support for TS
*
*
************************************************************************************************/


#define ACCESS		ADMIN_LEVEL_D	//access level for bot commands, D is "p" in users.ini
#define HUD_CHANNEL	4		//hud channel for showing bot info

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

new const plugin[] =	"Potti"
new const version[] =	"1.40"
new const author[] =	"p3tsin"

new using_mod		//1: cstrike, 2: specialists, 0: other
new money_offset	//didnt want to include cstrike just for cs_get_user_money, so i used fakemeta

new botindex[33], botowner[33]
new botinfo[33], hasmenu[33]
new copymovements[33]
new bool:fullcontrol[33]

new Float:botmove[33][3]
new Float:botangles[33][3]
new botbuttons[33]
new botimpulses[33]

new botsnum
new gMsg_ShowMenu
new gMsg_TextMsg

new cv_hudcolor
new cv_hudpos

new fow_serverframe
new fow_cmdstart
new fow_clientkill

/* botinfos */
enum {
	info_none = 0,
	info_motd
}

new slotsnum
new slotmenukeys
new currentweapon[33][3]
new weapon_slots[6][32]

const TASK_BOTINFO = 54387		//random task id for check_botinfo

/* commands which are not blocked/executed in fullcontrol mode */
new const fullcontrol_cmds[7][] = {
	"amx_botadd", "amx_botexec", "amx_botmove", "amx_botcmds", "amx_botdel",
	"specmode", "follow"
}

// ================================================================================================
// ================================================================================================

#define get_user_money(%1) get_pdata_int(%1,money_offset)
#define Distance2D(%1,%2) floatsqroot((%1*%1) + (%2*%2))
#define Radian2Degree(%1) (%1 * 180.0 / M_PI)			//(%1 * 360.0 / (2 * M_PI))

// ================================================================================================
// ================================================================================================

public plugin_init() {
	register_plugin(plugin,version,author)
	register_clcmd("amx_botadd",	"makebot",ACCESS, "<name> - Create a new bot")
	register_clcmd("amx_botexec",	"execbot",ACCESS, "<cmd> - Execute a command on your bot")
	register_clcmd("amx_botmove",	"movebot",ACCESS, "<0-2> - Make the bot copy your movements")
	register_clcmd("amx_botcmds",	"cmdsbot",ACCESS, "<0/1> - Send all commands to your bot")
	register_clcmd("amx_botdel",	"removebot",ACCESS, "- Kicks your bot")

	register_clcmd("say",		"catch_say")
	register_clcmd("say_team",	"catch_say")

	static mod[20]
	get_modname(mod,19)
	if(equal(mod,"cstrike") || equal(mod,"czero") || equal(mod,"csv15") || equal(mod,"cs13")) using_mod = 1
	else if(equal(mod,"ts")) using_mod = 2

	register_event("DeathMsg",	"event_deathmsg", "a")
	register_event("MOTD",		"event_motd", "b")
	register_event("ResetHUD",	"event_resethud", "be")
	register_event("ShowMenu",	"event_showmenu", "b")
	register_event("TextMsg",	"event_textmsg", "b", "1=4")		//take only print_center

	switch(using_mod) {		//mod specific events
		case 1: register_event("Spectator",	"event_spectator", "a", "2=1")
		case 2: {
			register_event("ClipInfo",	"event_clipinfo", "be")
			register_event("WeaponInfo",	"event_weaponinfo", "be")	//ts_getuserwpn didnt work right (for a bot)
			register_event("WStatus",	"event_wstatus", "be")		//updates pev_weapons to make slotmenu work
		}
	}

	gMsg_ShowMenu = get_user_msgid("ShowMenu")
	gMsg_TextMsg = get_user_msgid("TextMsg")

	cv_hudcolor = register_cvar("potti_hudcolor","50 150 200")
	cv_hudpos = register_cvar("potti_hudpos","0.82 0.85")
}

public plugin_cfg() {
	switch(using_mod) {		//mod specific weapons and other settings
		case 1: {
			slotsnum = 5
			set_weaponslot(1,{ 3,5,7,8,12,13,14,15,18,19,20,21,22,23,24,27,28,30,0 })
			set_weaponslot(2,{ 1,10,11,16,17,26,0 })
			set_weaponslot(3,{ 29,0 })
			set_weaponslot(4,{ 4,9,25,0 })
			set_weaponslot(5,{ 6,0 })
			money_offset = is_amd64_server() ? 140 : 115
		}
		case 2: {
			slotsnum = 6
			set_weaponslot(1,{ 24,25,34,35,0 })
			set_weaponslot(2,{ 1,9,12,14,22,28,31,0 })
			set_weaponslot(3,{ 3,6,7,17,19,23,0 })
			set_weaponslot(4,{ 4,5,11,13,15,18,20,26,27,32,33,0 })
			set_weaponslot(5,{ 8,10,16,21,30,0 })
			set_weaponslot(6,{ 36,0 })	//kungfu id is 0, so i had to make a special case for it
		}
//		default: slotsnum = 0
	}
	for(new i = 0; i < slotsnum; i++) slotmenukeys |= (1<<i)
}

set_weaponslot(slot,weapons[]) {
	slot--
	new len = strlen(weapons)
	for(new i = 0; i < len; i++) weapon_slots[slot][i] = weapons[i]
}

public client_disconnect(id) {
	if(is_user_bot(id)) {
		new owner = botowner[id]
		if(owner) {
			copymovements[owner] = 0, botowner[id] = 0
			botindex[owner] = 0
			if(!--botsnum) bot_delforwards()
		}
	}
	else {
		new bot = botindex[id]
		if(is_user_connected(bot)) server_cmd("kick #%d",get_user_userid(bot))
		fullcontrol[id] = false, copymovements[id] = 0
		hasmenu[id] = 0, botindex[id] = 0
	}
}

// ================================================================================================
// ================================================================================================

public makebot(id,level,cid) {
	if(!cmd_access(id,level,cid,2))
		return PLUGIN_HANDLED

	static name[32]
	read_args(name,31)
	remove_quotes(name)
	trim(name)
	new bot = engfunc(EngFunc_CreateFakeClient,name)
	if(!bot) {
		console_print(id, "[%s] Couldn't create a bot, server full?",plugin)
		return PLUGIN_HANDLED
	}

	engfunc(EngFunc_FreeEntPrivateData,bot)
	bot_settings(bot)

	if(!botsnum) bot_addforwards()

	static szRejectReason[128]
	dllfunc(DLLFunc_ClientConnect,bot,name,"127.0.0.1",szRejectReason)
	if(!is_user_connected(bot)) {
		if(!botsnum) bot_delforwards()
		console_print(id, "[%s] Connection rejected: %s",plugin,szRejectReason)
		return PLUGIN_HANDLED
	}

	dllfunc(DLLFunc_ClientPutInServer,bot)
	set_pev(bot,pev_spawnflags, pev(bot,pev_spawnflags) | FL_FAKECLIENT)
	set_pev(bot,pev_flags, pev(bot,pev_flags) | FL_FAKECLIENT)

	reset_controls(id)
	fullcontrol[id] = false, copymovements[id] = 0
	botindex[id] = bot, botowner[bot] = id
	hasmenu[id] = 0, botsnum++

	console_print(id, "[%s] Bot successfully created! Id: %d, name: %s",plugin,bot,name)
	return PLUGIN_HANDLED
}

public execbot(id,level,cid) {
	if(!cmd_access(id,level,cid,2))
		return PLUGIN_HANDLED

	new bot = botindex[id]
	if(!is_user_connected(bot)) {
		console_print(id, "[%s] You have no bot connected..",plugin)
		return PLUGIN_HANDLED
	}

	static cmd[32], name[32]
	read_argv(1, cmd,31)
	get_user_name(bot, name,31)

	if(equal(cmd,"say") || equal(cmd,"say_team")) {
		static saytext[128], team
		new len = strlen(cmd) + 1
		read_args(saytext,127)
		if(equal(cmd,"say_team")) team = 1
		bot_say(bot,team,saytext[len])
		console_print(id, "[%s] Executed on %s: %s %s",plugin,name,cmd,saytext)
		return PLUGIN_HANDLED
	}

	static args[2][32]
	new num = read_argc()-2
	args[0][0] = 0, args[1][0] = 0
	for(new i = 0; i < num; i++) read_argv(i+2, args[i],31)

	if(equal(cmd,"kill")) dllfunc(DLLFunc_ClientKill, bot)
	else if(equal(cmd,"name")) set_user_info(bot,"name",args[0])
	else if(equal(cmd,"model")) set_user_info(bot,"model",args[0])
	else bot_command(bot,cmd,args[0],args[1])

	console_print(id, "[%s] Executed on %s: %s %s %s",plugin,name,cmd,args[0],args[1])
	return PLUGIN_HANDLED
}

public movebot(id,level,cid) {
	if(!cmd_access(id,level,cid,2))
		return PLUGIN_HANDLED

	if(!is_user_connected(botindex[id])) {
		console_print(id, "[%s] You have no bot connected..",plugin)
		return PLUGIN_HANDLED
	}

	static arg[2], message[64]
	read_argv(1, arg,1)

	new num = str_to_num(arg)
	if(num < 0 || num > 3) num = 0

	switch(num) {
		case 0: formatex(message,63, "not copying your moves at all")
		case 1: formatex(message,63, "copying your movements")
		case 2: formatex(message,63, "copying your movements and aiming the same spot when shooting")
		case 3: formatex(message,63, "copying your movements in reverse mode")
	}

	copymovements[id] = num
	console_print(id, "[%s] Your bot is now %s",plugin,message)
	return PLUGIN_HANDLED
}

public cmdsbot(id,level,cid) {
	if(!cmd_access(id,level,cid,2))
		return PLUGIN_HANDLED

	if(!is_user_connected(botindex[id])) {
		console_print(id, "[%s] You have no bot connected..",plugin)
		return PLUGIN_HANDLED
	}

	new arg[2]
	read_argv(1, arg,1)
	new bool:value = str_to_num(arg) ? true : false

	fullcontrol[id] = value
	console_print(id, "[%s] Fullcontrol mode: %s",plugin,value?"ON (you can't control yourself now)":"OFF")
	slotmenu(id,value)
	return PLUGIN_HANDLED
}

public removebot(id,level,cid) {
	if(!cmd_access(id,level,cid,1))
		return PLUGIN_HANDLED

	new bot = botindex[id]
	if(is_user_connected(bot)) {
		static name[32]
		get_user_name(bot, name,31)
		console_print(id, "[%s] Bot %s kicked!",plugin,name)
		server_cmd("kick #%d",get_user_userid(bot))
	}	
	else console_print(id, "[%s] You have no bot connected..",plugin)
	return PLUGIN_HANDLED
}

// ================================================================================================
// ================================================================================================

public check_botinfo() {
	static text[192], len, weapon
	static players[32], inum, bot, owner
	get_players(players,inum, "dh")

	static temp[3][10], color[3], Float:pos[2], i
	get_pcvar_string(cv_hudcolor, text,20)
	parse(text, temp[0],3, temp[1],3, temp[2],3)
	for(i = 0; i < 3; i++) color[i] = str_to_num(temp[i])

	get_pcvar_string(cv_hudpos, text,20)
	parse(text, temp[0],9, temp[1],9)
	for(i = 0; i < 2; i++) pos[i] = floatstr(temp[i])

	new Float:holdtime = (using_mod == 2) ? 120.0 : 1.0	//TS handles hudmessages differently

	static bool:was_alive[33]
	static name[32], weaponname[20], clip, ammo
	for(i = 0; i < inum; i++) {
		bot = players[i], owner = botowner[players[i]]
		if(!owner) continue		//no owner, so this might be some other bot :o

		switch(botinfo[owner]) {
			case info_motd: {
				set_pev(bot,pev_button,IN_ATTACK)
				client_print(owner,print_chat, "[%s] Note: a MOTD window was closed on your bot",plugin)
			}
		}
		botinfo[owner] = info_none

		if(!is_user_alive(bot)) {
			if(was_alive[bot]) {	//hide hudmessage after death (mainly for TS)
				was_alive[bot] = false
			}
			continue
		}
		was_alive[bot] = true

		if(using_mod == 2) weapon = get_ts_weapon(bot,clip,ammo)
		else weapon = get_user_weapon(bot,clip,ammo)

		get_user_name(bot, name,31)
		get_weaponname(weapon, weaponname,19)
		if(using_mod == 1) copy(weaponname,19, weaponname[7])	//cut off the "weapon_" tag

		len = formatex(text,191, "Name: %s, Health: %d",name,get_user_health(bot))
		len += formatex(text[len],191-len, "^nWeapon: %s, Ammo: %d/%d",weaponname,clip,ammo)

		if(using_mod == 1) formatex(text[len],191-len, "^nMoney left: $%d",get_user_money(bot))
	}
}

public client_command(id) {
	new bot = botindex[id]
	if(!bot) return PLUGIN_CONTINUE

	static cmd[32]
	read_argv(0, cmd,31)

	new menu = hasmenu[id]
	if(menu && equal(cmd,"menuselect")) {
		new num[3]				//no need to check if menu even has this key,
		read_argv(1, num,2)			//coz menuselect wont be called if it doesnt

		hasmenu[id] = 0
		if(fullcontrol[id]) slotmenu(id,true)

		switch(menu) {
			case 1: engclient_cmd(bot,"menuselect",num)
			case 2: change_to_weapon(bot,str_to_num(num))
		}
		return PLUGIN_HANDLED
	}
	else if(fullcontrol[id]) {
		new num = sizeof(fullcontrol_cmds)
		for(new i = 0; i < num; i++) {
			if(!equali(cmd,fullcontrol_cmds[i])) continue
			return PLUGIN_CONTINUE
		}

		if(!contain(cmd,"say")) {
			static saytext[128], team
			read_args(saytext,127)
			remove_quotes(saytext)
			if(equal(cmd,"say_team")) team = 1
			bot_say(bot,team,saytext)
		}
		else {
			static arg1[32], arg2[32]
			read_argv(1, arg1,95)
			read_argv(2, arg2,31)
			bot_command(bot,cmd,arg1,arg2)
		}
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

// ================================================================================================
// ================================================================================================

public fm_cmdstart(id,uc_handle,random_seed) {
	new bot = botindex[id], movement = copymovements[id]
	if(!bot || !movement) return FMRES_IGNORED

	new alive = is_user_alive(id), button = get_uc(uc_handle,UC_Buttons)
	if(!alive) set_uc(uc_handle,UC_Buttons, button & ~IN_JUMP & ~IN_ATTACK & ~IN_ATTACK2 & ~IN_FORWARD & ~IN_BACK & ~IN_MOVELEFT & ~IN_MOVERIGHT)

	if(is_user_alive(bot)) {
		get_uc(uc_handle,UC_ForwardMove, botmove[id][0])
		get_uc(uc_handle,UC_SideMove, botmove[id][1])
		get_uc(uc_handle,UC_UpMove, botmove[id][2])

		static Float:angles[3]
		if(movement == 2 && alive && button&IN_ATTACK) {
			static Float:target[3]
			get_user_aim(id,target)
			aim_at_origin(bot,target,angles)
		}
		else {
			get_uc(uc_handle,UC_ViewAngles, angles)
			if(movement == 3 && alive) {
				angles[1] += (angles[1] < 180.0) ? 180.0 : -180.0
				if(button&IN_JUMP) button = button & ~IN_JUMP | IN_DUCK
				else if(button&IN_DUCK) button = button & ~IN_DUCK | IN_JUMP
			}
		}
		botangles[id][0] = angles[0]
		botangles[id][1] = angles[1]
		botangles[id][2] = angles[2]
		botbuttons[id] = button
		botimpulses[id] = get_uc(uc_handle,UC_Impulse)
	}
	return FMRES_IGNORED
}

public fm_serverframe() {
	static players[32], inum
	get_players(players,inum, "dh")

	static Float:msecval
	global_get(glb_frametime, msecval)
	new msec = floatround(msecval * 1000.0)

	static bot, owner, Float:angles[3]
	for(new i = 0; i < inum; i++) {
		bot = players[i], owner = botowner[bot]
		if(!owner) continue		//no owner, so this might be some other bot :o

		if(is_user_alive(bot)) {
			angles[0] = botangles[owner][0]
			angles[1] = botangles[owner][1]
			angles[2] = botangles[owner][2]

			set_pev(bot,pev_v_angle,angles)
			angles[0] /= -3.0
			set_pev(bot,pev_angles,angles)
		}
		engfunc(EngFunc_RunPlayerMove,bot,angles,botmove[owner][0],botmove[owner][1],botmove[owner][2],botbuttons[owner],botimpulses[owner],msec)
	}
	return FMRES_IGNORED
}

public fm_clientkill(id) {
	new bot = botindex[id]
	if(bot && fullcontrol[id]) {
		if(is_user_alive(bot)) dllfunc(DLLFunc_ClientKill, bot)
		else console_print(id, "[%s] Can't suicide -- your bot is already dead",plugin)
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}

// ================================================================================================
// ================================================================================================

public catch_say(id) {
	if(!botsnum) return

	static cmd[10], said[128]
	read_argv(0, cmd,9)
	read_args(said,127)
	remove_quotes(said)

	new teamsay = equal(cmd,"say_team") ? 1 : 0
	handle_saytext(id,said,teamsay)
}

public event_deathmsg() {
	new id = read_data(2)
	if(!botindex[id]) {
		id = botowner[id]
		if(id) reset_controls(id)
		return
	}

	new len
	static message[128]
	if(copymovements[id]) len = formatex(message,127, "botmove (you can't control yourself completely), ")

	if(fullcontrol[id]) len += formatex(message[len],127-len, "botcmds (all of your commands are sent to the bot)")
	else if(len) message[len-2] = 0

	if(len) ucfirst(message)
	else formatex(message,127, "None")

	client_print(id,print_chat, "[%s] You have the following modes enabled:",plugin)
	client_print(id,print_chat, "* %s",message)
}

public event_motd(id) {
	new owner = botowner[id]
	if(owner) botinfo[owner] = info_motd
}

public event_resethud(id) {
	new owner = botowner[id]
	if(owner) {
		client_print(owner,print_chat, "[%s] Your bot has spawned",plugin)
		if(using_mod == 2) {
			set_pev(id,pev_weapons,0)
			currentweapon[id][0] = 0
			currentweapon[id][1] = 0
			currentweapon[id][2] = 0
		}
	}
}

public event_showmenu(id) {
	new owner = botowner[id]
	if(!owner) return

	static menu[32]
	new keys = read_data(1)
	read_data(4, menu,31)
	if(!strlen(menu)) return

	hasmenu[owner] = 1		//keypress is catched in client_command()
	message_begin(MSG_ONE,gMsg_ShowMenu,{0,0,0},owner)
	write_short(keys)
	write_char(-1)
	write_byte(0)
	write_string(menu)
	message_end()

	client_print(owner,print_chat, "[%s] A menu was opened on your bot: %s",plugin,menu)
}

public event_spectator() {
	new id = read_data(1)
	if(copymovements[id]) {
		client_cmd(id, "specmode 4")		//first person
		set_task(0.3,"next_spectarget",id)
	}
}

public next_spectarget(id) {
	new bot = botindex[id]
	if(is_user_alive(bot)) {
		static name[32]
		get_user_name(bot, name,31)
		client_cmd(id, "follow ^"%s^"",name)
	}
}

public event_textmsg(id) {
	new owner = botowner[id]
	if(!owner || !is_user_alive(id)) return

	static message[32]
	new datanum = read_datanum()
	read_data(2, message,31)

	message_begin(MSG_ONE,gMsg_TextMsg,{0,0,0},owner)
	write_byte(4)
	write_string(message)

	for(new i = 3; i < datanum; i++) {
		read_data(i, message,31)
		write_string(message)
	}

	message_end()
	return
}

public event_clipinfo(id) {
	if(botowner[id]) currentweapon[id][1] = read_data(1)
}

public event_weaponinfo(id) {
	if(botowner[id]) {
		currentweapon[id][0] = read_data(1)
		currentweapon[id][1] = read_data(2)
		currentweapon[id][2] = read_data(3)
	}
}

public event_wstatus(id) {
	new owner = botowner[id]
	if(!owner) return

	new wp = read_data(1), status = read_data(2)
	new wlist = pev(id,pev_weapons), weapon = (1<<wp)
	if(status) set_pev(id,pev_weapons, wlist | weapon)
	else set_pev(id,pev_weapons, wlist & ~weapon)
	return
}

// ================================================================================================
// ================================================================================================

stock get_user_aim(id,Float:aimorig[3]) {
	static Float:origin[3], Float:view_ofs[3]
	pev(id,pev_origin, origin)
	pev(id,pev_view_ofs, view_ofs)
	origin[0] += view_ofs[0]
	origin[1] += view_ofs[1]
	origin[2] += view_ofs[2]

	static Float:vec[3]
	pev(id,pev_v_angle, vec)
	engfunc(EngFunc_MakeVectors,vec)
	global_get(glb_v_forward,vec)
	vec[0] = origin[0] + vec[0] * 9999.0
	vec[1] = origin[1] + vec[1] * 9999.0
	vec[2] = origin[2] + vec[2] * 9999.0

	static line
	engfunc(EngFunc_TraceLine,origin,vec,0,id,line)
	get_tr2(line,TR_vecEndPos, aimorig)
}

stock aim_at_origin(id,const Float:origin[3],Float:angles[3]) {			//stock base by Lord of Destruction
	static Float:DeltaOrigin[3], Float:orig[3]
	pev(id,pev_origin, orig)
	DeltaOrigin[0] = orig[0] - origin[0]
	DeltaOrigin[1] = orig[1] - origin[1]
	DeltaOrigin[2] = orig[2] - origin[2] + 16.0	//bot keeps aiming too high

	angles[0] = Radian2Degree(floatatan(DeltaOrigin[2] / Distance2D(DeltaOrigin[0], DeltaOrigin[1]),0))
	angles[1] = Radian2Degree(floatatan(DeltaOrigin[1] / DeltaOrigin[0],0))
	if(DeltaOrigin[0] >= 0.0) angles[1] += 180.0
}

stock change_to_weapon(id,slot) {
	if(slot > slotsnum) return 0

	if(using_mod == 2 && slot == 6) {
		engclient_cmd(id,"weapon_0")
		return 1
	}

	new wnum
	static weapons[32], a
	get_user_weapons(id,weapons,wnum)
	new weapon, num = strlen(weapon_slots[--slot])

	for(new i = 0; i < wnum; i++) {
		for(a = 0; a < num; a++) {
			if(weapons[i] != weapon_slots[slot][a]) continue
			weapon = weapons[i]
			break
		}
		if(weapon) break
	}

	if(weapon) {
		static weaponname[20]
		if(using_mod == 2) formatex(weaponname,19, "weapon_%d",weapon)
		else get_weaponname(weapon,weaponname,19)
		engclient_cmd(id,weaponname)
		return 1
	}
	return 0
}

stock get_ts_weapon(id,&clip,&ammo) {
	if(!is_user_bot(id)) return 0
	clip = currentweapon[id][1]
	ammo = currentweapon[id][2]
	return currentweapon[id][0]
}

// ================================================================================================
// ================================================================================================

handle_saytext(id,said[],teamsay) {
	static name[32], text[192], teamname[20]
	get_user_name(id, name,31)

	new len, alive = is_user_alive(id)
	if(!alive) len = formatex(text,191, "*DEAD*")
	if(teamsay) {
		get_user_team(id, teamname,19)
		len += formatex(text[len],191-len, "(%s)",teamname)
	}
	else teamname[0] = 0

	if(len) text[len++] = ' '		//add a space ;)
	formatex(text[len],191-len, "%s :  %s",name,said)

	static players[32], inum, owner, flags[5]
	formatex(flags,4, "dh%c%c",alive ? 'a' : 'b',teamsay ? 'e' : 0)
	get_players(players,inum, flags,teamname)	//teamname is set only if teamsay is on

	for(new i = 0; i < inum; i++) {
		owner = botowner[players[i]]
		if(owner && alive != is_user_alive(owner)) client_print(owner,print_chat, "%s",text)
	}
}

bot_command(id,cmd[],arg1[]="",arg2[]="") {
	if(strlen(arg2)) engclient_cmd(id,cmd,arg1,arg2)
	else if(strlen(arg1)) engclient_cmd(id,cmd,arg1)
	else engclient_cmd(id,cmd)
}

slotmenu(id,bool:mode) {
	hasmenu[id] = mode ? 2 : 0
	message_begin(MSG_ONE,gMsg_ShowMenu,{0,0,0},id)
	write_short(mode ? slotmenukeys : 0)
	write_char(-1)
	write_byte(0)
	write_string("^n")
	message_end()
}

bot_addforwards() {
	fow_cmdstart = register_forward(FM_CmdStart,"fm_cmdstart",0)
	fow_serverframe = register_forward(FM_StartFrame,"fm_serverframe",1)
	fow_clientkill = register_forward(FM_ClientKill,"fm_clientkill",0)

	set_task(1.0,"check_botinfo",TASK_BOTINFO, "",0, "b")
}

bot_delforwards() {
	unregister_forward(FM_CmdStart,fow_cmdstart,0)
	unregister_forward(FM_StartFrame,fow_serverframe,1)
	unregister_forward(FM_ClientKill,fow_clientkill,0)

	remove_task(TASK_BOTINFO)
}

bot_settings(id) {
	set_user_info(id, "model",		"gordon")
	set_user_info(id, "rate",		"3500")
	set_user_info(id, "cl_updaterate",	"30")
	set_user_info(id, "cl_lw",		"0")
	set_user_info(id, "cl_lc",		"0")
	set_user_info(id, "tracker",		"0")
	set_user_info(id, "cl_dlmax",		"128")
	set_user_info(id, "lefthand",		"1")
	set_user_info(id, "friends",		"0")
	set_user_info(id, "dm",			"0")
	set_user_info(id, "ah",			"1")

	set_user_info(id, "*bot",		"1")
	set_user_info(id, "_cl_autowepswitch",	"1")
	set_user_info(id, "_vgui_menu",		"0")		//disable vgui so we dont have to
	set_user_info(id, "_vgui_menus",	"0")		//register both 2 types of menus :)
}

bot_say(id,team,text[]) {
	engclient_cmd(id,team ? "say_team" : "say",text)
	handle_saytext(id,text,team)
}

reset_controls(owner) {
	botmove[owner][0] = 0.0
	botmove[owner][1] = 0.0
	botmove[owner][2] = 0.0
	botangles[owner][0] = 0.0
	botangles[owner][1] = 0.0
	botangles[owner][2] = 0.0
	botbuttons[owner] = 0
	botimpulses[owner] = 0
}
Когато махна плъгина potti отново е същата работа.
Във лог файловете излиза това:

Код за потвърждение: Избери целия код

[2019-07-21 19:31:08] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".


[2019-07-21 19:39:12] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".


[2019-07-21 19:46:41] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".


[2019-07-22 15:21:19] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".


[2019-07-22 17:38:27] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".


[2019-07-22 18:24:32] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".


[2019-07-22 18:31:31] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".


[2019-07-22 18:36:56] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".


[2019-07-22 18:52:59] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".


[2019-07-22 18:59:07] Loaded 0 apps from install folder "D:\Gamedir\Server\steamapps\appmanifest_*.acf".[/code

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от mi0 » 22 Юли 2019, 20:40

Не е от него, опитай да спираш плъгините един по един, до като не изчезне смапа в конзолата. Ако изчезне кажи кой плъгин си спрял и прати код да го оправим.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

Аватар
Dvstoyanov89
Извън линия
Потребител
Потребител
Мнения: 41
Регистриран на: 11 Май 2019, 14:04
Се отблагодари: 11 пъти
Получена благодарност: 6 пъти

Проблем: Спам в конзолата на сървъра, изписва нули

Мнение от Dvstoyanov89 » 23 Юли 2019, 19:03

Проблема е в плъгина NoMoreShit

Код за потвърждение: Избери целия код

/*
======================================================

Version 2.0

--- First release

Version 2.1

--- Added better regex pattern 

Version 2.2 

--- Added
nms_nospam 0/1 disable/enable NoSpam function
nms_badwords 0/1 disable/enable BadWords function
nms_noadvert 0/1 disable/enable NoAdvert function

--- Removed colorchat include

Version 2.3

--- Added
Exception words that are skipped when checking for spam
Admin immunity from NoAdvert function
Better regex pattern

Version 2.3.1 HotFix

--Works with advanced bans

Version 2.4

--Added ADMIN_BAN immunity to the plugin
nms_adminimmune 1/0

Version 2.5

--Fixed a hole in detecting IP/DOMAINS

Version 2.5.1 HotFix

--Higher domain detection

Version 2.5.2 Hotfix

--nms_chatban "0" now works properly

Version 2.6

--IP/DOMAIN check in player's nick
--Better NoSpam detection
--Punish now stays after reconnection
--Optimized Colorchat

Version 3.0 BETA

--Faster & Lighter words detection
--Words will now detect properly
--Optimized regex pattern
--Regex patterns are now separated for better results
--nms_chataction cvar added 

Version 3.01 BETA
--Fixed "replace buffer not big enough" when entering server

Version 3.02 BETA
--Replaced TrieGet* with TrieKeyExist

Version 3.1 
--Added Old detection method 
--Added nms_method cvar
--Added update notify

Version 3.2
--Punishment will stay after reconnect
--Some code refactored

======================================================
*/
#include <amxmodx>
#include <amxmisc>
#include <regex>
#include <fakemeta>

#define PLUGIN "NoMoreSh!t"
new const VERSION[] = "3.2";
#define AUTHOR "SpeeDeeR@amxmodxbg"

#pragma semicolon 1

#define SAY_BLOCK 	PLUGIN_HANDLED
#define SAY_OK 		PLUGIN_CONTINUE

#define MAXPLAYERS 	32

#define IP_PATTERN   	"([0-9].*[*].*[1-9][0-9].*[*].*[0-9]{2}.*[*].*[0-9])" 
#define DOMAIN_PATTERN 	"[a-zA-Z0-9\-\.]+\.(com|org|net|bg|info|COM|ORG|NET|BG|INFO)"

enum
{
	BAD_WORD,
	ADVERTISEMENT,
	SPAM,
	
	TOTAL_REASONS
};

new const szReasons[TOTAL_REASONS][] = 
{
	"Neprilichni dumi",
	"IP/DOMAIN REKLAMA",
	"SPAM"
};

new g_returnvalue;

new 
	Regex:g_IP_PATTERN,
	Regex:g_DOMAIN_PATTERN;

new 
	pcvarTimesAllowed,
	pcvarChatAction,
	pcvarChatBan,
	pcvarNoSpamEnabled,
	pcvarBadWordsEnabled,
	pcvarNoAdvertEnabled,
	pcvarAdminImminuty,
	pcvarDetectionMethod;

new 
	Trie:th_exc, //exceptions
	Trie:th_punish, //punished players
	Trie:th_words; //bad words
//cvar dependency
new Array: arr_words;


new 
	g_msg_SayText,
	g_msg_TeamInfo;

new g_iMaxPlayers;
	
enum Data {
	szName[32],
	PunishStart,
	LastSaid[128],
	SpamCount,
	bool: Connected,
	bool: Immunity,
	bool: Punished
};


new g_PData[MAXPLAYERS + 1][Data];


new g_iBadWordsNum; //replacing ArraySize()
	
enum Color
{
	NORMAL = 1, // clients scr_concolor cvar color
	GREEN, // Green Color
	TEAM_COLOR, // Red, grey, blue
	GREY, // grey
	RED, // Red
	BLUE, // Blue
}

new const g_prefix[] = "[NoMoreSh!t]";

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_clcmd("say", "SayHandle");
	register_clcmd("say_team", "SayHandle");
	
	register_concmd("nms_loadwords", "readBadWords");
	register_concmd("nms_loadexceptions", "readExceptions");
	
	pcvarTimesAllowed = register_cvar("nms_chatcount", "3");
	
	pcvarChatAction = register_cvar("nms_chataction", "1");
	pcvarChatBan = register_cvar("nms_chatban", "120");
	
	pcvarNoSpamEnabled = register_cvar("nms_nospam", "1");
	pcvarBadWordsEnabled = register_cvar("nms_badwords", "1");
	pcvarNoAdvertEnabled = register_cvar("nms_noadvert", "1");
	pcvarAdminImminuty = register_cvar("nms_adminimmune", "0");
	
	pcvarDetectionMethod = register_cvar("nms_method", "1"); /* 1 - Array (old method) | 2 - Trie */
	
	register_cvar( "nms_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
	set_cvar_string( "nms_version", VERSION );
	
	register_forward(FM_ClientUserInfoChanged, "fwd_ClientUserInfoChanged");
	
	th_exc = TrieCreate();
	th_punish = TrieCreate();
	
	new error[1];
	g_IP_PATTERN = regex_compile(IP_PATTERN, g_returnvalue, error, charsmax(error) ,"s");
	g_DOMAIN_PATTERN = regex_compile(DOMAIN_PATTERN, g_returnvalue, error, charsmax(error), "s");
	
	g_msg_SayText = get_user_msgid("SayText");
	g_msg_TeamInfo = get_user_msgid("TeamInfo");
	
	g_iMaxPlayers = get_maxplayers();
	
	readExceptions(0);
	
	new ppcvar = get_pcvar_num(pcvarDetectionMethod);
	
	if(ppcvar == 1)
	{
		arr_words = ArrayCreate(20);
	}
	else if(ppcvar == 2)
	{
		th_words = TrieCreate();
	}
	
	readBadWords(0);
}

public readBadWords(id)
{
	if(!(get_user_flags(id) & ADMIN_RCON)) return;
	
	new badwords_file[64];
	get_configsdir( badwords_file, charsmax(badwords_file) );
	add(badwords_file, charsmax(badwords_file), "/NMS_BADWORDS.ini");

	if ( !file_exists(badwords_file) )
	{
		server_print ( "============================================" );
		server_print ( "[NoMoreSh!t] %s file not found", badwords_file );
		server_print ( "============================================" );
		return;
	}
	
	g_iBadWordsNum = 0;
	
	new ppcvar = get_pcvar_num(pcvarDetectionMethod);
	
	if(ppcvar == 2 && th_words)
	{
		TrieClear(th_words);
	}
	else if(ppcvar == 1 && arr_words)
	{
		ArrayClear(arr_words);
	}
		
	new file = fopen(badwords_file,"r");
	new badword[20], c;
	while(fgets(file, badword, charsmax(badword)))
	{
		trim(badword);
		if( !(c = badword[ 0 ])
		|| c == ';'
		|| c == '/') continue;
		
		if(ppcvar == 1)
		{
			ArrayPushString(arr_words, badword);
		}
		else if(ppcvar == 2)
		{
			TrieSetCell(th_words, badword, true);
		}
		
		g_iBadWordsNum++;
	}

	server_print ("============================================");
	server_print ("[NoMoreSh!t] %i bad words loaded", g_iBadWordsNum);
	server_print ("============================================");
}

public readExceptions(id)
{
	if(!(get_user_flags(id) & ADMIN_RCON)) return;
	
	new exceptions_file[64];
	get_configsdir( exceptions_file, charsmax(exceptions_file) );
	add(exceptions_file, charsmax(exceptions_file), "/NMS_EXCEPTIONS.ini");

	if ( !file_exists(exceptions_file) )
	{
		server_print ( "============================================" );
		server_print ( "[NoMoreSh!t] %s file not found", exceptions_file );
		server_print ( "============================================" );
		return;
	}

	new ExceptionsNum;
	
	new file = fopen(exceptions_file,"r");
	new exception[30], c;
	while(fgets(file, exception, charsmax(exception)))
	{
		trim(exception);
		
		if( !(c = exception[ 0 ]) || c == '^n' || c == ';' ) continue;
		
		TrieSetCell(th_exc, exception, ExceptionsNum++);
	}
	
	server_print ("============================================");
	server_print ("[NoMoreSh!t] %i exceptions loaded", ExceptionsNum);
	server_print ("============================================");
}

public SayHandle(id)
{
	if(g_PData[id][Immunity] && get_pcvar_num( pcvarAdminImminuty ) ) return SAY_OK;
	
	static arg[512];
	read_args(arg, charsmax(arg));
	
	remove_quotes(arg);
	trim(arg);
	strtolower(arg);
	
	static len;
	
	if(!(len = strlen(arg))) return SAY_BLOCK;
	
	/*=========== Check for exceptions ======= */
	if(TrieKeyExists(th_exc, arg))
	return PLUGIN_CONTINUE;
	
	new ppcvarChatBan = get_pcvar_num(pcvarChatBan);
	
	/*=========== Check if user is punished ======= */
	if(g_PData[id][Punished])
	{
		new punishtime = ppcvarChatBan - (time() - g_PData[id][PunishStart]);
		
		if(punishtime > 0)
		{
			client_print(id, print_center, "Ostava%s %i sekund%s ot nakazanieto ti", punishtime > 1 ? "t":"", punishtime, punishtime > 1 ? "i":"a");
			
			return SAY_BLOCK;
		}
		else
		{
			g_PData[id][Punished] = false;
		}
	}
	
	/*=========== Check for IP/DOMAIN ======= */
	if(get_pcvar_num(pcvarNoAdvertEnabled))
	{
		if(RegexCheck(id, arg, len, ppcvarChatBan))
		{
			return SAY_BLOCK;
		}
	}
	
	/*=========== Clean the string ======= */
	string_cleaner(arg, len);
	
	/*=========== Check for bad words ======= */
	if(get_pcvar_num(pcvarBadWordsEnabled))
	{
		if(BadWordCheck( id, arg, len, ppcvarChatBan, get_pcvar_num(pcvarDetectionMethod) ))
		{
			return SAY_BLOCK;
		}
	}

	/*=========== Check for SPAM ======= */
	if(get_pcvar_num(pcvarNoSpamEnabled))
	{
		if(SpamCheck(id, arg, ppcvarChatBan))
		{
			return SAY_BLOCK;
		}
	}
	
	return SAY_OK;
}

public client_putinserver(id)
{
	new szIP[20]; 
	get_user_ip(id, szIP, charsmax(szIP), 1);
	
	new punishtime;
	TrieGetCell(th_punish, szIP, punishtime);
	server_print("%d", punishtime);

	if((get_pcvar_num(pcvarChatBan) - (time() -punishtime))  > 0) {
		g_PData[id][Punished] = true;
		g_PData[id][PunishStart] = punishtime;
	}
	else {
		g_PData[id][Punished] = false;
		g_PData[id][PunishStart] = 0;
	}
	
	g_PData[id][Connected] = true;
	
	g_PData[id][Immunity] = !!( get_user_flags(id) & ADMIN_BAN );
	
	new len = charsmax(g_PData[]);
	get_user_name(id, g_PData[id][szName], len);
	
	new name[32];
	copy(name, len, g_PData[id][szName]);
	
	new ppcvar = get_pcvar_num(pcvarChatBan);
	RegexCheck(id, name, len, ppcvar, true);
	
	string_cleaner(name, len);
	
	BadWordCheck(id, name, len, ppcvar, get_pcvar_num(pcvarDetectionMethod));
}

public client_disconnect(id)
{ 
	if(g_PData[id][Punished])
	{
		if(get_pcvar_num(pcvarChatBan) - (time() - g_PData[id][PunishStart]) > 0)
		{
			new szIP[20];
			get_user_ip(id, szIP, charsmax(szIP), 1);
		
			TrieSetCell(th_punish, szIP, g_PData[id][PunishStart]);
		}
	}

	g_PData[id][Punished] = false;
	g_PData[id][Connected] = false;
	g_PData[id][SpamCount]= 0;
}


public fwd_ClientUserInfoChanged(id, buffer)
{
	static newname[32];
	get_user_info(id, "name", newname, charsmax(newname));
	
	if(equal(newname, g_PData[id][szName]))
	{
		return FMRES_IGNORED;
	}
	
	new name[32];
	copy(name, charsmax(name), newname);
	
	string_cleaner(name, charsmax(name), true);

	if( regex_match_c( name, g_IP_PATTERN, g_returnvalue ) > 0 || regex_match_c( name, g_DOMAIN_PATTERN, g_returnvalue ) > 0 )
	{
		client_print(id, print_console, "IP/DOMAIN DETECTED IN NAME^nName change failed...");
		
		engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", g_PData[id][szName]);
		
		return FMRES_SUPERCEDE;
	}
	else
	{
		copy(g_PData[id][szName], charsmax(g_PData[]), newname);
	}

	return FMRES_IGNORED;
}

string_cleaner( str[], len, bool:ip = false )
{
	static i;

	if(ip)
	{
		static const Special_IP_Chars[][]= 
		{
			"~",
			"!",
			"@",
			"#",
			"$",
			"%",
			"^^",
			"&",
			"(",
			")",
			"-",
			"+",
			";",
			":",
			"/",
			"\",
			"|",
			".",
			",",
			" "
		};

		for( i = 0; i < sizeof(Special_IP_Chars); i++ )
		{
			replace_all( str, len, Special_IP_Chars[i], "*");
		}
	
		return;
	}

	static const SpecialChars[][] = 
	{
		"~",
		"#",
		"%",
		"&",
		";",
		"*",
		":",
		"/",
		"\",
		".",
		","
	};

	static ch;
	for ( i = 0 ; i < len ; i++ )
	{
		ch = str[i];
		
		if ( ch == '@')
		{
			ch = 'a';
		}
		
		if ( ch == '$' )
		{
			ch = 's';
		}
		
		if ( ch == '0' )
		{
			ch = 'o';
		}
		
		if ( ch == '7' )
		{
			ch = 't';
		}
		
		if ( ch == '5' )
		{
			ch = 's';
		}
		
		if ( ch == '<' )
		{
			ch = 'c';
		}
		
		if ( ch == '3' )
		{
			ch = 'e';
		}
		
		if ( ch == '!' )
		{
			ch = 'i';
		}
		
		if( ch == '+' )
		{
			ch = 't';
		}
		
		str[i] = ch;
	}

	for( i = 0; i < sizeof(SpecialChars); i++ )
	{
		replace_all( str, len, SpecialChars[i], "*");
	}

	replace_all( str, len, "(.)", ".");
	
	replace_all( str, len, "|<", "k" );
	
	replace_all( str, len, "|>", "p" );
	
	replace_all( str, len, "()", "o" );
	
	replace_all( str, len, "[]", "o" );
	
	replace_all( str, len, "{}", "o" );
	
	replace_all( str, len, "|-|", "h" );
	
	replace_all( str, len, "\/\/", "w" );
	
	replace_all( str, len, "\/", "v" );
}

RegexCheck(const id, const str[], len, iChatBan, bool:b_NameCheck = false)
{
	static arg1[512];
	copy(arg1, len, str);
	
	string_cleaner(arg1, len, true);
	
	if(regex_match_c( arg1, g_IP_PATTERN, g_returnvalue ) > 0 || regex_match_c( str, g_DOMAIN_PATTERN, g_returnvalue ) > 0)
	{
		if(!b_NameCheck)
		{
			if(iChatBan > 0)
			{
				g_PData[id][Punished] = true;
				g_PData[id][PunishStart] = time();
				
				if(get_pcvar_num(pcvarChatAction))
				{
					SendWarningMessage(g_PData[id][szName], iChatBan, ADVERTISEMENT);
				}
			}
		}
		else
		{
			server_cmd("kick #%d ^"IP/DOMAIN detected in name^"", get_user_userid(id));
		}
		
		return 1;
	}
	
	return 0;
}

BadWordCheck(const id, const str[], len, iChatBanLenght, method, bool: bNameCheck = false)
{
	if(method == 1)
	{	
		if(!arr_words) 
		{
			arr_words = ArrayCreate(20);
			
			readBadWords(0);
		}
		
		static word[20], lenght = charsmax(word);
		
		static i; 
		for(i = 0 ; i < g_iBadWordsNum; i++)
		{
			ArrayGetString( arr_words, i, word, lenght);
			
			if(containi ( str, word ) != -1 )
			{
				if(!bNameCheck)
				{
					if(iChatBanLenght)
					{
						if(get_pcvar_num(pcvarChatAction))
						{
							SendWarningMessage(g_PData[id][szName], iChatBanLenght, BAD_WORD);
						}
						
						g_PData[id][PunishStart] = time();
						g_PData[id][Punished] = true;
					}
				}
				else
				{
					server_cmd("kick #%d ^"Bad Word detected in name^"", get_user_userid(id));
				}
		
				return 1;
			}
		}
	}
	else if(method == 2)
	{
		if(!th_words) 
		{
			th_words = TrieCreate();
			
			readBadWords(0);
		}
		
		static spaces; spaces = 0;
		
		for(new i; i < len; i++)
		{
			if(isspace(str[i]))
			{
				spaces++;
			}
		}
		
		static word[32], i;
		
		static arg1[512];
		copy(arg1, len, str);
		
		for(i = 0; i <= spaces; i++)
		{
			strbreak(arg1, word, charsmax(word), arg1, charsmax(arg1));
		
			if(TrieKeyExists(th_words, word))
			{
				if(!bNameCheck)
				{
					if(iChatBanLenght)
					{
						if(get_pcvar_num(pcvarChatAction))
						{
							SendWarningMessage(g_PData[id][szName], iChatBanLenght, BAD_WORD);
						}
					
						g_PData[id][PunishStart] = time();
						g_PData[id][Punished] = true;
					}
				}
				else
				{
					server_cmd("kick #%d ^"Bad Word detected in name^"", get_user_userid(id));
				}
		
				return 1;
			}
		}
	}
	
	return 0;
}

SpamCheck(const id, const str[], iChatBan)
{
	if(equal(g_PData[id][LastSaid], str))
	{
		if(++g_PData[id][SpamCount] >= get_pcvar_num(pcvarTimesAllowed))
		{
			if(iChatBan > 0)
			{
				if(get_pcvar_num(pcvarChatAction))
				{
					SendWarningMessage(g_PData[id][szName], iChatBan, SPAM);
				}
			
				g_PData[id][PunishStart] = time();
				g_PData[id][Punished] = true;				
			}
		
			return 1;
		}
	}
	else
	{
		copy(g_PData[id][LastSaid], charsmax(g_PData[]), str);
		g_PData[id][SpamCount] = 0;
	}
	
	return 0;
}

SendWarningMessage(const name[], iChatBan, iReason)
{
	ColorChat(0, GREEN, "%s ^3%s ^1beshe nakazan za ^4%i ^1sekund%s lishavane ot chat ^4[%s]^1!", g_prefix,  name , iChatBan, iChatBan > 1 ? "i" : "a", szReasons[iReason]);
}

/* Colorchat From Numb */
new TeamName[][] = 
{
	"",
	"TERRORIST",
	"CT",
	"SPECTATOR"
};

ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
	static message[256];
	
	switch(type)
	{
		case NORMAL: // clients scr_concolor cvar color
		{
			message[0] = 0x01;
		}
		case GREEN: // Green
		{
			message[0] = 0x04;
		}
		default: // White, Red, Blue
		{
			message[0] = 0x03;
		}
	}
	
	vformat(message[1], 251, msg, 4);
	
	// Make sure message is not longer than 192 character. Will crash the server.
	message[192] = '^0';
	
	static team, ColorChange, index, MSG_Type;
	
	if(id)
	{
		MSG_Type = MSG_ONE;
		index = id;
	} 
	else 
	{
		index = FindPlayer();
		MSG_Type = MSG_ALL;
	}
	
	team = get_user_team(index);
	ColorChange = ColorSelection(index, MSG_Type, type);
	
	ShowColorMessage(index, MSG_Type, message);
	
	if(ColorChange)
	{
		Team_Info(index, MSG_Type, TeamName[team]);
	}
}

ShowColorMessage(id, type, message[])
{
	message_begin(type, g_msg_SayText, _, id);
	write_byte(id);
	write_string(message);
	message_end();	
}

Team_Info(id, type, team[])
{
	message_begin(type, g_msg_TeamInfo, _, id);
	write_byte(id);
	write_string(team);
	message_end();
	
	return 1;
}

ColorSelection(index, type, Color:Type)
{
	switch(Type)
	{
		case RED:
		{
			return Team_Info(index, type, TeamName[1]);
		}
		case BLUE:
		{
			return Team_Info(index, type, TeamName[2]);
		}
		case GREY:
		{
			return Team_Info(index, type, TeamName[0]);
		}
	}
	
	return 0;
}

FindPlayer()
{
	static i;
	i = -1;
	
	while(i <= g_iMaxPlayers)
	{
		if(g_PData[++i][Connected])
		{
			return i;
		}
	}
	
	return -1;
}



 /* ============== UPDATER ============== */
 
 #include <sockets>
 
#define TASKID_GETANSWER			0
#define TASKID_CLOSECONNECTION			1

new g_Socket;
new g_Data[1000];

public plugin_cfg()
{
	new error, getbuffer[512], len = charsmax(getbuffer);
	g_Socket = socket_open("versionchecker.free.bg", 80, SOCKET_TCP, error);
 
	switch (error)
	{
		case 1:
		{
			log_amx("[Version Checker] Unable to create socket.");
			return;
		}
		case 2:
		{
			log_amx("[Version Checker] Unable to connect to hostname.");
			return;
		}
		case 3:
		{
			log_amx("[Version Checker] Unable to connect to the HTTP port.");
			return;
		}
	}
	
	formatex(getbuffer, len, "GET %s HTTP/1.1^nHost:%s^r^n^r^n", "/nms.html" , "versionchecker.free.bg");
	
	socket_send(g_Socket, getbuffer, len);
	
	set_task(2.0, "task_waitanswer", TASKID_GETANSWER,. flags = "a",. repeat = 15);
	set_task(16.0, "task_closeconnection", TASKID_CLOSECONNECTION);
}

public task_waitanswer()
{
	if (socket_change(g_Socket,1))
	{
		socket_recv(g_Socket, g_Data, charsmax(g_Data));
		
		new iPos = contain(g_Data, "Version") + strlen("Version :: ");
		
		new version[20];
		copyc(version, charsmax(version), g_Data[iPos], ';');
		
		if(str_to_float(version) > str_to_float(VERSION))
		{
			iPos = contain(g_Data, "Last-Modified:");
				
			new szLastModified[64];
			copyc(szLastModified, charsmax(szLastModified), g_Data[iPos], 'C');
			
			iPos = contain(g_Data, "Notes");
			
			new szNotes[512];	
			copyc(szNotes, charsmax(szNotes), g_Data[iPos], ';');
				
			server_print("^n======== NoMoreSh!t UPDATE AVAILABLE ========^n");
			
			server_print("Your Version :: [%s]", VERSION);
			server_print("New Version :: [%s]", version);
			server_print(szNotes);
			server_print(szLastModified);
			
			server_print("======== NoMoreSh!t UPDATE AVAILABLE ========^n");
		}	
			
		socket_close(g_Socket);
		remove_task(TASKID_GETANSWER);
		remove_task(TASKID_CLOSECONNECTION);
	}
}

public task_closeconnection()
{
	socket_close(g_Socket);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Поддръжка / Помощ”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 27 госта