PRC8/nwn/nwnprc/DocGen/trunk/prc/utils/ItempropMaker.java
Jaysyn904 5914ed2ab5 Updated Release Archive
Updated Release Archive.  Fixed Mage-killer prereqs.  Removed old LETO & ConvoCC related files.  Added organized spell scroll store.  Fixed Gloura spellbook. Various TLK fixes.  Reorganized Repo.  Removed invalid user folders. Added DocGen back in.
2023-08-22 10:00:21 -04:00

278 lines
14 KiB
Java

package prc.utils;
import prc.autodoc.*;
import java.io.File;
import java.io.FileWriter;
import static prc.Main.verbose;
public final class ItempropMaker {
private ItempropMaker() {
}
private static Data_2da itempropdef2da;
private static Data_2da costtable2da;
private static Data_2da paramtable2da;
private static Data_2da[] cost2daarray;
private static Data_2da[] param12daarray;
private static StringBuilder xml;
public static void main(String[] args) throws Exception {
//load the 2das
itempropdef2da = Data_2da.load2da("2das" + File.separator + "itempropdef.2da", true);
costtable2da = Data_2da.load2da("2das" + File.separator + "iprp_costtable.2da", true);
paramtable2da = Data_2da.load2da("2das" + File.separator + "iprp_paramtable.2da", true);
cost2daarray = new Data_2da[costtable2da.getEntryCount()];
param12daarray = new Data_2da[paramtable2da.getEntryCount()];
for (int i = 0; i < cost2daarray.length; i++) {
cost2daarray[i] = Data_2da.load2da("2das" + File.separator + costtable2da.getBiowareEntry("Name", i) + ".2da", true);
}
for (int i = 0; i < param12daarray.length; i++) {
param12daarray[i] = Data_2da.load2da("2das" + File.separator + paramtable2da.getBiowareEntry("TableResRef", i) + ".2da", true);
}
//loop over each row
for (int itempropdef2darow = 85;
itempropdef2darow < itempropdef2da.getEntryCount();
itempropdef2darow++) {
if (itempropdef2da.getBiowareEntryAsInt("Name", itempropdef2darow) != 0) {
int type = itempropdef2darow;
int subtype;
int cost;
int param1;
if (itempropdef2da.getBiowareEntry("SubTypeResRef", type) == "")
subtype = 0;
else
subtype = 1;
if (itempropdef2da.getBiowareEntryAsInt("CostTableResRef", type) == 0)
cost = 0;
else
cost = 1;
if (itempropdef2da.getBiowareEntry("Param1ResRef", type) == "")
param1 = 0;
else
param1 = 1;
//loop over each subtype
if (subtype != 0) {
Data_2da subtype2da = Data_2da.load2da("2das" + File.separator + itempropdef2da.getBiowareEntry("SubTypeResRef", type) + ".2da", true);
for (int subtypeID = 0; subtypeID < subtype2da.getEntryCount(); subtypeID++) {
//loop over the param1s, if applicable
//look if there is a column for it
boolean subtypeparam1columnexists = false;
String[] columnlabels = subtype2da.getLabels();
for (int i = 0; i < columnlabels.length; i++) {
if (columnlabels[i] == "Param1ResRef")
subtypeparam1columnexists = true;
}
if (subtypeparam1columnexists
&& subtype2da.getBiowareEntry("Param1ResRef", subtypeID) == "") {
param1 = 1;
} else {
if (itempropdef2da.getBiowareEntry("Param1ResRef", type) == "")
param1 = 0;
else
param1 = 2;
}
if (param1 != 0) {
int param1tableid = 0;
if (param1 == 2)
param1tableid = itempropdef2da.getBiowareEntryAsInt("Param1ResRef", type);
else if (param1 == 1)
param1tableid = subtype2da.getBiowareEntryAsInt("Param1ResRef", subtypeID);
Data_2da param12da = param12daarray[param1tableid];
for (int param1ID = 0; param1ID < param12da.getEntryCount(); param1ID++) {
if (cost != 0) {
int costtable = itempropdef2da.getBiowareEntryAsInt("CostTableResRef", type);
Data_2da cost2da = cost2daarray[costtable];
//has type, subtype, param1, and cost
write(type, subtypeID, param1tableid, param1ID, costtable, cost2da.getEntryCount());
} else {
//no cost
//has type, subtype, and param1
write(type, subtypeID, param1tableid, param1ID, -1, -1);
}
}
} else {
//no param1
if (cost != 0) {
int costtable = itempropdef2da.getBiowareEntryAsInt("CostTableResRef", type);
Data_2da cost2da = cost2daarray[costtable];
//has type, subtype, and cost
write(type, subtypeID, -1, -1, costtable, cost2da.getEntryCount());
} else {
//no cost
//has type, and subtype
write(type, subtypeID, -1, -1, -1, -1);
}
}
}
} else {
//no subtype
if (param1 != 0) {
int param1tableid = itempropdef2da.getBiowareEntryAsInt("Param1ResRef", type);
Data_2da param12da = param12daarray[param1tableid];
for (int param1ID = 0; param1ID < param12da.getEntryCount(); param1ID++) {
if (cost != 0) {
int costtable = itempropdef2da.getBiowareEntryAsInt("CostTableResRef", type);
Data_2da cost2da = cost2daarray[costtable];
//has type, param1, and cost
write(type, -1, param1tableid, param1ID, costtable, cost2da.getEntryCount());
} else {
//no cost
//has type, and param1
write(type, -1, param1tableid, param1ID, -1, -1);
}
}
} else {
//no param1
if (cost != 0) {
int costtable = itempropdef2da.getBiowareEntryAsInt("CostTableResRef", type);
Data_2da cost2da = cost2daarray[costtable];
//has type, and cost
write(type, -1, -1, -1, costtable, cost2da.getEntryCount());
} else {
//no cost
//has type
write(type, -1, -1, -1, -1, -1);
}
}
}
}
}
}
/*
<!-- This file was generated by the NWNTools GFF to XML writer.
http://nwntools.sf.net/
** Do not hand edit unless you know what you are doing. **
-->
- <gff name="master111.uti" type="UTI" version="V3.2">
- <struct id="-1">
<element name="TemplateResRef" type="11" value="master111" />
<element name="BaseItem" type="5" value="111" />
<element name="LocalizedName" type="12" value="83617" />
<element name="Description" type="12" value="-1" />
<element name="DescIdentified" type="12" value="-1" />
<element name="Tag" type="10" value="master111" />
<element name="Charges" type="0" value="0" />
<element name="Cost" type="4" value="2" />
<element name="Stolen" type="0" value="0" />
<element name="StackSize" type="2" value="1" />
<element name="Plot" type="0" value="0" />
<element name="AddCost" type="4" value="0" />
<element name="Identified" type="0" value="1" />
<element name="Cursed" type="0" value="0" />
<element name="ModelPart1" type="0" value="11" />
<element name="ModelPart2" type="0" value="11" />
<element name="ModelPart3" type="0" value="11" />
- <element name="PropertiesList" type="15">
<struct id="0" >
<element name="PropertyName" type="2" value="85" />
<element name="Subtype" type="2" value="6" />
<element name="CostTable" type="0" value="28" />
<element name="CostValue" type="2" value="0" />
<element name="Param1" type="0" value="0" />
<element name="Param1Value" type="0" value="0" />
<element name="ChanceAppear" type="0" value="100" />
</struct>
- <struct id="0">
<element name="PropertyName" type="2" value="12" />
<element name="Subtype" type="2" value="37" />
<element name="CostTable" type="0" value="0" />
<element name="CostValue" type="2" value="0" />
<element name="Param1" type="0" value="255" />
<element name="Param1Value" type="0" value="0" />
<element name="ChanceAppear" type="0" value="100" />
</struct>
</element>
<element name="PaletteID" type="0" value="47" />
<element name="Comment" type="10" value="" />
</struct>
</gff>
*/
private static void write(int type, int subtype, int param1table, int param1value, int costtable,
int costmax) throws Exception {
xml = new StringBuilder(0xFFFFF);
//assemble the resref/tag
String resref = "prc_ip" + type;
if (subtype != -1)
resref += "_" + subtype;
if (param1value != -1)
resref += "_" + param1value;
//sanity checks
if (param1value == -1)
param1value = 0;
if (param1table == -1)
param1table = 255;
if (subtype == -1)
subtype = 0;
if (costtable == -1)
costtable = 0;
if (costmax == -1)
costmax = 0;
//output stuff
//header things first
xml.append("<gff name=\"" + resref + ".uti\" type=\"UTI \" version=\"V3.2\">\n");
xml.append(" <struct id=\"-1\">\n");
xml.append(" <element name=\"TemplateResRef\" type=\"11\" value=\"" + resref + "\" />\n");
xml.append(" <element name=\"BaseItem\" type=\"5\" value=\"78\" />\n");
xml.append(" <element name=\"LocalizedName\" type=\"12\" value=\"-1\" >\n");
xml.append(" <localString languageId=\"0\" value=\"0\" />\n");
xml.append(" </element>\n");
xml.append(" <element name=\"Description\" type=\"12\" value=\"-1\" />\n");
xml.append(" <element name=\"DescIdentified\" type=\"12\" value=\"-1\" />\n");
xml.append(" <element name=\"Tag\" type=\"10\" value=\"" + resref + "\" />\n");
xml.append(" <element name=\"Charges\" type=\"0\" value=\"0\" />\n");
xml.append(" <element name=\"Cost\" type=\"4\" value=\"2\" />\n");
xml.append(" <element name=\"Stolen\" type=\"0\" value=\"0\" />\n");
xml.append(" <element name=\"StackSize\" type=\"2\" value=\"1\" />\n");
xml.append(" <element name=\"Plot\" type=\"0\" value=\"0\" />\n");
xml.append(" <element name=\"AddCost\" type=\"4\" value=\"0\" />\n");
xml.append(" <element name=\"Identified\" type=\"0\" value=\"1\" />\n");
xml.append(" <element name=\"Cursed\" type=\"0\" value=\"0\" />\n");
xml.append(" <element name=\"ModelPart1\" type=\"0\" value=\"1\" />\n");
xml.append(" <element name=\"PropertiesList\" type=\"15\">\n");
//loop over the itemproperties
for (int i = 0; i < costmax; i++) {
xml.append(" <struct id=\"0\" >\n");
xml.append(" <element name=\"PropertyName\" type=\"2\" value=\"" + type + "\" />\n");
xml.append(" <element name=\"Subtype\" type=\"2\" value=\"" + subtype + "\" />\n");
xml.append(" <element name=\"CostTable\" type=\"0\" value=\"" + costtable + "\" />\n");
xml.append(" <element name=\"CostValue\" type=\"2\" value=\"" + i + "\" />\n");
xml.append(" <element name=\"Param1\" type=\"0\" value=\"" + param1table + "\" />\n");
xml.append(" <element name=\"Param1Value\" type=\"0\" value=\"" + param1value + "\" />\n");
xml.append(" <element name=\"ChanceAppear\" type=\"0\" value=\"100\" />\n");
xml.append(" </struct>\n");
}
//footer stuff
xml.append(" </element>\n");
//this is set to 99 so it will not appear in the palette :)
xml.append(" <element name=\"PaletteID\" type=\"0\" value=\"99\" />\n");
xml.append(" <element name=\"Comment\" type=\"10\" value=\"\" />\n");
xml.append(" </struct>\n");
xml.append("</gff>");
File target = new File("xml_temp" + File.separator + resref + ".uti.xml");
// Clean up old version if necessary
if (target.exists()) {
if (verbose) System.out.println("Deleting previous version of " + target.getName());
target.delete();
}
if (verbose) System.out.println("Writing brand new version of " + target.getName());
target.createNewFile();
// Creater the writer and print
FileWriter writer = new FileWriter(target, true);
writer.write(xml.toString());
// Clean up
writer.flush();
writer.close();
// Force garbage collection
System.gc();
}
}