All pastes #2073075 Raw Edit

Error

public text v1 · immutable
#2073075 ·published 2011-06-01 04:21 UTC
rendered paste body
/*
 * 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<Integer, Double> damage_to_mage = new Hashtable<Integer, Double>();
	private static Hashtable<Integer, Double> damage_to_fighter = new Hashtable<Integer, Double>();
	private static Hashtable<Integer, Double> damage_by_mage = new Hashtable<Integer, Double>();
	private static Hashtable<Integer, Double> damage_by_fighter = new Hashtable<Integer, Double>();

	private static Hashtable<Integer, String> id_to_name = new Hashtable<Integer, String>();
	private static Hashtable<String, Integer> name_to_id = new Hashtable<String, Integer>();
	
	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<Object> 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;

	}

}