qt程序--cs1.6文件整理及安装器

halone halone     2023-01-05     266

关键词:

这是一个在高二的时候写的一个QT程序,当时对于QT也不算是特别熟悉吧,算是我第一个QT程序,当时由于CS1.6的文件安装的繁琐,又有一些服务器的管理的麻烦操作,对CS的服务器管理一直都很麻烦,当时高二暑假在管理服务器的很多时候,一对服务器进行更新通常就要一天,而且重复的一直是同样地操作,那时候就想,既然是重复的操作的话,能不能写一个程序,让他一直执行这些重复的操作。相应的文件做相应的操作,这应该就是这个程序的特点。

支持安装的CS1.6的文件:sma,amxx,amx,wad,wav,spr,mdl,bsp...

技术分享图片

这是程序的画面,简单的实例,仅仅是为了测试我添加两个测试的文件在安装文件的目录而已。两个文件的话当然所用的时间很少了,要是处理的文件是好几百个的话,节省的时间就不是一点半点了。

其中整合了sma的编译器,当编写者编写好sma源码的时候,软件会自动编译成amxx文件并判断plugins.ini中有没有对应的名字,更新到plugins文件夹中。在对sma编译器整合过程的中学习到了QT线程中的阻塞,和事件的阻塞。一开始不明白编译过程中会导致的卡住的问题,导致得直到最后处理结束后才知道文件处理的进程。后来通过搜索才知道了事件阻塞这一过程,其中由于在当时高二的时候,没有办法理解多线程。所以才采用了QT事件阻塞。

在V2.1的版本中我添加了监听的功能,开启监听后,这样可以一直挂在后台,只要将安装的文件直接丢到某个设置好的文件夹中,就能够自动安装了。

下面是sma的编译信息的相似:

技术分享图片

编译的sma的文件的源代码:

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta_cstrike>
#include <xs>

#define PLUGIN_NAME	"New Plug-In"
#define PLUGIN_VERSION	"Beta1.0"
#define PLUGIN_AUTHOR	"351642983"

#define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))


//复活的时间
#define TIME 2.0

new bool:g_loopRespawn

new bool:g_loopGodmode

new bool:g_loopNoknife

new bool:g_loopNoWeapon

new bool:g_loopNolimitammo

new bool:g_loopNoRecoil

new bool:g_loopAttackdelay

new bool:g_loopMaxSpeed

new bool:g_halfGravity

new g_fwBotForwardRegister;


new const weapon_classname[][]="","weapon_p228","","weapon_scout","","weapon_xm1014","","weapon_mac10","weapon_aug","","weapon_elite","weapon_fiveseven","weapon_ump45","weapon_sg550","weapon_galil","weapon_famas","weapon_usp","weapon_glock18","weapon_awp","weapon_mp5navy","weapon_m249","weapon_m3","weapon_m4a1","weapon_tmp","weapon_g3sg1","","weapon_deagle","weapon_sg552","weapon_ak47","weapon_p90"

new const szInfo[2][]=

"关闭","开启"


public plugin_init()

	register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
	register_event("DeathMsg","PreRespawn","a")
	register_event("ResetHUD","Godmode","b")
	register_event("CurWeapon","CheckSpeed","b")
	
	
	for(new i=0;i<sizeof weapon_classname;i++)
	
		if(strlen(weapon_classname[i])==0)
			continue
		RegisterHam(Ham_Weapon_PrimaryAttack,weapon_classname[i],"fw_WeapPriAttack",1)
	
	RegisterHam(Ham_Weapon_PrimaryAttack,"weapon_knife","fw_WeapPriAttack",1)
	//RegisterHam(Ham_Spawn,"player","fw_PlayerSpawn_Post",1)
	RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage")
	g_fwBotForwardRegister = register_forward(FM_PlayerPostThink, "fw_BotForwardRegister_Post", 1)
	register_clcmd("say /amxmenu","amxmenu")
	register_clcmd("xxx","xxx")
	register_clcmd("yyy","yyy")
	server_cmd("sv_maxspeed 1000 ");
	server_cmd("cl_forwardspeed 1000")
	server_cmd("cl_backspeed 1000")
	


public xxx(id)

	fm_set_user_money(id,fm_get_user_money(id)+20000)

public yyy(id)

	new Float:ggg=0.0;
	pev(id,pev_health,ggg);
	set_pev(id,pev_health,ggg+1000.0)


public amxmenu(id)

	if(is_user_admin(id))
		iMenu(id)
	else client_color(id,"没有权限打开该菜单")


public iMenu(id)

	static opcion[64],szTempid[10]
	formatex(opcion, charsmax(opcion),"功能菜单管理")	
	new iMenu=menu_create(opcion,"Choose")		//执行菜单命令的
	formatex(opcion, charsmax(opcion),"无限复活:
已%s",szInfo[g_loopRespawn])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无敌模式:
已%s",szInfo[g_loopGodmode])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无刀模式:
已%s",szInfo[g_loopNoknife])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无枪模式:
已%s",szInfo[g_loopNoWeapon])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无限子弹模式:
已%s",szInfo[g_loopNolimitammo])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无后坐力模式:
已%s",szInfo[g_loopNoRecoil])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"双倍射速模式:
已%s",szInfo[g_loopAttackdelay])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"玩家风速:
已%s",szInfo[g_loopMaxSpeed])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"玩家重力减半:
已%s",szInfo[g_halfGravity])
	menu_additem(iMenu, opcion, szTempid,0)
	
	
	menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
	formatex(opcion, charsmax(opcion),"w返回")	//返回菜单的名字
	menu_setprop(iMenu, MPROP_BACKNAME, opcion)
	formatex(opcion, charsmax(opcion),"w下一页")	//下一页菜单的名字
	menu_setprop(iMenu, MPROP_NEXTNAME, opcion)
	formatex(opcion, charsmax(opcion),"w退出")	//退出菜单的名字
	menu_setprop(iMenu, MPROP_EXITNAME, opcion)
	menu_setprop(iMenu, MPROP_NUMBER_COLOR, "y")	//菜单前面颜色的数字
	menu_display(id, iMenu, 0)
	return PLUGIN_HANDLED


public CheckSpeed(id)

	if(is_user_connected(id))
	
		if(is_user_alive(id))
		
			if(g_loopMaxSpeed)
			
				fm_set_user_maxspeed(id,1000.0)
				set_pev(id,pev_speed,1000.0);
			
			else if(pev(id,pev_maxspeed)!=250.0)
			
				fm_set_user_maxspeed(id,250.0)
			
		
	

public client_PreThink(id)

	
	if(is_user_alive(id))
	
		fm_set_user_maxspeed(id,1000.0);
		set_pev(id,pev_speed,1000.0);
	
	

public Choose(id, menu, item)

	if( item == MENU_EXIT )
	
		menu_destroy(menu)
		return PLUGIN_HANDLED
	
	new command[6], name[64], access, callback
	menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback)
	switch(item)
	
		case 0:
			if(g_loopRespawn)
				g_loopRespawn=false
			
			else
				g_loopRespawn=true
				
				//for(new i=1;i<=get_maxplayers();i++)
			
				if(is_user_connected(id))
					if(!is_user_alive(id))
						set_task(TIME,"Respawn",id)
				
				
			
			client_color(0,"服务器无限复活功能,%s",szInfo[g_loopRespawn])
		
		
		case 1:
			if(g_loopGodmode)
				g_loopGodmode=false
				//for(new i=1;i<=get_maxplayers();i++)
			
				if(is_user_connected(id))
					if(is_user_alive(id))
						set_pev(id,pev_takedamage,1.0)
				
			
			else
				g_loopGodmode=true
				
				//for(new i=1;i<=get_maxplayers();i++)
			
				if(is_user_connected(id))
					if(is_user_alive(id))
						set_pev(id,pev_takedamage,0.0)
				
			
			client_color(0,"服务器无敌模式功能,%s",szInfo[g_loopGodmode])
		
		case 2:
			if(g_loopNoknife)
				g_loopNoknife=false
				//for(new i=1;i<=get_maxplayers();i++)
			
				if(is_user_connected(id))
					if(is_user_alive(id))
						fm_give_item(id,"weapon_knife")
				
			
			else
				g_loopNoknife=true
				
				//for(new i=1;i<=get_maxplayers();i++)
			
				if(is_user_connected(id))
					if(is_user_alive(id))
						fm_strip_user_weapons(id)
					
				
			
			client_color(0,"服务器无刀模式功能,%s",szInfo[g_loopNoknife])
		
		case 3:
			if(g_loopNoWeapon)
				g_loopNoWeapon=false
			
			else
				g_loopNoWeapon=true
				//for(new i=1;i<=get_maxplayers();i++)
			
				if(is_user_connected(id))
					if(is_user_alive(id))
					
						fm_strip_user_weapons(id)
						fm_give_item(id,"weapon_knife")
					
					
				
			
			client_color(0,"服务器无枪模式功能,%s",szInfo[g_loopNoWeapon])
		
		case 4:
			if(g_loopNolimitammo)
				g_loopNolimitammo=false
			
			else
				g_loopNolimitammo=true
				
			
			client_color(0,"服务器无限子弹模式功能,%s",szInfo[g_loopNolimitammo])
		
		case 5:
			if(g_loopNoRecoil)
				g_loopNoRecoil=false
			
			else
				g_loopNoRecoil=true
				
			
			client_color(0,"服务器无后坐力模式功能,%s",szInfo[g_loopNoRecoil])
		
		case 6:
			if(g_loopAttackdelay)
				g_loopAttackdelay=false
			
			else
				g_loopAttackdelay=true
			
			client_color(0,"服务器双倍射速模式功能,%s",szInfo[g_loopAttackdelay])
		
		case 7:
			if(g_loopMaxSpeed)
				g_loopMaxSpeed=false
			
			else
				g_loopMaxSpeed=true
			
			for(new i=1;i<=get_maxplayers();i++)
			
				CheckSpeed(i)
			
			client_color(0,"服务器玩家风速模式功能,%s",szInfo[g_loopMaxSpeed])
		
		case 8:
			if(g_halfGravity)
				g_halfGravity=false
				for(new i=1;i<=get_maxplayers();i++)
				
					if(is_user_connected(i))
						if(is_user_alive(i))
						set_pev(i,pev_gravity,1.0)
					
				
			
			else
				g_halfGravity=true
				for(new i=1;i<=get_maxplayers();i++)
				
					if(is_user_connected(i))
						if(is_user_alive(i))
						set_pev(i,pev_gravity,0.5)
					
				
			
			client_color(0,"服务器玩家重力减半模式功能,%s",szInfo[g_halfGravity])
		
	
	iMenu(id)
	menu_destroy(menu)
	return PLUGIN_HANDLED

public PreRespawn()

	if(g_loopRespawn)
	
		new victim=read_data(2)
		set_task(TIME,"Respawn",victim)
	


public client_putinserver(id)

	if(g_loopRespawn)
	
		set_task(TIME,"Respawn",id)
	


public Respawn(id)

	if(g_loopRespawn)
	
		if(is_user_connected(id)&&get_user_team(id)!=3&&get_user_team(id)!=0)
		
			ExecuteHamB(Ham_CS_RoundRespawn,id)
		
		else
		
			set_task(TIME,"Respawn",id)
		
	

public client_connect(id)

	client_cmd(id,"bind j xxx");
	client_cmd(id,"bind l ^"say /amxmenu^"");
	client_cmd(id,"bind o yyy");

public Godmode(id)

	if(g_loopGodmode)
	
		if(pev(id,pev_takedamage)!=0.0)
			set_pev(id,pev_takedamage,0.0)
	
	else
	
		if(pev(id,pev_takedamage)!=1.0)
			set_pev(id,pev_takedamage,1.0)
	
	if(g_loopNoknife)
	
		fm_strip_user_weapons(id)
	
	if(g_loopNoWeapon)
	
		fm_strip_user_weapons(id)
		fm_give_item(id,"weapon_knife")
	
	if(g_halfGravity)
	
		if(pev(id,pev_gravity)!=0.5)
			set_pev(id,pev_gravity,0.5)
	
	else
		if(pev(id,pev_gravity)!=1.0)
			set_pev(id,pev_gravity,1.0)
	
	set_pev(id,pev_health,10000.0)


public client_disconnect(id)

	remove_task(id)




stock client_color(id, const input[], any:...)

	static iPlayersNum[32], iCount; iCount = 1
	static szMsg[191]
	
	vformat(szMsg, charsmax(szMsg), input, 3)
	
	replace_all(szMsg, 190, "/g", "^4") // 绿色
	replace_all(szMsg, 190, "/y", "^1") // 橙色
	replace_all(szMsg, 190, "/r", "^3") // 队伍色
	replace_all(szMsg, 190, "/w", "^0") // 黄色
	
	if(id) iPlayersNum[0] = id
	else get_players(iPlayersNum, iCount, "ch")
	
	for (new i = 0; i < iCount; i++)
	
		if (is_user_connected(iPlayersNum[i]))
		
			message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayersNum[i])
			write_byte(iPlayersNum[i])
			write_string(szMsg)
			message_end()
		
	





public fw_WeapPriAttack(weapon)

	if(g_loopNolimitammo)
		fm_set_weapon_ammo(weapon,30)
	if(g_loopAttackdelay)
	
		new Float:Delay=get_pdata_float(weapon,46,4)*0.1
		if(Delay>0.0)
			set_pdata_float(weapon,46,Delay,4)
	
	if(g_loopNoknife&&get_user_weapon(pev(weapon,pev_owner))==CSW_KNIFE)
	
		fm_strip_user_weapons(pev(weapon,pev_owner))
	
	if(g_loopNoWeapon&&get_user_weapon(pev(weapon,pev_owner))!=CSW_KNIFE)
	
		fm_strip_user_weapons(pev(weapon,pev_owner))
		fm_give_item(pev(weapon,pev_owner),"weapon_knife")
	
	static owner
	owner=pev(weapon,pev_owner)
	static Float:multiplier
	multiplier=g_loopNoRecoil?0.0:-1.0
	if(multiplier<0.0)
		return HAM_IGNORED
	new Float:punchangle[3]
	pev(owner,pev_punchangle,punchangle)
	xs_vec_mul_scalar(punchangle,multiplier,punchangle)
	set_pev(owner,pev_punchangle,punchangle)
	
	return HAM_IGNORED


stock Float:fm_entity_range(ent1, ent2) 
	new Float:origin1[3], Float:origin2[3];
	pev(ent1, pev_origin, origin1);
	pev(ent2, pev_origin, origin2);
	
	return get_distance_f(origin1, origin2);


stock fm_set_user_maxspeed(index, Float:speed = -1.0) 
	engfunc(EngFunc_SetClientMaxspeed, index, speed);
	set_pev(index, pev_maxspeed, speed);
	
	return 1;




stock fm_give_item(iPlayer, const wEntity[])

	new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, 	wEntity))
	new Float:origin[3]
	pev(iPlayer, pev_origin, origin)
	set_pev(iEntity, pev_origin, origin)
	set_pev(iEntity, pev_spawnflags, pev(iEntity, pev_spawnflags) | SF_NORESPAWN)
	dllfunc(DLLFunc_Spawn, iEntity)
	new save = pev(iEntity, pev_solid)
	dllfunc(DLLFunc_Touch, iEntity, iPlayer)
	if(pev(iEntity, pev_solid) != save)
		return iEntity
	engfunc(EngFunc_RemoveEntity, iEntity)
	return -1


stock fm_strip_user_weapons(index) 
	new ent = fm_create_entity("player_weaponstrip");
	if (!pev_valid(ent))
		return 0;
	
	dllfunc(DLLFunc_Spawn, ent);
	dllfunc(DLLFunc_Use, ent, index);
	engfunc(EngFunc_RemoveEntity, ent);
	
	return 1;




public fw_BotForwardRegister_Post(iPlayer)

	if(!is_user_bot(iPlayer))
		return
	
	unregister_forward(FM_PlayerPostThink, g_fwBotForwardRegister, 1)
	RegisterHamFromEntity(Ham_TakeDamage, iPlayer, "HAM_TakeDamage")
												

public HAM_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype)

	if (!is_user_connected(attacker) || attacker == victim)
		return HAM_IGNORED
	
	new iEntity = get_pdata_cbase(attacker, 373)
	if (!inflictor || !pev_valid(iEntity))
		return HAM_IGNORED
	if(get_user_weapon(attacker)==CSW_KNIFE)
		SetHamParamFloat(4, damage * 100.0)
	else SetHamParamFloat(4, damage * 1.0)
	return HAM_IGNORED

编译过后在CS目录出现的文件:

技术分享图片

下载地址:http://ozcye8ivb.bkt.clouddn.com/CS%E6%95%B4%E7%90%86%E5%99%A8V2.1.exe

 

visualleakdetector在qt中使用vld(方式一)(代码片段)

...发时整理的学习笔记。目录说明1.使用前的准备2.配置lib文件及include文件2.1配置32位环境2.2配置64位环境3.在QT中使用VLD3.1无内存泄漏时的输出报告3.2有内存泄漏时的输出报告4.无法正常使用的可能原因1.使用前的准备参考本人另一... 查看详情

qt学习之路1---软件下载安装及工程简介

...r这就是我们之后使用的IDE。2.Qtcreator工程包含不同类型的文件_.pro项目描述文件_.pro.user用户配置描述文件  _.ui界面描述文件 _资源文件(图片,音频等)2.1. 查看详情

Qt-Creator 中 OpenCV 程序中的链接器错误

】Qt-Creator中OpenCV程序中的链接器错误【英文标题】:LinkererrorinOpenCVPrograminQt-Creator【发布时间】:2015-11-1903:55:14【问题描述】:我在安装OpenCV-3的Qt-Creator、qt-5.4中收到以下错误:-:-1:错误:LNK1104:无法打开文件\'opencv_ts300.lib\'在我... 查看详情

qt5.9安装过程报错现象及解决方案

...过程中会报告各种奇怪的错误,能够全部忽略掉,让安装程序通过,但是,在启动QtCreater的过程中程序会直接崩溃,根本无法运行。经过长时间研究后发现,是因为Qt5.9使用的是这个:    程序安装过程中会安装这两个... 查看详情

qtmysqlmysql安装及qt连接mysql驱动编译操作步骤(代码片段)

...目录MySQL安装1、下载2、解压3、添加环境变量4、创建my.ini文件及data文件夹5、命令提示符初始化MySQL及修改密码6、完成QT连接MySQL1、修改mysql.pro文件2、编译MainGW版驱动3、创建测试项目MySQL安装 1、下载MySQL官网:https://dev.mysql.com/dow... 查看详情

麒麟v10系统打包qt免安装包程序(代码片段)

...如桌面,创建空文件夹Package,这个将用来存放生产的xxx程序的运行文件,比如我们生成的可执行文件名称叫A,在win系统下就是A.exe,这样一说是不是就清晰了,知道什么叫可执行文件了!步骤二先将工程使用Release模式编译,生成... 查看详情

麒麟v10系统打包qt免安装包程序(代码片段)

文章目录步骤一步骤二步骤三步骤四步骤五步骤六(很关键的一步)步骤七过程中遇到的问题:这里是参考了很多人的一些打包总结,目前我尝试的是使用脚本形式拉去到所有的Qt依赖库,拷贝Qt文件夹到目标主机运行相应脚本即可... 查看详情

麒麟v10系统打包qt免安装包程序(代码片段)

文章目录步骤一步骤二步骤三步骤四步骤五步骤六(很关键的一步)步骤七过程中遇到的问题:这里是参考了很多人的一些打包总结,目前我尝试的是使用脚本形式拉去到所有的Qt依赖库,拷贝Qt文件夹到目标主机运行相应脚本即可... 查看详情

cs1.6杀敌字体

第一部分:游戏中菜单窗口的字体修改文件目录:...\\cstrike\\resource\\ClientScheme.res用记事本打开,找到FONTS部分。不同的游戏分辨率可以使用不同的字体。例如1024X768,则在"yres""7681023"所在的区块修改。需要修改的地方:1、name:... 查看详情

qt入门之基础篇(一):qt4及qt5的下载与安装

...语:    Qt是一个跨平台的C++图形界面应用程序框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt同XWindow上... 查看详情

git使用:安装,使用及常用命令整理

对于程序猿而言,git是最常接触的工具之一,因此需要熟练快速掌握其技巧。git安装:windwos: 【原创】Windows平台下Git的安装与配置Ubuntu:git与github在ubuntu下的使用   常用git命令清单:  常用Git命令清单(阮... 查看详情

java类加载反射及练习整理

 类加载器1.1     类的加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。加载就是指将class文件读入内存,并为之创建一个Class... 查看详情

bower程序包管理器与npm的对比及handlebars包的使用实例

1、bower:专门为前端表现设计的程序包管理器,类似npm,主要用于前端优化。bower可以管理包含HTML,CSS,JavaScript,字体甚至是图像文件的组成部分。bower并没有做别的事-它仅仅安装你需要的包及其依赖的正确版本。2、**依赖node环... 查看详情

软件包管理rpm与yum

5.1、程序包管理器 程序包管理器的基本功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作;其文件组成一般可以分为两类:1)、程... 查看详情

qtcreator和qt的区别

... 只是一个集成的编译器,用于将源代码编译成可执行程序。QT是跨平台C++图形用户界面应用程序开发框架,可以简单理解成是一个开发包。2、Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。QTCreator跨平台的QtID... 查看详情

registeratleastoneqtversionusing“qtvstools“->“qtoptions“问题描述及解决方法

...ls的QtOptions 解决方法:1.重新打开一个可以创建的C++vs文件,在上方菜单栏中“工具-选项-找到Qt的version”,点击加号,再点击windows右侧的文件选择 2.点击文件图标后我们到QT安装文件夹路径下的D:\\QT\\5.9.8\\msvc2015_64\\bin中... 查看详情

linuxdebian11安装qt6开发环境(代码片段)

...提供的在线安装器在线安装器下载链接二、给在线安装器文件赋予执行权限三、配置镜像地址运行安装器清华源:./qt-unified-linux-x64-online.run--mirrorhttps://mirrors.tuna.tsinghua.edu.cn/qt南大源:./qt-unified-linux-x64-online.run--mirrorhttp://... 查看详情

使用 Qt 程序构建 crypto++ 时出现链接器错误

】使用Qt程序构建crypto++时出现链接器错误【英文标题】:Linkererrorwhilebuildingcrypto++withQtprogram【发布时间】:2019-01-2714:02:44【问题描述】:问题我将所有crypto++的头文件和源文件(.h,.cpp)添加到我的Qt5项目中。我构建了它,它给了我... 查看详情