mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-13 22:01:04 -04:00
254 lines
11 KiB
Java
Executable File
254 lines
11 KiB
Java
Executable File
package script.theme_park;
|
|
|
|
import script.library.*;
|
|
import script.location;
|
|
import script.obj_id;
|
|
import script.string_id;
|
|
|
|
public class quest_convo extends script.base_script
|
|
{
|
|
public quest_convo()
|
|
{
|
|
}
|
|
public int OnAttach(obj_id self) throws InterruptedException
|
|
{
|
|
attachScript(self, "npc.converse.npc_converse_menu");
|
|
ai_lib.setDefaultCalmBehavior(self, ai_lib.BEHAVIOR_SENTINEL);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnStartNpcConversation(obj_id self, obj_id speaker) throws InterruptedException
|
|
{
|
|
String datatable = getStringObjVar(self, "quest_table");
|
|
datatable = "datatables/theme_park/" + datatable + ".iff";
|
|
String gatingString = dataTableGetString(datatable, 2, 1);
|
|
int gating = getIntObjVar(speaker, gatingString);
|
|
if (gating == 0)
|
|
{
|
|
setObjVar(speaker, gatingString, 1);
|
|
}
|
|
int minGating = getIntObjVar(self, "minGating");
|
|
int maxGating = getIntObjVar(self, "maxGating");
|
|
int questNum = getQuestNumber(gating, minGating);
|
|
String CONVO = dataTableGetString(datatable, 1, questNum);
|
|
String questID = dataTableGetString(datatable, 3, questNum);
|
|
if (ai_lib.isInCombat(self) || ai_lib.isInCombat(speaker))
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (gating <= minGating)
|
|
{
|
|
CONVO = dataTableGetString(datatable, 1, 1);
|
|
string_id notyet = new string_id(CONVO, "notyet");
|
|
chat.chat(self, notyet);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
else if (gating > maxGating)
|
|
{
|
|
CONVO = dataTableGetString(datatable, 1, 1);
|
|
string_id next = new string_id(CONVO, "next");
|
|
chat.chat(self, next);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
else if (hasObjVar(speaker, questID + ".done"))
|
|
{
|
|
string_id reward = new string_id(CONVO, "npc_reward_" + questNum);
|
|
chat.chat(self, reward);
|
|
giveReward(self, speaker, questNum);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else if (hasScript(speaker, "theme_park.quest_player") || hasScript(speaker, "theme_park.quest_bldg"))
|
|
{
|
|
String npcGreet = "npc_work_" + questNum;
|
|
String response1 = "player_reset";
|
|
String response2 = "player_sorry";
|
|
string_id greeting = new string_id(CONVO, npcGreet);
|
|
string_id response[] = new string_id[2];
|
|
response[0] = new string_id(CONVO, response1);
|
|
response[1] = new string_id(CONVO, response2);
|
|
npcStartConversation(speaker, self, "questConvo", greeting, response);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else
|
|
{
|
|
String npcGreet = "npc_1_" + questNum;
|
|
String response1 = "player_1_" + questNum;
|
|
String response2 = "player_2_" + questNum;
|
|
String response3 = "player_3_" + questNum;
|
|
string_id greeting = new string_id(CONVO, npcGreet);
|
|
string_id response[] = new string_id[3];
|
|
response[0] = new string_id(CONVO, response1);
|
|
response[1] = new string_id(CONVO, response2);
|
|
response[2] = new string_id(CONVO, response3);
|
|
npcStartConversation(speaker, self, "questConvo", greeting, response);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnNpcConversationResponse(obj_id self, String convo, obj_id player, string_id response) throws InterruptedException
|
|
{
|
|
String datatable = getStringObjVar(self, "quest_table");
|
|
datatable = "datatables/theme_park/" + datatable + ".iff";
|
|
String gatingString = dataTableGetString(datatable, 2, 1);
|
|
int gating = getIntObjVar(player, gatingString);
|
|
int minGating = getIntObjVar(self, "minGating");
|
|
int questNum = getQuestNumber(gating, minGating);
|
|
String type = dataTableGetString(datatable, 0, questNum);
|
|
String CONVO = dataTableGetString(datatable, 1, questNum);
|
|
String questID = dataTableGetString(datatable, 3, questNum);
|
|
location home = new location();
|
|
obj_id npcOrBldg = getTopMostContainer(self);
|
|
if (npcOrBldg == self)
|
|
{
|
|
home = getLocation(self);
|
|
}
|
|
else
|
|
{
|
|
home = getLocation(npcOrBldg);
|
|
}
|
|
String response1 = "player_1_" + questNum;
|
|
String response2 = "player_2_" + questNum;
|
|
String response3 = "player_3_" + questNum;
|
|
String response4 = "player_sorry";
|
|
String response5 = "player_reset";
|
|
String playerScript = dataTableGetString(datatable, 6, questNum);
|
|
if ((response.getAsciiId()).equals(response1))
|
|
{
|
|
location target = quests.getThemeParkLocation(self);
|
|
if (target == null)
|
|
{
|
|
String noLoc = "npc_noloc_" + questNum;
|
|
string_id message = new string_id(CONVO, noLoc);
|
|
chat.chat(self, message);
|
|
npcEndConversation(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else
|
|
{
|
|
String npcAnswer1 = "npc_2_" + questNum;
|
|
string_id message = new string_id(CONVO, npcAnswer1);
|
|
npcSpeak(player, message);
|
|
npcEndConversation(player);
|
|
setObjVar(player, questID + ".questLoc", target);
|
|
setObjVar(player, questID + ".questNum", questNum);
|
|
setObjVar(player, "questNum", questNum);
|
|
setObjVar(player, questID + ".home", home);
|
|
setObjVar(player, "quest_table", datatable);
|
|
attachScript(player, playerScript);
|
|
if (type.equals("smuggle"))
|
|
{
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
String cargo = dataTableGetString(datatable, 5, questNum);
|
|
createObject(cargo, playerInv, "");
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((response.getAsciiId()).equals(response2))
|
|
{
|
|
String npcAnswer2 = "npc_3_" + questNum;
|
|
string_id message = new string_id(CONVO, npcAnswer2);
|
|
npcSpeak(player, message);
|
|
npcEndConversation(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((response.getAsciiId()).equals(response3))
|
|
{
|
|
npcAddConversationResponse(player, new string_id(CONVO, response1));
|
|
npcAddConversationResponse(player, new string_id(CONVO, response2));
|
|
npcRemoveConversationResponse(player, new string_id(CONVO, response3));
|
|
String npcAnswer3 = "npc_4_" + questNum;
|
|
string_id message = new string_id(CONVO, npcAnswer3);
|
|
npcSpeak(player, message);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((response.getAsciiId()).equals(response4))
|
|
{
|
|
String npcAnswer2 = "npc_backtowork";
|
|
string_id message = new string_id(CONVO, npcAnswer2);
|
|
npcSpeak(player, message);
|
|
npcEndConversation(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((response.getAsciiId()).equals(response5))
|
|
{
|
|
String npcAnswer2 = "npc_reset";
|
|
string_id message = new string_id(CONVO, npcAnswer2);
|
|
npcSpeak(player, message);
|
|
resetPlayer(self, player, questNum);
|
|
npcEndConversation(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int getQuestNumber(int gating, int minGating) throws InterruptedException
|
|
{
|
|
int questNum = gating - minGating;
|
|
if (questNum == 0)
|
|
{
|
|
questNum = 1;
|
|
}
|
|
return questNum;
|
|
}
|
|
public void giveReward(obj_id self, obj_id player, int questNum) throws InterruptedException
|
|
{
|
|
String datatable = getStringObjVar(self, "quest_table");
|
|
datatable = "datatables/theme_park/" + datatable + ".iff";
|
|
String questID = dataTableGetString(datatable, 3, questNum);
|
|
String gatingString = dataTableGetString(datatable, 2, questNum);
|
|
String playerScript = dataTableGetString(datatable, 6, questNum);
|
|
int gating = getIntObjVar(player, gatingString);
|
|
gating = gating + 1;
|
|
setObjVar(player, gatingString, gating);
|
|
String type = dataTableGetString(datatable, 0, questNum);
|
|
if (type.equals("rescue"))
|
|
{
|
|
obj_id vip = getObjIdObjVar(player, questID + ".vip");
|
|
messageTo(vip, "stopFollowing", null, 0, true);
|
|
}
|
|
obj_id playerInv = utils.getInventoryContainer(player);
|
|
String reward = dataTableGetString(datatable, 4, questNum);
|
|
float factionReward = questNum * 10;
|
|
if (reward.equals("credits"))
|
|
{
|
|
sendSystemMessage(player, "100 credits have been deposited in your bank account.", null);
|
|
money.bankTo(money.ACCT_JABBA, player, 100);
|
|
factions.addFactionStanding(player, "Hutt", factionReward);
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(player, "Your reward has been placed in your backpack.", null);
|
|
createObject(reward, playerInv, "");
|
|
factions.addFactionStanding(player, "Hutt", factionReward);
|
|
}
|
|
removeObjVar(player, questID);
|
|
removeObjVar(player, "quest_table");
|
|
removeObjVar(player, "questNum");
|
|
if (hasScript(player, playerScript))
|
|
{
|
|
detachScript(player, playerScript);
|
|
}
|
|
return;
|
|
}
|
|
public void resetPlayer(obj_id self, obj_id player, int questNum) throws InterruptedException
|
|
{
|
|
String datatable = getStringObjVar(self, "quest_table");
|
|
datatable = "datatables/theme_park/" + datatable + ".iff";
|
|
String questID = dataTableGetString(datatable, 3, questNum);
|
|
String gatingString = dataTableGetString(datatable, 2, questNum);
|
|
String playerScript = dataTableGetString(datatable, 6, questNum);
|
|
String type = dataTableGetString(datatable, 0, questNum);
|
|
if (type.equals("rescue"))
|
|
{
|
|
obj_id vip = getObjIdObjVar(player, questID + ".vip");
|
|
messageTo(vip, "stopFollowing", null, 0, true);
|
|
}
|
|
removeObjVar(player, questID);
|
|
removeObjVar(player, "quest_table");
|
|
removeObjVar(player, "questNum");
|
|
if (hasScript(player, playerScript))
|
|
{
|
|
detachScript(player, playerScript);
|
|
}
|
|
return;
|
|
}
|
|
}
|