Вход

Просмотр полной версии : [Вопрос] Не загружаются дома



MarioORG
30.11.2014, 21:33
Привет всем. В моде стоит система домов, которые при создании сохраняются в файл, но после перезапуска сервера они не загружаются. (нету пикапов, текстов)

//==========Дома==========
SaveHouseAmount() // кол.во домов
{
new f=ini_openFile("houses/m_h.ini"); // открываем
ini_setInteger(f,"Amount",m_h); // Записываем m_h в amount
return ini_closeFile(f); // закрываем
}

LoadHouses()//загрузка домов
{
if(!fexist("houses/m_h.ini"))return print("[Ошибка] Файл houses/m_h.ini не найден");
new f=ini_openFile("houses/m_h.ini");
ini_getInteger(f,"Amount",m_h);
ini_closeFile(f);
if(!fexist("houses/houses.ini"))return print("[Ошибка] Файл houses/houses.ini не найден");
f=ini_openFile("houses/houses.ini");
new str[8];
for(new h=1;h<=m_h;h++)\
{
format(str,sizeof(str),"ID %d",h);
ini_getString(f,str,STR);
sscanf(STR,"p<|>s[32]s[24]fffiiii",House[h][hDesc],House[h][hOwner],House[h][hX],House[h][hY],House[h][hZ],House[h][hInterior],
House[h][hVirtWorld],House[h][hPrice],House[h][hLock]);
if(!strcmp(House[h][hOwner],"None",true))
{
House[h][hPick]=CreatePickup(1273,23,House[h][hX],House[h][hY],House[h][hZ],0);
format(STR,128,"[Дом продается]\nОписание: %s\nЦена: $%d",House[h][hDesc],House[h][hPrice]);
House[h][hText]=Create3DTextLabel(STR,0xFFFFFFFF,House[h][hX],House[h][hY],House[h][hZ]+0.5,10.0,0,0);
}
else
{
House[h][hPick]=CreatePickup(1239,23,House[h][hX],House[h][hY],House[h][hZ],0);
format(STR,128,"[Дом]\nОписание: %s\nВладелец: %s",House[h][hDesc],House[h][hOwner]);
House[h][hText]=Create3DTextLabel(STR,0xFFFFFFFF,House[h][hX],House[h][hY],House[h][hZ]+0.5,10.0,0,0);
}
}
ini_closeFile(f);
return printf("Loaded %d houses",m_h);
}

SaveHouse(h)//сохранение дома
{
new f=ini_openFile("houses/houses.ini");
new str[8];
format(str,8,"ID %d",h);
format(STR,sizeof(STR),"%s|%s|%f|%f|%f|%d|%d|%d|%d",House[h][hDesc],House[h][hOwner],House[h][hX],House[h][hY],House[h][hZ],House[h][hInterior],
House[h][hVirtWorld],House[h][hPrice],House[h][hLock]
);
ini_setString(f,str,STR);
ini_closeFile(f);
return 1;
}

UpdateHouse(h) // обновление дома
{
DestroyPickup(House[h][hPick]);
if(!strcmp(House[h][hOwner],"None",true))
{
House[h][hPick]=CreatePickup(1273,23,House[h][hX],House[h][hY],House[h][hZ],0);
format(STR,128,"[Дом продается]\nОписание: %s\nЦена: $%d",House[h][hDesc],House[h][hPrice]);
Update3DTextLabelText(House[h][hText],0xFFFFFFFF,STR);
}
else
{
House[h][hPick]=CreatePickup(1239,23,House[h][hX],House[h][hY],House[h][hZ],0);
format(STR,128,"[Дом]\nОписание: %s\nВладелец: %s",House[h][hDesc],House[h][hOwner]);
Update3DTextLabelText(House[h][hText],0xFFFFFFFF,STR);
}
}
//========================

Daniel_Cortez
30.11.2014, 21:46
Как производите рестарт сервера?

MarioORG
30.11.2014, 21:49
Как производите рестарт сервера?

Я просто выключаю и включаю.

Daniel_Cortez
30.11.2014, 23:52
Ну тогда, конечно, если сразу закрыть консоль, ничего не сохранится - Вы просто останавливаете сервер, не давая ему даже времени на сохранение данных. В лучшем случае сохраниться успеет только какая-то их часть.

На сервере под такие цели должна быть специальная команда, поищите. Обычно это что-то вроде /restart или /gmx (не путать с /rcon gmx).
Если не найдёте, лучше написать свою. Принцип действия такой:
Выполняется сохранение данных.
Ставится таймер на 5-10 секунд.
В таймерной функции производится рестарт сервера (SendRconCommand("gmx")).