Guest User

Working

a guest
May 16th, 2010
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 56.04 KB | None | 0 0
  1. import sys
  2. from com.l2jserver import Config
  3. from com.l2jserver  import L2DatabaseFactory
  4. from java.lang import System
  5. from java.util import Iterator
  6. from com.l2jserver.gameserver.instancemanager import QuestManager
  7. from com.l2jserver.gameserver.model.quest import State
  8. from com.l2jserver.gameserver.model.quest import QuestState
  9. from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest
  10. from com.l2jserver.gameserver.model import L2Object
  11. from com.l2jserver.gameserver.instancemanager import TownManager
  12. from com.l2jserver.gameserver.network.serverpackets import SellList
  13. from com.l2jserver.gameserver.network.serverpackets import ActionFailed
  14. from com.l2jserver.gameserver.network.serverpackets import WareHouseDepositList
  15. from com.l2jserver.gameserver.network.serverpackets import WareHouseWithdrawalList
  16. from com.l2jserver.gameserver.network.serverpackets import NpcHtmlMessage
  17. from com.l2jserver.gameserver.network.serverpackets import ExShowBaseAttributeCancelWindow
  18. from com.l2jserver.gameserver.network.serverpackets import ExShowVariationCancelWindow
  19. from com.l2jserver.gameserver.network.serverpackets import ExShowVariationMakeWindow
  20. from com.l2jserver.gameserver.network.serverpackets import SystemMessage
  21. from com.l2jserver.gameserver.network import SystemMessageId
  22. from com.l2jserver.gameserver.datatables import SkillTable
  23. from com.l2jserver.gameserver.datatables import SkillTreeTable
  24. from com.l2jserver.gameserver.network.serverpackets import SetupGauge
  25. from com.l2jserver.gameserver.network.serverpackets import MagicSkillLaunched
  26. from com.l2jserver.gameserver.network.serverpackets import MagicSkillUse
  27. from com.l2jserver.gameserver.network.serverpackets import ExEnchantSkillList
  28. from com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillList import EnchantSkillType
  29. from com.l2jserver.gameserver.network.serverpackets import AcquireSkillList
  30. from com.l2jserver.gameserver.network.serverpackets import AcquireSkillDone
  31. from com.l2jserver.gameserver.model.actor.instance import L2PcInstance
  32. from com.l2jserver.gameserver.model.actor.instance import L2PetInstance
  33. from com.l2jserver.gameserver.model.actor.instance import L2SummonInstance
  34. from com.l2jserver.gameserver.model.base import ClassId
  35. from com.l2jserver.gameserver.model.actor import L2Character
  36. from com.l2jserver.gameserver.model.base import SubClass
  37. from com.l2jserver.gameserver.datatables import HennaTreeTable
  38. from com.l2jserver.gameserver.network.serverpackets import HennaEquipList
  39. from com.l2jserver.gameserver.model import L2HennaInstance
  40. from com.l2jserver.gameserver.datatables import ClanTable
  41. from com.l2jserver.gameserver.model import L2Clan
  42. from com.l2jserver.gameserver.instancemanager import CastleManager
  43. from com.l2jserver.gameserver.instancemanager import FortManager
  44. from com.l2jserver.gameserver.instancemanager import FortSiegeManager
  45. from com.l2jserver.gameserver.instancemanager import SiegeManager
  46.  
  47.  
  48. ##############################
  49. AllowVIP = False             #
  50. ##############################
  51. VIPaccesLevel = 1            #
  52. ##############################
  53. CLASSMASTER_GIFT = 6622      #
  54. ##############################
  55. CLASSMASTER_ITEM_NUM= 1      #
  56. ##############################
  57. NOBLE_ITEMID = 3481          #
  58. ##############################
  59. NOBLE_NumITEM = 25           #
  60. ##############################
  61. NOBLE_Level = 80             #
  62. ##############################
  63. NOBLESS_TIARA = 7694         #
  64. ##############################
  65. ALLOW_KARMA_PLAYER=False     #
  66. ##############################
  67. FREE_TELEPORT = False        #
  68. ##############################
  69. ShowReloadScriptPanel = True #
  70. ##############################
  71. FREE_BUFFS = False           #
  72. ##############################
  73. CONSUMABLE_ID = 57           #
  74. ##############################
  75. BUFFS_PRICE = 100000         #
  76. ##############################
  77. BUFF_REMOVE_PRICE = 10000    #
  78. ##############################
  79. HEAL_PRICE = 10000           #
  80. ##############################
  81. TIME_OUT = True              #
  82. ##############################
  83. TIME_OUT_TIME = 1            #
  84. ##############################
  85. BlockTime = 20               #
  86. ##############################
  87.  
  88. npcId         = 955
  89. QuestId       = 955
  90. QuestName     = "NpcService"
  91. QUEST_INFO    = str(QuestId)+"_"+QuestName
  92. QuestDesc     = "custom"
  93.  
  94. print "============================="
  95. print "INFO Loaded SERVICES MANAGER"
  96. print "============================="
  97.  
  98. def MainHtml3(st) :
  99.     MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  100.     MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"
  101.     MAIN_HTML += "<font color=\"FF0000\">.::Subclass Master Options::.</font><br><br1>"
  102.     if st.player.getTotalSubClasses() < Config.MAX_SUBCLASS :
  103.         MAIN_HTML += "<button value=\"Add Subclass\" action=\"bypass -h Quest " +QUEST_INFO+ " getracemenu addsub 0 0\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  104.     MAIN_HTML += "<button value=\"Change Subclass\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass changesub 0 0\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  105.     MAIN_HTML += "<button value=\"Remove Subclass\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass deletesub 0 0\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  106.     MAIN_HTML += "<br><font color=\"303030\">"+getmaster()+"</font>"   
  107.     MAIN_HTML += "</center></body></html>"
  108.     return MAIN_HTML
  109.  
  110. def MainHtml4(st) :
  111.     MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  112.     MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"
  113.     MAIN_HTML += "<font color=\"FF0000\">.::Clan Options::.</font><br><br1>"
  114.     if st.player.getClanId() == 0:
  115.         MAIN_HTML += "<button value=\"Create New Clan\" action=\"bypass -h Quest " +QUEST_INFO+ " createclan 0 0 0\" width=140 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  116.     else:
  117.         MAIN_HTML += "<button value=\"Delegate Clan Leader\" action=\"bypass -h Quest " +QUEST_INFO+ " giveclanl 0 0 0\" width=140 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  118.         MAIN_HTML += "<button value=\"Increase Clan Level\" action=\"bypass -h Quest " +QUEST_INFO+ " increaseclan 0 0 0\" width=140 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  119.         MAIN_HTML += "<button value=\"Disband Clan\" action=\"bypass -h Quest " +QUEST_INFO+ " DisbandClan 0 0 0\" width=140 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  120.         MAIN_HTML += "<button value=\"Restore Clan\" action=\"bypass -h Quest " +QUEST_INFO+ " RestoreClan 0 0 0\" width=140 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  121.         MAIN_HTML += "<button value=\"Acquire Clan Skill\" action=\"bypass -h Quest " +QUEST_INFO+ " learn_clan_skills 0 0 0\" width=140 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  122.         MAIN_HTML += "<br><font color=\"FF0000\">.::Alliance Options::.</font><br><br1>"
  123.         clan=st.player.getClan()
  124.         if clan.getAllyId() == 0:
  125.             MAIN_HTML += "<button value=\"Create a Alliance\" action=\"bypass -h Quest " +QUEST_INFO+ " createally 0 0 0\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  126.         else:
  127.             MAIN_HTML += "<button value=\"Dissolve Alliance\" action=\"bypass -h Quest " +QUEST_INFO+ " dissolve_ally 0 0 0\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  128.     MAIN_HTML += "<br><font color=\"303030\">"+getmaster()+"</font>"   
  129.     MAIN_HTML += "</center></body></html>"
  130.     return MAIN_HTML
  131.  
  132. def RaceMenu(st,case,case2) :
  133.     temp = getVarcharacters(st,"race")
  134.     if temp == "5":
  135.         return subclassopcions(st, case, "5", case2)
  136.     else:
  137.         MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  138.         MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"
  139.         MAIN_HTML += "<font color=\"FF0000\">.::Chooce a Race::.</font><br><br1>"
  140.         MAIN_HTML += "<button value=\"Human\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass "+case+" 0 "+case2+"\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  141.         if temp != "2": MAIN_HTML += "<button value=\"Elf\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass "+case+" 1 "+case2+"\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  142.         if temp != "1": MAIN_HTML += "<button value=\"Dark Elf\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass "+case+" 2 "+case2+"\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  143.         MAIN_HTML += "<button value=\"Orc\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass "+case+" 3 "+case2+"\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  144.         MAIN_HTML += "<button value=\"Dwarf\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass "+case+" 4 "+case2+"\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  145.         MAIN_HTML += "<br><font color=\"303030\">"+getmaster()+"</font>"
  146.         MAIN_HTML += "</center></body></html>"
  147.         return MAIN_HTML
  148.  
  149. def NobleMenu(st):
  150.     MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  151.     MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"
  152.     MAIN_HTML += "<font color=\"FF0000\">.::Noblesse Manager::.</font><br><br>"
  153.     MAIN_HTML += "<table border=\"0\" cellspacing=\"0\">"
  154.     MAIN_HTML += "<tr><td valign=top><img src=icon.skill0325 width=32 height=32 align=left></td><td valign=top><img src=icon.skill0326 width=32 height=32 align=left></td>"
  155.     MAIN_HTML += "<td valign=top><img src=icon.skill0327 width=32 height=32 align=left></td><td valign=top><img src=icon.skill1323 width=32 height=32 align=left></td>"
  156.     MAIN_HTML += "<td valign=top><img src=icon.skill1324 width=32 height=32 align=left></td><td valign=top><img src=icon.skill1325 width=32 height=32 align=left></td>"
  157.     MAIN_HTML += "<td valign=top><img src=icon.skill1326 width=32 height=32 align=left></td><td valign=top><img src=icon.skill1327 width=32 height=32 align=left></td></tr>"
  158.     MAIN_HTML += "</table><br><br><br>"
  159.     MAIN_HTML += "<font color=\"FFFFFF\">If you want to be Noblesse first you need<br1>reach level <font color=\"FFFF00\">"+str(NOBLE_Level)+"</font> and get <font color=\"FFFF00\">"+str(NOBLE_NumITEM)+" "+str(getitemname(st,NOBLE_ITEMID))+"</font>.</font><br><br1>"
  160.     MAIN_HTML += "<button value=\"I'm ready, make me noblesse\" action=\"bypass -h Quest " +QUEST_INFO+ " getnoble 2 0 0\" width=200 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  161.     MAIN_HTML += "<br><font color=\"303030\">"+getmaster()+"</font>"
  162.     MAIN_HTML += "</center></body></html>"
  163.     return MAIN_HTML
  164.  
  165. def classmaster(st):
  166.     classId = st.player.getClassId().getId()
  167.     level = st.player.getLevel()
  168.     jobLevel=st.getPlayer().getClassId().level()
  169.     MAIN_HTML = "<html><title>Class Master</title><body><center>"
  170.     if jobLevel ==2 and level > 75 or jobLevel ==1 and level > 39 or jobLevel ==0 and level > 19:
  171.         MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"
  172.         MAIN_HTML += "<font color=\"FF0000\">Change Subclass:<br1>Which class do you wish to change?</font><br><br1>"
  173.         conn=L2DatabaseFactory.getInstance().getConnection()
  174.         act = conn.prepareStatement("SELECT * FROM class_list WHERE parent_id = \""+str(classId)+"\"")
  175.         rs=act.executeQuery()
  176.         while (rs.next()) :
  177.             try :
  178.                 xid = rs.getString("id")
  179.                 xclassname= getnames(st,xid)
  180.                 MAIN_HTML += "<button value=\""+xclassname+"\" action=\"bypass -h Quest " +QUEST_INFO+ " changeclass "+xid+" 0 0 0\" width=150 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  181.             except : MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">There is no class change available<br>for you anymore.</font><br>"
  182.         try : conn.close()
  183.         except : pass
  184.     else:
  185.         if jobLevel ==0 and level < 20: MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">Come back here when you reach level 20<br1>to change your class.</font><br>"
  186.         elif jobLevel <=1 and level < 40: MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">Come back here when you reach level 40<br1>to change your class.</font><br>"
  187.         elif jobLevel <=2 and level < 76: MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">Come back here when you reach level 76<br1>to change your class.</font><br>"
  188.         else: MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">There is no class change available<br>for you anymore.</font><br>"
  189.     MAIN_HTML += "</center></body></html>"
  190.     return MAIN_HTML
  191.  
  192. def getitemname(st,itemval):
  193.     conn=L2DatabaseFactory.getInstance().getConnection()
  194.     itemidList = conn.prepareStatement("SELECT * FROM etcitem WHERE item_id="+str(itemval))
  195.     il=itemidList.executeQuery()
  196.     val = "0"
  197.     if il :
  198.         il.next()
  199.         try : val = il.getString("name")                   
  200.         except : pass
  201.     try : conn.close()
  202.     except: pass
  203.     return val
  204.  
  205. def subclassopcions(st,cases,id,index) :  
  206.     if st.player.isCastingNow() or st.player.isAllSkillsDisabled():
  207.                 st.player.sendPacket(SystemMessage(SystemMessageId.SUBCLASS_NO_CHANGE_OR_CREATE_WHILE_SKILL_IN_USE))
  208.         return
  209.         if cases == "addsub":
  210.             if st.player.getTotalSubClasses() >= Config.MAX_SUBCLASS :
  211.             if TIME_OUT == True:
  212.                 if addTimeout(st,3,BlockTime,300) : pass
  213.                     st.player.sendMessage("You can now only change one of your current sub classes.")
  214.                         return
  215.         else:
  216.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  217.             MAIN_HTML += subclasslist(st,"acceptsub",id,"0")
  218.             MAIN_HTML += "</center></body></html>"
  219.             return MAIN_HTML
  220.  
  221.     if cases == "acceptsub":
  222.             if not st.player.addSubClass(int(id),st.player.getTotalSubClasses() + 1):
  223.                 st.player.sendMessage("The sub class could not be added.")
  224.                 return
  225.             st.player.setActiveClass(st.player.getTotalSubClasses())
  226.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  227.             MAIN_HTML += "<br><br>Add Subclass:<br>The sub class of <font color=\"LEVEL\">"+getnames(st,id)+"</font><br> has been added.<br>"
  228.             MAIN_HTML += "</center></body></html>"
  229.             st.player.sendPacket(SystemMessage(SystemMessageId.CLASS_TRANSFER))
  230.             return MAIN_HTML
  231.  
  232.     if cases == "acceptchangesub":
  233.             if not st.player.setActiveClass(int(index)):
  234.             if TIME_OUT == True:
  235.                 if addTimeout(st,3,BlockTime,300) : pass
  236.                     st.player.sendMessage("The sub class could not be changed.")
  237.                         return
  238.         else:
  239.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  240.             MAIN_HTML += "<br><br>Change Subclass:<br>Your active class is now a:<br><font color=\"LEVEL\">"+getnames(st,id)+"</font>"
  241.             MAIN_HTML += "</center></body></html>"
  242.             st.player.sendPacket(SystemMessage(SystemMessageId.ADD_NEW_SUBCLASS))
  243.             if TIME_OUT == True:
  244.                 if addTimeout(st,3,BlockTime,300) : pass
  245.             return MAIN_HTML
  246.  
  247.     if cases == "changesub":
  248.  
  249.             if st.player.getTotalSubClasses() > Config.MAX_SUBCLASS :
  250.                     st.player.sendMessage("You can now only delete one of your current sub classes.")
  251.             if TIME_OUT == True:
  252.                 if addTimeout(st,3,BlockTime,300) : pass
  253.                         return
  254.         else:
  255.             i=0
  256.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  257.             MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"
  258.             MAIN_HTML += "<font color=\"FF0000\">Change Subclass:<br1>Which sub class do you wish to change?</font><br><br1>"
  259.             xcharid = st.getPlayer().getObjectId()
  260.             conn=L2DatabaseFactory.getInstance().getConnection()
  261.             sub = conn.prepareStatement("SELECT * FROM character_subclasses WHERE charId= \""+str(xcharid)+"\" ORDER BY class_index LIMIT "+str(Config.MAX_SUBCLASS)+"")
  262.             ss=sub.executeQuery()
  263.             if st.player.isSubClassActive():
  264.                 MAIN_HTML += "<font color=\"LEVEL\">Main-class</font>"
  265.                 MAIN_HTML += "<button value=\""+getnames(st,str(st.player.getBaseClass()))+"\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass acceptchangesub "+str(st.player.getBaseClass())+",0\" width=150 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><br>"
  266.             while (ss.next()) :
  267.                 try:
  268.                     xsubclassid = ss.getString("class_id")
  269.                     xindex = ss.getString("class_index")
  270.                     xclassname= getnames(st,xsubclassid)
  271.                     i+=1
  272.                     if int(st.player.getClassId().getId()) != int(xsubclassid):
  273.                         MAIN_HTML += "<font color=\"LEVEL\">Sub-class "+str(i)+"</font>"
  274.                         MAIN_HTML += "<button value=\""+xclassname+"\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass acceptchangesub "+xsubclassid+" "+xindex+"\" width=150 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  275.                 except :
  276.                     MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  277.                     MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">There are no sub classes available<br>to change at this time.</font><br>"
  278.                     if TIME_OUT == True:
  279.                         if addTimeout(st,3,BlockTime,300) : pass     
  280.             MAIN_HTML += "</center></body></html>"
  281.             try : conn.close()
  282.             except : pass
  283.             return MAIN_HTML  
  284.  
  285.     if cases == "deletesub":
  286.  
  287.             if st.player.getTotalSubClasses() > Config.MAX_SUBCLASS :
  288.             if TIME_OUT == True:
  289.                 if addTimeout(st,3,BlockTime,300) : pass
  290.                     st.player.sendMessage("You can now only delete one of your current sub classes.")
  291.                         return
  292.         else:
  293.             i=0
  294.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  295.             MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"
  296.             MAIN_HTML += "<font color=\"FF0000\">Which sub class do you wish to delete?</font><br><br1>"
  297.             conn=L2DatabaseFactory.getInstance().getConnection()
  298.             xcharid = st.getPlayer().getObjectId()
  299.             sub = conn.prepareStatement("SELECT * FROM character_subclasses WHERE charId= \""+str(xcharid)+"\" ORDER BY class_index LIMIT "+str(Config.MAX_SUBCLASS)+"")
  300.             ss=sub.executeQuery()
  301.             while (ss.next()) :
  302.                 try:
  303.                     xsubclassid = ss.getString("class_id")
  304.                     xindex = ss.getString("class_index")
  305.                     xclassname= getnames(st,xsubclassid)
  306.                     xlevel = ss.getInt("level")
  307.                     i+=1
  308.                     MAIN_HTML += "<font color=\"LEVEL\">Sub-class "+str(i)+"</font>"
  309.                     MAIN_HTML += "<button value=\""+xclassname+"\" action=\"bypass -h Quest " +QUEST_INFO+ " getracemenu acceptnewsub "+xindex+" 0\" width=150 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  310.                 except : pass    
  311.             MAIN_HTML += "<br>If you change a sub class, you'll start at level 40<br1>after the 2nd class transfer."
  312.             MAIN_HTML += "</center></body></html>"
  313.             try : conn.close()
  314.             except : pass
  315.             if i !=0 :
  316.                 return MAIN_HTML
  317.             else:    
  318.                 if TIME_OUT == True:  
  319.                     if addTimeout(st,3,BlockTime,300) : pass
  320.                 st.player.sendMessage("There are no sub classes available at this time.")
  321.  
  322.     if cases == "acceptnewsub":
  323.         MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  324.         MAIN_HTML += subclasslist(st,"acceptdelsub",id,index)
  325.         MAIN_HTML += "</center></body></html>"
  326.         return MAIN_HTML  
  327.  
  328.     if cases == "acceptdelsub":
  329.         if st.player.modifySubClass(int(index), int(id)):
  330.                         st.player.stopAllEffects()
  331.                         st.player.setActiveClass(int(index))
  332.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  333.             MAIN_HTML += "<br><br>Change Subclass:<br>Your sub class has been changed to<br1><font color=\"LEVEL\">"+getnames(st,id)+"</font>"
  334.             MAIN_HTML += "</center></body></html>"
  335.             st.player.sendPacket(SystemMessage(SystemMessageId.ADD_NEW_SUBCLASS))
  336.             if TIME_OUT == True:
  337.                 if addTimeout(st,3,BlockTime,300) : pass
  338.             return MAIN_HTML
  339.                 else:
  340.                         player.setActiveClass(0)
  341.             if TIME_OUT == True:
  342.                 if addTimeout(st,3,BlockTime,300) : pass
  343.                         st.player.sendMessage("The sub class could not be added, you have been reverted to your base class.")
  344.                         return  
  345.  
  346. def subclasslist(st,cases,case2,index) :
  347.     baseClassId = st.player.getBaseClass()
  348.     charClassId = st.player.getClassId().getId()
  349.     xcharid = st.getPlayer().getObjectId()
  350.         if charClassId >= 88 and charClassId <= 118 or charClassId >= 131 and charClassId <= 134 or charClassId == 136:
  351.             if st.player.getClassId().getParent() != None:
  352.                     charClassId = st.player.getClassId().getParent().ordinal()
  353.     num=0
  354.     temp="88"
  355.     if case2 == "5": temp="131"
  356.     avsubClass=[]
  357.     yclassid="0"
  358.     HTML = "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"
  359.     if int(index) ==0: HTML += "<font color=\"FF0000\">Add Subclass:<br>Which sub class do you wish to add?</font><br><br1>"
  360.     if int(index) > 0: HTML += "<font color=\"FF0000\">Please choose a new sub class to change to.</font><br1><font color=\"LEVEL\">Warning!</font> All classes and skills for this class<br1>will be removed."
  361.     conn=L2DatabaseFactory.getInstance().getConnection()
  362.     sub = conn.prepareStatement("SELECT * FROM character_subclasses WHERE charId= \""+str(xcharid)+"\"")
  363.     ss=sub.executeQuery()
  364.     while (ss.next()) :
  365.         try :
  366.             xsubclassid = ss.getInt("class_id")
  367.             xlevel = ss.getInt("level")
  368.             if xlevel <= 74 and int(index) ==0:
  369.                 num=1
  370.             avsubClass += [str(xsubclassid)]
  371.         except : pass
  372.  
  373.     if num == 0 or st.player.getLevel() >= 75:
  374.         act = conn.prepareStatement("SELECT * FROM char_templates WHERE RaceId="+case2+" AND ClassId NOT IN (\"115\",\"118\",\"135\") AND ClassId >= \""+temp+"\" ORDER BY RaceId, STR DESC, ClassName")
  375.         rs=act.executeQuery()
  376.         while (rs.next()) :
  377.             try:
  378.                 xclassid = rs.getString("ClassId")
  379.                 yclassid = getsecondclass(st,xclassid)
  380.                 xclassname= getnames(st,yclassid)
  381.                 if str(charClassId) != yclassid and xclassid not in avsubClass and yclassid not in avsubClass and baseClassId != int(xclassid) and baseClassId != int(yclassid):
  382.                     HTML += "<button value=\""+xclassname+"\" action=\"bypass -h Quest " +QUEST_INFO+ " subclass "+cases+" "+yclassid+" "+index+"\" width=150 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  383.             except : pass
  384.     try : conn.close()
  385.     except : pass
  386.     if yclassid == None or yclassid == "0":
  387.         HTML = "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">There are no sub classes available<br> at this time.</font><br>"
  388.             st.player.sendMessage("There are no sub classes available at this time.")
  389.     if num == 1 or st.player.getLevel() < 75:
  390.         HTML = "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You may not add a new sub class before <br>you are level 75 on your previous class.</font><br>"
  391.     return HTML
  392.  
  393. def getsecondclass(st,const):
  394.     con=L2DatabaseFactory.getInstance().getConnection()
  395.     skillList = con.prepareStatement("SELECT * FROM class_list WHERE id = \""+const+"\"")
  396.     sil=skillList.executeQuery()
  397.     val = "0"
  398.     if sil :
  399.         sil.next()
  400.         try : val = sil.getString("parent_id")                 
  401.         except : pass
  402.     try : con.close()
  403.     except: pass
  404.     return val
  405.  
  406. def getnames(st,const):
  407.     cn=L2DatabaseFactory.getInstance().getConnection()
  408.     nameList = cn.prepareStatement("SELECT * FROM char_templates WHERE ClassId = \""+const+"\"")
  409.     nl=nameList.executeQuery()
  410.     val = "0"
  411.     if nl :
  412.         nl.next()
  413.         try : val = nl.getString("ClassName")          
  414.         except : pass
  415.     try : cn.close()
  416.     except: pass
  417.     return val
  418.        
  419. def getVarcharacters(st,const):
  420.     conn=L2DatabaseFactory.getInstance().getConnection()
  421.     act = conn.prepareStatement("SELECT * FROM characters WHERE charId="+str(st.getPlayer().getObjectId()))
  422.     rs=act.executeQuery()
  423.     val = "0"
  424.     if rs :
  425.         rs.next()
  426.         try : val = rs.getString(const)                
  427.         except : pass
  428.     try : conn.close()
  429.     except: pass
  430.     return val
  431.  
  432. def optionsymbol(st, cases,num):
  433.     if cases == "draws":
  434.         henna = HennaTreeTable.getInstance().getAvailableHenna(st.player.getClassId())
  435.         hel = HennaEquipList(st.player, henna)
  436.         st.player.sendPacket(hel)
  437.     elif cases == "deletes":
  438.         MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  439.         MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  440.         MAIN_HTML += "<font color=\"FF0000\">.::Select symbol you would like to remove::.</font><br><br><br1>"
  441.         hasHennas = False
  442.         i=0
  443.         if num != "0": st.player.removeHenna(int(num))
  444.         while i <= 2 :
  445.             i+=1
  446.             henna = st.player.getHenna(i)
  447.             if henna != None:
  448.                 hasHennas = True
  449.                 MAIN_HTML += "<button value=\""+henna.getName()+"\" action=\"bypass -h Quest " +QUEST_INFO+ " symbol deletes "+str(i)+" 0\" width=120 height=20 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"><br>"
  450.         if hasHennas == False:
  451.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  452.             MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You don't have any symbol to remove!</font><br>"
  453.         MAIN_HTML += "</center></body></html>"
  454.         return MAIN_HTML
  455.  
  456. def noleader(st):
  457.         MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  458.     MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You are not a Clan Leader.</font><br>"
  459.     MAIN_HTML += "</center></body></html>"
  460.     return MAIN_HTML
  461.  
  462. def getmaster():
  463.     xi="vice";xe="O";xf="n";xa="B";xb="y";xc=" ";xd="e";xk="ger";xh="Ser";xj="Mana";val=xh+xi+xc+xj+xk+xc+xa+xb+xc+xd+xe+xf
  464.     return val
  465.  
  466. def showText(type,text,buttonEnabled,buttonName,location) :
  467.     MESSAGE = "<html><head><title>Services Manager</title></head><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br>"
  468.     MESSAGE += "<font color=\"LEVEL\">"+type+"</font><br>"+text+"<br>"
  469.     if buttonEnabled == "True" :
  470.         MESSAGE += "<button value=\""+buttonName+"\" action=\"bypass -h Quest " + QUEST_INFO + " redirect "+location+" 0 0\" width=100 height=22 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\">"
  471.     MESSAGE += "<font color=\"303030\">"+getmaster()+"</font></center></body></html>"
  472.     return MESSAGE
  473.  
  474. def addTimeout(st,gaugeColor,amount,offset) :
  475.     endtime = int(System.currentTimeMillis()/1000) + amount
  476.     st.set("blockUntilTime",str(endtime))
  477.     st.getPlayer().sendPacket(SetupGauge(gaugeColor, amount * 1000 + offset))
  478.     return True
  479.  
  480. def heal(st,case) :
  481.     if case == "0":
  482.         st.getPlayer().getStatus().setCurrentHp(st.getPlayer().getStat().getMaxHp())
  483.         st.getPlayer().getStatus().setCurrentMp(st.getPlayer().getStat().getMaxMp())
  484.         st.getPlayer().getStatus().setCurrentCp(st.getPlayer().getStat().getMaxCp())
  485.     if case == "1" and st.player.getPet() != None :
  486.         st.player.getPet().setCurrentHpMp(st.player.getPet().getMaxHp(), st.player.getPet().getMaxMp())
  487.         try:
  488.             st.player.getPet().setCurrentFed(st.player.getPet().getMaxFed())
  489.             st.player.sendPacket(SetSummonRemainTime(st.player.getPet().getMaxFed(), st.player.getPet().getCurrentFed()))
  490.         except:
  491.             st.player.getPet().decTimeRemaining(st.player.getPet().getTimeRemaining() - st.player.getPet().getTotalLifeTime())
  492.             st.player.sendPacket(SetSummonRemainTime(st.player.getPet().getTotalLifeTime(), st.player.getPet().getTotalLifeTime()))
  493.     return True
  494.  
  495. def ReloadConfig(st,npcid) :
  496.     try:
  497.         if QuestManager.getInstance().reload(QuestId): st.player.sendMessage("The script and settings have been reloaded successfully.")
  498.         else: st.player.sendMessage("Script Reloaded Failed. you edited something wrong! :P, fix it and restart the server")
  499.     except: st.player.sendMessage("Script Reloaded Failed. you edited something wrong! :P, fix it and restart the server")
  500.     filename = "data/html/teleporter/AIONpc-Htmls/mainhtml-0.htm"
  501.     html = NpcHtmlMessage(int(npcid))  
  502.     html.setFile(None,filename)
  503.     html.replace("%objectId%", npcid)
  504.     st.player.sendPacket(html)
  505.  
  506. class Quest (JQuest) :
  507.    
  508.     def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
  509.  
  510.     def onAdvEvent (self,event,npc,player) :
  511.         st = player.getQuestState(QUEST_INFO)
  512.  
  513.         if event[0] == "g" and event[4] == "t" and event[11] == "t":
  514.             event = event.replace("]","")
  515.             event = event.replace("["," ")
  516.             varSplit = event.split(" ")
  517.             try: noblesGK = int(varSplit[2])
  518.             except : noblesGK = 0
  519.             if noblesGK == 1 and st.player.isNoble() == 0 :
  520.                 return showText("Sorry","Only a <font color =\"LEVEL\">Noblesse</font> can be teleported to this place","False",0,0)
  521.             if noblesGK > 1 and st.player.isGM() == 0 :
  522.                 return showText("Sorry","Only a <font color =\"LEVEL\">GM</font> can be teleported to this place","False",0,0)
  523.             if st.player.isGM() == 1 :
  524.                 try:
  525.                     st.player.teleToLocation(int(varSplit[5]), int(varSplit[6]), int(varSplit[7]), True)
  526.                     st.player.sendMessage("You have been teleported to " + varSplit[5] +" "+varSplit[6]+ " "+varSplit[7])
  527.                 except : st.player.sendMessage("You should check the coordinates. Something is wrong!")
  528.             else:
  529.                 newevent="confteleport["+varSplit[3]+"]["+varSplit[4]+"] "+varSplit[5]+" "+varSplit[6]+" "+varSplit[7]
  530.                 filename = "data/html/teleporter/AIONpc-Htmls/mainhtml-6.htm"
  531.                 html = NpcHtmlMessage(npc.getObjectId())   
  532.                 html.setFile(None,filename)
  533.                 html.replace("%place%", varSplit[1].replace("-"," "))
  534.                 html.replace("%itemName%", str(getitemname(st,int(varSplit[3]))))
  535.                 html.replace("%reqitem%", varSplit[4])
  536.                 html.replace("%event%", newevent)
  537.                 html.replace("%objectId%", str(npc.getObjectId()))
  538.                 st.player.sendPacket(html)
  539.             return
  540.                
  541.         event = event.replace(","," ")
  542.         eventSplit = event.split(" ")
  543.         event = eventSplit[0]
  544.         eventParam1 = eventSplit[1]
  545.         eventParam2 = eventSplit[2]
  546.         eventParam3 = eventSplit[3]
  547.  
  548.         if event == "reloadscript": return ReloadConfig(st,eventParam1)
  549.  
  550.         if event == "sellmenu":
  551.             st.player.setTarget(npc)
  552.             st.player.sendPacket(SellList(player))
  553.             st.player.sendPacket(ActionFailed.STATIC_PACKET)
  554.                 return
  555.  
  556.         if event[0] == "c" and event[1] == "o" and event[4] == "t" and event[5] == "e":
  557.             event = event.replace("]","")
  558.             event = event.replace("["," ")
  559.             GKSplit = event.split(" ")
  560.             try: TELEPORT_ITEM_ID = int(GKSplit[1]); TELEPORT_PRICE = int(GKSplit[2])
  561.             except : TELEPORT_ITEM_ID = 57; TELEPORT_PRICE = 15000
  562.        
  563.             if SiegeManager.getInstance().getSiege(int(eventParam1), int(eventParam2), int(eventParam3)) != None:
  564.                 st.player.sendPacket(SystemMessage(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE))
  565.                 return
  566.             elif TownManager.townHasCastleInSiege(int(eventParam1), int(eventParam2)):
  567.                 st.player.sendPacket(SystemMessage(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE))
  568.                 return
  569.             elif not Config.ALT_GAME_KARMA_PLAYER_CAN_USE_GK and st.player.getKarma() > 0:
  570.                 st.player.sendMessage("Go away, you're not welcome here.")
  571.                 return
  572.             elif st.player.isAlikeDead():
  573.                 return
  574.             if FREE_TELEPORT == False :
  575.                 if st.getQuestItemsCount(TELEPORT_ITEM_ID) < TELEPORT_PRICE :
  576.                     return showText("Sorry","You don't have enough Items:<br>You need: <font color =\"LEVEL\">"+str(TELEPORT_PRICE)+" "+str(getitemname(st,TELEPORT_ITEM_ID))+"!","False",0,0)
  577.                 else :
  578.                     st.takeItems(TELEPORT_ITEM_ID,TELEPORT_PRICE)
  579.                     st.player.teleToLocation(int(eventParam1), int(eventParam2), int(eventParam3), True)
  580.                     st.player.sendMessage("You have been teleported to " + eventParam1 +" "+eventParam2+ " "+eventParam3)
  581.             else:
  582.                 st.player.teleToLocation(int(eventParam1), int(eventParam2), int(eventParam3), True)
  583.                 st.player.sendMessage("You have been teleported to " + eventParam1 +" "+eventParam2+ " "+eventParam3)  
  584.  
  585.         if event == "heal" :
  586.             if int(System.currentTimeMillis()/1000) > st.getInt("blockUntilTime"):
  587.                 if st.getQuestItemsCount(CONSUMABLE_ID) < HEAL_PRICE  :
  588.                     return showText("Sorry","You don't have enough adena!","False",0,0)
  589.                 else :
  590.                     if heal(st,eventParam2) :pass                  
  591.                     st.takeItems(CONSUMABLE_ID,HEAL_PRICE)                 
  592.                     if TIME_OUT == True:
  593.                         if addTimeout(st,1,TIME_OUT_TIME + 9,100): pass
  594.             filename = "data/html/teleporter/AIONpc-Buffer/NpcBuffer-"+eventParam1+".htm"
  595.             html = NpcHtmlMessage(npc.getObjectId())   
  596.             html.setFile(None,filename)
  597.             html.replace("%objectId%", str(npc.getObjectId()))
  598.             st.player.sendPacket(html)
  599.            
  600.         if event == "removeBuffs" :
  601.             if int(System.currentTimeMillis()/1000) > st.getInt("blockUntilTime"):                     
  602.                 if st.getQuestItemsCount(CONSUMABLE_ID) < BUFF_REMOVE_PRICE :
  603.                     return showText("Sorry","You don't have enough adena!","False",0,0)
  604.                 else :
  605.                     if eventParam2 == "Remove_Pet" :
  606.                         if st.player.getPet() != None :
  607.                             st.player.getPet().stopAllEffects()
  608.                     else :
  609.                         st.getPlayer().stopAllEffects()
  610.                                 if st.player.getCubics() != None:
  611.                                         for cubic in st.player.getCubics().values():  
  612.                                                 cubic.stopAction()
  613.                                                 st.player.delCubic(cubic.getId())  
  614.                     st.takeItems(CONSUMABLE_ID,BUFF_REMOVE_PRICE)
  615.                     if TIME_OUT == True:
  616.                         if addTimeout(st,2,TIME_OUT_TIME + 3,100): pass
  617.             filename = "data/html/teleporter/AIONpc-Buffer/NpcBuffer-"+eventParam1+".htm"
  618.             html = NpcHtmlMessage(npc.getObjectId())   
  619.             html.setFile(None,filename)
  620.             html.replace("%objectId%", str(npc.getObjectId()))
  621.             st.player.sendPacket(html)
  622.  
  623.         if event == "giveBuffs" :
  624.             eventParam3 = eventParam3.replace("_"," ")
  625.             listSplit = eventParam3.split(" ")
  626.             j=0;k=0
  627.             while j == 0 :
  628.                 try: buff = listSplit[int(k)];k+=1
  629.                 except: temp = int(k);j=1
  630.             if int(System.currentTimeMillis()/1000) > st.getInt("blockUntilTime"):
  631.                 if FREE_BUFFS == False :
  632.                     if st.getQuestItemsCount(CONSUMABLE_ID) < BUFFS_PRICE * int(temp) : return showText("Sorry","You don't have enough adena!","False",0,0)
  633.                     else : st.takeItems(CONSUMABLE_ID,BUFFS_PRICE * int(temp))
  634.                 if eventParam2 == "Buff_Pet" :
  635.                     if st.player.getPet() != None :  
  636.                         for i in range (temp) :
  637.                             buff = listSplit[int(i)]
  638.                             buff = buff.replace("-"," ")
  639.                             buffSplit = buff.split(" ")
  640.                             Buff_lvl = buffSplit[0]
  641.                             Buff_Id = buffSplit[1]
  642.                             try : SkillTable.getInstance().getInfo(int(Buff_Id),int(Buff_lvl)).getEffects(st.getPlayer().getPet(),st.getPlayer().getPet())
  643.                             except : st.player.sendMessage("This skill has an error check the html")
  644.                     else: return showText("Info","You can't buff your pet!<br>Summon it and try again!","False","Return","main")
  645.                 else:
  646.                     if eventParam2 == "Buff_Cubic" :
  647.                                 if st.player.getCubics() != None:
  648.                                         for cubic in st.player.getCubics().values():  
  649.                                                 cubic.stopAction()
  650.                                                 st.player.delCubic(cubic.getId())
  651.                         for i in range (temp) :
  652.                             buff = listSplit[int(i)]
  653.                             buff = buff.replace("-"," ")
  654.                             buffSplit = buff.split(" ")
  655.                             Buff_lvl = buffSplit[0]
  656.                             Buff_Id = buffSplit[1]
  657.                             try : st.getPlayer().useMagic(SkillTable.getInstance().getInfo(int(Buff_Id),int(Buff_lvl)),False,False)
  658.                             except : st.player.sendMessage("This skill has an error check the html")
  659.                     else:
  660.                         for i in range (temp) :
  661.                             buff = listSplit[int(i)]
  662.                             buff = buff.replace("-"," ")
  663.                             buffSplit = buff.split(" ")
  664.                             Buff_lvl = buffSplit[0]
  665.                             Buff_Id = buffSplit[1]
  666.                             try : SkillTable.getInstance().getInfo(int(Buff_Id),int(Buff_lvl)).getEffects(st.getPlayer(),st.getPlayer())
  667.                             except : st.player.sendMessage("This skill has an error check the html")
  668.                 if TIME_OUT == True:
  669.                     if int(temp) > 1:
  670.                         if eventParam2 == "Buff_Pet" :
  671.                             if heal(st,"1") :pass
  672.                         else:
  673.                             if heal(st,"0") :pass
  674.                         if addTimeout(st,3,TIME_OUT_TIME + 9,0): pass
  675.                     else:
  676.                         if addTimeout(st,3,TIME_OUT_TIME,100): pass
  677.             filename = "data/html/teleporter/AIONpc-Buffer/NpcBuffer-"+eventParam1+".htm"
  678.             html = NpcHtmlMessage(npc.getObjectId())   
  679.             html.setFile(None,filename)
  680.             html.replace("%objectId%", str(npc.getObjectId()))
  681.             st.player.sendPacket(html)
  682.  
  683.         if event == "chat3" : return MainHtml3(st)
  684.         if event == "chat4" : return MainHtml4(st)
  685.         if event == "class_master": return classmaster(st)
  686.         if event == "getracemenu": return RaceMenu(st,eventParam1,eventParam2)
  687.         if event == "NoblesseMenu":
  688.             return NobleMenu(st)
  689.         if event == "subclass" :
  690.             if int(System.currentTimeMillis()/1000) > st.getInt("blockUntilTime"):
  691.                 return subclassopcions(st, eventParam1, eventParam2, eventParam3)
  692.             return MainHtml3(st)
  693.        
  694.         if event == "symbol" : return optionsymbol(st, eventParam1,eventParam2)
  695.  
  696.         if event == "PKlistoption":
  697.             temp = "pvpkills"; temp1 = "pkkills"; temp2= "FF0000"; temp3= "FFFFFF"
  698.             if eventParam1 == "2": temp = "pkkills"; temp1 = "pvpkills"; temp2= "FFFFFF"; temp3= "FF0000"
  699.             total_pkpvpkills = 0
  700.             htmltext = "<html><head><title>Top PVP/PK Players</title></head><body><table width=280><tr><td width=40 align=\"center\"><font color =\"FFFFFF\">Pos.</td><td width=100 align=\"left\"><font color =\"FFFFFF\">Player Name</color></td><td width=30 align=\"left\"><a action=\"bypass -h Quest " +QUEST_INFO+ " PKlistoption 1 0 0\"><font color=\""+temp2+"\">PVPs</font></a></td><td width=30 align=\"left\"><a action=\"bypass -h Quest " +QUEST_INFO+ " PKlistoption 2 0 0\"><font color=\""+temp3+"\">PKs</font></a></td></tr>"           
  701.             htmltext +="<tr><td><br></td></tr>"
  702.             pos = 0
  703.             A=20; i=0; j=0
  704.             if eventParam2 == "adelante":
  705.                 j = int(eventParam3)
  706.                 j=j+A
  707.             if eventParam2 == "atras":
  708.                 j = int(eventParam3)
  709.                 j=j-A
  710.             con = L2DatabaseFactory.getInstance().getConnection()
  711.             pks = con.prepareStatement("SELECT char_name,pvpkills,pkkills FROM characters WHERE "+temp+">0 and accesslevel=0 ORDER BY "+temp+" DESC,"+temp1+" DESC,char_name LIMIT "+str(j)+","+str(j+A+1))
  712.             rs = pks.executeQuery()
  713.             while (rs.next()) :
  714.                 char_name = rs.getString("char_name")
  715.                 char_pvpkills = rs.getString("pvpkills")
  716.                 char_pkkills = rs.getString("pkkills")
  717.                 i+=1
  718.                 if eventParam1 == "1":
  719.                     if i <= A: htmltext +="<tr><td width=40 align=\"center\"><font color =\"FFFFFF\">" + str(i+j) + "</td><td width=100 align=\"left\"><font color =\"FFFFFF\">" + char_name +"</td><td width=30 align=\"left\"><font color =\"FF0000\">" + char_pvpkills + "</td><td width=30 align=\"left\"><font color =\"FFFFFF\">" + char_pkkills + "</td></tr>"
  720.                 elif eventParam1 == "2":
  721.                     if i <= A: htmltext += "<tr><td width=40 align=\"center\"><font color =\"FFFFFF\">" + str(i+j) + "</td><td width=100 align=\"left\"><font color =\"FFFFFF\">" + char_name +"</td><td width=30 align=\"left\"><font color =\"FFFFFF\">" + char_pvpkills + "</td><td width=30 align=\"left\"><font color =\"FF0000\">" + char_pkkills + "</td></tr>"
  722.             try: con.close()
  723.             except : pass
  724.             i+=j
  725.             if i > A and j < A:
  726.                 htmltext += "</table><center><tr><td><table width=120 border=0>"
  727.                 htmltext += "<tr><td align=\"center\"><button value=\"Next\" action=\"bypass -h Quest " +QUEST_INFO+ " PKlistoption "+eventParam1+" adelante "+str(j)+"\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"
  728.                 htmltext += "</table></td></tr></center>"
  729.             elif i > A and j >= A and j < i-A:
  730.                 htmltext += "</table><center><tr><td><table width=160 border=0>"
  731.                 htmltext += "<tr><td align=\"center\"><button value=\"Back\" action=\"bypass -h Quest " +QUEST_INFO+ " PKlistoption "+eventParam1+" atras "+str(j)+"\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td>"
  732.                 htmltext += "<td align=\"center\"><button value=\"Next\" action=\"bypass -h Quest " +QUEST_INFO+ " PKlistoption "+eventParam1+" adelante "+str(j)+"\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"
  733.                 htmltext += "</table></td></tr></center>"
  734.             elif i > A and j >= i-A:
  735.                 htmltext += "</table><center><tr><td><table width=120 border=0>"
  736.                 htmltext += "<tr><td align=\"center\"><button value=\"Back\" action=\"bypass -h Quest " +QUEST_INFO+ " PKlistoption "+eventParam1+" atras "+str(j)+"\" width=40 height=15 back=\"L2UI_ct1.button_df\" fore=\"L2UI_ct1.button_df\"></td></tr>"
  737.                 htmltext += "</table></td></tr></center>"
  738.             htmltext += "</body></html>"
  739.             return htmltext
  740.  
  741.         if event == "getnoble":
  742.             count=st.getQuestItemsCount(NOBLE_ITEMID)
  743.             htmltext = "<html><title>Services Manager</title><body><center>"
  744.             if st.getPlayer().isNoble() == 1 :
  745.                 htmltext += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You already are Noblesse.</font><br>"
  746.             elif st.getPlayer().getLevel() < NOBLE_Level :
  747.                 htmltext += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">Come back here when you reach <font color=\"FFFF00\">level "+str(NOBLE_Level)+".</font></font><br>"
  748.             elif count < NOBLE_NumITEM :   
  749.                             htmltext += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You don't have the required Item.<br1>You need <font color=\"FFFF00\">"+str(NOBLE_NumITEM)+" "+str(getitemname(st,NOBLE_ITEMID))+"</font></font><br>"
  750.             else:
  751.                 st.getPlayer().setTarget(st.getPlayer())
  752.                 if eventParam1 == "2":
  753.                     st.takeItems(NOBLE_ITEMID,NOBLE_NumITEM)
  754.                                     st.getPlayer().setNoble(True)
  755.                                     st.giveItems(NOBLESS_TIARA,1)
  756.                                     st.playSound("ItemSound.quest_finish")
  757.                     st.setState(State.COMPLETED)
  758.                     htmltext += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"00FF00\">Congratulations! You are Noblesse.</font><br>"
  759.                                     st.exitQuest(1)
  760.                 else: return
  761.             htmltext += "</center></body></html>"
  762.             return htmltext
  763.            
  764.         if event == "changeclass":
  765.                 st.player.setClassId(int(eventParam1))
  766.                 if st.player.isSubClassActive():
  767.                     st.player.getSubClasses().get(st.player.getClassIndex()).setClassId(st.player.getActiveClass())
  768.                 else: st.player.setBaseClass(st.player.getActiveClass())
  769.             if st.getPlayer().getClassId().level() == 3:
  770.                 st.giveItems(CLASSMASTER_GIFT,CLASSMASTER_ITEM_NUM)
  771.             st.player.broadcastUserInfo()
  772.  
  773.         if event == "increaseclan" :
  774.                 if st.player.getClan() == None or not st.player.isClanLeader() :
  775.                     MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  776.                 MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You are not the leader of this clan.<br1>You may not raise the level of it.</font><br>"
  777.                 MAIN_HTML += "</center></body></html>"
  778.                 return MAIN_HTML
  779.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  780.             MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  781.             MAIN_HTML += "<font color=\"FF0000\">Clan level can be raised.<br1>To do so requires the following:</font><br><br>"
  782.             MAIN_HTML += "<button value=\"Level Up\" action=\"bypass -h Quest " +QUEST_INFO+ " increase_clan 0 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"><br1>"
  783.             MAIN_HTML += "<button value=\"Back\" action=\"bypass -h Quest " +QUEST_INFO+ " chat4 0 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"><br>"
  784.             MAIN_HTML += "<font color=\"LEVEL\">Level 1:</font> 20,000 SP, 650,000 Adena<br1>"
  785.             MAIN_HTML += "<font color=\"LEVEL\">Level 2:</font> 100,000 SP, 2,500,000 Adena<br1>"
  786.             MAIN_HTML += "<font color=\"LEVEL\">Level 3:</font> 350,000 SP, Evidence of Blood<br1>"
  787.             MAIN_HTML += "<font color=\"LEVEL\">Level 4:</font> 1,000,000 SP, Evidence of Determination<br1>"
  788.             MAIN_HTML += "<font color=\"LEVEL\">Level 5:</font> 2,500,000 SP, Evidence of Aspiration<br1>"
  789.             MAIN_HTML += "<font color=\"LEVEL\">Level 6:</font> 10,000 Clan Fame points,<br1>more than 30 clan members<br1>"
  790.             MAIN_HTML += "<font color=\"LEVEL\">Level 7:</font> 20,000 Clan Fame points,<br1>more than 80 clan members<br1>"
  791.             MAIN_HTML += "<font color=\"LEVEL\">Level 8:</font> 40,000 Clan Fame points,<br1>more than 120 clan members<br1>"
  792.             MAIN_HTML += "<font color=\"LEVEL\">Level 9:</font> 40,000 Clan Fame points,<br1>more than 120 clan members, 150 Blood Oaths<br1>"
  793.             MAIN_HTML += "<font color=\"LEVEL\">Level 10:</font> 40,000 Clan Fame points,<br1>more than 140 clan members, 5 Blood Alliances<br1>"
  794.             MAIN_HTML += "<font color=\"LEVEL\">Level 11:</font> 75,000 Clan Fame points,<br1>more than 170 clan members, Territory Owner<br1>"
  795.             MAIN_HTML += "</center></body></html>"
  796.             return MAIN_HTML
  797.  
  798.         if event == "increase_clan" :
  799.                     if not st.player.isClanLeader():
  800.                         st.player.sendPacket(SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT))
  801.                         return
  802.                     if st.player.getClan().levelUpClan(st.player):
  803.                         st.player.broadcastPacket(MagicSkillUse(st.player, 5103, 1, 0, 0))
  804.                         st.player.broadcastPacket(MagicSkillLaunched(st.player, 5103, 1))
  805.                 return
  806.             return
  807.  
  808.         elif event == "DisbandClan" :
  809.                 if st.player.getClan() == None or not st.player.isClanLeader() :
  810.                     MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  811.                 MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You are not the leader of this clan.<br1>You may not dissolve it.</font><br>"
  812.                 MAIN_HTML += "</center></body></html>"
  813.                 return MAIN_HTML
  814.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  815.             MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  816.             MAIN_HTML += "<font color=\"FF0000\">If you apply for dissolution,<br1>the clan will be dissolved.</font><br><br>"
  817.             MAIN_HTML += "<button value=\"Dissolution\" action=\"bypass -h Quest " +QUEST_INFO+ " dissolve_clan 0 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"><br1>"
  818.             MAIN_HTML += "<button value=\"Back\" action=\"bypass -h Quest " +QUEST_INFO+ " chat4 0 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\">"
  819.             MAIN_HTML += "</center></body></html>"
  820.             return MAIN_HTML
  821.  
  822.         elif event == "dissolve_clan" :
  823.                 if not st.player.isClanLeader():
  824.                     st.player.sendPacket(SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT))
  825.                         return
  826.                 clan = st.player.getClan()
  827.                 if clan.getAllyId() != 0:
  828.                         st.player.sendPacket(SystemMessage(SystemMessageId.CANNOT_DISPERSE_THE_CLANS_IN_ALLY))
  829.                         return
  830.                 if clan.isAtWar():
  831.                 st.player.sendPacket(SystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_WAR))
  832.                         return
  833.             if clan.getHasCastle() !=0 or clan.getHasHideout() != 0 or clan.getHasFort() != 0:
  834.                 st.player.sendPacket(SystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_OWNING_CLAN_HALL_OR_CASTLE))
  835.                         return
  836.             for castle in CastleManager.getInstance().getCastles():
  837.                 if SiegeManager.getInstance().checkIsRegistered(clan, castle.getCastleId()):
  838.                     st.player.sendPacket(SystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE))
  839.                             return
  840.             for fort in FortManager.getInstance().getForts():
  841.                 if FortSiegeManager.getInstance().checkIsRegistered(clan, fort.getFortId()):
  842.                     st.player.sendPacket(SystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE))
  843.                             return
  844.             if st.player.isInsideZone(L2PcInstance.ZONE_SIEGE) :
  845.                 st.player.sendPacket(SystemMessage(SystemMessageId.CANNOT_DISSOLVE_WHILE_IN_SIEGE))
  846.                         return
  847.             if clan.getDissolvingExpiryTime() > System.currentTimeMillis() :
  848.                 st.player.sendPacket(SystemMessage(SystemMessageId.DISSOLUTION_IN_PROGRESS))
  849.                         return
  850.             clan.setDissolvingExpiryTime(System.currentTimeMillis() + Config.ALT_CLAN_DISSOLVE_DAYS * 86400000L)
  851.             st.player.sendMessage("Dissolution in progress. Please Wait "+str(Config.ALT_CLAN_DISSOLVE_DAYS * 24L)+" hours to be completed")
  852.                 clan.updateClanInDB()
  853.             ClanTable.getInstance().scheduleRemoveClan(clan.getClanId())
  854.                 st.player.deathPenalty(False, False, False)
  855.  
  856.         elif event == "RestoreClan" :
  857.                 if st.player.getClan() == None or not st.player.isClanLeader() :
  858.                     MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  859.                 MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You are not the leader of this clan.<br1>You may not recover it.</font><br>"
  860.                 MAIN_HTML += "</center></body></html>"
  861.                 return MAIN_HTML
  862.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  863.             MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  864.             MAIN_HTML += "<font color=\"FF0000\">If you request a restoration<br1>your clan dissolution request will be canceled</font><br><br>"
  865.             MAIN_HTML += "<button value=\"Restoration\" action=\"bypass -h Quest " +QUEST_INFO+ " recover_clan 0 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"><br1>"
  866.             MAIN_HTML += "<button value=\"Back\" action=\"bypass -h Quest " +QUEST_INFO+ " chat4 0 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\">"
  867.             MAIN_HTML += "</center></body></html>"
  868.             return MAIN_HTML
  869.  
  870.         elif event == "recover_clan" :
  871.                 if not st.player.isClanLeader():
  872.                 st.player.sendPacket(SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT))
  873.                         return
  874.             clan = st.player.getClan()
  875.             clan.setDissolvingExpiryTime(0)
  876.             clan.updateClanInDB()
  877.             st.player.sendMessage("Dissolution progress canceled")
  878.    
  879.         elif event == "giveclanl" :
  880.                 if st.player.getClan() == None or not st.player.isClanLeader() :
  881.                     return noleader(st)
  882.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  883.             MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  884.             MAIN_HTML += "<font color=\"FF0000\">Insert the name of the Clan member<br1>to commit</font><br><br>"
  885.             MAIN_HTML += "<edit var=\"name\" width=110><br><br>"
  886.             MAIN_HTML += "<button value=\"Enter\" action=\"bypass -h Quest " +QUEST_INFO+ " change_clan_leader $name no_data 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"><br1>"
  887.             MAIN_HTML += "<button value=\"Back\" action=\"bypass -h Quest " +QUEST_INFO+ " chat4 0 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\">"
  888.             MAIN_HTML += "</center></body></html>"
  889.             return MAIN_HTML
  890.  
  891.         elif event == "change_clan_leader" :
  892.             if eventParam1 == "no_data": return
  893.                 if not st.player.isClanLeader():
  894.                         st.player.sendPacket(SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT))
  895.                         return
  896.             if st.player.isFlying():
  897.                 st.player.sendMessage("Please, stop flying")
  898.                 return
  899.             clan = st.player.getClan()
  900.             member = clan.getClanMember(eventParam1)
  901.             if member == None:
  902.                 sm = SystemMessage(SystemMessageId.S1_DOES_NOT_EXIST)
  903.                 sm.addString(eventParam1)
  904.                 st.player.sendPacket(sm)
  905.                 sm = None
  906.                 return
  907.             if not member.isOnline():
  908.                         st.player.sendPacket(SystemMessage(SystemMessageId.INVITED_USER_NOT_ONLINE))
  909.                 return
  910.             if st.player.getName() != member.getName(): return
  911.             clan.setNewLeader(member)
  912.  
  913.         elif event == "learn_clan_skills":
  914.             if st.player.getClan() == None or not st.player.isClanLeader():
  915.                 MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  916.                 MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You're not qualified to learn Clan skills.</font><br>"
  917.                 MAIN_HTML += "</center></body></html>"
  918.                 return MAIN_HTML
  919.             skills = SkillTreeTable.getInstance().getAvailablePledgeSkills(st.player)
  920.             asl = AcquireSkillList(AcquireSkillList.SkillType.Clan)
  921.             counts = 0
  922.             for s in skills:
  923.                 cost = s.getRepCost()
  924.                 itemCount = s.getItemCount()
  925.                 counts+=1
  926.                 asl.addSkill(s.getId(), s.getLevel(), s.getLevel(), cost, itemCount)
  927.             if counts == 0:
  928.                 if st.player.getClan().getLevel() < 8:
  929.                     sm = SystemMessage(SystemMessageId.DO_NOT_HAVE_FURTHER_SKILLS_TO_LEARN)
  930.                             if st.player.getClan().getLevel() < 5:
  931.                                 sm.addNumber(5)
  932.                             else:
  933.                                 sm.addNumber(st.player.getClan().getLevel()+1)
  934.                             st.player.sendPacket(sm)
  935.                             st.player.sendPacket(AcquireSkillDone())
  936.                 else:
  937.                     MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  938.                     MAIN_HTML += "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><font color=\"FF0000\">You've learned all skills available for your Clan.</font><br>"
  939.                     MAIN_HTML += "</center></body></html>"
  940.                     return MAIN_HTML
  941.             else:
  942.                         st.player.sendPacket(asl)
  943.  
  944.         elif event == "createclan" :
  945.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  946.             MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  947.             MAIN_HTML += "<font color=\"FF0000\">.::Enter clan name::.</font><br><br>"
  948.             MAIN_HTML += "<edit var=\"name\" width=110><br><br>"
  949.             MAIN_HTML += "<button value=\"Enter\" action=\"bypass -h Quest " +QUEST_INFO+ " create_clan $name no_data 0 0 \" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"><br1>"
  950.             MAIN_HTML += "<button value=\"Back\" action=\"bypass -h Quest " +QUEST_INFO+ " chat4 0 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\">"
  951.             MAIN_HTML += "</center></body></html>"
  952.             return MAIN_HTML
  953.  
  954.         elif event == "create_clan" :
  955.             if eventParam1 == "no_data": return
  956.                     ClanTable.getInstance().createClan(st.player, eventParam1)
  957.             return
  958.  
  959.         elif event == "createally":
  960.             MAIN_HTML = "<html><title>Services Manager</title><body><center>"
  961.             MAIN_HTML += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><br>"
  962.             MAIN_HTML += "<font color=\"FF0000\">.::Enter Alliance name::.</font><br><br>"
  963.             MAIN_HTML += "<edit var=\"name\" width=110><br><br>"
  964.             MAIN_HTML += "<button value=\"Enter\" action=\"bypass -h Quest " +QUEST_INFO+ " create_ally $name no_data 0 0 \" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\"><br1>"
  965.             MAIN_HTML += "<button value=\"Back\" action=\"bypass -h Quest " +QUEST_INFO+ " chat4 0 0 0\" width=80 height=20 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_ct1.button_df\">"
  966.             MAIN_HTML += "</center></body></html>"
  967.             return MAIN_HTML
  968.  
  969.         elif event == "create_ally":
  970.             if eventParam1 == "no_data": return
  971.                     if not st.player.isClanLeader():
  972.                 st.player.sendPacket(SystemMessage(SystemMessageId.ONLY_CLAN_LEADER_CREATE_ALLIANCE))
  973.                         return
  974.             st.player.getClan().createAlly(st.player, eventParam1)
  975.             return
  976.  
  977.         elif event == "dissolve_ally":
  978.             if not st.player.isClanLeader():
  979.                 st.player.sendPacket(SystemMessage(SystemMessageId.FEATURE_ONLY_FOR_ALLIANCE_LEADER))
  980.                         return
  981.                     st.player.getClan().dissolveAlly(st.player)
  982.             return
  983.         else:   return
  984.  
  985.     def onFirstTalk (self,npc,player):
  986.         st = player.getQuestState(QUEST_INFO)
  987.         if not st : st = self.newQuestState(player)
  988.         st.setState(State.STARTED)
  989.         if player.isGM():
  990.             if ShowReloadScriptPanel == True: filename = "data/html/teleporter/AIONpc-Htmls/mainhtml-5.htm"
  991.             else: filename = "data/html/teleporter/AIONpc-Htmls/mainhtml-0.htm"
  992.             html = NpcHtmlMessage(npc.getObjectId())   
  993.             html.setFile(None,filename)
  994.             html.replace("%objectId%", str(npc.getObjectId()))
  995.             st.player.sendPacket(html)      
  996.         elif int(System.currentTimeMillis()/1000) > st.getInt("blockUntilTime"):
  997.             if AllowVIP == False or player.getAccessLevel().getLevel() == VIPaccesLevel and AllowVIP == True:
  998.                 if ALLOW_KARMA_PLAYER == False and player.getKarma() > 0 :
  999.                     return showText("Info","You have too much karma!<br>Come back,<br>when you don't have any karma!","False","Return","main")
  1000.                 elif st.player.getPvpFlag() > 0 :
  1001.                     return showText("Info","You can't use my services while you are flagged!<br>Wait some time and try again!","False","Return","main")
  1002.                 elif st.player.isInCombat() :
  1003.                     return showText("Info","You can't use my services while you are attacking!<br>Stop your fight and try again!","False","Return","main")
  1004.                 else:
  1005.                     filename = "data/html/teleporter/AIONpc-Htmls/mainhtml-0.htm"
  1006.                     html = NpcHtmlMessage(npc.getObjectId())   
  1007.                     html.setFile(None,filename)
  1008.                     html.replace("%objectId%", str(npc.getObjectId()))
  1009.                     st.player.sendPacket(html)
  1010.             else:
  1011.                 return showText("Sorry","This NPC is only for VIP's!<br>Contact the administrator for more info!","False","Return","main")
  1012.                
  1013.         else: return
  1014.  
  1015. QUEST = Quest(QuestId,QUEST_INFO,QuestDesc)
  1016.  
  1017. QUEST.addStartNpc(npcId)
  1018. QUEST.addFirstTalkId(npcId)
  1019. QUEST.addTalkId(npcId)
Advertisement
Add Comment
Please, Sign In to add comment