Game Maker Studio: DoSet :: Недопустимый тип сравнения

___________________________________________
############################################################################################
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();

Я получаю эту ошибку в комментарии, а не в фактическом операторе if, я не могу обойти это, не комментируя Data_Load(), который загружает данные пользователей.

Я недавно обновился до версии 1.4.1567, возможно, это ошибка этой версии.

Я должен указать, что переменные «Connected» и «Guest» являются целыми (логическими) и не могут быть установлены в строку в любой точке кода.

Вот скрипт Data_Load():

///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

person SteTrezla    schedule 02.04.2015    source источник
comment
Используйте отладчик, чтобы увидеть, где ошибка. Также вы можете попробовать запустить его с/без YYC - сообщение об ошибке может измениться.   -  person Dmi7ry    schedule 02.04.2015


Ответы (1)


Компилятор GM всегда странно относится к этим ошибкам строки. Он часто не считает пустые строки реальными строками.

Если вы приспособитесь к этой проблеме, реальная строка кода, которая выдает ошибку, будет следующей:

if (ForceResets != Force_Resets) {

Возможно, ему не нравится, что вы в основном спрашиваете "Если что-то не равно самому себе", что вряд ли имеет смысл. Это утверждение всегда будет оцениваться как ложное, поэтому вам, вероятно, следует удалить его.

Поскольку вы не объявляете var ни для одной из этих переменных, значит, вы манипулируете переменными экземпляра, вызвавшего этот скрипт. Если каким-то образом есть переменная сценария ForceResets и переменная ForceResets в вызывающем экземпляре, то все это может быть проблемой именования. Я также делаю это предположение, потому что вы позвонили:

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

Где этот третий параметр не объявлен нигде в этом скрипте.

В общем, я бы сказал, что вам нужно немного почистить этот скрипт.

Совет для профессионалов. Используйте for(var i = 0; ... вместо for(i = 0 в 99 % случаев. В противном случае вы оставляете этот экземпляр с переменной i, которую он никогда не будет использовать.

person Boom    schedule 02.04.2015
comment
Спасибо за вашу информацию и советы, я нашел исправление для этого некоторое время, не могу точно вспомнить, что это было, и я забыл опубликовать это здесь, но Force_Resets и ForceResets - это 2 разные переменные, одна из которых является константой а другой — Global Var, который сохраняется в ini для сравнения. Я думаю, что помню, что это должно быть проблема с неправильной установкой константы, но не держите меня на этом. - person SteTrezla; 18.05.2015