Advertisement
Guest User

__init__py

a guest
Sep 6th, 2015
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 43.32 KB | None | 0 0
  1. import sys
  2. from java.lang import System
  3. from java.util import Iterator
  4. from net.sf.l2j import L2DatabaseFactory
  5. from net.sf.l2j.gameserver.model.quest import State
  6. from net.sf.l2j.gameserver.model.quest import QuestState
  7. from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
  8. from net.sf.l2j.gameserver.serverpackets import CharInfo
  9. from net.sf.l2j.gameserver.serverpackets import UserInfo
  10. from net.sf.l2j.gameserver.serverpackets import SetupGauge
  11. from net.sf.l2j.gameserver.model.base import ClassId
  12. from net.sf.l2j.gameserver.model.base import Experience
  13. from net.sf.l2j.gameserver.model.actor.instance import L2PcInstance
  14. from net.sf.l2j.gameserver.datatables import SkillTable
  15. from net.sf.l2j.gameserver.datatables import SkillTreeTable
  16. from net.sf.l2j.gameserver.model import L2Skill
  17.  
  18. NPC = [100007]
  19. QuestId = 850
  20. QuestName = "Subclass"
  21. QuestDesc = "custom"
  22. QUEST_INFO = str(QuestId)+"_"+QuestName
  23.  
  24. print "INFO Loaded ClassMaster NPC"
  25. #---------------------------------------------------------------------------------------------------------------------------------------------------
  26. # Configuraciones
  27. #---------------------------------------------------------------------------------------------------------------------------------------------------
  28.  
  29. #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.
  30. #Dentro del SQL encontrarás algunas variables llamadas SubclassidX. Solo tienes que cambiar la "X" incrementando su valor.
  31. #Este valor no debería ser cambiado si no deseas incrementar el número de subclases a un valor mayor a 3.
  32. #Aumentar o disminuir el valor de "maxsubsindb" sin haber hecho los pasos anteriores pueden provocar errores. Ten cuidadoso!.
  33. maxsubsindb = 3
  34.  
  35. # Número de Subclases que pueden ser añadidas. su valor debe ser menor o igual a "maxsubsindb".
  36. SubsNumber = 3
  37.  
  38. # True, Permite añadir subclases acumulativas en todas las subclases originales del juego osea en la Mainclass y todas las retails.
  39. # False, Permite añadir subclases acumulativas en solo unas de las subclases originales del juego ya sea la Mainclass o una de las retails.
  40. AllowMultiSubs = False
  41.  
  42. # True, Permite cualquier subclase acumulativa. False, Solo permite añadir subclases de tu propia raza (No Mutantes).
  43. AllowAllSubs = True
  44.  
  45. #La siguiente opción funciona si "AllowAllSubs = False", también se requiere que estes usando una subclase original del juego (Retail).
  46. #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.
  47. AllowMutantRetail = True
  48.  
  49. #True, permite borrar la mainclass o cualquiera de las subclases añadidas. False, solo permite borrar las subclases añadidas.
  50. AllowDelMainClass = False
  51.  
  52. # Es el mínimo level requerido para añadir una subclase. Predeterminado: 76
  53. MinLevel = 75
  54.  
  55. #True, Permite añadir subclases solo si el personaje es nobles. False, de lo contrario.
  56. AllowOnlyNobles = False
  57.  
  58. #True, Permite añadir, borrar o switchear cualquier subclase, solo si posees los Items requeridos. False, de lo contrario
  59. ReqItems = False
  60.  
  61. #Item requerido para hacer switch entre las subclases. Predeterminado: 57 (Adena)
  62. #Cantidad de Items requeridos.
  63. Item1_Req = 57
  64. Item1_Num = 1000000
  65.  
  66. #Item requerido para añadir una subclase.
  67. #Cantidad de Items requeridos.
  68. Item2_Req = 4356
  69. Item2_Num = 5000
  70.  
  71. #Item requerido para borrar una subclase.
  72. #Cantidad de Items requeridos.
  73. Item3_Req = 4356
  74. Item3_Num = 1000
  75.  
  76. # True: Activa la opción de cambiar el level del personaje después de añadir una subclase
  77. # False: No cambia el level del personaje después de añadir una subclase. Predeterminado: True
  78. DecLevel= True
  79.  
  80. # 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.
  81. # 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.
  82. AllowThirdJob = False
  83.  
  84. #Level al cual el personaje será cambiado después de añadir una subclase. Predeterminado: 40
  85. lvl= 40
  86.  
  87. # True: El usuario deberá esperar un tiempo antes de poder hacer una acción. Predeterminado: True
  88. # False: El usuario puede realizar cualquier acción sin ninguna restricción. No se recomienda
  89. Block = True
  90.  
  91. #Blocking time in seconds before take any action.
  92. BlockTime = 20
  93.  
  94. #---------------------------------------------------------------------------------------------------------------------------------------------------
  95.  
  96. def MainHtml(st) :
  97. xsubsamount=getsubsammount(st)
  98. if xsubsamount >= 0 :
  99. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  100. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
  101. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  102. HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
  103. HTML_MESSAGE += "<tr><td></td></tr>"
  104. HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> Antes de realizar una accion, asegurate</font></td></tr>"
  105. HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> de quitarte todos los items y tener el </font></td></tr>"
  106. HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> nivel necesario.</font></td></tr>"
  107. if ReqItems == True:
  108. HTML_MESSAGE += "<tr><td align=\"left\"><font color=\"0088EE\"> Ademas necesitas los Items requeridos.</font></td></tr>"
  109. HTML_MESSAGE += "<tr><td><br></td></tr>"
  110. 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>"
  111. 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>"
  112. 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>"
  113. HTML_MESSAGE += "<tr><td></td></tr></table><br>"
  114. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  115. HTML_MESSAGE += "<tr><td width=90 align=\"center\"><table width=90 border=0><tr><td width=90 align=\"center\"><table width=85 border=0>"
  116. if xsubsamount < SubsNumber :
  117. 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>"
  118. HTML_MESSAGE += "</table></td></tr></table></td></tr>"
  119. HTML_MESSAGE += "</center></body></html>"
  120. return HTML_MESSAGE
  121. else:
  122. if st.getQuestItemsCount(Item2_Req) < Item2_Num and ReqItems == True: return comunerrors(st,"0")
  123. if AllowAllSubs == False :
  124. if AllowMutantRetail == False and st.player.isSubClassActive(): return MainHtmlIV(st,getclassname(st,str(st.player.getClassId().getId()),"RaceId"))
  125. else: return MainHtmlIV(st,getVarcharacters(st,"race"))
  126. else: return MainHtmlI(st)
  127.  
  128. def MainHtmlI(st) :
  129. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  130. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
  131. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  132. HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
  133. HTML_MESSAGE += "<tr><td></td></tr>"
  134. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">Elige una Raza</font></td></tr>"
  135. HTML_MESSAGE += "<tr><td></td></tr></table><br>"
  136. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br><br>"
  137. HTML_MESSAGE += "<tr><td width=110 align=\"center\"><table width=110 border=0><tr><td width=110 align=\"center\"><table width=105 border=0>"
  138. 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>"
  139. 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>"
  140. 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>"
  141. 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>"
  142. 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>"
  143. HTML_MESSAGE += "</table></td></tr></table></td></tr>"
  144. HTML_MESSAGE += "</center></body></html>"
  145. return HTML_MESSAGE
  146.  
  147. def MainHtmlII(st) :
  148. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  149. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
  150. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  151. HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
  152. HTML_MESSAGE += "<tr><td></td></tr>"
  153. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">Elige una subclase para hacer Switch</font></td></tr>"
  154. HTML_MESSAGE += "<tr><td></td></tr></table><br>"
  155. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br><br>"
  156. HTML_MESSAGE += "<tr><td width=110 align=\"center\"><table width=110 border=0><tr><td width=110 align=\"center\"><table width=105 border=0>"
  157. temp = getVar(st,"currentsub"); j=-1
  158. for i in range(maxsubsindb + 1):
  159. var = getVar(st,"subclassid"+str(i))
  160. if int(var) >= 0 and int(var) <= 136:
  161. j+=1
  162. if temp != str(i) and SubsNumber >= j:
  163. 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>"
  164. HTML_MESSAGE += "</table></td></tr></table></td></tr>"
  165. HTML_MESSAGE += "</center></body></html>"
  166. return HTML_MESSAGE
  167.  
  168. def MainHtmlIII(st) :
  169. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  170. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
  171. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  172. HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
  173. HTML_MESSAGE += "<tr><td></td></tr>"
  174. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">Elige la subclase que deseas Borrar</font></td></tr>"
  175. HTML_MESSAGE += "<tr><td></td></tr></table><br>"
  176. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br><br>"
  177. HTML_MESSAGE += "<tr><td width=110 align=\"center\"><table width=110 border=0><tr><td width=110 align=\"center\"><table width=105 border=0>"
  178. j=-1
  179. for i in range(maxsubsindb + 1):
  180. var = getVar(st,"subclassid"+str(i))
  181. if int(var) >= 0 and int(var) <= 136:
  182. if i == 0 and AllowDelMainClass == False: pass
  183. else:
  184. j+=1
  185. if SubsNumber >= j:
  186. 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>"
  187. HTML_MESSAGE += "</table></td></tr></table></td></tr>"
  188. HTML_MESSAGE += "</center></body></html>"
  189. return HTML_MESSAGE
  190.  
  191. def MainHtmlIV(st,case) :
  192. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  193. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
  194. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  195. HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
  196. HTML_MESSAGE += "<tr><td></td></tr>"
  197. HTML_MESSAGE += generateRace(st,case)
  198. HTML_MESSAGE += "</center></body></html>"
  199. return HTML_MESSAGE
  200.  
  201. def generateRace(st,raceclass) :
  202. if raceclass == "0": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">HUMANO</font></td></tr>"
  203. if raceclass == "1": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">ELFO</font></td></tr>"
  204. if raceclass == "2": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">ELFO OSCURO</font></td></tr>"
  205. if raceclass == "3": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">ORCO</font></td></tr>"
  206. if raceclass == "4": HTML = "<tr><td align=\"center\"><font color=\"0088EE\">ENANO</font></td></tr>"
  207. HTML += "<tr><td></td></tr></table><br><img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  208. if raceclass == "4": HTML += "<tr><td align=\"center\"><font color=\"0088EE\">Guerrero</font></td></tr>"
  209. else: HTML += "<tr><td align=\"left\"><font color=\"0088EE\">Guerrero Mago</font></td></tr>"
  210. HTML += "<tr><td width=250 align=\"center\"><table width=240 border=0><tr><td width=240 align=\"center\"><table width=235 border=0><tr>"
  211.  
  212. if raceclass == "0":
  213. 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>"
  214. 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>"
  215. 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>"
  216. 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>"
  217. 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>"
  218. 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>"
  219. 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>"
  220. 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>"
  221. 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>"
  222. 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>"
  223. 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>"
  224. if raceclass == "1":
  225. 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>"
  226. 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>"
  227. 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>"
  228. 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>"
  229. 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>"
  230. 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>"
  231. 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>"
  232. if raceclass == "2":
  233. 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>"
  234. 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>"
  235. 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>"
  236. 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>"
  237. 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>"
  238. 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>"
  239. 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>"
  240. if raceclass == "3":
  241. 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>"
  242. 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>"
  243. 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>"
  244. if raceclass == "4":
  245. 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>"
  246. HTML += "</table></td></tr></table></td></tr>"
  247. return HTML
  248.  
  249. def Confirmation(st,case,case1,case2):
  250. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  251. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font><br>"
  252. HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
  253. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"LEVEL\">Confirmacion</font></td></tr></table><br>"
  254. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  255. HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
  256. HTML_MESSAGE += "<tr><td><br><br></td></tr>"
  257. if int(case) == 1 :
  258. 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>"
  259. if int(case) == 3 :
  260. 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>"
  261. HTML_MESSAGE += "<tr><td></td></tr></table><br>"
  262. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br><br>"
  263. 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\">"
  264. 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\">"
  265. HTML_MESSAGE += "</center></body></html>"
  266. return HTML_MESSAGE
  267.  
  268. def complete(st) :
  269. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  270. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
  271. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  272. HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
  273. HTML_MESSAGE += "<tr><td><br><br></td></tr>"
  274. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"00FF00\">Felicitaciones</font></td></tr>"
  275. HTML_MESSAGE += "<tr><td></td></tr>"
  276. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"00FF00\">El cambio se realizo exitosamente</font></td></tr>"
  277. HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
  278. HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
  279. 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>"
  280. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1>"
  281. HTML_MESSAGE += "</center></body></html>"
  282. if getblocktime(st) == True : pass
  283. return HTML_MESSAGE
  284.  
  285. def errasecomplete(st) :
  286. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  287. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font>"
  288. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  289. HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
  290. HTML_MESSAGE += "<tr><td><br><br></td></tr>"
  291. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"0088EE\">La clase escogida ha sido borrada</font></td></tr>"
  292. HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
  293. HTML_MESSAGE += "<table width=250 border=0 bgcolor=444444>"
  294. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"00FF00\">Es aconsejable reiniciar el juego</font></td></tr></table><br>"
  295. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1>"
  296. HTML_MESSAGE += "</center></body></html>"
  297. if getblocktime(st) == True : pass
  298. return HTML_MESSAGE
  299.  
  300. def errordeclasse(st,case,case2) :
  301. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  302. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font><br>"
  303. HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
  304. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF5500\">Error</font></td></tr></table><br>"
  305. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  306. HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
  307. HTML_MESSAGE += "<tr><td><br><br></td></tr>"
  308. if int(case) >= 88 :
  309. 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>"
  310. else:
  311. 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>"
  312. HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
  313. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1>"
  314. HTML_MESSAGE += "</center></body></html>"
  315. if getblocktime(st) == True : pass
  316. return HTML_MESSAGE
  317.  
  318. def errordeduplicado(st,numero) :
  319. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  320. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font><br>"
  321. HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
  322. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF5500\">Error</font></td></tr></table><br>"
  323. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1><br>"
  324. HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
  325. HTML_MESSAGE += "<tr><td><br><br></td></tr>"
  326. 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>"
  327. HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
  328. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=250 height=1>"
  329. HTML_MESSAGE += "</center></body></html>"
  330. if getblocktime(st) == True : pass
  331. return HTML_MESSAGE
  332.  
  333. def comunerrors(st,case) :
  334. HTML_MESSAGE = "<html><head><title>Subclass Master</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  335. HTML_MESSAGE += "<font color=\"303030\">"+getmaster(st)+"</font><br>"
  336. HTML_MESSAGE += "<table width=260 border=0 bgcolor=444444>"
  337. HTML_MESSAGE += "<tr><td align=\"center\"><font color=\"FF5500\">Error</font></td></tr></table><br>"
  338. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=240 height=1><br>"
  339. HTML_MESSAGE += "<table width=240 border=0 bgcolor=444444>"
  340. HTML_MESSAGE += "<tr><td><br><br></td></tr>"
  341. 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>"
  342. 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>"
  343. 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>"
  344. 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>"
  345. 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>"
  346. if case == "5":
  347. 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>"
  348. 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>"
  349. 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>"
  350. HTML_MESSAGE += "<tr><td><br><br></td></tr></table><br>"
  351. HTML_MESSAGE += "<img src=\"L2UI.SquareGray\" width=240 height=1>"
  352. HTML_MESSAGE += "</center></body></html>"
  353. if getblocktime(st) == True : pass
  354. return HTML_MESSAGE
  355.  
  356. def getblocktime(st):
  357. if Block == True and not st.player.isGM() :
  358. endtime = int(System.currentTimeMillis()/1000) + BlockTime
  359. st.set("blockUntilTime",str(endtime))
  360. st.getPlayer().sendPacket(SetupGauge(3, BlockTime * 1000 + 300))
  361. val = True
  362. return val
  363.  
  364. def getVar(st,const):
  365. conn=L2DatabaseFactory.getInstance().getConnection()
  366. act = conn.prepareStatement("SELECT * FROM subclass_list WHERE player_id="+getmultisubs(st))
  367. rs=act.executeQuery()
  368. val = "-1"
  369. if rs :
  370. rs.next()
  371. try :
  372. val = rs.getString(const)
  373. conn.close()
  374. except :
  375. try : conn.close()
  376. except: pass
  377. return val
  378.  
  379. def getsubsammount(st):
  380. j=-1
  381. for i in range(maxsubsindb + 1):
  382. var = getVar(st,"subclassid"+str(i))
  383. if int(var) >= 0 and int(var) <= 136:
  384. j+=1
  385. return j
  386.  
  387. def getVarcharacters(st,const):
  388. conn=L2DatabaseFactory.getInstance().getConnection()
  389. act = conn.prepareStatement("SELECT * FROM characters WHERE obj_Id="+str(st.getPlayer().getObjectId()))
  390. rs=act.executeQuery()
  391. val = "0"
  392. if rs :
  393. rs.next()
  394. try :
  395. val = rs.getString(const)
  396. conn.close()
  397. except :
  398. try : conn.close()
  399. except: pass
  400. return val
  401.  
  402. def getVarcharactersubs(st):
  403. conn=L2DatabaseFactory.getInstance().getConnection()
  404. act = conn.prepareStatement("SELECT * FROM subclass_list WHERE player_id="+getmultisubs(st))
  405. rs=act.executeQuery()
  406. val = ""
  407. if rs :
  408. rs.next()
  409. for i in range(maxsubsindb + 1):
  410. try : val += rs.getString("subclassid"+str(i)) + " "
  411. except : val += str(st.player.getClassId().getId()) + " "
  412. try : conn.close()
  413. except: pass
  414. val+= "-1"
  415. return val
  416.  
  417. def getclassname(st,case1,case2):
  418. conn=L2DatabaseFactory.getInstance().getConnection()
  419. act = conn.prepareStatement("SELECT * FROM char_templates WHERE ClassId="+case1)
  420. rs=act.executeQuery()
  421. if rs :
  422. rs.next()
  423. try :
  424. val = rs.getString(case2)
  425. conn.close()
  426. except :
  427. val = "0"
  428. try : conn.close()
  429. except: pass
  430. else : val = "0"
  431. return val
  432.  
  433. def getitemname(st,itemval):
  434. conn=L2DatabaseFactory.getInstance().getConnection()
  435. itemidList = conn.prepareStatement("SELECT * FROM etcitem WHERE item_id="+str(itemval))
  436. il=itemidList.executeQuery()
  437. if il :
  438. il.next()
  439. try :
  440. val = il.getString("name")
  441. conn.close()
  442. except :
  443. val = "0"
  444. try : conn.close()
  445. except: pass
  446. else : val = "0"
  447. return val
  448.  
  449. def getparentclass(st,case):
  450. val=case
  451. if AllowThirdJob == False:
  452. conn=L2DatabaseFactory.getInstance().getConnection()
  453. parentid = conn.prepareStatement("SELECT * FROM class_list WHERE id = \""+case+"\"")
  454. pi=parentid.executeQuery()
  455. if pi :
  456. pi.next()
  457. try : val = pi.getString("parent_id")
  458. except : pass
  459. try : conn.close()
  460. except: pass
  461. return val
  462.  
  463. def getmaxskilllevel(st,case):
  464. val= 0
  465. com=L2DatabaseFactory.getInstance().getConnection()
  466. lvlskillid = com.prepareStatement("SELECT * FROM skill_trees WHERE skill_id = \""+case+"\" AND min_level <= \"85\" ORDER BY level DESC LIMIT 1")
  467. lvl=lvlskillid.executeQuery()
  468. if lvl :
  469. lvl.next()
  470. try :
  471. val = lvl.getInt("level")
  472. com.close()
  473. except :
  474. try : com.close()
  475. except: pass
  476. return val
  477.  
  478. def getmultisubs(st):
  479. val= str(st.getPlayer().getObjectId()) + " LIMIT 1"
  480. if AllowMultiSubs == True:
  481. val= str(st.getPlayer().getObjectId()) +" AND sub_index=" + str(st.player.getClassIndex()) +" LIMIT 1"
  482. return val
  483.  
  484. def getmaster(st):
  485. 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
  486. #val="titulo"
  487. return val
  488.  
  489. def resetskills(st):
  490. parametros = "\"-1\""; j=-1
  491. subs=getVarcharactersubs(st)
  492. SubSplit = subs.split(" ")
  493. for k in range(maxsubsindb + 1):
  494. conn=L2DatabaseFactory.getInstance().getConnection()
  495. if int(SubSplit[int(k)]) >= 0 and int(SubSplit[int(k)]) <= 136: j+=1
  496. if int(SubSplit[int(k)]) >= 0 and int(SubSplit[int(k)]) <= 136 and SubsNumber >= j:
  497. xclassid = int(SubSplit[int(k)])
  498. skillidList = conn.prepareStatement("SELECT * FROM class_list WHERE id = \""+str(xclassid)+"\"")
  499. sil=skillidList.executeQuery()
  500. while (sil.next()) :
  501. try :
  502. parametros+=",\"" +str(xclassid)+ "\""
  503. xclassid = sil.getInt("parent_id")
  504. skillidList = conn.prepareStatement("SELECT * FROM class_list WHERE id = \""+str(xclassid)+"\"")
  505. sil=skillidList.executeQuery()
  506. except : pass
  507. try: conn.close()
  508. except : pass
  509. conn=L2DatabaseFactory.getInstance().getConnection()
  510. listskillid = conn.prepareStatement("SELECT * FROM skill_trees WHERE class_id IN ("+parametros+") AND min_level <= \"85\" ORDER BY skill_id DESC, level DESC")
  511. lis=listskillid.executeQuery()
  512. xskill = 0; cskill = 0; i=0
  513. availableSkillsB = ""
  514. while (lis.next()) :
  515. try :
  516. xskill = lis.getInt("skill_id")
  517. if xskill != cskill :
  518. xlevel = lis.getInt("level")
  519. cskill = xskill
  520. i=i+1
  521. availableSkillsB += str(xskill)+"_"+str(xlevel)+" "
  522. except : pass
  523. availableSkillsB+= "0_0"
  524. xvar="AND skill_id NOT BETWEEN \"1312\" AND \"1315\" AND skill_id NOT BETWEEN \"1368\" AND \"1372\""
  525. if st.player.isGM(): xvar+=" AND skill_id NOT BETWEEN \"7029\" AND \"7064\""
  526. listallskill = conn.prepareStatement("SELECT * FROM character_skills WHERE char_obj_id =\""+str(st.player.getObjectId())+"\" AND class_index =\""+str(st.player.getClassIndex())+"\" "+xvar+"")
  527. las=listallskill.executeQuery()
  528. availableSkillsA = []
  529. while (las.next()) :
  530. try :
  531. xskill = las.getInt("skill_id")
  532. xlevel = las.getInt("skill_level")
  533. availableSkillsA += [str(xskill)+"_"+str(xlevel)]
  534. except : pass
  535. try : conn.close()
  536. except : pass
  537. try :
  538. skillSplit = availableSkillsB.split(" ")
  539. for avSkillsA in availableSkillsA :
  540. j=0; temp=0
  541. while j <= i:
  542. j=j+1
  543. parametro = skillSplit[j-1].replace("_"," ")
  544. skillSplitB = parametro.split(" ")
  545. avSkillsA = avSkillsA.replace("_"," ")
  546. skillSplitA = avSkillsA.split(" ")
  547. if int(skillSplitB[0]) == int(skillSplitA[0]):
  548. temp=1
  549. if int(skillSplitA[1]) < 100 :
  550. if int(skillSplitB[1]) < int(skillSplitA[1]):
  551. re = SkillTable.getInstance().getInfo(int(skillSplitA[0]), int(skillSplitA[1]))
  552. st.player.removeSkill(re)
  553. sk = SkillTable.getInstance().getInfo(int(skillSplitB[0]), int(skillSplitB[1]))
  554. st.player.addSkill(sk, True)
  555. st.player.sendMessage("El skill "+sk.getName()+" fue reparado.")
  556. else:
  557. if int(skillSplitB[1]) < getmaxskilllevel(st,skillSplitB[0]):
  558. re = SkillTable.getInstance().getInfo(int(skillSplitA[0]), int(skillSplitA[1]))
  559. st.player.removeSkill(re)
  560. sk = SkillTable.getInstance().getInfo(int(skillSplitB[0]), int(skillSplitB[1]))
  561. st.player.addSkill(sk, True)
  562. st.player.sendMessage("El skill "+sk.getName()+" fue reparado.")
  563.  
  564. if temp == 0 :
  565. sk = SkillTable.getInstance().getInfo(int(skillSplitA[0]), int(skillSplitA[1]))
  566. st.player.removeSkill(sk)
  567. st.player.sendMessage("El skill "+sk.getName()+" fue removido.")
  568. except : st.player.sendMessage("No tienes skilles para remover")
  569. st.player.getSkillList()
  570. if st.player.isNoble(): st.player.setNoble(True)
  571. if st.player.isHero(): st.player.setHero(True)
  572. val=0
  573. return val
  574.  
  575. class Quest (JQuest) :
  576.  
  577. def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
  578.  
  579. def onEvent(self,event,st):
  580. eventSplit = event.split(" ")
  581. event = eventSplit[0]
  582. eventParam1 = eventSplit[1]
  583. if event == "escraza": return MainHtmlIV(st,eventParam1)
  584. if event == "confirm":
  585. if int(eventParam1) >= 88: return Confirmation(st,"1",getparentclass(st,eventParam1),eventParam1)
  586. else: return Confirmation(st,"3","deletesub",eventParam1)
  587. if event == "gethtml":
  588. if eventParam1 == "1":
  589. if AllowAllSubs == False :
  590. if AllowMutantRetail == False and st.player.isSubClassActive(): return MainHtmlIV(st,getclassname(st,str(st.player.getClassId().getId()),"RaceId"))
  591. else: return MainHtmlIV(st,getVarcharacters(st,"race"))
  592. else: return MainHtmlI(st)
  593. if eventParam1 == "2": return MainHtmlII(st)
  594. if eventParam1 == "3": return MainHtmlIII(st)
  595. return
  596.  
  597. temp = getVar(st,"currentsub")
  598. temp2 = getVar(st,"sub_index")
  599. temp3 = str(st.player.getClassIndex())
  600. temp4 = str(st.player.getClassId().getId())
  601.  
  602. if event == "camb":
  603. if temp2!=temp3: return errordeclasse(st,eventParam1,"switch a")
  604. if st.getPlayer().getClassId().level() < 2 and AllowThirdJob == False or st.getPlayer().getClassId().level() < 3 and AllowThirdJob == True : return comunerrors(st,"5")
  605. if st.getQuestItemsCount(Item1_Req) < Item1_Num and ReqItems == True: return comunerrors(st,"1")
  606. else:
  607. conn=L2DatabaseFactory.getInstance().getConnection()
  608. upd=conn.prepareStatement("UPDATE subclass_list SET subclassid"+temp+"="+temp4+", currentsub="+eventParam1+" WHERE player_id="+getmultisubs(st))
  609. try :
  610. upd.executeUpdate()
  611. upd.close()
  612. conn.close()
  613. except :
  614. try : conn.close()
  615. except : pass
  616. if resetskills(st) == 1: pass
  617. st.player.setClassId(int(getVar(st,"subclassid"+eventParam1)))
  618. if not st.player.isSubClassActive(): st.player.setBaseClass(int(getVar(st,"subclassid"+eventParam1)))
  619. if ReqItems == True and not st.player.isGM(): st.takeItems(Item1_Req,Item1_Num)
  620. st.player.store()
  621. st.player.broadcastUserInfo()
  622. return complete(st)
  623. st.exitQuest(1)
  624.  
  625. if event == "deletesub":
  626. if temp2!=temp3: return errordeclasse(st,eventParam1,"borrar")
  627. if st.getPlayer().getClassId().level() < 2 and AllowThirdJob == False or st.getPlayer().getClassId().level() < 3 and AllowThirdJob == True : return comunerrors(st,"5")
  628. if st.getQuestItemsCount(Item3_Req) < Item3_Num and ReqItems == True and not st.player.isGM() : return comunerrors(st,"3")
  629. else:
  630. conn=L2DatabaseFactory.getInstance().getConnection()
  631. upd=conn.prepareStatement("UPDATE subclass_list SET subclassid"+temp+"="+temp4+", currentsub="+temp+" WHERE player_id="+getmultisubs(st))
  632. try :
  633. upd.executeUpdate()
  634. upd.close()
  635. conn.close()
  636. except :
  637. try : conn.close()
  638. except : pass
  639.  
  640. if eventParam1 == temp and getsubsammount(st) > 0:
  641. j=0
  642. for i in range(maxsubsindb + 1):
  643. var = getVar(st,"subclassid"+str(i))
  644. if int(var) >= 0 and int(var) <= 136 and j == 0 and str(i) != temp:
  645. j+=1; idsubclass = var; temp=str(i)
  646. st.player.setClassId(int(idsubclass))
  647. if not st.player.isSubClassActive(): st.player.setBaseClass(int(idsubclass))
  648. con=L2DatabaseFactory.getInstance().getConnection()
  649. if getsubsammount(st) <= 1: rem=con.prepareStatement("DELETE FROM subclass_list WHERE player_id="+getmultisubs(st))
  650. else: rem = con.prepareStatement("UPDATE subclass_list SET subclassid"+eventParam1+"=-1 ,currentsub="+temp+" WHERE player_id="+getmultisubs(st))
  651. try : rem.executeUpdate()
  652. except : pass
  653. try : con.close()
  654. except : pass
  655. if resetskills(st) == 1: pass
  656. if ReqItems == True and not st.player.isGM(): st.takeItems(Item3_Req,Item3_Num)
  657. st.player.store()
  658. st.player.broadcastUserInfo()
  659. return errasecomplete(st)
  660. st.exitQuest(1)
  661.  
  662. else:
  663. if temp2!=temp3 and getsubsammount(st) >= 0 : return errordeclasse(st,eventParam1,event)
  664. if AllowOnlyNobles == True and not st.player.isGM() :
  665. if not st.player.isNoble() : return comunerrors(st,"6")
  666. if st.getQuestItemsCount(Item2_Req) < Item2_Num and ReqItems == True and not st.player.isGM() : return comunerrors(st,"2")
  667. if st.getPlayer().getLevel() < MinLevel and not st.player.isGM() : return comunerrors(st,"4")
  668. if st.getPlayer().getClassId().level() < 2 and AllowThirdJob == False or st.getPlayer().getClassId().level() < 3 and AllowThirdJob == True : return comunerrors(st,"5")
  669. else:
  670. if temp4 == eventParam1 or temp4 == event : return errordeduplicado(st,event)
  671. else:
  672. con=L2DatabaseFactory.getInstance().getConnection()
  673. if getsubsammount(st) == -1 :
  674. ins = con.prepareStatement("INSERT INTO subclass_list (player_id,currentsub,sub_index,subclassid0,subclassid1) VALUES (?,?,?,?,?)")
  675. ins.setString(1, str(st.player.getObjectId()))
  676. ins.setString(2, "1")
  677. ins.setString(3, str(st.player.getClassIndex()))
  678. ins.setString(4, temp4)
  679. ins.setString(5, event)
  680. else:
  681. temp6 = "-1"; j=0
  682. for i in range(maxsubsindb + 1):
  683. var = getVar(st,"subclassid"+str(i))
  684. if var == eventParam1 or var == event: return errordeduplicado(st,event)
  685. if int(var) < 0 or int(var) > 136:
  686. if temp6 == "-1" and j==0:
  687. j+=1
  688. temp6 = str(i)
  689. ins = con.prepareStatement("UPDATE subclass_list SET subclassid"+temp6+"="+event+", subclassid"+temp+"="+temp4+", currentsub="+temp6+" WHERE player_id="+getmultisubs(st))
  690. try :
  691. ins.executeUpdate()
  692. ins.close()
  693. con.close()
  694. except : pass
  695. if resetskills(st) == 1: pass
  696. if ReqItems == True and not st.player.isGM() : st.takeItems(Item2_Req,Item2_Num)
  697. if DecLevel == True and not st.player.isGM() :
  698. pXp = st.player.getExp()
  699. tXp = Experience.LEVEL[lvl]
  700. if pXp > tXp: st.player.removeExpAndSp(pXp - tXp, 0)
  701. st.player.setClassId(int(event))
  702. if not st.player.isSubClassActive(): st.player.setBaseClass(int(event))
  703. st.player.store()
  704. st.player.broadcastUserInfo()
  705. return complete(st)
  706. st.exitQuest(1)
  707.  
  708. def onFirstTalk (self,npc,player):
  709. st = player.getQuestState(QUEST_INFO)
  710. if not st : st = self.newQuestState(player)
  711. if player.isGM(): return MainHtml(st)
  712. if int(System.currentTimeMillis()/1000) > st.getInt("blockUntilTime"): return MainHtml(st)
  713.  
  714.  
  715. QUEST = Quest(QuestId,QUEST_INFO,QuestDesc)
  716. CREATED = State('Start', QUEST)
  717. STARTED = State('Started', QUEST)
  718.  
  719. QUEST.setInitialState(CREATED)
  720.  
  721. for npcId in NPC:
  722. QUEST.addStartNpc(npcId)
  723. QUEST.addFirstTalkId(npcId)
  724. QUEST.addTalkId(npcId),
  725. '855_SubclassNpc'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement