forked from MagicBane/Server
MagicBot
8 months ago
2 changed files with 1 additions and 214 deletions
@ -1,212 +0,0 @@
@@ -1,212 +0,0 @@
|
||||
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
||||
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
||||
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
||||
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
||||
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
||||
// Magicbane Emulator Project © 2013 - 2022
|
||||
// www.magicbane.com
|
||||
|
||||
|
||||
package engine.devcmd.cmds; |
||||
|
||||
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.math.Vector3f; |
||||
import engine.math.Vector3fImmutable; |
||||
import engine.mbEnums.ProtectionState; |
||||
import engine.objects.*; |
||||
import org.pmw.tinylog.Logger; |
||||
|
||||
/** |
||||
* @author Eighty |
||||
*/ |
||||
public class MakeBaneCmd extends AbstractDevCmd { |
||||
|
||||
public MakeBaneCmd() { |
||||
super("makebane"); |
||||
} |
||||
|
||||
@Override |
||||
protected void _doCmd(PlayerCharacter pc, String[] words, |
||||
AbstractGameObject target) { |
||||
if (words.length < 1 || words.length > 2) { |
||||
this.sendUsage(pc); |
||||
return; |
||||
} |
||||
|
||||
int attackerID = 0; |
||||
int rank = 8; |
||||
|
||||
if (words.length == 2) { |
||||
try { |
||||
attackerID = Integer.parseInt(words[0]); |
||||
rank = Integer.parseInt(words[1]); |
||||
} catch (NumberFormatException e) { |
||||
throwbackError(pc, "AttackerGuildID must be a number, " + words[0] + " is invalid"); |
||||
return; |
||||
} |
||||
} else if (words.length == 1) { |
||||
if (target == null) { |
||||
throwbackError(pc, "No target specified"); |
||||
return; |
||||
} |
||||
|
||||
if (!(target instanceof PlayerCharacter)) { |
||||
throwbackError(pc, "Target is not a player"); |
||||
return; |
||||
} |
||||
attackerID = target.getObjectUUID(); |
||||
|
||||
try { |
||||
rank = Integer.parseInt(words[0]); |
||||
} catch (NumberFormatException e) { |
||||
throwbackError(pc, "Rank must be specified, 1 through 8"); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
if (rank < 1 || rank > 8) { |
||||
throwbackError(pc, "Rank must be 1 through 8"); |
||||
return; |
||||
} |
||||
|
||||
PlayerCharacter player = PlayerCharacter.getPlayerCharacter(attackerID); |
||||
|
||||
|
||||
if (player.getGuild().isEmptyGuild()) { |
||||
throwbackError(pc, "Errant's can not place banes"); |
||||
return; |
||||
} |
||||
|
||||
AbstractCharacter attackerAGL = Guild.GetGL(player.getGuild()); |
||||
|
||||
if (attackerAGL == null) { |
||||
throwbackError(pc, "No guild leader found for attacking guild."); |
||||
return; |
||||
} |
||||
|
||||
if (!(attackerAGL instanceof PlayerCharacter)) { |
||||
throwbackError(pc, "Attacking guild leader is an NPC."); |
||||
return; |
||||
} |
||||
|
||||
if (player.getGuild().isNPCGuild()) { |
||||
throwbackError(pc, "The guild used is an npc guild. They can not bane."); |
||||
return; |
||||
} |
||||
|
||||
// if (player.getGuild().getOwnedCity() != null) {
|
||||
// throwbackError(pc, "The attacking guild already has a city.");
|
||||
// return;
|
||||
// }
|
||||
|
||||
Zone zone = ZoneManager.findSmallestZone(pc.getLoc()); |
||||
|
||||
if (zone == null) { |
||||
throwbackError(pc, "Unable to find the zone you're in."); |
||||
return; |
||||
} |
||||
|
||||
if (!zone.guild_zone) { |
||||
throwbackError(pc, "This is not a player city."); |
||||
return; |
||||
} |
||||
|
||||
City city = City.getCity(zone.playerCityUUID); |
||||
if (city == null) { |
||||
throwbackError(pc, "Unable to find the city associated with this zone."); |
||||
return; |
||||
} |
||||
|
||||
if (city.getTOL() == null) { |
||||
throwbackError(pc, "Unable to find the tree of life for this city."); |
||||
return; |
||||
} |
||||
|
||||
if (city.getBane() != null) { |
||||
throwbackError(pc, "This city is already baned."); |
||||
return; |
||||
} |
||||
|
||||
if (Bane.getBaneByAttackerGuild(player.getGuild()) != null) { |
||||
throwbackError(pc, "This guild is already baning someone."); |
||||
return; |
||||
} |
||||
|
||||
Blueprint blueprint = Blueprint.getBlueprint(24300); |
||||
|
||||
if (blueprint == null) { |
||||
throwbackError(pc, "Unable to find building set for banestone."); |
||||
return; |
||||
} |
||||
|
||||
Vector3f rot = new Vector3f(0, 0, 0); |
||||
|
||||
// *** Refactor : Overlap test goes here
|
||||
|
||||
//Let's drop a banestone!
|
||||
Vector3fImmutable localLocation = ZoneManager.worldToLocal(pc.getLoc(), zone); |
||||
|
||||
if (localLocation == null) { |
||||
ChatManager.chatSystemError(pc, "Failed to convert world location to zone location. Contact a CCR."); |
||||
Logger.info("Failed to Convert World coordinates to local zone coordinates"); |
||||
return; |
||||
} |
||||
|
||||
Building stone = DbManager.BuildingQueries.CREATE_BUILDING( |
||||
zone.getObjectUUID(), pc.getObjectUUID(), blueprint.getName(), blueprint.getBlueprintUUID(), |
||||
localLocation, 1.0f, blueprint.getMaxHealth(rank), ProtectionState.PROTECTED, 0, rank, |
||||
null, blueprint.getBlueprintUUID(), 1, 0.0f); |
||||
|
||||
if (stone == null) { |
||||
ChatManager.chatSystemError(pc, "Failed to create banestone."); |
||||
return; |
||||
} |
||||
stone.addEffectBit((1 << 19)); |
||||
BuildingManager.setRank(stone, (byte) rank); |
||||
stone.setMaxHitPoints(blueprint.getMaxHealth(stone.getRank())); |
||||
stone.setCurrentHitPoints(stone.getMaxHitPoints()); |
||||
BuildingManager.setUpgradeDateTime(stone, null, 0); |
||||
|
||||
//Make the bane
|
||||
|
||||
Bane bane = Bane.makeBane(player, city, stone); |
||||
|
||||
if (bane == null) { |
||||
|
||||
//delete bane stone, failed to make bane object
|
||||
DbManager.BuildingQueries.DELETE_FROM_DATABASE(stone); |
||||
|
||||
throwbackError(pc, "Failed to create bane."); |
||||
return; |
||||
} |
||||
|
||||
WorldGrid.addObject(stone, pc); |
||||
|
||||
//Add baned effect to TOL
|
||||
city.getTOL().addEffectBit((1 << 16)); |
||||
city.getTOL().updateEffects(); |
||||
|
||||
Vector3fImmutable movePlayerOutsideStone = player.getLoc(); |
||||
movePlayerOutsideStone = movePlayerOutsideStone.setX(movePlayerOutsideStone.x + 10); |
||||
movePlayerOutsideStone = movePlayerOutsideStone.setZ(movePlayerOutsideStone.z + 10); |
||||
player.teleport(movePlayerOutsideStone); |
||||
|
||||
throwbackInfo(pc, "The city has been succesfully baned."); |
||||
} |
||||
|
||||
@Override |
||||
protected String _getHelpString() { |
||||
return "Creates an bane."; |
||||
} |
||||
|
||||
@Override |
||||
protected String _getUsageString() { |
||||
return "'./makebane playerUUID baneRank'"; |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue