mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-31 00:15:54 -04:00
340 lines
9.3 KiB
Plaintext
340 lines
9.3 KiB
Plaintext
include library.callable;
|
|
include library.hue;
|
|
include library.sui;
|
|
include library.utils;
|
|
include library.pclib;
|
|
include library.prose;
|
|
include library.pet_lib;
|
|
include library.vehicle;
|
|
include java.util.Enumeration;
|
|
|
|
const string SCRIPTVAR_PID = "vehicletool.pid";
|
|
const string SCRIPTVAR_PLAYER = "vehicletool.player";
|
|
const string SCRIPTVAR_TARGET = "vehicletool.target";
|
|
const string SCRIPTVAR_OPT = "vehicletool.opt";
|
|
|
|
const string STF = "tool/customizer";
|
|
|
|
const string_id MNU_CUSTOMIZE = new string_id(STF, "mnu_customize");
|
|
|
|
const string_id OPT_COLOR_TRIM = new string_id(STF, "opt_color_trim");
|
|
const string_id OPT_COLOR_FRAME = new string_id(STF, "opt_color_frame");
|
|
|
|
const string_id SID_VEHICLE_ONLY = new string_id(STF, "vehicle_only");
|
|
|
|
const string_id SID_NEED_CONSENT = new string_id(STF, "need_consent_vehicle");
|
|
|
|
const string_id SID_NO_DATA = new string_id(STF, "no_data");
|
|
const string_id PROSE_NO_CUSTOMIZATION = new string_id(STF, "prose_no_customization");
|
|
|
|
const string_id VAR_SELECT_PROMPT = new string_id(STF, "var_select_prompt");
|
|
|
|
const string_id PROSE_COMPLETE = new string_id(STF, "prose_complete");
|
|
const string_id PROSE_COMPLETE_OWNER = new string_id(STF, "prose_complete_owner");
|
|
|
|
const string_id PROSE_CANCELLED = new string_id(STF, "prose_cancelled");
|
|
const string_id PROSE_CANCELLED_OWNER = new string_id(STF, "prose_cancelled_owner");
|
|
|
|
const string_id PROSE_FAIL = new string_id(STF, "prose_fail");
|
|
const string_id PROSE_FAIL_OWNER = new string_id(STF, "prose_fail_owner");
|
|
|
|
const string TBL = "datatables/item/vehicle_customizer/indices.iff";
|
|
|
|
trigger OnAboutToBeTransferred(obj_id dest, obj_id transferer)
|
|
{
|
|
cleanupCustomizationMenu();
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnObjectMenuRequest(obj_id player, menu_info mi)
|
|
{
|
|
if ( !utils.isNestedWithin(self, player) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
menu_info_data mid = mi.getMenuItemByType (menu_info_types.ITEM_USE);
|
|
if (mid != null)
|
|
mid.setServerNotify (true);
|
|
|
|
|
|
// int mnuColor = mi.addRootMenu(menu_info_types.SERVER_MENU1, MNU_CUSTOMIZE);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnObjectMenuSelect(obj_id player, int item)
|
|
{
|
|
if ( !utils.isNestedWithin(self, player) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if ( item == menu_info_types.SERVER_MENU1 || item == menu_info_types.ITEM_USE ) //customize
|
|
{
|
|
queueCommand(player, ##"customizeVehicle", self, "", COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
commandHandler cmdCustomizeVehicle()
|
|
{
|
|
if ( !isIdValid(self) || !isIdValid(target) )
|
|
{
|
|
sendSystemMessage(target, SID_VEHICLE_ONLY);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
obj_id vehicleobject = callable.getCallable(target, callable.CALLABLE_TYPE_RIDEABLE);
|
|
|
|
if(!isIdValid(vehicleobject) || !(vehicle.isDriveableVehicle(vehicleobject)))
|
|
{
|
|
sendSystemMessage(target, SID_VEHICLE_ONLY);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
obj_id master = pet_lib.getMaster(vehicleobject);
|
|
|
|
if ( !isIdValid(master) )
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
if (master != target)
|
|
{
|
|
sendSystemMessage(target, SID_NEED_CONSENT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
cleanupCustomizationMenu(target);
|
|
|
|
string template = utils.getTemplateFilenameNoPath(vehicleobject);
|
|
|
|
dictionary row = dataTableGetRow(TBL, template);
|
|
|
|
if ( row == null || row.isEmpty() )
|
|
{
|
|
prose_package ppNoCustomization = prose.getPackage(PROSE_NO_CUSTOMIZATION, vehicleobject);
|
|
sendSystemMessageProse(target, ppNoCustomization);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
resizeable string[] entries = new string[0];
|
|
resizeable string[] opt = new string[0];
|
|
|
|
Enumeration keys = row.keys();
|
|
|
|
while ( keys.hasMoreElements() )
|
|
{
|
|
string key = (string)keys.nextElement();
|
|
if ( !key.equals("TEMPLATE") )
|
|
{
|
|
string var = row.getString(key);
|
|
|
|
if ( var != null && !var.equals("") && !var.equals("none") )
|
|
{
|
|
entries = utils.addElement(entries, "@" + STF + ":opt_color_" + toLower(key));
|
|
opt = utils.addElement(opt, var);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( entries != null && entries.length > 0 && opt != null && opt.length > 0 )
|
|
{
|
|
string title = utils.getStringName(vehicleobject);
|
|
string prompt = utils.packStringId(VAR_SELECT_PROMPT);
|
|
int pid = sui.listbox(self, target, prompt, sui.OK_CANCEL, title, entries, "handleSelectionSui");
|
|
if ( pid > -1 )
|
|
{
|
|
utils.setScriptVar(self, SCRIPTVAR_PID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_PLAYER, target);
|
|
utils.setScriptVar(self, SCRIPTVAR_TARGET, vehicleobject);
|
|
utils.setScriptVar(self, SCRIPTVAR_OPT, opt);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
prose_package ppNoCustomization = prose.getPackage(PROSE_NO_CUSTOMIZATION, vehicleobject);
|
|
sendSystemMessageProse(target, ppNoCustomization);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
void cleanupCustomizationMenu(obj_id player)
|
|
{
|
|
obj_id self = getSelf();
|
|
|
|
if ( utils.hasScriptVar(self, SCRIPTVAR_PID) )
|
|
{
|
|
int oldpid = utils.getIntScriptVar(self, SCRIPTVAR_PID);
|
|
sui.closeSUI(player, oldpid);
|
|
|
|
clearTrackingScriptVars(self);
|
|
}
|
|
}
|
|
|
|
void cleanupCustomizationMenu()
|
|
{
|
|
obj_id self = getSelf();
|
|
|
|
if ( utils.hasScriptVar(self, SCRIPTVAR_PLAYER) )
|
|
{
|
|
obj_id player = utils.getObjIdScriptVar(self, SCRIPTVAR_PLAYER);
|
|
if ( isIdValid(player) )
|
|
cleanupCustomizationMenu(player);
|
|
}
|
|
}
|
|
|
|
void clearTrackingScriptVars(obj_id self)
|
|
{
|
|
utils.removeScriptVar(self, SCRIPTVAR_PID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_PLAYER);
|
|
utils.removeScriptVar(self, SCRIPTVAR_TARGET);
|
|
utils.removeScriptVar(self, SCRIPTVAR_OPT);
|
|
}
|
|
|
|
messageHandler handleSelectionSui()
|
|
{
|
|
obj_id player = utils.getObjIdScriptVar(self, SCRIPTVAR_PLAYER);
|
|
obj_id target = utils.getObjIdScriptVar(self, SCRIPTVAR_TARGET);
|
|
string[] opt = utils.getStringArrayScriptVar(self, SCRIPTVAR_OPT);
|
|
|
|
clearTrackingScriptVars(self);
|
|
|
|
if ( !isIdValid(player) || !isIdValid(target) || opt == null || opt.length == 0 )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id master = pet_lib.getMaster(target);
|
|
if ( !isIdValid(master) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
int bp = sui.getIntButtonPressed(params);
|
|
int idx = sui.getListboxSelectedRow(params);
|
|
if ( bp == sui.BP_CANCEL || idx == -1 || idx >= opt.length )
|
|
{
|
|
prose_package ppCancel = prose.getPackage(PROSE_CANCELLED, target);
|
|
sendSystemMessageProse(player, ppCancel);
|
|
|
|
if ( master != player )
|
|
{
|
|
prose_package ppCancelOwner = prose.getPackage(PROSE_CANCELLED_OWNER, player, target);
|
|
sendSystemMessageProse(master, ppCancelOwner);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
int pid = sui.colorize(self, player, target, opt[idx], "handleColorSelection");
|
|
if ( pid > - 1 )
|
|
{
|
|
utils.setScriptVar(self, SCRIPTVAR_PID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_PLAYER, player);
|
|
utils.setScriptVar(self, SCRIPTVAR_TARGET, target);
|
|
utils.setScriptVar(self, SCRIPTVAR_OPT, opt[idx]);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleColorSelection()
|
|
{
|
|
obj_id player = utils.getObjIdScriptVar(self, SCRIPTVAR_PLAYER);
|
|
obj_id target = utils.getObjIdScriptVar(self, SCRIPTVAR_TARGET);
|
|
string var = utils.getStringScriptVar(self, SCRIPTVAR_OPT);
|
|
|
|
clearTrackingScriptVars(self);
|
|
|
|
if ( !isIdValid(player) || !isIdValid(target) || var == null || var.equals("") )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id master = pet_lib.getMaster(target);
|
|
if ( !isIdValid(master) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if ( bp == sui.BP_CANCEL )
|
|
{
|
|
prose_package ppCancel = prose.getPackage(PROSE_CANCELLED, target);
|
|
sendSystemMessageProse(player, ppCancel);
|
|
|
|
if ( master != player )
|
|
{
|
|
prose_package ppCancelOwner = prose.getPackage(PROSE_CANCELLED_OWNER, player, target);
|
|
sendSystemMessageProse(master, ppCancelOwner);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
int idx = sui.getColorPickerIndex(params);
|
|
if ( idx > -1 )
|
|
{
|
|
//debugSpeakMsg(player, "attempting to setColor: var = " + var + " idx = " + idx);
|
|
dictionary d = new dictionary();
|
|
d.put("player", player);
|
|
d.put("target", target);
|
|
d.put("master", master);
|
|
d.put("tool", self);
|
|
|
|
dictionary dc = new dictionary();
|
|
dc.put(var, idx);
|
|
|
|
d.put("dc", dc);
|
|
|
|
messageTo(target, "handleSetCustomization", d, 0f, false);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler customizationSuccess()
|
|
{
|
|
if ( params != null && !params.isEmpty() )
|
|
{
|
|
obj_id player = params.getObjId("player");
|
|
obj_id target = params.getObjId("target");
|
|
obj_id master = params.getObjId("master");
|
|
|
|
if ( isIdValid(player) && isIdValid(target) && isIdValid(master) )
|
|
{
|
|
prose_package ppComplete = prose.getPackage(PROSE_COMPLETE, target);
|
|
sendSystemMessageProse(player, ppComplete);
|
|
|
|
if ( master != player && exists(master) && master.isLoaded() )
|
|
{
|
|
prose_package ppCompleteOwner = prose.getPackage(PROSE_COMPLETE_OWNER, player, target);
|
|
sendSystemMessageProse(master, ppCompleteOwner);
|
|
}
|
|
|
|
utils.setScriptVar(target, "customizationUpdated", player);
|
|
}
|
|
}
|
|
|
|
incrementCount(self, -1);
|
|
if ( getCount(self) < 1 )
|
|
destroyObject(self);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler customizationFailed()
|
|
{
|
|
if ( params != null && !params.isEmpty() )
|
|
{
|
|
obj_id player = params.getObjId("player");
|
|
obj_id target = params.getObjId("target");
|
|
obj_id master = params.getObjId("master");
|
|
|
|
if ( isIdValid(player) && isIdValid(target) && isIdValid(master) )
|
|
{
|
|
prose_package ppFail = prose.getPackage(PROSE_FAIL, target);
|
|
sendSystemMessageProse(player, ppFail);
|
|
|
|
if ( master != player && exists(master) && master.isLoaded() )
|
|
{
|
|
prose_package ppFailOwner = prose.getPackage(PROSE_FAIL_OWNER, player, target);
|
|
sendSystemMessageProse(master, ppFailOwner);
|
|
}
|
|
}
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|