1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Проверка на то что блок сгенерировался а не поставлен игроком.

Тема в разделе "Разработка плагинов для новичков", создана пользователем TheMrQuake, 3 ноя 2015.

Статус темы:
Закрыта.
  1. Автор темы
    TheMrQuake

    TheMrQuake Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TheMrQuake
    Подскажите как сделать так чтобы когда игрок ломал блок и выполнялось какое то действие например выдача предмета. Но при этом выполнялась проверка что блок был сгенерирован а не поставлен игроком.
     
  2. alekseichik

    alekseichik Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    maxicraft2020
    можно,конечно, записывать в конфиг локацию каждого поставленного блока , но это очень плохая идея)
     
  3. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Смотря какой промежуток времени нужно помнить о происхождении блока...
     
  4. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Чую я пахнет неправильным подходом.
    Для начала давай ты расскажешь что хочешь делать с ним)
     
  5. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    фу. фу. фу.
    фу. фу. фу.
    фу. фу. фу

    Как можно такое советовать то?
    Ладно бы еще в БД, но в конфиг...
    Извращенцы...
     
  6. LomNar

    LomNar Активный участник Пользователь

    Баллы:
    78
    Skype:
    radius981
    Имя в Minecraft:
    LomNar
    Садомаза
     
  7. Автор темы
    TheMrQuake

    TheMrQuake Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TheMrQuake
    Я хочу сделать так чтобы когда игрок ломал руду ему давалась валюта. Руда не должна быть поставлена игроком.
     
  8. mifort

    mifort Активный участник Пользователь

    Баллы:
    61
    Если не жалко места на жестком диске, тогда просто записывать всю установленную руду в БД, ну и соответственно удалять ее, когда игрок ее сломает.
    Если же жалко, тогда можно отрегенить чанк и проверить была ли там руда, а потом все вернуть. Но опять же придется писать в БД - либо координаты откуда она была сломана(чтобы избежать повторной установки в тоже место и получение за это прибыли).

    Но как по мне и первый вариант нормальный, ни так уж и много БД ест.
     
  9. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    Кажется, в Jobs было что-то подобное, когда за работу добытчика давали деньги только если сломанный блок был сгенерирован. Можете посмотреть, как там устроено.
     
  10. Автор темы
    TheMrQuake

    TheMrQuake Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TheMrQuake
    Нет там по другому. Там когда игрок ставит блок у него снимаются деньги.
    Спасибо. Обязательно попробую.
     
  11. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    Там есть именно профессия добытчика, а есть строителя.
     
  12. baksovic111

    baksovic111 Активный участник Пользователь

    Баллы:
    88
    Я делал подобную хрень таким образом.
    Дабы добиться максимальной производительности, хранил блоки в памяти сервера.
    При отключении сервера записывал в конфиг.
    При включении сервера, подгружал в память.

    Думаю лучший способ.
     
  13. mifort

    mifort Активный участник Пользователь

    Баллы:
    61
    Ну вот только когда у тебя сломают 100кк+ руды ты поймешь что на это уходит много оперативной памяти, скорее тогда уже при загрузке чанка подгружать то что в нем ломали и соответственно выгружать.
     
  14. _EnderWorld_

    _EnderWorld_ Активный участник Пользователь

    Баллы:
    78
    Где хоть ты столько игроков возьмешь? У тебя проект лучше Hypixel'я
     
  15. baksovic111

    baksovic111 Активный участник Пользователь

    Баллы:
    88
    Блок у меня записывался в таком формате X;Y;Z
    Примерно выглядело так 1785;75;-98788
    1 символ кушает примерно 1 байт(точно не знаю)
    100.000.000 блоков, по нашему примеру - это примерно 1.400.000.000 байт
    Перевести в мегабайты - выйдет 1400мб(1.4G) - что собственно не так уж и много при таком кол-во блоков..
    На нормальном сервере где установлен сервер с 16G-~ 32G+ памяти, эти цифры копейки..
     
  16. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Поставить logblock на сервер и использовать его API. Как я понял, сервер на выживание?(hi-tech там, или магия?) Если это мини игры, то лучше самому написать логгер блоков.
     
  17. mifort

    mifort Активный участник Пользователь

    Баллы:
    61
    К примеру 400 уникальных людей в день, каждый идет в шахту и добывает 10 стаков руды в день, что выходит 256000 руды в день или около 7кк за месяц, за год работы сервера это число приблизится к 100кк.


    Ну так хранить - не очень, можно использовать байтовую запись в файл и хранить все int;byte;int, тем самым на одну руду уйдет всегда 9 байт, а если мир меньше 32к блоков то можно использовать short;byte;short, уменьшив количество байт до 5. Все дело не в занимаемой памяти, ну точнее не только в ней, если у тебя наберется хотя бы 10кк сломанной руды ты будешь выполнять поиск по координатам долго, около секунды.
     
  18. baksovic111

    baksovic111 Активный участник Пользователь

    Баллы:
    88
    В любом случае это лучше чем чекать блок из Базы данных или уж тем более конфига..
    Тем более это дело можно выполнять в отдельном потоке не нагружая главный поток.
     
  19. mifort

    mifort Активный участник Пользователь

    Баллы:
    61
    Конфиг точно нет, БД весьма неплохой вариант. А вот отдельный поток может и не будет грузить основной, но процессор он займет не слабо. А если человек сломает 3 блока руды? А если 10 человек сломают по 3 блока руды? У тебя будет неделями искать. Так что самый выгодный способ это, как по мне, записать в БД чанки и грузить их координаты при прогрузке.
     
Статус темы:
Закрыта.

Поделиться этой страницей