Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Мобы

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

  1. Автор темы
    morozzzlolka

    morozzzlolka Участник Пользователь

    Баллы:
    31
    Всем привет! Пишу ещё раз.

    В той теме мне помогли с дропом денег между всеми нападавшими.
    Хотелось бы сделать босса, который делил бы мани за урон мобу.

    Например: tester ударил моба 1 раз, нанёс ему мало дамага. После убийства ему дадут 4$. А tester2 ударил моба 100 раз и добил моба. Ему дадут 1996$. А максимальное количество денег, которое может дропнуться с моба - 2000$.
    Как это реализовать? Пожалуйста, помогите :good:
     
  2. Хостинг MineCraft
    <
  3. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Для босса нужно держать в памяти табличку (карту; объект, реализующий интерфейс Map; фактически это на практике HashMap) вида Map<UUID, Double damagers = new HashMap<>();. Если сервер версии 1.6 или более ранней, либо оффлайн режим, либо ещё какие-то причины, можно в качестве ключей использовать не UUID-ы игроков, а их имена. А можно и вообще объекты Player (только обрабатывай корректно их выход из игры).

    Если одновременно на сервере может быть более одного босса, то нужно сделать такую карту на каждого босса. Например, Map<Entity, Map<UUID, Double>> bosses = new HashMap<>();. Да, карта карт.

    Я что-то уже это, туплю, может быть damage не double, тогда просто поставить нужный тип дамага.
    При ударе по мобу игроком:
    Map<UUID, Double damagers = bosses.get(bossEntity);
    UUID uuid = player.getUniqueId();
    double damageSumm = damagers.get(uuid) + e.getDamage();
    damagers.set(uuid, damageSumm);

    Ну а при смерти моба взять посчитать сумму всех дамагов, ну и по пропорции всем раздать, карту почистить за собой.
     
  4. Автор темы
    morozzzlolka

    morozzzlolka Участник Пользователь

    Баллы:
    31
    Огромное спасибо![DOUBLEPOST=1460546595,1460546473][/DOUBLEPOST]
    Можно, пожалуйста подробнее, как это сделать? (кроме чистки карты)
     
  5. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Что именно подробнее? Пытайся сделать сам.
    Даже так: пойди по простому пути и храни объекты Player в качестве ключей к тому, кто бил босса.
    Храни всех боссов в Map<Entity, Map<Player, Double>> bosses.
    При создании босса создай новую карту со списком тех, кто его будет бить: bosses.put(bossEntity, new HashMap<Player, Double>());
    Когда его бьют (в эвенте дамага энтити) гляди, кто кого бьёт и как сильно, и по коду выше добавляй дамагу в карту.
    Когда босс помер, посчитай общий дамаг, зная общее число монет(?) подели их на всех пропорционально. Если player.isOnline() == false, не отдавай ему денег, ну типа вышел -- сам виноват.
    Там же не забудь удалить карту для мёртвого моба: bosses.remove(bossEntity).

    Всё.
     
  6. Автор темы
    morozzzlolka

    morozzzlolka Участник Пользователь

    Баллы:
    31
    спасибо!
     
  7. CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    А вы перфекционист. Порой ваши сообщения удивляют =)
     

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