PDA

Просмотр полной версии : [Вопрос] Краш компилятора.



SteveStage
27.04.2020, 13:26
case DLG_ID_INVENT_TAKE_PATRONS:
{
if(!strlen(inputtext))
{
SCM(playerid, COLOR_RED, !"[SERVER] Вы ничего не ввели!");
return DialogTakePatrons(playerid);
}
new
val = strval(inputtext);
if(val <= 0)
{
SCM(playerid, COLOR_RED, !"[SERVER] Вы не можете загрузить меньше, чем 1 патрон!");
return DialogTakePatrons(playerid);
}
if(val > inv[playerid][select_slot{playerid}][i_amount])
{
SCM(playerid, COLOR_RED, !"[SERVER] Вы не можете загрузить больше патрон, чем имеете в инвентаре!");
return DialogTakePatrons(playerid);
}
new
string[128+1],
weaponid = 0,
ammo = 0;
switch(inv[playerid][select_slot{playerid}][i_item])
{
case INVENT_WEAPON_DEAGLE:
{
GetPlayerWeaponData(playerid, 2, weaponid, ammo);
switch(weaponid)
{
case WEAPON_DEAGLE:
{
GivePlayerWeapon(playerid, WEAPON_DEAGLE, ammo+val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из кобуры Desert Eagle и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из кобуры Desert Eagle и взял его в руки.");
switch(inv[playerid][select_slot{playerid}][i_amount])
{
case 0:
{
for(new i = select_slot{playerid}; i < inv_slots{playerid}; i++)
{
inv[playerid][i][i_item] = inv[playerid][i+1][i_item];
inv[playerid][i][i_amount] = inv[playerid][i+1][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `itemid` = '%d' AND `amountid` = '%d' WHERE `ownertableid` = '%d' AND\
`slotid` = '%d'", inv[playerid][i][i_item], inv[playerid][i][i_amount],
player[playerid][p_tableid], i);
mysql_function_query(connect_mysql, string, false, "", "");
inv_slots{playerid}--;
}
return true;
}
default:
{
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][select_slot{playerid}][i_amount], player[playerid][p_tableid], select_slot{playerid});
mysql_function_query(connect_mysql, string, false, "", "");
return true;
}
}
}
case WEAPON_SILENCED:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_SILENCED_COLT45)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_SILENCED_COLT45;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
case WEAPON_COLT45:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_COLT45)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_COLT45;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
}
GivePlayerWeapon(playerid, WEAPON_DEAGLE, val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из кобуры Desert Eagle и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из кобуры Desert Eagle и взял его в руки.");
return true;
}
case INVENT_WEAPON_SHOTGUN:
{
GetPlayerWeaponData(playerid, 3, weaponid, ammo);
switch(weaponid)
{
case WEAPON_SHOTGUN:
{
GivePlayerWeapon(playerid, WEAPON_SHOTGUN, ammo+val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из чехла дробовик и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из чехла дробовик и взял его в руки.");
switch(inv[playerid][select_slot{playerid}][i_amount])
{
case 0:
{
for(new i = select_slot{playerid}; i < inv_slots{playerid}; i++)
{
inv[playerid][i][i_item] = inv[playerid][i+1][i_item];
inv[playerid][i][i_amount] = inv[playerid][i+1][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `itemid` = '%d' AND `amountid` = '%d' WHERE `ownertableid` = '%d' AND\
`slotid` = '%d'", inv[playerid][i][i_item], inv[playerid][i][i_amount],
player[playerid][p_tableid], i);
mysql_function_query(connect_mysql, string, false, "", "");
inv_slots{playerid}--;
}
return true;
}
default:
{
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][select_slot{playerid}][i_amount], player[playerid][p_tableid], select_slot{playerid});
mysql_function_query(connect_mysql, string, false, "", "");
return true;
}
}
}
case WEAPON_SHOTGSPA:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_SPAS12)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_SPAS12;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
}
GivePlayerWeapon(playerid, WEAPON_SHOTGUN, val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из чехла дробовик и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из чехла дробовик и взял его в руки.");
return true;
}
case INVENT_WEAPON_M4A1:
{
GetPlayerWeaponData(playerid, 5, weaponid, ammo);
switch(weaponid)
{
case WEAPON_M4:
{
GivePlayerWeapon(playerid, WEAPON_M4, ammo+val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из чехла M4A1 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из чехла M4A1 и взял его в руки.");
switch(inv[playerid][select_slot{playerid}][i_amount])
{
case 0:
{
for(new i = select_slot{playerid}; i < inv_slots{playerid}; i++)
{
inv[playerid][i][i_item] = inv[playerid][i+1][i_item];
inv[playerid][i][i_amount] = inv[playerid][i+1][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `itemid` = '%d' AND `amountid` = '%d' WHERE `ownertableid` = '%d' AND\
`slotid` = '%d'", inv[playerid][i][i_item], inv[playerid][i][i_amount],
player[playerid][p_tableid], i);
mysql_function_query(connect_mysql, string, false, "", "");
inv_slots{playerid}--;
}
return true;
}
default:
{
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][select_slot{playerid}][i_amount], player[playerid][p_tableid], select_slot{playerid});
mysql_function_query(connect_mysql, string, false, "", "");
return true;
}
}
return true;
}
case WEAPON_AK47:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_AK47)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_AK47;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
}
GivePlayerWeapon(playerid, WEAPON_M4, val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из чехла M4A1 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из чехла M4A1 и взял его в руки.");
return true;
}
case INVENT_WEAPON_AK47:
{
GetPlayerWeaponData(playerid, 5, weaponid, ammo);
switch(weaponid)
{
case WEAPON_AK47:
{
GivePlayerWeapon(playerid, WEAPON_AK47, ammo+val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из чехла AK-47 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из чехла AK-47 и взял его в руки.");switch(inv[playerid][select_slot{playerid}][i_amount])
{
case 0:
{
for(new i = select_slot{playerid}; i < inv_slots{playerid}; i++)
{
inv[playerid][i][i_item] = inv[playerid][i+1][i_item];
inv[playerid][i][i_amount] = inv[playerid][i+1][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `itemid` = '%d' AND `amountid` = '%d' WHERE `ownertableid` = '%d' AND\
`slotid` = '%d'", inv[playerid][i][i_item], inv[playerid][i][i_amount],
player[playerid][p_tableid], i);
mysql_function_query(connect_mysql, string, false, "", "");
inv_slots{playerid}--;
}
return true;
}
default:
{
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][select_slot{playerid}][i_amount], player[playerid][p_tableid], select_slot{playerid});
mysql_function_query(connect_mysql, string, false, "", "");
return true;
}
}
}
case WEAPON_M4:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_M4A1)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_M4A1;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
}
GivePlayerWeapon(playerid, WEAPON_AK47, val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из чехла AK-47 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из чехла AK-47 и взял его в руки.");
return true;
}
case INVENT_WEAPON_COLT45:
{
GetPlayerWeaponData(playerid, 2, weaponid, ammo);
switch(weaponid)
{
case WEAPON_COLT45:
{
GivePlayerWeapon(playerid, WEAPON_COLT45, ammo+val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из кобуры Colt45 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из кобуры Colt45 и взял его в руки.");
switch(inv[playerid][select_slot{playerid}][i_amount])
{
case 0:
{
for(new i = select_slot{playerid}; i < inv_slots{playerid}; i++)
{
inv[playerid][i][i_item] = inv[playerid][i+1][i_item];
inv[playerid][i][i_amount] = inv[playerid][i+1][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `itemid` = '%d' AND `amountid` = '%d' WHERE `ownertableid` = '%d' AND\
`slotid` = '%d'", inv[playerid][i][i_item], inv[playerid][i][i_amount],
player[playerid][p_tableid], i);
mysql_function_query(connect_mysql, string, false, "", "");
inv_slots{playerid}--;
}
return true;
}
default:
{
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][select_slot{playerid}][i_amount], player[playerid][p_tableid], select_slot{playerid});
mysql_function_query(connect_mysql, string, false, "", "");
return true;
}
}
}
case WEAPON_DEAGLE:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_DEAGLE)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_DEAGLE;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
case WEAPON_SILENCED:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_SILENCED_COLT45)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_SILENCED_COLT45;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
}
}
GivePlayerWeapon(playerid, WEAPON_COLT45, val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из кобуры Colt45 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из кобуры Colt45 и взял его в руки.");
return true;
}
case INVENT_WEAPON_SPAS12:
{
GetPlayerWeaponData(playerid, 3, weaponid, ammo);
switch(weaponid)
{
case WEAPON_SHOTGSPA:
{
GivePlayerWeapon(playerid, WEAPON_SHOTGSPA, ammo+val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из чехла Spas12 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из чехла Spas12 и взял его в руки.");
switch(inv[playerid][select_slot{playerid}][i_amount])
{
case 0:
{
for(new i = select_slot{playerid}; i < inv_slots{playerid}; i++)
{
inv[playerid][i][i_item] = inv[playerid][i+1][i_item];
inv[playerid][i][i_amount] = inv[playerid][i+1][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `itemid` = '%d' AND `amountid` = '%d' WHERE `ownertableid` = '%d' AND\
`slotid` = '%d'", inv[playerid][i][i_item], inv[playerid][i][i_amount],
player[playerid][p_tableid], i);
mysql_function_query(connect_mysql, string, false, "", "");
inv_slots{playerid}--;
}
return true;
}
default:
{
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][select_slot{playerid}][i_amount], player[playerid][p_tableid], select_slot{playerid});
mysql_function_query(connect_mysql, string, false, "", "");
return true;
}
}
}
case WEAPON_SHOTGUN:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_SHOTGUN)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_SHOTGUN;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
}
GivePlayerWeapon(playerid, WEAPON_SHOTGSPA, val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из чехла Spas12 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из чехла Spas12 и взял его в руки.");
return true;
}
case INVENT_WEAPON_SILENCED_COLT45:
{
GetPlayerWeaponData(playerid, 2, weaponid, ammo);
switch(weaponid)
{
case WEAPON_SILENCED:
{
GivePlayerWeapon(playerid, WEAPON_SILENCED, ammo+val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из кобуры Colt45 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из кобуры Colt45 и взял его в руки.");
switch(inv[playerid][select_slot{playerid}][i_amount])
{
case 0:
{
for(new i = select_slot{playerid}; i < inv_slots{playerid}; i++)
{
inv[playerid][i][i_item] = inv[playerid][i+1][i_item];
inv[playerid][i][i_amount] = inv[playerid][i+1][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `itemid` = '%d' AND `amountid` = '%d' WHERE `ownertableid` = '%d' AND\
`slotid` = '%d'", inv[playerid][i][i_item], inv[playerid][i][i_amount],
player[playerid][p_tableid], i);
mysql_function_query(connect_mysql, string, false, "", "");
inv_slots{playerid}--;
}
return true;
}
default:
{
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][select_slot{playerid}][i_amount], player[playerid][p_tableid], select_slot{playerid});
mysql_function_query(connect_mysql, string, false, "", "");
return true;
}
}
}
case WEAPON_DEAGLE:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_DEAGLE)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_DEAGLE;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
case WEAPON_COLT45:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_COLT45)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_COLT45;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
}
GivePlayerWeapon(playerid, WEAPON_COLT45, val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из кобуры Silenced Colt45 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из кобуры Silenced Colt45 и взял его в руки.");
return true;
}
case INVENT_WEAPON_GRENADE:
{
return true;
}
case INVENT_WEAPON_MOLOTOV:
{
return true;
}
case INVENT_WEAPON_TEC9:
{
return true;
}
case INVENT_WEAPON_UZI:
{
return true;
}
case INVENT_WEAPON_MP5:
{
return true;
}
case INVENT_WEAPON_RIFLE:
{
return true;
}
case INVENT_WEAPON_SNIPER:
{
return true;
}
}
switch(inv[playerid][i][i_amount])
{
case 0:
{
for(new i = select_slot{playerid}; i < inv_slots{playerid}; i++)
{
inv[playerid][i][i_item] = inv[playerid][i+1][i_item];
inv[playerid][i][i_amount] = inv[playerid][i+1][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `itemid` = '%d' AND `amountid` = '%d' WHERE `ownertableid` = '%d' AND\
`slotid` = '%d'", inv[playerid][i][i_item], inv[playerid][i][i_amount],
player[playerid][p_tableid], i);
mysql_function_query(connect_mysql, string, false, "", "");
inv_slots{playerid}--;
}
}
default:
{
inv[playerid][select_slot{playerid}][i_amount]-=val;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][select_slot{playerid}][i_amount], player[playerid][p_tableid],
select_slot{playerid});
mysql_function_query(connect_mysql, string, false, "", "");
}
}
return true;
}

Путем нехитрых действий (комментирование) я выяснил, что из-за этого куска кода при компиляции возникает ошибка:

Could not run pawncc: Unknown error (3221225477)

Стандартный pawno.exe просто крашится.

Daniel_Cortez
27.04.2020, 20:51
А поконкретнее можно? Например, какая именно из этих 600+ строк приводит к падению?
Или хотя бы такой отрывок кода, который можно было бы скомпилировать самостоятельно (т.е. без привязки к моду, без ошибок из-за необъявленных переменных/констант/функций в "вырезанном" коде, и т.п.)? Мне нужен минималный пример, чтобы разобраться, из-за чего именно происходит краш.

SteveStage
27.04.2020, 21:04
А поконкретнее можно? Например, какая именно из этих 600+ строк приводит к падению?
Или хотя бы такой отрывок кода, который можно было бы скомпилировать самостоятельно (т.е. без привязки к моду, без ошибок из-за необъявленных переменных/констант/функций в "вырезанном" коде, и т.п.)? Мне нужен минималный пример, чтобы разобраться, из-за чего именно происходит краш.

Вот кейс, при комментировании которого ошибка компилятора пропадает:

case INVENT_WEAPON_COLT45:
{
GetPlayerWeaponData(playerid, 2, weaponid, ammo);
switch(weaponid)
{
case WEAPON_COLT45:
{
GivePlayerWeapon(playerid, WEAPON_COLT45, ammo+val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из кобуры Colt45 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из кобуры Colt45 и взял его в руки.");
switch(inv[playerid][select_slot{playerid}][i_amount])
{
case 0:
{
for(new i = select_slot{playerid}; i < inv_slots{playerid}; i++)
{
inv[playerid][i][i_item] = inv[playerid][i+1][i_item];
inv[playerid][i][i_amount] = inv[playerid][i+1][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `itemid` = '%d' AND `amountid` = '%d' WHERE `ownertableid` = '%d' AND\
`slotid` = '%d'", inv[playerid][i][i_item], inv[playerid][i][i_amount],
player[playerid][p_tableid], i);
mysql_function_query(connect_mysql, string, false, "", "");
inv_slots{playerid}--;
}
return true;
}
default:
{
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][select_slot{playerid}][i_amount], player[playerid][p_tableid], select_slot{playerid});
mysql_function_query(connect_mysql, string, false, "", "");
return true;
}
}
}
case WEAPON_DEAGLE:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_DEAGLE)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_DEAGLE;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
case WEAPON_SILENCED:
{
if(inv_slots{playerid}+1 >= MAX_INVENT_SLOTS)
{
// throw
return true;
}
new
__check = 0;
for(new i = 0; i < inv_slots{playerid}; i++)
{
if(inv[playerid][i][i_item] == INVENT_WEAPON_SILENCED_COLT45)
{
inv[playerid][i][i_amount] += inv[playerid][inv_slots{playerid}][i_amount];
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][i][i_amount], player[playerid][p_tableid], i);
__check = 1;
}
}
if(__check == 0)
{
inv[playerid][inv_slots{playerid}+1][i_item] = INVENT_WEAPON_SILENCED_COLT45;
inv[playerid][inv_slots{playerid}+1][i_amount] = ammo;
format(string, sizeof(string),
"UPDATE `inventory` SET `amountid` = '%d' AND `itemid` = '%d' WHERE `ownertableid` = '%d' AND `slotid` = '%d'",
inv[playerid][inv_slots{playerid}+1][i_amount], inv[playerid][inv_slots{playerid}+1][i_item],
player[playerid][p_tableid], inv_slots{playerid}+1);
}
}
}
}
GivePlayerWeapon(playerid, WEAPON_COLT45, val);
SCM(playerid, COLOR_YELLOW, !"[SERVER] Вы достали из кобуры Colt45 и взяли его в руки.");
//PC_EmulateCommand(playerid, "/me достал из кобуры Colt45 и взял его в руки.");
return true;
}

И вот все используемые в этом кейсе переменные и массивы:



new
string[128+1],
weaponid = 0,
ammo = 0;

new
val = strval(inputtext);


enum
{
INVENT_ITEM_NONE = 0, INVENT_ITEM_BURGER = 1, INVENT_ITEM_PEPSI = 2, INVENT_WEAPON_DEAGLE, INVENT_WEAPON_SHOTGUN, INVENT_WEAPON_M4A1, INVENT_WEAPON_AK47,
INVENT_WEAPON_BAT, INVENT_WEAPON_COLT45, INVENT_WEAPON_SPAS12, INVENT_WEAPON_SILENCED_COLT45, INVENT_WEAPON_GOLFCLUB, INVENT_WEAPON_NITESTICK,
INVENT_WEAPON_KNIFE, INVENT_WEAPON_CHAINSAW, INVENT_WEAPON_FLOWER, INVENT_WEAPON_CANE, INVENT_WEAPON_GRENADE, INVENT_WEAPON_MOLOTOV, INVENT_WEAPON_TEC9,
INVENT_WEAPON_UZI, INVENT_WEAPON_MP5, INVENT_WEAPON_RIFLE, INVENT_WEAPON_SNIPER
};

enum e_INVENTORY_DATA
{
i_item, i_amount
}
new
inv[MAX_PLAYERS][MAX_INVENT_SLOTS][e_INVENTORY_DATA];

new
inv_slots[MAX_PLAYERS char],
select_slot[MAX_PLAYERS char];

#define MAX_INVENT_SLOTS 7

UPD: я нашел причину, и вы не угадаете, в чем она заключается=)

Ответ:


}
}
GivePlayerWeapon(playerid, WEAPON_COLT45, val);

Да да, такие тупые ошибки НА 1 СИМВОЛ способны крашнуть компилятор.
И я не 1 раз замечаю такое, вот например: https://vk.cc/atkxqC

Извините за невнимательность.

И я все таки хотел бы узнать причину, по которой вместо ерроров и варнингов компилятор крашит.