include library.quests; include library.ai_lib; include library.chat; include library.utils; include ai.ai_combat; include library.money; include library.create; trigger OnAttach() { messageTo (self, "setupSelf", null, 4, true); return SCRIPT_CONTINUE; } trigger OnStartNpcConversation (obj_id speaker) { string datatable = getStringObjVar (self, "quest_table"); int questNum = getIntObjVar (self, "questNum"); string CONVO = dataTableGetString (datatable, 1, questNum); string questID = dataTableGetString (datatable, 3, questNum); string type = dataTableGetString (datatable, 0, questNum); if (ai_lib.isInCombat(self) || ai_lib.isInCombat(speaker)) return SCRIPT_OVERRIDE; if (hasObjVar (speaker, questID + ".vip")) { obj_id courier = getObjIdObjVar (speaker, questID + ".vip"); if (courier == self) { if (type == "rescue") { string reward = "npc_takeme_" + questNum; string_id message = new string_id (CONVO, reward); chat.chat (self, message); dictionary parms = new dictionary(); parms.put ("player", speaker); messageTo (self, "followPlayer", parms, 0, true); messageTo (speaker, "finishQuest", null, 0, true); messageTo (self, "spawnExtras", null, 0, true); return SCRIPT_OVERRIDE; } else if (type == "smuggle") { obj_id playerInv = utils.getInventoryContainer(speaker); if (checkForItem(playerInv, speaker, questNum) == true) { string reward = "npc_smuggle_" + questNum; string_id message = new string_id (CONVO, reward); chat.chat (self, message); dictionary parms = new dictionary(); parms.put ("player", speaker); messageTo (self, "giveReward", parms, 0, true); return SCRIPT_OVERRIDE; } else { string_id work = new string_id(CONVO, "gotowork"); chat.chat (self, work); return SCRIPT_CONTINUE; } } return SCRIPT_CONTINUE; } else { string_id work = new string_id(CONVO, "otherescort"); chat.chat (self, work); return SCRIPT_CONTINUE; } } else { string_id blah = new string_id (CONVO, "dontknowyou"); chat.chat (self, blah); return SCRIPT_CONTINUE; } } trigger OnIncapacitated (obj_id killer) { string datatable = getStringObjVar (self, "quest_table"); obj_id player = getObjIdObjVar (self, "player"); int questNum = getIntObjVar (self, "questNum"); string type = dataTableGetString (datatable, 0, questNum); if (type == "destroy") { messageTo (player, "finishQuest", null, 0, true); return SCRIPT_CONTINUE; } else if (type == "fetch") { string reward = dataTableGetString (datatable, 4, questNum); obj_id playerInv = utils.getInventoryContainer(player); createObject (reward, playerInv, ""); messageTo (player, "finishQuest", null, 0, true); return SCRIPT_CONTINUE; } return SCRIPT_CONTINUE; } messageHandler followPlayer() { obj_id player = params.getObjId ("player"); ai_lib.aiFollow(self, player); return SCRIPT_CONTINUE; } messageHandler stopFollowing() { string datatable = getStringObjVar (self, "quest_table"); datatable = "datatables/theme_park/" + datatable + ".iff"; int questNum = getIntObjVar (self, "questNum"); string questID = dataTableGetString (datatable, 3, questNum); string playerScript = dataTableGetString (datatable, 6, questNum); debugSpeakMsg (self, "Thanks for bringing me back."); obj_id player = params.getObjId ("player"); ai_lib.aiStopFollowing (self); detachScript (player, playerScript); setObjVar (player, questID + ".done", 1); messageTo (self, "cleanUp", null, 60, true); return SCRIPT_CONTINUE; } messageHandler setupSelf () { string datatable = getStringObjVar (self, "quest_table"); if (datatable == null) { setObjVar (self, "NO SCRIPT", 1); return SCRIPT_OVERRIDE; } int questNum = getIntObjVar (self, "questNum"); string type = dataTableGetString (datatable, 0, questNum); ai_lib.setDefaultCalmBehavior( self, ai_lib.BEHAVIOR_SENTINEL ); if (type == "rescue" || type == "smuggle") { attachScript (self, "npc.converse.npc_converse_menu"); } return SCRIPT_CONTINUE; } messageHandler saySomething() { string datatable = getStringObjVar (self, "quest_table"); obj_id player = getObjIdObjVar (self, "player"); int questNum = getIntObjVar (self, "questNum"); string type = dataTableGetString (datatable, 0, questNum); string CONVO = dataTableGetString (datatable, 1, questNum); string something = "npc_breech_" + questNum; string_id message = new string_id (CONVO, something); chat.chat (self, message); if (type == "destroy" || type == "fetch") { startCombat(self, player); } return SCRIPT_CONTINUE; } messageHandler giveReward() { obj_id player = params.getObjId ("player"); string datatable = getStringObjVar (player, "quest_table"); int questNum = getIntObjVar (self, "quest"); string playerScript = dataTableGetString (datatable, 6, questNum); string questID = dataTableGetString (datatable, 3, questNum); string reward = dataTableGetString (datatable, 4, questNum); if (reward == "credits") { money.bankTo(money.ACCT_JABBA, player, 100); } else { obj_id playerInv = utils.getInventoryContainer(player); createObject (reward, playerInv, ""); } setObjVar (player, questID + ".done", 1); messageTo (player, "finishQuest", null, 0, true); detachScript (player, playerScript); return SCRIPT_CONTINUE; } boolean checkForItem (obj_id inv, obj_id player, int questNum) { string datatable = getStringObjVar (player, "quest_table"); string giveMe = dataTableGetString (datatable, 5, questNum); boolean hadIt = false; obj_id[] contents = getContents(inv); for ( int i = 0; i < contents.length; i++ ) { string itemInInventory = getTemplateName (contents[i]); if (itemInInventory == giveMe) { destroyObject (contents[i]); hadIt = true; } } return hadIt; } messageHandler spawnExtras() { string datatable = getStringObjVar (self, "quest_table"); int questNum = getIntObjVar (self, "quest"); location here = getLocation (self); obj_id player = getObjIdObjVar (self, "player"); string columnName = dataTableGetColumnName (datatable, questNum); string[] rows = dataTableGetStringColumnNoDefaults (datatable, columnName); int numRows = rows.length; if (numRows > 9) { int x = 10; while (x <= numRows) { string spawn = dataTableGetString (datatable, x, questNum); int around = rand (5, 20); here.x = here.x + around; here.z = here.z + around; obj_id enemy = create.object (spawn, here); startCombat(enemy, player); x = x + 1; } } return SCRIPT_CONTINUE; } messageHandler cleanUp() { destroyObject (self); return SCRIPT_CONTINUE; }