GlowingTree880 / L4D2_LittlePlugins

L4D2_LittlePlugins
GNU General Public License v3.0
62 stars 7 forks source link

关于infect_rework和ai_tank_2.0的一些问题 #16

Closed Majestymo closed 11 months ago

Majestymo commented 11 months ago

mmexport1696662534257.png

mmexport1696662538992.png

mmexport1696662543501.png

mmexport1696662536606.png

mmexport1696662589751.png

mmexport1696662541091.png

特感刷新插件忘了有没有用最新inf_queue编译了,但是这个文件他貌似读取不到,权限都没问题,我以为是大小写问题都试了一下还是不行,另外如果超过6特这个inf_r会疯狂保存,ai_tank_2.0也是疯狂报错,但是可以起作用,昨天玩了一晚上2个多小时吧,就这么大了,树树子麻烦看看这是什么问题@GlowingTree880

Majestymo commented 11 months ago

另外事先已经用cvar命令更改特感数量限制了mmexport1696663860426.png

GlowingTree880 commented 11 months ago
  1. 关于超过 6 特无法刷新特感,inf_queue::getInfectedQueueArray Index out-of-bounds 7 数组越界的问题,请更新 Commit id 为 6a26d69 的最新版本,猜测你使用的可能是 7427829 之前的版本,关于这个问题详情请查看相关问题:Issue #10
  2. 关于 Ai Tank 2.0 无法找到特感数量 Cvar l4d_infected_limit 的问题,这个 Cvar 只会在 Ai Tank 插件开启消耗时才会读取其值,详情请查看:Ai HardSI readme L32-34,因为读取这个 Cvar 是帧操作,因此服务器运行中会一直报错,解决方法如下
    1. 请更改 OnPluginStartg_hSiLimit = FindConVar("l4d_infected_limit");l4d_infected_limit 为自己刷特插件的特感数量 Cvar
    2. 如果不使用插件刷特请更改为 g_hSiLimit = L4D2_GetScriptValueInt("MaxSpecials", -1); 获取导演系统默认特感数量
    3. 如果不使用消耗功能,请关闭消耗功能
  3. 关于 infected_control 无法读取 infected_queue.cfg 文件的问题,请确认在发生 超过 6 特无法刷新特感 问题到 未配置 16 特特感等待队列 中间有没有更改过 inf_queue 的版本

    1. 如发生 超过 6 特无法刷新特感问题,则更改为刷新 16 特时,获取超过 6 特的等待队列报错,退出 getInfectedQueue 函数,不会发生报 未配置 16 特的特感等待队列 的错误
    2. 如发生 未配置 16 特的特感等待队列 的错误,则表明插件已正确读取到 infected_queue.cfg 文件并成功将文件转为 KeyValue 树,请在 Lxxx 的日志文件中查看插件日志输出,而这个错误是在遍历完成所有等待队列发现全部为 null 值(也就是没有配置任何等待队列)才会报,这两个错误理论上是互斥的
    3. 理想情况下,16 特模式下将所有类型的特感配置在只能在 1,2,3,4 位置刷新,可以获取到特感刷新队列,但实际只会刷新 4 只特感,因为位置 4 后的所有位置均为配置允许刷新的特感种类

    请在更新完 6a26d69 版本后再次测试能否刷新超过 6 特,如仍有配置了 infected_queue.cfg 而仍然报 未配置特感等待队列 的情况,请测试是否 只有刷新某些特感数量(如 16,17,18 特) 时有这个问题还是均会出现

Majestymo commented 11 months ago

谢谢树树子,aitank我应该是没有仔细看readme了,因为我之前用inf_contr没有问题,就没有仔细看了,换了inf_r那个刷特数量的cvar变了所以疯狂弹错,另外inf_r重新按照你的流程排查了一下,发现现在可以其他十多个特了,但是后台依旧会有无法创建fakeclient的问题,不知道啥情况,会比实际设定的少几个,这是我现在的inf_q设定,是不是z_xxx_limit的问题,我稍后把限制都调到6试试,先谢谢树树子啦mmexport1696759493027.pngScreenshot_20231008-180929.jpg

Screenshot_20231008-181031.jpg

GlowingTree880 commented 11 months ago

请尝试更新 004f118 版本,对于 CreateFakeClient() returned Null 的问题

  1. 请检查服务器内玩家数量与设定特感数量之和是否大于 MaxClients (31) 客户端上限,如果超过 MaxClients 则超过 MaxClients 值的特感将会无法刷新
  2. 当然也可能是之前版本刷新每个特感仅调用一次 L4D2_SpawnSpecial 函数而并未检查返回值有效性的问题,这次更新增加了对每一个特感刷新的有效性检查,如果某次刷新无效,则会重试继续刷新这个特感若干次,皆无法刷新则跳过这个特感,刷新下一个特感
Majestymo commented 11 months ago

树树子,我更新了你说的这个版本之后,报另外一个错误,你看看,我没有修改任何参数,默认情况6特,之前的版本还能正常使用,这个版本用的上个版本的配置,我看了下readme的更新,也没有要更新配置的说明,应该是还有点小问题mmexport1697166081986.png

GlowingTree880 commented 11 months ago

之前更改过 inc 里面的特感刷新队列创建完成的函数签名,inf_queue.sptimers.sp 都会触发那个函数,昨晚忘记上传 inc 和 timers.sp 了,但是上传了 inf_queue.sp 更改后的版本,导致 inf_queue.sp 触发函数时参数列表对应不上 😢,更新一下 inc 和 timers.sp 应该没有问题了

Majestymo commented 11 months ago

怎么样才能知道maxclient的值是多少呢

Majestymo commented 11 months ago

或者说,怎么样才能知道玩家和特感数量,是survivor_limit和inf_limit吗,今天直接把smx文件放进去之后刷新的时候每一种特感报return null

fantasylidong commented 11 months ago

怎么样才能知道maxclient的值是多少呢 Maxclients用了l4dtools后面是31,没有破解人数限制是17(好像)。 survivor_limit一般是设定的生还者人数上限,inf_limit是插件设置的特感生成上限。 你如果最多只能生成不超过13只特感,那大概率是你没有破解人数上限

GlowingTree880 commented 11 months ago
  1. MaxClients 是当前允许连接服务器的最大客户端数量,由 gpGlobals->maxClients 在运行时动态指定,不使用 L4DToolZ Metamod plugin 破解客户端上限是 18(0-17),使用了之后客户端上限是 31(0-30),无法刷新特感 returned NULL 时检查当前在服务器里的玩家与插件设置特感上限之和是否超过 MaxClients,超过了就无法创建 FakeClient
  2. 比如当前服务器内 16 个玩家,设置插件特感上限为 20 特,那么刷新一波特感将会产生 36 个客户端,超过了 MaxClients 值 31,因此多出来的 5 个特感无法刷新,并报错 CreateFakeClient() returned NULL.
  3. survivor_limit 是生还者上限,客户端不仅仅是生还者,无论在哪个阵营的能操作的对象(生还者、旁观者、特感)都算客户端
Majestymo commented 11 months ago

是的。谢谢树树子和东哥的解答,我这边最大客户端是18,用的猫猫虫的l4dtoolz,忘了sv_setmax 31了,好像之前有一个cfg里面是设置了的,现在设置为31之后后台没有报错,等回家再实际游玩测试一下