/**
* Copyright (C) 2013-2014 Project-Vethrfolnir
*
* 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
*/
package com.vethrfolnir.gen;
import gnu.trove.map.hash.TIntObjectHashMap;
import java.io.*;
import java.util.ArrayList;
import com.vethrfolnir.game.templates.item.ItemTemplate;
/**
* @author Constantin
*
*/
public class GenItems {
public static void main(String[] args) throws Exception {
try(BufferedReader br = new BufferedReader(new InputStreamReader(Class.class.getResourceAsStream("/Item.txt")))) {
TIntObjectHashMap<ArrayList<ItemTemplate>> templates = new TIntObjectHashMap<ArrayList<ItemTemplate>>();
int prevIndex = 0;
while(br.ready()) {
String line = br.readLine().replaceAll("\\t{2,9}", " ").trim();
if(line.isEmpty() || line.startsWith("//") || line.startsWith("end"))
continue;
String[] splits = line.split("\\t");
for (int i = 0; i < splits.length; i++) {
splits[i] = splits[i].replace("\"", "");
}
boolean hasMore = splits.length > 1;
if(hasMore) {
ArrayList<ItemTemplate> templaties = templates.get(prevIndex);
if(templaties == null)
templates.put(prevIndex, templaties= new ArrayList<ItemTemplate>());
int pointer = 0;
ItemTemplate template = new ItemTemplate();
if(prevIndex < 6) {
template.index = prevIndex;
template.id = Integer.parseInt(splits[pointer++]);
template.Slot = Integer.parseInt(splits[pointer++]);
template.Skill = Integer.parseInt(splits[pointer++]);
template.X = Integer.parseInt(splits[pointer++]);
template.Y = Integer.parseInt(splits[pointer++]);
template.Serial = Integer.parseInt(splits[pointer++]);
template.Opt = Integer.parseInt(splits[pointer++]);
template.Drop = Integer.parseInt(splits[pointer++]);
template.Name = splits[pointer++];
template.Lvl = Integer.parseInt(splits[pointer++]);
template.DmgMin = Integer.parseInt(splits[pointer++]);
template.DmgMax = Integer.parseInt(splits[pointer++]);
template.Speed = Integer.parseInt(splits[pointer++]);
template.Dur = Integer.parseInt(splits[pointer++]);
template.MagDur = Integer.parseInt(splits[pointer++]);
template.MagPow = Integer.parseInt(splits[pointer++]);
template.ReqLvl = Integer.parseInt(splits[pointer++]);
template.Str = Integer.parseInt(splits[pointer++]);
template.Agi = Integer.parseInt(splits[pointer++]);
template.Ene = Integer.parseInt(splits[pointer++]);
template.Vit = Integer.parseInt(splits[pointer++]);
template.Com = Integer.parseInt(splits[pointer++]);
template.Type = Integer.parseInt(splits[pointer++]);
template.DW = Integer.parseInt(splits[pointer++]);
template.DK = Integer.parseInt(splits[pointer++]);
template.ELF = Integer.parseInt(splits[pointer++]);
template.MG = Integer.parseInt(splits[pointer++]);
template.DL = Integer.parseInt(splits[pointer++]);
template.SUM = Integer.parseInt(splits[pointer++]);
template.MONK = Integer.parseInt(splits[pointer++]);
}
if(prevIndex > 5 && prevIndex < 12) {
template.index = prevIndex;
template.id = Integer.parseInt(splits[pointer++]);
template.Slot = Integer.parseInt(splits[pointer++]);
template.Skill = Integer.parseInt(splits[pointer++]);
template.X = Integer.parseInt(splits[pointer++]);
template.Y = Integer.parseInt(splits[pointer++]);
template.Serial = Integer.parseInt(splits[pointer++]);
template.Opt = Integer.parseInt(splits[pointer++]);
template.Drop = Integer.parseInt(splits[pointer++]);
template.Name = splits[pointer++];
template.Lvl = Integer.parseInt(splits[pointer++]);
template.Def = Integer.parseInt(splits[pointer++]);
template.Speed = Integer.parseInt(splits[pointer++]);
template.Dur = Integer.parseInt(splits[pointer++]);
template.ReqLvl = Integer.parseInt(splits[pointer++]);
template.Str = Integer.parseInt(splits[pointer++]);
template.Agi = Integer.parseInt(splits[pointer++]);
template.Ene = Integer.parseInt(splits[pointer++]);
template.Vit = Integer.parseInt(splits[pointer++]);
template.Com = Integer.parseInt(splits[pointer++]);
template.Attr = Integer.parseInt(splits[pointer++]);
template.DW = Integer.parseInt(splits[pointer++]);
template.DK = Integer.parseInt(splits[pointer++]);
template.ELF = Integer.parseInt(splits[pointer++]);
template.MG = Integer.parseInt(splits[pointer++]);
template.DL = Integer.parseInt(splits[pointer++]);
template.SUM = Integer.parseInt(splits[pointer++]);
template.MONK = Integer.parseInt(splits[pointer++]);
}
if(prevIndex == 12) {
template.index = prevIndex;
template.id = Integer.parseInt(splits[pointer++]);
template.Slot = Integer.parseInt(splits[pointer++]);
template.Skill = Integer.parseInt(splits[pointer++]);
template.X = Integer.parseInt(splits[pointer++]);
template.Y = Integer.parseInt(splits[pointer++]);
template.Serial = Integer.parseInt(splits[pointer++]);
template.Opt = Integer.parseInt(splits[pointer++]);
template.Drop = Integer.parseInt(splits[pointer++]);
template.Name = splits[pointer++];
template.Lvl = Integer.parseInt(splits[pointer++]);
template.Def = Integer.parseInt(splits[pointer++]);
template.Dur = Integer.parseInt(splits[pointer++]);
template.ReqLvl = Integer.parseInt(splits[pointer++]);
template.Ene = Integer.parseInt(splits[pointer++]);
template.Str = Integer.parseInt(splits[pointer++]);
template.Agi = Integer.parseInt(splits[pointer++]);
template.Com = Integer.parseInt(splits[pointer++]);
template.Price = Integer.parseInt(splits[pointer++]);
template.DW = Integer.parseInt(splits[pointer++]);
template.DK = Integer.parseInt(splits[pointer++]);
template.ELF = Integer.parseInt(splits[pointer++]);
template.MG = Integer.parseInt(splits[pointer++]);
template.DL = Integer.parseInt(splits[pointer++]);
template.SUM = Integer.parseInt(splits[pointer++]);
template.MONK = Integer.parseInt(splits[pointer++]);
}
if(prevIndex == 13) {
template.index = prevIndex;
template.id = Integer.parseInt(splits[pointer++]);
template.Slot = Integer.parseInt(splits[pointer++]);
template.Skill = Integer.parseInt(splits[pointer++]);
template.X = Integer.parseInt(splits[pointer++]);
template.Y = Integer.parseInt(splits[pointer++]);
template.Serial = Integer.parseInt(splits[pointer++]);
template.Opt = Integer.parseInt(splits[pointer++]);
template.Drop = Integer.parseInt(splits[pointer++]);
template.Name = splits[pointer++];
template.Lvl = Integer.parseInt(splits[pointer++]);
template.Dur = Integer.parseInt(splits[pointer++]);
template.R1 = Integer.parseInt(splits[pointer++]);
template.R2 = Integer.parseInt(splits[pointer++]);
template.R3 = Integer.parseInt(splits[pointer++]);
template.R4 = Integer.parseInt(splits[pointer++]);
template.R5 = Integer.parseInt(splits[pointer++]);
template.R6 = Integer.parseInt(splits[pointer++]);
template.R7 = Integer.parseInt(splits[pointer++]);
template.Attr = Integer.parseInt(splits[pointer++]);
template.DW = Integer.parseInt(splits[pointer++]);
template.DK = Integer.parseInt(splits[pointer++]);
template.ELF = Integer.parseInt(splits[pointer++]);
template.MG = Integer.parseInt(splits[pointer++]);
template.DL = Integer.parseInt(splits[pointer++]);
template.SUM = Integer.parseInt(splits[pointer++]);
template.MONK = Integer.parseInt(splits[pointer++]);
}
if(prevIndex == 14) {
template.index = prevIndex;
template.id = Integer.parseInt(splits[pointer++]);
template.Slot = Integer.parseInt(splits[pointer++]);
template.Skill = Integer.parseInt(splits[pointer++]);
template.X = Integer.parseInt(splits[pointer++]);
template.Y = Integer.parseInt(splits[pointer++]);
template.Serial = Integer.parseInt(splits[pointer++]);
template.Opt = Integer.parseInt(splits[pointer++]);
template.Drop = Integer.parseInt(splits[pointer++]);
template.Name = splits[pointer++];
template.Value = Integer.parseInt(splits[pointer++]);
template.Lvl = Integer.parseInt(splits[pointer++]);
}
if(prevIndex == 15) {
template.index = prevIndex;
template.id = Integer.parseInt(splits[pointer++]);
template.Slot = Integer.parseInt(splits[pointer++]);
template.Skill = Integer.parseInt(splits[pointer++]);
template.X = Integer.parseInt(splits[pointer++]);
template.Y = Integer.parseInt(splits[pointer++]);
template.Serial = Integer.parseInt(splits[pointer++]);
template.Opt = Integer.parseInt(splits[pointer++]);
template.Drop = Integer.parseInt(splits[pointer++]);
template.Name = splits[pointer++];
template.Lvl = Integer.parseInt(splits[pointer++]);
template.ReqLvl = Integer.parseInt(splits[pointer++]);
template.Ene = Integer.parseInt(splits[pointer++]);
template.Price = Integer.parseInt(splits[pointer++]);
template.DW = Integer.parseInt(splits[pointer++]);
template.DK = Integer.parseInt(splits[pointer++]);
template.ELF = Integer.parseInt(splits[pointer++]);
template.MG = Integer.parseInt(splits[pointer++]);
template.DL = Integer.parseInt(splits[pointer++]);
template.SUM = Integer.parseInt(splits[pointer++]);
template.MONK = Integer.parseInt(splits[pointer++]);
}
System.out.println(template.toString());
templaties.add(template);
}
else {
prevIndex = Integer.parseInt(splits[0]);
}
}
ArrayList<ItemTemplate> mainTemplates = new ArrayList<ItemTemplate>();
for (ArrayList<ItemTemplate> temps : templates.valueCollection()) {
mainTemplates.addAll(temps);
}
//round(result / 512) = item index
//result - itemIndex * 512 = item id
for (int i = 0; i < mainTemplates.size(); i++) {
ItemTemplate temp = mainTemplates.get(i);
temp.uniqueId = temp.index * 512 + temp.id;
}
System.out.println("Loaded: "+mainTemplates.size());
File dir = new File("./dist/GameServer/system/static/items");
dir.mkdirs();
File file = new File(dir, "items.json");
GenData.getWriter().writeValue(new FileOutputStream(file), mainTemplates);
// do what ever with mainTemplates
}
}
}