/*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If
* not, see <http://www.gnu.org/licenses/>.
*/
package silentium.gameserver.model.actor.instance;
import java.util.StringTokenizer;
import javolution.text.TextBuilder;
import silentium.gameserver.configs.EventsConfig;
import silentium.gameserver.data.html.HtmCache;
import silentium.gameserver.model.L2ItemInstance;
import silentium.gameserver.model.entity.sevensigns.SevenSigns;
import silentium.gameserver.model.itemcontainer.PcInventory;
import silentium.gameserver.network.SystemMessageId;
import silentium.gameserver.network.serverpackets.ActionFailed;
import silentium.gameserver.network.serverpackets.NpcHtmlMessage;
import silentium.gameserver.network.serverpackets.SystemMessage;
import silentium.gameserver.templates.chars.L2NpcTemplate;
/**
* Dawn/Dusk Seven Signs Priest Instance
*
* @author Tempy
*/
public class L2SignsPriestInstance extends L2NpcInstance
{
public L2SignsPriestInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
}
@Override
public void onBypassFeedback(L2PcInstance player, String command)
{
if (player.getCurrentFolkNPC() == null || player.getCurrentFolkNPC().getObjectId() != getObjectId())
return;
if (command.startsWith("SevenSignsDesc"))
{
showChatWindow(player, Integer.parseInt(command.substring(15)), null, true);
}
else if (command.startsWith("SevenSigns"))
{
SystemMessage sm;
String path;
int cabal = SevenSigns.CABAL_NULL;
int stoneType = 0;
final long ancientAdenaAmount = player.getAncientAdena();
int val = Integer.parseInt(command.substring(11, 12).trim());
if (command.length() > 12) // SevenSigns x[x] x [x..x]
val = Integer.parseInt(command.substring(11, 13).trim());
if (command.length() > 13)
{
try
{
cabal = Integer.parseInt(command.substring(14, 15).trim());
}
catch (Exception e)
{
try
{
cabal = Integer.parseInt(command.substring(13, 14).trim());
}
catch (Exception e2)
{
try
{
StringTokenizer st = new StringTokenizer(command.trim());
st.nextToken();
cabal = Integer.parseInt(st.nextToken());
}
catch (Exception e3)
{
_log.warn("Failed to retrieve cabal from bypass command. NpcId: " + getNpcId() + "; Command: " + command);
}
}
}
}
switch (val)
{
case 2: // Purchase Record of the Seven Signs
if (!player.getInventory().validateCapacity(1))
{
player.sendPacket(SystemMessageId.SLOTS_FULL);
break;
}
if (!player.reduceAdena("SevenSigns", SevenSigns.RECORD_SEVEN_SIGNS_COST, this, true))
{
player.sendPacket(SystemMessageId.YOU_NOT_ENOUGH_ADENA);
break;
}
player.getInventory().addItem("SevenSigns", SevenSigns.RECORD_SEVEN_SIGNS_ID, 1, player, this);
sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1);
sm.addItemName(SevenSigns.RECORD_SEVEN_SIGNS_ID);
player.sendPacket(sm);
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, val, "dawn", false);
else
showChatWindow(player, val, "dusk", false);
break;
case 33: // "I want to participate" request
int oldCabal = SevenSigns.getInstance().getPlayerCabal(player.getObjectId());
if (oldCabal != SevenSigns.CABAL_NULL)
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, val, "dawn_member", false);
else
showChatWindow(player, val, "dusk_member", false);
return;
}
else if (player.getClassId().level() == 0)
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, val, "dawn_firstclass", false);
else
showChatWindow(player, val, "dusk_firstclass", false);
return;
}
else if (cabal == SevenSigns.CABAL_DUSK && EventsConfig.ALT_GAME_CASTLE_DUSK) // dusk
{
// castle owners cannot participate with dusk side
if (player.getClan() != null && player.getClan().hasCastle())
{
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_33_dusk_no.htm");
break;
}
}
else if (cabal == SevenSigns.CABAL_DAWN && EventsConfig.ALT_GAME_CASTLE_DAWN) // dawn
{
// clans without castle need to pay participation fee
if (player.getClan() == null || !player.getClan().hasCastle())
{
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_33_dawn_fee.htm");
break;
}
}
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, val, "dawn", false);
else
showChatWindow(player, val, "dusk", false);
break;
case 34: // Pay the participation fee request
L2ItemInstance adena = player.getInventory().getItemByItemId(PcInventory.ADENA_ID); // adena
L2ItemInstance certif = player.getInventory().getItemByItemId(6388); // Lord of the Manor's Certificate of
// Approval
boolean fee = true;
if (player.getClassId().level() < 2 || (adena != null && adena.getCount() >= SevenSigns.ADENA_JOIN_DAWN_COST) || (certif != null && certif.getCount() >= 1))
fee = false;
if (fee)
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_33_dawn_no.htm");
else
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_33_dawn.htm");
break;
case 3: // Join Cabal Intro 1
case 8: // Festival of Darkness Intro - SevenSigns x [0]1
showChatWindow(player, val, SevenSigns.getCabalShortName(cabal), false);
break;
case 4: // Join a Cabal - SevenSigns 4 [0]1 x
int newSeal = Integer.parseInt(command.substring(15));
if (player.getClassId().level() >= 2)
{
if (cabal == SevenSigns.CABAL_DUSK && EventsConfig.ALT_GAME_CASTLE_DUSK)
{
if (player.getClan() != null && player.getClan().hasCastle()) // even if in htmls is said that ally
// can have castle too, but its not
{
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_33_dusk_no.htm");
return;
}
}
/*
* If the player is trying to join the Lords of Dawn, check if they are carrying a Lord's certificate. If not then try to
* take the required amount of adena instead.
*/
if (EventsConfig.ALT_GAME_CASTLE_DAWN && cabal == SevenSigns.CABAL_DAWN)
{
boolean allowJoinDawn = false;
if (player.getClan() != null && player.getClan().hasCastle()) // castle owner don't need to pay
// anything
allowJoinDawn = true;
else if (player.destroyItemByItemId("SevenSigns", SevenSigns.CERTIFICATE_OF_APPROVAL_ID, 1, this, true))
allowJoinDawn = true;
else if (player.reduceAdena("SevenSigns", SevenSigns.ADENA_JOIN_DAWN_COST, this, true))
allowJoinDawn = true;
if (!allowJoinDawn)
{
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_33_dawn_fee.htm");
return;
}
}
}
SevenSigns.getInstance().setPlayerInfo(player.getObjectId(), cabal, newSeal);
if (cabal == SevenSigns.CABAL_DAWN)
player.sendPacket(SystemMessageId.SEVENSIGNS_PARTECIPATION_DAWN); // Joined Dawn
else
player.sendPacket(SystemMessageId.SEVENSIGNS_PARTECIPATION_DUSK); // Joined Dusk
// Show a confirmation message to the user, indicating which seal they chose.
switch (newSeal)
{
case SevenSigns.SEAL_AVARICE:
player.sendPacket(SystemMessageId.FIGHT_FOR_AVARICE);
break;
case SevenSigns.SEAL_GNOSIS:
player.sendPacket(SystemMessageId.FIGHT_FOR_GNOSIS);
break;
case SevenSigns.SEAL_STRIFE:
player.sendPacket(SystemMessageId.FIGHT_FOR_STRIFE);
break;
}
showChatWindow(player, 4, SevenSigns.getCabalShortName(cabal), false);
break;
case 5:
if (this instanceof L2DawnPriestInstance)
{
if (SevenSigns.getInstance().getPlayerCabal(player.getObjectId()) == SevenSigns.CABAL_NULL)
showChatWindow(player, val, "dawn_no", false);
else
showChatWindow(player, val, "dawn", false);
}
else
{
if (SevenSigns.getInstance().getPlayerCabal(player.getObjectId()) == SevenSigns.CABAL_NULL)
showChatWindow(player, val, "dusk_no", false);
else
showChatWindow(player, val, "dusk", false);
}
break;
case 21:
int contribStoneId = Integer.parseInt(command.substring(14, 18));
L2ItemInstance contribBlueStones = player.getInventory().getItemByItemId(SevenSigns.SEAL_STONE_BLUE_ID);
L2ItemInstance contribGreenStones = player.getInventory().getItemByItemId(SevenSigns.SEAL_STONE_GREEN_ID);
L2ItemInstance contribRedStones = player.getInventory().getItemByItemId(SevenSigns.SEAL_STONE_RED_ID);
int contribBlueStoneCount = contribBlueStones == null ? 0 : contribBlueStones.getCount();
int contribGreenStoneCount = contribGreenStones == null ? 0 : contribGreenStones.getCount();
int contribRedStoneCount = contribRedStones == null ? 0 : contribRedStones.getCount();
int score = SevenSigns.getInstance().getPlayerContribScore(player.getObjectId());
int contributionCount = 0;
boolean contribStonesFound = false;
int redContrib = 0;
int greenContrib = 0;
int blueContrib = 0;
try
{
contributionCount = Integer.parseInt(command.substring(19).trim());
}
catch (Exception NumberFormatException)
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 6, "dawn_failure", false);
else
showChatWindow(player, 6, "dusk_failure", false);
break;
}
switch (contribStoneId)
{
case SevenSigns.SEAL_STONE_BLUE_ID:
blueContrib = (EventsConfig.ALT_MAXIMUM_PLAYER_CONTRIB - score) / SevenSigns.BLUE_CONTRIB_POINTS;
if (blueContrib > contribBlueStoneCount)
blueContrib = contributionCount;
break;
case SevenSigns.SEAL_STONE_GREEN_ID:
greenContrib = (EventsConfig.ALT_MAXIMUM_PLAYER_CONTRIB - score) / SevenSigns.GREEN_CONTRIB_POINTS;
if (greenContrib > contribGreenStoneCount)
greenContrib = contributionCount;
break;
case SevenSigns.SEAL_STONE_RED_ID:
redContrib = (EventsConfig.ALT_MAXIMUM_PLAYER_CONTRIB - score) / SevenSigns.RED_CONTRIB_POINTS;
if (redContrib > contribRedStoneCount)
redContrib = contributionCount;
break;
}
if (redContrib > 0)
{
if (player.destroyItemByItemId("SevenSigns", SevenSigns.SEAL_STONE_RED_ID, redContrib, this, false))
{
contribStonesFound = true;
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
msg.addItemName(SevenSigns.SEAL_STONE_RED_ID);
msg.addItemNumber(redContrib);
player.sendPacket(msg);
}
}
if (greenContrib > 0)
{
if (player.destroyItemByItemId("SevenSigns", SevenSigns.SEAL_STONE_GREEN_ID, greenContrib, this, false))
{
contribStonesFound = true;
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
msg.addItemName(SevenSigns.SEAL_STONE_GREEN_ID);
msg.addItemNumber(greenContrib);
player.sendPacket(msg);
}
}
if (blueContrib > 0)
{
if (player.destroyItemByItemId("SevenSigns", SevenSigns.SEAL_STONE_BLUE_ID, blueContrib, this, false))
{
contribStonesFound = true;
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
msg.addItemName(SevenSigns.SEAL_STONE_BLUE_ID);
msg.addItemNumber(blueContrib);
player.sendPacket(msg);
}
}
if (!contribStonesFound)
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 6, "dawn_low_stones", false);
else
showChatWindow(player, 6, "dusk_low_stones", false);
}
else
{
score = SevenSigns.getInstance().addPlayerStoneContrib(player.getObjectId(), blueContrib, greenContrib, redContrib);
sm = SystemMessage.getSystemMessage(SystemMessageId.CONTRIB_SCORE_INCREASED_S1);
sm.addItemNumber(score);
player.sendPacket(sm);
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 6, "dawn", false);
else
showChatWindow(player, 6, "dusk", false);
}
break;
case 6: // Contribute Seal Stones - SevenSigns 6 x
stoneType = Integer.parseInt(command.substring(13));
L2ItemInstance blueStones = player.getInventory().getItemByItemId(SevenSigns.SEAL_STONE_BLUE_ID);
L2ItemInstance greenStones = player.getInventory().getItemByItemId(SevenSigns.SEAL_STONE_GREEN_ID);
L2ItemInstance redStones = player.getInventory().getItemByItemId(SevenSigns.SEAL_STONE_RED_ID);
int blueStoneCount = blueStones == null ? 0 : blueStones.getCount();
int greenStoneCount = greenStones == null ? 0 : greenStones.getCount();
int redStoneCount = redStones == null ? 0 : redStones.getCount();
int contribScore = SevenSigns.getInstance().getPlayerContribScore(player.getObjectId());
boolean stonesFound = false;
if (contribScore == EventsConfig.ALT_MAXIMUM_PLAYER_CONTRIB)
{
player.sendPacket(SystemMessageId.CONTRIB_SCORE_EXCEEDED);
}
else
{
int redContribCount = 0;
int greenContribCount = 0;
int blueContribCount = 0;
String contribStoneColor = null;
String stoneColorContr = null;
int stoneCountContr = 0;
int stoneIdContr = 0;
switch (stoneType)
{
case 1:
contribStoneColor = "Blue";
stoneColorContr = "blue";
stoneIdContr = SevenSigns.SEAL_STONE_BLUE_ID;
stoneCountContr = blueStoneCount;
break;
case 2:
contribStoneColor = "Green";
stoneColorContr = "green";
stoneIdContr = SevenSigns.SEAL_STONE_GREEN_ID;
stoneCountContr = greenStoneCount;
break;
case 3:
contribStoneColor = "Red";
stoneColorContr = "red";
stoneIdContr = SevenSigns.SEAL_STONE_RED_ID;
stoneCountContr = redStoneCount;
break;
case 4:
int tempContribScore = contribScore;
redContribCount = (EventsConfig.ALT_MAXIMUM_PLAYER_CONTRIB - tempContribScore) / SevenSigns.RED_CONTRIB_POINTS;
if (redContribCount > redStoneCount)
redContribCount = redStoneCount;
tempContribScore += redContribCount * SevenSigns.RED_CONTRIB_POINTS;
greenContribCount = (EventsConfig.ALT_MAXIMUM_PLAYER_CONTRIB - tempContribScore) / SevenSigns.GREEN_CONTRIB_POINTS;
if (greenContribCount > greenStoneCount)
greenContribCount = greenStoneCount;
tempContribScore += greenContribCount * SevenSigns.GREEN_CONTRIB_POINTS;
blueContribCount = (EventsConfig.ALT_MAXIMUM_PLAYER_CONTRIB - tempContribScore) / SevenSigns.BLUE_CONTRIB_POINTS;
if (blueContribCount > blueStoneCount)
blueContribCount = blueStoneCount;
if (redContribCount > 0)
{
if (player.destroyItemByItemId("SevenSigns", SevenSigns.SEAL_STONE_RED_ID, redContribCount, this, false))
{
stonesFound = true;
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
msg.addItemName(SevenSigns.SEAL_STONE_RED_ID);
msg.addItemNumber(redContribCount);
player.sendPacket(msg);
}
}
if (greenContribCount > 0)
{
if (player.destroyItemByItemId("SevenSigns", SevenSigns.SEAL_STONE_GREEN_ID, greenContribCount, this, false))
{
stonesFound = true;
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
msg.addItemName(SevenSigns.SEAL_STONE_GREEN_ID);
msg.addItemNumber(greenContribCount);
player.sendPacket(msg);
}
}
if (blueContribCount > 0)
{
if (player.destroyItemByItemId("SevenSigns", SevenSigns.SEAL_STONE_BLUE_ID, blueContribCount, this, false))
{
stonesFound = true;
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
msg.addItemName(SevenSigns.SEAL_STONE_BLUE_ID);
msg.addItemNumber(blueContribCount);
player.sendPacket(msg);
}
}
if (!stonesFound)
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, val, "dawn_no_stones", false);
else
showChatWindow(player, val, "dusk_no_stones", false);
}
else
{
contribScore = SevenSigns.getInstance().addPlayerStoneContrib(player.getObjectId(), blueContribCount, greenContribCount, redContribCount);
sm = SystemMessage.getSystemMessage(SystemMessageId.CONTRIB_SCORE_INCREASED_S1);
sm.addItemNumber(contribScore);
player.sendPacket(sm);
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 6, "dawn", false);
else
showChatWindow(player, 6, "dusk", false);
}
return;
}
if (this instanceof L2DawnPriestInstance)
path = SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_6_dawn_contribute.htm";
else
path = SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_6_dusk_contribute.htm";
String contentContr = HtmCache.getInstance().getHtm(path);
if (contentContr != null)
{
contentContr = contentContr.replaceAll("%contribStoneColor%", contribStoneColor);
contentContr = contentContr.replaceAll("%stoneColor%", stoneColorContr);
contentContr = contentContr.replaceAll("%stoneCount%", String.valueOf(stoneCountContr));
contentContr = contentContr.replaceAll("%stoneItemId%", String.valueOf(stoneIdContr));
contentContr = contentContr.replaceAll("%objectId%", String.valueOf(getObjectId()));
NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
html.setHtml(contentContr);
player.sendPacket(html);
}
else
_log.warn("Problem with HTML text " + path);
}
break;
case 7: // Exchange Ancient Adena for Adena - SevenSigns 7 xxxxxxx
int ancientAdenaConvert = 0;
try
{
ancientAdenaConvert = Integer.parseInt(command.substring(13).trim());
}
catch (NumberFormatException e)
{
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "blkmrkt_3.htm");
break;
}
catch (StringIndexOutOfBoundsException e)
{
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "blkmrkt_3.htm");
break;
}
if (ancientAdenaConvert < 1)
{
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "blkmrkt_3.htm");
break;
}
if (ancientAdenaAmount < ancientAdenaConvert)
{
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "blkmrkt_4.htm");
break;
}
player.reduceAncientAdena("SevenSigns", ancientAdenaConvert, this, true);
player.addAdena("SevenSigns", ancientAdenaConvert, this, true);
showChatWindow(player, SevenSigns.SEVEN_SIGNS_HTML_PATH + "blkmrkt_5.htm");
break;
case 9: // Receive Contribution Rewards
int playerCabal = SevenSigns.getInstance().getPlayerCabal(player.getObjectId());
int winningCabal = SevenSigns.getInstance().getCabalHighestScore();
if (SevenSigns.getInstance().isSealValidationPeriod() && playerCabal == winningCabal)
{
int ancientAdenaReward = SevenSigns.getInstance().getAncientAdenaReward(player.getObjectId(), true);
if (ancientAdenaReward < 3)
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 9, "dawn_b", false);
else
showChatWindow(player, 9, "dusk_b", false);
break;
}
player.addAncientAdena("SevenSigns", ancientAdenaReward, this, true);
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 9, "dawn_a", false);
else
showChatWindow(player, 9, "dusk_a", false);
}
break;
case 11: // Teleport to Hunting Grounds
try
{
String portInfo = command.substring(14).trim();
StringTokenizer st = new StringTokenizer(portInfo);
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int z = Integer.parseInt(st.nextToken());
int ancientAdenaCost = Integer.parseInt(st.nextToken());
if (ancientAdenaCost > 0)
{
if (!player.reduceAncientAdena("SevenSigns", ancientAdenaCost, this, true))
break;
}
player.teleToLocation(x, y, z);
}
catch (Exception e)
{
_log.warn("SevenSigns: Error occurred while teleporting player: " + e.getMessage(), e);
}
break;
case 16:
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, val, "dawn", false);
else
showChatWindow(player, val, "dusk", false);
break;
case 17: // Exchange Seal Stones for Ancient Adena (Type Choice) - SevenSigns 17 x
stoneType = Integer.parseInt(command.substring(14));
int stoneId = 0;
int stoneCount = 0;
int stoneValue = 0;
String stoneColor = null;
switch (stoneType)
{
case 1:
stoneColor = "blue";
stoneId = SevenSigns.SEAL_STONE_BLUE_ID;
stoneValue = SevenSigns.SEAL_STONE_BLUE_VALUE;
break;
case 2:
stoneColor = "green";
stoneId = SevenSigns.SEAL_STONE_GREEN_ID;
stoneValue = SevenSigns.SEAL_STONE_GREEN_VALUE;
break;
case 3:
stoneColor = "red";
stoneId = SevenSigns.SEAL_STONE_RED_ID;
stoneValue = SevenSigns.SEAL_STONE_RED_VALUE;
break;
case 4:
L2ItemInstance blueStonesAll = player.getInventory().getItemByItemId(SevenSigns.SEAL_STONE_BLUE_ID);
L2ItemInstance greenStonesAll = player.getInventory().getItemByItemId(SevenSigns.SEAL_STONE_GREEN_ID);
L2ItemInstance redStonesAll = player.getInventory().getItemByItemId(SevenSigns.SEAL_STONE_RED_ID);
int blueStoneCountAll = blueStonesAll == null ? 0 : blueStonesAll.getCount();
int greenStoneCountAll = greenStonesAll == null ? 0 : greenStonesAll.getCount();
int redStoneCountAll = redStonesAll == null ? 0 : redStonesAll.getCount();
int ancientAdenaRewardAll = 0;
ancientAdenaRewardAll = SevenSigns.calcAncientAdenaReward(blueStoneCountAll, greenStoneCountAll, redStoneCountAll);
if (ancientAdenaRewardAll == 0)
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 18, "dawn_no_stones", false);
else
showChatWindow(player, 18, "dusk_no_stones", false);
return;
}
if (blueStoneCountAll > 0)
player.destroyItemByItemId("SevenSigns", SevenSigns.SEAL_STONE_BLUE_ID, blueStoneCountAll, this, true);
if (greenStoneCountAll > 0)
player.destroyItemByItemId("SevenSigns", SevenSigns.SEAL_STONE_GREEN_ID, greenStoneCountAll, this, true);
if (redStoneCountAll > 0)
player.destroyItemByItemId("SevenSigns", SevenSigns.SEAL_STONE_RED_ID, redStoneCountAll, this, true);
player.addAncientAdena("SevenSigns", ancientAdenaRewardAll, this, true);
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 18, "dawn", false);
else
showChatWindow(player, 18, "dusk", false);
return;
}
L2ItemInstance stoneInstance = player.getInventory().getItemByItemId(stoneId);
if (stoneInstance != null)
stoneCount = stoneInstance.getCount();
if (this instanceof L2DawnPriestInstance)
path = SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_17_dawn.htm";
else
path = SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_17_dusk.htm";
String content = HtmCache.getInstance().getHtm(path);
if (content != null)
{
content = content.replaceAll("%stoneColor%", stoneColor);
content = content.replaceAll("%stoneValue%", String.valueOf(stoneValue));
content = content.replaceAll("%stoneCount%", String.valueOf(stoneCount));
content = content.replaceAll("%stoneItemId%", String.valueOf(stoneId));
content = content.replaceAll("%objectId%", String.valueOf(getObjectId()));
NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
html.setHtml(content);
player.sendPacket(html);
}
else
_log.warn("Problem with HTML text " + SevenSigns.SEVEN_SIGNS_HTML_PATH + "signs_17.htm: " + path);
break;
case 18: // Exchange Seal Stones for Ancient Adena - SevenSigns 18 xxxx xxxxxx
int convertStoneId = Integer.parseInt(command.substring(14, 18));
int convertCount = 0;
try
{
convertCount = Integer.parseInt(command.substring(19).trim());
}
catch (Exception NumberFormatException)
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 18, "dawn_failed", false);
else
showChatWindow(player, 18, "dusk_failed", false);
break;
}
L2ItemInstance convertItem = player.getInventory().getItemByItemId(convertStoneId);
if (convertItem != null)
{
int ancientAdenaReward = 0;
int totalCount = convertItem.getCount();
if (convertCount <= totalCount && convertCount > 0)
{
switch (convertStoneId)
{
case SevenSigns.SEAL_STONE_BLUE_ID:
ancientAdenaReward = SevenSigns.calcAncientAdenaReward(convertCount, 0, 0);
break;
case SevenSigns.SEAL_STONE_GREEN_ID:
ancientAdenaReward = SevenSigns.calcAncientAdenaReward(0, convertCount, 0);
break;
case SevenSigns.SEAL_STONE_RED_ID:
ancientAdenaReward = SevenSigns.calcAncientAdenaReward(0, 0, convertCount);
break;
}
if (player.destroyItemByItemId("SevenSigns", convertStoneId, convertCount, this, true))
{
player.addAncientAdena("SevenSigns", ancientAdenaReward, this, true);
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 18, "dawn", false);
else
showChatWindow(player, 18, "dusk", false);
}
}
else
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 18, "dawn_low_stones", false);
else
showChatWindow(player, 18, "dusk_low_stones", false);
break;
}
}
else
{
if (this instanceof L2DawnPriestInstance)
showChatWindow(player, 18, "dawn_no_stones", false);
else
showChatWindow(player, 18, "dusk_no_stones", false);
break;
}
break;
case 19: // Seal Information (for when joining a cabal)
int chosenSeal = Integer.parseInt(command.substring(16));
String fileSuffix = SevenSigns.getSealName(chosenSeal, true) + "_" + SevenSigns.getCabalShortName(cabal);
showChatWindow(player, val, fileSuffix, false);
break;
case 20: // Seal Status (for when joining a cabal)
TextBuilder contentBuffer = new TextBuilder();
if (this instanceof L2DawnPriestInstance)
contentBuffer.append("<html><body>Priest of Dawn:<br><font color=\"LEVEL\">[ Seal Status ]</font><br>");
else
contentBuffer.append("<html><body>Dusk Priestess:<br><font color=\"LEVEL\">[ Status of the Seals ]</font><br>");
for (int i = 1; i < 4; i++)
{
int sealOwner = SevenSigns.getInstance().getSealOwner(i);
if (sealOwner != SevenSigns.CABAL_NULL)
contentBuffer.append("[").append(SevenSigns.getSealName(i, false)).append(": ").append(SevenSigns.getCabalName(sealOwner)).append("]<br>");
else
contentBuffer.append("[").append(SevenSigns.getSealName(i, false)).append(": Nothingness]<br>");
}
contentBuffer.append("<a action=\"bypass -h npc_").append(getObjectId()).append("_Chat 0\">Go back.</a></body></html>");
NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
html.setHtml(contentBuffer.toString());
player.sendPacket(html);
break;
default:
showChatWindow(player, val, null, false);
break;
}
}
else
super.onBypassFeedback(player, command);
}
@Override
public void showChatWindow(L2PcInstance player, int val)
{
final int npcId = getTemplate().getNpcId();
String filename = SevenSigns.SEVEN_SIGNS_HTML_PATH;
final int playerCabal = SevenSigns.getInstance().getPlayerCabal(player.getObjectId());
final int compWinner = SevenSigns.getInstance().getCabalHighestScore();
switch (npcId)
{
case 31092: // Black Marketeer of Mammon
filename += "blkmrkt_1.htm";
break;
case 31113: // Merchant of Mammon
final int sealAvariceOwner = SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_AVARICE);
switch (compWinner)
{
case SevenSigns.CABAL_DAWN:
if (playerCabal != compWinner || playerCabal != sealAvariceOwner)
{
player.sendPacket(SystemMessageId.CAN_BE_USED_BY_DAWN);
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
break;
case SevenSigns.CABAL_DUSK:
if (playerCabal != compWinner || playerCabal != sealAvariceOwner)
{
player.sendPacket(SystemMessageId.CAN_BE_USED_BY_DUSK);
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
break;
default:
player.sendPacket(SystemMessageId.QUEST_EVENT_PERIOD);
return;
}
filename += "mammmerch_1.htm";
break;
case 31126: // Blacksmith of Mammon
final int sealGnosisOwner = SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_GNOSIS);
switch (compWinner)
{
case SevenSigns.CABAL_DAWN:
if (playerCabal != compWinner || playerCabal != sealGnosisOwner)
{
player.sendPacket(SystemMessageId.CAN_BE_USED_BY_DAWN);
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
break;
case SevenSigns.CABAL_DUSK:
if (playerCabal != compWinner || playerCabal != sealGnosisOwner)
{
player.sendPacket(SystemMessageId.CAN_BE_USED_BY_DUSK);
player.sendPacket(ActionFailed.STATIC_PACKET);
return;
}
break;
}
filename += "mammblack_1.htm";
break;
default:
// Get the text of the selected HTML file in function of the npcId and of the page number
filename = (getHtmlPath(npcId, val));
break;
}
// Send a Server->Client NpcHtmlMessage containing the text of the L2Npc to the L2PcInstance
NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
html.setFile(filename, player);
html.replace("%objectId%", String.valueOf(getObjectId()));
player.sendPacket(html);
// Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
player.sendPacket(ActionFailed.STATIC_PACKET);
}
private void showChatWindow(L2PcInstance player, int val, String suffix, boolean isDescription)
{
String filename = SevenSigns.SEVEN_SIGNS_HTML_PATH;
filename += (isDescription) ? "desc_" + val : "signs_" + val;
filename += (suffix != null) ? "_" + suffix + ".htm" : ".htm";
showChatWindow(player, filename);
}
}