include library.hue; include library.sui; include library.utils; include library.features; const string_id MNU_COLOR = new string_id("sui", "set_color"); const string_id MNU_COLOR_LENS = new string_id("sui", "color_lens"); const string_id MNU_COLOR_FRAME = new string_id("sui", "color_frame"); const string SCRIPTVAR_FRAME_PID = "goggles.frame.pid"; const string SCRIPTVAR_LENS_PID = "goggles.lens.pid"; const string TBL = "datatables/item/goggles/indices.iff"; const string[] COLLECTOR_EDITION_ITEMS = { "object/tangible/wearables/goggles/goggles_s01.iff", "object/tangible/wearables/goggles/goggles_s02.iff", "object/tangible/wearables/goggles/goggles_s03.iff", "object/tangible/wearables/goggles/goggles_s04.iff", "object/tangible/wearables/goggles/goggles_s05.iff", "object/tangible/wearables/goggles/goggles_s06.iff" }; trigger OnInitialize() { messageTo (self, "validateGoggles", null, 5, false); setHitpoints(self, getMaxHitpoints(self)); setAutoInsured(self); return SCRIPT_CONTINUE; } trigger OnObjectMenuRequest(obj_id player, menu_info mi) { if ( !utils.isNestedWithin(self, player) ) return SCRIPT_CONTINUE; string template = utils.getTemplateFilenameNoPath(self); string frameVar = dataTableGetString(TBL, template, "FRAME"); string lensVar = dataTableGetString(TBL, template, "LENS"); if ( (frameVar != null && !frameVar.equals("") && !frameVar.equals("none")) || (lensVar != null && !lensVar.equals("") && !lensVar.equals("none")) ) { int mnuColor = mi.addRootMenu(menu_info_types.SERVER_MENU1, MNU_COLOR); if ( mnuColor > -1 && (( getContainedBy(self) != getOwner(self) ) || isGod(player)) ) { if ( frameVar != null && !frameVar.equals("") && !frameVar.equals("none") ) int mnuColorFrame = mi.addSubMenu(mnuColor, menu_info_types.SERVER_MENU2, MNU_COLOR_FRAME); if ( lensVar != null && !lensVar.equals("") && !lensVar.equals("none") ) int mnuColorLens = mi.addSubMenu(mnuColor, menu_info_types.SERVER_MENU3, MNU_COLOR_LENS); } } return SCRIPT_CONTINUE; } trigger OnObjectMenuSelect(obj_id player, int item) { if ( !utils.isNestedWithin(self, player) ) return SCRIPT_CONTINUE; string template = utils.getTemplateFilenameNoPath(self); if ( item == menu_info_types.SERVER_MENU1 ) { if ( getContainedBy(self) == getOwner(self) ) { sendSystemMessage (player, new string_id ("error_message", "equipped_goggles")); // You may only alter the color of your goggles when they are unequipped. } else { sendSystemMessage (player, new string_id ("error_message", "goggle_submenu")); // Please select a sub-option to set the color of your goggles. } } else if ( item == menu_info_types.SERVER_MENU2 ) //color frame { if ( utils.hasScriptVar(self, SCRIPTVAR_FRAME_PID) ) { int oldpid = utils.getIntScriptVar(self, SCRIPTVAR_FRAME_PID); sui.closeSUI(player, oldpid); utils.removeScriptVar(self, SCRIPTVAR_FRAME_PID); } string frameVar = dataTableGetString(TBL, template, "FRAME"); if ( frameVar != null && !frameVar.equals("") && !frameVar.equals("none") ) { int pid_frame = sui.colorize(self, player, self, frameVar, "handleColorizeFrame"); if ( pid_frame > -1 ) utils.setScriptVar(self, SCRIPTVAR_FRAME_PID, pid_frame); } } else if ( item == menu_info_types.SERVER_MENU3 ) //color lens { if ( utils.hasScriptVar(self, SCRIPTVAR_LENS_PID) ) { int oldpid = utils.getIntScriptVar(self, SCRIPTVAR_LENS_PID); sui.closeSUI(player, oldpid); utils.removeScriptVar(self, SCRIPTVAR_LENS_PID); } string lensVar = dataTableGetString(TBL, template, "LENS"); if ( lensVar != null && !lensVar.equals("") && !lensVar.equals("none") ) { int pid_lens = sui.colorize(self, player, self, lensVar, "handleColorizeLens"); if ( pid_lens > -1 ) utils.setScriptVar(self, SCRIPTVAR_LENS_PID, pid_lens); } } return SCRIPT_CONTINUE; } messageHandler handleColorizeFrame() { utils.removeScriptVar(self, SCRIPTVAR_FRAME_PID); int bp = sui.getIntButtonPressed(params); if ( bp == sui.BP_CANCEL ) return SCRIPT_CONTINUE; obj_id player = sui.getPlayerId(params); if ( !isIdValid(player) ) return SCRIPT_CONTINUE; string template = utils.getTemplateFilenameNoPath(self); string frameVar = dataTableGetString(TBL, template, "FRAME"); if ( frameVar != null && !frameVar.equals("") && !frameVar.equals("none") ) { int idx = sui.getColorPickerIndex(params); if ( idx > -1 ) { hue.setColor(self, frameVar, idx); } } return SCRIPT_CONTINUE; } messageHandler handleColorizeLens() { utils.removeScriptVar(self, SCRIPTVAR_LENS_PID); int bp = sui.getIntButtonPressed(params); if ( bp == sui.BP_CANCEL ) return SCRIPT_CONTINUE; obj_id player = sui.getPlayerId(params); if ( !isIdValid(player) ) return SCRIPT_CONTINUE; string template = utils.getTemplateFilenameNoPath(self); string lensVar = dataTableGetString(TBL, template, "LENS"); if ( lensVar != null && !lensVar.equals("") && !lensVar.equals("none") ) { int idx = sui.getColorPickerIndex(params); if ( idx > -1 ) { hue.setColor(self, lensVar, idx); } } return SCRIPT_CONTINUE; } messageHandler validateGoggles() { boolean validGoggles = true; if (!isSEGoggle(self)) return SCRIPT_CONTINUE; obj_id owner = getOwner(self); if (!isIdValid(owner)) validGoggles = false; else { obj_id inv = utils.getInventoryContainer(owner); obj_id bank = utils.getPlayerBank(owner); obj_id objOnFace = getObjectInSlot(owner, "eyes"); if ( !isIdValid(inv) || !isIdValid(bank) ) validGoggles = false; if (!features.isCollectorEdition(owner)) validGoggles = false; else { obj_id container = getContainedBy(self); if (!( container == inv || container == bank || objOnFace == self)) validGoggles = false; } } if (!validGoggles) { if (isIdValid(owner)) sendSystemMessage (owner, new string_id ("error_message", "destroy_goggle")); destroyObject(self); return SCRIPT_CONTINUE; } return SCRIPT_CONTINUE; } boolean isSEGoggle(obj_id item) { for ( int i = 0; i < COLLECTOR_EDITION_ITEMS.length; i++ ) { if (getTemplateName(item) == COLLECTOR_EDITION_ITEMS[i]) return true; } return false; }