extremist

[РЕЛИЗ] Пользовательская точка спауна через базу данных

46 сообщений в этой теме

Хочу предложить Вашему вниманию возможность спауниться определённому игроку в определённом месте на карте.

 

Область применения:

1. Админский спаун на админской базе

2. Донатерский спаун на донатерской базе

3. Наказание для игроков

 

по п.1,2 пояснений давать нет смысла, а вот п.3 объясню.

На своём сервере я построил тюрьму, в которую игроки помещаются за нарушение правил сервера. Задав UID  и координаты местоположения в тюрьме игрок будет всегда спауниться после смерти в тюрьме. При этом свою тюрьму я сделал неприступным островом, сбежать из которой можно лишь при помощи другого игрока на вертолёте )))) После отправок игроков на нары желание нарушать установленные правила резко сокращается - проверено.

 

Теперь инструкция о том как создать кастомную точку спауна:

 

Установка:

------------------------------------------------------------------​


1. Зайдите в  PHPmyAdmin.​


2. Кликните по названию своей базы данных ( обычно dayz_epoch)


3. Кликните на вкладку  SQL (наверху).


4. Теперь в окне SQL вставьте следующий код:​

CREATE TABLE `cust_spawn` (
`PlayerUID` INT(10) NULL DEFAULT NULL,
`worldspace` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

Нажмите OK.​


Этот код создаст новую таблицу с названием "cust_spawn"  в вашей базе данных.​


5. Кликните "clear/очистить"  на странице ввода  SQL кода.​


6. Вставьте следующий код в окно SQL :​


CREATE TRIGGER `custom_spawn`
  BEFORE INSERT ON `character_data`
  FOR EACH ROW
BEGIN
DECLARE x INT;
DECLARE y varchar(50);
SET x = (SELECT `PlayerUID` FROM `cust_spawn` WHERE `PlayerUID`=NEW.PlayerUID);
SET y = (SELECT `worldspace` FROM `cust_spawn` WHERE `PlayerUID`=NEW.PlayerUID);
IF NEW.PlayerUID = x THEN
SET NEW.worldspace=y;
END IF;
END;$$

 

Перед тем как нажать ОК в окошке разделитель(delimiter) вставьте без кавычек " $$ " и лишь затем нажмите ОК.​

Теперь у Вас есть таблица для кастомного спауна с тригером, который будет спаунить игрока из таблицы​ "cust_spawn" по указанным в ней координатам каждый раз когда игрок будет умирать.
Для того чтобы задать игроку точку спауна достаточно указать UID игрока и координаты в таблице "cust_spawn".

 

Пример координат для спауна игрока:​


[268,[8627.69,12631.1,0.002]]

ВНИМАНИЕ!!! Перед тем как осуществлять какие либо манипуляции со своей базой данных создайте резервную копию!!!!

Изменено пользователем Xotabl4
Перед тем как нажать ОЛ исправлено на ОК (история изменений)

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


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


Вопрос -

А почему через SQL?

Не проще - скриптом по UID задавать player setPOS, при логине?

И сажать можно прямо в игре, без релога...

 

Турьма это интересно)

Как в УО))

Надо еще добавить - вырубку леса) И пока не нарубит ххх леса не выпускать)

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


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

админ распостранен бесплатно, и стоит наряду с апачем у большинства.

Хостеры юзают в большинстве своем.

Входит в пакет денвера, который даже тугой поставит в 2 клика_)

Локализации на всех языках....

 

Ну, и плюс - веб интерфейс как бэ намекает))

 

Так что...

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


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

Вопрос -

А почему через SQL?

Не проще - скриптом по UID задавать player setPOS, при логине?

И сажать можно прямо в игре, без релога...

Через базу данных потому что в таблицу проще вносить данные нежели постоянно распаковывать миссию или сервер, чтобы внести новые UIDы или координаты, при желании можно форму добавить к админке от Nightmare PrivateHiveTools  и вносить изменения станет элементарным.

 

Ну и даже если через SQL, то почему именно phpmyadmin. Есть и другой софт :)

Пример привел на phpadmin потому что привык в нём  подобные вещи совершать, кто может сделать самостоятельно в Navicat  делайте там. Главное-суть, а не исполнение.

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


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

Интересно, можно ли подобным образом настроить точки спауна транспорта?

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


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

А почему нет.

Как угодно можно сделать - триггер\php скрипт который будет добавлять технику после рестарта в указанную позицию.

Проверяй по запросу к бд, - есть ли в данной точке чтолибо, если нет добавляй запись в БД.

 

Только зачем это?

Тебе еще прийдется писать проверку для БД, чтобы посчитать кол-во техники с CharacterID=0 (безхозной), чтоб не спавнить ее постоянно. Иначе переполниш сервер.

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


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

Делаю через Navicat
Открываю таблицу с базой данных сервера 1.0.4.2а (официалка с оф сайта)
открываю консоль
вбиваю 1-й код, энтер, пишет, что вроде как успешно.
Обновляю, таблица появилась.
Вбиваю 2-й код, энтер, пишет, что всё врое как ок.
Обновляю, таблица на месте.

Захожу в неё - пишет следующее со скриншота. Что делать?
Вопрос 2: фразу

Перед тем как нажать ОК в окошке разделитель(delimiter) вставьте без кавычек " $$ " и лишь затем нажмите ОК.​


я не понял

Скриншот:
wvdQi.png

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

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


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

Пишет, что отсутствует уникальный индекс для ячейки таблицы.

Т.е. или ты руками пытаешься добавить запись с индексом который уже есть в БД, или делаешь тоже самое скриптом.

Данное поле должно заполнятся автоматически(sql сам сгенерит индекс для поля).

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


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

Пишет, что отсутствует уникальный индекс для ячейки таблицы.

Т.е. или ты руками пытаешься добавить запись с индексом который уже есть в БД, или делаешь тоже самое скриптом.

Данное поле должно заполнятся автоматически(sql сам сгенерит индекс для поля).

на видео заснять как делаю? Может ошибку найдёшь. Строго по инструкции, только с навиката.

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

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


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

NoNameUltima, просто проблема в том, что даже если я делаю это по теме этой через  phpmyadmin,  и открываю созданную таблицу потом в phpmyadmin, то в нём всё ок. А вот в навикате если открыть (тупо открыть, не создавать с него) ошибка та же выскакивает.

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

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


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

NoNameUltima, просто проблема в том, что даже если я делаю это по теме этой через  phpmyadmin,  и открываю созданную таблицу потом в phpmyadmin, то в нём всё ок. А вот в навикате если открыть (тупо открыть, не создавать с него) ошибка та же выскакивает.

$$ с разделителем запроса разберись. В phpMyAdmin он вставляется чуть ниже самого запроса(поле delimiter).

Возможно из-за этого ошибка. В код особо не вдавался...

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


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

 

NoNameUltima, просто проблема в том, что даже если я делаю это по теме этой через  phpmyadmin,  и открываю созданную таблицу потом в phpmyadmin, то в нём всё ок. А вот в навикате если открыть (тупо открыть, не создавать с него) ошибка та же выскакивает.

$$ с разделителем запроса разберись. В phpMyAdmin он вставляется чуть ниже самого запроса(поле delimiter).

Возможно из-за этого ошибка. В код особо не вдавался...

Вписывал это в phpMyAdmin, не помогло. Может вписываю как-то не правильно? Пишу там в графу после точки с запятой

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


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

Вроде бы допёр с другом как убрать эту ошибку в навикате. Могу заснять на видео, если кому надо.
Спс за гайд, работает ;)
P.S. вопросик: таким же образом можно же и лут индивидуальный назначать, верно понял?

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


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

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

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

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

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


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

Войти

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


Войти сейчас