Jump to content

zilbe333

Members
  • Posts

    66
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

Everything posted by zilbe333

  1. Tnx for your reply, I will try to work it through on Interlude.
  2. After experimenting with client sided files, I had this idea that it could be something to do with sendPackets for client that server does when some conditions comes in in some particular class responsible for it /quests, quest states or etc.., - the thing is - we can find similar action - when the qest starts, the mark dissapears! I was trying to find the place responsible for this action/signal sent to client, and try to put state "completed" (may under similar conditions for client when anime shown.. Since database keeps this record permanetnly, (who ever reads from where ever) has this place to go and check the status for your chartacter.. as it does when telling that "This quest has already been completed." ... Whether conditions change from 0 to 1, oR "created" to "started" etc, what ever triggers to take the mark of, to use similar method for "completed" status.. So far my own search was unsuccessfull, my knowledge is not huge, but always keen for discovery. I kinda have feeling this idea could lead to something. May b..
  3. Tnx for reply, Problem is with NPC exclamation mark shown above their head for quests, when certain quest is awaliable for you at certain level.. As we know, repeatable q has blue mark, one-time q has red showed above Npc heads. They mark that the quest is avaliable for you! Issue is with one-time quests and their red exclamation mark. -They appear again above NPC heads once quest is completed. I want to find how to fix it so the mark would not appear and misslead that the quest is avaliable again, as it is not! It is one-time quest only. Repeatable quest blue markers again are there after finish(as they should), as a prove that they are avaliable for you again.. It would be great to have at least one topic on the web that would lead to solution, so we all can enjoy properly working servers, who ever takes his time and effort to build one and maintine. I've tested so many servers, and haven'f found one with working quests as they should. That is one of few basic thing to judge about anybodys server, if your quests are not working, so does your server!... I've been picking brain about this for quite some time, and was surpriset how much the L2 community and all this Huge, amazing support ppl make (bless them all) lacking of information about this matter..
  4. Quests are very beautifull part of the world of Lineage 2, especially Low rate servers.. I've come across with so many questers in the past, that enjoy questing.. All these donation servers especially in compbination with high rates basically killed the L2, where questing doesn't matter, where half of their server population never even seen and been in so many places of L2 world. I must say -there is not a lot of info on this subject, been browsing, surfing around for quite a while around net. I've tried +-20 popular enough servers, been checking their client side, and in-game q, -same stuff, everyone so far had a problem with one-time q orange marker. Isn't there realy known method for Interlude that would sort them? Anyone? pls share.. :/ (where to sort them?..) Since questname-e has a chance to flip between orange and blue for one-time and repeatables, I hopet to find it there. experemented quite a bit around the file, unsuccessfuly. Newer chronicle versions, as I read, may have some options in npcgrp, but Interlude doesn't seem to have much there, apart from asigned quest for particular npc.. An idea came to me that may b it could b sorted out by sendPackets on visual aspect for client to project,..under similar methods/conditions as quest "isStarted" or something.. since once you take the q, state changes and marker disapears till the end... to try to use "isCompleted" state into similar way, but after browsing (qite a bit)around the source could not find absolutely anything close about it on server-sided part.. :/
  5. Tnx for reply, I'm working on Interlude project. I'm looking for what that method is mate... :/
  6. dear dead forum, found it my self. close it.
  7. Hello Maxcheaters community, I've got this issue: How to remove red marker once one-time quest is finished? I've browsed through questname dat file for quite some time, all experiments are unsuccessful.. Quests script is fine, questname-e conditions seems to b fine, npcgrp file has q for npc, markers them selves are working fine with repeatable, but one-time I have all of them where needed at the begining, they even dissapear once character surpasses the q max lvl, But can't find solution for my issue.. I begun to think may b something to do in the core with showing packets after complete? or something.. any ideas? knowledge? please share.
  8. Hi, I can't find in L2jFrozen project champ mobs to set to passive, I have them they are aggro. I checked champion.properties, where they normally would suppose to be, but there wasn't such option. I want them passive anD no-social permanently, How to add in the code to make them passive and no-social...? p.s. I've noticed "attackable" file has alot of lines for them.. anywhere there? And how should I state it?
  9. Hello, I've got problem with removal of quest (stages) from quest window once the quest is finished.. Single time quests are fine, as their script sets state COMPLETED. But repeatable are hanging in, no bluea marker re-appear.. They have their ending with "exitQuest", which works for script and db, but not for quest window. I receive reward, but the q just stays there on the last cond/stage
  10. Hello! I have an issue with level and quest - I noticed that quests are still possible to take after your level has gone way above that shoud be allowed. I have qust for levels 4-8 and it can be taken with level 80! How to fix it? And seconed: Few q marker wtf: The quest marker should be blue, it is orange. Npc has only 1 repeatable quest. My npcgrp.dat and questname.dat files seems to be fine.. I had Martin - wolf quest npc, his marker is not there, only when I speak with him (quest hasn't been taken yet) it appears quickly! Why it deleys so?
  11. I created fishing zone in random place outside the town, made from 5 ponts, had it in zone.xml like other fishing zone exapmles, and writen its points in zone vertices in db. I was unable to fish there... What could be wrong?
  12. I went through a fishing zone, where I was able to fish in few places. All the area of the zone I could fish in like 3 places, others I couldn't! WHY? wtf is going on with the fishing zones? 1.When creating fihing zone, doeas it has to line with water zone or should I make few steps wider area? 2.To be able to fish, should I stand IN fishing zone strictly, or should I be in fishing AND water zone at the same time, or can I be few steps out the zone, but hook and line must be in the zone? I made a picture: red is fishing zone set around Blue-water. Is there any position I cant fish and is there a position I MUST bet in strictly?
  13. I've managed to learn/create water zone. But fish zone doesn'tt work when I'm trying to create around water zone, What could be wrong? could there be some issues with z levels? How should they be set? should I stand right on water level and take coords notes? These measures minZ='-5223' maxZ='-3752 what do they stand for? water surface and deepest place? I'm confused.
  14. Isn't "i" the added coords range in spawn? Which number is for the amount?
  15. Hi, I have issue in the quest -Audience with the Land Dragon. It seems that I cannot find one little spawn isseu with Abyssal Jewel guardian amount. Quest it self works fine to the end, exept the amount of those guardians in all Jewel cases.. in stead of 5-6-7 it spawns like 20! How and where to reduce the amount of guardian spawn? I browsed through quest .py, but my eye did not catch any line responsible for spawn amount. The script under its def onAttack has its spawn commands: def onAttack (self, npc, player, damage, isPet): st = player.getQuestState(qn) if st : npcId = npc.getNpcId() maxHp = npc.getMaxHp() nowHp = npc.getCurrentHp() cond = st.getInt("cond") if npcId == ABYSS_JEWEL1 : if cond == 2 and st.getInt("moke")<>1: if nowHp < maxHp*0.8 and st.getInt("aspawned")<>1 : for i in range(0,70,7): st.addSpawn(GUARDIAN1,-81260,75639+i,-3300,180000) st.addSpawn(GUARDIAN1,-81240,75639+i,-3300,180000) st.set("aspawned","1") self.startQuestTimer("Jewel1_Timer1",900000,npc,None) elif nowHp < maxHp*0.4 and st.getQuestItemsCount(FIRST_FRAGMENT_OF_ABYSS_JEWEL)==0 : st.giveItems(FIRST_FRAGMENT_OF_ABYSS_JEWEL,1) st.playSound("ItemSound.quest_itemget") self.startQuestTimer("Jewel1_Timer2",240000,npc,None) if nowHp < maxHp*0.1 : npc.reduceCurrentHp(9999999,npc) self.cancelQuestTimer("Jewel1_Timer1",npc,None) self.cancelQuestTimer("Jewel1_Timer2",npc,None) if npcId == ABYSS_JEWEL2 : Could not locate anywhere else anything/db/java side.. It should be stated in .py anyway right? May b I'm missing to see which digits are the ones...
  16. Aleluja! I figured finally how and wrote it! p.s. and SweeTs was right also, it's about msg structure, just synchronize both, client and server sides on S1.. parts.
  17. +. I was wondering may be it is supposed to be that way? I rememmber seeing somewhere msg like "your (weapon) has been successfully enchanted to +...". Is there a msg id like this one at all? I was looking into these lines: if (item.getEnchantLevel() == 0) { sm = new SystemMessage(SystemMessageId.S1_SUCCESSFULLY_ENCHANTED); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } else { sm = new SystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED); sm.addNumber(item.getEnchantLevel()); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } Could it be possible to create msg like: S1_SUCCESSFULLY_ENCHANTED to + " + nextEnchantLevel);? or play around this line: sm.addNumber(item.getEnchantLevel()); only nextEnchantLevel? How could I put it right together?
  18. Tnx for replies, this is the source I followed: http://www.maxcheaters.com/topic/201050-lsbogsscrolls-stackable-l2jfrozen-fully-working/ Everything else works like a charm: stacking, droping stack,selling, enchanting proces/.destroyItem - all is fine, just the enchant "+" number is one step behind. With the first enchant sysmsg says "Your Arcana Mace has been successfully enchanted" ,invtory has it +1, when I go for +2, sysmsg: "Your +1 Arcana Mace has been successfully enchanted", inventory has +2, going for+3: "Your +2 Arcana Mace has been successfully enchaned". Well if you look it that way -the previous +2 IS successfully enchanted... //and damn I can't rememmber the sysmsg, it's been a while I played, but isn't it suppose to say something like "Your (weapon) has been successfully enchanted to + <-------..." ? Could it be the wrong system msg used?
  19. Tnx for reply, here is my code: //was using ews /* L2jFrozen Project - www.l2jfrozen.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * http://www.gnu.org/copyleft/gpl.html */ package com.l2jfrozen.gameserver.network.clientpackets; import org.apache.log4j.Logger; import com.l2jfrozen.Config; import com.l2jfrozen.gameserver.model.Inventory; import com.l2jfrozen.gameserver.model.L2World; import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance; import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance; import com.l2jfrozen.gameserver.model.base.Race; import com.l2jfrozen.gameserver.network.SystemMessageId; import com.l2jfrozen.gameserver.network.serverpackets.EnchantResult; import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate; import com.l2jfrozen.gameserver.network.serverpackets.ItemList; import com.l2jfrozen.gameserver.network.serverpackets.StatusUpdate; import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage; import com.l2jfrozen.gameserver.templates.L2Item; import com.l2jfrozen.gameserver.templates.L2WeaponType; import com.l2jfrozen.gameserver.util.IllegalPlayerAction; import com.l2jfrozen.gameserver.util.Util; import com.l2jfrozen.util.random.Rnd; public final class RequestEnchantItem extends L2GameClientPacket { protected static final Logger LOGGER = Logger.getLogger(Inventory.class); private static final int[] CRYSTAL_SCROLLS = { 731, 732, 949, 950, 953, 954, 957, 958, 961, 962 }; private static final int[] NORMAL_WEAPON_SCROLLS = { 729, 947, 951, 955, 959 }; private static final int[] BLESSED_WEAPON_SCROLLS = { 6569, 6571, 6573, 6575, 6577 }; private static final int[] CRYSTAL_WEAPON_SCROLLS = { 731, 949, 953, 957, 961 }; private static final int[] NORMAL_ARMOR_SCROLLS = { 730, 948, 952, 956, 960 }; private static final int[] BLESSED_ARMOR_SCROLLS = { 6570, 6572, 6574, 6576, 6578 }; private static final int[] CRYSTAL_ARMOR_SCROLLS = { 732, 950, 954, 958, 962 }; private int _objectId; @Override protected void readImpl() { _objectId = readD(); } @Override protected void runImpl() { final L2PcInstance activeChar = getClient().getActiveChar(); if (activeChar == null || _objectId == 0) return; if (activeChar.getActiveTradeList() != null) { activeChar.cancelActiveTrade(); activeChar.sendMessage("Your trade canceled"); return; } // Fix enchant transactions if (activeChar.isProcessingTransaction()) { activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); activeChar.setActiveEnchantItem(null); return; } if (activeChar.isOnline() == 0) { activeChar.setActiveEnchantItem(null); return; } final L2ItemInstance item = activeChar.getInventory().getItemByObjectId(_objectId); L2ItemInstance scroll = activeChar.getActiveEnchantItem(); activeChar.setActiveEnchantItem(null); if (item == null || scroll == null) { activeChar.setActiveEnchantItem(null); return; } // can't enchant rods and shadow items if (item.getItem().getItemType() == L2WeaponType.ROD || item.isShadowItem()) { activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); activeChar.setActiveEnchantItem(null); return; } if (!Config.ENCHANT_HERO_WEAPON && item.getItemId() >= 6611 && item.getItemId() <= 6621) { activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); activeChar.setActiveEnchantItem(null); return; } /* * if(!FloodProtector.getInstance().tryPerformAction(activeChar.getObjectId(), FloodProtector.PROTECTED_ENCHANT)) { activeChar.setActiveEnchantItem(null); activeChar.sendMessage("Enchant failed"); return; } */ if (item.isWear()) { activeChar.setActiveEnchantItem(null); Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant a weared Item", IllegalPlayerAction.PUNISH_KICK); return; } final int itemType2 = item.getItem().getType2(); boolean enchantItem = false; boolean blessedScroll = false; boolean crystalScroll = false; int crystalId = 0; /** pretty code ;D */ switch (item.getItem().getCrystalType()) { case L2Item.CRYSTAL_A: crystalId = 1461; switch (scroll.getItemId()) { case 729: case 731: case 6569: if (itemType2 == L2Item.TYPE2_WEAPON) { enchantItem = true; } break; case 730: case 732: case 6570: if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR || itemType2 == L2Item.TYPE2_ACCESSORY) { enchantItem = true; } break; } break; case L2Item.CRYSTAL_B: crystalId = 1460; switch (scroll.getItemId()) { case 947: case 949: case 6571: if (itemType2 == L2Item.TYPE2_WEAPON) { enchantItem = true; } break; case 948: case 950: case 6572: if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR || itemType2 == L2Item.TYPE2_ACCESSORY) { enchantItem = true; } break; } break; case L2Item.CRYSTAL_C: crystalId = 1459; switch (scroll.getItemId()) { case 951: case 953: case 6573: if (itemType2 == L2Item.TYPE2_WEAPON) { enchantItem = true; } break; case 952: case 954: case 6574: if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR || itemType2 == L2Item.TYPE2_ACCESSORY) { enchantItem = true; } break; } break; case L2Item.CRYSTAL_D: crystalId = 1458; switch (scroll.getItemId()) { case 955: case 957: case 6575: if (itemType2 == L2Item.TYPE2_WEAPON) { enchantItem = true; } break; case 956: case 958: case 6576: if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR || itemType2 == L2Item.TYPE2_ACCESSORY) { enchantItem = true; } break; } break; case L2Item.CRYSTAL_S: crystalId = 1462; switch (scroll.getItemId()) { case 959: case 961: case 6577: if (itemType2 == L2Item.TYPE2_WEAPON) { enchantItem = true; } break; case 960: case 962: case 6578: if (itemType2 == L2Item.TYPE2_SHIELD_ARMOR || itemType2 == L2Item.TYPE2_ACCESSORY) { enchantItem = true; } break; } break; } if (!enchantItem) { activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); return; } // Get the scroll type - Yesod if (scroll.getItemId() >= 6569 && scroll.getItemId() <= 6578) { blessedScroll = true; } else { for (final int crystalscroll : CRYSTAL_SCROLLS) if (scroll.getItemId() == crystalscroll) { crystalScroll = true; break; } } // SystemMessage sm = new SystemMessage(SystemMessageId.ENCHANT_SCROLL_CANCELLED); // activeChar.sendPacket(sm); SystemMessage sm; int chance = 0; int maxEnchantLevel = 0; int minEnchantLevel = 0; if (item.getItem().getType2() == L2Item.TYPE2_WEAPON) { if (blessedScroll) { for (final int blessedweaponscroll : BLESSED_WEAPON_SCROLLS) { if (scroll.getItemId() == blessedweaponscroll) { if (item.getEnchantLevel() >= Config.BLESS_WEAPON_ENCHANT_LEVEL.size()) // the hash has size equals to // max enchant, so if the actual // enchant level is equal or more then max // then the enchant rate is equal to last // enchant rate { chance = Config.BLESS_WEAPON_ENCHANT_LEVEL.get(Config.BLESS_WEAPON_ENCHANT_LEVEL.size()); } else { chance = Config.BLESS_WEAPON_ENCHANT_LEVEL.get(item.getEnchantLevel() + 1); } maxEnchantLevel = Config.ENCHANT_WEAPON_MAX; break; } } } else if (crystalScroll) { for (final int crystalweaponscroll : CRYSTAL_WEAPON_SCROLLS) { if (scroll.getItemId() == crystalweaponscroll) { if (item.getEnchantLevel() >= Config.CRYSTAL_WEAPON_ENCHANT_LEVEL.size()) { chance = Config.CRYSTAL_WEAPON_ENCHANT_LEVEL.get(Config.CRYSTAL_WEAPON_ENCHANT_LEVEL.size()); } else { chance = Config.CRYSTAL_WEAPON_ENCHANT_LEVEL.get(item.getEnchantLevel() + 1); } minEnchantLevel = Config.CRYSTAL_ENCHANT_MIN; maxEnchantLevel = Config.CRYSTAL_ENCHANT_MAX; break; } } } else { // normal scrolls for (final int normalweaponscroll : NORMAL_WEAPON_SCROLLS) { if (scroll.getItemId() == normalweaponscroll) { if (item.getEnchantLevel() >= Config.NORMAL_WEAPON_ENCHANT_LEVEL.size()) { chance = Config.NORMAL_WEAPON_ENCHANT_LEVEL.get(Config.NORMAL_WEAPON_ENCHANT_LEVEL.size()); } else { chance = Config.NORMAL_WEAPON_ENCHANT_LEVEL.get(item.getEnchantLevel() + 1); } maxEnchantLevel = Config.ENCHANT_WEAPON_MAX; break; } } } } else if (item.getItem().getType2() == L2Item.TYPE2_SHIELD_ARMOR) { if (blessedScroll) { for (final int blessedarmorscroll : BLESSED_ARMOR_SCROLLS) { if (scroll.getItemId() == blessedarmorscroll) { if (item.getEnchantLevel() >= Config.BLESS_ARMOR_ENCHANT_LEVEL.size()) { chance = Config.BLESS_ARMOR_ENCHANT_LEVEL.get(Config.BLESS_ARMOR_ENCHANT_LEVEL.size()); } else { chance = Config.BLESS_ARMOR_ENCHANT_LEVEL.get(item.getEnchantLevel() + 1); } maxEnchantLevel = Config.ENCHANT_ARMOR_MAX; break; } } } else if (crystalScroll) { for (final int crystalarmorscroll : CRYSTAL_ARMOR_SCROLLS) { if (scroll.getItemId() == crystalarmorscroll) { if (item.getEnchantLevel() >= Config.CRYSTAL_ARMOR_ENCHANT_LEVEL.size()) { chance = Config.CRYSTAL_ARMOR_ENCHANT_LEVEL.get(Config.CRYSTAL_ARMOR_ENCHANT_LEVEL.size()); } else { chance = Config.CRYSTAL_ARMOR_ENCHANT_LEVEL.get(item.getEnchantLevel() + 1); } minEnchantLevel = Config.CRYSTAL_ENCHANT_MIN; maxEnchantLevel = Config.CRYSTAL_ENCHANT_MAX; break; } } } else { // normal scrolls for (final int normalarmorscroll : NORMAL_ARMOR_SCROLLS) { if (scroll.getItemId() == normalarmorscroll) { if (item.getEnchantLevel() >= Config.NORMAL_ARMOR_ENCHANT_LEVEL.size()) { chance = Config.NORMAL_ARMOR_ENCHANT_LEVEL.get(Config.NORMAL_ARMOR_ENCHANT_LEVEL.size()); } else { chance = Config.NORMAL_ARMOR_ENCHANT_LEVEL.get(item.getEnchantLevel() + 1); } maxEnchantLevel = Config.ENCHANT_ARMOR_MAX; break; } } } } else if (item.getItem().getType2() == L2Item.TYPE2_ACCESSORY) { if (blessedScroll) { for (final int blessedjewelscroll : BLESSED_ARMOR_SCROLLS) { if (scroll.getItemId() == blessedjewelscroll) { if (item.getEnchantLevel() >= Config.BLESS_JEWELRY_ENCHANT_LEVEL.size()) { chance = Config.BLESS_JEWELRY_ENCHANT_LEVEL.get(Config.BLESS_JEWELRY_ENCHANT_LEVEL.size()); } else { chance = Config.BLESS_JEWELRY_ENCHANT_LEVEL.get(item.getEnchantLevel() + 1); } maxEnchantLevel = Config.ENCHANT_JEWELRY_MAX; break; } } } else if (crystalScroll) { for (final int crystaljewelscroll : CRYSTAL_ARMOR_SCROLLS) { if (scroll.getItemId() == crystaljewelscroll) { if (item.getEnchantLevel() >= Config.CRYSTAL_JEWELRY_ENCHANT_LEVEL.size()) { chance = Config.CRYSTAL_JEWELRY_ENCHANT_LEVEL.get(Config.CRYSTAL_JEWELRY_ENCHANT_LEVEL.size()); } else { chance = Config.CRYSTAL_JEWELRY_ENCHANT_LEVEL.get(item.getEnchantLevel() + 1); } minEnchantLevel = Config.CRYSTAL_ENCHANT_MIN; maxEnchantLevel = Config.CRYSTAL_ENCHANT_MAX; break; } } } else { for (final int normaljewelscroll : NORMAL_ARMOR_SCROLLS) { if (scroll.getItemId() == normaljewelscroll) { if (item.getEnchantLevel() >= Config.NORMAL_JEWELRY_ENCHANT_LEVEL.size()) { chance = Config.NORMAL_JEWELRY_ENCHANT_LEVEL.get(Config.NORMAL_JEWELRY_ENCHANT_LEVEL.size()); } else { chance = Config.NORMAL_JEWELRY_ENCHANT_LEVEL.get(item.getEnchantLevel() + 1); } maxEnchantLevel = Config.ENCHANT_JEWELRY_MAX; break; } } } } if ((maxEnchantLevel != 0 && item.getEnchantLevel() >= maxEnchantLevel) || (item.getEnchantLevel()) < minEnchantLevel) { activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); return; } if (Config.SCROLL_STACKABLE) { scroll = activeChar.getInventory().destroyItem("Enchant", scroll.getObjectId(), 1, activeChar, item); } else { scroll = activeChar.getInventory().destroyItem("Enchant", scroll, activeChar, item); } if (scroll == null) { activeChar.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS)); Util.handleIllegalPlayerAction(activeChar, "Player " + activeChar.getName() + " tried to enchant with a scroll he doesnt have", Config.DEFAULT_PUNISH); return; } if (item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX || item.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR && item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX_FULL) { chance = 100; } int rndValue = Rnd.get(100); if (Config.ENABLE_DWARF_ENCHANT_BONUS && activeChar.getRace() == Race.dwarf) if (activeChar.getLevel() >= Config.DWARF_ENCHANT_MIN_LEVEL) { rndValue -= Config.DWARF_ENCHANT_BONUS; } final Object aChance = item.fireEvent("calcEnchantChance", new Object[chance]); if (aChance != null) { chance = (Integer) aChance; } synchronized (item) { if (rndValue < chance) { if (item.getOwnerId() != activeChar.getObjectId()) { activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); return; } if (item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY && item.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL) { activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); return; } if (item.getEnchantLevel() == 0) { sm = new SystemMessage(SystemMessageId.S1_SUCCESSFULLY_ENCHANTED); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } else { sm = new SystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED); sm.addNumber(item.getEnchantLevel()); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } item.setEnchantLevel(item.getEnchantLevel() + Config.CUSTOM_ENCHANT_VALUE); item.updateDatabase(); } else { if (crystalScroll) { sm = SystemMessage.sendString("Failed in Crystal Enchant. The enchant value of the item become " + Config.CRYSTAL_ENCHANT_MIN); activeChar.sendPacket(sm); } else if (blessedScroll) { sm = new SystemMessage(SystemMessageId.BLESSED_ENCHANT_FAILED); activeChar.sendPacket(sm); } else { if (item.getEnchantLevel() > 0) { sm = new SystemMessage(SystemMessageId.ENCHANTMENT_FAILED_S1_S2_EVAPORATED); sm.addNumber(item.getEnchantLevel()); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } else { sm = new SystemMessage(SystemMessageId.ENCHANTMENT_FAILED_S1_EVAPORATED); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } } if (!blessedScroll && !crystalScroll) { if (item.getEnchantLevel() > 0) { sm = new SystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED); sm.addNumber(item.getEnchantLevel()); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } else { sm = new SystemMessage(SystemMessageId.S1_DISARMED); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } if (item.isEquipped()) { if (item.isAugmented()) { item.getAugmentation().removeBoni(activeChar); } final L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(item.getEquipSlot()); final InventoryUpdate iu = new InventoryUpdate(); for (final L2ItemInstance element : unequiped) { iu.addModifiedItem(element); } activeChar.sendPacket(iu); activeChar.broadcastUserInfo(); } int count = item.getCrystalCount() - (item.getItem().getCrystalCount() + 1) / 2; if (count < 1) { count = 1; } if (item.fireEvent("enchantFail", new Object[] {}) != null) return; final L2ItemInstance destroyItem = activeChar.getInventory().destroyItem("Enchant", item, activeChar, null); if (destroyItem == null) return; final L2ItemInstance crystals = activeChar.getInventory().addItem("Enchant", crystalId, count, activeChar, destroyItem); sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S); sm.addItemName(crystals.getItemId()); sm.addNumber(count); activeChar.sendPacket(sm); if (!Config.FORCE_INVENTORY_UPDATE) { final InventoryUpdate iu = new InventoryUpdate(); if (destroyItem.getCount() == 0) { iu.addRemovedItem(destroyItem); } else { iu.addModifiedItem(destroyItem); } iu.addItem(crystals); activeChar.sendPacket(iu); } else { activeChar.sendPacket(new ItemList(activeChar, true)); } final StatusUpdate su = new StatusUpdate(activeChar.getObjectId()); su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad()); activeChar.sendPacket(su); activeChar.broadcastUserInfo(); final L2World world = L2World.getInstance(); world.removeObject(destroyItem); } else { if (blessedScroll) { item.setEnchantLevel(Config.BREAK_ENCHANT); item.updateDatabase(); } else if (crystalScroll) { item.setEnchantLevel(Config.CRYSTAL_ENCHANT_MIN); item.updateDatabase(); } } } } sm = null; StatusUpdate su = new StatusUpdate(activeChar.getObjectId()); su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad()); activeChar.sendPacket(su); su = null; activeChar.sendPacket(new EnchantResult(item.getEnchantLevel())); // FIXME i'm really not sure about this... activeChar.sendPacket(new ItemList(activeChar, false)); // TODO update only the enchanted item activeChar.broadcastUserInfo(); } @Override public String getType() { return "[C] 58 RequestEnchantItem"; } }
  20. I've found about it in actor/instance/L2PcInstance.java, is it the correct file? I hope I was looking up to the right bit, If so where to set it correct for tvt/dm/cft? else { player.sendPacket(new ValidateLocation(this)); // Check if the player is attackable (without a forced attack) and isn't dead if (isAutoAttackable(player) && !isAlikeDead()) { // Check the height difference if (Math.abs(player.getZ() - getZ()) < 400) // this max heigth difference might need some tweaking { // Set the L2PcInstance Intention to AI_INTENTION_ATTACK player.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, this); // player.startAttack(this); } else { // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet player.sendPacket(ActionFailed.STATIC_PACKET); } } else if (!isAutoAttackable(player)) { // Calculate the distance between the L2PcInstance and the L2NpcInstance if (!canInteract(player)) { // Notify the L2PcInstance AI with AI_INTENTION_INTERACT player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this); } else { // Like L2OFF if char is dead, is sitting, is in trade or is in fakedeath can't interact with npc if (player.isSitting() || player.isDead() || player.isFakeDeath() || player.getActiveTradeList() != null) return; I hope it's the right bit.. or somewhere among here? public boolean isAutoAttackable(final L2Character attacker) { return false; } /** * Return the Identifier of the item in the left hand of this L2NpcInstance contained in the L2NpcTemplate.<BR> * <BR> * @return the left hand item */ public int getLeftHandItem() { return _currentLHandId; } /**
  21. Tnx for reply. May b I'm missing something out, but seems same to mine: if (rndValue < chance) { if (item.getOwnerId() != activeChar.getObjectId()) { activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); return; } if (item.getLocation() != L2ItemInstance.ItemLocation.INVENTORY && item.getLocation() != L2ItemInstance.ItemLocation.PAPERDOLL) { activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION)); return; } if (item.getEnchantLevel() == 0) { sm = new SystemMessage(SystemMessageId.S1_SUCCESSFULLY_ENCHANTED); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } else { sm = new SystemMessage(SystemMessageId.S1_S2_SUCCESSFULLY_ENCHANTED); sm.addNumber(item.getEnchantLevel()); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); } item.setEnchantLevel(item.getEnchantLevel() + Config.CUSTOM_ENCHANT_VALUE); item.updateDatabase(); }
×
×
  • Create New...