Fixed issue with level rewards. Added new Golden Ticket event.

This commit is contained in:
Cekis
2018-03-23 15:57:04 -07:00
committed by CekisSWG
parent 2bf54f0038
commit ffab447904
4 changed files with 174 additions and 8 deletions
@@ -1009,6 +1009,12 @@ public class ai extends script.base_script
return SCRIPT_CONTINUE;
}
boolean hasLoot = loot.addLoot(self);
String goldenTicketActive = getConfigSetting("EventTeam", "goldenTicket");
if(goldenTicketActive != null && goldenTicketActive.equals("true")) {
for (obj_id killer : killers) {
loot.addGoldenTicket(killer, self);
}
}
boolean hasChanceToDropChroniclesLoot = false;
if (hasObjVar(self, xp.VAR_TOP_GROUP))
{
+42
View File
@@ -174,6 +174,48 @@ public class loot extends script.base_script
}
return hasLoot;
}
public static boolean addGoldenTicket(obj_id player, obj_id corpse) throws InterruptedException{
String goldenTicketActive = getConfigSetting("EventTeam", "goldenTicket");
if(goldenTicketActive != null && goldenTicketActive.equals("true")
&& !hasObjVar(player, "lottery.looted")
&& getIntObjVar(player, "lottery.availableTickets") > 0) {
obj_id broker = getObjIdObjVar(player, "lottery.broker");
if(!isValidId(broker)) return false;
Vector qualifiers = getResizeableIntArrayObjVar(broker, "lottery.qualifiers");
if(qualifiers != null && qualifiers.contains(getPlayerStationId(player))) return false;
int rng = rand(1,100);
sendSystemMessage(player, "Rolled a " + rng, null);
int dropChance = 2;
try {
dropChance = Integer.parseInt(getConfigSetting("EventTeam", "goldenTicketDropChance"));
}
catch(Exception e){}
if(rng <= dropChance) {
String goldenTicket = "object/tangible/travel/travel_ticket/dungeon_ticket.iff";
obj_id[] items = utils.getAllItemsInBankAndInventory(player);
for (obj_id item : items){
if (getTemplateName(item).equals(goldenTicket)){
return false;
}
}
obj_id lootItem = createObject(goldenTicket, utils.getInventoryContainer(player), "");
setName(lootItem, "A Golden Ticket");
if(isValidId(lootItem)){
setObjVar(player, "lottery.looted", 1);
if(ai_lib.isHumanoid(corpse)){
chat.chat(corpse, "...you... you've won, Charlie...");
}
play2dNonLoopingSound(player, "sound/utinni.snd");
sendSystemMessage(player, "A particularly shiny Golden Ticket has been placed in your inventory!", null);
LOG("live-lottery","Player " + getFirstName(player) + " (" + player + ") has looted a lottery ticket.");
obj_id inv = utils.getInventoryContainer(corpse);
return true;
}
}
}
return false;
}
public static int getCashForLevel(String mobType, int level) throws InterruptedException
{
if (mobType == null || mobType.equals("") || level < 1)
@@ -492,6 +492,7 @@ public class base_player extends script.base_script
return SCRIPT_CONTINUE;
}
public void grantLevelSpecificRewards(obj_id player, int newCombatLevel) throws InterruptedException{
if(hasObjVar(player, "level.reward." + newCombatLevel)) return;
obj_id inv = utils.getInventoryContainer(player);
switch(newCombatLevel){
case 20:
@@ -508,6 +509,7 @@ public class base_player extends script.base_script
String playerName = getName(player);
obj_id reward = createObjectInInventoryAllowOverload(template, player);
if(isIdValid(reward)){
setObjVar(player, "level.reward." + level, true);
sendSystemMessage(player, "A " + name + " has been placed in your inventory.", null);
CustomerServiceLog("LevelItemRewards", "Player " + playerName + " (" + player + ") has been awarded the " + name + " for reaching Level " + level + ".");
}
@@ -12643,6 +12645,19 @@ public class base_player extends script.base_script
}
return SCRIPT_CONTINUE;
}
public int setupLotteryListener(obj_id self, dictionary params) throws InterruptedException{
listenToMessage(getObjIdObjVar(self, "lottery.broker"), "updateLotteryStatus");
return SCRIPT_CONTINUE;
}
public int removeLotteryListener(obj_id self, dictionary params) throws InterruptedException{
stopListeningToMessage(getObjIdObjVar(self, "lottery.broker"), "updateLotteryStatus");
return SCRIPT_CONTINUE;
}
public int updateLotteryStatus(obj_id self, dictionary params) throws InterruptedException
{
setObjVar(self, "lottery.availableTickets", params.getInt("available"));
return SCRIPT_CONTINUE;
}
public boolean blog(String txt) throws InterruptedException
{
if (LOGGING_ON)
@@ -839,12 +839,12 @@ public class terminal_character_builder extends script.base_script
"Mustafarian Injector",
"Naboo Signaling Unit",
};
public static final String[] STELLA_OPTIONS =
public static String[] stella_options =
{
"Spec-Ops Pack",
"Buff me",
"Healing Stims",
"Toggle Chronicles Loot"
"Toggle Chronicles Loot"
};
public static final String[] MEDICINE_OPTIONS =
{
@@ -1504,6 +1504,17 @@ public class terminal_character_builder extends script.base_script
1,
2
};
public int OnInitialize(obj_id self) throws InterruptedException{
String goldenTicketActive = getConfigSetting("EventTeam", "goldenTicket");
Vector<String> opts = new Vector<String>(Arrays.asList(stella_options));
if(goldenTicketActive != null && goldenTicketActive.equals("true")){
Vector qualifiers = new Vector();
opts.add(0,"Lottery Status");
setObjVar(self, "lottery.qualifiers", qualifiers);
}
stella_options = opts.toArray(new String[opts.size()]);
return SCRIPT_CONTINUE;
}
public boolean checkConfigSetting(String configString) throws InterruptedException
{
String enabled = toLower(getConfigSetting("CharacterBuilder", configString));
@@ -6361,10 +6372,25 @@ public class terminal_character_builder extends script.base_script
}
refreshMenu(player, "Select the desired armor option", "Character Builder Terminal", HEROIC_JEWELRY_LIST, "handleHeroicJewelrySelect", false);
return SCRIPT_CONTINUE;
}
public void manageStellaOptions(obj_id player) throws InterruptedException{
obj_id self = getSelf();
String goldenTicketActive = getConfigSetting("EventTeam", "goldenTicket");
if(goldenTicketActive != null && goldenTicketActive.equals("true")) {
if (!hasObjVar(player, "lottery.broker") && !hasObjVar(self, "lottery.over")) {
stella_options[0] = "Start Lottery";
} else if (hasObjVar(player, "lottery.looted") && !hasObjVar(player, "lottery.position") && !hasObjVar(self, "lottery.over")) {
stella_options[0] = "Turn In Ticket";
} else {
stella_options[0] = "Lottery Status";
}
}
}
public void handleStellaOption(obj_id player) throws InterruptedException
{
refreshMenu(player, "Select the desired thingie", "Character Builder Terminal", STELLA_OPTIONS, "handleStellaOptions", false);
manageStellaOptions(player);
refreshMenu(player, "Select the desired thingie", "Character Builder Terminal", stella_options, "handleStellaOptions", false);
}
public int handleStellaOptions(obj_id self, dictionary params) throws InterruptedException
{
@@ -6387,7 +6413,7 @@ public class terminal_character_builder extends script.base_script
closeOldWindow(player);
return SCRIPT_CONTINUE;
}
if (idx == -1 || idx > STELLA_OPTIONS.length)
if (idx == -1 || idx > stella_options.length)
{
cleanScriptVars(player);
return SCRIPT_CONTINUE;
@@ -6410,14 +6436,90 @@ public class terminal_character_builder extends script.base_script
cleanScriptVars(player);
return SCRIPT_OVERRIDE;
}
String goldenTicketActive = getConfigSetting("EventTeam", "goldenTicket");
if(goldenTicketActive == null || !goldenTicketActive.equals("true")) idx++;
switch (idx)
{
case 0:
Vector qualifiers = getResizeableIntArrayObjVar(self, "lottery.qualifiers");
int maxTickets = 1000;
try {
maxTickets = Integer.parseInt(getConfigSetting("EventTeam", "goldenTicketsAvailable"));
}
catch(Exception e){}
int availableTickets = maxTickets;
if(hasObjVar(self, "lottery.availableTickets")){
availableTickets = getIntObjVar(self, "lottery.availableTickets");
}
else{
setObjVar(self, "lottery.availableTickets", maxTickets);
}
dictionary tickets = new dictionary();
if(!hasObjVar(player, "lottery.broker")){
if(qualifiers != null && qualifiers.contains(getPlayerStationId(player))) break;
// Start the lottery.
setObjVar(player, "lottery.broker", self);
setObjVar(player, "lottery.availableTickets", availableTickets);
messageTo(player, "setupLotteryListener", params, 1.0f, true);
tickets.put("availableTickets", availableTickets);
}
else if(hasObjVar(player, "lottery.looted") && !hasObjVar(player, "lottery.position")) {
if(qualifiers != null && qualifiers.contains(getPlayerStationId(player))) break;
// turn in the ticket
String template = "object/tangible/travel/travel_ticket/dungeon_ticket.iff";
obj_id inv = utils.getInventoryContainer(player);
obj_id[] items = utils.getAllItemsInContainerByTemplate(inv, template, true);
obj_id goldenTicket = null;
for (obj_id item : items){
if (getTemplateName(item).equals(template)) {
goldenTicket = item;
}
}
// destroy the ticket if the player has it in their inventory.
if (isValidId(goldenTicket)) destroyObject(goldenTicket);
int position = (maxTickets - availableTickets) + 1;
if (position <= maxTickets) {
// congrats you have earned a spot
availableTickets--;
setObjVar(self, "lottery.availableTickets", availableTickets);
if(availableTickets <= 0 && !hasObjVar(self, "lottery.over")){
setObjVar(self, "lottery.over", 1);
sendSystemMessageGalaxyTestingOnly("Congratulations to " + getName(player) + "! They have just secured the final position in the live lottery!");
sendSystemMessageGalaxyTestingOnly("All tickets have been claimed for the live release! Thank you for playing!");
LOG("live-lottery","Player " + getFirstName(player) + " (" + player + ") has secured the final position in the live lottery.");
}
else{
sendSystemMessageGalaxyTestingOnly("Congratulations to " + getName(player) + "! They have just secured position #" + position + " in the live lottery!");
LOG("live-lottery","Player " + getFirstName(player) + " (" + player + ") with station id (" + getPlayerStationId(player) + ") has secured position #" + position + " in the live lottery.");
}
if(qualifiers == null) qualifiers = new Vector();
qualifiers.add(getPlayerStationId(player));
sendSystemMessage(player, "Congratulations! You have secured a position! Your position is #" + position + " in line.", null);
setObjVar(self, "lottery.qualifiers", qualifiers);
setObjVar(player, "lottery.position", position);
tickets.put("available", availableTickets);
broadcastMessage("updateLotteryStatus", tickets);
messageTo(player, "removeLotteryListener", null, 1f, false);
} else {
sendSystemMessage(player, "We're sorry, but there are no more slots available. Thank you for participating!", null);
}
}
else{
// checking status
sendSystemMessage(player, "There are currently " + (availableTickets > 0 ? availableTickets : "NO") + " available tickets left.", null);
if(hasObjVar(player, "lottery.position")){
sendSystemMessage(player, "You secured position #" + getIntObjVar(player, "lottery.position") + " in the lottery.", null);
}
}
break;
case 1:
createObject("object/tangible/wearables/backpack/backpack_s06.iff", pInv, "");
sendSystemMessageTestingOnly(player, "Spec-Ops Pack Issued.");
break;
case 1:
case 2:
buff.applyBuff((player), "me_buff_health_2", 14400);
buff.applyBuff((player), "me_buff_action_3", 14400);
@@ -6440,11 +6542,11 @@ public class terminal_character_builder extends script.base_script
buff.applyBuff((player), "vr_familiar_defense_8", 14400);
buff.applyBuff((player), "drink_flameout", 14400);
break;
case 2:
case 3:
// createObject("object/tangible/medicine/instant_stimpack/stimpack_generic_e.iff", pInv, "");
static_item.createNewItemFunction("item_off_temp_stimpack_02_06", pInv);
break;
case 3:
case 4:
if(hasObjVar(player, "chroniclesLoot_toggledOff")){
removeObjVar(player, "chroniclesLoot_toggledOff");
sendSystemMessageTestingOnly(player, "Chronicles Loot is now ON.");
@@ -6457,7 +6559,8 @@ public class terminal_character_builder extends script.base_script
cleanScriptVars(player);
return SCRIPT_CONTINUE;
}
refreshMenu(player, "Select the desired option", "Character Builder Terminal", STELLA_OPTIONS, "handleStellaOptions", false);
manageStellaOptions(player);
refreshMenu(player, "Select the desired option", "Character Builder Terminal", stella_options, "handleStellaOptions", false);
return SCRIPT_CONTINUE;
}
public void handleMiscOption(obj_id player) throws InterruptedException