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
QT程序--CS1.6文件整理及安装器的更多相关文章
- qt程序实现打开文件夹
QString path=QDir::currentPath();//获取程序当前目录 path.replace("/","\\");//将地址中的" ...
- 4、树莓派的中文:安装ftp,安装gcc,安装qt,编译qt程序,运行qt界面程序
本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ1222698 1.安装FTP:sudo apt-get install vsftpd 2.配置FTP,修改,/etc/vsftpd.conf # ...
- Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)
本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行. 默认前提:另外一个系统和本系统是同一个系统版本. 1,编写导出依赖包的脚本copylib.sh #!/bin/bash LibDir=$P ...
- 【win】【qt5打包】【qt程序打包成一个可执行文件(带图标任何win都可以运行哦)】
[前言] 业务需求将qt程序打包成win可执行文件.咱是做linux的,奈何用的麒麟系统,程序运行在win,好嘛,重新在win qtcreator编译后打包呗. [目标] 1.给qt程序添加一个图标. ...
- QT程序制作deb包并安装在应用程序菜单
制作原理:打包:将QT制作的源程序(没有编译的)用debian压缩打包(这里是用脚本对源程序再编译)安装:将deb包中的源程序解压(默认解压到根目录)到规定系统文件中并编译(postinst脚本)卸载 ...
- 一些遇到的Qt程序在Windows平台间移植问题整理
今天尝试把Qt程序移植到各种虚拟机中测试,由于Qt的依赖库报告往往不能显示出全部依赖库.结果频频出现问题,好不容易全部解决了,这里给出一些套路. 首先对于Qt版本,我用过很多,最终表示现阶段推荐Min ...
- 【最详细最完整】在Linux 下如何打包免安装的QT程序?
在Linux 下如何打包免安装的QT程序? 版权声明:嵌入式linux相关的文章是我的学习笔记,基于Exynos 4412开发板,一部分内容是总结,一部分是查资料所得,大家可以自由转载,但请注明出处! ...
- IIS安装出现“安装程序无法复制文件CONVLOG.EX_”的解决办法
重新安装了一次IIS,结果就在重新安装的时候,出现安装程序无法复制文件CONVLOG.EX_,上网找了找资料,是因为secedit.sdb 数据库的问题,既然是因为这个文件的问题,那么我们就可以使用w ...
- Ubuntu10.04下安装Qt4和创建第一个Qt程序
1.首先安装Qt4并采用Qt Creator进行开发演示 (1)在Terminal中输入: sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfi ...
随机推荐
- 洛谷 P2788 数学1(math1)- 加减算式
题目背景 蒟蒻HansBug在数学考场上,挠了无数次的头,可脑子里还是一片空白. 题目描述 好不容易啊,HansBug终于熬到了做到数学最后一题的时刻了,眼前是一堆杂乱的加减算式.显然成功就在眼前了. ...
- Promise 理解与使用
个人觉得这篇博客写的非常详细且易懂,推荐给小伙伴们~ https://www.cnblogs.com/lvdabao/p/es6-promise-1.html#!comments
- Vue.js系列之vue-router(上) (转载自向朔1992)
概述 Vue非常适用于实践单页面应用程序也就是平时大家说的比较多的SPA(single page application),这点应该了解过Vue的应该都知道吧.一般的单页面应用是基于路由或页面之间的链 ...
- Vue项目结构梳理
Vue项目结构图: 简单介绍目录结构 build目录是一些webpack的文件,配置参数什么的,一般不用动 config是vue项目的基本配置文件 node_modules是项目中安装的依赖模块 sr ...
- numpy次方计算
>>> 2**np.arange(3, 6) array([ 8, 16, 32])
- 关于C/C++的一些思考(5)
运算符重载函数的限制: 五个不能实现重载的符号:".", ".*", "::", "?", "sizeof&q ...
- mysql单实例多库与多实例单库
一.单实例多库: 一个mysql实例,创建多个数据目录. 规划: 实例路径:/usr/local/mysql 数据目录路径: (1)/usr/local/mysql/data (2)/usr/loca ...
- 分页语句where条件中的子查询有or关键字优化
背景 开发说: 有段SQL语句,去掉order by很快,有order by之后,查询1小时都无法返回结果. 我叫他把SQL扔给我看下. SQL代码及执行计划 select * from (selec ...
- nginx 集群
Nginx是什么? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器.一直纳闷这个X是怎么来 ...
- vim的操作命令
vim常用命令 在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code ...