Compare commits

..

2 Commits

Author SHA1 Message Date
FatBoy f0bef72fde NPc Manager for static NPC classes 2025-01-05 20:57:43 -06:00
FatBoy 450ae2ec82 create PlayerManager static class 2025-01-05 20:47:33 -06:00
215 changed files with 4737 additions and 10028 deletions
-150
View File
@@ -1,150 +0,0 @@
package engine.Dungeons;
import engine.Enum;
import engine.InterestManagement.WorldGrid;
import engine.gameManager.BuildingManager;
import engine.gameManager.PowersManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector3fImmutable;
import engine.net.ByteBufferWriter;
import engine.objects.*;
import engine.powers.EffectsBase;
import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashSet;
public class Dungeon {
public static int NoFlyEffectID = -1733819072;
public static int NoTeleportEffectID = -1971545187;
public static int NoSummonEffectID = 2122002462;
public ArrayList<PlayerCharacter> participants;
public int maxPerGuild;
public Vector3fImmutable entrance;
public ArrayList<Mob> dungeon_mobs;
public Long respawnTime = 0L;
public Dungeon(Vector3fImmutable entrance, int maxCount){
this.participants = new ArrayList<>();
this.entrance = entrance;
this.dungeon_mobs = new ArrayList<>();
this.maxPerGuild = maxCount;
}
public void applyDungeonEffects(PlayerCharacter player){
EffectsBase noFly = PowersManager.getEffectByToken(NoFlyEffectID);
EffectsBase noTele = PowersManager.getEffectByToken(NoTeleportEffectID);
EffectsBase noSum = PowersManager.getEffectByToken(NoSummonEffectID);
if(noFly != null)
player.addEffectNoTimer(noFly.getName(),noFly,40,true);
if(noTele != null)
player.addEffectNoTimer(noTele.getName(),noTele,40,true);
if(noSum != null)
player.addEffectNoTimer(noSum.getName(),noSum,40,true);
}
public void removeDungeonEffects(PlayerCharacter player) {
EffectsBase noFly = PowersManager.getEffectByToken(NoFlyEffectID);
EffectsBase noTele = PowersManager.getEffectByToken(NoTeleportEffectID);
EffectsBase noSum = PowersManager.getEffectByToken(NoSummonEffectID);
for (Effect eff : player.effects.values()) {
if (noFly != null && eff.getEffectsBase().equals(noFly))
eff.endEffect();
if (noTele != null && eff.getEffectsBase().equals(noTele))
eff.endEffect();
if (noSum != null && eff.getEffectsBase().equals(noSum))
eff.endEffect();
}
}
public static void serializeForClientMsgTeleport(ByteBufferWriter writer) {
Guild rulingGuild = Guild.getErrantGuild();
Guild rulingNation = Guild.getErrantGuild();
Zone zone = ZoneManager.getZoneByUUID(994);
// Begin Serialzing soverign guild data
writer.putInt(Enum.GameObjectType.Zone.ordinal());
writer.putInt(994);
writer.putString("Whitehorn Citadel");
writer.putInt(rulingGuild.getObjectType().ordinal());
writer.putInt(rulingGuild.getObjectUUID());
writer.putString("Whitehorn Militants"); // guild name
writer.putString("In the Citadel, We Fight!"); // motto
writer.putString(rulingGuild.getLeadershipType());
// Serialize guild ruler's name
// If tree is abandoned blank out the name
// to allow them a rename.
writer.putString("Kol'roth The Destroyer");//sovreign
writer.putInt(rulingGuild.getCharter());
writer.putInt(0); // always 00000000
writer.put((byte)0);
writer.put((byte) 1);
writer.put((byte) 1); // *** Refactor: What are these flags?
writer.put((byte) 1);
writer.put((byte) 1);
writer.put((byte) 1);
GuildTag._serializeForDisplay(rulingGuild.getGuildTag(), writer);
GuildTag._serializeForDisplay(rulingNation.getGuildTag(), writer);
writer.putInt(0);// TODO Implement description text
writer.put((byte) 1);
writer.put((byte) 0);
writer.put((byte) 1);
// Begin serializing nation guild info
if (rulingNation.isEmptyGuild()) {
writer.putInt(rulingGuild.getObjectType().ordinal());
writer.putInt(rulingGuild.getObjectUUID());
} else {
writer.putInt(rulingNation.getObjectType().ordinal());
writer.putInt(rulingNation.getObjectUUID());
}
// Serialize nation name
writer.putString("Whitehorn Militants"); //nation name
writer.putInt(-1);//city rank, -1 puts it at top of list always
writer.putInt(0xFFFFFFFF);
writer.putInt(0);
writer.putString("Kol'roth The Destroyer");//nation ruler
writer.putLocalDateTime(LocalDateTime.now());
//location
Vector3fImmutable loc = Vector3fImmutable.getRandomPointOnCircle(BuildingManager.getBuilding(2827951).loc,30f);
writer.putFloat(loc.x);
writer.putFloat(loc.y);
writer.putFloat(loc.z);
writer.putInt(0);
writer.put((byte) 1);
writer.put((byte) 0);
writer.putInt(0x64);
writer.put((byte) 0);
writer.put((byte) 0);
writer.put((byte) 0);
}
}
-105
View File
@@ -1,105 +0,0 @@
package engine.Dungeons;
import engine.Enum;
import engine.InterestManagement.WorldGrid;
import engine.gameManager.DbManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector3fImmutable;
import engine.objects.*;
import engine.powers.EffectsBase;
import engine.server.MBServerStatics;
import java.util.ArrayList;
import java.util.HashSet;
public class DungeonManager {
public static ArrayList<Dungeon> dungeons;
private static final float dungeonAiRange = 64f;
private static final float maxTravel = 64f;
public static void joinDungeon(PlayerCharacter pc, Dungeon dungeon){
if(requestEnter(pc,dungeon)) {
dungeon.participants.add(pc);
dungeon.applyDungeonEffects(pc);
translocateToDungeon(pc, dungeon);
}
}
public static void leaveDungeon(PlayerCharacter pc, Dungeon dungeon){
dungeon.participants.remove(pc);
dungeon.removeDungeonEffects(pc);
translocateOutOfDungeon(pc);
}
public static boolean requestEnter(PlayerCharacter pc, Dungeon dungeon){
int current = 0;
Guild nation = pc.guild.getNation();
if(nation == null)
return false;
for(PlayerCharacter participant : dungeon.participants){
if(participant.guild.getNation().equals(nation)){
current ++;
}
}
if(current >= dungeon.maxPerGuild)
return false;
return true;
}
public static void translocateToDungeon(PlayerCharacter pc, Dungeon dungeon){
pc.teleport(dungeon.entrance);
pc.setSafeMode();
}
public static void translocateOutOfDungeon(PlayerCharacter pc){
pc.teleport(pc.bindLoc);
pc.setSafeMode();
}
public static void pulse_dungeons(){
for(Dungeon dungeon : dungeons){
//early exit, if no players present don't waste resources
if(dungeon.participants.isEmpty())
continue;
if(dungeon.respawnTime > 0 && System.currentTimeMillis() > dungeon.respawnTime){
respawnMobs(dungeon);
}
//remove any players that have left
HashSet<AbstractWorldObject> obj = WorldGrid.getObjectsInRangePartial(dungeon.entrance,4096f,MBServerStatics.MASK_PLAYER);
for(PlayerCharacter player : dungeon.participants)
if(!obj.contains(player))
leaveDungeon(player,dungeon);
//cycle dungeon mob AI
for(Mob mob : dungeon.dungeon_mobs)
dungeonMobAI(mob);
}
}
public static void dungeonMobAI(Mob mob){
}
public static void respawnMobs(Dungeon dungeon){
for(Mob mob : dungeon.dungeon_mobs){
if(!mob.isAlive() && mob.despawned)
mob.respawn();
if(!mob.isAlive() && !mob.despawned){
mob.despawn();
mob.respawn();
}
}
}
}
+5 -4
View File
@@ -150,8 +150,7 @@ public class Enum {
NEPHFEMALE(2026, MonsterType.Nephilim, RunSpeed.STANDARD, CharacterSex.FEMALE, 1.1f),
HALFGIANTFEMALE(2027, MonsterType.HalfGiant, RunSpeed.STANDARD, CharacterSex.FEMALE, 1.15f),
VAMPMALE(2028, MonsterType.Vampire, RunSpeed.STANDARD, CharacterSex.MALE, 1),
VAMPFEMALE(2029, MonsterType.Vampire, RunSpeed.STANDARD, CharacterSex.FEMALE, 1),
SAETOR(1999,MonsterType.Minotaur, RunSpeed.MINOTAUR, CharacterSex.MALE,1);
VAMPFEMALE(2029, MonsterType.Vampire, RunSpeed.STANDARD, CharacterSex.FEMALE, 1);
@SuppressWarnings("unchecked")
private static HashMap<Integer, RaceType> _raceTypeByID = new HashMap<>();
@@ -171,6 +170,8 @@ public class Enum {
}
public static RaceType getRaceTypebyRuneID(int runeID) {
if(runeID == 1999)
return _raceTypeByID.get(2017);
return _raceTypeByID.get(runeID);
}
@@ -979,8 +980,8 @@ public class Enum {
try {
returnMod = SourceType.valueOf(modName.replace(",", ""));
} catch (Exception e) {
//Logger.error(modName);
//Logger.error(e);
Logger.error(modName);
Logger.error(e);
return SourceType.None;
}
return returnMod;
@@ -12,6 +12,7 @@ import engine.Enum;
import engine.Enum.DispatchChannel;
import engine.Enum.GameObjectType;
import engine.gameManager.GroupManager;
import engine.gameManager.PlayerManager;
import engine.gameManager.SessionManager;
import engine.job.JobScheduler;
import engine.jobs.RefreshGroupJob;
@@ -233,7 +234,7 @@ public enum InterestManager implements Runnable {
if (distanceSquared > sqr(64))
player.setLastStaticLoc(player.getLoc());
else if (player.isDirtyLoad() == false)
else if (PlayerManager.isDirtyLoad(player) == false)
return;
// Get Statics in range
@@ -286,14 +287,14 @@ public enum InterestManager implements Runnable {
lsm.addObject((Building) awo);
else if (awo.getObjectType().equals(GameObjectType.Corpse)) {
Corpse corpse = (Corpse) awo;
lcm = new LoadCharacterMsg(corpse, PlayerCharacter.hideNonAscii());
lcm = new LoadCharacterMsg(corpse, PlayerManager.hideNonAscii());
Dispatch dispatch = Dispatch.borrow(player, lcm);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
} else if (awo.getObjectType().equals(GameObjectType.NPC)) {
NPC npc = (NPC) awo;
lcm = new LoadCharacterMsg(npc, PlayerCharacter.hideNonAscii());
lcm = new LoadCharacterMsg(npc, PlayerManager.hideNonAscii());
lcmList.add(lcm);
}
@@ -311,7 +312,7 @@ public enum InterestManager implements Runnable {
}
loadedStaticObjects.addAll(toLoad);
player.setDirtyLoad(false);
PlayerManager.setDirtyLoad(player, false);
}
private void updateMobileList(PlayerCharacter player, ClientConnection origin) {
@@ -437,7 +438,7 @@ public enum InterestManager implements Runnable {
if (player.getSeeInvis() < awopc.getHidden())
continue;
lcm = new LoadCharacterMsg(awopc, PlayerCharacter.hideNonAscii());
lcm = new LoadCharacterMsg(awopc, PlayerManager.hideNonAscii());
players.add(awo);
// check if in a group with the person being loaded
@@ -466,11 +467,11 @@ public enum InterestManager implements Runnable {
awonpc.playerAgroMap.put(player.getObjectUUID(), false);
((Mob) awonpc).setCombatTarget(null);
lcm = new LoadCharacterMsg(awonpc, PlayerCharacter.hideNonAscii());
lcm = new LoadCharacterMsg(awonpc, PlayerManager.hideNonAscii());
} else if ((awo.getObjectTypeMask() & MBServerStatics.MASK_NPC) != 0) {
NPC awonpc = (NPC) awo;
lcm = new LoadCharacterMsg(awonpc, PlayerCharacter.hideNonAscii());
lcm = new LoadCharacterMsg(awonpc, PlayerManager.hideNonAscii());
} else if ((awo.getObjectTypeMask() & MBServerStatics.MASK_PET) != 0) {
Mob awonpc = (Mob) awo;
@@ -482,7 +483,7 @@ public enum InterestManager implements Runnable {
if ((awonpc.agentType.equals(Enum.AIAgentType.MOBILE)))
((Mob) awonpc).setCombatTarget(null);
lcm = new LoadCharacterMsg(awonpc, PlayerCharacter.hideNonAscii());
lcm = new LoadCharacterMsg(awonpc, PlayerManager.hideNonAscii());
}
addToList.add(awo);
@@ -511,18 +512,6 @@ public enum InterestManager implements Runnable {
if (player == null)
return;
for(PlayerCharacter pc : SessionManager.getAllActivePlayerCharacters()){
if(pc.equals(player)){
try{
WorldGrid.RemoveWorldObject(player);
}catch(Exception e){
}
}
}
ClientConnection origin = player.getClientConnection();
if (origin == null)
@@ -530,8 +519,8 @@ public enum InterestManager implements Runnable {
// Update loaded upbjects lists
player.isBoxed = PlayerCharacter.checkIfBoxed(player);
player.setDirtyLoad(true);
player.isBoxed = PlayerManager.checkIfBoxed(player);
PlayerManager.setDirtyLoad(player, true);
updateStaticList(player, origin);
updateMobileList(player, origin);
}
@@ -548,7 +537,7 @@ public enum InterestManager implements Runnable {
// Update loaded upbjects lists
playerCharacter.setDirtyLoad(true);
PlayerManager.setDirtyLoad(playerCharacter, true);
updateStaticList(playerCharacter, origin);
updateMobileList(playerCharacter, origin);
@@ -564,26 +553,7 @@ public enum InterestManager implements Runnable {
for (AbstractWorldObject playerObject : playerList) {
PlayerCharacter playerCharacter = (PlayerCharacter) playerObject;
playerCharacter.setDirtyLoad(true);
}
}
public void RefreshLoadedObjects(PlayerCharacter player){
try {
if (player == null)
return;
ClientConnection origin = player.getClientConnection();
if (origin == null)
return;
// Update loaded upbjects lists
player.setDirtyLoad(true);
updateStaticList(player, origin);
updateMobileList(player, origin);
}catch(Exception e){
Logger.error(e.getMessage());
PlayerManager.setDirtyLoad(playerCharacter, true);
}
}
}
-116
View File
@@ -1,116 +0,0 @@
package engine.ZergMehcanics;
import engine.InterestManagement.WorldGrid;
import engine.gameManager.BuildingManager;
import engine.gameManager.ZergManager;
import engine.objects.*;
import engine.server.MBServerStatics;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
public class MineAntiZerg {
public static HashMap<Mine,HashMap<PlayerCharacter,Long>> leaveTimers = new HashMap<>();
public static HashMap<Mine,ArrayList<PlayerCharacter>> currentPlayers = new HashMap<>();
public static void runMines(){
for(Mine mine : Mine.getMines()){
Building tower = BuildingManager.getBuildingFromCache(mine.getBuildingID());
if(tower == null)
continue;
if(!mine.isActive)
continue;
logPlayersPresent(tower,mine);
auditPlayersPresent(tower,mine);
auditPlayers(mine);
}
}
public static void logPlayersPresent(Building tower, Mine mine){
HashSet<AbstractWorldObject> loadedPlayers = WorldGrid.getObjectsInRangePartial(tower.loc, MBServerStatics.CHARACTER_LOAD_RANGE * 3,MBServerStatics.MASK_PLAYER);
ArrayList<PlayerCharacter> playersPresent = new ArrayList<>();
for(AbstractWorldObject player : loadedPlayers){
playersPresent.add((PlayerCharacter)player);
}
currentPlayers.put(mine,playersPresent);
}
public static void auditPlayersPresent(Building tower, Mine mine){
HashSet<AbstractWorldObject> loadedPlayers = WorldGrid.getObjectsInRangePartial(tower.loc, MBServerStatics.CHARACTER_LOAD_RANGE * 3,MBServerStatics.MASK_PLAYER);
ArrayList<PlayerCharacter> toRemove = new ArrayList<>();
for(PlayerCharacter player : currentPlayers.get(mine)){
if(!loadedPlayers.contains(player)){
toRemove.add(player);
}
}
currentPlayers.get(mine).removeAll(toRemove);
for(PlayerCharacter player : toRemove){
if(leaveTimers.containsKey(mine)){
leaveTimers.get(mine).put(player,System.currentTimeMillis());
}else{
HashMap<PlayerCharacter,Long> leaveTime = new HashMap<>();
leaveTime.put(player,System.currentTimeMillis());
leaveTimers.put(mine,leaveTime);
}
}
toRemove.clear();
for(PlayerCharacter player : leaveTimers.get(mine).keySet()){
long timeGone = System.currentTimeMillis() - leaveTimers.get(mine).get(player);
if(timeGone > 180000L) {//3 minutes
toRemove.add(player);
player.ZergMultiplier = 1.0f;
}
}
for(PlayerCharacter player : toRemove) {
leaveTimers.get(mine).remove(player);
}
}
public static void auditPlayers(Mine mine){
HashMap<Guild,ArrayList<PlayerCharacter>> playersByNation = new HashMap<>();
for(PlayerCharacter player : currentPlayers.get(mine)){
if(playersByNation.containsKey(player.guild.getNation())){
playersByNation.get(player.guild.getNation()).add(player);
}else{
ArrayList<PlayerCharacter> players = new ArrayList<>();
players.add(player);
playersByNation.put(player.guild.getNation(),players);
}
}
for(PlayerCharacter player : leaveTimers.get(mine).keySet()){
if(playersByNation.containsKey(player.guild.getNation())){
playersByNation.get(player.guild.getNation()).add(player);
}else{
ArrayList<PlayerCharacter> players = new ArrayList<>();
players.add(player);
playersByNation.put(player.guild.getNation(),players);
}
}
for(Guild nation : playersByNation.keySet()){
for(PlayerCharacter player : playersByNation.get(nation)){
player.ZergMultiplier = ZergManager.getCurrentMultiplier(playersByNation.get(nation).size(), mine.capSize);
}
}
}
}
+10 -31
View File
@@ -13,13 +13,15 @@ import engine.Enum;
import engine.Enum.GameObjectType;
import engine.gameManager.ConfigManager;
import engine.gameManager.DbManager;
import engine.net.DispatchMessage;
import engine.net.client.msg.chat.ChatSystemMsg;
import engine.gameManager.PlayerManager;
import engine.objects.Account;
import engine.objects.PlayerCharacter;
import org.pmw.tinylog.Logger;
import java.sql.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class dbAccountHandler extends dbHandlerBase {
@@ -76,24 +78,18 @@ public class dbAccountHandler extends dbHandlerBase {
}
}
public void SET_TRASH(String machineID, String type) {
public void SET_TRASH(String machineID) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(
"INSERT INTO dyn_trash(`machineID`, `count`, `type`)"
+ " VALUES (?, 1, ?) ON DUPLICATE KEY UPDATE `count` = `count` + 1;")) {
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO dyn_trash(`machineID`, `count`)"
+ " VALUES (?, 1) ON DUPLICATE KEY UPDATE `count` = `count` + 1;")) {
preparedStatement.setString(1, machineID);
preparedStatement.setString(2, type);
preparedStatement.execute();
} catch (SQLException e) {
Logger.error(e);
}
ChatSystemMsg chatMsg = new ChatSystemMsg(null, "Account: " + machineID + " has been kicked from game for cheating");
chatMsg.setMessageType(10);
chatMsg.setChannel(Enum.ChatChannelType.SYSTEM.getChannelID());
DispatchMessage.dispatchMsgToAll(chatMsg);
}
public ArrayList<String> GET_TRASH_LIST() {
@@ -145,7 +141,7 @@ public class dbAccountHandler extends dbHandlerBase {
int playerID;
playerID = rs.getInt(1);
trashPlayer = PlayerCharacter.getPlayerCharacter(playerID);
trashPlayer = PlayerManager.getPlayerCharacter(playerID);
if (trashPlayer == null)
continue;
@@ -275,21 +271,4 @@ public class dbAccountHandler extends dbHandlerBase {
}
}
public void TRASH_CHEATERS() {
try (Connection connection = DbManager.getConnection();
CallableStatement callableStatement = connection.prepareCall("{CALL BanAccountsWithMachineID()}")) {
boolean hasResultSet = callableStatement.execute();
if (!hasResultSet && callableStatement.getUpdateCount() > 0) {
Logger.info("TRASHED CHEATERS");
} else {
Logger.warn("No cheaters to trash.");
}
} catch (SQLException e) {
Logger.error("Error trashing cheaters: ", e);
}
}
}
@@ -10,8 +10,8 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.gameManager.PlayerManager;
import engine.objects.Account;
import engine.objects.PlayerCharacter;
import engine.session.CSSession;
import engine.util.StringUtils;
import org.pmw.tinylog.Logger;
@@ -103,7 +103,7 @@ public class dbCSSessionHandler extends dbHandlerBase {
ResultSet rs = preparedStatement.executeQuery();
if (rs.next())
css = new CSSession(secKey, DbManager.AccountQueries.GET_ACCOUNT(rs.getInt("accountID")), PlayerCharacter.getPlayerCharacter(rs.getInt("characterID")), rs.getString("machineID"));
css = new CSSession(secKey, DbManager.AccountQueries.GET_ACCOUNT(rs.getInt("accountID")), PlayerManager.getPlayerCharacter(rs.getInt("characterID")), rs.getString("machineID"));
} catch (SQLException e) {
Logger.error(e);
+2 -1
View File
@@ -12,6 +12,7 @@ package engine.db.handlers;
import engine.Enum;
import engine.Enum.GuildHistoryType;
import engine.gameManager.DbManager;
import engine.gameManager.PlayerManager;
import engine.objects.*;
import engine.server.world.WorldServer;
import org.joda.time.DateTime;
@@ -222,7 +223,7 @@ public class dbGuildHandler extends dbHandlerBase {
while (rs.next()) {
int playerUUID = rs.getInt(1);
PlayerCharacter kosPlayer = PlayerCharacter.getPlayerCharacter(playerUUID);
PlayerCharacter kosPlayer = PlayerManager.getPlayerCharacter(playerUUID);
if (kosPlayer != null)
kosList.add(kosPlayer);
@@ -22,7 +22,6 @@ import java.util.HashMap;
public class dbItemBaseHandler extends dbHandlerBase {
public static final HashMap<Integer,Float> dexReductions = new HashMap<>();
public dbItemBaseHandler() {
}
@@ -46,14 +45,6 @@ public class dbItemBaseHandler extends dbHandlerBase {
}
}
public void LOAD_DEX_REDUCTION(ItemBase itemBase) {
if(dexReductions.containsKey(itemBase.getUUID())){
itemBase.dexReduction = dexReductions.get(itemBase.getUUID());
}else{
itemBase.dexReduction = 0.0f;
}
}
public void LOAD_ANIMATIONS(ItemBase itemBase) {
ArrayList<Integer> tempList = new ArrayList<>();
@@ -103,21 +94,6 @@ public class dbItemBaseHandler extends dbHandlerBase {
}
Logger.info("read: " + recordsRead + " cached: " + ItemBase.getUUIDCache().size());
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_item_dexpenalty`")) {
ResultSet rs = preparedStatement.executeQuery();
// Check if a result was found
if (rs.next()) {
int ID = rs.getInt("ID");
float factor = rs.getInt("item_bulk_factor");
dexReductions.put(ID,factor);
}
} catch (SQLException e) {
Logger.error(e);
}
}
public HashMap<Integer, ArrayList<Integer>> LOAD_RUNES_FOR_NPC_AND_MOBS() {
+5 -4
View File
@@ -11,6 +11,7 @@ package engine.db.handlers;
import engine.Enum.ProfitType;
import engine.gameManager.DbManager;
import engine.gameManager.NPCManager;
import engine.math.Vector3fImmutable;
import engine.objects.NPC;
import engine.objects.NPCProfits;
@@ -330,12 +331,12 @@ public class dbNPCHandler extends dbHandlerBase {
// Handle new mobbbase entries
if (NPC._pirateNames.get(mobBase) == null)
NPC._pirateNames.putIfAbsent(mobBase, new ArrayList<>());
if (NPCManager._pirateNames.get(mobBase) == null)
NPCManager._pirateNames.putIfAbsent(mobBase, new ArrayList<>());
// Insert name into proper arraylist
NPC._pirateNames.get(mobBase).add(pirateName);
NPCManager._pirateNames.get(mobBase).add(pirateName);
}
} catch (SQLException e) {
@@ -343,7 +344,7 @@ public class dbNPCHandler extends dbHandlerBase {
}
Logger.info("names read: " + recordsRead + " for "
+ NPC._pirateNames.size() + " mobBases");
+ NPCManager._pirateNames.size() + " mobBases");
}
public boolean ADD_TO_PRODUCTION_LIST(final long ID, final long npcUID, final long itemBaseID, DateTime dateTime, String prefix, String suffix, String name, boolean isRandom, int playerID) {
+2 -1
View File
@@ -12,6 +12,7 @@ package engine.devcmd;
import engine.Enum.GameObjectType;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.gameManager.NPCManager;
import engine.objects.*;
import java.util.ArrayList;
@@ -71,7 +72,7 @@ public abstract class AbstractDevCmd {
int targetType = pc.getLastTargetType().ordinal();
int targetID = pc.getLastTargetID();
if (targetType == GameObjectType.NPC.ordinal()) {
NPC b = NPC.getFromCache(targetID);
NPC b = NPCManager.getFromCache(targetID);
if (b == null) {
ChatManager.chatSystemError(pc,
"Command Failed. Could not find NPC of ID " + targetID);
+3 -4
View File
@@ -14,7 +14,6 @@ import engine.gameManager.ChatManager;
import engine.objects.AbstractGameObject;
import engine.objects.Item;
import engine.objects.PlayerCharacter;
import engine.server.MBServerStatics;
/**
* @author Eighty
@@ -47,10 +46,10 @@ public class AddGoldCmd extends AbstractDevCmd {
throwbackError(pc, "Quantity must be a number, " + words[0] + " is invalid");
return;
}
if (amt < 1 || amt > MBServerStatics.PLAYER_GOLD_LIMIT) {
throwbackError(pc, "Quantity must be between 1 and " + MBServerStatics.PLAYER_GOLD_LIMIT);
if (amt < 1 || amt > 10000000) {
throwbackError(pc, "Quantity must be between 1 and 10000000 (10 million)");
return;
} else if ((curAmt + amt) > MBServerStatics.PLAYER_GOLD_LIMIT) {
} else if ((curAmt + amt) > 10000000) {
throwbackError(pc, "This would place your inventory over 10,000,000 gold.");
return;
}
+2 -35
View File
@@ -9,17 +9,12 @@
package engine.devcmd.cmds;
import engine.Enum;
import engine.Enum.GameObjectType;
import engine.InterestManagement.InterestManager;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.gameManager.LootManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector3fImmutable;
import engine.mobileAI.utilities.MovementUtilities;
import engine.objects.*;
import org.pmw.tinylog.Logger;
@@ -88,41 +83,13 @@ public class AddMobCmd extends AbstractDevCmd {
}
Mob mob = Mob.createMob(loadID, pc.getLoc(),null, true, zone, null, 0, "", 1);
//Mob mob = Mob.createStrongholdMob(loadID,pc.loc,Guild.getErrantGuild(),true,zone,null,0,"Whitehorn Militant",75);
Mob mob = Mob.createMob(loadID, pc.getLoc(),
null, true, zone, null, 0, "", 1);
if (mob != null) {
mob.updateDatabase();
ChatManager.chatSayInfo(pc,
"Mob with ID " + mob.getDBID() + " added");
this.setResult(String.valueOf(mob.getDBID()));
mob.parentZone = zone;
mob.bindLoc = pc.loc;
mob.setLoc(pc.loc);
mob.equipmentSetID = 6327;
mob.runAfterLoad();
mob.setLevel((short)75);
mob.setResists(new Resists("Elite"));
mob.spawnTime = 10;
mob.BehaviourType = Enum.MobBehaviourType.Aggro;
zone.zoneMobSet.add(mob);
mob.isHellgateMob = true;
LootManager.GenerateStrongholdLoot(mob,false,false);
mob.healthMax = mob.mobBase.getHealthMax();
mob.setHealth(mob.healthMax);
mob.maxDamageHandOne = 1550;
mob.minDamageHandOne = 750;
mob.atrHandOne = 1800;
mob.defenseRating = 2200;
mob.setFirstName("Whitehorn Militant");
//InterestManager.setObjectDirty(mob);
//WorldGrid.addObject(mob,pc.loc.x,pc.loc.z);
//WorldGrid.updateObject(mob);
//guard.stronghold = mine;
mob.mobPowers.clear();
mob.mobPowers.put(429399948,20); // find weakness
} else {
throwbackError(pc, "Failed to create mob of type " + loadID);
Logger.error("Failed to create mob of type "
+1 -3
View File
@@ -10,12 +10,10 @@
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.*;
import engine.math.Vector3fImmutable;
import engine.objects.*;
import org.pmw.tinylog.Logger;
/**
* @author Eighty
@@ -77,7 +75,7 @@ public class AddNPCCmd extends AbstractDevCmd {
} else{
loc = pc.loc;
}
created = NPC.createNPC(name, contractID, loc, guild, zone, (short)level, building);
created = NPCManager.createNPC(name, contractID, loc, guild, zone, (short)level, building);
created.bindLoc = loc;
if(building != null) {
created.buildingUUID = building.getObjectUUID();
@@ -11,6 +11,8 @@ package engine.devcmd.cmds;
import engine.Enum.ModType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.NPCManager;
import engine.gameManager.PlayerManager;
import engine.gameManager.PowersManager;
import engine.net.ItemProductionManager;
import engine.objects.*;
@@ -46,7 +48,7 @@ public class AuditFailedItemsCmd extends AbstractDevCmd {
String prefix = "";
String suffix = "";
String itemName = "";
NPC npc = NPC.getFromCache(failedItem.getNpcUID());
NPC npc = NPCManager.getFromCache(failedItem.getNpcUID());
if (npc == null) {
npcName = "null";
@@ -57,7 +59,7 @@ public class AuditFailedItemsCmd extends AbstractDevCmd {
contractName = npc.getContract().getName();
}
PlayerCharacter roller = PlayerCharacter.getFromCache(failedItem.getPlayerID());
PlayerCharacter roller = PlayerManager.getFromCache(failedItem.getPlayerID());
if (roller == null)
playerName = "null";
+3 -2
View File
@@ -12,6 +12,7 @@ package engine.devcmd.cmds;
import engine.Enum;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.DbManager;
import engine.gameManager.PlayerManager;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
@@ -34,8 +35,8 @@ public class DecachePlayerCmd extends AbstractDevCmd {
int objectUUID = Integer.parseInt(words[0]);
if (DbManager.inCache(Enum.GameObjectType.PlayerCharacter, objectUUID)) {
this.setTarget(PlayerCharacter.getFromCache(objectUUID)); //for logging
PlayerCharacter.getFromCache(objectUUID).removeFromCache();
this.setTarget(PlayerManager.getFromCache(objectUUID)); //for logging
PlayerManager.getFromCache(objectUUID).removeFromCache();
} else {
this.sendHelp(pc);
}
-54
View File
@@ -1,54 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.Dungeons.DungeonManager;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.BuildingManager;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector3fImmutable;
import engine.objects.*;
import org.pmw.tinylog.Logger;
/**
* @author Eighty
*/
public class DungenonCmd extends AbstractDevCmd {
public DungenonCmd() {
super("dungeon");
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
Zone parent = ZoneManager.findSmallestZone(pc.loc);
if(parent == null)
return;
Vector3fImmutable loc = Vector3fImmutable.getRandomPointOnCircle(BuildingManager.getBuilding(2827951).loc,30f);
pc.teleport(loc);
}
@Override
protected String _getHelpString() {
return "indicate mob or building followed by an id and a level";
}
@Override
protected String _getUsageString() {
return "'/dungeon mob 2001 10'";
}
}
+1 -2
View File
@@ -17,7 +17,6 @@ import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.objects.*;
import engine.powers.EffectsBase;
import engine.server.MBServerStatics;
import java.util.ArrayList;
@@ -35,7 +34,7 @@ public class GimmeCmd extends AbstractDevCmd {
AbstractGameObject target) {
int amt = 0;
int currentGold = pc.getCharItemManager().getGoldInventory().getNumOfItems();
amt = MBServerStatics.PLAYER_GOLD_LIMIT - currentGold;
amt = 10000000 - currentGold;
if (!pc.getCharItemManager().addGoldToInventory(amt, true)) {
throwbackError(pc, "Failed to add gold to inventory");
return;
+2 -1
View File
@@ -11,6 +11,7 @@ package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.PlayerManager;
import engine.math.Vector3fImmutable;
import engine.objects.AbstractGameObject;
import engine.objects.Building;
@@ -89,7 +90,7 @@ public class GotoBoundsCmd extends AbstractDevCmd {
return;
}
player.teleport(targetLoc);
PlayerManager.teleport(player, targetLoc);
}
+5 -4
View File
@@ -12,6 +12,7 @@ package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.DbManager;
import engine.gameManager.PlayerManager;
import engine.gameManager.SessionManager;
import engine.math.Vector3fImmutable;
import engine.objects.*;
@@ -35,7 +36,7 @@ public class GotoCmd extends AbstractDevCmd {
if (target != null && words[0].isEmpty()) {
AbstractWorldObject targetAgo = (AbstractWorldObject) target;
pc.teleport(targetAgo.getLoc());
PlayerManager.teleport(pc, targetAgo.getLoc());
return;
}
@@ -50,7 +51,7 @@ public class GotoCmd extends AbstractDevCmd {
}
if (loc != null)
pc.teleport(loc);
PlayerManager.teleport(pc, loc);
return;
}
@@ -61,7 +62,7 @@ public class GotoCmd extends AbstractDevCmd {
}
if (loc != null)
pc.teleport(loc);
PlayerManager.teleport(pc, loc);
return;
}
@@ -164,7 +165,7 @@ public class GotoCmd extends AbstractDevCmd {
}
}
if (loc != null) {
pc.teleport(loc);
PlayerManager.teleport(pc, loc);
}
}
+2 -1
View File
@@ -12,6 +12,7 @@ package engine.devcmd.cmds;
import engine.Enum;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.DbManager;
import engine.gameManager.PlayerManager;
import engine.math.Vector3fImmutable;
import engine.objects.*;
@@ -84,7 +85,7 @@ public class GotoObj extends AbstractDevCmd {
return;
}
player.teleport(targetLoc);
PlayerManager.teleport(player, targetLoc);
}
+11 -21
View File
@@ -15,12 +15,10 @@ import engine.Enum.GameObjectType;
import engine.Enum.TargetColor;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.BuildingManager;
import engine.gameManager.PowersManager;
import engine.gameManager.PlayerManager;
import engine.gameManager.SessionManager;
import engine.math.Vector3fImmutable;
import engine.objects.*;
import engine.powers.EffectsBase;
import engine.powers.PowersBase;
import engine.server.MBServerStatics;
import engine.util.StringUtils;
@@ -335,19 +333,14 @@ public class InfoCmd extends AbstractDevCmd {
output += "Movement State: " + targetPC.getMovementState().name();
output += newline;
output += "Movement Speed: " + targetPC.getSpeed();
output += newline;
output += "Altitude : " + targetPC.getLoc().y;
output += newline;
output += "Swimming : " + targetPC.isSwimming();
output += "Swimming : " + PlayerManager.isSwimming(targetPC);
output += newline;
output += "isMoving : " + targetPC.isMoving();
output += newline;
output += "Zerg Multiplier : " + targetPC.ZergMultiplier + newline;
output += "Hidden : " + targetPC.getHidden() + newline;
output += "Target Loc: " + targetPC.loc + newline;
output += "Player Loc: " + pc.loc + newline;
output += "Distance Squared: " + pc.loc.distanceSquared(targetPC.loc) + newline;
output += "IsBoxed: " + targetPC.isBoxed;
output += "Zerg Multiplier : " + targetPC.ZergMultiplier;
break;
case NPC:
@@ -502,16 +495,13 @@ public class InfoCmd extends AbstractDevCmd {
output += newline;
output += "No building found." + newline;
}
output += "Damage: " + targetMob.mobBase.getDamageMin() + " - " + targetMob.mobBase.getDamageMax() + newline;
output += "ATR: " + targetMob.mobBase.getAttackRating() + newline;
output += "DEF: " + targetMob.defenseRating + newline;
output += "RANGE: " + targetMob.getRange() + newline;
output += "Effects:" + newline;
for(MobBaseEffects mbe : targetMob.mobBase.mobbaseEffects){
EffectsBase eb = PowersManager.getEffectByToken(mbe.getToken());
output += eb.getName() + newline;
int max = (int)(4.882 * targetMob.level + 121.0);
if(max > 321){
max = 321;
}
int min = (int)(4.469 * targetMob.level - 3.469);
output += "Min Loot Roll = " + min;
output += "Max Loot Roll = " + max;
break;
case Item: //intentional passthrough
case MobLoot:
+3 -2
View File
@@ -10,6 +10,7 @@
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.PlayerManager;
import engine.math.Vector3fImmutable;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
@@ -36,7 +37,7 @@ public class JumpCmd extends AbstractDevCmd {
try {
float range = Float.parseFloat(words[1]);
Vector3fImmutable newLoc = pc.getFaceDir().scaleAdd(range, pc.getLoc());
pc.teleport(newLoc);
PlayerManager.teleport(pc, newLoc);
} catch (NumberFormatException e) {
@@ -68,7 +69,7 @@ public class JumpCmd extends AbstractDevCmd {
Vector3fImmutable loc = pc.getLoc();
loc = loc.add(lat, 0f, -lon);
pc.teleport(loc);
PlayerManager.teleport(pc, loc);
}
@Override
+3 -6
View File
@@ -12,10 +12,7 @@ package engine.devcmd.cmds;
import engine.Enum.ProtectionState;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.BuildingManager;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.gameManager.ZoneManager;
import engine.gameManager.*;
import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.objects.*;
@@ -74,7 +71,7 @@ public class MakeBaneCmd extends AbstractDevCmd {
return;
}
PlayerCharacter player = PlayerCharacter.getPlayerCharacter(attackerID);
PlayerCharacter player = PlayerManager.getPlayerCharacter(attackerID);
if (player.getGuild().isEmptyGuild()) {
@@ -194,7 +191,7 @@ public class MakeBaneCmd extends AbstractDevCmd {
Vector3fImmutable movePlayerOutsideStone = player.getLoc();
movePlayerOutsideStone = movePlayerOutsideStone.setX(movePlayerOutsideStone.x + 10);
movePlayerOutsideStone = movePlayerOutsideStone.setZ(movePlayerOutsideStone.z + 10);
player.teleport(movePlayerOutsideStone);
PlayerManager.teleport(player, movePlayerOutsideStone);
throwbackInfo(pc, "The city has been succesfully baned.");
}
@@ -1,75 +0,0 @@
// ·. · · · · .
// · ·
// · ·
//
// · · ·
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.Enum;
import engine.Enum.BuildingGroup;
import engine.Enum.GameObjectType;
import engine.Enum.TargetColor;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.BuildingManager;
import engine.gameManager.PowersManager;
import engine.gameManager.SessionManager;
import engine.math.Vector3fImmutable;
import engine.objects.*;
import engine.powers.EffectsBase;
import engine.server.MBServerStatics;
import engine.util.StringUtils;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author
*/
public class PrintEffectsCmd extends AbstractDevCmd {
public PrintEffectsCmd() {
super("printeffects");
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
if(!target.getObjectType().equals(GameObjectType.PlayerCharacter)) {
throwbackInfo(pc, "Target Must PlayerCharacter");
return;
}
String newline = "\r\n ";
String output = "Effects for Player:" + newline;
AbstractCharacter absTar = (AbstractCharacter) target;
for(String key : absTar.effects.keySet()){
Effect eff = absTar.effects.get(key);
if(eff.getJobContainer() != null) {
output += "[" + key + "] " + eff.getName() + " (" + eff.getTrains() + ") " + eff.getJobContainer().timeToExecutionLeft() * 0.001f + newline;
}else{
output += eff.getName() + " (" + eff.getTrains() + ") " + "PERMANENT" + newline;
}
}
throwbackInfo(pc, output);
}
@Override
protected String _getHelpString() {
return "Gets information on an Object.";
}
@Override
protected String _getUsageString() {
return "' /info targetID'";
}
}
@@ -49,8 +49,6 @@ public class PrintSkillsCmd extends AbstractDevCmd {
+ skill.getModifiedAmount() + '('
+ skill.getTotalSkillPercet() + " )");
}
//throwbackInfo(pc, "= = = = = NEW CALCULATIONS = = = = =");
// PlayerCombatStats.PrintSkillsToClient(pc);
} else
throwbackInfo(pc, "Skills not found for player");
}
+21 -38
View File
@@ -11,7 +11,6 @@ package engine.devcmd.cmds;
import engine.Enum;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.PowersManager;
import engine.objects.*;
import java.util.HashMap;
@@ -58,43 +57,27 @@ public class PrintStatsCmd extends AbstractDevCmd {
public void printStatsPlayer(PlayerCharacter pc, PlayerCharacter tar) {
String newline = "\r\n ";
String newOut = "Server stats for Player " + tar.getFirstName() + newline;
newOut += "HEALTH: " + tar.getHealth() + " / " + tar.getHealthMax() + newline;
newOut += "MANA: " + tar.getMana() + " / " + tar.getManaMax() + newline;
newOut += "STAMINA: " + tar.getStamina() + " / " + tar.getStaminaMax() + newline;
newOut += "Unused Stats: " + tar.getUnusedStatPoints() + newline;
newOut += "Stats Base (Modified)" + newline;
newOut += " Str: " + (int) tar.statStrBase + " (" + tar.getStatStrCurrent() + ')' + ", maxStr: " + tar.getStrMax() + newline;
newOut += " Dex: " + (int) tar.statDexBase + " (" + tar.getStatDexCurrent() + ')' + ", maxDex: " + tar.getDexMax() + newline;
newOut += " Con: " + (int) tar.statConBase + " (" + tar.getStatConCurrent() + ')' + ", maxCon: " + tar.getConMax() + newline;
newOut += " Int: " + (int) tar.statIntBase + " (" + tar.getStatIntCurrent() + ')' + ", maxInt: " + tar.getIntMax() + newline;
newOut += " Spi: " + (int) tar.statSpiBase + " (" + tar.getStatSpiCurrent() + ')' + ", maxSpi: " + tar.getSpiMax() + newline;
newOut += "Move Speed: " + tar.getSpeed() + newline;
newOut += "Health Regen: " + tar.combatStats.healthRegen + newline;
newOut += "Mana Regen: " + tar.combatStats.manaRegen + newline;
newOut += "Stamina Regen: " + tar.combatStats.staminaRegen + newline;
newOut += "DEFENSE: " + tar.combatStats.defense + newline;
newOut += "HAND ONE" + newline;
newOut += "ATR: " + tar.combatStats.atrHandOne + newline;
newOut += "MIN: " + tar.combatStats.minDamageHandOne + newline;
newOut += "MAX: " + tar.combatStats.maxDamageHandOne + newline;
newOut += "RANGE: " + tar.combatStats.rangeHandOne + newline;
newOut += "ATTACK SPEED: " + tar.combatStats.attackSpeedHandOne + newline;
newOut += "HAND TWO" + newline;
newOut += "ATR: " + tar.combatStats.atrHandTwo + newline;
newOut += "MIN: " + tar.combatStats.minDamageHandTwo + newline;
newOut += "MAX: " + tar.combatStats.maxDamageHandTwo + newline;
newOut += "RANGE: " + tar.combatStats.rangeHandTwo + newline;
newOut += "ATTACK SPEED: " + tar.combatStats.attackSpeedHandTwo + newline;
newOut += "IS BOXED: " + tar.isBoxed + newline;
newOut += "=== POWERS ===" + newline;
for(CharacterPower power : pc.getPowers().values()){
if(power.getPower().requiresHitRoll) {
newOut += power.getPower().name + " ATR: " + Math.round(PlayerCombatStats.getSpellAtr(pc,power.getPower())) + newline;
}
}
throwbackInfo(pc, newOut);
String out = "Server stats for Player " + tar.getFirstName() + newline;
out += "Unused Stats: " + tar.getUnusedStatPoints() + newline;
out += "Stats Base (Modified)" + newline;
out += " Str: " + (int) tar.statStrBase + " (" + tar.getStatStrCurrent() + ')' + ", maxStr: " + tar.getStrMax() + newline;
out += " Dex: " + (int) tar.statDexBase + " (" + tar.getStatDexCurrent() + ')' + ", maxDex: " + tar.getDexMax() + newline;
out += " Con: " + (int) tar.statConBase + " (" + tar.getStatConCurrent() + ')' + ", maxCon: " + tar.getConMax() + newline;
out += " Int: " + (int) tar.statIntBase + " (" + tar.getStatIntCurrent() + ')' + ", maxInt: " + tar.getIntMax() + newline;
out += " Spi: " + (int) tar.statSpiBase + " (" + tar.getStatSpiCurrent() + ')' + ", maxSpi: " + tar.getSpiMax() + newline;
throwbackInfo(pc, out);
out = "Health: " + tar.getHealth() + ", maxHealth: " + tar.getHealthMax() + newline;
out += "Mana: " + tar.getMana() + ", maxMana: " + tar.getManaMax() + newline;
out += "Stamina: " + tar.getStamina() + ", maxStamina: " + tar.getStaminaMax() + newline;
out += "Defense: " + tar.getDefenseRating() + newline;
out += "Main Hand: atr: " + tar.getAtrHandOne() + ", damage: " + tar.getMinDamageHandOne() + " to " + tar.getMaxDamageHandOne() + ", speed: " + tar.getSpeedHandOne() + newline;
out += "Off Hand: atr: " + tar.getAtrHandTwo() + ", damage: " + tar.getMinDamageHandTwo() + " to " + tar.getMaxDamageHandTwo() + ", speed: " + tar.getSpeedHandTwo() + newline;
out += "isAlive: " + tar.isAlive() + ", Combat: " + tar.isCombat() + newline;
out += "Move Speed: " + tar.getSpeed() + newline;
out += "Health Regen: " + tar.getRegenModifier(Enum.ModType.HealthRecoverRate) + newline;
out += "Mana Regen: " + tar.getRegenModifier(Enum.ModType.ManaRecoverRate) + newline;
out += "Stamina Regen: " + tar.getRegenModifier(Enum.ModType.StaminaRecoverRate) + newline;
throwbackInfo(pc, out);
}
public void printStatsMob(PlayerCharacter pc, Mob tar) {
+2 -5
View File
@@ -14,10 +14,7 @@ import engine.Enum.DbObjectType;
import engine.Enum.GameObjectType;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.BuildingManager;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.gameManager.ZoneManager;
import engine.gameManager.*;
import engine.math.Vector3fImmutable;
import engine.objects.*;
@@ -94,7 +91,7 @@ public class RemoveObjectCmd extends AbstractDevCmd {
removeBuilding(player, targetBuilding);
break;
case NPC:
targetNPC = NPC.getNPC(targetID);
targetNPC = NPCManager.getNPC(targetID);
removeNPC(player, targetNPC);
break;
case MOB:
+2 -1
View File
@@ -1,6 +1,7 @@
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.PlayerManager;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
@@ -16,7 +17,7 @@ public class ResetLevelCmd extends AbstractDevCmd {
protected void _doCmd(PlayerCharacter player, String[] args,
AbstractGameObject target) {
player.ResetLevel(Short.parseShort(args[0]));
PlayerManager.ResetLevel(player, Short.parseShort(args[0]));
}
@Override
+3 -2
View File
@@ -14,6 +14,7 @@ import engine.devcmd.AbstractDevCmd;
import engine.gameManager.BuildingManager;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.gameManager.NPCManager;
import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.objects.*;
@@ -96,7 +97,7 @@ public class RotateCmd extends AbstractDevCmd {
// building failed, try npc
NPC npc;
if (id != 0)
npc = NPC.getNPC(id);
npc = NPCManager.getNPC(id);
else
npc = getTargetAsNPC(pc);
if (npc != null) {
@@ -156,7 +157,7 @@ public class RotateCmd extends AbstractDevCmd {
// building failed, try npc
NPC npc;
if (id != 0)
npc = NPC.getNPC(id);
npc = NPCManager.getNPC(id);
else
npc = getTargetAsNPC(pc);
if (npc != null) {
@@ -12,6 +12,7 @@ package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.NPCManager;
import engine.objects.AbstractGameObject;
import engine.objects.MobBase;
import engine.objects.NPC;
@@ -52,7 +53,7 @@ public class SetNpcEquipSetCmd extends AbstractDevCmd {
boolean complete = false;
while (complete == false) {
complete = NPC.UpdateEquipSetID(npc, SetNpcEquipSetCmd.lastEquipSetID);
complete = NPCManager.UpdateEquipSetID(npc, SetNpcEquipSetCmd.lastEquipSetID);
if (!complete) {
SetNpcEquipSetCmd.lastEquipSetID++;
@@ -81,7 +82,7 @@ public class SetNpcEquipSetCmd extends AbstractDevCmd {
boolean complete = false;
while (complete == false) {
complete = NPC.UpdateEquipSetID(npc, SetNpcEquipSetCmd.lastEquipSetID);
complete = NPCManager.UpdateEquipSetID(npc, SetNpcEquipSetCmd.lastEquipSetID);
if (!complete) {
SetNpcEquipSetCmd.lastEquipSetID--;
@@ -109,7 +110,7 @@ public class SetNpcEquipSetCmd extends AbstractDevCmd {
this.throwbackError(pc, e.getMessage());
}
if (!NPC.UpdateEquipSetID(npc, equipSetID)) {
if (!NPCManager.UpdateEquipSetID(npc, equipSetID)) {
this.throwbackError(pc, "Unable to find Equipset for ID " + equipSetID);
return;
}
+2 -1
View File
@@ -12,6 +12,7 @@ package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.NPCManager;
import engine.objects.AbstractGameObject;
import engine.objects.MobBase;
import engine.objects.NPC;
@@ -47,7 +48,7 @@ public class SetNpcMobbaseCmd extends AbstractDevCmd {
this.throwbackError(player, "Cannot find Mobbase for ID " + mobBaseID);
return;
}
NPC.UpdateRaceID(npc, mobBaseID);
NPCManager.UpdateRaceID(npc, mobBaseID);
WorldGrid.updateObject(npc);
+2 -1
View File
@@ -12,6 +12,7 @@ package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.NPCManager;
import engine.objects.AbstractGameObject;
import engine.objects.NPC;
import engine.objects.PlayerCharacter;
@@ -43,7 +44,7 @@ public class SetNpcNameCmd extends AbstractDevCmd {
String name = words[0];
NPC.UpdateName(npc, name);
NPCManager.UpdateName(npc, name);
WorldGrid.updateObject(npc);
@@ -1,6 +1,5 @@
package engine.devcmd.cmds;
import engine.Enum;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.LootManager;
import engine.gameManager.ZoneManager;
@@ -27,52 +26,7 @@ public class SimulateBootyCmd extends AbstractDevCmd {
String newline = "\r\n ";
String output;
if(target.getObjectType().equals(Enum.GameObjectType.PlayerCharacter)){
int ATR = Integer.parseInt(words[0]);
int DEF = Integer.parseInt(words[1]);
int attacks = Integer.parseInt(words[2]);
int hits = 0;
int misses = 0;
int defaultHits = 0;
int defualtMisses = 0;
float chance = (ATR-((ATR+DEF) * 0.315f)) / ((DEF-((ATR+DEF) * 0.315f)) + (ATR-((ATR+DEF) * 0.315f)));
float convertedChance = chance * 100;
output = "" + newline;
output += "DEF VS ATR SIMULATION: " + attacks + " ATTACKS SIMULATED" + newline;
output += "DEF = " + DEF + newline;
output += "ATR = " + ATR + newline;
output += "CHANCE TO LAND HIT: " + convertedChance + "%" + newline;
if(convertedChance < 5){
output += "CHANCE ADJUSTED TO 5.0%" + newline;
convertedChance = 5.0f;
}
if(convertedChance > 95){
output += "CHANCE ADJUSTED TO 95.0%" + newline;
convertedChance = 95.0f;
}
for(int i = 0; i < attacks; i++){
int roll = ThreadLocalRandom.current().nextInt(101);
if(roll <= convertedChance){
hits += 1;
}else{
misses += 1;
}
}
float totalHits = defaultHits + hits;
float totalMisses = defualtMisses + misses;
float hitPercent = Math.round(totalHits / attacks * 100);
float missPercent = Math.round(totalMisses / attacks * 100);
output += "HITS LANDED: " + (defaultHits + hits) + "(" + Math.round(hitPercent) + "%)" + newline;
output += "HITS MISSED: " + (defualtMisses + misses) + "(" + Math.round(missPercent) + "%)";
throwbackInfo(playerCharacter,output);
return;
}
try
{
simCount = Integer.parseInt(words[0]);
+2 -1
View File
@@ -13,6 +13,7 @@ import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.BuildingManager;
import engine.gameManager.ChatManager;
import engine.gameManager.PlayerManager;
import engine.math.Vector3fImmutable;
import engine.objects.*;
@@ -56,7 +57,7 @@ public class SlotTestCmd extends AbstractDevCmd {
BuildingLocation buildingLocation = BuildingManager._slotLocations.get(building.meshUUID).get(slot - 1);
slotLocation = building.getLoc().add(buildingLocation.getLocation());
slotLocation = Vector3fImmutable.rotateAroundPoint(building.getLoc(), slotLocation, building.getBounds().getQuaternion().angleY);
playerCharacter.teleport(slotLocation);
PlayerManager.teleport(playerCharacter, slotLocation);
return;
}
+2 -1
View File
@@ -10,6 +10,7 @@
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.PlayerManager;
import engine.gameManager.SessionManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector3fImmutable;
@@ -91,7 +92,7 @@ public class SummonCmd extends AbstractDevCmd {
this.setTarget(pcToSummon); //for logging
Vector3fImmutable loc = pc.getLoc();
pcToSummon.teleport(loc);
PlayerManager.teleport(pcToSummon, loc);
this.throwbackInfo(pc, "Player " + pcToSummon.getCombinedName()
+ " has been summoned to your location.");
+2 -1
View File
@@ -11,6 +11,7 @@ package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.PlayerManager;
import engine.objects.AbstractGameObject;
import engine.objects.Mob;
import engine.objects.PlayerCharacter;
@@ -77,7 +78,7 @@ public class aiInfoCmd extends AbstractDevCmd {
output += "Players Loaded:" + newline;
}
for (Map.Entry<Integer, Boolean> entry : mob.playerAgroMap.entrySet()) {
output += "Player ID: " + entry.getKey() + " Hate Value: " + (PlayerCharacter.getPlayerCharacter(entry.getKey())).getHateValue() + newline;
output += "Player ID: " + entry.getKey() + " Hate Value: " + (PlayerManager.getPlayerCharacter(entry.getKey())).getHateValue() + newline;
}
if (mob.getCombatTarget() != null)
output += "Current Target: " + mob.getCombatTarget().getName() + newline;
+5 -5
View File
@@ -513,7 +513,7 @@ public enum BuildingManager {
NPC npc = null;
npc = NPC.createNPC(pirateName, NpcID.getObjectUUID(), NpcLoc, null, zone, (short) rank, building);
npc = NPCManager.createNPC(pirateName, NpcID.getObjectUUID(), NpcLoc, null, zone, (short) rank, building);
if (npc == null)
return false;
@@ -568,7 +568,7 @@ public enum BuildingManager {
Mob mob;
NPC npc;
if (NPC.ISWallArcher(contract)) {
if (NPCManager.ISWallArcher(contract)) {
mob = Mob.createMob(contract.getMobbaseID(), Vector3fImmutable.ZERO, contractOwner.getGuild(), true, zone, building, contract.getContractID(), pirateName, rank);
@@ -580,7 +580,7 @@ public enum BuildingManager {
return true;
}
if (NPC.ISGuardCaptain(contract.getContractID())) {
if (NPCManager.ISGuardCaptain(contract.getContractID())) {
mob = Mob.createMob(contract.getMobbaseID(), Vector3fImmutable.ZERO, contractOwner.getGuild(), true, zone, building, contract.getContractID(), pirateName, rank);
@@ -604,7 +604,7 @@ public enum BuildingManager {
return true;
}
npc = NPC.createNPC(pirateName, contract.getObjectUUID(), Vector3fImmutable.ZERO, contractOwner.getGuild(), zone, (short) rank, building);
npc = NPCManager.createNPC(pirateName, contract.getObjectUUID(), Vector3fImmutable.ZERO, contractOwner.getGuild(), zone, (short) rank, building);
if (npc == null)
return false;
@@ -810,7 +810,7 @@ public enum BuildingManager {
}
ManageCityAssetsMsg mca = new ManageCityAssetsMsg();
mca.actionType = NPC.SVR_CLOSE_WINDOW;
mca.actionType = NPCManager.SVR_CLOSE_WINDOW;
mca.setTargetType(building.getObjectType().ordinal());
mca.setTargetID(building.getObjectUUID());
origin.sendMsg(mca);
-10
View File
@@ -27,7 +27,6 @@ import engine.objects.*;
import engine.server.MBServerStatics;
import engine.server.world.WorldServer;
import engine.session.Session;
import engine.util.KeyCloneAudit;
import org.pmw.tinylog.Logger;
import java.util.ArrayList;
@@ -85,15 +84,6 @@ public enum ChatManager {
if ((checkTime > 0L) && (curMsgTime - checkTime < FLOOD_TIME_THRESHOLD))
isFlood = true;
if(KeyCloneAudit.auditChatMsg(pc,msg.getMessage())){
return;
}
if(msg.getMessage().equalsIgnoreCase("./zerg")){
ZergManager.PrintDetailsToClient(pc);
return;
}
switch (protocolMsg) {
case CHATSAY:
ChatManager.chatSay(pc, msg.getMessage(), isFlood);
+79 -287
View File
@@ -8,7 +8,6 @@
package engine.gameManager;
import engine.Enum;
import engine.Enum.*;
import engine.exception.MsgSendException;
import engine.job.JobContainer;
@@ -27,6 +26,7 @@ import engine.powers.effectmodifiers.WeaponProcEffectModifier;
import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger;
import java.util.HashSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ThreadLocalRandom;
@@ -65,7 +65,7 @@ public enum CombatManager {
targetType = msg.getTargetType();
if (targetType == GameObjectType.PlayerCharacter.ordinal()) {
target = PlayerCharacter.getFromCache(msg.getTargetID());
target = PlayerManager.getFromCache(msg.getTargetID());
} else if (targetType == GameObjectType.Building.ordinal()) {
target = BuildingManager.getBuildingFromCache(msg.getTargetID());
} else if (targetType == GameObjectType.Mob.ordinal()) {
@@ -171,7 +171,7 @@ public enum CombatManager {
targetType = msg.getTargetType();
if (targetType == GameObjectType.PlayerCharacter.ordinal())
target = PlayerCharacter.getFromCache(msg.getTargetID());
target = PlayerManager.getFromCache(msg.getTargetID());
else if (targetType == GameObjectType.Building.ordinal())
target = BuildingManager.getBuildingFromCache(msg.getTargetID());
else if (targetType == GameObjectType.Mob.ordinal())
@@ -301,21 +301,6 @@ public enum CombatManager {
if (target == null)
return 0;
//pet to assist in attacking target
if(abstractCharacter.getObjectType().equals(GameObjectType.PlayerCharacter)){
PlayerCharacter attacker = (PlayerCharacter)abstractCharacter;
if(attacker.combatStats == null){
attacker.combatStats = new PlayerCombatStats(attacker);
}
if(attacker.getPet() != null){
Mob pet = attacker.getPet();
if(pet.combatTarget == null && pet.assist)
pet.setCombatTarget(attacker.combatTarget);
}
}
//target must be valid type
if (AbstractWorldObject.IsAbstractCharacter(target)) {
@@ -331,13 +316,10 @@ public enum CombatManager {
else if (!tar.isActive())
return 0;
if (target.getObjectType().equals(GameObjectType.PlayerCharacter) && abstractCharacter.getObjectType().equals(GameObjectType.PlayerCharacter) && abstractCharacter.getTimers().get("Attack" + slot) == null) {
if(((PlayerCharacter)target).combatStats == null){
((PlayerCharacter)target).combatStats = new PlayerCombatStats(((PlayerCharacter)target));
}
if (target.getObjectType().equals(GameObjectType.PlayerCharacter) && abstractCharacter.getObjectType().equals(GameObjectType.PlayerCharacter) && abstractCharacter.getTimers().get("Attack" + slot) == null)
if (!((PlayerCharacter) abstractCharacter).canSee((PlayerCharacter) target))
return 0;
}
//must not be immune to all or immune to attack
Resists res = tar.getResists();
@@ -432,10 +414,7 @@ public enum CombatManager {
//Source can attack.
//NOTE Don't 'return;' beyond this point until timer created
if(abstractCharacter.getObjectType().equals(GameObjectType.PlayerCharacter)){
PlayerCharacter pc = (PlayerCharacter)abstractCharacter;
pc.updateMovementState();
}
boolean attackFailure = (wb != null) && (wb.getRange() > 35f) && abstractCharacter.isMoving();
//Target can't attack on move with ranged weapons.
@@ -473,28 +452,6 @@ public enum CombatManager {
//Range check.
//if(abstractCharacter.isMoving()){
// range += (abstractCharacter.getSpeed() * 0.1f); // add movement vector offset for moving attacker
//}
//if(AbstractWorldObject.IsAbstractCharacter(target)) {
// AbstractCharacter tarAc = (AbstractCharacter) target;
// if(tarAc != null && tarAc.isMoving()){
// range += (tarAc.getSpeed() * 0.1f); // add movement vector offset for moving target
// }
//}
//float attackerHitBox = abstractCharacter.calcHitBox(); // add attacker hitbox
//float targetHitBox = 0.0f;
//if(AbstractCharacter.IsAbstractCharacter(target)){
// AbstractCharacter targetCharacter = (AbstractCharacter)target;
// targetHitBox = targetCharacter.calcHitBox(); // add target hitbox
//}
//range += attackerHitBox + targetHitBox + 2.5f; // offset standard range to sync where client tries to stop
range += 2; //sync offset
if (NotInRange(abstractCharacter, target, range)) {
//target is in stealth and can't be seen by source
@@ -518,16 +475,6 @@ public enum CombatManager {
}
}
if(abstractCharacter.getObjectType().equals(GameObjectType.PlayerCharacter)){
PlayerCharacter pc = (PlayerCharacter)abstractCharacter;
if(pc.isBoxed){
if(target.getObjectType().equals(GameObjectType.PlayerCharacter)) {
ChatManager.chatSystemInfo(pc, "You Are PvE Flagged: Cannot Attack Players.");
attackFailure = true;
}
}
}
//TODO Verify attacker has los (if not ranged weapon).
if (!attackFailure) {
@@ -536,24 +483,16 @@ public enum CombatManager {
createTimer(abstractCharacter, slot, 20, true); //2 second for no weapon
else {
int wepSpeed = (int) (wb.getSpeed());
if(abstractCharacter.getObjectType().equals(GameObjectType.PlayerCharacter)){
PlayerCharacter pc = (PlayerCharacter)abstractCharacter;
if(slot == 1){
wepSpeed = (int) pc.combatStats.attackSpeedHandOne;
}else{
wepSpeed = (int) pc.combatStats.attackSpeedHandTwo;
}
}else {
if (weapon != null && weapon.getBonusPercent(ModType.WeaponSpeed, SourceType.None) != 0f) //add weapon speed bonus
wepSpeed *= (1 + weapon.getBonus(ModType.WeaponSpeed, SourceType.None));
if (weapon != null && weapon.getBonusPercent(ModType.WeaponSpeed, SourceType.None) != 0f) //add weapon speed bonus
wepSpeed *= (1 + weapon.getBonus(ModType.WeaponSpeed, SourceType.None));
if (abstractCharacter.getBonuses() != null && abstractCharacter.getBonuses().getFloatPercentAll(ModType.AttackDelay, SourceType.None) != 0f) //add effects speed bonus
wepSpeed *= (1 + abstractCharacter.getBonuses().getFloatPercentAll(ModType.AttackDelay, SourceType.None));
if (abstractCharacter.getBonuses() != null && abstractCharacter.getBonuses().getFloatPercentAll(ModType.AttackDelay, SourceType.None) != 0f) //add effects speed bonus
wepSpeed *= (1 + abstractCharacter.getBonuses().getFloatPercentAll(ModType.AttackDelay, SourceType.None));
if (wepSpeed < 10)
wepSpeed = 10; //Old was 10, but it can be reached lower with legit buffs,effects.
if (wepSpeed < 10)
wepSpeed = 10; //Old was 10, but it can be reached lower with legit buffs,effects.
}
createTimer(abstractCharacter, slot, wepSpeed, true);
}
@@ -598,32 +537,14 @@ public enum CombatManager {
if (target == null)
return;
if(ac.getObjectType().equals(GameObjectType.PlayerCharacter)){
PlayerCharacter pc = (PlayerCharacter) ac;
if( pc.combatStats == null){
pc.combatStats = new PlayerCombatStats(pc);
}
pc.combatStats.calculateATR(true);
pc.combatStats.calculateATR(false);
if (mainHand) {
atr = pc.combatStats.atrHandOne;
minDamage = pc.combatStats.minDamageHandOne;
maxDamage = pc.combatStats.maxDamageHandOne;
} else {
atr = pc.combatStats.atrHandTwo;
minDamage = pc.combatStats.minDamageHandTwo;
maxDamage = pc.combatStats.maxDamageHandTwo;
}
}else {
if (mainHand) {
atr = ac.getAtrHandOne();
minDamage = ac.getMinDamageHandOne();
maxDamage = ac.getMaxDamageHandOne();
} else {
atr = ac.getAtrHandTwo();
minDamage = ac.getMinDamageHandTwo();
maxDamage = ac.getMaxDamageHandTwo();
}
if (mainHand) {
atr = ac.getAtrHandOne();
minDamage = ac.getMinDamageHandOne();
maxDamage = ac.getMaxDamageHandOne();
} else {
atr = ac.getAtrHandTwo();
minDamage = ac.getMinDamageHandTwo();
maxDamage = ac.getMaxDamageHandTwo();
}
boolean tarIsRat = false;
@@ -717,15 +638,7 @@ public enum CombatManager {
}
} else {
AbstractCharacter tar = (AbstractCharacter) target;
if(tar.getObjectType().equals(GameObjectType.PlayerCharacter)){
if(((PlayerCharacter)tar).combatStats == null){
((PlayerCharacter)tar).combatStats = new PlayerCombatStats((PlayerCharacter)tar);
}
((PlayerCharacter)tar).combatStats.calculateDefense();
defense = ((PlayerCharacter)tar).combatStats.defense;
}else {
defense = tar.getDefenseRating();
}
defense = tar.getDefenseRating();
handleRetaliate(tar, ac); //Handle target attacking back if in combat and has no other target
}
@@ -734,7 +647,7 @@ public enum CombatManager {
//Get hit chance
//int chance;
//float dif = atr - defense;
float dif = atr - defense;
//if (dif > 100)
// chance = 94;
@@ -749,8 +662,9 @@ public enum CombatManager {
DeferredPowerJob dpj = null;
boolean hitLanded = LandHit((int)atr,(int)defense);
if (hitLanded) {
if (LandHit((int)atr,(int)defense)) {
if (ac.getObjectType().equals(GameObjectType.PlayerCharacter))
updateAttackTimers((PlayerCharacter) ac, target, true);
@@ -779,25 +693,7 @@ public enum CombatManager {
PlayerBonuses bonus = ac.getBonuses();
float attackRange = getWeaponRange(wb, bonus);
if(ac.isMoving()){
attackRange += (ac.getSpeed() * 0.1f);
}
if(AbstractWorldObject.IsAbstractCharacter(target)) {
//AbstractCharacter tarAc = (AbstractCharacter) target;
if(tarAc != null && tarAc.isMoving()){
attackRange += (tarAc.getSpeed() * 0.1f);
}
}
if(specialCaseHitRoll(dpj.getPowerToken())) {
if(hitLanded) {
dpj.attack(target, attackRange);
}
}else{
dpj.attack(target, attackRange);
}
dpj.attack(target, attackRange);
if (dpj.getPower() != null && (dpj.getPowerToken() == -1851459567 || dpj.getPowerToken() == -1851489518))
((PlayerCharacter) ac).setWeaponPower(dpj);
@@ -812,25 +708,7 @@ public enum CombatManager {
if (dpj != null && dpj.getPower() != null && (dpj.getPowerToken() == -1851459567 || dpj.getPowerToken() == -1851489518)) {
float attackRange = getWeaponRange(wb, bonuses);
if(ac.isMoving()){
attackRange += (ac.getSpeed() * 0.1f);
}
if(AbstractWorldObject.IsAbstractCharacter(target)) {
//AbstractCharacter tarAc = (AbstractCharacter) target;
if(tarAc != null && tarAc.isMoving()){
attackRange += (tarAc.getSpeed() * 0.1f);
}
}
if(specialCaseHitRoll(dpj.getPowerToken())) {
if(hitLanded) {
dpj.attack(target, attackRange);
}
}else{
dpj.attack(target, attackRange);
}
dpj.attack(target, attackRange);
}
}
@@ -937,28 +815,8 @@ public enum CombatManager {
else
damage = calculateDamage(ac, tarAc, minDamage, maxDamage, damageType, resists);
if(weapon != null && weapon.effects != null){
float armorPierce = 0;
for(Effect eff : weapon.effects.values()){
for(AbstractEffectModifier mod : eff.getEffectModifiers()){
if(mod.modType.equals(ModType.ArmorPiercing)){
armorPierce += mod.getPercentMod() + (mod.getRamp() * eff.getTrains());
}
}
}
if(armorPierce > 0){
damage *= 1 + (armorPierce * 0.01f);
}
}
//Resists.handleFortitude(tarAc,damageType,damage);
float d = 0f;
int originalDamage = (int)damage;
if(ac != null && ac.getObjectType().equals(GameObjectType.PlayerCharacter)){
damage *= ((PlayerCharacter)ac).ZergMultiplier;
} // Health modifications are modified by the ZergMechanic
errorTrack = 12;
//Subtract Damage from target's health
@@ -972,15 +830,9 @@ public enum CombatManager {
ac.setHateValue(damage * MBServerStatics.PLAYER_COMBAT_HATE_MODIFIER);
((Mob) tarAc).handleDirectAggro(ac);
}
if (tarAc.getHealth() > 0) {
d = tarAc.modifyHealth(-damage, ac, false);
if(tarAc != null && tarAc.getObjectType().equals(GameObjectType.PlayerCharacter) && ((PlayerCharacter)ac).ZergMultiplier != 1.0f){
PlayerCharacter debugged = (PlayerCharacter)tarAc;
ChatManager.chatSystemInfo(debugged, "ZERG DEBUG: " + ac.getName() + " Hits You For: " + (int)damage + " instead of " + originalDamage);
}
}
tarAc.cancelOnTakeDamage();
if (tarAc.getHealth() > 0)
d = tarAc.modifyHealth(-damage, ac, false);
} else if (target.getObjectType().equals(GameObjectType.Building)) {
@@ -1012,7 +864,35 @@ public enum CombatManager {
errorTrack = 14;
//handle procs
procChanceHandler(weapon,ac,tarAc);
if (weapon != null && tarAc != null && tarAc.isAlive()) {
ConcurrentHashMap<String, Effect> effects = weapon.getEffects();
for (Effect eff : effects.values()) {
if (eff == null)
continue;
HashSet<AbstractEffectModifier> aems = eff.getEffectModifiers();
if (aems != null) {
for (AbstractEffectModifier aem : aems) {
if (!tarAc.isAlive())
break;
if (aem instanceof WeaponProcEffectModifier) {
int procChance = ThreadLocalRandom.current().nextInt(100);
if (procChance < MBServerStatics.PROC_CHANCE)
((WeaponProcEffectModifier) aem).applyProc(ac, target);
}
}
}
}
}
errorTrack = 15;
@@ -1021,16 +901,6 @@ public enum CombatManager {
if (ac.isAlive() && tarAc != null && tarAc.isAlive())
handleDamageShields(ac, tarAc, damage);
//handle mob hate values
if(target.getObjectType().equals(GameObjectType.Mob) && ac.getObjectType().equals(GameObjectType.PlayerCharacter)){
Mob mobTarget = (Mob)target;
if(mobTarget.hate_values.containsKey((PlayerCharacter) ac)){
mobTarget.hate_values.put((PlayerCharacter) ac,mobTarget.hate_values.get((PlayerCharacter) ac) + damage);
}else{
mobTarget.hate_values.put((PlayerCharacter) ac, damage);
}
}
} else {
// Apply Weapon power effect if any.
@@ -1046,26 +916,7 @@ public enum CombatManager {
if (wp.requiresHitRoll() == false) {
PlayerBonuses bonus = ac.getBonuses();
float attackRange = getWeaponRange(wb, bonus);
if(ac.isMoving()){
attackRange += (ac.getSpeed() * 0.1f);
}
if(AbstractWorldObject.IsAbstractCharacter(target)) {
AbstractCharacter tarAc = (AbstractCharacter) target;
if(tarAc != null && tarAc.isMoving()){
attackRange += (tarAc.getSpeed() * 0.1f);
}
}
if(specialCaseHitRoll(dpj.getPowerToken())) {
if(hitLanded) {
dpj.attack(target, attackRange);
}
}else{
dpj.attack(target, attackRange);
}
dpj.attack(target, attackRange);
} else
((PlayerCharacter) ac).setWeaponPower(null);
}
@@ -1096,41 +947,6 @@ public enum CombatManager {
}
}
private static void procChanceHandler(Item weapon, AbstractCharacter ac, AbstractCharacter tarAc) {
//no weapon means no proc
if(weapon == null)
return;
//caster is dead of null, no proc
if(ac == null || !ac.isAlive())
return;
//target is dead or null, no proc
if(tarAc == null || !tarAc.isAlive())
return;
//no effects on weapon, skip proc
if(weapon.effects == null || weapon.effects.isEmpty())
return;
for (Effect eff : weapon.effects.values()){
for(AbstractEffectModifier mod : eff.getEffectModifiers()) {
if (mod.modType.equals(ModType.WeaponProc)) {
int procChance = ThreadLocalRandom.current().nextInt(100);
if (procChance < MBServerStatics.PROC_CHANCE) {
try {
((WeaponProcEffectModifier) mod).applyProc(ac, tarAc);
break;
} catch (Exception e) {
Logger.error(eff.getName() + " Failed To Cast Proc");
}
}
}
}
}
}
public static boolean canTestParry(AbstractCharacter ac, AbstractWorldObject target) {
if (ac == null || target == null || !AbstractWorldObject.IsAbstractCharacter(target))
@@ -1149,12 +965,6 @@ public enum CombatManager {
Item tarMain = tarItem.getItemFromEquipped(1);
Item tarOff = tarItem.getItemFromEquipped(2);
if(target.getObjectType().equals(GameObjectType.PlayerCharacter)){
PlayerCharacter pc = (PlayerCharacter) target;
if(pc.getRaceID() == 1999 && !isRanged(acMain) && !isRanged(acOff))
return true;
}
return !isRanged(acMain) && !isRanged(acOff) && !isRanged(tarMain) && !isRanged(tarOff);
}
@@ -1213,12 +1023,10 @@ public enum CombatManager {
//calculate resists in if any
if (resists != null)
damage = resists.getResistedDamage(source, target, damageType, damage, 0);
return damage;
return resists.getResistedDamage(source, target, damageType, damage, 0);
else
return damage;
}
private static void sendPassiveDefenseMessage(AbstractCharacter source, ItemBase wb, AbstractWorldObject target, int passiveType, DeferredPowerJob dpj, boolean mainHand) {
@@ -1247,6 +1055,10 @@ public enum CombatManager {
if (eff.getPower() != null && (eff.getPower().getToken() == 429506943 || eff.getPower().getToken() == 429408639 || eff.getPower().getToken() == 429513599 || eff.getPower().getToken() == 429415295))
swingAnimation = 0;
if(source != null && source.getObjectType().equals(GameObjectType.PlayerCharacter)){
damage *= ((PlayerCharacter)source).ZergMultiplier;
} // Health modifications are modified by the ZergMechanic
TargetedActionMsg cmm = new TargetedActionMsg(source, target, damage, swingAnimation);
DispatchMessage.sendToAllInRange(target, cmm);
}
@@ -1368,14 +1180,6 @@ public enum CombatManager {
private static boolean testPassive(AbstractCharacter source, AbstractCharacter target, String type) {
if(target.getBonuses() != null)
if(target.getBonuses().getBool(ModType.Stunned, SourceType.None))
return false;
if(source.getBonuses() != null)
if(source.getBonuses().getBool(ModType.IgnorePassiveDefense, SourceType.None))
return false;
float chance = target.getPassiveChance(type, source.getLevel(), true);
if (chance == 0f)
@@ -1386,7 +1190,7 @@ public enum CombatManager {
if (chance > 75f)
chance = 75f;
int roll = ThreadLocalRandom.current().nextInt(1,100);
int roll = ThreadLocalRandom.current().nextInt(100);
return roll < chance;
@@ -1445,7 +1249,7 @@ public enum CombatManager {
if (pc == null)
return;
if(pc.isFlying())
if(PlayerManager.isFlying(pc))
pc.setSit(false);
else
pc.setSit(toggle);
@@ -1564,9 +1368,9 @@ public enum CombatManager {
Resists resists = ac.getResists();
if (resists != null) {
if (resists != null)
amount = resists.getResistedDamage(target, ac, ds.getDamageType(), amount, 0);
}
total += amount;
}
@@ -1649,31 +1453,19 @@ public enum CombatManager {
((AbstractCharacter) awo).getCharItemManager().damageRandomArmor(1);
}
public static boolean LandHit(int ATR, int DEF){
//float chance = (ATR-((ATR+DEF) * 0.315f)) / ((DEF-((ATR+DEF) * 0.315f)) + (ATR-((ATR+DEF) * 0.315f)));
//float convertedChance = chance * 100;
public static boolean LandHit(int atr, int defense){
int roll = ThreadLocalRandom.current().nextInt(101);
float chance = (float)((atr-((atr+defense)*0.315))/((defense-((atr+defense)*0.315))+(atr-((atr+defense)*0.315))));
//if(roll <= 5)//always 5% chance to miss
// return false;
int connvertedChance = (int)(chance * 100);
//if(roll >= 95)//always 5% chance to hit
// return true;
if(connvertedChance < 5)
connvertedChance = 5;
float chance = PlayerCombatStats.getHitChance(ATR,DEF);
return chance >= roll;
}
if(connvertedChance > 95)
connvertedChance = 95;
public static boolean specialCaseHitRoll(int powerID){
switch(powerID) {
case 563200808: // Naargal's Bite
case 563205337: // Naargal's Dart
case 563205930: // Sword of Saint Malorn
return true;
default:
return false;
}
return connvertedChance > roll;
}
}
+1 -2
View File
@@ -98,8 +98,7 @@ public enum ConfigManager {
MB_MAGICBOT_FORTOFIX,
MB_MAGICBOT_RECRUIT,
MB_MAGICBOT_MAGICBOX,
MB_MAGICBOT_ADMINLOG,
MB_WORLD_BOXLIMIT;
MB_MAGICBOT_ADMINLOG;
// Map to hold our config pulled in from the environment
// We also use the config to point to the current message pump
+2 -2
View File
@@ -85,10 +85,10 @@ public enum DbManager {
switch (objectType) {
case PlayerCharacter:
outObject = PlayerCharacter.getPlayerCharacter(objectUUID);
outObject = PlayerManager.getPlayerCharacter(objectUUID);
break;
case NPC:
outObject = NPC.getNPC(objectUUID);
outObject = NPCManager.getNPC(objectUUID);
break;
case Mob:
outObject = Mob.getFromCache(objectUUID);
-21
View File
@@ -56,7 +56,6 @@ public enum DevCmdManager {
DevCmdManager.registerDevCmd(new PrintResistsCmd());
DevCmdManager.registerDevCmd(new PrintLocationCmd());
DevCmdManager.registerDevCmd(new InfoCmd());
DevCmdManager.registerDevCmd(new PrintEffectsCmd());
DevCmdManager.registerDevCmd(new aiInfoCmd());
DevCmdManager.registerDevCmd(new SimulateBootyCmd());
DevCmdManager.registerDevCmd(new GetHeightCmd());
@@ -86,7 +85,6 @@ public enum DevCmdManager {
DevCmdManager.registerDevCmd(new AddBuildingCmd());
DevCmdManager.registerDevCmd(new AddNPCCmd());
DevCmdManager.registerDevCmd(new AddMobCmd());
DevCmdManager.registerDevCmd(new DungenonCmd());
DevCmdManager.registerDevCmd(new RemoveObjectCmd());
DevCmdManager.registerDevCmd(new RotateCmd());
DevCmdManager.registerDevCmd(new FlashMsgCmd());
@@ -179,11 +177,6 @@ public enum DevCmdManager {
return false;
}
if(!pcSender.getTimestamps().containsKey("DEVCOMMAND"))
pcSender.getTimestamps().put("DEVCOMMAND",System.currentTimeMillis() - 1500L);
else if(System.currentTimeMillis() - pcSender.getTimestamps().get("DEVCOMMAND") < 1000L)
return false;
//kill any commands not available to everyone on production server
//only admin level can run dev commands on production
boolean playerAllowed = false;
@@ -196,20 +189,6 @@ public enum DevCmdManager {
case "gimme":
case "goto":
case "teleportmode":
case "printbonuses":
playerAllowed = true;
if (!a.status.equals(Enum.AccountStatus.ADMIN))
target = pcSender;
break;
}
}else{
switch (adc.getMainCmdString()) {
case "printresists":
case "printstats":
case "printskills":
case "printpowers":
case "printbonuses":
//case "gimme":
playerAllowed = true;
if (!a.status.equals(Enum.AccountStatus.ADMIN))
target = pcSender;
+5 -5
View File
@@ -74,16 +74,16 @@ public enum GuildManager {
}
}
playerCharacter.setInnerCouncil(false);
playerCharacter.setGuildLeader(false);
PlayerManager.setInnerCouncil(playerCharacter, false);
PlayerManager.setGuildLeader(playerCharacter, false);
playerCharacter.setGuild(guild);
// Cleanup guild stuff
playerCharacter.resetGuildStatuses();
PlayerManager.resetGuildStatuses(playerCharacter);
// send success message to client
if (fromTeleportScreen && guild.isNPCGuild())
playerCharacter.setFullMember(true);
PlayerManager.setFullMember(playerCharacter, true);
msg = new AcceptInviteToGuildMsg(guild.getObjectUUID(), 1, 0);
@@ -178,7 +178,7 @@ public enum GuildManager {
bindBuilding = city.getTOL();
if (bindBuilding == null)
bindBuilding = PlayerCharacter.getBindBuildingForGuild(playerCharacter);
bindBuilding = PlayerManager.getBindBuildingForGuild(playerCharacter);
playerCharacter.setBindBuildingID(bindBuilding != null ? bindBuilding.getObjectUUID() : 0);
}
-289
View File
@@ -1,289 +0,0 @@
package engine.gameManager;
import engine.mobileAI.MobAI;
import engine.mobileAI.utilities.CombatUtilities;
import engine.mobileAI.utilities.MovementUtilities;
import engine.objects.*;
import engine.server.MBServerStatics;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.concurrent.ThreadLocalRandom;
public class HellgateManager {
public static ArrayList<Mob> hellgate_mobs;
public static ArrayList<Mob> hellgate_mini_bosses;
public static Mob hellgate_boss;
public static Long hellgate_time_completed = 0L;
public static final int citadel_ruins_zone_id = 993;
public static final int hell_portal_1_zone_id = 994;
public static final int hell_portal_2_zone_id = 996;
public static final int hell_portal_3_zone_id = 997;
public static final int hell_portal_4_zone_id = 998;
public static boolean initialized = false;
public static final ArrayList<Integer> static_rune_ids_low = new ArrayList<>(Arrays.asList(
250001, 250002, 250003, 250004, 250005, 250006, 250010, 250011,
250012, 250013, 250014, 250015, 250019, 250020, 250021, 250022,
250023, 250024, 250028, 250029, 250030, 250031, 250032, 250033,
250037, 250038, 250039, 250040, 250041, 250042
));
public static final ArrayList<Integer> static_rune_ids_mid = new ArrayList<>(Arrays.asList(
250006, 250007, 250008,
250015, 250016, 250017,
250024, 250025, 250026,
250033, 250034, 250035,
250042, 250043, 250044
));
public static final ArrayList<Integer> static_rune_ids_high = new ArrayList<>(Arrays.asList(
250007, 250008,
250016, 250017,
250025, 250026,
250034, 250035,
250043, 250044
));
public static void confiureHellgate(){
compile_mob_list();
}
public static void pulseHellgates(){
if(!initialized){
confiureHellgate();
if(hellgate_boss != null)
initialized = true;
return;
}
if(hellgate_mobs == null) {
return;
}
if(hellgate_mini_bosses == null) {
return;
}
if(hellgate_boss == null){
return;
}
if(!hellgate_boss.isAlive() && hellgate_time_completed == 0L)
hellgate_time_completed = System.currentTimeMillis();
if(hellgate_time_completed != 0L && System.currentTimeMillis() > hellgate_time_completed + MBServerStatics.THIRTY_MINUTES){
ResetHellgate();
}
}
public static void compile_mob_list(){
if(hellgate_mobs == null) {
hellgate_mobs =new ArrayList<>();
}
if(hellgate_mini_bosses == null) {
hellgate_mini_bosses =new ArrayList<>();
}
Zone hellgate_zone = ZoneManager.getZoneByUUID(citadel_ruins_zone_id);
if(hellgate_zone == null)
return;
for(Mob mob : hellgate_zone.zoneMobSet){
switch(mob.getMobBaseID()){
case 14163: // basic saetor warrior
mob.getCharItemManager().clearInventory();
SpecialLootHandler(mob,false,false);
mob.setResists(new Resists("Elite"));
mob.healthMax = 8500;
mob.setHealth(mob.healthMax);
hellgate_mobs.add(mob);
break;
case 12770: // minotaur mini boss
mob.getCharItemManager().clearInventory();
SpecialLootHandler(mob,true,false);
mob.setResists(new Resists("Elite"));
mob.healthMax = 12500;
mob.setHealth(mob.healthMax);
hellgate_mini_bosses.add(mob);
break;
case 14180: // mordoth, son of morlock
mob.getCharItemManager().clearInventory();
SpecialLootHandler(mob,false,true);
mob.setResists(new Resists("Elite"));
mob.healthMax = mob.mobBase.getHealthMax();
mob.setHealth(mob.healthMax);
hellgate_boss = mob;
break;
}
}
}
public static void ResetHellgate(){
hellgate_time_completed = 0L;
for(Mob mob : hellgate_mobs){
if(!mob.isAlive()){
if(!mob.despawned){
mob.despawn();
}
mob.respawn();
}
mob.setHealth(mob.healthMax);
SpecialLootHandler(mob,false,false);
}
for(Mob mob : hellgate_mini_bosses){
if(!mob.isAlive()){
if(!mob.despawned){
mob.despawn();
}
mob.respawn();
}
mob.setHealth(mob.healthMax);
SpecialLootHandler(mob,true,false);
}
if(!hellgate_boss.isAlive()){
if(!hellgate_boss.despawned){
hellgate_boss.despawn();
}
hellgate_boss.respawn();
}
hellgate_boss.setHealth(hellgate_boss.healthMax);
SpecialLootHandler(hellgate_boss,false,true);
}
public static void SpecialMobAIHandler(Mob mob){
if(mob.playerAgroMap.isEmpty())
return;
if(!mob.isAlive())
return;
if(mob.combatTarget == null)
MobAI.NewAggroMechanic(mob);
if(MovementUtilities.canMove(mob) && mob.combatTarget != null && !CombatUtilities.inRangeToAttack(mob,mob.combatTarget))
MobAI.chaseTarget(mob);
if(mob.combatTarget != null)
MobAI.CheckForAttack(mob);
if(mob.combatTarget == null && mob.loc.distanceSquared(mob.bindLoc) > 1024) {//32 units
mob.teleport(mob.bindLoc);
mob.setCombatTarget(null);
MovementUtilities.aiMove(mob,mob.bindLoc,true);
}
}
public static void SpecialLootHandler(Mob mob, Boolean commander, Boolean epic){
mob.getCharItemManager().clearInventory();
int contractRoll = ThreadLocalRandom.current().nextInt(1,101);
if(contractRoll <= 25){
//generate random contract
}
int runeRoll = ThreadLocalRandom.current().nextInt(1,101);
ItemBase runeBase = null;
int roll;
int itemId;
if(runeRoll <= 60 && !commander && !epic) {
//generate random rune (standard 5-30)
roll = ThreadLocalRandom.current().nextInt(static_rune_ids_low.size() + 1);
itemId = static_rune_ids_low.get(0);
try {
itemId = static_rune_ids_low.get(roll);
} catch (Exception e) {
}
runeBase = ItemBase.getItemBase(itemId);
if (runeBase != null) {
MobLoot rune = new MobLoot(mob, runeBase, true);
if (rune != null)
mob.getCharItemManager().addItemToInventory(rune);
}
}
if(runeRoll <= 50 && commander) {
//generate random rune (30-40)
roll = ThreadLocalRandom.current().nextInt(static_rune_ids_mid.size() + 1);
itemId = static_rune_ids_mid.get(0);
try {
itemId = static_rune_ids_mid.get(roll);
} catch (Exception e) {
}
runeBase = ItemBase.getItemBase(itemId);
if (runeBase != null) {
MobLoot rune = new MobLoot(mob, runeBase, true);
if (rune != null)
mob.getCharItemManager().addItemToInventory(rune);
}
}
if(runeRoll <= 80 && epic) {
//generate random rune (35-40)
roll = ThreadLocalRandom.current().nextInt(static_rune_ids_high.size() + 1);
itemId = static_rune_ids_high.get(0);
try {
itemId = static_rune_ids_high.get(roll);
} catch (Exception e) {
}
runeBase = ItemBase.getItemBase(itemId);
if (runeBase != null) {
MobLoot rune = new MobLoot(mob, runeBase, true);
if (rune != null)
mob.getCharItemManager().addItemToInventory(rune);
}
}
if(commander || epic) {
//handle special case for racial guards
roll = ThreadLocalRandom.current().nextInt(LootManager.racial_guard_uuids.size() + 1);
itemId = LootManager.racial_guard_uuids.get(0);
try {
itemId = LootManager.racial_guard_uuids.get(roll);
} catch (Exception e) {
}
runeBase = ItemBase.getItemBase(itemId);
if (runeBase != null) {
MobLoot rune = new MobLoot(mob, runeBase, true);
if (rune != null)
mob.getCharItemManager().addItemToInventory(rune);
}
}
if(epic){
//handle glass chance for epic
int glassRoll = ThreadLocalRandom.current().nextInt(1,101);
if(glassRoll < 5){
int glassID = LootManager.rollRandomItem(126);
ItemBase glassItem = ItemBase.getItemBase(glassID);
if (glassItem != null) {
MobLoot glass = new MobLoot(mob, glassItem, true);
if (glass != null)
mob.getCharItemManager().addItemToInventory(glass);
}
}
}
//handle gold drops
int goldDrop;
if(!commander && !epic){
goldDrop = ThreadLocalRandom.current().nextInt(25000);
mob.getCharItemManager().addGoldToInventory(goldDrop,false);
}
if(commander){
goldDrop = ThreadLocalRandom.current().nextInt(100000,250000);
mob.getCharItemManager().addGoldToInventory(goldDrop,false);
}
if(epic){
goldDrop = ThreadLocalRandom.current().nextInt(2500000,5000000);
mob.getCharItemManager().addGoldToInventory(goldDrop,false);
}
}
}
-238
View File
@@ -1,238 +0,0 @@
package engine.gameManager;
import engine.Enum;
import engine.InterestManagement.WorldGrid;
import engine.math.Vector3fImmutable;
import engine.net.Dispatch;
import engine.net.DispatchMessage;
import engine.net.client.msg.HotzoneChangeMsg;
import engine.net.client.msg.chat.ChatSystemMsg;
import engine.objects.*;
import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class HotzoneManager {
public static Long lastPulseTime = 0L;
public static HashMap<Guild, ArrayList<PlayerCharacter>> playersPresent;
public static Mob hotzoneMob = null;
public static boolean three_quarter_health = false;
public static boolean half_health = false;
public static boolean quarter_health = false;
public static void SelectRandomHotzone(){
if(hotzoneMob != null){
hotzoneMob.killCharacter("Hotzone Over");
hotzoneMob.despawn();
hotzoneMob.spawnTime = 1000000000;
DbManager.MobQueries.DELETE_MOB( hotzoneMob);
}
Random random = new Random();
Zone newHotzone = null;
while (newHotzone == null || newHotzone.getObjectUUID() == 931 || newHotzone.getObjectUUID() == 913)
newHotzone = (Zone) ZoneManager.macroZones.toArray()[random.nextInt(ZoneManager.macroZones.size())];
ZoneManager.setHotZone(newHotzone);
ZoneManager.hotZone = newHotzone;
int R8UUId = 0;
switch(random.nextInt(5)) {
case 1:
R8UUId = 14152;
break;
case 2:
R8UUId = 14179;
break;
case 3:
R8UUId = 14180;
break;
case 4:
R8UUId = 14220;
break;
default:
R8UUId = 14319;
break;
}
Mob created = Mob.createMob(R8UUId,newHotzone.getLoc(), Guild.getErrantGuild(),true,newHotzone,null,0,"",85);
if(created == null){
Logger.error("Failed To Generate Hotzone R8 Mob");
return;
}
ChatSystemMsg chatMsg = new ChatSystemMsg(null, created.getFirstName() + " has spawned in " + newHotzone.getName() + ". Glory and riches await adventurers who dare defeat it!");
chatMsg.setMessageType(10);
chatMsg.setChannel(Enum.ChatChannelType.SYSTEM.getChannelID());
DispatchMessage.dispatchMsgToAll(chatMsg);
created.bindLoc = newHotzone.getLoc();
created.runAfterLoad();
WorldGrid.addObject(created,created.bindLoc.x,created.bindLoc.z);
created.teleport(created.bindLoc);
created.BehaviourType = Enum.MobBehaviourType.Aggro;
hotzoneMob = created;
created.setHealth(100000);
created.setResists(new Resists("Dropper"));
GenerateHotzoneEpicLoot(created);
ZoneManager.hotZone = newHotzone;
for(PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()) {
HotzoneChangeMsg hcm = new HotzoneChangeMsg(Enum.GameObjectType.Zone.ordinal(), ZoneManager.hotZone.getObjectUUID());
Dispatch dispatch = Dispatch.borrow(player, hcm);
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
}
three_quarter_health = false;
half_health = false;
quarter_health = false;
}
public static void GenerateHotzoneEpicLoot(Mob mob) {
mob.getCharItemManager().clearInventory();
Random random = new Random();
int roll;
int itemId;
//wrapped rune:
ItemBase runeBase = ItemBase.getItemBase(971070);
if (runeBase != null) {
MobLoot rune = new MobLoot(mob, runeBase, true);
if (rune != null)
mob.getCharItemManager().addItemToInventory(rune);
}
roll = ThreadLocalRandom.current().nextInt(1, 101);
if (roll >= 95) {
//glass
int glassID = LootManager.rollRandomItem(126);
ItemBase glassItem = ItemBase.getItemBase(glassID);
if (glassItem != null) {
MobLoot glass = new MobLoot(mob, glassItem, true);
if (glass != null)
mob.getCharItemManager().addItemToInventory(glass);
}
}
roll = ThreadLocalRandom.current().nextInt(1, 101);
if (roll >= 95) {
//r8 banescroll
int baneID = 910018;
ItemBase baneItem = ItemBase.getItemBase(baneID);
if (baneItem != null) {
MobLoot bane = new MobLoot(mob, baneItem, true);
if (bane != null)
mob.getCharItemManager().addItemToInventory(bane);
}
}
roll = ThreadLocalRandom.current().nextInt(1, 101);
if (roll >= 95) {
//guard captain
roll = ThreadLocalRandom.current().nextInt(LootManager.racial_guard_uuids.size() + 1);
itemId = LootManager.racial_guard_uuids.get(0);
try {
itemId = LootManager.racial_guard_uuids.get(roll);
} catch (Exception e) {
}
runeBase = ItemBase.getItemBase(itemId);
if (runeBase != null) {
MobLoot rune = new MobLoot(mob, runeBase, true);
if (rune != null)
mob.getCharItemManager().addItemToInventory(rune);
}
}
}
public static void ClearHotzone(){
ZoneManager.hotZone = null;
for(PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()) {
HotzoneChangeMsg hcm = new HotzoneChangeMsg(Enum.GameObjectType.Zone.ordinal(), 0);
Dispatch dispatch = Dispatch.borrow(player, hcm);
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
}
}
public static void pulse(){
if(HotzoneManager.playersPresent == null)
HotzoneManager.playersPresent = new HashMap<>();
if(ZoneManager.hotZone == null)
return;
if(lastPulseTime + 5000L > System.currentTimeMillis())
return;
lastPulseTime = System.currentTimeMillis();
//handle world announcements for HZ boss
if(hotzoneMob != null){
float health = hotzoneMob.getHealth();
if(health < 75000 && health > 50000 && !three_quarter_health){
//mob at 50%-75% health
three_quarter_health = true;
String name = hotzoneMob.getName();
ChatSystemMsg chatMsg = new ChatSystemMsg(null, name + " In The Hotzone Is At 75% Health");
chatMsg.setMessageType(10);
chatMsg.setChannel(Enum.ChatChannelType.SYSTEM.getChannelID());
DispatchMessage.dispatchMsgToAll(chatMsg);
}else if(health < 50000 && health > 25000 && !half_health){
//mob ta 25%-50% health
half_health = true;
String name = hotzoneMob.getName();
ChatSystemMsg chatMsg = new ChatSystemMsg(null, name + " In The Hotzone Is At 50% Health");
chatMsg.setMessageType(10);
chatMsg.setChannel(Enum.ChatChannelType.SYSTEM.getChannelID());
DispatchMessage.dispatchMsgToAll(chatMsg);
}else if(health < 25000 && !quarter_health){
//mob under 25% health
quarter_health = true;
String name = hotzoneMob.getName();
ChatSystemMsg chatMsg = new ChatSystemMsg(null, name + " In The Hotzone Is At 25% Health");
chatMsg.setMessageType(10);
chatMsg.setChannel(Enum.ChatChannelType.SYSTEM.getChannelID());
DispatchMessage.dispatchMsgToAll(chatMsg);
}else if (health > 75000){
//mob at 75% - 100% health
}
}
HashSet<AbstractWorldObject> inRange = WorldGrid.getObjectsInRangePartial(ZoneManager.hotZone.getLoc(),ZoneManager.hotZone.getBounds().getHalfExtents().x * 2, MBServerStatics.MASK_PLAYER);
//clear out old players who aren't here anymore
for(Guild nation : HotzoneManager.playersPresent.keySet()){
for(PlayerCharacter pc : HotzoneManager.playersPresent.get(nation)){
if (!inRange.contains(pc)) {
HotzoneManager.playersPresent.get(nation).remove(pc);
if(HotzoneManager.playersPresent.get(nation).size() < 1){
HotzoneManager.playersPresent.remove(nation);
}
}
}
}
//check status of current players/nation in vicinity
for(AbstractWorldObject awo : inRange){
PlayerCharacter pc = (PlayerCharacter)awo;
Guild nation = pc.guild.getNation();
if(HotzoneManager.playersPresent.containsKey(nation)){
//nation already here, add to list
if(HotzoneManager.playersPresent.get(nation).size() >= 5 && !HotzoneManager.playersPresent.get(nation).contains(pc)){
//more than 5, boot player out
MovementManager.translocate(pc, Vector3fImmutable.getRandomPointOnCircle(ZoneManager.getZoneByUUID(656).getLoc(),30f),Regions.GetRegionForTeleport(ZoneManager.getZoneByUUID(656).getLoc()));
}
if(!HotzoneManager.playersPresent.get(nation).contains(pc)){
//less than 5, allow player in
HotzoneManager.playersPresent.get(nation).add(pc);
}
}else{
ArrayList<PlayerCharacter> newList = new ArrayList<>();
newList.add(pc);
HotzoneManager.playersPresent.put(nation,newList);
}
}
}
}
+98 -208
View File
@@ -14,10 +14,12 @@ import engine.net.DispatchMessage;
import engine.net.client.msg.ErrorPopupMsg;
import engine.net.client.msg.chat.ChatSystemMsg;
import engine.objects.*;
import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
/**
@@ -40,15 +42,6 @@ public enum LootManager {
public static final ArrayList<Integer> vorg_cloth_uuids = new ArrayList<>(Arrays.asList(27600,188700,188720,189550,189560));
public static final ArrayList<Integer> racial_guard_uuids = new ArrayList<>(Arrays.asList(841,951,952,1050,1052,1180,1182,1250,1252,1350,1352,1450,1452,1500,1502,1525,1527,1550,1552,1575,1577,1600,1602,1650,1652,1700,980100,980102));
public static final ArrayList<Integer> static_rune_ids = new ArrayList<>(Arrays.asList(
250001, 250002, 250003, 250004, 250005, 250006, 250007, 250008, 250010, 250011,
250012, 250013, 250014, 250015, 250016, 250017, 250019, 250020, 250021, 250022,
250023, 250024, 250025, 250026, 250028, 250029, 250030, 250031, 250032, 250033,
250034, 250035, 250037, 250038, 250039, 250040, 250041, 250042, 250043, 250044,
250115, 250118, 250119, 250120, 250121, 250122, 252123, 252124, 252125, 252126,
252127
));
// Drop Rates
public static float NORMAL_DROP_RATE;
@@ -82,18 +75,6 @@ public enum LootManager {
}
public static void GenerateMobLoot(Mob mob) {
if(mob == null){
return;
}
if(!mob.getSafeZone()) {
SpecialLootHandler.RollContract(mob);
SpecialLootHandler.RollGlass(mob);
SpecialLootHandler.RollRune(mob);
SpecialLootHandler.RollRacialGuard(mob);
}
//determine if mob is in hotzone
boolean inHotzone = false;
@@ -131,10 +112,7 @@ public enum LootManager {
if (ib == null)
break;
if (ib.isDiscRune() || ib.getName().toLowerCase().contains("of the gods")) {
Zone camp = mob.getParentZone();
Zone macro = camp.getParent();
String name = camp.getName() + "(" + macro.getName() + ")";
ChatSystemMsg chatMsg = new ChatSystemMsg(null, mob.getName() + " in " + name + " has found the " + ib.getName() + ". Are you tough enough to take it?");
ChatSystemMsg chatMsg = new ChatSystemMsg(null, mob.getName() + " in " + mob.getParentZone().getName() + " has found the " + ib.getName() + ". Are you tough enough to take it?");
chatMsg.setMessageType(10);
chatMsg.setChannel(Enum.ChatChannelType.SYSTEM.getChannelID());
DispatchMessage.dispatchMsgToAll(chatMsg);
@@ -148,17 +126,68 @@ public enum LootManager {
boolean hotzoneWasRan = false;
float dropRate;
if (!mob.getSafeZone()) {
int contractLow = 1, contractHigh = 400;
int runeLow = 401, runeHigh = 800;
int resourceLow = 801, resourceHigh = 900;
int glassLow = 901, glassHigh = 910;
int guardLow = 911, guardHigh = 920;
// Pre-compute adjusted high values
int contractAdjust = 0, runeAdjust = 0, resourceAdjust = 0, glassAdjust = 0, guardAdjust = 0;
if (mob.level < 50) {
int dif = 50 - mob.level;
contractAdjust = (int)(400 * (dif * 0.02f));
runeAdjust = (int)(400 * (dif * 0.02f));
resourceAdjust = (int)(100 * (dif * 0.02f));
glassAdjust = (int)(10 * (dif * 0.02f));
guardAdjust = (int)(10 * (dif * 0.02f));
}
// Generate a single random roll
int specialCaseRoll = ThreadLocalRandom.current().nextInt(1, 100001);
// Calculate adjusted high values once
int contractHighAdjusted = contractHigh - contractAdjust;
int runeHighAdjusted = runeHigh - runeAdjust;
int resourceHighAdjusted = resourceHigh - resourceAdjust;
int glassHighAdjusted = glassHigh - glassAdjust;
int guardHighAdjusted = guardHigh - guardAdjust;
// Check the roll range and handle accordingly
if (specialCaseRoll >= contractLow && specialCaseRoll <= contractHighAdjusted) {
SpecialCaseContractDrop(mob, entries);
} else if (specialCaseRoll >= runeLow && specialCaseRoll <= runeHighAdjusted) {
SpecialCaseRuneDrop(mob, entries);
} else if (specialCaseRoll >= resourceLow && specialCaseRoll <= resourceHighAdjusted) {
SpecialCaseResourceDrop(mob, entries);
} else if (specialCaseRoll >= glassLow && specialCaseRoll <= glassHighAdjusted) {
int glassID = rollRandomItem(126);
ItemBase glassItem = ItemBase.getItemBase(glassID);
if (glassItem != null) {
MobLoot toAddGlass = new MobLoot(mob, glassItem, false);
mob.getCharItemManager().addItemToInventory(toAddGlass);
}
} else if (specialCaseRoll >= guardLow && specialCaseRoll <= guardHighAdjusted) {
int guardContractID = racial_guard_uuids.get(new java.util.Random().nextInt(racial_guard_uuids.size()));
ItemBase guardContract = ItemBase.getItemBase(guardContractID);
if (guardContract != null) {
MobLoot toAddContract = new MobLoot(mob, guardContract, false);
mob.getCharItemManager().addItemToInventory(toAddContract);
}
}
}
// Iterate all entries in this bootySet and process accordingly
Zone zone = ZoneManager.findSmallestZone(mob.loc);
for (BootySetEntry bse : entries) {
switch (bse.bootyType) {
case "GOLD":
if (zone != null && zone.getSafeZone() == (byte)1)
return; // no loot to drop in safezones
GenerateGoldDrop(mob, bse, inHotzone);
break;
case "LOOT":
if (zone != null && zone.getSafeZone() == (byte)1)
if (mob.getSafeZone())
return; // no loot to drop in safezones
dropRate = LootManager.NORMAL_DROP_RATE;
@@ -222,14 +251,33 @@ public enum LootManager {
}
public static void SpecialCaseRuneDrop(Mob mob,ArrayList<BootySetEntry> entries){
int roll = ThreadLocalRandom.current().nextInt(static_rune_ids.size() + 1);
int itemId = static_rune_ids.get(0);
try {
itemId = static_rune_ids.get(roll);
}catch(Exception e){
int lootTableID = 0;
for(BootySetEntry entry : entries){
if(entry.bootyType.equals("LOOT")){
lootTableID = entry.genTable;
break;
}
}
ItemBase ib = ItemBase.getItemBase(itemId);
if(lootTableID == 0)
return;
int RuneTableID = 0;
for(GenTableEntry entry : _genTables.get(lootTableID)){
try {
if (ItemBase.getItemBase(_itemTables.get(entry.itemTableID).get(0).cacheID).getType().equals(Enum.ItemType.RUNE)) {
RuneTableID = entry.itemTableID;
break;
}
}catch(Exception e){
}
}
if(RuneTableID == 0)
return;
ItemBase ib = ItemBase.getItemBase(rollRandomItem(RuneTableID));
if(ib != null){
MobLoot toAdd = new MobLoot(mob,ib,false);
mob.getCharItemManager().addItemToInventory(toAdd);
@@ -305,7 +353,7 @@ public enum LootManager {
if (itemUUID == 0)
return null;
if (ItemBase.getItemBase(itemUUID).getType().equals(Enum.ItemType.RESOURCE) || ItemBase.getItemBase(itemUUID).getName().equals("Mithril")) {
if (ItemBase.getItemBase(itemUUID).getType().ordinal() == Enum.ItemType.RESOURCE.ordinal()) {
if(ThreadLocalRandom.current().nextInt(1,101) < 91)
return null; // cut down world drops rates of resources by 90%
int amount = ThreadLocalRandom.current().nextInt(tableRow.minSpawn, tableRow.maxSpawn + 1);
@@ -374,23 +422,8 @@ public enum LootManager {
return inItem;
if (prefixMod.action.length() > 0) {
String action = prefixMod.action;
if(action.equals("PRE-108") || action.equals("PRE-058") || action.equals("PRE-031")){//massive, barons and avatars to be replaced by leg or warlords
int roll = ThreadLocalRandom.current().nextInt(1,100);
if(inItem.getItemBase().getRange() > 15){
action = "PRE-040";
}else {
if (roll > 50) {
//set warlords
action = "PRE-021";
} else {
//set legendary
action = "PRE-040";
}
}
}
inItem.setPrefix(action);
inItem.addPermanentEnchantment(action, 0, prefixMod.level, true);
inItem.setPrefix(prefixMod.action);
inItem.addPermanentEnchantment(prefixMod.action, 0, prefixMod.level, true);
}
return inItem;
@@ -420,27 +453,7 @@ public enum LootManager {
if (suffixMod == null)
return inItem;
int moveSpeedRoll = ThreadLocalRandom.current().nextInt(100);
if(inItem.getItemBase().getValidSlot() == MBServerStatics.SLOT_FEET && moveSpeedRoll < 10){
int rankRoll = ThreadLocalRandom.current().nextInt(10);
String suffixSpeed = "SUF-148";
switch(rankRoll) {
case 1:
case 2:
case 3:
suffixSpeed = "SUF-149";
break;
case 4:
case 5:
case 6:
case 7:
suffixSpeed = "SUF-150";
break;
}
inItem.setSuffix(suffixSpeed);
inItem.addPermanentEnchantment(suffixSpeed, 0, suffixMod.level, false);
}else if (suffixMod.action.length() > 0) {
if (suffixMod.action.length() > 0) {
inItem.setSuffix(suffixMod.action);
inItem.addPermanentEnchantment(suffixMod.action, 0, suffixMod.level, false);
}
@@ -517,10 +530,6 @@ public enum LootManager {
case RESOURCE:
return;
}
if (ib.getUUID() == 1580021)//mithril
return;
toAdd.setIsID(true);
mob.getCharItemManager().addItemToInventory(toAdd);
}
@@ -556,7 +565,7 @@ public enum LootManager {
ItemBase itemBase = me.getItemBase();
if(isVorg) {
mob.spawnTime = ThreadLocalRandom.current().nextInt(300, 2700);
dropChance = 7.5f;
dropChance = 10;
itemBase = getRandomVorg(itemBase);
}
if (equipmentRoll > dropChance)
@@ -580,8 +589,6 @@ public enum LootManager {
if (chanceRoll > bse.dropChance)
return;
if(bse.itemBase == 1580021)//mithril
return;
MobLoot lootItem = new MobLoot(mob, ItemBase.getItemBase(bse.itemBase), true);
if (lootItem != null) {
@@ -591,123 +598,6 @@ public enum LootManager {
}
}
public static void newFatePeddler(PlayerCharacter playerCharacter, Item gift) {
CharacterItemManager itemMan = playerCharacter.getCharItemManager();
if (itemMan == null)
return;
//check if player owns the gift he is trying to open
if (!itemMan.doesCharOwnThisItem(gift.getObjectUUID()))
return;
ItemBase ib = gift.getItemBase();
MobLoot winnings = null;
if (ib == null)
return;
switch (ib.getUUID()) {
case 971070: //wrapped rune
Random random = new Random();
int roll = random.nextInt(100);
int itemId;
ItemBase runeBase;
if (roll >= 90) {
//35 or 40
roll = ThreadLocalRandom.current().nextInt(HellgateManager.static_rune_ids_high.size() + 1);
itemId = HellgateManager.static_rune_ids_high.get(0);
try {
itemId = HellgateManager.static_rune_ids_high.get(roll);
} catch (Exception e) {
}
runeBase = ItemBase.getItemBase(itemId);
if (runeBase != null) {
MobLoot rune = new MobLoot(playerCharacter, runeBase, true);
if (rune != null)
playerCharacter.getCharItemManager().addItemToInventory(rune);
}
} else if (roll >= 65 && roll <= 89) {
//30,35 or 40
roll = ThreadLocalRandom.current().nextInt(HellgateManager.static_rune_ids_mid.size() + 1);
itemId = HellgateManager.static_rune_ids_mid.get(0);
try {
itemId = HellgateManager.static_rune_ids_mid.get(roll);
} catch (Exception e) {
}
runeBase = ItemBase.getItemBase(itemId);
if (runeBase != null) {
MobLoot rune = new MobLoot(playerCharacter, runeBase, true);
if (rune != null)
playerCharacter.getCharItemManager().addItemToInventory(rune);
}
} else {
//5-30
roll = ThreadLocalRandom.current().nextInt(HellgateManager.static_rune_ids_low.size() + 1);
itemId = HellgateManager.static_rune_ids_low.get(0);
try {
itemId = HellgateManager.static_rune_ids_low.get(roll);
} catch (Exception ignored) {
}
runeBase = ItemBase.getItemBase(itemId);
if (runeBase != null) {
MobLoot rune = new MobLoot(playerCharacter, runeBase, true);
if (rune != null)
playerCharacter.getCharItemManager().addItemToInventory(rune);
}
}
break;
case 971012: //wrapped glass
int chance = ThreadLocalRandom.current().nextInt(100);
if(chance == 50){
int ID = 7000000;
int additional = ThreadLocalRandom.current().nextInt(0,28);
ID += (additional * 10);
ItemBase glassBase = ItemBase.getItemBase(ID);
if(glassBase != null) {
winnings = new MobLoot(playerCharacter, glassBase, 1, false);
ChatManager.chatSystemInfo(playerCharacter, "You've Won A " + glassBase.getName());
}
}else{
ChatManager.chatSystemInfo(playerCharacter, "Please Try Again!");
}
break;
}
if (winnings == null) {
itemMan.consume(gift);
itemMan.updateInventory();
return;
}
//early exit if the inventory of the player will not hold the item
if (!itemMan.hasRoomInventory(winnings.getItemBase().getWeight())) {
ErrorPopupMsg.sendErrorPopup(playerCharacter, 21);
return;
}
winnings.setIsID(true);
//remove gift from inventory
itemMan.consume(gift);
//add winnings to player inventory
Item playerWinnings = winnings.promoteToItem(playerCharacter);
itemMan.addItemToInventory(playerWinnings);
itemMan.updateInventory();
}
public static void peddleFate(PlayerCharacter playerCharacter, Item gift) {
//get table ID for the itembase ID
@@ -753,7 +643,7 @@ public enum LootManager {
ItemBase ib = ItemBase.getItemBase(selectedItem.cacheID);
if(ib.getUUID() == Warehouse.coalIB.getUUID()){
//no more coal, give gold instead
if (itemMan.getGoldInventory().getNumOfItems() + 250000 > MBServerStatics.PLAYER_GOLD_LIMIT) {
if (itemMan.getGoldInventory().getNumOfItems() + 250000 > 10000000) {
ErrorPopupMsg.sendErrorPopup(playerCharacter, 21);
return;
}
@@ -811,7 +701,7 @@ public enum LootManager {
public static ItemBase getRandomVorg(ItemBase itemBase){
int roll = 0;
if(vorg_ha_uuids.contains(itemBase.getUUID())) {
roll = ThreadLocalRandom.current().nextInt(0, 9);
roll = ThreadLocalRandom.current().nextInt(0, 10);
switch (roll) {
case 1:
return ItemBase.getItemBase(vorg_ha_uuids.get(0));
@@ -835,7 +725,7 @@ public enum LootManager {
}
if(vorg_ma_uuids.contains(itemBase.getUUID())) {
roll = ThreadLocalRandom.current().nextInt(0, 8);
roll = ThreadLocalRandom.current().nextInt(0, 10);
switch (roll) {
case 1:
return ItemBase.getItemBase(vorg_ma_uuids.get(0));
@@ -857,7 +747,7 @@ public enum LootManager {
}
if(vorg_la_uuids.contains(itemBase.getUUID())) {
roll = ThreadLocalRandom.current().nextInt(0, 8);
roll = ThreadLocalRandom.current().nextInt(0, 10);
switch (roll) {
case 1:
return ItemBase.getItemBase(vorg_la_uuids.get(0));
@@ -879,7 +769,7 @@ public enum LootManager {
}
if(vorg_cloth_uuids.contains(itemBase.getUUID())) {
roll = ThreadLocalRandom.current().nextInt(0, 5);
roll = ThreadLocalRandom.current().nextInt(0, 10);
switch (roll) {
case 1:
return ItemBase.getItemBase(vorg_cloth_uuids.get(0));
@@ -931,8 +821,8 @@ public enum LootManager {
}
//present drop chance for all
//if (ThreadLocalRandom.current().nextInt(100) < 35)
// DropPresent(mob);
if (ThreadLocalRandom.current().nextInt(100) < 35)
DropPresent(mob);
//random contract drop chance for all
if (ThreadLocalRandom.current().nextInt(100) < 40) {
-130
View File
@@ -1,130 +0,0 @@
package engine.gameManager;
import engine.Enum;
import engine.math.Vector3fImmutable;
import engine.objects.Guild;
import engine.objects.Mine;
import engine.objects.PlayerCharacter;
import engine.objects.Regions;
import java.util.*;
public class LoreMineManager {
//Saetor Allowed Charters:
//BARBARIAN
//MILITARY
//RANGER
//AMAZON
//WIZARD
//MERCENARY
//THIEVES
//SCOURGE
//UNHOLY
public static final Map<Enum.GuildType, List<String>> GUILD_RACES = new HashMap<>();
public static final Map<Enum.GuildType, List<String>> GUILD_CLASSES = new HashMap<>();
public static final Map<Enum.GuildType, Boolean> GUILD_GENDER_RESTRICTION = new HashMap<>();
static {
GUILD_RACES.put(Enum.GuildType.CATHEDRAL, Arrays.asList("Aelfborn", "Centaur", "Elf", "Half Giant", "Human"));
GUILD_CLASSES.put(Enum.GuildType.CATHEDRAL, Arrays.asList("Bard", "Channeler", "Crusader", "Nightstalker", "Prelate", "Priest", "Scout", "Sentinel"));
GUILD_RACES.put(Enum.GuildType.MILITARY, Arrays.asList("Centaur", "Half Giant", "Human", "Saetor"));
GUILD_CLASSES.put(Enum.GuildType.MILITARY, Arrays.asList("Bard", "Priest", "Scout", "Warlock", "Warrior", "Wizard"));
GUILD_RACES.put(Enum.GuildType.TEMPLE, Arrays.asList("Half Giant", "Human"));
GUILD_CLASSES.put(Enum.GuildType.TEMPLE, Arrays.asList("Assassin", "Bard", "Channeler", "Confessor", "Nightstalker", "Priest", "Scout", "Templar"));
GUILD_RACES.put(Enum.GuildType.BARBARIAN, Arrays.asList("Aelfborn", "Half Giant", "Human", "Minotaur", "Saetor"));
GUILD_CLASSES.put(Enum.GuildType.BARBARIAN, Arrays.asList("Barbarian", "Bard", "Doomsayer", "Fury", "Priest", "Scout", "Thief", "Warrior"));
GUILD_RACES.put(Enum.GuildType.RANGER, Arrays.asList("Aelfborn", "Elf", "Half Giant", "Human", "Shade", "Saetor"));
GUILD_CLASSES.put(Enum.GuildType.RANGER, Arrays.asList("Bard", "Channeler", "Druid", "Priest", "Ranger", "Scout", "Warrior"));
GUILD_RACES.put(Enum.GuildType.AMAZON, Arrays.asList("Aelfborn", "Elf", "Half Giant", "Human", "Saetor"));
GUILD_CLASSES.put(Enum.GuildType.AMAZON, Arrays.asList("Bard", "Druid", "Fury", "Huntress", "Priest", "Scout", "Warrior", "Wizard"));
GUILD_GENDER_RESTRICTION.put(Enum.GuildType.AMAZON, true); // Female only
GUILD_RACES.put(Enum.GuildType.NOBLE, Arrays.asList("Aelfborn", "Half Giant", "Human"));
GUILD_CLASSES.put(Enum.GuildType.NOBLE, Arrays.asList("Assassin", "Bard", "Channeler", "Priest", "Scout", "Thief", "Warlock", "Warrior", "Wizard"));
GUILD_RACES.put(Enum.GuildType.WIZARD, Arrays.asList("Aelfborn", "Elf", "Human", "Nephilim", "Shade", "Saetor"));
GUILD_CLASSES.put(Enum.GuildType.WIZARD, Arrays.asList("Assassin", "Bard", "Channeler", "Doomsayer", "Fury", "Necromancer", "Priest", "Warlock", "Wizard"));
GUILD_RACES.put(Enum.GuildType.MERCENARY, Arrays.asList("Aelfborn", "Aracoix", "Half Giant", "Human", "Shade", "Saetor"));
GUILD_CLASSES.put(Enum.GuildType.MERCENARY, Arrays.asList("Assassin", "Bard", "Priest", "Scout", "Thief", "Warlock", "Warrior"));
GUILD_RACES.put(Enum.GuildType.THIEVES, Arrays.asList("Aelfborn", "Aracoix", "Elf", "Human", "Irekei", "Nephilim", "Shade", "Vampire", "Saetor"));
GUILD_CLASSES.put(Enum.GuildType.THIEVES, Arrays.asList("Assassin", "Barbarian", "Bard", "Priest", "Scout", "Thief", "Wizard"));
GUILD_RACES.put(Enum.GuildType.DWARF, Arrays.asList("Dwarf"));
GUILD_CLASSES.put(Enum.GuildType.DWARF, Arrays.asList("Crusader", "Prelate", "Priest", "Sentinel", "Warrior"));
GUILD_RACES.put(Enum.GuildType.HIGHCOURT, Arrays.asList("Elf", "Minotaur"));
GUILD_CLASSES.put(Enum.GuildType.HIGHCOURT, Arrays.asList("Assassin", "Bard", "Channeler", "Druid", "Necromancer", "Priest", "Ranger", "Scout", "Thief", "Warrior", "Wizard"));
GUILD_RACES.put(Enum.GuildType.VIRAKT, Arrays.asList("Irekei"));
GUILD_CLASSES.put(Enum.GuildType.VIRAKT, Arrays.asList("Assassin", "Bard", "Channeler", "Fury", "Huntress", "Nightstalker", "Priest", "Ranger", "Scout", "Thief", "Warrior", "Wizard"));
GUILD_RACES.put(Enum.GuildType.SCOURGE, Arrays.asList("Aelfborn", "Human", "Minotaur", "Nephilim", "Saetor"));
GUILD_CLASSES.put(Enum.GuildType.SCOURGE, Arrays.asList("Bard", "Channeler", "Doomsayer", "Priest", "Scout", "Warrior", "Wizard"));
GUILD_RACES.put(Enum.GuildType.KHREE, Arrays.asList("Aracoix"));
GUILD_CLASSES.put(Enum.GuildType.KHREE, Arrays.asList("Assassin", "Barbarian", "Bard", "Huntress", "Priest", "Ranger", "Scout", "Thief", "Warlock", "Warrior"));
GUILD_RACES.put(Enum.GuildType.CENTAUR, Arrays.asList("Centaur"));
GUILD_CLASSES.put(Enum.GuildType.CENTAUR, Arrays.asList("Barbarian", "Crusader", "Druid", "Huntress", "Prelate", "Priest", "Ranger", "Sentinel", "Warrior"));
GUILD_RACES.put(Enum.GuildType.UNHOLY, Arrays.asList("Human", "Shade", "Vampire", "Saetor"));
GUILD_CLASSES.put(Enum.GuildType.UNHOLY, Arrays.asList("Assassin", "Channeler", "Necromancer", "Priest", "Scout", "Thief", "Warlock", "Warrior", "Wizard"));
}
public static void AuditPlayer(PlayerCharacter pc, Mine mine){
Guild nation = pc.guild.getNation();
if(mine.chosen_charters == null){
mine.chosen_charters = new HashMap<>();
}
Enum.GuildType guildType;
if (mine.chosen_charters.containsKey(nation)) {
guildType = mine.chosen_charters.get(nation);
}else{
guildType = Enum.GuildType.getGuildTypeFromInt(pc.guild.getCharter());
mine.chosen_charters.put(nation,guildType);
}
if(!validForCharter(pc,guildType)){
//bounce out to SDR
Vector3fImmutable bounceLoc = Vector3fImmutable.getRandomPointOnCircle(ZoneManager.getZoneByUUID(656).getLoc(),30f);
pc.setLoc(bounceLoc);
MovementManager.translocate(pc, bounceLoc, Regions.GetRegionForTeleport(ZoneManager.getZoneByUUID(656).getLoc()));
ChatManager.chatSystemInfo(pc, "You Failed To Meet Lore Requirements");
}
}
public static boolean validForCharter(PlayerCharacter pc, Enum.GuildType guildType) {
if(pc.getPromotionClass() == null)
return false;
// Define the races and classes for each GuildType
// Get the allowed races and classes for this guildType
List<String> allowedRaces = GUILD_RACES.getOrDefault(guildType, Collections.emptyList());
List<String> allowedClasses = GUILD_CLASSES.getOrDefault(guildType, Collections.emptyList());
// Validate player's race and class
if (!allowedRaces.contains(pc.getRace().getName()) || !allowedClasses.contains(pc.getPromotionClass().getName())) {
return false;
}
// Gender restriction check for AMAZON
if (guildType.equals(Enum.GuildType.AMAZON) && pc.isMale() && pc.getRaceID() != 1999) {
return false;
}
return true;
}
}
+7 -6
View File
@@ -66,6 +66,12 @@ public enum MovementManager {
if (!toMove.isAlive())
return;
if (toMove.getObjectType().equals(GameObjectType.PlayerCharacter)) {
if (((PlayerCharacter) toMove).isCasting())
((PlayerCharacter) toMove).update(false);
}
toMove.setIsCasting(false);
toMove.setItemCasting(false);
@@ -99,9 +105,6 @@ public enum MovementManager {
// ((Mob)toMove).updateLocation();
// get start and end locations for the move
Vector3fImmutable startLocation = new Vector3fImmutable(msg.getStartLat(), msg.getStartAlt(), msg.getStartLon());
//if(toMove.isMoving()){
// startLocation = toMove.getMovementLoc();
//}
Vector3fImmutable endLocation = new Vector3fImmutable(msg.getEndLat(), msg.getEndAlt(), msg.getEndLon());
// if (toMove.getObjectType() == GameObjectType.PlayerCharacter)
@@ -405,9 +408,7 @@ public enum MovementManager {
if (bonus.getBool(ModType.Stunned, SourceType.None) || bonus.getBool(ModType.CannotMove, SourceType.None))
continue;
//member.update(false);
member.updateLocation();
member.updateMovementState();
member.update(false);
// All checks passed, let's move the player
+388 -3
View File
@@ -2,14 +2,17 @@ package engine.gameManager;
import engine.Enum;
import engine.InterestManagement.WorldGrid;
import engine.exception.SerializationException;
import engine.math.Quaternion;
import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.net.ByteBufferWriter;
import engine.net.Dispatch;
import engine.net.DispatchMessage;
import engine.net.client.msg.PetMsg;
import engine.objects.*;
import engine.powers.EffectsBase;
import engine.server.MBServerStatics;
import org.pmw.tinylog.Logger;
import java.util.ArrayList;
@@ -22,6 +25,8 @@ public enum NPCManager {
NPC_MANAGER;
public static HashMap<Integer, ArrayList<Integer>> _runeSetMap = new HashMap<>();
public static int SVR_CLOSE_WINDOW = 4;
public static HashMap<Integer, ArrayList<String>> _pirateNames = new HashMap<>();
public static void LoadAllRuneSets() {
_runeSetMap = DbManager.ItemBaseQueries.LOAD_RUNES_FOR_NPC_AND_MOBS();
@@ -286,10 +291,10 @@ public enum NPCManager {
// If we cannot find name for this mobbase then
// fallback to human male
if (NPC._pirateNames.containsKey(mobBaseID))
nameList = NPC._pirateNames.get(mobBaseID);
if (_pirateNames.containsKey(mobBaseID))
nameList = _pirateNames.get(mobBaseID);
else
nameList = NPC._pirateNames.get(2111);
nameList = _pirateNames.get(2111);
if (nameList == null) {
Logger.error("Null name list for 2111!");
@@ -370,4 +375,384 @@ public enum NPCManager {
return buildingSlot;
}
public static boolean ISWallArcher(Contract contract) {
if (contract == null)
return false;
//838, 950, 1051, 1181, 1251, 1351, 1451, 1501, 1526, 1551, 980101,
return contract.getAllowedBuildings().contains(Enum.BuildingGroup.WALLCORNER) ||
contract.getAllowedBuildings().contains(Enum.BuildingGroup.WALLSTRAIGHTTOWER);
}
public static NPC getFromCache(int id) {
return (NPC) DbManager.getFromCache(Enum.GameObjectType.NPC, id);
}
public static boolean UpdateName(NPC npc, String value) {
if (!DbManager.NPCQueries.UPDATE_NAME(npc, value))
return false;
npc.setName(value);
return true;
}
public static void serializeNpcForClientMsgOtherPlayer(NPC npc, ByteBufferWriter writer, boolean hideAsciiLastName)
throws SerializationException {
serializeForClientMsgOtherPlayer(npc, writer);
}
public static void serializeForClientMsgOtherPlayer(NPC npc, ByteBufferWriter writer)
throws SerializationException {
writer.putInt(0);
writer.putInt(0);
//num Runes
int cnt = 3;
boolean isVamp = false, isHealer = false, isArcher = false, isTrainer = false;
int contractID = 0, classID = 0;
int extraRune = 0;
if (npc.contract != null) {
contractID = npc.contract.getContractID();
classID = npc.contract.getClassID();
extraRune = npc.contract.getExtraRune();
if (extraRune == contractID)
extraRune = 0;
}
if ((contractID > 252642 && contractID < 252647) || contractID == 252652) {
isVamp = true;
cnt++;
}
if (contractID == 252582 || contractID == 252579 || contractID == 252581
|| contractID == 252584 || contractID == 252597 || contractID == 252598
|| contractID == 252628 || extraRune == 252582 || extraRune == 252579
|| extraRune == 252581 || extraRune == 252584 || extraRune == 252597
|| extraRune == 252598 || extraRune == 252628) {
isHealer = true;
cnt++;
}
if (contractID == 252570) {
isArcher = true;
cnt++;
}
if (classID != 0)
cnt++;
if (extraRune != 0 && extraRune != contractID)
cnt++;
writer.putInt(cnt);
//Race
writer.putInt(1);
writer.putInt(0);
if (npc.getMobBase() != null)
writer.putInt(npc.getMobBase().getLoadID());
else
writer.putInt(2011);
writer.putInt(Enum.GameObjectType.NPCRaceRune.ordinal());
writer.putInt(npc.currentID);
//Class/Trainer/Whatever
writer.putInt(5);
writer.putInt(0);
if (npc.contract != null)
writer.putInt(contractID);
else
writer.putInt(2500);
writer.putInt(Enum.GameObjectType.NPCClassRune.ordinal());
writer.putInt(npc.currentID);
//vampire trainer
cnt = 0;
if (extraRune != 0)
cnt = serializeExtraRune(npc, extraRune, cnt, writer);
if (isVamp)
cnt = serializeExtraRune(npc, 252647, cnt, writer);
//Healer trainer
if (isHealer)
cnt = serializeExtraRune(npc, 252592, cnt, writer);
if (classID != 0) {
writer.putInt(4);
writer.putInt(0);
writer.putInt(classID);
writer.putInt(Enum.GameObjectType.NPCExtraRune.ordinal());
writer.putInt(npc.currentID);
}
//Scout trainer
if (isArcher)
cnt = serializeExtraRune(npc, 252654, cnt, writer);
//Shopkeeper
writer.putInt(5);
writer.putInt(0);
writer.putInt(0x3DACC);
writer.putInt(Enum.GameObjectType.NPCShopkeeperRune.ordinal());
writer.putInt(npc.currentID);
//Send Stats
writer.putInt(5);
writer.putInt(0x8AC3C0E6); //Str
writer.putInt(0);
writer.putInt(0xACB82E33); //Dex
writer.putInt(0);
writer.putInt(0xB15DC77E); //Con
writer.putInt(0);
writer.putInt(0xE07B3336); //Int
writer.putInt(0);
writer.putInt(0xFF665EC3); //Spi
writer.putInt(0);
writer.putString(npc.getName());
writer.putString("");
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.put((byte) 0);
writer.putInt(npc.getObjectType().ordinal());
writer.putInt(npc.currentID);
writer.putFloat(1.0f);
writer.putFloat(1.0f);
writer.putFloat(1.0f);
if (npc.region != null)
writer.putVector3f(ZoneManager.convertWorldToLocal(npc.building, npc.getLoc()));
else
writer.putVector3f(npc.getLoc());
//Rotation
float radians = (float) Math.acos(npc.getRot().y) * 2;
if (npc.building != null)
if (npc.building.getBounds() != null && npc.building.getBounds().getQuaternion() != null)
radians += (npc.building.getBounds().getQuaternion()).angleY;
writer.putFloat(radians);
//Running Speed
writer.putInt(0);
// get a copy of the equipped items.
if (npc.equip != null) {
writer.putInt(npc.equip.size());
for (MobEquipment me : npc.equip.values())
MobEquipment.serializeForClientMsg(me, writer);
} else
writer.putInt(0);
writer.putInt((npc.level / 10));
writer.putInt(npc.level);
writer.putInt(npc.getIsSittingAsInt()); //Standing
writer.putInt(npc.getIsWalkingAsInt()); //Walking
writer.putInt(npc.getIsCombatAsInt()); //Combat
writer.putInt(2); //Unknown
writer.putInt(1); //Unknown - Headlights?
writer.putInt(0);
if (npc.building != null && npc.region != null) {
writer.putInt(npc.building.getObjectType().ordinal());
writer.putInt(npc.building.getObjectUUID());
} else {
writer.putInt(0); //<-Building Object Type
writer.putInt(0); //<-Building Object ID
}
writer.put((byte) 0);
writer.put((byte) 0);
writer.put((byte) 0);
//npc dialog menus from contracts
if (npc.contract != null) {
ArrayList<Integer> npcMenuOptions = npc.contract.getNPCMenuOptions();
writer.putInt(npcMenuOptions.size());
for (Integer val : npcMenuOptions) {
writer.putInt(val);
}
} else
writer.putInt(0);
writer.put((byte) 1);
if (npc.building != null) {
writer.putInt(Enum.GameObjectType.StrongBox.ordinal());
writer.putInt(npc.currentID);
writer.putInt(Enum.GameObjectType.StrongBox.ordinal());
writer.putInt(npc.building.getObjectUUID());
} else {
writer.putLong(0);
writer.putLong(0);
}
if (npc.contract != null)
writer.putInt(npc.contract.getIconID());
else
writer.putInt(0); //npc icon ID
writer.putInt(0);
writer.putShort((short) 0);
if (npc.contract != null && npc.contract.isTrainer()) {
writer.putInt(classID);
} else {
writer.putInt(0);
}
if (npc.contract != null && npc.contract.isTrainer())
writer.putInt(classID);
else
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putFloat(4);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.put((byte) 0);
//Pull guild info from building if linked to one
Guild.serializeForClientMsg(npc.guild, writer, null, true);
writer.putInt(1);
writer.putInt(0x8A2E);
writer.putInt(0);
writer.putInt(0);
//TODO Guard
writer.put((byte) 0); //Is guard..
writer.putFloat(1500f); //npc.healthMax
writer.putFloat(1500f); //npc.health
//TODO Peace Zone
writer.put((byte) 1); //0=show tags, 1=don't
writer.putInt(0);
writer.put((byte) 0);
}
private static int serializeExtraRune(NPC npc, int runeID, int cnt, ByteBufferWriter writer) {
writer.putInt(5);
writer.putInt(0);
writer.putInt(runeID);
if (cnt == 0)
writer.putInt(Enum.GameObjectType.NPCClassRuneTwo.ordinal());
else
writer.putInt(Enum.GameObjectType.NPCClassRuneThree.ordinal());
writer.putInt(npc.currentID);
return cnt + 1;
}
public static NPC createNPC(String name, int contractID, Vector3fImmutable spawn, Guild guild, Zone parent, short level, Building building) {
NPC newNPC = new NPC();
newNPC.setName(name);
newNPC.contractUUID = contractID;
if (building == null)
newNPC.bindLoc = spawn;
else
newNPC.bindLoc = Vector3fImmutable.ZERO;
newNPC.parentZoneUUID = parent.getObjectUUID();
newNPC.guildUUID = guild.getObjectUUID();
if (building == null)
newNPC.buildingUUID = 0;
else
newNPC.buildingUUID = building.getObjectUUID();
newNPC.level = level;
newNPC.buyPercent = .33f;
newNPC.sellPercent = 1;
NPC npc;
try {
npc = DbManager.NPCQueries.PERSIST(newNPC);
npc.setObjectTypeMask(MBServerStatics.MASK_NPC);
} catch (Exception e) {
Logger.error(e);
npc = null;
}
return npc;
}
public static NPC getNPC(int id) {
if (id == 0)
return null;
NPC npc = (NPC) DbManager.getFromCache(Enum.GameObjectType.NPC, id);
if (npc != null)
return npc;
return DbManager.NPCQueries.GET_NPC(id);
}
public static boolean ISGuardCaptain(int contractID) {
return Enum.MinionType.ContractToMinionMap.containsKey(contractID);
}
public static boolean UpdateEquipSetID(NPC npc, int equipSetID) {
if (!LootManager._bootySetMap.containsKey(equipSetID))
return false;
if (!DbManager.NPCQueries.UPDATE_EQUIPSET(npc, equipSetID))
return false;
npc.equipmentSetID = equipSetID;
return true;
}
public static boolean UpdateRaceID(NPC npc, int raceID) {
if (!DbManager.NPCQueries.UPDATE_MOBBASE(npc, raceID))
return false;
npc.loadID = raceID;
npc.mobBase = MobBase.getMobBase(npc.loadID);
return true;
}
public static NPCProfits GetNPCProfits(NPC npc) {
return NPCProfits.ProfitCache.get(npc.currentID);
}
}
File diff suppressed because it is too large Load Diff
+66 -417
View File
@@ -10,7 +10,6 @@ package engine.gameManager;
import engine.Enum.*;
import engine.InterestManagement.HeightMap;
import engine.InterestManagement.InterestManager;
import engine.InterestManagement.WorldGrid;
import engine.db.handlers.dbEffectsBaseHandler;
import engine.db.handlers.dbPowerHandler;
@@ -166,44 +165,11 @@ public enum PowersManager {
PlayerCharacter pc = SessionManager.getPlayerCharacter(origin);
if(pc == null)
return;
if(pc.getRecycleTimers().containsKey(msg.getPowerUsedID())) {
return;
}
if(!pc.isFlying() && powersBaseByToken.get(msg.getPowerUsedID()) != null && powersBaseByToken.get(msg.getPowerUsedID()).isSpell) //cant be sitting if flying
if(!PlayerManager.isFlying(pc)) //cant be sitting if flying
CombatManager.toggleSit(false,origin);
//if(pc.isMoving())
//pc.stopMovement(pc.getMovementLoc());
if(msg.getPowerUsedID() != 421084024 && origin.getPlayerCharacter().getPromotionClassID() != 2513) {
if (!origin.getPlayerCharacter().getPowers().containsKey(msg.getPowerUsedID())) {
Logger.error(origin.getPlayerCharacter().getFirstName() + " attempted to cast a power they do not have");
return;
}
}
//crusader sacrifice
if((msg.getPowerUsedID() == 428695403 && msg.getTargetID() == pc.getObjectUUID())){
RecyclePowerMsg recyclePowerMsg = new RecyclePowerMsg(msg.getPowerUsedID());
Dispatch dispatch = Dispatch.borrow(origin.getPlayerCharacter(), recyclePowerMsg);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
// Send Fail to cast message
if (pc != null) {
sendPowerMsg(pc, 2, msg);
if (pc.isCasting()) {
pc.update(false);
}
pc.setIsCasting(false);
}
return;
}
if(msg.getPowerUsedID() == -1851459567){//backstab
applyPower(pc,pc,pc.loc,-1851459567,msg.getNumTrains(),false);
}
if(pc.isMoving())
pc.stopMovement(pc.getMovementLoc());
if (usePowerA(msg, origin, sendCastToSelf)) {
// Cast failed for some reason, reset timer
@@ -223,10 +189,6 @@ public enum PowersManager {
}
}
if(msg.getPowerUsedID() == 429429978){
origin.getPlayerCharacter().getRecycleTimers().remove(429429978);
}
}
public static void useMobPower(Mob caster, AbstractCharacter target, PowersBase pb, int rank) {
@@ -235,8 +197,7 @@ public enum PowersManager {
msg.setUnknown04(1);
if (useMobPowerA(msg, caster)) {
if(pb.token == -1994153779)
InterestManager.setObjectDirty(caster);
//sendMobPowerMsg(caster,2,msg); //Lol wtf was i thinking sending msg's to mobs... ZZZZ
}
}
@@ -247,12 +208,6 @@ public enum PowersManager {
if (playerCharacter == null)
return false;
//if(playerCharacter.getRecycleTimers().containsKey(msg.getPowerUsedID())){
// playerCharacter.setIsCasting(false);
// playerCharacter.setItemCasting(false);
// return false;
//}
boolean CSRCast = false;
if(msg.getPowerUsedID() == 430628895) {
@@ -261,16 +216,16 @@ public enum PowersManager {
City city = ZoneManager.getCityAtLocation(playerCharacter.loc);
if (city == null) {
failed = true;
}//else{
// Bane bane = city.getBane();
// if (bane == null) {
// failed = true;
// }else{
// if(!bane.getSiegePhase().equals(SiegePhase.WAR)){
// failed = true;
// }
// }
//}
}else{
Bane bane = city.getBane();
if (bane == null) {
failed = true;
}else{
if(!bane.getSiegePhase().equals(SiegePhase.WAR)){
failed = true;
}
}
}
if(failed){
//check to see if we are at an active mine
Zone zone = ZoneManager.findSmallestZone(playerCharacter.loc);
@@ -287,15 +242,8 @@ public enum PowersManager {
}
}
if(failed) {
playerCharacter.setIsCasting(false);
RecyclePowerMsg recyclePowerMsg = new RecyclePowerMsg(msg.getPowerUsedID());
Dispatch dispatch = Dispatch.borrow(playerCharacter, recyclePowerMsg);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
if(failed)
return false;
}
}
if (MBServerStatics.POWERS_DEBUG) {
@@ -346,7 +294,7 @@ public enum PowersManager {
}
//check for movement buffs while flying
if(playerCharacter.isFlying()) {
if(PlayerManager.isFlying(playerCharacter)) {
switch(pb.token){
case 429005674:
case 429505739:
@@ -381,18 +329,17 @@ public enum PowersManager {
// Check powers for normal users
if(msg.getPowerUsedID() != 421084024) {
if (playerCharacter.getPowers() == null || !playerCharacter.getPowers().containsKey(msg.getPowerUsedID()))
if (!playerCharacter.isCSR()) {
if (!MBServerStatics.POWERS_DEBUG) {
// ChatManager.chatSayInfo(pc, "You may not cast that spell!");
if (playerCharacter.getPowers() == null || !playerCharacter.getPowers().containsKey(msg.getPowerUsedID()))
if (!playerCharacter.isCSR()) {
if (!MBServerStatics.POWERS_DEBUG) {
// ChatManager.chatSayInfo(pc, "You may not cast that spell!");
Logger.info("usePowerA(): Cheat attempted? '" + msg.getPowerUsedID() + "' was not associated with " + playerCharacter.getName());
return true;
}
} else
CSRCast = true;
Logger.info("usePowerA(): Cheat attempted? '" + msg.getPowerUsedID() + "' was not associated with " + playerCharacter.getName());
return true;
}
} else
CSRCast = true;
}
// get numTrains for power
int trains = msg.getNumTrains();
@@ -402,10 +349,8 @@ public enum PowersManager {
msg.setNumTrains(trains);
}
//double stack point values for some useless disc spells
switch(pb.token){
case 429420458: // BH eyes
case 429601664: // huntsman skin the beast
msg.setNumTrains(msg.getNumTrains() * 2);
break;
}
@@ -545,23 +490,6 @@ public enum PowersManager {
}
}
if(!passed){
if (playerCharacter.getRace().getName().contains("Shade")) {
if(playerCharacter.getHidden() > 0){
switch(msg.getPowerUsedID()){
case -1851459567:
case 2094922127:
case -355707373:
case 246186475:
case 666419835:
case 1480354319:
passed = true;
break;
}
}
}
}
if (!passed)
return true;
}
@@ -674,12 +602,12 @@ public enum PowersManager {
}
// update cast (use skill) fail condition
if(pb.token != 429396028 && pb.breaksForm) {
if(pb.token != 429396028) {
playerCharacter.cancelOnCast();
}
// update castSpell (use spell) fail condition if spell
if (pb.isSpell() && pb.breaksForm)
if (pb.isSpell())
playerCharacter.cancelOnSpell();
// get cast time in ms.
@@ -820,11 +748,10 @@ public enum PowersManager {
// make person casting stand up if spell (unless they're casting a chant which does not make them stand up)
// update cast (use skill) fail condition
if(pb.breaksForm)
caster.cancelOnCast();
caster.cancelOnCast();
// update castSpell (use spell) fail condition if spell
if (pb.isSpell() && pb.breaksForm)
if (pb.isSpell())
caster.cancelOnSpell();
// get cast time in ms.
@@ -854,54 +781,23 @@ public enum PowersManager {
// called when a spell finishes casting. perform actions
public static void finishUsePower(final PerformActionMsg msg, PlayerCharacter playerCharacter, int casterLiveCounter, int targetLiveCounter) {
// if(true) {
// newFinishCast(msg);
// return;
//}
//if(HandleItemEnchantments(playerCharacter, msg)) {
// playerCharacter.setIsCasting(false);
// PerformActionMsg castMsg = new PerformActionMsg(msg);
// castMsg.setNumTrains(9999);
// castMsg.setUnknown04(2);
// DispatchMessage.dispatchMsgToInterestArea(playerCharacter, castMsg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false);
// return;
//}
PerformActionMsg performActionMsg;
Dispatch dispatch;
if (playerCharacter == null || msg == null)
return;
//handle sprint for bard sprint
if(msg.getPowerUsedID() == 429005674){
msg.setPowerUsedID(429611355);
}
//handle root and snare break for wildkin's chase
if(msg.getPowerUsedID() == 429494441) {
//if((msg.getPowerUsedID() == 429495514 || msg.getPowerUsedID() == 429407306) && playerCharacter.getRace().getName().toLowerCase().contains("shade")){
// //use sneak instead of hide
// PowersBase pb = PowersManager.getPowerByToken(429397210);
// int offsetTrains = (40 - msg.getNumTrains()) ;
// applyPower(playerCharacter,playerCharacter,playerCharacter.loc,429397210,msg.getNumTrains(),false);
// applyPower(playerCharacter,playerCharacter,playerCharacter.loc,427857146,offsetTrains,false);
//}
if(msg.getPowerUsedID() == 429494441) {//wildkins chase
playerCharacter.removeEffectBySource(EffectSourceType.Root,40,true);
playerCharacter.removeEffectBySource(EffectSourceType.Snare,40,true);
}
//handle power block portion for shade hide
if(playerCharacter.getRace().getName().contains("Shade")) {
if (msg.getPowerUsedID() == 429407306 || msg.getPowerUsedID() == 429495514) {
int trains = msg.getNumTrains() - 1;
if (trains < 1)
trains = 1;
applyPower(playerCharacter, playerCharacter, playerCharacter.loc, 429397210, trains, false);
playerCharacter.removeEffectBySource(EffectSourceType.Invisibility,40,true);
applyPower(playerCharacter, playerCharacter, playerCharacter.loc, msg.getPowerUsedID(), msg.getNumTrains(), false);
}
}
if(msg.getTargetType() == GameObjectType.PlayerCharacter.ordinal()) {
PlayerCharacter target = PlayerCharacter.getPlayerCharacter(msg.getTargetID());
if (msg.getPowerUsedID() == 429601664)
if(target.getPromotionClassID() != 2516)//templar
PlayerCharacter.getPlayerCharacter(msg.getTargetID()).removeEffectBySource(EffectSourceType.Transform, msg.getNumTrains(), true);
}
if (playerCharacter.isCasting()) {
playerCharacter.update(false);
playerCharacter.updateStamRegen(-100);
@@ -943,9 +839,6 @@ public enum PowersManager {
return;
}
if(pb.targetSelf)
msg.setTargetID(playerCharacter.getObjectUUID());
int trains = msg.getNumTrains();
// verify player is not stunned or power type is blocked
@@ -1106,13 +999,6 @@ public enum PowersManager {
//Player didn't miss power, send finish cast. Miss cast already sent.
//if (playerCharacter.isBoxed) {
// if (AbstractCharacter.IsAbstractCharacter(target)) {
// if (target.getObjectType().equals(GameObjectType.PlayerCharacter)) {
// return;
// }
// }
//}
// finally Apply actions
for (ActionsBase ab : pb.getActions()) {
@@ -1122,7 +1008,7 @@ public enum PowersManager {
continue;
// If something blocks the action, then stop
if (ab.blocked(target, pb, trains, playerCharacter)) {
if (ab.blocked(target, pb, trains)) {
PowersManager.sendEffectMsg(playerCharacter, 5, ab, pb);
continue;
@@ -1209,18 +1095,7 @@ public enum PowersManager {
//DispatchMessage.dispatchMsgToInterestArea(playerCharacter, msg, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false);
//handle mob hate values
HashSet<AbstractWorldObject> mobs = WorldGrid.getObjectsInRangePartial(playerCharacter.loc,60.0f,MBServerStatics.MASK_MOB);
for(AbstractWorldObject awo : mobs){
Mob mobTarget = (Mob)awo;
if(mobTarget.hate_values != null) {
if (mobTarget.hate_values.containsKey(playerCharacter)) {
mobTarget.hate_values.put(playerCharacter, mobTarget.hate_values.get(playerCharacter) + pb.getHateValue(trains));
} else {
mobTarget.hate_values.put(playerCharacter, pb.getHateValue(trains));
}
}
}
}
@@ -1309,7 +1184,7 @@ public enum PowersManager {
continue;
// If something blocks the action, then stop
if (ab.blocked(target, pb, trains, caster))
if (ab.blocked(target, pb, trains))
continue;
// TODO handle overwrite stack order here
String stackType = ab.getStackType();
@@ -1488,7 +1363,7 @@ public enum PowersManager {
if (pc == null)
return;
PlayerCharacter source = PlayerCharacter.getFromCache(msg.getSourceID());
PlayerCharacter source = PlayerManager.getFromCache(msg.getSourceID());
if (source == null)
return;
@@ -1510,7 +1385,7 @@ public enum PowersManager {
// Handle Accepting or Denying a summons.
// set timer based on summon type.
boolean wentThrough = false;
if (msg.accepted()) {
if (msg.accepted())
// summons accepted, let's move the player if within time
if (source.isAlive()) {
@@ -1556,14 +1431,14 @@ public enum PowersManager {
duration = 45000; // Belgosh Summons, 45 seconds
boolean enemiesNear = false;
for (AbstractWorldObject awo : WorldGrid.getObjectsInRangePartial(pc.loc, MBServerStatics.CHARACTER_LOAD_RANGE, MBServerStatics.MASK_PLAYER)) {
PlayerCharacter playerCharacter = (PlayerCharacter) awo;
if (!playerCharacter.guild.getNation().equals(pc.guild.getNation())) {
for(AbstractWorldObject awo : WorldGrid.getObjectsInRangePartial(pc.loc,MBServerStatics.CHARACTER_LOAD_RANGE, MBServerStatics.MASK_PLAYER)){
PlayerCharacter playerCharacter = (PlayerCharacter)awo;
if(!playerCharacter.guild.getNation().equals(pc.guild.getNation())){
enemiesNear = true;
}
}
if (enemiesNear && !pc.isInSafeZone())
if(enemiesNear && !pc.isInSafeZone())
duration += 60000;
// Teleport to summoners location
@@ -1574,10 +1449,7 @@ public enum PowersManager {
timers.put("Summon", jc);
wentThrough = true;
}
}else{
// recycle summons power
finishRecycleTime(428523680, source, true);
}
// Summons failed
if (!wentThrough)
// summons refused. Let's be nice and reset recycle timer
@@ -1694,28 +1566,17 @@ public enum PowersManager {
// create list of characters
HashSet<AbstractCharacter> trackChars;
PowersBase trackPower = PowersManager.getPowerByToken(msg.getPowerToken());
if(trackPower != null && trackPower.category.equals("TRACK")){
trackChars = getTrackList(playerCharacter);
}else{
trackChars = RangeBasedAwo.getTrackList(allTargets, playerCharacter, maxTargets);
switch(msg.getPowerToken()){
case 431511776:
case 429578587:
case 429503360:
trackChars = getTrackList(playerCharacter);
break;
default:
trackChars = RangeBasedAwo.getTrackList(allTargets, playerCharacter, maxTargets);
break;
}
//switch(msg.getPowerToken()){
// case 431511776: // Hunt Foe Huntress
// case 429578587: // Hunt Foe Scout
// case 429503360: // Track Huntsman
// case 44106356: //
// trackChars = getTrackList(playerCharacter);
// break;
// default:
// trackChars = RangeBasedAwo.getTrackList(allTargets, playerCharacter, maxTargets);
// break;
//}
TrackWindowMsg trackWindowMsg = new TrackWindowMsg(msg);
// send track window
@@ -1866,10 +1727,6 @@ public enum PowersManager {
private static void applyPowerA(AbstractCharacter ac, AbstractWorldObject target,
Vector3fImmutable targetLoc, PowersBase pb, int trains,
boolean fromItem) {
if(fromItem && pb.token == 429021400)
trains = 40;
int time = pb.getCastTime(trains);
if (!fromItem)
finishApplyPowerA(ac, target, targetLoc, pb, trains, false);
@@ -1928,18 +1785,6 @@ public enum PowersManager {
public static void finishApplyPowerA(AbstractCharacter ac,
AbstractWorldObject target, Vector3fImmutable targetLoc,
PowersBase pb, int trains, boolean fromChant) {
//if (ac.getObjectType().equals(GameObjectType.PlayerCharacter)){
// PlayerCharacter pc = (PlayerCharacter) ac;
// if (pc.isBoxed && pb.token != -2133617927) {
// if(AbstractCharacter.IsAbstractCharacter(target)){
// if (target.getObjectType().equals(GameObjectType.PlayerCharacter)){
// return;
// }
// }
// }
//}
// finally Apply actions
ArrayList<ActionsBase> actions = pb.getActions();
for (ActionsBase ab : actions) {
@@ -1947,7 +1792,7 @@ public enum PowersManager {
if (trains < ab.getMinTrains() || trains > ab.getMaxTrains())
continue;
// If something blocks the action, then stop
if (ab.blocked(target, pb, trains, ac))
if (ab.blocked(target, pb, trains))
// sendPowerMsg(pc, 5, msg);
continue;
// TODO handle overwrite stack order here
@@ -2020,10 +1865,14 @@ public enum PowersManager {
}
}
public static void runPowerAction(AbstractCharacter source, AbstractWorldObject awo, Vector3fImmutable targetLoc, ActionsBase ab, int trains, PowersBase pb) {
public static void runPowerAction(AbstractCharacter source,
AbstractWorldObject awo, Vector3fImmutable targetLoc,
ActionsBase ab, int trains, PowersBase pb) {
AbstractPowerAction pa = ab.getPowerAction();
if (pa == null) {
Logger.error("runPowerAction(): PowerAction not found of IDString: " + ab.getEffectID());
Logger.error(
"runPowerAction(): PowerAction not found of IDString: "
+ ab.getEffectID());
return;
}
pa.startAction(source, awo, targetLoc, trains, ab, pb);
@@ -2518,8 +2367,7 @@ public enum PowersManager {
public static boolean testAttack(PlayerCharacter pc, AbstractWorldObject awo,
PowersBase pb, PerformActionMsg msg) {
// Get defense for target
//float atr = CharacterSkill.getATR(pc, pb.getSkillName());
float atr = PlayerCombatStats.getSpellAtr(pc, pb);
float atr = CharacterSkill.getATR(pc, pb.getSkillName());
float defense;
if (AbstractWorldObject.IsAbstractCharacter(awo)) {
@@ -2560,15 +2408,6 @@ public enum PowersManager {
dodgeMsg.setTargetID(awo.getObjectUUID());
sendPowerMsg(pc, 4, dodgeMsg);
return true;
} else if (testPassive(pc, tarAc, "Block")) {
// Dodge fired, send dodge message
//PerformActionMsg dodgeMsg = new PerformActionMsg(msg);
//dodgeMsg.setTargetType(awo.getObjectType().ordinal());
//dodgeMsg.setTargetID(awo.getObjectUUID());
//sendPowerMsg(pc, 4, dodgeMsg);
TargetedActionMsg cmm = new TargetedActionMsg(pc, 75, tarAc, MBServerStatics.COMBAT_SEND_BLOCK);
DispatchMessage.sendToAllInRange(tarAc, cmm);
return true;
}
}
return false;
@@ -2616,12 +2455,7 @@ public enum PowersManager {
if (AbstractWorldObject.IsAbstractCharacter(awo)) {
AbstractCharacter tarAc = (AbstractCharacter) awo;
// Handle Dodge passive
boolean passiveFired = false;
passiveFired = testPassive(caster, tarAc, "Dodge");
if(!passiveFired)
passiveFired = testPassive(caster, tarAc, "Block");
return passiveFired;
return testPassive(caster, tarAc, "Dodge");
}
return false;
} else
@@ -3010,191 +2844,6 @@ public enum PowersManager {
}
}
public static boolean breakForm(int token) {
switch (token) {
case 429505865:
case 429407561:
case 429492073:
case 429644123:
case 429393769:
case 429545819:
case 429426537:
case 429590377:
case 429508425:
case 429541193:
case 429573961:
case 427924330:
case 429402918:
case 429545688:
case 429005674:
case 429637823:
case 429590426:
case 428066972:
case 429441862:
case 431611756:
case 431578988:
case 429502506:
case 429398191:
case 429447384:
case 428892191:
case 431579167:
case 430977067:
case 429409100:
case 429441868:
case 429594877:
case 427908971:
case 683741153:
case 429770569:
case 429452379:
case 429605055:
case 429086971:
case 429443230:
case 429505400:
case 429492122:
case 429643992:
case 550062236:
case 429498252:
case 429611224:
case 429441834:
case 428918940:
case 429633739:
case 429633579:
case 429568043:
case 429048646:
case 428392639:
case 428425407:
case 429054168:
case 429021400:
case 428955864:
case 429119704:
case 428890328:
case 428923096:
case 429218008:
case 429086936:
case 428988632:
case 428688204:
case 429514603:
case 428924959:
case 429393818:
case 429720966:
case 428982463:
case 427933887:
case 429572287:
case 429501222:
case 430694431:
case 429436131:
case 430006124:
case 429611355:
case 428005600:
case 427935608:
case 428949695:
case 427988218:
case 429414616:
case 429496495:
case 429428796:
case 563795754:
case 428988217:
case 429432716:
case 428955899:
case 429393286:
case 550062220:
case 429495557:
case 429401278:
case 428377478:
case 429409094:
case 428191947:
case 429434474:
case 429403363:
case 429512920:
case 429419611:
case 429645676:
case 429602895:
case 429605071:
case 429592428:
case 429500010:
case 429406602:
case 429426586:
case 429633898:
case 550062212:
case 429994027:
case 430813227:
case 429928491:
case 430026795:
case 429517915:
case 431854842:
case 429767544:
case 429502507:
case 428398816:
case 429446315:
case 429441979:
return false;
}
return true;
}
public static boolean HandleItemEnchantments(PlayerCharacter pc, PerformActionMsg msg){
switch(msg.getPowerUsedID()){
case 429505998: // Reinforce Item
case 429407694: // hone weapon
case 429440462: // hone armor
case 429016905: //poison blade
case 429505610: // poison blade
case 427908971: // consecrate weapon
case 429439055: // mark of slaying
case 429605702: // annoint blade
case 429414682: // slay rat
case 429594877: // consecrate weapon
case 429440895: // charm of slaying
case 429491437: // infuse with power
PowersBase pb = PowersManager.getPowerByToken(msg.getPowerUsedID());
if(pb == null)
return false;
for (ActionsBase action : pb.getActions()){
try {
if(msg.getNumTrains() > action.maxTrains)
continue;
EffectsBase eb = action.getPowerAction().getEffectsBase();
if(eb == null)
return false;
//Effect eff = pc.addEffectNoTimer(eb.getName(),eb,msg.getNumTrains(),false);
//if(eff == null){
// Logger.error(pc.getFirstName() + " failed to apply self buff: " + msg.getPowerUsedID());
//}
UsePowerJob asj = new UsePowerJob(pc,msg,pb.getToken(),pb,pc.getLiveCounter(),pc.getLiveCounter());
JobContainer jc = JobScheduler.getInstance().scheduleJob(asj, 1800000);
Effect eff = new Effect(jc, eb, msg.getNumTrains());
// pc.effects.put("CASTABLE", eff);
pc.addEffect("CASTABLE",1800,asj,eb,msg.getNumTrains());
pc.applyAllBonuses();
ApplyEffectMsg pum = new ApplyEffectMsg();
pum.setEffectID(eff.getEffectToken());
pum.setSourceType(pc.getObjectType().ordinal());
pum.setSourceID(pc.getObjectUUID());
pum.setTargetType(pc.getObjectType().ordinal());
pum.setTargetID(pc.getObjectUUID());
pum.setNumTrains(eff.getTrains());
pum.setUnknown05(1);
pum.setUnknown02(2);
pum.setUnknown06((byte) 1);
pum.setEffectSourceType(GameObjectType.PlayerCharacter.ordinal());
pum.setEffectSourceID(pc.getObjectUUID());
pum.setDuration(1800);
DispatchMessage.dispatchMsgToInterestArea(pc, pum, DispatchChannel.PRIMARY, MBServerStatics.CHARACTER_LOAD_RANGE, true, false);
}
catch(Exception e){
}
}
return true;
}
return false;
}
}
+10 -30
View File
@@ -91,13 +91,16 @@ public enum SimulationManager {
"Fatal error in City Pulse: DISABLED. Error Message : "
+ e.getMessage());
}
//try {
try {
// if ((_updatePulseTime != 0) && (System.currentTimeMillis() > _updatePulseTime))
// pulseUpdate();
//} catch (Exception e) {
// Logger.error("Fatal error in Update Pulse: DISABLED");
//}
if ((_updatePulseTime != 0)
&& (System.currentTimeMillis() > _updatePulseTime))
pulseUpdate();
} catch (Exception e) {
Logger.error(
"Fatal error in Update Pulse: DISABLED");
// _runegatePulseTime = 0;
}
try {
if ((_runegatePulseTime != 0)
@@ -130,25 +133,6 @@ public enum SimulationManager {
}
//try{
// HellgateManager.pulseHellgates();
//}catch(Exception e){
// Logger.error("Failed to pulse hellgates");
// Logger.error(e.getMessage());
//}
try{
if(ZoneManager.hotZone != null && HotzoneManager.hotzoneMob != null && !HotzoneManager.hotzoneMob.isAlive()){
HotzoneManager.ClearHotzone();
}
}catch(Exception e){
}
try{
HotzoneManager.pulse();
}catch(Exception e){
//
}
SimulationManager.executionTime = Duration.between(startTime, Instant.now());
if (executionTime.compareTo(executionMax) > 0)
@@ -176,11 +160,7 @@ public enum SimulationManager {
if (player == null)
continue;
try {
player.update(false);
}catch(Exception e){
}
player.update(false);
}
_updatePulseTime = System.currentTimeMillis() + 500;
@@ -1,277 +0,0 @@
package engine.gameManager;
import engine.InterestManagement.WorldGrid;
import engine.math.Vector3fImmutable;
import engine.objects.*;
import engine.server.MBServerStatics;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
public class SpecialLootHandler {
public static final List<Integer> DWARVEN_contracts = Arrays.asList(
35250, 35251, 35252, 35253, 35254, 35255, 35256, 35257, 35258, 35259, 35260, 35261, 35262, 35263
);
public static final List<Integer> INVORRI_contracts = Arrays.asList(
35050, 35051, 35052, 35053, 35054, 35055, 35056, 35057, 35058, 35059, 35060, 35061, 35062, 35063
);
public static final List<Integer> SHADE_contracts = Arrays.asList(
35400, 35401, 35402, 35403, 35404, 35405, 35406, 35407, 35408, 35409, 35410, 35411, 35412, 35413,
35414, 35415, 35416, 35417, 35418, 35419, 35420, 35421, 35422, 35423, 35424, 35425, 35426, 35427
);
public static final List<Integer> VAMPIRE_contracts = Arrays.asList(
35545, 35546, 35547, 35548, 35549, 35550, 35551, 35552, 35553, 35554, 35555, 35556, 35557, 35558,
35559, 35560, 35561, 35562, 35563, 35564, 35565, 35566, 35567, 35568, 35569, 35570
);
public static final List<Integer> IREKEI_contracts = Arrays.asList(
35100, 35101, 35102, 35103, 35104, 35105, 35106, 35107, 35108, 35109, 35110, 35111, 35112, 35113,
35114, 35115, 35116, 35117, 35118, 35119, 35120, 35121, 35122, 35123, 35124, 35125, 35126, 35127
);
public static final List<Integer> AMAZON_contracts = Arrays.asList(
35200, 35201, 35202, 35203, 35204, 35205, 35206, 35207, 35208, 35209, 35210, 35211, 35212, 35213
);
public static final List<Integer> GWENDANNEN_contracts = Arrays.asList(
35350, 35351, 35352, 35353, 35354, 35355, 35356, 35357, 35358, 35359, 35360, 35361, 35362, 35363,
35364, 35365, 35366, 35367, 35368, 35369, 35370, 35371, 35372, 35373, 35374, 35375, 35376, 35377
);
public static final List<Integer> NEPHILIM_contracts = Arrays.asList(
35500, 35501, 35502, 35503, 35504, 35505, 35506, 35507, 35508, 35509, 35510, 35511, 35512, 35513,
35514, 35515, 35516, 35517, 35518, 35519, 35520, 35521, 35522, 35523, 35524, 35525
);
public static final List<Integer> ELVEN_contracts = Arrays.asList(
35000, 35001, 35002, 35003, 35004, 35005, 35006, 35007, 35008, 35009, 35010, 35011, 35012, 35013,
35014, 35015, 35016, 35017, 35018, 35019, 35020, 35021, 35022, 35023, 35024, 35025, 35026, 35027
);
public static final List<Integer> CENTAUR_contracts = Arrays.asList(
35150, 35151, 35152, 35153, 35154, 35155, 35156, 35157, 35158, 35159, 35160, 35161, 35162, 35163,
35164, 35165, 35166, 35167, 35168, 35169, 35170, 35171, 35172, 35173, 35174, 35175, 35176, 35177
);
public static final List<Integer> LIZARDMAN_contracts = Arrays.asList(
35300, 35301, 35302, 35303, 35304, 35305, 35306, 35307, 35308, 35309, 35310, 35311, 35312, 35313
);
public static final List<Integer> GLASS_ITEMS = Arrays.asList(
7000100, 7000110, 7000120, 7000130, 7000140, 7000150, 7000160, 7000170, 7000180, 7000190,
7000200, 7000210, 7000220, 7000230, 7000240, 7000250, 7000270, 7000280
);
public static final List<Integer> STAT_RUNES = Arrays.asList(
250001, 250002, 250003, 250004, 250005, 250006, 250007, 250008, 250010, 250011,
250012, 250013, 250014, 250015, 250016, 250017, 250019, 250020, 250021, 250022,
250023, 250024, 250025, 250026, 250028, 250029, 250030, 250031, 250032, 250033,
250034, 250035, 250037, 250038, 250039, 250040, 250041, 250042, 250043, 250044
);
public static final List<Integer> racial_guard = Arrays.asList(
841,951,952,1050,1052,1180,1182,1250,1252,1350,1352,1450,
1452,1500,1502,1525,1527,1550,1552,1575,1577,1600,1602,1650,1652,1700,980100,
980102
);
public static void RollContract(Mob mob){
Zone zone = getMacroZone(mob);
if(zone == null)
return;
int contactId = 0;
int roll = ThreadLocalRandom.current().nextInt(250);
if(roll == 125){
contactId = getContractForZone(zone);
}
if(contactId == 0)
return;
ItemBase contractBase = ItemBase.getItemBase(contactId);
if(contractBase == null)
return;
if(mob.getCharItemManager() == null)
return;
MobLoot contract = new MobLoot(mob,contractBase,false);
mob.getCharItemManager().addItemToInventory(contract);
}
public static Zone getMacroZone(Mob mob){
Zone parentZone = mob.parentZone;
if(parentZone == null)
return null;
while(!parentZone.isMacroZone() && !parentZone.equals(ZoneManager.getSeaFloor())){
parentZone = parentZone.getParent();
}
return parentZone;
//for(Zone zone : ZoneManager.macroZones){
// HashSet<AbstractWorldObject> inZone = WorldGrid.getObjectsInRangePartial(zone.getLoc(),zone.getBounds().getHalfExtents().x * 2f, MBServerStatics.MASK_MOB);
// if(inZone.contains(mob)){
// return zone;
// }
//}
//return null;
}
public static int getContractForZone(Zone zone){
Random random = new Random();
switch (zone.getObjectUUID())
{
case 178:
// Kralgaar Holm
return DWARVEN_contracts.get(random.nextInt(DWARVEN_contracts.size()));
case 122:
// Aurrochs Skrae
return INVORRI_contracts.get(random.nextInt(INVORRI_contracts.size()));
case 197:
// Ymur's Crown
return INVORRI_contracts.get(random.nextInt(INVORRI_contracts.size()));
case 234:
// Ecklund Wilds
return INVORRI_contracts.get(random.nextInt(INVORRI_contracts.size()));
case 313:
// Greensward Pyre
return SHADE_contracts.get(random.nextInt(SHADE_contracts.size()));
case 331:
// The Doomplain
return VAMPIRE_contracts.get(random.nextInt(VAMPIRE_contracts.size()));
case 353:
// Thollok Marsh
return LIZARDMAN_contracts.get(random.nextInt(LIZARDMAN_contracts.size()));
case 371:
// The Black Bog
return LIZARDMAN_contracts.get(random.nextInt(LIZARDMAN_contracts.size()));
case 388:
// Sevaath Mere
return LIZARDMAN_contracts.get(random.nextInt(LIZARDMAN_contracts.size()));
case 418:
// Valkos Wilds
return GWENDANNEN_contracts.get(random.nextInt(GWENDANNEN_contracts.size()));
case 437:
// Grimscairne
return SHADE_contracts.get(random.nextInt(SHADE_contracts.size()));
case 475:
// Phaedra's Prize
return AMAZON_contracts.get(random.nextInt(AMAZON_contracts.size()));
case 491:
// Holloch Forest
return GWENDANNEN_contracts.get(random.nextInt(GWENDANNEN_contracts.size()));
case 508:
// Aeran Belendor
return ELVEN_contracts.get(random.nextInt(ELVEN_contracts.size()));
case 532:
// Tainted Swamp
return NEPHILIM_contracts.get(random.nextInt(NEPHILIM_contracts.size()));
case 550:
// Aerath Hellendroth
return ELVEN_contracts.get(random.nextInt(ELVEN_contracts.size()));
case 569:
// Aedroch Highlands
return GWENDANNEN_contracts.get(random.nextInt(GWENDANNEN_contracts.size()));
case 590:
// Fellgrim Forest
return GWENDANNEN_contracts.get(random.nextInt(GWENDANNEN_contracts.size()));
case 616:
// Derros Plains
return CENTAUR_contracts.get(random.nextInt(CENTAUR_contracts.size()));
case 632:
// Ashfell Plain
return SHADE_contracts.get(random.nextInt(SHADE_contracts.size()));
case 717:
// Kharsoom
return IREKEI_contracts.get(random.nextInt(IREKEI_contracts.size()));
case 737:
// Leth'khalivar Desert
return IREKEI_contracts.get(random.nextInt(IREKEI_contracts.size()));
case 761:
// The Blood Sands
return IREKEI_contracts.get(random.nextInt(IREKEI_contracts.size()));
case 785:
// Vale of Nar Addad
return IREKEI_contracts.get(random.nextInt(IREKEI_contracts.size()));
case 824:
// Western Battleground
return NEPHILIM_contracts.get(random.nextInt(NEPHILIM_contracts.size()));
case 842:
// Pandemonium
return NEPHILIM_contracts.get(random.nextInt(NEPHILIM_contracts.size()));
case 951:
//Bone Marches
return VAMPIRE_contracts.get(random.nextInt(VAMPIRE_contracts.size()));
case 952:
//plain of ashes
return VAMPIRE_contracts.get(random.nextInt(VAMPIRE_contracts.size()));
}
return 0;
}
public static void RollGlass(Mob mob){
int roll = ThreadLocalRandom.current().nextInt(10000);
if(roll != 5000)
return;
Random random = new Random();
int glassId = GLASS_ITEMS.get(random.nextInt(GLASS_ITEMS.size()));
ItemBase glassBase = ItemBase.getItemBase(glassId);
if(glassBase == null)
return;
if(mob.getCharItemManager() == null)
return;
MobLoot glass = new MobLoot(mob,glassBase,false);
mob.getCharItemManager().addItemToInventory(glass);
}
public static void RollRune(Mob mob){
int runeID = 0;
int roll = ThreadLocalRandom.current().nextInt(250);
Random random = new Random();
if(roll == 125){
runeID = STAT_RUNES.get(random.nextInt(STAT_RUNES.size()));
}
if(runeID == 0)
return;
ItemBase runeBase = ItemBase.getItemBase(runeID);
if(runeBase == null)
return;
if(mob.getCharItemManager() == null)
return;
MobLoot rune = new MobLoot(mob,runeBase,false);
mob.getCharItemManager().addItemToInventory(rune);
}
public static void RollRacialGuard(Mob mob){
int roll = ThreadLocalRandom.current().nextInt(5000);
if(roll != 2500)
return;
Random random = new Random();
int guardId = racial_guard.get(random.nextInt(racial_guard.size()));
ItemBase guardBase = ItemBase.getItemBase(guardId);
if(guardBase == null)
return;
if(mob.getCharItemManager() == null)
return;
MobLoot guard = new MobLoot(mob,guardBase,false);
mob.getCharItemManager().addItemToInventory(guard);
}
}
+1 -1
View File
@@ -151,7 +151,7 @@ public enum TradeManager {
}
public static void invalidTradeRequest(InvalidTradeRequestMsg msg) {
PlayerCharacter requester = PlayerCharacter.getFromCache(msg.getRequesterID());
PlayerCharacter requester = PlayerManager.getFromCache(msg.getRequesterID());
Dispatch dispatch;
dispatch = Dispatch.borrow(requester, msg);
+4 -83
View File
@@ -1,10 +1,5 @@
package engine.gameManager;
import engine.InterestManagement.WorldGrid;
import engine.objects.*;
import engine.server.MBServerStatics;
import java.util.ArrayList;
import engine.objects.Guild;
public class ZergManager {
public static float getCurrentMultiplier(int count, int maxCount){
@@ -26,9 +21,9 @@ public class ZergManager {
return 0.0f;
switch(count){
case 4: return 0.50f;
case 5: return 0.0f;
case 6: return 0.0f;
case 4: return 0.63f;
case 5: return 0.40f;
case 6: return 0.25f;
default: return 1.0f;
}
}
@@ -197,78 +192,4 @@ public class ZergManager {
default: return 1.0f;
}
}
public static void MineTracker(Mine mine){
Building tower = BuildingManager.getBuildingFromCache(mine.getBuildingID());
if(tower == null)
return;
float affectedRange = MBServerStatics.CHARACTER_LOAD_RANGE * 3;
mine.zergTracker.compileCurrent(tower.loc, affectedRange);
mine.zergTracker.sortByNation();
mine.zergTracker.compileLeaveQue(tower.loc, affectedRange);
mine.zergTracker.processLeaveQue();
mine.zergTracker.applyMultiplier(mine.capSize);
}
public static void PrintDetailsToClient(PlayerCharacter pc){
String newline = "\r\n ";
String outstring = newline + "ZERG MANAGER DETAILS FOR: " + pc.getFirstName() + newline;
Mine attended = null;
for(Mine mine : Mine.getMines()){
Building tower = BuildingManager.getBuilding(mine.getBuildingID());
if(tower == null)
continue;
float rangeSquared = (MBServerStatics.CHARACTER_LOAD_RANGE * 3) * (MBServerStatics.CHARACTER_LOAD_RANGE * 3);
if(pc.loc.distanceSquared(tower.loc) < rangeSquared){
attended = mine;
}
}
if(attended != null){
outstring += "Mine Cap: " + attended.capSize + newline;
Building tower = BuildingManager.getBuilding(attended.getBuildingID());
if(tower == null)
return;
int count = 0;
ArrayList<PlayerCharacter> stillPresent = new ArrayList<>();
ArrayList<PlayerCharacter> gonePlayers = new ArrayList<>();
for(Integer countedID : attended.mineAttendees.keySet()){
PlayerCharacter counted = PlayerCharacter.getFromCache(countedID);
if(counted != null){
if(counted.guild.getNation().equals(pc.guild.getNation())) {
Long timeGone = System.currentTimeMillis() - attended.mineAttendees.get(countedID);
if(timeGone > 5000){
//outstring += counted.getFirstName() + " GONE FOR: " + timeGone/1000 + " SECONDS" + newline;
gonePlayers.add(counted);
}else{
//outstring += counted.getFirstName() + " STILL PRESENT" + newline;
stillPresent.add(counted);
}
count ++;
}
}
}
outstring += newline + "TOTAL NATION MEMBERS COUNTED: " + count + newline;
outstring += newline + "PLAYERS PRESENT:" + newline;
for(PlayerCharacter present : stillPresent){
outstring += present.getFirstName() + newline;
}
outstring += newline + "PLAYERS GONE:" + newline;
for(PlayerCharacter gone : gonePlayers){
Long timeGone = System.currentTimeMillis() - attended.mineAttendees.get(gone.getObjectUUID());
if(timeGone > 5000) {
outstring += gone.getFirstName() + " GONE FOR: " + timeGone / 1000 + " SECONDS" + newline;
}
}
}else{
outstring += "Mine: Not Within Mine Distance" + newline;
}
outstring += newline + "Zerg Multiplier: " + pc.ZergMultiplier + newline;
ChatManager.chatSystemInfo(pc, outstring);
}
}
+1 -1
View File
@@ -68,7 +68,7 @@ public abstract class AbstractJob implements Runnable {
this.markStopRunTime();
}
public abstract void doJob();
protected abstract void doJob();
public void executeJob(String threadName) {
this.workerID.set(threadName);
+1 -1
View File
@@ -17,7 +17,7 @@ public abstract class AbstractScheduleJob extends AbstractJob {
}
@Override
public abstract void doJob();
protected abstract void doJob();
public void cancelJob() {
JobScheduler.getInstance().cancelScheduledJob(this);
+1 -1
View File
@@ -16,7 +16,7 @@ public class JobContainer implements Comparable<JobContainer> {
final long timeOfExecution;
final boolean noTimer;
public JobContainer(AbstractJob job, long timeOfExecution) {
JobContainer(AbstractJob job, long timeOfExecution) {
if (job == null) {
throw new IllegalArgumentException("No 'null' jobs allowed.");
}
-75
View File
@@ -1,75 +0,0 @@
package engine.job;
import engine.server.world.WorldServer;
import org.pmw.tinylog.Logger;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
public class JobThread implements Runnable {
private final AbstractJob currentJob;
private final ReentrantLock lock = new ReentrantLock();
private static Long nextThreadPrint;
public JobThread(AbstractJob job){
this.currentJob = job;
}
@Override
public void run() {
try {
if (this.currentJob != null) {
if (lock.tryLock(5, TimeUnit.SECONDS)) { // Timeout to prevent deadlock
try {
this.currentJob.doJob();
} finally {
lock.unlock();
}
} else {
Logger.warn("JobThread could not acquire lock in time, skipping job.");
}
}
} catch (Exception e) {
Logger.error(e);
}
}
public static void startJobThread(AbstractJob job){
JobThread jobThread = new JobThread(job);
Thread thread = new Thread(jobThread);
thread.setName("JOB THREAD: " + job.getWorkerID());
thread.start();
if(JobThread.nextThreadPrint == null){
JobThread.nextThreadPrint = System.currentTimeMillis();
}else{
if(JobThread.nextThreadPrint < System.currentTimeMillis()){
JobThread.tryPrintThreads();
JobThread.nextThreadPrint = System.currentTimeMillis() + 10000L;
}
}
}
public static void tryPrintThreads(){
ThreadGroup rootGroup = Thread.currentThread().getThreadGroup();
while (rootGroup.getParent() != null) {
rootGroup = rootGroup.getParent();
}
// Estimate the number of threads
int activeThreads = rootGroup.activeCount();
// Create an array to hold the threads
Thread[] threads = new Thread[activeThreads];
// Get the active threads
rootGroup.enumerate(threads, true);
int availableThreads = Runtime.getRuntime().availableProcessors();
// Print the count
if(threads.length > 30)
Logger.info("Total threads in application: " + threads.length + " / " + availableThreads);
}
}
+3 -6
View File
@@ -58,13 +58,10 @@ public class JobWorker extends ControlledRunnable {
} else {
// execute the new job..
//this.currentJob.executeJob(this.getThreadName());
if(this.currentJob != null) {
JobThread.startJobThread(this.currentJob);
this.currentJob = null;
}
this.currentJob.executeJob(this.getThreadName());
this.currentJob = null;
}
Thread.yield();
}
return true;
}
+2 -2
View File
@@ -45,7 +45,7 @@ public abstract class AbstractEffectJob extends AbstractScheduleJob {
}
@Override
public abstract void doJob();
protected abstract void doJob();
@Override
protected abstract void _cancelJob();
@@ -117,7 +117,7 @@ public abstract class AbstractEffectJob extends AbstractScheduleJob {
}
public void endEffect() {
if (this.eb == null || this.power == null)
if (this.eb == null)
return;
this.eb.endEffect(this.source, this.target, this.trains, this.power, this);
}
+1 -1
View File
@@ -29,7 +29,7 @@ public class ActivateBaneJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
City city;
+1 -1
View File
@@ -27,7 +27,7 @@ public class AttackJob extends AbstractJob {
}
@Override
public void doJob() {
protected void doJob() {
CombatManager.doCombat(this.source, slot);
}
+1 -1
View File
@@ -24,7 +24,7 @@ public class BaneDefaultTimeJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
//bane already set.
if (this.bane.getLiveDate() != null) {
+1 -1
View File
@@ -97,7 +97,7 @@ public class BasicScheduledJob extends AbstractJob {
}
@Override
public void doJob() {
protected void doJob() {
if (execution == null) {
Logger.error("BasicScheduledJob executed with nothing to execute.");
return;
+1 -1
View File
@@ -22,7 +22,7 @@ public class BonusCalcJob extends AbstractJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.ac != null) {
this.ac.applyBonuses();
+1 -1
View File
@@ -22,7 +22,7 @@ public class CSessionCleanupJob extends AbstractJob {
}
@Override
public void doJob() {
protected void doJob() {
SessionManager.cSessionCleanup(secKey);
}
}
+1 -1
View File
@@ -27,7 +27,7 @@ public class ChangeAltitudeJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.ac != null)
MovementManager.finishChangeAltitude(ac, targetAlt);
}
+1 -1
View File
@@ -36,7 +36,7 @@ public class ChantJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.aej == null || this.source == null || this.target == null || this.action == null || this.power == null || this.source == null || this.eb == null)
return;
PlayerBonuses bonuses = null;
+1 -1
View File
@@ -29,7 +29,7 @@ public class CloseGateJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (building == null) {
Logger.error("Rungate building was null");
+1 -3
View File
@@ -37,7 +37,7 @@ public class DamageOverTimeJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.target.getObjectType().equals(GameObjectType.Building)
&& ((Building) this.target).isVulnerable() == false) {
_cancelJob();
@@ -60,8 +60,6 @@ public class DamageOverTimeJob extends AbstractEffectJob {
if (this.iteration < 0) {
PowersManager.finishEffectTime(this.source, this.target, this.action, this.trains);
if (AbstractWorldObject.IsAbstractCharacter(source))
eb.startEffect((AbstractCharacter) this.source, this.target, this.trains, this);
return;
}
this.skipSendEffect = true;
+3 -2
View File
@@ -11,6 +11,7 @@ package engine.jobs;
import engine.Enum.GameObjectType;
import engine.gameManager.DbManager;
import engine.gameManager.PlayerManager;
import engine.job.AbstractScheduleJob;
import engine.objects.AbstractGameObject;
import engine.objects.Building;
@@ -28,7 +29,7 @@ public class DatabaseUpdateJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.ago == null)
return;
ago.removeDatabaseJob(this.type, false);
@@ -39,7 +40,7 @@ public class DatabaseUpdateJob extends AbstractScheduleJob {
switch (this.type) {
case "Skills":
pc.updateSkillsAndPowersToDatabase();
PlayerManager.updateSkillsAndPowersToDatabase(pc);
break;
case "Stats":
DbManager.PlayerCharacterQueries.UPDATE_CHARACTER_STATS(pc);
+1 -1
View File
@@ -29,7 +29,7 @@ public class DebugTimerJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.pc == null) {
return;
}
+1 -1
View File
@@ -37,7 +37,7 @@ public class DeferredPowerJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
//Power ended with no attack, cancel weapon power boost
if (this.source != null && this.source instanceof PlayerCharacter) {
((PlayerCharacter) this.source).setWeaponPower(null);
+1 -1
View File
@@ -22,7 +22,7 @@ public class DisconnectJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.origin != null) {
this.origin.disconnect();
}
+1 -1
View File
@@ -28,7 +28,7 @@ public class DoorCloseJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
int doorNumber;
+1 -1
View File
@@ -22,7 +22,7 @@ public class EndFearJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
//cancel fear for mob.
+1 -1
View File
@@ -26,7 +26,7 @@ public class FinishCooldownTimeJob extends AbstractJob {
}
@Override
public void doJob() {
protected void doJob() {
PowersManager.finishCooldownTime(this.msg, this.pc);
}
}
+1 -1
View File
@@ -22,7 +22,7 @@ public class FinishEffectTimeJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
PowersManager.finishEffectTime(this.source, this.target, this.action, this.trains);
}
+1 -1
View File
@@ -26,7 +26,7 @@ public class FinishRecycleTimeJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
PowersManager.finishRecycleTime(this.msg, this.pc, false);
}
+1 -1
View File
@@ -20,7 +20,7 @@ public class FinishSpireEffectJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
PlayerCharacter pc = (PlayerCharacter) target;
+3 -3
View File
@@ -11,7 +11,7 @@ package engine.jobs;
import engine.Enum.ModType;
import engine.Enum.SourceType;
import engine.gameManager.PowersManager;
import engine.gameManager.PlayerManager;
import engine.job.AbstractScheduleJob;
import engine.job.JobContainer;
import engine.net.client.msg.ErrorPopupMsg;
@@ -31,7 +31,7 @@ public class FinishSummonsJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.target == null)
return;
@@ -64,7 +64,7 @@ public class FinishSummonsJob extends AbstractScheduleJob {
if (this.source.region != null)
this.target.setRegion(this.source.region);
//teleport target to source
target.teleport(source.getLoc());
PlayerManager.teleport(target, source.getLoc());
}
@Override
+1 -1
View File
@@ -28,7 +28,7 @@ public class LoadEffectsJob extends AbstractJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.originToSend == null) {
return;
}
+1 -1
View File
@@ -25,7 +25,7 @@ public class LogoutCharacterJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
server.logoutCharacter(this.pc);
}
+1 -1
View File
@@ -19,7 +19,7 @@ public class NoTimeJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
}
@Override
+1 -8
View File
@@ -40,18 +40,11 @@ public class PersistentAoeJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.aej == null || this.source == null || this.action == null || this.power == null || this.source == null || this.eb == null)
return;
try {
if (!this.target.isAlive())
PowersManager.finishEffectTime(this.source, this.target, this.action, this.trains);
}catch(Exception e){
PowersManager.finishEffectTime(this.source, this.target, this.action, this.trains);
}
if (!this.source.isAlive())
PowersManager.finishEffectTime(this.source, this.target, this.action, this.trains);
else if (this.iteration < this.power.getChantIterations()) {
+1 -1
View File
@@ -45,7 +45,7 @@ public class RefreshGroupJob extends AbstractJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.pc == null || this.origin == null || grp == null) {
return;
+1 -1
View File
@@ -22,7 +22,7 @@ public class RemoveCorpseJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.corpse != null)
Corpse.removeCorpse(corpse, true);
+1 -1
View File
@@ -25,7 +25,7 @@ public class SiegeSpireWithdrawlJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (spire == null)
return;
+3 -2
View File
@@ -9,6 +9,7 @@
package engine.jobs;
import engine.InterestManagement.WorldGrid;
import engine.gameManager.PlayerManager;
import engine.job.AbstractScheduleJob;
import engine.math.Bounds;
import engine.math.Vector3fImmutable;
@@ -30,7 +31,7 @@ public class StuckJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
Vector3fImmutable stuckLoc;
Building building = null;
@@ -69,7 +70,7 @@ public class StuckJob extends AbstractScheduleJob {
return;
}
player.teleport(stuckLoc);
PlayerManager.teleport(player, stuckLoc);
}
+1 -1
View File
@@ -27,7 +27,7 @@ public class SummonSendJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.source == null)
return;
+3 -2
View File
@@ -9,6 +9,7 @@
package engine.jobs;
import engine.gameManager.PlayerManager;
import engine.job.AbstractScheduleJob;
import engine.math.Vector3fImmutable;
import engine.net.client.ClientConnection;
@@ -39,7 +40,7 @@ public class TeleportJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.pc == null || this.npc == null || this.origin == null)
return;
@@ -52,7 +53,7 @@ public class TeleportJob extends AbstractScheduleJob {
return;
}
pc.teleport(loc);
PlayerManager.teleport(pc, loc);
if (this.setSafeMode)
pc.setSafeMode();
+1 -1
View File
@@ -35,7 +35,7 @@ public class TrackJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.tpa == null || this.target == null || this.action == null || this.source == null || this.eb == null || !(this.source instanceof PlayerCharacter))
return;
+1 -1
View File
@@ -29,7 +29,7 @@ public class TransferStatOTJob extends AbstractEffectJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.dot == null || this.target == null || this.action == null || this.source == null || this.eb == null || this.action == null || this.power == null)
return;
if (!this.target.isAlive()) {
+1 -1
View File
@@ -26,7 +26,7 @@ public class UpdateGroupJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
if (this.group == null)
return;
+1 -15
View File
@@ -1,9 +1,7 @@
package engine.jobs;
import engine.gameManager.ZoneManager;
import engine.job.AbstractScheduleJob;
import engine.objects.Building;
import engine.objects.City;
import org.pmw.tinylog.Logger;
/*
@@ -22,7 +20,7 @@ public class UpgradeBuildingJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
// Must have a building to rank!
@@ -43,18 +41,6 @@ public class UpgradeBuildingJob extends AbstractScheduleJob {
rankingBuilding.setRank(rankingBuilding.getRank() + 1);
if(rankingBuilding.getBlueprint().isWallPiece()){
City cityObject = ZoneManager.getCityAtLocation(rankingBuilding.loc);
if(cityObject.getTOL().getRank() == 8) {
if (rankingBuilding.getBlueprint() != null && rankingBuilding.getBlueprint().getBuildingGroup() != null && rankingBuilding.getBlueprint().isWallPiece()) {
float currentHealthRatio = rankingBuilding.getCurrentHitpoints() / rankingBuilding.healthMax;
float newMax = rankingBuilding.healthMax * 1.1f;
rankingBuilding.setMaxHitPoints(newMax);
rankingBuilding.setHealth(rankingBuilding.healthMax * currentHealthRatio);
}
}
}
// Reload the object
+1 -1
View File
@@ -27,7 +27,7 @@ public class UpgradeNPCJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
int newRank;
+1 -1
View File
@@ -34,7 +34,7 @@ public class UseItemJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
PowersManager.finishApplyPower(ac, target, Vector3fImmutable.ZERO, pb, trains, liveCounter);
}
+1 -1
View File
@@ -35,7 +35,7 @@ public class UseMobPowerJob extends AbstractScheduleJob {
}
@Override
public void doJob() {
protected void doJob() {
PowersManager.finishUseMobPower(this.msg, this.caster, casterLiveCounter, targetLiveCounter);
}

Some files were not shown because too many files have changed in this diff Show More