GlowingTree880 / L4D2_LittlePlugins

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

simplemode中的问题 #13

Open txuk1x opened 1 year ago

txuk1x commented 1 year ago

大佬你好,我发现如果已经加载了一个模式之后不用rmatch而直接match选择另一个模式的话貌似会出现所有插件都卸载了但是无法加载另一个配置的插件?这时候游戏内什么反应都没有,也没有重启什么的,控制台sm plugins list也没有任何一个插件,plugins load_lock貌似是开启的状态。

我在第二个模式的confogl_plugins.cfg开头加上sm plugins load_unlock之后才能从第一个模式正常加载到第二个模式。但是这样还是会有一些问题出现,比如一些插件没有被正确的加载或者卸载的情况,加载多了或者少了都有出现过。先rmatch再加载另一个模式就不会出现插件加载不正确的情况。

另外,我发现在加载一个配置的时候sharedplugins.cfg内容比较多的话貌似无法完全加载,我现在是在confogl_plugins.cfg最后exec xxx才能解决。

fantasylidong commented 1 year ago

所以你为什么不按流程操作呢?你这样就算插件成功加载了,有很大可能插件的数值由模式1改到模式2,有些插件数值你在模式2如果没有设置,他就会和模式1的数值一样,而不是修改为默认值,从而产生更多的问题。 包括confogl最新版本用chmode也有相同问题

txuk1x commented 1 year ago

我是按照流程就行操作了,confogl_plugins.cfg写好了需要加载的插件包括本插件,confogl.cfg写好需要更改的cvar,confogl_off.cfg还原所有更改过的cvar

Majestymo commented 1 year ago

他的意思是让你先/rmatch然后再/match.......

txuk1x commented 1 year ago

可是他上面写说的是这样的: 投票更换新模式时无需使用!rmatch卸载当前模式,可直接更换配置模式,插件内部已经做出判断如已经加载模式则调用 doUnloadMatchMode卸载当前模式再加载新的模式

fantasylidong commented 1 year ago

那应该是bug,不过还是推荐先unload在load

GlowingTree880 commented 1 year ago

对于无法直接使用 !match 从现有模式切换到新模式的问题,请尝试使用 2023-09-22 版本的源代码重新编译生成插件使用(需要注意由于我改动了源码中 simple_mode_vote.sp 的读取位置,目前 simple_mode.sp 需要与 simple_mode_vote.sp 在同一目录才可成功编译 )

  1. 使用 doUnloadMatchMode 加载当前模式的 confogl_off.cfg 配置并设置在 3 秒后重启本章节地图
  2. 由于加载新模式需要先卸载本模式所有插件,因此新模式使用 doLoadMatchMode 加载模式时先会卸载当前模式所有插件,simple_mode 插件被卸载,第 1 步中创建的 3 秒重启本章节地图时钟被取消,则不会在模式卸载时重启地图
  3. 如果新模式不包含 simple_mode 插件则不会在模式加载时重启当前地图,所以新模式请包含 simple_mode 插件,否则不会加载 confogl.cfg 与重启地图

由于在执行 doUnloadMatchMode 与卸载当前模式所有插件时已经关闭插件锁,且重启地图后才会开启插件锁,加载新模式未重启地图但插件锁仍然开启的原因暂时未知,现版本已更改为创建时钟循环判断模式卸载时是否已经重启地图(simple_mode_restart_map 为 2 或 3 时),保证模式卸载时卸载所有插件前先重启一次地图

对于 sharedplugins.cfg 内容过多无法加载的问题,加载一个 .cfg 文件时如果这个文件的行数达到了某个上限,将会导致上限后的文件行无法被读取,疑似 Value Bug,见 ConVars Anomaly Fixer,因此无法读取的插件需要放到另一个子文件中,并在父文件中使用 exec 命令读取子文件