Updated clan privileges to match latest client.

Contributed by CostyKiller.
This commit is contained in:
MobiusDevelopment
2022-05-11 10:06:51 +00:00
parent ea80c84027
commit 8d30fcb7d0
105 changed files with 413 additions and 309 deletions
@@ -68,7 +68,7 @@ public class Nottingale extends AbstractNpcAI
{ {
if (player.getClan() != null) if (player.getClan() != null)
{ {
if (player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP) && AirShipManager.getInstance().hasAirShipLicense(player.getClanId()) && !AirShipManager.getInstance().hasAirShip(player.getClanId())) if (player.hasClanPrivilege(ClanPrivilege.CL_USE_FUNCTIONS) && AirShipManager.getInstance().hasAirShipLicense(player.getClanId()) && !AirShipManager.getInstance().hasAirShip(player.getClanId()))
{ {
htmltext = event; htmltext = event;
} }
@@ -19,7 +19,9 @@ package ai.areas.Rune.Roiental;
import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.clan.ClanPrivilege;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.SystemMessageId;
import ai.AbstractNpcAI; import ai.AbstractNpcAI;
@@ -57,14 +59,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_GB)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_GB))
{ {
htmltext = "Roiental-03a.html"; htmltext = "Roiental-03a.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01a.html"; htmltext = "Roiental-01a.html";
@@ -76,14 +86,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_MR)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_MR))
{ {
htmltext = "Roiental-03b.html"; htmltext = "Roiental-03b.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01b.html"; htmltext = "Roiental-01b.html";
@@ -95,14 +113,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_TA)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_TA))
{ {
htmltext = "Roiental-03c.html"; htmltext = "Roiental-03c.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01c.html"; htmltext = "Roiental-01c.html";
@@ -151,7 +151,7 @@ public class CastleChamberlain extends AbstractNpcAI
private final String funcConfirmHtml(Player player, Npc npc, Castle castle, int func, int level) private final String funcConfirmHtml(Player player, Npc npc, Castle castle, int func, int level)
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html; final NpcHtmlMessage html;
final String fstring = (func == Castle.FUNC_TELEPORT) ? "9" : "10"; final String fstring = (func == Castle.FUNC_TELEPORT) ? "9" : "10";
@@ -461,7 +461,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "siege_functions": case "siege_functions":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -484,7 +484,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_doors": case "manage_doors":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -511,7 +511,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_doors": case "upgrade_doors":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final int type = Integer.parseInt(st.nextToken()); final int type = Integer.parseInt(st.nextToken());
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -528,7 +528,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_doors_confirm": case "upgrade_doors_confirm":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -579,7 +579,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_trap": case "manage_trap":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -608,7 +608,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_trap": case "upgrade_trap":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final String trapIndex = st.nextToken(); final String trapIndex = st.nextToken();
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -626,7 +626,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_trap_confirm": case "upgrade_trap_confirm":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -688,7 +688,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault": case "manage_vault":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -702,7 +702,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault_deposit": case "manage_vault_deposit":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_deposit.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_deposit.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -716,7 +716,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault_withdraw": case "manage_vault_withdraw":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_withdraw.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_withdraw.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -730,7 +730,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "deposit": case "deposit":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0; final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0;
if ((amount > 0) && (amount < Inventory.MAX_ADENA)) if ((amount > 0) && (amount < Inventory.MAX_ADENA))
@@ -755,7 +755,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "withdraw": case "withdraw":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0; final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0;
if (amount <= castle.getTreasury()) if (amount <= castle.getTreasury())
@@ -832,7 +832,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "doors": case "doors":
{ {
if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
htmltext = "chamberlain-21.html"; htmltext = "chamberlain-21.html";
} }
@@ -848,7 +848,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "operate_door": case "operate_door":
{ {
if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
htmltext = "chamberlain-21.html"; htmltext = "chamberlain-21.html";
} }
@@ -869,12 +869,12 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "additional_functions": case "additional_functions":
{ {
htmltext = (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) ? "castletdecomanage.html" : "chamberlain-21.html"; htmltext = (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS)) ? "castletdecomanage.html" : "chamberlain-21.html";
break; break;
} }
case "recovery": case "recovery":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AR01.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AR01.html");
funcReplace(castle, html, Castle.FUNC_RESTORE_HP, "HP"); funcReplace(castle, html, Castle.FUNC_RESTORE_HP, "HP");
@@ -890,7 +890,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "other": case "other":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AE01.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AE01.html");
funcReplace(castle, html, Castle.FUNC_TELEPORT, "TP"); funcReplace(castle, html, Castle.FUNC_TELEPORT, "TP");
@@ -935,7 +935,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "set_func": case "set_func":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final int func = Integer.parseInt(st.nextToken()); final int func = Integer.parseInt(st.nextToken());
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -1081,7 +1081,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "list_siege_clans": case "list_siege_clans":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
castle.getSiege().listRegisterClan(player); castle.getSiege().listRegisterClan(player);
} }
@@ -340,7 +340,7 @@ public class CastleCourtMagician extends AbstractNpcAI
} }
case "squadSkill": case "squadSkill":
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
RequestAcquireSkill.showSubUnitSkillList(player); RequestAcquireSkill.showSubUnitSkillList(player);
} }
@@ -136,7 +136,7 @@ public class CastleDoorManager extends AbstractNpcAI
@Override @Override
public String onFirstTalk(Npc npc, Player player) public String onFirstTalk(Npc npc, Player player)
{ {
return isOwningClan(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR) ? getHtmlName(npc) + ".html" : getHtmlName(npc) + "-no.html"; return isOwningClan(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS) ? getHtmlName(npc) + ".html" : getHtmlName(npc) + "-no.html";
} }
private String getHtmlName(Npc npc) private String getHtmlName(Npc npc)
@@ -74,7 +74,7 @@ public class ClanHallDoorManager extends AbstractNpcAI
} }
case "manageDoors": case "manageDoors":
{ {
if (isOwningClan(player, npc) && st.hasMoreTokens() && player.hasClanPrivilege(ClanPrivilege.CH_OPEN_DOOR)) if (isOwningClan(player, npc) && st.hasMoreTokens() && player.hasClanPrivilege(ClanPrivilege.CH_ENTRY_EXIT_RIGHTS))
{ {
final boolean open = st.nextToken().equals("1"); final boolean open = st.nextToken().equals("1");
clanHall.openCloseDoors(open); clanHall.openCloseDoors(open);
@@ -134,7 +134,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "manageDoors": case "manageDoors":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_OPEN_DOOR)) if (player.hasClanPrivilege(ClanPrivilege.CH_ENTRY_EXIT_RIGHTS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -175,7 +175,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "useFunctions": case "useFunctions":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_OTHER_RIGHTS)) if (player.hasClanPrivilege(ClanPrivilege.CH_USE_FUNCTIONS))
{ {
if (!st.hasMoreTokens()) if (!st.hasMoreTokens())
{ {
@@ -303,7 +303,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "manageFunctions": case "manageFunctions":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_SET_FUNCTIONS)) if (player.hasClanPrivilege(ClanPrivilege.CH_SETTTINGS))
{ {
if (!st.hasMoreTokens()) if (!st.hasMoreTokens())
{ {
@@ -111,7 +111,7 @@ public class ClanTrader extends AbstractNpcAI
String htmltext = null; String htmltext = null;
if (player.getClanId() > 0) if (player.getClanId() > 0)
{ {
htmltext = npc.getId() + ((player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) ? ".html" : "-06.html"); htmltext = npc.getId() + ((player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS)) ? ".html" : "-06.html");
} }
else else
{ {
@@ -100,7 +100,7 @@ public class FortressSiegeManager extends AbstractNpcAI
html.replace("%clanName%", fortress.getOwnerClan().getName()); html.replace("%clanName%", fortress.getOwnerClan().getName());
return html.getHtml(); return html.getHtml();
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) else if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
htmltext = "FortressSiegeManager-10.html"; htmltext = "FortressSiegeManager-10.html";
} }
@@ -169,7 +169,7 @@ public class FortressSiegeManager extends AbstractNpcAI
html.replace("%clanName%", fortress.getOwnerClan().getName()); html.replace("%clanName%", fortress.getOwnerClan().getName());
return html.getHtml(); return html.getHtml();
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) else if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
htmltext = "FortressSiegeManager-10.html"; htmltext = "FortressSiegeManager-10.html";
} }
@@ -254,7 +254,7 @@ public class SupportUnitCaptain extends AbstractNpcAI
} }
case "squadSkill": case "squadSkill":
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
RequestAcquireSkill.showSubUnitSkillList(player); RequestAcquireSkill.showSubUnitSkillList(player);
} }
@@ -80,7 +80,7 @@ public class ClanWarehouse implements IBypassHandler
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
if (!player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_THE_CLAN_WAREHOUSE); player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_THE_CLAN_WAREHOUSE);
return true; return true;
@@ -134,7 +134,7 @@ public abstract class AirShipController extends AbstractNpcAI
player.sendPacket(SystemMessageId.ANOTHER_AIRSHIP_HAS_BEEN_SUMMONED_TO_THE_WHARF_PLEASE_TRY_AGAIN_LATER); player.sendPacket(SystemMessageId.ANOTHER_AIRSHIP_HAS_BEEN_SUMMONED_TO_THE_WHARF_PLEASE_TRY_AGAIN_LATER);
return null; return null;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP)) if (!player.hasClanPrivilege(ClanPrivilege.CL_USE_FUNCTIONS))
{ {
player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER); player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER);
return null; return null;
@@ -185,7 +185,7 @@ public class FortManager extends Merchant
else if (actualCommand.equalsIgnoreCase("operate_door")) // door else if (actualCommand.equalsIgnoreCase("operate_door")) // door
// control // control
{ {
if (player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
if (!val.isEmpty()) if (!val.isEmpty())
{ {
@@ -230,7 +230,7 @@ public class FortManager extends Merchant
else if (actualCommand.equalsIgnoreCase("manage_vault")) else if (actualCommand.equalsIgnoreCase("manage_vault"))
{ {
final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
if (player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
if (val.equalsIgnoreCase("deposit")) if (val.equalsIgnoreCase("deposit"))
{ {
@@ -320,7 +320,7 @@ public class FortManager extends Merchant
} }
else if (actualCommand.equalsIgnoreCase("manage")) else if (actualCommand.equalsIgnoreCase("manage"))
{ {
if (player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (val.equalsIgnoreCase("recovery")) if (val.equalsIgnoreCase("recovery"))
{ {
@@ -995,7 +995,7 @@ public class FortManager extends Merchant
private void showVaultWindowWithdraw(Player player) private void showVaultWindowWithdraw(Player player)
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
player.setActiveWarehouse(player.getClan().getWarehouse()); player.setActiveWarehouse(player.getClan().getWarehouse());
@@ -2040,7 +2040,7 @@ public class Clan implements IIdentifiable, INamable
{ {
return false; return false;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_JOIN_CLAN)) if (!player.hasClanPrivilege(ClanPrivilege.CL_INVITE))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return false; return false;
@@ -25,35 +25,35 @@ public enum ClanPrivilege
{ {
/** dummy entry */ /** dummy entry */
DUMMY, DUMMY,
/** Privilege to join clan */
CL_JOIN_CLAN, /** System Privileges */
/** Privilege to give a title */ CL_INVITE,
CL_GIVE_TITLE, CL_MANAGE_TITLES,
/** Privilege to view warehouse content */ CL_WAREHOUSE_SEARCH,
CL_VIEW_WAREHOUSE,
/** Privilege to manage clan ranks */
CL_MANAGE_RANKS, CL_MANAGE_RANKS,
CL_PLEDGE_WAR, CL_CLAN_WAR,
CL_DISMISS, CL_DISMISS,
/** Privilege to register clan crest */ CL_EDIT_CREST,
CL_REGISTER_CREST, CL_USE_FUNCTIONS,
CL_APPRENTICE, CL_SETTINGS,
CL_TROOPS_FAME, CL_THRONE_OF_HEROES,
CL_SUMMON_AIRSHIP,
/** Privilege to open a door */ /** Clan Hall Privileges */
CH_OPEN_DOOR, CH_ENTRY_EXIT_RIGHTS,
CH_OTHER_RIGHTS, CH_USE_FUNCTIONS,
CH_AUCTION, CH_AUCTION,
CH_DISMISS, CH_DISMISS,
CH_SET_FUNCTIONS, CH_SETTTINGS,
CS_OPEN_DOOR,
CS_MANOR_ADMIN, /** Castle/Fortress Privileges */
CS_MANAGE_SIEGE, CS_ENTRY_EXIT_RIGHTS,
CS_SIEGE_WAR,
CS_USE_FUNCTIONS, CS_USE_FUNCTIONS,
CS_SETTINGS,
CS_DISMISS, CS_DISMISS,
CS_TAXES, CS_MANAGE_TAXES,
CS_MERCENARIES, CS_MERCENARIES,
CS_SET_FUNCTIONS; CS_MANOR_ADMIN;
public int getBitmask() public int getBitmask()
{ {
@@ -183,7 +183,7 @@ public class RequestAcquireSkill implements IClientIncomingPacket
} }
case SUBPLEDGE: case SUBPLEDGE:
{ {
if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
return; return;
} }
@@ -113,7 +113,7 @@ public class RequestAcquireSkillInfo implements IClientIncomingPacket
} }
case SUBPLEDGE: case SUBPLEDGE:
{ {
if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
return; return;
} }
@@ -75,7 +75,7 @@ public class RequestExSetPledgeCrestLarge implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_REGISTER_CREST)) if (!player.hasClanPrivilege(ClanPrivilege.CL_EDIT_CREST))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -55,7 +55,7 @@ public class RequestGiveNickName implements IClientIncomingPacket
else else
{ {
// Can the player change/give a title? // Can the player change/give a title?
if (!player.hasClanPrivilege(ClanPrivilege.CL_GIVE_TITLE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_MANAGE_TITLES))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -52,7 +52,7 @@ public class RequestJoinSiege implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -65,7 +65,7 @@ public class RequestPledgePower implements IClientIncomingPacket
// Clan war, right to dismiss, set functions // Clan war, right to dismiss, set functions
// Auction, manage taxes, attack/defend registration, mercenary management // Auction, manage taxes, attack/defend registration, mercenary management
// => Leaves only CP_CL_VIEW_WAREHOUSE, CP_CH_OPEN_DOOR, CP_CS_OPEN_DOOR? // => Leaves only CP_CL_VIEW_WAREHOUSE, CP_CH_OPEN_DOOR, CP_CS_OPEN_DOOR?
_privs &= ClanPrivilege.CL_VIEW_WAREHOUSE.getBitmask() | ClanPrivilege.CH_OPEN_DOOR.getBitmask() | ClanPrivilege.CS_OPEN_DOOR.getBitmask(); _privs &= ClanPrivilege.CL_WAREHOUSE_SEARCH.getBitmask() | ClanPrivilege.CH_ENTRY_EXIT_RIGHTS.getBitmask() | ClanPrivilege.CS_ENTRY_EXIT_RIGHTS.getBitmask();
} }
player.getClan().setRankPrivs(_rank, _privs); player.getClan().setRankPrivs(_rank, _privs);
} }
@@ -54,7 +54,7 @@ public class RequestPledgeSetAcademyMaster implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_APPRENTICE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_DISMISS))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_DISMISS_AN_APPRENTICE); player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_DISMISS_AN_APPRENTICE);
return; return;
@@ -80,7 +80,7 @@ public class RequestSetPledgeCrest implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_REGISTER_CREST)) if (!player.hasClanPrivilege(ClanPrivilege.CL_EDIT_CREST))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -63,7 +63,7 @@ public class RequestStartPledgeWar implements IClientIncomingPacket
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
return; return;
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_PLEDGE_WAR)) else if (!player.hasClanPrivilege(ClanPrivilege.CL_CLAN_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
@@ -68,7 +68,7 @@ public class RequestStopPledgeWar implements IClientIncomingPacket
} }
// Check if player who does the request has the correct rights to do it // Check if player who does the request has the correct rights to do it
if (!player.hasClanPrivilege(ClanPrivilege.CL_PLEDGE_WAR)) if (!player.hasClanPrivilege(ClanPrivilege.CL_CLAN_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -72,7 +72,7 @@ public class RequestSurrenderPledgeWar implements IClientIncomingPacket
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
return; return;
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_PLEDGE_WAR)) else if (!player.hasClanPrivilege(ClanPrivilege.CL_CLAN_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
@@ -103,7 +103,7 @@ public class SendWareHouseWithDrawList implements IClientIncomingPacket
if (Config.ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH) if (Config.ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH)
{ {
if ((warehouse instanceof ClanWarehouse) && !player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if ((warehouse instanceof ClanWarehouse) && !player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
return; return;
} }
@@ -68,7 +68,7 @@ public class Nottingale extends AbstractNpcAI
{ {
if (player.getClan() != null) if (player.getClan() != null)
{ {
if (player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP) && AirShipManager.getInstance().hasAirShipLicense(player.getClanId()) && !AirShipManager.getInstance().hasAirShip(player.getClanId())) if (player.hasClanPrivilege(ClanPrivilege.CL_USE_FUNCTIONS) && AirShipManager.getInstance().hasAirShipLicense(player.getClanId()) && !AirShipManager.getInstance().hasAirShip(player.getClanId()))
{ {
htmltext = event; htmltext = event;
} }
@@ -19,7 +19,9 @@ package ai.areas.Rune.Roiental;
import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.clan.ClanPrivilege;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.SystemMessageId;
import ai.AbstractNpcAI; import ai.AbstractNpcAI;
@@ -57,14 +59,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_GB)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_GB))
{ {
htmltext = "Roiental-03a.html"; htmltext = "Roiental-03a.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01a.html"; htmltext = "Roiental-01a.html";
@@ -76,14 +86,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_MR)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_MR))
{ {
htmltext = "Roiental-03b.html"; htmltext = "Roiental-03b.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01b.html"; htmltext = "Roiental-01b.html";
@@ -95,14 +113,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_TA)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_TA))
{ {
htmltext = "Roiental-03c.html"; htmltext = "Roiental-03c.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01c.html"; htmltext = "Roiental-01c.html";
@@ -151,7 +151,7 @@ public class CastleChamberlain extends AbstractNpcAI
private final String funcConfirmHtml(Player player, Npc npc, Castle castle, int func, int level) private final String funcConfirmHtml(Player player, Npc npc, Castle castle, int func, int level)
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html; final NpcHtmlMessage html;
final String fstring = (func == Castle.FUNC_TELEPORT) ? "9" : "10"; final String fstring = (func == Castle.FUNC_TELEPORT) ? "9" : "10";
@@ -461,7 +461,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "siege_functions": case "siege_functions":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -484,7 +484,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_doors": case "manage_doors":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -511,7 +511,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_doors": case "upgrade_doors":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final int type = Integer.parseInt(st.nextToken()); final int type = Integer.parseInt(st.nextToken());
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -528,7 +528,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_doors_confirm": case "upgrade_doors_confirm":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -579,7 +579,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_trap": case "manage_trap":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -608,7 +608,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_trap": case "upgrade_trap":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final String trapIndex = st.nextToken(); final String trapIndex = st.nextToken();
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -626,7 +626,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_trap_confirm": case "upgrade_trap_confirm":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -688,7 +688,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault": case "manage_vault":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -702,7 +702,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault_deposit": case "manage_vault_deposit":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_deposit.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_deposit.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -716,7 +716,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault_withdraw": case "manage_vault_withdraw":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_withdraw.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_withdraw.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -730,7 +730,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "deposit": case "deposit":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0; final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0;
if ((amount > 0) && (amount < Inventory.MAX_ADENA)) if ((amount > 0) && (amount < Inventory.MAX_ADENA))
@@ -755,7 +755,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "withdraw": case "withdraw":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0; final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0;
if (amount <= castle.getTreasury()) if (amount <= castle.getTreasury())
@@ -832,7 +832,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "doors": case "doors":
{ {
if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
htmltext = "chamberlain-21.html"; htmltext = "chamberlain-21.html";
} }
@@ -848,7 +848,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "operate_door": case "operate_door":
{ {
if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
htmltext = "chamberlain-21.html"; htmltext = "chamberlain-21.html";
} }
@@ -869,12 +869,12 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "additional_functions": case "additional_functions":
{ {
htmltext = (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) ? "castletdecomanage.html" : "chamberlain-21.html"; htmltext = (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS)) ? "castletdecomanage.html" : "chamberlain-21.html";
break; break;
} }
case "recovery": case "recovery":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AR01.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AR01.html");
funcReplace(castle, html, Castle.FUNC_RESTORE_HP, "HP"); funcReplace(castle, html, Castle.FUNC_RESTORE_HP, "HP");
@@ -890,7 +890,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "other": case "other":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AE01.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AE01.html");
funcReplace(castle, html, Castle.FUNC_TELEPORT, "TP"); funcReplace(castle, html, Castle.FUNC_TELEPORT, "TP");
@@ -935,7 +935,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "set_func": case "set_func":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final int func = Integer.parseInt(st.nextToken()); final int func = Integer.parseInt(st.nextToken());
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -1081,7 +1081,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "list_siege_clans": case "list_siege_clans":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
castle.getSiege().listRegisterClan(player); castle.getSiege().listRegisterClan(player);
} }
@@ -340,7 +340,7 @@ public class CastleCourtMagician extends AbstractNpcAI
} }
case "squadSkill": case "squadSkill":
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
RequestAcquireSkill.showSubUnitSkillList(player); RequestAcquireSkill.showSubUnitSkillList(player);
} }
@@ -136,7 +136,7 @@ public class CastleDoorManager extends AbstractNpcAI
@Override @Override
public String onFirstTalk(Npc npc, Player player) public String onFirstTalk(Npc npc, Player player)
{ {
return isOwningClan(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR) ? getHtmlName(npc) + ".html" : getHtmlName(npc) + "-no.html"; return isOwningClan(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS) ? getHtmlName(npc) + ".html" : getHtmlName(npc) + "-no.html";
} }
private String getHtmlName(Npc npc) private String getHtmlName(Npc npc)
@@ -74,7 +74,7 @@ public class ClanHallDoorManager extends AbstractNpcAI
} }
case "manageDoors": case "manageDoors":
{ {
if (isOwningClan(player, npc) && st.hasMoreTokens() && player.hasClanPrivilege(ClanPrivilege.CH_OPEN_DOOR)) if (isOwningClan(player, npc) && st.hasMoreTokens() && player.hasClanPrivilege(ClanPrivilege.CH_ENTRY_EXIT_RIGHTS))
{ {
final boolean open = st.nextToken().equals("1"); final boolean open = st.nextToken().equals("1");
clanHall.openCloseDoors(open); clanHall.openCloseDoors(open);
@@ -134,7 +134,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "manageDoors": case "manageDoors":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_OPEN_DOOR)) if (player.hasClanPrivilege(ClanPrivilege.CH_ENTRY_EXIT_RIGHTS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -175,7 +175,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "useFunctions": case "useFunctions":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_OTHER_RIGHTS)) if (player.hasClanPrivilege(ClanPrivilege.CH_USE_FUNCTIONS))
{ {
if (!st.hasMoreTokens()) if (!st.hasMoreTokens())
{ {
@@ -303,7 +303,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "manageFunctions": case "manageFunctions":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_SET_FUNCTIONS)) if (player.hasClanPrivilege(ClanPrivilege.CH_SETTTINGS))
{ {
if (!st.hasMoreTokens()) if (!st.hasMoreTokens())
{ {
@@ -100,7 +100,7 @@ public class FortressSiegeManager extends AbstractNpcAI
html.replace("%clanName%", fortress.getOwnerClan().getName()); html.replace("%clanName%", fortress.getOwnerClan().getName());
return html.getHtml(); return html.getHtml();
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) else if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
htmltext = "FortressSiegeManager-10.html"; htmltext = "FortressSiegeManager-10.html";
} }
@@ -169,7 +169,7 @@ public class FortressSiegeManager extends AbstractNpcAI
html.replace("%clanName%", fortress.getOwnerClan().getName()); html.replace("%clanName%", fortress.getOwnerClan().getName());
return html.getHtml(); return html.getHtml();
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) else if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
htmltext = "FortressSiegeManager-10.html"; htmltext = "FortressSiegeManager-10.html";
} }
@@ -254,7 +254,7 @@ public class SupportUnitCaptain extends AbstractNpcAI
} }
case "squadSkill": case "squadSkill":
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
RequestAcquireSkill.showSubUnitSkillList(player); RequestAcquireSkill.showSubUnitSkillList(player);
} }
@@ -80,7 +80,7 @@ public class ClanWarehouse implements IBypassHandler
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
if (!player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_THE_CLAN_WAREHOUSE); player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_THE_CLAN_WAREHOUSE);
return true; return true;
@@ -134,7 +134,7 @@ public abstract class AirShipController extends AbstractNpcAI
player.sendPacket(SystemMessageId.ANOTHER_AIRSHIP_HAS_BEEN_SUMMONED_TO_THE_WHARF_PLEASE_TRY_AGAIN_LATER); player.sendPacket(SystemMessageId.ANOTHER_AIRSHIP_HAS_BEEN_SUMMONED_TO_THE_WHARF_PLEASE_TRY_AGAIN_LATER);
return null; return null;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP)) if (!player.hasClanPrivilege(ClanPrivilege.CL_USE_FUNCTIONS))
{ {
player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER); player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER);
return null; return null;
@@ -185,7 +185,7 @@ public class FortManager extends Merchant
else if (actualCommand.equalsIgnoreCase("operate_door")) // door else if (actualCommand.equalsIgnoreCase("operate_door")) // door
// control // control
{ {
if (player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
if (!val.isEmpty()) if (!val.isEmpty())
{ {
@@ -230,7 +230,7 @@ public class FortManager extends Merchant
else if (actualCommand.equalsIgnoreCase("manage_vault")) else if (actualCommand.equalsIgnoreCase("manage_vault"))
{ {
final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
if (player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
if (val.equalsIgnoreCase("deposit")) if (val.equalsIgnoreCase("deposit"))
{ {
@@ -320,7 +320,7 @@ public class FortManager extends Merchant
} }
else if (actualCommand.equalsIgnoreCase("manage")) else if (actualCommand.equalsIgnoreCase("manage"))
{ {
if (player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (val.equalsIgnoreCase("recovery")) if (val.equalsIgnoreCase("recovery"))
{ {
@@ -995,7 +995,7 @@ public class FortManager extends Merchant
private void showVaultWindowWithdraw(Player player) private void showVaultWindowWithdraw(Player player)
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
player.setActiveWarehouse(player.getClan().getWarehouse()); player.setActiveWarehouse(player.getClan().getWarehouse());
@@ -2040,7 +2040,7 @@ public class Clan implements IIdentifiable, INamable
{ {
return false; return false;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_JOIN_CLAN)) if (!player.hasClanPrivilege(ClanPrivilege.CL_INVITE))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return false; return false;
@@ -25,35 +25,35 @@ public enum ClanPrivilege
{ {
/** dummy entry */ /** dummy entry */
DUMMY, DUMMY,
/** Privilege to join clan */
CL_JOIN_CLAN, /** System Privileges */
/** Privilege to give a title */ CL_INVITE,
CL_GIVE_TITLE, CL_MANAGE_TITLES,
/** Privilege to view warehouse content */ CL_WAREHOUSE_SEARCH,
CL_VIEW_WAREHOUSE,
/** Privilege to manage clan ranks */
CL_MANAGE_RANKS, CL_MANAGE_RANKS,
CL_PLEDGE_WAR, CL_CLAN_WAR,
CL_DISMISS, CL_DISMISS,
/** Privilege to register clan crest */ CL_EDIT_CREST,
CL_REGISTER_CREST, CL_USE_FUNCTIONS,
CL_APPRENTICE, CL_SETTINGS,
CL_TROOPS_FAME, CL_THRONE_OF_HEROES,
CL_SUMMON_AIRSHIP,
/** Privilege to open a door */ /** Clan Hall Privileges */
CH_OPEN_DOOR, CH_ENTRY_EXIT_RIGHTS,
CH_OTHER_RIGHTS, CH_USE_FUNCTIONS,
CH_AUCTION, CH_AUCTION,
CH_DISMISS, CH_DISMISS,
CH_SET_FUNCTIONS, CH_SETTTINGS,
CS_OPEN_DOOR,
CS_MANOR_ADMIN, /** Castle/Fortress Privileges */
CS_MANAGE_SIEGE, CS_ENTRY_EXIT_RIGHTS,
CS_SIEGE_WAR,
CS_USE_FUNCTIONS, CS_USE_FUNCTIONS,
CS_SETTINGS,
CS_DISMISS, CS_DISMISS,
CS_TAXES, CS_MANAGE_TAXES,
CS_MERCENARIES, CS_MERCENARIES,
CS_SET_FUNCTIONS; CS_MANOR_ADMIN;
public int getBitmask() public int getBitmask()
{ {
@@ -183,7 +183,7 @@ public class RequestAcquireSkill implements IClientIncomingPacket
} }
case SUBPLEDGE: case SUBPLEDGE:
{ {
if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
return; return;
} }
@@ -113,7 +113,7 @@ public class RequestAcquireSkillInfo implements IClientIncomingPacket
} }
case SUBPLEDGE: case SUBPLEDGE:
{ {
if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
return; return;
} }
@@ -75,7 +75,7 @@ public class RequestExSetPledgeCrestLarge implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_REGISTER_CREST)) if (!player.hasClanPrivilege(ClanPrivilege.CL_EDIT_CREST))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -55,7 +55,7 @@ public class RequestGiveNickName implements IClientIncomingPacket
else else
{ {
// Can the player change/give a title? // Can the player change/give a title?
if (!player.hasClanPrivilege(ClanPrivilege.CL_GIVE_TITLE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_MANAGE_TITLES))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -52,7 +52,7 @@ public class RequestJoinSiege implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -65,7 +65,7 @@ public class RequestPledgePower implements IClientIncomingPacket
// Clan war, right to dismiss, set functions // Clan war, right to dismiss, set functions
// Auction, manage taxes, attack/defend registration, mercenary management // Auction, manage taxes, attack/defend registration, mercenary management
// => Leaves only CP_CL_VIEW_WAREHOUSE, CP_CH_OPEN_DOOR, CP_CS_OPEN_DOOR? // => Leaves only CP_CL_VIEW_WAREHOUSE, CP_CH_OPEN_DOOR, CP_CS_OPEN_DOOR?
_privs &= ClanPrivilege.CL_VIEW_WAREHOUSE.getBitmask() | ClanPrivilege.CH_OPEN_DOOR.getBitmask() | ClanPrivilege.CS_OPEN_DOOR.getBitmask(); _privs &= ClanPrivilege.CL_WAREHOUSE_SEARCH.getBitmask() | ClanPrivilege.CH_ENTRY_EXIT_RIGHTS.getBitmask() | ClanPrivilege.CS_ENTRY_EXIT_RIGHTS.getBitmask();
} }
player.getClan().setRankPrivs(_rank, _privs); player.getClan().setRankPrivs(_rank, _privs);
} }
@@ -54,7 +54,7 @@ public class RequestPledgeSetAcademyMaster implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_APPRENTICE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_DISMISS))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_DISMISS_AN_APPRENTICE); player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_DISMISS_AN_APPRENTICE);
return; return;
@@ -80,7 +80,7 @@ public class RequestSetPledgeCrest implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_REGISTER_CREST)) if (!player.hasClanPrivilege(ClanPrivilege.CL_EDIT_CREST))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -63,7 +63,7 @@ public class RequestStartPledgeWar implements IClientIncomingPacket
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
return; return;
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_PLEDGE_WAR)) else if (!player.hasClanPrivilege(ClanPrivilege.CL_CLAN_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
@@ -68,7 +68,7 @@ public class RequestStopPledgeWar implements IClientIncomingPacket
} }
// Check if player who does the request has the correct rights to do it // Check if player who does the request has the correct rights to do it
if (!player.hasClanPrivilege(ClanPrivilege.CL_PLEDGE_WAR)) if (!player.hasClanPrivilege(ClanPrivilege.CL_CLAN_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -72,7 +72,7 @@ public class RequestSurrenderPledgeWar implements IClientIncomingPacket
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
return; return;
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_PLEDGE_WAR)) else if (!player.hasClanPrivilege(ClanPrivilege.CL_CLAN_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
@@ -103,7 +103,7 @@ public class SendWareHouseWithDrawList implements IClientIncomingPacket
if (Config.ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH) if (Config.ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH)
{ {
if ((warehouse instanceof ClanWarehouse) && !player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if ((warehouse instanceof ClanWarehouse) && !player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
return; return;
} }
@@ -68,7 +68,7 @@ public class Nottingale extends AbstractNpcAI
{ {
if (player.getClan() != null) if (player.getClan() != null)
{ {
if (player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP) && AirShipManager.getInstance().hasAirShipLicense(player.getClanId()) && !AirShipManager.getInstance().hasAirShip(player.getClanId())) if (player.hasClanPrivilege(ClanPrivilege.CL_USE_FUNCTIONS) && AirShipManager.getInstance().hasAirShipLicense(player.getClanId()) && !AirShipManager.getInstance().hasAirShip(player.getClanId()))
{ {
htmltext = event; htmltext = event;
} }
@@ -19,7 +19,9 @@ package ai.areas.Rune.Roiental;
import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.clan.ClanPrivilege;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.SystemMessageId;
import ai.AbstractNpcAI; import ai.AbstractNpcAI;
@@ -57,14 +59,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_GB)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_GB))
{ {
htmltext = "Roiental-03a.html"; htmltext = "Roiental-03a.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01a.html"; htmltext = "Roiental-01a.html";
@@ -76,14 +86,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_MR)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_MR))
{ {
htmltext = "Roiental-03b.html"; htmltext = "Roiental-03b.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01b.html"; htmltext = "Roiental-01b.html";
@@ -95,14 +113,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_TA)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_TA))
{ {
htmltext = "Roiental-03c.html"; htmltext = "Roiental-03c.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01c.html"; htmltext = "Roiental-01c.html";
@@ -151,7 +151,7 @@ public class CastleChamberlain extends AbstractNpcAI
private final String funcConfirmHtml(Player player, Npc npc, Castle castle, int func, int level) private final String funcConfirmHtml(Player player, Npc npc, Castle castle, int func, int level)
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html; final NpcHtmlMessage html;
final String fstring = (func == Castle.FUNC_TELEPORT) ? "9" : "10"; final String fstring = (func == Castle.FUNC_TELEPORT) ? "9" : "10";
@@ -461,7 +461,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "siege_functions": case "siege_functions":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -484,7 +484,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_doors": case "manage_doors":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -511,7 +511,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_doors": case "upgrade_doors":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final int type = Integer.parseInt(st.nextToken()); final int type = Integer.parseInt(st.nextToken());
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -528,7 +528,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_doors_confirm": case "upgrade_doors_confirm":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -579,7 +579,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_trap": case "manage_trap":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -608,7 +608,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_trap": case "upgrade_trap":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final String trapIndex = st.nextToken(); final String trapIndex = st.nextToken();
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -626,7 +626,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_trap_confirm": case "upgrade_trap_confirm":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -688,7 +688,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault": case "manage_vault":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -702,7 +702,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault_deposit": case "manage_vault_deposit":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_deposit.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_deposit.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -716,7 +716,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault_withdraw": case "manage_vault_withdraw":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_withdraw.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_withdraw.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -730,7 +730,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "deposit": case "deposit":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0; final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0;
if ((amount > 0) && (amount < Inventory.MAX_ADENA)) if ((amount > 0) && (amount < Inventory.MAX_ADENA))
@@ -755,7 +755,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "withdraw": case "withdraw":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0; final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0;
if (amount <= castle.getTreasury()) if (amount <= castle.getTreasury())
@@ -832,7 +832,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "doors": case "doors":
{ {
if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
htmltext = "chamberlain-21.html"; htmltext = "chamberlain-21.html";
} }
@@ -848,7 +848,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "operate_door": case "operate_door":
{ {
if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
htmltext = "chamberlain-21.html"; htmltext = "chamberlain-21.html";
} }
@@ -869,12 +869,12 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "additional_functions": case "additional_functions":
{ {
htmltext = (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) ? "castletdecomanage.html" : "chamberlain-21.html"; htmltext = (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS)) ? "castletdecomanage.html" : "chamberlain-21.html";
break; break;
} }
case "recovery": case "recovery":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AR01.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AR01.html");
funcReplace(castle, html, Castle.FUNC_RESTORE_HP, "HP"); funcReplace(castle, html, Castle.FUNC_RESTORE_HP, "HP");
@@ -890,7 +890,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "other": case "other":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AE01.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AE01.html");
funcReplace(castle, html, Castle.FUNC_TELEPORT, "TP"); funcReplace(castle, html, Castle.FUNC_TELEPORT, "TP");
@@ -935,7 +935,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "set_func": case "set_func":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final int func = Integer.parseInt(st.nextToken()); final int func = Integer.parseInt(st.nextToken());
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -1081,7 +1081,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "list_siege_clans": case "list_siege_clans":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
castle.getSiege().listRegisterClan(player); castle.getSiege().listRegisterClan(player);
} }
@@ -340,7 +340,7 @@ public class CastleCourtMagician extends AbstractNpcAI
} }
case "squadSkill": case "squadSkill":
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
RequestAcquireSkill.showSubUnitSkillList(player); RequestAcquireSkill.showSubUnitSkillList(player);
} }
@@ -136,7 +136,7 @@ public class CastleDoorManager extends AbstractNpcAI
@Override @Override
public String onFirstTalk(Npc npc, Player player) public String onFirstTalk(Npc npc, Player player)
{ {
return isOwningClan(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR) ? getHtmlName(npc) + ".html" : getHtmlName(npc) + "-no.html"; return isOwningClan(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS) ? getHtmlName(npc) + ".html" : getHtmlName(npc) + "-no.html";
} }
private String getHtmlName(Npc npc) private String getHtmlName(Npc npc)
@@ -74,7 +74,7 @@ public class ClanHallDoorManager extends AbstractNpcAI
} }
case "manageDoors": case "manageDoors":
{ {
if (isOwningClan(player, npc) && st.hasMoreTokens() && player.hasClanPrivilege(ClanPrivilege.CH_OPEN_DOOR)) if (isOwningClan(player, npc) && st.hasMoreTokens() && player.hasClanPrivilege(ClanPrivilege.CH_ENTRY_EXIT_RIGHTS))
{ {
final boolean open = st.nextToken().equals("1"); final boolean open = st.nextToken().equals("1");
clanHall.openCloseDoors(open); clanHall.openCloseDoors(open);
@@ -134,7 +134,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "manageDoors": case "manageDoors":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_OPEN_DOOR)) if (player.hasClanPrivilege(ClanPrivilege.CH_ENTRY_EXIT_RIGHTS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -175,7 +175,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "useFunctions": case "useFunctions":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_OTHER_RIGHTS)) if (player.hasClanPrivilege(ClanPrivilege.CH_USE_FUNCTIONS))
{ {
if (!st.hasMoreTokens()) if (!st.hasMoreTokens())
{ {
@@ -303,7 +303,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "manageFunctions": case "manageFunctions":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_SET_FUNCTIONS)) if (player.hasClanPrivilege(ClanPrivilege.CH_SETTTINGS))
{ {
if (!st.hasMoreTokens()) if (!st.hasMoreTokens())
{ {
@@ -100,7 +100,7 @@ public class FortressSiegeManager extends AbstractNpcAI
html.replace("%clanName%", fortress.getOwnerClan().getName()); html.replace("%clanName%", fortress.getOwnerClan().getName());
return html.getHtml(); return html.getHtml();
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) else if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
htmltext = "FortressSiegeManager-10.html"; htmltext = "FortressSiegeManager-10.html";
} }
@@ -169,7 +169,7 @@ public class FortressSiegeManager extends AbstractNpcAI
html.replace("%clanName%", fortress.getOwnerClan().getName()); html.replace("%clanName%", fortress.getOwnerClan().getName());
return html.getHtml(); return html.getHtml();
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) else if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
htmltext = "FortressSiegeManager-10.html"; htmltext = "FortressSiegeManager-10.html";
} }
@@ -254,7 +254,7 @@ public class SupportUnitCaptain extends AbstractNpcAI
} }
case "squadSkill": case "squadSkill":
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
RequestAcquireSkill.showSubUnitSkillList(player); RequestAcquireSkill.showSubUnitSkillList(player);
} }
@@ -80,7 +80,7 @@ public class ClanWarehouse implements IBypassHandler
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
if (!player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_THE_CLAN_WAREHOUSE); player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_THE_CLAN_WAREHOUSE);
return true; return true;
@@ -134,7 +134,7 @@ public abstract class AirShipController extends AbstractNpcAI
player.sendPacket(SystemMessageId.ANOTHER_AIRSHIP_HAS_BEEN_SUMMONED_TO_THE_WHARF_PLEASE_TRY_AGAIN_LATER); player.sendPacket(SystemMessageId.ANOTHER_AIRSHIP_HAS_BEEN_SUMMONED_TO_THE_WHARF_PLEASE_TRY_AGAIN_LATER);
return null; return null;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP)) if (!player.hasClanPrivilege(ClanPrivilege.CL_USE_FUNCTIONS))
{ {
player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER); player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER);
return null; return null;
@@ -185,7 +185,7 @@ public class FortManager extends Merchant
else if (actualCommand.equalsIgnoreCase("operate_door")) // door else if (actualCommand.equalsIgnoreCase("operate_door")) // door
// control // control
{ {
if (player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
if (!val.isEmpty()) if (!val.isEmpty())
{ {
@@ -230,7 +230,7 @@ public class FortManager extends Merchant
else if (actualCommand.equalsIgnoreCase("manage_vault")) else if (actualCommand.equalsIgnoreCase("manage_vault"))
{ {
final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
if (player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
if (val.equalsIgnoreCase("deposit")) if (val.equalsIgnoreCase("deposit"))
{ {
@@ -320,7 +320,7 @@ public class FortManager extends Merchant
} }
else if (actualCommand.equalsIgnoreCase("manage")) else if (actualCommand.equalsIgnoreCase("manage"))
{ {
if (player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (val.equalsIgnoreCase("recovery")) if (val.equalsIgnoreCase("recovery"))
{ {
@@ -995,7 +995,7 @@ public class FortManager extends Merchant
private void showVaultWindowWithdraw(Player player) private void showVaultWindowWithdraw(Player player)
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
player.setActiveWarehouse(player.getClan().getWarehouse()); player.setActiveWarehouse(player.getClan().getWarehouse());
@@ -2040,7 +2040,7 @@ public class Clan implements IIdentifiable, INamable
{ {
return false; return false;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_JOIN_CLAN)) if (!player.hasClanPrivilege(ClanPrivilege.CL_INVITE))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return false; return false;
@@ -25,35 +25,35 @@ public enum ClanPrivilege
{ {
/** dummy entry */ /** dummy entry */
DUMMY, DUMMY,
/** Privilege to join clan */
CL_JOIN_CLAN, /** System Privileges */
/** Privilege to give a title */ CL_INVITE,
CL_GIVE_TITLE, CL_MANAGE_TITLES,
/** Privilege to view warehouse content */ CL_WAREHOUSE_SEARCH,
CL_VIEW_WAREHOUSE,
/** Privilege to manage clan ranks */
CL_MANAGE_RANKS, CL_MANAGE_RANKS,
CL_PLEDGE_WAR, CL_CLAN_WAR,
CL_DISMISS, CL_DISMISS,
/** Privilege to register clan crest */ CL_EDIT_CREST,
CL_REGISTER_CREST, CL_USE_FUNCTIONS,
CL_APPRENTICE, CL_SETTINGS,
CL_TROOPS_FAME, CL_THRONE_OF_HEROES,
CL_SUMMON_AIRSHIP,
/** Privilege to open a door */ /** Clan Hall Privileges */
CH_OPEN_DOOR, CH_ENTRY_EXIT_RIGHTS,
CH_OTHER_RIGHTS, CH_USE_FUNCTIONS,
CH_AUCTION, CH_AUCTION,
CH_DISMISS, CH_DISMISS,
CH_SET_FUNCTIONS, CH_SETTTINGS,
CS_OPEN_DOOR,
CS_MANOR_ADMIN, /** Castle/Fortress Privileges */
CS_MANAGE_SIEGE, CS_ENTRY_EXIT_RIGHTS,
CS_SIEGE_WAR,
CS_USE_FUNCTIONS, CS_USE_FUNCTIONS,
CS_SETTINGS,
CS_DISMISS, CS_DISMISS,
CS_TAXES, CS_MANAGE_TAXES,
CS_MERCENARIES, CS_MERCENARIES,
CS_SET_FUNCTIONS; CS_MANOR_ADMIN;
public int getBitmask() public int getBitmask()
{ {
@@ -183,7 +183,7 @@ public class RequestAcquireSkill implements IClientIncomingPacket
} }
case SUBPLEDGE: case SUBPLEDGE:
{ {
if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
return; return;
} }
@@ -113,7 +113,7 @@ public class RequestAcquireSkillInfo implements IClientIncomingPacket
} }
case SUBPLEDGE: case SUBPLEDGE:
{ {
if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
return; return;
} }
@@ -75,7 +75,7 @@ public class RequestExSetPledgeCrestLarge implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_REGISTER_CREST)) if (!player.hasClanPrivilege(ClanPrivilege.CL_EDIT_CREST))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -55,7 +55,7 @@ public class RequestGiveNickName implements IClientIncomingPacket
else else
{ {
// Can the player change/give a title? // Can the player change/give a title?
if (!player.hasClanPrivilege(ClanPrivilege.CL_GIVE_TITLE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_MANAGE_TITLES))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -52,7 +52,7 @@ public class RequestJoinSiege implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -65,7 +65,7 @@ public class RequestPledgePower implements IClientIncomingPacket
// Clan war, right to dismiss, set functions // Clan war, right to dismiss, set functions
// Auction, manage taxes, attack/defend registration, mercenary management // Auction, manage taxes, attack/defend registration, mercenary management
// => Leaves only CP_CL_VIEW_WAREHOUSE, CP_CH_OPEN_DOOR, CP_CS_OPEN_DOOR? // => Leaves only CP_CL_VIEW_WAREHOUSE, CP_CH_OPEN_DOOR, CP_CS_OPEN_DOOR?
_privs &= ClanPrivilege.CL_VIEW_WAREHOUSE.getBitmask() | ClanPrivilege.CH_OPEN_DOOR.getBitmask() | ClanPrivilege.CS_OPEN_DOOR.getBitmask(); _privs &= ClanPrivilege.CL_WAREHOUSE_SEARCH.getBitmask() | ClanPrivilege.CH_ENTRY_EXIT_RIGHTS.getBitmask() | ClanPrivilege.CS_ENTRY_EXIT_RIGHTS.getBitmask();
} }
player.getClan().setRankPrivs(_rank, _privs); player.getClan().setRankPrivs(_rank, _privs);
} }
@@ -54,7 +54,7 @@ public class RequestPledgeSetAcademyMaster implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_APPRENTICE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_DISMISS))
{ {
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_THE_RIGHT_TO_DISMISS_MENTEES); player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_THE_RIGHT_TO_DISMISS_MENTEES);
return; return;
@@ -80,7 +80,7 @@ public class RequestSetPledgeCrest implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_REGISTER_CREST)) if (!player.hasClanPrivilege(ClanPrivilege.CL_EDIT_CREST))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -63,7 +63,7 @@ public class RequestStartPledgeWar implements IClientIncomingPacket
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
return; return;
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_PLEDGE_WAR)) else if (!player.hasClanPrivilege(ClanPrivilege.CL_CLAN_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
@@ -69,7 +69,7 @@ public class RequestStopPledgeWar implements IClientIncomingPacket
} }
// Check if player who does the request has the correct rights to do it // Check if player who does the request has the correct rights to do it
if (!player.hasClanPrivilege(ClanPrivilege.CL_PLEDGE_WAR)) if (!player.hasClanPrivilege(ClanPrivilege.CL_CLAN_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -72,7 +72,7 @@ public class RequestSurrenderPledgeWar implements IClientIncomingPacket
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
return; return;
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_PLEDGE_WAR)) else if (!player.hasClanPrivilege(ClanPrivilege.CL_CLAN_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
@@ -103,7 +103,7 @@ public class SendWareHouseWithDrawList implements IClientIncomingPacket
if (Config.ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH) if (Config.ALT_MEMBERS_CAN_WITHDRAW_FROM_CLANWH)
{ {
if ((warehouse instanceof ClanWarehouse) && !player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if ((warehouse instanceof ClanWarehouse) && !player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
return; return;
} }
@@ -68,7 +68,7 @@ public class Nottingale extends AbstractNpcAI
{ {
if (player.getClan() != null) if (player.getClan() != null)
{ {
if (player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP) && AirShipManager.getInstance().hasAirShipLicense(player.getClanId()) && !AirShipManager.getInstance().hasAirShip(player.getClanId())) if (player.hasClanPrivilege(ClanPrivilege.CL_USE_FUNCTIONS) && AirShipManager.getInstance().hasAirShipLicense(player.getClanId()) && !AirShipManager.getInstance().hasAirShip(player.getClanId()))
{ {
htmltext = event; htmltext = event;
} }
@@ -19,7 +19,9 @@ package ai.areas.Rune.Roiental;
import org.l2jmobius.gameserver.instancemanager.InstanceManager; import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.clan.ClanPrivilege;
import org.l2jmobius.gameserver.model.instancezone.Instance; import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.network.SystemMessageId;
import ai.AbstractNpcAI; import ai.AbstractNpcAI;
@@ -57,14 +59,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_GB)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_GB))
{ {
htmltext = "Roiental-03a.html"; htmltext = "Roiental-03a.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01a.html"; htmltext = "Roiental-01a.html";
@@ -76,14 +86,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_MR)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_MR))
{ {
htmltext = "Roiental-03b.html"; htmltext = "Roiental-03b.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01b.html"; htmltext = "Roiental-01b.html";
@@ -95,14 +113,22 @@ public class Roiental extends AbstractNpcAI
{ {
htmltext = "Roiental-NoLevel.html"; htmltext = "Roiental-NoLevel.html";
} }
else if ((player.getClan() == null) || (player.getClan().getLevel() < CLAN_MIN_LVL_TA)) else if (player.getClan() == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_BELONG_TO_ANY_CLAN);
}
else if ((player.getClan().getLevel() < CLAN_MIN_LVL_TA))
{ {
htmltext = "Roiental-03c.html"; htmltext = "Roiental-03c.html";
} }
else if ((player.getClan() == null) || player.getClan().getVariables().hasVariable("TOH_DONE")) else if (player.getClan().getVariables().hasVariable("TOH_DONE"))
{ {
htmltext = "Roiental-AlreadyDone.html"; htmltext = "Roiental-AlreadyDone.html";
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CL_THRONE_OF_HEROES))
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
}
else else
{ {
htmltext = "Roiental-01c.html"; htmltext = "Roiental-01c.html";
@@ -151,7 +151,7 @@ public class CastleChamberlain extends AbstractNpcAI
private final String funcConfirmHtml(Player player, Npc npc, Castle castle, int func, int level) private final String funcConfirmHtml(Player player, Npc npc, Castle castle, int func, int level)
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html; final NpcHtmlMessage html;
final String fstring = (func == Castle.FUNC_TELEPORT) ? "9" : "10"; final String fstring = (func == Castle.FUNC_TELEPORT) ? "9" : "10";
@@ -461,7 +461,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "siege_functions": case "siege_functions":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -484,7 +484,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_doors": case "manage_doors":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -511,7 +511,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_doors": case "upgrade_doors":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final int type = Integer.parseInt(st.nextToken()); final int type = Integer.parseInt(st.nextToken());
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -528,7 +528,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_doors_confirm": case "upgrade_doors_confirm":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -579,7 +579,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_trap": case "manage_trap":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -608,7 +608,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_trap": case "upgrade_trap":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final String trapIndex = st.nextToken(); final String trapIndex = st.nextToken();
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -626,7 +626,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "upgrade_trap_confirm": case "upgrade_trap_confirm":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (castle.getSiege().isInProgress()) if (castle.getSiege().isInProgress())
{ {
@@ -688,7 +688,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault": case "manage_vault":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -702,7 +702,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault_deposit": case "manage_vault_deposit":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_deposit.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_deposit.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -716,7 +716,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "manage_vault_withdraw": case "manage_vault_withdraw":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_withdraw.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castlemanagevault_withdraw.html");
html.replace("%tax_income%", Util.formatAdena(castle.getTreasury())); html.replace("%tax_income%", Util.formatAdena(castle.getTreasury()));
@@ -730,7 +730,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "deposit": case "deposit":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0; final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0;
if ((amount > 0) && (amount < Inventory.MAX_ADENA)) if ((amount > 0) && (amount < Inventory.MAX_ADENA))
@@ -755,7 +755,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "withdraw": case "withdraw":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_TAXES)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_TAXES))
{ {
final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0; final long amount = (st.hasMoreTokens()) ? Long.parseLong(st.nextToken()) : 0;
if (amount <= castle.getTreasury()) if (amount <= castle.getTreasury())
@@ -832,7 +832,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "doors": case "doors":
{ {
if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
htmltext = "chamberlain-21.html"; htmltext = "chamberlain-21.html";
} }
@@ -848,7 +848,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "operate_door": case "operate_door":
{ {
if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (!isOwner(player, npc) || !player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
htmltext = "chamberlain-21.html"; htmltext = "chamberlain-21.html";
} }
@@ -869,12 +869,12 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "additional_functions": case "additional_functions":
{ {
htmltext = (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) ? "castletdecomanage.html" : "chamberlain-21.html"; htmltext = (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS)) ? "castletdecomanage.html" : "chamberlain-21.html";
break; break;
} }
case "recovery": case "recovery":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AR01.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AR01.html");
funcReplace(castle, html, Castle.FUNC_RESTORE_HP, "HP"); funcReplace(castle, html, Castle.FUNC_RESTORE_HP, "HP");
@@ -890,7 +890,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "other": case "other":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AE01.html"); final NpcHtmlMessage html = getHtmlPacket(player, npc, "castledeco-AE01.html");
funcReplace(castle, html, Castle.FUNC_TELEPORT, "TP"); funcReplace(castle, html, Castle.FUNC_TELEPORT, "TP");
@@ -935,7 +935,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "set_func": case "set_func":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
final int func = Integer.parseInt(st.nextToken()); final int func = Integer.parseInt(st.nextToken());
final int level = Integer.parseInt(st.nextToken()); final int level = Integer.parseInt(st.nextToken());
@@ -1081,7 +1081,7 @@ public class CastleChamberlain extends AbstractNpcAI
} }
case "list_siege_clans": case "list_siege_clans":
{ {
if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) if (isOwner(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
castle.getSiege().listRegisterClan(player); castle.getSiege().listRegisterClan(player);
} }
@@ -340,7 +340,7 @@ public class CastleCourtMagician extends AbstractNpcAI
} }
case "squadSkill": case "squadSkill":
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
RequestAcquireSkill.showSubUnitSkillList(player); RequestAcquireSkill.showSubUnitSkillList(player);
} }
@@ -136,7 +136,7 @@ public class CastleDoorManager extends AbstractNpcAI
@Override @Override
public String onFirstTalk(Npc npc, Player player) public String onFirstTalk(Npc npc, Player player)
{ {
return isOwningClan(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR) ? getHtmlName(npc) + ".html" : getHtmlName(npc) + "-no.html"; return isOwningClan(player, npc) && player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS) ? getHtmlName(npc) + ".html" : getHtmlName(npc) + "-no.html";
} }
private String getHtmlName(Npc npc) private String getHtmlName(Npc npc)
@@ -74,7 +74,7 @@ public class ClanHallDoorManager extends AbstractNpcAI
} }
case "manageDoors": case "manageDoors":
{ {
if (isOwningClan(player, npc) && st.hasMoreTokens() && player.hasClanPrivilege(ClanPrivilege.CH_OPEN_DOOR)) if (isOwningClan(player, npc) && st.hasMoreTokens() && player.hasClanPrivilege(ClanPrivilege.CH_ENTRY_EXIT_RIGHTS))
{ {
final boolean open = st.nextToken().equals("1"); final boolean open = st.nextToken().equals("1");
clanHall.openCloseDoors(open); clanHall.openCloseDoors(open);
@@ -134,7 +134,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "manageDoors": case "manageDoors":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_OPEN_DOOR)) if (player.hasClanPrivilege(ClanPrivilege.CH_ENTRY_EXIT_RIGHTS))
{ {
if (st.hasMoreTokens()) if (st.hasMoreTokens())
{ {
@@ -175,7 +175,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "useFunctions": case "useFunctions":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_OTHER_RIGHTS)) if (player.hasClanPrivilege(ClanPrivilege.CH_USE_FUNCTIONS))
{ {
if (!st.hasMoreTokens()) if (!st.hasMoreTokens())
{ {
@@ -303,7 +303,7 @@ public class ClanHallManager extends AbstractNpcAI
} }
case "manageFunctions": case "manageFunctions":
{ {
if (player.hasClanPrivilege(ClanPrivilege.CH_SET_FUNCTIONS)) if (player.hasClanPrivilege(ClanPrivilege.CH_SETTTINGS))
{ {
if (!st.hasMoreTokens()) if (!st.hasMoreTokens())
{ {
@@ -100,7 +100,7 @@ public class FortressSiegeManager extends AbstractNpcAI
html.replace("%clanName%", fortress.getOwnerClan().getName()); html.replace("%clanName%", fortress.getOwnerClan().getName());
return html.getHtml(); return html.getHtml();
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) else if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
htmltext = "FortressSiegeManager-10.html"; htmltext = "FortressSiegeManager-10.html";
} }
@@ -169,7 +169,7 @@ public class FortressSiegeManager extends AbstractNpcAI
html.replace("%clanName%", fortress.getOwnerClan().getName()); html.replace("%clanName%", fortress.getOwnerClan().getName());
return html.getHtml(); return html.getHtml();
} }
else if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) else if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
htmltext = "FortressSiegeManager-10.html"; htmltext = "FortressSiegeManager-10.html";
} }
@@ -254,7 +254,7 @@ public class SupportUnitCaptain extends AbstractNpcAI
} }
case "squadSkill": case "squadSkill":
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
RequestAcquireSkill.showSubUnitSkillList(player); RequestAcquireSkill.showSubUnitSkillList(player);
} }
@@ -80,7 +80,7 @@ public class ClanWarehouse implements IBypassHandler
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
if (!player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_THE_CLAN_WAREHOUSE); player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_THE_RIGHT_TO_USE_THE_CLAN_WAREHOUSE);
return true; return true;
@@ -134,7 +134,7 @@ public abstract class AirShipController extends AbstractNpcAI
player.sendPacket(SystemMessageId.ANOTHER_AIRSHIP_HAS_BEEN_SUMMONED_TO_THE_WHARF_PLEASE_TRY_AGAIN_LATER); player.sendPacket(SystemMessageId.ANOTHER_AIRSHIP_HAS_BEEN_SUMMONED_TO_THE_WHARF_PLEASE_TRY_AGAIN_LATER);
return null; return null;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_SUMMON_AIRSHIP)) if (!player.hasClanPrivilege(ClanPrivilege.CL_USE_FUNCTIONS))
{ {
player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER); player.sendPacket(SystemMessageId.AIRSHIP_SUMMON_LICENSE_REGISTRATION_CAN_ONLY_BE_DONE_BY_THE_CLAN_LEADER);
return null; return null;
@@ -185,7 +185,7 @@ public class FortManager extends Merchant
else if (actualCommand.equalsIgnoreCase("operate_door")) // door else if (actualCommand.equalsIgnoreCase("operate_door")) // door
// control // control
{ {
if (player.hasClanPrivilege(ClanPrivilege.CS_OPEN_DOOR)) if (player.hasClanPrivilege(ClanPrivilege.CS_ENTRY_EXIT_RIGHTS))
{ {
if (!val.isEmpty()) if (!val.isEmpty())
{ {
@@ -230,7 +230,7 @@ public class FortManager extends Merchant
else if (actualCommand.equalsIgnoreCase("manage_vault")) else if (actualCommand.equalsIgnoreCase("manage_vault"))
{ {
final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
if (player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
if (val.equalsIgnoreCase("deposit")) if (val.equalsIgnoreCase("deposit"))
{ {
@@ -320,7 +320,7 @@ public class FortManager extends Merchant
} }
else if (actualCommand.equalsIgnoreCase("manage")) else if (actualCommand.equalsIgnoreCase("manage"))
{ {
if (player.hasClanPrivilege(ClanPrivilege.CS_SET_FUNCTIONS)) if (player.hasClanPrivilege(ClanPrivilege.CS_SETTINGS))
{ {
if (val.equalsIgnoreCase("recovery")) if (val.equalsIgnoreCase("recovery"))
{ {
@@ -995,7 +995,7 @@ public class FortManager extends Merchant
private void showVaultWindowWithdraw(Player player) private void showVaultWindowWithdraw(Player player)
{ {
if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_VIEW_WAREHOUSE)) if (player.isClanLeader() || player.hasClanPrivilege(ClanPrivilege.CL_WAREHOUSE_SEARCH))
{ {
player.sendPacket(ActionFailed.STATIC_PACKET); player.sendPacket(ActionFailed.STATIC_PACKET);
player.setActiveWarehouse(player.getClan().getWarehouse()); player.setActiveWarehouse(player.getClan().getWarehouse());
@@ -2040,7 +2040,7 @@ public class Clan implements IIdentifiable, INamable
{ {
return false; return false;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_JOIN_CLAN)) if (!player.hasClanPrivilege(ClanPrivilege.CL_INVITE))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return false; return false;
@@ -25,35 +25,35 @@ public enum ClanPrivilege
{ {
/** dummy entry */ /** dummy entry */
DUMMY, DUMMY,
/** Privilege to join clan */
CL_JOIN_CLAN, /** System Privileges */
/** Privilege to give a title */ CL_INVITE,
CL_GIVE_TITLE, CL_MANAGE_TITLES,
/** Privilege to view warehouse content */ CL_WAREHOUSE_SEARCH,
CL_VIEW_WAREHOUSE,
/** Privilege to manage clan ranks */
CL_MANAGE_RANKS, CL_MANAGE_RANKS,
CL_PLEDGE_WAR, CL_CLAN_WAR,
CL_DISMISS, CL_DISMISS,
/** Privilege to register clan crest */ CL_EDIT_CREST,
CL_REGISTER_CREST, CL_USE_FUNCTIONS,
CL_APPRENTICE, CL_SETTINGS,
CL_TROOPS_FAME, CL_THRONE_OF_HEROES,
CL_SUMMON_AIRSHIP,
/** Privilege to open a door */ /** Clan Hall Privileges */
CH_OPEN_DOOR, CH_ENTRY_EXIT_RIGHTS,
CH_OTHER_RIGHTS, CH_USE_FUNCTIONS,
CH_AUCTION, CH_AUCTION,
CH_DISMISS, CH_DISMISS,
CH_SET_FUNCTIONS, CH_SETTTINGS,
CS_OPEN_DOOR,
CS_MANOR_ADMIN, /** Castle/Fortress Privileges */
CS_MANAGE_SIEGE, CS_ENTRY_EXIT_RIGHTS,
CS_SIEGE_WAR,
CS_USE_FUNCTIONS, CS_USE_FUNCTIONS,
CS_SETTINGS,
CS_DISMISS, CS_DISMISS,
CS_TAXES, CS_MANAGE_TAXES,
CS_MERCENARIES, CS_MERCENARIES,
CS_SET_FUNCTIONS; CS_MANOR_ADMIN;
public int getBitmask() public int getBitmask()
{ {
@@ -183,7 +183,7 @@ public class RequestAcquireSkill implements IClientIncomingPacket
} }
case SUBPLEDGE: case SUBPLEDGE:
{ {
if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
return; return;
} }
@@ -113,7 +113,7 @@ public class RequestAcquireSkillInfo implements IClientIncomingPacket
} }
case SUBPLEDGE: case SUBPLEDGE:
{ {
if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_TROOPS_FAME)) if (!player.isClanLeader() || !player.hasClanPrivilege(ClanPrivilege.CL_SETTINGS))
{ {
return; return;
} }
@@ -75,7 +75,7 @@ public class RequestExSetPledgeCrestLarge implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_REGISTER_CREST)) if (!player.hasClanPrivilege(ClanPrivilege.CL_EDIT_CREST))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -55,7 +55,7 @@ public class RequestGiveNickName implements IClientIncomingPacket
else else
{ {
// Can the player change/give a title? // Can the player change/give a title?
if (!player.hasClanPrivilege(ClanPrivilege.CL_GIVE_TITLE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_MANAGE_TITLES))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -52,7 +52,7 @@ public class RequestJoinSiege implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CS_MANAGE_SIEGE)) if (!player.hasClanPrivilege(ClanPrivilege.CS_SIEGE_WAR))
{ {
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT); player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return; return;
@@ -65,7 +65,7 @@ public class RequestPledgePower implements IClientIncomingPacket
// Clan war, right to dismiss, set functions // Clan war, right to dismiss, set functions
// Auction, manage taxes, attack/defend registration, mercenary management // Auction, manage taxes, attack/defend registration, mercenary management
// => Leaves only CP_CL_VIEW_WAREHOUSE, CP_CH_OPEN_DOOR, CP_CS_OPEN_DOOR? // => Leaves only CP_CL_VIEW_WAREHOUSE, CP_CH_OPEN_DOOR, CP_CS_OPEN_DOOR?
_privs &= ClanPrivilege.CL_VIEW_WAREHOUSE.getBitmask() | ClanPrivilege.CH_OPEN_DOOR.getBitmask() | ClanPrivilege.CS_OPEN_DOOR.getBitmask(); _privs &= ClanPrivilege.CL_WAREHOUSE_SEARCH.getBitmask() | ClanPrivilege.CH_ENTRY_EXIT_RIGHTS.getBitmask() | ClanPrivilege.CS_ENTRY_EXIT_RIGHTS.getBitmask();
} }
player.getClan().setRankPrivs(_rank, _privs); player.getClan().setRankPrivs(_rank, _privs);
} }
@@ -54,7 +54,7 @@ public class RequestPledgeSetAcademyMaster implements IClientIncomingPacket
return; return;
} }
if (!player.hasClanPrivilege(ClanPrivilege.CL_APPRENTICE)) if (!player.hasClanPrivilege(ClanPrivilege.CL_DISMISS))
{ {
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_THE_RIGHT_TO_DISMISS_MENTEES); player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_THE_RIGHT_TO_DISMISS_MENTEES);
return; return;

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