QT程序--CS1.6文件整理及安装器

这是一个在高二的时候写的一个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),"无限复活:\r已%s",szInfo[g_loopRespawn])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无敌模式:\r已%s",szInfo[g_loopGodmode])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无刀模式:\r已%s",szInfo[g_loopNoknife])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无枪模式:\r已%s",szInfo[g_loopNoWeapon])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无限子弹模式:\r已%s",szInfo[g_loopNolimitammo])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"无后坐力模式:\r已%s",szInfo[g_loopNoRecoil])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"双倍射速模式:\r已%s",szInfo[g_loopAttackdelay])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"玩家风速:\r已%s",szInfo[g_loopMaxSpeed])
	menu_additem(iMenu, opcion, szTempid,0)
	formatex(opcion, charsmax(opcion),"玩家重力减半:\r已%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

原文地址:https://www.cnblogs.com/halone/p/9746462.html

时间: 2024-11-06 22:33:31

QT程序--CS1.6文件整理及安装器的相关文章

【win】【qt5打包】【qt程序打包成一个可执行文件(带图标任何win都可以运行哦)】

[前言] 业务需求将qt程序打包成win可执行文件.咱是做linux的,奈何用的麒麟系统,程序运行在win,好嘛,重新在win qtcreator编译后打包呗. [目标] 1.给qt程序添加一个图标. 2.qt程序打包. 3.将打包后的qt程序做成单个文件. [正文] 1.给qt程序添加一个图标: 首先确定程序可以正常编译,运行. 然后在项目代码目录下放一个xxx.ico文件,图片不要太大32*32刚好. 再然后打开项目的.pro文件,在里面加入RC_ICONS = xxx.ico. 最后编译程

Ubuntu10.04下安装Qt4和创建第一个Qt程序

1.首先安装Qt4并采用Qt Creator进行开发演示 (1)在Terminal中输入: sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer 其中: qt4-dev-tools 中包括了Qt Assistant,Qt Linguist,Qt Creator     qt4-doc 这个是帮助文档     qt4-qtconfig Qt的配置工具,这个装好默认好     qt4-demos

QT程序制作deb包并安装在应用程序菜单

制作原理:打包:将QT制作的源程序(没有编译的)用debian压缩打包(这里是用脚本对源程序再编译)安装:将deb包中的源程序解压(默认解压到根目录)到规定系统文件中并编译(postinst脚本)卸载:将解压的所有文件删除(postrm脚本)例子:1.新建deb包文件myded|——mydeb     |————application           |——addressbook(此目录存放QT的源程序和configure脚本)           |————lib             

一些遇到的Qt程序在Windows平台间移植问题整理

今天尝试把Qt程序移植到各种虚拟机中测试,由于Qt的依赖库报告往往不能显示出全部依赖库.结果频频出现问题,好不容易全部解决了,这里给出一些套路. 首先对于Qt版本,我用过很多,最终表示现阶段推荐MingGW的版本(此版自带MingGW),官网链接: Qt 5.4.2 for Windows 32-bit (MinGW 4.9.1, 852 MB) (info) 我个人百度网盘链接:Qt 5.4.2 MinGW 安装时要注意勾选上MinGW ,如果你没有的话.此版本可以在WindowsXP下运行.

NSIS打包Qt程序和Qt 安装程序的依赖,及若干问题

本文介绍,使用NSIS打包,nsis版本是v2.46. 安装nsis工具. 打开nsis菜单 选择可视化脚本编辑器,在选择  文件->新建脚本向导, 根据个人情况,一步一步填写进行 如将目的目录改为: 完成. 保存脚本文件之后,点击NSIS菜单项的“编译脚本”,编译成功即生成了exe文件,一般文件和脚本在同一个文件夹中. QT程序的依赖项:使用Qt工具. cd 到windeployqt.exe所在文件夹 执行即可将依赖项添加到myapp文件夹.如果仍然缺少dll,则手动将该dll复制到exe所在

[转]MSI安装程序中的文件替换

原文链接:http://teach.hanzify.org/article/652-1233562028.html 前言 最近有汉化朋友问起如何不重新制作MSI文件,而直接用汉化好的文件替换MSI安装程序中的文件.为此,将本人的实践经验作个总结,供各位汉化人参考.有错误的地方烦请指正.※说明:目前可以用于MSI编辑的软件很多,但是有些软件在保存时会在MSI文件中写入一些自己的表或内容,有些会另外嵌入一个CAB文件,使得MSI文件增大.而这里提供的方法保证不会写入任何不必要的内容和文件.※关键点:

C++小程序(1)——文件整理工具

网上下载的漫画是jpg或png之类的图片文件,用系统自带的图片管理器看不方便,想要能把图片想网页一样浏览的功能,找了很多图片管理器也没有带这个功能,于是就自己编写了一个小程序实现. 思想就是在图片目录添加一个html文件,里面包含所有漫画图片,就可以使用浏览器观看,效果比在电脑上直接打开浏览好多了. 主要实现两个步骤:(1)获取该目录下的所有图片的文件名,把它们保存到一个vector里面备用.(2)生成对应的html文件. 第二步比较简单,只需要一些很简单的的html语句: <body> &l

使用VS2010开发Qt程序的4点经验(QT4到QT5的升级,更改sln文件,切换工程使用的Qt库,在VS的Solution Explorer视图中建立文件夹)

导读 相比于Qt Creator,我更喜欢用VS2010来进行开发.虽然启动时间相对较慢,但是VS下强大的快捷键和丰富的插件,以及使用多年的经验,都让我觉得在开发过程中得心应手.其中最重要的一点是,有时候Qt Creator报的错误莫名其妙.要根据提示找到错误根源显得无从下手.而VS的一般错误说明都比较人性化,即便在某些时候无从解决,也可以通过搜索引擎大致定位出错误的源头.下面是在调试网上的一些源代码的时候,积累下来的一点经验,记下来一来备忘,二来也可供后来人参考. The system can

安装程序无法复制文件 convlog.exe的解决方法

在安装的时候出现一个错误提示“安装程序无法复制文件CONVLOG.EX_”,上网找了很多资料,都说是因为版本问题,考虑到自己的服务器安装的是2003 SP1,后来打了补丁到SP2的,也就认为是版本问题,结果下了很多SP2版本也不行,再到网上搜索.有个说法是在运行-中输入“esentutl /p %windir%/security/database/secedit.sdb ” 就可以了,试了一下,还真管用,虽然不知道什么原理,但还是把它记录下来吧,以后用! C:\Documents and Set