Advertisement
VANPER

classDamageManager

Jan 12th, 2024
1,029
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.72 KB | None | 0 0
  1. =============================
  2. Index: GameServer.java
  3. =============================
  4.  
  5. +import net.sf.l2j.gameserver.dev.manager.ClassDamageManager;
  6. import net.sf.l2j.gameserver.geoengine.GeoEngine;
  7.  
  8.  
  9. -StringUtil.printSection("Characters");
  10.  
  11. +StringUtil.printSection("Characters");
  12.  
  13. + ClassDamageManager.loadConfig();
  14.  
  15.  
  16. =============================
  17. Index: AdminAdmin.java
  18. =============================
  19.  
  20. +import net.sf.l2j.gameserver.dev.manager.ClassDamageManager;
  21. import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
  22.  
  23. else if (type.startsWith("config"))
  24. {
  25.     Config.loadGameServer();
  26. +   ClassDamageManager.reload();
  27.     activeChar.sendMessage("Configs files have been reloaded.");
  28. }
  29.  
  30.  
  31. =============================
  32. Index: net/sf/l2j/gameserver/dev/manager/ClassDamageManager.java
  33. =============================
  34.  
  35. +   package net.sf.l2j.gameserver.dev.manager;
  36. +  
  37. +   import java.io.File;
  38. +   import java.io.FileInputStream;
  39. +   import java.io.InputStream;
  40. +   import java.util.HashMap;
  41. +   import java.util.Hashtable;
  42. +   import java.util.Map;
  43. +   import java.util.Properties;
  44. +   import java.util.Set;
  45. +   import java.util.logging.Logger;
  46. +  
  47. +   import net.sf.l2j.gameserver.model.actor.Player;
  48. +  
  49. +   /**
  50. +    * @author BAN - L2JDEV
  51. +    */
  52. +   public class ClassDamageManager
  53. +   {
  54. +       private static Logger LOG = Logger.getLogger(ClassDamageManager.class.getName());
  55. +       private static final Map<String, Integer> classNameToIdMap = new HashMap<>();
  56. +      
  57. +       private static Hashtable<Integer, Double> damage_to_mage = new Hashtable<>();
  58. +       private static Hashtable<Integer, Double> damage_to_fighter = new Hashtable<>();
  59. +      
  60. +       private static Hashtable<Integer, Double> damage_by_mage = new Hashtable<>();
  61. +       private static Hashtable<Integer, Double> damage_by_fighter = new Hashtable<>();
  62. +      
  63. +       private static Hashtable<Integer, String> id_to_name = new Hashtable<>();
  64. +       private static Hashtable<String, Integer> name_to_id = new Hashtable<>();
  65. +      
  66. +       public static final String CLASS_DAMAGES_FILE = "./config/classDamages.properties";
  67. +      
  68. +       static
  69. +       {
  70. +           classNameToIdMap.put("Human Fighter", 0);
  71. +           classNameToIdMap.put("Warrior", 1);
  72. +           classNameToIdMap.put("Gladiator", 2);
  73. +           classNameToIdMap.put("Warlord", 3);
  74. +           classNameToIdMap.put("Human Knight", 4);
  75. +           classNameToIdMap.put("Paladin", 5);
  76. +           classNameToIdMap.put("Dark Avenger", 6);
  77. +           classNameToIdMap.put("Rogue", 7);
  78. +           classNameToIdMap.put("Treasure Hunter", 8);
  79. +           classNameToIdMap.put("Hawkeye", 9);
  80. +           classNameToIdMap.put("Human Mage", 10);
  81. +           classNameToIdMap.put("Human Wizard", 11);
  82. +           classNameToIdMap.put("Sorcerer", 12);
  83. +           classNameToIdMap.put("Necromancer", 13);
  84. +           classNameToIdMap.put("Warlock", 14);
  85. +           classNameToIdMap.put("Cleric", 15);
  86. +           classNameToIdMap.put("Bishop", 16);
  87. +           classNameToIdMap.put("Human Prophet", 17);
  88. +           classNameToIdMap.put("Elf Fighter", 18);
  89. +           classNameToIdMap.put("Elf Knight", 19);
  90. +           classNameToIdMap.put("Temple Knight", 20);
  91. +           classNameToIdMap.put("Swordsinger", 21);
  92. +           classNameToIdMap.put("Scout", 22);
  93. +           classNameToIdMap.put("Plains Walker", 23);
  94. +           classNameToIdMap.put("Silver Ranger", 24);
  95. +           classNameToIdMap.put("Elf Mage", 25);
  96. +           classNameToIdMap.put("Elf Wizard", 26);
  97. +           classNameToIdMap.put("Spellsinger", 27);
  98. +           classNameToIdMap.put("Elemental Summoner", 28);
  99. +           classNameToIdMap.put("Oracle", 29);
  100. +           classNameToIdMap.put("Elder", 30);
  101. +           classNameToIdMap.put("DE Fighter", 31);
  102. +           classNameToIdMap.put("Palus Knight", 32);
  103. +           classNameToIdMap.put("Shillien Knight", 33);
  104. +           classNameToIdMap.put("Bladedancer", 34);
  105. +           classNameToIdMap.put("Assassin", 35);
  106. +           classNameToIdMap.put("Abyss Walker", 36);
  107. +           classNameToIdMap.put("Phantom Ranger", 37);
  108. +           classNameToIdMap.put("DE Mage", 38);
  109. +           classNameToIdMap.put("DE Wizard", 39);
  110. +           classNameToIdMap.put("Spell Howler", 40);
  111. +           classNameToIdMap.put("Phantom Summoner", 41);
  112. +           classNameToIdMap.put("Shillien Oracle", 42);
  113. +           classNameToIdMap.put("Shillien Elder", 43);
  114. +           classNameToIdMap.put("Orc Fighter", 44);
  115. +           classNameToIdMap.put("Raider", 45);
  116. +           classNameToIdMap.put("Destroyer", 46);
  117. +           classNameToIdMap.put("Monk", 47);
  118. +           classNameToIdMap.put("Tyrant", 48);
  119. +           classNameToIdMap.put("Orc Mage", 49);
  120. +           classNameToIdMap.put("Shaman", 50);
  121. +           classNameToIdMap.put("Overlord", 51);
  122. +           classNameToIdMap.put("Warcryer", 52);
  123. +           classNameToIdMap.put("Dwarf Fighter", 53);
  124. +           classNameToIdMap.put("Scavenger", 54);
  125. +           classNameToIdMap.put("Bounty Hunter", 55);
  126. +           classNameToIdMap.put("Artisan", 56);
  127. +           classNameToIdMap.put("Warsmith", 57);
  128. +           classNameToIdMap.put("Duelist", 88);
  129. +           classNameToIdMap.put("DreadNought", 89);
  130. +           classNameToIdMap.put("Phoenix Knight", 90);
  131. +           classNameToIdMap.put("Hell Knight", 91);
  132. +           classNameToIdMap.put("Sagittarius", 92);
  133. +           classNameToIdMap.put("Adventurer", 93);
  134. +           classNameToIdMap.put("Archmage", 94);
  135. +           classNameToIdMap.put("Soultaker", 95);
  136. +           classNameToIdMap.put("Arcana Lord", 96);
  137. +           classNameToIdMap.put("Cardinal", 97);
  138. +           classNameToIdMap.put("Hierophant", 98);
  139. +           classNameToIdMap.put("Eva Templar", 99);
  140. +           classNameToIdMap.put("Sword Muse", 100);
  141. +           classNameToIdMap.put("Wind Rider", 101);
  142. +           classNameToIdMap.put("Moonlight Sentinel", 102);
  143. +           classNameToIdMap.put("Mystic Muse", 103);
  144. +           classNameToIdMap.put("Elemental Master", 104);
  145. +           classNameToIdMap.put("Eva's Saint", 105);
  146. +           classNameToIdMap.put("Shillien Templar", 106);
  147. +           classNameToIdMap.put("Spectral Dancer", 107);
  148. +           classNameToIdMap.put("Ghost Hunter", 108);
  149. +           classNameToIdMap.put("Ghost Sentinel", 109);
  150. +           classNameToIdMap.put("Storm Screamer", 110);
  151. +           classNameToIdMap.put("Spectral Master", 111);
  152. +           classNameToIdMap.put("Shillen Saint", 112);
  153. +           classNameToIdMap.put("Titan", 113);
  154. +           classNameToIdMap.put("Grand Khauatari", 114);
  155. +           classNameToIdMap.put("Dominator", 115);
  156. +           classNameToIdMap.put("Doomcryer", 116);
  157. +           classNameToIdMap.put("Fortune Seeker", 117);
  158. +           classNameToIdMap.put("Maestro", 118);
  159. +  
  160. +       }
  161. +      
  162. +       public static int getClassIdByName(String className)
  163. +       {
  164. +           // Check for special cases
  165. +           if (className.equals("Eva s Saint"))
  166. +           {
  167. +               className = "Eva's Saint";
  168. +           }
  169. +          
  170. +           // Retrieve class ID from the map, default to -1 if not found
  171. +           return classNameToIdMap.getOrDefault(className, -1);
  172. +       }
  173. +      
  174. +       public static void reload()
  175. +       {
  176. +           classNameToIdMap.clear();
  177. +           id_to_name.clear();
  178. +           name_to_id.clear();
  179. +           damage_to_fighter.clear();
  180. +           damage_to_mage.clear();
  181. +           damage_by_fighter.clear();
  182. +           damage_by_mage.clear();
  183. +          
  184. +           final String SCRIPT = CLASS_DAMAGES_FILE;
  185. +           File file = new File(SCRIPT);
  186. +          
  187. +           try (InputStream is = new FileInputStream(file))
  188. +           {
  189. +               final Properties scriptSetting = new Properties();
  190. +               scriptSetting.load(is);
  191. +              
  192. +               final Set<Object> key_set = scriptSetting.keySet();
  193. +              
  194. +               for (final Object key : key_set)
  195. +               {
  196. +                   final String key_string = (String) key;
  197. +                  
  198. +                   final String[] class_and_type = key_string.split("__");
  199. +                  
  200. +                   String class_name = class_and_type[0].replace("_", " ");
  201. +                  
  202. +                   // Check for special cases
  203. +                   if (class_name.equals("Eva s Saint"))
  204. +                   {
  205. +                       class_name = "Eva's Saint";
  206. +                   }
  207. +                  
  208. +                   final String type = class_and_type[1];
  209. +                  
  210. +                   final Integer classId = getClassIdByName(class_name);
  211. +                  
  212. +                   if (classId != -1)
  213. +                   {
  214. +                       id_to_name.put(classId, class_name);
  215. +                       name_to_id.put(class_name, classId);
  216. +                      
  217. +                       if (type.equals("ToFighter"))
  218. +                       {
  219. +                           damage_to_fighter.put(classId, Double.parseDouble(scriptSetting.getProperty(key_string)));
  220. +                       }
  221. +                       else if (type.equals("ToMage"))
  222. +                       {
  223. +                           damage_to_mage.put(classId, Double.parseDouble(scriptSetting.getProperty(key_string)));
  224. +                       }
  225. +                       else if (type.equals("ByFighter"))
  226. +                       {
  227. +                           damage_by_fighter.put(classId, Double.parseDouble(scriptSetting.getProperty(key_string)));
  228. +                       }
  229. +                       else if (type.equals("ByMage"))
  230. +                       {
  231. +                           damage_by_mage.put(classId, Double.parseDouble(scriptSetting.getProperty(key_string)));
  232. +                       }
  233. +                   }
  234. +               }
  235. +              
  236. +           }
  237. +           catch (final Exception e)
  238. +           {
  239. +               LOG.severe("Erro ao carregar configurações de dano de classe: " + e.getMessage());
  240. +               e.printStackTrace();
  241. +           }
  242. +       }
  243. +      
  244. +       public static void loadConfig()
  245. +       {
  246. +           final String SCRIPT = CLASS_DAMAGES_FILE;
  247. +           File file = new File(SCRIPT);
  248. +          
  249. +           try (InputStream is = new FileInputStream(file))
  250. +           {
  251. +               final Properties scriptSetting = new Properties();
  252. +               scriptSetting.load(is);
  253. +              
  254. +               final Set<Object> key_set = scriptSetting.keySet();
  255. +              
  256. +               for (final Object key : key_set)
  257. +               {
  258. +                   final String key_string = (String) key;
  259. +                  
  260. +                   final String[] class_and_type = key_string.split("__");
  261. +                  
  262. +                   String class_name = class_and_type[0].replace("_", " ");
  263. +                  
  264. +                   // Check for special cases
  265. +                   if (class_name.equals("Eva s Saint"))
  266. +                   {
  267. +                       class_name = "Eva's Saint";
  268. +                   }
  269. +                  
  270. +                   final String type = class_and_type[1];
  271. +                  
  272. +                   final Integer classId = getClassIdByName(class_name);
  273. +                  
  274. +                   if (classId != -1)
  275. +                   {
  276. +                       id_to_name.put(classId, class_name);
  277. +                       name_to_id.put(class_name, classId);
  278. +                      
  279. +                       if (type.equals("ToFighter"))
  280. +                       {
  281. +                           damage_to_fighter.put(classId, Double.parseDouble(scriptSetting.getProperty(key_string)));
  282. +                       }
  283. +                       else if (type.equals("ToMage"))
  284. +                       {
  285. +                           damage_to_mage.put(classId, Double.parseDouble(scriptSetting.getProperty(key_string)));
  286. +                       }
  287. +                       else if (type.equals("ByFighter"))
  288. +                       {
  289. +                           damage_by_fighter.put(classId, Double.parseDouble(scriptSetting.getProperty(key_string)));
  290. +                       }
  291. +                       else if (type.equals("ByMage"))
  292. +                       {
  293. +                           damage_by_mage.put(classId, Double.parseDouble(scriptSetting.getProperty(key_string)));
  294. +                       }
  295. +                   }
  296. +               }
  297. +              
  298. +               LOG.info("ClassDamageManager: Loaded " + id_to_name.size() + " class damage configurations");
  299. +           }
  300. +           catch (final Exception e)
  301. +           {
  302. +               LOG.severe("Erro ao carregar configurações de dano de classe: " + e.getMessage());
  303. +               e.printStackTrace();
  304. +           }
  305. +       }
  306. +      
  307. +       public static double getClassDamageToMage(final int id)
  308. +       {
  309. +          
  310. +           final Double multiplier = damage_to_mage.get(id);
  311. +          
  312. +           if (multiplier != null)
  313. +               return multiplier;
  314. +           return 1;
  315. +       }
  316. +      
  317. +       public static double getClassDamageToFighter(final int id)
  318. +       {
  319. +           final Double multiplier = damage_to_fighter.get(id);
  320. +           if (multiplier != null)
  321. +               return multiplier;
  322. +           return 1;
  323. +       }
  324. +      
  325. +       public static double getClassDamageByMage(final int id)
  326. +       {
  327. +           final Double multiplier = damage_by_mage.get(id);
  328. +           if (multiplier != null)
  329. +               return multiplier;
  330. +           return 1;
  331. +       }
  332. +      
  333. +       public static double getClassDamageByFighter(final int id)
  334. +       {
  335. +           final Double multiplier = damage_by_fighter.get(id);
  336. +           if (multiplier != null)
  337. +               return multiplier;
  338. +           return 1;
  339. +       }
  340. +      
  341. +       public static int getIdByName(final String name)
  342. +       {
  343. +          
  344. +           final Integer id = name_to_id.get(name);
  345. +           if (id != null)
  346. +               return id;
  347. +           return 0;
  348. +       }
  349. +      
  350. +       public static String getNameById(final int id)
  351. +       {
  352. +          
  353. +           final String name = id_to_name.get(id);
  354. +           if (name != null)
  355. +               return name;
  356. +           return "";
  357. +       }
  358. +      
  359. +       public static double getDamageMultiplier(Player attacker, Player attacked)
  360. +       {
  361. +          
  362. +           if (attacker == null || attacked == null)
  363. +               return 1;
  364. +          
  365. +           double attackerMulti = 1;
  366. +          
  367. +           if (attacked.isMageClass())
  368. +               attackerMulti = getClassDamageToMage(attacker.getClassId().getId());
  369. +           else
  370. +               attackerMulti = getClassDamageToFighter(attacker.getClassId().getId());
  371. +          
  372. +           double attackedMulti = 1;
  373. +          
  374. +           if (attacker.isMageClass())
  375. +               attackedMulti = getClassDamageByMage(attacked.getClassId().getId());
  376. +           else
  377. +               attackedMulti = getClassDamageByFighter(attacked.getClassId().getId());
  378. +          
  379. +           final double output = attackerMulti * attackedMulti;
  380. +           return output;
  381. +       }
  382. +      
  383. +   }
  384.  
  385. =============================
  386. Index: net.sf.l2j.gameserver.handler.skillhandlers.Pdam.java
  387. =============================
  388.  
  389. +import net.sf.l2j.gameserver.dev.manager.ClassDamageManager;
  390. import net.sf.l2j.gameserver.enums.items.ShotType;
  391.  
  392. +   if (activeChar instanceof Player && target instanceof Player)
  393. +   {
  394. +       damage *= ClassDamageManager.getDamageMultiplier((Player) activeChar, (Player) target);
  395. +   }
  396.    
  397.     activeChar.sendDamageMessage(target, damage, false, crit, false);
  398.    
  399. =============================
  400. Index: net.sf.l2j.gameserver.handler.skillhandlers.Mdam.java
  401. =============================
  402.  
  403.  
  404. // Manage cast break of the target (calculating rate, sending message...)
  405.                 Formulas.calcCastBreak(target, damage);
  406.                
  407. +   if (activeChar instanceof Player && target instanceof Player)
  408. +   {
  409. +       damage *= ClassDamageManager.getDamageMultiplier((Player) activeChar, (Player) target);
  410. +   }
  411.    
  412.     // vengeance reflected damage
  413.     if ((reflect & Formulas.SKILL_REFLECT_VENGEANCE) != 0)
  414.    
  415. =============================
  416. Index: config/classDamages.properties
  417. =============================
  418.  
  419. +   #============================================================#
  420. +   #                   Class Balance System                     #
  421. +   #============================================================#
  422. +   # Example: 1.0 = default, 1.1 = +10% power, 0.9 = -10% power,
  423. +   # 2.0 = +200% (x2) power
  424. +   #-------------------------------------------------------------
  425. +   # Damage to Fighter                                          -
  426. +   #-------------------------------------------------------------
  427. +   # 2nd class
  428. +   Gladiator__ToFighter = 1.0
  429. +   Warlord__ToFighter = 1.0
  430. +   Paladin__ToFighter = 1.0
  431. +   Dark_Avenger__ToFighter = 1.0
  432. +   Hawkeye__ToFighter = 1.3
  433. +   Treasure_Hunter__ToFighter = 0.8
  434. +   Sorcerer__ToFighter = 1.0
  435. +   Necromancer__ToFighter = 1.0
  436. +   Warlock__ToFighter = 1.0
  437. +   Bishop__ToFighter = 1.0
  438. +   Prophet__ToFighter = 1.0
  439. +   Temple_Knight__ToFighter = 1.0
  440. +   Swordsinger__ToFighter = 1.0
  441. +   Plainswalker__ToFighter = 0.8
  442. +   Silver_Ranger__ToFighter = 1.3
  443. +   Spellsinger__ToFighter = 1.0
  444. +   Elemental_Summoner__ToFighter = 1.0
  445. +   Elven_Elder__ToFighter = 1.0
  446. +   Shillien_Knight__ToFighter = 1.0
  447. +   Bladedancer__ToFighter = 1.0
  448. +   Abyss_Walker__ToFighter = 0.8
  449. +   Phantom_Ranger__ToFighter = 1.3
  450. +   Spellhowler__ToFighter = 1.0
  451. +   Phantom_Summoner__ToFighter = 1.0
  452. +   Shillien_Elder__ToFighter = 1.0
  453. +   Destroyer__ToFighter = 1.0
  454. +   Tyrant__ToFighter = 1.0
  455. +   Overlord__ToFighter = 1.0
  456. +   Warcryer__ToFighter = 1.0
  457. +   Bounty_Hunter__ToFighter = 1.0
  458. +   Warsmith__ToFighter = 1.0
  459. +   # 3rd class
  460. +   Duelist__ToFighter = 1.0
  461. +   DreadNought__ToFighter = 1.0
  462. +   Phoenix_Knight__ToFighter = 1.0
  463. +   Hell_Knight__ToFighter = 1.0
  464. +   Sagittarius__ToFighter = 1.3
  465. +   Adventurer__ToFighter = 0.8
  466. +   Archmage__ToFighter = 1.0
  467. +   Soultaker__ToFighter = 1.0
  468. +   Arcana_Lord__ToFighter = 1.0
  469. +   Cardinal__ToFighter = 1.0
  470. +   Hierophant__ToFighter = 1.0
  471. +   Eva_Templar__ToFighter = 1.0
  472. +   Sword_Muse__ToFighter = 1.0
  473. +   Wind_Rider__ToFighter = 0.8
  474. +   Moonlight_Sentinel__ToFighter = 1.3
  475. +   Mystic_Muse__ToFighter = 1.0
  476. +   Elemental_Master__ToFighter = 1.0
  477. +   Eva_s_Saint__ToFighter = 1.0
  478. +   Shillien_Templar__ToFighter = 1.0
  479. +   Spectral_Dancer__ToFighter = 1.0
  480. +   Ghost_Hunter__ToFighter = 0.8
  481. +   Ghost_Sentinel__ToFighter = 1.3
  482. +   Storm_Screamer__ToFighter = 1.0
  483. +   Spectral_Master__ToFighter = 1.0
  484. +   Shillien_Saint__ToFighter = 1.0
  485. +   Titan__ToFighter = 1.0
  486. +   Grand_Khauatari__ToFighter = 1.0
  487. +   Dominator__ToFighter = 1.0
  488. +   Doomcryer__ToFighter = 1.0
  489. +   Fortune_Seeker__ToFighter = 1.0
  490. +   Maestro__ToFighter = 1.0
  491. +   #-------------------------------------------------------------
  492. +   # Damage to Mage                                             -
  493. +   #-------------------------------------------------------------
  494. +   # 2nd class
  495. +   Gladiator__ToMage = 1.0
  496. +   Warlord__ToMage = 1.0
  497. +   Paladin__ToMage = 1.0
  498. +   Dark_Avenger__ToMage = 1.0
  499. +   Hawkeye__ToMage = 1.3
  500. +   Treasure_Hunter__ToMage = 0.8
  501. +   Sorcerer__ToMage = 1.0
  502. +   Necromancer__ToMage = 1.0
  503. +   Warlock__ToMage = 1.0
  504. +   Bishop__ToMage = 1.0
  505. +   Prophet__ToMage = 1.0
  506. +   Temple_Knight__ToMage = 1.0
  507. +   Swordsinger__ToMage = 1.0
  508. +   Plainswalker__ToMage = 0.8
  509. +   Silver_Ranger__ToMage = 1.3
  510. +   Spellsinger__ToMage = 1.0
  511. +   Elemental_Summoner__ToMage = 1.0
  512. +   Elven_Elder__ToMage = 1.0
  513. +   Shillien_Knight__ToMage = 1.0
  514. +   Bladedancer__ToMage = 1.0
  515. +   Abyss_Walker__ToMage = 0.8
  516. +   Phantom_Ranger__ToMage = 1.2
  517. +   Spellhowler__ToMage = 1.0
  518. +   Phantom_Summoner__ToMage = 1.0
  519. +   Shillien_Elder__ToMage = 1.0
  520. +   Destroyer__ToMage = 1.0
  521. +   Tyrant__ToMage = 1.0
  522. +   Overlord__ToMage = 1.0
  523. +   Warcryer__ToMage = 1.0
  524. +   Bounty_Hunter__ToMage = 1.0
  525. +   Warsmith__ToMage = 1.0
  526. +   # 3rd class
  527. +   Duelist__ToMage = 1.0
  528. +   DreadNought__ToMage = 1.0
  529. +   Phoenix_Knight__ToMage = 1.0
  530. +   Hell_Knight__ToMage = 1.0
  531. +   Sagittarius__ToMage = 1.3
  532. +   Adventurer__ToMage = 0.8
  533. +   Archmage__ToMage = 1.0
  534. +   Soultaker__ToMage = 1.0
  535. +   Arcana_Lord__ToMage = 1.0
  536. +   Cardinal__ToMage = 1.0
  537. +   Hierophant__ToMage = 1.0
  538. +   Eva_Templar__ToMage = 1.0
  539. +   Sword_Muse__ToMage = 1.0
  540. +   Wind_Rider__ToMage = 0.8
  541. +   Moonlight_Sentinel__ToMage = 1.3
  542. +   Mystic_Muse__ToMage = 1.0
  543. +   Elemental_Master__ToMage = 1.0
  544. +   Eva_s_Saint__ToMage = 1.0
  545. +   Shillien_Templar__ToMage = 1.0
  546. +   Spectral_Dancer__ToMage = 1.0
  547. +   Ghost_Hunter__ToMage = 0.8
  548. +   Ghost_Sentinel__ToMage = 1.2
  549. +   Storm_Screamer__ToMage = 1.0
  550. +   Spectral_Master__ToMage = 1.0
  551. +   Shillien_Saint__ToMage = 1.0
  552. +   Titan__ToMage = 1.0
  553. +   Grand_Khauatari__ToMage = 1.0
  554. +   Dominator__ToMage = 1.0
  555. +   Doomcryer__ToMage = 1.0
  556. +   Fortune_Seeker__ToMage = 1.0
  557. +   Maestro__ToMage = 1.0
  558. +   #-------------------------------------------------------------
  559. +   # Damage By Fighter                                          -
  560. +   #-------------------------------------------------------------
  561. +   # 2nd class
  562. +   Gladiator__ByFighter = 1.0
  563. +   Warlord__ByFighter = 1.0
  564. +   Paladin__ByFighter = 1.0
  565. +   Dark_Avenger__ByFighter = 1.0
  566. +   Hawkeye__ByFighter = 1.0
  567. +   Treasure_Hunter__ByFighter = 1.0
  568. +   Sorcerer__ByFighter = 1.0
  569. +   Necromancer__ByFighter = 1.0
  570. +   Warlock__ByFighter = 1.0
  571. +   Bishop__ByFighter = 1.0
  572. +   Prophet__ByFighter = 1.0
  573. +   Temple_Knight__ByFighter = 1.0
  574. +   Swordsinger__ByFighter = 1.0
  575. +   Plainswalker__ByFighter = 1.0
  576. +   Silver_Ranger__ByFighter = 1.0
  577. +   Spellsinger__ByFighter = 1.0
  578. +   Elemental_Summoner__ByFighter = 1.0
  579. +   Elven_Elder__ByFighter = 1.0
  580. +   Shillien_Knight__ByFighter = 1.0
  581. +   Bladedancer__ByFighter = 1.0
  582. +   Abyss_Walker__ByFighter = 1.0
  583. +   Phantom_Ranger__ByFighter = 1.0
  584. +   Spellhowler__ByFighter = 1.0
  585. +   Phantom_Summoner__ByFighter = 1.0
  586. +   Shillien_Elder__ByFighter = 1.0
  587. +   Destroyer__ByFighter = 1.0
  588. +   Tyrant__ByFighter = 1.0
  589. +   Overlord__ByFighter = 1.0
  590. +   Warcryer__ByFighter = 1.0
  591. +   Bounty_Hunter__ByFighter = 1.0
  592. +   Warsmith__ByFighter = 1.0
  593. +   # 3rd class
  594. +   Duelist__ByFighter = 1.0
  595. +   DreadNought__ByFighter = 1.0
  596. +   Phoenix_Knight__ByFighter = 1.0
  597. +   Hell_Knight__ByFighter = 1.0
  598. +   Sagittarius__ByFighter = 1.0
  599. +   Adventurer__ByFighter = 1.0
  600. +   Archmage__ByFighter = 1.0
  601. +   Soultaker__ByFighter = 1.0
  602. +   Arcana_Lord__ByFighter = 1.0
  603. +   Cardinal__ByFighter = 1.0
  604. +   Hierophant__ByFighter = 1.0
  605. +   Eva_Templar__ByFighter = 1.0
  606. +   Sword_Muse__ByFighter = 1.0
  607. +   Wind_Rider__ByFighter = 1.0
  608. +   Moonlight_Sentinel__ByFighter = 1.0
  609. +   Mystic_Muse__ByFighter = 1.0
  610. +   Elemental_Master__ByFighter = 1.0
  611. +   Eva_s_Saint__ByFighter = 1.0
  612. +   Shillien_Templar__ByFighter = 1.0
  613. +   Spectral_Dancer__ByFighter = 1.0
  614. +   Ghost_Hunter__ByFighter = 1.0
  615. +   Ghost_Sentinel__ByFighter = 1.0
  616. +   Storm_Screamer__ByFighter = 1.0
  617. +   Spectral_Master__ByFighter = 1.0
  618. +   Shillien_Saint__ByFighter = 1.0
  619. +   Titan__ByFighter = 1.0
  620. +   Grand_Khauatari__ByFighter = 1.0
  621. +   Dominator__ByFighter = 1.0
  622. +   Doomcryer__ByFighter = 1.0
  623. +   Fortune_Seeker__ByFighter = 1.0
  624. +   Maestro__ByFighter = 1.0
  625. +   #-------------------------------------------------------------
  626. +   # Damage By Mage                                             -
  627. +   #-------------------------------------------------------------
  628. +   # 2nd class
  629. +   Gladiator__ByMage = 1.0
  630. +   Warlord__ByMage = 1.0
  631. +   Paladin__ByMage = 1.0
  632. +   Dark_Avenger__ByMage = 1.0
  633. +   Hawkeye__ByMage = 0.8
  634. +   Treasure_Hunter__ByMage = 1.0
  635. +   Sorcerer__ByMage = 1.0
  636. +   Necromancer__ByMage = 1.0
  637. +   Warlock__ByMage = 1.0
  638. +   Bishop__ByMage = 1.0
  639. +   Prophet__ByMage = 1.0
  640. +   Temple_Knight__ByMage = 1.0
  641. +   Swordsinger__ByMage = 1.0
  642. +   Plainswalker__ByMage = 1.0
  643. +   Silver_Ranger__ByMage = 1.0
  644. +   Spellsinger__ByMage = 0.8
  645. +   Elemental_Summoner__ByMage = 1.0
  646. +   Elven_Elder__ByMage = 1.0
  647. +   Shillien_Knight__ByMage = 1.0
  648. +   Bladedancer__ByMage = 1.0
  649. +   Abyss_Walker__ByMage = 1.0
  650. +   Phantom_Ranger__ByMage = 1.0
  651. +   Spellhowler__ByMage = 1.0
  652. +   Phantom_Summoner__ByMage = 1.0
  653. +   Shillien_Elder__ByMage = 1.0
  654. +   Destroyer__ByMage = 1.0
  655. +   Tyrant__ByMage = 1.0
  656. +   Overlord__ByMage = 1.0
  657. +   Warcryer__ByMage = 1.0
  658. +   Bounty_Hunter__ByMage = 1.0
  659. +   Warsmith__ByMage = 1.0
  660. +   # 3rd
  661. +   Duelist__ByMage = 1.0
  662. +   DreadNought__ByMage = 1.0
  663. +   Phoenix_Knight__ByMage = 1.0
  664. +   Hell_Knight__ByMage = 1.0
  665. +   Sagittarius__ByMage = 0.8
  666. +   Adventurer__ByMage = 1.0
  667. +   Archmage__ByMage = 0.8
  668. +   Soultaker__ByMage = 1.0
  669. +   Arcana_Lord__ByMage = 1.0
  670. +   Cardinal__ByMage = 1.0
  671. +   Hierophant__ByMage = 1.0
  672. +   Eva_Templar__ByMage = 1.0
  673. +   Sword_Muse__ByMage = 1.0
  674. +   Wind_Rider__ByMage = 1.0
  675. +   Moonlight_Sentinel__ByMage = 1.0
  676. +   Mystic_Muse__ByMage = 0.8
  677. +   Elemental_Master__ByMage = 1.0
  678. +   Eva_s_Saint__ByMage = 1.0
  679. +   Shillien_Templar__ByMage = 1.0
  680. +   Spectral_Dancer__ByMage = 1.0
  681. +   Ghost_Hunter__ByMage = 1.0
  682. +   Ghost_Sentinel__ByMage = 1.0
  683. +   Storm_Screamer__ByMage = 1.0
  684. +   Spectral_Master__ByMage = 1.0
  685. +   Shillien_Saint__ByMage = 1.0
  686. +   Titan__ByMage = 1.0
  687. +   Grand_Khauatari__ByMage = 1.0
  688. +   Dominator__ByMage = 1.0
  689. +   Doomcryer__ByMage = 1.0
  690. +   Fortune_Seeker__ByMage = 1.0
  691. +   Maestro__ByMage = 1.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement