bboyspek 0 Опубликовано 11 февраля, 2016 Добрый вечер уважаемые пользователи форума. Нужна ваша помощь. Проблема в следующем, хочу на сервере поставить НПС с возможностью смены ника. В целом все работает, ник меняется. НО, в поле для смены ника можно поставить любой симвл, сдлеать ник любой длины (например одну букву или восклицательный знак"). Можно написать ника вида [Adm]Pro ну и тд. Подскажите пожалуйста, что необходимо прописать в коде, что бы ник был: Не короче 6 символов Не содержал русского алфавита Не содержал набор определенных символов (например ` " & *), а лучше что бы код был вида - запрет всех символов кроме - ! @ ~ % [ ] ну и тд В коде только прописан запрен на ввод словосочетаний типа GM. ADM. Помогите дописать необходимые правила. И собственно как выглядит сам код: if nick == "": htmltext += "Вы не ввели желаемый ник!<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext elif nick.startswith("GM.") or nick.startswith("ADM.") or nick.startswith("EGM.") or nick.startswith("-"): htmltext += "Неправильный ник!<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext elif nick.endswith(".GM") or nick.endswith(".ADM") or nick.endswith(".EGM"): htmltext += "Неправильный ник!<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 11 февраля, 2016 Добрый вечер уважаемые пользователи форума. Нужна ваша помощь. Проблема в следующем, хочу на сервере поставить НПС с возможностью смены ника. В целом все работает, ник меняется. НО, в поле для смены ника можно поставить любой симвл, сдлеать ник любой длины (например одну букву или восклицательный знак"). Можно написать ника вида [Adm]Pro ну и тд. Подскажите пожалуйста, что необходимо прописать в коде, что бы ник был: Не короче 6 символов Не содержал русского алфавита Не содержал набор определенных символов (например ` " & *), а лучше что бы код был вида - запрет всех символов кроме - ! @ ~ % [ ] ну и тд В коде только прописан запрен на ввод словосочетаний типа GM. ADM. Помогите дописать необходимые правила. И собственно как выглядит сам код: if nick == "": htmltext += "Вы не ввели желаемый ник!<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext elif nick.startswith("GM.") or nick.startswith("ADM.") or nick.startswith("EGM.") or nick.startswith("-"): htmltext += "Неправильный ник!<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext elif nick.endswith(".GM") or nick.endswith(".ADM") or nick.endswith(".EGM"): htmltext += "Неправильный ник!<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext Удалите строчки elif StringUtil.isAllowedRegExp(nick) == False: htmltext += "Ru En 0-9 ~ ! @ # $ % ^ & * ( ) _ + - : > <<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
bboyspek 0 Опубликовано 11 февраля, 2016 Удалите строчки elif StringUtil.isAllowedRegExp(nick) == False: htmltext += "Ru En 0-9 ~ ! @ # $ % ^ & * ( ) _ + - : > <<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext Очень жаль, но в коде нет такой строки import sys from java.lang import System from java.util import Iterator from ru.catssoftware import L2DatabaseFactory 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 = "1235_ShadowName" print "***Donate Manager by TigloN, Name - Loaded***" NPC = 298030 ITEM = 4037 # итем необходимый для обмена COST = 15 # стоимость INAME = "Coin Of Luck" # название итема 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>Для смены ника вам необходимо выйти из клана<br>Вы сможете вступить вновь, сразу после смены ника<br>Если вы кланлидер - перекиньте клан на твинка</body></html>" #return htmltext htmltext = "<html><body><center><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 1235_ShadowName step2_ $nick\" width=204 height=20 back=\"sek.cbui36\" fore=\"sek.cbui75\"><br>" htmltext += "<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 = "<html><body><center>Смена ника:<br>Проверка...<br><br>" if nick == "": htmltext += "Вы не ввели желаемый ник!<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext elif nick.startswith("GM.") or nick.startswith("ADM.") or nick.startswith("EGM.") or nick.startswith("-"): htmltext += "Неправильный ник!<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext elif nick.endswith(".GM") or nick.endswith(".ADM") or nick.endswith(".EGM"): htmltext += "Неправильный ник!<br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext #< cona=L2DatabaseFactory.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 = "<font color=dc143c>Ник "+nick+" уже занят.</font><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>" return htmltext rsc.close() getcount.close() cona.close() #< htmltext += "<font color=bef574>Ник "+nick+" свободен.</font><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step3_"+nick+"\" msg=\"Новый ник "+nick+". Уверены?\">Продолжить. </a><br><br>" htmltext += "<a action=\"bypass -h Quest 1235_ShadowName 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></center></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=L2DatabaseFactory.getInstance().getConnection() write=writelog.prepareStatement("INSERT INTO zz_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.setName(nick) st.takeItems(ITEM,COST) htmltext = "<html><body><center>Смена ника:<br>Готово.<br><font color=f5b974>Перезайдите!</font><br></body></html>" else: htmltext = "<html><body>Смена ника:<br>Oops!</center></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(1235,qn,"custom") QUEST.addStartNpc(NPC) QUEST.addTalkId(NPC) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ncsSpawN 45 Опубликовано 11 февраля, 2016 А извиняюсь, не прочитал ваше сообщение.Тогда вам нужно наоборот добавить этот код.Учитывайте что в ядре должна быть функция public static boolean isAllowedRegExp(String string)в StringUtil.javaЛибо придется создать свою. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
terege 110 Опубликовано 11 февраля, 2016 А может проше сделать через простой скрипт сделать листинг и его проверку и не кто не отменял функцию .length() для лимита ника либо мин либо макс Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 12 февраля, 2016 что мешает использовать те же самые проверки что делаются при создании персонажа? сэмпл if (!Util.isMatchingRegexp(newName, ServerConfig.CHAR_NAME_TEMPLATE)) { player.sendMessage("Вы ввели некорректное имя."); return false; } @Setting(name = "CharNameTemplate") public static String CHAR_NAME_TEMPLATE = "[A-Za-z0-9\u0410-\u042f\u0430-\u044f]{2,16}"; public static boolean isMatchingRegexp(String text, String template) { Pattern pattern = null; try { pattern = Pattern.compile(template); } catch (PatternSyntaxException e) // invalid template { e.printStackTrace(); } if (pattern == null) return false; Matcher regexp = pattern.matcher(text); return regexp.matches(); } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
bboyspek 0 Опубликовано 12 февраля, 2016 что мешает использовать те же самые проверки что делаются при создании персонажа? сэмпл if (!Util.isMatchingRegexp(newName, ServerConfig.CHAR_NAME_TEMPLATE)) { player.sendMessage("Вы ввели некорректное имя."); return false; } @Setting(name = "CharNameTemplate") public static String CHAR_NAME_TEMPLATE = "[A-Za-z0-9\u0410-\u042f\u0430-\u044f]{2,16}"; public static boolean isMatchingRegexp(String text, String template) { Pattern pattern = null; try { pattern = Pattern.compile(template); } catch (PatternSyntaxException e) // invalid template { e.printStackTrace(); } if (pattern == null) return false; Matcher regexp = pattern.matcher(text); return regexp.matches(); } Поскольку я не вильно разбираюсь в скриптах не могли бы вы прокомментировать куда вставлять данный код? На сколько я понимаю если будет проверка которая используется при создании чара то невозможно будет создать ник содержащий символы типа ! @ ~ ну и дт. А так не должно быть Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
bboyspek 0 Опубликовано 15 февраля, 2016 ап, вопрос еще актуальный. Неужели никто не подскажет Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AllBadThings 58 Опубликовано 3 марта, 2016 ап, вопрос еще актуальный. Неужели никто не подскажет пиши в скайп, решим наверное Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты