Reformat and clean up "scripting" package
This commit is contained in:
@@ -79,7 +79,7 @@ public class AbstractPlayerInteraction {
|
|||||||
return getPlayer().getJob().getId();
|
return getPlayer().getJob().getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Job getJob(){
|
public Job getJob() {
|
||||||
return getPlayer().getJob();
|
return getPlayer().getJob();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ public class AbstractPlayerInteraction {
|
|||||||
public void warpParty(int id, int portalId, int fromMinId, int fromMaxId) {
|
public void warpParty(int id, int portalId, int fromMinId, int fromMaxId) {
|
||||||
for (Character mc : this.getPlayer().getPartyMembersOnline()) {
|
for (Character mc : this.getPlayer().getPartyMembersOnline()) {
|
||||||
if (mc.isLoggedinWorld()) {
|
if (mc.isLoggedinWorld()) {
|
||||||
if(mc.getMapId() >= fromMinId && mc.getMapId() <= fromMaxId) {
|
if (mc.getMapId() >= fromMinId && mc.getMapId() <= fromMaxId) {
|
||||||
mc.changeMap(id, portalId);
|
mc.changeMap(id, portalId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -247,7 +247,7 @@ public class AbstractPlayerInteraction {
|
|||||||
int size = Math.min(itemids.size(), quantity.size());
|
int size = Math.min(itemids.size(), quantity.size());
|
||||||
|
|
||||||
List<Pair<Item, InventoryType>> addedItems = new LinkedList<>();
|
List<Pair<Item, InventoryType>> addedItems = new LinkedList<>();
|
||||||
for(int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
Item it = new Item(itemids.get(i), (short) 0, quantity.get(i).shortValue());
|
Item it = new Item(itemids.get(i), (short) 0, quantity.get(i).shortValue());
|
||||||
addedItems.add(new Pair<>(it, ItemConstants.getInventoryType(itemids.get(i))));
|
addedItems.add(new Pair<>(it, ItemConstants.getInventoryType(itemids.get(i))));
|
||||||
}
|
}
|
||||||
@@ -257,7 +257,7 @@ public class AbstractPlayerInteraction {
|
|||||||
|
|
||||||
private List<Pair<Item, InventoryType>> prepareProofInventoryItems(List<Pair<Integer, Integer>> items) {
|
private List<Pair<Item, InventoryType>> prepareProofInventoryItems(List<Pair<Integer, Integer>> items) {
|
||||||
List<Pair<Item, InventoryType>> addedItems = new LinkedList<>();
|
List<Pair<Item, InventoryType>> addedItems = new LinkedList<>();
|
||||||
for(Pair<Integer, Integer> p : items) {
|
for (Pair<Integer, Integer> p : items) {
|
||||||
Item it = new Item(p.getLeft(), (short) 0, p.getRight().shortValue());
|
Item it = new Item(p.getLeft(), (short) 0, p.getRight().shortValue());
|
||||||
addedItems.add(new Pair<>(it, InventoryType.CANHOLD));
|
addedItems.add(new Pair<>(it, InventoryType.CANHOLD));
|
||||||
}
|
}
|
||||||
@@ -269,11 +269,11 @@ public class AbstractPlayerInteraction {
|
|||||||
int size = Math.min(itemids.size(), quantity.size());
|
int size = Math.min(itemids.size(), quantity.size());
|
||||||
|
|
||||||
List<List<Pair<Integer, Integer>>> invList = new ArrayList<>(6);
|
List<List<Pair<Integer, Integer>>> invList = new ArrayList<>(6);
|
||||||
for(int i = InventoryType.UNDEFINED.getType(); i < InventoryType.CASH.getType(); i++) {
|
for (int i = InventoryType.UNDEFINED.getType(); i < InventoryType.CASH.getType(); i++) {
|
||||||
invList.add(new LinkedList<>());
|
invList.add(new LinkedList<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
int itemid = itemids.get(i);
|
int itemid = itemids.get(i);
|
||||||
invList.get(ItemConstants.getInventoryType(itemid).getType()).add(new Pair<>(itemid, quantity.get(i)));
|
invList.get(ItemConstants.getInventoryType(itemid).getType()).add(new Pair<>(itemid, quantity.get(i)));
|
||||||
}
|
}
|
||||||
@@ -288,23 +288,23 @@ public class AbstractPlayerInteraction {
|
|||||||
InventoryProof prfInv = (InventoryProof) this.getInventory(InventoryType.CANHOLD);
|
InventoryProof prfInv = (InventoryProof) this.getInventory(InventoryType.CANHOLD);
|
||||||
prfInv.lockInventory();
|
prfInv.lockInventory();
|
||||||
try {
|
try {
|
||||||
for(int i = InventoryType.EQUIP.getType(); i < InventoryType.CASH.getType(); i++) {
|
for (int i = InventoryType.EQUIP.getType(); i < InventoryType.CASH.getType(); i++) {
|
||||||
List<Pair<Integer, Integer>> toAdd = toAddItemList.get(i);
|
List<Pair<Integer, Integer>> toAdd = toAddItemList.get(i);
|
||||||
|
|
||||||
if(!toAdd.isEmpty()) {
|
if (!toAdd.isEmpty()) {
|
||||||
List<Pair<Integer, Integer>> toRemove = toRemoveItemList.get(i);
|
List<Pair<Integer, Integer>> toRemove = toRemoveItemList.get(i);
|
||||||
|
|
||||||
Inventory inv = this.getInventory(i);
|
Inventory inv = this.getInventory(i);
|
||||||
prfInv.cloneContents(inv);
|
prfInv.cloneContents(inv);
|
||||||
|
|
||||||
for(Pair<Integer, Integer> p : toRemove) {
|
for (Pair<Integer, Integer> p : toRemove) {
|
||||||
InventoryManipulator.removeById(c, InventoryType.CANHOLD, p.getLeft(), p.getRight(), false, false);
|
InventoryManipulator.removeById(c, InventoryType.CANHOLD, p.getLeft(), p.getRight(), false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Pair<Item, InventoryType>> addItems = prepareProofInventoryItems(toAdd);
|
List<Pair<Item, InventoryType>> addItems = prepareProofInventoryItems(toAdd);
|
||||||
|
|
||||||
boolean canHold = Inventory.checkSpots(c.getPlayer(), addItems, true);
|
boolean canHold = Inventory.checkSpots(c.getPlayer(), addItems, true);
|
||||||
if(!canHold) {
|
if (!canHold) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -505,9 +505,9 @@ public class AbstractPlayerInteraction {
|
|||||||
long period = (long) 90 * 24 * 60 * 60 * 1000; //refreshes expiration date: 90 days
|
long period = (long) 90 * 24 * 60 * 60 * 1000; //refreshes expiration date: 90 days
|
||||||
|
|
||||||
target = getPlayer().getPet(slot);
|
target = getPlayer().getPet(slot);
|
||||||
if(target == null) {
|
if (target == null) {
|
||||||
getPlayer().message("Pet could not be evolved...");
|
getPlayer().message("Pet could not be evolved...");
|
||||||
return(null);
|
return (null);
|
||||||
}
|
}
|
||||||
|
|
||||||
Item tmp = gainItem(afterId, (short) 1, false, true, period, target);
|
Item tmp = gainItem(afterId, (short) 1, false, true, period, target);
|
||||||
@@ -571,7 +571,7 @@ public class AbstractPlayerInteraction {
|
|||||||
if (ItemConstants.isPet(id)) {
|
if (ItemConstants.isPet(id)) {
|
||||||
petId = Pet.createPet(id);
|
petId = Pet.createPet(id);
|
||||||
|
|
||||||
if(from != null) {
|
if (from != null) {
|
||||||
evolved = Pet.loadFromDb(id, (short) 0, petId);
|
evolved = Pet.loadFromDb(id, (short) 0, petId);
|
||||||
|
|
||||||
Point pos = getPlayer().getPosition();
|
Point pos = getPlayer().getPosition();
|
||||||
@@ -597,16 +597,16 @@ public class AbstractPlayerInteraction {
|
|||||||
if (ItemConstants.getInventoryType(id).equals(InventoryType.EQUIP)) {
|
if (ItemConstants.getInventoryType(id).equals(InventoryType.EQUIP)) {
|
||||||
item = ii.getEquipById(id);
|
item = ii.getEquipById(id);
|
||||||
|
|
||||||
if(item != null) {
|
if (item != null) {
|
||||||
Equip it = (Equip)item;
|
Equip it = (Equip) item;
|
||||||
if (ItemConstants.isAccessory(item.getItemId()) && it.getUpgradeSlots() <= 0) {
|
if (ItemConstants.isAccessory(item.getItemId()) && it.getUpgradeSlots() <= 0) {
|
||||||
it.setUpgradeSlots(3);
|
it.setUpgradeSlots(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(YamlConfig.config.server.USE_ENHANCED_CRAFTING == true && c.getPlayer().getCS() == true) {
|
if (YamlConfig.config.server.USE_ENHANCED_CRAFTING == true && c.getPlayer().getCS() == true) {
|
||||||
Equip eqp = (Equip)item;
|
Equip eqp = (Equip) item;
|
||||||
if(!(c.getPlayer().isGM() && YamlConfig.config.server.USE_PERFECT_GM_SCROLL)) {
|
if (!(c.getPlayer().isGM() && YamlConfig.config.server.USE_PERFECT_GM_SCROLL)) {
|
||||||
eqp.setUpgradeSlots((byte)(eqp.getUpgradeSlots() + 1));
|
eqp.setUpgradeSlots((byte) (eqp.getUpgradeSlots() + 1));
|
||||||
}
|
}
|
||||||
item = ItemInformationProvider.getInstance().scrollEquipWithId(item, 2049100, true, 2049100, c.getPlayer().isGM());
|
item = ItemInformationProvider.getInstance().scrollEquipWithId(item, 2049100, true, 2049100, c.getPlayer().isGM());
|
||||||
}
|
}
|
||||||
@@ -777,7 +777,7 @@ public class AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Character chr = mpc.getPlayer();
|
Character chr = mpc.getPlayer();
|
||||||
if (chr != null && chr.getClient() != null){
|
if (chr != null && chr.getClient() != null) {
|
||||||
removeAll(id, chr.getClient());
|
removeAll(id, chr.getClient());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -807,13 +807,13 @@ public class AbstractPlayerInteraction {
|
|||||||
Party party = getPlayer().getParty();
|
Party party = getPlayer().getParty();
|
||||||
int size = party.getMembers().size();
|
int size = party.getMembers().size();
|
||||||
|
|
||||||
if(instance) {
|
if (instance) {
|
||||||
for(PartyCharacter member: party.getMembers()) {
|
for (PartyCharacter member : party.getMembers()) {
|
||||||
if(member == null || !member.isOnline()){
|
if (member == null || !member.isOnline()) {
|
||||||
size--;
|
size--;
|
||||||
} else {
|
} else {
|
||||||
Character chr = member.getPlayer();
|
Character chr = member.getPlayer();
|
||||||
if(chr != null && chr.getEventInstance() == null) {
|
if (chr != null && chr.getEventInstance() == null) {
|
||||||
size--;
|
size--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -822,20 +822,20 @@ public class AbstractPlayerInteraction {
|
|||||||
|
|
||||||
int bonus = size < 4 ? 100 : 70 + (size * 10);
|
int bonus = size < 4 ? 100 : 70 + (size * 10);
|
||||||
for (PartyCharacter member : party.getMembers()) {
|
for (PartyCharacter member : party.getMembers()) {
|
||||||
if(member == null || !member.isOnline()){
|
if (member == null || !member.isOnline()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Character player = member.getPlayer();
|
Character player = member.getPlayer();
|
||||||
if(player == null) {
|
if (player == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(instance && player.getEventInstance() == null){
|
if (instance && player.getEventInstance() == null) {
|
||||||
continue; // They aren't in the instance, don't give EXP.
|
continue; // They aren't in the instance, don't give EXP.
|
||||||
}
|
}
|
||||||
int base = PartyQuest.getExp(PQ, player.getLevel());
|
int base = PartyQuest.getExp(PQ, player.getLevel());
|
||||||
int exp = base * bonus / 100;
|
int exp = base * bonus / 100;
|
||||||
player.gainExp(exp, true, true);
|
player.gainExp(exp, true, true);
|
||||||
if(YamlConfig.config.server.PQ_BONUS_EXP_RATE > 0 && System.currentTimeMillis() <= YamlConfig.config.server.EVENT_END_TIMESTAMP) {
|
if (YamlConfig.config.server.PQ_BONUS_EXP_RATE > 0 && System.currentTimeMillis() <= YamlConfig.config.server.EVENT_END_TIMESTAMP) {
|
||||||
player.gainExp((int) (exp * YamlConfig.config.server.PQ_BONUS_EXP_RATE), true, true);
|
player.gainExp((int) (exp * YamlConfig.config.server.PQ_BONUS_EXP_RATE), true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -865,8 +865,8 @@ public class AbstractPlayerInteraction {
|
|||||||
cl.sendPacket(PacketCreator.getShowItemGain(id, (short) -possessed, true));
|
cl.sendPacket(PacketCreator.getShowItemGain(id, (short) -possessed, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(invType == InventoryType.EQUIP) {
|
if (invType == InventoryType.EQUIP) {
|
||||||
if(cl.getPlayer().getInventory(InventoryType.EQUIPPED).countById(id) > 0) {
|
if (cl.getPlayer().getInventory(InventoryType.EQUIPPED).countById(id) > 0) {
|
||||||
InventoryManipulator.removeById(cl, InventoryType.EQUIPPED, id, 1, true, false);
|
InventoryManipulator.removeById(cl, InventoryType.EQUIPPED, id, 1, true, false);
|
||||||
cl.sendPacket(PacketCreator.getShowItemGain(id, (short) -1, true));
|
cl.sendPacket(PacketCreator.getShowItemGain(id, (short) -1, true));
|
||||||
}
|
}
|
||||||
@@ -995,7 +995,7 @@ public class AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void resetPartyDojoEnergy() {
|
public void resetPartyDojoEnergy() {
|
||||||
for(Character pchr: c.getPlayer().getPartyMembersOnSameMap()) {
|
for (Character pchr : c.getPlayer().getPartyMembersOnSameMap()) {
|
||||||
pchr.setDojoEnergy(0);
|
pchr.setDojoEnergy(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1004,7 +1004,7 @@ public class AbstractPlayerInteraction {
|
|||||||
c.sendPacket(PacketCreator.enableActions());
|
c.sendPacket(PacketCreator.enableActions());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showEffect(String effect){
|
public void showEffect(String effect) {
|
||||||
c.sendPacket(PacketCreator.showEffect(effect));
|
c.sendPacket(PacketCreator.showEffect(effect));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1118,8 +1118,8 @@ public class AbstractPlayerInteraction {
|
|||||||
List<Pet> list = new LinkedList<>();
|
List<Pet> list = new LinkedList<>();
|
||||||
|
|
||||||
long curTime = System.currentTimeMillis();
|
long curTime = System.currentTimeMillis();
|
||||||
for(Item it : getPlayer().getInventory(InventoryType.CASH).list()) {
|
for (Item it : getPlayer().getInventory(InventoryType.CASH).list()) {
|
||||||
if(ItemConstants.isPet(it.getItemId()) && it.getExpiration() < curTime) {
|
if (ItemConstants.isPet(it.getItemId()) && it.getExpiration() < curTime) {
|
||||||
Pet pet = it.getPet();
|
Pet pet = it.getPet();
|
||||||
if (pet != null) {
|
if (pet != null) {
|
||||||
list.add(pet);
|
list.add(pet);
|
||||||
@@ -1145,7 +1145,7 @@ public class AbstractPlayerInteraction {
|
|||||||
|
|
||||||
Character chr = this.getPlayer();
|
Character chr = this.getPlayer();
|
||||||
|
|
||||||
switch(jobType) {
|
switch (jobType) {
|
||||||
case 1:
|
case 1:
|
||||||
return chr.getStr() >= 35;
|
return chr.getStr() >= 35;
|
||||||
|
|
||||||
@@ -1165,7 +1165,7 @@ public class AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getFirstJobStatRequirement(int jobType) {
|
public String getFirstJobStatRequirement(int jobType) {
|
||||||
switch(jobType) {
|
switch (jobType) {
|
||||||
case 1:
|
case 1:
|
||||||
return "STR " + 35;
|
return "STR " + 35;
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import java.io.FileReader;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Matze
|
* @author Matze
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractScriptManager {
|
public abstract class AbstractScriptManager {
|
||||||
|
|||||||
@@ -60,29 +60,28 @@ import java.util.logging.Level;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Matze
|
* @author Matze
|
||||||
* @author Ronan
|
* @author Ronan
|
||||||
*/
|
*/
|
||||||
public class EventInstanceManager {
|
public class EventInstanceManager {
|
||||||
private Map<Integer, Character> chars = new HashMap<>();
|
private final Map<Integer, Character> chars = new HashMap<>();
|
||||||
private int leaderId = -1;
|
private int leaderId = -1;
|
||||||
private List<Monster> mobs = new LinkedList<>();
|
private final List<Monster> mobs = new LinkedList<>();
|
||||||
private Map<Character, Integer> killCount = new HashMap<>();
|
private final Map<Character, Integer> killCount = new HashMap<>();
|
||||||
private EventManager em;
|
private EventManager em;
|
||||||
private EventScriptScheduler ess;
|
private EventScriptScheduler ess;
|
||||||
private MapManager mapManager;
|
private MapManager mapManager;
|
||||||
private String name;
|
private String name;
|
||||||
private Properties props = new Properties();
|
private final Properties props = new Properties();
|
||||||
private Map<String, Object> objectProps = new HashMap<>();
|
private final Map<String, Object> objectProps = new HashMap<>();
|
||||||
private long timeStarted = 0;
|
private long timeStarted = 0;
|
||||||
private long eventTime = 0;
|
private long eventTime = 0;
|
||||||
private Expedition expedition = null;
|
private Expedition expedition = null;
|
||||||
private List<Integer> mapIds = new LinkedList<>();
|
private final List<Integer> mapIds = new LinkedList<>();
|
||||||
|
|
||||||
private final MonitoredReentrantReadWriteLock lock = new MonitoredReentrantReadWriteLock(MonitoredLockType.EIM, true);
|
private final MonitoredReentrantReadWriteLock lock = new MonitoredReentrantReadWriteLock(MonitoredLockType.EIM, true);
|
||||||
private MonitoredReadLock rL = MonitoredReadLockFactory.createLock(lock);
|
private final MonitoredReadLock rL = MonitoredReadLockFactory.createLock(lock);
|
||||||
private MonitoredWriteLock wL = MonitoredWriteLockFactory.createLock(lock);
|
private final MonitoredWriteLock wL = MonitoredWriteLockFactory.createLock(lock);
|
||||||
|
|
||||||
private MonitoredReentrantLock pL = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EIM_PARTY, true);
|
private MonitoredReentrantLock pL = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EIM_PARTY, true);
|
||||||
private MonitoredReentrantLock sL = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EIM_SCRIPT, true);
|
private MonitoredReentrantLock sL = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EIM_SCRIPT, true);
|
||||||
@@ -93,22 +92,22 @@ public class EventInstanceManager {
|
|||||||
private boolean eventStarted = false;
|
private boolean eventStarted = false;
|
||||||
|
|
||||||
// multi-leveled PQ rewards!
|
// multi-leveled PQ rewards!
|
||||||
private Map<Integer, List<Integer>> collectionSet = new HashMap<>(YamlConfig.config.server.MAX_EVENT_LEVELS);
|
private final Map<Integer, List<Integer>> collectionSet = new HashMap<>(YamlConfig.config.server.MAX_EVENT_LEVELS);
|
||||||
private Map<Integer, List<Integer>> collectionQty = new HashMap<>(YamlConfig.config.server.MAX_EVENT_LEVELS);
|
private final Map<Integer, List<Integer>> collectionQty = new HashMap<>(YamlConfig.config.server.MAX_EVENT_LEVELS);
|
||||||
private Map<Integer, Integer> collectionExp = new HashMap<>(YamlConfig.config.server.MAX_EVENT_LEVELS);
|
private final Map<Integer, Integer> collectionExp = new HashMap<>(YamlConfig.config.server.MAX_EVENT_LEVELS);
|
||||||
|
|
||||||
// Exp/Meso rewards by CLEAR on a stage
|
// Exp/Meso rewards by CLEAR on a stage
|
||||||
private List<Integer> onMapClearExp = new ArrayList<>();
|
private final List<Integer> onMapClearExp = new ArrayList<>();
|
||||||
private List<Integer> onMapClearMeso = new ArrayList<>();
|
private final List<Integer> onMapClearMeso = new ArrayList<>();
|
||||||
|
|
||||||
// registers player status on an event (null on this Map structure equals to 0)
|
// registers player status on an event (null on this Map structure equals to 0)
|
||||||
private Map<Integer, Integer> playerGrid = new HashMap<>();
|
private final Map<Integer, Integer> playerGrid = new HashMap<>();
|
||||||
|
|
||||||
// registers all opened gates on the event. Will help late characters to encounter next stages gates already opened
|
// registers all opened gates on the event. Will help late characters to encounter next stages gates already opened
|
||||||
private Map<Integer, Pair<String, Integer>> openedGates = new HashMap<>();
|
private final Map<Integer, Pair<String, Integer>> openedGates = new HashMap<>();
|
||||||
|
|
||||||
// forces deletion of items not supposed to be held outside of the event, dealt on a player's leaving moment.
|
// forces deletion of items not supposed to be held outside of the event, dealt on a player's leaving moment.
|
||||||
private Set<Integer> exclusiveItems = new HashSet<>();
|
private final Set<Integer> exclusiveItems = new HashSet<>();
|
||||||
|
|
||||||
public EventInstanceManager(EventManager em, String name) {
|
public EventInstanceManager(EventManager em, String name) {
|
||||||
this.em = em;
|
this.em = em;
|
||||||
@@ -135,7 +134,7 @@ public class EventInstanceManager {
|
|||||||
// 3: BOWMAN 4: THIEF 5: PIRATE
|
// 3: BOWMAN 4: THIEF 5: PIRATE
|
||||||
|
|
||||||
int mask = 0;
|
int mask = 0;
|
||||||
for(Character chr: getPlayers()) {
|
for (Character chr : getPlayers()) {
|
||||||
mask |= (1 << chr.getJob().getJobNiche());
|
mask |= (1 << chr.getJob().getJobNiche());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,8 +145,8 @@ public class EventInstanceManager {
|
|||||||
List<Character> players = getPlayerList();
|
List<Character> players = getPlayerList();
|
||||||
StatEffect mse = ItemInformationProvider.getInstance().getItemEffect(itemId);
|
StatEffect mse = ItemInformationProvider.getInstance().getItemEffect(itemId);
|
||||||
|
|
||||||
if(mse != null) {
|
if (mse != null) {
|
||||||
for (Character player: players) {
|
for (Character player : players) {
|
||||||
mse.applyTo(player);
|
mse.applyTo(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -161,10 +160,10 @@ public class EventInstanceManager {
|
|||||||
List<Character> players = getPlayerList();
|
List<Character> players = getPlayerList();
|
||||||
Skill skill = SkillFactory.getSkill(skillId);
|
Skill skill = SkillFactory.getSkill(skillId);
|
||||||
|
|
||||||
if(skill != null) {
|
if (skill != null) {
|
||||||
StatEffect mse = skill.getEffect(Math.min(skillLv, skill.getMaxLevel()));
|
StatEffect mse = skill.getEffect(Math.min(skillLv, skill.getMaxLevel()));
|
||||||
if(mse != null) {
|
if (mse != null) {
|
||||||
for (Character player: players) {
|
for (Character player : players) {
|
||||||
mse.applyTo(player);
|
mse.applyTo(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -176,18 +175,21 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void giveEventPlayersExp(int gain, int mapId) {
|
public void giveEventPlayersExp(int gain, int mapId) {
|
||||||
if(gain == 0) return;
|
if (gain == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
List<Character> players = getPlayerList();
|
List<Character> players = getPlayerList();
|
||||||
|
|
||||||
if(mapId == -1) {
|
if (mapId == -1) {
|
||||||
for(Character mc: players) {
|
for (Character mc : players) {
|
||||||
mc.gainExp(gain * mc.getExpRate(), true, true);
|
mc.gainExp(gain * mc.getExpRate(), true, true);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
for (Character mc : players) {
|
||||||
|
if (mc.getMapId() == mapId) {
|
||||||
|
mc.gainExp(gain * mc.getExpRate(), true, true);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
for(Character mc: players) {
|
|
||||||
if(mc.getMapId() == mapId) mc.gainExp(gain * mc.getExpRate(), true, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -197,18 +199,21 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void giveEventPlayersMeso(int gain, int mapId) {
|
public void giveEventPlayersMeso(int gain, int mapId) {
|
||||||
if(gain == 0) return;
|
if (gain == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
List<Character> players = getPlayerList();
|
List<Character> players = getPlayerList();
|
||||||
|
|
||||||
if(mapId == -1) {
|
if (mapId == -1) {
|
||||||
for(Character mc: players) {
|
for (Character mc : players) {
|
||||||
mc.gainMeso(gain * mc.getMesoRate());
|
mc.gainMeso(gain * mc.getMesoRate());
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
for (Character mc : players) {
|
||||||
|
if (mc.getMapId() == mapId) {
|
||||||
|
mc.gainMeso(gain * mc.getMesoRate());
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
for(Character mc: players) {
|
|
||||||
if(mc.getMapId() == mapId) mc.gainMeso(gain * mc.getMesoRate());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,7 +238,7 @@ public class EventInstanceManager {
|
|||||||
|
|
||||||
wL.lock();
|
wL.lock();
|
||||||
try {
|
try {
|
||||||
if(chars.containsKey(chr.getId())) {
|
if (chars.containsKey(chr.getId())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,7 +258,7 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void exitPlayer(final Character chr) {
|
public void exitPlayer(final Character chr) {
|
||||||
if (chr == null || !chr.isLoggedin()){
|
if (chr == null || !chr.isLoggedin()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,7 +286,7 @@ public class EventInstanceManager {
|
|||||||
timeStarted = System.currentTimeMillis();
|
timeStarted = System.currentTimeMillis();
|
||||||
eventTime = time;
|
eventTime = time;
|
||||||
|
|
||||||
for(Character chr: getPlayers()) {
|
for (Character chr : getPlayers()) {
|
||||||
chr.sendPacket(PacketCreator.getClock((int) (time / 1000)));
|
chr.sendPacket(PacketCreator.getClock((int) (time / 1000)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,7 +374,7 @@ public class EventInstanceManager {
|
|||||||
private void registerExpeditionTeam(Expedition exped, int recruitMap) {
|
private void registerExpeditionTeam(Expedition exped, int recruitMap) {
|
||||||
expedition = exped;
|
expedition = exped;
|
||||||
|
|
||||||
for (Character chr: exped.getActiveMembers()) {
|
for (Character chr : exped.getActiveMembers()) {
|
||||||
if (chr.getMapId() == recruitMap) {
|
if (chr.getMapId() == recruitMap) {
|
||||||
registerPlayer(chr);
|
registerPlayer(chr);
|
||||||
}
|
}
|
||||||
@@ -448,13 +453,15 @@ public class EventInstanceManager {
|
|||||||
public void changedMap(final Character chr, final int mapId) {
|
public void changedMap(final Character chr, final int mapId) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("changedMap", EventInstanceManager.this, chr, mapId);
|
invokeScriptFunction("changedMap", EventInstanceManager.this, chr, mapId);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {
|
||||||
|
} // optional
|
||||||
}
|
}
|
||||||
|
|
||||||
public void afterChangedMap(final Character chr, final int mapId) {
|
public void afterChangedMap(final Character chr, final int mapId) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("afterChangedMap", EventInstanceManager.this, chr, mapId);
|
invokeScriptFunction("afterChangedMap", EventInstanceManager.this, chr, mapId);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {
|
||||||
|
} // optional
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void changedLeader(final PartyCharacter ldr) {
|
public synchronized void changedLeader(final PartyCharacter ldr) {
|
||||||
@@ -474,7 +481,7 @@ public class EventInstanceManager {
|
|||||||
try {
|
try {
|
||||||
mobs.remove(mob);
|
mobs.remove(mob);
|
||||||
|
|
||||||
if(eventStarted) {
|
if (eventStarted) {
|
||||||
scriptResult = 1;
|
scriptResult = 1;
|
||||||
|
|
||||||
if (mobs.isEmpty()) {
|
if (mobs.isEmpty()) {
|
||||||
@@ -505,33 +512,38 @@ public class EventInstanceManager {
|
|||||||
public void friendlyKilled(final Monster mob, final boolean hasKiller) {
|
public void friendlyKilled(final Monster mob, final boolean hasKiller) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("friendlyKilled", mob, EventInstanceManager.this, hasKiller);
|
invokeScriptFunction("friendlyKilled", mob, EventInstanceManager.this, hasKiller);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} //optional
|
} catch (ScriptException | NoSuchMethodException ex) {
|
||||||
|
} //optional
|
||||||
}
|
}
|
||||||
|
|
||||||
public void friendlyDamaged(final Monster mob) {
|
public void friendlyDamaged(final Monster mob) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("friendlyDamaged", EventInstanceManager.this, mob);
|
invokeScriptFunction("friendlyDamaged", EventInstanceManager.this, mob);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {
|
||||||
|
} // optional
|
||||||
}
|
}
|
||||||
|
|
||||||
public void friendlyItemDrop(final Monster mob) {
|
public void friendlyItemDrop(final Monster mob) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("friendlyItemDrop", EventInstanceManager.this, mob);
|
invokeScriptFunction("friendlyItemDrop", EventInstanceManager.this, mob);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {
|
||||||
|
} // optional
|
||||||
}
|
}
|
||||||
|
|
||||||
public void playerKilled(final Character chr) {
|
public void playerKilled(final Character chr) {
|
||||||
ThreadManager.getInstance().newTask(() -> {
|
ThreadManager.getInstance().newTask(() -> {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("playerDead", EventInstanceManager.this, chr);
|
invokeScriptFunction("playerDead", EventInstanceManager.this, chr);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {
|
||||||
|
} // optional
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reviveMonster(final Monster mob) {
|
public void reviveMonster(final Monster mob) {
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("monsterRevive", EventInstanceManager.this, mob);
|
invokeScriptFunction("monsterRevive", EventInstanceManager.this, mob);
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {
|
||||||
|
} // optional
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean revivePlayer(final Character chr) {
|
public boolean revivePlayer(final Character chr) {
|
||||||
@@ -540,7 +552,8 @@ public class EventInstanceManager {
|
|||||||
if (b instanceof Boolean) {
|
if (b instanceof Boolean) {
|
||||||
return (Boolean) b;
|
return (Boolean) b;
|
||||||
}
|
}
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {} // optional
|
} catch (ScriptException | NoSuchMethodException ex) {
|
||||||
|
} // optional
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -584,7 +597,9 @@ public class EventInstanceManager {
|
|||||||
public void dispose() {
|
public void dispose() {
|
||||||
rL.lock();
|
rL.lock();
|
||||||
try {
|
try {
|
||||||
for(Character chr: chars.values()) chr.setEventInstance(null);
|
for (Character chr : chars.values()) {
|
||||||
|
chr.setEventInstance(null);
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
rL.unlock();
|
rL.unlock();
|
||||||
}
|
}
|
||||||
@@ -593,7 +608,9 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void dispose(boolean shutdown) { // should not trigger any event script method after disposed
|
public synchronized void dispose(boolean shutdown) { // should not trigger any event script method after disposed
|
||||||
if(disposed) return;
|
if (disposed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
invokeScriptFunction("dispose", EventInstanceManager.this);
|
invokeScriptFunction("dispose", EventInstanceManager.this);
|
||||||
@@ -606,7 +623,9 @@ public class EventInstanceManager {
|
|||||||
|
|
||||||
wL.lock();
|
wL.lock();
|
||||||
try {
|
try {
|
||||||
for(Character chr: chars.values()) chr.setEventInstance(null);
|
for (Character chr : chars.values()) {
|
||||||
|
chr.setEventInstance(null);
|
||||||
|
}
|
||||||
chars.clear();
|
chars.clear();
|
||||||
mobs.clear();
|
mobs.clear();
|
||||||
ess = null;
|
ess = null;
|
||||||
@@ -614,7 +633,7 @@ public class EventInstanceManager {
|
|||||||
wL.unlock();
|
wL.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(event_schedule != null) {
|
if (event_schedule != null) {
|
||||||
event_schedule.cancel(false);
|
event_schedule.cancel(false);
|
||||||
event_schedule = null;
|
event_schedule = null;
|
||||||
}
|
}
|
||||||
@@ -628,7 +647,9 @@ public class EventInstanceManager {
|
|||||||
|
|
||||||
sL.lock();
|
sL.lock();
|
||||||
try {
|
try {
|
||||||
if(!eventCleared) em.disposeInstance(name);
|
if (!eventCleared) {
|
||||||
|
em.disposeInstance(name);
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
sL.unlock();
|
sL.unlock();
|
||||||
}
|
}
|
||||||
@@ -814,7 +835,7 @@ public class EventInstanceManager {
|
|||||||
if (disposed) {
|
if (disposed) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if(chars == null) {
|
if (chars == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -863,13 +884,13 @@ public class EventInstanceManager {
|
|||||||
|
|
||||||
public void dispatchRaiseQuestMobCount(int mobid, int mapid) {
|
public void dispatchRaiseQuestMobCount(int mobid, int mapid) {
|
||||||
Map<Integer, Character> mapChars = getInstanceMap(mapid).getMapPlayers();
|
Map<Integer, Character> mapChars = getInstanceMap(mapid).getMapPlayers();
|
||||||
if(!mapChars.isEmpty()) {
|
if (!mapChars.isEmpty()) {
|
||||||
List<Character> eventMembers = getPlayers();
|
List<Character> eventMembers = getPlayers();
|
||||||
|
|
||||||
for (Character evChr : eventMembers) {
|
for (Character evChr : eventMembers) {
|
||||||
Character chr = mapChars.get(evChr.getId());
|
Character chr = mapChars.get(evChr.getId());
|
||||||
|
|
||||||
if(chr != null && chr.isLoggedinWorld()) {
|
if (chr != null && chr.isLoggedinWorld()) {
|
||||||
chr.raiseQuestMobCount(mobid);
|
chr.raiseQuestMobCount(mobid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -877,7 +898,7 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Monster getMonster(int mid) {
|
public Monster getMonster(int mid) {
|
||||||
return(LifeFactory.getMonster(mid));
|
return (LifeFactory.getMonster(mid));
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Integer> convertToIntegerList(List<Object> objects) {
|
private List<Integer> convertToIntegerList(List<Object> objects) {
|
||||||
@@ -901,12 +922,16 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Integer getClearStageExp(int stage) { //stage counts from ONE.
|
public Integer getClearStageExp(int stage) { //stage counts from ONE.
|
||||||
if(stage > onMapClearExp.size()) return 0;
|
if (stage > onMapClearExp.size()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return onMapClearExp.get(stage - 1);
|
return onMapClearExp.get(stage - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getClearStageMeso(int stage) { //stage counts from ONE.
|
public Integer getClearStageMeso(int stage) { //stage counts from ONE.
|
||||||
if(stage > onMapClearMeso.size()) return 0;
|
if (stage > onMapClearMeso.size()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return onMapClearMeso.get(stage - 1);
|
return onMapClearMeso.get(stage - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -921,7 +946,7 @@ public class EventInstanceManager {
|
|||||||
private void dropExclusiveItems(Character chr) {
|
private void dropExclusiveItems(Character chr) {
|
||||||
AbstractPlayerInteraction api = chr.getAbstractPlayerInteraction();
|
AbstractPlayerInteraction api = chr.getAbstractPlayerInteraction();
|
||||||
|
|
||||||
for(Integer item: exclusiveItems) {
|
for (Integer item : exclusiveItems) {
|
||||||
api.removeAll(item);
|
api.removeAll(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -952,7 +977,9 @@ public class EventInstanceManager {
|
|||||||
public final void setEventRewards(int eventLevel, List<Object> rwds, List<Object> qtys, int expGiven) {
|
public final void setEventRewards(int eventLevel, List<Object> rwds, List<Object> qtys, int expGiven) {
|
||||||
// fixed EXP will be rewarded at the same time the random item is given
|
// fixed EXP will be rewarded at the same time the random item is given
|
||||||
|
|
||||||
if(eventLevel <= 0 || eventLevel > YamlConfig.config.server.MAX_EVENT_LEVELS) return;
|
if (eventLevel <= 0 || eventLevel > YamlConfig.config.server.MAX_EVENT_LEVELS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
eventLevel--; //event level starts from 1
|
eventLevel--; //event level starts from 1
|
||||||
|
|
||||||
List<Integer> rewardIds = convertToIntegerList(rwds);
|
List<Integer> rewardIds = convertToIntegerList(rwds);
|
||||||
@@ -970,7 +997,9 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private byte getRewardListRequirements(int level) {
|
private byte getRewardListRequirements(int level) {
|
||||||
if(level >= collectionSet.size()) return 0;
|
if (level >= collectionSet.size()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
byte rewardTypes = 0;
|
byte rewardTypes = 0;
|
||||||
List<Integer> list = collectionSet.get(level);
|
List<Integer> list = collectionSet.get(level);
|
||||||
@@ -986,10 +1015,11 @@ public class EventInstanceManager {
|
|||||||
byte listReq = getRewardListRequirements(eventLevel); //gets all types of items present in the event reward list
|
byte listReq = getRewardListRequirements(eventLevel); //gets all types of items present in the event reward list
|
||||||
|
|
||||||
//iterating over all valid inventory types
|
//iterating over all valid inventory types
|
||||||
for(byte type = 1; type <= 5; type++) {
|
for (byte type = 1; type <= 5; type++) {
|
||||||
if((listReq >> type) % 2 == 1 && !player.hasEmptySlot(type))
|
if ((listReq >> type) % 2 == 1 && !player.hasEmptySlot(type)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1006,7 +1036,9 @@ public class EventInstanceManager {
|
|||||||
rL.lock();
|
rL.lock();
|
||||||
try {
|
try {
|
||||||
eventLevel--; //event level starts counting from 1
|
eventLevel--; //event level starts counting from 1
|
||||||
if(eventLevel >= collectionSet.size()) return true;
|
if (eventLevel >= collectionSet.size()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
rewardsSet = collectionSet.get(eventLevel);
|
rewardsSet = collectionSet.get(eventLevel);
|
||||||
rewardsQty = collectionQty.get(eventLevel);
|
rewardsQty = collectionQty.get(eventLevel);
|
||||||
@@ -1016,20 +1048,28 @@ public class EventInstanceManager {
|
|||||||
rL.unlock();
|
rL.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(rewardExp == null) rewardExp = 0;
|
if (rewardExp == null) {
|
||||||
|
rewardExp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(rewardsSet == null || rewardsSet.isEmpty()) {
|
if (rewardsSet == null || rewardsSet.isEmpty()) {
|
||||||
if(rewardExp > 0) player.gainExp(rewardExp);
|
if (rewardExp > 0) {
|
||||||
|
player.gainExp(rewardExp);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!hasRewardSlot(player, eventLevel)) return false;
|
if (!hasRewardSlot(player, eventLevel)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
AbstractPlayerInteraction api = player.getAbstractPlayerInteraction();
|
AbstractPlayerInteraction api = player.getAbstractPlayerInteraction();
|
||||||
int rnd = (int)Math.floor(Math.random() * rewardsSet.size());
|
int rnd = (int) Math.floor(Math.random() * rewardsSet.size());
|
||||||
|
|
||||||
api.gainItem(rewardsSet.get(rnd), rewardsQty.get(rnd).shortValue());
|
api.gainItem(rewardsSet.get(rnd), rewardsQty.get(rnd).shortValue());
|
||||||
if(rewardExp > 0) player.gainExp(rewardExp);
|
if (rewardExp > 0) {
|
||||||
|
player.gainExp(rewardExp);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1084,56 +1124,62 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isEventTeamLeaderOn() {
|
private boolean isEventTeamLeaderOn() {
|
||||||
for(Character chr: getPlayers()) {
|
for (Character chr : getPlayers()) {
|
||||||
if(chr.getId() == getLeaderId()) return true;
|
if (chr.getId() == getLeaderId()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean checkEventTeamLacking(boolean leavingEventMap, int minPlayers) {
|
public final boolean checkEventTeamLacking(boolean leavingEventMap, int minPlayers) {
|
||||||
if(eventCleared && getPlayerCount() > 1) return false;
|
if (eventCleared && getPlayerCount() > 1) {
|
||||||
|
|
||||||
if(!eventCleared && leavingEventMap && !isEventTeamLeaderOn()) return true;
|
|
||||||
if(getPlayerCount() < minPlayers) return true;
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!eventCleared && leavingEventMap && !isEventTeamLeaderOn()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return getPlayerCount() < minPlayers;
|
||||||
|
}
|
||||||
|
|
||||||
public final boolean isExpeditionTeamLackingNow(boolean leavingEventMap, int minPlayers, Character quitter) {
|
public final boolean isExpeditionTeamLackingNow(boolean leavingEventMap, int minPlayers, Character quitter) {
|
||||||
if(eventCleared) {
|
if (eventCleared) {
|
||||||
if(leavingEventMap && getPlayerCount() <= 1) return true;
|
return leavingEventMap && getPlayerCount() <= 1;
|
||||||
} else {
|
} else {
|
||||||
// thanks Conrad for noticing expeditions don't need to have neither the leader nor meet the minimum requirement inside the event
|
// thanks Conrad for noticing expeditions don't need to have neither the leader nor meet the minimum requirement inside the event
|
||||||
if(getPlayerCount() <= 1) return true;
|
return getPlayerCount() <= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean isEventTeamLackingNow(boolean leavingEventMap, int minPlayers, Character quitter) {
|
public final boolean isEventTeamLackingNow(boolean leavingEventMap, int minPlayers, Character quitter) {
|
||||||
if(eventCleared) {
|
if (eventCleared) {
|
||||||
if(leavingEventMap && getPlayerCount() <= 1) return true;
|
return leavingEventMap && getPlayerCount() <= 1;
|
||||||
} else {
|
} else {
|
||||||
if(leavingEventMap && getLeaderId() == quitter.getId()) return true;
|
if (leavingEventMap && getLeaderId() == quitter.getId()) {
|
||||||
if(getPlayerCount() <= minPlayers) return true;
|
return true;
|
||||||
|
}
|
||||||
|
return getPlayerCount() <= minPlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean isEventTeamTogether() {
|
public final boolean isEventTeamTogether() {
|
||||||
rL.lock();
|
rL.lock();
|
||||||
try {
|
try {
|
||||||
if(chars.size() <= 1) return true;
|
if (chars.size() <= 1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
Iterator<Character> iterator = chars.values().iterator();
|
Iterator<Character> iterator = chars.values().iterator();
|
||||||
Character mc = iterator.next();
|
Character mc = iterator.next();
|
||||||
int mapId = mc.getMapId();
|
int mapId = mc.getMapId();
|
||||||
|
|
||||||
for (; iterator.hasNext();) {
|
for (; iterator.hasNext(); ) {
|
||||||
mc = iterator.next();
|
mc = iterator.next();
|
||||||
if(mc.getMapId() != mapId) return false;
|
if (mc.getMapId() != mapId) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -1146,10 +1192,11 @@ public class EventInstanceManager {
|
|||||||
List<Character> players = getPlayerList();
|
List<Character> players = getPlayerList();
|
||||||
|
|
||||||
for (Character chr : players) {
|
for (Character chr : players) {
|
||||||
if(chr.getMapId() == warpFrom)
|
if (chr.getMapId() == warpFrom) {
|
||||||
chr.changeMap(warpTo);
|
chr.changeMap(warpTo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public final void warpEventTeam(int warpTo) {
|
public final void warpEventTeam(int warpTo) {
|
||||||
List<Character> players = getPlayerList();
|
List<Character> players = getPlayerList();
|
||||||
@@ -1163,10 +1210,11 @@ public class EventInstanceManager {
|
|||||||
List<Character> players = getPlayerList();
|
List<Character> players = getPlayerList();
|
||||||
|
|
||||||
for (Character chr : players) {
|
for (Character chr : players) {
|
||||||
if(chr.getMapId() == warpFrom)
|
if (chr.getMapId() == warpFrom) {
|
||||||
chr.changeMap(warpTo, toSp);
|
chr.changeMap(warpTo, toSp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public final void warpEventTeamToMapSpawnPoint(int warpTo, int toSp) {
|
public final void warpEventTeamToMapSpawnPoint(int warpTo, int toSp) {
|
||||||
List<Character> players = getPlayerList();
|
List<Character> players = getPlayerList();
|
||||||
@@ -1219,7 +1267,9 @@ public class EventInstanceManager {
|
|||||||
|
|
||||||
public final void showClearEffect(boolean hasGate) {
|
public final void showClearEffect(boolean hasGate) {
|
||||||
Character leader = getLeader();
|
Character leader = getLeader();
|
||||||
if(leader != null) showClearEffect(hasGate, leader.getMapId());
|
if (leader != null) {
|
||||||
|
showClearEffect(hasGate, leader.getMapId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void showClearEffect(int mapId) {
|
public final void showClearEffect(int mapId) {
|
||||||
@@ -1238,7 +1288,7 @@ public class EventInstanceManager {
|
|||||||
MapleMap map = getMapInstance(mapId);
|
MapleMap map = getMapInstance(mapId);
|
||||||
map.broadcastMessage(PacketCreator.showEffect("quest/party/clear"));
|
map.broadcastMessage(PacketCreator.showEffect("quest/party/clear"));
|
||||||
map.broadcastMessage(PacketCreator.playSound("Party1/Clear"));
|
map.broadcastMessage(PacketCreator.playSound("Party1/Clear"));
|
||||||
if(hasGate) {
|
if (hasGate) {
|
||||||
map.broadcastMessage(PacketCreator.environmentChange(mapObj, newState));
|
map.broadcastMessage(PacketCreator.environmentChange(mapObj, newState));
|
||||||
wL.lock();
|
wL.lock();
|
||||||
try {
|
try {
|
||||||
@@ -1254,14 +1304,14 @@ public class EventInstanceManager {
|
|||||||
|
|
||||||
rL.lock();
|
rL.lock();
|
||||||
try {
|
try {
|
||||||
if(openedGates.containsKey(thisMapId)) {
|
if (openedGates.containsKey(thisMapId)) {
|
||||||
gateData = openedGates.get(thisMapId);
|
gateData = openedGates.get(thisMapId);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
rL.unlock();
|
rL.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gateData != null) {
|
if (gateData != null) {
|
||||||
chr.sendPacket(PacketCreator.environmentChange(gateData.getLeft(), gateData.getRight()));
|
chr.sendPacket(PacketCreator.environmentChange(gateData.getLeft(), gateData.getRight()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1348,10 +1398,12 @@ public class EventInstanceManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean activatedAllReactorsOnMap(MapleMap map, int minReactorId, int maxReactorId) {
|
public boolean activatedAllReactorsOnMap(MapleMap map, int minReactorId, int maxReactorId) {
|
||||||
if(map == null) return true;
|
if (map == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
for(Reactor mr : map.getReactorsByIdRange(minReactorId, maxReactorId)) {
|
for (Reactor mr : map.getReactorsByIdRange(minReactorId, maxReactorId)) {
|
||||||
if(mr.getReactorType() != -1) {
|
if (mr.getReactorType() != -1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ import java.util.logging.Logger;
|
|||||||
//import jdk.nashorn.api.scripting.ScriptUtils;
|
//import jdk.nashorn.api.scripting.ScriptUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Matze
|
* @author Matze
|
||||||
* @author Ronan
|
* @author Ronan
|
||||||
*/
|
*/
|
||||||
@@ -63,22 +62,22 @@ public class EventManager {
|
|||||||
private Channel cserv;
|
private Channel cserv;
|
||||||
private World wserv;
|
private World wserv;
|
||||||
private Server server;
|
private Server server;
|
||||||
private EventScriptScheduler ess = new EventScriptScheduler();
|
private final EventScriptScheduler ess = new EventScriptScheduler();
|
||||||
private Map<String, EventInstanceManager> instances = new HashMap<>();
|
private final Map<String, EventInstanceManager> instances = new HashMap<>();
|
||||||
private Map<String, Integer> instanceLocks = new HashMap<>();
|
private final Map<String, Integer> instanceLocks = new HashMap<>();
|
||||||
private final Queue<Integer> queuedGuilds = new LinkedList<>();
|
private final Queue<Integer> queuedGuilds = new LinkedList<>();
|
||||||
private final Map<Integer, Integer> queuedGuildLeaders = new HashMap<>();
|
private final Map<Integer, Integer> queuedGuildLeaders = new HashMap<>();
|
||||||
private List<Boolean> openedLobbys;
|
private final List<Boolean> openedLobbys;
|
||||||
private List<EventInstanceManager> readyInstances = new LinkedList<>();
|
private final List<EventInstanceManager> readyInstances = new LinkedList<>();
|
||||||
private Integer readyId = 0, onLoadInstances = 0;
|
private Integer readyId = 0, onLoadInstances = 0;
|
||||||
private Properties props = new Properties();
|
private final Properties props = new Properties();
|
||||||
private String name;
|
private final String name;
|
||||||
private MonitoredReentrantLock lobbyLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_LOBBY);
|
private MonitoredReentrantLock lobbyLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_LOBBY);
|
||||||
private MonitoredReentrantLock queueLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_QUEUE);
|
private MonitoredReentrantLock queueLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_QUEUE);
|
||||||
private MonitoredReentrantLock startLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_START);
|
private MonitoredReentrantLock startLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_START);
|
||||||
|
|
||||||
private Set<Integer> playerPermit = new HashSet<>();
|
private final Set<Integer> playerPermit = new HashSet<>();
|
||||||
private Semaphore startSemaphore = new Semaphore(7);
|
private final Semaphore startSemaphore = new Semaphore(7);
|
||||||
|
|
||||||
private static final int maxLobbys = 8; // an event manager holds up to this amount of concurrent lobbys
|
private static final int maxLobbys = 8; // an event manager holds up to this amount of concurrent lobbys
|
||||||
|
|
||||||
@@ -90,7 +89,9 @@ public class EventManager {
|
|||||||
this.name = name;
|
this.name = name;
|
||||||
|
|
||||||
this.openedLobbys = new ArrayList<>();
|
this.openedLobbys = new ArrayList<>();
|
||||||
for(int i = 0; i < maxLobbys; i++) this.openedLobbys.add(false);
|
for (int i = 0; i < maxLobbys; i++) {
|
||||||
|
this.openedLobbys.add(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isDisposed() {
|
private boolean isDisposed() {
|
||||||
@@ -107,12 +108,12 @@ public class EventManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Collection<EventInstanceManager> eimList;
|
Collection<EventInstanceManager> eimList;
|
||||||
synchronized(instances) {
|
synchronized (instances) {
|
||||||
eimList = getInstances();
|
eimList = getInstances();
|
||||||
instances.clear();
|
instances.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
for(EventInstanceManager eim : eimList) {
|
for (EventInstanceManager eim : eimList) {
|
||||||
eim.dispose(true);
|
eim.dispose(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +127,7 @@ public class EventManager {
|
|||||||
queueLock.unlock();
|
queueLock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
for(EventInstanceManager eim : readyEims) {
|
for (EventInstanceManager eim : readyEims) {
|
||||||
eim.dispose(true);
|
eim.dispose(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,7 +229,7 @@ public class EventManager {
|
|||||||
public EventInstanceManager newInstance(String name) throws EventInstanceInProgressException {
|
public EventInstanceManager newInstance(String name) throws EventInstanceInProgressException {
|
||||||
EventInstanceManager ret = getReadyInstance();
|
EventInstanceManager ret = getReadyInstance();
|
||||||
|
|
||||||
if(ret == null) {
|
if (ret == null) {
|
||||||
ret = new EventInstanceManager(this, name);
|
ret = new EventInstanceManager(this, name);
|
||||||
} else {
|
} else {
|
||||||
ret.setName(name);
|
ret.setName(name);
|
||||||
@@ -305,7 +306,7 @@ public class EventManager {
|
|||||||
lobbyId = maxLobbys - 1;
|
lobbyId = maxLobbys - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!openedLobbys.get(lobbyId)) {
|
if (!openedLobbys.get(lobbyId)) {
|
||||||
openedLobbys.set(lobbyId, true);
|
openedLobbys.set(lobbyId, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -318,10 +319,14 @@ public class EventManager {
|
|||||||
|
|
||||||
private void freeLobbyInstance(String lobbyName) {
|
private void freeLobbyInstance(String lobbyName) {
|
||||||
Integer i = instanceLocks.get(lobbyName);
|
Integer i = instanceLocks.get(lobbyName);
|
||||||
if(i == null) return;
|
if (i == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
instanceLocks.remove(lobbyName);
|
instanceLocks.remove(lobbyName);
|
||||||
if(i > -1) setLockLobby(i, false);
|
if (i > -1) {
|
||||||
|
setLockLobby(i, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
@@ -347,7 +352,7 @@ public class EventManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(true) {
|
while (true) {
|
||||||
Throwable t = a;
|
Throwable t = a;
|
||||||
a = a.getCause();
|
a = a.getCause();
|
||||||
|
|
||||||
@@ -380,21 +385,26 @@ public class EventManager {
|
|||||||
|
|
||||||
//Expedition method: starts an expedition
|
//Expedition method: starts an expedition
|
||||||
public boolean startInstance(int lobbyId, Expedition exped, Character leader) {
|
public boolean startInstance(int lobbyId, Expedition exped, Character leader) {
|
||||||
if (this.isDisposed()) return false;
|
if (this.isDisposed()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
if (!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
||||||
playerPermit.add(leader.getId());
|
playerPermit.add(leader.getId());
|
||||||
|
|
||||||
startLock.lock();
|
startLock.lock();
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
if(lobbyId == -1) {
|
if (lobbyId == -1) {
|
||||||
lobbyId = availableLobbyInstance();
|
lobbyId = availableLobbyInstance();
|
||||||
if(lobbyId == -1) return false;
|
if (lobbyId == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!startLobbyInstance(lobbyId)) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if(!startLobbyInstance(lobbyId)) return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EventInstanceManager eim;
|
EventInstanceManager eim;
|
||||||
@@ -407,7 +417,7 @@ public class EventManager {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lobbyId > -1) {
|
if (lobbyId > -1) {
|
||||||
setLockLobby(lobbyId, false);
|
setLockLobby(lobbyId, false);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -430,7 +440,7 @@ public class EventManager {
|
|||||||
startSemaphore.release();
|
startSemaphore.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(InterruptedException ie) {
|
} catch (InterruptedException ie) {
|
||||||
playerPermit.remove(leader.getId());
|
playerPermit.remove(leader.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -447,23 +457,24 @@ public class EventManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean startInstance(int lobbyId, Character chr, Character leader, int difficulty) {
|
public boolean startInstance(int lobbyId, Character chr, Character leader, int difficulty) {
|
||||||
if (this.isDisposed()) return false;
|
if (this.isDisposed()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
if (!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
||||||
playerPermit.add(leader.getId());
|
playerPermit.add(leader.getId());
|
||||||
|
|
||||||
startLock.lock();
|
startLock.lock();
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
if(lobbyId == -1) {
|
if (lobbyId == -1) {
|
||||||
lobbyId = availableLobbyInstance();
|
lobbyId = availableLobbyInstance();
|
||||||
if(lobbyId == -1) {
|
if (lobbyId == -1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
if (!startLobbyInstance(lobbyId)) {
|
||||||
if(!startLobbyInstance(lobbyId)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -478,14 +489,16 @@ public class EventManager {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lobbyId > -1) {
|
if (lobbyId > -1) {
|
||||||
setLockLobby(lobbyId, false);
|
setLockLobby(lobbyId, false);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
eim.setLeader(leader);
|
eim.setLeader(leader);
|
||||||
|
|
||||||
if(chr != null) eim.registerPlayer(chr);
|
if (chr != null) {
|
||||||
|
eim.registerPlayer(chr);
|
||||||
|
}
|
||||||
|
|
||||||
eim.startEvent();
|
eim.startEvent();
|
||||||
} catch (ScriptException | NoSuchMethodException ex) {
|
} catch (ScriptException | NoSuchMethodException ex) {
|
||||||
@@ -499,7 +512,7 @@ public class EventManager {
|
|||||||
startSemaphore.release();
|
startSemaphore.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(InterruptedException ie) {
|
} catch (InterruptedException ie) {
|
||||||
playerPermit.remove(leader.getId());
|
playerPermit.remove(leader.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -516,21 +529,26 @@ public class EventManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean startInstance(int lobbyId, Party party, MapleMap map, Character leader) {
|
public boolean startInstance(int lobbyId, Party party, MapleMap map, Character leader) {
|
||||||
if (this.isDisposed()) return false;
|
if (this.isDisposed()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
if (!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
||||||
playerPermit.add(leader.getId());
|
playerPermit.add(leader.getId());
|
||||||
|
|
||||||
startLock.lock();
|
startLock.lock();
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
if(lobbyId == -1) {
|
if (lobbyId == -1) {
|
||||||
lobbyId = availableLobbyInstance();
|
lobbyId = availableLobbyInstance();
|
||||||
if(lobbyId == -1) return false;
|
if (lobbyId == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!startLobbyInstance(lobbyId)) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if(!startLobbyInstance(lobbyId)) return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EventInstanceManager eim;
|
EventInstanceManager eim;
|
||||||
@@ -543,7 +561,7 @@ public class EventManager {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lobbyId > -1) {
|
if (lobbyId > -1) {
|
||||||
setLockLobby(lobbyId, false);
|
setLockLobby(lobbyId, false);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -566,7 +584,7 @@ public class EventManager {
|
|||||||
startSemaphore.release();
|
startSemaphore.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(InterruptedException ie) {
|
} catch (InterruptedException ie) {
|
||||||
playerPermit.remove(leader.getId());
|
playerPermit.remove(leader.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -583,21 +601,26 @@ public class EventManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean startInstance(int lobbyId, Party party, MapleMap map, int difficulty, Character leader) {
|
public boolean startInstance(int lobbyId, Party party, MapleMap map, int difficulty, Character leader) {
|
||||||
if (this.isDisposed()) return false;
|
if (this.isDisposed()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
if (!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
||||||
playerPermit.add(leader.getId());
|
playerPermit.add(leader.getId());
|
||||||
|
|
||||||
startLock.lock();
|
startLock.lock();
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
if(lobbyId == -1) {
|
if (lobbyId == -1) {
|
||||||
lobbyId = availableLobbyInstance();
|
lobbyId = availableLobbyInstance();
|
||||||
if(lobbyId == -1) return false;
|
if (lobbyId == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!startLobbyInstance(lobbyId)) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if(!startLobbyInstance(lobbyId)) return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EventInstanceManager eim;
|
EventInstanceManager eim;
|
||||||
@@ -610,7 +633,7 @@ public class EventManager {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lobbyId > -1) {
|
if (lobbyId > -1) {
|
||||||
setLockLobby(lobbyId, false);
|
setLockLobby(lobbyId, false);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -633,7 +656,7 @@ public class EventManager {
|
|||||||
startSemaphore.release();
|
startSemaphore.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(InterruptedException ie) {
|
} catch (InterruptedException ie) {
|
||||||
playerPermit.remove(leader.getId());
|
playerPermit.remove(leader.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -654,25 +677,30 @@ public class EventManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean startInstance(int lobbyId, EventInstanceManager eim, String ldr, Character leader) {
|
public boolean startInstance(int lobbyId, EventInstanceManager eim, String ldr, Character leader) {
|
||||||
if (this.isDisposed()) return false;
|
if (this.isDisposed()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
if (!playerPermit.contains(leader.getId()) && startSemaphore.tryAcquire(7777, TimeUnit.MILLISECONDS)) {
|
||||||
playerPermit.add(leader.getId());
|
playerPermit.add(leader.getId());
|
||||||
|
|
||||||
startLock.lock();
|
startLock.lock();
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
if(lobbyId == -1) {
|
if (lobbyId == -1) {
|
||||||
lobbyId = availableLobbyInstance();
|
lobbyId = availableLobbyInstance();
|
||||||
if(lobbyId == -1) return false;
|
if (lobbyId == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!startLobbyInstance(lobbyId)) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if(!startLobbyInstance(lobbyId)) return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(eim == null) {
|
if (eim == null) {
|
||||||
if(lobbyId > -1) {
|
if (lobbyId > -1) {
|
||||||
setLockLobby(lobbyId, false);
|
setLockLobby(lobbyId, false);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -695,7 +723,7 @@ public class EventManager {
|
|||||||
startSemaphore.release();
|
startSemaphore.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(InterruptedException ie) {
|
} catch (InterruptedException ie) {
|
||||||
playerPermit.remove(leader.getId());
|
playerPermit.remove(leader.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -738,7 +766,7 @@ public class EventManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Monster getMonster(int mid) {
|
public Monster getMonster(int mid) {
|
||||||
return(LifeFactory.getMonster(mid));
|
return (LifeFactory.getMonster(mid));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void exportReadyGuild(Integer guildId) {
|
private void exportReadyGuild(Integer guildId) {
|
||||||
@@ -759,43 +787,48 @@ public class EventManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<Integer> getNextGuildQueue() {
|
private List<Integer> getNextGuildQueue() {
|
||||||
synchronized(queuedGuilds) {
|
synchronized (queuedGuilds) {
|
||||||
Integer guildId = queuedGuilds.poll();
|
Integer guildId = queuedGuilds.poll();
|
||||||
if(guildId == null) return null;
|
if (guildId == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
wserv.removeGuildQueued(guildId);
|
wserv.removeGuildQueued(guildId);
|
||||||
Integer leaderId = queuedGuildLeaders.remove(guildId);
|
Integer leaderId = queuedGuildLeaders.remove(guildId);
|
||||||
|
|
||||||
int place = 1;
|
int place = 1;
|
||||||
for(Integer i: queuedGuilds) {
|
for (Integer i : queuedGuilds) {
|
||||||
exportMovedQueueToGuild(i, place);
|
exportMovedQueueToGuild(i, place);
|
||||||
place++;
|
place++;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Integer> list = new ArrayList<>(2);
|
List<Integer> list = new ArrayList<>(2);
|
||||||
list.add(guildId); list.add(leaderId);
|
list.add(guildId);
|
||||||
|
list.add(leaderId);
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isQueueFull() {
|
public boolean isQueueFull() {
|
||||||
synchronized(queuedGuilds) {
|
synchronized (queuedGuilds) {
|
||||||
return queuedGuilds.size() >= YamlConfig.config.server.EVENT_MAX_GUILD_QUEUE;
|
return queuedGuilds.size() >= YamlConfig.config.server.EVENT_MAX_GUILD_QUEUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getQueueSize() {
|
public int getQueueSize() {
|
||||||
synchronized(queuedGuilds) {
|
synchronized (queuedGuilds) {
|
||||||
return queuedGuilds.size();
|
return queuedGuilds.size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte addGuildToQueue(Integer guildId, Integer leaderId) {
|
public byte addGuildToQueue(Integer guildId, Integer leaderId) {
|
||||||
if(wserv.isGuildQueued(guildId)) return -1;
|
if (wserv.isGuildQueued(guildId)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if(!isQueueFull()) {
|
if (!isQueueFull()) {
|
||||||
boolean canStartAhead;
|
boolean canStartAhead;
|
||||||
synchronized(queuedGuilds) {
|
synchronized (queuedGuilds) {
|
||||||
canStartAhead = queuedGuilds.isEmpty();
|
canStartAhead = queuedGuilds.isEmpty();
|
||||||
|
|
||||||
queuedGuilds.add(guildId);
|
queuedGuilds.add(guildId);
|
||||||
@@ -806,9 +839,9 @@ public class EventManager {
|
|||||||
exportMovedQueueToGuild(guildId, place);
|
exportMovedQueueToGuild(guildId, place);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(canStartAhead) {
|
if (canStartAhead) {
|
||||||
if(!attemptStartGuildInstance()) {
|
if (!attemptStartGuildInstance()) {
|
||||||
synchronized(queuedGuilds) {
|
synchronized (queuedGuilds) {
|
||||||
queuedGuilds.add(guildId);
|
queuedGuilds.add(guildId);
|
||||||
wserv.putGuildQueued(guildId);
|
wserv.putGuildQueued(guildId);
|
||||||
queuedGuildLeaders.put(guildId, leaderId);
|
queuedGuildLeaders.put(guildId, leaderId);
|
||||||
@@ -827,16 +860,16 @@ public class EventManager {
|
|||||||
public boolean attemptStartGuildInstance() {
|
public boolean attemptStartGuildInstance() {
|
||||||
Character chr = null;
|
Character chr = null;
|
||||||
List<Integer> guildInstance = null;
|
List<Integer> guildInstance = null;
|
||||||
while(chr == null) {
|
while (chr == null) {
|
||||||
guildInstance = getNextGuildQueue();
|
guildInstance = getNextGuildQueue();
|
||||||
if(guildInstance == null) {
|
if (guildInstance == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
chr = cserv.getPlayerStorage().getCharacterById(guildInstance.get(1));
|
chr = cserv.getPlayerStorage().getCharacterById(guildInstance.get(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(startInstance(chr)) {
|
if (startInstance(chr)) {
|
||||||
exportReadyGuild(guildInstance.get(0));
|
exportReadyGuild(guildInstance.get(0));
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@@ -871,7 +904,7 @@ public class EventManager {
|
|||||||
private EventInstanceManager getReadyInstance() {
|
private EventInstanceManager getReadyInstance() {
|
||||||
queueLock.lock();
|
queueLock.lock();
|
||||||
try {
|
try {
|
||||||
if(readyInstances.isEmpty()) {
|
if (readyInstances.isEmpty()) {
|
||||||
fillEimQueue();
|
fillEimQueue();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -889,7 +922,9 @@ public class EventManager {
|
|||||||
int nextEventId;
|
int nextEventId;
|
||||||
queueLock.lock();
|
queueLock.lock();
|
||||||
try {
|
try {
|
||||||
if (this.isDisposed() || readyInstances.size() + onLoadInstances >= Math.ceil((double)maxLobbys / 3.0)) return;
|
if (this.isDisposed() || readyInstances.size() + onLoadInstances >= Math.ceil((double) maxLobbys / 3.0)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
onLoadInstances++;
|
onLoadInstances++;
|
||||||
nextEventId = readyId;
|
nextEventId = readyId;
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ package scripting.event;
|
|||||||
import scripting.event.scheduler.EventScriptScheduler;
|
import scripting.event.scheduler.EventScriptScheduler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Ronan
|
* @author Ronan
|
||||||
*/
|
*/
|
||||||
public class EventScheduledFuture {
|
public class EventScheduledFuture {
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import java.util.logging.Level;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Matze
|
* @author Matze
|
||||||
*/
|
*/
|
||||||
public class EventScriptManager extends AbstractScriptManager {
|
public class EventScriptManager extends AbstractScriptManager {
|
||||||
@@ -51,6 +50,7 @@ public class EventScriptManager extends AbstractScriptManager {
|
|||||||
this.iv = iv;
|
this.iv = iv;
|
||||||
this.em = em;
|
this.em = em;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Invocable iv;
|
public Invocable iv;
|
||||||
public EventManager em;
|
public EventManager em;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,18 +36,17 @@ import java.util.Map.Entry;
|
|||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Ronan
|
* @author Ronan
|
||||||
*/
|
*/
|
||||||
public class EventScriptScheduler {
|
public class EventScriptScheduler {
|
||||||
|
|
||||||
private boolean disposed = false;
|
private boolean disposed = false;
|
||||||
private int idleProcs = 0;
|
private int idleProcs = 0;
|
||||||
private Map<Runnable, Long> registeredEntries = new HashMap<>();
|
private final Map<Runnable, Long> registeredEntries = new HashMap<>();
|
||||||
|
|
||||||
private ScheduledFuture<?> schedulerTask = null;
|
private ScheduledFuture<?> schedulerTask = null;
|
||||||
private MonitoredReentrantLock schedulerLock;
|
private MonitoredReentrantLock schedulerLock;
|
||||||
private Runnable monitorTask = () -> runBaseSchedule();
|
private final Runnable monitorTask = () -> runBaseSchedule();
|
||||||
|
|
||||||
public EventScriptScheduler() {
|
public EventScriptScheduler() {
|
||||||
schedulerLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_SCHDL, true);
|
schedulerLock = MonitoredReentrantLockFactory.createLock(MonitoredLockType.EM_SCHDL, true);
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import server.ItemInformationProvider.ScriptedItem;
|
|||||||
|
|
||||||
public class ItemScriptManager {
|
public class ItemScriptManager {
|
||||||
|
|
||||||
private static ItemScriptManager instance = new ItemScriptManager();
|
private static final ItemScriptManager instance = new ItemScriptManager();
|
||||||
|
|
||||||
public static ItemScriptManager getInstance() {
|
public static ItemScriptManager getInstance() {
|
||||||
return instance;
|
return instance;
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import client.Client;
|
|||||||
import scripting.AbstractPlayerInteraction;
|
import scripting.AbstractPlayerInteraction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author kevintjuh93
|
* @author kevintjuh93
|
||||||
*/
|
*/
|
||||||
public class ItemScriptMethods extends AbstractPlayerInteraction {
|
public class ItemScriptMethods extends AbstractPlayerInteraction {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ import tools.PacketCreator;
|
|||||||
|
|
||||||
public class MapScriptMethods extends AbstractPlayerInteraction {
|
public class MapScriptMethods extends AbstractPlayerInteraction {
|
||||||
|
|
||||||
private String rewardstring = " title has been rewarded. Please see NPC Dalair to receive your Medal.";
|
private final String rewardstring = " title has been rewarded. Please see NPC Dalair to receive your Medal.";
|
||||||
|
|
||||||
public MapScriptMethods(Client c) {
|
public MapScriptMethods(Client c) {
|
||||||
super(c);
|
super(c);
|
||||||
|
|||||||
@@ -70,19 +70,18 @@ import java.util.List;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Matze
|
* @author Matze
|
||||||
*/
|
*/
|
||||||
public class NPCConversationManager extends AbstractPlayerInteraction {
|
public class NPCConversationManager extends AbstractPlayerInteraction {
|
||||||
|
|
||||||
private int npc;
|
private final int npc;
|
||||||
private int npcOid;
|
private int npcOid;
|
||||||
private String scriptName;
|
private String scriptName;
|
||||||
private String getText;
|
private String getText;
|
||||||
private boolean itemScript;
|
private boolean itemScript;
|
||||||
private List<PartyCharacter> otherParty;
|
private List<PartyCharacter> otherParty;
|
||||||
|
|
||||||
private Map<Integer, String> npcDefaultTalks = new HashMap<>();
|
private final Map<Integer, String> npcDefaultTalks = new HashMap<>();
|
||||||
|
|
||||||
private String getDefaultTalk(int npcid) {
|
private String getDefaultTalk(int npcid) {
|
||||||
String talk = npcDefaultTalks.get(npcid);
|
String talk = npcDefaultTalks.get(npcid);
|
||||||
@@ -315,10 +314,10 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public PlayerNPC getPlayerNPCByScriptid(int scriptId) {
|
public PlayerNPC getPlayerNPCByScriptid(int scriptId) {
|
||||||
for(MapObject pnpcObj : getPlayer().getMap().getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapObjectType.PLAYER_NPC))) {
|
for (MapObject pnpcObj : getPlayer().getMap().getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapObjectType.PLAYER_NPC))) {
|
||||||
PlayerNPC pn = (PlayerNPC) pnpcObj;
|
PlayerNPC pn = (PlayerNPC) pnpcObj;
|
||||||
|
|
||||||
if(pn.getScriptId() == scriptId) {
|
if (pn.getScriptId() == scriptId) {
|
||||||
return pn;
|
return pn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -338,7 +337,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
|
|||||||
|
|
||||||
public void gainCloseness(int closeness) {
|
public void gainCloseness(int closeness) {
|
||||||
for (Pet pet : getPlayer().getPets()) {
|
for (Pet pet : getPlayer().getPets()) {
|
||||||
if(pet != null) {
|
if (pet != null) {
|
||||||
pet.gainClosenessFullness(getPlayer(), closeness, 0, 0);
|
pet.gainClosenessFullness(getPlayer(), closeness, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -411,7 +410,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
|
|||||||
|
|
||||||
LogHelper.logGacha(getPlayer(), item.getId(), map);
|
LogHelper.logGacha(getPlayer(), item.getId(), map);
|
||||||
|
|
||||||
if (item.getTier() > 0){ //Uncommon and Rare
|
if (item.getTier() > 0) { //Uncommon and Rare
|
||||||
Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.gachaponMessage(itemGained, map, getPlayer()));
|
Server.getInstance().broadcastMessage(c.getWorld(), PacketCreator.gachaponMessage(itemGained, map, getPlayer()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -455,11 +454,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (getPlayer().getMerchantMeso() == 0) {
|
return getPlayer().getMerchantMeso() != 0;
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showFredrick() {
|
public void showFredrick() {
|
||||||
@@ -654,17 +649,11 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
|
|||||||
if (!c.getChannelServer().getMapFactory().getMap(980000101 + field * 100).getAllPlayer().isEmpty()) {
|
if (!c.getChannelServer().getMapFactory().getMap(980000101 + field * 100).getAllPlayer().isEmpty()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!c.getChannelServer().getMapFactory().getMap(980000102 + field * 100).getAllPlayer().isEmpty()) {
|
return !c.getChannelServer().getMapFactory().getMap(980000102 + field * 100).getAllPlayer().isEmpty();
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean fieldLobbied(int field) {
|
public boolean fieldLobbied(int field) {
|
||||||
if (!c.getChannelServer().getMapFactory().getMap(980000100 + field * 100).getAllPlayer().isEmpty()) {
|
return !c.getChannelServer().getMapFactory().getMap(980000100 + field * 100).getAllPlayer().isEmpty();
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cpqLobby(int field) {
|
public void cpqLobby(int field) {
|
||||||
@@ -903,17 +892,11 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
|
|||||||
if (!c.getChannelServer().getMapFactory().getMap(980031100 + field * 1000).getAllPlayer().isEmpty()) {
|
if (!c.getChannelServer().getMapFactory().getMap(980031100 + field * 1000).getAllPlayer().isEmpty()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!c.getChannelServer().getMapFactory().getMap(980031200 + field * 1000).getAllPlayer().isEmpty()) {
|
return !c.getChannelServer().getMapFactory().getMap(980031200 + field * 1000).getAllPlayer().isEmpty();
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean fieldLobbied2(int field) {
|
public boolean fieldLobbied2(int field) {
|
||||||
if (!c.getChannelServer().getMapFactory().getMap(980031000 + field * 1000).getAllPlayer().isEmpty()) {
|
return !c.getChannelServer().getMapFactory().getMap(980031000 + field * 1000).getAllPlayer().isEmpty();
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cpqLobby2(int field) {
|
public void cpqLobby2(int field) {
|
||||||
@@ -1067,7 +1050,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
|
|||||||
public void sendMarriageWishlist(boolean groom) {
|
public void sendMarriageWishlist(boolean groom) {
|
||||||
Character player = this.getPlayer();
|
Character player = this.getPlayer();
|
||||||
Marriage marriage = player.getMarriageInstance();
|
Marriage marriage = player.getMarriageInstance();
|
||||||
if(marriage != null) {
|
if (marriage != null) {
|
||||||
int cid = marriage.getIntProperty(groom ? "groomId" : "brideId");
|
int cid = marriage.getIntProperty(groom ? "groomId" : "brideId");
|
||||||
Character chr = marriage.getPlayerById(cid);
|
Character chr = marriage.getPlayerById(cid);
|
||||||
if (chr != null) {
|
if (chr != null) {
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Matze
|
* @author Matze
|
||||||
*/
|
*/
|
||||||
public class NPCScriptManager extends AbstractScriptManager {
|
public class NPCScriptManager extends AbstractScriptManager {
|
||||||
|
|||||||
@@ -29,12 +29,11 @@ import server.quest.actions.ExpAction;
|
|||||||
import server.quest.actions.MesoAction;
|
import server.quest.actions.MesoAction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author RMZero213
|
* @author RMZero213
|
||||||
*/
|
*/
|
||||||
public class QuestActionManager extends NPCConversationManager {
|
public class QuestActionManager extends NPCConversationManager {
|
||||||
private boolean start; // this is if the script in question is start or end
|
private final boolean start; // this is if the script in question is start or end
|
||||||
private int quest;
|
private final int quest;
|
||||||
|
|
||||||
public QuestActionManager(Client c, int quest, int npc, boolean start) {
|
public QuestActionManager(Client c, int quest, int npc, boolean start) {
|
||||||
super(c, npc, null);
|
super(c, npc, null);
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author RMZero213
|
* @author RMZero213
|
||||||
*/
|
*/
|
||||||
public class QuestScriptManager extends AbstractScriptManager {
|
public class QuestScriptManager extends AbstractScriptManager {
|
||||||
|
|||||||
@@ -74,11 +74,11 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
private static void sortDropEntries(List<ReactorDropEntry> from, List<ReactorDropEntry> item, List<ReactorDropEntry> visibleQuest, List<ReactorDropEntry> otherQuest, Character chr) {
|
private static void sortDropEntries(List<ReactorDropEntry> from, List<ReactorDropEntry> item, List<ReactorDropEntry> visibleQuest, List<ReactorDropEntry> otherQuest, Character chr) {
|
||||||
ItemInformationProvider ii = ItemInformationProvider.getInstance();
|
ItemInformationProvider ii = ItemInformationProvider.getInstance();
|
||||||
|
|
||||||
for(ReactorDropEntry mde : from) {
|
for (ReactorDropEntry mde : from) {
|
||||||
if(!ii.isQuestItem(mde.itemId)) {
|
if (!ii.isQuestItem(mde.itemId)) {
|
||||||
item.add(mde);
|
item.add(mde);
|
||||||
} else {
|
} else {
|
||||||
if(chr.needQuestItem(mde.questid, mde.itemId)) {
|
if (chr.needQuestItem(mde.questid, mde.itemId)) {
|
||||||
visibleQuest.add(mde);
|
visibleQuest.add(mde);
|
||||||
} else {
|
} else {
|
||||||
otherQuest.add(mde);
|
otherQuest.add(mde);
|
||||||
@@ -128,7 +128,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void sprayItems(boolean meso, int mesoChance, int minMeso, int maxMeso, int minItems) {
|
public void sprayItems(boolean meso, int mesoChance, int minMeso, int maxMeso, int minItems) {
|
||||||
sprayItems((int)reactor.getPosition().getX(), (int)reactor.getPosition().getY(), meso, mesoChance, minMeso, maxMeso, minItems);
|
sprayItems((int) reactor.getPosition().getX(), (int) reactor.getPosition().getY(), meso, mesoChance, minMeso, maxMeso, minItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sprayItems(int posX, int posY, boolean meso, int mesoChance, int minMeso, int maxMeso, int minItems) {
|
public void sprayItems(int posX, int posY, boolean meso, int mesoChance, int minMeso, int maxMeso, int minItems) {
|
||||||
@@ -144,7 +144,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void dropItems(boolean meso, int mesoChance, int minMeso, int maxMeso, int minItems) {
|
public void dropItems(boolean meso, int mesoChance, int minMeso, int maxMeso, int minItems) {
|
||||||
dropItems((int)reactor.getPosition().getX(), (int)reactor.getPosition().getY(), meso, mesoChance, minMeso, maxMeso, minItems);
|
dropItems((int) reactor.getPosition().getX(), (int) reactor.getPosition().getY(), meso, mesoChance, minMeso, maxMeso, minItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dropItems(int posX, int posY, boolean meso, int mesoChance, int minMeso, int maxMeso, int minItems) {
|
public void dropItems(int posX, int posY, boolean meso, int mesoChance, int minMeso, int maxMeso, int minItems) {
|
||||||
@@ -153,13 +153,17 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
|
|
||||||
public void dropItems(boolean delayed, int posX, int posY, boolean meso, int mesoChance, final int minMeso, final int maxMeso, int minItems) {
|
public void dropItems(boolean delayed, int posX, int posY, boolean meso, int mesoChance, final int minMeso, final int maxMeso, int minItems) {
|
||||||
Character chr = c.getPlayer();
|
Character chr = c.getPlayer();
|
||||||
if(chr == null) return;
|
if (chr == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
List<ReactorDropEntry> items = assembleReactorDropEntries(chr, generateDropList(getDropChances(), chr.getDropRate(), meso, mesoChance, minItems));
|
List<ReactorDropEntry> items = assembleReactorDropEntries(chr, generateDropList(getDropChances(), chr.getDropRate(), meso, mesoChance, minItems));
|
||||||
if(items.size() % 2 == 0) posX -= 12;
|
if (items.size() % 2 == 0) {
|
||||||
|
posX -= 12;
|
||||||
|
}
|
||||||
final Point dropPos = new Point(posX, posY);
|
final Point dropPos = new Point(posX, posY);
|
||||||
|
|
||||||
if(!delayed) {
|
if (!delayed) {
|
||||||
ItemInformationProvider ii = ItemInformationProvider.getInstance();
|
ItemInformationProvider ii = ItemInformationProvider.getInstance();
|
||||||
|
|
||||||
byte p = 1;
|
byte p = 1;
|
||||||
@@ -192,7 +196,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
dropPos.x -= (12 * items.size());
|
dropPos.x -= (12 * items.size());
|
||||||
|
|
||||||
sprayTask = TimerManager.getInstance().register(() -> {
|
sprayTask = TimerManager.getInstance().register(() -> {
|
||||||
if(dropItems.isEmpty()) {
|
if (dropItems.isEmpty()) {
|
||||||
sprayTask.cancel(false);
|
sprayTask.cancel(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -231,7 +235,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
items.add(new ReactorDropEntry(0, mesoChance, -1));
|
items.add(new ReactorDropEntry(0, mesoChance, -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
for(ReactorDropEntry mde : drops) {
|
for (ReactorDropEntry mde : drops) {
|
||||||
if (Math.random() < (dropRate / (double) mde.chance)) {
|
if (Math.random() < (dropRate / (double) mde.chance)) {
|
||||||
items.add(mde);
|
items.add(mde);
|
||||||
}
|
}
|
||||||
@@ -282,17 +286,17 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
|
|
||||||
public void hitMonsterWithReactor(int id, int hitsToKill) { // until someone comes with a better solution, why not?
|
public void hitMonsterWithReactor(int id, int hitsToKill) { // until someone comes with a better solution, why not?
|
||||||
int customTime = YamlConfig.config.server.MOB_REACTOR_REFRESH_TIME;
|
int customTime = YamlConfig.config.server.MOB_REACTOR_REFRESH_TIME;
|
||||||
if(customTime > 0) {
|
if (customTime > 0) {
|
||||||
reactor.setDelay(customTime);
|
reactor.setDelay(customTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
MapleMap map = reactor.getMap();
|
MapleMap map = reactor.getMap();
|
||||||
Monster mm = map.getMonsterById(id);
|
Monster mm = map.getMonsterById(id);
|
||||||
if(mm != null) {
|
if (mm != null) {
|
||||||
int damage = (int)Math.ceil(mm.getMaxHp() / hitsToKill);
|
int damage = (int) Math.ceil(mm.getMaxHp() / hitsToKill);
|
||||||
Character chr = this.getPlayer();
|
Character chr = this.getPlayer();
|
||||||
|
|
||||||
if(chr != null) {
|
if (chr != null) {
|
||||||
map.damageMonster(chr, mm, damage);
|
map.damageMonster(chr, mm, damage);
|
||||||
map.broadcastMessage(PacketCreator.damageMonster(mm.getObjectId(), damage));
|
map.broadcastMessage(PacketCreator.damageMonster(mm.getObjectId(), damage));
|
||||||
}
|
}
|
||||||
@@ -327,7 +331,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
|||||||
final MCSkill skil = CarnivalFactory.getInstance().getGuardian(num);
|
final MCSkill skil = CarnivalFactory.getInstance().getGuardian(num);
|
||||||
if (skil != null) {
|
if (skil != null) {
|
||||||
for (Monster mons : getMap().getAllMonsters()) {
|
for (Monster mons : getMap().getAllMonsters()) {
|
||||||
if(mons.getTeam() == team) {
|
if (mons.getTeam() == team) {
|
||||||
mons.dispelSkill(skil.getSkill());
|
mons.dispelSkill(skil.getSkill());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ public class ReactorScriptManager extends AbstractScriptManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
iv.invokeFunction("hit");
|
iv.invokeFunction("hit");
|
||||||
} catch (final NoSuchMethodException e) {} //do nothing, hit is OPTIONAL
|
} catch (final NoSuchMethodException e) {
|
||||||
|
} //do nothing, hit is OPTIONAL
|
||||||
|
|
||||||
catch (final ScriptException | NullPointerException e) {
|
catch (final ScriptException | NullPointerException e) {
|
||||||
FilePrinter.printError(FilePrinter.REACTOR + reactor.getId() + ".txt", e);
|
FilePrinter.printError(FilePrinter.REACTOR + reactor.getId() + ".txt", e);
|
||||||
|
|||||||
Reference in New Issue
Block a user