Left 4 Dead 2

Left 4 Dead 2

Damage Display MOD Fixed and Enhanced
控制台会报错 但不影响使用
AN ERROR HAS OCCURED [the index '1' does not exist]

CALLSTACK
*FUNCTION [LoadConfig()] scripts/vscripts/damage_display.nut line [272]
*FUNCTION [main()] scripts/vscripts/damage_display.nut line [430]
*FUNCTION [DoIncludeScript()] NATIVE line [-1]
*FUNCTION [IncludeScript()] unnamed line [75]
*FUNCTION [main()] d:/game/steam/steamapps/common/left 4 dead 2/left4dead2/addons/aѪ����ʾ������ǿ��.vpk/scripts/vscripts/director_base_addon.nut line [1]

LOCALS
[kv] ARRAY
0
[localConfig] TABLE
[configLine] ARRAY
[configText] NULL
[this] TABLE
[vargv] ARRAY
[this] TABLE
[scope] TABLE
[name] "damage_display"
[this] TABLE
[vargv] ARRAY
[this] TABLE

AN ERROR HAS OCCURED [Failed to include script "damage_display"]

CALLSTACK
*FUNCTION [IncludeScript()] unnamed line [75]
*FUNCTION [main()] d:/game/steam/steamapps/common/left 4 dead 2/left4dead2/addons/aѪ����ʾ������ǿ��.vpk/scripts/vscripts/director_base_addon.nut line [1]

LOCALS
[scope] TABLE
[name] "damage_display"
[this] TABLE
[vargv] ARRAY
[this] TABLE




脚本错误分析与解决方案
错误分析
根据您提供的错误信息,主要问题出现在LoadConfig()函数中,具体错误是:
AN ERROR HAS OCCURED [the index '1' does not exist]
错误发生在damage_display.nut脚本的第272行,这表明在尝试访问数组或表的索引'1'时,该索引不存在。

具体问题原因
查看脚本代码,错误发生在LoadConfig()函数中,当处理配置文件时:

脚本尝试读取配置文件alpha/idd/config.txt
如果文件不存在或为空,会初始化一个新文件
然后尝试分割文件内容为行并处理每行的键值对
错误可能的原因是:

配置文件格式不正确,某些行没有"="分隔符
分割后的数组kv长度不足,尝试访问kv[1]时失败
解决方案
‌1.检查配置文件格式‌:

确保alpha/idd/config.txt文件存在且格式正确
每行应该是key=value的格式,如:
LANG=0
PURE=0
LINE=4
DELAY=3
BAR=3
HP_DELAY=-1
2.修改脚本增加错误处理‌:
在LoadConfig()函数中,处理每行配置时增加检查:
local kv = split(configLine, "=");
if (kv.len() < 2) {
printl("[IDD]Invalid config line: " + configLine);
continue;
}
3.初始化默认配置‌:
如果配置文件不存在或格式错误,可以强制初始化默认配置:
if (configText == null || configText.len() == 0) {
printl("[IDD]No Config File. Init default config...");
SaveConfig("LANG", "0");
SaveConfig("PURE", "0");
SaveConfig("LINE", "4");
SaveConfig("DELAY", "3");
SaveConfig("BAR", "3");
SaveConfig("HP_DELAY", "-1");
return;
}
4.验证文件路径‌:
确保alpha/idd/目录存在且有写入权限
其他建议
检查游戏控制台是否有其他相关错误信息
确保脚本文件编码正确(UTF-8无BOM)
如果问题持续,尝试删除配置文件让脚本重新生成
检查脚本依赖的其他模块是否正常加载



LoadConfig() 函数错误修复方案
根据提供的脚本内容和错误分析,LoadConfig()函数的主要问题是当配置文件格式不正确时会导致数组越界错误。以下是改进方案:

主要修改点
‌1.增加空文件检查‌:
if (configText == null || configText.len() == 0) {
printl("[IDD]No Config File. Init default config...");
SaveConfig("LANG", "0");
SaveConfig("PURE", "0");
SaveConfig("LINE", "4");
SaveConfig("DELAY", "3");
SaveConfig("BAR", "3");
SaveConfig("HP_DELAY", "-1");
return;
}

2.完善行解析逻辑‌:
for (local i = 0; i < configLine.len(); i++) {
if (configLine.len() < 1) continue;
local kv = split(configLine, "=");
if (kv.len() < 2) {
printl("[IDD]Invalid config line: " + configLine);
continue;
}
local key = strip(kv[0]);
local value = strip(kv[1]);
if (key.len() > 0 && value.len() > 0) {
localConfig[key] <- value.tointeger();
printl("[IDD]Loaded config: " + key + "=" + value);
}
}


完整改进后的函数

function LoadConfig() {
printl("[IDD]Loading Config... " + CONFIG_FILE);
local configText = FileToString(CONFIG_FILE);

// 处理空文件情况
if (configText == null || configText.len() == 0) {
printl("[IDD]No Config File. Init default config...");
SaveConfig("LANG", "0");
SaveConfig("PURE", "0");
SaveConfig("LINE", "4");
SaveConfig("DELAY", "3");
SaveConfig("BAR", "3");
SaveConfig("HP_DELAY", "-1");
return;
}

local configLine = split(configText, "\n");
local localConfig = {}

// 解析每行配置
for (local i = 0; i < configLine.len(); i++) {
if (configLine.len() < 1 || configLine.find("=") == null) continue;

local kv = split(configLine, "=");
if (kv.len() < 2) {
printl("[IDD]Invalid config line: " + configLine);
continue;
}

local key = strip(kv[0]);
local value = strip(kv[1]);
if (key.len() > 0 && value.len() > 0) {
localConfig[key] <- value.tointeger();
printl("[IDD]Loaded config: " + key + "=" + value);
}
}

// 合并配置
foreach(key, value in CONFIG) {
if (localConfig.rawin(key)) {
CONFIG[key] = localConfig[key];
} else {
printl("[IDD]No Config '" + key + "', Init With Default: " + value);
SaveConfig(key, value.tostring());
}
}
}

修改说明
‌1.健壮性提升‌:

增加了对空配置文件和无效配置行的处理
添加了更详细的日志输出帮助调试
确保所有配置项都有默认值


‌2.错误处理‌:

检查每行是否包含"="符号
验证分割后的键值对长度
确保键和值非空


‌3.初始化逻辑‌:

当配置文件不存在时自动创建并写入默认值
缺失的配置项会自动使用默认值并保存


这些修改可以避免原脚本中可能出现的数组越界错误,并使配置加载过程更加稳定可靠。
< >
Showing 1-1 of 1 comments
EggYellow 30 Sep @ 10:46pm 
发给deepseek分析修改了一下 不报错了 功能目前用起来也正常 希望作者有空可以修复一下
< >
Showing 1-1 of 1 comments
Per page: 1530 50