-
Публикаций
1576 -
Зарегистрирован
-
Посещение
-
Победитель дней
63 -
Отзывы
0%
Тип контента
Профили
Форумы
Загрузки
Магазин
Инструкции
Весь контент Gaikotsu
-
добавить листенер предметов, проверяющий внешний вид предмета и давать доп скилл. можно так же доработаьт на эту тему существующий листенер, выдающий/забирающий скиллы от одетых предметов. там делов то всего ничего. вот к примеру у меня в ItemSkillsListener добавлен следующий код, правда я не к самому измененному виду привязал скиллы, а к камням, которыми этот вид был выдан когда одеваем предмет (onEquip) if (item.isAppearanced() && item.getAppearanceStoneId() > 0) { AppearanceStone stone = AppearanceStoneHolder.getInstance().getStone(item.getAppearanceStoneId()); if (stone != null && !stone.getSkills().isEmpty()) for (Skill skill : stone.getSkills()) { if (skill.isPassive()) { if (player.isInOlympiadMode() && !skill.isAllowedOnOlympiad()) continue; if (player.getChaosFestivalMode() > 1 && !skill.isAllowedOnChaosFestival()) continue; if (player.getPvPEventMode() > 0 && !skill.isAllowedOnPvPEvent()) continue; } if (player.getSkillLevel(skill.getId()) < skill.getLevel()) { player.addSkill(skill, false); needUpdate = true; } } } когда снимаем предмет (onUnequip) if (item.isAppearanced() && item.getAppearanceStoneId() > 0) { AppearanceStone stone = AppearanceStoneHolder.getInstance().getStone(item.getAppearanceStoneId()); if (stone != null && !stone.getSkills().isEmpty()) for (Skill skill : stone.getSkills()) player.removeSkill(skill, false); needUpdate = true; } и как пример описание как раз камня дающего вид темного ассасина <stone id="24134" type="ARMOR" mode="FIXED" skill="26130,1"> <!-- Appearance Stone: Dark Assassin Suit / Камень Обработки Костюма Темного Ассасина --> <item id="24133" /> <!-- Dark Assassin Suit / Костюм Темного Ассасина --> </stone> как видно - при испоьзовании дается скилл 26130 так же по аналогии делаются бонусы от сетов измененного вида (есть таких 4 штуки), но в этом случае надо дорабатывать листенер сетов, или новый добавлять.
-
абнормал эффект от какого скилла к сожалению не помню
-
Дописать нужное в пакет CharacterCreate
- 2 ответа
-
- 1
-
-
-
не stackOrder, а stackType
-
Руки не отвалятся каждому рб расписывать дроп через скрипты? Плюс тебе придется воспроизвести все расчеты кторые происходят при оыбчном определении дропа, к примеру учет разницы в уровнях и т.д.
-
Судя по названиям классов с cond-ами ничего подходящего готового нет. Допиши по аналогии с имеющимися - это не сложно. Пример такого cond-а для овера. package l2p.gameserver.stats.conditions; import l2p.gameserver.model.Player; import l2p.gameserver.stats.Env; public class ConditionPlayerClassId extends Condition { private final int[] _classIds; public ConditionPlayerClassId(String[] ids) { _classIds = new int[ids.length]; for (int i = 0; i < ids.length; i++) _classIds[i] = Integer.parseInt(ids[i]); } @Override protected boolean testImpl(Env env) { if (!env.character.isPlayer()) return false; int playerClassId = ((Player) env.character).getActiveClassId(); for (int id : _classIds) if (playerClassId == id) return true; return false; } }
-
только правкой ядра, классов где идут расчеты дропа.
-
если про cond-ишны, то таких скиллов наваломвот к примеру
-
cond-ишны в статах выдаваемых скиллом в предмете спасут гиганта мысли, отца русской демократии. а если надо вобще разные скиллы в зависимости от профы - хэндлер на итем повесить и делать там что душе угодно.
-
значит не записываются корректно в бд данные по добавленым так вещам.
-
для игрока такое не предусмотрено в обычных ситуациях. ну а в случае олли используется специальный пакет.
-
для того чтобы у нпс полоску показывало, надо поправить на стороне клиента в npcgrp.dat параметр на эту тему (один из последних параметров в строке с описанием свойств нужного нпс)
-
как вариант в NpcInfo шлется некорректный модификатор для скорости атаки - предполагаю он применяется к анимации атаки, чтобы она успевала визуально воспроизводиться до конца. у меня вот с таким расчетом вроде проблем не было, даже если суммон под гм хастом, т.е. со скоростью атаки в 1500. public final double getAttackSpeedMultiplier() { return 1.1 * getPAtkSpd() / getTemplate().getBasePAtkSpd(); }
-
проверка некорректна if (enchantScroll.getGrade().extOrdinal() <= item.getGrade().extOrdinal()) { player.sendPacket(EnchantResult.CANCEL); player.sendPacket(SystemMsg.DOES_NOT_FIT_STRENGTHENING_CONDITIONS_OF_THE_SCROLL); player.sendActionFailed(); return; } надо проверять на "не равно" - !=
-
значит список хранится в хэшмапе скорее всего выше уже писал - найди где хранится и смени на связный хэшмап
-
player.sendPacket(new InventoryUpdate().addModifiedItem(item)); и все такое
- 2 ответа
-
- 1
-
-
если речь про телепорты в коммююнити, то нефиг юзать HashMap для их хранения. если нужна мапа с сохранением очередности, то LinkedHashMap в помощь.
-
вот для кого блин сделаны на форуме тэги спойлера?
-
под ЛВ подразумевается лостворлд? если да то смотри класс GameObjectTasks в ядре, есть там задача DeleteTask - она подйдет как раз для этого
-
ты бы хоть тему внимательней читал что ли? на кой автору темы твой интерлюд дался, если ему нужен был сервер хф
-
и чем тебе поможет "колдовство" в ядре, если ты в серверных пакетах не сможешь отослать клиенту long-значение по банальнейшей причине - в интерлюде поле с количеством в пакетах имеет тип int32 и нет, смена его типа на стороне сервера не поможет - в итоге у тебя клиенту придут искаженные данные, т.к. все поля в пакете, что идут после количества, изменят свою позицию.
-
А что, в этом вашем акисе нет таких банальных вещей как листенеры на изменение уровня?