L2J_CE

Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
L2J_CE

L2J_CE Server


Участников: 2

    нпк перенос заточки

    doc
    doc


    Сообщения : 9
    Дата регистрации : 2010-04-06
    Возраст : 37

    нпк перенос заточки Empty нпк перенос заточки

    Сообщение  doc Вс Ноя 28, 2010 7:29 am

    Всем привет. Помогите исправить ошибку:
    Код:
    Error on: C:\Server\gameserver\data\scripts\custom\q8015_Enchex\__init__.py.error.log
    Line: -1 - Column: -1

    Traceback (innermost last):
      File "__init__.py", line 401, in ?
    TypeError: net.sf.l2j.gameserver.model.quest.State(): expected 0 args; got 2
    вот сам скрипт:
    Код:
    import sys
    from java.lang import System
    from net.sf.l2j import L2DatabaseFactory
    from net.sf.l2j.gameserver.model.quest import State
    from net.sf.l2j.gameserver.model.quest import QuestState
    from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest
    from net.sf.l2j.gameserver.network.serverpackets import CharInfo
    from net.sf.l2j.gameserver.network.serverpackets import InventoryUpdate
    from net.sf.l2j.gameserver.network.serverpackets import ItemList
    from net.sf.l2j.gameserver.network.serverpackets import UserInfo
    from net.sf.l2j.gameserver.templates.item import L2Item

    qn = "q8015_Enchex"

    #id нпц
    NPC = 80007

    #id итема для заточки
    ITEM = 57
    #стоимость заточки за каждый +
    COST = 30000000
    #название итема
    INAME = "Adena"
    #список запрещенных итемов
    FORBIDDEN = [12,132]

    print "importing custom: q8015_Enchex    OK"

    class Quest (JQuest) :

     def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

     def onAdvEvent (self,event,npc,player):
      st = player.getQuestState(qn)
      if event == "spisok":
        htmltext = "<html><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><br><img src="L2UI.SquareBlank" width=260 height=2><br1>"     
        htmltext += "<table width=260><tr><td align=center><font color=LEVEL>Перенос заточки</font></td></tr></table>"
        htmltext += "<button value="Оружие[S]" action="bypass -h Quest q8015_Enchex step1_0" width=100 height=15 back="sek.cbui94" fore="sek.cbui92"><br>"
        htmltext += "<button value="Броня[S]" action="bypass -h Quest q8015_Enchex step1_1" width=100 height=15 back="sek.cbui94" fore="sek.cbui92"><br>"
        htmltext += "<button value="Бижутерия[S]" action="bypass -h Quest q8015_Enchex jewerly" width=100 height=15 back="sek.cbui94" fore="sek.cbui92"><br>"
        htmltext += "<center><img src="L2UI_CH3.herotower_deco" width=256 height=32></center></body></html>"
      elif event.startswith("step1_"):
        itemType = int(event.replace("step1_", ""))
        htmltext = "<html><body>Перенос заточки:<br>Откуда переносим?<br><br><table width=300>"
        if itemType == 0:
          TYPES = ["Sword","Blunt","Dagger","Bow","Etc","Pole","Fist","Dual Sword","Dual Fist","Big Sword","Big Blunt"]
        elif itemType == 1:
          TYPES = ["Light","Heavy","Magic"]
        else:
          htmltext = "<html><body>Перенос заточки:<br>Ошибка.</body></html>"
          return htmltext
        st.set("type",str(itemType))
        for Item in st.getPlayer().getInventory().getItems():
          itemTemplate = Item.getItem()
          idtest = Item.getItemId()
          itype = str(Item.getItemType())
          grade = itemTemplate.getCrystalType()
          if idtest not in FORBIDDEN and itemTemplate.getDuration() == -1 and grade == 5 and itype in TYPES and Item.getEnchantLevel() > 0:
            con=L2DatabaseFactory.getInstance().getConnection()
            listitems=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
            listitems.setInt(1, idtest)
            rs=listitems.executeQuery()
            while (rs.next()) :
              icon=rs.getString("itemIcon")
              try :
                grades = {1: "D", 2: "C", 3: "B", 4: "A", 5: "S"}
                pgrade = grades.get(grade, str(""))
                if Item.getEnchantLevel() == 0:
                  enchant = str("")
                else:
                  enchant = " +"+str(Item.getEnchantLevel())+""
                htmltext += "<tr><td><img src="Icon."+str(icon)+"" width=32 height=32></td><td><a action="bypass -h Quest q8015_Enchex step1next_" + str(Item.getObjectId()) +"">" + itemTemplate.getName() + "["+str(pgrade)+"] " + enchant + "</a></td></tr>"
              except :
                try : listitems.close()
                except : pass
            try :
              con.close()
            except :
              pass
        htmltext += "</table><br><a action="bypass -h Quest q8015_Enchex spisok">Вернуться.</a></body></html>"
      elif event == "jewerly":
        htmltext = "<html><body>Перенос заточки:<br>Откуда переносим?<br><br><table width=300>"
        st.set("type","3")
        for Item in st.getPlayer().getInventory().getItems():
          itemTemplate = Item.getItem()
          idtest = Item.getItemId()
          itemType = Item.getItem().getType2()
          grade = itemTemplate.getCrystalType()
          if idtest not in FORBIDDEN and itemTemplate.getDuration() == -1 and grade == 5 and itemType == L2Item.TYPE2_ACCESSORY and Item.getEnchantLevel() > 0:
            con=L2DatabaseFactory.getInstance().getConnection()
            listitems=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
            listitems.setInt(1, idtest)
            rs=listitems.executeQuery()
            while (rs.next()) :
              icon=rs.getString("itemIcon")
              try :
                grades = {1: "D", 2: "C", 3: "B", 4: "A", 5: "S"}
                pgrade = grades.get(grade, str(""))
                if Item.getEnchantLevel() == 0:
                  enchant = str("")
                else:
                  enchant = " +"+str(Item.getEnchantLevel())+""
                htmltext += "<tr><td><img src="Icon."+str(icon)+"" width=32 height=32></td><td><a action="bypass -h Quest q8015_Enchex step1next_" + str(Item.getObjectId()) +"">" + itemTemplate.getName() + "["+str(pgrade)+"] " + enchant + "</a></td></tr>"
              except :
                try : listitems.close()
                except : pass 
            try :
              con.close()
            except :
              pass
        htmltext += "</table><br><a action="bypass -h Quest q8015_Enchex spisok">Вернуться.</a></body></html>"
      elif event.startswith("step1next_"):
        itemObjId = int(event.replace("step1next_", ""))
        Item = st.getPlayer().getInventory().getItemByObjectId(itemObjId)
        itemTemplate = Item.getItem()
        if Item and itemTemplate.getDuration() == -1 and Item.getEnchantLevel() > 0:
          grade = itemTemplate.getCrystalType()
          idtest = Item.getItemId()
          con=L2DatabaseFactory.getInstance().getConnection()
          listitems=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
          listitems.setInt(1, idtest)
          rs=listitems.executeQuery()
          while (rs.next()) :
            icon=rs.getString("itemIcon")
            try :
              st.set("enchant",str(Item.getEnchantLevel()))
              st.set("oneitem",str(itemObjId))
              grades = {1: "d", 2: "c", 3: "b", 4: "a", 5: "s"}
              pgrade = grades.get(grade, str(""))
              enchant = (Item.getEnchantLevel() > 0 and " +"+str(Item.getEnchantLevel())+"") or str("")
              htmltext =  "<html><body>Перенос заточки:<br>Отсюда переносим?<br>"
              htmltext += "<table width=300><tr><td><img src="Icon."+str(icon)+"" width=32 height=32></td><td><font color=LEVEL>" + itemTemplate.getName() + " " + enchant + "</font><img src="symbol.grade_"+str(pgrade)+"" width=16 height=16><br></td></tr></table><br><br>"
              payment = int(Item.getEnchantLevel()*COST)
              if st.getQuestItemsCount(ITEM) < payment:
                htmltext += "Стоимость переноса: <font color=ff2400>"+str(payment)+"</font> "+INAME+"<br>"
              else:
                htmltext += "Стоимость переноса: <font color=adff2f>"+str(payment)+"</font> "+INAME+"<br>"
                htmltext += "<button value="Продолжить" action="bypass -h Quest q8015_Enchex step2" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>"
              htmltext += "<br><a action="bypass -h Quest q8015_Enchex spisok">Вернуться.</a></body></html>"
            except :
              try : listitems.close()
              except : pass
          try :
            con.close()
          except :
            pass
        else :
          htmltext = "<html><body>Перенос заточки:<br>Ошибка!<br><a action="bypass -h Quest q8015_Enchex spisok">Вернуться.</a></body></html>"
      elif event == "step2":
        htmltext = "<html><body>Перенос заточки:<br>Куда переносим?<br><br><table width=300>"
        itemType = st.getInt("type")
        if itemType == 0:
          TYPES = ["Sword","Blunt","Dagger","Bow","Etc","Pole","Fist","Dual Sword","Dual Fist","Big Sword","Big Blunt"]
        elif itemType == 1:
          TYPES = ["Light","Heavy","Magic"]
        weapon1 = st.getInt("oneitem")
        for Item in st.getPlayer().getInventory().getItems():
          itemTemplate = Item.getItem()
          idtest = Item.getItemId()
          itype = str(Item.getItemType())
          grade = itemTemplate.getCrystalType()
          if itemType == 0 or itemType == 1:
            if idtest not in FORBIDDEN and itemTemplate.getDuration() == -1 and grade == 5 and itype in TYPES and Item.getObjectId() != weapon1:
              con=L2DatabaseFactory.getInstance().getConnection()
              listitems=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
              listitems.setInt(1, idtest)
              rs=listitems.executeQuery()
              while (rs.next()) :
                icon=rs.getString("itemIcon")
                try :
                  grades = {1: "[D]", 2: "[C]", 3: "[B]", 4: "[A]", 5: "[S]"}
                  pgrade = grades.get(grade, str(""))
                  if Item.getEnchantLevel() == 0:
                    enchant = str("")
                  else:
                    enchant = " +"+str(Item.getEnchantLevel())+""
                  htmltext += "<tr><td><img src="Icon."+str(icon)+"" width=32 height=32></td><td><a action="bypass -h Quest q8015_Enchex step2next_" + str(Item.getObjectId()) +"">" + itemTemplate.getName() + ""+str(pgrade)+" " + enchant + "</a></td></tr>"
                except :
                  try : listitems.close()
                  except : pass
              try :
                con.close()
              except :
                pass
          elif itemType == 3:
            itemType2 = Item.getItem().getType2()
            if idtest not in FORBIDDEN and itemTemplate.getDuration() == -1 and grade == 5 and itemType2 == L2Item.TYPE2_ACCESSORY and Item.getObjectId() != weapon1:
              con=L2DatabaseFactory.getInstance().getConnection()
              listitems=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
              listitems.setInt(1, idtest)
              rs=listitems.executeQuery()
              while (rs.next()) :
                icon=rs.getString("itemIcon")
                try :
                  grades = {1: "[D]", 2: "[C]", 3: "[B]", 4: "[A]", 5: "[S]"}
                  pgrade = grades.get(grade, str(""))
                  if Item.getEnchantLevel() == 0:
                    enchant = str("")
                  else:
                    enchant = " +"+str(Item.getEnchantLevel())+""
                  htmltext += "<tr><td><img src="Icon."+str(icon)+"" width=32 height=32></td><td><a action="bypass -h Quest q8015_Enchex step2next_" + str(Item.getObjectId()) +"">" + itemTemplate.getName() + ""+str(pgrade)+" " + enchant + "</a></td></tr>"
                except :
                  try : listitems.close()
                  except : pass
              try :
                con.close()
              except :
                pass
        htmltext += "</table><br><a action="bypass -h Quest q8015_Enchex spisok">Вернуться.</a></body></html>"
      elif event.startswith("step2next_"):
        itemObjId = int(event.replace("step2next_", ""))
        obj = str(itemObjId)
        Item = st.getPlayer().getInventory().getItemByObjectId(itemObjId)
        itemTemplate = Item.getItem()
        if Item and itemTemplate.getDuration() == -1:
          grade = itemTemplate.getCrystalType()
          idtest = Item.getItemId()
          con=L2DatabaseFactory.getInstance().getConnection()
          listitems=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
          listitems.setInt(1, idtest)
          rs=listitems.executeQuery()
          while (rs.next()) :
            icon=rs.getString("itemIcon")
            try :
              st.set("twoitem",obj) 
              grades = {1: "d", 2: "c", 3: "b", 4: "a", 5: "s"}
              pgrade = grades.get(grade, str(""))
              enchant = (Item.getEnchantLevel() > 0 and " +"+str(Item.getEnchantLevel())+"") or str("")
              htmltext =  "<html><body>Перенос заточки:<br>В эту пушку переносим?<br>"
              htmltext += "<table width=300><tr><td><img src="Icon."+str(icon)+"" width=32 height=32></td><td><font color=LEVEL>" + itemTemplate.getName() + " " + enchant + "</font><img src="symbol.grade_"+str(pgrade)+"" width=16 height=16><br></td></tr></table><br><br>"
              htmltext += "<button value="Продолжить" action="bypass -h Quest q8015_Enchex step3" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>"
              htmltext += "<br><a action="bypass -h Quest q8015_Enchex spisok">Вернуться.</a></body></html>"
            except :
              try : listitems.close()
              except : pass
          try :
            con.close()
          except :
            pass
        else :
          htmltext = "<html><body>Перенос заточки:<br>Ошибка!<br><a action="bypass -h Quest q8015_Enchex spisok">Вернуться.</a></body></html>"
      elif event.startswith("step3"):
        weapon1 = st.getInt("oneitem")
        weapon2 = st.getInt("twoitem")
        htmltext =  "<html><body>Перенос заточки:<br>Подтверждаете?<br>"
        htmltext += "Отсюда:"
        Item = st.getPlayer().getInventory().getItemByObjectId(weapon1)
        itemTemplate = Item.getItem()
        if Item:
          grade = itemTemplate.getCrystalType()
          idtest = Item.getItemId()
          con=L2DatabaseFactory.getInstance().getConnection()
          listitems=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
          listitems.setInt(1, idtest)
          rs=listitems.executeQuery()
          while (rs.next()) :
            icon=rs.getString("itemIcon")
            try :
              grades = {1: "d", 2: "c", 3: "b", 4: "a", 5: "s"}
              pgrade = grades.get(grade, str(""))
              enchant = (Item.getEnchantLevel() > 0 and " +"+str(Item.getEnchantLevel())+"") or str("")
              htmltext += "<table width=300><tr><td><img src="Icon."+str(icon)+"" width=32 height=32></td><td><font color=LEVEL>" + itemTemplate.getName() + " " + enchant + "</font><img src="symbol.grade_"+str(pgrade)+"" width=16 height=16><br></td></tr></table><br><br>"
              payment = int(Item.getEnchantLevel()*COST)
              if st.getQuestItemsCount(ITEM) < payment:
                htmltext += "Стоимость переноса: <font color=ff2400>"+str(payment)+"</font> "+INAME+"<br>"
              else:
                htmltext += "Стоимость переноса: <font color=adff2f>"+str(payment)+"</font> "+INAME+"<br>"
            except :
              try : listitems.close()
              except : pass
          try :
            con.close()
          except :
            pass
        htmltext += "Сюда:<br>"
        Item = st.getPlayer().getInventory().getItemByObjectId(weapon2)
        itemTemplate = Item.getItem()
        if Item:
          grade = itemTemplate.getCrystalType()
          idtest = Item.getItemId()
          cons=L2DatabaseFactory.getInstance().getConnection()
          listitemss=cons.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
          listitemss.setInt(1, idtest)
          rs=listitemss.executeQuery()
          while (rs.next()) :
            icon=rs.getString("itemIcon")
            try :
              grades = {1: "d", 2: "c", 3: "b", 4: "a", 5: "s"}
              pgrade = grades.get(grade, str(""))
              enchant = (Item.getEnchantLevel() > 0 and " +"+str(Item.getEnchantLevel())+"") or str("")
              htmltext += "<table width=300><tr><td><img src="Icon."+str(icon)+"" width=32 height=32></td><td><font color=LEVEL>" + itemTemplate.getName() + " " + enchant + "</font><img src="symbol.grade_"+str(pgrade)+"" width=16 height=16><br></td></tr></table><br><br>"
            except :
              try : listitemss.close()
              except : pass
          try :
            cons.close()
          except :
            pass
          htmltext += "<button value="Продолжить" action="bypass -h Quest q8015_Enchex step4" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>"
        else :
          htmltext = "<html><body>Перенос заточки:<br>Ошибка!<br><a action="bypass -h Quest q8015_Enchex spisok">Вернуться.</a></body></html>"
      elif event.startswith("step4"):
        htmltext =  "<html><body>Перенос заточки:<br>Подождите...<br><br>"
        ench = st.getInt("enchant")
        payment = int(ench*COST)
        if st.getQuestItemsCount(ITEM) < payment:
          htmltext += "Стоимость переноса: <font color=ff2400>"+str(payment)+"</font> "+INAME+"<br>"
          return htmltext
        #<
        weapon1 = st.getInt("oneitem")
        weapon2 = st.getInt("twoitem")
        item1 = st.getPlayer().getInventory().getItemByObjectId(weapon1)
        item2 = st.getPlayer().getInventory().getItemByObjectId(weapon2)
        if item1 == None or item2 == None:
          st.set("enchant","0") 
          htmltext += "<font color=ff2400>Ошибка переноса.</font><br>"
          return htmltext
        itemType = st.getInt("type")
        itype1 = str(item1.getItemType())
        itype2 = str(item2.getItemType())
        grade1 = item1.getItem().getCrystalType()
        grade2 = item2.getItem().getCrystalType()
        #<
        if item1.getEnchantLevel() != ench:
          st.set("enchant","0") 
          htmltext += "<font color=ff2400>Ошибка переноса.</font><br>"
          return htmltext
        #<
        if grade1 != 5 or grade2 != 5:
          st.set("enchant","0") 
          htmltext += "<font color=ff2400>Ошибка переноса.</font><br>"
          return htmltext
        #< 
        if itemType == 0:
          TYPES = ["Sword","Blunt","Dagger","Bow","Etc","Pole","Fist","Dual Sword","Dual Fist","Big Sword","Big Blunt"]
          if itype1 not in TYPES or itype2 not in TYPES:
            st.set("enchant","0") 
            htmltext += "<font color=ff2400>Ошибка переноса.</font><br>"
            return htmltext
        elif itemType == 1:
          TYPES = ["Light","Heavy","Magic"]
          if itype1 not in TYPES or itype2 not in TYPES:
            st.set("enchant","0") 
            htmltext += "<font color=ff2400>Ошибка переноса.</font><br>"
            return htmltext
        elif itemType == 3:
          jew1 = item1.getItem().getType2()
          jew2 = item2.getItem().getType2()
          if jew1 != L2Item.TYPE2_ACCESSORY or jew2 != L2Item.TYPE2_ACCESSORY:
            st.set("enchant",0) 
            htmltext += "<font color=ff2400>Ошибка переноса.</font><br>"
            return htmltext
        else:
          htmltext += "<font color=ff2400>Ошибка переноса.</font><br>"
          return htmltext
        #<
        st.takeItems(ITEM,payment)
        #<
        slott = item1.getEquipSlot()
        if slott > 0:
          testt = player.getInventory().getPaperdollItem(slott)
          player.getInventory().unEquipItemInSlotAndRecord(slott)
          item1.setEnchantLevel(0)
          player.getInventory().equipItemAndRecord(testt)
          iut = InventoryUpdate()
          iut.addModifiedItem(testt)
          player.sendPacket(iut)
          player.broadcastPacket(CharInfo(player))
          player.sendPacket(UserInfo(player))
        else:
          item1.setEnchantLevel(0)
          player.sendPacket(ItemList(player, False))
        #<
        slot = item2.getEquipSlot()
        if slot > 0:
          test = player.getInventory().getPaperdollItem(slot)
          player.getInventory().unEquipItemInSlotAndRecord(slot)
          item2.setEnchantLevel(ench)
          player.getInventory().equipItemAndRecord(test)
          iu = InventoryUpdate()
          iu.addModifiedItem(test)
          player.sendPacket(iu)
          player.broadcastPacket(CharInfo(player))
          player.sendPacket(UserInfo(player))
        else:
          item2.setEnchantLevel(ench)
          player.sendPacket(ItemList(player, False))
        htmltext += "<font color=bef574>[ +"+str(ench)+"]</font> перенесено.<br>"
      else:
        htmltext = "<html><body>Перенос заточки:<br>Oops!</body></html>"
      return htmltext

     def onTalk (self,npc,player):
      st = player.getQuestState(qn)
      npcId = npc.getNpcId()
      if npcId == NPC:
        htmltext = "privetstvie.htm"
      return htmltext

    QUEST      = Quest(8015,qn,"custom")
    CREATED    = State('Start', QUEST)

    QUEST.setInitialState(CREATED)

    QUEST.addStartNpc(NPC)
    QUEST.addTalkId(NPC)
    сюда http://zalil.ru/30037755 залил нпк целиком, во втором квесте :
    Код:
    Error on: C:\Server\gameserver\data\scripts\custom\q8014_LifeStone\__init__.py.error.log
    Line: -1 - Column: -1

    Traceback (innermost last):
      File "__init__.py", line 327, in ?
    TypeError: net.sf.l2j.gameserver.model.quest.State(): expected 0 args; got 2
    avatar
    karakym


    Сообщения : 1
    Дата регистрации : 2011-08-28

    нпк перенос заточки Empty Re: нпк перенос заточки

    Сообщение  karakym Вс Авг 28, 2011 7:07 pm

    Перезалей npc

      Текущее время Пт Окт 04, 2024 3:20 am