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

Принятый ответ

У предметов (почему-то) тоже есть игрок-владелец. Только он всегда равен нейтрально-пассивному (по умолчанию).
Делая фиксацию владельца предмета, можно использовать этого владельца.
При получении предмета, если его владелец = нейтрально-пассивный
то - установить предмету владельца (игрок владеющий юнитом, который подобрал предмет
он же - юнит-инициатор
иначе - выбросить предмет...
Здесь можно по разному обыграть выбор предмета...
  1. Самый простой - просто дропнуть его, он вывалится из героя который его подобрал, но это позволит герою как бы подтаскивать предмет под себя, отходить, и снова подтаскивать под себя...
  1. Получше - при подборе смотреть где лежит предмет, и перемещать его не просто через "выбросить предмет", а через "переместить предмет в точку" (аналогично с координатами). Таким образом предмет будет падать там же, откуда был подобран.
  1. Хороший и практичный - при попытке юнитом отдать целевой приказ "smart" на предмет, которым он не владеет (при этом не нейтральный, как описано выше), то ... здесь так же пара вариантов: первый - отдать приказ "stop", юнит просто остановится; второй - отдать приказ "move" на предмет, юнит пойдёт куда был клик, выглядеть будет так как будто он пошёл подбирать предмет и тупо ничего не сделал.
При этом ещё можно вывести текст-таг с текстом "не твой" в месте предмета, который будет жить 1 сек и 0.8 сек исчезновения, но не будет никуда улетать (если много кликать - не будет спама летящим текстом). Скрыть его для всех игроков и показать только тому, кто владеет этим юнитом.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
20
8 лет назад
0
когда герой берет предмет - записать его на игрока owner of player в переменную .выкл триггер
Когда берет другой игрок и не равно тот на которого записано- выкинуть предмет
0
7
8 лет назад
0
можно прикрепить номер игрока к предмету с помощью jass-функции (в GUI такого нет, хотя можно использовать custom script):
native SetItemUserData takes item whichItem, integer data returns nothing
и когда нужно доставать номер с помощью
native GetItemUserData takes item whichItem returns integer

Либо можно создать хэш таблицу и хранить номер по хэндлу предмета. Весь перечень функций можно найти в редакторе триггеров в категория "Хэш-таблица". Про сами таблицы можно почитать тут
6
26
8 лет назад
Отредактирован Extremator
6
У предметов (почему-то) тоже есть игрок-владелец. Только он всегда равен нейтрально-пассивному (по умолчанию).
Делая фиксацию владельца предмета, можно использовать этого владельца.
При получении предмета, если его владелец = нейтрально-пассивный
то - установить предмету владельца (игрок владеющий юнитом, который подобрал предмет
он же - юнит-инициатор
иначе - выбросить предмет...
Здесь можно по разному обыграть выбор предмета...
  1. Самый простой - просто дропнуть его, он вывалится из героя который его подобрал, но это позволит герою как бы подтаскивать предмет под себя, отходить, и снова подтаскивать под себя...
  1. Получше - при подборе смотреть где лежит предмет, и перемещать его не просто через "выбросить предмет", а через "переместить предмет в точку" (аналогично с координатами). Таким образом предмет будет падать там же, откуда был подобран.
  1. Хороший и практичный - при попытке юнитом отдать целевой приказ "smart" на предмет, которым он не владеет (при этом не нейтральный, как описано выше), то ... здесь так же пара вариантов: первый - отдать приказ "stop", юнит просто остановится; второй - отдать приказ "move" на предмет, юнит пойдёт куда был клик, выглядеть будет так как будто он пошёл подбирать предмет и тупо ничего не сделал.
При этом ещё можно вывести текст-таг с текстом "не твой" в месте предмета, который будет жить 1 сек и 0.8 сек исчезновения, но не будет никуда улетать (если много кликать - не будет спама летящим текстом). Скрыть его для всех игроков и показать только тому, кто владеет этим юнитом.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.