欢迎光临散文网 会员登陆 & 注册

Gmod lua插件(Dishonored_Jump)解析

2023-03-26 19:15 作者:扎之克  | 我要投稿

版本1.1

这个插件比较简单,主要是如何利用gmod事件编写。

首先是Gmod wiki连接:https://wiki.facepunch.com/gmod/

搜索hook就能找到这些事件。

第二,可以用vscode编辑gmod lua文件,vscode 有gmod lua插件,比较方便

vscode中的gmod插件

二段跳:在地面上按住空格键0.3s触发二段跳

玩家按键按下和弹起事件

按下事件
弹起事件

利用hook.add(事件名,功能名,函数)添加事件的功能,函数可以像是下面这样的匿名函数

获取玩家跳跃键状态

hook.Remove(事件名,功能名)可以移除添加的功能。

以上代码就能获取玩家的跳跃键状态,如果说起跳时在地上,那么创建一个0.3s的定时器,定时器到期后判断跳跃键是否按下,如果满足条件就给玩家加个向上的速度。

timer. Create(名字,时长 , 执行次数, 函数)

这样就实现了二段跳。

有些需要注意的:

1、某些函数只能在服务器端实现(也就是在lua/autorun/server/下或者用lua_openscript打开),比如设置速度。

2、设置速度与获取速度似乎不对等,需要乘上一个系数

视角晃动功能:落地时视角晃动

在耻辱中,玩家掉到地上的话,视角会像果冻或者说弹簧那样晃动。这里用带阻尼的弹簧去模拟,视角的晃动量可以用数值法或符号法解

撞击地面事件:

设置站立时视角偏移和设置当前视角偏移:

这两个比较奇怪,站立时,第一个似乎只对Z方向偏移启作用,第二个只对XY方向启作用,

蹲下时,第二个对XYZ都起作用,第一个可能对XY方向其作用,两个可能需要结合着用。

再对晃动程度做个限制,直接限制初始条件的速度就行。

这样就实现了视角晃动。

一些常数:

 1、默认站立视角偏移(0,0,64)

 2、默认蹲下视角偏移(0,0,28)

攀爬功能:

这里用TraceLine来判断,相当于射出一条线,然后返回线碰到的位置和法向量。

那这任务相当于做一个避障判断,我不擅长这个,所以这插件BUG比较多。

这个事件每tick一次:

这里8个tick检测一次。

检测

首先是水平扫描,在玩家位置创建一组间隔均匀、长度50左右的探测器

蹲着能通过的最大高度为36,为了不错过这个窗口,所以间隔为36的一半,当有探测器碰到了并且法向量Z值小于cos(45°),45°是能站稳的平面最小角度,这说明可能碰到障碍物,延长其他探测器以获得更多信息。

根据探测器的结果来判断哪个高度可能有可通行的路径,这里这样判断,上个与下个水平距离至少拉开10且不能再同一平面,防止以下情况。

通过点积与水平距离差来大致判断

通过后,再检测一下上面,由于没有准确的障碍物高度,所以大概判断一下,缝隙别太小就行

通过后利用二分法来搜索落脚点,实际上游戏环境比较复杂,而寥寥几次的Traceline信息量有限,所以必须做一些假设。

比较常见的障碍物形状差不多这样:

假设在障碍物上能找到个点将梯度符号给分割开来,然后类似找极值,对落脚点要求是能站住,并且高度也有一定要求,这样就比较简单了。

收敛条件:对高度有点要求,大致判断一下能否站稳
变化率符号:这两非异或一下可以得到

再列举一些情况,减少BUG

找到落脚点后再大致判断一下这个点会不会卡住。

落脚点判断完成了,做个抛物线插值到落脚点就可以了。

改变实体位置,只能在服务器端运行
晃动玩家视角角度

如果说检测是在客户端跑的,那就需要与服务器通信,比如说客户端发个定位,让服务器将玩家移动到那:

客户端:

服务器端:

类似用hook.add添加事件

创建菜单和控制台变量:

CreateConVar:创建控制台变量,如果已有就返回那个变量

第一个参数是名字,第二是默认值

FCVAR那些是变量的特性,wiki中可以查到

添加控制台变量

Utilities是指添加到“设置”里


添加菜单

进度条、复选框之类得指定调节刚才创建的控制台变量

效果



Gmod lua插件(Dishonored_Jump)解析的评论 (共 条)

分享到微博请遵守国家法律