// ====================================================================== // // chassis_npc.script // Copyright 2004, Sony Online Entertainment // All Rights Reserved. // // Created with SwgConversationEditor 1.36 - DO NOT EDIT THIS AUTO-GENERATED FILE! // // ====================================================================== // ====================================================================== // Library Includes // ====================================================================== include library.ai_lib; include library.chat; include library.money; include library.space_crafting; include library.space_transition; include library.sui; include library.travel; include library.utils; // ====================================================================== // Script Constants // ====================================================================== string c_stringFile = "conversation/chassis_npc"; // ====================================================================== // Script Conditions // ====================================================================== boolean chassis_npc_condition__defaultCondition (obj_id player, obj_id npc) { return true; } // ---------------------------------------------------------------------- boolean chassis_npc_condition_hasLoot (obj_id player, obj_id npc) { return space_crafting.hasLootToSell(player); } // ====================================================================== // Script Actions // ====================================================================== void chassis_npc_action_showComponentList (obj_id player, obj_id npc) { space_crafting.purchaseChassisFromBroker(player, npc); } messageHandler handleCheckShip() { const string TBL = "datatables/space_crafting/chassis_npc.iff"; const string STF = "chassis_npc"; obj_id player = sui.getPlayerId(params); if (!isIdValid(player)) return SCRIPT_CONTINUE; int idx = sui.getListboxSelectedRow(params); int bp = sui.getIntButtonPressed(params); utils.setScriptVar(player, "chassis_npc.row", idx); utils.setScriptVar(player, "chassis_npc.bp", bp); if (idx == -1 || bp == -1) return SCRIPT_CONTINUE; obj_id[] deeds = utils.getObjIdArrayScriptVar(player, "chassis_npc.deed"); if (deeds == null || deeds.length <= 0) return SCRIPT_CONTINUE; string type = getStringObjVar(deeds[idx], "shiptype"); string skill = dataTableGetString(TBL, type, 3); string_id msg = new string_id(STF, "can_use"); if (!hasSkill(player, skill)) msg = new string_id(STF, "cannot_use"); if (type == "firespray") if (hasSkill(player, "pilot_rebel_navy_master") || hasSkill(player, "pilot_imperial_navy_master") || hasSkill(player, "pilot_neutral_master")) msg = new string_id(STF, "can_use"); string message = utils.packStringId(msg); string_id headerId = new string_id(STF, "confirm_transaction"); string header = utils.packStringId(headerId); int pid = sui.msgbox(self, player, message, 2, header , 0, "handleBuyShip"); if (pid <= -1) return SCRIPT_CONTINUE; return SCRIPT_CONTINUE; } messageHandler handleBuyShip() { const string TBL = "datatables/space_crafting/chassis_npc.iff"; const string STF = "chassis_npc"; obj_id player = sui.getPlayerId(params); if (!isIdValid(player)) return SCRIPT_CONTINUE; int button = sui.getIntButtonPressed(params); if (button == 1) return SCRIPT_CONTINUE; int idx = utils.getIntScriptVar(player, "chassis_npc.row"); int bp = utils.getIntScriptVar(player, "chassis_npc.bp"); utils.removeScriptVar(player, "chassis_npc.row"); utils.removeScriptVar(player, "chassis_npc.bp"); if (idx == -1 || bp == -1) return SCRIPT_CONTINUE; obj_id inv = utils.getInventoryContainer(player); if (!isIdValid(inv)) { return SCRIPT_CONTINUE; } int[] prices = utils.getIntArrayScriptVar(player, "chassis_npc.price"); obj_id[] deeds = utils.getObjIdArrayScriptVar(player, "chassis_npc.deed"); if (deeds == null || deeds.length <= 0) return SCRIPT_CONTINUE; string type = getStringObjVar(deeds[idx], "shiptype"); obj_id datapad = utils.getDatapad(player); if (!isIdValid(datapad)) return SCRIPT_CONTINUE; int price = dataTableGetInt(TBL, type, 1); obj_id deed = deeds[idx]; int playerCash = getTotalMoney(player); if (bp == sui.BP_CANCEL) { return SCRIPT_CONTINUE; } else { if (utils.getContainingPlayer(deed) == player) { float mass = getFloatObjVar(deed, "ship_chassis.mass"); float hp = getFloatObjVar(deed, "ship_chassis.hp"); obj_id pcd = space_crafting.createDeedFromBlueprints(player, type, inv, mass, hp); if (isIdValid(pcd)) { dictionary d = new dictionary(); d.put("player", player); d.put("deed", pcd); d.put("price", price); d.put("blueprints", deed); money.requestPayment(player, self, price, "handleChassisTransaction", d, false); } else { string_id msgInvFull = new string_id (STF, "inv_full"); chat.chat(self, player, msgInvFull); destroyObject(pcd); return SCRIPT_CONTINUE; } cleanUpScriptVars(player); } else { string_id msgNotInInv = new string_id (STF, "not_in_inv"); chat.chat(self, player, msgNotInInv); return SCRIPT_CONTINUE; } } return SCRIPT_CONTINUE; } messageHandler handleChassisTransaction() { const string STF = "chassis_npc"; if ( params == null || params.isEmpty() ) return SCRIPT_CONTINUE; obj_id player = params.getObjId("player"); obj_id deed = params.getObjId("deed"); int price = params.getInt("price"); obj_id blueprints = params.getObjId("blueprints"); if ( !isIdValid(player) || !isIdValid(deed) || price < 1 ) return SCRIPT_CONTINUE; if ( params.getInt(money.DICT_CODE) == money.RET_FAIL ) { chat.chat(self, player, new string_id(STF,"no_money")); destroyObject(deed); return SCRIPT_CONTINUE; } string strParkingLocation = travel.getTravelPointName(getTopMostContainer(self)); if(strParkingLocation!=null) { setObjVar(deed, "strParkingLocation", strParkingLocation); } else { setName(deed, "This pcd was made in a starport without a landing location"); } string_id msgBoughtChassis = new string_id (STF, "bought_chassis"); chat.chat(self, player, msgBoughtChassis); CustomerServiceLog("chassis_broker", "%TU CHANGED BLUEPRINT "+blueprints+ " ("+getTemplateName(blueprints)+") "+" INTO DEED " + deed + " (" + getTemplateName(deed)+ ") " + " FOR " + price + " CREDITS AT THIS BROKER: " + self, player); playMusic(player, "sound/music_acq_academic.snd"); destroyObject(blueprints); return SCRIPT_CONTINUE; } void cleanUpScriptVars(obj_id player) { const string SCRIPTVAR_CHASSIS_SUI = "chassis_npc.sui"; utils.removeScriptVar(player, SCRIPTVAR_CHASSIS_SUI); utils.removeScriptVar(player, "chassis_npc.price"); utils.removeBatchScriptVar(player, "chassis_npc.type"); utils.removeScriptVar(player, "chassis_npc.deed"); } // ---------------------------------------------------------------------- void chassis_npc_action_sellComponents (obj_id player, obj_id npc) { space_crafting.sellComponentsToBroker(player, npc); } messageHandler sellLootComponents() { obj_id objPlayer= sui.getPlayerId(params); if (!isIdValid(objPlayer)) { LOG("space", "Invalid player"); return SCRIPT_CONTINUE; } int idx = sui.getListboxSelectedRow(params); int bp = sui.getIntButtonPressed(params); if (idx == -1 || bp == -1) { LOG("space", "Invalid index"); return SCRIPT_CONTINUE; } else if ( bp != sui.BP_OK ) { return SCRIPT_CONTINUE; } obj_id[] objLootToSell= utils.getObjIdArrayScriptVar(objPlayer, "objLootToSell"); if (objLootToSell == null || objLootToSell.length <= 0) { LOG("space", "No loot"); return SCRIPT_CONTINUE; } if(idx>objLootToSell.length-1) { LOG("space", "really bad index"); return SCRIPT_CONTINUE; } obj_id objItem = objLootToSell[idx]; if(space_crafting.sellLootItem(objPlayer, self, objItem)) { space_crafting.sellComponentsToBroker(objPlayer, self); } return SCRIPT_CONTINUE; } // ====================================================================== // Script %TO Tokens // ====================================================================== string chassis_npc_tokenTO_tokenTO0001 (obj_id player, obj_id npc) { return new string(); } // ====================================================================== // Script %DI Tokens // ====================================================================== // ====================================================================== // Script %DF Tokens // ====================================================================== // ====================================================================== // handleBranch Functions // ====================================================================== int chassis_npc_handleBranch1 (obj_id player, obj_id npc, string_id response) { //-- [BRANCH NOTE] //-- NPC: Hello. I can construct a ship chassis for you if you are holding a set of chassis blueprints. //-- [RESPONSE NOTE] //-- PLAYER: (SELL COMPONENTS) if (response == "s_94e3013f") { //-- [NOTE] if (chassis_npc_condition_hasLoot (player, npc)) { chassis_npc_action_sellComponents (player, npc); //-- NPC: Let's see what you have to sell... string_id message = new string_id (c_stringFile, "s_aae81853"); utils.removeScriptVar (player, "conversation.chassis_npc.branchId"); npcEndConversationWithMessage (player, message); return SCRIPT_CONTINUE; } //-- [NOTE] if (chassis_npc_condition__defaultCondition (player, npc)) { //-- NPC: You don't have anything to sell me. string_id message = new string_id (c_stringFile, "s_3310c404"); utils.removeScriptVar (player, "conversation.chassis_npc.branchId"); npcEndConversationWithMessage (player, message); return SCRIPT_CONTINUE; } } //-- [RESPONSE NOTE] //-- PLAYER: (ASSEMBLE SHIP CHASSIS) if (response == "s_2f553ea8") { //-- [NOTE] if (chassis_npc_condition__defaultCondition (player, npc)) { doAnimationAction (npc, "explain"); chassis_npc_action_showComponentList (player, npc); //-- NPC: Let me see if you have any blueprints I can work with... string_id message = new string_id (c_stringFile, "s_bcb592f"); utils.removeScriptVar (player, "conversation.chassis_npc.branchId"); npcEndConversationWithMessage (player, message); return SCRIPT_CONTINUE; } } //-- [RESPONSE NOTE] //-- PLAYER: How do I assemble a ship? if (response == "s_93a92e8") { //-- [NOTE] if (chassis_npc_condition__defaultCondition (player, npc)) { doAnimationAction (npc, "explain"); //-- NPC: You need to procure a set of chassis blueprints from a Shipwright. Once you have the blueprints, you must come to a chassis dealer to have the chassis built to your specifications. string_id message = new string_id (c_stringFile, "s_37386aa2"); utils.removeScriptVar (player, "conversation.chassis_npc.branchId"); npcEndConversationWithMessage (player, message); return SCRIPT_CONTINUE; } } //-- [RESPONSE NOTE] //-- PLAYER: I'll come back later. if (response == "s_42d3759c") { //-- [NOTE] if (chassis_npc_condition__defaultCondition (player, npc)) { doAnimationAction (npc, "shrug_shoulders"); //-- NPC: I'll be here. string_id message = new string_id (c_stringFile, "s_37f48153"); utils.removeScriptVar (player, "conversation.chassis_npc.branchId"); npcEndConversationWithMessage (player, message); return SCRIPT_CONTINUE; } } return SCRIPT_DEFAULT; } // ---------------------------------------------------------------------- // ====================================================================== // User Script Triggers // ====================================================================== trigger OnInitialize () { if ((!isMob (self)) || (isPlayer (self))) detachScript(self, "conversation.chassis_npc"); setCondition (self, CONDITION_CONVERSABLE); setInvulnerable( self, true ); setCondition( self, CONDITION_SPACE_INTERESTING ); return SCRIPT_CONTINUE; } trigger OnAttach () { setCondition (self, CONDITION_CONVERSABLE); setInvulnerable( self, true ); setCondition( self, CONDITION_SPACE_INTERESTING ); return SCRIPT_CONTINUE; } trigger OnObjectMenuRequest (obj_id player, menu_info menuInfo) { int menu = menuInfo.addRootMenu (menu_info_types.CONVERSE_START, null); menu_info_data menuInfoData = menuInfo.getMenuItemById (menu); menuInfoData.setServerNotify (false); setCondition (self, CONDITION_CONVERSABLE); if ( !hasObjVar(self, "chassis_broker.alreadyHasName") ) { string_id name = new string_id("chassis_npc", "npc_name"); setName(self, name); } setInvulnerable(self, true); faceTo(self, player); return SCRIPT_CONTINUE; } trigger OnIncapacitated (obj_id killer) { clearCondition (self, CONDITION_CONVERSABLE); detachScript (self, "conversation.chassis_npc"); return SCRIPT_CONTINUE; } // ====================================================================== // Script Triggers // ====================================================================== //-- This function should move to base_class.java boolean npcStartConversation(obj_id player, obj_id npc, string convoName, string_id greetingId, prose_package greetingProse, string_id[] responses) { Object[] objects = new Object[responses.length]; System.arraycopy(responses, 0, objects, 0, responses.length); return npcStartConversation(player, npc, convoName, greetingId, greetingProse, objects); } // ---------------------------------------------------------------------- trigger OnStartNpcConversation (obj_id player) { obj_id npc = self; if (ai_lib.isInCombat (npc) || ai_lib.isInCombat (player)) return SCRIPT_OVERRIDE; //-- [NOTE] if (chassis_npc_condition__defaultCondition (player, npc)) { doAnimationAction (npc, "wave1"); //-- NPC: Hello. I can construct a ship chassis for you if you are holding a set of chassis blueprints. string_id message = new string_id (c_stringFile, "s_9ed93871"); int numberOfResponses = 0; boolean hasResponse = false; //-- PLAYER: (SELL COMPONENTS) boolean hasResponse0 = false; if (chassis_npc_condition__defaultCondition (player, npc)) { ++numberOfResponses; hasResponse = true; hasResponse0 = true; } //-- PLAYER: (ASSEMBLE SHIP CHASSIS) boolean hasResponse1 = false; if (chassis_npc_condition__defaultCondition (player, npc)) { ++numberOfResponses; hasResponse = true; hasResponse1 = true; } //-- PLAYER: How do I assemble a ship? boolean hasResponse2 = false; if (chassis_npc_condition__defaultCondition (player, npc)) { ++numberOfResponses; hasResponse = true; hasResponse2 = true; } //-- PLAYER: I'll come back later. boolean hasResponse3 = false; if (chassis_npc_condition__defaultCondition (player, npc)) { ++numberOfResponses; hasResponse = true; hasResponse3 = true; } if (hasResponse) { int responseIndex = 0; string_id responses [] = new string_id [numberOfResponses]; if (hasResponse0) responses [responseIndex++] = new string_id (c_stringFile, "s_94e3013f"); if (hasResponse1) responses [responseIndex++] = new string_id (c_stringFile, "s_2f553ea8"); if (hasResponse2) responses [responseIndex++] = new string_id (c_stringFile, "s_93a92e8"); if (hasResponse3) responses [responseIndex++] = new string_id (c_stringFile, "s_42d3759c"); utils.setScriptVar (player, "conversation.chassis_npc.branchId", 1); npcStartConversation (player, npc, "chassis_npc", message, responses); } else { chat.chat (npc, player, message); } return SCRIPT_CONTINUE; } chat.chat (npc, "Error: All conditions for OnStartNpcConversation were false."); return SCRIPT_CONTINUE; } // ---------------------------------------------------------------------- trigger OnNpcConversationResponse (string conversationId, obj_id player, string_id response) { if (conversationId != "chassis_npc") return SCRIPT_CONTINUE; obj_id npc = self; int branchId = utils.getIntScriptVar (player, "conversation.chassis_npc.branchId"); if (branchId == 1 && chassis_npc_handleBranch1 (player, npc, response) == SCRIPT_CONTINUE) return SCRIPT_CONTINUE; chat.chat (npc, "Error: Fell through all branches and responses for OnNpcConversationResponse."); utils.removeScriptVar (player, "conversation.chassis_npc.branchId"); return SCRIPT_CONTINUE; } // ======================================================================