Jump to content

Donation Npc / Item Market For L2Jfrozen


claww

Recommended Posts

  • 3 months later...
  • 1 year later...

hey guys i have a quick question ..Npc works great but there's one problem ..Icons from customs items do not show to all the services from the npc ..
For example npc has , enchanter ( add enchants to your equipment) , transfer enchant ( u know what this is..)

 

When using enchanter ( to add +1 enchant for example ) icons are shown properly

But, when using transfer enchant icons are black? can anyone help me with that?

 

I can post u here both _init_py files.

 

here's the right one where i can see all icons.

import sys
from java.lang import String
from java.lang import Integer
from com.l2jfrozen.util.random import Rnd
from com.l2jfrozen.util.database import L2DatabaseFactory
from com.l2jfrozen.gameserver.model.quest import State
from com.l2jfrozen.gameserver.model.actor.instance import L2ItemInstance
from com.l2jfrozen.gameserver.network.serverpackets import ItemList
from com.l2jfrozen.gameserver.network.serverpackets import UserInfo
from com.l2jfrozen.gameserver.network.serverpackets import CharInfo
from com.l2jfrozen.gameserver.network.serverpackets import InventoryUpdate
from com.l2jfrozen.gameserver.model.quest.jython import QuestJython as JQuest

Qn = "919_Enchanter"
Npc = 300300

MaxEnchantWeapon = 25 
MaxEnchantArmor = 25  
MaxEnchantJewel = 25  

Adena = 3488 # Donate coin (adena)
ItemName = "Donate Coins"

JPrice = [1,1,1,1,1,1] # Price for +1 Jewels (depends Jewels grade, ex. Wprice[0] = No Grade)
APrice = [1,1,1,1,1,1] # Price for +1 Armors (depends Armors grade, ex. Wprice[0] = No Grade)
WPrice = [2,2,2,2,2,2] # Price for +1 Weapons (depends Weapons grade, ex. Wprice[0] = No Grade)


Jewel = ["None"]
Armor = ["Light","Heavy","Magic"]
Weapon = ["Sword","Blunt","Dagger","Bow","Etc","Pole","Fist","Dual Sword","Dual Fist","Big Sword","Big Blunt","Shield"]

SlotForEnchant = [7,8,6,10,11,9,12,3,1,2,4,5] # editable [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
NoEnchantItem = [] 

print "Donate Manager: Loaded 40%"

def getItemIcon(ItemId):
  con=L2DatabaseFactory.getInstance().getConnection()
  II=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
  II.setInt(1, ItemId)
  rs=II.executeQuery()
  ItemIcon = ""
  if rs.next() :
    ItemIcon = rs.getString("itemIcon")
  else :
    ItemIcon = "icon.etc_adena_i00"
  try :
    con.close()
  except :
    pass
  return ItemIcon

def validateItem(ItemId) :
  for itm in NoEnchantItem :
    if itm == ItemId :
      return False
  return True

def getHexSlot(Slot) :
  if Slot == 0 :
    return 0x01
  elif Slot == 1 :	# Left Earring
    return 0x04
  elif Slot == 2 :	# Right Earring
    return 0x02
  elif Slot == 3 :	# Neck
    return 0x08
  elif Slot == 4 :	# Left Ring
    return 0x20
  elif Slot == 5 :	# Right Ring
    return 0x10
  elif Slot == 6 :	# Helmet
    return 0x40
  elif Slot == 7 :	# Left Hand
    return 0x80
  elif Slot == 8 :	# Right Hand
    return 0x0100
  elif Slot == 9 :	# Gloves
    return 0x0200
  elif Slot == 10 :	# Breastplate
    return 0x0400
  elif Slot == 11 :	# Gaiters
    return 0x0800
  elif Slot == 12 :	# Boots
    return 0x1000
  elif Slot == 13 :	#
    return 0x2000
  elif Slot == 14 :	# R/L Finger
    return 0x4000
  elif Slot == 15 :	#
    return 0x040000
  elif Slot == 16 :	#
    return 0x010000
  elif Slot == 17 :	#
    return 0x080000
  return 0x00

class Quest (JQuest) :

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

  def onTalk (Self,npc,player) :
    st = player.getQuestState(Qn)
    npcId = npc.getNpcId()
    htmltext = u"<html><title>Donate Shop</title><body><center>Error!</center></body></html>"
    if not st : return htmltext
    htmltext = "<html><body><font color=LEVEL>Add +1 Enchant to your equipment</font><br1>Cost: 1 Donate Coin [Armor,Jewels]<br1> Cost: 2 Donate Coins [Weapon]"       
    for Slot in SlotForEnchant :
      Item1 = player.getInventory().getPaperdollItemByL2ItemId(getHexSlot(Slot))
      if Item1 != None :
        if validateItem(Item1.getItemId()) :
          Grade = Item1.getItem().getCrystalType()
		  
          if Grade not in [0] :
            if Grade == 1:
              pgrade = str("[D]")
            elif Grade == 2:
              pgrade = str("[C]")
            elif Grade == 3:
              pgrade = str("[B]")
            elif Grade == 4:
              pgrade = str("[A]")
            elif Grade == 5:
             pgrade = str("[S]")
            else:
              pgrade = str("")
            htmltext = htmltext + "<img src=\"" + getItemIcon(Item1.getItemId()) + "\" width=32 height=32><a action=\"bypass -h Quest 919_Enchanter slot_" + str(Slot) + "\">" + Item1.getItemName() + " " + str(pgrade) + " +" + str(Item1.getEnchantLevel()) + "</a><br>"
    htmltext = htmltext + "</body></html>"
    return htmltext

  def onAdvEvent (self,event,npc,player) :
    st = player.getQuestState(Qn)
    htmltext = u"<html><title>Donate Shop</title><body><center>Error!</center></body></html>"
    if not st : return htmltext
    strEvent = String(event)
    if strEvent.startsWith("slot") :
      intEvent = Integer.parseInt(strEvent.substring(5))
      htmltext = "<html><title>Donate Shop</title><body><br>"
      Item1 = player.getInventory().getPaperdollItemByL2ItemId(getHexSlot(intEvent))
      if Item1 != None :
        if validateItem(Item1.getItemId()) :
          ItemEnchant = Item1.getEnchantLevel()
          htmltext = htmltext + "<img src=\"" + getItemIcon(Item1.getItemId()) + "\" width=32 height=32><br>"
          htmltext = htmltext + u"" + Item1.getItemName() + " +" + str(ItemEnchant) + "<br>"
          Grade = Item1.getItem().getCrystalType()
          Itype = str(Item1.getItemType())
          if Itype in Jewel and ItemEnchant < MaxEnchantJewel :
            if ItemEnchant < MaxEnchantJewel :
              htmltext = htmltext + u"Add 1 enchant = " + str(JPrice[Grade]) + " " + ItemName + "<br>"
            if ItemEnchant < MaxEnchantJewel :
              htmltext = htmltext + "<a action=\"bypass -h Quest 919_Enchanter plusone_" + str(intEvent) + u"\">Add +1 enchant!</a><br>"
          elif Itype in Armor and ItemEnchant < MaxEnchantArmor :
            if ItemEnchant < MaxEnchantArmor :
              htmltext = htmltext + u"Add 1 enchant = " + str(APrice[Grade]) + " " + ItemName + "<br>"
            if ItemEnchant < MaxEnchantArmor :
              htmltext = htmltext + "<a action=\"bypass -h Quest 919_Enchanter plusone_" + str(intEvent) + u"\">Add +1 enchant!</a><br>"
          elif Itype in Weapon and ItemEnchant < MaxEnchantWeapon :
            if ItemEnchant < MaxEnchantWeapon :
              htmltext = htmltext + u"Add 1 enchant = " + str(WPrice[Grade]) + " " + ItemName + "<br>"
            if ItemEnchant < MaxEnchantWeapon :
              htmltext = htmltext + "<a action=\"bypass -h Quest 919_Enchanter plusone_" + str(intEvent) + u"\">Add +1 enchant!</a><br>"
          elif Itype in Weapon and ItemEnchant >= MaxEnchantWeapon :
            if ItemEnchant >= MaxEnchantWeapon :
              htmltext = htmltext + "<br><br><br><br><br> You can't enchant more than <font color=FF0000>+" + str(ItemEnchant) + "</font><br>"
	else :
		htmltext = htmltext + "<br><br><br><br><br> You can't enchant more than <font color=FF0000>+" + str(ItemEnchant) + "</font><br>"
      else :
        htmltext = htmltext + u"Your item is not equiped! Check it!<br><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br></center><img src=\"L2UI_CH3.onscrmsg_pattern01_2\" width=256 height=32>"
    elif strEvent.startsWith("plusone") :
      intEvent = Integer.parseInt(strEvent.substring(8))
      htmltext = "<html><title>Donate Shop</title><body><br>"
      Item1 = player.getInventory().getPaperdollItemByL2ItemId(getHexSlot(intEvent))
      if Item1 != None :
        if validateItem(Item1.getItemId()) :
          Grade = Item1.getItem().getCrystalType()
          if Grade not in [0] :
            ItemEnchant = Item1.getEnchantLevel()
            Itype = str(Item1.getItemType())
            if Itype in Jewel :
              if ItemEnchant < MaxEnchantJewel :
                iu = InventoryUpdate()
                player.sendPacket(iu)
                player.broadcastPacket(CharInfo(player))
                player.sendPacket(UserInfo(player))
                if st.getQuestItemsCount(Adena) >= JPrice[Grade]:
                  st.takeItems(Adena,JPrice[Grade])
                  Item1.setEnchantLevel(ItemEnchant+1)
		  ItemEnchant = Item1.getEnchantLevel()
                  st.playSound("ItemSound.quest_itemget")
                  player.sendPacket(ItemList(player,False))
                  htmltext = htmltext + u"<br>Your jewel was successfully enchanted to + " + str(ItemEnchant) + "</font>!<br>"
                else :
                  htmltext = htmltext + u"You need <font color=LEVEL>" + str(JPrice[Grade]) + "</font> " + ItemName + " to do that!" # player donate items < to be enchanted
              else :
                htmltext = htmltext + u"<br> You cant enchant more than <font color=FF0000>+" + str(ItemEnchant) + "</font><br>" # in case before add enchant the player is enchant manualy his weap from 19 to 20 and then trying to click enchant 
            elif Itype in Armor :
              if ItemEnchant < MaxEnchantArmor :
                iu = InventoryUpdate()
                player.sendPacket(iu)
                player.broadcastPacket(CharInfo(player))
                player.sendPacket(UserInfo(player))
                if st.getQuestItemsCount(Adena) >= APrice[Grade]:
                  st.takeItems(Adena,APrice[Grade])
                  Item1.setEnchantLevel(ItemEnchant+1)
		  ItemEnchant = Item1.getEnchantLevel()
                  st.playSound("ItemSound.quest_itemget")
                  player.sendPacket(ItemList(player,False))
                  htmltext = htmltext + u"<br>Your armor was successfully enchanted to + " + str(ItemEnchant) + "</font>!<br><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br></center><img src=\"L2UI_CH3.onscrmsg_pattern01_2\" width=256 height=32>"
                else :
                  htmltext = htmltext + u"You need <font color=LEVEL>" + str(JPrice[Grade]) + "</font> " + ItemName + " to do that!" # player donate items < to be enchanted
              else :
                htmltext = htmltext + u"<br> You cant enchant more than <font color=FF0000>+" + str(ItemEnchant) + "</font><br>" # in case before add enchant the player is enchant manualy his weap from 19 to 20 and then trying to click enchant 
            elif Itype in Weapon :
              if ItemEnchant < MaxEnchantWeapon :
                iu = InventoryUpdate()
                player.sendPacket(iu)
                player.broadcastPacket(CharInfo(player))
                player.sendPacket(UserInfo(player))
                if st.getQuestItemsCount(Adena) >= WPrice[Grade]:
                  st.takeItems(Adena,WPrice[Grade])
                  Item1.setEnchantLevel(ItemEnchant+1)
		  ItemEnchant = Item1.getEnchantLevel()
                  st.playSound("ItemSound.quest_itemget")
                  player.sendPacket(ItemList(player,False))
                  htmltext = htmltext + u"<br>Your weapon was successfully enchanted to + " + str(ItemEnchant) + "</font>!<br>"
                else :
                  htmltext = htmltext + u"You need <font color=LEVEL>" + str(WPrice[Grade]) + "</font> " + ItemName + " to do that!<br>" # player donate items < to be enchanted
              else :
                htmltext = htmltext + u"<br> You cant enchant more than <font color=FF0000>+" + str(ItemEnchant) + "</font><br>" # in case before add enchant the player is enchant manualy his weap from 19 to 20 and then trying to click enchant 
            else :
              htmltext = htmltext + u"Error, i accept only 3 types : Weapon,Armor,Jewel!<br>" #unknown
          else :
            htmltext = htmltext + u"Your current weapon's grade is different!<br>" #in case that the player before add enchant, change weapon to no-weapon type
        else :
          htmltext = htmltext + u"Error, Your weapon not found!<br>" #unknown
      else :
        htmltext = htmltext + u""
        htmltext = htmltext + "Your item not found! try again!</body></html>"
    return htmltext

QUEST    = Quest(919,Qn,"custom")
CREATED   = State('Start',     QUEST) 
STARTING  = State('Starting',  QUEST) 
STARTED   = State('Started',   QUEST) 
COMPLETED = State('Completed', QUEST) 

QUEST.setInitialState(CREATED)

QUEST.addStartNpc(300300)
QUEST.addTalkId(300300)

and here's the other one where i cannot see all icons.

import sys
from java.lang import System
from com.l2jfrozen.util.database import L2DatabaseFactory
from com.l2jfrozen.gameserver.model.quest import State
from com.l2jfrozen.gameserver.model.quest import QuestState
from com.l2jfrozen.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2jfrozen.gameserver.network.serverpackets import CharInfo
from com.l2jfrozen.gameserver.network.serverpackets import InventoryUpdate
from com.l2jfrozen.gameserver.network.serverpackets import ItemList
from com.l2jfrozen.gameserver.network.serverpackets import UserInfo
from com.l2jfrozen.gameserver.templates import L2Item

qn = "q8015_Enchex"

#id νοφ
NPC = 300300

#id θςεμΰ δλ ηΰςξχκθ
ITEM = 3488
#ρςξθμξρςό ηΰςξχκθ ηΰ κΰζδϋι +
COST =100
#νΰηβΰνθε θςεμΰ
INAME = "Donate Coins"
#ροθρξκ ηΰοπεωεννϋυ θςεμξβ
FORBIDDEN = [12,132,6611,6612,6620,6617,6619,6618,6621,6614,6616]

print "Donate Manager: Loaded 100%"
print "Lineage 2: Donate Manager NPC LOADED"

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><br1>"       
     htmltext += u"<table width=260><tr><td align=center><font color=LEVEL>\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0437\u0430\u0442\u043e\u0447\u043a\u0438</font></td></tr></table>"
     htmltext += u"<button value=\"Weapon [S]\" action=\"bypass -h Quest q8015_Enchex step1_0\" width=135 height=24 back=\"L2UI_CH3.bigbutton3_down\" fore=\"L2UI_CH3.bigbutton3\"><br>"
     htmltext += u"<button value=\"Armor [S]\" action=\"bypass -h Quest q8015_Enchex step1_1\" width=135 height=24 back=\"L2UI_CH3.bigbutton3_down\" fore=\"L2UI_CH3.bigbutton3\"><br>"
     htmltext += u"<button value=\"Jewels [S]\" action=\"bypass -h Quest q8015_Enchex jewerly\" width=135 height=24 back=\"L2UI_CH3.bigbutton3_down\" fore=\"L2UI_CH3.bigbutton3\"><br>"
     htmltext += "<center><br></center></body></html>"
   elif event.startswith("step1_"):
     itemType = int(event.replace("step1_", ""))
     htmltext = u"<html><center><body><br>Select the item you wish to remove the enchant!<br><br></center><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 = u"<html><body></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 += u"</table><center></center><br></body></html>"
   elif event == "jewerly":
     htmltext = u"<html><center><body><br>Select the item you wish to remove the enchant!<br><br></center><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 += u"</table><center></center><br></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 =  u"<html><body><center><br>This item after the transfer<br1>will <font color=LEVEL>NOT</font> gain the enchantment value of the next item.<br>Will be <font color=LEVEL>+0</font>!</center><br>"
           htmltext += "<table width=300><tr><td><center><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></center></td></tr></table><br><br>"
           payment = int(Item.getEnchantLevel()*COST)
           if st.getQuestItemsCount(ITEM) < payment:
             htmltext += u"<center>You need <font color=ff2400>"+str(payment)+"</font> "+INAME+" for this tranfer!<br>"
           else:
             htmltext += u"<center>The cost will be : <font color=adff2f>"+str(payment)+"</font> "+INAME+"</center><br>"
             htmltext += u"<center><button value=\"Select the next item\" action=\"bypass -h Quest q8015_Enchex step2\" width=135 height=24 back=\"L2UI_CH3.bigbutton3_down\" fore=\"L2UI_CH3.bigbutton3\"></center><br>"
           htmltext += u"<br><a action=\"bypass -h Quest q8015_Enchex spisok\"><center>Back<br><center></center></a></body></html>"
         except :
           try : listitems.close()
           except : pass
       try :
         con.close()
       except :
         pass
     else :
       htmltext = u"<html><body>\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0437\u0430\u0442\u043e\u0447\u043a\u0438:<br>\u041e\u0448\u0438\u0431\u043a\u0430!<br><a action=\"bypass -h Quest q8015_Enchex spisok\">\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f.</a></body></html>"
   elif event == "step2":
     htmltext = u"<html><body><center><br><br>Choose the item you want to transfer the enchant!<br><font color=LEVEL>Attention!</font<br><font color=FF0000>The enchantment value of this item<br1>will not transfer to the other item!</font></center><br><table width=300><center>"
     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 += u"</table><br><center><a action=\"bypass -h Quest q8015_Enchex spisok\">Back</a><br></center></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 =  u"<html><body><center><br><br>The next item will get the enchantment you want!</center><br>"
           htmltext += "<table width=300><tr><td><center><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></center></td></tr></table><br><br>"
           htmltext += u"<center><button value=\"Continue\" action=\"bypass -h Quest q8015_Enchex step3\" width=135 height=24 back=\"L2UI_CH3.bigbutton3_down\" fore=\"L2UI_CH3.bigbutton3\"></center><br>"
           htmltext += u"<br><a action=\"bypass -h Quest q8015_Enchex spisok\"><center>Back<br><br></center></a></body></html>"
         except :
           try : listitems.close()
           except : pass
       try :
         con.close()
       except :
         pass
     else :
       htmltext = u"<html><body><br>\u041e\u0448\u0438\u0431\u043a\u0430!<br><a action=\"bypass -h Quest q8015_Enchex spisok\">\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f.</a></body></html>"
   elif event.startswith("step3"):
     weapon1 = st.getInt("oneitem")
     weapon2 = st.getInt("twoitem")
     htmltext =  u"<html><body><center><br><br>Transfer almost completed!<br>"
     htmltext += u"<font color=339900>The next item will be +0</font>"
     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 += u"Transfer cost : <font color=ff2400>"+str(payment)+"</font> "+INAME+"<br>"
           else:
             htmltext += u"Transfer cost : <font color=adff2f>"+str(payment)+"</font> "+INAME+"<br>"
         except :
           try : listitems.close()
           except : pass
       try :
         con.close()
       except :
         pass
     htmltext += "<font color=339900>The next item will be " + enchant + "</font>"
     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 += u"<button value=\"Transfer\" action=\"bypass -h Quest q8015_Enchex step4\" width=135 height=24 back=\"L2UI_CH3.bigbutton3_down\" fore=\"L2UI_CH3.bigbutton3\"><br>"
     else :
       htmltext = u"<html><body>\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0437\u0430\u0442\u043e\u0447\u043a\u0438:<br>\u041e\u0448\u0438\u0431\u043a\u0430!<br><a action=\"bypass -h Quest q8015_Enchex spisok\">\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f.</a></body></html>"
   elif event.startswith("step4"):
     htmltext =  u"<html><body><center><br><br><font color=ff2400>Enchant transfer successfully transfered!</font></center><br><br><br>"
     ench = st.getInt("enchant")
     payment = int(ench*COST)
     if st.getQuestItemsCount(ITEM) < payment:
       htmltext = "<html><body><center><br><br><font color=ff2400>Enchant transfer canceled.</font><br><br><br>You need <font color=ff2400>"+str(payment)+"</font> "+INAME+" for this transfer!</center><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 = "<html><body><center><br><br><font color=ff2400>Enchant transfer canceled.</font><br><br><br>One of the selected weapons are missing!<br1>Try again!<br><br></center><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 = "<html><body><center><br><br><font color=ff2400>Enchant transfer canceled.</font><br><br><br>One of the selected items enchantment has changed!<br1>Try again!<br><br></center><br>"
       return htmltext
    #< 
     if grade1 != 5 or grade2 != 5:
       st.set("enchant","0")  
       htmltext = "<html><body><center><br><br><font color=ff2400>Enchant transfer canceled.</font><br><br><br>Do not try to scam!<br1>Try again!<br><br></center><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 = "<html><body><center><br><br><font color=ff2400>Enchant transfer canceled.</font><br><br><br>Do not try to scam!<br1>Try again!<br><br></center><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 = "<html><body><center><br><br><font color=ff2400>Enchant transfer canceled.</font><br><br><br>Do not try to scam!<br1>Try again!<br><br></center><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 = "<html><body><center><br><br><font color=ff2400>Enchant transfer canceled.</font><br><br><br>Do not try to scam!<br1>Try again!<br><br></center><br>"
         return htmltext
     else:
       htmltext = "<html><body><center><br><br><font color=ff2400>Enchant transfer canceled.</font><br><br><br>Do not try to scam!<br1>Try again!<br><br></center><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 += u"<center><font color=bef574>The transfer has been successfully completed!</font><br><br></center><br>"
   else:
     htmltext = "<html><body><center><br><br><font color=ff2400>Enchant transfer canceled.</font><br><br><br>Do not try to scam!<br1>Try again!<br><br></center><br>"
   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)

Link to comment
Share on other sites

As i saw in the second code it take the icons from a table, have you inserted icon location in that sql table ?

listitems=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")
Link to comment
Share on other sites

 

hey guys i have a quick question ..Npc works great but there's one problem ..Icons from customs items do not show to all the services from the npc ..

For example npc has , enchanter ( add enchants to your equipment) , transfer enchant ( u know what this is..)

 

When using enchanter ( to add +1 enchant for example ) icons are shown properly

But, when using transfer enchant icons are black? can anyone help me with that?

 

I can post u here both _init_py files.

 

here's the right one where i can see all icons.

 

 

The code is using one if before it takes the icon from z_market_icons.

 

Did you check the conditions?

 

1# Your weapon musnt be in FORBIDDEN array (look @ the start)

2# Your weapon template must have duration -1 (db part)

3# Your weapon grade must be 5 (S grade)

4# Your weapon type must be in Types 

TYPES = ["Sword","Blunt","Dagger","Bow","Etc","Pole","Fist","Dual Sword","Dual Fist","Big Sword","Big Blunt"]

5# Your weapon enchant must be more than 0.

if idtest not in FORBIDDEN and itemTemplate.getDuration() == -1 and grade == 5 and itype in TYPES and Item.getEnchantLevel() > 0:
Edited by melron
Link to comment
Share on other sites

1.My weapons and armors id's are between 9400 and 9900

2.The duration of the custom weapons and custom armors i've added is -1

3.The grade of armors/weapons is S GRADE.

4.Types of my weapons belong to the current one your code is asking.

5.The enchant of the weapons is more than 0.

 

but still icons are black ..as i told u ..i can see the icons at (enchanter : where u add +1 enchant)

but i cant see them when i try to transfer enchant or augmentation.

Edited by protoftw
Link to comment
Share on other sites

 

As i saw in the second code it take the icons from a table, have you inserted icon location in that sql table ?

listitems=con.prepareStatement("SELECT itemIcon FROM z_market_icons WHERE itemId=?")

i have added all icons to that sql table but still..(also the first code uses that table in order to take icons)

 

the first code:

https://postimg.org/image/ypqfrgymr/

 

 

the second one:

https://postimg.org/image/kz2vavu7z/

 

 

is it maybe that the first code is using inventory to get icons? and if yes how can i addapt the second code?

Edited by protoftw
Link to comment
Share on other sites

i have added all icons to that sql table but still..(also the first code uses that table in order to take icons)

 

the first code:

https://postimg.org/image/ypqfrgymr/

 

 

the second one:

https://postimg.org/image/kz2vavu7z/

 

 

is it maybe that the first code is using inventory to get icons? and if yes how can i addapt the second code?

can you paste the item icon path?

Link to comment
Share on other sites

As you can see your icon path is:

ct1icon.weapon_dynasty_hammer_i01

if u look closer in line 73 of init.py

 

<img src=\"Icon."+str(icon)+"\" width=32

 

it load icons with the string of your path and before this string puts Icon.

 

So in this case trying to load the path : Icon.ct1icon.weapon_dynasty_hammer_i01 ....

Edited by melron
Link to comment
Share on other sites

still not working...here's the result:

https://postimg.org/image/grnshxnn1/

 

https://postimg.org/image/m014kei93/

 

url is not wrong bcs it works for the other options of the npc...the problem is in the code

Edited by protoftw
Link to comment
Share on other sites

still not working...here's the result:

 

https://postimg.org/image/grnshxnn1/

 

https://postimg.org/image/m014kei93/

 

url is not wrong bcs it works for the other options of the npc...the problem is in the code

just lol... i mean you have to edit this line bro...

 

Make an array named CUSTOM = [you,ids,here,for,example]

and before the line 73 use an if statement

for example 

if idtest not in CUSTOM:
 ....
else:
....
Link to comment
Share on other sites

so instead of inserting a new IF check should i change the URL name? 

 

 

im not capable of writing a new IF statement ...if u could do it it would be great if not thank you again for the time u've spent answering my questions :P

 

 

i just deleted this whole part <img src=\"Icon."+str(icon)+"\" width=32 height=32> and now it's just without icons 

Edited by protoftw
Link to comment
Share on other sites

so instead of inserting a new IF check should i change the URL name? 

 

 

im not capable of writing a new IF statement ...if u could do it it would be great if not thank you again for the time u've spent answering my questions :P

 

 

i just deleted this whole part <img src=\"Icon."+str(icon)+"\" width=32 height=32> and now it's just without icons 

 

create one more array like FORBIDDEN and insert your custom weapons ids

CUSTOM = [6367,22]

and paste these lines in 73 line (in case u deleted)

             if idtest in CUSTOM:
               htmltext += "<tr><td><img src=\""+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>"
             else:
               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>"
Edited by melron
Link to comment
Share on other sites

i fixed it there is no need for new lines ..thanks tho :P

 

all icons are shown properly :)

Edited by protoftw
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now



  • Posts

    • After 12 years after our first launch of Frintezza, we are not the young men and women anymore, a lot of us have jobs, family, kids, or something else that doesn't allow us to play this game the amount of time that we used to have, but we still want to play this wonderful game once again. In this order of ideas, this is why we have thought of a battery of customizations to the OFF files in order to bring you a great quality of game and at the same time, make it more enjoyable at the time of sitting down to play it. These quality of life improvements contain: Frintezza II x1 - Game Features  General Server Settings  Frintezza Core  Founder Membership  Premium Accounts  Server Phases  General Settings  Starter Packs (ingame Gifts)  Improved Mana Regeneration system  Buff system through Agathions  Vitamin Pets (Hunting Partners)  Class rebalance (skills modifications & new skills)  Gatekeepers improvement  Black Wyvern Rider  UI improvements  Enchantment system improvements  Quality of Life changes Re: Frintezza x1 - Server Settings & General information  TUE MAR 12, 2024 5:38 PM  XP & SP: x1  Adena: x1.5  Drop: x1  Spoil: x2  Quest Drop: x2  Quest Reward: x2  High-End Server and Network: Our platform boasts an enterprise-class server equipped with dual physical processors, featuring 144 threads, and employs Enterprise SuperFast NVME U2 storage to ensure a seamless gaming experience without lag. Our network is fortified against DDOS attacks and includes multiple DDOS-protected Accelerator links through AWS, OVH, and Hetzner.  L2OFF PTS: We prioritize game stability and authentic retail features. To achieve this, we offer the finest Files, Scripts, and Geodata available. We extend an invitation for you to join our exclusive Founder Membership. As a member, you will enjoy lifetime weekly rewards across all current and future servers. Don't miss this opportunity to continuously earn rewards across all our platforms. Founder Member Benefits Weekly Rewards: Lifetime rewards on any current and future servers. Anniversary Rewards: Lifetime rewards on any current and future servers. Stay Informed: Be the first to receive email notifications about the launch of new servers. Participate in Polls: Have a say in the selection of upcoming server chronicles and styles. Exclusive Beta Access: Be among the first to be informed about and invited to closed beta tests. Preferred Nickname Selection: Founder members receive priority in choosing their nicknames. Preferred Clan name Selection: Founder members receive priority in choosing their clan names. FrintezzaL2 Community Upcoming Servers: A variety of server rates including low, mid, and high, across different Chronicles (C4, Interlude, H5, Classic, Essence). Upcoming Styles: A selection of gameplay styles such as Vanilla L2OFF, Stacksub, Craft, PVP, GVE, and more. Your Opinion Matters: Our community is built on the feedback of our members. We strive to create a welcoming environment and are committed to using your recommendations and opinions to enhance the gaming experience. We encourage you to share your thoughts in our Discord and Forum. Your input is valuable and will contribute to making a meaningful difference. Be a Founder Member today, HERE!  XP & SP: +50%  Adena: +50%  Drop: +50%  Spoil: +25% Premium Features Auto-Hunt usage Blacksmith of Mammon through the Premium Manager Merchant of Mammon through the Premium Manager Weekly Consumables Rewards through the Premium Manager Premium Cost  15 days - 150 Frintezza Coins   Dawnfall Dominion marks the beginning of your journey in the world of Lineage 2. In this phase, players start as fledgling adventurers, exploring the lands, honing their skills, and facing the challenges of the early game. They can progress up to level 70, forming alliances, battling monsters, and laying the foundation for their adventures to come. Game-related context: Players begin their journey in the lower level zones, encountering basic quests, monsters, and dungeons suitable for beginners. Focus is on leveling up, acquiring gear, learning the game mechanics and being part of Epic battles fighting the Ant Queen, Core and Orfen. Rates: 1-70: x1 Key points Phase duration: 1 month Equipment goal: A-Grade Raid bosses: Ant Queen, Orfen and Core. First respawn will be previusly announced. Midgard's Ascendancy represents a significant advancement in your journey. As players reach this stage, they have already proven themselves as formidable warriors, capable of facing greater challenges. With the level cap raised to 80, players delve deeper into the world's lore, engage in epic battles, and unlock new abilities with 3rd class changes, subclass and olympiads. Game-related context: In this phase, players explore more advanced zones, encounter tougher monsters, and participate in more complex quests and events. They may also engage in PvP battles, begin to focus on endgame content and battle the fierce Baium. Rates: 1-70: x3 70-80: x1 Key points Phase duration: 1 month Equipment goal: Icarus & Moirai Raid bosses: Baium & Zaken. First respawn will be previusly announced, also Ant Queen, Orfen and Core will have their levels raised and drops altered. Start of Olympiads Twilight's Apex marks the pinnacle of power and achievement in your Lineage 2 journey. As players reach level 85, they stand among the mightiest heroes of the realm, wielding incredible strength and skill. In this phase, players undertake legendary quests, conquer formidable foes, and vie for supremacy in epic battles that shape the fate of the world. Game-related context: At this stage, players tackle the most challenging content the game has to offer, including high-level raids, Epic bosses, and PvP battles. They may also focus on maximizing their character's abilities through advanced gear, skills, and strategic gameplay as they reach level 85. Rates: 1-70: x7 70-80: x3 81+: x1 Key points Equipment goal: Vesper & Vorpal Raid bosses: Frintezza, Freya, Beleth, Antharas & Valakas.  Chronicle: High-Five  Premium Buff system: Agathions basic buff time 4 hs, dances/songs/prophecies 20 minutes.  Community Board: Yes  Equipment: Retail like, up to Top-C in the normal shops, including common & shadow equipment.  Monsters: Original monsters. Quantity of monsters in initial areas has been increased and also reduced the respawn time to avoid traffic jam.  Vitality: Retail-Like  Dual box: Allowed 2 windows per PC 1st & 2nd Class changes: 1st change 50k adena, 2nd change 1kk adena (Reward Agathion: Griffin) or 200 coins (Reward Agathion: Griffin + 5kk Adena) or else, quests.  Skills: Auto-learn  Noblesse: 300 coins Noblesse (+1sub) or else, quest chain.  Offline shop: Available  Auto-loot: Available Catacombs/Necropolises: Retail-like  Manor: Available  Herbs: Available  In-game store: Available. More details in another topic  In-game Starter Kits: Yes - New characters will receive NG & D-Grade starter kits.  Luxury Shop: Up to A-Grade, including top A items (values have been increased)  Cloaks: Yes - We have unlocked all sets bonuses to have the posibility to wear a Cloak Players will receive the following rewards: No-Grade Beginner's Adventurer Pack: Shadow No-Grade Weapon/Armor, Fruit Cocktail, Soulshots, Blessed Spiritshots and Agathion Monkey. D-Grade Fighter/Mage Support Pack: Common D-Grade Weapon/Armor. Beginner's Adventurer Reinforcement Pack: Afro Hair (7 days) and Rune of EXP 30% (7 days). Introducing an exciting enhancement to gameplay: MP recovery now happens even faster! As a part of our ongoing Quality of Life (QoL) updates, all "Buffer Agathions" will now come equipped with a new buff: Mana Blessing. This buff significantly boosts passive MP regeneration by 10/25, providing a substantial increase in mana recovery speed. Additionally, the Mana Blessing buff effectively reduces incoming Mana Recharge by 70%. This enhancement benefits all players, ensuring a smoother and more efficient gameplay experience for solo players by alleviating concerns about mana management. However, it's essential to note that casting players won't gain a double advantage from this buff due to the Mana Recharge penalty. Experience the convenience and improved gameplay flow with our latest update, designed to enhance your gaming journey like never before!   To enhance your gameplay experience without interrupting your leveling progress, we've replaced NPC buffers in towns with adorable pets that not only serve as cosmetic companions but also provide essential buffs. Players will receive two charming agathions at different stages of the game. First Stage: Upon character creation, players will receive the Agathion - Monkey, granting the following buffs for 4 hours: Wind Walk, Shield, Might, Acumen, Focus, Concentration, Berserker Spirit, and Mana Blessing. Second Stage: Upon reaching level 40 and completing the 2nd class change, players will receive the Agathion - Griffin, providing an array of buffs for 4 hours, including Wind Walk, Shield, Magic Barrier, Might, Focus, Death Whisper, Guidance, Haste, Vampiric Rage, Clarity, Acumen, Empower, Berserker Spirit, Decrease Weight, Mental Shield, Bless Shield, and Mana Blessing. *Note: Read the "Improved Mana Regeneration" section for more information. We're thrilled to introduce the enhanced vitamin pets, designed to be your trusted companions throughout your journey. Each pet boasts a unique set of skills tailored to complement various classes. Key Features: Our premium pets retain a retail-like experience, with optimized buffs for enhanced gameplay. They no longer consume %EXP from their master, ensuring uninterrupted progression. These exclusive pets will be readily available in the in-game store, providing easy access for all players. Buffs:  Weapon Maintenance: Increases your attack dmg.  Armor Maintenance: Increases your defense.  Blessing of Queen: Increase of 25% P. Critical Rage. Buffs:  Wild Magic: Increases your Magic Critical rate.  Armor Maintenance: Increases your defense.  Gift of Seraphim: Reuse delay decreased by 30%. Stats & Skills retail-like, great companions for enchanters/supports.    [New lv. 55] Knight Fury: Increases party members' P.Def by 5%, M.Def by 5%, Atk. Spd. by 5%, Casting Spd. by 5% and Speed by 5. Effects are applied instantly depending on strike probability. Does not work in olympiad matches.  Seed of Revenge: Increased activation chance of each level to 35%.  [New lv. 52/64/70] Defense Aura: Increases party member's P.Def by 3%/4%/5% and M.Def by 3%/4%/5%. Effect does not stack with Combat Aura.  [New lv. 55] Knight Fury: Increases party members' P.Def by 5%, M.Def by 5%, Atk. Spd. by 5%, Casting Spd. by 5% and Speed by 5. Effects are applied instantly depending on strike probability. Does not work in olympiad matches.  Angelic Icon: Angelic Icon buff has been changed as follows - For 1 minute, increases Resistance to debuff attacks by 40%, P. Def. by 50%, M. Def. by 50%, Accuracy by 6, Speed by 5/10/15, Atk. Spd. by 5%/10%/15%, Critical Rate by 17/30/50, Critical Damage by 17%/33%/50% and Resistance to buff-canceling attacks by 40%. Decreases the effect of recovery magic by 80%. Available when HP is 30% or lower.  Summon Phoenix: The Phoenix has been adjusted to ensure its parity with the other 3rd class summons.  Spirit of Phoenix: Increased activation chance of each level to 35%  [New lv. 52/64/70] Defense Aura: Increases party member's P.Def by 3%/4%/5% and M.Def by 3%/4%/5%. Effect does not stack with Combat Aura.  [New lv. 55] Knight Fury: Increases party members' P.Def by 5%, M.Def by 5%, Atk. Spd. by 5%, Casting Spd. by 5% and Speed by 5. Effects are applied instantly depending on strike probability. Does not work in olympiad matches.  Pain of Shilen: Increased activation chance of each level to 35%.  [New lv. 52/64/70] Defense Aura: Increases party member's P.Def by 3%/4%/5% and M.Def by 3%/4%/5%. Effect does not stack with Combat Aura.  [New lv. 80] Massive Lightning Strike: A lightning strike deals damage to the target and surrounding enemies with 1082 Power, immobilizes them for 15 seconds and then paralyzes for 10 seconds.  [New lv. 55] Knight Fury: Increases party members' P.Def by 5%, M.Def by 5%, Atk. Spd. by 5%, Casting Spd. by 5% and Speed by 5. Effects are applied instantly depending on strike probability. Does not work in olympiad matches.  Eva's Will: Increased activation chance of each level to 35%.  [New lv. 52/64/70] Defense Aura: Increases party member's P.Def by 3%/4%/5% and M.Def by 3%/4%/5%. Effect does not stack with Combat Aura.  [New lv. 80] Eva's Defense: Increases party member's P.Def by 15% and M.Def by 10% and Speed by 4 for 5 minutes.  [New from lv. 40+] Dual Weapon Mastery: Increases P. Atk. when using a dualsword.  [New 44/56/68] Mana Drain: Has a chance to recover MP when striking.  [New from lv. 40+] Dual Weapon Mastery: Increases P. Atk. when using a dualsword.  [New 44/56/68] Mana Drain: Has a chance to recover MP when striking.  [New 44/58] Chant of Improved Combat (Self-buff): Increases Atk. Spd. by 15%/33% and bestows the ability to recover as HP 9% of the standard melee damage inflicted on the enemy.  [New from lv. 40+] Dual Weapon Mastery: Increases P. Atk. when using a dualsword.  [New from lv. 40+] Revenge Strike: Attacks the enemy with 738 Power added to P. Atk. Requires a sword, dual-sword or blunt weapon. Does not work in olympiad matches.  [New 44/58] Blood Awakening (Self-buff): Increases Atk. Spd. by 15%/33% and bestows the ability to recover as HP 9% of the standard melee damage inflicted on the enemy.  [New lv. 40] Rush: Charges toward the enemy.  [New from lv. 40+] Sword Crush: Attacks the enemy with 487 Power added to P. Atk. and inflicts Shock for 7 seconds. Requires a sword or dual-sword weapon. Does not work in olympiad matches.  Dances: Increased time duration of dances to 20 minutes (+Time enchant extends time duration to be 47 minutes).  [New lv. 40] Rush: Charges toward the enemy.  [New from lv. 40+] Sword Crush: Attacks the enemy with 487 Power added to P. Atk. and inflicts Shock for 7 seconds. Requires a sword or dual-sword weapon. Does not work in olympiad matches.  Songs: Increased time duration of songs to 20 minutes (+Time enchant extends time duration up to 47 minutes)  [New from lv. 40+] Mechanical Smash: Swings a spear to attack nearby enemies with 421 Power added to P. Atk. and causes Stun for 9 seconds. Requires a polearm to be equipped.  [New from lv. 40+] Provoke (ONLY WARSMITH): Provokes enemies within a wide range and decreases Resistance to spear weapons by 10 for 10 seconds.  Chain Heal: Adjusted the learning level to level 80.  [Shilien Saint NEW lv. 80] Lord of Vampires: For 30 seconds, gives all party members the ability to recover as HP 80% of the damage inflicted on the enemy.  Healers' Skills Transfer: Increased the Holy Pomander amount for Eva's Saint & Cardinals to 2.  Dagger Mastery [Trigger]: Increased the Dagger Mastery trigger duration to 15 seconds and increases Speed by +4.  [NEW] Bow Mastery [Trigger]: Bow Mastery will now trigger an active buff for 15 seconds that will increase Bow/Crossbow range by 20, Accuracy by 3 and Speed by 4.  Premium Buffs (Agathions Buffs): Increased time duration to be 4 hours.  Chant of Victory & Proof of Fire/Wind/Water: Increased time duration to be 20 minutes (+Time enchant extends time duration up to 40 minutes).  [NEW] Frintezza Welcome Skill(all classes): Increased weight limit by 4 and opens 24 inventory slots.  Warcry: Increased time duration to be 20 minutes.  Battle Roar: Increased time duration to be 20 minutes.  Thrill Fight: Increased time duration to be 20 minutes.  Fell Swoop: Increased time duration to be 20 minutes.  Majesty: Increased time duration to be 20 minutes.  Hawkeye: Eliminated the -10% P.def penalty and increased time duration to be 20 minutes.  Focus chance: Increased time duration to be 20 minutes.  Focus power: Increased time duration to be 20 minutes.  Focus Death: Increased time duration to be 20 minutes.  Mortal Strike: Increased time duration to be 20 minutes.  Seed of Fire/Water/Wind: Increased time duration to be 20 minutes.  Warrior Servitor: Increased time duration to be 20 minutes.  Wizard Servitor: Increased time duration to be 20 minutes.  Assassin Servitor: Increased time duration to be 20 minutes.  Final Servitor: Increased time duration to be 20 minutes.  Rage: Increased time duration to be 20 minutes.  Dark Form: Increased time duration to be 20 minutes.  Totem of Bear: Increased time duration to be 20 minutes.  Totem of Wolf: Increased time duration to be 20 minutes.  Totem of Ogre: Increased time duration to be 20 minutes.  Totem of Puma: Increased time duration to be 20 minutes.  Totem of Bison: Increased time duration to be 20 minutes.  Totem of Rabbit: Increased time duration to be 20 minutes.  Totem of Hawk: Increased time duration to be 20 minutes.  Battle Cry: Increased time duration to be 20 minutes.  Blood Pact: Increased time duration to be 20 minutes.  Furious Soul: Increased time duration to be 20 minutes.  Feline Queen Buffs: Increased time duration to be 20 minutes.  Seraphim the Unicorn Buffs: Increased time duration to be 20 minutes. Frintezza II Creator https://frintezzal2.com Join our Discord channel
    • We are introducing a Loyalty Program for streamers who show the in-game world situation. As a L2Metawars streamer you will get the gift listed below every week:    🔹Premium Account - 7 days   Conditions for streamers:   Your stream must contain L2MetaWars in its title and L2MetaWars banner or logo in its window. All the streamed materials have to be saved! 20 hours of transmission per week grants a gift. Gifts given every Monday. First gift u can get on June 3 and you will need only 10h+ of streaming. You must put link on you stream in special streaming channel on discord when you start broadcasting.   Special role on discord for streamers you will have to message  @MetaMan on Discord with a link to your streaming channel and ask for the reward. Gift given each Monday.
  • Topics

×
×
  • Create New...