скил "поддержка мафр" L2J mobius

cool

Путник
Пользователь
Сообщения
26
Розыгрыши
0
Репутация
0
Реакции
0
Баллы
0
Кто-то реализовал на мобиусе повышение шанса заточки скил? для камней или свитков, для рубашки мафр...поделитесь плз примером.
 
Тебе нужно приспособить только этот участок кода.
Код:
// Бонус от всего остального (Рубашка Мафр и т.п.)
    if (item.getCrystalType() != Grade.NONE)
        chance += player.calcStat(Stats.ENCHANT_BONUS, 0);

Идем в класс: EnchantScroll.java
ищем там метод
Код:
/**
     * @param player
     * @param enchantItem
     * @param supportItem
     * @return the total chance for success rate of this scroll
     */
    public EnchantResultType calculateSuccess(L2PcInstance player, L2ItemInstance enchantItem, EnchantSupportItem supportItem)
    {
        if (!isValid(enchantItem, supportItem))
        {
            return EnchantResultType.ERROR;
        }
      
        final double chance = getChance(player, enchantItem);
        if (chance == -1)
        {
            return EnchantResultType.ERROR;
        }
      
        final double bonusRate = getBonusRate();
        final double supportBonusRate = (supportItem != null) ? supportItem.getBonusRate() : 0;
        final double finalChance = Math.min(chance + bonusRate + supportBonusRate, 100);
      
        final double random = 100 * Rnd.nextDouble();
        final boolean success = random < finalChance;
      
        if (player.isDebug())
        {
            final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup(enchantItem.getItem(), _scrollGroupId);
            final StatsSet set = new StatsSet();
            if (isBlessed())
            {
                set.set("isBlessed", isBlessed());
            }
            if (isSafe())
            {
                set.set("isSafe", isSafe());
            }
            if (isGiant())
            {
                set.set("isGiant", isGiant());
            }
            if (isHair())
            {
                set.set("isHair", isHair());
            }
            set.set("chance", Util.formatDouble(chance, "#.##"));
            if (bonusRate > 0)
            {
                set.set("bonusRate", Util.formatDouble(bonusRate, "#.##"));
            }
            if (supportBonusRate > 0)
            {
                set.set("supportBonusRate", Util.formatDouble(supportBonusRate, "#.##"));
            }
            set.set("finalChance", Util.formatDouble(finalChance, "#.##"));
            set.set("random", Util.formatDouble(random, "#.##"));
            set.set("success", success);
            set.set("item group", group.getName());
            set.set("scroll group", _scrollGroupId);
            Debug.sendItemDebug(player, enchantItem, set);
        }
        return success ? EnchantResultType.SUCCESS : EnchantResultType.FAILURE;
    }

и модифицируем его так:
Код:
/**
     * @param player
     * @param enchantItem
     * @param supportItem
     * @return the total chance for success rate of this scroll
     */
    public EnchantResultType calculateSuccess(L2PcInstance player, L2ItemInstance enchantItem, EnchantSupportItem supportItem)
    {
        if (!isValid(enchantItem, supportItem))
        {
            return EnchantResultType.ERROR;
        }
      
        final double chance = getChance(player, enchantItem);
        if (chance == -1)
        {
            return EnchantResultType.ERROR;
        }
      
        final double bonusRate = getBonusRate();
        final double skillBonusRate = enchantItem.getItem().getCrystalType() != CrystalType.NONE ? player.getStat().calcStat(Stats.ENCHANT_BONUS, 0) : 0;
        final double supportBonusRate = (supportItem != null) ? supportItem.getBonusRate() : 0;
        final double finalChance = Math.min(chance + skillBonusRate + bonusRate + supportBonusRate, 100);
      
        final double random = 100 * Rnd.nextDouble();
        final boolean success = random < finalChance;
      
        if (player.isDebug())
        {
            final EnchantItemGroup group = EnchantItemGroupsData.getInstance().getItemGroup(enchantItem.getItem(), _scrollGroupId);
            final StatsSet set = new StatsSet();
            if (isBlessed())
            {
                set.set("isBlessed", isBlessed());
            }
            if (isSafe())
            {
                set.set("isSafe", isSafe());
            }
            if (isGiant())
            {
                set.set("isGiant", isGiant());
            }
            if (isHair())
            {
                set.set("isHair", isHair());
            }
            set.set("chance", Util.formatDouble(chance, "#.##"));
            if (bonusRate > 0)
            {
                set.set("bonusRate", Util.formatDouble(bonusRate, "#.##"));
            }
            if(skillBonusRate > 0)
            {
                set.set("skillBonusRate", Util.formatDouble(skillBonusRate, "#.##"));
            }
            if (supportBonusRate > 0)
            {
                set.set("supportBonusRate", Util.formatDouble(supportBonusRate, "#.##"));
            }
            set.set("finalChance", Util.formatDouble(finalChance, "#.##"));
            set.set("random", Util.formatDouble(random, "#.##"));
            set.set("success", success);
            set.set("item group", group.getName());
            set.set("scroll group", _scrollGroupId);
            Debug.sendItemDebug(player, enchantItem, set);
        }
        return success ? EnchantResultType.SUCCESS : EnchantResultType.FAILURE;
    }

И не забудьте добавить импорт на CrystalType и Stats.
П.С. Делалось все в блокноте, так что звеняйте если с 1 раза не зайдет.
 
Последнее редактирование модератором:
Реакции: cool
Код:
if (item.getCrystalType() != Grade.NONE)
        {
            chance += Player.calcStat(Stats.ENCHANT_BONUS, 0);
        }
эклипс ругается на метод при компиле RequestEnchantItem
Код:
error: cannot find symbol
    [javac]         if (item.getCrystalType() != Grade.NONE)
    [javac]                ^
    [javac]   symbol:   method getCrystalType()
я фик его знает
может не туда вотнул кусок вообще
// template for support item, if exist
EnchantSupportItem supportTemplate = null;
if (support != null)
{
if (support.getObjectId() != _supportId)
{
activeChar.removeRequest(request.getClass());
return;
}
supportTemplate = EnchantItemData.getInstance().getSupportItem(support);
}

if (item.getCrystalType() != Grade.NONE)
{
chance += Player.calcStat(Stats.ENCHANT_BONUS, 0);
}
 
я дал уже отредактированный метод во 2 теге КОД.

я там добавил:
Код:
final double skillBonusRate = enchantItem.getItem().getCrystalType() != CrystalType.NONE ? player.getStat().calcStat(Stats.ENCHANT_BONUS, 0) : 0;
а дальше смотрите действия с переменной skillBonusRate
 
гс пишет nullExeptionPoints в файле со скилом. я в Stats.java ENCHANT_BONUS("enchantBonus"), так написал. Или ENCHANT_BONUS("enchantBonus, 0"), надо?
 
Error loading file D:\Games\SERVER\Erthea\L2J_Mobius\dist\game\data\stats\skills\09300-09399.xml
java.util.NoSuchElementException: Unknown name 'enchantBonus' for enum Stats
at com.l2jmobius.gameserver.model.stats.Stats.valueOfXml(Stats.java:246)
at com.l2jmobius.gameserver.engines.DocumentBase.attachFunc(DocumentBase.java:263)
at com.l2jmobius.gameserver.engines.DocumentBase.parseTemplate(DocumentBase.java:255)
at com.l2jmobius.gameserver.engines.DocumentBase.parseTemplate(DocumentBase.java:196)
at com.l2jmobius.gameserver.engines.skills.DocumentSkill.parseSkill(DocumentSkill.java:565)
at com.l2jmobius.gameserver.engines.skills.DocumentSkill.parseDocument(DocumentSkill.java:123)
at com.l2jmobius.gameserver.engines.DocumentBase.parse(DocumentBase.java:167)
at com.l2jmobius.gameserver.engines.DocumentEngine.loadSkills(DocumentEngine.java:89)
at com.l2jmobius.gameserver.engines.DocumentEngine.loadAllSkills(DocumentEngine.java:98)
at com.l2jmobius.gameserver.datatables.SkillData.load(SkillData.java:60)
at com.l2jmobius.gameserver.datatables.SkillData.<init>(SkillData.java:47)
at com.l2jmobius.gameserver.datatables.SkillData$SingletonHolder.<clinit>(SkillData.java:182)
at com.l2jmobius.gameserver.datatables.SkillData.getInstance(SkillData.java:177)
at com.l2jmobius.gameserver.GameServer.<init>(GameServer.java:215)
at com.l2jmobius.gameserver.GameServer.main(GameServer.java:490)
сейчас такая ошибка, это с ENCHANT_BONUS("enchantBonus, 0"),
 
мая 21, 2016 12:49:26 AM com.l2jmobius.gameserver.engines.DocumentBase parse
SEVERE: Error loading file D:\Games\SERVER\Erthea\L2J_Mobius\dist\game\data\stats\skills\09300-09399.xml
java.lang.NullPointerException
at com.l2jmobius.gameserver.engines.DocumentBase.attachFunc(DocumentBase.java:271)
at com.l2jmobius.gameserver.engines.DocumentBase.parseTemplate(DocumentBase.java:255)
at com.l2jmobius.gameserver.engines.DocumentBase.parseTemplate(DocumentBase.java:196)
at com.l2jmobius.gameserver.engines.skills.DocumentSkill.parseSkill(DocumentSkill.java:565)
at com.l2jmobius.gameserver.engines.skills.DocumentSkill.parseDocument(DocumentSkill.java:123)
at com.l2jmobius.gameserver.engines.DocumentBase.parse(DocumentBase.java:167)
at com.l2jmobius.gameserver.engines.DocumentEngine.loadSkills(DocumentEngine.java:89)
at com.l2jmobius.gameserver.engines.DocumentEngine.loadAllSkills(DocumentEngine.java:98)
at com.l2jmobius.gameserver.datatables.SkillData.load(SkillData.java:60)
at com.l2jmobius.gameserver.datatables.SkillData.<init>(SkillData.java:47)
at com.l2jmobius.gameserver.datatables.SkillData$SingletonHolder.<clinit>(SkillData.java:182)
at com.l2jmobius.gameserver.datatables.SkillData.getInstance(SkillData.java:177)
at com.l2jmobius.gameserver.GameServer.<init>(GameServer.java:215)
at com.l2jmobius.gameserver.GameServer.main(GameServer.java:490)
предыдущая. с ENCHANT_BONUS("enchantBonus"),
 
как вы в умении задаете параметр? у вас там походу value вместо val
 
изменил скил
<skill id="9369" levels="2" name="Power of Maphr">
<!-- AUTO GENERATED SKILL -->
<!-- Enchant success rate + 10%. Not for No-grade items. -->
<table name="#skillBonusRate">1.1 1.15</table>
<set name="icon" val="icon.pi_shirt_of_wolf_2nd_earth" />
<set name="operateType" val="PASSIVE" />
<set name="targetType" val="SELF" />
<for>

<effect name="Buff">
<add stat="skillBonusRate" val="#skillBonusRate" />
</effect>
</for>
</skill>
грузит без ошибок гс. похоже теперь надо писать 10 15 в таблице

как вы в умении задаете параметр? у вас там походу value вместо val
да, проглядел. теперь без эффекта говорит стата Attaching stat to a non-effect template!!!
<skill id="9369" levels="2" name="Power of Maphr">
<!-- AUTO GENERATED SKILL -->
<!-- Enchant success rate + 10%. Not for No-grade items. -->
<table name="#skillBonusRate">1.1 1.15</table>
<set name="icon" val="icon.pi_shirt_of_wolf_2nd_earth" />
<set name="operateType" val="PASSIVE" />
<set name="targetType" val="SELF" />
<for>
<mul stat="skillBonusRate" val="#skillBonusRate"/>
</for>
</skill>

не уверен что правильно работает <table name="#skillBonusRate">10 15</table> вещи на 4 фейлятся. шанс в EnchantItemGroups.xml 66,67 для 4 заточки, плюс 15 к шансу, неужели 3 раза подряд попадаю в оставшиеся 18,33 фейла?
 
Последнее редактирование:
<add stat="skillBonusRate" val="#skillBonusRate"/> так нужно, и включи дебаг и посмотри, какие шансы.
 
дык епт тип скилла то добавь, типа
Код:
<set name="skillType" val="BUFF" />
и используй само обявление статы в скилле так к примеру
Код:
<add order="0x40" stat="enchantBonus" val="10" />

пример того, как у меня описано это
Код:
    <!-- Power of Maphr / Поддержка Мафр -->
    <skill id="9369" levels="2" name="Power of Maphr">
        <!--
            Шанс успешной модификации +10%. Не применяется к предметам без ранга.
            Шанс успешной модификации +15%. Не применяется к предметам без ранга.
        -->
        <table name="#rate">10 15</table>
        <set name="icon" val="icon.pi_shirt_of_wolf_2nd_earth" />
        <set name="target" val="SELF" />
        <set name="skillType" val="BUFF" />
        <set name="operateType" val="OP_PASSIVE" />
        <set name="nextAction" val="NONE" />
        <set name="magicLevel" val="85" />
        <for>
            <add order="0x40" stat="enchantBonus" val="#rate" />
        </for>
    </skill>
 
Последнее редактирование:
<add stat="skillBonusRate" val="#skillBonusRate"/> так нужно, и включи дебаг и посмотри, какие шансы.
мм а как дебаг включить? в конфинах все debug что нашел включил, но в гс не пишет про шансы. Пакеты показывает, штмл и все такое. В админке есть конфиг, там самому выставлять можно стоун энчант, спойл, дроп...это может?

<add order="0x40" stat="enchantBonus" val="10" />
с order пробовал, ругается на "0x40", так же mul "0x30". Сделал
Код:
<for>
            <effect name="Buff">
                <add stat="skillBonusRate" val="#skillBonusRate" />
            </effect>
        </for>
и добавил <set name="skillType" val="BUFF" /> в гс пока все тихо
 
Последнее редактирование модератором:
Ордера в лыже уже нету. А дебаг врубается командой //debug и вроде персонаж должен быть в таргете.