Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- from java.lang import System
- from java.util import Iterator
- 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.serverpackets import CharInfo
- from net.sf.l2j.gameserver.serverpackets import UserInfo
- from net.sf.l2j.gameserver.serverpackets import SetupGauge
- from net.sf.l2j.gameserver.model.base import ClassId
- from net.sf.l2j.gameserver.model.base import Experience
- from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
- from net.sf.l2j.gameserver.datatables import SkillTable
- from net.sf.l2j.gameserver.datatables import SkillTreeTable
- from net.sf.l2j.gameserver.model import L2Skill
- NPC = [100007]
- QuestId = 850
- QuestName = "Subclass"
- QuestDesc = "custom"
- QUEST_INFO = str(QuestId)+"_"+QuestName
- print "INFO Loaded ClassMaster NPC"
- #---------------------------------------------------------------------------------------------------------------------------------------------------
- # Configuraciones
- #---------------------------------------------------------------------------------------------------------------------------------------------------
- #Para tener más de 3 subclases, debes incrementar el número de variables dentro del SQL y después salvar los cambios a la Base de Datos.
- #Dentro del SQL encontrarás algunas variables llamadas SubclassidX. Solo tienes que cambiar la "X" incrementando su valor.
- #Este valor no debería ser cambiado si no deseas incrementar el número de subclases a un valor mayor a 3.
- #Aumentar o disminuir el valor de "maxsubsindb" sin haber hecho los pasos anteriores pueden provocar errores. Ten cuidadoso!.
- maxsubsindb = 3
- # Número de Subclases que pueden ser añadidas. su valor debe ser menor o igual a "maxsubsindb".
- SubsNumber = 3
- # True, Permite añadir subclases acumulativas en todas las subclases originales del juego osea en la Mainclass y todas las retails.
- # False, Permite añadir subclases acumulativas en solo unas de las subclases originales del juego ya sea la Mainclass o una de las retails.
- AllowMultiSubs = False
- # True, Permite cualquier subclase acumulativa. False, Solo permite añadir subclases de tu propia raza (No Mutantes).
- AllowAllSubs = True
- #La siguiente opción funciona si "AllowAllSubs = False", también se requiere que estes usando una subclase original del juego (Retail).
- #True, permite añadir una subclase con la misma raza de la Mainclass. False, Solo permite añadir subclases con la misma raza de la Retail.
- AllowMutantRetail = True
- #True, permite borrar la mainclass o cualquiera de las subclases añadidas. False, solo permite borrar las subclases añadidas.
- AllowDelMainClass = False
- # Es el mínimo level requerido para añadir una subclase. Predeterminado: 76
- MinLevel = 75
- #True, Permite añadir subclases solo si el personaje es nobles. False, de lo contrario.
- AllowOnlyNobles = False
- #True, Permite añadir, borrar o switchear cualquier subclase, solo si posees los Items requeridos. False, de lo contrario
- ReqItems = False
- #Item requerido para hacer switch entre las subclases. Predeterminado: 57 (Adena)
- #Cantidad de Items requeridos.
- Item1_Req = 57
- Item1_Num = 1000000
- #Item requerido para añadir una subclase.
- #Cantidad de Items requeridos.
- Item2_Req = 4356
- Item2_Num = 5000
- #Item requerido para borrar una subclase.
- #Cantidad de Items requeridos.
- Item3_Req = 4356
- Item3_Num = 1000
- # True: Activa la opción de cambiar el level del personaje después de añadir una subclase
- # False: No cambia el level del personaje después de añadir una subclase. Predeterminado: True
- DecLevel= True
- # True: El HTML mostrará opciones de 3ra profesión para escojer, tambien se impedira añadir subclases si el personaje no tiene 3ra profesión.
- # False: El HTML mostrará opciones de 2da profesión para escojer, tambien se impedira añadir subclases si el personaje no tiene 2da ó 3ra profesión.
- AllowThirdJob = False
- #Level al cual el personaje será cambiado después de añadir una subclase. Predeterminado: 40
- lvl= 40
- # True: El usuario deberá esperar un tiempo antes de poder hacer una acción. Predeterminado: True
- # False: El usuario puede realizar cualquier acción sin ninguna restricción. No se recomienda
- Block = True
- #Blocking time in seconds before take any action.
- BlockTime = 20
- #---------------------------------------------------------------------------------------------------------------------------------------------------
- def MainHtml(st) :
- xsubsamount=getsubsammount(st)
- if xsubsamount >= 0 :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> Antes de realizar una accion, asegurate</font></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> de quitarte todos los items y tener el </font></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> nivel necesario.</font></td></tr>"
- if ReqItems == True:
- HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> Ademas necesitas los Items requeridos.</font></td></tr>"
- HTML_MESSAGE += "<tr><td><br></td></tr>"
- if xsubsamount < SubsNumber and Item2_Num >= 1: HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> Elegir Sub: <font color=\"LEVEL\">"+str(Item2_Num)+" "+str(getitemname(st,Item2_Req))+"</font></font></td></tr>"
- if Item1_Num >= 1: HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> Switch Sub: <font color=\"LEVEL\">"+str(Item1_Num)+" "+str(getitemname(st,Item1_Req))+"</font></font></td></tr>"
- if Item3_Num >= 1: HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> Borrar Sub: <font color=\"LEVEL\">"+str(Item3_Num)+" "+str(getitemname(st,Item3_Req))+"</font></font></td></tr>"
- HTML_MESSAGE += "<tr><td></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<tr><td width=90 align=\"center\"><table width=90 border=0><tr><td width=90 align=\"center\"><table width=85 border=0>"
- if xsubsamount < SubsNumber :
- HTML_MESSAGE += "<tr><td><button value=\"Elegir Sub\" action=\"bypass -h Quest " +QUEST_INFO + " gethtml 1\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\"></td></tr><br1>"
- HTML_MESSAGE += "</table></td></tr></table></td></tr>"
- HTML_MESSAGE += "</center></body></html>"
- return HTML_MESSAGE
- else:
- if st.getQuestItemsCount(Item2_Req) < Item2_Num and ReqItems == True: return comunerrors(st,"0")
- if AllowAllSubs == False :
- if AllowMutantRetail == False and st.player.isSubClassActive(): return MainHtmlIV(st,getclassname(st,str(st.player.getClassId().getId()),"RaceId"))
- else: return MainHtmlIV(st,getVarcharacters(st,"race"))
- else: return MainHtmlI(st)
- def MainHtmlI(st) :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">Elige una Raza</font></td></tr>"
- HTML_MESSAGE += "<tr><td></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br><br>"
- HTML_MESSAGE += "<tr><td width=110 align=\"center\"><table width=110 border=0><tr><td width=110 align=\"center\"><table width=105 border=0>"
- HTML_MESSAGE += "<tr><td><button value=\"Humano\" action=\"bypass -h Quest " +QUEST_INFO + " escraza 0\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr><br>"
- HTML_MESSAGE += "<tr><td><button value=\"Elfo\" action=\"bypass -h Quest " +QUEST_INFO + " escraza 1\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr><br>"
- HTML_MESSAGE += "<tr><td><button value=\"Elfo Oscuro\" action=\"bypass -h Quest " +QUEST_INFO + " escraza 2\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr><br>"
- HTML_MESSAGE += "<tr><td><button value=\"Orco\" action=\"bypass -h Quest " +QUEST_INFO + " escraza 3\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr><br>"
- HTML_MESSAGE += "<tr><td><button value=\"Enano\" action=\"bypass -h Quest " +QUEST_INFO + " escraza 4\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr><br>"
- HTML_MESSAGE += "</table></td></tr></table></td></tr>"
- HTML_MESSAGE += "</center></body></html>"
- return HTML_MESSAGE
- def MainHtmlII(st) :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">Elige una subclase para hacer Switch</font></td></tr>"
- HTML_MESSAGE += "<tr><td></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br><br>"
- HTML_MESSAGE += "<tr><td width=110 align=\"center\"><table width=110 border=0><tr><td width=110 align=\"center\"><table width=105 border=0>"
- temp = getVar(st,"currentsub"); j=-1
- for i in range(maxsubsindb + 1):
- var = getVar(st,"subclassid"+str(i))
- if int(var) >= 0 and int(var) <= 136:
- j+=1
- if temp != str(i) and SubsNumber >= j:
- HTML_MESSAGE += "<tr><td><button value=\""+getclassname(st,var,"ClassName")+"\" action=\"bypass -h Quest " +QUEST_INFO + " camb "+str(i)+"\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr><br>"
- HTML_MESSAGE += "</table></td></tr></table></td></tr>"
- HTML_MESSAGE += "</center></body></html>"
- return HTML_MESSAGE
- def MainHtmlIII(st) :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">Elige la subclase que deseas Borrar</font></td></tr>"
- HTML_MESSAGE += "<tr><td></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br><br>"
- HTML_MESSAGE += "<tr><td width=110 align=\"center\"><table width=110 border=0><tr><td width=110 align=\"center\"><table width=105 border=0>"
- j=-1
- for i in range(maxsubsindb + 1):
- var = getVar(st,"subclassid"+str(i))
- if int(var) >= 0 and int(var) <= 136:
- if i == 0 and AllowDelMainClass == False: pass
- else:
- j+=1
- if SubsNumber >= j:
- HTML_MESSAGE += "<tr><td><button value=\""+getclassname(st,var,"ClassName")+"\" action=\"bypass -h Quest " +QUEST_INFO + " confirm "+str(i)+"\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr><br>"
- HTML_MESSAGE += "</table></td></tr></table></td></tr>"
- HTML_MESSAGE += "</center></body></html>"
- return HTML_MESSAGE
- def MainHtmlIV(st,case) :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td></td></tr>"
- HTML_MESSAGE += generateRace(st,case)
- HTML_MESSAGE += "</center></body></html>"
- return HTML_MESSAGE
- def generateRace(st,raceclass) :
- if raceclass == "0": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">HUMANO</font></td></tr>"
- if raceclass == "1": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">ELFO</font></td></tr>"
- if raceclass == "2": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">ELFO OSCURO</font></td></tr>"
- if raceclass == "3": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">ORCO</font></td></tr>"
- if raceclass == "4": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">ENANO</font></td></tr>"
- HTML += "<tr><td></td></tr></table><br><img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- if raceclass == "4": HTML += "<tr><td align=\"center\"><font color=\"0088EE\">Guerrero</font></td></tr>"
- else: HTML += "<tr><td align=\"left\"><font color=\"0088EE\">Guerrero Mago</font></td></tr>"
- HTML += "<tr><td width=250 align=\"center\"><table width=240 border=0><tr><td width=240 align=\"center\"><table width=235 border=0><tr>"
- if raceclass == "0":
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"92"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 92\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"98"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 98\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"93"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 93\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"97"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 97\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"88"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 88\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"96"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 96\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"89"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 89\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"95"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 95\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"90"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 90\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"94"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 94\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"91"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 91\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- if raceclass == "1":
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"102"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 102\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"105"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 105\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"101"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 101\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"103"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 103\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"100"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 100\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"104"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 104\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"99"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 99\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- if raceclass == "2":
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"109"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 109\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"112"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 112\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"108"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 108\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"110"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 110\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"107"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 107\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"111"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 111\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"106"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 106\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- if raceclass == "3":
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"114"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 114\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"116"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 116\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "<tr><td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"113"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 113\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td>"
- if raceclass == "4":
- HTML += "<td align=\"center\"><button value=\""+getclassname(st,getparentclass(st,"117"),"ClassName")+"\" action=\"bypass -h Quest " + QUEST_INFO + " confirm 117\" width=100 height=20 back=\"sek.cbui94\" fore=\"sek.cbui92\"></td></tr>"
- HTML += "</table></td></tr></table></td></tr>"
- return HTML
- def Confirmation(st,case,case1,case2):
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font><br>"
- HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"LEVEL\">Confirmacion</font></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr>"
- if int(case) == 1 :
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">Realmente quieres agregar la</font><br1><font color=\"0088EE\">subclase de <font color=\"LEVEL\">"+getclassname(st,case1,"ClassName")+"</font>?</font></td></tr>"
- if int(case) == 3 :
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">Realmente quieres borrar la<br1>subclase de <font color=\"LEVEL\">"+getclassname(st,getVar(st,"subclassid"+case2),"ClassName")+"</font>?</td></tr>"
- HTML_MESSAGE += "<tr><td></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br><br>"
- HTML_MESSAGE += "<button value=\"Si\" action=\"bypass -h Quest "+QUEST_INFO+" "+case1+" "+case2+"\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"
- HTML_MESSAGE += "<button value=\"No\" action=\"bypass -h Quest "+QUEST_INFO+" gethtml "+case+"\" width=75 height=21 back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">"
- HTML_MESSAGE += "</center></body></html>"
- return HTML_MESSAGE
- def complete(st) :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"00FF00\">Felicitaciones</font></td></tr>"
- HTML_MESSAGE += "<tr><td></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"00FF00\">El cambio se realizo exitosamente</font></td></tr>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
- HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">Para completar el cambio</font><br1><font color=\"0088EE\">Debes reiniciar el juego.</font></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1>"
- HTML_MESSAGE += "</center></body></html>"
- if getblocktime(st) == True : pass
- return HTML_MESSAGE
- def errasecomplete(st) :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">La clase escogida ha sido borrada</font></td></tr>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
- HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"00FF00\">Es aconsejable reiniciar el juego</font></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1>"
- HTML_MESSAGE += "</center></body></html>"
- if getblocktime(st) == True : pass
- return HTML_MESSAGE
- def errordeclasse(st,case,case2) :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font><br>"
- HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF5500\">Error</font></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr>"
- if int(case) >= 88 :
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No se puede agregar la subclase de</font><br1><font color=\"LEVEL\">"+getclassname(st,case2,"ClassName")+"</font>. Habla a un Grand<br1>Master y cambia de subclase antes.</td></tr>"
- else:
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No se puede "+case2+" la subclase de<br1><font color=\"LEVEL\">"+getclassname(st,getVar(st,"subclassid"+case),"ClassName")+"</font>. Habla a un Grand<br1>Master y cambia de subclase antes.</td></tr>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1>"
- HTML_MESSAGE += "</center></body></html>"
- if getblocktime(st) == True : pass
- return HTML_MESSAGE
- def errordeduplicado(st,numero) :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font><br>"
- HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF5500\">Error</font></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
- HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No se puede agregar la subclase de</font><br1><font color=\"LEVEL\">"+getclassname(st,numero,"ClassName")+"</font>.<br1><font color=\"FF7700\">Actualmente ya tienes esta subclase.</font></td></tr>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1>"
- HTML_MESSAGE += "</center></body></html>"
- if getblocktime(st) == True : pass
- return HTML_MESSAGE
- def comunerrors(st,case) :
- HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
- HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font><br>"
- HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF5500\">Error</font></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=240 height=1><br>"
- HTML_MESSAGE += "<table width=240 border=0 bgcolor=444444>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr>"
- if case == "0": HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No tienes los minimos Items requeridos<br1>de este NPC. Regresa cuando tengas<br1><font color=\"LEVEL\">"+str(Item2_Num)+" "+str(getitemname(st,Item2_Req))+".</font></td></tr>"
- if case == "1": HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No tienes los minimos Items requeridos.<br1>Necesitas <font color=\"LEVEL\">"+str(Item1_Num)+" "+str(getitemname(st,Item1_Req))+"</font></td></tr>"
- if case == "2": HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No tienes los minimos Items requeridos.<br1>Necesitas <font color=\"LEVEL\">"+str(Item2_Num)+" "+str(getitemname(st,Item2_Req))+"</font></td></tr>"
- if case == "3": HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No tienes los minimos Items requeridos.<br1>Necesitas <font color=\"LEVEL\">"+str(Item3_Num)+" "+str(getitemname(st,Item3_Req))+"</font></td></tr>"
- if case == "4": HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No eres elegible para agregar una<br1>Subclase en este momento.</font><br1><font color=\"FF7700\">Tu level debe ser </font><font color=\"LEVEL\">"+str(MinLevel)+" o Superior.</font></td></tr>"
- if case == "5":
- if AllowThirdJob == True: HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No eres elegible para hacer ninguna<br1>accion en este momento. Primero<br1>debes tener <font color=\"LEVEL\">3ra Profesion</font></td></tr>"
- else: HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No eres elegible para hacer ninguna</font><br1><font color=\"FF7700\">accion en este momento. Primero</font><br1><font color=\"FF7700\">debes tener</font> <font color=\"LEVEL\">2da o 3ra Profesion</font></td></tr>"
- if case == "6": HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF7700\">No eres elegible para agregar una<br1>Subclase en este momento.<br1>Debes ser <font color=\"LEVEL\">Nobles</font> primero.</td></tr>"
- HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
- HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=240 height=1>"
- HTML_MESSAGE += "</center></body></html>"
- if getblocktime(st) == True : pass
- return HTML_MESSAGE
- def getblocktime(st):
- if Block == True and not st.player.isGM() :
- endtime = int(System.currentTimeMillis()/1000) + BlockTime
- st.set("blockUntilTime",str(endtime))
- st.getPlayer().sendPacket(SetupGauge(3, BlockTime * 1000 + 300))
- val = True
- return val
- def getVar(st,const):
- conn=L2DatabaseFactory.getInstance().getConnection()
- act = conn.prepareStatement("SELECT * FROM subclass_list WHERE player_id="+getmultisubs(st))
- rs=act.executeQuery()
- val = "-1"
- if rs :
- rs.next()
- try :
- val = rs.getString(const)
- conn.close()
- except :
- try : conn.close()
- except: pass
- return val
- def getsubsammount(st):
- j=-1
- for i in range(maxsubsindb + 1):
- var = getVar(st,"subclassid"+str(i))
- if int(var) >= 0 and int(var) <= 136:
- j+=1
- return j
- def getVarcharacters(st,const):
- conn=L2DatabaseFactory.getInstance().getConnection()
- act = conn.prepareStatement("SELECT * FROM characters WHERE obj_Id="+str(st.getPlayer().getObjectId()))
- rs=act.executeQuery()
- val = "0"
- if rs :
- rs.next()
- try :
- val = rs.getString(const)
- conn.close()
- except :
- try : conn.close()
- except: pass
- return val
- def getVarcharactersubs(st):
- conn=L2DatabaseFactory.getInstance().getConnection()
- act = conn.prepareStatement("SELECT * FROM subclass_list WHERE player_id="+getmultisubs(st))
- rs=act.executeQuery()
- val = ""
- if rs :
- rs.next()
- for i in range(maxsubsindb + 1):
- try : val += rs.getString("subclassid"+str(i)) + " "
- except : val += str(st.player.getClassId().getId()) + " "
- try : conn.close()
- except: pass
- val+= "-1"
- return val
- def getclassname(st,case1,case2):
- conn=L2DatabaseFactory.getInstance().getConnection()
- act = conn.prepareStatement("SELECT * FROM char_templates WHERE ClassId="+case1)
- rs=act.executeQuery()
- if rs :
- rs.next()
- try :
- val = rs.getString(case2)
- conn.close()
- except :
- val = "0"
- try : conn.close()
- except: pass
- else : val = "0"
- return val
- def getitemname(st,itemval):
- conn=L2DatabaseFactory.getInstance().getConnection()
- itemidList = conn.prepareStatement("SELECT * FROM etcitem WHERE item_id="+str(itemval))
- il=itemidList.executeQuery()
- if il :
- il.next()
- try :
- val = il.getString("name")
- conn.close()
- except :
- val = "0"
- try : conn.close()
- except: pass
- else : val = "0"
- return val
- def getparentclass(st,case):
- val=case
- if AllowThirdJob == False:
- conn=L2DatabaseFactory.getInstance().getConnection()
- parentid = conn.prepareStatement("SELECT * FROM class_list WHERE id = \""+case+"\"")
- pi=parentid.executeQuery()
- if pi :
- pi.next()
- try : val = pi.getString("parent_id")
- except : pass
- try : conn.close()
- except: pass
- return val
- def getmaxskilllevel(st,case):
- val= 0
- com=L2DatabaseFactory.getInstance().getConnection()
- lvlskillid = com.prepareStatement("SELECT * FROM skill_trees WHERE skill_id = \""+case+"\" AND min_level <= \"85\" ORDER BY level DESC LIMIT 1")
- lvl=lvlskillid.executeQuery()
- if lvl :
- lvl.next()
- try :
- val = lvl.getInt("level")
- com.close()
- except :
- try : com.close()
- except: pass
- return val
- def getmultisubs(st):
- val= str(st.getPlayer().getObjectId()) + " LIMIT 1"
- if AllowMultiSubs == True:
- val= str(st.getPlayer().getObjectId()) +" AND sub_index=" + str(st.player.getClassIndex()) +" LIMIT 1"
- return val
- def getmaster(st):
- xi="class";xe="l";xf="e";xg="n";xa="B";xb="y";xc=" ";xd="A";xk="ter";xh="Sub";xj="Mas";val=xh+xi+xc+xj+xk+xc+xa+xb+xc+xd+xe+xe+xf+xg
- #val="titulo"
- return val
- def resetskills(st):
- parametros = "\"-1\""; j=-1
- subs=getVarcharactersubs(st)
- SubSplit = subs.split(" ")
- for k in range(maxsubsindb + 1):
- conn=L2DatabaseFactory.getInstance().getConnection()
- if int(SubSplit[int(k)]) >= 0 and int(SubSplit[int(k)]) <= 136: j+=1
- if int(SubSplit[int(k)]) >= 0 and int(SubSplit[int(k)]) <= 136 and SubsNumber >= j:
- xclassid = int(SubSplit[int(k)])
- skillidList = conn.prepareStatement("SELECT * FROM class_list WHERE id = \""+str(xclassid)+"\"")
- sil=skillidList.executeQuery()
- while (sil.next()) :
- try :
- parametros+=",\"" +str(xclassid)+ "\""
- xclassid = sil.getInt("parent_id")
- skillidList = conn.prepareStatement("SELECT * FROM class_list WHERE id = \""+str(xclassid)+"\"")
- sil=skillidList.executeQuery()
- except : pass
- try: conn.close()
- except : pass
- conn=L2DatabaseFactory.getInstance().getConnection()
- listskillid = conn.prepareStatement("SELECT * FROM skill_trees WHERE class_id IN ("+parametros+") AND min_level <= \"85\" ORDER BY skill_id DESC, level DESC")
- lis=listskillid.executeQuery()
- xskill = 0; cskill = 0; i=0
- availableSkillsB = ""
- while (lis.next()) :
- try :
- xskill = lis.getInt("skill_id")
- if xskill != cskill :
- xlevel = lis.getInt("level")
- cskill = xskill
- i=i+1
- availableSkillsB += str(xskill)+"_"+str(xlevel)+" "
- except : pass
- availableSkillsB+= "0_0"
- xvar="AND skill_id NOT BETWEEN \"1312\" AND \"1315\" AND skill_id NOT BETWEEN \"1368\" AND \"1372\""
- if st.player.isGM(): xvar+=" AND skill_id NOT BETWEEN \"7029\" AND \"7064\""
- listallskill = conn.prepareStatement("SELECT * FROM character_skills WHERE char_obj_id =\""+str(st.player.getObjectId())+"\" AND class_index =\""+str(st.player.getClassIndex())+"\" "+xvar+"")
- las=listallskill.executeQuery()
- availableSkillsA = []
- while (las.next()) :
- try :
- xskill = las.getInt("skill_id")
- xlevel = las.getInt("skill_level")
- availableSkillsA += [str(xskill)+"_"+str(xlevel)]
- except : pass
- try : conn.close()
- except : pass
- try :
- skillSplit = availableSkillsB.split(" ")
- for avSkillsA in availableSkillsA :
- j=0; temp=0
- while j <= i:
- j=j+1
- parametro = skillSplit[j-1].replace("_"," ")
- skillSplitB = parametro.split(" ")
- avSkillsA = avSkillsA.replace("_"," ")
- skillSplitA = avSkillsA.split(" ")
- if int(skillSplitB[0]) == int(skillSplitA[0]):
- temp=1
- if int(skillSplitA[1]) < 100 :
- if int(skillSplitB[1]) < int(skillSplitA[1]):
- re = SkillTable.getInstance().getInfo(int(skillSplitA[0]), int(skillSplitA[1]))
- st.player.removeSkill(re)
- sk = SkillTable.getInstance().getInfo(int(skillSplitB[0]), int(skillSplitB[1]))
- st.player.addSkill(sk, True)
- st.player.sendMessage("El skill "+sk.getName()+" fue reparado.")
- else:
- if int(skillSplitB[1]) < getmaxskilllevel(st,skillSplitB[0]):
- re = SkillTable.getInstance().getInfo(int(skillSplitA[0]), int(skillSplitA[1]))
- st.player.removeSkill(re)
- sk = SkillTable.getInstance().getInfo(int(skillSplitB[0]), int(skillSplitB[1]))
- st.player.addSkill(sk, True)
- st.player.sendMessage("El skill "+sk.getName()+" fue reparado.")
- if temp == 0 :
- sk = SkillTable.getInstance().getInfo(int(skillSplitA[0]), int(skillSplitA[1]))
- st.player.removeSkill(sk)
- st.player.sendMessage("El skill "+sk.getName()+" fue removido.")
- except : st.player.sendMessage("No tienes skilles para remover")
- st.player.getSkillList()
- if st.player.isNoble(): st.player.setNoble(True)
- if st.player.isHero(): st.player.setHero(True)
- val=0
- return val
- class Quest (JQuest) :
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
- def onEvent(self,event,st):
- eventSplit = event.split(" ")
- event = eventSplit[0]
- eventParam1 = eventSplit[1]
- if event == "escraza": return MainHtmlIV(st,eventParam1)
- if event == "confirm":
- if int(eventParam1) >= 88: return Confirmation(st,"1",getparentclass(st,eventParam1),eventParam1)
- else: return Confirmation(st,"3","deletesub",eventParam1)
- if event == "gethtml":
- if eventParam1 == "1":
- if AllowAllSubs == False :
- if AllowMutantRetail == False and st.player.isSubClassActive(): return MainHtmlIV(st,getclassname(st,str(st.player.getClassId().getId()),"RaceId"))
- else: return MainHtmlIV(st,getVarcharacters(st,"race"))
- else: return MainHtmlI(st)
- if eventParam1 == "2": return MainHtmlII(st)
- if eventParam1 == "3": return MainHtmlIII(st)
- return
- temp = getVar(st,"currentsub")
- temp2 = getVar(st,"sub_index")
- temp3 = str(st.player.getClassIndex())
- temp4 = str(st.player.getClassId().getId())
- if event == "camb":
- if temp2!=temp3: return errordeclasse(st,eventParam1,"switch a")
- if st.getPlayer().getClassId().level() < 2 and AllowThirdJob == False or st.getPlayer().getClassId().level() < 3 and AllowThirdJob == True : return comunerrors(st,"5")
- if st.getQuestItemsCount(Item1_Req) < Item1_Num and ReqItems == True: return comunerrors(st,"1")
- else:
- conn=L2DatabaseFactory.getInstance().getConnection()
- upd=conn.prepareStatement("UPDATE subclass_list SET subclassid"+temp+"="+temp4+", currentsub="+eventParam1+" WHERE player_id="+getmultisubs(st))
- try :
- upd.executeUpdate()
- upd.close()
- conn.close()
- except :
- try : conn.close()
- except : pass
- if resetskills(st) == 1: pass
- st.player.setClassId(int(getVar(st,"subclassid"+eventParam1)))
- if not st.player.isSubClassActive(): st.player.setBaseClass(int(getVar(st,"subclassid"+eventParam1)))
- if ReqItems == True and not st.player.isGM(): st.takeItems(Item1_Req,Item1_Num)
- st.player.store()
- st.player.broadcastUserInfo()
- return complete(st)
- st.exitQuest(1)
- if event == "deletesub":
- if temp2!=temp3: return errordeclasse(st,eventParam1,"borrar")
- if st.getPlayer().getClassId().level() < 2 and AllowThirdJob == False or st.getPlayer().getClassId().level() < 3 and AllowThirdJob == True : return comunerrors(st,"5")
- if st.getQuestItemsCount(Item3_Req) < Item3_Num and ReqItems == True and not st.player.isGM() : return comunerrors(st,"3")
- else:
- conn=L2DatabaseFactory.getInstance().getConnection()
- upd=conn.prepareStatement("UPDATE subclass_list SET subclassid"+temp+"="+temp4+", currentsub="+temp+" WHERE player_id="+getmultisubs(st))
- try :
- upd.executeUpdate()
- upd.close()
- conn.close()
- except :
- try : conn.close()
- except : pass
- if eventParam1 == temp and getsubsammount(st) > 0:
- j=0
- for i in range(maxsubsindb + 1):
- var = getVar(st,"subclassid"+str(i))
- if int(var) >= 0 and int(var) <= 136 and j == 0 and str(i) != temp:
- j+=1; idsubclass = var; temp=str(i)
- st.player.setClassId(int(idsubclass))
- if not st.player.isSubClassActive(): st.player.setBaseClass(int(idsubclass))
- con=L2DatabaseFactory.getInstance().getConnection()
- if getsubsammount(st) <= 1: rem=con.prepareStatement("DELETE FROM subclass_list WHERE player_id="+getmultisubs(st))
- else: rem = con.prepareStatement("UPDATE subclass_list SET subclassid"+eventParam1+"=-1 ,currentsub="+temp+" WHERE player_id="+getmultisubs(st))
- try : rem.executeUpdate()
- except : pass
- try : con.close()
- except : pass
- if resetskills(st) == 1: pass
- if ReqItems == True and not st.player.isGM(): st.takeItems(Item3_Req,Item3_Num)
- st.player.store()
- st.player.broadcastUserInfo()
- return errasecomplete(st)
- st.exitQuest(1)
- else:
- if temp2!=temp3 and getsubsammount(st) >= 0 : return errordeclasse(st,eventParam1,event)
- if AllowOnlyNobles == True and not st.player.isGM() :
- if not st.player.isNoble() : return comunerrors(st,"6")
- if st.getQuestItemsCount(Item2_Req) < Item2_Num and ReqItems == True and not st.player.isGM() : return comunerrors(st,"2")
- if st.getPlayer().getLevel() < MinLevel and not st.player.isGM() : return comunerrors(st,"4")
- if st.getPlayer().getClassId().level() < 2 and AllowThirdJob == False or st.getPlayer().getClassId().level() < 3 and AllowThirdJob == True : return comunerrors(st,"5")
- else:
- if temp4 == eventParam1 or temp4 == event : return errordeduplicado(st,event)
- else:
- con=L2DatabaseFactory.getInstance().getConnection()
- if getsubsammount(st) == -1 :
- ins = con.prepareStatement("INSERT INTO subclass_list (player_id,currentsub,sub_index,subclassid0,subclassid1) VALUES (?,?,?,?,?)")
- ins.setString(1, str(st.player.getObjectId()))
- ins.setString(2, "1")
- ins.setString(3, str(st.player.getClassIndex()))
- ins.setString(4, temp4)
- ins.setString(5, event)
- else:
- temp6 = "-1"; j=0
- for i in range(maxsubsindb + 1):
- var = getVar(st,"subclassid"+str(i))
- if var == eventParam1 or var == event: return errordeduplicado(st,event)
- if int(var) < 0 or int(var) > 136:
- if temp6 == "-1" and j==0:
- j+=1
- temp6 = str(i)
- ins = con.prepareStatement("UPDATE subclass_list SET subclassid"+temp6+"="+event+", subclassid"+temp+"="+temp4+", currentsub="+temp6+" WHERE player_id="+getmultisubs(st))
- try :
- ins.executeUpdate()
- ins.close()
- con.close()
- except : pass
- if resetskills(st) == 1: pass
- if ReqItems == True and not st.player.isGM() : st.takeItems(Item2_Req,Item2_Num)
- if DecLevel == True and not st.player.isGM() :
- pXp = st.player.getExp()
- tXp = Experience.LEVEL[lvl]
- if pXp > tXp: st.player.removeExpAndSp(pXp - tXp, 0)
- st.player.setClassId(int(event))
- if not st.player.isSubClassActive(): st.player.setBaseClass(int(event))
- st.player.store()
- st.player.broadcastUserInfo()
- return complete(st)
- st.exitQuest(1)
- def onFirstTalk (self,npc,player):
- st = player.getQuestState(QUEST_INFO)
- if not st : st = self.newQuestState(player)
- if player.isGM(): return MainHtml(st)
- if int(System.currentTimeMillis()/1000) > st.getInt("blockUntilTime"): return MainHtml(st)
- QUEST = Quest(QuestId,QUEST_INFO,QuestDesc)
- CREATED = State('Start', QUEST)
- STARTED = State('Started', QUEST)
- QUEST.setInitialState(CREATED)
- for npcId in NPC:
- QUEST.addStartNpc(npcId)
- QUEST.addFirstTalkId(npcId)
- QUEST.addTalkId(npcId),
- '855_SubclassNpc'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement