azazello
Новичок
Помогите пожалуйста решить проблему, которая в серверлоге выглядит следующий образом:
Проблема судя по всему исходит от stock SendFactionMessageF, поскольку в чате не оторбражаються сообщения для фракций.
На примере фракционного оос чата при команде /faction:
PHP:
[debug] Run time error 4: "Array index out of bounds"
[debug] Accessing element at index 316368272 past array upper bound 1000
[debug] AMX backtrace:
[debug] #0 0005da60 in ?? (1, -1853231105, 315827356, 311235960, 28978080, 316368272) from c-rp.amx
[debug] #1 0017a794 in public cmd_faction (0, 316368272) from c-rp.amx
Код:
stock SendFactionMessageF(faction, color, const str[], {Float,_}:...)
{
static
args,
start,
end,
string[144]
;
#emit LOAD.S.pri 8
#emit STOR.pri args
if (args > 12)
{
#emit ADDR.pri str
#emit STOR.pri start
for (end = start + (args - 12); end > start; end -= 4)
{
#emit LREF.pri end
#emit PUSH.pri
}
#emit PUSH.S str
#emit PUSH.C 144
#emit PUSH.C string
#emit PUSH.C args
#emit SYSREQ.C format
foreach(Player, i)
{
if(!IsPlayerLogged(i) || PlayerInfo[i][pFaction] != faction || (PlayerInfo[i][pSettings] & togFaction))
continue;
SendClientMessage(i, color, string);
}
#emit LCTRL 5
#emit SCTRL 4
#emit RETN
return 1;
}
foreach(Player, i)
{
if(!IsPlayerLogged(i) || PlayerInfo[i][pFaction] != faction || (PlayerInfo[i][pSettings] & togFaction))
continue;
SendClientMessage(i, color, str);
}
return 1;
}
Код:
if(Factions[faction][fType] == FACTION_LEGAL)
{
if(strlen(params) > MAXLEN)
{
new pos = MAXLEN - 1;
SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "** (( %s %s: %.*s ... )) **", GetRankName(playerid), GetNameEx(playerid), pos, params);
SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "... %s )) **", params[pos]);
}
else
SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "** (( %s %s: %s )) **", GetRankName(playerid), GetNameEx(playerid), params);
}
else
{
if(strlen(params) > MAXLEN)
{
new pos = MAXLEN - 1;
SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "** (( %s: %.*s ... )) **", GetNameEx(playerid), pos, params);
SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "... %s )) **", params[pos]);
}
else
SendFactionMessageF(PlayerInfo[playerid][pFaction], COLOR_LSPDNEW, "** (( %s: %s )) **", GetNameEx(playerid), params);
}
