Кучу проверок + цикл
так себе идея
- - - Добавлено - - -
а можно каким то способом узнать ддусят ли сервак или нет? просто если только начали - запускать сохранение, а так просто только в дисконнект запихать и се
Вид для печати
Кучу проверок + цикл
так себе идея
- - - Добавлено - - -
а можно каким то способом узнать ддусят ли сервак или нет? просто если только начали - запускать сохранение, а так просто только в дисконнект запихать и се
Можно примерно узнать общую загруженность (типо фпс) сервера через GetServerTickRate, чем ниже значение - тем хуже.
Насчёт дудоса: сохранение наверняка ещё больше повысит нагрузку в тот момент
тикрейт разве отвечает за загруженность? я слышал что это типа максимальная скорость обмена данных на сервере, ну ща посморим
А я слышал что если вместо "return 1" писать "return true" производительность мода будет выше.
На вики все написано.
решил в OnPlayerUpdate засунуть, посмореть какой тик будет
через минуту после того как зашел на сервер
просто при низком тике запускать сохранение и кикать всех игроковКод:SA-MP 0.3.7
Exception At Address: 0x0040F64C
Base: 0x03970000
Registers:
EAX: 0x00000000 EBX: 0x22118688 ECX: 0x041C4D28 EDX: 0x000005A0
ESI: 0x00C6A2CC EDI: 0x22112680 EBP: 0x2210C678 ESP: 0x0177FBBC
EFLAGS: 0x00210246
Stack:
+0000: 0x007104C3 0x22112680 0x00000000 0x00000000
+0010: 0x00B6F9CC 0x00C6A7F0 0x00000001 0x00000000
+0020: 0x041C00C0 0x00000001 0x22112680 0x1005764C
+0030: 0x00000016 0x3C0010D7 0x3F4517D1 0xBF235C0A
+0040: 0x44BC69BC 0x44AA5E59 0x436C53FE 0x44BC4BEB
+0050: 0x44AA60EE 0x436CAE9E 0x00000000 0x2210C678
+0060: 0x041C4D28 0x22112680 0xBDA54000 0xBEB54000
+0070: 0x0000000B 0x00FFFFFE 0x00000800 0x0000072B
+0080: 0x0000003B 0x00000000 0x0000003B 0x041C00C0
+0090: 0x00000000 0x000006AB 0x041C75C0 0x000004AC
+00A0: 0x041C75C0 0x0177FCEC 0x76F55DE0 0x133DEC95
+00B0: 0xFFFFFFFE 0x0177FCB0 0x76F25005 0x00006000
+00C0: 0x00006008 0x00000000 0x0177FCA4 0x00B6F9CC
+00D0: 0x44BC69BC 0x44AA5E59 0x436C53FE 0x00000000
+00E0: 0x00000000 0x041C75C0 0x00000003 0x00000000
+00F0: 0x22118688 0x0177FCC0 0x76F24EA2 0x00000000
+0100: 0x3F6E8800 0x0177FCFC 0x00824219 0x041C0000
+0110: 0x00000000 0x0082421E 0xBBDC09A1 0xBF7B9B10
+0120: 0x3E3CCA66 0x00000061 0x3F72EF6A 0x3D547716
+0130: 0x3E9F4672 0x00825EA4 0xBEA17005 0x3E354B7E
+0140: 0x3F6EAD10 0x0082423B 0x44BC4BEB 0x44AA60EE
+0150: 0x436CAE9E 0x00000000 0x00000000 0x00000000
+0160: 0x0177FD7C 0x00848BD8 0x00000000 0x00711E46
+0170: 0x00C6A2CC 0x00B6F9CC 0x00000061 0xC83B3952
+0180: 0x0177FD8C 0x0053C1B0 0x00B6F9CC 0x0000001A
+0190: 0xFFFFFFFF 0x00000000 0x3C9684BC 0x3FE7A5D0
+01A0: 0xBFC00000 0x03A0DAAE 0x0000001A 0xC83B1A99
+01B0: 0x00000000 0x12004A20 0x0177FD64 0x0177F6FC
+01C0: 0x0177FF70 0x03A25D64 0x03A4A678 0x00000002
+01D0: 0x73AAF5E0 0x0053E986 0x00000001 0x008241AF
+01E0: 0x004D9486 0x0053ECC2 0x00000001 0x00619B71
+01F0: 0x0000001A 0x00000001 0x00000001 0x0000000A
+0200: 0x00748DA0 0x0000001A 0x00000001 0x7689CD90
+0210: 0x00000000 0x0177FF80 0x003A3000 0x011C0000
+0220: 0x4F483B0F 0x041C0EC8 0x00000008 0x00000100
+0230: 0x00000008 0x00000102 0x44700000 0x44070000
+0240: 0x00000000 0x00000000 0x00000780 0x00000438
+0250: 0x00000000 0x00000001 0x000106FC 0x00000200
+0260: 0x00000000 0x021C03C0 0x04774FCE 0x000003C0
+0270: 0x0000021C 0x0000002C 0x0177FE24 0x00825EA4
SCM Op: 0x685, lDbg: 0 LastRendObj: 19477
Game Version: US 1.0
State Information: Ped Context: 0
Как вариант, создать второй массив, аналогичный массиву для хранения информации о аккаунте, и записывать в него данные при сохранении. Типа
И при обновленииPHP код:
new pInfo[MAX_PLAYERS][e_PLAYER_INFO];
new pInfo_buff[MAX_PLAYERS][e_PLAYER_INFO];
Но такой вариант, на самом деле, хорош только, например, для сохранения позиции или каких-то подобных данных, которые сами по себе обновляются часто и при изменении их сохранять не стоитPHP код:
if(pInfo_buff[playerid][имя_константы] != pInfo[playerid][имя_константы])
{
//тут запрос
pInfo_buff[playerid][имя_константы] = pInfo[playerid][имя_константы];
}
А если два раза изменится основной массив ? Получается он будет проверятся по первому, а изменение то второе. Думаю понял о чем я
все дошло как ты хочешь сделать) В принципе для автомобилей, домов, квартир это подойдет, там то не так часто что то обновляется. А для игроков все таки можно проверять тик и если он низкий включать сохранения через таймер. Ну и так по сути обычно на хостах mysql база и сам мод находится на разных серверах, поэтому если что то одно ддосят не так уж и страшно.
Не думаю, что, даже при онлайне в 1000 игроков и при сохранении основных данных прямо при их изменении, MySQL не вытянет всю нагрузку.
На многих серверах-гигантах сохранение происходит прямо при изменении (это можно определить, например, зайдя в игру + зайдя в личный кабине на сайте, а после начать передавать деньги и смотреть на данные в личном кабинете) и проблем особых нет. Мультипоточные запросы решают
Вообще я бы не советовал держать на домашнем ПК публичный игровой сервер.
На самом деле да, нужно просто использовать сохранение совмещая оба способа(сохранение при выходе игрока и при изменении). Тогда можно минимизировать потерю данных и уменьшить нагрузку.