Compare commits
	
		
			2 Commits
		
	
	
		
			91f44437f0
			...
			493cb5ea34
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 493cb5ea34 | |
|  | 18a1f4b24e | 
|  | @ -3904,7 +3904,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject implements Se | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (gain > 0) { |         if (gain > 0) { | ||||||
|             List<Integer> integers = Start.ConfigItemJson.get("jb"); |             List<Integer> integers = Start.ConfigItemJson.get("-1"); | ||||||
|             if (integers == null) return; |             if (integers == null) return; | ||||||
|             if (this.meso > integers.get(0)) { |             if (this.meso > integers.get(0)) { | ||||||
|                 int i = this.meso / integers.get(0); |                 int i = this.meso / integers.get(0); | ||||||
|  |  | ||||||
|  | @ -1181,22 +1181,6 @@ public class Start { | ||||||
|         公告数量 = 0; |         公告数量 = 0; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         String property = System.getProperty("user.dir"); |         特殊控制台.initTWinfo(); | ||||||
|         FileReader fileReader = new FileReader(property + "\\配置文件\\伤害.txt"); |  | ||||||
|         String result = fileReader.readString(); |  | ||||||
|         //转json |  | ||||||
|         ConfigValuesJson = JSONObject.parseObject(result); |  | ||||||
| 
 |  | ||||||
|         FileReader fileReader2 = new FileReader(property + "\\配置文件\\物品.txt"); |  | ||||||
|         String result2 = fileReader2.readString(); |  | ||||||
|         JSONObject jsonObject = JSONObject.parseObject(result2); |  | ||||||
|         for (String key : jsonObject.keySet()) {             // 步骤2 :ml-citation{ref="1,3" data="citationList"} |  | ||||||
|             JSONArray jsonArray = jsonObject.getJSONArray(key); |  | ||||||
|             List<Integer> intList = new ArrayList<>(); |  | ||||||
|             for (int i = 0; i < jsonArray.size(); i++) {    // 步骤3 :ml-citation{ref="2,3" data="citationList"} |  | ||||||
|                 intList.add(jsonArray.getInteger(i)); |  | ||||||
|             } |  | ||||||
|             Start.ConfigItemJson.put(key, intList); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -996,6 +996,10 @@ public class 特殊控制台 extends JFrame { | ||||||
|         特殊控制台.自定义血量加成比例.setText(String.valueOf(Start.ConfigValuesMap.get("自定义血量加成比例"))); |         特殊控制台.自定义血量加成比例.setText(String.valueOf(Start.ConfigValuesMap.get("自定义血量加成比例"))); | ||||||
|         特殊控制台.自定义魔量加成比例.setText(String.valueOf(Start.ConfigValuesMap.get("自定义魔量加成比例"))); |         特殊控制台.自定义魔量加成比例.setText(String.valueOf(Start.ConfigValuesMap.get("自定义魔量加成比例"))); | ||||||
| 
 | 
 | ||||||
|  |         initTWinfo(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static void initTWinfo(){ | ||||||
|         String property = System.getProperty("user.dir"); |         String property = System.getProperty("user.dir"); | ||||||
|         FileReader fileReader = new FileReader(property + "\\配置文件\\伤害.txt"); |         FileReader fileReader = new FileReader(property + "\\配置文件\\伤害.txt"); | ||||||
|         String result = fileReader.readString(); |         String result = fileReader.readString(); | ||||||
|  |  | ||||||
|  | @ -204,6 +204,7 @@ public class MapleServerHandler extends ChannelInboundHandlerAdapter { | ||||||
|                 } catch (RejectedExecutionException ex) { |                 } catch (RejectedExecutionException ex) { | ||||||
|                 } catch (Exception e) { |                 } catch (Exception e) { | ||||||
|                     if (c.getPlayer() != null && c.getPlayer().isShowErr()) { |                     if (c.getPlayer() != null && c.getPlayer().isShowErr()) { | ||||||
|  |                         e.printStackTrace(); | ||||||
|                         //c.getPlayer().showInfo("数据包异常", true, "包头:" + recv.name() + "(0x" + Integer.toHexString((int)header_num).toUpperCase() + ")"); |                         //c.getPlayer().showInfo("数据包异常", true, "包头:" + recv.name() + "(0x" + Integer.toHexString((int)header_num).toUpperCase() + ")"); | ||||||
|                     } |                     } | ||||||
|                     //  FileoutputUtil.outputFileError("logs\\Except\\Log_Code_Except.txt", (Throwable)e, false); |                     //  FileoutputUtil.outputFileError("logs\\Except\\Log_Code_Except.txt", (Throwable)e, false); | ||||||
|  |  | ||||||
|  | @ -437,7 +437,15 @@ public class DamageParse { | ||||||
| 
 | 
 | ||||||
|                     monster.damage(player, newtotDamageToOneMonster, true, attack.skill); |                     monster.damage(player, newtotDamageToOneMonster, true, attack.skill); | ||||||
|                     if (monster.getHp() > 0) { |                     if (monster.getHp() > 0) { | ||||||
|                         player.dropMessage(-1, "当前怪物血量为: " + monster.getHp()); |                         long hp = monster.getHp(); | ||||||
|  |                         long mobMaxHp = monster.getMobMaxHp(); | ||||||
|  | 
 | ||||||
|  |                         double percentage = ((double) hp / mobMaxHp) * 100;  // 显式转换为浮点数并计算百分比:ml-citation{ref="1,3" data="citationList"} | ||||||
|  |                         String result = String.format("%.2f%%", percentage); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                         double l = (double) hp / mobMaxHp; | ||||||
|  |                         player.dropMessage(-1, "当前怪物血量为:" +hp +" "+result); | ||||||
|                     } |                     } | ||||||
|                 } else { |                 } else { | ||||||
|                     monster.damage(player, monster.getStats().isBoss() ? 500000L : (monster.getHp() - 1L), true, attack.skill); |                     monster.damage(player, monster.getStats().isBoss() ? 500000L : (monster.getHp() - 1L), true, attack.skill); | ||||||
|  | @ -664,36 +672,55 @@ public class DamageParse { | ||||||
|         } |         } | ||||||
|         if (额外段数[0] > 0.0) { |         if (额外段数[0] > 0.0) { | ||||||
|             b = "额外段伤 #b" + (int) 额外段数[0] + "段#k"; |             b = "额外段伤 #b" + (int) 额外段数[0] + "段#k"; | ||||||
|             c = "段伤伤害 #b" + v + "#k"; |             String s = convertNumber(v); | ||||||
|  |             c = "段伤伤害 #b" + s + "#k"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (额外真伤 > 0) { |         if (额外真伤 > 0) { | ||||||
|             d = "切割伤害 #b" + 额外真伤 + "#k"; |             String s = convertNumber(额外真伤); | ||||||
|  |             d = "切割伤害 #b" + s + "#k"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         newtotDamageToOneMonster = 伤害减伤(monster.getId(), newtotDamageToOneMonster); |         newtotDamageToOneMonster = 伤害减伤(monster.getId(), newtotDamageToOneMonster); | ||||||
|         //将计算完减伤之后的伤害加上真实伤害 |         //将计算完减伤之后的伤害加上真实伤害 | ||||||
|         newtotDamageToOneMonster += 额外真伤; |         newtotDamageToOneMonster += 额外真伤; | ||||||
| 
 | 
 | ||||||
|         e = "伤害统计 #r" + newtotDamageToOneMonster + "#k"; |         String s2 = convertNumber(newtotDamageToOneMonster); | ||||||
|  |         e = "伤害统计 #r" + s2 + "#k"; | ||||||
| 
 | 
 | ||||||
|         int length = e.length(); |         int length = e.length(); | ||||||
|         if (!a.isEmpty()) { |         if (!a.isEmpty()) { | ||||||
|             a = String.format("%-" + length + "s", a) + "\r\n"; |             a = String.format("%-" + length + "s", a) ; | ||||||
|         } |         } | ||||||
|         if (!b.isEmpty()) { |         if (!b.isEmpty()) { | ||||||
|             b = String.format("%-" + (length - 1) + "s", b) + "\r\n"; |             b = String.format("%-" + (length) + "s", b) ; | ||||||
|         } |         } | ||||||
|         if (!c.isEmpty()) { |         if (!c.isEmpty()) { | ||||||
|             c = String.format("%-" + length + "s", c) + "\r\n"; |             c = String.format("%-" + length + "s", c) ; | ||||||
|         } |         } | ||||||
|         if (!d.isEmpty()) { |         if (!d.isEmpty()) { | ||||||
|             d = String.format("%-" + length + "s", d) + "\r\n"; |             d = String.format("%-" + length + "s", d) ; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         int targetWidth = e.length()+6; // 目标显示宽度(半角字符数) | ||||||
|  | 
 | ||||||
|  |         String f = ""; | ||||||
|  |         String[] strs = {a, b, c, d, e}; | ||||||
|  |         for (String s : strs) { | ||||||
|  |             if (s.isEmpty())continue; | ||||||
|  |             int currentWidth = getDisplayWidth(s); | ||||||
|  |             int spacesNeeded = (currentWidth >= targetWidth) ? 0 : (targetWidth - currentWidth); | ||||||
|  | 
 | ||||||
|  |             // 填充空格并截断:ml-citation{ref="2,3" data="citationList"} | ||||||
|  |             s= String.format("%s%" + spacesNeeded + "s", s, "").substring(0, Math.min(s.length() + spacesNeeded, s.length() + targetWidth)) ; | ||||||
|  |             s+="\r\n"; | ||||||
|  |             f +=s; | ||||||
|  | //            System.out.println("|" + aligned + "|"); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         e = a + b + c + d + e; |         e = a + b + c + d + e; | ||||||
| 
 | 
 | ||||||
|         player.showInstruction(e, 130, 10); |         player.showInstruction(f, 130, 10); | ||||||
|         return newtotDamageToOneMonster; |         return newtotDamageToOneMonster; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -1844,4 +1871,33 @@ public class DamageParse { | ||||||
|     static { |     static { | ||||||
|         readMobRedDam(); |         readMobRedDam(); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         // 计算字符串显示宽度(全角字符算2,半角算1) | ||||||
|  |         private static int getDisplayWidth(String s) { | ||||||
|  |             return s.codePoints().map(c -> (c <= 255) ? 1 : 2).sum(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     public static String convertNumber(long number) { | ||||||
|  |         if (number < 10000) { | ||||||
|  |             // 数字小于 10000,直接返回原数字 | ||||||
|  |             return String.valueOf(number); | ||||||
|  |         } else if (number < 100000000) { | ||||||
|  |             // 数字大于等于 10000 且小于 1 亿,转换为以“万”为单位 | ||||||
|  |             double result = (double) number / 10000; | ||||||
|  |             return String.format("%.0f万", result); | ||||||
|  |         } else if (number < 10000000000000000L) { | ||||||
|  |             // 数字大于等于 1 亿 且小于 1 京,转换为以“亿”为单位 | ||||||
|  |             double result = (double) number / 100000000; | ||||||
|  |             return String.format("%.0f亿", result); | ||||||
|  |         } else { | ||||||
|  |             // 数字大于等于 1 京,转换为以“京”为单位 | ||||||
|  |             double result = (double) number / 10000000000000000L; | ||||||
|  |             return String.format("%.0f京", result); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue