mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-13 22:01:04 -04:00
* Code compiles - execution NOT tested * updating gitignore * Removed intellij settings files * Removed more intellij files * Added exclusion for JDK classes. * Fixed purchasing script for vendors that have listed coin types. * Updated script to not kick off until the entire preload is complete. * adds static name entry for Solo movie poster and tcg9 vendor entry * clean up empty and orphaned object templates * adds placeholder black market (static) spawns * corrects entries for the video game table to correctly set it in tcg series 2 and remove series 1 console errors * Updated gitignore and removed intellij project files * Fixed appearance reference for thranta payroll and kashyyyk door, added skipLosCheck objvar due to cannit see issue. Requires updated src * Fixed appearance and template for terminal (#2) * Fixed appearance and template for terminal (#3) * Fixed appearance and template for terminal (#4) * Deleted another faulty/orphaned object template * Fixed gcw ranks option on frog. Only issue is that it doesn't award the officer commands or badges. * Fixed some unneeded java 11 changes
740 lines
35 KiB
Java
Executable File
740 lines
35 KiB
Java
Executable File
package script.library;
|
|
|
|
import script.dictionary;
|
|
import script.obj_id;
|
|
import script.prose_package;
|
|
import script.string_id;
|
|
|
|
import java.util.Vector;
|
|
|
|
public class veteran_deprecated extends script.base_script
|
|
{
|
|
public veteran_deprecated()
|
|
{
|
|
}
|
|
public static final int UNENTITLED_TIME_LIMIT = 14;
|
|
public static final int MONTHS_PER_MILESTONE = 3;
|
|
public static final int DAYS_PER_MONTH = 30;
|
|
public static final int DAYS_PER_MILESTONE = MONTHS_PER_MILESTONE * DAYS_PER_MONTH;
|
|
public static final int REWARD_FLAGS_SIZE = ((12 / MONTHS_PER_MILESTONE) * 10) / 32 + 1;
|
|
public static final int MAX_MILESTONE = REWARD_FLAGS_SIZE * 32;
|
|
public static final String VETERAN_STRING_TABLE = "veteran";
|
|
public static final String REWARDS_DATATABLE = "datatables/veteran/rewards.iff";
|
|
public static final String REWARDS_COLUMN_TEMPLATE = "template";
|
|
public static final String REWARDS_COLUMN_SCRIPT = "script";
|
|
public static final String REWARDS_COLUMN_MILESTONE = "milestone";
|
|
public static final String REWARDS_COLUMN_ONETIME = "oneTime";
|
|
public static final String REWARDS_COLUMN_NOTRADE = "noTrade";
|
|
public static final String REWARDS_COLUMN_NODELETE = "noDelete";
|
|
public static final String REWARDS_COLUMN_NOMOVE = "noMove";
|
|
public static final String REWARDS_COLUMN_REQUIREDGAMEFEATUREBITANY = "requiredGameFeatureBitAny";
|
|
public static final String REWARDS_COLUMN_REQUIREDGAMEFEATUREBITALL = "requiredGameFeatureBitAll";
|
|
public static final String REWARDS_COLUMN_REQUIREDSUBSCRIPTIONFEATUREBITANY = "requiredSubscriptionFeatureBitAny";
|
|
public static final String REWARDS_COLUMN_REQUIREDSUBSCRIPTIONFEATUREBITALL = "requiredSubscriptionFeatureBitAll";
|
|
public static final String EMOTES_DATATABLE = "datatables/veteran/emotes.iff";
|
|
public static final String EMOTES_COLUMN_EMOTE = "emote";
|
|
public static final String EMOTES_COLUMN_GROUP = "group";
|
|
public static final String HANDLER_SELECT_VETERAN_REWARD = "handleVeteranRewardSelected";
|
|
public static final String HANDLER_SELECT_VETERAN_MILESTONE = "handleVeteranMilestoneSelected";
|
|
public static final String HANDLER_SELECT_VETERAN_REWARD_CONFIRM = "handleVeteranRewardConfirmed";
|
|
public static final String OBJVAR_TIME_ACTIVE = "veteran.timeActive";
|
|
public static final String OBJVAR_REWARDS_RECEIVED = "veteran.rewardsReceived";
|
|
public static final String OBJVAR_MILESTONES_NOTIFIED = "veteran.milestonesNotified";
|
|
public static final String OBJVAR_ONETIME_REWARDS_RECEIVED = "veteran.onetime";
|
|
public static final String OBJVAR_VETERAN_EMOTES = "veteran.emotes";
|
|
public static final String OBJVAR_ONE_YEAR_ANNIVERSARY = "anniversary.oneYear";
|
|
public static final String OBJVAR_ONE_YEAR_ANNIVERSARY_OVERRIDE = "anniversary.override";
|
|
public static final String TEMPLATE_ONE_YEAR_ANNIVERSARY = "object/tangible/veteran_reward/one_year_anniversary/painting_";
|
|
public static final string_id SID_ONE_YEAR_ANNIVERSARY = new string_id(VETERAN_STRING_TABLE, "one_year_anniversary");
|
|
public static final string_id SID_ONE_YEAR_ANNIVERSARY_SUBJECT = new string_id(VETERAN_STRING_TABLE, "one_year_anniversary_subject");
|
|
public static final string_id SID_ONE_YEAR_ANNIVERSARY_FROM = new string_id(VETERAN_STRING_TABLE, "one_year_anniversary_from");
|
|
public static final string_id SID_ONE_YEAR_ANNIVERSARY_INVENTORY_FULL = new string_id(VETERAN_STRING_TABLE, "one_year_inventory_full");
|
|
public static final string_id SID_ONE_YEAR_ANNIVERSARY_INVENTORY_FULL_SUBJECT = new string_id(VETERAN_STRING_TABLE, "one_year_inventory_full_subject");
|
|
public static final int ONE_YEAR_ANNIVERSARY_REWARD_COUNT = 9;
|
|
public static final int MIN_ONE_YEAR_ANNIVERSARY_TIME = 30;
|
|
public static final int FLASH_SPEEDER_COST = 20000;
|
|
public static final int CAN_GET_REWARD_SUCCESS = 0;
|
|
public static final int CAN_GET_REWARD_FAIL_INADEQUATE_MILESTONE = 1;
|
|
public static final int CAN_GET_REWARD_FAIL_ALREADY_CLAIMED = 2;
|
|
public static final int CAN_GET_REWARD_FAIL_INADEQUATE_SUBSCRIPTION = 3;
|
|
public static final int GIVE_PLAYER_REWARD_SUCCESS = 0;
|
|
public static final int GIVE_PLAYER_REWARD_FAILED = 1;
|
|
public static final int GIVE_PLAYER_REWARD_MORE_PROCESSING_REQUIRED = 2;
|
|
public static final String OBJVAR_FAKE_VETERAN = "_testVeteran";
|
|
public static final String OBJVAR_FAKE_VETERAN_TOTAL_TIME = OBJVAR_FAKE_VETERAN + ".total_time";
|
|
public static final String OBJVAR_FAKE_VETERAN_ENTITLED_TIME = OBJVAR_FAKE_VETERAN + ".entitled_time";
|
|
public static final String OBJVAR_FAKE_VETERAN_LOGIN_TIME = OBJVAR_FAKE_VETERAN + ".login_time";
|
|
public static final String OBJVAR_FAKE_VETERAN_ENTITLED_LOGIN_TIME = OBJVAR_FAKE_VETERAN + ".entitled_login_time";
|
|
public static final String SCRIPTVAR_VETERAN_LOGGED_IN = "veteran.loggedIn";
|
|
public static final String SCRIPTVAR_SELECTED_REWARD = "veteran.selectedReward";
|
|
public static final String SCRIPTVAR_SELECTED_MILESTONE = "veteran.selectedMilestone";
|
|
public static final String SCRIPTVAR_AVAILABLE_MILESTONES = "veteran.milestones";
|
|
public static final string_id SID_VETERAN_NEW_REWARD = new string_id(VETERAN_STRING_TABLE, "new_reward");
|
|
public static final string_id SID_VETERAN_NEW_REWARD_SUBJECT = new string_id(VETERAN_STRING_TABLE, "new_reward_subject");
|
|
public static final string_id SID_VETERAN_NEW_REWARD_FROM = new string_id(VETERAN_STRING_TABLE, "new_reward_from");
|
|
public static final string_id SID_VETERAN_NEW_REWARD_MSGBOX = new string_id(VETERAN_STRING_TABLE, "new_reward_msgbox");
|
|
public static final string_id SID_VETERAN_SELECT_MILESTONE_PROMPT = new string_id(VETERAN_STRING_TABLE, "select_milestone");
|
|
public static final string_id SID_VETERAN_SELECT_REWARD_PROMPT = new string_id(VETERAN_STRING_TABLE, "select_reward");
|
|
public static final string_id SID_VETERAN_SELECT_REWARD_CONFIRM = new string_id(VETERAN_STRING_TABLE, "select_reward_confirm");
|
|
public static final string_id SID_VETERAN_TIME_ACTIVE = new string_id(VETERAN_STRING_TABLE, "time_active");
|
|
public static final string_id SID_VETERAN_SELF_TIME_ACTIVE = new string_id(VETERAN_STRING_TABLE, "self_time_active");
|
|
public static final string_id SID_NOT_ELIGIBLE = new string_id(VETERAN_STRING_TABLE, "not_eligible");
|
|
public static final string_id SID_REWARD_GIVEN = new string_id(VETERAN_STRING_TABLE, "reward_given");
|
|
public static final string_id SID_REWARD_ERROR = new string_id(VETERAN_STRING_TABLE, "reward_error");
|
|
public static final string_id SID_SYSTEM_INACTIVE = new string_id(VETERAN_STRING_TABLE, "system_inactive");
|
|
public static final string_id SID_INVALID_TARGET = new string_id(VETERAN_STRING_TABLE, "invalid_target");
|
|
public static final string_id SID_MILESTONE_OUT_OF_RANGE = new string_id(VETERAN_STRING_TABLE, "milestone_out_of_range");
|
|
public static final string_id SID_HAS_MILESTONE = new string_id(VETERAN_STRING_TABLE, "has_milestone");
|
|
public static final string_id SID_HAS_NOT_MILESTONE = new string_id(VETERAN_STRING_TABLE, "has_not_milestone");
|
|
public static final string_id SID_OK = new string_id(VETERAN_STRING_TABLE, "ok");
|
|
public static final string_id SID_ACTIVE_MONTHS_CLEARED = new string_id(VETERAN_STRING_TABLE, "active_months_cleared");
|
|
public static final string_id SID_BAD_MILESTONE = new string_id(VETERAN_STRING_TABLE, "bad_milestone");
|
|
public static final string_id SID_BAD_REWARD = new string_id(VETERAN_STRING_TABLE, "bad_reward");
|
|
public static final string_id SID_DAYS = new string_id(VETERAN_STRING_TABLE, "days");
|
|
public static final string_id SID_RANK = new string_id(VETERAN_STRING_TABLE, "rank");
|
|
public static final string_id SID_UNAVAILABLE = new string_id(VETERAN_STRING_TABLE, "unavailable");
|
|
public static final string_id SID_UNAVAILABLE_CLAIMED = new string_id(VETERAN_STRING_TABLE, "unavailable_claimed");
|
|
public static final string_id SID_UNAVAILABLE_NEEDS_EXPANSION = new string_id(VETERAN_STRING_TABLE, "unavailable_needs_expansion");
|
|
public static final string_id SID_UNAVAILABLE_NOT_ENOUGH_MILESTONE = new string_id(VETERAN_STRING_TABLE, "unavailable_not_enough_milestone");
|
|
public static final string_id SID_UNKNOWN = new string_id(VETERAN_STRING_TABLE, "unknown");
|
|
public static void updateVeteranTime(obj_id player) throws InterruptedException
|
|
{
|
|
if (!isIdValid(player))
|
|
{
|
|
return;
|
|
}
|
|
if (!("true").equals(getConfigSetting("GameServer", "enableVeteranRewards")))
|
|
{
|
|
return;
|
|
}
|
|
if ((player.getScriptVars()).hasKey(SCRIPTVAR_VETERAN_LOGGED_IN))
|
|
{
|
|
return;
|
|
}
|
|
(player.getScriptVars()).put(SCRIPTVAR_VETERAN_LOGGED_IN, true);
|
|
dictionary timeData = getAccountTimeData(player);
|
|
if (timeData == null)
|
|
{
|
|
return;
|
|
}
|
|
int totalEntitledTime = timeData.getInt("total_entitled_time");
|
|
if (!hasObjVar(player, OBJVAR_TIME_ACTIVE))
|
|
{
|
|
setObjVar(player, OBJVAR_TIME_ACTIVE, totalEntitledTime);
|
|
setObjVar(player, OBJVAR_REWARDS_RECEIVED, new int[REWARD_FLAGS_SIZE]);
|
|
setObjVar(player, OBJVAR_MILESTONES_NOTIFIED, new int[REWARD_FLAGS_SIZE]);
|
|
}
|
|
else
|
|
{
|
|
setObjVar(player, OBJVAR_TIME_ACTIVE, totalEntitledTime);
|
|
}
|
|
}
|
|
public static boolean canGetReward(obj_id player) throws InterruptedException
|
|
{
|
|
int[] milestones = getVeteranRewardMilestones(player);
|
|
return ((milestones != null) && (milestones.length >= 1));
|
|
}
|
|
public static boolean requestVeteranRewards(obj_id player) throws InterruptedException
|
|
{
|
|
if (!isIdValid(player))
|
|
{
|
|
return false;
|
|
}
|
|
int[] milestones = getVeteranRewardMilestones(player);
|
|
if ((milestones == null) || (milestones.length < 1))
|
|
{
|
|
return false;
|
|
}
|
|
int veteranTime = getIntObjVar(player, OBJVAR_TIME_ACTIVE);
|
|
if (veteranTime <= 0)
|
|
{
|
|
CustomerServiceLog("veteran", "requestVeteranRewards called for player %TU with no active time", player);
|
|
return false;
|
|
}
|
|
int firstMilestone = veteranTime / DAYS_PER_MILESTONE;
|
|
if (firstMilestone < 1)
|
|
{
|
|
return false;
|
|
}
|
|
if (firstMilestone > MAX_MILESTONE)
|
|
{
|
|
CustomerServiceLog("veteran", "requestVeteranRewards called for player %TU who has a milestone " + firstMilestone + " which is greater than the maximum supported milestone " + MAX_MILESTONE, player);
|
|
firstMilestone = MAX_MILESTONE;
|
|
}
|
|
String daysText = getString(SID_DAYS);
|
|
String alreadyClaimedText = getString(SID_UNAVAILABLE_CLAIMED);
|
|
Vector milestonesText = new Vector();
|
|
for (int i = 0; i < firstMilestone; ++i)
|
|
{
|
|
if (i == 1)
|
|
{
|
|
if (checkVeteranMilestone(player, (i + 1)))
|
|
{
|
|
milestonesText.add(((i + 1) * DAYS_PER_MILESTONE) + daysText + " (" + alreadyClaimedText + ")");
|
|
}
|
|
else
|
|
{
|
|
milestonesText.add(((i + 1) * DAYS_PER_MILESTONE) + daysText);
|
|
}
|
|
}
|
|
}
|
|
int pid = sui.listbox(player, player, "@" + SID_VETERAN_SELECT_MILESTONE_PROMPT, sui.OK_CANCEL, sui.DEFAULT_TITLE, milestonesText, HANDLER_SELECT_VETERAN_MILESTONE, true);
|
|
if (pid < 0)
|
|
{
|
|
CustomerServiceLog("veteran", "Could not create sui reward list for player %TU, error = " + pid, player);
|
|
return false;
|
|
}
|
|
(player.getScriptVars()).put(SCRIPTVAR_AVAILABLE_MILESTONES, milestones);
|
|
return true;
|
|
}
|
|
public static boolean requestVeteranRewards(obj_id player, int milestone) throws InterruptedException
|
|
{
|
|
if (!isIdValid(player))
|
|
{
|
|
return false;
|
|
}
|
|
String daysText = getString(SID_DAYS);
|
|
String rankText = getString(SID_RANK);
|
|
String unavailableText = getString(SID_UNAVAILABLE);
|
|
String alreadyClaimedText = getString(SID_UNAVAILABLE_CLAIMED);
|
|
String needsExpansionText = getString(SID_UNAVAILABLE_NEEDS_EXPANSION);
|
|
String notEnoughMilestoneText = getString(SID_UNAVAILABLE_NOT_ENOUGH_MILESTONE);
|
|
String unknownText = getString(SID_UNKNOWN);
|
|
Vector availableRewards = new Vector();
|
|
int numRows = dataTableGetNumRows(REWARDS_DATATABLE);
|
|
for (int i = 0; i < numRows; ++i)
|
|
{
|
|
String name = getRewardNameAtIndex(i);
|
|
if (name != null)
|
|
{
|
|
boolean oneShot = dataTableGetInt(REWARDS_DATATABLE, i, REWARDS_COLUMN_ONETIME) != 0;
|
|
if (oneShot)
|
|
{
|
|
name += " *";
|
|
}
|
|
boolean noTrade = dataTableGetInt(REWARDS_DATATABLE, i, REWARDS_COLUMN_NOTRADE) != 0;
|
|
if (noTrade)
|
|
{
|
|
if (oneShot)
|
|
{
|
|
name += "#";
|
|
}
|
|
else
|
|
{
|
|
name += " #";
|
|
}
|
|
}
|
|
int rewardMilestone = dataTableGetInt(REWARDS_DATATABLE, i, REWARDS_COLUMN_MILESTONE);
|
|
name += " (";
|
|
name += Integer.toString(rewardMilestone * DAYS_PER_MILESTONE);
|
|
name += daysText;
|
|
name += ", ";
|
|
name += rankText;
|
|
name += Integer.toString(rewardMilestone);
|
|
name += ")";
|
|
int canGetRewardStatus = canGetRewardAtIndex(player, i, milestone);
|
|
if (canGetRewardStatus != CAN_GET_REWARD_SUCCESS)
|
|
{
|
|
if (canGetRewardStatus == CAN_GET_REWARD_FAIL_INADEQUATE_MILESTONE)
|
|
{
|
|
name = name + " (" + notEnoughMilestoneText + ")";
|
|
}
|
|
else if (canGetRewardStatus == CAN_GET_REWARD_FAIL_ALREADY_CLAIMED)
|
|
{
|
|
name = name + " (" + alreadyClaimedText + ")";
|
|
}
|
|
else if (canGetRewardStatus == CAN_GET_REWARD_FAIL_INADEQUATE_SUBSCRIPTION)
|
|
{
|
|
name = name + " (" + needsExpansionText + ")";
|
|
}
|
|
else
|
|
{
|
|
name = name + " (" + unavailableText + ")";
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
availableRewards.add(unknownText);
|
|
}
|
|
availableRewards.add(name);
|
|
}
|
|
int pid = sui.listbox(player, player, "@" + SID_VETERAN_SELECT_REWARD_PROMPT, sui.OK_CANCEL, sui.DEFAULT_TITLE, availableRewards, HANDLER_SELECT_VETERAN_REWARD, true);
|
|
if (pid < 0)
|
|
{
|
|
CustomerServiceLog("veteran", "Could not create sui reward list for player %TU, error = " + pid, player);
|
|
return false;
|
|
}
|
|
(player.getScriptVars()).put(SCRIPTVAR_SELECTED_MILESTONE, milestone);
|
|
return true;
|
|
}
|
|
public static int[] getVeteranRewardMilestones(obj_id player) throws InterruptedException
|
|
{
|
|
int veteranTime = getIntObjVar(player, OBJVAR_TIME_ACTIVE);
|
|
if (veteranTime <= 0)
|
|
{
|
|
CustomerServiceLog("veteran", "getVeteranRewardMilestones called for player %TU with no active time", player);
|
|
return null;
|
|
}
|
|
int firstMilestone = veteranTime / DAYS_PER_MILESTONE;
|
|
if (firstMilestone < 1)
|
|
{
|
|
return null;
|
|
}
|
|
if (firstMilestone > MAX_MILESTONE)
|
|
{
|
|
CustomerServiceLog("veteran", "getVeteranRewardMilestones called for player %TU who has a milestone " + firstMilestone + " which is greater than the maximum supported milestone " + MAX_MILESTONE, player);
|
|
firstMilestone = MAX_MILESTONE;
|
|
}
|
|
int[] veteranRewards = getIntArrayObjVar(player, OBJVAR_REWARDS_RECEIVED);
|
|
if (veteranRewards == null)
|
|
{
|
|
CustomerServiceLog("veteran", "getVeteranRewardMilestones called for player %TU with no rewards flags", player);
|
|
veteranRewards = new int[REWARD_FLAGS_SIZE];
|
|
setObjVar(player, OBJVAR_REWARDS_RECEIVED, veteranRewards);
|
|
}
|
|
Vector milestoneVector = new Vector();
|
|
for (int i = 0; i < firstMilestone; ++i)
|
|
{
|
|
int index = i / 32;
|
|
int mask = 0x00000001 << (i - index * 32);
|
|
if ((veteranRewards[index] & mask) == 0)
|
|
{
|
|
milestoneVector.add(i + 1);
|
|
}
|
|
}
|
|
if (milestoneVector.size() < 1)
|
|
{
|
|
return null;
|
|
}
|
|
int[] milestoneArray = new int[milestoneVector.size()];
|
|
for (int i = 0; i < milestoneArray.length; ++i)
|
|
{
|
|
milestoneArray[i] = (Integer) (milestoneVector.elementAt(i));
|
|
}
|
|
return milestoneArray;
|
|
}
|
|
public static int givePlayerReward(obj_id player, int rewardIndex, boolean checkMilestoneMismatch) throws InterruptedException
|
|
{
|
|
if (!isIdValid(player))
|
|
{
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
if (!(player.getScriptVars()).hasKey(SCRIPTVAR_SELECTED_MILESTONE))
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward could not find SCRIPTVAR_SELECTED_MILESTONE for player %TU with reward index " + rewardIndex, player);
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
int milestone = (player.getScriptVars()).getInt(SCRIPTVAR_SELECTED_MILESTONE);
|
|
if (milestone < 1)
|
|
{
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
if (rewardIndex >= dataTableGetNumRows(REWARDS_DATATABLE))
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward could not find reward for player %TU with reward index " + rewardIndex + " for milestone " + milestone, player);
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
int veteranTime = getIntObjVar(player, OBJVAR_TIME_ACTIVE);
|
|
if (veteranTime <= 0)
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward called for player %TU with no active time", player);
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
int firstMilestone = veteranTime / DAYS_PER_MILESTONE;
|
|
if (firstMilestone > MAX_MILESTONE)
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward called for player %TU who has a milestone " + firstMilestone + " which is greater than the maximum supported milestone " + MAX_MILESTONE, player);
|
|
firstMilestone = MAX_MILESTONE;
|
|
}
|
|
if (milestone > firstMilestone)
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward called for player %TU with requested milestone " + milestone + " which is greater than the actual milestone " + firstMilestone, player);
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
if (checkVeteranMilestone(player, milestone))
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward called for player %TU who has already claimed the reward for milestone " + milestone, player);
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
int canGetRewardStatus = canGetRewardAtIndex(player, rewardIndex, milestone);
|
|
if (canGetRewardStatus != CAN_GET_REWARD_SUCCESS)
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward could not grant reward for player %TU with reward index " + rewardIndex + " for milestone " + milestone + ", error code " + canGetRewardStatus, player);
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
if (checkMilestoneMismatch)
|
|
{
|
|
int rewardMilestone = dataTableGetInt(REWARDS_DATATABLE, rewardIndex, REWARDS_COLUMN_MILESTONE);
|
|
if (rewardMilestone != milestone)
|
|
{
|
|
int pid = sui.msgbox(player, player, "@" + SID_VETERAN_SELECT_REWARD_CONFIRM, sui.YES_NO, HANDLER_SELECT_VETERAN_REWARD_CONFIRM);
|
|
if (pid < 0)
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward could not create sui reward confirmation message box for player %TU, error = " + pid, player);
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
(player.getScriptVars()).put(SCRIPTVAR_SELECTED_REWARD, rewardIndex);
|
|
return GIVE_PLAYER_REWARD_MORE_PROCESSING_REQUIRED;
|
|
}
|
|
}
|
|
int templateCrc = dataTableGetInt(REWARDS_DATATABLE, rewardIndex, REWARDS_COLUMN_TEMPLATE);
|
|
obj_id reward = createObjectInInventoryAllowOverload(templateCrc, player);
|
|
if (!isIdValid(reward))
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward could not create reward for reward index " + rewardIndex + ", template crc " + templateCrc + " for player %TU", player);
|
|
return GIVE_PLAYER_REWARD_FAILED;
|
|
}
|
|
CustomerServiceLog("veteran", "givePlayerReward has given player %TU item " + getName(reward) + " (" + reward + ") for milestone " + milestone, player);
|
|
boolean noTrade = dataTableGetInt(REWARDS_DATATABLE, rewardIndex, REWARDS_COLUMN_NOTRADE) != 0;
|
|
if (noTrade)
|
|
{
|
|
setObjVar(reward, "noTrade", true);
|
|
}
|
|
boolean noDelete = dataTableGetInt(REWARDS_DATATABLE, rewardIndex, REWARDS_COLUMN_NODELETE) != 0;
|
|
if (noDelete)
|
|
{
|
|
attachScript(reward, "item.special.nodestroy");
|
|
}
|
|
boolean noMove = dataTableGetInt(REWARDS_DATATABLE, rewardIndex, REWARDS_COLUMN_NOMOVE) != 0;
|
|
if (noMove)
|
|
{
|
|
attachScript(reward, "item.special.nomove");
|
|
}
|
|
if (!hasObjVar(player, OBJVAR_REWARDS_RECEIVED))
|
|
{
|
|
CustomerServiceLog("veteran", "givePlayerReward called for player %TU with no rewards flags", player);
|
|
}
|
|
setVeteranMilestone(player, milestone);
|
|
boolean oneShot = dataTableGetInt(REWARDS_DATATABLE, rewardIndex, REWARDS_COLUMN_ONETIME) != 0;
|
|
if (oneShot)
|
|
{
|
|
int[] onetimes = getIntArrayObjVar(player, OBJVAR_ONETIME_REWARDS_RECEIVED);
|
|
int[] onetimesNew;
|
|
if (onetimes != null)
|
|
{
|
|
onetimesNew = new int[onetimes.length + 1];
|
|
for (int i = 0; i < onetimes.length; ++i)
|
|
{
|
|
onetimesNew[i] = onetimes[i];
|
|
}
|
|
onetimesNew[onetimes.length] = templateCrc;
|
|
}
|
|
else
|
|
{
|
|
onetimesNew = new int[1];
|
|
onetimesNew[0] = templateCrc;
|
|
}
|
|
setObjVar(player, OBJVAR_ONETIME_REWARDS_RECEIVED, onetimesNew);
|
|
}
|
|
String script = dataTableGetString(REWARDS_DATATABLE, rewardIndex, REWARDS_COLUMN_SCRIPT);
|
|
if (script != null && script.length() > 0)
|
|
{
|
|
attachScript(reward, script);
|
|
}
|
|
cleanupPlayerData(player);
|
|
return GIVE_PLAYER_REWARD_SUCCESS;
|
|
}
|
|
public static void cleanupPlayerData(obj_id player) throws InterruptedException
|
|
{
|
|
if (!isIdValid(player))
|
|
{
|
|
return;
|
|
}
|
|
(player.getScriptVars()).remove(SCRIPTVAR_SELECTED_REWARD);
|
|
(player.getScriptVars()).remove(SCRIPTVAR_SELECTED_MILESTONE);
|
|
(player.getScriptVars()).remove(SCRIPTVAR_AVAILABLE_MILESTONES);
|
|
}
|
|
public static String getRewardNameAtIndex(int index) throws InterruptedException
|
|
{
|
|
String name = null;
|
|
int templateCrc = dataTableGetInt(REWARDS_DATATABLE, index, REWARDS_COLUMN_TEMPLATE);
|
|
string_id nameId = getNameFromTemplate(templateCrc);
|
|
if (nameId != null)
|
|
{
|
|
name = "@" + nameId;
|
|
}
|
|
else
|
|
{
|
|
CustomerServiceLog("veteran", "Could not find reward at index " + index);
|
|
}
|
|
return name;
|
|
}
|
|
public static int canGetRewardAtIndex(obj_id player, int index, int milestone) throws InterruptedException
|
|
{
|
|
int templateCrc = dataTableGetInt(REWARDS_DATATABLE, index, REWARDS_COLUMN_TEMPLATE);
|
|
boolean oneShot = dataTableGetInt(REWARDS_DATATABLE, index, REWARDS_COLUMN_ONETIME) != 0;
|
|
if (oneShot)
|
|
{
|
|
int[] onetimes = getIntArrayObjVar(player, OBJVAR_ONETIME_REWARDS_RECEIVED);
|
|
if (onetimes != null)
|
|
{
|
|
for (int onetime : onetimes) {
|
|
if (onetime == templateCrc) {
|
|
return CAN_GET_REWARD_FAIL_ALREADY_CLAIMED;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int requiredBit = dataTableGetInt(REWARDS_DATATABLE, index, REWARDS_COLUMN_REQUIREDGAMEFEATUREBITANY);
|
|
if (requiredBit > 0)
|
|
{
|
|
int game_bits = getGameFeatureBits(player);
|
|
if ((game_bits & requiredBit) == 0)
|
|
{
|
|
return CAN_GET_REWARD_FAIL_INADEQUATE_SUBSCRIPTION;
|
|
}
|
|
}
|
|
requiredBit = dataTableGetInt(REWARDS_DATATABLE, index, REWARDS_COLUMN_REQUIREDGAMEFEATUREBITALL);
|
|
if (requiredBit > 0)
|
|
{
|
|
int game_bits = getGameFeatureBits(player);
|
|
if ((game_bits & requiredBit) != requiredBit)
|
|
{
|
|
return CAN_GET_REWARD_FAIL_INADEQUATE_SUBSCRIPTION;
|
|
}
|
|
}
|
|
requiredBit = dataTableGetInt(REWARDS_DATATABLE, index, REWARDS_COLUMN_REQUIREDSUBSCRIPTIONFEATUREBITANY);
|
|
if (requiredBit > 0)
|
|
{
|
|
int sub_bits = getSubscriptionFeatureBits(player);
|
|
if ((sub_bits & requiredBit) == 0)
|
|
{
|
|
return CAN_GET_REWARD_FAIL_INADEQUATE_SUBSCRIPTION;
|
|
}
|
|
}
|
|
requiredBit = dataTableGetInt(REWARDS_DATATABLE, index, REWARDS_COLUMN_REQUIREDSUBSCRIPTIONFEATUREBITALL);
|
|
if (requiredBit > 0)
|
|
{
|
|
int sub_bits = getSubscriptionFeatureBits(player);
|
|
if ((sub_bits & requiredBit) != requiredBit)
|
|
{
|
|
return CAN_GET_REWARD_FAIL_INADEQUATE_SUBSCRIPTION;
|
|
}
|
|
}
|
|
int rewardMilestone = dataTableGetInt(REWARDS_DATATABLE, index, REWARDS_COLUMN_MILESTONE);
|
|
if (rewardMilestone > milestone)
|
|
{
|
|
return CAN_GET_REWARD_FAIL_INADEQUATE_MILESTONE;
|
|
}
|
|
return CAN_GET_REWARD_SUCCESS;
|
|
}
|
|
public static boolean checkVeteranMilestone(obj_id player, int milestone) throws InterruptedException
|
|
{
|
|
if (milestone < 1 || milestone > MAX_MILESTONE)
|
|
{
|
|
return false;
|
|
}
|
|
int[] rewardsReceived = getIntArrayObjVar(player, OBJVAR_REWARDS_RECEIVED);
|
|
if (rewardsReceived == null)
|
|
{
|
|
return false;
|
|
}
|
|
--milestone;
|
|
int index = milestone / 32;
|
|
int mask = 0x00000001 << (milestone - index * 32);
|
|
return (rewardsReceived[index] & mask) != 0;
|
|
}
|
|
public static boolean checkMilestoneNotified(obj_id player, int milestone) throws InterruptedException
|
|
{
|
|
if (milestone < 1 || milestone > MAX_MILESTONE)
|
|
{
|
|
return false;
|
|
}
|
|
int[] milestonesNotified = getIntArrayObjVar(player, OBJVAR_MILESTONES_NOTIFIED);
|
|
if (milestonesNotified == null)
|
|
{
|
|
return false;
|
|
}
|
|
--milestone;
|
|
int index = milestone / 32;
|
|
int mask = 0x00000001 << (milestone - index * 32);
|
|
return (milestonesNotified[index] & mask) != 0;
|
|
}
|
|
public static void setVeteranMilestone(obj_id player, int milestone) throws InterruptedException
|
|
{
|
|
if (milestone < 1 || milestone > MAX_MILESTONE)
|
|
{
|
|
return;
|
|
}
|
|
int[] rewardsReceived = getIntArrayObjVar(player, OBJVAR_REWARDS_RECEIVED);
|
|
if (rewardsReceived == null)
|
|
{
|
|
rewardsReceived = new int[REWARD_FLAGS_SIZE];
|
|
}
|
|
--milestone;
|
|
int index = milestone / 32;
|
|
int mask = 0x00000001 << (milestone - index * 32);
|
|
rewardsReceived[index] |= mask;
|
|
setObjVar(player, OBJVAR_REWARDS_RECEIVED, rewardsReceived);
|
|
}
|
|
public static void setMilestoneNotified(obj_id player, int milestone) throws InterruptedException
|
|
{
|
|
if (milestone < 1 || milestone > MAX_MILESTONE)
|
|
{
|
|
return;
|
|
}
|
|
int[] milestonesNotified = getIntArrayObjVar(player, OBJVAR_MILESTONES_NOTIFIED);
|
|
if (milestonesNotified == null)
|
|
{
|
|
milestonesNotified = new int[REWARD_FLAGS_SIZE];
|
|
}
|
|
--milestone;
|
|
int index = milestone / 32;
|
|
int mask = 0x00000001 << (milestone - index * 32);
|
|
milestonesNotified[index] |= mask;
|
|
setObjVar(player, OBJVAR_MILESTONES_NOTIFIED, milestonesNotified);
|
|
}
|
|
public static void clearVeteranMilestone(obj_id player, int milestone) throws InterruptedException
|
|
{
|
|
if (milestone < 1 || milestone > MAX_MILESTONE)
|
|
{
|
|
return;
|
|
}
|
|
int[] rewardsReceived = getIntArrayObjVar(player, OBJVAR_REWARDS_RECEIVED);
|
|
if (rewardsReceived == null)
|
|
{
|
|
rewardsReceived = new int[REWARD_FLAGS_SIZE];
|
|
}
|
|
clearMilestoneNotified(player, milestone);
|
|
--milestone;
|
|
int index = milestone / 32;
|
|
int mask = 0x00000001 << (milestone - index * 32);
|
|
rewardsReceived[index] &= ~mask;
|
|
setObjVar(player, OBJVAR_REWARDS_RECEIVED, rewardsReceived);
|
|
}
|
|
public static void clearMilestoneNotified(obj_id player, int milestone) throws InterruptedException
|
|
{
|
|
if (milestone < 1 || milestone > MAX_MILESTONE)
|
|
{
|
|
return;
|
|
}
|
|
int[] milestonesNotified = getIntArrayObjVar(player, OBJVAR_MILESTONES_NOTIFIED);
|
|
if (milestonesNotified == null)
|
|
{
|
|
milestonesNotified = new int[REWARD_FLAGS_SIZE];
|
|
}
|
|
--milestone;
|
|
int index = milestone / 32;
|
|
int mask = 0x00000001 << (milestone - index * 32);
|
|
milestonesNotified[index] &= ~mask;
|
|
setObjVar(player, OBJVAR_MILESTONES_NOTIFIED, milestonesNotified);
|
|
}
|
|
public static boolean checkVeteranTarget(obj_id target) throws InterruptedException
|
|
{
|
|
if (isIdValid(target) && isPlayer(target))
|
|
{
|
|
if (hasObjVar(target, veteran_deprecated.OBJVAR_TIME_ACTIVE))
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(getSelf(), veteran_deprecated.SID_SYSTEM_INACTIVE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(getSelf(), veteran_deprecated.SID_INVALID_TARGET);
|
|
}
|
|
return false;
|
|
}
|
|
public static void giveOneYearAnniversaryReward(obj_id player) throws InterruptedException
|
|
{
|
|
if (!("true").equals(getConfigSetting("GameServer", "enableOneYearAnniversary")))
|
|
{
|
|
return;
|
|
}
|
|
if (!isPlayer(player))
|
|
{
|
|
return;
|
|
}
|
|
if (hasObjVar(player, OBJVAR_ONE_YEAR_ANNIVERSARY))
|
|
{
|
|
return;
|
|
}
|
|
int playerBorn = getPlayerBirthDate(player);
|
|
int existTime = getCurrentBirthDate() - playerBorn;
|
|
if (hasObjVar(player, OBJVAR_ONE_YEAR_ANNIVERSARY_OVERRIDE))
|
|
{
|
|
existTime = getIntObjVar(player, OBJVAR_ONE_YEAR_ANNIVERSARY_OVERRIDE);
|
|
CustomerServiceLog("one_year_anniversary", "Using override time of " + existTime + " for player %TU", player);
|
|
}
|
|
if (playerBorn < 0 || existTime < MIN_ONE_YEAR_ANNIVERSARY_TIME)
|
|
{
|
|
return;
|
|
}
|
|
obj_id inventory = utils.getInventoryContainer(player);
|
|
if (!isIdValid(inventory))
|
|
{
|
|
return;
|
|
}
|
|
int free = getVolumeFree(inventory);
|
|
if (free == 0)
|
|
{
|
|
prose_package pp = new prose_package();
|
|
pp.stringId = SID_ONE_YEAR_ANNIVERSARY_INVENTORY_FULL;
|
|
utils.sendMail(SID_ONE_YEAR_ANNIVERSARY_INVENTORY_FULL_SUBJECT, pp, player, "@" + SID_ONE_YEAR_ANNIVERSARY_FROM);
|
|
return;
|
|
}
|
|
int rewardNum = rand(1, ONE_YEAR_ANNIVERSARY_REWARD_COUNT);
|
|
String rewardName = TEMPLATE_ONE_YEAR_ANNIVERSARY;
|
|
if (rewardNum < 10)
|
|
{
|
|
rewardName += "0";
|
|
}
|
|
rewardName += rewardNum;
|
|
obj_id reward = createObject(rewardName + ".iff", inventory, "");
|
|
if (!isIdValid(reward))
|
|
{
|
|
CustomerServiceLog("one_year_anniversary", "WARNING: Error creating one year anniversary reward " + rewardName + ".iff for player %TU", player);
|
|
return;
|
|
}
|
|
setObjVar(player, OBJVAR_ONE_YEAR_ANNIVERSARY, reward);
|
|
CustomerServiceLog("one_year_anniversary", "Gave player %TU one year anniversary reward " + reward, player);
|
|
prose_package pp = new prose_package();
|
|
pp.stringId = SID_ONE_YEAR_ANNIVERSARY;
|
|
utils.sendMail(SID_ONE_YEAR_ANNIVERSARY_SUBJECT, pp, player, "@" + SID_ONE_YEAR_ANNIVERSARY_FROM);
|
|
}
|
|
public static boolean checkFlashSpeederReward(obj_id player) throws InterruptedException
|
|
{
|
|
if (!isIdValid(player))
|
|
{
|
|
LOG("flash_speeder", "veteran_deprecated.checkFlashSpeeder: Player is invalid.");
|
|
return false;
|
|
}
|
|
if (!isPlayer(player))
|
|
{
|
|
LOG("flash_speeder", "veteran_deprecated.checkFlashSpeeder: " + player + " is not a player.");
|
|
return false;
|
|
}
|
|
if (isUsingAdminLogin(player))
|
|
{
|
|
return false;
|
|
}
|
|
String config = getConfigSetting("GameServer", "flashSpeederReward");
|
|
if (config != null && config.equals("true"))
|
|
{
|
|
int sub_bits = getGameFeatureBits(player);
|
|
if (hasObjVar(player, "flash_speeder.eligible"))
|
|
{
|
|
sub_bits = getIntObjVar(player, "flash_speeder.eligible");
|
|
}
|
|
if ((features.isSpaceEdition(player) && utils.checkBit(sub_bits, 3)) || features.isJPCollectorEdition(player))
|
|
{
|
|
if (!hasObjVar(player, "flash_speeder.granted"))
|
|
{
|
|
createObjectInInventoryAllowOverload("object/tangible/deed/vehicle_deed/speederbike_flash_deed.iff", player);
|
|
CustomerServiceLog("flash_speeder", "%TU has received a JtL pre-order Flash Speeder.", player);
|
|
string_id sub = new string_id(VETERAN_STRING_TABLE, "flash_speeder_granted_sub");
|
|
string_id body = new string_id(VETERAN_STRING_TABLE, "flash_speeder_granted_body");
|
|
utils.sendMail(sub, body, player, "System");
|
|
setObjVar(player, "flash_speeder.granted", 1);
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|