0
___________________________________________
############################################################################################
FATAL ERROR in
action number 4
of Create Event
for object eng_Global:

DoSet :: Invalid comparison type
 at gml_Script_Data_Load (line 1) - ///Data_Load()
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_Data_Load (line 1)
called from - gml_Object_eng_Global_CreateEvent_4 (line 60) - Data_Load();

I get this error on a comment, not an actual if statement, I can't bypass this without commenting out Data_Load(), which is what loads the users' data.

I recently updated to version 1.4.1567, maybe that is a bug in this version.

I should state that "Connected" and "Guest" variables are both integers (boolean) and do not get set to string at any point in the code.

Here is the Data_Load() script:

///Data_Load()
if (Connected && !Guest) {

ini_open(User_Name+"_NSD_Temp.ini");

// Base Statistics
Level = ini_read_real("Statistics","Level",Level);
Exp_Total = ini_read_real("Statistics","Experience_Total",Exp_Total);
Exp = ini_read_real("Statistics","Experience",Exp);
Exp_Left = ini_read_real("Statistics","Experience_Left",Exp_Left);
Exp_Max = ceil(Level*5);
Gold = ini_read_real("Statistics","Gold",Gold);
Gold_Total = ini_read_real("Statistics","Gold_Total",Gold_Total);
Karma = ini_read_real("Statistics","Karma",Karma);
Karma_Total = ini_read_real("Statistics","Karma_Total",Karma_Total);
Highscore = ini_read_real("Statistics","Highscore",Highscore);

Weapons_Inv_Length = ini_read_real("Statistics","Weapons_Inv_Length",Weapons_Inv_Length);
Stones_Inv_Length = ini_read_real("Statistics","Stones_Inv_Length",Stones_Inv_Length);
Stone_Slots_Owned = ini_read_real("Statistics","Stones_Slots_Owned",Stones_Slots_Owned);

// Game
Ninja_Name = ini_read_string("Game","Ninja_Name",Ninja_Name);
Ninja_Level = ini_read_real("Game","Ninja_Level",Ninja_Level);
Ninja_Health = ini_read_real("Game","Ninja_Health",Ninja_Health);
Ninja_Health_Max = ini_read_real("Game","Ninja_Health_Max",Ninja_Health_Max);
Ninja_Health_Regen_Upgrade = ini_read_real("Game","Ninja_Health_Regen_Upgrade",Ninja_Health_Regen_Upgrade);
Ninja_Health_Regen = Ninja_Health_Base*(Ninja_Health_Regen_Upgrade)/room_speed;
Ninja_Weapon = ini_read_real("Game","Ninja_Weapon",Ninja_Weapon);
Ninja_Colour = ini_read_real("Game","Ninja_Colour",Ninja_Colour);
Ninja_Power = ini_read_real("Game","Ninja_Power",Ninja_Power);
Ninja_Max_Speed = ini_read_real("Game","Ninja_Max_Speed",Ninja_Max_Speed);
Ninja_Attack_Speed = ini_read_real("Game","Ninja_Attack_Speed",Ninja_Attack_Speed);

// Weapons Inventory
for (i=0; i<Weapons_Inv_Length; i++) {
    Weapons_Inv[i,0] = i;
    Weapons_Inv[i,1] = ini_read_real("Weapons Inventory","Inv_Slot_"+string(i),0);
    Weapons[Weapons_Inv[i,1],5] = ini_read_real("Weapons Inventory","Inv_Slot_"+string(i)+"_Owned",Weapons[Weapons_Inv[i,1],5]);
}

// Stones Inventory
for (i=0; i<Stones_Inv_Length; i++) {
    Stones_Inv[i,0] = i;
    Stones_Inv[i,1] = ini_read_real("Stones Inventory","Inv_Slot_"+string(i),0);
    Stones[Stones_Inv[i,1],5] = ini_read_real("Stones Inventory","Inv_Slot_"+string(i)+"_Owned",Stones[Stones_Inv[i,1],5]);
}

// Equipped Stones
for (i=0; i<Stone_Slots_Owned; i++) {
    Stone_Slots[i,0] = i;
    Stone_Slots[i,1] = ini_read_real("Stones Equipped","Slot_"+string(i),Stone_Slots[i,1]);
}

// Costume Colours
for (i=0; i<array_height_2d(Colours); i++) {
    Colours[i,5] = ini_read_real("Costume Colours",Colours[i,1],Colours[i,5]);
}

// Stats
Stat_Clouds_Clicked = ini_read_real("Stats","Clouds_Clicked",Stat_Clouds_Clicked);
Stat_Stars_Clicked = ini_read_real("Stats","Stars_Clicked",Stat_Stars_Clicked);

// Options
SoundFX = ini_read_real("Options","SoundFX",SoundFX);

// Version
Save_Version = ini_read_string("Version","Current",Save_Version);

// Resets
ForceResets = ini_read_string("External","Force_Resets",Force_Resets);

ini_close();

if (ForceResets != Force_Resets) {
    Data_Erase();
}

Data_Submit();

} // If Connected & Not Guest
4

1 回答 1

0

GM 的编译器总是对那些行错误感到奇怪。它通常不会将空行算作实际行。

如果您针对该问题进行调整,则引发错误的真正代码行是:

if (ForceResets != Force_Resets) {

也许它不喜欢你基本上是在问“如果某物不等于它自己”,这几乎没有意义。该语句将始终评估为假,因此您可能应该将其删除。

看到您没有声明var任何这些变量,那么您正在操纵调用此脚本的实例上的变量。如果以某种方式存在ForceResets脚本变量和ForceResets调用实例上的变量,那么整个事情可能是一个命名问题。我也在做这个假设,因为你打电话给:

ForceResets = ini_read_string("External","Force_Resets",Force_Resets);

在此脚本的任何地方都没有声明第三个参数。

总而言之,我想说你需要稍微清理一下这个脚本。

专业提示:使用for(var i = 0; ...而不是for(i = 099% 的时间。否则,您将给这个实例留下一个i永远不会使用的变量。

于 2015-04-02T17:33:00.503 回答