11111111 19 Опубликовано 10 марта, 2014 Где поправить чтоб нельзя было покупать "пустые" ники.. А то бегают без ников.. 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 = 10851 # итем необходимый для обмена COST = 10 # стоимость INAME = "WmZ Coin" # название итема 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) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
se1dhe 501 Опубликовано 10 марта, 2014 if nick == "": return self.error("Шаг 2","Вы не ввели желаемый ник!") Добавить рег. выражение на длину ника 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
11111111 19 Опубликовано 10 марта, 2014 if nick == "": return self.error("Шаг 2","Вы не ввели желаемый ник!") Добавить рег. выражение на длину ника как добавить? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 10 марта, 2014 как добавить? ctrl+c ctrl+v 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
11111111 19 Опубликовано 10 марта, 2014 ctrl+c ctrl+v в коде есть это Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Fetlir 39 Опубликовано 10 марта, 2014 if nick.length() <= 1 ... что то типа 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
taste 501 Опубликовано 10 марта, 2014 у них не пустые ники, просто клиент эти спец символы не видит 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 10 марта, 2014 (изменено) Pattern.matches("[A-Za-z0-9\`\~\!\@\#\$\%\^\*\(\)\_\-\=\[\]\'\.\,\:\;]*", event) разрешенные символы Изменено 10 марта, 2014 пользователем Demoncool 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
11111111 19 Опубликовано 10 марта, 2014 Pattern.matches("[A-Za-z0-9\`\~\!\@\#\$\%\^\*\(\)\_\-\=\[\]\'\.\,\:\;]*", event) разрешенные символы где эти впихнуть?)) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Twinker 487 Опубликовано 10 марта, 2014 (изменено) Попробуйте вставить этот код. P.s Не проверял. На скорую руку настрогал. badsymbols = ["©", "®"]; i = 0; while (i != badsymbols.count()): if (nick.find(badsymbols[i])): error = "Ник содержит запрещенные символы"; if (error.lenght()): return self.error("Шаг 2", error); Вставьте в лист (массив) запрещенные символы и радуйтесь (в ASCII есс-но) --- UPDATE Проверил все, криво сделал. Вот так работает: badsymbols = ["q", "w"]; i = 0; while (i < len(badsymbols)): if (nick.find(badsymbols[i]) != -1): error = "Ник содержит запрещенные символы"; break; i = i + 1; try: error except NameError: error = ""; if (len(error)): return self.error("Шаг 2", error); Готовый код: http://pastebin.com/9QcPPM2j Изменено 10 марта, 2014 пользователем Twinker 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
11111111 19 Опубликовано 10 марта, 2014 cпасибо. Можно закрыть Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты