2022-04-17 12:43:07 +00:00
|
|
|
package emu.grasscutter.tools;
|
|
|
|
|
2022-05-02 06:17:18 +00:00
|
|
|
import java.io.File;
|
2022-04-22 15:11:29 +00:00
|
|
|
import java.io.FileInputStream;
|
2022-04-22 18:28:34 +00:00
|
|
|
import java.io.FileOutputStream;
|
2022-04-17 12:43:07 +00:00
|
|
|
import java.io.FileReader;
|
|
|
|
import java.io.FileWriter;
|
2022-04-22 15:11:29 +00:00
|
|
|
import java.io.InputStreamReader;
|
2022-04-22 18:28:34 +00:00
|
|
|
import java.io.OutputStreamWriter;
|
2022-04-17 12:43:07 +00:00
|
|
|
import java.io.PrintWriter;
|
2022-04-22 15:11:29 +00:00
|
|
|
import java.nio.charset.StandardCharsets;
|
2022-04-17 12:43:07 +00:00
|
|
|
import java.time.LocalDateTime;
|
|
|
|
import java.time.format.DateTimeFormatter;
|
2022-04-18 05:11:27 +00:00
|
|
|
import java.util.ArrayList;
|
2022-04-17 12:43:07 +00:00
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
import com.google.gson.reflect.TypeToken;
|
|
|
|
|
2022-04-27 04:21:57 +00:00
|
|
|
import emu.grasscutter.GameConstants;
|
2022-04-17 12:43:07 +00:00
|
|
|
import emu.grasscutter.Grasscutter;
|
2022-04-27 04:21:57 +00:00
|
|
|
import emu.grasscutter.data.GameData;
|
2022-04-17 12:43:07 +00:00
|
|
|
import emu.grasscutter.data.ResourceLoader;
|
|
|
|
import emu.grasscutter.data.def.AvatarData;
|
|
|
|
import emu.grasscutter.data.def.ItemData;
|
|
|
|
import emu.grasscutter.data.def.MonsterData;
|
2022-04-18 17:14:45 +00:00
|
|
|
import emu.grasscutter.data.def.SceneData;
|
2022-04-19 18:11:48 +00:00
|
|
|
import emu.grasscutter.utils.Utils;
|
2022-04-17 12:43:07 +00:00
|
|
|
|
2022-04-18 05:11:27 +00:00
|
|
|
public final class Tools {
|
2022-04-17 12:43:07 +00:00
|
|
|
|
|
|
|
@SuppressWarnings("deprecation")
|
|
|
|
public static void createGmHandbook() throws Exception {
|
|
|
|
ResourceLoader.loadResources();
|
|
|
|
|
|
|
|
Map<Long, String> map;
|
2022-04-22 15:11:29 +00:00
|
|
|
try (InputStreamReader fileReader = new InputStreamReader(new FileInputStream(Utils.toFilePath(Grasscutter.getConfig().RESOURCE_FOLDER + "TextMap/TextMapEN.json")), StandardCharsets.UTF_8)) {
|
2022-04-17 12:43:07 +00:00
|
|
|
map = Grasscutter.getGsonFactory().fromJson(fileReader, new TypeToken<Map<Long, String>>() {}.getType());
|
|
|
|
}
|
|
|
|
|
|
|
|
List<Integer> list;
|
|
|
|
String fileName = "./GM Handbook.txt";
|
2022-04-22 18:28:34 +00:00
|
|
|
try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileName), StandardCharsets.UTF_8), false)) {
|
2022-04-17 12:43:07 +00:00
|
|
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
2022-04-27 04:21:57 +00:00
|
|
|
writer.println("// Grasscutter " + GameConstants.VERSION + " GM Handbook");
|
2022-04-17 12:43:07 +00:00
|
|
|
writer.println("// Created " + dtf.format(now) + System.lineSeparator() + System.lineSeparator());
|
|
|
|
|
2022-04-27 04:21:57 +00:00
|
|
|
list = new ArrayList<>(GameData.getAvatarDataMap().keySet());
|
2022-04-17 12:43:07 +00:00
|
|
|
Collections.sort(list);
|
|
|
|
|
|
|
|
writer.println("// Avatars");
|
|
|
|
for (Integer id : list) {
|
2022-04-27 04:21:57 +00:00
|
|
|
AvatarData data = GameData.getAvatarDataMap().get(id);
|
2022-04-17 12:43:07 +00:00
|
|
|
writer.println(data.getId() + " : " + map.get(data.getNameTextMapHash()));
|
|
|
|
}
|
|
|
|
|
|
|
|
writer.println();
|
|
|
|
|
2022-04-27 04:21:57 +00:00
|
|
|
list = new ArrayList<>(GameData.getItemDataMap().keySet());
|
2022-04-17 12:43:07 +00:00
|
|
|
Collections.sort(list);
|
|
|
|
|
|
|
|
writer.println("// Items");
|
|
|
|
for (Integer id : list) {
|
2022-04-27 04:21:57 +00:00
|
|
|
ItemData data = GameData.getItemDataMap().get(id);
|
2022-04-17 12:43:07 +00:00
|
|
|
writer.println(data.getId() + " : " + map.get(data.getNameTextMapHash()));
|
|
|
|
}
|
|
|
|
|
|
|
|
writer.println();
|
|
|
|
|
2022-04-18 17:14:45 +00:00
|
|
|
writer.println("// Scenes");
|
2022-04-27 04:21:57 +00:00
|
|
|
list = new ArrayList<>(GameData.getSceneDataMap().keySet());
|
2022-04-18 17:14:45 +00:00
|
|
|
Collections.sort(list);
|
|
|
|
|
|
|
|
for (Integer id : list) {
|
2022-04-27 04:21:57 +00:00
|
|
|
SceneData data = GameData.getSceneDataMap().get(id);
|
2022-04-18 17:14:45 +00:00
|
|
|
writer.println(data.getId() + " : " + data.getScriptData());
|
|
|
|
}
|
|
|
|
|
|
|
|
writer.println();
|
|
|
|
|
2022-04-17 12:43:07 +00:00
|
|
|
writer.println("// Monsters");
|
2022-04-27 04:21:57 +00:00
|
|
|
list = new ArrayList<>(GameData.getMonsterDataMap().keySet());
|
2022-04-17 12:43:07 +00:00
|
|
|
Collections.sort(list);
|
|
|
|
|
|
|
|
for (Integer id : list) {
|
2022-04-27 04:21:57 +00:00
|
|
|
MonsterData data = GameData.getMonsterDataMap().get(id);
|
2022-04-17 12:43:07 +00:00
|
|
|
writer.println(data.getId() + " : " + map.get(data.getNameTextMapHash()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Grasscutter.getLogger().info("GM Handbook generated!");
|
|
|
|
}
|
2022-05-02 06:17:18 +00:00
|
|
|
|
|
|
|
@SuppressWarnings("deprecation")
|
2022-05-05 07:59:48 +00:00
|
|
|
public static void createGachaMapping(String location) throws Exception {
|
2022-05-02 06:17:18 +00:00
|
|
|
ResourceLoader.loadResources();
|
|
|
|
|
|
|
|
Map<Long, String> map;
|
|
|
|
try (InputStreamReader fileReader = new InputStreamReader(new FileInputStream(Utils.toFilePath(Grasscutter.getConfig().RESOURCE_FOLDER + "TextMap/TextMapEN.json")), StandardCharsets.UTF_8)) {
|
|
|
|
map = Grasscutter.getGsonFactory().fromJson(fileReader, new TypeToken<Map<Long, String>>() {}.getType());
|
|
|
|
}
|
|
|
|
|
|
|
|
List<Integer> list;
|
|
|
|
|
2022-05-05 07:59:48 +00:00
|
|
|
String fileName = location;
|
2022-05-02 06:17:18 +00:00
|
|
|
|
|
|
|
try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileName), StandardCharsets.UTF_8), false)) {
|
|
|
|
|
|
|
|
list = new ArrayList<>(GameData.getAvatarDataMap().keySet());
|
|
|
|
Collections.sort(list);
|
|
|
|
|
|
|
|
writer.println("mappings = {\"en-us\": {");
|
|
|
|
|
|
|
|
// Avatars
|
|
|
|
boolean first = true;
|
|
|
|
for (Integer id : list) {
|
|
|
|
AvatarData data = GameData.getAvatarDataMap().get(id);
|
|
|
|
int avatarID = data.getId();
|
|
|
|
if (avatarID >= 11000000) { // skip test avatar
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (first) { // skip adding comma for the first element
|
|
|
|
first = false;
|
|
|
|
} else {
|
|
|
|
writer.print(",");
|
|
|
|
}
|
|
|
|
String color;
|
|
|
|
switch (data.getQualityType()){
|
|
|
|
case "QUALITY_PURPLE":
|
|
|
|
color = "purple";
|
|
|
|
break;
|
|
|
|
case "QUALITY_ORANGE":
|
|
|
|
color = "yellow";
|
|
|
|
break;
|
|
|
|
case "QUALITY_BLUE":
|
|
|
|
default:
|
|
|
|
color = "blue";
|
|
|
|
}
|
|
|
|
|
|
|
|
writer.println(
|
|
|
|
"\"" + (avatarID % 1000 + 1000) + "\" : [\""
|
|
|
|
+ map.get(data.getNameTextMapHash()) + "(Avatar)\", \""
|
|
|
|
+ color + "\"]");
|
|
|
|
}
|
|
|
|
|
|
|
|
writer.println();
|
|
|
|
|
|
|
|
list = new ArrayList<>(GameData.getItemDataMap().keySet());
|
|
|
|
Collections.sort(list);
|
|
|
|
|
|
|
|
// Weapons
|
|
|
|
for (Integer id : list) {
|
|
|
|
ItemData data = GameData.getItemDataMap().get(id);
|
|
|
|
if (data.getId() <= 11101 || data.getId() >= 20000) {
|
|
|
|
continue; //skip non weapon items
|
|
|
|
}
|
|
|
|
String color;
|
|
|
|
|
|
|
|
switch (data.getRankLevel()){
|
|
|
|
case 3:
|
|
|
|
color = "blue";
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
color = "purple";
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
color = "yellow";
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
continue; // skip unnecessary entries
|
|
|
|
}
|
|
|
|
writer.println(",\"" + data.getId() +
|
|
|
|
"\" : [\"" + map.get(data.getNameTextMapHash()).replaceAll("\"", "")
|
|
|
|
+ "(Weapon)\",\""+ color + "\"]");
|
|
|
|
}
|
|
|
|
writer.println(",\"200\": \"Standard\", \"301\": \"Avatar Event\", \"302\": \"Weapon event\"");
|
|
|
|
writer.println("}\n}");
|
|
|
|
}
|
2022-05-06 04:57:45 +00:00
|
|
|
|
2022-05-02 06:17:18 +00:00
|
|
|
Grasscutter.getLogger().info("Mappings generated!");
|
|
|
|
}
|
2022-04-17 12:43:07 +00:00
|
|
|
}
|