targetValue = FPerm.parseRelDeltas(TextUtil.implode(args.subList(2, args.size()), " "), faction.getPermittedRelations(perm));
+
+ // The following is to make sure the leader always has the right to change perms if that is our goal.
+ if (perm == FPerm.PERMS && FPerm.PERMS.getDefault().contains(Rel.LEADER))
+ {
+ targetValue.add(Rel.LEADER);
+ }
+
faction.setPermittedRelations(perm, targetValue);
+
msg(p.txt.titleize("Perm for " + faction.describeTo(fme, true)));
msg(FPerm.getStateHeaders());
msg(perm.getStateInfo(faction.getPermittedRelations(perm), true));
diff --git a/src/com/massivecraft/factions/cmd/CmdSethome.java b/src/com/massivecraft/factions/cmd/CmdSethome.java
index 219f76db..03e8d63b 100644
--- a/src/com/massivecraft/factions/cmd/CmdSethome.java
+++ b/src/com/massivecraft/factions/cmd/CmdSethome.java
@@ -4,8 +4,8 @@ import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
+import com.massivecraft.factions.struct.FPerm;
import com.massivecraft.factions.struct.Permission;
-import com.massivecraft.factions.struct.Rel;
public class CmdSethome extends FCommand
{
@@ -38,19 +38,12 @@ public class CmdSethome extends FCommand
if (faction == null) return;
// Can the player set the home for this faction?
- if (faction == myFaction)
- {
- if ( ! Permission.SETHOME_ANY.has(sender) && ! assertMinRole(Rel.OFFICER)) return;
- }
- else
- {
- if (Permission.SETHOME_ANY.has(sender, true)) return;
- }
+ if ( ! FPerm.SETHOME.has(sender, faction, true)) return;
// Can the player set the faction home HERE?
if
(
- ! Permission.BYPASS.has(me)
+ ! fme.hasAdminMode()
&&
Conf.homesMustBeInClaimedTerritory
&&
diff --git a/src/com/massivecraft/factions/cmd/CmdUnclaim.java b/src/com/massivecraft/factions/cmd/CmdUnclaim.java
index 037e7c5d..7594af08 100644
--- a/src/com/massivecraft/factions/cmd/CmdUnclaim.java
+++ b/src/com/massivecraft/factions/cmd/CmdUnclaim.java
@@ -7,8 +7,8 @@ import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
+import com.massivecraft.factions.struct.FPerm;
import com.massivecraft.factions.struct.Permission;
-import com.massivecraft.factions.struct.Rel;
public class CmdUnclaim extends FCommand
{
@@ -34,37 +34,8 @@ public class CmdUnclaim extends FCommand
{
FLocation flocation = new FLocation(fme);
Faction otherFaction = Board.getFactionAt(flocation);
-
- if (fme.isAdminBypassing())
- {
- Board.removeAt(flocation);
- SpoutFeatures.updateTerritoryDisplayLoc(flocation);
- otherFaction.msg("%s unclaimed some of your land.", fme.describeTo(otherFaction, true));
- msg("You unclaimed this land.");
-
- if (Conf.logLandUnclaims)
- P.p.log(fme.getName()+" unclaimed land at ("+flocation.getCoordString()+") from the faction: "+otherFaction.getTag());
-
- return;
- }
-
- if ( ! assertHasFaction())
- {
- return;
- }
-
- if ( ! assertMinRole(Rel.OFFICER))
- {
- return;
- }
-
-
- if ( myFaction != otherFaction)
- {
- msg("You don't own this land.");
- return;
- }
+ if ( ! FPerm.TERRITORY.has(sender, otherFaction, true)) return;
//String moneyBack = "";
if (Econ.shouldBeUsed())
diff --git a/src/com/massivecraft/factions/cmd/FCmdRoot.java b/src/com/massivecraft/factions/cmd/FCmdRoot.java
index 552f5a48..36ca91ae 100644
--- a/src/com/massivecraft/factions/cmd/FCmdRoot.java
+++ b/src/com/massivecraft/factions/cmd/FCmdRoot.java
@@ -8,7 +8,7 @@ public class FCmdRoot extends FCommand
{
public CmdLeader cmdLeader = new CmdLeader();
public CmdAutoClaim cmdAutoClaim = new CmdAutoClaim();
- public CmdBypass cmdBypass = new CmdBypass();
+ public CmdAdmin cmdBypass = new CmdAdmin();
public CmdChat cmdChat = new CmdChat();
public CmdClaim cmdClaim = new CmdClaim();
public CmdConfig cmdConfig = new CmdConfig();
diff --git a/src/com/massivecraft/factions/cmd/FCommand.java b/src/com/massivecraft/factions/cmd/FCommand.java
index 4702e422..bea6cf04 100644
--- a/src/com/massivecraft/factions/cmd/FCommand.java
+++ b/src/com/massivecraft/factions/cmd/FCommand.java
@@ -387,7 +387,7 @@ public abstract class FCommand extends MCommand
// if economy is enabled and they're not on the bypass list, make 'em pay; returns true unless person can't afford the cost
public boolean payForCommand(double cost, String toDoThis, String forDoingThis)
{
- if ( ! Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.isAdminBypassing()) return true;
+ if ( ! Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.hasAdminMode()) return true;
if(Conf.bankFactionPaysLandCosts && fme.hasFaction())
{
diff --git a/src/com/massivecraft/factions/integration/Econ.java b/src/com/massivecraft/factions/integration/Econ.java
index 6fb310cb..6826d3b8 100644
--- a/src/com/massivecraft/factions/integration/Econ.java
+++ b/src/com/massivecraft/factions/integration/Econ.java
@@ -92,7 +92,7 @@ public class Econ
if (fI == null) return true;
// Bypassing players can do any kind of transaction
- if (i instanceof FPlayer && ((FPlayer)i).isAdminBypassing()) return true;
+ if (i instanceof FPlayer && ((FPlayer)i).hasAdminMode()) return true;
// You can deposit to anywhere you feel like. It's your loss if you can't withdraw it again.
if (i == you) return true;
diff --git a/src/com/massivecraft/factions/listeners/FactionsBlockListener.java b/src/com/massivecraft/factions/listeners/FactionsBlockListener.java
index d0db889a..8c1df823 100644
--- a/src/com/massivecraft/factions/listeners/FactionsBlockListener.java
+++ b/src/com/massivecraft/factions/listeners/FactionsBlockListener.java
@@ -4,11 +4,13 @@ import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockListener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
+import org.bukkit.event.block.BlockSpreadEvent;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
@@ -17,6 +19,7 @@ import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
+import com.massivecraft.factions.struct.FFlag;
import com.massivecraft.factions.struct.FPerm;
@@ -28,17 +31,40 @@ public class FactionsBlockListener extends BlockListener
this.p = p;
}
+ @Override
+ public void onBlockSpread(BlockSpreadEvent event)
+ {
+ if (event.isCancelled()) return;
+ if (event.getSource().getTypeId() != 51) return; // Must be Fire
+ Faction faction = Board.getFactionAt(event.getBlock());
+ if (faction.getFlag(FFlag.FIRESPREAD) == false)
+ {
+ event.setCancelled(true);
+ }
+ }
+
+ @Override
+ public void onBlockBurn(BlockBurnEvent event)
+ {
+ if (event.isCancelled()) return;
+ Faction faction = Board.getFactionAt(event.getBlock());
+ if (faction.getFlag(FFlag.FIRESPREAD) == false)
+ {
+ event.setCancelled(true);
+ }
+ }
+
public static boolean playerCanBuildDestroyBlock(Player player, Block block, String action, boolean justCheck)
{
FPlayer me = FPlayers.i.get(player);
- if (me.isAdminBypassing()) return true;
+ if (me.hasAdminMode()) return true;
Location location = block.getLocation();
FLocation loc = new FLocation(location);
Faction factionHere = Board.getFactionAt(loc);
- if (FPerm.PAINBUILD.has(me, location))
+ if ( ! FPerm.BUILD.has(me, location) && FPerm.PAINBUILD.has(me, location))
{
if (!justCheck)
{
@@ -48,7 +74,7 @@ public class FactionsBlockListener extends BlockListener
return true;
}
- return FPerm.BUILD.has(me, location, true);
+ return FPerm.BUILD.has(me, loc, true);
}
@Override
@@ -106,7 +132,6 @@ public class FactionsBlockListener extends BlockListener
// if potentially pushing into air in another territory, we need to check it out
-
if (targetBlock.isEmpty() && ! FPerm.BUILD.has(pistonFaction, targetBlock.getLocation()))
{
event.setCancelled(true);
diff --git a/src/com/massivecraft/factions/listeners/FactionsEntityListener.java b/src/com/massivecraft/factions/listeners/FactionsEntityListener.java
index 9b530919..1e471af6 100644
--- a/src/com/massivecraft/factions/listeners/FactionsEntityListener.java
+++ b/src/com/massivecraft/factions/listeners/FactionsEntityListener.java
@@ -3,6 +3,7 @@ package com.massivecraft.factions.listeners;
import java.text.MessageFormat;
import org.bukkit.Location;
+import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
@@ -91,15 +92,15 @@ public class FactionsEntityListener extends EntityListener
{
if ( event.isCancelled()) return;
- Location loc = event.getLocation();
-
- Faction faction = Board.getFactionAt(new FLocation(loc));
-
- if (faction.getFlag(FFlag.EXPLOSIONS) == false)
+ for (Block block : event.blockList())
{
- // faction is peaceful and has explosions set to disabled
- event.setCancelled(true);
- return;
+ Faction faction = Board.getFactionAt(new FLocation(block));
+ if (faction.getFlag(FFlag.EXPLOSIONS) == false)
+ {
+ // faction is peaceful and has explosions set to disabled
+ event.setCancelled(true);
+ return;
+ }
}
}
diff --git a/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java b/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java
index 59ba6c0c..439b2e41 100644
--- a/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java
+++ b/src/com/massivecraft/factions/listeners/FactionsPlayerListener.java
@@ -242,14 +242,14 @@ public class FactionsPlayerListener extends PlayerListener
public static boolean playerCanUseItemHere(Player player, Location loc, Material material, boolean justCheck)
{
FPlayer me = FPlayers.i.get(player);
- if (me.isAdminBypassing()) return true;
+ if (me.hasAdminMode()) return true;
if (Conf.materialsEditTools.contains(material) && ! FPerm.BUILD.has(me, loc, ! justCheck)) return false;
return true;
}
public static boolean canPlayerUseBlock(Player player, Block block, boolean justCheck)
{
FPlayer me = FPlayers.i.get(player);
- if (me.isAdminBypassing()) return true;
+ if (me.hasAdminMode()) return true;
Location loc = block.getLocation();
Material material = block.getType();
@@ -350,7 +350,7 @@ public class FactionsPlayerListener extends PlayerListener
&&
! Conf.territoryNeutralDenyCommands.isEmpty()
&&
- ! me.isAdminBypassing()
+ ! me.hasAdminMode()
)
{
Iterator iter = Conf.territoryNeutralDenyCommands.iterator();
@@ -378,7 +378,7 @@ public class FactionsPlayerListener extends PlayerListener
&&
! Conf.territoryEnemyDenyCommands.isEmpty()
&&
- ! me.isAdminBypassing()
+ ! me.hasAdminMode()
)
{
Iterator iter = Conf.territoryEnemyDenyCommands.iterator();
diff --git a/src/com/massivecraft/factions/struct/FFlag.java b/src/com/massivecraft/factions/struct/FFlag.java
index 1b99e5b2..43a2bad7 100644
--- a/src/com/massivecraft/factions/struct/FFlag.java
+++ b/src/com/massivecraft/factions/struct/FFlag.java
@@ -12,34 +12,32 @@ import com.massivecraft.factions.Conf;
public enum FFlag
{
// Faction flags
- PERMANENT("permanent", "A permanent faction will never be deleted.", false, false),
- PEACEFUL("peaceful", "Allways in truce with other factions.", false, false),
- INFPOWER("infpower", "This flag gives the faction infinite power.", false, false),
+ PERMANENT("permanent", "A permanent faction will never be deleted.", false),
+ PEACEFUL("peaceful", "Allways in truce with other factions.", false),
+ INFPOWER("infpower", "This flag gives the faction infinite power.", false),
// This faction has infinite power: TODO: Add faction has enough method. Replace the permanentpower level
// (Faction) Territory flags
// If a faction later could have many different territories this would probably be in another enum
- POWERLOSS("powerloss", "Is power lost on death in this territory?", true, false),
- PVP("pvp", "Can you PVP in territory?", true, false),
- FRIENDLYFIRE("friendlyfire", "Can friends hurt eachother here?", false, false),
- MONSTERS("monsters", "Can monsters spawn in this territory?", true, false),
- EXPLOSIONS("explosions", "Can explosions occur in this territory?", true, false),
- FIRESPREAD("firespread", "Can fire spread in territory?", true, false),
- //LIGHTNING("lightning", "Can lightning strike in this territory?", true, false), Possible to add later.
- ENDERGRIEF("endergrief", "Can endermen grief in this territory?", false, true),
+ POWERLOSS("powerloss", "Is power lost on death in this territory?", true),
+ PVP("pvp", "Can you PVP in territory?", true),
+ FRIENDLYFIRE("friendlyfire", "Can friends hurt eachother here?", false),
+ MONSTERS("monsters", "Can monsters spawn in this territory?", true),
+ EXPLOSIONS("explosions", "Can explosions occur in this territory?", true),
+ FIRESPREAD("firespread", "Can fire spread in territory?", true),
+ //LIGHTNING("lightning", "Can lightning strike in this territory?", true), Possible to add later.
+ ENDERGRIEF("endergrief", "Can endermen grief in this territory?", false),
;
private final String nicename;
private final String desc;
public final boolean defaultDefaultValue;
- public final boolean defaultDefaultChangeable;
- private FFlag(final String nicename, final String desc, final boolean defaultDefaultValue, final boolean defaultDefaultChangeable)
+ private FFlag(final String nicename, final String desc, final boolean defaultDefaultValue)
{
this.nicename = nicename;
this.desc = desc;
this.defaultDefaultValue = defaultDefaultValue;
- this.defaultDefaultChangeable = defaultDefaultChangeable;
}
public String getNicename()
@@ -62,18 +60,6 @@ public enum FFlag
return ret;
}
- /**
- * Is this flag changeable by the faction leaders or not?
- * The normal faction members can never change these flags.
- * Note that server operators and admin bypassers can change all flags.
- */
- public boolean isChangeable()
- {
- Boolean ret = Conf.factionFlagIsChangeable.get(this);
- if (ret == null) return this.defaultDefaultChangeable;
- return ret;
- }
-
public static FFlag parse(String str)
{
str = str.toLowerCase();
@@ -84,9 +70,10 @@ public enum FFlag
if (str.startsWith("pvp")) return PVP;
if (str.startsWith("fr") || str.startsWith("ff")) return FRIENDLYFIRE;
if (str.startsWith("m")) return MONSTERS;
- if (str.startsWith("e")) return EXPLOSIONS;
+ if (str.startsWith("ex")) return EXPLOSIONS;
if (str.startsWith("fi")) return FIRESPREAD;
//if (str.startsWith("l")) return LIGHTNING;
+ if (str.startsWith("en")) return ENDERGRIEF;
return null;
}
diff --git a/src/com/massivecraft/factions/struct/FPerm.java b/src/com/massivecraft/factions/struct/FPerm.java
index 313bffa2..e6c4576f 100644
--- a/src/com/massivecraft/factions/struct/FPerm.java
+++ b/src/com/massivecraft/factions/struct/FPerm.java
@@ -7,12 +7,16 @@ import java.util.List;
import java.util.Set;
import org.bukkit.Location;
+import org.bukkit.command.ConsoleCommandSender;
+import org.bukkit.entity.Player;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayer;
+import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
+import com.massivecraft.factions.P;
import com.massivecraft.factions.iface.RelationParticipator;
/**
@@ -21,13 +25,18 @@ import com.massivecraft.factions.iface.RelationParticipator;
*/
public enum FPerm
{
- BUILD("build", "edit the terrain", Rel.LEADER, Rel.OFFICER, Rel.MEMBER),
+ BUILD("build", "edit the terrain", Rel.LEADER, Rel.OFFICER, Rel.MEMBER),
PAINBUILD("painbuild", "edit but take damage", Rel.ALLY),
- DOOR("door", "use doors", Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.ALLY),
- CONTAINER("container", "use containers", Rel.LEADER, Rel.OFFICER, Rel.MEMBER),
- BUTTON("button", "use stone buttons", Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.ALLY),
- LEVER("lever", "use levers", Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.ALLY),
- WITHDRAW("withdraw", "withdraw faction money", Rel.LEADER, Rel.OFFICER),
+ DOOR("door", "use doors", Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.ALLY),
+ BUTTON("button", "use stone buttons", Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.ALLY),
+ LEVER("lever", "use levers", Rel.LEADER, Rel.OFFICER, Rel.MEMBER, Rel.ALLY),
+ CONTAINER("container", "use containers", Rel.LEADER, Rel.OFFICER, Rel.MEMBER),
+ KICK("kick", "kick members", Rel.LEADER, Rel.OFFICER),
+ SETHOME("sethome", "set the home", Rel.LEADER, Rel.OFFICER),
+ WITHDRAW("withdraw", "withdraw money", Rel.LEADER, Rel.OFFICER),
+ TERRITORY("territory", "claim or unclaim", Rel.LEADER, Rel.OFFICER),
+ DISBAND("disband", "disband the faction", Rel.LEADER),
+ PERMS("perms", "manage permissions", Rel.LEADER),
;
private final String nicename;
@@ -63,12 +72,17 @@ public enum FPerm
{
str = str.toLowerCase();
if (str.startsWith("bui")) return BUILD;
- if (str.startsWith("p")) return PAINBUILD;
- if (str.startsWith("d")) return DOOR;
- if (str.startsWith("c")) return CONTAINER;
+ if (str.startsWith("pa")) return PAINBUILD;
+ if (str.startsWith("do")) return DOOR;
if (str.startsWith("but")) return BUTTON;
- if (str.startsWith("l")) return LEVER;
- if (str.startsWith("w")) return WITHDRAW;
+ if (str.startsWith("l")) return LEVER;
+ if (str.startsWith("co")) return CONTAINER;
+ if (str.startsWith("k")) return KICK;
+ if (str.startsWith("s")) return SETHOME;
+ if (str.startsWith("w")) return WITHDRAW;
+ if (str.startsWith("t")) return TERRITORY;
+ if (str.startsWith("di")) return DISBAND;
+ if (str.startsWith("pe")) return PERMS;
return null;
}
@@ -145,44 +159,63 @@ public enum FPerm
return ret;
}
- private static final String errorpattern = "%s can't %s in the territory of %s.";
- public boolean has(RelationParticipator testSubject, Faction hostFaction, boolean informIfNot)
+ private static final String errorpattern = "%s does not allow you to %s.";
+ public boolean has(Object testSubject, Faction hostFaction, boolean informIfNot)
{
- //Faction factionDoer = RelationUtil.getFaction(testSubject);
- //P.p.log("Testing the permission "+this.toString()+" for a "+testSubject.getClass().getSimpleName());
- //P.p.log("hostFaction: "+hostFaction);
- Rel rel = testSubject.getRelationTo(hostFaction);
+ if (testSubject instanceof ConsoleCommandSender) return true;
- //P.p.log("rel: "+rel);
+ RelationParticipator rpSubject = null;
+ if (testSubject instanceof Player)
+ {
+ rpSubject = FPlayers.i.get((Player)testSubject);
+ }
+ else if (testSubject instanceof RelationParticipator)
+ {
+ rpSubject = (RelationParticipator) testSubject;
+ }
+ else
+ {
+ return false;
+ }
+
+ Rel rel = rpSubject.getRelationTo(hostFaction);
+
+ // TODO: Create better description messages like: "You must at least be officer".
boolean ret = hostFaction.getPermittedRelations(this).contains(rel);
- if (!ret && informIfNot && testSubject instanceof FPlayer)
+ if (rpSubject instanceof FPlayer && ret == false && ((FPlayer)rpSubject).hasAdminMode()) ret = true;
+
+ if (!ret && informIfNot && rpSubject instanceof FPlayer)
{
- FPlayer fplayer = (FPlayer)testSubject;
- fplayer.msg(errorpattern, fplayer.describeTo(fplayer, true), this.getDescription(), hostFaction.describeTo(fplayer));
+ FPlayer fplayer = (FPlayer)rpSubject;
+ fplayer.msg(errorpattern, hostFaction.describeTo(fplayer, true), this.getDescription());
+ if (Permission.ADMIN.has(fplayer.getPlayer()))
+ {
+ fplayer.msg("You can bypass by using " + P.p.cmdBase.cmdBypass.getUseageTemplate(false));
+ }
}
return ret;
}
- public boolean has(RelationParticipator testSubject, Faction hostFaction)
+ public boolean has(Object testSubject, Faction hostFaction)
{
return this.has(testSubject, hostFaction, false);
}
- public boolean has(RelationParticipator testSubject, FLocation floc, boolean informIfNot)
+ public boolean has(Object testSubject, FLocation floc, boolean informIfNot)
{
Faction factionThere = Board.getFactionAt(floc);
return this.has(testSubject, factionThere, informIfNot);
}
- public boolean has(RelationParticipator testSubject, Location loc, boolean informIfNot)
+ public boolean has(Object testSubject, Location loc, boolean informIfNot)
{
FLocation floc = new FLocation(loc);
return this.has(testSubject, floc, informIfNot);
}
- public boolean has(RelationParticipator testSubject, Location loc)
+ public boolean has(Object testSubject, Location loc)
{
return this.has(testSubject, loc, false);
}
- public boolean has(RelationParticipator testSubject, FLocation floc)
+ public boolean has(Object testSubject, FLocation floc)
{
return this.has(testSubject, floc, false);
}
diff --git a/src/com/massivecraft/factions/struct/Permission.java b/src/com/massivecraft/factions/struct/Permission.java
index 565fdb3d..e66c3313 100644
--- a/src/com/massivecraft/factions/struct/Permission.java
+++ b/src/com/massivecraft/factions/struct/Permission.java
@@ -1,14 +1,12 @@
package com.massivecraft.factions.struct;
import org.bukkit.command.CommandSender;
-
import com.massivecraft.factions.P;
public enum Permission
{
- LEADER("leader"),
+ ADMIN("adminmode"),
AUTOCLAIM("autoclaim"),
- BYPASS("bypass"),
CHAT("chat"),
CLAIM("claim"),
CONFIG("config"),
@@ -16,39 +14,34 @@ public enum Permission
DEINVITE("deinvite"),
DESCRIPTION("description"),
DISBAND("disband"),
- DISBAND_ANY("disband.any"), // WHAT TO DO?
FLAG("flag"),
- FLAG_ANY("flag.any"),
- PERM("perm"),
- PERM_ANY("perm.any"),
+ FLAG_SET("flag.set"),
HELP("help"),
HOME("home"),
INVITE("invite"),
JOIN("join"),
KICK("kick"),
- KICK_ANY("kick.any"),
+ LEADER("leader"),
LEAVE("leave"),
LIST("list"),
LOCK("lock"),
MAP("map"),
- OFFICER("officer"),
MONEY_BALANCE("money.balance"),
MONEY_BALANCE_ANY("money.balance.any"),
MONEY_DEPOSIT("money.deposit"),
- MONEY_WITHDRAW("money.withdraw"),
- MONEY_WITHDRAW_ANY("money.withdraw.any"), // WHAT TO DO?
MONEY_F2F("money.f2f"),
MONEY_F2P("money.f2p"),
MONEY_P2F("money.p2f"),
+ MONEY_WITHDRAW("money.withdraw"),
+ OFFICER("officer"),
OPEN("open"),
- SET_PEACEFUL("setpeaceful"),
+ PERM("perm"),
POWER("power"),
POWER_ANY("power.any"),
RELATION("relation"),
RELOAD("reload"),
SAVE("save"),
SETHOME("sethome"),
- SETHOME_ANY("sethome.any"), // WHAT TO DO?
SHOW("show"),
TAG("tag"),
TITLE("title"),