Да и так уже 500 млс поставил
Вид для печати
Да и так уже 500 млс поставил
Есть одно решение, даже таймеров не нужно будет.Цитата:
Сообщение от KrutoyKrosch
Получается, что ты грубо говоря каждые 20 секунд отправляешь длинные запросы в БД на сохранение данных которые даже небыли изменены.
Не думаю, что такие значение, как:
меняются каждые 20 секунд.PHP код:
`Sex` = '%d', `Skin` = '%d', `Money`NamePlayer` = '%s', `IDInterior` = '%d', `Bought` = '%d', `Status` = '%d', `Money` = '%d', `Bank` = '%d', `NumHome` = '%d', `IDStreets` = '%d', `Сity` = '%d', `X` = '%f', `Y` = '%f', `Z` = '%f' WHERE `ID` = '%d'
`Status` = '%d', `HP` = '%f', `VehicleID` = '%d', `Color1` = '%d', `Color2` = '%d', `Paintjob` = '%d', `Tyres` = '%d', `Spoiler` = '%d', `FrontBumper` = '%d', `RearBumper` = '%d', `Nitro` = '%d', `Hydraulics` = '%d', `Engine` = '%d'
Можно сделать после каждого изменения одного из этих перечислений сохранение, но именно того, что было изменено.
Например игрок получил деньги и в том же теле делать запрос в БД
И наш запрос получился коротким и только тогда когда у игрока было изменено перечисление pMoneyPHP код:
format(gstring, sizeof(gstring),"UPDATE `players` SET `Money` = '%d' WHERE `ID`='%d'",
pInfo[playerid][pMoney], pInfo[playerid][pID]);
mysql_function_query(mysqlconnect, gstring, false, "", "");
Конечно нужно будет не много поработать, но зато не будет лишних запросов в БД.
Но, решать тебе.
Ну если никто ниже не напишет решения, придется сделать как ты написал
А что если два или более игроков зайдут и начнут тасовать между собой эти деньги?:sarcastic:
Как тут без таймеров то) если хочется что то сделать мягко и без флуда таймеры точно пригодятся.
По сути кол-во запросов в цикле будет = их тасованию пока им не надоесть
Если ты про мой вариант, то цикл быстро создаст много таймеров, которые не очень вредны в таком кол-ве, далее цикл окончится и таймеры как букеты начнут раскрываться один за одним по заданному интервалу, вариант от Saibot действительно лучше будет, так как серв с моим вариантом может упасть и не успеет что то засейвить, а тут у него на каждом шагу будет сейв, просто надо уметь с толком это всё делать чтобы не дудосили потом твою бд.
- - - Добавлено - - -
Есть такие вещи в игре которые постоянно тасуются туда сюда по кол-ву вот их и придется таким образом сохранять как я расписал если это конечно же к большому кол-ву объектов/субъектов и т.п.
Можно поставить таймер на флуд в таких местах.Цитата:
Сообщение от vovandolg
А, каждые 20 + секунд оправлять больше 2000 (MAX_VEHICLES) запросов в БД не будет флуда? это только отправит public SaveVehicle не считая еще, SaveHome, SavePlayer и SaveApartment.
Отправлять запрос в БД после каждого изменения значения очень затратно и опасно. Можно попробовать объединить оба подхода и сохранять раз в N секунд только те данные, которые были изменены.
Почему же? отправляться будут краткие запросы и то когда, это нужно будет.Цитата:
Сообщение от ziggi
Вот пример:
Зашел игрок на сервер и встал в АФК на 1 час, за этот 1 час кроме expa и lvl больше ничего не изменялось.
Если сделать сохранение после изменение, то за это время только отправится два запроса на exp и lvl, но если будет таймер, как у автора темы, который каждые 20 секунд отправляет запросы в БД, то в итоге за один час только у этого игрока, что стоит в АФК отправится - 10.800 запросов в БД на обновление всех данных которые даже небыли за тронуты.
Если он создаст таймер для обновление, то как он узнает какие данные были изменены, что бы именно их обновить? делать кучу проверок?Цитата:
Сообщение от ziggi