MagicBot
8 months ago
2 changed files with 1 additions and 214 deletions
@ -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