Перейти к содержанию
Авторизация  
Anderson

Юзабельность Итемов И Их Обработка

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

Здравствуйте. Меня интересует как реализовать:

1) Что бы при нажатии на итем, определенный скил повышал свой лвл (куда пихать и как обработку нажатия на итем)

2)Нужно сделать итем при нажатии на который рандомно падает награда (тут более рандомер наград, если их 50 например, и шанс выпадения некоторых 0,1%)

В ядре немного туговат, в процессе познавания. А рандомер, может у кто-то сталкивался, а то не очень понимаю как сделать на много наград.

Мне нужны только советы(ссылки на методы и классы), а не сделать за меня.

Спасибо за внимание.

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


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

Спасибо, но можно по информативней, я с ядром и работаю.

- extractable itemns.csv что это?

- и где в ядре, мне лень искать, я подозреваю что в пакетах, но лучше наверняка. (+ рандомер идея нужна)

П.С. Нашел пакет UseItem, но в нем не вижу обработки ни свитков точки, ни ничего, где эта обработка, не хочу гавнокодить.

Изменено пользователем Anderson

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


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

на ссчет ядра не подскажу.посмтри свитки и делай по их примеру(ретуре)

в фрозенах так называется файл,в котором вписывается итемы,при нажатии на которые - появляются итемы с определенным шансом

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


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

Обработка кликов на итемы идет в itemhandlers для точки к примеру itemhandlers.EnchantScrolls я вам уже говорил об этом.

По поводу наград как уже сказали про extractable_items.csv это в ДП

Изменено пользователем LeKToR

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


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

Обработка кликов на итемы идет в itemhandlers для точки к примеру itemhandlers.EnchantScrolls я вам уже говорил об этом.

По поводу наград как уже сказали про extractable_items.csv это в ДП

extractable_items.csv - такого нет, переискал все, в дб есть etcitems последнии строчки которой намекают на что-то такое. Но я бы в ядро впилил.

В хендлерах нашел. (кроме хендлера изучения скилов(книгами)). Как я понимаю я могу впихнуть сюда 2 моих файлика, сделать implements от IItemHandler, и впихнуть юз итем, и свою обработку, правильно?

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


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

extractable_items.csv - такого нет, переискал все, в дб есть etcitems последнии строчки которой намекают на что-то такое. Но я бы в ядро впилил.

В хендлерах нашел. (кроме хендлера изучения скилов(книгами)). Как я понимаю я могу впихнуть сюда 2 моих файлика, сделать implements от IItemHandler, и впихнуть юз итем, и свою обработку, правильно?

думаю да)

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

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


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

Ну доделаю отпишу. Остался 1 вопрос открытым: рандомер предметов. Яркий пример: в новых версиях игры, сундуки на реконструкцию адена. Кто может сказать откуда вырезать можено?

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


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

в ядре coomons.util.rnd.Rnd;

имплементируется getRnd(count) либо getRnd(min,max)

 

как то так.

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


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

Ну это понятно. Но как сделать если например с сундука рандомом с определенным шансом должен упасть 1 с 60 итемов, по очереди рандомить каждый, не выход.

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


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

смотри в сторону евента Coffer of Shadows. Конкретно в классе Coffer. Там идет обработка сначала шанса определенного класса итема, а потом уже обработка шанса итема внутри выбранного класса. Если я правильно понял.

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


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

Можно сделать карту(Map, HashMap итд)

Объявить её как-то так

static final HashMap<Integer, Integer[]> _rewards = new HashMap();

далее его нужно заполнить

static
{
_rewards.put(id, new Integer[]{ItemId, count, chance}
}

Ну и цикл для пербора будет выглядеть так

for (Integer[] reward : _rewards.values())
{
if (Rnd.get(10000) < reward[2])
{
L2Item item = ItemTable.getInstance().getTemplate(reward[0]);
if (item != null)
{
player.addItem("", reward[0], reward[1], this, true);
}
}
}

PS: вместо карты можно использовать любой другой вид коллекции.

Кстати в silentium тоже нету extractable_items.csv там все реализовано через скилы.

Вот пример

итем

<item id="6500" type="EtcItem" name="Big Blue Treasure Chest">
 <set name="default_action" val="capsule"/>
 <set name="material" val="paper"/>
 <set name="weight" val="100"/>
 <set name="price" val="435"/>
 <set name="is_stackable" val="true"/>
 <set name="is_oly_restricted" val="true"/>
 <set name="handler" val="ItemSkills"/>
 <set name="item_skill" val="2201-3"/>
</item>

скилл

<skill id="2201" levels="3" name="Item - Blue Treasure Box">
 <table name="#extractableItems">
  6908,24,39.5;7609,26,36.1144
  6904,1,5.028;6908,28,17.957;6909,8,16.76;7609,30,16.76
  6904,1,5.22;6908,28,18.6428;6909,8,17.3999;7609,30,17.4
 </table>
 <set name="capsuled_items_skill" val="#extractableItems"/>
 <set name="target" val="TARGET_SELF"/>
 <set name="skillType" val="EXTRACTABLE_FISH"/>
 <set name="operateType" val="OP_ACTIVE"/>
 <cond msgId="129">
  <and>
   <player invSize="10"/>
   <player weight="80"/>
  </and>
 </cond>
</skill>

Изменено пользователем LeKToR

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


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

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

И спелбуки как реализованы? Такой же обработкой и ф-й сетскил?

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


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

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

И спелбуки как реализованы? Такой же обработкой и ф-й сетскил?

ВЫ ЧТО ПРЕДЛАГАЕТЕ?Оо

Смотри, чтобы выпадала рандомно 1 из 60 шмоток нужно поставить шанс на каждую шмотку (для именно 60) 1.6% и в конце написать [-1.0.4] без скобок и вот:

Тебе с шансом 96% будет выпадать 1 из 60 шмоток, остальные 4 будет пусто. Только что потестил...

Если тебе надо чтобы что то выпадало чаще просто меняй %, но чтоб в сумме было 100, если меньше то дописывай в конце [-1.0.4] вместо 4 оставшийся процент.

Если вам сложно посчитать, дайте мне кол-во шмоток и проценты какие хотите (допустим 60% что вообще что то выпадет, 40 что пусто и т.д.)

Изменено пользователем asky

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


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

ВЫ ЧТО ПРЕДЛАГАЕТЕ?Оо

Смотри, чтобы выпадала рандомно 1 из 60 шмоток нужно поставить шанс на каждую шмотку (для именно 60) 1.6% и в конце написать [-1.0.4] без скобок и вот:

Тебе с шансом 96% будет выпадать 1 из 60 шмоток, остальные 4 будет пусто. Только что потестил...

Если тебе надо чтобы что то выпадало чаще просто меняй %, но чтоб в сумме было 100, если меньше то дописывай в конце [-1.0.4] вместо 4 оставшийся процент.

Если вам сложно посчитать, дайте мне кол-во шмоток и проценты какие хотите (допустим 60% что вообще что то выпадет, 40 что пусто и т.д.)

Это что за бред чтобы давало только 1-ну вещь достаточно просто прервать цикл для этого достаточно добавить команду break после добавления итема в интвентарь.

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


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

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

И спелбуки как реализованы? Такой же обработкой и ф-й сетскил?

Не совсем понял что вы имеете ввиду насчёт реализации spellbook так-как работаю только с interlude.

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


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

Это что за бред чтобы давало только 1-ну вещь достаточно просто прервать цикл для этого достаточно добавить команду break после добавления итема в интвентарь.

Какой break? Я не понимаю!

Ему и так, и так придется забивать все итемы в csv, дак вот и пусть нужный шанс ставит выпадания, при сумме шансов всех итемов в 100, 1 итем будет выпадать 100%, 2 выпасть не могут (я не знаю как где, но в interlude так)

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


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

Какой break? Я не понимаю!

Ему и так, и так придется забивать все итемы в csv, дак вот и пусть нужный шанс ставит выпадания, при сумме шансов всех итемов в 100, 1 итем будет выпадать 100%, 2 выпасть не могут (я не знаю как где, но в interlude так)

 

У него нет csv, он же сказал.

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


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

У него нет csv, он же сказал.

База данных значит или xml, не будут же разрабы пихать это в ядро?

Изменено пользователем asky

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


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

База данных значит или xml, не будут же разрабы пихать это в ядро?

Не надо давать советы если вы даже не понимаете о чем речь. Речь идет о том как написать такой механизм если автор его не найдет и ответ он уже получил. В базе данных этого у него тоже нет скорее всего xml как в случае с silentium. Хоть-бы удосужились прочесть посты в теме.

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


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

почему же) в хендлерах, по case выбирается id открываемого обьекта, и по useID открывается, а дальше уже шансы и перечисления.

 

case 30276: // Soulshot Pack (R-Grade)
  use30276(player, ctrl);
  break;

 

private void use30276(Player player, boolean ctrl)
{ // Soulshot Pack (R-Grade)
 Functions.addItem(player, 177754, 5000); // где player - кто получает, 17754 - id предмета, 5000 - шанс 
}

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


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

Не надо давать советы если вы даже не понимаете о чем речь. Речь идет о том как написать такой механизм если автор его не найдет и ответ он уже получил. В базе данных этого у него тоже нет скорее всего xml как в случае с silentium. Хоть-бы удосужились прочесть посты в теме.

Я прочитал все посты и конечно возможно чего то не понял, но если не так как я написал то автор изобретает велосипед.

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


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

почему же) в хендлерах, по case выбирается id открываемого обьекта, и по useID открывается, а дальше уже шансы и перечисления.

 

case 30276: // Soulshot Pack (R-Grade)
use30276(player, ctrl);
break;

 

private void use30276(Player player, boolean ctrl)
{ // Soulshot Pack (R-Grade)
Functions.addItem(player, 177754, 5000); // где player - кто получает, 17754 - id предмета, 5000 - шанс
}

Это не то.

 

Я прочитал все посты и конечно возможно чего то не понял, но если не так как я написал то автор изобретает велосипед.

Насчет велосипеда вы правы.
  • Upvote 1

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


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

Прочитал. А куда пихать если не в ядра. Сделать через скил смысл. Лучше добавлю новый хендлер и туда впихну все что мне нужно, обработки нажатий всех итемов которые я захочу.

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

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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