【SourceMod】如何做一个穿透型 Trace?

发布于 2019-08-02  536 次阅读


根据 SDKTools_Trace.inc 内的 TR_GetEntityIndex 函数说明, 发现傻屌 SM 的 TraceResult 似乎是碰到了什么就终止.. 因此想要做一个穿透型的 Trace 就得自己整了.. GTMD傻屌SourceMod..

/**
* 返回阻挡 Trace 的实体索引.
*
* @param hndl Trace Handle, 或者使用 INVALID_HANDLE 来使用全局 Trace 结果.
* @return 如阻挡则返回实体索引, 如没有阻挡则返回 -1 .
* @error 无效的 Handle.
*/
native int TR_GetEntityIndex(Handle hndl=INVALID_HANDLE);

自己动手, 丰衣足食. 稍稍动了一下大脑, 做出了下图:

Copyright, EmeraldGhost, 2019.

首先从起点(玩家 1)开始 Trace, 碰到玩家 2 后 Trace 1 停止. 获取 Trace 1 的 EndPoint, 继续运用 Trace 1 的 vecAngle, 开始新的 Trace 2, 如此循环往复, 直到碰到的是 World 为止.

也就是可以写一个 stock, 拿 while 调用 stock, 对所有在线上的 client 进行操作. 这样似乎就方便许多了.


渣男兼废物. SourceMod / AmxModX 插件写手.