From ffab4479049a151c3bea38e172d6acb071f5583f Mon Sep 17 00:00:00 2001 From: Cekis Date: Sat, 14 Jan 2017 01:30:27 +0000 Subject: [PATCH] Fixed issue with level rewards. Added new Golden Ticket event. --- .../compiled/game/script/ai/ai.java | 6 + .../compiled/game/script/library/loot.java | 42 +++++++ .../game/script/player/base/base_player.java | 15 +++ .../terminal/terminal_character_builder.java | 119 ++++++++++++++++-- 4 files changed, 174 insertions(+), 8 deletions(-) mode change 100644 => 100755 sku.0/sys.server/compiled/game/script/library/loot.java diff --git a/sku.0/sys.server/compiled/game/script/ai/ai.java b/sku.0/sys.server/compiled/game/script/ai/ai.java index 8b939b206..843eb2740 100755 --- a/sku.0/sys.server/compiled/game/script/ai/ai.java +++ b/sku.0/sys.server/compiled/game/script/ai/ai.java @@ -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)) { diff --git a/sku.0/sys.server/compiled/game/script/library/loot.java b/sku.0/sys.server/compiled/game/script/library/loot.java old mode 100644 new mode 100755 index e2e7e1c61..b1470cadc --- a/sku.0/sys.server/compiled/game/script/library/loot.java +++ b/sku.0/sys.server/compiled/game/script/library/loot.java @@ -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) diff --git a/sku.0/sys.server/compiled/game/script/player/base/base_player.java b/sku.0/sys.server/compiled/game/script/player/base/base_player.java index 803bda2f8..a2c0397ef 100755 --- a/sku.0/sys.server/compiled/game/script/player/base/base_player.java +++ b/sku.0/sys.server/compiled/game/script/player/base/base_player.java @@ -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) diff --git a/sku.0/sys.server/compiled/game/script/terminal/terminal_character_builder.java b/sku.0/sys.server/compiled/game/script/terminal/terminal_character_builder.java index 06f00864a..5e19fbc23 100755 --- a/sku.0/sys.server/compiled/game/script/terminal/terminal_character_builder.java +++ b/sku.0/sys.server/compiled/game/script/terminal/terminal_character_builder.java @@ -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 opts = new Vector(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