FollenX 3 Опубликовано 7 августа, 2013 Сборка (Project-World) нпс который меняет ник за донат монеты, при попытке поставить ник с кавычкой "admin, ник пропадает, а если ~admin и любые другие символы, то все нормально. Вот код квеста из инит ру. import sys from net.sf.l2j import L2DatabaseFactory from net.sf.l2j.gameserver.model.quest import State from net.sf.l2j.gameserver.model.quest import QuestState from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest from net.sf.l2j.gameserver.util import Util from time import gmtime, strftime qn = "q8018_CngNick" NPC = 99999 ITEM = 4037 # итем необходимый для обмена COST = 10 # стоимость INAME = "Coin Of Luck" # название итема class Quest (JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) def closeStat(self,st): if st != None: st.close() return def closeRes(self,rs): if rs != None: rs.close() return def closeCon(self,con): if con != None: con.close() return def error(self,action, text): return "<html><body> " + action + ": <br> " + text + "</body></html>" def existsNick(self,nick): try: con=L2DatabaseFactory.getInstance().getConnection() st=con.prepareStatement("SELECT COUNT(char_name) FROM characters WHERE char_name=? LIMIT 1") st.setString(1,nick) rs=st.executeQuery() if (rs.next()): if rs.getInt(1) == 1: return True except: return True finally: self.closeRes(rs) self.closeStat(st) self.closeCon(con) return False def onAdvEvent (self,event,npc,player): st = player.getQuestState(qn) if event.startswith("step2_"): nick = str(event.replace("step2_", "")) nick = str(nick.replace(" ", "")) htmltext = "<html><body>Смена ника:<br>Проверка...<br><br>" if nick == "": return self.error("Шаг 2","Вы не ввели желаемый ник!") if not Util.isValidName(player, nick): return self.error("Шаг 2","Данный ник не может быть использован.") #< if self.existsNick(nick): return self.error("Шаг 2","Данный ник уже занят.") #< htmltext += "<font color=66CC33>Ник "+nick+" свободен.</font><br>" htmltext += "<a action=\"bypass -h Quest q8018_CngNick step3_"+nick+"\" msg=\"Новый ник "+nick+". Уверены?\">Продолжить.</a></body></html>" elif event.startswith("step3"): nick = str(event.replace("step3_", "")) if st.getQuestItemsCount(ITEM) < COST: return self.error("Шаг 3","Смена ника: <font color=74bff5>"+str(COST)+" "+INAME+"") #< if self.existsNick(nick): return self.error("Шаг 2","Данный ник уже занят.") #< login = str(player.getAccountName()) name = str(player.getName()) date = str(strftime("%Y-%m-%d", gmtime())) time = str(strftime("%H:%M:%S", gmtime())) try: con=L2DatabaseFactory.getInstance().getConnection() st=con.prepareStatement("INSERT INTO zz_donate_log (date,time,login,name,action,payment) VALUES (?,?,?,?,?,?)") st.setString(1, date) st.setString(2, time) st.setString(3, login) st.setString(4, name) st.setString(5, "Nick: "+nick+"") st.setInt(6, COST) st.executeUpdate() except: return self.error("Шаг 3","Ошибка базы данных") finally: self.closeStat(st) self.closeCon(con) #< player.destroyItemByItemId("q8018_CngNick", ITEM, COST, player, True) player.changeName(nick) #st.takeItems(ITEM,COST) htmltext = "<html><body>Смена ника:<br>Готово!<br>Надеемся вы довольны новым ником.</body></html>" else: htmltext = "<html><body>Смена ника:<br>Oops!</body></html>" return htmltext def onTalk (self,npc,player): st = player.getQuestState(qn) npcId = npc.getNpcId() if npcId == NPC: if st.getQuestItemsCount(ITEM) < COST: return self.error("Шаг 1","Смена ника: <font color=74bff5>"+str(COST)+" "+INAME+"") htmltext = "<html><body><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><img src=\"L2UI.SquareBlank\" width=260 height=2><br1>" htmltext += "Введите желаемый ник:" htmltext += "<edit var=\"nick\" width=200 length=\"16\"><br>" htmltext += "<button value=\"Проверить\" action=\"bypass -h Quest q8018_CngNick step2_ $nick\" width=80 height=15 back=\"sek.cbui94\" fore=\"sek.cbui92\"><br><br>" htmltext += "Смена ника: <font color=74bff5>"+str(COST)+" "+INAME+"</font><br>" htmltext += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32></body></html>" return htmltext return QUEST = Quest(8018,qn,"custom") CREATED = State('Start', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(NPC) QUEST.addTalkId(NPC) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BrainEater 217 Опубликовано 7 августа, 2013 (изменено) Util.isValidName Здесь наверное проверки. Изменено 7 августа, 2013 пользователем BrainEater Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
FollenX 3 Опубликовано 7 августа, 2013 Util.isValidName Здесь наверное проверки. Даже так скажу, проверка находится тут. def onAdvEvent (self,event,npc,player): st = player.getQuestState(qn) if event.startswith("step2_"): nick = str(event.replace("step2_", "")) nick = str(nick.replace(" ", "")) htmltext = "<html><body>Смена ника:<br>Проверка...<br><br>" if nick == "": return self.error("Шаг 2","Вы не ввели желаемый ник!") if not Util.isValidName(player, nick): return self.error("Шаг 2","Данный ник не может быть использован.") #< if self.existsNick(nick): return self.error("Шаг 2","Данный ник уже занят.") #< htmltext += "<font color=66CC33>Ник "+nick+" свободен.</font><br>" Но я не могу поставить запрет на == ""nick" (ява меня не поймет) =) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 7 августа, 2013 (изменено) ну во 1 проверка находится тут from net.sf.l2j.gameserver.util import Util А во 2 public static boolean isValidName(L2PcInstance player, String name) { if ((name.length() < 3) || (name.length() > 16)) { player.sendHtmlMessage("\u0418\u043C\u044F \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u0431\u043E\u043B\u0435\u0435 3 \u0438 \u043C\u0435\u043D\u0435\u0435 16 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432."); return false; } if ((name.startsWith("GM.")) || (name.startsWith("ADM.")) || (name.startsWith("EGM.")) || (name.startsWith("-"))) { player.sendHtmlMessage("\u0417\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u043D\u044B\u0439 \u043D\u0438\u043A."); return false; } if ((name.endsWith(".GM")) || (name.endsWith(".ADM")) || (name.endsWith(".EGM")) || ((!Config.PREMIUM_NAME_PREFIX.isEmpty()) && (name.endsWith(Config.PREMIUM_NAME_PREFIX)))) { player.sendHtmlMessage("\u0417\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u043D\u044B\u0439 \u043D\u0438\u043A."); return false; } return true; } Это сама проверка Изменено 7 августа, 2013 пользователем Demoncool 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
FollenX 3 Опубликовано 8 августа, 2013 ну во 1 проверка находится тут from net.sf.l2j.gameserver.util import Util А во 2 public static boolean isValidName(L2PcInstance player, String name) { if ((name.length() < 3) || (name.length() > 16)) { player.sendHtmlMessage("\u0418\u043C\u044F \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u0431\u043E\u043B\u0435\u0435 3 \u0438 \u043C\u0435\u043D\u0435\u0435 16 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432."); return false; } if ((name.startsWith("GM.")) || (name.startsWith("ADM.")) || (name.startsWith("EGM.")) || (name.startsWith("-"))) { player.sendHtmlMessage("\u0417\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u043D\u044B\u0439 \u043D\u0438\u043A."); return false; } if ((name.endsWith(".GM")) || (name.endsWith(".ADM")) || (name.endsWith(".EGM")) || ((!Config.PREMIUM_NAME_PREFIX.isEmpty()) && (name.endsWith(Config.PREMIUM_NAME_PREFIX)))) { player.sendHtmlMessage("\u0417\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u043D\u044B\u0439 \u043D\u0438\u043A."); return false; } return true; } Это сама проверка Отлично сработано, подскажи пожалуйста где мне теперь найти сей код, все обшарил в сборке, не разберусь. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты