Files
dsrc/sku.0/sys.server/compiled/game/script/theme_park/quest_npc.script
T
2013-09-10 23:17:15 -07:00

242 lines
6.5 KiB
Plaintext

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;
}