[cs1.6] 如何判断玩家是否在滑坡
我要做KZ 的插件, 玩家存点的时候 不知道 是不是在滑坡判断在不在滑坡 怎么去写呢 IsUserSurfing(id){
// 首先检查玩家是否还活着,只有活着的玩家才能进行滑坡
if( is_user_alive(id) )
{
// 获取玩家的状态标志,检查玩家是否站在地上
new flags = entity_get_int(id, EV_INT_flags);
if( flags & FL_ONGROUND )
{
// 如果玩家正处于地面,则肯定不是在滑坡,直接返回0
return 0;
}
// 准备进行射线检测,先获取玩家当前位置
new Float:origin, Float:dest;
entity_get_vector(id, EV_VEC_origin, origin);
// 设置射线检测的目标点,在玩家脚下稍下的位置
dest = origin; // X坐标不变
dest = origin; // Y坐标不变
dest = origin - 1.0; // Z坐标减小,模拟脚部位置
// 创建一个追踪实体,准备执行射线追踪
new ptr = create_tr2();
// 执行实体包围盒追踪,从玩家当前位置到预设的目标点
engfunc(EngFunc_TraceHull, origin, dest, 0, flags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, ptr);
// 获取追踪结果中射线穿过的比例
new Float:flFraction;
get_tr2(ptr, TR_flFraction, flFraction);
// 如果射线没有遇到障碍物直接穿透(即到达地面或更远),则不视为滑坡
if( flFraction >= 1.0 )
{
free_tr2(ptr); // 释放追踪实体所占资源
return 0;
}
// 获取碰撞点的法线向量,用于进一步分析
get_tr2(ptr, TR_vecPlaneNormal, dest);
free_tr2(ptr); // 释放追踪实体
// 这里直接检查碰撞面法线的Z分量是否小于等于0.7来决定是否滑坡
return dest <= 0.7; // 若玩家脚下表面接近水平,则认为是在滑坡
}
// 如果玩家不存活,直接返回不是在滑坡
return 0;
}
代码来源:https://forums.alliedmods.net/showpost.php?p=2045545&postcount=6 很好很强大 k1nader 发表于 2024-5-27 20:30
代码来源:https://forums.alliedmods.net/showpost.php?p=2045545&postcount=6
卧槽 你是2哥还是k哥本人?
页:
[1]