//******************************************************************************************* //******************************************************************************************* // ALL INCLUDES //******************************************************************************************* //******************************************************************************************* include java.util.Vector; include library.ai_lib; include library.chat; include library.dressup; include library.hue; include library.money; include library.player_structure; include library.prose; include library.session; include library.smuggler; include library.static_item; include library.sui; include library.turnstile; include library.utils; include library.vendor_lib; include library.xp; //******************************************************************************************* //******************************************************************************************* // ALL INHERITS //******************************************************************************************* //******************************************************************************************* inherits terminal.base.base_terminal; //******************************************************************************************* //******************************************************************************************* // ALL CONSTANTS //******************************************************************************************* //******************************************************************************************* //-----------------LOGGING const boolean LOGGING_ON = true; const string LOGGING_CATEGORY = "greeter"; const string_id SID_GREETER_STATUS = new string_id("player_structure", "greeter_status"); //not used? const string_id SID_GREETER_INIT = new string_id("player_structure", "greeter_init"); //not used? const string_id SID_GREETER_INITIALIZED = new string_id("player_structure", "greeter_initialized_message" ); //not used? //Greeter Menu Options const string_id SID_GREETER_CONTROL = new string_id("player_structure", "greeter_control"); const string_id SID_REMOVE_GREETER = new string_id("player_structure", "remove_greeter"); //Greeter SUI Menu Options const string_id SID_CUSTOMIZE_GREETER = new string_id("player_structure", "customize_greeter"); const string_id SID_CHANGE_NAME = new string_id("player_structure", "greeter_change_name"); const string_id SID_GREETER_PREVIEW_ALL = new string_id("player_structure", "greeter_preview_all"); const string_id SID_GREETER_MODIFY_DELAY = new string_id("player_structure", "greeter_modify_greeting_delay"); const string_id SID_GREETER_SAVE_GREET = new string_id("player_structure", "greeter_save_greet"); const string_id SID_GREETER_LOAD_GREET = new string_id("player_structure", "greeter_load_greet"); const string_id SID_GREETER_ACTIVE_ON = new string_id("player_structure", "greeter_activation_on"); const string_id SID_GREETER_ACTIVE_OFF = new string_id("player_structure", "greeter_activation_off"); const string_id SID_GREETER_VOICE_ON = new string_id("player_structure", "greeter_voicing_on"); const string_id SID_GREETER_VOICE_OFF = new string_id("player_structure", "greeter_voicing_off"); const string_id SID_GREETER_ANIMATING_ON = new string_id("player_structure", "greeter_animating_on"); const string_id SID_GREETER_ANIMATING_OFF = new string_id("player_structure", "greeter_animating_off"); const string_id SID_GREETER_SOUND_ON = new string_id("player_structure", "greeter_sounds_on"); const string_id SID_GREETER_SOUND_OFF = new string_id("player_structure", "greeter_sounds_off"); const string_id SID_GREETER_MOOD_ON = new string_id("player_structure", "greeter_mood_on"); const string_id SID_GREETER_MOOD_OFF = new string_id("player_structure", "greeter_mood_off"); const string_id SID_GREETER_EFFECT_ON = new string_id("player_structure", "greeter_effects_on"); const string_id SID_GREETER_EFFECT_OFF = new string_id("player_structure", "greeter_effects_off"); const string_id SID_GREETER_STATEMENT_ON = new string_id("player_structure", "greeter_statement_on"); const string_id SID_GREETER_STATEMENT_OFF = new string_id("player_structure", "greeter_statement_off"); const string_id SID_COLOR = new string_id("player_structure", "greeter_color"); //Message when greeter abilities turned on/off const string_id SID_GREETER_WAS_RENAMED = new string_id("player_structure", "greeter_renamed"); const string_id SID_ACTIVATION_ENABLED = new string_id("player_structure", "greeter_activation_enabled"); const string_id SID_ACTIVATION_DISABLED = new string_id("player_structure", "greeter_activation_disabled"); const string_id SID_VOICING_ENABLED = new string_id("player_structure", "greeter_voice_enabled"); const string_id SID_VOICING_DISABLED = new string_id("player_structure", "greeter_voice_disabled"); const string_id SID_ANIMATING_ENABLED = new string_id("player_structure", "greeter_animations_enabled"); const string_id SID_ANIMATING_DISABLED = new string_id("player_structure", "greeter_animations_disabled"); const string_id SID_SOUNDS_ENABLED = new string_id("player_structure", "greeter_sounds_enabled"); const string_id SID_SOUNDS_DISABLED = new string_id("player_structure", "greeter_sounds_disabled"); const string_id SID_MOOD_ENABLED = new string_id("player_structure", "greeter_mood_enabled"); const string_id SID_MOOD_DISABLED = new string_id("player_structure", "greeter_mood_disabled"); const string_id SID_EFFECT_ENABLED = new string_id("player_structure", "greeter_effects_enabled"); const string_id SID_EFFECT_DISABLED = new string_id("player_structure", "greeter_effects_disabled"); const string_id SID_STATEMENT_ENABLED = new string_id("player_structure", "greeter_statement_enabled"); const string_id SID_STATEMENT_DISABLED = new string_id("player_structure", "greeter_statement_disabled"); const string_id SID_GREETER_DRESSING_NOT_AVAIL = new string_id("player_structure", "greeter_dressing_not_avail"); const string_id SID_MIN_FIVE_TIMER = new string_id("player_structure", "greeter_min_delay"); const string_id SID_MAX_TIMER = new string_id("player_structure", "greeter_max_delay"); const string_id SID_MIN_RADIUS = new string_id("player_structure", "greeter_min_radius"); const string_id SID_MAX_RADIUS = new string_id("player_structure", "greeter_max_radius"); const string_id SID_GREETER_SAVE_MAX = new string_id("player_structure", "greeter_max_saves"); const string_id SID_NAME_ALREADY_EXISTS = new string_id("player_structure", "greeter_name_already_exists"); const string_id SID_GREETER_RANDOM_GREETING_SELECTED = new string_id("player_structure", "greeter_random_selected"); //Misc. Sys Messages const string_id SID_OBSCENE = new string_id("player_structure", "greeter_obscene"); const string_id SID_CANT_MOVE = new string_id("player_structure", "greeter_cant_move"); const string_id SID_GREETER_NOT_IN_SHIP = new string_id("player_structure", "greeter_not_in_ship"); const string_id SID_GREETER_PUBLIC_ONLY = new string_id("player_structure", "greeter_public_only"); const string_id SID_NO_SAVED_GREETS = new string_id("player_structure", "greeter_no_saves"); const string_id SID_GREETING_LOADED = new string_id("player_structure", "greeter_greeting_loaded"); const string_id SID_GREETING_RADIUS_CHANGED = new string_id("player_structure", "greeter_radius_changed"); const string_id SID_GREETING_DELAY_CHANGED = new string_id("player_structure", "greeter_delay_changed"); const string_id SID_RANDOMIZED_GREETINGS_OFF = new string_id("player_structure", "greeter_random_greetings_off"); const string_id SID_RANDOMIZED_GREETINGS_ON = new string_id("player_structure", "greeter_random_greetings_on"); const string_id SID_NO_SAY_CHAT_DATA = new string_id("player_structure", "greeter_no_say_chat_data_found"); const string_id SID_NO_SOUND_VO_EFFECT_DATA = new string_id("player_structure", "greeter_no_sound_vo_effect_data_found"); const string SUI_GREETER_INSTRUCTIONS_TITLE = "@player_structure:greeter_main_instructions_title"; const string SUI_GREETER_INSTRUCTIONS_DESCR = "@player_structure:greeter_main_instructions_description"; const string SUI_GREETER_COLOR_DESC = "@player_structure:greeter_color_description"; const string SUI_GREETER_COLOR_TITLE = "@player_structure:greeter_color_title"; const string SUI_GREETER_LOAD_DESCR = "@player_structure:greeter_load_description"; const string SUI_GREETER_LOAD_TITLE = "@player_structure:greeter_load_title"; const string SUI_GREETER_SAVE_NAME_DESCR = "@player_structure:greeter_save_name_description"; const string SUI_GREETER_SAVE_NAME_TITLE = "@player_structure:greeter_save_name_title"; const string GREETER_RADIUS_DESCRIPTION = "@player_structure:greeter_radius_instructions_description"; const string GREETER_RADIUS_TITLE = "@player_structure:greeter_radius_instructions_title"; const string GREETER_DELAY_DESCRIPTION = "@player_structure:greeter_delay_instructions_description"; const string GREETER_DELAY_TITLE = "@player_structure:greeter_delay_instructions_title"; const string MENU_CUSTOMIZE_GREETER = "@player_structure:customize_greeter"; const string MENU_CHANGE_NAME = "@player_structure:greeter_change_name"; const string MENU_RANDOMIZED_GREETINGS_ON = "@player_structure:greeter_randomized_greeting_on"; const string MENU_RANDOMIZED_GREETINGS_OFF = "@player_structure:greeter_randomized_greeting_off"; const string MENU_GREETER_RANDOM_ALL = "@player_structure:greeter_random_greeting"; const string MENU_GREETER_PREVIEW_ALL = "@player_structure:greeter_preview_all"; const string MENU_GREETER_MODIFY_DELAY = "@player_structure:greeter_modify_greeting_delay"; const string MENU_GREETER_SAVE_GREET = "@player_structure:greeter_save_greet"; const string MENU_GREETER_LOAD_GREET = "@player_structure:greeter_load_greet"; const string MENU_GREETER_LIST_GREET = "@player_structure:greeter_list_greet"; const string MENU_GREETER_ACTIVE_ON = "@player_structure:greeter_activation_on"; const string MENU_GREETER_ACTIVE_OFF = "@player_structure:greeter_activation_off"; const string MENU_GREETER_VOICE_ON = "@player_structure:greeter_voicing_on"; const string MENU_GREETER_VOICE_OFF = "@player_structure:greeter_voicing_off"; const string MENU_GREETER_ANIMATING_ON = "@player_structure:greeter_animating_on"; const string MENU_GREETER_ANIMATING_OFF = "@player_structure:greeter_animating_off"; const string MENU_GREETER_SOUND_ON = "@player_structure:greeter_sounds_on"; const string MENU_GREETER_SOUND_OFF = "@player_structure:greeter_sounds_off"; const string MENU_GREETER_MOOD_ON = "@player_structure:greeter_mood_on"; const string MENU_GREETER_MOOD_OFF = "@player_structure:greeter_mood_off"; const string MENU_GREETER_EFFECT_ON = "@player_structure:greeter_effects_on"; const string MENU_GREETER_EFFECT_OFF = "@player_structure:greeter_effects_off"; const string MENU_GREETER_STATEMENT_ON = "@player_structure:greeter_statement_on"; const string MENU_GREETER_STATEMENT_OFF = "@player_structure:greeter_statement_off"; const string MENU_COLOR = "@player_structure:greeter_color"; const string MENU_GREETER_MODIFY_TRIGGER_VOL_RADIUS = "@player_structure:greeter_trigger_radius"; const string MENU_GREETER_CONVERSE_OTHER_GREETER = "@player_structure:greeter_converse_other_greeter"; const string MENU_GREETER_STOP_CONVERSE_OTHER_GREETER = "@player_structure:greeter_stop_converse_other_greeter"; const string MENU_GREETER_STATEMENT_EDIT = "@player_structure:greeter_statement_edit"; const string MENU_GREETER_SOUND_EDIT = "@player_structure:greeter_sound_edit"; const string MENU_GREETER_MOOD_EDIT = "@player_structure:greeter_mood_edit"; const string MENU_GREETER_ANIMATING_EDIT = "@player_structure:greeter_animating_edit"; const string MENU_GREETER_VOICE_EDIT = "@player_structure:greeter_voice_edit"; const string MENU_GREETER_EFFECT_EDIT = "@player_structure:greeter_effect_edit"; const string ALERT_VOLUME_NAME = "vendorTriggerVolume"; const string VOICE_OPTION = "voice"; const string SOUND_OPTION = "sound"; const string VOICE_STRING = "voice_string"; const string SOUND_STRING = "sound_string"; const string GREETER_INITIALIZE_SCRVAR = "greeter.oninitialize"; //helps to avoid toggling the volume off onInit. const string GREETER_VOICING_ENABLED = "voice_off"; const string GREETER_VOICING_DISABLED = "voice_on"; const string GREETER_ANIMATING_ENABLED = "anims_off"; const string GREETER_ANIMATING_DISABLED = "anims_on"; const string GREETER_SOUNDS_ENABLED = "sounds_off"; const string GREETER_SOUNDS_DISABLED = "sounds_on"; const string GREETER_MOOD_ENABLED = "mood_off"; const string GREETER_MOOD_DISABLED = "mood_on"; const string GREETER_STATEMENT_ENABLED = "spatial_off"; const string GREETER_STATEMENT_DISABLED = "spatial_on"; const string GREETER_CHANGE_NAME = "name_change"; const string GREETER_RANDOMIZED_GREETINGS_ON = "randomized_greetings_on"; const string GREETER_RANDOMIZED_GREETINGS_OFF = "randomized_greetings_off"; const string GREETER_COLOR_CHANGE = "color_change"; const string GREETER_RANDOM = "random_greeting"; const string GREETER_PREVIEW = "preview_all"; const string GREETER_SAVE_GREET = "save_greet"; const string GREETER_LIST_GREET = "list_greet"; const string GREETER_MODIFY_DELAY = "modify_delay"; const string GREETER_MODIFY_TRIGGER_VOL_RADIUS = "modify_trigger"; const string GREETER_GET_OTHER_GREETER = "get_other_greeter"; const string GREETER_START_ITERACTION = "greeter_interact"; const string GREETER_STOP_ITERACTION = "greeter_stop_interact"; const string LAST_OTHER_GREETER = "last_other_greeter"; const string GREETER_STATEMENT_EDIT = "edit_current_statement"; const string GREETER_MOOD_EDIT = "edit_current_mood"; const string GREETER_SOUNDS_EDIT = "edit_current_sounds"; const string GREETER_VOICING_EDIT = "edit_current_voicing"; const string GREETER_ANIMATING_EDIT = "edit_current_animating"; const string SAVE_SAY_CHAT = "say_chat="; const string SAVE_VOICE = "voice="; const string SAVE_MOOD = "mood="; const string SAVE_SOUND = "sound="; const string SAVE_EFFECT = "effect="; const string SAVE_ANIM = "say_anim="; const string COMMA = ","; const string PIPE = "|"; const int GREETER_BARK_TIMER_MAX = 60; const int GREETER_BARK_TIMER_MIN = 5; const int GREETER_COLOR_MAX = 4; const int GREETER_TRIGGER_VOL_MAX = 15; const int GREETER_TRIGGER_VOL_DEFAULT = 4; const int GREETER_TRIGGER_VOL_MIN = 1; const int GREETER_SAVE_MAX = 10; const int GREETER_TIMER_DELAY = 60; const int GREETER_CONVERSATION_LOOP_TIME = 3; const int GREETER_CONVERSATION_PAUSE_TIME = 10; const int GREETER_DELAY_AT_ONINITIALIZE = 3; const float MAX_GREETER_CONV_RANGE_FLOAT = 2.f; //SUI SCR VARS const string CATEGORY_ANIM_COL_NAMES_SCRVAR = vendor_lib.GREETER_VAR_PREFIX+".greeterAnimCategories"; const string CATEGORY_ANIM_COL_STRINGS_SCRVAR = vendor_lib.GREETER_VAR_PREFIX+".greeterAnimCategoriesStrings"; const string SELECTED_CAT_ANIM_SCRVAR = vendor_lib.GREETER_VAR_PREFIX+".greeterAnimCategorySelected"; const string SELECTED_CAT_ANIM_STR_SCRVAR = vendor_lib.GREETER_VAR_PREFIX+".greeterAnimCategorySelectedStrings"; const string CATEGORY_MOOD_COL_NAMES_SCRVAR = vendor_lib.GREETER_VAR_PREFIX+".greeterMoodCategories"; const string CATEGORY_MOOD_COL_STRINGS_SCRVAR = vendor_lib.GREETER_VAR_PREFIX+".greeterMoodCategoriesStrings"; const string SELECTED_CAT_MOOD_SCRVAR = vendor_lib.GREETER_VAR_PREFIX+".greeterMoodCategorySelected"; const string SELECTED_CAT_MOOD_STR_SCRVAR = vendor_lib.GREETER_VAR_PREFIX+".greeterMoodCategoryStringSelected"; const string PLAYER_SEL_GREETER_EFFECT_LIST = vendor_lib.GREETER_VAR_PREFIX+".greeterEffectListSelected"; const string PLAYER_SEL_GREETER_EFFECT_TYPE = vendor_lib.GREETER_VAR_PREFIX+".greeterEffectTypeSelected"; const string PLAYER_SEL_GREETER_STATEMENT_LIST = vendor_lib.GREETER_VAR_PREFIX+".greeterStatementSelected"; const string PLAYER_SEL_GREETER_SAVE_ELEMENT = vendor_lib.GREETER_VAR_PREFIX+".greeterSaveElementSelected"; const string PLAYER_SEL_GREETER_SOUND_VO_STRING_LIST = vendor_lib.GREETER_VAR_PREFIX+".greeterSoundVOStringList"; const string PLAYER_SEL_GREETER_SOUND_VO_SELECTION = vendor_lib.GREETER_VAR_PREFIX+".greeterSoundVOStringSelected"; //SUI PID SCR VAR const string GREETER_EFFECT_PID = "greeter_pid.effect_pid"; const string GREETER_MOOD_PID = "greeter_pid.mood_pid"; const string GREETER_ANIM_PID = "greeter_pid.anim_pid"; const string GREETER_MOOD_CATEGORY_PID = "greeter_pid.mood_cat_pid"; const string GREETER_ANIM_CATEGORY_PID = "greeter_pid.anim_cat_pid"; const string GREETER_STATEMENT_PID = "greeter_pid.statement_pid"; const string GREETER_ANIM_PARENT_PID = "greeter_pid.anim_parent_pid"; const string GREETER_PROGRAM_MAIN_PID = "greeter_pid.anim_main_menu_pid"; const string GREETER_BARK_PID = "greeter_pid.bark_pid"; const string GREETER_NAME_PID = "greeter_pid.name_pid"; const string GREETER_COLOR_PID = "greeter_pid.color_pid"; const string GREETER_RADIUS_PID = "greeter_pid.radius_pid"; const string GREETER_LOAD_GREETING_PID = "greeter_pid.load_greeting_pid"; const string GREETER_SAVE_NAME_PID = "greeter_pid.save_greeting_pid"; const string GREETER_GREETING_SELECT_PID = "greeter_pid.greeting_select_pid"; const string GREETER_GET_SAVED_GREETING_LIST_PID = "greeter_pid.get_saved_greeting_list_pid"; const string GREETER_GET_RANDOM_PID = "greeter_pid.get_random_pid"; //Main Menu SCR VAR const string GREETER_MAIN_MENU_STRINGS = "greeter_data.greeter_menu_strings"; const string GREETER_MAIN_MENU_DATA = "greeter_data.greeter_menu_data"; const string GREETER_COLOR_SECONDARY = "controller.color.secondary"; const string GREETER_COLOR_PRIMARY = "controller.color.primary"; const string GREETER_DELAY_TIMER_CURRENT = "controller.delay_current"; const string GREETER_TRIGGER_VOL_CURRENT = "controller.trigger_current"; const string GREETER_SAVE_DATA = "controller.save_data"; const string GREETER_SAVE_GREETING = "controller.save_greeting"; const string GREETER_SAVED_GREET_DATA = "controller.saved_data"; const string GREETER_SAVED_GREET_NAMES = "controller.saved_names"; const string FOUND_OTHER_GREETERS = "controller.other_greeter_found"; const string FOUND_OTHER_GREETER_TIMER = "controller.other_greeter_search_timer"; const string[] PLAYER_GREETING_MAINT_MENU = { "Load", "Delete" }; const string[] HUMANOID_ANIMATIONS = { "cough_polite", "point_to_self", "nod_head_once", "clap_rousing", "laugh_cackle", "nod_head_multiple", "rub_chin_thoughtful", "shake_head_no", "check_wrist_device", "hair_flip", "taunt1", "taunt2", "shake_head_disgust", "wave_finger_warning", "wave_on_dismissing", "embarrassed", "point_away", "point_down", "point_forward", "point_left", "point_right", "point_up", "shrug_hands", "shrug_shoulders", "scratch_head", "conversation_1", "conversation_2", "conversation_1", "conversation_2", "conversation_1", "conversation_2", "conversation_1", "conversation_2" }; const string[] JAWA_ANIMATIONS = { "cough_polite", "alert", "angry", "conversation_1", "conversation_2", "laugh_cackle", "nervous", "point_forward", "shake_head_no", "shrug_hands", "sp_01", "sp_02", "threaten", "yes" }; const string[] EWOK_ANIMATIONS = { "cough_polite", "alert", "angry", "conversation_1", "explain", "greet", "laugh_cackle", "nervous", "point_forward", "ewok_pound_fist_chest", "shake_head_no", "shrug_shoulders", "smell_air", "ewok_sp_01", "threaten", "threaten_combat", "vocalize", "yes" }; //******************************************************************************************* //******************************************************************************************* // ALL TRIGGERS //******************************************************************************************* //******************************************************************************************* trigger OnAttach() { blog("vendor.greeter.OnAttach init"); removeTriggerVolume("alertTriggerVolume"); setInvulnerable(self, true); if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; if(hasObjVar(controller, vendor_lib.GREETER_COLOR_OBJVAR) && getBooleanObjVar(controller, vendor_lib.GREETER_COLOR_OBJVAR) == true) messageTo(self, "colorGreeter", null, 0, false); if(hasObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR)) { //do not turn off the trigger volume, do not remove GREETER_IS_ACTIVATED_OBJVAR utils.setScriptVar(self, GREETER_INITIALIZE_SCRVAR, true); blog("vendor.greeter.OnAttach Setting up Trigger Volume"); messageTo(self, "handleCallVolumeToggleOnInitialized", null, GREETER_DELAY_AT_ONINITIALIZE, false); } //find other greeters conversableGreeterInRange(self); if(!hasObjVar(controller, FOUND_OTHER_GREETERS) || getBooleanObjVar(controller, FOUND_OTHER_GREETERS) != true) return SCRIPT_CONTINUE; if(hasObjVar(controller, vendor_lib.GREETER_CONVERSE) && getBooleanObjVar(controller, vendor_lib.GREETER_CONVERSE) == true) messageTo(self, "handleConverseWithOtherGreeter", null, GREETER_CONVERSATION_LOOP_TIME, false); return SCRIPT_CONTINUE; } trigger OnInitialize() { blog("vendor.greeter.OnInitialize init"); if(isObjectPersisted(self)) { blog("vendor.greeter.OnInitialize Greeter is persisted"); messageTo(self, "handleCallGreeterUpdate", null, 1, false); return SCRIPT_CONTINUE; } blog("vendor.greeter.OnInitialize set invuln"); // Make sure invulnerable. setInvulnerable(self, true); if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; blog("vendor.greeter.OnInitialize has controller ID"); obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; if(hasObjVar(controller, vendor_lib.GREETER_COLOR_OBJVAR) && getBooleanObjVar(controller, vendor_lib.GREETER_COLOR_OBJVAR) == true) messageTo(self, "colorGreeter", null, 0, false); blog("vendor.greeter.OnInitialize controller ID received"); // Re-enable area barks. if(hasObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR)) { blog("vendor.greeter.OnInitialize Greeter is already active"); //do not turn off the trigger volume, do not remove GREETER_IS_ACTIVATED_OBJVAR utils.setScriptVar(self, GREETER_INITIALIZE_SCRVAR, true); blog("vendor.greeter.OnInitialize Setting up Trigger Volume"); messageTo(self, "handleCallVolumeToggleOnInitialized", null, GREETER_DELAY_AT_ONINITIALIZE, false); } blog("vendor.greeter.OnInitialize Trigger Done checking controller"); //find other greeters conversableGreeterInRange(self); if(!hasObjVar(controller, FOUND_OTHER_GREETERS) || getBooleanObjVar(controller, FOUND_OTHER_GREETERS) != true) return SCRIPT_CONTINUE; if(hasObjVar(controller, vendor_lib.GREETER_CONVERSE) && getBooleanObjVar(controller, vendor_lib.GREETER_CONVERSE) == true) messageTo(self, "handleConverseWithOtherGreeter", null, GREETER_CONVERSATION_LOOP_TIME, false); return SCRIPT_CONTINUE; } trigger OnGiveItem(obj_id item, obj_id player) { return SCRIPT_CONTINUE; } //------------------------------------------------ // OnObjectMenuRequest //------------------------------------------------ trigger OnObjectMenuRequest( obj_id player, menu_info mi ) { blog("vendor.greeter.OnObjectMenuRequest init"); obj_id ownerId = getOwner(self); if(!isValidId(ownerId) || !exists(ownerId)) return SCRIPT_CONTINUE; blog("vendor.greeter.OnObjectMenuRequest Owner received"); obj_id pInv = utils.getInventoryContainer(player); if(!isValidId(pInv) || !exists(pInv)) return SCRIPT_CONTINUE; if(player != ownerId) return SCRIPT_CONTINUE; if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("vendor.greeter.OnObjectMenuRequest validation complete, controller ID received"); //if in the inventory of a non-god, non-owner if(contains(pInv, self)) { // A person who is NOT our owner and is NOT a god has us in their inventory. BAD! messageTo(self, "handleDestroyGreeter", null, 0, false ); return SCRIPT_CONTINUE; } //check for other greeters in area conversableGreeterInRange(self); blog("vendor.greeter.OnObjectMenuRequest Creating Menu"); //parent menu int menu = mi.addRootMenu(menu_info_types.SERVER_MENU1, SID_GREETER_CONTROL); if(hasObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR)) { mi.addSubMenu(menu, menu_info_types.SERVER_MENU3, SID_GREETER_ACTIVE_ON); //if the greeter can be activated and is activated, show additional menu options mi.addSubMenu(menu, menu_info_types.SERVER_MENU4, SID_CUSTOMIZE_GREETER); } else mi.addSubMenu(menu, menu_info_types.SERVER_MENU3, SID_GREETER_ACTIVE_OFF); mi.addRootMenu(menu_info_types.SERVER_MENU2, SID_REMOVE_GREETER); blog("vendor.greeter.OnObjectMenuRequest Menu created"); return SCRIPT_CONTINUE; } //------------------------------------------------ // OnObjectMenuSelect //------------------------------------------------ //TODO add customer service logging trigger OnObjectMenuSelect(obj_id player, int item) { blog("vendor.greeter.OnObjectMenuSelect init"); obj_id ownerId = getOwner(self); if(!isValidId(ownerId) || !exists(ownerId)) return SCRIPT_CONTINUE; else if(player != ownerId) return SCRIPT_CONTINUE; if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("vendor.greeter.OnObjectMenuSelect initial validation done, including the controller ID"); obj_id pInv = utils.getInventoryContainer(ownerId); if(!isValidId(pInv) || !exists(pInv)) return SCRIPT_CONTINUE; blog("vendor.greeter.OnObjectMenuSelect owner inv. id recieved"); sendDirtyObjectMenuNotification(self); blog("vendor.greeter.OnObjectMenuSelect item: "+item); blog("vendor.greeter.OnObjectMenuSelect looking for: "+menu_info_types.SERVER_MENU4); //we don't care about the root menu if(item == menu_info_types.SERVER_MENU1) return SCRIPT_CONTINUE; //only delete if in the owner's inventory else if(item == menu_info_types.ITEM_DESTROY && contains(pInv, self)) { blog("terminal.greeter.OnObjectMenuSelect: player selected greeter destroy option while in player inventory."); messageTo(self, "handleDestroyGreeter", null, 0, false); return SCRIPT_CONTINUE; } else if(item == menu_info_types.SERVER_MENU2) { blog("terminal.greeter.OnObjectMenuSelect: player selected greeter destroy option after greeter placed."); messageTo(self, "handleDestroyGreeter", null, 0, false); return SCRIPT_CONTINUE; } else if(item == menu_info_types.SERVER_MENU3) { blog("terminal.greeter.OnObjectMenuSelect: player selected item == menu_info_types.SERVER_MENU3."); blog("terminal.greeter.OnObjectMenuSelect: player has: vendor_lib.GREETER_ACTIVE_OBJVAR"); //DISABLE GREETER ACTIVATION if(hasObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR)) { blog("terminal.greeter.OnObjectMenuSelect: changing to: DEACTIVATE"); // Turn off greeter activation (after the trigger removed). removeObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR); //toggle volume off toggleTriggerVolume(self); // Send the player a message. sendSystemMessage(player, SID_ACTIVATION_DISABLED); } //ENABLE GREETER ACTIVATION else { // Turn on greeter activation setObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR, true);//important to set this AFTER trigger //toggle volume on toggleTriggerVolume(self); // Send the player a message. sendSystemMessage(player, SID_ACTIVATION_ENABLED); } } else if(item == menu_info_types.SERVER_MENU4) { blog("terminal.greeter.OnObjectMenuSelect: SERVER_MENU4"); buildMainControlMenu(self, player); } return SCRIPT_CONTINUE; } //------------------------------------------------ // OnAboutToBeTransferred //------------------------------------------------ //TODO add customer service logging // This entire section might not be used ever. The greeter cannot be picked up. trigger OnAboutToBeTransferred( obj_id dest, obj_id transferer ) { blog("vendor.greeter.OnAboutToBeTransferred init"); obj_id ownerId = getOwner(self); if(!isValidId(ownerId) || !exists(ownerId)) { messageTo(self, "handleDestroyGreeter", null, 0, false ); return SCRIPT_OVERRIDE; } else if(transferer != ownerId) //even if you are god and not the owner this shouldn't work { sendSystemMessage(transferer, SID_CANT_MOVE); return SCRIPT_OVERRIDE; } else if(hasObjVar(self, vendor_lib.GREETER_INIT_OBJVAR)) { sendSystemMessage(transferer, SID_CANT_MOVE); return SCRIPT_OVERRIDE; } obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; //assuming the owner is transferring at this point //Owner can transfer into the inventory of the owner. obj_id pInv = utils.getInventoryContainer(ownerId); if(dest == ownerId || dest == pInv) { blog("vendor.greeter.OnAboutToBeTransferred Somehow the mob object is being transferred"); toggleTriggerVolume(self); //reset objvars AFTER the trigger vol removed vendor_lib.removeObjectFromController(controller, self); return SCRIPT_CONTINUE; } //Can transfer into a container if the location is a building and public or a POB. else if(getContainedBy(transferer) == dest) { obj_id structure = getTopMostContainer(dest); int got = getGameObjectType(structure); if(isGameObjectTypeOf(got, GOT_building) && !permissionsIsPublic(structure)) { sendSystemMessage(transferer, SID_GREETER_PUBLIC_ONLY); return SCRIPT_OVERRIDE; } //The structure passes all validation return SCRIPT_CONTINUE; } string msg = "Greeters may only reside in the owner's inventory or in structures the owner has vendor permissions in."; string title = "WARNING"; sui.msgbox(ownerId, ownerId, msg, sui.OK_ONLY, title, "noHandler"); return SCRIPT_OVERRIDE; } //------------------------------------------------ // OnTriggerVolumeEntered //------------------------------------------------ //TODO add customer service logging trigger OnTriggerVolumeEntered(string volumeName, obj_id breacher) { blog("vendor.greeter.OnTriggerVolumeEntered init"); if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; blog("vendor.greeter.OnTriggerVolumeEntered hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)"); obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("vendor.greeter.OnTriggerVolumeEntered controller valid"); //make the greeter pause if interacting if(hasObjVar(controller, vendor_lib.GREETER_CONVERSE) && getBooleanObjVar(controller, vendor_lib.GREETER_CONVERSE) == true) { blog("vendor.greeter.OnTriggerVolumeEntered: GREETER_CONVERSE"); removeObjVar(controller, vendor_lib.GREETER_CONVERSE); blog("vendor.greeter.OnTriggerVolumeEntered: GREETER_CONVERSE removed"); conversableGreeterInRange(self); if(!hasObjVar(controller, FOUND_OTHER_GREETERS) || getBooleanObjVar(controller, FOUND_OTHER_GREETERS) != true) { blog("vendor.greeter.OnTriggerVolumeEntered: no greeters in area"); return SCRIPT_CONTINUE; } messageTo(self, "handleConverseWithOtherGreeterAfterGreetDelay", null, GREETER_CONVERSATION_PAUSE_TIME, false); } vendor_lib.colorizeGreeterFromController(controller, self); //blog("vendor.greeter.OnTriggerVolumeEntered: trigger tripped, received controller ID"); if(hasObjVar(breacher, "gm")) //if is GM do nothing so if they are invis their cover is not broken { blog("vendor.greeter.OnTriggerVolumeEntered: GM tripped"); return SCRIPT_CONTINUE; } else if(breacher == self) { //blog("vendor.greeter.OnTriggerVolumeEntered: SELF tripped"); return SCRIPT_CONTINUE; } else if(isIncapacitated(breacher)) { //blog("vendor.greeter.OnTriggerVolumeEntered: INCAPPED tripped"); return SCRIPT_CONTINUE; } else if(!isMob(breacher)) { //blog("vendor.greeter.OnTriggerVolumeEntered: MOB tripped"); return SCRIPT_CONTINUE; } else if(ai_lib.isMonster(breacher)) { //blog("vendor.greeter.OnTriggerVolumeEntered: IS MONSTER tripped"); return SCRIPT_CONTINUE; } else if(!hasObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR)) { //blog("vendor.greeter.OnTriggerVolumeEntered: NOT ACTIVE tripped"); return SCRIPT_CONTINUE; } else if(utils.hasScriptVar(self, vendor_lib.GREETER_ALREADY_BARKED_SCRVAR)) { //blog("vendor.greeter.OnTriggerVolumeEntered: ALREADY BARKED tripped"); return SCRIPT_CONTINUE; } else if(volumeName != ALERT_VOLUME_NAME) { //blog("vendor.greeter.OnTriggerVolumeEntered: WRONG TRIGGER tripped"); return SCRIPT_CONTINUE; } blog("vendor.greeter.OnTriggerVolumeEntered: TRIGGER PASSED THE TESTS ----GIVE THE GREETER LIFE"); if(!bringGreeterToLife(self, controller, breacher)) blog("vendor.greeter.OnTriggerVolumeEntered: bringGreeterToLife failed somehow."); else blog("vendor.greeter.OnTriggerVolumeEntered: bringGreeterToLife shows success."); //FOR RANDOMIZED GREETINGS ONLY if(hasObjVar(controller, vendor_lib.GREETER_CURRENTLY_RANDOMIZED_GREET) && getBooleanObjVar(controller, vendor_lib.GREETER_CURRENTLY_RANDOMIZED_GREET) == true) { blog("terminal.greeter:handlePlayerProgramSelect: I AM A RANDOMIZED GREETER!!!!!!!!!!!!!!!!!!!!!!!!!!!!."); if(!getRandomGreeting(self, controller)) { blog("terminal.greeter:handlePlayerProgramSelect: getRandomGreeting failed."); return SCRIPT_CONTINUE; } } return SCRIPT_CONTINUE; } //******************************************************************************************* //******************************************************************************************* // ALL MESSAGEHANDLERS //******************************************************************************************* //******************************************************************************************* messageHandler handleDelayedMainControlMenu() { blog("terminal.greeter:handleDelayedMainControlMenu: init"); obj_id ownerId = getOwner(self); if(!isValidId(ownerId) || !exists(ownerId)) return SCRIPT_CONTINUE; buildMainControlMenu(self, ownerId); return SCRIPT_CONTINUE; } messageHandler handlePlayerProgramSelect() { blog("terminal.greeter:handlePlayerProgramSelect: init"); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; int idx = sui.getListboxSelectedRow(params); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) return SCRIPT_CONTINUE; if(!validateAllImperativeGreeterVars(self, player)) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerProgramSelect: prelim validation completed."); obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; string[] availableOptionStrings = utils.getStringArrayScriptVar(player, GREETER_MAIN_MENU_DATA); if(availableOptionStrings == null) return SCRIPT_CONTINUE; string choice = availableOptionStrings[idx]; if(choice == null || choice.equals("")) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerProgramSelect: choice: "+choice); if(choice.startsWith(GREETER_CHANGE_NAME)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_CHANGE_NAME"); if(sui.hasPid(player, GREETER_NAME_PID)) { int pid = sui.getPid(player, GREETER_NAME_PID); forceCloseSUIPage(pid); } int pid = sui.inputbox(self, player, "@player_structure:greeter_name_d", sui.OK_CANCEL, "@player_structure:greeter_name_t", sui.INPUT_NORMAL, null, "handleSetVendorName", null ); sui.setPid(player, pid, GREETER_NAME_PID); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_RANDOMIZED_GREETINGS_ON)) { setObjVar(controller, vendor_lib.GREETER_CURRENTLY_RANDOMIZED_GREET, true); blog("terminal.greeter:handlePlayerProgramSelect: GREETER_RANDOMIZED_GREETINGS_ON"); if(!getRandomGreeting(self, controller)) { blog("terminal.greeter:handlePlayerProgramSelect: getRandomGreeting failed."); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } sendSystemMessage(player, SID_RANDOMIZED_GREETINGS_ON); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_RANDOMIZED_GREETINGS_OFF)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_RANDOMIZED_GREETINGS_OFF"); removeObjVar(controller, vendor_lib.GREETER_CURRENTLY_RANDOMIZED_GREET); sendSystemMessage(player, SID_RANDOMIZED_GREETINGS_OFF); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_ANIMATING_DISABLED) || choice.startsWith(GREETER_ANIMATING_EDIT)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_ANIMATING_DISABLED"); if(!getGreeterAnimCategorySelect(self, controller, player)) CustomerServiceLog("vendor", "terminal.greeter:getGreeterAnimCategorySelect: player/Owner: "+getName(player)+" "+ player+" Could not turn animations on for Greeter: " + self); if(choice.startsWith(GREETER_ANIMATING_DISABLED)) sendSystemMessage(player, SID_ANIMATING_ENABLED); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_ANIMATING_ENABLED)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_ANIMATING_ENABLED"); // Turn off greeter anim removeObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR); // Send the player a message. sendSystemMessage(player, SID_ANIMATING_DISABLED); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_VOICING_DISABLED) || choice.startsWith(GREETER_VOICING_EDIT)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_VOICING_DISABLED"); if(!getGreeterSoundVoiceList(self, controller, player, VOICE_OPTION)) CustomerServiceLog("vendor", "terminal.greeter:getGreeterSoundVoiceList: player/Owner: "+getName(player)+" "+ player+" Could not turn on "+VOICE_OPTION+" for Greeter: " + self); if(choice.startsWith(GREETER_VOICING_DISABLED)) sendSystemMessage(player, SID_VOICING_ENABLED); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_VOICING_ENABLED)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_VOICING_ENABLED"); // Turn off greeter voice removeObjVar(controller, vendor_lib.GREETER_VOICING_OBJVAR); // Send the player a message. sendSystemMessage(player, SID_VOICING_DISABLED); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_SOUNDS_DISABLED) || choice.startsWith(GREETER_SOUNDS_EDIT)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_SOUNDS_DISABLED"); if(!getGreeterSoundVoiceList(self, controller, player, SOUND_OPTION)) CustomerServiceLog("vendor", "terminal.greeter:getGreeterSoundVoiceList: player/Owner: "+getName(player)+" "+ player+" Could not turn on "+SOUND_OPTION+" for Greeter: " + self); if(choice.startsWith(GREETER_SOUNDS_DISABLED)) sendSystemMessage(player, SID_SOUNDS_ENABLED); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_SOUNDS_ENABLED)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_SOUNDS_ENABLED"); // Turn off greeter sounds removeObjVar(controller, vendor_lib.GREETER_SOUNDING_OBJVAR); // Send the player a message. sendSystemMessage(player, SID_SOUNDS_DISABLED); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_MOOD_DISABLED) || choice.startsWith(GREETER_MOOD_EDIT)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_MOOD_DISABLED"); if(!getGreeterMoodCategorySelect(self, controller, player)) CustomerServiceLog("vendor", "terminal.greeter:getGreeterMoodCategorySelect: player/Owner: "+getName(player)+" "+ player+" Could not turn moods on for Greeter: " + self); if(choice.startsWith(GREETER_MOOD_DISABLED)) sendSystemMessage(player, SID_MOOD_ENABLED); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_MOOD_ENABLED)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_MOOD_ENABLED"); // Turn off greeter moods removeObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR); // Send the player a message. sendSystemMessage(player, SID_MOOD_DISABLED); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_STATEMENT_DISABLED) || choice.startsWith(GREETER_STATEMENT_EDIT)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_STATEMENT_DISABLED"); if(!getGreeterStatementSelection(self, controller, player)) CustomerServiceLog("vendor", "terminal.greeter:getGreeterMoodCategorySelect: player/Owner: "+getName(player)+" "+ player+" Could not turn moods on for Greeter: " + self); if(choice.startsWith(GREETER_STATEMENT_DISABLED)) sendSystemMessage(player, SID_STATEMENT_ENABLED); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_STATEMENT_ENABLED)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_STATEMENT_ENABLED"); blog("HAS HAS HAS vendor_lib.GREETER_HAS_STATEMENT_OBJVAR"); // Turn off greeter effects removeObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR); // Send the player a message. sendSystemMessage(player, SID_STATEMENT_DISABLED); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_PREVIEW)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_PREVIEW"); bringGreeterToLife(self, controller, player); messageTo(self, "handleDelayedMainControlMenu", null, 2, false); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_MODIFY_DELAY)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_MODIFY_DELAY"); if(sui.hasPid(player, GREETER_BARK_PID)) { int pid = sui.getPid(player, GREETER_BARK_PID); forceCloseSUIPage(pid); } int delay = GREETER_BARK_TIMER_MAX; if(hasObjVar(controller, GREETER_DELAY_TIMER_CURRENT) && getIntObjVar(controller, GREETER_DELAY_TIMER_CURRENT) >= GREETER_BARK_TIMER_MIN) delay = getIntObjVar(controller, GREETER_DELAY_TIMER_CURRENT); int pid = sui.transfer(self, player, GREETER_DELAY_DESCRIPTION, GREETER_DELAY_TITLE, "Maximum", (GREETER_BARK_TIMER_MAX - delay), "Current", delay, "changeGreeterDelay"); sui.showSUIPage(pid); sui.setPid(player, pid, GREETER_BARK_PID); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_COLOR_CHANGE)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_COLOR_CHANGE"); ranged_int_custom_var[] palColors = hue.getPalcolorVars(self); if((palColors == null) || (palColors.length == 0)) return SCRIPT_CONTINUE; //set an int to the length int palColorsLength = palColors.length; blog("handlePlayerProgramSelect - palColors.length: "+palColorsLength); string[] indexName = new string[GREETER_COLOR_MAX];//create an array of strings with 4 objects. The UI cannot handle more yet. blog("handlePlayerProgramSelect - indexName: "+indexName.length); //set the loop int to default at max color int loop = GREETER_COLOR_MAX; if(palColorsLength < GREETER_COLOR_MAX)//if we have an armor piece that has less than 4 colors we need to init the array { for(int i = 0; i < GREETER_COLOR_MAX; i++) indexName[i] = ""; //first init to nothing in case the object only has 1 or 2 colors //modify the loop int to be the same as the armor piece color length loop = palColorsLength; } for(int i = 0; i < loop; i++) //loop through using the loop int that may have been modified { ranged_int_custom_var ri = palColors[i]; if(ri != null) //make sure we don't have a null { blog("handlePlayerProgramSelect - indexName["+i+"]: "+indexName[i]); string customizationVar = ri.getVarName(); if(customizationVar.startsWith("/")) customizationVar = customizationVar.substring(1); indexName[i] = customizationVar; //overwrite the null in the array } } if(indexName[0].equals("")) { CustomerServiceLog("vendor", "Coloring UI for Greeter: "+ self +" by player " +player+ " has failed because the 1st color was null."); return SCRIPT_CONTINUE; } CustomerServiceLog("vendor", "Coloring UI for greeter: "+ self +" by player " +player); blog("handlePlayerProgramSelect - Greeter getting color UI: "+ self); utils.setScriptVar(player, vendor_lib.GREETER_PLAYTERCOLOR_SCRVAR, true); //needed to tell the return system what to color the object openCustomizationWindow(player, self, indexName[0], -1, -1, indexName[1], -1, -1, indexName[2], -1, -1, indexName[3], -1, -1); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_MODIFY_TRIGGER_VOL_RADIUS)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_MODIFY_TRIGGER_VOL_RADIUS"); if(sui.hasPid(player, GREETER_RADIUS_PID)) { int pid = sui.getPid(player, GREETER_RADIUS_PID); forceCloseSUIPage(pid); } int radius = GREETER_TRIGGER_VOL_DEFAULT; if(hasObjVar(controller, GREETER_TRIGGER_VOL_CURRENT) && getIntObjVar(controller, GREETER_TRIGGER_VOL_CURRENT) >= GREETER_TRIGGER_VOL_MIN) radius = getIntObjVar(controller, GREETER_TRIGGER_VOL_CURRENT); int pid = sui.transfer(self, player, GREETER_RADIUS_DESCRIPTION, GREETER_RADIUS_TITLE, "Maximum", (GREETER_TRIGGER_VOL_MAX - radius), "Current", radius, "changeTriggerRadius"); sui.showSUIPage(pid); sui.setPid(player, pid, GREETER_RADIUS_PID); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_SAVE_GREET)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_SAVE_GREET"); if(sui.hasPid(player, GREETER_SAVE_NAME_PID)) { int pid = sui.getPid(player, GREETER_SAVE_NAME_PID); forceCloseSUIPage(pid); } int pid = sui.inputbox(self, player, SUI_GREETER_SAVE_NAME_DESCR, sui.OK_CANCEL, SUI_GREETER_SAVE_NAME_TITLE, sui.INPUT_NORMAL, null, "handleSetSaveName", null); sui.setPid(player, pid, GREETER_SAVE_NAME_PID); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_LIST_GREET)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_LIST_GREET"); if(sui.hasPid(player, GREETER_GET_SAVED_GREETING_LIST_PID)) { int pid = sui.getPid(player, GREETER_GET_SAVED_GREETING_LIST_PID); forceCloseSUIPage(pid); } if(!getSavedGreetings(self, player, controller)) { blog("terminal.greeter:handlePlayerProgramSelect: getSavedGreetings failed."); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } string[] menu = utils.getStringArrayScriptVar(player, GREETER_SAVED_GREET_NAMES); if(menu == null) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_SAVED_GREET_NAMES not found."); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } int pid = sui.listbox(self, player, SUI_GREETER_LOAD_DESCR, sui.OK_CANCEL, SUI_GREETER_LOAD_TITLE, menu, "handlePlayerGreetingSelect", true); sui.setPid(player, pid, GREETER_GET_SAVED_GREETING_LIST_PID); //buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_RANDOM)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_RANDOM"); setObjVar(controller, vendor_lib.GREETER_RANDOM_TEST_FIRE, true); if(!getRandomGreeting(self, controller)) { blog("terminal.greeter:handlePlayerProgramSelect: getRandomGreeting failed."); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } sendSystemMessage(player, SID_GREETER_RANDOM_GREETING_SELECTED); bringGreeterToLife(self, controller, player); messageTo(self, "handleDelayedMainControlMenu", null, 2, false); return SCRIPT_CONTINUE; } if(choice.startsWith(GREETER_START_ITERACTION)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_START_ITERACTION"); setObjVar(controller, vendor_lib.GREETER_CONVERSE, true); messageTo(self, "handleConverseWithOtherGreeter", null, 0, false); } if(choice.startsWith(GREETER_STOP_ITERACTION)) { blog("terminal.greeter:handlePlayerProgramSelect: GREETER_STOP_ITERACTION"); removeObjVar(controller, vendor_lib.GREETER_CONVERSE); } return SCRIPT_CONTINUE; } messageHandler handleCallGreeterUpdate() { blog("terminal.greeter:handleCallGreeterUpdate: init."); //remove persist, make greeter spawn from terminal, mark greeter version if(!vendor_lib.updateGreeterFunctionality(self)) { blog("terminal.greeter:handleCallGreeterUpdate: Greeter FAILED UPDATE"); CustomerServiceLog("vendor", "terminal.greeter:OnInitialize: GREETER UPDATE FAILED: "+getName(self)+" "+ self+" " + getLocation(self)); } else blog("terminal.greeter:handleCallGreeterUpdate: Greeter Updated!!!"); return SCRIPT_CONTINUE; } //called when the greeter initializes. We need a few seconds before //we look up the controller object, just in case it hasn't loaded in the cell yet. messageHandler handleCallVolumeToggleOnInitialized() { toggleTriggerVolume(self); return SCRIPT_CONTINUE; } //called when the greeter radius or delay is changed. We don't bring the greeter to life //becuase this function is usually called twice and would spam the player. messageHandler handleCallVolumeToggleNoLife() { toggleTriggerVolume(self, false); return SCRIPT_CONTINUE; } messageHandler colorGreeter() { obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; vendor_lib.colorizeGreeterFromController(controller, self); return SCRIPT_CONTINUE; } messageHandler handleConverseWithOtherGreeterAfterGreetDelay() { obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; setObjVar(controller, vendor_lib.GREETER_CONVERSE, true); messageTo(self, "handleConverseWithOtherGreeter", null, 0, false); return SCRIPT_CONTINUE; } messageHandler handleConverseWithOtherGreeter() { blog("terminal.greeter:handleConverseWithOtherGreeter: init."); //may cause exceptions without this validation //due to player use of house packup function if(!isValidId(self) || !exists(self)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; //the greeter has been deactivated, bail out if(!hasObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR)) return SCRIPT_CONTINUE; if(!hasObjVar(controller, vendor_lib.GREETER_CONVERSE) || getBooleanObjVar(controller, vendor_lib.GREETER_CONVERSE) != true) return SCRIPT_CONTINUE; blog("terminal.greeter:handleConverseWithOtherGreeter: Controller id found."); obj_id ownerId = getObjIdObjVar(self, vendor_lib.GREETER_OWNER_OBJVAR); if(!isValidId(ownerId)) { blog("terminal.greeter:handleConverseWithOtherGreeter: GREETER HAD NO OWNER! Aborting initialization process and deleting greeter."); ownerId = vendor_lib.getObjectOwner(controller); if(!isValidId(ownerId)) { blog("terminal.greeter:handleConverseWithOtherGreeter: GREETER HAD NO OWNER! Aborting initialization process and deleting greeter."); CustomerServiceLog("vendor", "terminal.greeter:handleGreeterInitialize: GREETER HAD NO OWNER! Aborting initialization process and deleting Greeter: " + self); messageTo(self, "handleDestroyGreeter", null, 0, false ); return SCRIPT_CONTINUE; } } blog("terminal.greeter:handleConverseWithOtherGreeter: Owner id found. Checking for other greeter var."); obj_id otherGreeter = getConversableGreeter(self, ownerId, controller); if(!isValidId(otherGreeter) || !exists(otherGreeter)) { blog("terminal.greeter:handleConverseWithOtherGreeter: No other greeter var. Removing"); removeObjVar(controller, FOUND_OTHER_GREETERS); return SCRIPT_CONTINUE; } blog("terminal.greeter:handleConverseWithOtherGreeter: FOUND other greeter: "+otherGreeter); faceTo(self, otherGreeter); string creatureType = getStringObjVar(controller, vendor_lib.CREATURE_TYPE); if(creatureType == null || creatureType.equals("")) return SCRIPT_CONTINUE; blog("terminal.greeter:handleConverseWithOtherGreeter: FOUND creature Type of greeter: "+creatureType); if(creatureType.equals("ewok")) { string anim = EWOK_ANIMATIONS[rand(0,JAWA_ANIMATIONS.length -1)]; if(anim != null || !anim.equals("")) doAnimationAction(self, anim); messageTo(self, "handleConverseWithOtherGreeter", null, GREETER_CONVERSATION_LOOP_TIME, false); return SCRIPT_CONTINUE; } if(creatureType.equals("greeter_jawa")) { string anim = JAWA_ANIMATIONS[rand(0,JAWA_ANIMATIONS.length -1)]; if(anim != null || !anim.equals("")) doAnimationAction(self, anim); messageTo(self, "handleConverseWithOtherGreeter", null, GREETER_CONVERSATION_LOOP_TIME, false); return SCRIPT_CONTINUE; } string anim = HUMANOID_ANIMATIONS[rand(0,HUMANOID_ANIMATIONS.length -1)]; if(anim != null || !anim.equals("")) doAnimationAction(self, anim); messageTo(self, "handleConverseWithOtherGreeter", null, GREETER_CONVERSATION_LOOP_TIME, false); return SCRIPT_CONTINUE; } messageHandler handleSetSaveName() { blog("terminal.greeter:handleSetSaveName: init"); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Store the vendor name. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; string saveName = sui.getInputBoxText(params); if(saveName == null || saveName.equals("")) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } int btn = sui.getIntButtonPressed(params); if(btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } //No zero length or obscene names. if(saveName == null || saveName.equals("") || isNameReserved(saveName)) { blog("terminal.greeter:handleSetSaveName: handleSetSaveName"); // Ask them about the name. sendSystemMessage(player, SID_OBSCENE); int pid = sui.inputbox(self, player, SUI_GREETER_SAVE_NAME_DESCR, sui.OK_CANCEL, SUI_GREETER_SAVE_NAME_TITLE, sui.INPUT_NORMAL, null, "handleSetSaveName", null); sui.setPid(player, pid, GREETER_SAVE_NAME_PID); return SCRIPT_CONTINUE; } if(saveName.length() > 10) saveName = saveName.substring(0, 9); obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(!saveGreeting(self, player, controller, saveName)) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } messageHandler handlePlayerGreetingSelect() { blog("terminal.greeter:handlePlayerGreetingSelect: init"); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Store the vendor name. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; if(sui.hasPid(player, GREETER_GREETING_SELECT_PID)) { int pid = sui.getPid(player, GREETER_GREETING_SELECT_PID); forceCloseSUIPage(pid); } obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerGreetingSelect: initial validation completed"); int idx = sui.getListboxSelectedRow(params); blog("terminal.greeter:handlePlayerGreetingSelect: idx: "+idx); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } string[] loadList = getStringArrayObjVar(controller, GREETER_SAVE_DATA); if(loadList == null) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerGreetingSelect: loadList.length: "+loadList.length); string selection = loadList[idx]; if(selection == null || selection.equals("")) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerGreetingSelect: +++++++SELECTION: "+selection); utils.setScriptVar(player, PLAYER_SEL_GREETER_SAVE_ELEMENT, selection); int pid = sui.listbox(self, player, SUI_GREETER_LOAD_DESCR, sui.OK_CANCEL, SUI_GREETER_LOAD_TITLE, PLAYER_GREETING_MAINT_MENU, "handlePlayerGreetingMaintenanceSelect", true); sui.setPid(player, pid, GREETER_GET_SAVED_GREETING_LIST_PID); return SCRIPT_CONTINUE; } messageHandler handlePlayerGreetingMaintenanceSelect() { blog("terminal.greeter:handlePlayerGreetingMaintenanceSelect: init"); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerGreetingMaintenanceSelect: initial validation completed"); int idx = sui.getListboxSelectedRow(params); blog("terminal.greeter:handlePlayerGreetingMaintenanceSelect: idx: "+idx); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } switch (idx) { case 0: blog("terminal.greeter:handlePlayerGreetingMaintenanceSelect: CASE 0"); messageTo(self, "handlePlayerLoadGreetingSelect", params, 0, false); break; case 1: blog("terminal.greeter:handlePlayerGreetingMaintenanceSelect: CASE 1"); string selection = utils.getStringScriptVar(player, PLAYER_SEL_GREETER_SAVE_ELEMENT); blog("terminal.greeter:handlePlayerGreetingMaintenanceSelect: -----------SELECTION: "+selection); if(selection == null || selection.equals("")) { blog("terminal.greeter:handlePlayerGreetingMaintenanceSelect: selection name failed: "+selection); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } string[] saveData = split(selection, '-'); if(saveData == null) { blog("terminal.greeter:handlePlayerGreetingMaintenanceSelect: saveData failed: "+saveData.length); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(!deleteGreeting(self, player, controller, saveData[0])) { blog("terminal.greeter:handlePlayerGreetingMaintenanceSelect: deleteGreeting failed"); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } break; default: messageTo(self, "handlePlayerLoadGreetingSelect", params, 0, false); break; } buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } messageHandler handlePlayerLoadGreetingSelect() { blog("terminal.greeter:handlePlayerLoadGreetingSelect: init"); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerLoadGreetingSelect: initial validation completed"); int idx = sui.getListboxSelectedRow(params); blog("terminal.greeter:handlePlayerLoadGreetingSelect: idx: "+idx); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } string selection = utils.getStringScriptVar(player, PLAYER_SEL_GREETER_SAVE_ELEMENT); if(selection == null || selection.equals("")) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerLoadGreetingSelect: selection: "+selection); if(!loadSavedData(self, player, controller, selection)) { blog("terminal.greeter:handlePlayerLoadGreetingSelect: failed loadSavedData"); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } sendSystemMessage(player, SID_GREETING_LOADED); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } messageHandler changeTriggerRadius() { blog("terminal.greeter:changeTriggerRadius: init"); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; int btn = sui.getIntButtonPressed(params); if(btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } int radius = sui.getTransferInputTo(params); if(radius < GREETER_TRIGGER_VOL_MIN) { radius = 1; sendSystemMessage(player, SID_MIN_RADIUS); } if(radius > GREETER_TRIGGER_VOL_MAX) { radius = GREETER_TRIGGER_VOL_MAX; sendSystemMessage(player, SID_MAX_RADIUS); } setObjVar(controller, GREETER_TRIGGER_VOL_CURRENT, radius); sendSystemMessage(player, SID_GREETING_RADIUS_CHANGED); messageTo(self, "handleCallVolumeToggleNoLife", null, 1, false); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } messageHandler changeGreeterDelay() { blog("terminal.greeter:changeGreeterDelay: init"); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; int btn = sui.getIntButtonPressed(params); if(btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } int delayAmt = sui.getTransferInputTo(params); if(delayAmt < GREETER_BARK_TIMER_MIN) { delayAmt = 5; sendSystemMessage(player, SID_MIN_FIVE_TIMER); } if(delayAmt > GREETER_BARK_TIMER_MAX) { delayAmt = GREETER_BARK_TIMER_MAX; sendSystemMessage(player, SID_MAX_TIMER); } setObjVar(controller, GREETER_DELAY_TIMER_CURRENT, delayAmt); sendSystemMessage(player, SID_GREETING_DELAY_CHANGED); messageTo(self, "handleCallVolumeToggleNoLife", null, 1, false); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } messageHandler handleDestroyGreeter() { blog("terminal.greeter:handleDestroyGreeter: init"); if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; if(hasObjVar(controller, FOUND_OTHER_GREETERS)) removeObjVar(controller, FOUND_OTHER_GREETERS); vendor_lib.removeObjectFromController(controller, self); return SCRIPT_CONTINUE; } messageHandler handleGreeterInitialize() { if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; obj_id ownerId = getObjIdObjVar(self, vendor_lib.GREETER_OWNER_OBJVAR); if(!isValidId(ownerId) || !exists(ownerId)) { blog("terminal.greeter:handleGreeterInitialize: GREETER HAD NO OWNER! Aborting initialization process and deleting greeter."); CustomerServiceLog("vendor", "terminal.greeter:handleGreeterInitialize: GREETER HAD NO OWNER! Aborting initialization process and deleting Greeter: " + self); messageTo(self, "handleDestroyGreeter", null, 0, false ); return SCRIPT_OVERRIDE; } removeObjVar(controller, vendor_lib.GREETER_NOT_INIT_OBJVAR); setObjVar(controller, vendor_lib.GREETER_INIT_OBJVAR, true); blog("terminal.greeter:handleGreeterInitialize: GREETER INITIALIZED BY OWNER!"); CustomerServiceLog("vendor", "terminal.greeter:handleGreeterInitialize: GREETER INITIALIZED BY OWNER: "+ getName(ownerId) +" " + ownerId + " Greeter: " + self); return SCRIPT_CONTINUE; } messageHandler handleSetVendorName() { if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Store the vendor name. obj_id player = sui.getPlayerId(params); string greeterName = sui.getInputBoxText(params); int btn = sui.getIntButtonPressed(params); if(btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } //No zero length or obscene names. if(greeterName == null || greeterName.equals("") || isNameReserved(greeterName)) { // Ask them about the name. sendSystemMessage(player, SID_OBSCENE); sui.inputbox(self, player, "@player_structure:name_d", sui.OK_CANCEL, "@player_structure:name_t", sui.INPUT_NORMAL, null, "handleSetVendorName", null ); return SCRIPT_CONTINUE; } if(greeterName.length() > 40) greeterName = greeterName.substring(0, 39); setName(self, "Greeter: " + greeterName); sendSystemMessage(player, SID_GREETER_WAS_RENAMED); buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } //------------- //ANIM HANDLERS //------------- messageHandler handlePlayerGreeterAnimCategorySelect() { blog("terminal.greeter:handlePlayerGreeterAnimCategorySelect: init."); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; if(sui.hasPid(player, GREETER_ANIM_CATEGORY_PID)) { int pid = sui.getPid(player, GREETER_ANIM_CATEGORY_PID); forceCloseSUIPage(pid); } int idx = sui.getListboxSelectedRow(params); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(!validateAllImperativeGreeterVars(self, player)) return SCRIPT_CONTINUE; else if(!utils.hasScriptVar(player, CATEGORY_ANIM_COL_NAMES_SCRVAR)) { blog("terminal.greeter:handlePlayerGreeterAnimCategorySelect: Player somehow lost the anim category list given in previous handler."); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerGreeterAnimCategorySelect: prevalidation completed."); string[] greeterAnimCategories = utils.getStringArrayScriptVar(player, CATEGORY_ANIM_COL_NAMES_SCRVAR); if(greeterAnimCategories == null) return SCRIPT_CONTINUE; string greeterAnimCategory = greeterAnimCategories[idx]; if(greeterAnimCategory == null || greeterAnimCategory.equals("")) return SCRIPT_CONTINUE; string[] categoryAnims = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_ANIMS, greeterAnimCategory); if(categoryAnims == null) return SCRIPT_CONTINUE; string[] categoryAnimStrings = new string[categoryAnims.length]; for (int i = 0; i < categoryAnims.length; i++) { categoryAnimStrings[i] = "@player_structure:"+categoryAnims[i]; } if(categoryAnimStrings == null) return SCRIPT_CONTINUE; utils.setScriptVar(player, SELECTED_CAT_ANIM_SCRVAR, categoryAnims); utils.setScriptVar(player, SELECTED_CAT_ANIM_STR_SCRVAR, categoryAnimStrings); int pid = sui.listbox( self, player, "@player_structure:greeter_anim_category_d", sui.OK_CANCEL, "@player_structure:greeter_anim_category_t", categoryAnimStrings, "handlePlayerGreeterAnimSelect", true); sui.setPid(player, pid, GREETER_ANIM_CATEGORY_PID); return SCRIPT_CONTINUE; } messageHandler handlePlayerGreeterAnimSelect() { blog("terminal.greeter:handlePlayerGreeterAnimSelect: init."); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; int idx = sui.getListboxSelectedRow(params); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(!validateAllImperativeGreeterVars(self, player)) return SCRIPT_CONTINUE; else if(!utils.hasScriptVar(player, SELECTED_CAT_ANIM_SCRVAR)) { blog("terminal.greeter:handlePlayerGreeterAnimSelect: Player somehow lost the anim category selected in previous handler."); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerGreeterAnimSelect: prevalidation completed."); string[] animCategoryList = utils.getStringArrayScriptVar(player, SELECTED_CAT_ANIM_SCRVAR); if(animCategoryList == null) return SCRIPT_CONTINUE; string greeterAnimSelected = animCategoryList[idx]; if(greeterAnimSelected == null || greeterAnimSelected.equals("")) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerGreeterAnimSelect: We have Anim. Getting Controller"); if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerGreeterAnimSelect: We have Controller. Setting Anim"); //Save Animation setObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION, greeterAnimSelected); setObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION_STRING, "@player_structure:"+greeterAnimSelected); // Turn on greeter anim setObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR, true); // Send the player a message. buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } //------------- //MOOD HANDLERS //------------- messageHandler handlePlayerGreeterMoodCategorySelect() { blog("terminal.greeter:handlePlayerGreeterMoodCategorySelect: init."); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; if(sui.hasPid(player, GREETER_MOOD_CATEGORY_PID)) { int pid = sui.getPid(player, GREETER_MOOD_CATEGORY_PID); forceCloseSUIPage(pid); } int idx = sui.getListboxSelectedRow(params); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(!validateAllImperativeGreeterVars(self, player)) return SCRIPT_CONTINUE; else if(!utils.hasScriptVar(player, CATEGORY_MOOD_COL_NAMES_SCRVAR) || !utils.hasScriptVar(player, CATEGORY_MOOD_COL_STRINGS_SCRVAR)) { blog("terminal.greeter:handlePlayerGreeterMoodCategorySelect: Player somehow lost the mood category list given in previous handler."); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerGreeterMoodCategorySelect: prevalidation completed."); string[] greeterMoodCategories = utils.getStringArrayScriptVar(player, CATEGORY_MOOD_COL_NAMES_SCRVAR); //string[] greeterMoodCategoriesStrings = utils.getStringArrayScriptVar(player, CATEGORY_MOOD_COL_STRINGS_SCRVAR); if(greeterMoodCategories == null)// || greeterMoodCategoriesStrings == null) return SCRIPT_CONTINUE; string greeterMoodCategory = greeterMoodCategories[idx]; if(greeterMoodCategory == null || greeterMoodCategory.equals("")) return SCRIPT_CONTINUE; string[] categoryMoods = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_MOODS, greeterMoodCategory); if(categoryMoods == null) return SCRIPT_CONTINUE; string[] categoryMoodStrings = new string[categoryMoods.length]; for (int i = 0; i < categoryMoods.length; i++) { categoryMoodStrings[i] = "@player_structure:"+categoryMoods[i]; } utils.setScriptVar(player, SELECTED_CAT_MOOD_SCRVAR, categoryMoods); int pid = sui.listbox( self, player, "@player_structure:greeter_mood_category_d", sui.OK_CANCEL, "@player_structure:greeter_mood_category_t", categoryMoodStrings, "handlePlayerGreeterMoodSelect", true); sui.setPid(player, pid, GREETER_MOOD_CATEGORY_PID); return SCRIPT_CONTINUE; } messageHandler handlePlayerGreeterMoodSelect() { blog("terminal.greeter:handlePlayerGreeterMoodSelect: init."); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; int idx = sui.getListboxSelectedRow(params); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(!validateAllImperativeGreeterVars(self, player)) return SCRIPT_CONTINUE; else if(!utils.hasScriptVar(player, SELECTED_CAT_MOOD_SCRVAR)) { blog("terminal.greeter:handlePlayerGreeterMoodSelect: Player somehow lost the mood category selected in previous handler."); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerGreeterMoodSelect: prevalidation completed."); string[] moodCategoryList = utils.getStringArrayScriptVar(player, SELECTED_CAT_MOOD_SCRVAR); if(moodCategoryList == null) return SCRIPT_CONTINUE; string greeterMoodSelected = moodCategoryList[idx]; if(greeterMoodSelected == null || greeterMoodSelected.equals("")) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerGreeterMoodSelect: We have Mood. Getting Controller"); if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerGreeterMoodSelect: We have Controller. Setting Mood"); //Save Animation setObjVar(controller, vendor_lib.GREETER_ACTUAL_MOOD, greeterMoodSelected); setObjVar(controller, vendor_lib.GREETER_ACTUAL_MOOD_STRING, "@player_structure:"+greeterMoodSelected); // Turn on greeter anim setObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR, true); // Send the player a message. buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } // //EFFECT HANDLER // messageHandler handlePlayerEffectSelection() { blog("terminal.greeter:handlePlayerEffectSelection: init."); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; int idx = sui.getListboxSelectedRow(params); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(!validateAllImperativeGreeterVars(self, player)) return SCRIPT_CONTINUE; else if(!utils.hasScriptVar(player, PLAYER_SEL_GREETER_EFFECT_LIST) || !utils.hasScriptVar(player, PLAYER_SEL_GREETER_EFFECT_TYPE)) { blog("terminal.greeter:handlePlayerEffectSelection: Player somehow lost the effect or effect type selected in previous handler."); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerEffectSelection: prevalidation completed."); string[] effectList = utils.getStringArrayScriptVar(player, PLAYER_SEL_GREETER_EFFECT_LIST); string[] menuList = utils.getStringArrayScriptVar(player, PLAYER_SEL_GREETER_SOUND_VO_STRING_LIST); string effectType = utils.getStringScriptVar(player, PLAYER_SEL_GREETER_EFFECT_TYPE); blog("greeter:handlePlayerEffectSelection: effectList: "+effectList); blog("greeter:handlePlayerEffectSelection: effectType: "+effectType); if(effectList == null) return SCRIPT_CONTINUE; else if(effectType == null || effectType.equals("")) return SCRIPT_CONTINUE; else if(effectType != SOUND_OPTION && effectType != VOICE_OPTION) return SCRIPT_CONTINUE; blog("greeter:handlePlayerEffectSelection: effectList and effectType attained."); string effectSelected = effectList[idx]; if(effectSelected == null || effectSelected.equals("")) return SCRIPT_CONTINUE; blog("greeter:handlePlayerEffectSelection: We have Effect. Getting Controller"); if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("greeter:handlePlayerEffectSelection: We have Controller. Setting Effect"); string menuStrSelected = menuList[idx]; if(menuStrSelected == null || menuStrSelected.equals("")) return SCRIPT_CONTINUE; //same for both VO and sound setObjVar(controller, vendor_lib.GREETER_SOUNDS_VO_MENU_OBJVAR, menuStrSelected); if(effectType == SOUND_OPTION) { blog("greeter:handlePlayerEffectSelection: Setting SOUND"); //Save SOUND setObjVar(controller, vendor_lib.GREETER_SOUNDS_OBJVAR, effectSelected); // Turn on greeter voice setObjVar(controller, vendor_lib.GREETER_SOUNDING_OBJVAR, true); // Send the player a message. buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } else if(effectType == VOICE_OPTION) { blog("greeter:handlePlayerEffectSelection: Setting VOICE"); //Save VOICE setObjVar(controller, vendor_lib.GREETER_VOICES_OBJVAR, effectSelected); // Turn on greeter voice setObjVar(controller, vendor_lib.GREETER_VOICING_OBJVAR, true); // Send the player a message. buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerEffectSelection: FAILED TO RECEIVE EFFECT."); return SCRIPT_CONTINUE; } //------------------------------------------------ // STATEMENT HANDLERS //------------------------------------------------ messageHandler handlePlayerStatementSelection() { blog("terminal.greeter:handlePlayerStatementSelection: init."); if(params == null || params.isEmpty()) return SCRIPT_CONTINUE; // Parse params. obj_id player = sui.getPlayerId(params); if(!isValidId(player) || !exists(player)) return SCRIPT_CONTINUE; int idx = sui.getListboxSelectedRow(params); if(idx < 0) idx = 0; int btn = sui.getIntButtonPressed(params); if (btn == sui.BP_CANCEL) { buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } if(!validateAllImperativeGreeterVars(self, player)) return SCRIPT_CONTINUE; else if(!utils.hasScriptVar(player, PLAYER_SEL_GREETER_STATEMENT_LIST)) { blog("terminal.greeter:handlePlayerStatementSelection: Player somehow lost the statement for greeter previous handler."); return SCRIPT_CONTINUE; } blog("terminal.greeter:handlePlayerStatementSelection: prelim validation completed."); string[] statementList = utils.getStringArrayScriptVar(player, PLAYER_SEL_GREETER_STATEMENT_LIST); if(statementList == null) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerStatementSelection: statementList: "+statementList); string finalStatement = localize(new string_id("player_structure", statementList[idx])); if(finalStatement == null || finalStatement.equals("")) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerGreeterAnimSelect: We have Statement. Getting Controller"); if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return SCRIPT_CONTINUE; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return SCRIPT_CONTINUE; blog("terminal.greeter:handlePlayerGreeterAnimSelect: We have Controller. Setting Statement"); //Save STATEMENT setObjVar(controller, vendor_lib.GREETER_ACTUAL_STATEMENT, finalStatement); // Turn on greeter voice //GREETER_HAS_STATEMENT_OBJVAR setObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR, true); blog("terminal.greeter:handlePlayerStatementSelection: has GREETER_HAS_STATEMENT_OBJVAR: " +hasObjVar(self, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR)); blog("terminal.greeter:handlePlayerStatementSelection: setObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR, true): " +getBooleanObjVar(self, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR)); // Send the player a message. buildMainControlMenu(self, player); return SCRIPT_CONTINUE; } //------------------------------------------------ // resetBarkTimer //------------------------------------------------ messageHandler resetBarkTimer() { //blog("terminal.greeter:resetBarkTimer: Greeter resetting bark var."); utils.removeScriptVar(self, vendor_lib.GREETER_ALREADY_BARKED_SCRVAR); return SCRIPT_CONTINUE; } //******************************************************************************************* //******************************************************************************************* // ALL FUNCTIONS //******************************************************************************************* //******************************************************************************************* boolean getGreeterAnimCategorySelect(obj_id self, obj_id controller, obj_id player) { blog("terminal.greeter:getGreeterAnimCategorySelect: init."); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; if(!isValidId(controller) || !exists(controller)) return false; if(!validateAllImperativeGreeterVars(self, player)) return false; if(!hasObjVar(controller, vendor_lib.GREETER_HAS_ANIMS_OBJVAR)) { blog("terminal.greeter:getGreeterAnimCategorySelect: Greeter somehow had animation radial option even though no animations are allowed."); return false; } if(sui.hasPid(player, GREETER_ANIM_PID)) { int pid = sui.getPid(player, GREETER_ANIM_PID); forceCloseSUIPage(pid); } blog("terminal.greeter:getGreeterAnimCategorySelect: prevalidation completed."); string[] greeterAnimCategories = vendor_lib.getAllGreeterDatatableColumnNames(self, vendor_lib.TBL_GREETER_ANIMS); if(greeterAnimCategories == null) return false; blog("terminal.greeter:getGreeterAnimCategorySelect: Animations received."); int greeterAnimCategoriesLen = greeterAnimCategories.length; if(greeterAnimCategoriesLen < 0) return false; blog("terminal.greeter:getGreeterAnimCategorySelect: Animations length ok."); //get the greeter type so we can possibly midify the anims avail. string creatureType = getStringObjVar(controller, vendor_lib.CREATURE_TYPE); if(creatureType == null || creatureType.equals("")) return false; blog("terminal.greeter:getGreeterAnimCategorySelect: creatureType: "+creatureType); string greeterType = "greeter_"+creatureType; blog("terminal.greeter:getGreeterAnimCategorySelect: greeterType: "+greeterType); //TODO: Check Limited Animations Table for column. This will prevent the need to update the script //when adding a greeter with limited animations. if(!greeterType.equals("greeter_ewok") && !greeterType.equals("greeter_jawa") && !greeterType.equals("greeter_gamorrean") && !greeterType.equals("greeter_battle_droid") && !greeterType.equals("greeter_toydarian") && !greeterType.equals("greeter_pa_lowick")) { blog("terminal.greeter:getGreeterAnimCategorySelect: NO JAWA OR EWOK FOUND: "+greeterType); if(sui.hasPid(player, GREETER_ANIM_PARENT_PID)) { int pid = sui.getPid(player, GREETER_ANIM_PARENT_PID); forceCloseSUIPage(pid); } //NEED TO DYNAMICALLY BUILD THE LIST to parse out unecessary cols resizeable string[] greeterAnimCategoriesRaw = new string[0]; resizeable string[] greeterAnimCategoriesStrings = new string[0]; for (int i = 0; i < greeterAnimCategoriesLen; i++) { if(greeterAnimCategories[i].startsWith("greeter_")) { utils.addElement(greeterAnimCategoriesRaw, greeterAnimCategories[i]); utils.addElement(greeterAnimCategoriesStrings, "@player_structure:"+greeterAnimCategories[i]); } } if(greeterAnimCategoriesRaw.isEmpty() || greeterAnimCategoriesStrings.isEmpty()) return false; else if(greeterAnimCategoriesRaw.size() != greeterAnimCategoriesStrings.size()) return false; string[] greeterAnimStringMenu = new string[greeterAnimCategoriesStrings.size()]; string[] greeterAnimRawData = new string[greeterAnimCategoriesRaw.size()]; greeterAnimCategoriesStrings.toArray(greeterAnimStringMenu); greeterAnimCategoriesRaw.toArray(greeterAnimRawData); utils.setScriptVar(player, CATEGORY_ANIM_COL_NAMES_SCRVAR, greeterAnimRawData); //utils.setScriptVar(player, CATEGORY_ANIM_COL_STRINGS_SCRVAR, greeterAnimStringMenu); blog("terminal.greeter:getGreeterAnimCategorySelect: sending player sui."); int pid = sui.listbox( self, player, "@player_structure:greeter_anim_parent_d", sui.OK_CANCEL, "@player_structure:greeter_anim_parent_t", greeterAnimStringMenu, "handlePlayerGreeterAnimCategorySelect", true); sui.setPid(player, pid, GREETER_ANIM_PARENT_PID); return true; } blog("terminal.greeter:getGreeterAnimCategorySelect: EWOK OR JAWA FOUND: "+greeterType); string[] jawaOrEwokEmoteList = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_ANIMS, "emote_"+greeterType); if(jawaOrEwokEmoteList == null) return false; int listLength = jawaOrEwokEmoteList.length; if(listLength <= 0) return false; string[] jawaOrEwokEmoteStrings = new string[listLength]; for (int i = 0; i < listLength; i++) { jawaOrEwokEmoteStrings[i] = "@player_structure:"+jawaOrEwokEmoteList[i]; } if(jawaOrEwokEmoteStrings == null) return false; utils.setScriptVar(player, SELECTED_CAT_ANIM_SCRVAR, jawaOrEwokEmoteList); int pid = sui.listbox( self, player, "@player_structure:greeter_anim_category_d", sui.OK_CANCEL, "@player_structure:greeter_anim_category_t", jawaOrEwokEmoteStrings, "handlePlayerGreeterAnimSelect", true); sui.setPid(player, pid, GREETER_ANIM_PID); return true; } boolean getGreeterMoodCategorySelect(obj_id self, obj_id controller, obj_id player) { blog("terminal.greeter:getGreeterMoodCategorySelect: init."); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; if(!isValidId(controller) || !exists(controller)) return false; if(!validateAllImperativeGreeterVars(self, player)) return false; if(!hasObjVar(controller, vendor_lib.GREETER_MOODS_OBJVAR)) { blog("terminal.greeter:getGreeterMoodCategorySelect: Greeter somehow had animation radial option even though no animations are allowed."); return false; } if(sui.hasPid(player, GREETER_MOOD_PID)) { int pid = sui.getPid(player, GREETER_MOOD_PID); forceCloseSUIPage(pid); } blog("terminal.greeter:getGreeterMoodCategorySelect: prevalidation completed."); string[] greeterMoodCategories = vendor_lib.getAllGreeterDatatableColumnNames(self, vendor_lib.TBL_GREETER_MOODS); if(greeterMoodCategories == null) return false; int greeterMoodCategoriesLen = greeterMoodCategories.length; if(greeterMoodCategoriesLen < 0) return false; string[] greeterMoodCategoriesStrings = new string[greeterMoodCategoriesLen]; for (int i = 0; i < greeterMoodCategoriesLen; i++) { greeterMoodCategoriesStrings[i] = "@player_structure:"+greeterMoodCategories[i]; } if(greeterMoodCategoriesStrings == null) return false; utils.setScriptVar(player, CATEGORY_MOOD_COL_NAMES_SCRVAR, greeterMoodCategories); utils.setScriptVar(player, CATEGORY_MOOD_COL_STRINGS_SCRVAR, greeterMoodCategoriesStrings); blog("terminal.greeter:getGreeterMoodCategorySelect: sending player sui."); int pid = sui.listbox( self, player, "@player_structure:greeter_mood_parent_d", sui.OK_CANCEL, "@player_structure:greeter_mood_parent_t", greeterMoodCategoriesStrings, "handlePlayerGreeterMoodCategorySelect", true); sui.setPid(player, pid, GREETER_MOOD_PID); return true; } boolean getGreeterSoundVoiceList(obj_id self, obj_id controller, obj_id player, string effectType) { blog("terminal.greeter:getGreeterSoundVoiceList: init."); if(!isValidId(self) || !exists(self)) return false; else if(!isValidId(player) || !exists(player)) return false; else if(effectType == null || effectType.equals("")) return false; else if(!validateAllImperativeGreeterVars(self, player)) return false; else if(effectType != SOUND_OPTION && effectType != VOICE_OPTION) { blog("terminal.greeter:getGreeterSoundVoiceList: Player somehow lost their effect type."); return false; } else if(effectType == SOUND_OPTION && !hasObjVar(controller, vendor_lib.GREETER_HAS_SOUND_OBJVAR)) { blog("terminal.greeter:getGreeterSoundVoiceList: Player has "+SOUND_OPTION+" but the greeter doesn't allow for "+SOUND_OPTION); return false; } else if(effectType == VOICE_OPTION && !hasObjVar(controller, vendor_lib.GREETER_HAS_VO_OBJVAR)) { blog("terminal.greeter:getGreeterSoundVoiceList: Player has "+VOICE_OPTION+" but the greeter doesn't allow for "+VOICE_OPTION); return false; } if(sui.hasPid(player, GREETER_EFFECT_PID)) { int pid = sui.getPid(player, GREETER_EFFECT_PID); forceCloseSUIPage(pid); } blog("terminal.greeter:getGreeterSoundVoiceList: prevalidation completed."); string creatureType = getStringObjVar(controller, vendor_lib.CREATURE_TYPE); if(creatureType == null || creatureType.equals("")) return false; string greeterType = "greeter_"+creatureType; string greeterSoundVoColName = greeterType+"_"+effectType; string greeterSoundVoColNameString = greeterType+"_"+effectType+"_string"; //We check if this is a female greeter with different sound/VO data here //The objvars we are looking for are placed on the greeter mob in the creatures table if(hasObjVar(self, "greeter.sound_vo") && hasObjVar(self, "greeter.sound_vo_string")) { string soundVo = getStringObjVar(self, "greeter.sound_vo"); string soundVoString = getStringObjVar(self, "greeter.sound_vo_string"); if(soundVo != null && !soundVo.equals("") && soundVoString != null && !soundVoString.equals("")) { //only when we are sure everything is good do we overwrite the //colName and the colNameStrings greeterSoundVoColName = soundVo; greeterSoundVoColNameString = soundVoString; } } string[] effectList = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_SOUND_VOICE_EFFECT, greeterSoundVoColName); if(effectList == null) { blog("terminal.greeter:getGreeterSoundVoiceList: Could not find the following col in greeter_sound_voice_effect.tab: "+greeterSoundVoColName); //sendSystemMessageTestingOnly(player, "terminal.greeter:getGreeterSoundVoiceList: Could not find the following col in greeter_sound_voice_effect.tab: "+greeterSoundVoColName); sendSystemMessage(player, SID_NO_SOUND_VO_EFFECT_DATA); return false; } int effectListLen = effectList.length; if(effectListLen < 0) return false; string[] menuStringData = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_SOUND_VOICE_EFFECT, greeterSoundVoColNameString); if(menuStringData == null) return false; int menuStringDatalength = menuStringData.length; if(menuStringDatalength < 0) return false; string[] menuStrings = new string[menuStringDatalength]; for (int i = 0; i < menuStringDatalength; i++) { menuStrings[i] = "@player_vendor:"+menuStringData[i]; } if(menuStrings == null) return false; blog("terminal.greeter:getGreeterSoundVoiceList: has effect list."); utils.setScriptVar(player, PLAYER_SEL_GREETER_EFFECT_LIST, effectList); utils.setScriptVar(player, PLAYER_SEL_GREETER_EFFECT_TYPE, effectType); utils.setScriptVar(player, PLAYER_SEL_GREETER_SOUND_VO_STRING_LIST, menuStrings); int pid = sui.listbox( self, player, "@player_structure:greeter_effect_list_d", sui.OK_CANCEL, "@player_structure:greeter_effect_list_t", menuStrings, "handlePlayerEffectSelection", true); sui.setPid(player, pid, GREETER_EFFECT_PID); return true; } boolean getGreeterStatementSelection(obj_id self, obj_id controller, obj_id player) { blog("terminal.greeter:getGreeterStatementSelection: init."); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; if(!isValidId(controller) || !exists(controller)) return false; if(!validateAllImperativeGreeterVars(self, player)) return false; if(!hasObjVar(controller, vendor_lib.GREETER_HAS_CHAT_OBJVAR)) { blog("terminal.greeter:getGreeterStatementSelection: Player somehow received a statement option when the greeter cannot make statements."); return false; } if(sui.hasPid(player, GREETER_STATEMENT_PID)) { int pid = sui.getPid(player, GREETER_STATEMENT_PID); forceCloseSUIPage(pid); } blog("terminal.greeter:getGreeterStatementSelection: prevalidation completed."); string creatureType = getStringObjVar(controller, vendor_lib.CREATURE_TYPE); if(creatureType == null || creatureType.equals("")) return false; string greeterType = "greeter_"+creatureType; string[] statementList = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_SAY_CHAT, greeterType); if(statementList == null) { blog("terminal.greeter:getGreeterStatementSelection: Could not find the following col in greeter_say_chat.tab: "+greeterType); //sendSystemMessageTestingOnly(player, "terminal.greeter:getGreeterStatementSelection: Could not find the following col in greeter_say_chat.tab: "+greeterType); sendSystemMessage(player, SID_NO_SAY_CHAT_DATA); return false; } blog("terminal.greeter:getGreeterStatementSelection: has effect list."); string[] combinedStrings = new string[statementList.length]; for (int i = 0; i < statementList.length; i++) { combinedStrings[i] = "@player_structure:"+statementList[i]; } int statementListLen = statementList.length; if(statementListLen < 0) return false; utils.setScriptVar(player, PLAYER_SEL_GREETER_STATEMENT_LIST, statementList); int pid = sui.listbox(self, player, "@player_structure:greeter_statement_list_d", sui.OK_CANCEL, "@player_structure:greeter_statement_list_t", combinedStrings, "handlePlayerStatementSelection", true); sui.setPid(player, pid, GREETER_STATEMENT_PID); return true; } boolean destroyGreeter(obj_id self) { if(!isValidId(self) || !exists(self)) return false; blog("terminal.greeter:destroyGreeter: Greeter Destroy Initiated."); CustomerServiceLog("vendor", "terminal.greeter:destroyGreeter: Greeter Destroy Initiated. Object: "+self); obj_id ownerId = getObjIdObjVar(self, vendor_lib.GREETER_OWNER_OBJVAR); if(!isIdValid(ownerId) && !exists(ownerId)) { blog("terminal.greeter:destroyGreeter: Greeter Destroy could not find owner ID. Destroy object NOW!"); CustomerServiceLog("vendor", "terminal.greeter:destroyGreeter: Greeter Destroy could not find owner ID for object: "+self+" Destroy object NOW!"); destroyObject(self); return false; } if(hasObjVar(ownerId, vendor_lib.GREETER_NOT_INIT_OBJVAR)) removeObjVar(ownerId, vendor_lib.GREETER_NOT_INIT_OBJVAR);//REMOVED THE OBJVAR! string ownerName = getName(ownerId); //I think this checks to make sure the player has a valid string name? if(ownerName == null || ownerName.equals("")) { blog("terminal.greeter:destroyGreeter: Greeter Destroy could not find owner name with the owner oid. Destroy object NOW!"); CustomerServiceLog("vendor", "terminal.greeter:destroyGreeter: Greeter Destroy could not find the owner name with the owner oid: "+ownerId+" for object: "+self+" Destroy object NOW!"); destroyObject(self); return false; } location loc = getLocation(self); if(loc == null) { blog("terminal.greeter:destroyGreeter: Greeter Destroy could not find greeter location. Destroy object NOW!"); CustomerServiceLog("vendor", "terminal.greeter:destroyGreeter: Greeter Destroy could not find the owner name with the owner oid: "+ownerId+" for object: "+self+" Destroy object NOW!"); destroyObject(self); return false; } blog("terminal.greeter:destroyGreeter: Attempting to delete."); CustomerServiceLog("vendor", "terminal.greeter:destroyGreeter: Destroying Greeter. Owner: "+ownerName+" " +ownerId+" Object: "+self+ " Location: " + loc); destroyObject(self); return true; } boolean toggleTriggerVolume(obj_id self) { return toggleTriggerVolume(self, true); } boolean toggleTriggerVolume(obj_id self, boolean giveLife) { blog("terminal.greeter:toggleTriggerVolume init: GIVE LIFE = "+giveLife); blog("terminal.greeter:toggleTriggerVolume: Greeter Initiated Trigger Volume Toggle."); CustomerServiceLog("vendor", "terminal.greeter:handleGreeterInitialize: Greeter Initiated Trigger Volume Toggle. Greeter: " + self); if(!isValidId(self) || !exists(self)) return false; blog("terminal.greeter:toggleTriggerVolume: Greeter ID is valid."); obj_id ownerId = getObjIdObjVar(self, vendor_lib.GREETER_OWNER_OBJVAR); if(!isIdValid(ownerId) && !exists(ownerId)) return false; blog("terminal.greeter:toggleTriggerVolume: Trigger Volume Owner ID validation complete."); if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return false; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return false; blog("terminal.greeter:toggleTriggerVolume: Greeter has Controller ID."); //the greeter has been deactivated, bail out if(!hasObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR)) { removeTriggerVolume(ALERT_VOLUME_NAME); blog("terminal.greeter:toggleTriggerVolume: Greeter Removing Trigger Volume."); CustomerServiceLog("vendor", "terminal.greeter:toggleTriggerVolume: Greeter Removing Trigger Volume. OWNER: "+ getName(ownerId) +" " + ownerId + " Greeter: " + self); removeObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR); return true; } blog("terminal.greeter:toggleTriggerVolume: The greeter is currently active."); location loc = getLocation(self); if(loc == null) { blog("terminal.greeter:toggleTriggerVolume: Trigger Toggler could not find greeter location."); CustomerServiceLog("vendor", "terminal.greeter:toggleTriggerVolume: Trigger Toggler could not find greeter location for: "+self+" owner oid: "+ownerId); //return false; } blog("terminal.greeter:toggleTriggerVolume: Trigger Volume location received."); int radius = GREETER_TRIGGER_VOL_DEFAULT; if(hasObjVar(controller, GREETER_TRIGGER_VOL_CURRENT) && getIntObjVar(controller, GREETER_TRIGGER_VOL_CURRENT) >= GREETER_TRIGGER_VOL_MIN) radius = getIntObjVar(controller, GREETER_TRIGGER_VOL_CURRENT); createTriggerVolume(ALERT_VOLUME_NAME, radius, true); blog("terminal.greeter:toggleTriggerVolume: Greeter Creating Trigger Volume."); CustomerServiceLog("vendor", "terminal.greeter:toggleTriggerVolume: Greeter Creating Trigger Volume. OWNER: "+ getName(ownerId) +" " + ownerId + " Greeter: " + self+ " Location: " + loc); //if the greeter was just initialized and is now on, we should remove this in case //the player wants to toggle the greeter off. if(utils.hasScriptVar(self, GREETER_INITIALIZE_SCRVAR)) utils.removeScriptVar(self, GREETER_INITIALIZE_SCRVAR); //owner might be in area if(utils.hasScriptVar(self, vendor_lib.GREETER_ALREADY_BARKED_SCRVAR)) utils.removeScriptVar(self, vendor_lib.GREETER_ALREADY_BARKED_SCRVAR); if(giveLife) { blog("terminal.greeter:toggleTriggerVolume: GIVE LIFE = "+giveLife); bringGreeterToLife(self); } return true; } boolean validateAllImperativeGreeterVars(obj_id self, obj_id player) { if(!isValidId(self) || !exists(self)) return false; else if(!isValidId(player) || !exists(player)) return false; if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return false; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return false; obj_id ownerId = getObjIdObjVar(self, vendor_lib.GREETER_OWNER_OBJVAR); if(!isValidId(ownerId) || !exists(ownerId)) { blog("terminal.greeter:handleVendorAnimSelect: Greeter somehow didn't have a greeter ownerId objvar. Aborting."); return false; } else if(ownerId != player) { blog("terminal.greeter:handleVendorAnimSelect: Greeter is being accessed by a player that is not owner. Aborting."); return false; } else if(!hasObjVar(controller, vendor_lib.GREETER_IS_ACTIVATED_OBJVAR)) { blog("terminal.greeter:handleVendorAnimSelect: Greeter somehow didn't have a greeter activation objvar. Aborting."); return false; } else if(!hasObjVar(controller, vendor_lib.CREATURE_TYPE)) { blog("terminal.greeter:handleVendorAnimSelect: Greeter somehow didn't have a creature type objvar. Aborting."); return false; } else if(hasObjVar(controller, vendor_lib.GREETER_NOT_INIT_OBJVAR)) { blog("terminal.greeter:handleVendorAnimSelect: Greeter not initialized. Aborting."); return false; } else if(hasObjVar(controller, vendor_lib.GREETER_NOT_INIT_OBJVAR)) { blog("terminal.greeter:handleVendorAnimSelect: Owner using Greeter still has the not initialized var. Aborting."); return false; } return true; } //overloaded function, in case owner is testing animations, sounds, etc. //This is also called on initialize. The first person to enter the room of an unloaded greeter gets a greeting. boolean bringGreeterToLife(obj_id self) { if(!isValidId(self) || !exists(self)) return false; if(!hasObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR)) return false; obj_id ownerId = getObjIdObjVar(self, vendor_lib.GREETER_OWNER_OBJVAR); if(!isIdValid(ownerId)) return false; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return false; location loc = getLocation(self); if (loc == null) return false; int radius = GREETER_TRIGGER_VOL_DEFAULT; if(hasObjVar(controller, GREETER_TRIGGER_VOL_CURRENT) && getIntObjVar(controller, GREETER_TRIGGER_VOL_CURRENT) >= GREETER_TRIGGER_VOL_MIN) radius = getIntObjVar(controller, GREETER_TRIGGER_VOL_CURRENT); if(radius <= 0) return false; obj_id[] objects = getPlayerCreaturesInRange(loc, radius); if(objects == null || objects.length == 0) return false; obj_id playerToGreet = objects[0]; //Greet the first player in range bringGreeterToLife(self, controller, playerToGreet); return true; } boolean bringGreeterToLife(obj_id self, obj_id controller, obj_id player) { blog("vendor.greeter.bringGreeterToLife: init."); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; blog("vendor.greeter.bringGreeterToLife: validation complete. Player: "+player); string anim = ""; string voice = ""; string mood = "friendly"; //default string sound = ""; string effect = ""; string say_chat = ""; blog("vendor.greeter.bringGreeterToLife: initialized greeter vars "); // If we have area based vendor barks enabled and the player's skill level is high enough, bark a message. // Get our bark settings. if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_ANIMS_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR)) { anim = getStringObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION); blog("vendor.greeter.bringGreeterToLife: has anim: "+anim); } blog("vendor.greeter.bringGreeterToLife: VOICE VAR: "+utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_VO_OBJVAR)); if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_VO_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_VOICING_OBJVAR)) { voice = getStringObjVar(controller, vendor_lib.GREETER_VOICES_OBJVAR); blog("vendor.greeter.bringGreeterToLife: has voice: "+voice); } blog("vendor.greeter.bringGreeterToLife: SOUND VAR: "+utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_SOUND_OBJVAR)); if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_SOUND_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_SOUNDING_OBJVAR)) { sound = getStringObjVar(controller, vendor_lib.GREETER_SOUNDS_OBJVAR); blog("vendor.greeter.bringGreeterToLife: has sound: "+sound); } if(utils.getIntObjVar(controller, vendor_lib.GREETER_MOODS_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR)) { mood = getStringObjVar(controller, vendor_lib.GREETER_ACTUAL_MOOD); blog("vendor.greeter.bringGreeterToLife: has mood: "+mood); } else { mood = ai_lib.MOOD_CALM; blog("vendor.greeter.bringGreeterToLife: has anim: "+mood); } if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_CHAT_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR)) { say_chat = getStringObjVar(controller, vendor_lib.GREETER_ACTUAL_STATEMENT); blog("vendor.greeter.bringGreeterToLife: has say_chat: "+say_chat); } blog("vendor.greeter.bringGreeterToLife: trigger passed more tests"); blog("vendor.greeter.bringGreeterToLife: anim: "+anim); blog("vendor.greeter.bringGreeterToLife: voice: "+voice); blog("vendor.greeter.bringGreeterToLife: sound: "+sound); blog("vendor.greeter.bringGreeterToLife: say_chat: "+say_chat); // Bark our area breach string. faceTo(self, player); if(voice != null && !voice.equals("")) { blog("vendor.greeter.bringGreeterToLife: trigger VOICE using voice: "+voice); if(!play2dNonLoopingSound(player, voice)) blog("vendor.greeter.bringGreeterToLife: trigger FAILED VOICE"); } if(say_chat != null && !say_chat.equals("")) { blog("vendor.greeter.bringGreeterToLife: trigger CHATTING"); chat._chat(self, player, chat.CHAT_SAY, mood, say_chat, null, null); } if(anim != null && !anim.equals("")) { blog("vendor.greeter.bringGreeterToLife: trigger ANIMATING using anim: "+anim); doAnimationAction(self, anim); } if(sound != null && !sound.equals("")) { blog("vendor.greeter.bringGreeterToLife: trigger SOUNDS using sound: "+sound); playClientEffectObj(self, sound, player, ""); } blog("vendor.greeter.bringGreeterToLife: trigger should have done it all"); // Mark us so we don't bark too often. utils.setScriptVar(self, vendor_lib.GREETER_ALREADY_BARKED_SCRVAR, 1); int delay = GREETER_BARK_TIMER_MAX; if(hasObjVar(controller, GREETER_DELAY_TIMER_CURRENT) && getIntObjVar(controller, GREETER_DELAY_TIMER_CURRENT) >= GREETER_BARK_TIMER_MIN) delay = getIntObjVar(controller, GREETER_DELAY_TIMER_CURRENT); messageTo(self, "resetBarkTimer", null, delay, false); return true; } boolean deleteGreeting(obj_id self, obj_id player, obj_id controller, string saveName) { blog("vendor.greeter.deleteGreeting: init."); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; if(!isValidId(controller) || !exists(controller)) return false; if(saveName == null || saveName.equals("")) return false; blog("vendor.greeter.deleteGreeting: initial validation completed"); string[] allSaves = getStringArrayObjVar(controller, GREETER_SAVE_DATA); if(allSaves == null) return false; blog("vendor.greeter.deleteGreeting: allSaves.length: "+allSaves.length); int listLength = allSaves.length; if(listLength == 1 && allSaves[0].startsWith(saveName + "-")) { blog("vendor.greeter.deleteGreeting: List LENGTH == 1, removing OBJVAR"); removeObjVar(controller, GREETER_SAVE_DATA); //just delete the entry return true; } blog("vendor.greeter.deleteGreeting: List longer than 1, saveName:"+saveName); int row = -1; for(int a = 0; a < listLength; a++) { blog("vendor.greeter.deleteGreeting: Loop found: "+allSaves[a]); if(allSaves[a].startsWith(saveName + "-")) { blog("vendor.greeter.deleteGreeting: Loop FOUND MATCH: "+allSaves[a]); row = a; break; } } if(row < 0) return false; blog("vendor.greeter.deleteGreeting: row: "+row); string[] newSaveList = new string[listLength - 1]; blog("vendor.greeter.deleteGreeting: newSaveList.length(): "+newSaveList.length); //create a new array minus the old entry int i = 0; for(int b = 0; b < listLength; b++) { if(b == row) continue; blog("vendor.greeter.deleteGreeting: allSaves[b]: "+allSaves[b]+" being saved to location: "+i+" in array newSaveList"); newSaveList[i] = allSaves[b]; i++; } blog("vendor.greeter.deleteGreeting: array copy skipping deleted complete"); //overwrite the old array setObjVar(controller, GREETER_SAVE_DATA, newSaveList); return true; } boolean getSavedGreetings(obj_id self, obj_id player, obj_id controller,) { blog("vendor.greeter.getSavedGreetings: init."); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; if(!isValidId(controller) || !exists(controller)) return false; blog("vendor.greeter.getSavedGreetings: initial validation completed."); string[] allSaves = getStringArrayObjVar(controller, GREETER_SAVE_DATA); if(allSaves == null || allSaves.length == 0) { sendSystemMessage(player, SID_NO_SAVED_GREETS); return false; } blog("vendor.greeter.getSavedGreetings: Saved Data List Length: "+allSaves.length); blog("vendor.greeter.getSavedGreetings: allSaves[0]: "+allSaves[0]); Vector allNamesVector = new Vector(); Vector allDataVector = new Vector(); Vector combinedDataVector = new Vector(); for(int i = 0; i < allSaves.length; i++) { blog("vendor.greeter.getSavedGreetings: Loop found: "+allSaves[i]); if(allSaves[i] == null || allSaves[i].length() == 0) continue; blog("vendor.greeter.getSavedGreetings: allSaves[i].length(): "+allSaves[i].length()); string[] data = split(allSaves[i], '-'); if(data == null) break; if(data[0] == null || data[1] == null) continue; blog("vendor.greeter.getSavedGreetings: Split [0] found: "+data[0]); blog("vendor.greeter.getSavedGreetings: Split [1] found: "+data[1]); allNamesVector.add(data[0]); allDataVector.add(data[1]); combinedDataVector.add(allSaves[i]); } blog("vendor.greeter.getSavedGreetings: Name List Length: "+allNamesVector.size()); blog("vendor.greeter.getSavedGreetings: Data List Length: "+allDataVector.size()); if(allNamesVector.size() <= 0 || allDataVector.size() <= 0 || combinedDataVector.size() <= 0) return false; if(allNamesVector.size() != allDataVector.size() || allNamesVector.size() != combinedDataVector.size()) return false; string[] allNamesArray = new string[allNamesVector.size()]; allNamesVector.toArray(allNamesArray); string[] allDataArray = new string[allDataVector.size()]; allDataVector.toArray(allDataArray); if(allSaves.length != combinedDataVector.size()) { //remove null and corrupted save entries string[] newAllSaves = new string[combinedDataVector.size()]; combinedDataVector.toArray(newAllSaves); setObjVar(controller, GREETER_SAVE_DATA, newAllSaves); } blog("vendor.greeter.getSavedGreetings: Saved Data Conversion to arrays completed"); utils.setScriptVar(player, GREETER_SAVED_GREET_NAMES, allNamesArray); utils.setScriptVar(player, GREETER_SAVED_GREET_DATA, allDataArray); return true; } boolean saveGreeting(obj_id self, obj_id player, obj_id controller, string saveName) { blog("vendor.greeter.saveGreeting: init."); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; if(!isValidId(controller) || !exists(controller)) return false; if(saveName == null || saveName.equals("")) return false; blog("vendor.greeter.saveGreeting: inital validation completed."); string[] allSaves = getStringArrayObjVar(controller, GREETER_SAVE_DATA); if(allSaves == null) { blog("vendor.greeter.saveGreeting: GREETER_SAVE_DATA had to be created."); allSaves = new string[1]; } else if(allSaves.length < GREETER_SAVE_MAX) { blog("vendor.greeter.saveGreeting: allSaves.length: "+allSaves.length); int currentSaveArrayLenth = allSaves.length; string[] tempList = new string[currentSaveArrayLenth + 1]; for(int i = 0; i < currentSaveArrayLenth; i++) { if(allSaves[i].startsWith(saveName + "-")) { sendSystemMessage(player, SID_NAME_ALREADY_EXISTS); return false; } blog("vendor.greeter.saveGreeting: Loop: "+i); if(allSaves[i] == null) { blog("vendor.greeter.saveGreeting: &&&&&&&&&&&&EXISTING SAVE DATA HAD NULL ENTRY."); } blog("vendor.greeter.saveGreeting: allSaves[i]: "+allSaves[i]); blog("vendor.greeter.saveGreeting: allSaves[i].length(): "+allSaves[i].length()); tempList[i] = allSaves[i]; } allSaves = tempList; //WE NOW HAVE AN ARRAY WITH AN EMPTY LAST SLOT } else { sendSystemMessage(player, SID_GREETER_SAVE_MAX); return false; } blog("vendor.greeter.saveGreeting: validation complete. Player: "+player); string sayChatSlot = ""; string animSlot = ""; string voiceSlot = ""; string moodSlot = ""; string soundSlot = ""; string soundString = ""; string effectSlot = ""; string saveString = saveName + "-"; if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_ANIMS_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR)) { animSlot = getStringObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION); if(animSlot == null || animSlot.equals("")) return false; saveString += SAVE_ANIM + animSlot + COMMA; } if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_VO_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_VOICING_OBJVAR)) { voiceSlot = getStringObjVar(controller, vendor_lib.GREETER_VOICES_OBJVAR); if(voiceSlot == null || voiceSlot.equals("")) return false; soundString = getStringObjVar(controller, vendor_lib.GREETER_SOUNDS_VO_MENU_OBJVAR); if(soundString == null || soundString.equals("")) return false; saveString += SAVE_VOICE + voiceSlot + PIPE + soundString + COMMA; } if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_SOUND_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_SOUNDING_OBJVAR)) { soundSlot = getStringObjVar(controller, vendor_lib.GREETER_SOUNDS_OBJVAR); if(soundSlot == null || soundSlot.equals("")) return false; soundString = getStringObjVar(controller, vendor_lib.GREETER_SOUNDS_VO_MENU_OBJVAR); if(soundString == null || soundString.equals("")) return false; saveString += SAVE_SOUND + soundSlot + PIPE + soundString + COMMA; } if(utils.getIntObjVar(controller, vendor_lib.GREETER_MOODS_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR)) { moodSlot = getStringObjVar(controller, vendor_lib.GREETER_ACTUAL_MOOD); if(moodSlot == null || moodSlot.equals("")) return false; saveString += SAVE_MOOD + moodSlot + COMMA; } if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_CHAT_OBJVAR) == vendor_lib.VAR_TRUE && hasObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR)) { sayChatSlot = getStringObjVar(controller, vendor_lib.GREETER_ACTUAL_STATEMENT); if(sayChatSlot == null || sayChatSlot.equals("")) return false; saveString += SAVE_SAY_CHAT + sayChatSlot + COMMA; } if(saveString == null || saveString.equals("")) return false; //Take the empty slot and put a string in it. allSaves[allSaves.length - 1] = saveString; //Create/Overwrite the save list setObjVar(controller, GREETER_SAVE_DATA, allSaves); return true; } boolean getMainProgramUIListOptions(obj_id self, obj_id player, obj_id controller) { //blog("terminal.greeter.getMainProgramUIListOptions: init"); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; if(!isValidId(controller) || !exists(controller)) return false; //blog("terminal.greeter.getMainProgramUIListOptions: initial validation complete"); Vector dynMenuStrings = new Vector(); Vector dynMenuData = new Vector(); //change greeter name dynMenuStrings.add(MENU_CHANGE_NAME); dynMenuData.add(GREETER_CHANGE_NAME); if(hasObjVar(controller, vendor_lib.GREETER_CURRENTLY_RANDOMIZED_GREET)) { dynMenuStrings.add(MENU_RANDOMIZED_GREETINGS_OFF); dynMenuData.add(GREETER_RANDOMIZED_GREETINGS_OFF); } else { dynMenuStrings.add(MENU_RANDOMIZED_GREETINGS_ON); dynMenuData.add(GREETER_RANDOMIZED_GREETINGS_ON); } //blog("terminal.greeter.getMainProgramUIListOptions: starting objvar conditions"); if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_ANIMS_OBJVAR) == vendor_lib.VAR_TRUE) { //blog("terminal.greeter.getMainProgramUIListOptions: GREETER_ANIMATES_OBJVAR"); if(hasObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR)) { dynMenuStrings.add(MENU_GREETER_ANIMATING_ON); dynMenuData.add(GREETER_ANIMATING_ENABLED); //Edit dynMenuStrings.add(MENU_GREETER_ANIMATING_EDIT + " " + getStringObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION_STRING)); dynMenuData.add(GREETER_ANIMATING_EDIT); } else { dynMenuStrings.add(MENU_GREETER_ANIMATING_OFF); dynMenuData.add(GREETER_ANIMATING_DISABLED); } } if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_VO_OBJVAR) == vendor_lib.VAR_TRUE) { //blog("terminal.greeter.getMainProgramUIListOptions: GREETER_HAS_VO_OBJVAR"); if(hasObjVar(controller, vendor_lib.GREETER_VOICING_OBJVAR)) { dynMenuStrings.add(MENU_GREETER_VOICE_ON); dynMenuData.add(GREETER_VOICING_ENABLED); //Edit dynMenuStrings.add(MENU_GREETER_VOICE_EDIT + " " + getStringObjVar(controller, vendor_lib.GREETER_SOUNDS_VO_MENU_OBJVAR)); dynMenuData.add(GREETER_VOICING_EDIT); } else { dynMenuStrings.add(MENU_GREETER_VOICE_OFF); dynMenuData.add(GREETER_VOICING_DISABLED); } } if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_SOUND_OBJVAR) == vendor_lib.VAR_TRUE) { //blog("terminal.greeter.getMainProgramUIListOptions: GREETER_SOUNDS_OBJVAR"); if(hasObjVar(controller, vendor_lib.GREETER_SOUNDING_OBJVAR)) { dynMenuStrings.add(MENU_GREETER_SOUND_ON); dynMenuData.add(GREETER_SOUNDS_ENABLED); //Edit dynMenuStrings.add(MENU_GREETER_SOUND_EDIT + " " + getStringObjVar(controller, vendor_lib.GREETER_SOUNDS_VO_MENU_OBJVAR)); dynMenuData.add(GREETER_SOUNDS_EDIT); } else { dynMenuStrings.add(MENU_GREETER_SOUND_OFF); dynMenuData.add(GREETER_SOUNDS_DISABLED); } } if(utils.getIntObjVar(controller, vendor_lib.GREETER_MOODS_OBJVAR) == vendor_lib.VAR_TRUE) { //blog("terminal.greeter.getMainProgramUIListOptions: GREETER_MOODS_OBJVAR"); if(hasObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR)) { dynMenuStrings.add(MENU_GREETER_MOOD_ON); dynMenuData.add(GREETER_MOOD_ENABLED); //Edit dynMenuStrings.add(MENU_GREETER_MOOD_EDIT + " " + getStringObjVar(controller, vendor_lib.GREETER_ACTUAL_MOOD_STRING)); dynMenuData.add(GREETER_MOOD_EDIT); } else { dynMenuStrings.add(MENU_GREETER_MOOD_OFF); dynMenuData.add(GREETER_MOOD_DISABLED); } } if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_CHAT_OBJVAR) == vendor_lib.VAR_TRUE) { //blog("terminal.greeter.getMainProgramUIListOptions: GREETER_STATEMENT_OBJVAR"); if(hasObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR)) { dynMenuStrings.add(MENU_GREETER_STATEMENT_ON); dynMenuData.add(GREETER_STATEMENT_ENABLED); //edit dynMenuStrings.add(MENU_GREETER_STATEMENT_EDIT + " " + getStringObjVar(controller, vendor_lib.GREETER_ACTUAL_STATEMENT)); dynMenuData.add(GREETER_STATEMENT_EDIT); } else { dynMenuStrings.add(MENU_GREETER_STATEMENT_OFF); dynMenuData.add(GREETER_STATEMENT_DISABLED); } } if(hasObjVar(controller, vendor_lib.GREETER_COLOR_OBJVAR) && getBooleanObjVar(controller, vendor_lib.GREETER_COLOR_OBJVAR) == true) { //blog("terminal.greeter.getMainProgramUIListOptions: GREETER_COLOR_OBJVAR"); dynMenuStrings.add(MENU_COLOR); dynMenuData.add(GREETER_COLOR_CHANGE); } //blog("terminal.greeter.getMainProgramUIListOptions: Conditions complete"); dynMenuStrings.add(MENU_GREETER_RANDOM_ALL); dynMenuData.add(GREETER_RANDOM); if(hasObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR) || hasObjVar(controller, vendor_lib.GREETER_VOICING_OBJVAR) || hasObjVar(controller, vendor_lib.GREETER_SOUNDING_OBJVAR) || hasObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR) || hasObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR)) { dynMenuStrings.add(MENU_GREETER_PREVIEW_ALL); dynMenuData.add(GREETER_PREVIEW); } dynMenuStrings.add(MENU_GREETER_MODIFY_DELAY); dynMenuData.add(GREETER_MODIFY_DELAY); dynMenuStrings.add(MENU_GREETER_MODIFY_TRIGGER_VOL_RADIUS); dynMenuData.add(GREETER_MODIFY_TRIGGER_VOL_RADIUS); if(hasObjVar(controller, FOUND_OTHER_GREETERS)) { blog("terminal.greeter.getMainProgramUIListOptions: FOUND_OTHER_GREETERS"); if(getBooleanObjVar(controller, FOUND_OTHER_GREETERS) == true && getBooleanObjVar(controller, vendor_lib.GREETER_CONVERSE) == true) { blog("terminal.greeter.getMainProgramUIListOptions: FOUND_OTHER_GREETERS && GREETER_CONVERSE"); dynMenuStrings.add(MENU_GREETER_STOP_CONVERSE_OTHER_GREETER); dynMenuData.add(GREETER_STOP_ITERACTION); } else { blog("terminal.greeter.getMainProgramUIListOptions: FOUND_OTHER_GREETERS BUT NOT GREETER_CONVERSE"); dynMenuStrings.add(MENU_GREETER_CONVERSE_OTHER_GREETER); dynMenuData.add(GREETER_START_ITERACTION); } } if(hasObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR) || hasObjVar(controller, vendor_lib.GREETER_VOICING_OBJVAR) || hasObjVar(controller, vendor_lib.GREETER_SOUNDING_OBJVAR) || hasObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR) || hasObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR)) { dynMenuStrings.add(MENU_GREETER_SAVE_GREET); dynMenuData.add(GREETER_SAVE_GREET); } if(hasObjVar(controller, GREETER_SAVE_DATA)) { string[] allData = getStringArrayObjVar(controller, GREETER_SAVE_DATA); if(allData.length > 0) { dynMenuStrings.add(MENU_GREETER_LIST_GREET); dynMenuData.add(GREETER_LIST_GREET); } } //blog("terminal.greeter.getMainProgramUIListOptions: Vector additions completed"); //blog("terminal.greeter.getMainProgramUIListOptions: dynMenuStrings = "+dynMenuStrings.size()); string[] availableOptionStrings = new string[dynMenuStrings.size()]; //blog("terminal.greeter.getMainProgramUIListOptions: availableOptionStrings:"+availableOptionStrings.length); dynMenuStrings.toArray(availableOptionStrings); //blog("terminal.greeter.getMainProgramUIListOptions: dynMenuStrings vector done"); //blog("terminal.greeter.getMainProgramUIListOptions: dynMenuStrings = "+dynMenuData.size()); string[] availableDataOptions = new string[dynMenuData.size()]; //blog("terminal.greeter.getMainProgramUIListOptions: availableOptionStrings:"+availableDataOptions.length); dynMenuData.toArray(availableDataOptions); //blog("terminal.greeter.getMainProgramUIListOptions: Vector to Array completed"); utils.setScriptVar(player, GREETER_MAIN_MENU_STRINGS, availableOptionStrings); utils.setScriptVar(player, GREETER_MAIN_MENU_DATA, availableDataOptions); //blog("terminal.greeter.getMainProgramUIListOptions: ScriptVars saved. Returning"); return true; } boolean buildMainControlMenu(obj_id self, obj_id player) { //blog("terminal.greeter.buildMainControlMenu: init"); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; //blog("terminal.greeter.buildMainControlMenu: initial validation complete"); if(sui.hasPid(player, GREETER_PROGRAM_MAIN_PID)) { int pid = sui.getPid(player, GREETER_PROGRAM_MAIN_PID); forceCloseSUIPage(pid); } obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return false; //blog("terminal.greeter.//nu: Pid check done"); //Calls a function that sets all the menu data/strings if(!getMainProgramUIListOptions(self, player, controller)) { blog("terminal.greeter.OnObjectMenuSelect: List failed"); return false; } //blog("terminal.greeter.buildMainControlMenu: List received"); string[] menuStrings = utils.getStringArrayScriptVar(player, GREETER_MAIN_MENU_STRINGS); if(menuStrings == null) { //blog("terminal.greeter.buildMainControlMenu: Menu Strings failed"); return false; } int pid = sui.listbox(self, player, SUI_GREETER_INSTRUCTIONS_DESCR, sui.OK_CANCEL, SUI_GREETER_INSTRUCTIONS_TITLE, menuStrings, "handlePlayerProgramSelect", true); sui.setPid(player, pid, GREETER_PROGRAM_MAIN_PID); return true; } boolean loadSavedData(obj_id self, obj_id player, obj_id controller, string selection) { blog("terminal.greeter.loadSavedData: init"); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(player) || !exists(player)) return false; if(!isValidId(controller) || !exists(controller)) return false; if(selection == null || selection.equals("")) return false; blog("terminal.greeter.loadSavedData: initial validation completed"); string[] fileName = split(selection, '-'); if(fileName == null || fileName.length <= 0) return false; blog("terminal.greeter.loadSavedData: fileNme: "+fileName[0]); blog("terminal.greeter.loadSavedData: data: "+fileName[1]); string[] data = split(fileName[1], ','); if(data == null || data.length <= 0) return false; blog("terminal.greeter.loadSavedData: selection: "+selection); blog("terminal.greeter.loadSavedData: data.length: "+data.length); blog("terminal.greeter.loadSavedData: data[0]: "+data[0]); blog("terminal.greeter.loadSavedData: data[1]: "+data[1]); string sayChatSlot = ""; string animSlot = ""; string voiceSlot = ""; string moodSlot = ""; string soundSlot = ""; //clear all existing settings removeObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR); removeObjVar(controller, vendor_lib.GREETER_VOICES_OBJVAR); removeObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR); removeObjVar(controller, vendor_lib.GREETER_SOUNDS_OBJVAR); removeObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR); removeObjVar(controller, vendor_lib.GREETER_CURRENTLY_RANDOMIZED_GREET); for(int i = 0; i < data.length; i++) { if(data[i] == null || data[i].length() == 0) continue; if(data[i].startsWith(SAVE_SAY_CHAT)) { blog("terminal.greeter.loadSavedData: SAVE_SAY_CHAT"); string[] sayChatData = split(data[i], '='); if(sayChatData == null || sayChatData.length <= 0) continue; blog("terminal.greeter.loadSavedData: sayChatData: "+sayChatData[1]); setObjVar(controller, vendor_lib.GREETER_ACTUAL_STATEMENT, sayChatData[1]); setObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR, true); continue; } if(data[i].startsWith(SAVE_VOICE)) { blog("terminal.greeter.loadSavedData: SAVE_VOICE"); string[] voiceData = split(data[i], '='); if(voiceData == null || voiceData.length <= 0) continue; blog("terminal.greeter.loadSavedData: voiceData: "+voiceData[1]); string[] voiceAndStringData = split(voiceData[1], '|'); if(voiceAndStringData == null || voiceAndStringData.length <= 0) continue; setObjVar(controller, vendor_lib.GREETER_VOICES_OBJVAR, voiceAndStringData[0]); setObjVar(controller, vendor_lib.GREETER_SOUNDS_VO_MENU_OBJVAR, voiceAndStringData[1]); setObjVar(controller, vendor_lib.GREETER_VOICING_OBJVAR, true); continue; } if(data[i].startsWith(SAVE_MOOD)) { blog("terminal.greeter.loadSavedData: SAVE_MOOD"); string[] moodData = split(data[i], '='); if(moodData == null || moodData.length <= 0) continue; blog("terminal.greeter.loadSavedData: moodData: "+moodData[1]); setObjVar(controller, vendor_lib.GREETER_ACTUAL_MOOD, moodData[1]); setObjVar(controller, vendor_lib.GREETER_ACTUAL_MOOD_STRING, "@player_structure:"+moodData[1]); setObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR, true); continue; } if(data[i].startsWith(SAVE_SOUND)) { blog("terminal.greeter.loadSavedData: SAVE_SOUND"); string[] soundData = split(data[i], '='); if(soundData == null || soundData.length <= 0) continue; blog("terminal.greeter.loadSavedData: soundData: "+soundData[1]); string[] soundAndStringData = split(soundData[1], '|'); if(soundAndStringData == null || soundAndStringData.length <= 0) continue; blog("terminal.greeter.loadSavedData: soundData: "+soundAndStringData[0]); setObjVar(controller, vendor_lib.GREETER_SOUNDS_OBJVAR, soundAndStringData[0]); setObjVar(controller, vendor_lib.GREETER_SOUNDS_VO_MENU_OBJVAR, soundAndStringData[1]); setObjVar(controller, vendor_lib.GREETER_SOUNDING_OBJVAR, true); continue; } if(data[i].startsWith(SAVE_ANIM)) { blog("terminal.greeter.loadSavedData: SAVE_ANIM"); string[] animData = split(data[i], '='); if(animData == null || animData.length <= 0) continue; blog("terminal.greeter.loadSavedData: animData: "+animData[1]); setObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION, animData[1]); setObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION_STRING, "@player_structure:"+animData[1]); setObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR, true); continue; } } return true; } boolean getRandomGreeting(obj_id self, obj_id controller) { blog("terminal.greeter.getRandomGreeting: init"); if(!isValidId(self) || !exists(self)) return false; if(!isValidId(controller) || !exists(controller)) return false; blog("terminal.greeter.getRandomGreeting: initial validation completed"); //IF WE HAVE ANY OF THE VARS, CONTINUE ON FOR THE RAND GREETING. //IT NEITHER, BAIL if(!hasObjVar(controller, vendor_lib.GREETER_CURRENTLY_RANDOMIZED_GREET) || getBooleanObjVar(controller, vendor_lib.GREETER_CURRENTLY_RANDOMIZED_GREET) == false) { if(!hasObjVar(controller, vendor_lib.GREETER_RANDOM_TEST_FIRE) || getBooleanObjVar(controller, vendor_lib.GREETER_RANDOM_TEST_FIRE) == false) { blog("terminal.greeter.getRandomGreeting: I AM NOT LABELED AS A RANDOMIZED GREETER"); return false; } } blog("terminal.greeter.getRandomGreeting: I AM STILL LABELED AS A RANDOMIZED GREETER"); string creatureType = getStringObjVar(controller, vendor_lib.CREATURE_TYPE); if(creatureType == null || creatureType.equals("")) return false; blog("terminal.greeter.getRandomGreeting: creatureType: "+creatureType); string greeterType = "greeter_"+creatureType; //ANIMATIONS //TODO: Check the datatable for the limited animation column - this will prevent the need to update //the script when playing random animations. if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_ANIMS_OBJVAR) == vendor_lib.VAR_TRUE) { blog("terminal.greeter.getRandomGreeting: GREETER_ANIMATES_OBJVAR"); if(greeterType.equals("greeter_ewok") || greeterType.equals("greeter_jawa") || greeterType.equals("greeter_battle_droid") || greeterType.equals("greeter_toydarian") || greeterType.equals("greeter_pa_lowick")) { blog("terminal.greeter.getRandomGreeting: Is an ewok or jawa"); //if this is an ewok or jawa we only have one col in the datatable string[] jawaOrEwokEmoteList = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_ANIMS, "emote_"+greeterType); if(jawaOrEwokEmoteList == null) return false; int listLength = jawaOrEwokEmoteList.length; if(listLength <= 0) return false; int randomAnimInt = rand(0, listLength - 1); setObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION, jawaOrEwokEmoteList[randomAnimInt]); setObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION_STRING, "@player_structure:"+jawaOrEwokEmoteList[randomAnimInt]); blog("terminal.greeter.getRandomGreeting: randAnim: "+jawaOrEwokEmoteList[randomAnimInt]); setObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR, true); } else { blog("terminal.greeter.getRandomGreeting: not an ewok or jawa"); //Start Animation string[] greeterAnimCategories = vendor_lib.getAllGreeterDatatableColumnNames(self, vendor_lib.TBL_GREETER_ANIMS); if(greeterAnimCategories == null) return false; int greeterAnimCategoriesLen = greeterAnimCategories.length; if(greeterAnimCategoriesLen <= 0) return false; int randomCategory = rand(0, greeterAnimCategoriesLen - 1); string animCategory = greeterAnimCategories[randomCategory]; string[] categoryAnims = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_ANIMS, animCategory); if(categoryAnims == null) return false; int categoryAnimslength = categoryAnims.length; if(categoryAnimslength <= 0) return false; int randomAnimInt = rand(0, categoryAnimslength - 1); setObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION, categoryAnims[randomAnimInt]); setObjVar(controller, vendor_lib.GREETER_ACTUAL_ANIMATION_STRING, "@player_structure:"+categoryAnims[randomAnimInt]); blog("terminal.greeter.getRandomGreeting: randAnim: "+categoryAnims[randomAnimInt]); setObjVar(controller, vendor_lib.GREETER_ANIMATING_OBJVAR, true); } } //VOICE//SOUND if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_VO_OBJVAR) == vendor_lib.VAR_TRUE || utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_SOUND_OBJVAR) == vendor_lib.VAR_TRUE) { blog("greeter.getRandomGreeting: GREETER_HAS_SOUND_OBJVAR or GREETER_HAS_VO_OBJVAR"); string greeterSoundVoColName = ""; string greeterSoundVoColNameString = ""; if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_SOUND_OBJVAR) == vendor_lib.VAR_TRUE) { blog("greeter.getRandomGreeting: GREETER_HAS_SOUND_OBJVAR"); greeterSoundVoColName = greeterType+"_"+SOUND_OPTION; greeterSoundVoColNameString = greeterType+"_"+SOUND_STRING; } else { blog("greeter.getRandomGreeting: GREETER_HAS_VO_OBJVAR"); greeterSoundVoColName = greeterType+"_"+VOICE_OPTION; greeterSoundVoColNameString = greeterType+"_"+VOICE_STRING; } //We check if this is a female greeter with different sound/VO data here //The objvars we are looking for are placed on the greeter mob in the creatures table if(hasObjVar(self, "greeter.sound_vo")) { string soundVo = getStringObjVar(self, "greeter.sound_vo"); string soundVoString = getStringObjVar(self, "greeter.sound_vo_string"); if(soundVo != null && !soundVo.equals("") && soundVoString != null && !soundVoString.equals("")) { //only when we are sure everything is good do we overwrite the //colName and the colNameStrings greeterSoundVoColName = soundVo; greeterSoundVoColNameString = soundVoString; } } blog("greeter.getRandomGreeting: greeterSoundVoColName: "+greeterSoundVoColName); string[] effectList = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_SOUND_VOICE_EFFECT, greeterSoundVoColName); if(effectList == null || effectList.length <= 0) return false; int effectListLen = effectList.length; string[] stringList = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_SOUND_VOICE_EFFECT, greeterSoundVoColNameString); if(stringList == null || stringList.length <= 0 || stringList.length != effectListLen) return false; int randNumber = rand(0, effectListLen - 1); if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_SOUND_OBJVAR) == vendor_lib.VAR_TRUE) { blog("greeter.getRandomGreeting: got a sound:"+ effectList[randNumber]); setObjVar(controller, vendor_lib.GREETER_SOUNDS_OBJVAR, effectList[randNumber]); blog("terminal.greeter.getRandomGreeting: randSound: "+effectList[randNumber]); setObjVar(controller, vendor_lib.GREETER_SOUNDS_VO_MENU_OBJVAR, "@player_vendor:"+stringList[randNumber]); setObjVar(controller, vendor_lib.GREETER_SOUNDING_OBJVAR, true); } else { blog("greeter.getRandomGreeting: got a VO: " +effectList[randNumber]); setObjVar(controller, vendor_lib.GREETER_VOICES_OBJVAR, effectList[randNumber]); blog("terminal.greeter.getRandomGreeting: randVO: "+effectList[randNumber]); setObjVar(controller, vendor_lib.GREETER_SOUNDS_VO_MENU_OBJVAR, "@player_vendor:"+stringList[randNumber]); setObjVar(controller, vendor_lib.GREETER_VOICING_OBJVAR, true); } } if(utils.getIntObjVar(controller, vendor_lib.GREETER_MOODS_OBJVAR) == vendor_lib.VAR_TRUE) { blog("terminal.greeter.getRandomGreeting: GREETER_MOODS_OBJVAR"); string[] greeterMoodCategories = vendor_lib.getAllGreeterDatatableColumnNames(self, vendor_lib.TBL_GREETER_MOODS); if(greeterMoodCategories == null) return false; int greeterMoodCategoriesLen = greeterMoodCategories.length; if(greeterMoodCategoriesLen <= 0) return false; int randNumber = rand(0, greeterMoodCategoriesLen - 1); string randMoodCat = greeterMoodCategories[randNumber]; string[] categoryMoods = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_MOODS, randMoodCat); if(categoryMoods == null) return false; int moodListLength = categoryMoods.length; if(moodListLength <= 0) return false; int randMoodInt = rand(0, moodListLength-1); setObjVar(controller, vendor_lib.GREETER_ACTUAL_MOOD, categoryMoods[randMoodInt]); setObjVar(controller, vendor_lib.GREETER_ACTUAL_MOOD_STRING, "@player_structure:"+categoryMoods[randMoodInt]); blog("terminal.greeter.getRandomGreeting: randMood: "+categoryMoods[randMoodInt]); setObjVar(controller, vendor_lib.GREETER_HAS_MOOD_OBJVAR, true); } if(utils.getIntObjVar(controller, vendor_lib.GREETER_HAS_CHAT_OBJVAR) == vendor_lib.VAR_TRUE) { blog("terminal.greeter.getRandomGreeting: GREETER_STATEMENT_OBJVAR"); string[] statementList = dataTableGetStringColumnNoDefaults(vendor_lib.TBL_GREETER_SAY_CHAT, greeterType); if(statementList == null) return false; int statementListLen = statementList.length; if(statementListLen < 0) return false; int randNumber = rand(0, statementListLen-1); setObjVar(controller, vendor_lib.GREETER_ACTUAL_STATEMENT, localize(new string_id("player_structure", statementList[randNumber]))); blog("terminal.greeter.getRandomGreeting: randMood: "+statementList[randNumber]); setObjVar(controller, vendor_lib.GREETER_HAS_STATEMENT_OBJVAR, true); } blog("terminal.greeter.getRandomGreeting: RETURNING TRUE"); return true; } boolean conversableGreeterInRange(obj_id self) { blog("terminal.greeter.conversableGreeterInRange: init"); if(!isValidId(self) || !exists(self)) return false; obj_id controller = getObjIdObjVar(self, vendor_lib.CNTRLR_GREETER_NONVENDOR_ID_OBJVAR); if(!isValidId(controller) || !exists(controller)) return false; blog("terminal.greeter.conversableGreeterInRange: controller received"); //only allow a search once in a while if(hasObjVar(controller, FOUND_OTHER_GREETER_TIMER)) { blog("terminal.greeter.conversableGreeterInRange: controller has FOUND_OTHER_GREETER_TIMER"); int gameTime = getGameTime(); int gameTimeSaved = getIntObjVar(self, FOUND_OTHER_GREETER_TIMER); int diff = gameTime - gameTimeSaved; if(diff < 0)//error removeObjVar(controller, FOUND_OTHER_GREETER_TIMER); if(diff < GREETER_TIMER_DELAY) return false; blog("terminal.greeter.conversableGreeterInRange: controller removing FOUND_OTHER_GREETER_TIMER"); removeObjVar(controller, FOUND_OTHER_GREETER_TIMER); } location loc = getLocation(self); obj_id[] allGreeters = getAllObjectsWithScript(loc, MAX_GREETER_CONV_RANGE_FLOAT, "terminal.greeter"); if(allGreeters == null || allGreeters.length <= 0) return false; //the greeter will find itself and give false positive if(allGreeters.length == 1 && allGreeters[0] == self) return false; setObjVar(controller, FOUND_OTHER_GREETERS, true); setObjVar(controller, FOUND_OTHER_GREETER_TIMER, getGameTime()); return true; } obj_id getConversableGreeter(obj_id self, obj_id player, obj_id controller) { blog("terminal.greeter.getConversableGreeter: Init"); if(!isValidId(self) || !exists(self)) return null; if(!isValidId(player)) //player may still be loading or logged out. return null; if(!isValidId(controller) || !exists(controller)) return null; blog("terminal.greeter.getConversableGreeter: validation completed"); if(!hasObjVar(controller, FOUND_OTHER_GREETERS)) return null; blog("terminal.greeter.getConversableGreeter: has correct variable"); location loc = getLocation(self); if(loc == null) return null; blog("terminal.greeter.getConversableGreeter: locaiton of self attained."); obj_id[] allGreeters = getAllObjectsWithScript(loc, MAX_GREETER_CONV_RANGE_FLOAT, "terminal.greeter"); if(allGreeters == null || allGreeters.length <= 0 || (allGreeters.length == 1 && allGreeters[0] == self)) { blog("terminal.greeter.getConversableGreeter: No other greeters found. Removing variable from controller."); removeObjVar(controller, FOUND_OTHER_GREETERS); return null; } blog("terminal.greeter.getConversableGreeter: At least one other greeters found! #: "+allGreeters.length); Vector greeterList = new Vector(); for(int i = 0; i < allGreeters.length; i++) { if(allGreeters[i] != self && isValidId(allGreeters[i]) && exists(allGreeters[i])) greeterList.add(allGreeters[i]); } if(greeterList.size() < 0) return null; obj_id[] newGreeterList = new obj_id[greeterList.size()]; greeterList.toArray(newGreeterList); if(newGreeterList.length== 1) return newGreeterList[0]; blog("terminal.greeter.getConversableGreeter: New list of greeters is more than 1 in size"); return newGreeterList[rand(0,newGreeterList.length-1)]; } boolean blog(string msg) { if(LOGGING_ON && msg != null && !msg.equals("")) LOG(LOGGING_CATEGORY, msg); return true; }