Перейти к содержанию
Авторизация  
FollenX

Квестовый Нпс "смена Ника"

Рекомендуемые сообщения

Сборка (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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Util.isValidName

 

Здесь наверное проверки.

Изменено пользователем BrainEater

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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" (ява меня не поймет) =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну во 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;

}

Это сама проверка

Изменено пользователем Demoncool
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну во 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;

}

Это сама проверка

 

Отлично сработано, подскажи пожалуйста где мне теперь найти сей код, все обшарил в сборке, не разберусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...