PDA

Просмотр полной версии : [Вопрос] SOS



DoN_SancheS
13.01.2017, 17:39
Привет мудрецы павно, кротко говоря, у меня на серве 99 домов, и вообщем сейчас поймете. (Max_houses 99 (так же houseinfo))

else { if(PlayerInfo[playerid][pPhousekey] != -1) { PlayerInfo[playerid][pPhousekey] = -1; } }
format(string2, sizeof(string2), "~w~šO€PO ŒO„A‡O‹A’ ~n~~g~ %s", PlayerName[playerid]);
GameTextForPlayer(playerid, string2, 5000, 1);
gPlayerLogged[playerid] = 1;
SetSpawnInfoPlayer(playerid);
SpawnPlayer(playerid);
SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
for(new i = 0; i < sizeof(HouseInfo); i++) SetPlayerMapIcon(playerid, i,HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancex], HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancey], HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancez],35,-1,1);
return true;

Тут у меня было в место -1 - 1000 из-за которого всегда было ошибка в логах - Attempted to read/write array element at index 1000 in array of size 99
Я решил поменять 1000 на -1 и когда игрок заходит то всё получается но хватит ему перезайти на сервер как сразу в логах пишется Attempted to read/write array element at negative index -1 (и он не может зайти просто вводит пароль и не спавнится)
+ напомню что когда поменял 1000 на -1 то в логах в то время не было ни одной ошибки но после того как игроки перезаходят тот тут же начинается та ошибка (Attempted to read/write array element at negative index -1)

qwezert
13.01.2017, 18:08
Дай сохранение и загрузку дома игрока.

DoN_SancheS
13.01.2017, 18:09
Как друг?
Объясни пожалуйста подробнее

qwezert
13.01.2017, 18:12
Как друг?
Объясни пожалуйста подробнее

Скинь участки кода где у тебя загружаются дома и где они сохраняются для игрока

DoN_SancheS
13.01.2017, 18:14
Скинь участки кода где у тебя загружаются дома и где они сохраняются для игрока

Можешь написать пример?, просто я не знаю где они сохраняются

qwezert
13.01.2017, 18:20
Можешь написать пример?, просто я не знаю где они сохраняются
В твоем моде - как угодно они могут сохранятся....
поиши по HouseInfo - скорее всего найдешь еще циклы где будут загружатся - сохранятся дома.

DoN_SancheS
13.01.2017, 18:40
В твоем моде - как угодно они могут сохранятся....
поиши по HouseInfo - скорее всего найдешь еще циклы где будут загружатся - сохранятся дома.

Скину несколько Houseinfo а ты, если не сложно, скажи где то что ты хочешь.


if(SpawnChange[playerid])
{
SetPlayerInterior(playerid,HouseInfo[house][hInterior]);
SetPlayerPos(playerid, HouseInfo[house][hExitx], HouseInfo[house][hExity],HouseInfo[house][hExitz]);
SetPlayerVirtualWorld(playerid,house+250);
PlayerInfo[playerid][pLocal] = house;
SetCameraBehindPlayer(playerid);
return true;
}

stock PrintHouse(playerid)
{
if(IsPlayerConnected(playerid))
{
new string[500];
new house = PlayerInfo[playerid][pPhousekey];
new ltext[7],htext[5],atext[5];
if(HouseInfo[house][hLocked]) { ltext = "Çàêðûò"; } else { ltext = "Îòêðûò"; }
if(HouseInfo[house][hHealth]) { htext = "Åñòü"; } else { htext = "Íåò"; }
if(HouseInfo[house][hArmor]) { atext = "Åñòü"; } else { atext = "Íåò"; }
format(string, sizeof(string),""YW"ID äîìà:{ffffff}\t\t%d\n"YW"Còàòóñ:\t\t\t{ffffff}%s\n"YW"Öåíà:{ffffff}\t\t\t$%d\n"YW"Óðîâåíü:{ffffff}\t\t%d\n"YW"Äîìàøíÿÿ ìàøèíà:{ffffff}\t%s [ID: %d]\
\n"YW"Ïîïîëíåíèå æèçíåé:{ffffff} %s\n"YW"Ïîïîëíåíèå áðîíè:{ffffff} %s",house,ltext,HouseInfo[house][hPrice],HouseInfo[house][hLevel],VehicleNames[HouseInfo[house][hCarModel]-400],HouseInfo[house][hCarModel],htext,atext);
SPD(playerid,101,DSM,"{FFFFFF}Èíôîðìàöèÿ î äîìå",string,"Íàçàä","");
}


publics LoadProperty()
{
new idx;
new arrCoords[27][32];
new strFromFile2[256];
new File: file = fopen("property.cfg", io_read);
if (file)
{
while (idx < sizeof(HouseInfo))
{
fread(file, strFromFile2);
split(strFromFile2, arrCoords, ',');
HouseInfo[idx][hEntrancex] = floatstr(arrCoords[0]);
HouseInfo[idx][hEntrancey] = floatstr(arrCoords[1]);
HouseInfo[idx][hEntrancez] = floatstr(arrCoords[2]);
HouseInfo[idx][hExitx] = floatstr(arrCoords[3]);
HouseInfo[idx][hExity] = floatstr(arrCoords[4]);
HouseInfo[idx][hExitz] = floatstr(arrCoords[5]);
HouseInfo[idx][hInterior] = strval(arrCoords[6]);
HouseInfo[idx][hOwned] = strval(arrCoords[7]);
strmid(HouseInfo[idx][hOwner], arrCoords[8], 0, strlen(arrCoords[8]), 255);
HouseInfo[idx][hLevel] = strval(arrCoords[9]);
HouseInfo[idx][hPrice] = strval(arrCoords[10]);
HouseInfo[idx][hLocked] = strval(arrCoords[11]);
HouseInfo[idx][hArmor] = strval(arrCoords[12]);
HouseInfo[idx][hHealth] = strval(arrCoords[13]);
HouseInfo[idx][hCarModel] = strval(arrCoords[14]);
HouseInfo[idx][hColor1] = strval(arrCoords[15]);
HouseInfo[idx][hColor2] = strval(arrCoords[16]);
HouseInfo[idx][hWheels] = strval(arrCoords[17]);
HouseInfo[idx][hBamper1] = strval(arrCoords[18]);
HouseInfo[idx][hBamper2] = strval(arrCoords[19]);
HouseInfo[idx][hPaint] = strval(arrCoords[20]);
HouseInfo[idx][hGidro] = strval(arrCoords[21]);
HouseInfo[idx][hNos] = strval(arrCoords[22]);
HouseInfo[idx][hDrugs] = strval(arrCoords[23]);
HouseInfo[idx][hMoney] = strval(arrCoords[24]);
HouseInfo[idx][hMats] = strval(arrCoords[25]);
HouseInfo[idx][hPassword] = strval(arrCoords[26]);
idx++;
}
fclose(file);
}
return 1;
}


for(new h = 0; h < sizeof(HouseInfo); h++)
{
if(HouseInfo[h][hOwned] == 0)
{
format(string2, sizeof(string2), ""YW"[ID: {FFFFFF}%d"YW"]\nÂëàäåëåö: {FFFFFF}Íåò"YW"\nÓðîâåíü: {FFFFFF}%d"YW"\nÖåíà: {FFFFFF}$%d",h,HouseInfo[h][hLevel],HouseInfo[h][hPrice]);
HouseInfo[h][hLabel] = Create3DTextLabel(string2,0xF5DEB3FF,HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]+0.7,10.0,0,1);
HouseInfo[h][hPickup] = CreateDynamicPickup(19524, 23, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez],-1,-1,-1,100.0);
HouseInfo[h][hIcon] = CreateDynamicMapIcon(HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez], 31, WHITE, 0, -1, -1, 200.0);
}


{
HouseInfo[h][hPickup] = CreateDynamicPickup(19522, 23, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez],-1,-1,-1,100.0);
format(string2, sizeof(string2), ""YW"[ID: {FFFFFF}%d"YW"]\nÂëàäåëåö: {FFFFFF}%s"YW"\nÖåíà: {FFFFFF}$%d"YW"\nÓðîâåíü: {FFFFFF}%d",h,HouseInfo[h][hOwner],HouseInfo[h][hPrice],HouseInfo[h][hLevel]);
HouseInfo[h][hLabel] = Create3DTextLabel(string2,0xF5DEB3FF,HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]+0.7,10.0,0,1);
}

{
new house = PlayerInfo[playerid][pPhousekey];
if(HouseInfo[house][hCarModel] != 0) HouseVehicle[house] = CreateVehicle(HouseInfo[house][hCarModel], HouseCarSpawns[house][0], HouseCarSpawns[house][1], HouseCarSpawns[house][2], HouseCarSpawns[house][3], HouseInfo[house][hColor1], HouseInfo[house][hColor2], -1);
LockCar(HouseVehicle[house], 1);
SetVehicleNumberPlate(HouseVehicle[house],HouseInfo[house][hOwner]);
}
else { if(PlayerInfo[playerid][pPhousekey] != -1) { PlayerInfo[playerid][pPhousekey] = -1; } }
format(string2, sizeof(string2), "~w~šO€PO ŒO„A‡O‹A’ ~n~~g~ %s", PlayerName[playerid]);
GameTextForPlayer(playerid, string2, 5000, 1);
gPlayerLogged[playerid] = 1;
SetSpawnInfoPlayer(playerid);
SpawnPlayer(playerid);
SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
for(new i = 0; i < sizeof(HouseInfo); i++) SetPlayerMapIcon(playerid, i,HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancex], HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancey], HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancez],35,-1,1);
return true;
}


new idx;
new File: file2;
while (idx < sizeof(HouseInfo))
{
new coordsstring[256];
format(coordsstring, sizeof(coordsstring), "%f,%f,%f,%f,%f,%f,%d,%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
HouseInfo[idx][hEntrancex],
HouseInfo[idx][hEntrancey],
HouseInfo[idx][hEntrancez],
HouseInfo[idx][hExitx],
HouseInfo[idx][hExity],
HouseInfo[idx][hExitz],
HouseInfo[idx][hInterior],
HouseInfo[idx][hOwned],
HouseInfo[idx][hOwner],
HouseInfo[idx][hLevel],
HouseInfo[idx][hPrice],
HouseInfo[idx][hLocked],
HouseInfo[idx][hArmor],
HouseInfo[idx][hHealth],
HouseInfo[idx][hCarModel],
HouseInfo[idx][hColor1],
HouseInfo[idx][hColor2],
HouseInfo[idx][hWheels],
HouseInfo[idx][hBamper1],
HouseInfo[idx][hBamper2],
HouseInfo[idx][hPaint],
HouseInfo[idx][hGidro],
HouseInfo[idx][hNos],
HouseInfo[idx][hDrugs],
HouseInfo[idx][hMoney],
HouseInfo[idx][hMats],
HouseInfo[idx][hPassword]);
if(idx == 0)
{
file2 = fopen("property.cfg", io_write);
}
else
{
file2 = fopen("property.cfg", io_append);
}
fwrite(file2, coordsstring);
idx++;
fclose(file2);
}


if(PlayerInfo[playerid][pPhousekey] != 1000 || (PlayerInfo[playerid][pFlatKey] != 255)) return SCM(playerid, GREY, "Ó òåáÿ óæå åñòü äîì.");
for(new h = 0; h < sizeof(HouseInfo); h++)
{
if(IsPlayerInRangeOfPoint(playerid,2.0, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]) && HouseInfo[h][hOwned] == 0)
{
if(PlayerInfo[playerid][pLevel] < HouseInfo[h][hLevel]) return SendFormattedMessage(playerid, GREY, "Âàì íóæåí %d óðîâåíü äëÿ ïîêóïêè ýòîãî äîìà.", HouseInfo[h][hLevel]);
if(GetMoney(playerid) < HouseInfo[h][hPrice]) return SCM(playerid, GREY, "Íåäîñòàòî÷íî äåíåã.");
PlayerInfo[playerid][pPhousekey] = h;
HouseInfo[h][hOwned] = 1;
strmid(HouseInfo[h][hOwner], PlayerName[playerid], 0, strlen(PlayerName[playerid]), 255);
GiveMoney(playerid,-HouseInfo[h][hPrice]);
SetPlayerInterior(playerid,HouseInfo[h][hInterior]);
SetPlayerPos(playerid,HouseInfo[h][hExitx],HouseInfo[h][hExity],HouseInfo[h][hExitz]);
GameTextForPlayer(playerid, "~w~ƒo—po £o›ažo¢a¦© ~g~šo¯o", 5000, 6);
SetPlayerVirtualWorld(playerid,h+250);
PlayerInfo[playerid][pLocal] = h;
SCM(playerid, LBLUE, "Ïîçäðàâëÿþ, âû ïðèîáðåëè äîìó (/help ïîìîùü ïî äîìó).");
for(new i = 0; i < sizeof(HouseInfo); i++) SetPlayerMapIcon(playerid, i,HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancex], HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancey], HouseInfo[PlayerInfo[playerid][pPhousekey]][hEntrancez],35,-1,1);
UpdateHouse(h);
new house = PlayerInfo[playerid][pPhousekey];
if(HouseInfo[house][hCarModel] != 0) HouseVehicle[house] = CreateVehicle(HouseInfo[house][hCarModel], HouseCarSpawns[house][0], HouseCarSpawns[house][1], HouseCarSpawns[house][2], HouseCarSpawns[house][3], HouseInfo[house][hColor1], HouseInfo[house][hColor2], -1);
LockCar(HouseVehicle[house], 1);
SetVehicleNumberPlate(HouseVehicle[house],HouseInfo[house][hOwner]);
OnPlayerSave(playerid);
SetSpawnInfoPlayer(playerid);
return 1;
}
}
return 1;

new local = PlayerInfo[playerid][pLocal];
DisablePlayerCheckpoint(playerid);
if(PlayerInfo[playerid][pInt] == 1) // Safe House #1 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2231.7358,-1112.2499,1050.8828);
}
else if(PlayerInfo[playerid][pInt] == 2) // Safe House #2 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2194.8655,-1210.6627,1049.0234);
}
else if(PlayerInfo[playerid][pInt] == 3) // Safe House #3 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2316.1682,-1010.7289,1054.7188);
}
else if(PlayerInfo[playerid][pInt] == 4) // Safe House #4 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2263.2786,-1132.6641,1050.6328);
}
else if(PlayerInfo[playerid][pInt] == 5) // Safe House #5 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2262.7852,-1216.7727,1049.0234);
}
else if(PlayerInfo[playerid][pInt] == 6) // Safe House #6 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2319.4692,-1212.8815,1049.0234);
}
else if(PlayerInfo[playerid][pInt] == 7) // Safe House #7 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2235.8840,-1073.9371,1049.0234);
}
else if(PlayerInfo[playerid][pInt] == 8) // Verdant Bluff safehouse Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2363.7695,-1127.4766,1050.8826);
}
else if(PlayerInfo[playerid][pInt] == 9) // Willowfield Safehouse Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2286.2454,-1137.6738,1050.8984);
}
else if(PlayerInfo[playerid][pInt] == 10) // he Camel's Toe Safehouse Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2215.8606,-1074.7007,1050.4844);
}
else if(PlayerInfo[playerid][pInt] == 11) // Unused safe house Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 2332.6091,-1144.4188,1054.3047);
}
else if(PlayerInfo[playerid][pInt] == 12) // Burglary House #1 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 235.1947,1198.8970,1080.2645);
}
else if(PlayerInfo[playerid][pInt] == 13) // Burglary House #2 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 218.5477,1247.4591,1082.1481);
}
else if(PlayerInfo[playerid][pInt] == 14) // Burglary House #3 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 228.7334,1287.0778,1082.1406);
}
else if(PlayerInfo[playerid][pInt] == 15) // Burglary House #4 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 240.2898,1109.0814,1080.9922);
}
else if(PlayerInfo[playerid][pInt] == 16) // Burglary House #5 Âûõîä
{
SetPlayerInterior(playerid, HouseInfo[local][hInterior]);
PlayerInfo[playerid][pInt] = 0;
SetPlayerVirtualWorld(playerid, 250+local);
SetPlayerPos(playerid, 291.6276,1479.6188,1080.2578);
}

if(newkeys == KEY_WALK)
{
for(new i = 0; i < sizeof(HouseInfo); i++)
{
if (IsPlayerInRangeOfPoint( playerid,3,HouseInfo[i][hEntrancex], HouseInfo[i][hEntrancey], HouseInfo[i][hEntrancez]))
{
if(PlayerInfo[playerid][pPhousekey] == i || HouseInfo[i][hLocked] == 0)
{
SetPlayerInterior(playerid,HouseInfo[i][hInterior]);
SetPlayerVirtualWorld(playerid,i+250);
PlayerInfo[playerid][pLocal] = i;
SetCameraBehindPlayer(playerid);
return SetPlayerPos(playerid,HouseInfo[i][hExitx],HouseInfo[i][hExity],HouseInfo[i][hExitz]);
}
else return GameTextForPlayer(playerid, "~r~ˆAKP‘O", 5000, 1);
}
}
for(new i = 0; i < sizeof(HouseInfo); i++)
{
if (IsPlayerInRangeOfPoint(playerid,1,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz]))
{
if(GetPlayerVirtualWorld(playerid) == 250+i)
{
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetCameraBehindPlayer(playerid);
SetPlayerPos(playerid,HouseInfo[i][hEntrancex],HouseInfo[i][hEntrancey],HouseInfo[i][hEntrancez]);
PlayerInfo[playerid][pLocal] = 255;
PlayerInfo[playerid][pInt] = 0;
if(HouseInfo[i][hHealth] == 1)
{
new Float:tempheal;
GetPlayerHealth(playerid,tempheal);
if(tempheal < 100.0)
{
SetPlayerHealthAC(playerid,100.0);
}
}
if(HouseInfo[i][hArmor] == 1 && IsACop(playerid))
{
SetPlayerArmour(playerid,100.0);
Armor[playerid] = 100;

qwezert
13.01.2017, 19:20
Скорее всего ошибка вот тут

stock PrintHouse(playerid)
{
if(IsPlayerConnected(playerid))
{
new string[500];
new house = PlayerInfo[playerid][pPhousekey];
...
if(HouseInfo[house][hLocked])
У тебя если у игрока нет дома в ячейке pPhousekey лежит -1.
Ты без проверки пытаешься получить данные о доме вот тут if(HouseInfo[house][hLocked]) - и в house у тебя -1. Ошибка получается.

Поставь проверку if(IsPlayerConnected(playerid) && PlayerInfo[playerid][pPhousekey] >=0)

DoN_SancheS
13.01.2017, 19:30
Скорее всего ошибка вот тут

stock PrintHouse(playerid)
{
if(IsPlayerConnected(playerid))
{
new string[500];
new house = PlayerInfo[playerid][pPhousekey];
...
if(HouseInfo[house][hLocked])
У тебя если у игрока нет дома в ячейке pPhousekey лежит -1.
Ты без проверки пытаешься получить данные о доме вот тут if(HouseInfo[house][hLocked]) - и в house у тебя -1. Ошибка получается.

Поставь проверку if(IsPlayerConnected(playerid) && PlayerInfo[playerid][pPhousekey] >=0)

Можешь целиком написать пожалуйста,
Не хочу что то перепутать местами и вообще всё портить, да и спасибо тебе огромное.

qwezert
13.01.2017, 19:32
stock PrintHouse(playerid)
{
if(IsPlayerConnected(playerid) && PlayerInfo[playerid][pPhousekey] >=0 ) //-вот так сделай
{

DoN_SancheS
13.01.2017, 19:55
Спасибо тебе большое, всё сработало, тему можно закрыть.:good2: