Сообщений: 77
Тем: 10
Зарегистрирован: Feb 2014
Репутация:
231
Текст ошибки:
Код: [20:33:27]: ERROR CharacterDao: Could not insert char data player: [NickName (1843), wh: 896, invent: 896]
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'NickName' for key 'CHAR_NAME'
at sun.reflect.GeneratedConstructorAccessor73.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2441)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2366)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2350)
at com.zaxxer.hikari.proxy.PreparedStatementJavassistProxy.executeUpdate(PreparedStatementJavassistProxy.java)
at ru.catssoftware.gameserver.datatables.dao.CharacterDao.insert(CharacterDao.java:322)
at ru.catssoftware.gameserver.instancemanager.PlayerEnteringManager.create(PlayerEnteringManager.java:75)
at ru.catssoftware.gameserver.network.clientpackets.CharacterCreate.runImpl(CharacterCreate.java:98)
at ru.catssoftware.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:69)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Я понимаю что какая-то проблема в создание и проверки ника. Но как ее устранить. Сборка: Люцера.
Сообщений: 4,694
Тем: 85
Зарегистрирован: Mar 2009
Репутация:
23,364
Walker, при каких обстоятельствах в лог бросает эту ошибку? Используете сервис смены ника или что-то подобное?
Fortuna - non penis, in manus non recipe.
Сообщений: 77
Тем: 10
Зарегистрирован: Feb 2014
Репутация:
231
Ashe Написал:Walker, при каких обстоятельствах в лог бросает эту ошибку? Используете сервис смены ника или что-то подобное? Решил донат шоп на старт поставить, ну а там скрипты. Скорей всего большой поток людей бедняга не выдержал. Написан на яве.
Сообщений: 226
Тем: 43
Зарегистрирован: Dec 2011
Репутация:
1,008
Цитата:при каких обстоятельствах в лог бросает эту ошибку?
Цитата:CharacterCreate.runImpl(CharacterCreate.java:98)
Скорей всего в CharNameTable данные на ник отсутствуют, по факту же в БД есть. Ну а при создании чара в памяти такого ника не обнаруживается и это даёт зеленый свет на выполнение запроса.
Цитата:ну а там скрипты
Какие скрипты? Вас Ashe спросил про смену ников. Если есть такое - проблему надо искать только там.
Сообщений: 104
Тем: 17
Зарегистрирован: Oct 2013
Репутация:
52
Держи, тут работает.
code
Код: 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.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.sql.DatabaseFactory;
import ru.catssoftware.gameserver.model.L2ItemInstance;
public class ServiceManager extends Quest {
private static String qn = "ServiceManager";
private final static int ID_NPC_MANAGER = 300300; // ID Менеджера (NPC)
private static class Price {
private int []_itemId;
private int []_prices;
public Price(int []items, int[]count) {
_itemId = items;
_prices = count;
}
}
/**
* Настройки смены ника:
*/
int priceChangeNameId = 12117;
int priceChangeNameCount = 15;
/**
* Настройки смены цвета ника:
*/
int priceChangeColorNameId = 12117;
int priceChangeColorNameCount = 15;
/**
* Настройки добавления аугментации (так на всякие):
*/
int priceItemIdAugment = 57;
int priceItemCountAugment = 40;
int attributes;
int skill;
int level;
/**
* Настройка цен в управление кланом:
*/
int ItemIdClan = 12117;
int ClanLevel6 = 5;
int ClanLevel7 = 10;
int ClanLevel8 = 15;
int ClanCrpPrice = 5;
int ClanCrpCount = 12117;
int ClanSkillsCount = 15;
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[] {12117}, new int [] {15});
private String colorTable = "<html><body><br>Смена цвета: <font color=74bff5>"+priceChangeColorNameCount+" "+(ItemTable.getInstance().getItemName(priceChangeColorNameId))+"</font><br><center>";
public ServiceManager() {
super(-1,qn,"custom");
// ================= Настройка премиума ========
_premiumPrice.put(1,new Price(new int[] {12117},new int[] {3}));
_premiumPrice.put(7,new Price(new int[] {12117},new int[] {10}));
_premiumPrice.put(31,new Price(new int[] {12117},new int[] {25}));
// ================ Настройка выдачи геройства ===============
_heroPrice.put(1, new Price(new int[] {12117},new int[] {3}));
_heroPrice.put(7, new Price(new int[] {12117},new int[] {15}));
_heroPrice.put(31, new Price(new int[] {12117},new int[] {25}));
// ================ Список цветов ника и титула ===============
/* _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[i]+"\"><font color=\""+colors[i]+"\">%name%</font></a> - <a action=\"bypass -h Quest "+qn+" colortitle "+colors[i]+"\"><font color=\""+colors[i]+"\">Выбрать цвет титула</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 = DatabaseFactory.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[i])==null ||
player.getInventory().getItemByItemId(price._itemId[i]).getCount() < price._prices[i]) {
return false; // Нет денег? Сории
}
for(int i=0;i<price._itemId.length;i++) // Отнимаем средства у населения
if(!player.destroyItemByItemId(qn, price._itemId[i], price._prices[i], 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><center>Покупка VIP Бафф:<br></center><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[i]+" "+ItemTable.getInstance().getTemplate(price._itemId[i]).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[i]+" "+ItemTable.getInstance().getTemplate(price._itemId[i]).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);
player.store();
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);
player.store();
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())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 5)
{
return "nolvl5.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanLevel6, true))
{
return "no-money.htm";
}
else
{
player.getClan().changeLevel(6);
player.store();
player.broadcastUserInfo();
return "lvlup6.htm";
}
}
else if(args[0].equals("clanlevel7")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 5)
{
return "nolvl6.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanLevel7, true))
{
return "no-money.htm";
}
else
{
player.getClan().changeLevel(7);
player.store();
player.broadcastUserInfo();
return "lvlup7.htm";
}
}
else if(args[0].equals("clanlevel8")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 5)
{
return "nolvl7.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanLevel8, true))
{
return "no-money.htm";
}
else
{
player.getClan().changeLevel(8);
player.store();
player.broadcastUserInfo();
return "lvlup8.htm";
}
}
else if(args[0].equals("clanrepa")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanCrpPrice, true))
{
return "no-money.htm";
}
else
{
player.getClan().setReputationScore(player.getClan().getReputationScore()+ClanCrpCount, true);
return "uprep.htm";
}
}
else if(args[0].equals("clanskills")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 8)
{
return "nolvl8.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanSkillsCount, true))
{
return "no-money.htm";
}
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));
player.getClan().addSkillEffects(true);
player.getClan().broadcastToOnlineMembers(new PledgeSkillList(player.getClan()));
{
return "upskils.htm";
}
}
}
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 += "<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><img src=\"L2UI.SquareBlank\" width=260 height=2></center><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=120 height=21 back=\"epicfdarkelf.FDarkElf_m004_t1004_u_sp\" fore=\"epicfdarkelf.FDarkElf_m004_t1004_u_ori\"><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("[a-zA-Z0-9!%:*~><.#@?()_+-@\\[\\]^]{3,16}") || name.contains("ADM") || name.contains("GM"))
{
return "false.htm";
}
else if (CharNameTable.getInstance().getByName(name) != null)
{
return "name-false.htm";
}
else if (player.getClanId()!=0)
{
return "name-clan.htm";
}
else if (!checkMoney(player, priceChangeNameId, priceChangeNameCount, true))
{
return "no-money.htm";
}
else
{
player.setName(name);
player.changeName(name);
player.store();
player.broadcastUserInfo();
return "success.htm";
}
}
}
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;
}
else if(args[0].equals("hello"))
{
String htmltext = "hello.htm";
return htmltext;
}
else if(args[0].equals("service"))
{
String htmltext = "service.htm";
return htmltext;
}
else if(args[0].equals("Noblessmain"))
{
String htmltext = "Noblessmain.htm";
return htmltext;
}
else if(args[0].equals("false"))
{
String htmltext = "false.htm";
return htmltext;
}
else if(args[0].equals("name-false"))
{
String htmltext = "name-false.htm";
return htmltext;
}
else if(args[0].equals("name-clan"))
{
String htmltext = "name-clan.htm";
return htmltext;
}
else if(args[0].equals("noKL"))
{
String htmltext = "noKL.htm";
return htmltext;
}
else if(args[0].equals("nolvl5"))
{
String htmltext = "nolvl5.htm";
return htmltext;
}
else if(args[0].equals("lvlup6"))
{
String htmltext = "lvlup6.htm";
return htmltext;
}
else if(args[0].equals("nolvl6"))
{
String htmltext = "nolvl6.htm";
return htmltext;
}
else if(args[0].equals("lvlup7"))
{
String htmltext = "lvlup7.htm";
return htmltext;
}
else if(args[0].equals("nolvl7"))
{
String htmltext = "nolvl7.htm";
return htmltext;
}
else if(args[0].equals("lvlup8"))
{
String htmltext = "lvlup8.htm";
return htmltext;
}
else if(args[0].equals("uprep"))
{
String htmltext = "uprep.htm";
return htmltext;
}
else if(args[0].equals("nolvl8"))
{
String htmltext = "nolvl8.htm";
return htmltext;
}
else if(args[0].equals("upskils"))
{
String htmltext = "upskils.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 с которым можно говорить.
}
}
html'ки сам напишешь
Сообщений: 77
Тем: 10
Зарегистрирован: Feb 2014
Репутация:
231
desolator Написал:Держи, тут работает.
code
Код: 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.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.sql.DatabaseFactory;
import ru.catssoftware.gameserver.model.L2ItemInstance;
public class ServiceManager extends Quest {
private static String qn = "ServiceManager";
private final static int ID_NPC_MANAGER = 300300; // ID Менеджера (NPC)
private static class Price {
private int []_itemId;
private int []_prices;
public Price(int []items, int[]count) {
_itemId = items;
_prices = count;
}
}
/**
* Настройки смены ника:
*/
int priceChangeNameId = 12117;
int priceChangeNameCount = 15;
/**
* Настройки смены цвета ника:
*/
int priceChangeColorNameId = 12117;
int priceChangeColorNameCount = 15;
/**
* Настройки добавления аугментации (так на всякие):
*/
int priceItemIdAugment = 57;
int priceItemCountAugment = 40;
int attributes;
int skill;
int level;
/**
* Настройка цен в управление кланом:
*/
int ItemIdClan = 12117;
int ClanLevel6 = 5;
int ClanLevel7 = 10;
int ClanLevel8 = 15;
int ClanCrpPrice = 5;
int ClanCrpCount = 12117;
int ClanSkillsCount = 15;
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[] {12117}, new int [] {15});
private String colorTable = "<html><body><br>Смена цвета: <font color=74bff5>"+priceChangeColorNameCount+" "+(ItemTable.getInstance().getItemName(priceChangeColorNameId))+"</font><br><center>";
public ServiceManager() {
super(-1,qn,"custom");
// ================= Настройка премиума ========
_premiumPrice.put(1,new Price(new int[] {12117},new int[] {3}));
_premiumPrice.put(7,new Price(new int[] {12117},new int[] {10}));
_premiumPrice.put(31,new Price(new int[] {12117},new int[] {25}));
// ================ Настройка выдачи геройства ===============
_heroPrice.put(1, new Price(new int[] {12117},new int[] {3}));
_heroPrice.put(7, new Price(new int[] {12117},new int[] {15}));
_heroPrice.put(31, new Price(new int[] {12117},new int[] {25}));
// ================ Список цветов ника и титула ===============
/* _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[i]+"\"><font color=\""+colors[i]+"\">%name%</font></a> - <a action=\"bypass -h Quest "+qn+" colortitle "+colors[i]+"\"><font color=\""+colors[i]+"\">Выбрать цвет титула</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 = DatabaseFactory.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[i])==null ||
player.getInventory().getItemByItemId(price._itemId[i]).getCount() < price._prices[i]) {
return false; // Нет денег? Сории
}
for(int i=0;i<price._itemId.length;i++) // Отнимаем средства у населения
if(!player.destroyItemByItemId(qn, price._itemId[i], price._prices[i], 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><center>Покупка VIP Бафф:<br></center><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[i]+" "+ItemTable.getInstance().getTemplate(price._itemId[i]).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[i]+" "+ItemTable.getInstance().getTemplate(price._itemId[i]).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);
player.store();
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);
player.store();
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())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 5)
{
return "nolvl5.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanLevel6, true))
{
return "no-money.htm";
}
else
{
player.getClan().changeLevel(6);
player.store();
player.broadcastUserInfo();
return "lvlup6.htm";
}
}
else if(args[0].equals("clanlevel7")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 5)
{
return "nolvl6.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanLevel7, true))
{
return "no-money.htm";
}
else
{
player.getClan().changeLevel(7);
player.store();
player.broadcastUserInfo();
return "lvlup7.htm";
}
}
else if(args[0].equals("clanlevel8")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 5)
{
return "nolvl7.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanLevel8, true))
{
return "no-money.htm";
}
else
{
player.getClan().changeLevel(8);
player.store();
player.broadcastUserInfo();
return "lvlup8.htm";
}
}
else if(args[0].equals("clanrepa")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanCrpPrice, true))
{
return "no-money.htm";
}
else
{
player.getClan().setReputationScore(player.getClan().getReputationScore()+ClanCrpCount, true);
return "uprep.htm";
}
}
else if(args[0].equals("clanskills")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 8)
{
return "nolvl8.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanSkillsCount, true))
{
return "no-money.htm";
}
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));
player.getClan().addSkillEffects(true);
player.getClan().broadcastToOnlineMembers(new PledgeSkillList(player.getClan()));
{
return "upskils.htm";
}
}
}
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 += "<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><img src=\"L2UI.SquareBlank\" width=260 height=2></center><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=120 height=21 back=\"epicfdarkelf.FDarkElf_m004_t1004_u_sp\" fore=\"epicfdarkelf.FDarkElf_m004_t1004_u_ori\"><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("[a-zA-Z0-9!%:*~><.#@?()_+-@\\[\\]^]{3,16}") || name.contains("ADM") || name.contains("GM"))
{
return "false.htm";
}
else if (CharNameTable.getInstance().getByName(name) != null)
{
return "name-false.htm";
}
else if (player.getClanId()!=0)
{
return "name-clan.htm";
}
else if (!checkMoney(player, priceChangeNameId, priceChangeNameCount, true))
{
return "no-money.htm";
}
else
{
player.setName(name);
player.changeName(name);
player.store();
player.broadcastUserInfo();
return "success.htm";
}
}
}
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;
}
else if(args[0].equals("hello"))
{
String htmltext = "hello.htm";
return htmltext;
}
else if(args[0].equals("service"))
{
String htmltext = "service.htm";
return htmltext;
}
else if(args[0].equals("Noblessmain"))
{
String htmltext = "Noblessmain.htm";
return htmltext;
}
else if(args[0].equals("false"))
{
String htmltext = "false.htm";
return htmltext;
}
else if(args[0].equals("name-false"))
{
String htmltext = "name-false.htm";
return htmltext;
}
else if(args[0].equals("name-clan"))
{
String htmltext = "name-clan.htm";
return htmltext;
}
else if(args[0].equals("noKL"))
{
String htmltext = "noKL.htm";
return htmltext;
}
else if(args[0].equals("nolvl5"))
{
String htmltext = "nolvl5.htm";
return htmltext;
}
else if(args[0].equals("lvlup6"))
{
String htmltext = "lvlup6.htm";
return htmltext;
}
else if(args[0].equals("nolvl6"))
{
String htmltext = "nolvl6.htm";
return htmltext;
}
else if(args[0].equals("lvlup7"))
{
String htmltext = "lvlup7.htm";
return htmltext;
}
else if(args[0].equals("nolvl7"))
{
String htmltext = "nolvl7.htm";
return htmltext;
}
else if(args[0].equals("lvlup8"))
{
String htmltext = "lvlup8.htm";
return htmltext;
}
else if(args[0].equals("uprep"))
{
String htmltext = "uprep.htm";
return htmltext;
}
else if(args[0].equals("nolvl8"))
{
String htmltext = "nolvl8.htm";
return htmltext;
}
else if(args[0].equals("upskils"))
{
String htmltext = "upskils.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 с которым можно говорить.
}
}
html'ки сам напишешь  Такой же скрипт донат шопа стоит.
Сообщений: 104
Тем: 17
Зарегистрирован: Oct 2013
Репутация:
52
Walker Написал:Такой же скрипт донат шопа стоит. Хм, странно у меня работал без проблем.
Попробуй этот:
asd
Код: import sys
from java.lang import System
from java.util import Iterator
from ru.catssoftware.gameserver import datatables
from ru.catssoftware.tools.random import Rnd
from ru.catssoftware.gameserver.model.quest import State
from ru.catssoftware.gameserver.model.quest import QuestState
from ru.catssoftware.gameserver.model.quest.jython import QuestJython as JQuest
from time import gmtime, strftime
qn = "q8018_CngNick"
print "***NICK V DELE***"
NPC = 300300
ITEM = 57
COST = 15
INAME = "Donate Coin"
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onAdvEvent (self,event,npc,player):
st = player.getQuestState(qn)
if event == "step1":
if st.getQuestItemsCount(ITEM) < COST:
htmltext = "<html><body>Смена имени: <font color=74bff5>"+str(COST)+" "+INAME+"</font></body></html>"
return htmltext
#elif player.getClanId():
#htmltext = "<html><body>To change the nickname you need to withdraw from the clan<br>You will be able to join again, immediately after the change of nickname<br>If you klanlider - perekinte clan to another character</body></html>"
#return htmltext
htmltext = "<html><body><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><img src=\"L2UI.SquareBlank\" width=260 height=2><br1>"
htmltext += "<center>Введите желаемое имя: ( стоимость 15 Donate Coin's )</center>"
htmltext += "<center><edit var=\"nick\" width=200 length=\"16\"><br></center>"
htmltext += "<center><button value=\"Проверить\" action=\"bypass -h Quest q8018_CngNick step2_ $nick\" width=120 height=21 back=\"epicfdarkelf.FDarkElf_m004_t1004_u_sp\" fore=\"epicfdarkelf.FDarkElf_m004_t1004_u_ori\"><br></center>"
htmltext += "<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32></center></body></html>"
elif event.startswith("step2_"):
nick = str(event.replace("step2_", ""))
nick = str(nick.replace(" ", ""))
htmltext = "<body>Смена имени:<br>Проверка...<br><br>"
if nick == "":
htmltext += "<html>Вы не ввели ничего!<br><br></html>"
htmltext += "<html><a action=\"bypass -h Quest q8018_CngNick step1\">Назад.</a></body></html>"
return htmltext
elif nick.startswith("GM.") or nick.startswith("ADM.") or nick.startswith("[M]") or nick.startswith("M.") or nick.startswith("[GM]") or nick.startswith("EGM."):
htmltext += "<html>Неверное имя!<br><br></html>"
htmltext += "<html><a action=\"bypass -h Quest q8018_CngNick step1\">Назад.</a></body></html>"
return htmltext
elif nick.endswith(".GM") or nick.endswith(".ADM") or nick.endswith(".[M]") or nick.endswith(".M") or nick.endswith(".EGM"):
htmltext += "<html>Неверное имя!<br><br></html>"
htmltext += "<html><a action=\"bypass -h Quest q8018_CngNick step1\">Назад.</a></body></html>"
return htmltext
#<
cona=DatabaseFactory.getInstance().getConnection()
getcount=cona.prepareStatement("SELECT COUNT(char_name) FROM characters WHERE char_name=?")
getcount.setString(1,nick)
rsc=getcount.executeQuery()
if (rsc.next()):
if rsc.getInt(1) == 1:
htmltext = "<html><font color=dc143c>Имя "+nick+" уже используется.</font><br></html>"
htmltext += "<html><a action=\"bypass -h Quest q8018_CngNick step1\">Назад.</a></body></html>"
return htmltext
rsc.close()
getcount.close()
cona.close()
#<
htmltext += "<html><font color=bef574>Имя "+nick+" Свободно.</font><br>"
htmltext += "<a action=\"bypass -h Quest q8018_CngNick step3_"+nick+"\">Дальше.</a><br><br>"
htmltext += "<a action=\"bypass -h Quest q8018_CngNick step1\">Назад.</a></body><html>"
elif event.startswith("step3"):
nick = str(event.replace("step3_", ""))
if st.getQuestItemsCount(ITEM) < COST:
htmltext = "<html><body>Смена имени: <font color=74bff5>"+str(COST)+" "+INAME+"</font></body></html>"
return htmltext
#<
login = str(player.getAccountName())
name = str(player.getName())
date = str(strftime("%Y-%m-%d", gmtime()))
time = str(strftime("%H:%M:%S", gmtime()))
writelog=DatabaseFactory.getInstance().getConnection()
write=writelog.prepareStatement("INSERT INTO donate_log (date,time,login,name,action,payment) VALUES (?,?,?,?,?,?)")
write.setString(1, date)
write.setString(2, time)
write.setString(3, login)
write.setString(4, name)
write.setString(5, "Nick: "+nick+"")
write.setInt(6, COST)
try :
write.executeUpdate()
write.close()
writelog.close()
except :
try : writelog.close()
except : pass
#<
player.changeName(nick)
st.takeItems(ITEM,COST)
htmltext = "<html><body>Смена имени:<br>Готово.<br><font color=f5b974>Перезайдите!</font><br></body></html>"
else:
htmltext = "<html><body>Смени имени:<br>Упс!</body></html>"
return htmltext
def onTalk (self,npc,player):
st = player.getQuestState(qn)
npcId = npc.getNpcId()
if npcId == NPC:
self.startQuestTimer("step1",100,None,player)
return
QUEST = Quest(8018,qn,"custom")
QUEST.addStartNpc(NPC)
QUEST.addTalkId(NPC)
Только там не совсем корректно работает проверка на символы в нике. Да и сам код - такое..
Сообщений: 2,444
Тем: 59
Зарегистрирован: May 2010
Репутация:
13,020
Walker, У Вас пытаются ввести ник который уже занят, значит напишите проверку и вывод в html * Этот ник уже занят, выберите другой*
[20:33:27]: ERROR CharacterDao: Could not insert char data player: [NickName (1843), wh:896, invent: 896]
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'NickName' for key 'CHAR_NAME'
СЕО Оптимизация сайтов
Сообщений: 104
Тем: 17
Зарегистрирован: Oct 2013
Репутация:
52
gorodetskiy Написал:Walker, У Вас пытаются ввести ник который уже занят, значит напишите проверку и вывод в html * Этот ник уже занят, выберите другой* Он юзал этот скрипт:
Код: 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.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.sql.DatabaseFactory;
import ru.catssoftware.gameserver.model.L2ItemInstance;
public class ServiceManager extends Quest {
private static String qn = "ServiceManager";
private final static int ID_NPC_MANAGER = 300300; // ID Менеджера (NPC)
private static class Price {
private int []_itemId;
private int []_prices;
public Price(int []items, int[]count) {
_itemId = items;
_prices = count;
}
}
/**
* Настройки смены ника:
*/
int priceChangeNameId = 12117;
int priceChangeNameCount = 15;
/**
* Настройки смены цвета ника:
*/
int priceChangeColorNameId = 12117;
int priceChangeColorNameCount = 15;
/**
* Настройки добавления аугментации (так на всякие):
*/
int priceItemIdAugment = 57;
int priceItemCountAugment = 40;
int attributes;
int skill;
int level;
/**
* Настройка цен в управление кланом:
*/
int ItemIdClan = 12117;
int ClanLevel6 = 5;
int ClanLevel7 = 10;
int ClanLevel8 = 15;
int ClanCrpPrice = 5;
int ClanCrpCount = 12117;
int ClanSkillsCount = 15;
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[] {12117}, new int [] {15});
private String colorTable = "<html><body><br>Смена цвета: <font color=74bff5>"+priceChangeColorNameCount+" "+(ItemTable.getInstance().getItemName(priceChangeColorNameId))+"</font><br><center>";
public ServiceManager() {
super(-1,qn,"custom");
// ================= Настройка премиума ========
_premiumPrice.put(1,new Price(new int[] {12117},new int[] {3}));
_premiumPrice.put(7,new Price(new int[] {12117},new int[] {10}));
_premiumPrice.put(31,new Price(new int[] {12117},new int[] {25}));
// ================ Настройка выдачи геройства ===============
_heroPrice.put(1, new Price(new int[] {12117},new int[] {3}));
_heroPrice.put(7, new Price(new int[] {12117},new int[] {15}));
_heroPrice.put(31, new Price(new int[] {12117},new int[] {25}));
// ================ Список цветов ника и титула ===============
/* _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[i]+"\"><font color=\""+colors[i]+"\">%name%</font></a> - <a action=\"bypass -h Quest "+qn+" colortitle "+colors[i]+"\"><font color=\""+colors[i]+"\">Выбрать цвет титула</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 = DatabaseFactory.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[i])==null ||
player.getInventory().getItemByItemId(price._itemId[i]).getCount() < price._prices[i]) {
return false; // Нет денег? Сории
}
for(int i=0;i<price._itemId.length;i++) // Отнимаем средства у населения
if(!player.destroyItemByItemId(qn, price._itemId[i], price._prices[i], 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><center>Покупка VIP Бафф:<br></center><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[i]+" "+ItemTable.getInstance().getTemplate(price._itemId[i]).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[i]+" "+ItemTable.getInstance().getTemplate(price._itemId[i]).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);
player.store();
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);
player.store();
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())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 5)
{
return "nolvl5.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanLevel6, true))
{
return "no-money.htm";
}
else
{
player.getClan().changeLevel(6);
player.store();
player.broadcastUserInfo();
return "lvlup6.htm";
}
}
else if(args[0].equals("clanlevel7")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 5)
{
return "nolvl6.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanLevel7, true))
{
return "no-money.htm";
}
else
{
player.getClan().changeLevel(7);
player.store();
player.broadcastUserInfo();
return "lvlup7.htm";
}
}
else if(args[0].equals("clanlevel8")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 5)
{
return "nolvl7.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanLevel8, true))
{
return "no-money.htm";
}
else
{
player.getClan().changeLevel(8);
player.store();
player.broadcastUserInfo();
return "lvlup8.htm";
}
}
else if(args[0].equals("clanrepa")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanCrpPrice, true))
{
return "no-money.htm";
}
else
{
player.getClan().setReputationScore(player.getClan().getReputationScore()+ClanCrpCount, true);
return "uprep.htm";
}
}
else if(args[0].equals("clanskills")) {
if (!player.isClanLeader())
{
return "noKL.htm";
}
else if (player.getClan().getLevel() != 8)
{
return "nolvl8.htm";
}
else if (!checkMoney(player, ItemIdClan, ClanSkillsCount, true))
{
return "no-money.htm";
}
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));
player.getClan().addSkillEffects(true);
player.getClan().broadcastToOnlineMembers(new PledgeSkillList(player.getClan()));
{
return "upskils.htm";
}
}
}
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 += "<center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><img src=\"L2UI.SquareBlank\" width=260 height=2></center><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=120 height=21 back=\"epicfdarkelf.FDarkElf_m004_t1004_u_sp\" fore=\"epicfdarkelf.FDarkElf_m004_t1004_u_ori\"><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("[a-zA-Z0-9!%:*~><.#@?()_+-@\\[\\]^]{3,16}") || name.contains("ADM") || name.contains("GM"))
{
return "false.htm";
}
else if (CharNameTable.getInstance().getByName(name) != null)
{
return "name-false.htm";
}
else if (player.getClanId()!=0)
{
return "name-clan.htm";
}
else if (!checkMoney(player, priceChangeNameId, priceChangeNameCount, true))
{
return "no-money.htm";
}
else
{
player.setName(name);
player.changeName(name);
player.store();
player.broadcastUserInfo();
return "success.htm";
}
}
}
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;
}
else if(args[0].equals("hello"))
{
String htmltext = "hello.htm";
return htmltext;
}
else if(args[0].equals("service"))
{
String htmltext = "service.htm";
return htmltext;
}
else if(args[0].equals("Noblessmain"))
{
String htmltext = "Noblessmain.htm";
return htmltext;
}
else if(args[0].equals("false"))
{
String htmltext = "false.htm";
return htmltext;
}
else if(args[0].equals("name-false"))
{
String htmltext = "name-false.htm";
return htmltext;
}
else if(args[0].equals("name-clan"))
{
String htmltext = "name-clan.htm";
return htmltext;
}
else if(args[0].equals("noKL"))
{
String htmltext = "noKL.htm";
return htmltext;
}
else if(args[0].equals("nolvl5"))
{
String htmltext = "nolvl5.htm";
return htmltext;
}
else if(args[0].equals("lvlup6"))
{
String htmltext = "lvlup6.htm";
return htmltext;
}
else if(args[0].equals("nolvl6"))
{
String htmltext = "nolvl6.htm";
return htmltext;
}
else if(args[0].equals("lvlup7"))
{
String htmltext = "lvlup7.htm";
return htmltext;
}
else if(args[0].equals("nolvl7"))
{
String htmltext = "nolvl7.htm";
return htmltext;
}
else if(args[0].equals("lvlup8"))
{
String htmltext = "lvlup8.htm";
return htmltext;
}
else if(args[0].equals("uprep"))
{
String htmltext = "uprep.htm";
return htmltext;
}
else if(args[0].equals("nolvl8"))
{
String htmltext = "nolvl8.htm";
return htmltext;
}
else if(args[0].equals("upskils"))
{
String htmltext = "upskils.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 с которым можно говорить.
}
}
И если присмотреться то можно увидеть:
Код: else if (CharNameTable.getInstance().getByName(name) != null)
{
return "name-false.htm";
}
Хотя бы тему почитали
|