Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Ограничения
#1
Привестую пользователи Zone-Game подскажите пожалуйста как сделать ограничения на Урон 5к (исходники имеються)
Ответ
#2
Литион Написал:Привестую пользователи Zone-Game подскажите пожалуйста как сделать ограничения на Урон 5к (исходники имеються)

правим одно из двух:
- метод рассчета дамага (обычно это Formulas)
- метод получения давмага (оьбычно это addDamageHate)
Выбирайте любой путь.
Ответ
#3
Метод reduceCurrentHp - примерно так, в L2Character, но там можно сделать не Damage, а именно ограничить отнимаемое Hp, в L2Phoenix там так же некоторые расчеты идут.
Ответ
#4
Azagthtot Написал:правим одно из двух:
- метод рассчета дамага (обычно это Formulas)
- метод получения давмага (оьбычно это addDamageHate)
Выбирайте любой путь.
Извините а вы не подскажите где это искать в исходниках (addDamageHate)
Зарание спасибо
Ответ
#5
Сборка какая? Если L2j подобные, то в Formulas.java у вас написано примерно вот это:

Код:
public static final double calcPhysDam(L2Character attacker, L2Character target, L2Skill skill, byte shld, boolean crit, boolean dual, boolean ss)
    {
        final boolean isPvP = (attacker instanceof L2Playable) && (target instanceof L2Playable);
        double damage = attacker.getPAtk(target);
        double defence = target.getPDef(attacker);
        damage+=calcValakasAttribute(attacker, target, skill);
        if (attacker instanceof L2Npc)
        {
            if(((L2Npc)attacker)._soulshotcharged)
            {
                ss = true;
            }
            else
                ss = false;
            ((L2Npc)attacker)._soulshotcharged = false;
        }
        // Def bonusses in PvP fight
        if(isPvP)
        {
            if(skill == null)
                defence *= target.calcStat(Stats.PVP_PHYSICAL_DEF, 1, null, null);
            else
                defence *= target.calcStat(Stats.PVP_PHYS_SKILL_DEF, 1, null, null);    
        }

        switch (shld)
        {
            case SHIELD_DEFENSE_SUCCEED:
                if (!Config.ALT_GAME_SHIELD_BLOCKS)
                    defence += target.getShldDef();
                break;
            case SHIELD_DEFENSE_PERFECT_BLOCK: // perfect block
                return 1.;
        }
        
        if (ss) damage *= 2;
        if (skill != null)
        {
            double skillpower = skill.getPower(attacker, isPvP);
            float ssboost = skill.getSSBoost();
            if (ssboost <= 0)
                damage += skillpower;
            else if (ssboost > 0)
            {
                if (ss)
                {
                    skillpower *= ssboost;
                    damage += skillpower;
                }
                else
                    damage += skillpower;
            }
        }

        // defence modifier depending of the attacker weapon
        L2Weapon weapon = attacker.getActiveWeaponItem();
        Stats stat = null;
        if (weapon != null && !attacker.isTransformed())
        {
            switch (weapon.getItemType())
            {
                case BOW:
                    stat = Stats.BOW_WPN_VULN;
                    break;
                case CROSSBOW:
                    stat = Stats.CROSSBOW_WPN_VULN;
                    break;
                case BLUNT:
                    stat = Stats.BLUNT_WPN_VULN;
                    break;
                case DAGGER:
                    stat = Stats.DAGGER_WPN_VULN;
                    break;
                case DUAL:
                    stat = Stats.DUAL_WPN_VULN;
                    break;
                case DUALFIST:
                    stat = Stats.DUALFIST_WPN_VULN;
                    break;
                case ETC:
                    stat = Stats.ETC_WPN_VULN;
                    break;
                case FIST:
                    stat = Stats.FIST_WPN_VULN;
                    break;
                case POLE:
                    stat = Stats.POLE_WPN_VULN;
                    break;
                case SWORD:
                    stat = Stats.SWORD_WPN_VULN;
                    break;
                case BIGSWORD:
                    stat = Stats.BIGSWORD_WPN_VULN;
                    break;
                case BIGBLUNT:
                    stat = Stats.BIGBLUNT_WPN_VULN;
                    break;
                case DUAL_DAGGER:
                    stat = Stats.DUALDAGGER_WPN_VULN;
                    break;
                case RAPIER:
                    stat = Stats.RAPIER_WPN_VULN;
                    break;
                case ANCIENT_SWORD:
                    stat = Stats.ANCIENT_WPN_VULN;
                    break;
                case PET:
                    stat = Stats.PET_WPN_VULN;
                    break;
            }
        }
        
        if (Config.ENABLE_CLASS_BALANCE_SYSTEM)
        {
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.BOW && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.BOW_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.BOW_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.BOW_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.CROSSBOW && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.CROSSBOW_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.CROSSBOW_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.CROSSBOW_VS_ROBE;
                }
            }
                
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.BLUNT && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.BLUNT_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.BLUNT_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.BLUNT_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.BIGBLUNT && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.BIGBLUNT_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.BIGBLUNT_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.BIGBLUNT_VS_ROBE;
                }
            }
        
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.DAGGER && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.DAGGER_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.DAGGER_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.DAGGER_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.DUAL_DAGGER && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.DUAL_DAGGER_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.DUAL_DAGGER_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.DUAL_DAGGER_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.DUAL && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.DUAL_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.DUAL_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.DUAL_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.FIST && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.FIST_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.FIST_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.FIST_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.DUALFIST && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.FIST_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.FIST_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.FIST_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.ETC && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.ETC_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.ETC_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.ETC_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.POLE && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.POLE_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.POLE_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.POLE_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.SWORD && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.SWORD_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.SWORD_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.SWORD_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.BIGSWORD && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.BIGSWORD_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.BIGSWORD_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.BIGSWORD_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.ANCIENT_SWORD && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.ANCIENT_SWORD_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.ANCIENT_SWORD_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.ANCIENT_SWORD_VS_ROBE;
                }
            }
            
            if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.RAPIER && skill != null)
            {
                L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
                if (armor != null)
                {
                    if (((L2PcInstance) target).isWearingHeavyArmor())
                        damage /= Config.RAPIER_VS_HEAVY;
                    if (((L2PcInstance) target).isWearingLightArmor())
                        damage /= Config.RAPIER_VS_LIGHT;
                    if (((L2PcInstance) target).isWearingMagicArmor())
                        damage /= Config.RAPIER_VS_ROBE;
                }
            }
        }
        
        /*if (shld && !Config.ALT_GAME_SHIELD_BLOCKS)
        {
            defence += target.getShldDef();
        }*/
        //if (!(attacker instanceof L2RaidBossInstance) &&
        /*
        if ((attacker instanceof L2NpcInstance || attacker instanceof L2SiegeGuardInstance))
        {
            if (attacker instanceof L2RaidBossInstance) damage *= 1; // was 10 changed for temp fix
            //            else
            //            damage *= 2;
            //            if (attacker instanceof L2NpcInstance || attacker instanceof L2SiegeGuardInstance){
            //damage = damage * attacker.getSTR() * attacker.getAccuracy() * 0.05 / defence;
            //            damage = damage * attacker.getSTR()* (attacker.getSTR() + attacker.getLevel()) * 0.025 / defence;
            //            damage += _rnd.nextDouble() * damage / 10 ;
        }
        */
        //        else {
        //if (skill == null)
        
        if (crit)
        {
            //Finally retail like formula
            damage = 2 * attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill) * target.calcStat(Stats.CRIT_VULN, target.getTemplate().baseCritVuln, target, null) * (70 * damage / defence);
            //Crit dmg add is almost useless in normal hits...
            damage += (attacker.calcStat(Stats.CRITICAL_DAMAGE_ADD, 0, target, skill) * 70 / defence);
        }
        else
            damage = 70 * damage / defence;
        
        // In C5 summons make 10 % less dmg in PvP.
        if (attacker instanceof L2Summon && target instanceof L2PcInstance)
            damage *= 0.9;

        if (stat != null)
        {
            // get the vulnerability due to skills (buffs, passives, toggles, etc)
            damage = target.calcStat(stat, damage, target, null);
            if (target instanceof L2Npc)
            {
                // get the natural vulnerability for the template
                damage *= ((L2Npc) target).getTemplate().getVulnerability(stat);
            }
        }

        damage += Rnd.nextDouble() * damage / 10;
        //        damage += _rnd.nextDouble()* attacker.getRandomDamage(target);
        //        }
        if (shld > 0 && Config.ALT_GAME_SHIELD_BLOCKS)
        {
            damage -= target.getShldDef();
            if (damage < 0) damage = 0;
        }
        
        if (target instanceof L2Npc)
        {
            switch (((L2Npc) target).getTemplate().getRace())
            {
                case BEAST:
                    damage *= attacker.getPAtkMonsters(target);
                    break;
                case ANIMAL:
                    damage *= attacker.getPAtkAnimals(target);
                    break;
                case PLANT:
                    damage *= attacker.getPAtkPlants(target);
                    break;
                case DRAGON:
                    damage *= attacker.getPAtkDragons(target);
                    break;
                case BUG:
                    damage *= attacker.getPAtkInsects(target);
                    break;
                case GIANT:
                    damage *= attacker.getPAtkGiants(target);
                    break;
                case MAGICCREATURE:
                    damage *= attacker.getPAtkMCreatures(target);
                    break;
                default:
                    // nothing
                    break;
            }
        }
        
        if (damage > 0 && damage < 1)
        {
            damage = 1;
        }
        else if (damage < 0)
        {
            damage = 0;
        }
                       [COLOR="Red"] else if (damage > 5000)
        {
            damage = 5000;
        }
        [/COLOR]
        
        // Dmg bonusses in PvP fight
        if(isPvP)
        {
            if(skill == null)
                damage *= attacker.calcStat(Stats.PVP_PHYSICAL_DMG, 1, null, null);
            else
                damage *= attacker.calcStat(Stats.PVP_PHYS_SKILL_DMG, 1, null, null);    
        }
        
        damage *= calcElemental(attacker, target, skill);
        if (target instanceof L2Attackable && !target.isRaid() && !target.isRaidMinion()
                && target.getLevel() >= Config.MIN_NPC_LVL_DMG_PENALTY && attacker.getActingPlayer() != null
                && (target.getLevel() - attacker.getActingPlayer().getLevel()) >= 2)
            damage *= DAMAGE_REDUCTION;
            
        // Physical skill dmg boost
        if(skill != null)
            damage *= attacker.calcStat(Stats.PHYSICAL_SKILL_POWER, 1, null, null);
        
        return damage;
    }
То, что надо добавить, я выделил красным.
Ответ
#6
Сделал как вы сказали но при етом сборка не хочет компилироваться

[CODE]/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2emu.gameserver.skills;

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.l2emu.Config;
import com.l2emu.gameserver.SevenSigns;
import com.l2emu.gameserver.SevenSignsFestival;
import com.l2emu.gameserver.instancemanager.CastleManager;
import com.l2emu.gameserver.instancemanager.ClanHallManager;
import com.l2emu.gameserver.instancemanager.FortManager;
import com.l2emu.gameserver.instancemanager.SiegeManager;
import com.l2emu.gameserver.model.L2ItemInstance;
import com.l2emu.gameserver.model.L2SiegeClan;
import com.l2emu.gameserver.model.L2Skill;
import com.l2emu.gameserver.model.actor.L2Character;
import com.l2emu.gameserver.model.actor.L2Npc;
import com.l2emu.gameserver.model.actor.L2Playable;
import com.l2emu.gameserver.model.actor.L2Summon;
import com.l2emu.gameserver.model.actor.instance.L2CubicInstance;
import com.l2emu.gameserver.model.actor.instance.L2DoorInstance;
import com.l2emu.gameserver.model.actor.instance.L2PcInstance;
import com.l2emu.gameserver.model.actor.instance.L2PetInstance;
import com.l2emu.gameserver.model.base.PlayerState;
import com.l2emu.gameserver.model.entity.Castle;
import com.l2emu.gameserver.model.entity.ClanHall;
import com.l2emu.gameserver.model.entity.Fort;
import com.l2emu.gameserver.model.entity.Siege;
import com.l2emu.gameserver.model.itemcontainer.Inventory;
import com.l2emu.gameserver.network.SystemMessageId;
import com.l2emu.gameserver.network.serverpackets.SystemMessage;
import com.l2emu.gameserver.skills.conditions.ConditionPlayerState;
import com.l2emu.gameserver.skills.conditions.ConditionUsingItemType;
import com.l2emu.gameserver.skills.funcs.Func;
import com.l2emu.gameserver.templates.chars.L2PcTemplate;
import com.l2emu.gameserver.templates.effects.EffectTemplate;
import com.l2emu.gameserver.templates.item.L2Armor;
import com.l2emu.gameserver.templates.item.L2Item;
import com.l2emu.gameserver.templates.item.L2Weapon;
import com.l2emu.gameserver.templates.item.L2WeaponType;
import com.l2emu.gameserver.templates.skills.L2SkillType;
import com.l2emu.gameserver.util.Util;
import com.l2emu.util.Rnd;
import com.l2emu.gameserver.model.actor.L2Attackable;
import com.l2emu.gameserver.model.actor.L2Trap;
import com.l2emu.gameserver.model.actor.instance.L2CustomBWBaseInstance;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

/**
* Global calculations, can be modified by server admins
*/
public final class Formulas
{
/** Regen Task period */
private final static Log _log = LogFactory.getLog(Formulas.class);
private static final int HP_REGENERATE_PERIOD = 3000; // 3 secs
public static final byte SHIELD_DEFENSE_FAILED = 0; // no shield defense
public static final byte SHIELD_DEFENSE_SUCCEED = 1; // normal shield
// defense
public static final byte SHIELD_DEFENSE_PERFECT_BLOCK = 2; // perfect block
public static final byte SKILL_REFLECT_FAILED = 0; // no reflect
public static final byte SKILL_REFLECT_SUCCEED = 1; // normal reflect, some
// damage reflected some other not
public static final byte SKILL_REFLECT_VENGEANCE = 2; // 100% of the damage
// affect both
private static final byte MELEE_ATTACK_RANGE = 40;
public static final int MAX_STAT_VALUE = 100;
public static final double[] WITbonus = new double[MAX_STAT_VALUE];
public static final double[] MENbonus = new double[MAX_STAT_VALUE];
public static final double[] INTbonus = new double[MAX_STAT_VALUE];
public static final double[] STRbonus = new double[MAX_STAT_VALUE];
public static final double[] DEXbonus = new double[MAX_STAT_VALUE];
public static final double[] CONbonus = new double[MAX_STAT_VALUE];

static
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setIgnoringComments(true);
File file = new File("data/attribute_bonus.xml");
Document doc = null;

try
{
doc = factory.newDocumentBuilder().parse(file);
}
catch(SAXException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
catch(ParserConfigurationException e)
{
e.printStackTrace();
}

int i;
double val;

if(doc != null)
for(Node z = doc.getFirstChild(); z != null; z = z.getNextSibling())
for(Node n = z.getFirstChild(); n != null; n = n.getNextSibling())
{
if(n.getNodeName().equalsIgnoreCase("str_bonus"))
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
{
String node = d.getNodeName();
if(node.equalsIgnoreCase("set"))
{
i = Integer.valueOf(d.getAttributes().getNamedItem("attribute").getNodeValue());
val = Integer.valueOf(d.getAttributes().getNamedItem("val").getNodeValue());
STRbonus[i] = (100 + val) / 100;
}
}
if(n.getNodeName().equalsIgnoreCase("int_bonus"))
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
{
String node = d.getNodeName();
if(node.equalsIgnoreCase("set"))
{
i = Integer.valueOf(d.getAttributes().getNamedItem("attribute").getNodeValue());
val = Integer.valueOf(d.getAttributes().getNamedItem("val").getNodeValue());
INTbonus[i] = (100 + val) / 100;
}
}
if(n.getNodeName().equalsIgnoreCase("con_bonus"))
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
{
String node = d.getNodeName();
if(node.equalsIgnoreCase("set"))
{
i = Integer.valueOf(d.getAttributes().getNamedItem("attribute").getNodeValue());
val = Integer.valueOf(d.getAttributes().getNamedItem("val").getNodeValue());
CONbonus[i] = (100 + val) / 100;
}
}
if(n.getNodeName().equalsIgnoreCase("men_bonus"))
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
{
String node = d.getNodeName();
if(node.equalsIgnoreCase("set"))
{
i = Integer.valueOf(d.getAttributes().getNamedItem("attribute").getNodeValue());
val = Integer.valueOf(d.getAttributes().getNamedItem("val").getNodeValue());
MENbonus[i] = (100 + val) / 100;
}
}
if(n.getNodeName().equalsIgnoreCase("dex_bonus"))
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
{
String node = d.getNodeName();
if(node.equalsIgnoreCase("set"))
{
i = Integer.valueOf(d.getAttributes().getNamedItem("attribute").getNodeValue());
val = Integer.valueOf(d.getAttributes().getNamedItem("val").getNodeValue());
DEXbonus[i] = (100 + val) / 100;
}
}
if(n.getNodeName().equalsIgnoreCase("wit_bonus"))
for(Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
{
String node = d.getNodeName();
if(node.equalsIgnoreCase("set"))
{
i = Integer.valueOf(d.getAttributes().getNamedItem("attribute").getNodeValue());
val = Integer.valueOf(d.getAttributes().getNamedItem("val").getNodeValue());
WITbonus[i] = (100 + val) / 100;
}
}
}
}

static class FuncPAtkMod extends Func
{
static final FuncPAtkMod _fpa_instance = new FuncPAtkMod();

static Func getInstance()
{
return _fpa_instance;
}

private FuncPAtkMod()
{
super(Stats.POWER_ATTACK, 0x30, null);
}

@Override
public void calc(Env env)
{
env.value *= STRbonus[env.player.getSTR()] * env.player.getLevelMod();
}
}

static class FuncMAtkMod extends Func
{
static final FuncMAtkMod _fma_instance = new FuncMAtkMod();

static Func getInstance()
{
return _fma_instance;
}

private FuncMAtkMod()
{
super(Stats.MAGIC_ATTACK, 0x20, null);
}

@Override
public void calc(Env env)
{
double intb = INTbonus[env.player.getINT()];
double lvlb = env.player.getLevelMod();
env.value *= (lvlb * lvlb) * (intb * intb);
}
}

static class FuncMDefMod extends Func
{
static final FuncMDefMod _fmm_instance = new FuncMDefMod();

static Func getInstance()
{
return _fmm_instance;
}

private FuncMDefMod()
{
super(Stats.MAGIC_DEFENCE, 0x20, null);
}

@Override
public void calc(Env env)
{
if (env.player instanceof L2PcInstance)
{
L2PcInstance p = (L2PcInstance) env.player;
if (p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LFINGER) != null)
env.value -= 5;
if (p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RFINGER) != null)
env.value -= 5;
if (p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEAR) != null)
env.value -= 9;
if (p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_REAR) != null)
env.value -= 9;
if (p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_NECK) != null)
env.value -= 13;
}
env.value *= MENbonus[env.player.getMEN()] * env.player.getLevelMod();
}
}

static class FuncPDefMod extends Func
{
static final FuncPDefMod _fmm_instance = new FuncPDefMod();

static Func getInstance()
{
return _fmm_instance;
}

private FuncPDefMod()
{
super(Stats.POWER_DEFENCE, 0x20, null);
}

@Override
public void calc(Env env)
{
if (env.player instanceof L2PcInstance)
{
L2PcInstance p = (L2PcInstance) env.player;
boolean hasMagePDef = (p.getClassId().isMage() || p.getClassId().getId() == 0x31); // orc mystics are a special case
if (p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_HEAD) != null)
env.value -= 12;
L2ItemInstance chest = p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST);
if (chest != null)
env.value -= hasMagePDef ? 15 : 31;
if (p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEGS) != null || (chest != null && chest.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR))
env.value -= hasMagePDef ? 8 : 18;
if (p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_GLOVES) != null)
env.value -= 8;
if (p.getInventory().getPaperdollItem(Inventory.PAPERDOLL_FEET) != null)
env.value -= 7;
}
env.value *= env.player.getLevelMod();
}
}

static class FuncGatesPDefMod extends Func
{
static final FuncGatesPDefMod _fmm_instance = new FuncGatesPDefMod();

static Func getInstance()
{
return _fmm_instance;
}

private FuncGatesPDefMod()
{
super(Stats.POWER_DEFENCE, 0x20, null);
}

@Override
public void calc(Env env)
{
if (SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_STRIFE) == SevenSigns.CABAL_DAWN)
env.value *= Config.ALT_SIEGE_DAWN_GATES_PDEF_MULT;
else if (SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_STRIFE) == SevenSigns.CABAL_DUSK)
env.value *= Config.ALT_SIEGE_DUSK_GATES_PDEF_MULT;
}
}

static class FuncGatesMDefMod extends Func
{
static final FuncGatesMDefMod _fmm_instance = new FuncGatesMDefMod();

static Func getInstance()
{
return _fmm_instance;
}

private FuncGatesMDefMod()
{
super(Stats.MAGIC_DEFENCE, 0x20, null);
}

@Override
public void calc(Env env)
{
if (SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_STRIFE) == SevenSigns.CABAL_DAWN)
env.value *= Config.ALT_SIEGE_DAWN_GATES_MDEF_MULT;
else if (SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_STRIFE) == SevenSigns.CABAL_DUSK)
env.value *= Config.ALT_SIEGE_DUSK_GATES_MDEF_MULT;
}
}

static class FuncBowAtkRange extends Func
{
private static final FuncBowAtkRange _fbar_instance = new FuncBowAtkRange();

static Func getInstance()
{
return _fbar_instance;
}

private FuncBowAtkRange()
{
super(Stats.POWER_ATTACK_RANGE, 0x10, null);
setCondition(new ConditionUsingItemType(L2WeaponType.BOW.mask()));
}

@Override
public void calc(Env env)
{
if (!cond.test(env))
return;
// default is 40 and with bow should be 500
env.value += 460;
}
}

static class FuncCrossBowAtkRange extends Func
{
private static final FuncCrossBowAtkRange _fcb_instance = new FuncCrossBowAtkRange();

static Func getInstance()
{
return _fcb_instance;
}

private FuncCrossBowAtkRange()
{
super(Stats.POWER_ATTACK_RANGE, 0x10, null);
setCondition(new ConditionUsingItemType(L2WeaponType.CROSSBOW.mask()));
}

@Override
public void calc(Env env)
{
if (!cond.test(env))
return;
// default is 40 and with crossbow should be 400
env.value += 360;
}
}

static class FuncAtkAccuracy extends Func
{
static final FuncAtkAccuracy _faa_instance = new FuncAtkAccuracy();

static Func getInstance()
{
return _faa_instance;
}

private FuncAtkAccuracy()
{
super(Stats.ACCURACY_COMBAT, 0x10, null);
}

@Override
public void calc(Env env)
{
if (env.player instanceof L2PetInstance)
return;
L2Character p = env.player;
// [Square(DEX)]*6 + lvl + weapon hitbonus;
env.value += Math.sqrt(p.getDEX()) * 6;
env.value += p.getLevel();
if (p.getLevel() > 77)
env.value += (p.getLevel() - 77);
if (p.getLevel() > 69)
env.value += (p.getLevel() - 69);
if (p instanceof L2Summon)
env.value += (p.getLevel() < 60) ? 4 : 5;
}
}

static class FuncAtkEvasion extends Func
{
static final FuncAtkEvasion _fae_instance = new FuncAtkEvasion();

static Func getInstance()
{
return _fae_instance;
}

private FuncAtkEvasion()
{
super(Stats.EVASION_RATE, 0x10, null);
}

@Override
public void calc(Env env)
{
L2Character p = env.player;
// [Square(DEX)]*6 + lvl;
env.value += Math.sqrt(p.getDEX()) * 6;
env.value += p.getLevel();
if (p.getLevel() > 77)
env.value += (p.getLevel() - 77);
if (p.getLevel() > 69)
env.value += (p.getLevel() - 69);
}
}

static class FuncAtkCritical extends Func
{
static final FuncAtkCritical _fac_instance = new FuncAtkCritical();

static Func getInstance()
{
return _fac_instance;
}

private FuncAtkCritical()
{
super(Stats.CRITICAL_RATE, 0x09, null);
}

@Override
public void calc(Env env)
{
L2Character p = env.player;
if (p instanceof L2Summon)
env.value = 40;
else if (p instanceof L2PcInstance && p.getActiveWeaponInstance() == null)
env.value = 40;
else
{
env.value *= DEXbonus[p.getDEX()];
env.value *= 10;
}
env.baseValue = env.value;
}
}

static class FuncMAtkCritical extends Func
{
static final FuncMAtkCritical _fac_instance = new FuncMAtkCritical();

static Func getInstance()
{
return _fac_instance;
}

private FuncMAtkCritical()
{
super(Stats.MCRITICAL_RATE, 0x30, null);
}

@Override
public void calc(Env env)
{
L2Character p = env.player;
if (p instanceof L2Summon)
env.value = 8; // TODO: needs retail value
else if (p instanceof L2PcInstance && p.getActiveWeaponInstance() != null)
env.value *= WITbonus[p.getWIT()];
}
}

static class FuncMoveSpeed extends Func
{
static final FuncMoveSpeed _fms_instance = new FuncMoveSpeed();

static Func getInstance()
{
return _fms_instance;
}

private FuncMoveSpeed()
{
super(Stats.RUN_SPEED, 0x30, null);
}

@Override
public void calc(Env env)
{
L2PcInstance p = (L2PcInstance) env.player;
env.value *= DEXbonus[p.getDEX()];
}
}

static class FuncPAtkSpeed extends Func
{
static final FuncPAtkSpeed _fas_instance = new FuncPAtkSpeed();

static Func getInstance()
{
return _fas_instance;
}

private FuncPAtkSpeed()
{
super(Stats.POWER_ATTACK_SPEED, 0x20, null);
}

@Override
public void calc(Env env)
{
L2PcInstance p = (L2PcInstance) env.player;
if (p.isMageClass())
env.value *= DEXbonus[p.getDEX()] - 0.20;
else
env.value *= DEXbonus[p.getDEX()];
}
}

static class FuncMAtkSpeed extends Func
{
static final FuncMAtkSpeed _fas_instance = new FuncMAtkSpeed();

static Func getInstance()
{
return _fas_instance;
}

private FuncMAtkSpeed()
{
super(Stats.MAGIC_ATTACK_SPEED, 0x20, null);
}

@Override
public void calc(Env env)
{
L2PcInstance p = (L2PcInstance) env.player;
env.value *= WITbonus[p.getWIT()];
}
}

static class FuncHennaSTR extends Func
{
static final FuncHennaSTR _fh_instance = new FuncHennaSTR();

static Func getInstance()
{
return _fh_instance;
}

private FuncHennaSTR()
{
super(Stats.STAT_STR, 0x10, null);
}

@Override
public void calc(Env env)
{
L2PcInstance pc = (L2PcInstance) env.player;
if (pc != null)
env.value += pc.getHennaStatSTR();
}
}

static class FuncHennaDEX extends Func
{
static final FuncHennaDEX _fh_instance = new FuncHennaDEX();

static Func getInstance()
{
return _fh_instance;
}

private FuncHennaDEX()
{
super(Stats.STAT_DEX, 0x10, null);
}

@Override
public void calc(Env env)
{
L2PcInstance pc = (L2PcInstance) env.player;
if (pc != null)
env.value += pc.getHennaStatDEX();
}
}

static class FuncHennaINT extends Func
{
static final FuncHennaINT _fh_instance = new FuncHennaINT();

static Func getInstance()
{
return _fh_instance;
}

private FuncHennaINT()
{
super(Stats.STAT_INT, 0x10, null);
}

@Override
public void calc(Env env)
{
L2PcInstance pc = (L2PcInstance) env.player;
if (pc != null)
env.value += pc.getHennaStatINT();
}
}

static class FuncHennaMEN extends Func
{
static final FuncHennaMEN _fh_instance = new FuncHennaMEN();

static Func getInstance()
{
return _fh_instance;
}

private FuncHennaMEN()
{
super(Stats.STAT_MEN, 0x10, null);
}

@Override
public void calc(Env env)
{
L2PcInstance pc = (L2PcInstance) env.player;
if (pc != null)
env.value += pc.getHennaStatMEN();
}
}

static class FuncHennaCON extends Func
{
static final FuncHennaCON _fh_instance = new FuncHennaCON();

static Func getInstance()
{
return _fh_instance;
}

private FuncHennaCON()
{
super(Stats.STAT_CON, 0x10, null);
}

@Override
public void calc(Env env)
{
L2PcInstance pc = (L2PcInstance) env.player;
if (pc != null)
env.value += pc.getHennaStatCON();
}
}

static class FuncHennaWIT extends Func
{
static final FuncHennaWIT _fh_instance = new FuncHennaWIT();

static Func getInstance()
{
return _fh_instance;
}

private FuncHennaWIT()
{
super(Stats.STAT_WIT, 0x10, null);
}

@Override
public void calc(Env env)
{
L2PcInstance pc = (L2PcInstance) env.player;
if (pc != null)
env.value += pc.getHennaStatWIT();
}
}

static class FuncMaxHpAdd extends Func
{
static final FuncMaxHpAdd _fmha_instance = new FuncMaxHpAdd();

static Func getInstance()
{
return _fmha_instance;
}

private FuncMaxHpAdd()
{
super(Stats.MAX_HP, 0x10, null);
}

@Override
public void calc(Env env)
{
L2PcTemplate t = (L2PcTemplate) env.player.getTemplate();
int lvl = env.player.getLevel() - t.classBaseLevel;
double hpmod = t.lvlHpMod * lvl;
double hpmax = (t.lvlHpAdd + hpmod) * lvl;
double hpmin = (t.lvlHpAdd * lvl) + hpmod;
env.value += (hpmax + hpmin) / 2;
}
}

static class FuncMaxHpMul extends Func
{
static final FuncMaxHpMul _fmhm_instance = new FuncMaxHpMul();

static Func getInstance()
{
return _fmhm_instance;
}

private FuncMaxHpMul()
{
super(Stats.MAX_HP, 0x20, null);
}

@Override
public void calc(Env env)
{
L2PcInstance p = (L2PcInstance) env.player;
env.value *= CONbonus[p.getCON()];
}
}

static class FuncMaxCpAdd extends Func
{
static final FuncMaxCpAdd _fmca_instance = new FuncMaxCpAdd();

static Func getInstance()
{
return _fmca_instance;
}

private FuncMaxCpAdd()
{
super(Stats.MAX_CP, 0x10, null);
}

@Override
public void calc(Env env)
{
L2PcTemplate t = (L2PcTemplate) env.player.getTemplate();
int lvl = env.player.getLevel() - t.classBaseLevel;
double cpmod = t.lvlCpMod * lvl;
double cpmax = (t.lvlCpAdd + cpmod) * lvl;
double cpmin = (t.lvlCpAdd * lvl) + cpmod;
env.value += (cpmax + cpmin) / 2;
}
}

static class FuncMaxCpMul extends Func
{
static final FuncMaxCpMul _fmcm_instance = new FuncMaxCpMul();

static Func getInstance()
{
return _fmcm_instance;
}

private FuncMaxCpMul()
{
super(Stats.MAX_CP, 0x20, null);
}

@Override
public void calc(Env env)
{
L2PcInstance p = (L2PcInstance) env.player;
env.value *= CONbonus[p.getCON()];
}
}

static class FuncMaxMpAdd extends Func
{
static final FuncMaxMpAdd _fmma_instance = new FuncMaxMpAdd();

static Func getInstance()
{
return _fmma_instance;
}

private FuncMaxMpAdd()
{
super(Stats.MAX_MP, 0x10, null);
}

@Override
public void calc(Env env)
{
L2PcTemplate t = (L2PcTemplate) env.player.getTemplate();
int lvl = env.player.getLevel() - t.classBaseLevel;
double mpmod = t.lvlMpMod * lvl;
double mpmax = (t.lvlMpAdd + mpmod) * lvl;
double mpmin = (t.lvlMpAdd * lvl) + mpmod;
env.value += (mpmax + mpmin) / 2;
}
}

static class FuncMaxMpMul extends Func
{
static final FuncMaxMpMul _fmmm_instance = new FuncMaxMpMul();

static Func getInstance()
{
return _fmmm_instance;
}

private FuncMaxMpMul()
{
super(Stats.MAX_MP, 0x20, null);
}

@Override
public void calc(Env env)
{
L2PcInstance p = (L2PcInstance) env.player;
env.value *= MENbonus[p.getMEN()];
}
}

/**
* Return the period between 2 regenerations task (3s for L2Character, 5 min for L2DoorInstance).<BR>
* <BR>
*/
public static int getRegeneratePeriod(L2Character cha)
{
if (cha instanceof L2DoorInstance)
return HP_REGENERATE_PERIOD * 100; // 5 mins
return HP_REGENERATE_PERIOD; // 3s
}

/**
* Return the standard NPC Calculator set containing ACCURACY_COMBAT and EVASION_RATE.<BR>
* <BR>
* <B><U> Concept</U> :</B><BR>
* <BR>
* A calculator is created to manage and dynamically calculate the effect of a character property (ex : MAX_HP, REGENERATE_HP_RATE...). In fact, each calculator is a table of Func object in which each Func represents a mathematic function : <BR>
* <BR>
* FuncAtkAccuracy -> Math.sqrt(_player.getDEX())*6+_player.getLevel()<BR>
* <BR>
* To reduce cache memory use, L2NPCInstances who don't have skills share the same Calculator set called <B>NPC_STD_CALCULATOR</B>.<BR>
* <BR>
*/
public static Calculator[] getStdNPCCalculators()
{
Calculator[] std = new Calculator[Stats.NUM_STATS];
// Add the FuncAtkAccuracy to the Standard Calculator of ACCURACY_COMBAT
std[Stats.ACCURACY_COMBAT.ordinal()] = new Calculator();
std[Stats.ACCURACY_COMBAT.ordinal()].addFunc(FuncAtkAccuracy.getInstance());
// Add the FuncAtkEvasion to the Standard Calculator of EVASION_RATE
std[Stats.EVASION_RATE.ordinal()] = new Calculator();
std[Stats.EVASION_RATE.ordinal()].addFunc(FuncAtkEvasion.getInstance());
return std;
}

public static Calculator[] getStdDoorCalculators()
{
Calculator[] std = new Calculator[Stats.NUM_STATS];
// Add the FuncAtkAccuracy to the Standard Calculator of ACCURACY_COMBAT
std[Stats.ACCURACY_COMBAT.ordinal()] = new Calculator();
std[Stats.ACCURACY_COMBAT.ordinal()].addFunc(FuncAtkAccuracy.getInstance());
// Add the FuncAtkEvasion to the Standard Calculator of EVASION_RATE
std[Stats.EVASION_RATE.ordinal()] = new Calculator();
std[Stats.EVASION_RATE.ordinal()].addFunc(FuncAtkEvasion.getInstance());
// SevenSigns PDEF Modifier
std[Stats.POWER_DEFENCE.ordinal()] = new Calculator();
std[Stats.POWER_DEFENCE.ordinal()].addFunc(FuncGatesPDefMod.getInstance());
// SevenSigns MDEF Modifier
std[Stats.MAGIC_DEFENCE.ordinal()] = new Calculator();
std[Stats.MAGIC_DEFENCE.ordinal()].addFunc(FuncGatesMDefMod.getInstance());
return std;
}

/**
* Add basics Func objects to L2PcInstance and L2Summon.<BR>
* <BR>
* <B><U> Concept</U> :</B><BR>
* <BR>
* A calculator is created to manage and dynamically calculate the effect of a character property (ex : MAX_HP, REGENERATE_HP_RATE...). In fact, each calculator is a table of Func object in which each Func represents a mathematic function : <BR>
* <BR>
* FuncAtkAccuracy -> Math.sqrt(_player.getDEX())*6+_player.getLevel()<BR>
* <BR>
*
* @param cha
* L2PcInstance or L2Summon that must obtain basic Func objects
*/
public static void addFuncsToNewCharacter(L2Character cha)
{
if (cha instanceof L2PcInstance)
{
cha.addStatFunc(FuncMaxHpAdd.getInstance());
cha.addStatFunc(FuncMaxHpMul.getInstance());
cha.addStatFunc(FuncMaxCpAdd.getInstance());
cha.addStatFunc(FuncMaxCpMul.getInstance());
cha.addStatFunc(FuncMaxMpAdd.getInstance());
cha.addStatFunc(FuncMaxMpMul.getInstance());
cha.addStatFunc(FuncBowAtkRange.getInstance());
cha.addStatFunc(FuncCrossBowAtkRange.getInstance());
cha.addStatFunc(FuncPAtkMod.getInstance());
cha.addStatFunc(FuncMAtkMod.getInstance());
cha.addStatFunc(FuncPDefMod.getInstance());
cha.addStatFunc(FuncMDefMod.getInstance());
cha.addStatFunc(FuncAtkCritical.getInstance());
cha.addStatFunc(FuncMAtkCritical.getInstance());
cha.addStatFunc(FuncAtkAccuracy.getInstance());
cha.addStatFunc(FuncAtkEvasion.getInstance());
cha.addStatFunc(FuncPAtkSpeed.getInstance());
cha.addStatFunc(FuncMAtkSpeed.getInstance());
cha.addStatFunc(FuncMoveSpeed.getInstance());
cha.addStatFunc(FuncHennaSTR.getInstance());
cha.addStatFunc(FuncHennaDEX.getInstance());
cha.addStatFunc(FuncHennaINT.getInstance());
cha.addStatFunc(FuncHennaMEN.getInstance());
cha.addStatFunc(FuncHennaCON.getInstance());
cha.addStatFunc(FuncHennaWIT.getInstance());
}
else if (cha instanceof L2PetInstance)
{
cha.addStatFunc(FuncPAtkMod.getInstance());
cha.addStatFunc(FuncMAtkMod.getInstance());
cha.addStatFunc(FuncPDefMod.getInstance());
cha.addStatFunc(FuncMDefMod.getInstance());
}
else if (cha instanceof L2Summon)
{
cha.addStatFunc(FuncAtkCritical.getInstance());
cha.addStatFunc(FuncMAtkCritical.getInstance());
cha.addStatFunc(FuncAtkAccuracy.getInstance());
cha.addStatFunc(FuncAtkEvasion.getInstance());
}
}

/**
* Calculate the HP regen rate (base + modifiers).<BR>
* <BR>
*/
public static final double calcHpRegen(L2Character cha)
{
double init = cha.getTemplate().baseHpReg;
double hpRegenMultiplier = cha.isRaid() ? Config.RAID_HP_REGEN_MULTIPLIER : Config.HP_REGEN_MULTIPLIER;
double hpRegenBonus = 0;
if (Config.L2JMOD_CHAMPION_ENABLE && cha.isChampion())
hpRegenMultiplier *= Config.L2JMOD_CHAMPION_HP_REGEN;
if (cha instanceof L2PetInstance)
hpRegenMultiplier = Config.PET_HP_REGEN_MULTIPLIER;
if (cha.isPlayer())
{
L2PcInstance player = (L2PcInstance) cha;
// Calculate correct baseHpReg value for certain level of PC
init += (player.getLevel() > 10) ? ((player.getLevel() - 1) / 10.0) : 0.5;
// SevenSigns Festival modifier
if (SevenSignsFestival.getInstance().isFestivalInProgress() && player.isFestivalParticipant())
hpRegenMultiplier *= calcFestivalRegenModifier(player);
else
{
double siegeModifier = calcSiegeRegenModifer(player);
if (siegeModifier > 0)
hpRegenMultiplier *= siegeModifier;
}
if (player.isInsideZone(L2Character.ZONE_CLANHALL) && player.getClan() != null)
{
int clanHallIndex = player.getClan().getHasHideout();
if (clanHallIndex > 0)
{
ClanHall clansHall = ClanHallManager.getInstance().getClanHallById(clanHallIndex);
if (clansHall != null)
if (clansHall.getFunction(ClanHall.FUNC_RESTORE_HP) != null)
hpRegenMultiplier *= 1 + (double) clansHall.getFunction(ClanHall.FUNC_RESTORE_HP).getLvl() / 100;
}
}
if (player.isInsideZone(L2Character.ZONE_CASTLE) && player.getClan() != null)
{
int castleIndex = player.getClan().getHasCastle();
if (castleIndex > 0)
{
Castle castle = CastleManager.getInstance().getCastleById(castleIndex);
if (castle != null)
if (castle.getFunction(Castle.FUNC_RESTORE_HP) != null)
hpRegenMultiplier *= 1 + (double) castle.getFunction(Castle.FUNC_RESTORE_HP).getLvl() / 100;
}
}
if (player.isInsideZone(L2Character.ZONE_FORT) && player.getClan() != null)
{
int fortIndex = player.getClan().getHasFort();
if (fortIndex > 0)
{
Fort fort = FortManager.getInstance().getFortById(fortIndex);
if (fort != null)
if (fort.getFunction(Fort.FUNC_RESTORE_HP) != null)
hpRegenMultiplier *= 1 + (double) fort.getFunction(Fort.FUNC_RESTORE_HP).getLvl() / 100;
}
}
// Mother Tree effect is calculated at last
if (player.isInsideZone(L2Character.ZONE_MOTHERTREE))
hpRegenBonus += 2;
// Calculate Movement bonus
if (player.isSitting())
hpRegenMultiplier *= 1.5; // Sitting
else if (!player.isMoving())
hpRegenMultiplier *= 1.1; // Staying
else if (player.isRunning())
hpRegenMultiplier *= 0.7; // Running
// Add CON bonus
init *= cha.getLevelMod() * CONbonus[cha.getCON()];
}
else if (cha instanceof L2PetInstance)
init = ((L2PetInstance) cha).getPetData().getPetRegenHP();
if (init < 1)
init = 1;
return cha.calcStat(Stats.REGENERATE_HP_RATE, init, null, null) * hpRegenMultiplier + hpRegenBonus;
}

/**
* Calculate the MP regen rate (base + modifiers).<BR>
* <BR>
*/
public static final double calcMpRegen(L2Character cha)
{
double init = cha.getTemplate().baseMpReg;
double mpRegenMultiplier = cha.isRaid() ? Config.RAID_MP_REGEN_MULTIPLIER : Config.MP_REGEN_MULTIPLIER;
double mpRegenBonus = 0;
if (cha instanceof L2PetInstance)
mpRegenMultiplier = Config.PET_MP_REGEN_MULTIPLIER;
if (cha.isPlayer())
{
L2PcInstance player = (L2PcInstance) cha;
// Calculate correct baseMpReg value for certain level of PC
init += 0.3 * ((player.getLevel() - 1) / 10.0);
// SevenSigns Festival modifier
if (SevenSignsFestival.getInstance().isFestivalInProgress() && player.isFestivalParticipant())
mpRegenMultiplier *= calcFestivalRegenModifier(player);
// Mother Tree effect is calculated at last
if (player.isInsideZone(L2Character.ZONE_MOTHERTREE))
mpRegenBonus += 1;
if (player.isInsideZone(L2Character.ZONE_CLANHALL) && player.getClan() != null)
{
int clanHallIndex = player.getClan().getHasHideout();
if (clanHallIndex > 0)
{
ClanHall clansHall = ClanHallManager.getInstance().getClanHallById(clanHallIndex);
if (clansHall != null)
if (clansHall.getFunction(ClanHall.FUNC_RESTORE_MP) != null)
mpRegenMultiplier *= 1 + (double) clansHall.getFunction(ClanHall.FUNC_RESTORE_MP).getLvl() / 100;
}
}
if (player.isInsideZone(L2Character.ZONE_CASTLE) && player.getClan() != null)
{
int castleIndex = player.getClan().getHasCastle();
if (castleIndex > 0)
{
Castle castle = CastleManager.getInstance().getCastleById(castleIndex);
if (castle != null)
if (castle.getFunction(Castle.FUNC_RESTORE_MP) != null)
mpRegenMultiplier *= 1 + (double) castle.getFunction(Castle.FUNC_RESTORE_MP).getLvl() / 100;
}
}
if (player.isInsideZone(L2Character.ZONE_FORT) && player.getClan() != null)
{
int fortIndex = player.getClan().getHasFort();
if (fortIndex > 0)
{
Fort fort = FortManager.getInstance().getFortById(fortIndex);
if (fort != null)
if (fort.getFunction(Fort.FUNC_RESTORE_MP) != null)
mpRegenMultiplier *= 1 + (double) fort.getFunction(Fort.FUNC_RESTORE_MP).getLvl() / 100;
}
}
// Calculate Movement bonus
if (player.isSitting())
mpRegenMultiplier *= 1.5; // Sitting
else if (!player.isMoving())
mpRegenMultiplier *= 1.1; // Staying
else if (player.isRunning())
mpRegenMultiplier *= 0.7; // Running
// Add MEN bonus
init *= cha.getLevelMod() * MENbonus[cha.getMEN()];
}
else if (cha instanceof L2PetInstance)
init = ((L2PetInstance) cha).getPetData().getPetRegenMP();
if (init < 1)
init = 1;
return cha.calcStat(Stats.REGENERATE_MP_RATE, init, null, null) * mpRegenMultiplier + mpRegenBonus;
}

/**
* Calculate the CP regen rate (base + modifiers).<BR>
* <BR>
*/
public static final double calcCpRegen(L2Character cha)
{
double init = cha.getTemplate().baseHpReg;
double cpRegenMultiplier = Config.CP_REGEN_MULTIPLIER;
double cpRegenBonus = 0;
if (cha instanceof L2PcInstance)
{
L2PcInstance player = (L2PcInstance) cha;
// Calculate correct baseHpReg value for certain level of PC
init += (player.getLevel() > 10) ? ((player.getLevel() - 1) / 10.0) : 0.5;
// Calculate Movement bonus
if (player.isSitting())
cpRegenMultiplier *= 1.5; // Sitting
else if (!player.isMoving())
cpRegenMultiplier *= 1.1; // Staying
else if (player.isRunning())
cpRegenMultiplier *= 0.7; // Running
}
else
{
// Calculate Movement bonus
if (!cha.isMoving())
cpRegenMultiplier *= 1.1; // Staying
else if (cha.isRunning())
cpRegenMultiplier *= 0.7; // Running
}
// Apply CON bonus
init *= cha.getLevelMod() * CONbonus[cha.getCON()];
if (init < 1)
init = 1;
return cha.calcStat(Stats.REGENERATE_CP_RATE, init, null, null) * cpRegenMultiplier + cpRegenBonus;
}

@SuppressWarnings("deprecation")
public static final double calcFestivalRegenModifier(L2PcInstance activeChar)
{
final int[] festivalInfo = SevenSignsFestival.getInstance().getFestivalForPlayer(activeChar);
final int oracle = festivalInfo[0];
final int festivalId = festivalInfo[1];
int[] festivalCenter;
// If the player isn't found in the festival, leave the regen rate as it
// is.
if (festivalId < 0)
return 0;
// Retrieve the X and Y coords for the center of the festival arena the
// player is in.
if (oracle == SevenSigns.CABAL_DAWN)
festivalCenter = SevenSignsFestival.FESTIVAL_DAWN_PLAYER_SPAWNS[festivalId];
else
festivalCenter = SevenSignsFestival.FESTIVAL_DUSK_PLAYER_SPAWNS[festivalId];
// Check the distance between the player and the player spawn point, in
// the center of the arena.
double distToCenter = activeChar.getDistance(festivalCenter[0], festivalCenter[1]);
if (Config.DEBUG)
_log.info("Distance: " + distToCenter + ", RegenMulti: " + (distToCenter * 2.5) / 50);
return 1.0 - (distToCenter * 0.0005); // Maximum Decreased Regen of ~
// -65%;
}

public static final double calcSiegeRegenModifer(L2PcInstance activeChar)
{
if (activeChar == null || activeChar.getClan() == null)
return 0;
Siege siege = SiegeManager.getInstance().getSiege(activeChar.getPosition().getX(), activeChar.getPosition().getY(), activeChar.getPosition().getZ());
if (siege == null || !siege.getIsInProgress())
return 0;
L2SiegeClan siegeClan = siege.getAttackerClan(activeChar.getClan().getClanId());
if (siegeClan == null || siegeClan.getFlag().isEmpty() || !Util.checkIfInRange(200, activeChar, siegeClan.getFlag().get(0), true))
return 0;
return 1.5; // If all is true, then modifer will be 50% more
}

/** Calculate blow damage based on cAtk */
public static double calcBlowDamage(L2Character attacker, L2Character target, L2Skill skill, byte shld, boolean ss)
{
double power = skill.getPower();
if (attacker instanceof L2Playable && target instanceof L2Playable)
power *= skill.getPvpPowerMultiplier();
double damage = attacker.getPAtk(target);
damage += calcValakasAttribute(attacker, target, skill);
double defence = target.getPDef(attacker);
// Def bonusses in PvP fight
if ((attacker instanceof L2Playable) && (target instanceof L2Playable))
{
if (skill == null)
defence *= target.calcStat(Stats.PVP_PHYSICAL_DEF, 1, null, null);
else
defence *= target.calcStat(Stats.PVP_PHYS_SKILL_DEF, 1, null, null);
}
if (ss)
damage *= 2.;
switch (shld)
{
case SHIELD_DEFENSE_SUCCEED:
defence += target.getShldDef();
break;
case SHIELD_DEFENSE_PERFECT_BLOCK: // perfect block
return 1;
}
if (ss && skill.getSSBoost() > 0)
power *= skill.getSSBoost();
damage = attacker.calcStat(Stats.CRITICAL_DAMAGE, (damage + power), target, skill);
damage *= calcElemental(attacker, target, skill);
damage += attacker.calcStat(Stats.CRITICAL_DAMAGE_ADD, 0, target, skill) * 6.5;
damage *= target.calcStat(Stats.CRIT_VULN, 1, target, skill);
// get the vulnerability for the instance due to skills (buffs,
// passives, toggles, etc)
damage = target.calcStat(Stats.DAGGER_WPN_VULN, damage, target, null);
damage *= 70. / defence;
damage += Rnd.get(shld) * attacker.getRandomDamage(target);
// Dmg bonusses in PvP fight
if ((attacker instanceof L2Playable) && (target instanceof L2Playable))
{
if (skill == null)
damage *= attacker.calcStat(Stats.PVP_PHYSICAL_DMG, 1, null, null);
else
damage *= attacker.calcStat(Stats.PVP_PHYS_SKILL_DMG, 1, null, null);
}
return damage < 1 ? 1. : damage;
}

/**
* Calculated damage caused by ATTACK of attacker on target, called separatly for each weapon, if dual-weapon is used.
*
* @param attacker
* player or NPC that makes ATTACK
* @param target
* player or NPC, target of ATTACK
* @param miss
* one of ATTACK_XXX constants
* @param crit
* if the ATTACK have critical success
* @param dual
* if dual weapon is used
* @param ss
* if weapon item was charged by soulshot
* @return damage points
*/
public static final double calcPhysDam(L2Character attacker, L2Character target, L2Skill skill, byte shld, boolean crit, boolean ss)
{
double damage = attacker.getPAtk(target);
double defence = target.getPDef(attacker);
int pAtk = (int) damage;
int pDef = (int) defence;
damage += calcValakasAttribute(attacker, target, skill);
// Def bonusses in PvP fight
if ((attacker instanceof L2Playable) && (target instanceof L2Playable))
{
if (skill == null)
defence *= target.calcStat(Stats.PVP_PHYSICAL_DEF, 1, null, null);
else
defence *= target.calcStat(Stats.PVP_PHYS_SKILL_DEF, 1, null, null);
}
switch (shld)
{
case SHIELD_DEFENSE_SUCCEED:
if (!Config.ALT_GAME_SHIELD_BLOCKS)
defence += target.getShldDef();
break;
case SHIELD_DEFENSE_PERFECT_BLOCK: // perfect block
return 1.;
}
if (ss)
damage *= 2;
if (skill != null)
{
double skillpower = skill.getPower(attacker);
if (attacker instanceof L2Playable && target instanceof L2Playable)
skillpower *= skill.getPvpPowerMultiplier();
float ssboost = skill.getSSBoost();
if (ssboost <= 0)
damage += skillpower;
else if (ssboost > 0)
{
if (ss)
{
skillpower *= ssboost;
damage += skillpower;
}
else
damage += skillpower;
}
}
// defence modifier depending of the attacker weapon
L2Weapon weapon = attacker.getActiveWeaponItem();
Stats stat = null;
if (weapon != null && !attacker.isTransformed())
{
switch (weapon.getItemType())
{
case BOW:
stat = Stats.BOW_WPN_VULN;
break;
case CROSSBOW:
stat = Stats.CROSSBOW_WPN_VULN;
break;
case BLUNT:
stat = Stats.BLUNT_WPN_VULN;
break;
case DAGGER:
stat = Stats.DAGGER_WPN_VULN;
break;
case DUAL:
stat = Stats.DUAL_WPN_VULN;
break;
case DUALFIST:
stat = Stats.DUALFIST_WPN_VULN;
break;
case ETC:
stat = Stats.ETC_WPN_VULN;
break;
case FIST:
stat = Stats.FIST_WPN_VULN;
break;
case POLE:
stat = Stats.POLE_WPN_VULN;
break;
case SWORD:
stat = Stats.SWORD_WPN_VULN;
break;
case BIGSWORD:
stat = Stats.BIGSWORD_WPN_VULN;
break;
case BIGBLUNT:
stat = Stats.BIGBLUNT_WPN_VULN;
break;
case DUAL_DAGGER:
stat = Stats.DUALDAGGER_WPN_VULN;
break;
case RAPIER:
stat = Stats.RAPIER_WPN_VULN;
break;
case ANCIENT_SWORD:
stat = Stats.ANCIENT_WPN_VULN;
break;
case PET:
stat = Stats.PET_WPN_VULN;
break;
}
}
double basedamage = 70 * damage / defence;
double critmod = 0;
double critadd = 0;
double critdamage = 0;
if (crit)
{
critmod = attacker.calcStat(Stats.CRITICAL_DAMAGE, 1, target, skill) * target.calcStat(Stats.CRIT_VULN, 1, target, null);
// Crit dmg add is almost useless in normal hits...
critadd = attacker.calcStat(Stats.CRITICAL_DAMAGE_ADD, 0, target, skill) * 70 / defence;
// Finally retail like formula
damage = (2 * basedamage) * critmod + critadd;
critdamage = damage;
}
else
damage = basedamage;

// In C5 summons make 10 % less dmg in PvP.
if (attacker instanceof L2Summon && target instanceof L2PcInstance)
damage *= 0.9;
if (stat != null)
damage = target.calcStat(stat, damage, target, null);
damage += Rnd.nextDouble() * damage / 10;
if (shld > 0 && Config.ALT_GAME_SHIELD_BLOCKS)
{
damage -= target.getShldDef();
if (damage < 0)
damage = 0;
}
if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.DAGGER && skill != null)
{
L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
if (armor != null)
{
if (((L2PcInstance) target).isWearingHeavyArmor())
damage /= Config.ALT_DAGGER_DMG_VS_HEAVY;
if (((L2PcInstance) target).isWearingLightArmor())
damage /= Config.ALT_DAGGER_DMG_VS_LIGHT;
if (((L2PcInstance) target).isWearingMagicArmor())
damage /= Config.ALT_DAGGER_DMG_VS_ROBE;
}
}
if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.BOW && skill != null)
{
L2Armor armor = ((L2PcInstance) target).getActiveChestArmorItem();
if (armor != null)
{
if (((L2PcInstance) target).isWearingHeavyArmor())
damage /= Config.ALT_BOW_DMG_VS_HEAVY;
if (((L2PcInstance) target).isWearingLightArmor())
damage /= Config.ALT_BOW_DMG_VS_LIGHT;
if (((L2PcInstance) target).isWearingMagicArmor())
damage /= Config.ALT_BOW_DMG_VS_ROBE;
}
}
// L2WT - START - FIX (range dmg modifier)
if (weapon != null && attacker instanceof L2PcInstance && (weapon.getItemType() == L2WeaponType.BOW || weapon.getItemType() == L2WeaponType.CROSSBOW) && Config.ALT_RANGE_DMG_SYSTEM)
{
double distance = Math.sqrt(attacker.getDistanceSq(target));
double rangemodifier = (distance / Config.ALT_RANGE_DMG_STANDART);

if (rangemodifier < Config.ALT_RANGE_DMG_MOD_MIN && Config.ALT_RANGE_DMG_MOD_MIN > 0)
rangemodifier = Config.ALT_RANGE_DMG_MOD_MIN;
else if (rangemodifier > Config.ALT_RANGE_DMG_MOD_MAX && Config.ALT_RANGE_DMG_MOD_MAX > 0)
rangemodifier = Config.ALT_RANGE_DMG_MOD_MAX;

damage = (int) ((double) damage * rangemodifier);
}
// L2WT - END
if (target instanceof L2Npc)
{
switch (((L2Npc) target).getTemplate().getRace())
{
case BEAST:
damage *= attacker.getPAtkMonsters(target);
break;
case ANIMAL:
damage *= attacker.getPAtkAnimals(target);
break;
case PLANT:
damage *= attacker.getPAtkPlants(target);
break;
case DRAGON:
damage *= attacker.getPAtkDragons(target);
break;
case BUG:
damage *= attacker.getPAtkInsects(target);
break;
case GIANT:
damage *= attacker.getPAtkGiants(target);
break;
default:
// nothing
break;
}
}
if (damage > 0 && damage < 1)
damage = 1;
else if (damage < 0)
damage = 0;
}
else if (damage > 5000)
{
damage = 5000;
}

// Dmg bonusses in PvP fight
if ((attacker instanceof L2Playable) && (target instanceof L2Playable))
{
if (skill == null)
damage *= attacker.calcStat(Stats.PVP_PHYSICAL_DMG, 1, null, null);
else
damage *= attacker.calcStat(Stats.PVP_PHYS_SKILL_DMG, 1, null, null);
}
if (attacker instanceof L2PcInstance)
{
damage = GetPAtkBalance(((L2PcInstance) attacker),damage);
if (((L2PcInstance) attacker).getClassId().isMage())
damage *= Config.ALT_MAGES_PHYSICAL_DAMAGE_MULTI;
else
damage *= Config.ALT_FIGHTERS_PHYSICAL_DAMAGE_MULTI;
}
else if (attacker instanceof L2Summon)
damage *= Config.ALT_PETS_PHYSICAL_DAMAGE_MULTI;
else if (attacker instanceof L2Npc)
damage *= Config.ALT_NPC_PHYSICAL_DAMAGE_MULTI;
double finaldamage = damage;
double elemmod = calcElemental(attacker, target, skill);
damage *= elemmod;
if (attacker instanceof L2PcInstance && ((L2PcInstance)attacker).getVarB("fdi"))
{
if (crit)
{
attacker.sendMessage("BaseDamage: " + (int) basedamage);
attacker.sendMessage("CritMod: " + critmod);
attacker.sendMessage("CritAdd: " + critadd);
attacker.sendMessage("CritDamage: " + (int) critdamage);
attacker.sendMessage("OtherMod: " + (finaldamage/critdamage));
attacker.sendMessage("FinalDamage: " + (int) finaldamage);
attacker.sendMessage("ElemMod: " + elemmod);
attacker.sendMessage("TotalDamage: " + (int) damage);
attacker.sendMessage("70 * " + pAtk + " / " + pDef + " = " + (int) basedamage + " * 2 * " + critmod + " + " + critadd + " = " + (int) critdamage + " + ... = " + (int) finaldamage + " * " + elemmod + " = " + (int) damage);
}
else
{
attacker.sendMessage("BaseDamage: " + (int) basedamage);
attacker.sendMessage("OtherMod: " + (finaldamage/basedamage));
attacker.sendMessage("FinalDamage: " + (int) finaldamage);
attacker.sendMessage("ElemMod: " + elemmod);
attacker.sendMessage("TotalDamage: " + (int) damage);
attacker.sendMessage("70 * " + pAtk + " / " + pDef + " = " + (int) basedamage + " + ... = " + (int) finaldamage + " * " + elemmod + " = " + (int) damage);
}
}
return damage;
}

public static final double calcMagicDam(L2Character attacker, L2Character target, L2Skill skill, byte shld, boolean ss, boolean bss, boolean mcrit)
{
double mAtk = attacker.getMAtk(target, skill);
double mDef = target.getMDef(attacker, skill);

// Pvp bonuses for def
if ((attacker instanceof L2Playable) && (target instanceof L2Playable))
{
if (skill.isMagic())
mDef *= target.calcStat(Stats.PVP_MAGICAL_DEF, 1, null, null);
else
mDef *= target.calcStat(Stats.PVP_PHYS_SKILL_DEF, 1, null, null);
}
switch (shld)
{
case SHIELD_DEFENSE_SUCCEED:
mDef += target.getShldDef(); // kamael
break;
case SHIELD_DEFENSE_PERFECT_BLOCK: // perfect block
return 1;
}
double skillpower = skill.getPower(attacker);
if (attacker instanceof L2Playable && target instanceof L2Playable)
skillpower *= skill.getPvpPowerMultiplier();
if (bss)
mAtk *= 4;
else if (ss)
mAtk *= 2;
double damage = 91 * Math.sqrt(mAtk) / mDef * skillpower;
// In C5 summons make 10 % less dmg in PvP.
if (attacker instanceof L2Summon && target instanceof L2PcInstance)
damage *= 0.9;
// Failure calculation
if (Config.ALT_GAME_MAGICFAILURES && !calcMagicSuccess(attacker, target, skill))
{
if (attacker instanceof L2PcInstance)
{
if (calcMagicSuccess(attacker, target, skill) && (target.getLevel() - attacker.getLevel()) <= 9)
{
if (skill.getSkillType() == L2SkillType.DRAIN)
attacker.sendPacket(new SystemMessage(SystemMessageId.DRAIN_HALF_SUCCESFUL));
else
attacker.sendPacket(new SystemMessage(SystemMessageId.ATTACK_FAILED));
damage /= 2;
}
else
{
SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
sm.addCharName(target);
sm.addSkillName(skill);
attacker.sendPacket(sm);
damage = 1;
}
}
if (target instanceof L2PcInstance)
{
if (skill.getSkillType() == L2SkillType.DRAIN)
{
SystemMessage sm = new SystemMessage(SystemMessageId.RESISTED_C1_DRAIN);
sm.addCharName(attacker);
target.sendPacket(sm);
}
else
{
SystemMessage sm = new SystemMessage(SystemMessageId.RESISTED_C1_MAGIC);
sm.addCharName(attacker);
target.sendPacket(sm);
}
}
}
else if (mcrit)
{
if (attacker instanceof L2PcInstance && target instanceof L2PcInstance)
damage *= 2.5;
else
damage *= 3;
}
damage += Rnd.get(shld) * attacker.getRandomDamage(target);
// Pvp bonuses for dmg
if ((attacker instanceof L2Playable) && (target instanceof L2Playable))
{
if (skill.isMagic())
damage *= attacker.calcStat(Stats.PVP_MAGICAL_DMG, 1, null, null);
else
damage *= attacker.calcStat(Stats.PVP_PHYS_SKILL_DMG, 1, null, null);
}
if (attacker instanceof L2PcInstance)
{
damage = GetMAtkBalance(((L2PcInstance) attacker),damage);
if (((L2PcInstance) attacker).getClassId().isMage())
damage = damage * Config.ALT_MAGES_MAGICAL_DAMAGE_MULTI;
else
damage = damage * Config.ALT_FIGHTERS_MAGICAL_DAMAGE_MULTI;
}
else if (attacker instanceof L2Summon)
damage *= Config.ALT_PETS_MAGICAL_DAMAGE_MULTI;
else if (attacker instanceof L2Npc)
damage *= Config.ALT_NPC_MAGICAL_DAMAGE_MULTI;
// random magic damage
float rnd = Rnd.get(-20, 20) / 100.0f + 1;
damage *= rnd;
// CT2.3 general magic vuln
damage *= target.calcStat(Stats.MAGIC_DAMAGE_VULN, 1, null, null);
damage *= calcElemental(attacker, target, skill);
return damage;
}

public static final double calcMagicDam(L2CubicInstance attacker, L2Character target, L2Skill skill, boolean mcrit, byte shld)
{
double mAtk = attacker.getMAtk();
double mDef = target.getMDef(attacker.getOwner(), skill);
switch (shld)
{
case SHIELD_DEFENSE_SUCCEED:
mDef += target.getShldDef(); // kamael
break;
case SHIELD_DEFENSE_PERFECT_BLOCK: // perfect block
return 1;
}
double damage = 91 * Math.sqrt(mAtk) / mDef * skill.getPower();
L2PcInstance owner = attacker.getOwner();
// Failure calculation
if (Config.ALT_GAME_MAGICFAILURES && !calcMagicSuccess(owner, target, skill))
{
if (calcMagicSuccess(owner, target, skill) && (target.getLevel() - skill.getMagicLevel()) <= 9)
{
if (skill.getSkillType() == L2SkillType.DRAIN)
owner.sendPacket(new SystemMessage(SystemMessageId.DRAIN_HALF_SUCCESFUL));
else
owner.sendPacket(new SystemMessage(SystemMessageId.ATTACK_FAILED));
damage /= 2;
}
else
{
SystemMessage sm = new SystemMessage(SystemMessageId.C1_RESISTED_YOUR_S2);
sm.addCharName(target);
sm.addSkillName(skill);
owner.sendPacket(sm);
damage = 1;
}
if (target instanceof L2PcInstance)
{
if (skill.getSkillType() == L2SkillType.DRAIN)
{
SystemMessage sm = new SystemMessage(SystemMessageId.RESISTED_C1_DRAIN);
sm.addCharName(owner);
target.sendPacket(sm);
}
else
{
SystemMessage sm = new SystemMessage(SystemMessageId.RESISTED_C1_MAGIC);
sm.addCharName(owner);
target.sendPacket(sm);
}
}
}
else if (mcrit)
damage *= 3;
// CT2.3 general magic vuln
damage *= target.calcStat(Stats.MAGIC_DAMAGE_VULN, 1, null, null);
damage *= calcElemental(owner, target, skill);
return damage;
}

/** Returns true in case of critical hit */
public static final boolean calcCrit(double rate, L2Character target)
{
final boolean success = rate > Rnd.get(1000);
// support for critical damage evasion
if (success)
{
if (target == null)
return true; // no effect
// little weird, but remember what CRIT_DAMAGE_EVASION > 1 increase chances to _evade_ crit hits
return Rnd.get((int)target.getStat().calcStat(Stats.CRIT_DAMAGE_EVASION, 100, null, null)) < 100;
}
return success;
}

/** Calculate value of blow success */
public static final double calcBlow(L2Character activeChar, L2Character target, int chance)
{
return activeChar.calcStat(Stats.BLOW_RATE, chance * (1.0 + (activeChar.getDEX() - 20) / 100), target, null);
}

/** Calculate value of lethal chance */
public static final double calcLethal(L2Character activeChar, L2Character target, int baseLethal, int magiclvl)
{
double chance = 0;
if (magiclvl > 0)
{
int delta = ((magiclvl + activeChar.getLevel()) / 2) - target.getLevel();
// delta [-3,infinite)
if (delta >= -3)
chance = (baseLethal * ((double) activeChar.getLevel() / target.getLevel()));
// delta [-9, -3[
else if (delta < -3 && delta >= -9)
chance = (-3) * (baseLethal / (delta));
// delta [-infinite,-9[
else
chance = baseLethal / 15;
}
else
chance = (baseLethal * ((double) activeChar.getLevel() / target.getLevel()));
return 10 * activeChar.calcStat(Stats.LETHAL_RATE, chance, target, null);
}

public static final boolean calcLethalHit(L2Character activeChar, L2Character target, L2Skill skill)
{
if (!target.isRaid() && !(target instanceof L2DoorInstance) && !(target instanceof L2Npc && ((L2Npc) target).getNpcId() == 35062))
{
int rnd = Rnd.get(1000);
double lethal2chance = 0;
double lethal1chance = 0;
if (skill.getLethalChance2() > 0)
{
lethal2chance = calcLethal(activeChar, target, skill.getLethalChance2(), skill.getMagicLevel());
if (activeChar instanceof L2PcInstance && ((L2PcInstance) activeChar).getVarB("SkillsChance"))
{
L2PcInstance attacker = (L2PcInstance) activeChar;
attacker.sendMessage("Шанс смертельного удара " + (int) (lethal2chance / 10) + "%");
}
}
if (skill.getLethalChance1() > 0)
{
lethal1chance = calcLethal(activeChar, target, skill.getLethalChance1(), skill.getMagicLevel());
if (activeChar instanceof L2PcInstance && ((L2PcInstance) activeChar).getVarB("SkillsChance"))
{
L2PcInstance attacker = (L2PcInstance) activeChar;
attacker.sendMessage("Шанс полусмертельного удара " + (int) (lethal1chance / 10) + "%");
}
}
// 2nd lethal effect activate (cp,hp to 1 or if target is npc then
// hp to 1)
if (lethal2chance > 0 && rnd < lethal2chance)
{
if (target instanceof L2Npc)
target.reduceCurrentHp(target.getCurrentHp() - 1, activeChar, skill);
else if (target instanceof L2PcInstance) // If is a active player set his HP and CP to 1
{
L2PcInstance player = (L2PcInstance) target;
if (!player.isInvul())
{
if (!(activeChar instanceof L2PcInstance && (((L2PcInstance) activeChar).isGM() && !((L2PcInstance) activeChar).getAccessLevel().canGiveDamage())))
{
player.setCurrentHp(1);
player.setCurrentCp(1);
player.sendPacket(new SystemMessage(SystemMessageId.LETHAL_STRIKE_SUCCESSFUL));
}
}
}
activeChar.sendPacket(new SystemMessage(SystemMessageId.LETHAL_STRIKE));
}
else if (lethal1chance > 0 && rnd < lethal1chance)
{
if (target instanceof L2PcInstance)
{
L2PcInstance player = (L2PcInstance) target;
if (!player.isInvul())
{
if (!(activeChar instanceof L2PcInstance && (((L2PcInstance) activeChar).isGM() && !((L2PcInstance) activeChar).getAccessLevel().canGiveDamage())))
{
player.setCurrentCp(1); // Set CP to 1
player.sendPacket(new SystemMessage(SystemMessageId.CP_DISAPPEARS_WHEN_HIT_WITH_A_HALF_KILL_SKILL));
}
}
}
else if (target instanceof L2Npc) // If is a monster remove first damage and after 50% of current hp
target.reduceCurrentHp(target.getCurrentHp() / 2, activeChar, skill);
activeChar.sendPacket(new SystemMessage(SystemMessageId.HALF_KILL));
}
else
return false;
}
else
return false;
return true;
}

public static final boolean calcMCrit(int mRate)
{
return mRate > Rnd.get(1000);
}

/** Returns true in case when ATTACK is canceled due to hit */
public static final boolean calcAtkBreak(L2Character target, double dmg)
{
if (target.getFusionSkill() != null)
return true;
double init = 0;
if (Config.ALT_GAME_CANCEL_CAST && target.isCastingNow() && target.canAbortCast())
init = 15;
if (Config.ALT_GAME_CANCEL_BOW && target.isAttackingNow())
{
L2Weapon wpn = target.getActiveWeaponItem();
if (wpn != null && wpn.getItemType() == L2WeaponType.BOW)
init = 15;
}
if (target.isRaid() || target.isInvul() || init <= 0)
return false; // No attack break
// Chance of break is higher with higher dmg
init += Math.sqrt(13 * dmg);
// Chance is affected by target MEN
init -= (MENbonus[target.getMEN()] * 100 - 100);
// Calculate all modifiers for ATTACK_CANCEL
double rate = target.calcStat(Stats.ATTACK_CANCEL, init, null, null);
// Adjust the rate to be between 1 and 99
if (rate > 99)
rate = 99;
else if (rate < 1)
rate = 1;
return Rnd.get(100) < rate;
}

public static final int calcPAtkSpd(L2Character attacker, L2Character target, double rate)
{
// measured Oct 2006 by Tank6585, formula by Sami
// attack speed 312 equals 1500 ms delay... (or 300 + 40 ms delay?)
if (rate < 2)
return 2700;
else
return (int) (470000 / rate);
}


/** Calculate delay (in milliseconds) for skills cast */
public static final int calcAtkSpd(L2Character attacker, L2Skill skill, double skillTime)
{
if (skill.isMagic())
return (int) (skillTime * 333 / attacker.getMAtkSpd());
return (int) (skillTime * 333 / attacker.getPAtkSpd());
}

/**
* Returns true if hit missed (target evaded) Formula based on http://l2p.l2wh.com/nonskillattacks.html
**/
public static boolean calcHitMiss(L2Character attacker, L2Character target)
{
int delta = attacker.getAccuracy() - target.getEvasionRate(attacker);
int chance;
if (delta >= 10)
chance = 980;
else
{
switch (delta)
{
case 9:
chance = 975;
break;
case 8:
chance = 970;
break;
case 7:
chance = 965;
break;
case 6:
chance = 960;
break;
case 5:
chance = 955;
break;
case 4:
chance = 945;
break;
case 3:
chance = 935;
break;
case 2:
chance = 925;
break;
case 1:
chance = 915;
break;
case 0:
chance = 905;
break;
case -1:
chance = 890;
break;
case -2:
chance = 875;
break;
case -3:
chance = 860;
break;
case -4:
chance = 845;
break;
case -5:
chance = 830;
break;
case -6:
chance = 815;
break;
case -7:
chance = 800;
break;
case -8:
chance = 785;
break;
case -9:
chance = 770;
break;
case -10:
chance = 755;
break;
case -11:
chance = 735;
break;
case -12:
chance = 715;
break;
case -13:
chance = 695;
break;
case -14:
chance = 675;
break;
case -15:
chance = 655;
break;
case -16:
chance = 625;
break;
case -17:
chance = 595;
break;
case -18:
chance = 565;
break;
case -19:
chance = 535;
break;
case -20:
chance = 505;
break;
case -21:
chance = 455;
break;
case -22:
chance = 405;
break;
case -23:
chance = 355;
break;
c...
Ответ
#7
ошибку какую пишет, в чём редактируете?

Добавлено через 6 минут
Попробывал ради интереса у себя изменить также. Ошибок нет.
Ответ
#8
Редактирую через Notepad++ Вот чистая формула http://rghost.ru/19616921
Код:
rmulas.java:1505: illegal start of type
    [javac]                     else
    [javac]                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1505: ';' expected
    [javac]                     else
    [javac]                         ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1506: illegal start of type
    [javac]                             damage *= Config.ALT_FIGHTERS_PHYSICAL_D
AMAGE_MULTI;
    [javac]                                    ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1506: ';' expected
    [javac]                             damage *= Config.ALT_FIGHTERS_PHYSICAL_D
AMAGE_MULTI;
    [javac]                                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1506: <identifier> expected
    [javac]                             damage *= Config.ALT_FIGHTERS_PHYSICAL_D
AMAGE_MULTI;
    [javac]
           ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1508: class, interface, or enum expected
    [javac]             else if (attacker instanceof L2Summon)
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1510: class, interface, or enum expected
    [javac]             else if (attacker instanceof L2Npc)
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1512: class, interface, or enum expected
    [javac]             double finaldamage = damage;
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1513: class, interface, or enum expected
    [javac]             double elemmod = calcElemental(attacker, target, skill);

    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1514: class, interface, or enum expected
    [javac]             damage *= elemmod;
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1515: class, interface, or enum expected
    [javac]             if (attacker instanceof L2PcInstance && ((L2PcInstance)a
ttacker).getVarB("fdi"))
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1520: class, interface, or enum expected
    [javac]                             attacker.sendMessage("CritMod: " + critm
od);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1521: class, interface, or enum expected
    [javac]                             attacker.sendMessage("CritAdd: " + crita
dd);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1522: class, interface, or enum expected
    [javac]                             attacker.sendMessage("CritDamage: " + (i
nt) critdamage);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1523: class, interface, or enum expected
    [javac]                             attacker.sendMessage("OtherMod: " + (fin
aldamage/critdamage));
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1524: class, interface, or enum expected
    [javac]                             attacker.sendMessage("FinalDamage: " + (
int) finaldamage);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1525: class, interface, or enum expected
    [javac]                             attacker.sendMessage("ElemMod: " + elemm
od);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1526: class, interface, or enum expected
    [javac]                             attacker.sendMessage("TotalDamage: " + (
int) damage);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1527: class, interface, or enum expected
    [javac]                             attacker.sendMessage("70 * " + pAtk + "
/ " + pDef + " = " + (int) basedamage + " * 2 * " + critmod + " + " + critadd +
" = " + (int) critdamage + " + ... = " + (int) finaldamage + " * " + elemmod + "
= " + (int) damage);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1528: class, interface, or enum expected
    [javac]                     }
    [javac]                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1532: class, interface, or enum expected
    [javac]                             attacker.sendMessage("OtherMod: " + (fin
aldamage/basedamage));
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1533: class, interface, or enum expected
    [javac]                             attacker.sendMessage("FinalDamage: " + (
int) finaldamage);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1534: class, interface, or enum expected
    [javac]                             attacker.sendMessage("ElemMod: " + elemm
od);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1535: class, interface, or enum expected
    [javac]                             attacker.sendMessage("TotalDamage: " + (
int) damage);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1536: class, interface, or enum expected
    [javac]                             attacker.sendMessage("70 * " + pAtk + "
/ " + pDef + " = " + (int) basedamage + " + ... = " + (int) finaldamage + " * "
+ elemmod + " = " + (int) damage);
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1537: class, interface, or enum expected
    [javac]                     }
    [javac]                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1540: class, interface, or enum expected
    [javac]     }
    [javac]     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1542: class, interface, or enum expected
    [javac]     public static final double calcMagicDam(L2Character attacker, L2
Character target, L2Skill skill, byte shld, boolean ss, boolean bss, boolean mcr
it)
    [javac]                         ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1545: class, interface, or enum expected
    [javac]             double mDef = target.getMDef(attacker, skill);
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1548: class, interface, or enum expected
    [javac]             if ((attacker instanceof L2Playable) && (target instance
of L2Playable))
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1552: class, interface, or enum expected
    [javac]                     else
    [javac]                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1554: class, interface, or enum expected
    [javac]             }
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1559: class, interface, or enum expected
    [javac]                             break;
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1560: class, interface, or enum expected
    [javac]                     case SHIELD_DEFENSE_PERFECT_BLOCK: // perfect bl
ock
    [javac]                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1562: class, interface, or enum expected
    [javac]             }
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1564: class, interface, or enum expected
    [javac]             if (attacker instanceof L2Playable && target instanceof
L2Playable)
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1566: class, interface, or enum expected
    [javac]             if (bss)
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1568: class, interface, or enum expected
    [javac]             else if (ss)
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1570: class, interface, or enum expected
    [javac]             double damage = 91 * Math.sqrt(mAtk) / mDef * skillpower
;
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1572: class, interface, or enum expected
    [javac]             if (attacker instanceof L2Summon && target instanceof L2
PcInstance)
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1575: class, interface, or enum expected
    [javac]             if (Config.ALT_GAME_MAGICFAILURES && !calcMagicSuccess(a
ttacker, target, skill))
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1583: class, interface, or enum expected
    [javac]                                     else
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1585: class, interface, or enum expected
    [javac]                                     damage /= 2;
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1586: class, interface, or enum expected
    [javac]                             }
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1590: class, interface, or enum expected
    [javac]                                     sm.addCharName(target);
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1591: class, interface, or enum expected
    [javac]                                     sm.addSkillName(skill);
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1592: class, interface, or enum expected
    [javac]                                     attacker.sendPacket(sm);
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1593: class, interface, or enum expected
    [javac]                                     damage = 1;
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1594: class, interface, or enum expected
    [javac]                             }
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1601: class, interface, or enum expected
    [javac]                                     sm.addCharName(attacker);
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1602: class, interface, or enum expected
    [javac]                                     target.sendPacket(sm);
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1603: class, interface, or enum expected
    [javac]                             }
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1607: class, interface, or enum expected
    [javac]                                     sm.addCharName(attacker);
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1608: class, interface, or enum expected
    [javac]                                     target.sendPacket(sm);
    [javac]                                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1609: class, interface, or enum expected
    [javac]                             }
    [javac]                             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1616: class, interface, or enum expected
    [javac]                     else
    [javac]                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1618: class, interface, or enum expected
    [javac]             }
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1621: class, interface, or enum expected
    [javac]             if ((attacker instanceof L2Playable) && (target instance
of L2Playable))
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1625: class, interface, or enum expected
    [javac]                     else
    [javac]                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1627: class, interface, or enum expected
    [javac]             }
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1631: class, interface, or enum expected
    [javac]                     if (((L2PcInstance) attacker).getClassId().isMag
e())
    [javac]                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1633: class, interface, or enum expected
    [javac]                     else
    [javac]                     ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1635: class, interface, or enum expected
    [javac]             }
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1638: class, interface, or enum expected
    [javac]             else if (attacker instanceof L2Npc)
    [javac]             ^
    [javac] C:\шёїюфэшъш\gameserver\src\main\java\com\l2emu\gameserver\skills\Fo
rmulas.java:1641: class, interface, or enum expected
    [javac]             float rnd = Rnd.get(-20, 20) / 100.0f + 1;
    [javac]             ^
    [javac] 100 errors

BUILD FAILED
C:\шёїюфэшъш\gameserver\build.xml:43: Compile failed; see the compiler error out
put for details.

Total time: 3 seconds

C:\исходники\gameserver>
Ответ
#9
Вот исправленный. http://rghost.ru/19660771
Ответ
#10
Огромное спасибо сборка удачно скопелиревался но демаг все равно не ограничен Sad
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Ограничения NickErder 5 2,535 05-10-2016, 11:43 AM
Последний пост: Gaikotsu
  как сделать ограничения по IP Sanders 4 2,028 03-31-2012, 10:54 PM
Последний пост: walle092

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)