L2JMobius

C6 How to call custom_ for npc command?

EtheReal · 3 · 2794

Offline EtheReal

  • Black Sheep
  • Vassal
  • *
    • Posts: 6
As title say, anyone know how can i call command?

I try to adapt CustomBypassHandler from L2jFrozen and set in RequestBypassToServer but nothing...

Code: [Select]

                        else if (_command.startsWith("custom_"))
{
CustomBypassHandler.getInstance().handleBypass(player, _command);
}
Anyone have any idea?


Online Mobius

  • Distinguished King
  • *****
    • Posts: 16267
If it is related to an NPC see RequestBypassToServer clientpacket.
If it is a player command see org.l2jmobius.gameserver.handler.voicedcommandhandlers


Offline EtheReal

  • Black Sheep
  • Vassal
  • *
    • Posts: 6
If it is related to an NPC see RequestBypassToServer clientpacket.
If it is a player command see org.l2jmobius.gameserver.handler.voicedcommandhandlers
Yes, it is related to a custom NPC to change title color, name, and clan services..

My Shop.java

Code: [Select]
/*
 * This file is part of the L2J Mobius project.
 *
 * 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 engine.Shop;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.StringTokenizer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.gameserver.cache.HtmCache;
import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.datatables.SkillTable;
import org.l2jmobius.gameserver.datatables.sql.SkillTreeTable;
import org.l2jmobius.gameserver.handler.IBBSHandler;
import org.l2jmobius.gameserver.handler.ICustomByPassHandler;
import org.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import org.l2jmobius.gameserver.model.PledgeSkillLearn;
import org.l2jmobius.gameserver.model.Skill;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.entity.olympiad.Olympiad;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.ActionFailed;
import org.l2jmobius.gameserver.network.serverpackets.AquireSkillList;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
import org.l2jmobius.gameserver.network.serverpackets.PlaySound;
import org.l2jmobius.gameserver.network.serverpackets.PledgeSkillList;
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import org.l2jmobius.gameserver.network.serverpackets.UserInfo;

public class Shop implements IVoicedCommandHandler, ICustomByPassHandler, IBBSHandler
{
private static Logger LOG = LoggerFactory.getLogger(Shop.class);

private static String[] _CMD =
{
"gmshop"
};
private static final String GMSHOP_COMMAND = "sa";

@Override
public String[] getBBSCommands()
{
return _CMD;
}

@Override
public String[] getByPassCommands()
{
return _CMD;
}

@Override
public void handleCommand(String command, PlayerInstance player, String parameters)
{
if (player == null)
{
return;
}

new StringTokenizer(parameters, " ");

final int currency = Config.CUSTOM_ITEM_ID;
final ItemInstance item = player.getInventory().getItemByItemId(currency);
String currencyName = getItemNameById(currency);

if ((parameters == null) || (parameters.length() == 0))
{
return;
}

if (!checkAllowed(player))
{
return;
}

if (parameters.startsWith("settitlecolor"))
{
if ((item == null) || (item.getCount() < Config.PREM_TITLE_COLOR))
{
player.sendMessage("You don't have enough " + currencyName + ".");
player.sendPacket(new ExShowScreenMessage("You don't have enough " + currencyName + ".", 1000));
player.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
return;
}

player.destroyItem("Consume", item.getObjectId(), Config.PREM_TITLE_COLOR, null, true);
player.getAppearance().setTitleColor(Integer.decode("0x" + parameters.substring(13).trim()));
player.sendMessage("Your title color has been changed.");
player.broadcastUserInfo();
}
else if (parameters.startsWith("setcolor"))
{
if ((item == null) || (item.getCount() < Config.PREM_NAME_COLOR))
{
player.sendMessage("You don't have enough " + currencyName + ".");
player.sendPacket(new ExShowScreenMessage("You don't have enough " + currencyName + ".", 1000));
player.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
return;
}

player.destroyItem("Consume", item.getObjectId(), Config.PREM_NAME_COLOR, null, true);
player.getAppearance().setNameColor(Integer.decode("0x" + parameters.substring(8).trim()));
player.sendMessage("Your name color has been changed.");
player.broadcastUserInfo();
}
else if (parameters.startsWith("addclanskills"))
{
if (player.getClan() == null)
{
player.sendMessage("You don't have clan.");
return;
}
int level = player.getClan().getLevel();
if (level == 4)
{
player.sendMessage("Your clan must be level: 8.");
return;
}

if ((item == null) || (item.getCount() < Config.PREM_CLAN_SKILLS))
{
player.sendMessage("You don't have enough " + currencyName + ".");
player.sendPacket(new ExShowScreenMessage("You don't have enough " + currencyName + ".", 1000));
player.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
return;
}

player.destroyItem("Consume", item.getObjectId(), Config.PREM_CLAN_SKILLS, null, true);

addskill(player, 370, 3);
addskill(player, 371, 3);
addskill(player, 372, 3);
addskill(player, 373, 3);
addskill(player, 374, 3);
addskill(player, 375, 3);
addskill(player, 376, 3);
addskill(player, 377, 3);
addskill(player, 378, 3);
addskill(player, 379, 3);
addskill(player, 380, 3);
addskill(player, 381, 3);
addskill(player, 382, 3);
addskill(player, 383, 3);
addskill(player, 384, 3);
addskill(player, 385, 3);
addskill(player, 386, 3);
addskill(player, 387, 3);
addskill(player, 388, 3);
addskill(player, 389, 3);
addskill(player, 390, 3);
addskill(player, 391, 1);
player.sendMessage("All clan skills have been added.");

player.getInventory().reloadEquippedItems();
}
else if (parameters.startsWith("setclanlevel"))
{
if (player.getClan() == null)
{
player.sendMessage("You don't have clan.");
return;
}

int level = player.getClan().getLevel();
if (level >= 8)
{
player.sendMessage("Your clan is already level: 8.");
return;
}

level = Integer.parseInt(parameters.substring(12).trim());

if ((item == null) || (item.getCount() < Config.PREM_CLAN_LEVEL))
{
player.sendMessage("You don't have enough " + currencyName + ".");
player.sendPacket(new ExShowScreenMessage("You don't have enough " + currencyName + ".", 1000));
player.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
return;
}

player.destroyItem("Consume", item.getObjectId(), Config.PREM_CLAN_LEVEL, null, true);
if ((level >= 0) && (level < 9))
{
player.getClan().changeLevel(level);
player.sendMessage("Increased level up to " + level + " for the clan: " + player.getClan().getName() + "");
return;
}
}
else if (parameters.startsWith("rep"))
{
if (player.getClan() == null)
{
player.sendMessage("You don't have clan.");
return;
}

int points = player.getClan().getReputationScore();

if (points > 10000)
{
return;
}

points = Integer.parseInt(parameters.substring(3).trim());

if ((item == null) || (item.getCount() < Config.PREM_CLAN_REP))
{
player.sendMessage("You don't have enough " + currencyName + ".");
player.sendPacket(new ExShowScreenMessage("You don't have enough " + currencyName + ".", 1000));
player.sendPacket(new PlaySound("ItemSound3.sys_impossible"));
return;
}

player.destroyItem("Consume", item.getObjectId(), Config.PREM_CLAN_REP, null, true);
Clan clan = player.getClan();

if (clan.getLevel() < 5)
{
player.sendMessage("Your clan level must be higher than 4.");
return;
}

clan.setReputationScore(clan.getReputationScore() + points, true);
player.sendMessage("You " + (points > 0 ? "add " : "remove ") + Math.abs(points) + " points " + (points > 0 ? "to " : "from ") + clan.getName() + "'s reputation. Current scores are " + clan.getReputationScore());
return;
}
else if (command.equals("setPremiumWeek"))
{
if ((item == null) || (player.getInventory().getItemByItemId(currency).getCount() < Config.PREM_WEEK))
{
player.sendMessage("You don't have enough donate coins.");
return;
}

if (player.getPremiumService() == 1)
{
player.sendMessage("You are already a Premium!");
}
else
{
player.destroyItem("Consume", item.getObjectId(), Config.PREM_WEEK, null, true);
player.setPremiumService(1);
updateDatabasePremium(player, 7 * 24L * 60L * 60L * 1000L);
player.sendMessage("Congratulation! You are The Premium account now.");
player.sendPacket(new ExShowScreenMessage("Congratulation! You are The Premium account now.", 4000));
PlaySound playSound = new PlaySound("ItemSound.quest_fanfare_1");
player.sendPacket(playSound);
if (Config.PREMIUM_NAME_COLOR_ENABLED && (player.getPremiumService() == 1))
{
player.getAppearance().setTitleColor(Config.PREMIUM_TITLE_COLOR);
}
player.sendPacket(new UserInfo(player));
player.broadcastUserInfo();
}
}
else if (command.equals("setPremiumMonth"))
{
if ((item == null) || (player.getInventory().getItemByItemId(currency).getCount() < Config.PREM_MONTH))
{
player.sendMessage("You don't have enough donate coins.");
return;
}

if (player.getPremiumService() == 1)
{
player.sendMessage("You are already a Premium!");
}
else
{
player.destroyItem("Consume", item.getObjectId(), Config.PREM_MONTH, null, true);
player.setPremiumService(1);
updateDatabasePremium(player, 30 * 24L * 60L * 60L * 1000L);
player.sendMessage("Congratulation! You are The Premium account now.");
player.sendPacket(new ExShowScreenMessage("Congratulation! You are The Premium account now.", 4000));
PlaySound playSound = new PlaySound("ItemSound.quest_fanfare_1");
player.sendPacket(playSound);
if (Config.PREMIUM_NAME_COLOR_ENABLED && (player.getPremiumService() == 1))
{
player.getAppearance().setTitleColor(Config.PREMIUM_TITLE_COLOR);
}
player.sendPacket(new UserInfo(player));
player.broadcastUserInfo();
}
}
else if (parameters.startsWith("Link"))
{
final String path = parameters.substring(5).trim();

if (path.indexOf("..") != -1)
{
return;
}

String filename = "/data/html/" + path;
NpcHtmlMessage html = new NpcHtmlMessage(player.getLastQuestNpcObject());
html.setFile(filename);
player.sendPacket(html);
}
}

/*
* (non-Javadoc)
* @see org.l2jmobius.gameserver.handler.IVoicedCommandHandler#useVoicedCommand(java.lang.String, org.l2jmobius.gameserver.model.actor.instance.PlayerInstance, java.lang.String)
*/
@Override
public boolean useVoicedCommand(String command, PlayerInstance activeChar, String params)
{
if (activeChar == null)
{
return false;
}

if (!checkAllowed(activeChar))
{
return false;
}

if (command.compareTo(GMSHOP_COMMAND) == 0)
{
String index = "";
if ((params != null) && (params.length() != 0))
{
if (!params.equals("0"))
{
index = "-" + params;
}
}

String text = HtmCache.getInstance().getHtm("data/html/engine/gmshop/gmshop" + index + ".htm");
NpcHtmlMessage htm = new NpcHtmlMessage(activeChar.getLastQuestNpcObject());
htm.setHtml(text);
activeChar.sendPacket(htm);
}

return false;
}

/**
* @param activeChar
* @return
*/
private boolean checkAllowed(PlayerInstance activeChar)
{
if (activeChar.isGM())
{
return true;
}

String msg = null;

if (activeChar.isSitting())
{
msg = "Shop is not available when you sit.";
}
else if (activeChar.isCursedWeaponEquiped())
{
msg = "Shop is not available with the cursed weapon.";
}
else if (activeChar.isIn7sDungeon())
{
msg = "Shop is not available in the catacomb and necropolis.";
}
else if (activeChar.isInOlympiadMode() || Olympiad.getInstance().isRegistered(activeChar) || Olympiad.getInstance().isRegisteredInComp(activeChar))
{
msg = "Shop is not available at Olympiad.";
}
else if ((activeChar._inEvent))
{
msg = "Shop is not available at the opening event.";
}

if (msg != null)
{
activeChar.sendMessage(msg);
}

return msg == null;
}

@Override
public String[] getVoicedCommandList()
{
return new String[]
{
GMSHOP_COMMAND
};
}

/**
* @param player
* @param timeforPremium
*/
private void updateDatabasePremium(PlayerInstance player, long timeforPremium)
{

try (Connection con = DatabaseFactory.getConnection())
{
if (player == null)
{
return;
}

final PreparedStatement statement = con.prepareStatement("REPLACE INTO account_premium (account_name, premium_service, enddate) VALUES (?,?,?)");
statement.setString(1, player.getAccountName());
statement.setInt(2, 1);
statement.setLong(3, timeforPremium == 0 ? 0 : System.currentTimeMillis() + timeforPremium);
statement.execute();
statement.close();
}
catch (Exception e)
{
LOG.warn("[MerchantInstance] Error: could not update database: ", e);
}
}

private void addskill(final PlayerInstance activeChar, final int id, final int level)
{
final Skill skill = SkillTable.getInstance().getInfo(id, level);
if (skill != null)
{
final SystemMessage sm = new SystemMessage(SystemMessageId.THE_CLAN_SKILL_S1_HAS_BEEN_ADDED);
sm.addSkillName(id);
activeChar.sendPacket(sm);
activeChar.getClan().broadcastToOnlineMembers(sm);
activeChar.getClan().addNewSkill(skill);
activeChar.getClan().broadcastToOnlineMembers(new PledgeSkillList(activeChar.getClan()));

for (final PlayerInstance member : activeChar.getClan().getOnlineMembers())
{
member.sendSkillList();
}
return;
}

activeChar.sendMessage("Error: there is no such skill.");
}

public void showPledgeSkillList(PlayerInstance player)
{
if (player.getClan() == null)
{
return;
}

PledgeSkillLearn[] skills = SkillTreeTable.getInstance().getAvailablePledgeSkills(player);
AquireSkillList asl = new AquireSkillList(AquireSkillList.skillType.Clan);
int counts = 0;

for (PledgeSkillLearn s : skills)
{
int cost = s.getRepCost();
counts++;

asl.addSkill(s.getId(), s.getLevel(), s.getLevel(), cost, 0);
}

if (counts == 0)
{
NpcHtmlMessage html = new NpcHtmlMessage(1);

if (player.getClan().getLevel() < 8)
{
SystemMessage sm = new SystemMessage(SystemMessageId.YOU_DO_NOT_HAVE_ANY_FURTHER_SKILLS_TO_LEARN_COME_BACK_WHEN_YOU_HAVE_REACHED_LEVEL_S1);
sm.addNumber(player.getClan().getLevel() + 1);
player.sendPacket(sm);
}
else
{
StringBuilder sb = new StringBuilder();
sb.append("<html><body>");
sb.append("You've learned all skills available for your Clan.<br>");
sb.append("</body></html>");
html.setHtml(sb.toString());
player.sendPacket(html);
}
}
else
{
player.sendPacket(asl);
}

player.sendPacket(ActionFailed.STATIC_PACKET);
}

public String getItemNameById(int itemId)
{
Item item = ItemTable.getInstance().getTemplate(itemId);

String itemName = "NoName";

if (itemId != 0)
{
itemName = item.getName();
}

return itemName;
}
}