mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-08-01 01:15:59 -04:00
who isn't sick of converting the freaking scripts? this negates the need
This commit is contained in:
@@ -0,0 +1,348 @@
|
||||
package script.beta;
|
||||
|
||||
import script.*;
|
||||
import script.base_class.*;
|
||||
import script.combat_engine.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
import script.base_script;
|
||||
|
||||
import script.library.resource;
|
||||
import script.library.sui;
|
||||
import script.library.utils;
|
||||
import script.library.prose;
|
||||
|
||||
public class terminal_resource extends script.terminal.base.terminal_add_use
|
||||
{
|
||||
public terminal_resource()
|
||||
{
|
||||
}
|
||||
public static final int AMT = 100000;
|
||||
public static final String[] RESOURCE_BASE_TYPES =
|
||||
{
|
||||
"creature_resources",
|
||||
"flora_resources",
|
||||
"chemical",
|
||||
"water",
|
||||
"mineral",
|
||||
"gas",
|
||||
"energy",
|
||||
"space_metal",
|
||||
"space_gas",
|
||||
"space_chemical",
|
||||
"space_gem"
|
||||
};
|
||||
public static final String[] RESOURCE_PLANETS =
|
||||
{
|
||||
"current",
|
||||
"tatooine",
|
||||
"naboo",
|
||||
"corellia",
|
||||
"rori",
|
||||
"talus",
|
||||
"endor",
|
||||
"dantooine",
|
||||
"dathomir",
|
||||
"lok",
|
||||
"yavin4"
|
||||
};
|
||||
public int OnObjectMenuRequest(obj_id self, obj_id player, menu_info mi) throws InterruptedException
|
||||
{
|
||||
if (!isGod(player) && !hasObjVar(player, "beta.terminal_ok"))
|
||||
{
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
int use = -1;
|
||||
menu_info_data[] root = mi.getRootMenuItems();
|
||||
for (int i = 0; i < root.length; i++)
|
||||
{
|
||||
if (root[i].getType() == menu_info_types.ITEM_USE)
|
||||
{
|
||||
use = root[i].getId();
|
||||
}
|
||||
}
|
||||
if (use != -1)
|
||||
{
|
||||
mi.addSubMenu(use, menu_info_types.SERVER_MENU1, new string_id("beta", "resource_standard"));
|
||||
mi.addSubMenu(use, menu_info_types.SERVER_MENU2, new string_id("beta", "resource_planet"));
|
||||
mi.addSubMenu(use, menu_info_types.SERVER_MENU3, new string_id("beta", "resource_set_planet"));
|
||||
}
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
public int OnObjectMenuSelect(obj_id self, obj_id player, int item) throws InterruptedException
|
||||
{
|
||||
if (isGod(player) || hasObjVar(player, "beta.terminal_ok"))
|
||||
{
|
||||
if ((item == menu_info_types.ITEM_USE) || (item == menu_info_types.SERVER_MENU1))
|
||||
{
|
||||
String prompt = "Select the desired resource category";
|
||||
String title = "BETA - Resource Dispenser";
|
||||
sui.listbox(self, player, prompt, sui.OK_CANCEL, title, RESOURCE_BASE_TYPES, "handleCategorySelection", true, false);
|
||||
}
|
||||
if (item == menu_info_types.SERVER_MENU2)
|
||||
{
|
||||
String prompt = "Select the desired planet";
|
||||
String title = "BETA - Resource Dispenser";
|
||||
sui.listbox(self, player, prompt, sui.OK_CANCEL, title, RESOURCE_PLANETS, "handlePlanetSelection", true, false);
|
||||
}
|
||||
if (item == menu_info_types.SERVER_MENU3)
|
||||
{
|
||||
String prompt = "Select the desired planet";
|
||||
String title = "BETA - Resource Dispenser";
|
||||
sui.listbox(self, player, prompt, sui.OK_CANCEL, title, RESOURCE_PLANETS, "handleSetPlanet", true, false);
|
||||
}
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
sendSystemMessageTestingOnly(player, "Only authorized users may access this terminal.");
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
}
|
||||
public int handleCategorySelection(obj_id self, dictionary params) throws InterruptedException
|
||||
{
|
||||
if ((params == null) || (params.isEmpty()))
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
obj_id player = sui.getPlayerId(params);
|
||||
int btn = sui.getIntButtonPressed(params);
|
||||
int idx = sui.getListboxSelectedRow(params);
|
||||
if (btn == sui.BP_CANCEL)
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
if (idx == -1)
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
location loc = getLocation(player);
|
||||
String planet = "current";
|
||||
if (utils.hasScriptVar(self, "planet"))
|
||||
{
|
||||
planet = utils.getStringScriptVar(self, "planet");
|
||||
}
|
||||
else if (hasObjVar(self, "planet"))
|
||||
{
|
||||
planet = getStringObjVar(self, "planet");
|
||||
}
|
||||
if (!planet.equals("current") && !planet.equals("all"))
|
||||
{
|
||||
loc = new location(0, 0, 0, planet);
|
||||
}
|
||||
if (loc == null)
|
||||
{
|
||||
sendSystemMessageTestingOnly(player, "Error retrieving planet data");
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
String[] resourceList = null;
|
||||
if (planet.equals("all"))
|
||||
{
|
||||
resourceList = buildAllAvailableResourceTree(RESOURCE_BASE_TYPES[idx]);
|
||||
}
|
||||
else
|
||||
{
|
||||
resourceList = buildAvailableResourceTree(loc, RESOURCE_BASE_TYPES[idx]);
|
||||
}
|
||||
String prompt = "Select the desired resource category";
|
||||
String title = "BETA - Resource Dispenser";
|
||||
sui.listbox(self, player, prompt, sui.OK_CANCEL, title, resourceList, "handleResourceSelection", true, false);
|
||||
utils.setScriptVar(self, "resourceList", resourceList);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
public int handlePlanetSelection(obj_id self, dictionary params) throws InterruptedException
|
||||
{
|
||||
if ((params == null) || (params.isEmpty()))
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
obj_id player = sui.getPlayerId(params);
|
||||
int btn = sui.getIntButtonPressed(params);
|
||||
int idx = sui.getListboxSelectedRow(params);
|
||||
if (btn == sui.BP_CANCEL)
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
if (idx == -1)
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
String planet = RESOURCE_PLANETS[idx];
|
||||
utils.setScriptVar(self, "planet", planet);
|
||||
String prompt = "Select the desired resource category";
|
||||
String title = "BETA - Resource Dispenser";
|
||||
sui.listbox(self, player, prompt, sui.OK_CANCEL, title, RESOURCE_BASE_TYPES, "handleCategorySelection", true, false);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
public int handleSetPlanet(obj_id self, dictionary params) throws InterruptedException
|
||||
{
|
||||
if ((params == null) || (params.isEmpty()))
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
obj_id player = sui.getPlayerId(params);
|
||||
int btn = sui.getIntButtonPressed(params);
|
||||
int idx = sui.getListboxSelectedRow(params);
|
||||
if (btn == sui.BP_CANCEL)
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
if (idx == -1)
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
String planet = RESOURCE_PLANETS[idx];
|
||||
setObjVar(self, "planet", planet);
|
||||
sendSystemMessageTestingOnly(player, "Planet set to " + planet);
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
public int handleResourceSelection(obj_id self, dictionary params) throws InterruptedException
|
||||
{
|
||||
if ((params == null) || (params.isEmpty()))
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
obj_id player = sui.getPlayerId(params);
|
||||
int btn = sui.getIntButtonPressed(params);
|
||||
int idx = sui.getListboxSelectedRow(params);
|
||||
if (btn == sui.BP_CANCEL)
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
if (idx == -1)
|
||||
{
|
||||
cleanScriptVars();
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
String[] resourceList = utils.getStringArrayScriptVar(self, "resourceList");
|
||||
String resourceName = resourceList[idx].trim();
|
||||
if (resourceName.startsWith("\\#"))
|
||||
{
|
||||
resourceName = resourceName.substring(13, resourceName.length() - 3);
|
||||
}
|
||||
obj_id resourceId = getResourceTypeByName(resourceName);
|
||||
if (resourceId == null)
|
||||
{
|
||||
resourceId = pickRandomNonDepeletedResource(resourceName);
|
||||
}
|
||||
obj_id inv = utils.getInventoryContainer(player);
|
||||
obj_id resourceCrate = createResourceCrate(resourceId, AMT, inv);
|
||||
if (resourceCrate == null)
|
||||
{
|
||||
sendSystemMessageTestingOnly(player, "Resource grant failed. It is likely your inventory is full.");
|
||||
}
|
||||
else
|
||||
{
|
||||
resourceName = " \\#pcontrast1 " + getResourceName(resourceId) + "\\#. a type of " + getClassString(getResourceClass(resourceId));
|
||||
prose_package proseSuccess = prose.getPackage(resource.SID_SAMPLE_LOCATED, resourceName, AMT);
|
||||
sendSystemMessageProse(player, proseSuccess);
|
||||
}
|
||||
return SCRIPT_CONTINUE;
|
||||
}
|
||||
public String[] buildAvailableResourceTree(location loc, String topParent) throws InterruptedException
|
||||
{
|
||||
resource_density[] resources = requestResourceList(loc, 0.0f, 1.0f, topParent);
|
||||
String[] resourceTree = buildSortedResourceTree(resources, topParent, 0);
|
||||
return resourceTree;
|
||||
}
|
||||
public String[] buildAllAvailableResourceTree(String topParent) throws InterruptedException
|
||||
{
|
||||
Vector allResources = new Vector();
|
||||
allResources.setSize(0);
|
||||
for (int i = 1; i < (RESOURCE_PLANETS.length - 1); i++)
|
||||
{
|
||||
resource_density[] resources = requestResourceList(new location(0, 0, 0, RESOURCE_PLANETS[i]), 0.0f, 1.0f, topParent);
|
||||
allResources = utils.concatArrays(allResources, resources);
|
||||
}
|
||||
resource_density[] resources = new resource_density[allResources.size()];
|
||||
allResources.toArray(resources);
|
||||
String[] resourceTree = buildSortedResourceTree(resources, topParent, 0);
|
||||
return resourceTree;
|
||||
}
|
||||
public String[] buildSortedResourceTree(resource_density[] resources, String topParent, int branchLevel) throws InterruptedException
|
||||
{
|
||||
Vector resourceTree = new Vector();
|
||||
resourceTree.setSize(0);
|
||||
if (resources != null)
|
||||
{
|
||||
for (int i = 0; i < resources.length; i++)
|
||||
{
|
||||
if (!isResourceDerivedFrom(resources[i].getResourceType(), topParent))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
String parent = getResourceClass(resources[i].getResourceType());
|
||||
String child = null;
|
||||
if (parent == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
while (!parent.equals(topParent))
|
||||
{
|
||||
child = parent;
|
||||
parent = getResourceParentClass(child);
|
||||
}
|
||||
if (child == null)
|
||||
{
|
||||
child = "\\#pcontrast1 " + getResourceName(resources[i].getResourceType()) + "\\#.";
|
||||
}
|
||||
for (int j = 0; j < branchLevel; j++)
|
||||
{
|
||||
child = " " + child;
|
||||
}
|
||||
if (resourceTree.indexOf(child) == -1)
|
||||
{
|
||||
resourceTree.add(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < resourceTree.size(); i++)
|
||||
{
|
||||
String parent = ((String)resourceTree.get(i)).trim();
|
||||
String[] childBranch = buildSortedResourceTree(resources, parent, branchLevel + 1);
|
||||
for (int j = 0; j < childBranch.length; j++)
|
||||
{
|
||||
resourceTree.add(++i, childBranch[j]);
|
||||
}
|
||||
}
|
||||
String[] _resourceTree = new String[0];
|
||||
if (resourceTree != null)
|
||||
{
|
||||
_resourceTree = new String[resourceTree.size()];
|
||||
resourceTree.toArray(_resourceTree);
|
||||
}
|
||||
return _resourceTree;
|
||||
}
|
||||
public void cleanScriptVars() throws InterruptedException
|
||||
{
|
||||
obj_id self = getSelf();
|
||||
utils.removeScriptVar(self, "resourceList");
|
||||
utils.removeScriptVar(self, "planet");
|
||||
}
|
||||
public String getClassString(String className) throws InterruptedException
|
||||
{
|
||||
final String resourceTable = "datatables/resource/resource_tree.iff";
|
||||
String classString = "";
|
||||
int row = dataTableSearchColumnForString(className, 1, resourceTable);
|
||||
int column = 2;
|
||||
while ((classString == null || classString.length() == 0) && column <= 9)
|
||||
{
|
||||
classString = dataTableGetString(resourceTable, row, column);
|
||||
column++;
|
||||
}
|
||||
return classString;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user