Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной

Ребят, возник такой вопрос, решил заново перебрать процедуры. Когда то давно я их взял и добавил как советовал автор но сегодня я решил вернуться и посмотреть что же там было и был удивлен немного...

 

предположим есть запрос на удаление техники раздамаженной более 80%:

 

DELETE FROM object_data WHERE Damage > 0.8;
 

 

 

и есть запрос который наносит дамаг любой технике и постройкам в 10% раз в 3 дня

 

UPDATE `object_data` SET `Damage`=0.1 WHERE `ObjectUID` <> 0 AND `CharacterID` <> 0 AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY) AND ( (`Inventory` IS NULL) OR (`Inventory` = '[]') );
 

 

вроде бы казалось что все правильно но как выясняется нет...

дословно говоря этот запрос что делает - не наносит Damage а устанавливает Damage всей техники и постройкам, предположим проходит 3 дня, техника или постройка имеет Damage больше 0.7 предположим и вроде бы казалось что через несколько дней она должна удалиться но это не так, этот запрос судя по невооруженному взгляду опять установит ей Damage = 0.1 и техника или постройка опять будет иметь урон в 0.1 за место 0.8...

 

В чем соль?  :surprised:

 

далее поглядев как можно записывать запросы я выяснил что можно сделать так:

UPDATE `object_data` SET `Damage`=`Damage`+ 0.1;

Это уже ближе к правде но и тут "коса нашла на камень". `Damage` = 0.0 то функция не сработает, но ведь нам надо как то нанести урон, что бы в конечном счете сработал самый верхний запрос...

 

как задать - если урона нет то наносится урон а если есть то плюсуется но и тут есть подводный камень, как можно плюсануть к нулю? никак, тут как то надо вначале значение у которого ноль, присвоить 1 и плюсануть 0.1 потом минусануть 1, бред не так ли?... что делать я хз))) сломал голову. :wacko:

Изменено пользователем JustBullet (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

В общем придумал как сделать:

 

 

UPDATE `object_data`
SET `Damage` = 0.1
WHERE `LastUpdated` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)
AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)
AND (
        (`Inventory` IS NULL)
        OR (`Inventory` = '[]')
        OR (`Inventory` = '[[[],[]],[[],[]],[[],[]]]')
        OR (`Inventory` = '[[[],[]],[[],[]],[[],[]],0]')
)
AND `Damage` < 0.1;


UPDATE `object_data`
SET `Damage`=`Damage`+0.1
WHERE `LastUpdated` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)
AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)
AND (
        (`Inventory` IS NULL)
        OR (`Inventory` = '[]')
        OR (`Inventory` = '[[[],[]],[[],[]],[[],[]]]')
        OR (`Inventory` = '[[[],[]],[[],[]],[[],[]],0]')
)
AND `Damage` >= 0.1;


DELETE FROM `object_data` WHERE `Damage` > 0.8;
 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MagicByte MagicByte MagicByte
  • 0

В обще что оно делает дословно:

Наносим урон раз в три дня в 10%, всем постройкам и техники с пустым инвентарем. Еще я так понимаю сюда надо в исключение добавить сейфы но пока не придумал как.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

в общем вот что получилось, может кому пригодиться:

 

 

BEGIN


UPDATE `object_data`
SET `Damage` = 0.1
WHERE `LastUpdated` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)
AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)
AND (
        (`Inventory` IS NULL)
        OR (`Inventory` = '[]')
        OR (`Inventory` = '[[[],[]],[[],[]],[[],[]]]')
        OR (`Inventory` = '[[[],[]],[[],[]],[[],[]],0]')
)
AND `Classname` NOT IN ('VaultStorageLocked')
AND `Classname` NOT IN ('LockboxStorageLocked')
AND `Damage` < 0.1;


UPDATE `object_data`
SET `Damage`=`Damage`+0.1
WHERE `LastUpdated` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)
AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY)
AND (
        (`Inventory` IS NULL)
        OR (`Inventory` = '[]')
        OR (`Inventory` = '[[[],[]],[[],[]],[[],[]]]')
        OR (`Inventory` = '[[[],[]],[[],[]],[[],[]],0]')
)
AND `Classname` NOT IN ('VaultStorageLocked')
AND `Classname` NOT IN ('LockboxStorageLocked')
AND `Damage` >= 0.1;


DELETE FROM `object_data` WHERE `Damage` > 0.8;


END
 

 



Наносим урон раз в три дня в 10%, всем объектам/постройкам/техники с пустым инвентарем, кроме сейфов и локбоксов, как только нанесенный дамаг превышает 80%,  объекты/постройки/техника удаляется, кроме сейфов и локбоксов. (так же если у вас стоит сторедж от Зупы, то этот запрос уже адаптирован под него)

 

далее к этому я сделаю отдельно ниже для сейфов процедуры, кому будет интересно то пишите, сюда же и выложу...

Изменено пользователем JustBullet (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

UPDATE `object_data` SET `Damage`=`Damage`+ 0.1;

Это уже ближе к правде но и тут "коса нашла на камень". `Damage` = 0.0 то функция не сработает

Это с чего?

с того, что какой то гуру внизу приписал -

 

AND `Damage` >= 0.1;

 

А удалить этот тупняк не судьба?

 

И почему это сейфам не надо наносить урон? - Наверное, боишься их удалить т.к. не ремонтируемы?

 

Ну так и сделай 3 триггера. Имхо будет "читабильней".

 

1. Удаляем объекты к которым не было доступа более ххх дней.

2. Наносим урон по всем объектам БД, без ссаных выборок, и исключений.

3. Снимаем урон (damage = 0) у объектов хранилищ.

 

Ты конечно можешь все исключения вписать в п.2. и обойтись без 3 триггера.

Изменено пользователем NoNameUltima (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Это с чего?

с того, что какой то гуру внизу приписал -

 

AND `Damage` >= 0.1;

 

А удалить этот тупняк не судьба?

 

И почему это сейфам не надо наносить урон? - Наверное, боишься их удалить т.к. не ремонтируемы?

 

Ну так и сделай 3 триггера. Имхо будет "читабильней".

 

1. Удаляем объекты к которым не было доступа более ххх дней.

2. Наносим урон по всем объектам БД, без ссаных выборок, и исключений.

3. Снимаем урон (damage = 0) у объектов хранилищ.

 

Ты конечно можешь все исключения вписать в п.2. и обойтись без 3 триггера.

 

Да, не ремонтируемы, к тому же придумал уже много процедур да вообще решил все процедуры написать с нуля, так более понятно мне что на самом деле происходит, методов много и Ваш безусловно имеет место быть но вчера уже много что от той логике сделал ну и в принципе уже на финишной прямой... По поводу тупняка, это же просто проверка что бы не срабатывало обе процедуры. 

 

Может вы выложите свой pCleanup?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

опять же про гуру, вы не из той оперы взяли мысль... это были слова для

  1. UPDATE `object_data` SET `Damage`=0.1 WHERE `ObjectUID` <> 0 AND `CharacterID` <> 0 AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY) AND ( (`Inventory` IS NULL) OR (`Inventory` = '[]') );

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

как обновить процедурой строку и вернуть LastUpdated в исходное значение до обновления?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

1. Удаляем объекты к которым не было доступа более ххх дней.

2. Наносим урон по всем объектам БД, без ссаных выборок, и исключений.

3. Снимаем урон (damage = 0) у объектов хранилищ.

Я понял Вашу мысль но вот что я не пойму, как выполнить 1й пункт и дать ему понять что небыло доступа к объектам если после выполнения 2го пункта LastUpdated изменится и обновится...?

 

потому что как только я наношу урон объекту, БД автоматически обновляет его на новый LastUpdated, последний когда был нанесен урон и выходит что пункт 1 не будет работать.

 

я очень и очень не силен в запросах и пока мне хватает мозгов понимать и работать с примерами но дополнительных функций я не знаю... надеюсь вы понимаете о чем я.

 

со вторым и третьим пунктом я согласен, особенно понравилась фраза "Без ссаных выборок"  :smile:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

1. Урон всему.

UPDATE `object_data` SET `Damage`=`Damage`+ 0.1;

2. Урон 0 для хранилищ.

UPDATE `object_data` SET `Damage`=0 WHERE 'Classname'=...AND 'Classname'=... - перечисляем список хранилищ. 

3. Удаляем все где урон больше 0.9, или последний доступ был более 30 дней назад.

 

DELETE 'object_data' WHERE `LastUpdated` > DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 30 DAY) OR 'Damage' > 0.9;

 

Писал от руки...

1 , 3 пункт можно совместить добавив в 1 пункт выборку НЕ РАВНО

 

WHERE classname <> 'Сейф', AND classname <> 'Маленький сейф'
Изменено пользователем NoNameUltima (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Maltaen46
      Ситуация такая,  сервер намальск (епоч 1051),  запускается сервер,  потом подключаюсь и сразу после загрузки задание висит загрузка на 0 и звук природы на заднем фоне. Но консоль пишет что мол подключился и бд не как не идёт.  Использовал hiveext.ini и с чистой сборки и со сборки Дмитрия покки.  После множества попыток узнать что не так,  я наткнулся что все идёт из папки mpmissions.  Кто сталкивался помогите.  Файлы миссии кину в ликчу кто решит помочь.  (связь вк vk.com/nox46) 
    • Автор: FLOZzY
      Ребята, скажу сразу я нубяра в этом всем. Короче, был вайп серверной машины, после этого не загружается задание, считывает инфу с MySQL. как эту херню заставить работать?
    • Автор: NickPS
      Доброго времени суток. Подскажите пожалуйста, как удалить объект на карте так, чтобы при дальнейших рестартах его там никогда не возникало.
      В моём случае, это Н-Барьер в арке в торговом посту Эммен на Напфе. Он мешает выезду техники.
      Админка от Инфистар.
    • Автор: OXIDE
      Добрый день, делаю сервер для калькуляторов, нужна оптимизация. Уже выкл траву, убрал руды\хеликраши\спавн техники. За счёт чего ещё можно повысить FPS? Стоит WAI, DZAI нет.

      Сразу пишу сюда, дабы не засорять раздел. Можно ли как-то сделать строительство без анимации вообще, как в Rust?

      Как чистить базу данных от игроков, которые давно не заходили. Можно ли скрипт на удаление техники, если она долго стоит?
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.

Поддержка