Может кто-нить скинуть sql файл color table? Вроде этой таблицы не хватает?
package custom.servicem;
import java.io.File;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.HashMap;
import java.util.Map;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import ru.catssoftware.gameserver.network.SystemChatChannelId;
import ru.catssoftware.gameserver.network.serverpackets.CreatureSay;
import ru.catssoftware.gameserver.datatables.CharNameTable;
import ru.catssoftware.gameserver.datatables.ItemTable;
import ru.catssoftware.gameserver.handler.IVoicedCommandHandler;
import ru.catssoftware.gameserver.handler.VoicedCommandHandler;
import ru.catssoftware.gameserver.model.L2World;
import ru.catssoftware.gameserver.datatables.SkillTable;
import ru.catssoftware.gameserver.network.serverpackets.PledgeSkillList;
import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.model.quest.Quest;
import ru.catssoftware.gameserver.model.quest.QuestState;
import ru.catssoftware.gameserver.util.PcAction;
import ru.catssoftware.gameserver.model.itemcontainer.Inventory;
import ru.catssoftware.L2DatabaseFactory;
import ru.catssoftware.gameserver.model.L2ItemInstance;
public class ServiceManager extends Quest {
private static String qn = "ServiceManager";
private final static int ID_NPC_MANAGER = 50024; // ID Менеджера (NPC)
private static class Price {
private int []_itemId;
private int []_prices;
public Price(int []items, int[]count) {
_itemId = items;
_prices = count;
}
}
/**
* Настройки смены ника:
*/
int priceChangeNameId = 9303;
int priceChangeNameCount = 1250;
int priceChangeColorNameId = 9303;
int priceChangeColorNameCount = 1250;
int priceItemIdAugment = 9303;
int priceItemCountAugment = 2500;
int attributes;
int skill;
int level;
int ItemIdClan = 9303;
int ClanLevel6 = 500;
int ClanLevel7 = 1500;
int ClanLevel8 = 2000;
int ClanCrpPrice = 500;
int ClanCrpCount = 1000;
int ClanSkillsCount = 5000;
String str = "";
private static Map<Integer, Price> _premiumPrice = new HashMap<Integer, Price>();
private static Map<Integer, Price> _heroPrice = new HashMap<Integer, Price>();
private static Price _NoblesPrice = new Price(new int[] {9303}, new int [] {2000});
private String colorTable = "<html><body><br>Смена цвета: <font color=74bff5>"+priceChangeColorNameCount+" "+(ItemTable.getInstance().getItemName(priceChangeColorNameId))+"</font><br><center>";
public ServiceManager() {
super(-1,qn,"custom");
// ================= ЦЕНЫ НА ДВОРЯНСТВО ========
// РґРЅРё, new Price(new int[] {через , РР” предметов},new int[] {через , количество});
_premiumPrice.put(1,new Price(new int[] { 9303},new int[] {250}));
_premiumPrice.put(7,new Price(new int[] { 9303},new int[] {1500}));
_premiumPrice.put(14,new Price(new int[] { 9303},new int[] {3500}));
_premiumPrice.put(31,new Price(new int[] { 9303},new int[] {7750}));
// ================ ЦЕНЫ РќРђ ГЕРОРР—Рњ ===============
_heroPrice.put(1, new Price(new int[] { 9303},new int[] {1500}));
_heroPrice.put(7, new Price(new int[] {9303},new int[] {3500}));
_heroPrice.put(31, new Price(new int[] {9303},new int[] {7750}));
// ================ Список цветов ника и титула ===============
/* _colorPrice.put(1, new ColorId(new int[] {FFFF00},new int[] {голубым}));
_colorPrice.put(2, new ColorId(new int[] {000000},new int[] {черным}));
_colorPrice.put(3, new ColorId(new int[] {FF0000},new int[] {синим}));
_colorPrice.put(4, new ColorId(new int[] {FF00FF},new int[] {розовым}));
_colorPrice.put(5, new ColorId(new int[] {808080},new int[] {серым}));
_colorPrice.put(6, new ColorId(new int[] {008000},new int[] {зеленым}));
_colorPrice.put(7, new ColorId(new int[] {00FF00},new int[] {лаймовым}));
_colorPrice.put(8, new ColorId(new int[] {800000},new int[] {темно-синим}));
_colorPrice.put(9, new ColorId(new int[] {008080},new int[] {оливковым}));
_colorPrice.put(10, new ColorId(new int[] {800080},new int[] {пурпурным}));
_colorPrice.put(11, new ColorId(new int[] {808000},new int[] {сине-зелёным}));
_colorPrice.put(12, new ColorId(new int[] {FFFFFF},new int[] {белым}));
_colorPrice.put(13, new ColorId(new int[] {00FFFF},new int[] {желтым}));
_colorPrice.put(14, new ColorId(new int[] {C0C0C0},new int[] {серебряным}));
_colorPrice.put(15, new ColorId(new int[] {17A0D4},new int[] {золотым}));
*/
// Таблица цветов из colors.table
File f = new File(getScriptFile());
try {
LineNumberReader lnr = new LineNumberReader(new FileReader(f.getParent()+"/colors.table"));
String line;
while((line=lnr.readLine())!=null) {
String []colors = line.split("\t");
for(int i=0;i<colors.length;i++)
colorTable+="<a action=\"bypass -h Quest "+qn+" colorname "+colors+"\"><font color=\""+colors+"\">Выбрать цвет ника</font></a> - <a action=\"bypass -h Quest "+qn+" colortitle "+colors+"\"><font color=\""+colors+"\">Выбрать цвет титула</font></a><br>";
}
} catch(Exception e) {
System.out.println("Error reading "+f.getParent()+"/colors.table");
}
}
public void criticalTo(L2PcInstance player, String text)
{
CreatureSay cs = new CreatureSay(0, SystemChatChannelId.Chat_Critical_Announce, "", text);
player.sendPacket(cs);
}
private void updateAugment(L2PcInstance player, int attributes, int skill, int level) {
L2ItemInstance item = player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND) == null)
{
criticalTo(player, "Вы должны одеть оружие.");
}
else if (player.getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND).isAugmented())
{
criticalTo(player, "В оружие уже присутствует аугументация.");
}
else if (!checkMoney(player, priceItemIdAugment, priceItemCountAugment, true))
{
criticalTo(player, "У Вас недостаточно денег.");
}
else
{
try
{
Connection con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement stm = con.prepareStatement("REPLACE INTO item_attributes VALUES(?,?,?,?)");
stm.setInt(1, item.getObjectId());
stm.setInt(2, attributes*65536+1);
stm.setInt(3, skill);
stm.setInt(4, level);
stm.execute();
criticalTo(player, "Аугументация прошла успешно. Вам нужно перезайти.");
stm.close();
}
catch (SQLException e)
{
_log.error("error creating augment shop data table ", e);
}
}
}
private boolean checkMoney(L2PcInstance player, Price price) {
for(int i=0;i<price._itemId.length;i++) // Проверяем средства
if(player.getInventory().getItemByItemId(price._itemId)==null ||
player.getInventory().getItemByItemId(price._itemId).getCount() < price._prices) {
return false; // Нет денег? Сории
}
for(int i=0;i<price._itemId.length;i++) // Отнимаем средства у населения
if(!player.destroyItemByItemId(qn, price._itemId, price._prices, null, true)) {
return false;
}
return true;
}
private boolean checkMoney(L2PcInstance player, int itemId, int count, boolean destroy)
{
if(player.getInventory().getItemByItemId(itemId)==null || player.getInventory().getItemByItemId(itemId).getCount() < count)
return false; // Нет денег? Сории
if(destroy && !player.destroyItemByItemId(qn, itemId, count, null, true))
return false;
return true;
}
@Override
public String onAdvEvent(String event, L2NpcInstance npc, L2PcInstance player) {
String []args = event.split(" "); // Разбираем строку параметров
if(args[0].equals("premiumlist")) { // Формируем список доступных дней премиума
String html = "<html><body><br>Покупка премиума:<br><center>";
for(int days : _premiumPrice.keySet()) {
html+="<a action=\"bypass -h Quest "+qn+" premium "+days+"\">На "+days+" дней</a> -";
Price price = _premiumPrice.get(days);
for(int i=0;i<price._itemId.length;i++) { // Формируем список стоимости
if(i!=0) // Добавляем ,
html+=",";
html+=price._prices+" "+ItemTable.getInstance().getTemplate(price._itemId).getName();
}
}
html+="</center></body></html>";
return html;
}
else if(args[0].equals("herolist")) { // Список достпуного геройства, аналогично премиуму
String html = "<html><body><br>Покупка Геройства:<br><center>";
for(int days : _heroPrice.keySet()) {
html+="<a action=\"bypass -h Quest "+qn+" hero "+days+"\">На "+days+" дней</a> -";
Price price = _heroPrice.get(days);
for(int i=0;i<price._itemId.length;i++) { // Формируем список стоимости
if(i!=0) // Добавляем ,
html+=",";
html+=price._prices+" "+ItemTable.getInstance().getTemplate(price._itemId).getName();
}
}
html+="</center></body></html>";
return html;
}
else if(args[0].equals("premium")) { // Выдаем премиум
if(player.getPremiumService()!=0) // Проверяем а не премимум ли чар?
return "already-premium.htm";
int numDays = Integer.parseInt(args[1]); // В Java массивы нумеруются с 0
Price price = _premiumPrice.get(numDays); // Ищем цену в списке цен
if(price==null) // Не нашли. Что-то тут не то...
return "invalid-param.htm";
if(!checkMoney(player,price)) // Проверяем деньги
return "no-money.htm";
PcAction.addPremiumServices(player, numDays, player.getAccountName()); // Выдаем премиум
// Показываем .premium меню
IVoicedCommandHandler premium = VoicedCommandHandler.getInstance().getVoicedCommandHandler("premium");
if(premium!=null)
premium.useVoicedCommand("premium", player, null);
else
return "success.htm";
}
else if(args[0].equals("noblese")) { // Дворянство
if(player.isNoble()) // Игрок уже нубл
return "already-noble.htm";
if(!checkMoney(player, _NoblesPrice)) // Проверяем Деньги
return "Nobless.htm";
player.setNoble(true); // Даем нубла
return "success.htm";
}
else if(args[0].equals("hero")) { // Геройство
if(player.isHero())
return "already-hero.htm";
int numDays = Integer.parseInt(args[1]);
Price price = _heroPrice.get(numDays); // Ищем цену в списке цен
if(price==null) // Не нашли. Что-то тут не то...
return "invalid-param.htm";
if(!checkMoney(player, price)) // Проверяем Деньги
return "no-money.htm";
PcAction.addHeroStatus(player, numDays); // Даем героя России.
return "success.htm";
}
else if(args[0].equals("colorname")) {
String colorsid = args[1];
if (!checkMoney(player, priceChangeColorNameId, priceChangeColorNameCount, true))
{
criticalTo(player, "У Вас не хватает денег!");
}
else
{
player.getAppearance().setNameColor(colorsid);
L2World.getInstance().removeFromAllPlayers(player);
player.store();
L2World.getInstance().addToAllPlayers(player);
player.broadcastUserInfo();
criticalTo(player, "Вы успешно сменили цвет ника!");
}
}
else if(args[0].equals("colortitle")) {
String colorsid = args[1];
if (!checkMoney(player, priceChangeColorNameId, priceChangeColorNameCount, true))
{
criticalTo(player, "У Вас не хватает денег!");
}
else
{
player.getAppearance().setTitleColor(colorsid);
L2World.getInstance().removeFromAllPlayers(player);
player.store();
L2World.getInstance().addToAllPlayers(player);
player.broadcastUserInfo();
criticalTo(player, "Вы успешно сменили цвет титула!");
}
}
else if(args[0].equals("augment")) {
updateAugment(player, Integer.parseInt(args[1].substring(0,5)), Integer.parseInt(args[1].substring(6,10)), Integer.parseInt(args[1].substring(11,13)));
}
else if(args[0].equals("clanlevel6")) {
if (!player.isClanLeader())
{
criticalTo(player, "Вы не глава клана. Только глава клана может это сделать.");
}
else if (player.getClan().getLevel() != 5)
{
criticalTo(player, "У Вас не верный уровень клана. Можете только при уровне клана 5");
}
else if (!checkMoney(player, ItemIdClan, ClanLevel6, true))
{
criticalTo(player, "У Вас не хватает денег!");
}
else
{
player.getClan().changeLevel(6);
L2World.getInstance().removeFromAllPlayers(player);
player.store();
L2World.getInstance().addToAllPlayers(player);
player.broadcastUserInfo();
criticalTo(player, "Вы успешно повысили левел клана до 6 уровня!");
}
}
else if(args[0].equals("clanlevel7")) {
if (!player.isClanLeader())
{
criticalTo(player, "Вы не глава клана. Только глава клана может это сделать.");
}
else if (player.getClan().getLevel() != 6)
{
criticalTo(player, "У Вас не верный уровень клана. Можете только при уровне клана 6");
}
else if (!checkMoney(player, ItemIdClan, ClanLevel7, true))
{
criticalTo(player, "У Вас не хватает денег!");
}
else
{
player.getClan().changeLevel(7);
L2World.getInstance().removeFromAllPlayers(player);
player.store();
L2World.getInstance().addToAllPlayers(player);
player.broadcastUserInfo();
criticalTo(player, "Вы успешно повысили левел клана до 7 уровня!");
}
}
else if(args[0].equals("clanlevel8")) {
if (!player.isClanLeader())
{
criticalTo(player, "Вы не глава клана. Только глава клана может это сделать.");
}
else if (player.getClan().getLevel() != 7)
{
criticalTo(player, "У Вас не верный уровень клана. Можете только при уровне клана 7");
}
else if (!checkMoney(player, ItemIdClan, ClanLevel8, true))
{
criticalTo(player, "У Вас не хватает денег!");
}
else
{
player.getClan().changeLevel(;
L2World.getInstance().removeFromAllPlayers(player);
player.store();
L2World.getInstance().addToAllPlayers(player);
player.broadcastUserInfo();
criticalTo(player, "Вы успешно повысили левел клана до 8 уровня!");
}
}
else if(args[0].equals("clanrepa")) {
if (!player.isClanLeader())
{
criticalTo(player, "Вы не являетесь лидером клана");
}
else if (!checkMoney(player, ItemIdClan, ClanCrpPrice, true))
{
criticalTo(player, "У Вас не хватает денег!");
}
else
{
player.getClan().setReputationScore(player.getClan().getReputationScore()+ClanCrpCount, true);
criticalTo(player, "Ваш клан получил "+ClanCrpCount+" очков репутации! Сделайте релог.");
}
}
else if(args[0].equals("clanskills")) {
if (!player.isClanLeader())
{
criticalTo(player, "Вы не являетесь лидером клана");
}
else if (player.getClan().getLevel() !=
{
criticalTo(player, "У Вас не верный уровень клана. Можете только при уровне клана 8");
}
else if (!checkMoney(player, ItemIdClan, ClanSkillsCount, true))
{
criticalTo(player, "У Вас не хватает денег!");
}
else
{
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(370,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(371,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(372,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(373,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(374,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(375,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(376,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(377,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(378,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(379,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(380,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(381,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(382,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(383,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(384,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(385,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(386,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(387,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(388,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(389,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(390,3));
player.getClan().addNewSkill(SkillTable.getInstance().getInfo(391,1));
criticalTo(player, "Ваш клан получил все Клановые Способности. Вам нужно перезайти.");
player.getClan().addSkillEffects(true);
player.getClan().broadcastToOnlineMembers(new PledgeSkillList(player.getClan()));
}
}
else if(args[0].startsWith("changeName"))
{
String htmltext;
if (args.length==1 || args.length>2)
{
htmltext = "<html><body>Смена имени: <font color=74bff5>"+priceChangeNameCount+" "+(ItemTable.getInstance().getItemName(priceChangeNameId))+"</font>";
htmltext += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><img src=\"L2UI.SquareBlank\" width=260 height=2><br1>";
htmltext += "<center>Введите желаемое имя:</center>";
htmltext += "<center><edit var=\"nick\" width=200 length=\"16\"><br></center>";
htmltext += "<center><button value=\"Изменить\" action=\"bypass -h Quest "+ qn +" changeName $nick\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"><br></center>";
htmltext += "<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32></center></body></html>";
return htmltext;
}
else if (args.length==2)
{
String name = args[1];
if (!name.matches("[!%:?()_+-@\\[\\]^]") || name.contains("ADM") || name.contains("GM") || name.contains(""))
{
criticalTo(player, "Ваш ник не соответствует правилам.");
}
else if (CharNameTable.getInstance().getByName(name) != null)
{
criticalTo(player, "Это имя уже занято!");
}
else if (player.getClanId()!=0)
{
criticalTo(player, "Вы должны выйти из клана, прежде чем менять ник. После вы можете войти обратно.");
}
else if (!checkMoney(player, priceChangeNameId, priceChangeNameCount, true))
{
return "no-money.htm";
}
else
{
player.setName(name);
L2World.getInstance().removeFromAllPlayers(player);
player.changeName(name);
player.store();
L2World.getInstance().addToAllPlayers(player);
player.broadcastUserInfo();
criticalTo(player, "Вы успешно сменили свой ник! Пожалуйста перезайдите.");
}
}
}
else if(args[0].equals("colorlist"))
{
colorTable = "<tr><td>"+colorTable+"</td></tr>";
colorTable += "<center></body></html>";
return colorTable;
}
else if(args[0].equals("clanlist"))
{
String html = "clanlist.htm";
return html;
}
else if(args[0].equals("active"))
{
String htmltext = "active.htm";
return htmltext;
}
else if(args[0].equals("passive"))
{
String htmltext = "passive.htm";
return htmltext;
}
else if(args[0].equals("chance"))
{
String htmltext = "chance.htm";
return htmltext;
}
return "donate.htm";
}
@Override
public String onFirstTalk(L2NpcInstance npc, L2PcInstance player) {
return onTalk(npc, player);
}
@Override
public String onTalk(L2NpcInstance npc, L2PcInstance player) {
QuestState qs = player.getQuestState(qn);
if(qs==null)
qs = newQuestState(player);
return "donate.htm";
}
public static void main(String[] args) {
ServiceManager ps = new ServiceManager();
ps.addFirstTalkId(ID_NPC_MANAGER); // Мы не хотим писать диалог для этого НПЦ
ps.addStartNpc(ID_NPC_MANAGER); // Автоматический контроль состояния квеста
ps.addTalkId(ID_NPC_MANAGER); // NPC с которым можно говорить.
}
}