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

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

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

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

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

Всем добрый вечер!!

 

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

http://s-platoon.ru/index.php?/topic/98-reliz-polzovatelskaia-tochka-spauna-cherez-baz/?hl=релиз

 

Собственно ничего сложного нет в запросе который я написал но все же он не хочет работать, либо я не так его написал.

CREATE TRIGGER `custom_spawn` 
BEFORE INSERT ON `character_data` 
FOR EACH ROW 
BEGIN
DECLARE PUID varchar(50);
DECLARE KOORD varchar(50); 
DECLARE INV longtext; 
DECLARE BCK longtext;
 SET PUID = (SELECT `PlayerUID` FROM `cust_spawn` WHERE `PlayerUID`=NEW.PlayerUID); 
 SET INV = (SELECT `Inventory` FROM `cust_spawn` WHERE `PlayerUID`=NULL);
 SET BCK = (SELECT `Backpack` FROM `cust_spawn` WHERE `PlayerUID`=NULL);
   IF(PUID=NEW.PlayerUID) THEN 
     SET INV = (SELECT `Inventory` FROM `cust_spawn` WHERE `PlayerUID`=PUID); 
     SET BCK = (SELECT `Backpack` FROM `cust_spawn` WHERE `PlayerUID`=PUID); 
   END IF;
   IF((SELECT `worldspace` FROM `cust_spawn` WHERE `PlayerUID`=NEW.PlayerUID)!=NULL) THEN 
     SET KOORD = (SELECT `worldspace` FROM `cust_spawn` WHERE `PlayerUID`=NEW.PlayerUID); 
     SET NEW.Worldspace = KOORD; 
   END IF;
 SET NEW.Inventory = INV; 
 SET NEW.Backpack = BCK;  
END;

Вкратце обьясню, как я представлю его работу:

 В таблице кастомного спавна есть строка NULL, поэтому сначала переменным INV и BCK (Инвентарь и рюкзак соответсвенно) значения лута для обычных игроков. Потом идет проверка UID новой строки на наличие UID в таблице с лутом. Если это так, то инвентарь и рюкзак берутся из строки с этим UID из таблицы лута. Следующая проверка на кастомную точку спавна, я сделал так что можно делать донату только лут без спавна в желаемом месте.

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


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

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

  • 0

Все я уже решил вопрос старт лута из БД, все работает. Может не как хотелось но со временем доработаю алгоритм=)

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


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





  • 0

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

  1. Стандартный лут прописанный в файле Startloot.sqf
  2. Стандартный лут сборки сервера прописанный в файле конфига сборки(который я так и не нашел), если в init.sqf отключить файл Стартлут

Теперь вопрос: Где можно найти строки обращения к базе данных, которые меняют в таблице character_data инвентарь, и как их можно безболезненно отключить? Скорей всего они находятся в файлах player_login или player_monitor.

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

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


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

Я чот не понял - ты что хотел то - чтоб при спавне\респавне игрока, у тя стартовый лут в БД падал?)))

Если так, то ты наивен)

Логика:

1. Срабатывает скрипт соединения.

2. Происходит поиск игрока в БД, по ИД.

3. Если игрок есть(ИД нашли) и поле alive = 1 (игрок жив), то только тогда происходит чтение и применение параметров из БД(т.е. - инвентарь и т.п.).

Далее - в противном случае(нет игрока в БД или в БД только записи где alive=0 - дохляк)

4. Скрипт выдает стартовый инвентарь

5. В БД идет запрос на новую запись.

 

6. Твой триггер добавляет что то в БД(хотя скрипт уже срать,пердеть. колесом вертеть хотел, на все твои манипуляции).

 

БД то тут при чем? Или ты думал стартовый лут из БД читается? Нет. Он туда СОХРАНЯЕТСЯ, при респавне, а не в коем случае не читается оттуда, т.к. БД это только таблица сохранений. И при коннекте игрока, идет запрос к БД, и делается выборка по полю alive - если игрок жив. То только тогда происходит чтение инвентаря с БД.

В противном случае, его выдает скрипт, и делает запись в БД( БЕЗ ЧТЕНИЯ ЧЕГО ЛИБО С SQL).

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: Oakling
      Господа, помогите разобраться в проблеме. Создаю БД dayz_overwatch, выполняю sql файл, завершается неуспешно, в таблицах появляется только deployable. Для эксперимента залил базу epoch, все успешно. Файлы сервера брал с их сайта. Подскажите плз, как решить проблему
    • Автор: dok379
      Подскажите как добавить в этот SQL скрипт исключение 
       
      BEGIN     UPDATE object_data          SET Damage = 0.11          WHERE CharacterID <> 0             AND (Inventory IS NULL) OR (Inventory = '[]')             AND DATE(LastUpdated) < CURDATE() - INTERVAL 1 DAY; END    
      Как к примеру эти объекты в исключение добавить? Чтобы он по всему нес дамаг кроме этих объектов
       
      "FuelPump_DZ","Land_A_FuelStation_Feed","Land_Ind_FuelStation_Feed_EP1"    
    • Автор: Sheolone
      вот это пытаюсь залить в БД, не получается, лезут ерроры. Что не так? или как должно быть?
       
       
       
    • Автор: Karakurd
      Создание Процедур в базе данных, для чистки сервера во время рестарта и их запуск.
      Основано на http://s-platoon.ru/index.php?/topic/835-udalenie-broshennoi-tekhniki/?p=8922 за батник парню отдельное спасибо!
       
        Нам понадобится:
      1. PhpMyAdmin или Navicat
      2. Желание творить =)
       
        Для начала нам нужно создать 2 хранимых процедуры и 1 функцию в базе данных:
      1. Процедура pMain - открывает технику к которой утерян ключ (делает ее незакрываемой)
      2. Функция FindVehicleKeysCount- определяет параметр наявности ключа для pMain
      3. Процедура pCleanup - финальная очистка сервера перед стартом.
       
        Процедура pMain:
      PhpMyAdmin:
      1. Открываем PhpMyAdmin => выбираем нашу базу => вкладка "Процедуры" => "Добавить процедуру"
      2. Заполняем появившееся окно:
      Имя процедуры......................................pMain
      Тип.........................................................PROCEDURE
      Параметры (Направление, Имя, Тип, Длина/значения, Параметры) - Удаляем строчку нажатием на красный крестик справа!
      В поле "Определение" вставляем код:
       
       
      Определяющий......................................Галка снята!
      Определитель.........................................пользователь БД@localhost
      Тип безопасности....................................DEFINER
      Доступ к SQL данным.............................MODIFIES SQL DATA
      Комментарий..........................................оставляем пустым
      Жмем ОК - всё, процедура у нас есть.
       
      Navicat:
      1. Подключаемся к нашей БД => в верхнем меню кнопка "Functions" =>  "New function"
      2. В появившемся окне ставим галку Type - Procedure и жмем "Finish"
      3. Вкладка Definition:
      В поле для SQL запроса всё стираем и вставляем код из под спойлера для PhpMyAdmin
      Parameter..............................................оставляем пустым
      Return Type............................................неактивно (оставляем пустым)
      Type......................................................PROCEDURE
         Вкладка Advanced:
      Security.................................................DEFINER
      Definer...................................................пользователь БД@localhost
      Data Access..........................................MODIFIES SQL DATA
      Deterministic..........................................галка снята
         Вкладка Comment - оставляем пустой
         Вкладка SQL Preview - в ней можно посмотреть запрос в БД который выполнится для создания данной процедуры, должно быть так:
       
       
      Всё, жмем кнопочку "Save" вводим имя - pMain и процедура готова.
       
      Процедура pCleanup
         Создается аналогично процедуре pMain, только в поле "имя" естественно прописывам - pCleanup,
      а в поле для SQL запроса следуйщий код:
       
       
      Этот код можно подредактировать под себя, удалить ненужные запросы или добавить новые, а можно вообще отключить данную процедуру закоментировав в pMain строку:
      CALL pCleanup();   Функция FindVehicleKeysCount:
      PhpMyAdmin:
      1. Открываем PhpMyAdmin => выбираем нашу базу => вкладка "Процедуры" => "Добавить процедуру"
      2. Заполняем появившееся окно:
      Имя процедуры....................................FindVehicleKeysCount
      Тип.......................................................FUNCTION
      Параметры...........................................[ имя - keyId ] [ тип - INT ] [ длина\значения - пусто ] [ параметры - пусто ]
      Возвращаемый тип...............................INT
      Вернуть длину/значения.......................11
      Вернуть параметры...............................оставляем пустым
      Определение........................................вставляем следуйщий код:
       
       
      Определяющий....................................галку установить!
      Определитель......................................пользователь БД@localhost
      Тип безопасности.................................DEFINER
      Доступ к SQL данным..........................READS SQL DATA
      Комментарий.......................................оставляем пустым
      Жмем ОК - функция готова.
      Navicat:
      1. Подключаемся к нашей БД => в верхнем меню кнопка "Functions" =>  "New function"
      2. В появившемся окне ставим галку Type - Function и жмем "Finish"
      3. Вкладка Definition:
      В поле SQL запроса всё стираем и вставляем код из под спойлера для PhpMyAdmin
      Parameter............................................`keyId` INT
      Return Type..........................................int(11)
      Type....................................................FUNCTION
         Вкладка Advanced:
      Security...............................................DEFINER
      Definer.................................................пользователь БД@localhost
      Data Access........................................READS SQL DATA
      Deterministic........................................галка установлена!
         Вкладка Comment - оставляем пустой
         Вкладка SQL Preview должна отображать следуйщий запрос:
       
       
      Жмем "Save" вводим имя FindVehicleKeysCount, функция готова.
       
      //Данные процедуры можно добавить в базу SQL запросом (для тех кто понимает что делает), вот пример - http://s-platoon.ru/index.php?/topic/2107-protcedury-v-bd/?p=18767
       
      С созданием процедур покончено, теперь нам всё это дело нужно запустить...
      // Дальнейшая инструкция подразумевает что у Вас уже установлен BEC
         Предлагаю вашему вниманию 2 варианта батника:
      1. All In 1 - всё в одном окне, в том числе и BEC
       
       
       
      2. BEC в отдельном окне, это дает возможность останавливать и запускать BEC при работающем сервере (удобно при его настройке)
       
       
      Во втором случае нам понадобится отдельный батник для запуска BECa:
      Bec.bat
      timeout /t 35 cd D:\ArmA2\BEC "D:\ArmA2\BEC\Bec.exe" -f config.cfg exit Не забываем все пути и параметры в батниках править под свой сервер!!!
  • Наш выбор

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

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

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