/* * 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 2, 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * http://www.gnu.org/copyleft/gpl.html */ package net.sf.l2j.gameserver.instancemanager; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Hashtable; import java.util.Properties; import java.util.Set; import java.util.logging.Logger; import net.sf.l2j.Config; import net.sf.l2j.gameserver.datatables.CharTemplateTable; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; /** * * @author Shyla */ public class ClassDamageManager { private static final Logger _log = Logger.getLogger(ClassDamageManager.class.getName()); private static Hashtable damage_to_mage = new Hashtable(); private static Hashtable damage_to_fighter = new Hashtable(); private static Hashtable damage_by_mage = new Hashtable(); private static Hashtable damage_by_fighter = new Hashtable(); private static Hashtable id_to_name = new Hashtable(); private static Hashtable name_to_id = new Hashtable(); public static void loadConfig() { final String SCRIPT = Config.BALANCE_CONFIG_FILE; try { Properties scriptSetting = new Properties(); InputStream is = new FileInputStream(new File(SCRIPT)); scriptSetting.load(is); is.close(); Set key_set = scriptSetting.keySet(); for(Object key : key_set){ String key_string = (String) key; String[] class_and_type = key_string.split("__"); if(class_and_type.length < 2) continue; String class_name = class_and_type[0].replace("_", " "); if(class_name.equals("Eva s Saint")) class_name = "Eva's Saint"; String type = class_and_type[1]; Integer class_id = CharTemplateTable.getClassIdByName(class_name)-1; id_to_name.put(class_id, class_name); name_to_id.put(class_name, class_id); if(type.equals("ToFighter")){ damage_to_fighter.put(class_id, Double.parseDouble(scriptSetting.getProperty(key_string))); }else if(type.equals("ToMage")){ damage_to_mage.put(class_id, Double.parseDouble(scriptSetting.getProperty(key_string))); }else if(type.equals("ByFighter")){ damage_by_fighter.put(class_id, Double.parseDouble(scriptSetting.getProperty(key_string))); }else if(type.equals("ByMage")){ damage_by_mage.put(class_id, Double.parseDouble(scriptSetting.getProperty(key_string))); } //System.out.println("class: "+class_name+" key: "+key_string+" classid: "+class_id); //System.out.println("multiplier: "+Double.parseDouble(scriptSetting.getProperty(key_string))); } _log.info("Loaded "+id_to_name.size()+" classes Damages configurations"); /*int class_id = 114; System.out.println("class: "+id_to_name.get(class_id)+" classid: "+class_id); System.out.println("multiplier to fighter: "+damage_to_fighter.get(class_id)); System.out.println("multiplier to mage: "+damage_to_mage.get(class_id)); System.out.println("multiplier by fighter: "+damage_by_fighter.get(class_id)); System.out.println("multiplier by mage: "+damage_by_mage.get(class_id)); */ } catch(Exception e) { e.printStackTrace(); throw new Error("Failed to Load " + SCRIPT + " File."); } } public static void main(String[] args){ ClassDamageManager.loadConfig(); } public static double getClassDamageToMage(int id){ Double multiplier = damage_to_mage.get(id); if(multiplier!=null) return multiplier; else return 1; } public static double getClassDamageToFighter(int id){ Double multiplier = damage_to_fighter.get(id); if(multiplier!=null) return multiplier; else return 1; } public static double getClassDamageByMage(int id){ Double multiplier = damage_by_mage.get(id); if(multiplier!=null) return multiplier; else return 1; } public static double getClassDamageByFighter(int id){ Double multiplier = damage_by_fighter.get(id); if(multiplier!=null) return multiplier; else return 1; } public static int getIdByName(String name){ Integer id = name_to_id.get(name); if(id!=null) return id; else return 0; } public static String getNameById(int id){ String name = id_to_name.get(id); if(name!=null) return name; else return ""; } /** * return the product between the attackerMultiplier and attackedMultiplier * configured into the classDamages.properties * @param attacker * @param attacked * @return output = attackerMulti*attackedMulti */ public static double getDamageMultiplier(L2PcInstance attacker, L2PcInstance attacked){ if(attacker==null || attacked==null) return 1; double attackerMulti = 1; if(attacked.isMageClass()) attackerMulti = getClassDamageToMage(attacker.getClassId().getId()); else attackerMulti = getClassDamageToFighter(attacker.getClassId().getId()); double attackedMulti = 1; if(attacker.isMageClass()) attackedMulti = getClassDamageByMage(attacked.getClassId().getId()); else attackedMulti = getClassDamageByFighter(attacked.getClassId().getId()); double output = attackerMulti*attackedMulti; if(Config.ENABLE_CLASS_DAMAGES_LOGGER){ _log.info("ClassDamageManager -"); _log.info("ClassDamageManager - Attacker: "+attacker.getName()+" Class: "+getNameById(attacker.getClassId().getId())+" ClassId: "+attacker.getClassId().getId()+" isMage: "+attacker.isMageClass()+" mult: "+attackerMulti); _log.info("ClassDamageManager - Attacked: "+attacked.getName()+" Class: "+getNameById(attacked.getClassId().getId())+" ClassId: "+attacked.getClassId().getId()+" isMage: "+attacked.isMageClass()+" mult: "+attackedMulti); _log.info("ClassDamageManager - FinalMultiplier: "+output); _log.info("ClassDamageManager -"); } return output; } }