请帮忙写个无限复活到出生点间隔3秒一次的小插件
就是普通的无限复活到出生点的插件 加个3秒一次的时间间隔给个码源有时候可能需要调整下时间
我给你一个仿csol复活的吧,自己修改一下参数就可以了
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#define PLUGIN_NAME "延迟复活"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "Hui"
new fixduck
new Float:time1
new tdos
new spawn_count
new waitime2, waitspawn
new r_bot, Float:saveorg
new Float:waitime
new KillCount
new Ducking
new spawn_cunge
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR); //注册插件名字,版本,作者
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") //给玩家注册一个死亡事件
register_event("TeamInfo", "player_joinTeam", "ae") //玩家进入服务器后选定人物的时候触发
register_forward(FM_PlayerPostThink, "Spawn_PostThink", 1) //注册玩家的思考
r_bot = register_forward(FM_PlayerPostThink, "fw_BotForwardRegister_Post", 1) //给BOT注册一个思考
set_msg_block( get_user_msgid( "ClCorpse" ), BLOCK_SET ) //让尸体不会一直存在
spawn_cunge = register_cvar("spawn_cg", "0") //是否可以原地复活(1可以,0不能)
fixduck = register_cvar("spawn_fixduck", "30.0") //修复死亡时玩家蹲着后复活后的高度
waitspawn = register_cvar("spawn_wait2", "1.0") //死亡后需要等几秒才能开始倒数
spawn_count = register_cvar("spawn_time","2") //复活需要多久
waitime2 = register_cvar("spawn_wait", "6.0") //进入服务器选定人物后要等待多久才能复活
}
//BOT的思考
public fw_BotForwardRegister_Post(id)
{
if (is_user_bot(id))
{
unregister_forward(FM_PlayerPostThink, r_bot, 1) //取消思考注册,这里就会只执行一次,而不是无限执行
RegisterHamFromEntity(Ham_Killed, id, "fw_PlayerKilled", 1) //给BOT注册死亡事件
}
}
//玩家的思考
public Spawn_PostThink(id)
{
if(is_user_alive(id) || !get_user_team(id)) //如果玩家是活着的,或者玩家没有选择阵营,不往下执行
return
if(waitime <= get_gametime()) //如果waitime时间小于当前游戏时间
{
if(time1 <= get_gametime()) //如果time1时间小于当前游戏时间
{
//这样的话,这个地方就是一秒执行一次
if(tdos >= 0) tdos -= 1 //如果tdos的值大于等于0,即减少1
time1 = get_gametime() + 1.0 //更新time1的存储时间为 当前游戏时间 + 1.0
}
if(tdos >= 0) //如果值大于等于0
{
client_print(id,print_center, "复活剩余时间 (%d秒)", tdos)
}
else //不然的话,值应该是-1,执行下面的
{
if(get_user_team(id) != 3) //玩家不是观察者
{
ExecuteHamB(Ham_CS_RoundRespawn, id)
client_print(id, print_center, "已经复活") //给玩家屏幕中间打印文字
//如果spawn_cunge参数为0,即返回
if(!get_pcvar_num(spawn_cunge)) return //如果参数没有开启原地复活
//在第一次进入服务器后等待复活,但是这个时候不需要设置坐标
//防止玩家第一次进入服务器复活后坐标设置到0坐标位置
if(KillCount)
{
if(Ducking) //如果玩家死亡的时候是蹲着的
{
saveorg += get_pcvar_float(fixduck) //修正高度
Ducking = 0 //修复Bug:变量存储为一直蹲着
}
set_pev(id, pev_origin, saveorg) //设置坐标
}
}
}
}
}
//死亡触发事件
public fw_PlayerKilled(vic, attacker)
{
if(!is_user_connected(vic)) //如果玩家没有进入服务器,那么不往下执行
return
//如果玩家是观察者,那么不往下执行
if(get_user_team(vic) == 3) return
tdos = get_pcvar_num(spawn_count) //存储复活需要多少秒
waitime = get_gametime() + get_pcvar_float(waitspawn) //存储死亡后需要等待多少秒才能[开始倒计时]
//这里是防止玩家第一次进入服务器,会被spawn_cg参数复活坐标设置到0坐标的问题
//这里的变量只会更新一次
if(KillCount < 1) KillCount = 1
//如果玩家的Flags是蹲着的,那么Ducking变量改成1
if(pev(vic, pev_flags) & FL_DUCKING) Ducking = 1
pev(vic, pev_origin, saveorg) //获取玩家当前位置(死亡的位置)
}
//玩家选择阵营触发事件
public player_joinTeam()
{
new id = read_data(1) //从客户端信息取值
if(!is_user_connected(id)) //如果玩家没有进入服务器,不往下执行
return
//以下代码都是为了玩家在进入服务器选定人物后 延迟触发复活的
new team = get_user_team(id) //声明team变量是获取玩家阵营
if(team != 3 && team) //如果玩家的阵营不是观察者并且已经有阵营了(没阵营的意思是:玩家没有选择菜单中的任何阵营)
{
tdos = get_pcvar_num(spawn_count) //让tdos变量更新为需要多久才能复活
waitime = get_gametime() + get_pcvar_float(waitime2) //存储变量为多久开始倒计时复活
}
} 论坛上好像有这个插件,搜索先 感谢朋友的提醒 找到了 不过有些小bug 帮忙改为不提示直接3秒后复活的好不
#include <amxmod>
#include <fun>
/*
*
* Set Cvar 'amx_respawn' 1 or 0
*
*/
new gmsgResetHUD
public death_msg()
{
if (get_cvar_num("amx_respawn") == 1)
{
new vIndex = read_data(2)
new svIndex
num_to_str(vIndex,svIndex,32)
set_task(2.0,"respawn",0,svIndex,32)
}
return PLUGIN_CONTINUE
}
public respawn(svIndex[])
{
new vIndex = str_to_num(svIndex)
user_spawn(vIndex)
message_begin(MSG_ONE,gmsgResetHUD,{0,0,0},vIndex)
message_end()
}
public plugin_init()
{
gmsgResetHUD = get_user_msgid("ResetHUD")
register_plugin("amx_respawn","0.2","f117bomb")
register_event("DeathMsg","death_msg","a")
register_cvar("amx_respawn","0")
return PLUGIN_CONTINUE
} raprush 发表于 2016-11-4 17:15
感谢朋友的提醒 找到了 不过有些小bug 帮忙改为不提示直接3秒后复活的好不
#include
#include
{:6_172:}改插件能力有限,还是等大神改吧! 感谢! 还有注释! 这个够我慢慢研究了!{:6_195:}
页:
[1]