UltrusAra 0 Опубликовано 11 мая, 2014 Добрый день, и снова я обращаюсь к наимудрейшим). В общем нам нужно сделать, так, чтобы например, если у игрока STR = 20, то у него выучивался скилл1, если у него STR = 22, то учился скилл2, если у него STR = 25, то учился скилл3, и тд. Вопрос, вообще как такое примерно можно сделать? Подскажите, кто знает плиз. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AlexD 36 Опубликовано 11 мая, 2014 Если у вас в шмотках бонусы STR и прочее, то при надевании вещи делать проверку, + 1 проверку при вставке тату. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 11 мая, 2014 (изменено) Если у вас в шмотках бонусы STR и прочее, то при надевании вещи делать проверку, + 1 проверку при вставке тату. Не в шмотках, мне нужно общее изменение STR, то есть например у персонажа 40 стр стандартно есть да, то если у него 40 дать скилл 1, если у него 43 то дать скилл2 вот как. Хотя в шмотках тоже идея интересная. Как такую проверку написать которая в шкоте бы проверяла?? Изменено 11 мая, 2014 пользователем UltrusAra Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 11 мая, 2014 (изменено) Вот например проверка чара по HP <player hp="30"/> То есть если вставлять в скилл, скилл будет работать только при 30% хп, как сделать похожую хрень но только чтоб проверял не хп, а скажем STR или силу атаки? Изменено 11 мая, 2014 пользователем UltrusAra Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AlexD 36 Опубликовано 11 мая, 2014 Нужны исходники и знания явы. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 11 мая, 2014 все есть и исходники и знание явы, но такой момент для нас загадка) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 11 мая, 2014 На ум приходит только пул, с проверкой STR через какое-то время. void run() { int str = player.getStr(); switch(str) { case : player.addSkill(); } } Через жопеньку. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 11 мая, 2014 (изменено) На ум приходит только пул, с проверкой STR через какое-то время. void run() { int str = player.getStr(); switch(str) { case : player.addSkill(); } } Через жопеньку. Это будет занимать время много и у чара обновлять не так будет все равно. Но спасибо за мысль. Вообще это для чего собственно, мы хотим на хф, сделать так как было на интерлюде. Ну то бишь откат скиллов зависящий от каста и хаста. Вдруг это можно сделать проще, просто мы не догоняем? Может где-то 1 строчку дописать и всего делов то. Изменено 11 мая, 2014 пользователем UltrusAra Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 11 мая, 2014 Это будет занимать время много и у чара обновлять не так будет все равно. Но спасибо за мысль. Вообще это для чего собственно, мы хотим на хф, сделать так как было на интерлюде. Ну то бишь откат скиллов зависящий от каста и хаста. Вдруг это можно сделать проще, просто мы не догоняем? Может где-то 1 строчку дописать и всего делов то. Возможно для скилов реализован параметр статического реюза Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 11 мая, 2014 (изменено) Возможно для скилов реализован параметр статического реюза Статический это наоборот не зависящий от бафов на откат, то есть откатываться будет так как ты укажешь в скилле, например: <set name="staticReuse" val="true"/> и скилл будет откатываться всегда столько сколько ты напишешь. А если "фолс", то будет откатываться с зависимостью от бафов на откат. А вот как сделать так, чтобы зависел от хаста и каста бы)) Мы наверно первые, кому такая бредовая идея в голову пришла XD, но без нее хрен баланс получится. Изменено 11 мая, 2014 пользователем UltrusAra Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AlexD 36 Опубликовано 11 мая, 2014 что бы понять где точно делать проверки, нужно знать когда будут и как прибавляться статы. Это будут вещи, скилы, тату ? зоны... ? Лучше конечно делать через скилы, по аналогии как вы указали: <player hp="30"/> только переписать под статы, отследив в IDE где начало... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 11 мая, 2014 (изменено) что бы понять где точно делать проверки, нужно знать когда будут и как прибавляться статы. Это будут вещи, скилы, тату ? зоны... ? Лучше конечно делать через скилы, по аналогии как вы указали: <player hp="30"/> только переписать под статы, отследив в IDE где начало... Ну вообще, в идеале скиллы, даже если вещи, то все равно к вещам же привязываются те же скиллы,, так что и вещи и скиллы подходят). Например человек имеет скилл, который будет с такой проверкой, как дать скилл и прочее мы умеем. А вот где искать IDE в каком из файлов примерно, а то все исходы перерыли блин нифига не можем найти. Подскажите, если вам не трудно. То есть где эти проверки задаются? Изменено 11 мая, 2014 пользователем UltrusAra Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 11 мая, 2014 смотря когда требуется вобще проверять возможность выдачи этих самых скиллов. если скажем при снятии/одевании вещей - добавляем слушатель equip/unequip на это дело. если надо чтобы какой-то конкретный бафф можно было наложить на цель с определенной базовой статой со значением не ниже заданного - condition в этот бафф. ну и конечно самый извратный способ - при входе в игру игрока, у него активизируется таск с заданным периодом и при каждом срабатывании делает все нужные проверки. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 11 мая, 2014 смотря когда требуется вобще проверять возможность выдачи этих самых скиллов. если скажем при снятии/одевании вещей - добавляем слушатель equip/unequip на это дело. если надо чтобы какой-то конкретный бафф можно было наложить на цель с определенной базовой статой со значением не ниже заданного - condition в этот бафф. ну и конечно самый извратный способ - при входе в игру игрока, у него активизируется таск с заданным периодом и при каждом срабатывании делает все нужные проверки. Я про таск и говорил. Притом не на входе, а на restore-методе у игрока, с условием существования указанного игрока, допустим использовав getAllPlayersForIterate() 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 11 мая, 2014 а зачем приплетать тут еще и getAllPlayersForIterate()? перебирать каждый раз для данной проверки всех игроков в онлайне? ну нафиг. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 11 мая, 2014 Я имел ввиду, чтобы игрок к которому применяется, входил в этот масссив. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 12 мая, 2014 Увы, при снятии или одевании не нужно, нам нужно чтоб проверка была постоянно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 12 мая, 2014 Тогда только таском. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 12 мая, 2014 А как же на интерлюде это сделано? Что откат зависит? Не знаете? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
YuraAAA1 13 Опубликовано 12 мая, 2014 А как же на интерлюде это сделано? Что откат зависит? Не знаете? Проверять что-то с периодом времени - кошмар. Для Acis'а можно попробовать сделать так: Ищем класс ChatStat. Находим метод: /** * @return the CON of the L2Character (base+modifier). */ public final int getCON() { if (_activeChar == null) { return 1; } return (int) calcStat(Stats.STAT_CON, _activeChar.getTemplate().getBaseCON(), null, null); } Модифицируем: /** * @return the CON of the L2Character (base+modifier). */ public final int getCON() { if (_activeChar == null) { return 1; } int currentConStat = (int) calcStat(Stats.STAT_CON, _activeChar.getTemplate().getBaseCON(), null, null); switch (currentConStat) { case 40: _activeChar.addSkill(SkillTable.getInstance().getInfo(SKILL_ID, SKILL_LEVEL)); break; } return currentConStat; } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 12 мая, 2014 Проверять что-то с периодом времени - кошмар. Для Acis'а можно попробовать сделать так: Ищем класс ChatStat. Находим метод: /** * @return the CON of the L2Character (base+modifier). */ public final int getCON() { if (_activeChar == null) { return 1; } return (int) calcStat(Stats.STAT_CON, _activeChar.getTemplate().getBaseCON(), null, null); } Модифицируем: /** * @return the CON of the L2Character (base+modifier). */ public final int getCON() { if (_activeChar == null) { return 1; } int currentConStat = (int) calcStat(Stats.STAT_CON, _activeChar.getTemplate().getBaseCON(), null, null); switch (currentConStat) { case 40: _activeChar.addSkill(SkillTable.getInstance().getInfo(SKILL_ID, SKILL_LEVEL)); break; } return currentConStat; } Но это ведь единоразовый запрос стата, разве нет? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
YuraAAA1 13 Опубликовано 12 мая, 2014 Но это ведь единоразовый запрос стата, разве нет? Я не уверен. Поставьте туда логгер и посмотрите когда вызывается Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 12 мая, 2014 По логике, вызывается каждый раз при отсылке UserInfo, возвращая значение поля. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
UltrusAra 0 Опубликовано 12 мая, 2014 (изменено) YuraAAA1, ваще написанно красиво, плюсанул, сегодня попробуем), только как сделать множественное "если" в правильном порядке. Если 40, если 41, если 42 и тд? Изменено 12 мая, 2014 пользователем UltrusAra Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
YuraAAA1 13 Опубликовано 13 мая, 2014 YuraAAA1, ваще написанно красиво, плюсанул, сегодня попробуем), только как сделать множественное "если" в правильном порядке. Если 40, если 41, если 42 и тд? Почитайте про switch-case. Вот так: switch (currentConStat) { case 40: _activeChar.addSkill(SkillTable.getInstance().getInfo(SKILL_ID, SKILL_LEVEL)); break; case 41: //Что-нибудь делаем break; case 42: //Ещё что-нибудь break; } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты