Jump to content

Search the Community

Showing results for tags 'lineage2'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • News and Announcements
    • News
  • General
    • Suggestions & Feedback
    • General Chat
    • GFX
    • VFX
  • MMO Hub
    • Gamer's Lounge
    • Member's Lounge
    • Developer Lounge
    • Premium Lounge
  • MMO Corner
    • World of Warcraft
    • Lineage 2
    • Minecraft
    • Host Listing
    • Server Listing
    • Server Recruitment
    • Server Reviews
    • The Underground
  • User Hub
    • Support
    • Report
    • Contact Staff
  • Merchant Corner
    • Marketplace
  • General Development Releases
  • Tutorials
  • Wasteland

Categories

  • Creative Corner
    • GFX Releases
    • VFX Releases
    • Resources
  • MMO and MMORPG
    • World of Warcraft
    • Lineage 2
    • Minecraft
  • Webmasters
    • Content Management Systems
    • Addons
    • Scripts
    • Designs
    • Proxies
    • HTML
  • Applications
  • Gaming
    • World of Warcraft
    • Lineage 2
    • Minecraft
    • Emulation
    • Nulled Distributions
  • Marketplace
    • Marsh Designs
    • iDarts

Product Groups

  • Membership
  • Advertise
  • Promote

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Interests


How Did You Find Us?


Contributor


Discord

Found 67 results

  1. Hello members of LordCraft, here is a great project powered by Trance. Some info about the project: Download: Download contains: Full credits goes to: Trance
  2. Images Preview: What is: Another Perfect Interface for H5 Infinitely zoom + when clicking the scroll wheel does not reset the camera When u targeting someone shows the class -2 Additional panels Unique Character creation menu Inventory and other things Lobby looks like Freya style Author : Savo read the readme before installingclear.png The author recommends to put on monitors with Full HD resolution. Download [hide] Part 1 - PatchSavoMovie.part1.rar Part 2 - PatchSavoMovie.part2.rar If you need to systemchat \ macros \ socket - Interface.rar [/hide]
  3. Hello members of LordCraft, here is a custom code for spawn item. Code: [hide] package ru.catssoftware.gameserver.handler.itemhandler; import org.apache.log4j.Logger; import ru.catssoftware.gameserver.ThreadPoolManager; import ru.catssoftware.gameserver.datatables.NpcTable; import ru.catssoftware.gameserver.handler.IItemHandler; import ru.catssoftware.gameserver.idfactory.IdFactory; import ru.catssoftware.gameserver.model.L2ItemInstance; import ru.catssoftware.gameserver.model.actor.instance.L2NpcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance; import ru.catssoftware.gameserver.model.actor.instance.L2PlayableInstance; import ru.catssoftware.gameserver.network.SystemMessageId; import ru.catssoftware.gameserver.templates.chars.L2NpcTemplate; /** * Created by IntelliJ IDEA. * User: masone * Date: 02.07.15 * Time: 20:07 * To change this template use File | Settings | File Templates. */ public class spawnitem implements IItemHandler { protected static Logger _log = Logger.getLogger(spawnitem.class.getName()); private static final int[] ITEM_IDS = { 6673 }; public void useItem(L2PlayableInstance playable, L2ItemInstance item, boolean par){} public int[] getItemIds() { return ITEM_IDS; } public void useItem(L2PlayableInstance playable, L2ItemInstance item) { _log.info("use item" +item); L2PcInstance activeChar; activeChar = (L2PcInstance) playable; L2NpcTemplate template; template = NpcTable.getInstance().getTemplate(60000); if (activeChar.isInOlympiadMode()) { activeChar.sendPacket(SystemMessageId.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT); return; } //TODO flood protector L2NpcInstance npc = new L2NpcInstance(IdFactory.getInstance().getNextId(), template); npc.setInstanceId(activeChar.getInstanceId()); npc.setIsInvul(true); npc.setTitle(activeChar.getName()); npc.setName("masone"); npc.updateAbnormalEffect(); npc.spawnMe(activeChar.getX(), activeChar.getY(), activeChar.getZ()); ThreadPoolManager.getInstance().scheduleGeneral(new deleteNPC(npc), 60000); // activeChar.destroyItem("Summon", item.getObjectId(), 1, null, true); } public class deleteNPC implements Runnable { protected L2NpcInstance _npc; public void run() { _npc.deleteMe(); } deleteNPC(L2NpcInstance npc) { _npc = npc; } } } [/hide] Credtis: masone
  4. Image Preview: Download: [hide] [/hide] Credits: KryeR
  5. Hello LordCrafters. Today i'm gonna release L2DarkPath Website Template And you can download it from here: [hide]https://mega.nz/#!9pVBiACa!ulIBfXo1fH9yHv9NhqHyIFEYSzWRPAOvZ5qj8QMZAzA[/hide]
  6. Hello LordCrafters. Today i'm gonna release Lineage2Dex Website Template You can check a preview of the website here: http://psyancypreviews.netau.net/l2dex/ And you can download it from here: [hide] https://mega.nz/#!B5kEVTQI!COCxYK6L-L-iuYzss_xSym9qxr_oo2W72smJaOcrw-o [/hide]
  7. Image Preview: Download: [hide] [/hide] Credits: Dgrafika.lt
  8. Hello members of LordCraft, here is a custom Armor for Freya/H5 Clients. Preview: https://www.youtube.com/watch?v=9uJtOFBNVTI#ws Download link: [hide] [/hide] PvP Icons: [hide] [/hide] Password: bymxckyriad Credits: mxckyriad
  9. Hello members of LordCraft, here is a custom NPC Template for Interlude Clients. Preview: Download link: [hide] [/hide] Credits: Herpy
  10. Hello members of LordCraft, here is a custom NPC Template for H5 Clients. Preview: Download link: [hide] [/hide] Credits: Asuki
  11. Image Preview Download [hide] [/hide] Rar Password: d0ds0153 Credits: d0ds
  12. Have you ever wanted to build your own lineage2 private server? If yes, l2jsunrise is the way to achieve it easily and without knowledge. First of all, what is l2jsunrise? Its a project founded by NeverMore & vGodfather 5 years ago which develops high quality H5 server files. If you are really into lineage2 industry the past few years, then for sure you might have heard of l2jsunrise or you might have played on a server based on l2jsunrise files. There are many similar server files on the internet, however with a few simple facts i will help you understand why you should choose l2jsunrise: [★] You will find countless ready to be used features that can be enabled/disabled and configured by configs. [★] Hundreds of problems and bugs has been fixed over the last years under users reports. [★] Source access on the lowest price you will ever find on the marketplace. [★] Video and well written tutorials of how to control several issues/features or how to install your emulator. [★] Daily support throught our well structured private forum. [★] Regular updates either for fixes or reworks for stability issues. [★] You will get some discount coupons for s-guard (client side protection) and sovahost (cheap and reliable hosting solutions). [★] Geodata files included on all available plans Here's some useful links regarding our project Features ➥ https://goo.gl/qEY36Z Ingame Preview ➥ https://goo.gl/KrEgEd Test Server ➥ https://goo.gl/2DmwhB Testimonials ➥ https://goo.gl/pWeWca OFFICIAL PROJECTS WEBSITE ➥ https://www.l2jsunrise.com ===== IMPORTANT ===== DO NOT GET SCAMMED ===== Please be sure that you obtained sunrise files from the official provider. Contact us only via our in-built contact form, facebook or through skype l2jsunrise. Fake sunrise files may be offered on the marketplace for lower prices, but keep in mind that there might include backdoors, you will not have lifetime sunrise support, and last but not least if we found out that you are using a non registered SVN, account will be deleted and you will lose everything you paid for. In case you found a reseller of sunrise please report it at l2jsunrise@gmail.com and benefit from it.
  13. Hello members of LordCraft, here are retail splash screens for Interlude Clients. A lot of servers using custom splash screens, if you don't want to see them and you want to have the retail splashes here you are. Download: [hide] [/hide]
  14. Hello members of LordCraft, here is a code for automatic potions for all L2J packs. Images Preview: Code: [hide] Index: data/xml/items/0700-0799.xml =================================================================== --- data/xml/items/0700-0799.xml (revision 112) +++ data/xml/items/0700-0799.xml (working copy) @@ -329,7 +329,7 @@ <set name="price" val="2000" /> <set name="is_stackable" val="true" /> <set name="is_oly_restricted" val="true" /> - <set name="handler" val="ItemSkills" /> + <set name="handler" val="SoulShots" /> <set name="item_skill" val="2279-2" /> <set name="use_condition" val="{{uc_transmode_exclude;{tt_flying}}}" /> </item> Index: data/xml/items/1500-1599.xml =================================================================== --- data/xml/items/1500-1599.xml (revision 112) +++ data/xml/items/1500-1599.xml (working copy) @@ -265,7 +265,7 @@ <set name="reuse_delay" val="10000" /> <set name="is_stackable" val="true" /> <set name="is_oly_restricted" val="true" /> - <set name="handler" val="ItemSkills" /> + <set name="handler" val="SoulShots" /> <set name="item_skill" val="2037-1" /> <set name="use_condition" val="{{uc_transmode_exclude;{tt_flying}}}" /> <set name="shared_reuse_group" val="10" /> Index: data/xml/items/5500-5599.xml =================================================================== --- data/xml/items/5500-5599.xml (revision 112) +++ data/xml/items/5500-5599.xml (working copy) @@ -673,7 +673,7 @@ <set name="reuse_delay" val="500" /> <set name="is_stackable" val="true" /> <set name="is_oly_restricted" val="true" /> - <set name="handler" val="ItemSkills" /> + <set name="handler" val="SoulShots" /> <set name="item_skill" val="2166-2" /> </item> <item id="5593" type="EtcItem" name="SP Scroll: Low Grade"> Index: java/net/sf/l2j/gameserver/handler/itemhandlers/SoulShots.java =================================================================== --- java/net/sf/l2j/gameserver/handler/itemhandlers/SoulShots.java (revision 112) +++ java/net/sf/l2j/gameserver/handler/itemhandlers/SoulShots.java (working copy) @@ -14,18 +14,24 @@ */ package net.sf.l2j.gameserver.handler.itemhandlers; +import net.sf.l2j.gameserver.ThreadPoolManager; import net.sf.l2j.gameserver.handler.IItemHandler; import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.ShotType; import net.sf.l2j.gameserver.model.actor.L2Playable; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.network.SystemMessageId; +import net.sf.l2j.gameserver.network.serverpackets.ExAutoSoulShot; import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse; import net.sf.l2j.gameserver.templates.item.L2Weapon; import net.sf.l2j.gameserver.util.Broadcast; public class SoulShots implements IItemHandler { + private static final int MANA_POT_CD = 2, + HEALING_POT_CD = 11, // DO NOT PUT LESS THAN 10 + CP_POT_CD = 2; + private static final int[] SKILL_IDS = { 2039, @@ -47,6 +53,108 @@ final L2Weapon weaponItem = activeChar.getActiveWeaponItem(); final int itemId = item.getItemId(); + if (itemId == 728 || itemId == 1539 || itemId == 5592) + { + switch (itemId) + { + case 728: // mana potion + { + if (activeChar.isAutoPot(728)) + { + activeChar.sendPacket(new ExAutoSoulShot(728, 0)); + activeChar.sendMessage("Deactivated auto mana potions."); + activeChar.setAutoPot(728, null, false); + } + else + { + if (activeChar.getInventory().getItemByItemId(728) != null) + { + if (activeChar.getInventory().getItemByItemId(728).getCount() > 1) + { + activeChar.sendPacket(new ExAutoSoulShot(728, 1)); + activeChar.sendMessage("Activated auto mana potions."); + activeChar.setAutoPot(728, ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoPot(728, activeChar), 1000, MANA_POT_CD*1000), true); + } + else + { + MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2279, 2, 0, 100); + activeChar.broadcastPacket(msu); + + ItemSkills is = new ItemSkills(); + is.useItem(activeChar, activeChar.getInventory().getItemByItemId(728), true); + } + } + } + + break; + } + case 1539: // greater healing potion + { + if (activeChar.isAutoPot(1539)) + { + activeChar.sendPacket(new ExAutoSoulShot(1539, 0)); + activeChar.sendMessage("Deactivated auto healing potions."); + activeChar.setAutoPot(1539, null, false); + } + else + { + if (activeChar.getInventory().getItemByItemId(1539) != null) + { + if (activeChar.getInventory().getItemByItemId(1539).getCount() > 1) + { + activeChar.sendPacket(new ExAutoSoulShot(1539, 1)); + activeChar.sendMessage("Activated auto healing potions."); + activeChar.setAutoPot(1539, ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoPot(1539, activeChar), 1000, HEALING_POT_CD*1000), true); + } + else + { + MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2037, 1, 0, 100); + activeChar.broadcastPacket(msu); + + ItemSkills is = new ItemSkills(); + is.useItem(activeChar, activeChar.getInventory().getItemByItemId(1539), true); + } + } + } + + break; + } + case 5592: // greater cp potion + { + if (activeChar.isAutoPot(5592)) + { + activeChar.sendPacket(new ExAutoSoulShot(5592, 0)); + activeChar.sendMessage("Deactivated auto cp potions."); + activeChar.setAutoPot(5592, null, false); + } + else + { + if (activeChar.getInventory().getItemByItemId(5592) != null) + { + if (activeChar.getInventory().getItemByItemId(5592).getCount() > 1) + { + activeChar.sendPacket(new ExAutoSoulShot(5592, 1)); + activeChar.sendMessage("Activated auto cp potions."); + activeChar.setAutoPot(5592, ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoPot(5592, activeChar), 1000, CP_POT_CD*1000), true); + } + else + { + MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2166, 2, 0, 100); + activeChar.broadcastPacket(msu); + + ItemSkills is = new ItemSkills(); + is.useItem(activeChar, activeChar.getInventory().getItemByItemId(5592), true); + } + } + } + + break; + } + } + + return; + } + // Check if soulshot can be used if (weaponInst == null || weaponItem.getSoulShotCount() == 0) { @@ -87,4 +195,76 @@ activeChar.sendPacket(SystemMessageId.ENABLED_SOULSHOT); Broadcast.toSelfAndKnownPlayersInRadiusSq(activeChar, new MagicSkillUse(activeChar, activeChar, SKILL_IDS[grade], 1, 0, 0), 360000); } + + private class AutoPot implements Runnable + { + private int id; + private L2PcInstance activeChar; + + public AutoPot(int id, L2PcInstance activeChar) + { + this.id = id; + this.activeChar = activeChar; + } + + @Override + public void run() + { + if (activeChar.getInventory().getItemByItemId(id) == null) + { + activeChar.sendPacket(new ExAutoSoulShot(id, 0)); + activeChar.setAutoPot(id, null, false); + return; + } + + switch (id) + { + case 728: + { + if (activeChar.getCurrentMp() < 0.70*activeChar.getMaxMp()) + { + MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2279, 2, 0, 100); + activeChar.broadcastPacket(msu); + + ItemSkills is = new ItemSkills(); + is.useItem(activeChar, activeChar.getInventory().getItemByItemId(728), true); + } + + break; + } + case 1539: + { + if (activeChar.getCurrentHp() < 0.95*activeChar.getMaxHp()) + { + MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2037, 1, 0, 100); + activeChar.broadcastPacket(msu); + + ItemSkills is = new ItemSkills(); + is.useItem(activeChar, activeChar.getInventory().getItemByItemId(1539), true); + } + + break; + } + case 5592: + { + if (activeChar.getCurrentCp() < 0.95*activeChar.getMaxCp()) + { + MagicSkillUse msu = new MagicSkillUse(activeChar, activeChar, 2166, 2, 0, 100); + activeChar.broadcastPacket(msu); + + ItemSkills is = new ItemSkills(); + is.useItem(activeChar, activeChar.getInventory().getItemByItemId(5592), true); + } + + break; + } + } + + if (activeChar.getInventory().getItemByItemId(id) == null) + { + activeChar.sendPacket(new ExAutoSoulShot(id, 0)); + activeChar.setAutoPot(id, null, false); + } + } + } } \ No newline at end of file Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 112) +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -251,6 +251,24 @@ */ public final class L2PcInstance extends L2Playable { + private Map<Integer, Future<?>> _autoPotTasks = new HashMap<>(); + + public boolean isAutoPot(int id) + { + return _autoPotTasks.keySet().contains(id); + } + + public void setAutoPot(int id, Future<?> task, boolean add) + { + if (add) + _autoPotTasks.put(id, task); + else + { + _autoPotTasks.get(id).cancel(true); + _autoPotTasks.remove(id); + } + } + private BuffShop buffShop = null; public void setBuffShop(BuffShop val) @@ -4321,6 +4339,22 @@ teleToLocation(184351, 20318, -3174, 0); } + if (isAutoPot(728)) + { + sendPacket(new ExAutoSoulShot(728, 0)); + setAutoPot(728, null, false); + } + if (isAutoPot(1539)) + { + sendPacket(new ExAutoSoulShot(1539, 0)); + setAutoPot(1539, null, false); + } + if (isAutoPot(5592)) + { + sendPacket(new ExAutoSoulShot(5592, 0)); + setAutoPot(5592, null, false); + } + return true; } [/hide] Credits: Devlin
  15. Hello members of LordCraft, here is a custom code for L2JFrozen. Image Preview: Code: Credits for Adaption to L2JFrozen from L2JDX: Tayran.Cannabis
  16. Hello LordCrafters. Here is a special gift created by 'Baggos'. Message from 'Baggos': View Config Files, Summary & Files: configs/customs/customs.properties #============================================================= # Customs #============================================================= # New Char Custom Title. NewCharTitle = L2World # Subclass Custom level SubclassLevel = 52 # PvP/Pk Color System AllowColorSystem = True # It works like: pvps,color;pvps,color, eg. 100,00FF00;200,FF0000;300,0000FF;. PvpsColors = 0,00FF00; # It works like: pks,color;pks,color, eg. 100,00FF00;200,FF0000;300,0000FF;. PksColors = 0,00FF00; # New players level AllowStartlLevel = true # For 80 lvl and 100% put 81 StartLevel = 81 # New players Spawn NewCharLoc = true X = 83278 Y = 148273 Z = -3408 # Subclass Everywhere in any Master. SubclassEverywhere = true #PvP Reward System. PvpRewardSystem = true PvpReward = 57,50; # PvP Count System. # This system count your kills without die. Auto Killing Spree like League of Legends. # Special Announce after 2/3/5/7/9/11/15 pvp kills in a row. PvpCountSystem = true #Starting Items System. (NOT FOR EQUIPPED ITEMS). StartingItemsSystem = true StartingItems = 3470,1; # Npc Party Teleporter # Enable the Character Killing Monuments # NPC Id NpcPtTeleporterId= 50018 # Teleport coordinates PtTeleportX = -56781 PtTeleportY = 140545 PtTeleportZ = -2629 # ZoneId NpcPtZoneID default: 911 # Select the id of your zone. # If you dont know how to find your zone id is simple. # Go to data/zones/(your zone file).xml and find your zone # E.g: <zone name="dion_monster_pvp" id="6" type="ArenaZone" shape="NPoly" minZ="-3596" maxZ="0"> NpcPtZoneID = 255 # Min party members NpcPtMinPartyMembers = 2 # Consume Item Id NpcPtConsumeItemId = 57 # Consume Item Quantity NpcPtConsumeItemQt = 100 # Show Inside players in zone NpcPtShowInsidePlayers = True # Show Inside Parties in zone NpcPtShowInsideParties = True # Enlabe NobleItem | If you change the ID, you should go to < Data/xml/items >. # Add in the end of the item's line ( <set name="handler" val="NobleItem" /> ). EnableNobleItem = True # Id NobleCustomItem NobleItemId = 3481 # Enlabe .online command OnlineCmd = true # Enable skip all items from Data/xml/skipping_items.xml out from droplist of all monsters. EnableSkippingItems = False configs/customs/flagzone.properties # --------------------------------------------------------------------------- # FLAG ZONE # --------------------------------------------------------------------------- # Set the spawn points where players will be teleported on respawn die. # example:150111,144740,-12248;143665,144418,-12022;144443,147685,-12139 SpawnLoc = 82273,148068,-3469; # Random respawn radius RespawnRadius = 250 Summary: Start Title Config. Start Level Config. New Player Spawn Config. Sub Class Level Config. Pvp Color System. Sub Class Everywhere. PvP Reward System. Anti Buff Shield. Blessed Scrolls Chance. Crystal Scrolls Chance. Max Enchant For Crystal Scrolls. Afk System. Auto Potions (CP/HP/MP). PvP Count System. # This system count your kills without die. Auto Killing Spree like League of Legends. # Special Announce after 2/3/5/7/9/11/15 pvp kills in a row. Starting Items System. (NOT FOR EQUIPPED ITEMS). Noble Item. .online .tvtjoin .tvtleave SkippingItems. # In <gameserver/data/xml> you will find the file skipping_items.xml You can put inside the items id who want to be skipped from droplist. Olympiad PvP Kills Limits. Global & Trade Chat with level Limits. Offlineshop. Bot Protection. Topzone/Hopzone/Network Vote Reward. PvP Zone. # In <gameserver/data/xml/zones> You will find the file FlagZone.xml. TvT Event. # You will find the settings of TvT Event in events.properties Gm Shop. Gatekeeper. Buffer. Party Teleporter Npc Raid Boss Manager CLAN MANAGER # You can register your clan for siege, lvl up your clan, add clan skills. TvT Event Npc Vote Manager # Hopzone/Topzone/Network [hide]SVN Link[/hide] [Tutorial]aCis Installation Stay tuned.. More custom mods coming after Christmas. I forgot to put some mods inside. I haven't the time today because I'm in vacations. I think I will create SVN for updates. It is somehow shitty right now. NOTICE: Use backup to get all necessary tables.
  17. On my Youtube channel you will find many guides to develop your Lineage 2 server. I have also created a library for you to review related content about the development of Lineage 2 servers.
  18. Code: [hide] Index: /trunk/L2_GameServer/java/config/General.properties =================================================================== --- /trunk/L2_GameServer/java/config/General.properties (revision 3516) +++ /trunk/L2_GameServer/java/config/General.properties (revision 3540) @@ -515,4 +515,8 @@ AltOlyRank5Points = 20 +# Maximum points that player can gain/lose on a match. +# Default: 10 +AltOlyMaxPoints = 10 + # Hero tables show last month's winners or current status. # Default: True Index: /trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/olympiad/OlympiadGame.java =================================================================== --- /trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/olympiad/OlympiadGame.java (revision 3490) +++ /trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/olympiad/OlympiadGame.java (revision 3540) @@ -504,5 +504,5 @@ final int playerOnePoints = playerOneStat.getInteger(POINTS); final int playerTwoPoints = playerTwoStat.getInteger(POINTS); - final int pointDiff = Math.min(playerOnePoints, playerTwoPoints) / _div; + final int pointDiff = Math.min(Math.min(playerOnePoints, playerTwoPoints) / _div, Config.ALT_OLY_MAX_POINTS); // Check for if a player defaulted before battle started @@ -511,5 +511,5 @@ if (_playerOneDefaulted) { - final int lostPoints = playerOnePoints / 3; + final int lostPoints = Math.min(playerOnePoints / 3, Config.ALT_OLY_MAX_POINTS); playerOneStat.set(POINTS, playerOnePoints - lostPoints); Olympiad.updateNobleStats(_playerOneID, playerOneStat); @@ -531,5 +531,5 @@ if (_playerTwoDefaulted) { - final int lostPoints = playerTwoPoints / 3; + final int lostPoints = Math.min(playerTwoPoints / 3, Config.ALT_OLY_MAX_POINTS); playerTwoStat.set(POINTS, playerTwoPoints - lostPoints); Olympiad.updateNobleStats(_playerTwoID, playerTwoStat); @@ -784,6 +784,6 @@ _sm = new SystemMessage(SystemMessageId.THE_GAME_ENDED_IN_A_TIE); broadcastMessage(_sm, true); - int pointOneDiff = playerOnePoints / 5; - int pointTwoDiff = playerTwoPoints / 5; + final int pointOneDiff = Math.min(playerOnePoints / 5, Config.ALT_OLY_MAX_POINTS); + final int pointTwoDiff = Math.min(playerTwoPoints / 5, Config.ALT_OLY_MAX_POINTS); playerOneStat.set(POINTS, playerOnePoints - pointOneDiff); playerTwoStat.set(POINTS, playerTwoPoints - pointTwoDiff); Index: /trunk/L2_GameServer/java/net/sf/l2j/Config.java =================================================================== --- /trunk/L2_GameServer/java/net/sf/l2j/Config.java (revision 3516) +++ /trunk/L2_GameServer/java/net/sf/l2j/Config.java (revision 3540) @@ -456,4 +456,5 @@ public static int ALT_OLY_RANK4_POINTS; public static int ALT_OLY_RANK5_POINTS; + public static int ALT_OLY_MAX_POINTS; public static boolean ALT_OLY_LOG_FIGHTS; public static boolean ALT_OLY_SHOW_MONTHLY_WINNERS; @@ -1527,4 +1528,5 @@ ALT_OLY_RANK4_POINTS = Integer.parseInt(General.getProperty("AltOlyRank4Points","35")); ALT_OLY_RANK5_POINTS = Integer.parseInt(General.getProperty("AltOlyRank5Points","20")); + ALT_OLY_MAX_POINTS = Integer.parseInt(General.getProperty("AltOlyMaxPoints","10")); ALT_OLY_LOG_FIGHTS = Boolean.parseBoolean(General.getProperty("AlyOlyLogFights","false")); ALT_OLY_SHOW_MONTHLY_WINNERS = Boolean.parseBoolean(General.getProperty("AltOlyShowMonthlyWinners","true")); [/hide] Credits: Charus
  19. Hello members of LordCraft, i decide to make a free gifts to 10 members of LordCraft Community. Here is a preview image of what i can do for you! (Sorry for the quality it won't be that bad on your server) Q: What is this giveaway? A: You simply copy and fill the code below and i'll make a free logo and 2 free buttons for your Server NPC. Q: What kind of image can be the logo? A: Can be transparent or it can be a normal background with your server logo. Q: How i can request a free logo and buttons? A: Fill this code and paste it as reply, you need to post your logo here transparent or no in order to make it logo for your Server NPC. Name: Server Name: Server Logo (link of your logo or paste your logo) : Buttons Colors (It can be two colors): Buttons Images (If you want something more than just buttons):
  20. Hello members of LordCraft, here is a code for Name Change. How it works? An item that changes the name of the character. Don't worry, we made checks on retail conditions, as 16-character limit, ... Remeber, you have to set an item to be the handler of Name Change. You can do it by adding <set name="handler" val="NameChange" /> on XML of the item. Image Preview: Core part: [hide] Index: java/net/sf/l2j/gameserver/handler/ItemHandler.java =================================================================== --- java/net/sf/l2j/gameserver/handler/ItemHandler.java (revision 21) +++ java/net/sf/l2j/gameserver/handler/ItemHandler.java (working copy) @@ -31,6 +31,7 @@ import net.sf.l2j.gameserver.handler.itemhandlers.Keys; import net.sf.l2j.gameserver.handler.itemhandlers.Maps; import net.sf.l2j.gameserver.handler.itemhandlers.MercTicket; +import net.sf.l2j.gameserver.handler.itemhandlers.NameChange; import net.sf.l2j.gameserver.handler.itemhandlers.PaganKeys; import net.sf.l2j.gameserver.handler.itemhandlers.PetFood; import net.sf.l2j.gameserver.handler.itemhandlers.Recipes; @@ -70,6 +71,7 @@ registerItemHandler(new Keys()); registerItemHandler(new Maps()); registerItemHandler(new MercTicket()); + registerItemHandler(new NameChange()); registerItemHandler(new PaganKeys()); registerItemHandler(new PetFood()); registerItemHandler(new Recipes()); Index: java/net/sf/l2j/gameserver/handler/itemhandlers/NameChange.java =================================================================== --- java/net/sf/l2j/gameserver/handler/itemhandlers/NameChange.java (revision 0) +++ java/net/sf/l2j/gameserver/handler/itemhandlers/NameChange.java (working copy) @@ -0,0 +1,43 @@ +/* + * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>. + */ +package net.sf.l2j.gameserver.handler.itemhandlers; + +import net.sf.l2j.gameserver.handler.IItemHandler; +import net.sf.l2j.gameserver.model.actor.L2Playable; +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.model.item.instance.ItemInstance; +import net.sf.l2j.gameserver.network.serverpackets.ActionFailed; +import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; + +/** + * @author rapfersan92 + */ +public class NameChange implements IItemHandler +{ + @Override + public void useItem(L2Playable playable, ItemInstance item, boolean forceUse) + { + if (!(playable instanceof L2PcInstance)) + return; + + final L2PcInstance activeChar = (L2PcInstance) playable; + activeChar.setNameChangeItemId(item.getItemId()); + + final NpcHtmlMessage html = new NpcHtmlMessage(0); + html.setFile("data/html/mods/NameChange.htm"); + activeChar.sendPacket(html); + activeChar.sendPacket(ActionFailed.STATIC_PACKET); + } +} \ No newline at end of file Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 21) +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -10705,4 +10705,16 @@ break; } } + + private int _nameChangeItemId = 0; + + public int getNameChangeItemId() + { + return _nameChangeItemId; + } + + public void setNameChangeItemId(int itemId) + { + _nameChangeItemId = itemId; + } } \ No newline at end of file Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java =================================================================== --- java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (revision 21) +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (working copy) @@ -18,8 +18,10 @@ import java.util.logging.Level; import net.sf.l2j.Config; +import net.sf.l2j.commons.lang.StringUtil; import net.sf.l2j.gameserver.communitybbs.CommunityBoard; import net.sf.l2j.gameserver.datatables.AdminCommandAccessRights; +import net.sf.l2j.gameserver.datatables.CharNameTable; import net.sf.l2j.gameserver.handler.AdminCommandHandler; import net.sf.l2j.gameserver.handler.IAdminCommandHandler; import net.sf.l2j.gameserver.model.L2Object; @@ -31,7 +33,9 @@ import net.sf.l2j.gameserver.model.olympiad.OlympiadManager; import net.sf.l2j.gameserver.network.SystemMessageId; import net.sf.l2j.gameserver.network.serverpackets.ActionFailed; +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; +import net.sf.l2j.gameserver.network.serverpackets.PlaySound; import net.sf.l2j.gameserver.util.FloodProtectors; import net.sf.l2j.gameserver.util.FloodProtectors.Action; import net.sf.l2j.gameserver.util.GMAudit; @@ -181,6 +185,46 @@ final int arenaId = Integer.parseInt(_command.substring(12).trim()); activeChar.enterOlympiadObserverMode(arenaId); } + else if (_command.startsWith("name_change")) + { + try + { + String name = _command.substring(12); + if (name.length() > 16) + { + activeChar.sendMessage("The chosen name cannot exceed 16 characters in length."); + return; + } + + if (!StringUtil.isValidPlayerName(name)) + { + activeChar.sendMessage("The chosen name does not fit with the regex pattern."); + return; + } + + synchronized (CharNameTable.getInstance()) + { + if (CharNameTable.doesCharNameExist(name)) + { + activeChar.sendMessage("The chosen name already exists."); + return; + } + } + + if (activeChar.destroyItemByItemId("Name Change", activeChar.getNameChangeItemId(), 1, null, true)) + { + activeChar.setName(name); + activeChar.sendPacket(new ExShowScreenMessage("Congratulations. Your name has been changed.", 10000)); + activeChar.sendPacket(new PlaySound("ItemSound.quest_finish")); + activeChar.broadcastUserInfo(); + activeChar.store(); + } + } + catch (Exception e) + { + activeChar.sendMessage("Fill out the field correctly."); + } + } } catch (Exception e) { [/hide] Datapack Part: [hide] Index: data/html/mods/NameChange.htm =================================================================== --- data/html/mods/NameChange.htm (revision 0) +++ data/html/mods/NameChange.htm (working copy) @@ -0,0 +1,26 @@ +<html> + <body> + <center> + <table width="256"> + <tr><td width="256" align="center">Name Change</td></tr> + </table> + <br> + <table width="256"> + <tr><td width="256" align="left">The name change service allows you to change the name of your character as it appears in-game.</td></tr> + </table> + <br> + <table width="160" cellspacing="2"> + <tr><td width="160" align="center">Name</td></tr> + <tr><td width="160" align="center"><edit var="name" width="160" height="12"></td> + </table> + <br> + <table width="95" cellspacing="2"> + <tr><td width="95" align="center"><button action="bypass -h name_change $name" value="Change!" width="95" height="21" back="bigbutton_over" fore="bigbutton"></td></tr> + </table> + <br> + <table width="256"> + <tr><td width="256" align="center">L2jBrasil</td></tr> + </table> + </center> + </body> +</html> \ No newline at end of file [/hide] Credits: Kraker
  21. Images Preview: Core Part Code: [hide] Index: head-src/com/l2jfrozen/gameserver/communitybbs/Manager/ClanBBSManager.java =================================================================== --- head-src/com/l2jfrozen/gameserver/communitybbs/Manager/ClanBBSManager.java (revision 758) +++ head-src/com/l2jfrozen/gameserver/communitybbs/Manager/ClanBBSManager.java (working copy) @@ -95,13 +96,96 @@ st = null; } } + else if (command.startsWith("_bbsclan_clannotice_edit;")) + { + clanNotice(activeChar, activeChar.getClan().getClanId()); + } + else if (command.startsWith("_bbsclan_clannotice_enable")) + { + activeChar.getClan().setNoticeEnabled(true); + clanNotice(activeChar, activeChar.getClan().getClanId()); + } + else if (command.startsWith("_bbsclan_clannotice_disable")) + { + activeChar.getClan().setNoticeEnabled(false); + clanNotice(activeChar, activeChar.getClan().getClanId()); + } else { separateAndSend("<html><body><br><br><center>Commande : " + command + " pas encore implante</center><br><br></body></html>", activeChar); } } - + private void clanNotice(L2PcInstance activeChar, int clanId) + { + L2Clan cl = ClanTable.getInstance().getClan(clanId); + if (cl != null) + { + if (cl.getLevel() < 2) + { + activeChar.sendPacket(new SystemMessage(SystemMessageId.NO_CB_IN_MY_CLAN)); + parsecmd("_bbsclan_clanlist", activeChar); + } + else + { + + TextBuilder html = new TextBuilder("<html><body><br><br>" + + "<table border=0 width=610><tr><td width=10></td><td width=600 align=left>" + + "<a action=\"bypass _bbshome\">HOME</a> &gt; " + + "<a action=\"bypass _bbsclan_clanlist\"> CLAN COMMUNITY </a> &gt; " + "<a action=\"bypass _bbsclan_clanhome;"+String.valueOf(clanId)+"\"> &amp;$802; </a>" + + "</td></tr>" + "</table>"); + if (activeChar.isClanLeader()) + { + html.append("<br><br><center>" + + "<table width=610 border=0 cellspacing=0 cellpadding=0>" + + "<tr><td fixwidth=610><font color=\"AAAAAA\">The Clan Notice function allows the clan leader to send messages through a pop-up window to clan members at login.</font> </td></tr>" + + "<tr><td height=20></td></tr>"); + + if (activeChar.getClan().isNoticeEnabled()) + html.append( "<tr><td fixwidth=610> Clan Notice Function:&nbsp;&nbsp;&nbsp;on&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;<a action=\"bypass _bbsclan_clannotice_disable\">off</a>"); + else + html.append( "<tr><td fixwidth=610> Clan Notice Function:&nbsp;&nbsp;&nbsp;<a action=\"bypass _bbsclan_clannotice_enable\">on</a>&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;off"); + + html.append( "</td></tr>" + + "</table>" + + "<img src=\"L2UI.Squaregray\" width=\"610\" height=\"1\">" + + "<br> <br>" + + "<table width=610 border=0 cellspacing=2 cellpadding=0>" + + "<tr><td>Edit Notice: </td></tr>" + + "<tr><td height=5></td></tr>" + + "<tr><td>" + + "<MultiEdit var =\"Content\" width=610 height=100>" + + "</td></tr>" + + "</table>" + + "<br>" + + "<table width=610 border=0 cellspacing=0 cellpadding=0>" + + "<tr><td height=5></td></tr>" + + "<tr>" + + "<td align=center FIXWIDTH=65><button value=\"&$140;\" action=\"Write Notice Set _ Content Content Content\" back=\"l2ui_ch3.smallbutton2_down\" width=65 height=20 fore=\"l2ui_ch3.smallbutton2\" ></td>" + + "<td align=center FIXWIDTH=45></td>" + "<td align=center FIXWIDTH=500></td>" + "</tr>" + "</table>" + + "</center>" + "</body>" + "</html>"); + send1001(html.toString(), activeChar); + send1002(activeChar, activeChar.getClan().getNotice(), " ", "0"); + } + else + { + html.append( "<img src=\"L2UI.squareblank\" width=\"1\" height=\"10\">" + "<center>" + + "<table border=0 cellspacing=0 cellpadding=0><tr>" + + "<td>You are not your clan's leader, and therefore cannot change the clan notice</td>" + "</tr></table>"); + if (activeChar.getClan().isNoticeEnabled()) + { + html.append( "<table border=0 cellspacing=0 cellpadding=0>" + "<tr>" + + "<td>The current clan notice:</td>" + "</tr>" + "<tr><td fixwidth=5></td>" + + "<td FIXWIDTH=600 align=left>" + activeChar.getClan().getNotice() + "</td>" + "<td fixqqwidth=5></td>" + + "</tr>" + "</table>"); + } + html.append( "</center>" + "</body>" + "</html>"); + separateAndSend(html.toString(), activeChar); + } + } + } + } + /** * @param activeChar */ @@ -266,7 +350,7 @@ html.append("<td fixwidth=600>"); html.append("<a action=\"bypass _bbsclan_clanhome;" + clanId + ";announce\">[CLAN ANNOUNCEMENT]</a> <a action=\"bypass _bbsclan_clanhome;" + clanId + ";cbb\">[CLAN BULLETIN BOARD]</a>"); html.append("<a action=\"bypass _bbsclan_clanhome;" + clanId + ";cmail\">[CLAN MAIL]</a>&nbsp;&nbsp;"); - html.append("<a action=\"bypass _bbsclan_clanhome;" + clanId + ";cnotice\">[CLAN NOTICE]</a>&nbsp;&nbsp;"); + html.append("<a action=\"bypass _bbsclan_clannotice_edit;" + clanId + ";cnotice\">[CLAN NOTICE]</a>&nbsp;&nbsp;"); html.append("</td>"); html.append("<td fixWIDTH=5></td>"); html.append("</tr>"); @@ -341,7 +425,11 @@ @Override public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar) { - //null; + if (ar1.equals("Set")) + { + activeChar.getClan().setNotice(ar4); + parsecmd("_bbsclan_clanhome;" + activeChar.getClan().getClanId(), activeChar); + } } } Index: head-src/com/l2jfrozen/gameserver/communitybbs/CommunityBoard.java =================================================================== --- head-src/com/l2jfrozen/gameserver/communitybbs/CommunityBoard.java (revision 758) +++ head-src/com/l2jfrozen/gameserver/communitybbs/CommunityBoard.java (working copy) @@ -208,6 +224,10 @@ { RegionBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar); } + else if (url.equals("Notice")) + { + ClanBBSManager.getInstance().parsewrite(arg1, arg2, arg3, arg4, arg5, activeChar); + } else { ShowBoard sb = new ShowBoard("<html><body><br><br><center>the command: " + url + " is not implemented yet</center><br><br></body></html>", "101"); Index: head-src/com/l2jfrozen/gameserver/model/L2Clan.java =================================================================== --- head-src/com/l2jfrozen/gameserver/model/L2Clan.java (revision 758) +++ head-src/com/l2jfrozen/gameserver/model/L2Clan.java (working copy) @@ -24,6 +24,7 @@ import java.sql.SQLException; import java.util.List; import java.util.Map; +import java.util.logging.Level; import java.util.logging.Logger; import javolution.util.FastList; @@ -164,6 +165,9 @@ private int _reputationScore = 0; private int _rank = 0; + private String _notice; + private boolean _noticeEnabled = false; + private static final int MAX_NOTICE_LENGTH = 8192; /** * Called if a clan is referenced only by id. In this case all other data needs to be fetched from db * @@ -963,6 +967,7 @@ restoreSubPledges(); restoreRankPrivs(); restoreSkills(); + restoreNotice(); member = null; } @@ -976,7 +981,97 @@ con = null; } } - + private void restoreNotice() + { + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement("SELECT enabled,notice FROM clan_notices WHERE clan_id=?"); + statement.setInt(1, getClanId()); + ResultSet noticeData = statement.executeQuery(); + + while (noticeData.next()) + { + _noticeEnabled = noticeData.getBoolean("enabled"); + _notice = noticeData.getString("notice"); + } + + noticeData.close(); + statement.close(); + } + catch (Exception e) + { + _log.log(Level.SEVERE, "Error restoring clan notice: " + e.getMessage(), e); + } + finally + { + L2DatabaseFactory.close(con); + } + + } + + private void storeNotice(String notice, boolean enabled) + { + if (notice == null) + notice = ""; + + if (notice.length() > MAX_NOTICE_LENGTH) + notice = notice.substring(0, MAX_NOTICE_LENGTH - 1); + + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement("INSERT INTO clan_notices (clan_id,notice,enabled) values (?,?,?) ON DUPLICATE KEY UPDATE notice=?,enabled=?"); + statement.setInt(1, getClanId()); + statement.setString(2, notice); + if (enabled) + statement.setString(3, "true"); + else + statement.setString(3, "false"); + statement.setString(4, notice); + if (enabled) + statement.setString(5, "true"); + else + statement.setString(5, "false"); + statement.execute(); + statement.close(); + } + catch (Exception e) + { + _log.log(Level.WARNING, "Error could not store clan notice: " + e.getMessage(), e); + } + finally + { + L2DatabaseFactory.close(con); + } + + _notice = notice; + _noticeEnabled = enabled; + } + + public void setNoticeEnabled(boolean enabled) + { + storeNotice(_notice, enabled); + } + + public void setNotice(String notice) + { + storeNotice(notice, _noticeEnabled); + } + + public boolean isNoticeEnabled() + { + return _noticeEnabled; + } + + public String getNotice() + { + if (_notice == null) + return ""; + return _notice; + } private void restoreSkills() { Connection con = null; Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java =================================================================== --- head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java (revision 769) +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java (working copy) @@ -553,9 +553,21 @@ activeChar.setFirstLog(false); activeChar.updateFirstLog(); } - - if(Config.WELCOME_HTM) + if (activeChar.getClan().isNoticeEnabled()) { + String clanNotice = "data/html/clanNotice.htm"; + File mainText = new File(Config.DATAPACK_ROOT, clanNotice); + if(mainText.exists()) + { + NpcHtmlMessage html = new NpcHtmlMessage(1); + html.setFile(clanNotice); + html.replace("%clan_name%", activeChar.getClan().getName()); + html.replace("%notice_text%", activeChar.getClan().getNotice().replaceAll("\r\n", "<br>")); + sendPacket(html); + } + } + if(Config.WELCOME_HTM && !activeChar.getClan().isNoticeEnabled()) + { String Welcome_Path = "data/html/welcome.htm"; File mainText = new File(Config.DATAPACK_ROOT, Welcome_Path); if(mainText.exists()) [/hide] HTML: <html><title>Clan Announcements</title> <body><br> <center><font color="CCAA00">%clan_name%</font> <font color="6655FF"> Clan Alert Message</font></center><br> <img src="L2UI.SquareWhite" width=270 height=1><br> %notice_text% </body></html> SQL: ALTER TABLE `clan_notices` CHANGE `clanID` `clan_id` int(32) NOT NULL FIRST, COMMENT='' Credits: Neron
  22. Hello members of LordCraft, here is a code for Enchant Success Announcements. How it works? There are 2 options. Option 1: You can set an enchant level and when the player enchant his item on the value you set or more it will make an announcement. Option 2: You can set 2 or more enchant levels and when the player enchant his item to those values you set it will make an announcement. Image Preview: Option 1 Code: [hide] ### Eclipse Workspace Patch 1.0 #P L2jFrozen_GameServer Index: head-src/com/l2jfrozen/Config.java =================================================================== --- head-src/com/l2jfrozen/Config.java (revision 986) +++ head-src/com/l2jfrozen/Config.java (working copy) @@ -2891,6 +2891,8 @@ public static int GM_OVER_ENCHANT; public static int MAX_ITEM_ENCHANT_KICK; + public static boolean ENABLE_ENCHANT_ANNOUNCE; + public static int ENCHANT_ANNOUNCE_LEVEL; //============================================================ public static void loadEnchantConfig() @@ -3196,6 +3198,8 @@ MAX_ITEM_ENCHANT_KICK = Integer.parseInt(ENCHANTSetting.getProperty("EnchantKick", "0")); GM_OVER_ENCHANT = Integer.parseInt(ENCHANTSetting.getProperty("GMOverEnchant", "0")); + ENABLE_ENCHANT_ANNOUNCE = Boolean.parseBoolean(ENCHANTSetting.getProperty("EnableEnchantAnnounce", "False")); + ENCHANT_ANNOUNCE_LEVEL = Integer.parseInt(ENCHANTSetting.getProperty("EnchantAnnounceLevel", "16")); } catch(Exception e) { Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestEnchantItem.java =================================================================== --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestEnchantItem.java (revision 986) +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestEnchantItem.java (working copy) @@ -25,6 +25,7 @@ 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.model.entity.Announcements; import com.l2jfrozen.gameserver.network.SystemMessageId; import com.l2jfrozen.gameserver.network.serverpackets.EnchantResult; import com.l2jfrozen.gameserver.network.serverpackets.InventoryUpdate; @@ -301,6 +302,7 @@ int chance = 0; int maxEnchantLevel = 0; int minEnchantLevel = 0; + int nextEnchantLevel = item.getEnchantLevel() + 1; if(item.getItem().getType2() == L2Item.TYPE2_WEAPON) { @@ -565,6 +567,9 @@ sm = new SystemMessage(SystemMessageId.S1_SUCCESSFULLY_ENCHANTED); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); + + if(Config.ENABLE_ENCHANT_ANNOUNCE && Config.ENCHANT_ANNOUNCE_LEVEL == 0) + Announcements.getInstance().gameAnnounceToAll("Congratulations to " + activeChar.getName() + "! Your " + item.getItem() + " has been successfully enchanted to +" + nextEnchantLevel); } else { @@ -572,6 +577,9 @@ sm.addNumber(item.getEnchantLevel()); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); + + if(Config.ENABLE_ENCHANT_ANNOUNCE && Config.ENCHANT_ANNOUNCE_LEVEL <= item.getEnchantLevel()) + Announcements.getInstance().gameAnnounceToAll("Congratulations to " + activeChar.getName() + "! Your " + item.getItem() + " has been successfully enchanted to +" + nextEnchantLevel); } item.setEnchantLevel(item.getEnchantLevel() + Config.CUSTOM_ENCHANT_VALUE); Index: config/head/enchant.properties =================================================================== --- config/head/enchant.properties (revision 986) +++ config/head/enchant.properties (working copy) @@ -131,4 +131,14 @@ # HOW WORKS: if you set it to 20, and player have an item > 20 # he will be kicked and the item will disappear! # Enchant amount at which a player gets punished (0 disabled) -EnchantKick = 0 \ No newline at end of file +EnchantKick = 0 + +# ---------------------- +# Enchant Announce - +# ---------------------- +# Announce when a player successfully enchant an item to x +# Default: False +EnableEnchantAnnounce = False + +# The value of x is... set it here (No have default value) +EnchantAnnounceLevel = 16 [/hide] Option 2 Code: [hide] ### Eclipse Workspace Patch 1.0 #P L2jFrozen_GameServer Index: head-src/com/l2jfrozen/Config.java =================================================================== --- head-src/com/l2jfrozen/Config.java (revision 987) +++ head-src/com/l2jfrozen/Config.java (working copy) @@ -2891,6 +2891,9 @@ public static int GM_OVER_ENCHANT; public static int MAX_ITEM_ENCHANT_KICK; + public static boolean ENABLE_ENCHANT_ANNOUNCE; + public static String ENCHANT_ANNOUNCE_LEVEL; + public static FastList<Integer> LIST_ENCHANT_ANNOUNCE_LEVEL = new FastList<Integer>(); //============================================================ public static void loadEnchantConfig() @@ -3196,6 +3199,13 @@ MAX_ITEM_ENCHANT_KICK = Integer.parseInt(ENCHANTSetting.getProperty("EnchantKick", "0")); GM_OVER_ENCHANT = Integer.parseInt(ENCHANTSetting.getProperty("GMOverEnchant", "0")); + ENABLE_ENCHANT_ANNOUNCE = Boolean.parseBoolean(ENCHANTSetting.getProperty("EnableEnchantAnnounce", "False")); + ENCHANT_ANNOUNCE_LEVEL = ENCHANTSetting.getProperty("EnchantAnnounceLevels", "6,10,16,20"); + LIST_ENCHANT_ANNOUNCE_LEVEL = new FastList<Integer>(); + for (String id : ENCHANT_ANNOUNCE_LEVEL.split(",")) + { + LIST_ENCHANT_ANNOUNCE_LEVEL.add(Integer.parseInt(id)); + } } catch(Exception e) { Index: head-src/com/l2jfrozen/gameserver/model/entity/Announcements.java =================================================================== --- head-src/com/l2jfrozen/gameserver/model/entity/Announcements.java (revision 987) +++ head-src/com/l2jfrozen/gameserver/model/entity/Announcements.java (working copy) @@ -42,6 +42,7 @@ import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage; import com.l2jfrozen.gameserver.script.DateRange; +import com.l2jfrozen.gameserver.util.Broadcast; /** * @author ProGramMoS @@ -292,6 +293,12 @@ player.sendPacket(sm); } } + + public static void announceInRegion(L2PcInstance activeChar, String text) + { + CreatureSay cs = new CreatureSay(0, 18, "", text); + Broadcast.toPlayersInSameRegion(activeChar, cs); + } // Method fo handling announcements from admin public void handleAnnounce(String command, int lengthToTrim) Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestEnchantItem.java =================================================================== --- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestEnchantItem.java (revision 987) +++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestEnchantItem.java (working copy) @@ -25,10 +25,12 @@ 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.model.entity.Announcements; 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.MagicSkillUser; import com.l2jfrozen.gameserver.network.serverpackets.StatusUpdate; import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage; import com.l2jfrozen.gameserver.templates.L2Item; @@ -301,6 +303,7 @@ int chance = 0; int maxEnchantLevel = 0; int minEnchantLevel = 0; + int nextEnchantLevel = item.getEnchantLevel() + 1; if(item.getItem().getType2() == L2Item.TYPE2_WEAPON) { @@ -565,6 +568,14 @@ sm = new SystemMessage(SystemMessageId.S1_SUCCESSFULLY_ENCHANTED); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); + + if (Config.ENABLE_ENCHANT_ANNOUNCE && Config.LIST_ENCHANT_ANNOUNCE_LEVEL.contains(nextEnchantLevel)) + { + Announcements.announceInRegion(activeChar, "Congratulations to " + activeChar.getName() + "! Your " + item.getItem() + " has been successfully enchanted to +" + nextEnchantLevel); + MagicSkillUser MSU = new MagicSkillUser(activeChar, activeChar, 2025, 1, 1, 0); + activeChar.sendPacket(MSU); + activeChar.broadcastPacket(MSU); + } } else { @@ -572,6 +583,14 @@ sm.addNumber(item.getEnchantLevel()); sm.addItemName(item.getItemId()); activeChar.sendPacket(sm); + + if (Config.ENABLE_ENCHANT_ANNOUNCE && Config.LIST_ENCHANT_ANNOUNCE_LEVEL.contains(nextEnchantLevel)) + { + Announcements.announceInRegion(activeChar, "Congratulations to " + activeChar.getName() + "! Your " + item.getItem() + " has been successfully enchanted to +" + nextEnchantLevel); + MagicSkillUser MSU = new MagicSkillUser(activeChar, activeChar, 2025, 1, 1, 0); + activeChar.sendPacket(MSU); + activeChar.broadcastPacket(MSU); + } } item.setEnchantLevel(item.getEnchantLevel() + Config.CUSTOM_ENCHANT_VALUE); Index: head-src/com/l2jfrozen/gameserver/util/Broadcast.java =================================================================== --- head-src/com/l2jfrozen/gameserver/util/Broadcast.java (revision 987) +++ head-src/com/l2jfrozen/gameserver/util/Broadcast.java (working copy) @@ -32,6 +32,7 @@ import java.util.logging.Logger; import com.l2jfrozen.Config; +import com.l2jfrozen.gameserver.datatables.csv.MapRegionTable; import com.l2jfrozen.gameserver.model.L2Character; import com.l2jfrozen.gameserver.model.L2World; import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance; @@ -243,4 +244,26 @@ onlinePlayer.sendPacket(mov); } } + + public static void toPlayersInSameRegion(L2PcInstance player, L2GameServerPacket mov) + { + int curRegion = MapRegionTable.getInstance().getMapRegion(player.getX(), player.getY()); + if (Config.DEBUG) + { + _log.fine("Players to notify: " + L2World.getAllPlayersCount() + " (with packet " + mov.getType() + ")"); + } + + for (L2PcInstance target : L2World.getInstance().getAllPlayers()) + { + if (target == null) + { + continue; + } + + if (curRegion == MapRegionTable.getInstance().getMapRegion(target.getX(), target.getY())) + { + target.sendPacket(mov); + } + } + } } Index: config/head/enchant.properties =================================================================== --- config/head/enchant.properties (revision 987) +++ config/head/enchant.properties (working copy) @@ -131,4 +131,15 @@ # HOW WORKS: if you set it to 20, and player have an item > 20 # he will be kicked and the item will disappear! # Enchant amount at which a player gets punished (0 disabled) -EnchantKick = 0 \ No newline at end of file +EnchantKick = 0 + +# ---------------------- +# Enchant Announce - +# ---------------------- +# Announce when a player successfully enchant an item to x +# Default: False +EnableEnchantAnnounce = False + +# The value of x is... set it here (separated by comma) e.g: 5,10,20,35,... +# NOTE: Dont have default value! +EnchantAnnounceLevels = 6,10,16,20 [/hide] Credits: RedHoT
  23. Hello guys, here is a code for Enchant Rates Config for Blessed and Crystal Scrolls for aCis. Go to: gameserver/network/clientpacket/AbstractEnchantPacket.java find this if (enchantItem.isArmor()) chance = Math.pow(Config.ENCHANT_CHANCE_ARMOR, (enchantItem.getEnchantLevel() - 2)); // Weapon formula is 70% for fighter weapon, 40% for mage weapon. Special rates after +14. else if (enchantItem.isWeapon()) { if (((L2Weapon) enchantItem.getItem()).isMagical()) chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS : Config.ENCHANT_CHANCE_WEAPON_MAGIC; else chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS : Config.ENCHANT_CHANCE_WEAPON_NONMAGIC; } And replace it with this: [hide] if (isBlessed()) { if (enchantItem.isArmor()) chance = Math.pow(Config.ENCHANT_CHANCE_ARMOR_BLESSED, (enchantItem.getEnchantLevel() - 2)); // Weapon formula is 70% for fighter weapon, 40% for mage weapon. Special rates after +14. else if (enchantItem.isWeapon()) { if (((Weapon) enchantItem.getItem()).isMagical()) chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS_BLESSED : Config.ENCHANT_CHANCE_WEAPON_MAGIC_BLESSED; else chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS_BLESSED : Config.ENCHANT_CHANCE_WEAPON_NONMAGIC_BLESSED; } } else if (isCrystal()) { if (enchantItem.isArmor()) chance = Math.pow(Config.ENCHANT_CHANCE_ARMOR_CRYSTAL, (enchantItem.getEnchantLevel() - 2)); // Weapon formula is 70% for fighter weapon, 40% for mage weapon. Special rates after +14. else if (enchantItem.isWeapon()) { if (((Weapon) enchantItem.getItem()).isMagical()) chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS_CRYSTAL : Config.ENCHANT_CHANCE_WEAPON_MAGIC_CRYSTAL; else chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS_CRYSTAL : Config.ENCHANT_CHANCE_WEAPON_NONMAGIC_CRYSTAL; } } else { if (enchantItem.isArmor()) chance = Math.pow(Config.ENCHANT_CHANCE_ARMOR, (enchantItem.getEnchantLevel() - 2)); // Weapon formula is 70% for fighter weapon, 40% for mage weapon. Special rates after +14. else if (enchantItem.isWeapon()) { if (((Weapon) enchantItem.getItem()).isMagical()) chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS : Config.ENCHANT_CHANCE_WEAPON_MAGIC; else chance = (enchantItem.getEnchantLevel() > 14) ? Config.ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS : Config.ENCHANT_CHANCE_WEAPON_NONMAGIC; } } [/hide] And now the Configs: public static double ENCHANT_CHANCE_WEAPON_MAGIC; public static double ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS; public static double ENCHANT_CHANCE_WEAPON_NONMAGIC; public static double ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS; +public static double ENCHANT_CHANCE_WEAPON_MAGIC_BLESSED; +public static double ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS_BLESSED; +public static double ENCHANT_CHANCE_WEAPON_NONMAGIC_BLESSED; +public static double ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS_BLESSED; +public static double ENCHANT_CHANCE_WEAPON_NONMAGIC_CRYSTAL; +public static double ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS_CRYSTAL; +public static double ENCHANT_CHANCE_WEAPON_MAGIC_CRYSTAL; +public static double ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS_CRYSTAL; public static double ENCHANT_CHANCE_ARMOR; +public static double ENCHANT_CHANCE_ARMOR_BLESSED; +public static double ENCHANT_CHANCE_ARMOR_CRYSTAL; ENCHANT_CHANCE_WEAPON_MAGIC = players.getProperty("EnchantChanceMagicWeapon", 0.4); ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS = players.getProperty("EnchantChanceMagicWeapon15Plus", 0.2); ENCHANT_CHANCE_WEAPON_NONMAGIC = players.getProperty("EnchantChanceNonMagicWeapon", 0.7); ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS = players.getProperty("EnchantChanceNonMagicWeapon15Plus", 0.35); +ENCHANT_CHANCE_WEAPON_MAGIC_BLESSED = players.getProperty("EnchantChangeWeaponMagicBlessed", 0.35); +ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS_BLESSED = players.getProperty("EnchantChangeWeaponMagic15PlusBlessed", 0.35); +ENCHANT_CHANCE_WEAPON_NONMAGIC_BLESSED = players.getProperty("EnchantChangeWeaponNonMagicBlessed", 0.35); +ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS_BLESSED = players.getProperty("EnchantChangeWeaponNonMagic15PlusBlessed", 0.35); +ENCHANT_CHANCE_WEAPON_NONMAGIC_CRYSTAL = players.getProperty("EnchantChanceWeaponNonMagicCrystal", 0.35); +ENCHANT_CHANCE_WEAPON_NONMAGIC_15PLUS_CRYSTAL = players.getProperty("EnchantChanceWeaponNonMagic15PlusCrystal", 0.35); +ENCHANT_CHANCE_WEAPON_MAGIC_CRYSTAL = players.getProperty("EnchantChanceWeaponMagicCrystal", 0.35); +ENCHANT_CHANCE_WEAPON_MAGIC_15PLUS_CRYSTAL = players.getProperty("EnchantChanceWeaponMagic15PlusCrystal", 0.35); ENCHANT_CHANCE_ARMOR = players.getProperty("EnchantChanceArmor", 0.66); +ENCHANT_CHANCE_ARMOR_BLESSED = players.getProperty("EnchantChanceArmorBlessed", 0.66); +ENCHANT_CHANCE_ARMOR_CRYSTAL = players.getProperty("EnchantChanceArmorCrystal", 0.66); # % chance of success to enchant a non magic weapon with normal scroll EnchantChanceNonMagicWeapon = 0.55 EnchantChanceNonMagicWeapon15Plus = 0.55 + +# % chance of success to enchant a magic weapon with blessed scroll +EnchantChangeWeaponMagicBlessed = 0.75 +EnchantChangeWeaponMagic15PlusBlessed = 0.75 + +# % chance of success to enchant a non magic weapon with blessed scroll +EnchantChangeWeaponNonMagicBlessed = 0.75 +EnchantChangeWeaponNonMagic15PlusBlessed = 0.75 + +# % chance of success to enchant a magic weapon with crystal scroll +EnchantChanceWeaponMagicCrystal = 0.95 +EnchantChanceWeaponMagic15PlusCrystal = 0.95 + +# % chance of success to enchant a non magic weapon with crystal scroll +EnchantChanceWeaponNonMagicCrystal = 0.95 +EnchantChanceWeaponNonMagic15PlusCrystal = 0.95 + # % chance of success for normal scrolls to enchant an armor part (both jewelry or armor) EnchantChanceArmor = 0.66 + +# % chance of success for blessed scrolls to enchant an armor part (both jewelry or armor) +EnchantChanceArmorBlessed = 0.75 + +# % chance of success for crystal scrolls to enchant an armor part (both jewelry or armor) +EnchantChanceArmorCrystal = 0.95 # Enchant limit [default = 0] EnchantMaxWeapon = 0 EnchantMaxArmor = 0 Credits for the original code: Uknown, Credits for the fixes and update to last rev: Psyancy aka TehNeRD
  24. Image Preview: Download [hide] [/hide] Credits: Unknown
  25. Hello members of LordCraft, here is a tutorial about editing html windows for High Five Lineage 2 Client. Basics: <html><body>Content of the page</body></html> I don't think it's ever required, but i always add that so i am not sure. ► NoScrollBar Default: No Scroll Bar:No Scroll Bar: <html noscrollbar> ► Title <title>Text</text> ► BR (aka spaces) Text Line 1<br1> Text Line 2<br> Text Line 3 Changing Text ► You can change the color <font color="882323">Red Text</font> Number 882323 is Html Color Code, you can use this web to get them: http://html-color-codes.info/ ► You can change the font <font name="hs16">Big Text</font> List of all possible fonts in H5: ► You can change both <font name="__SystemEditBoxFont" color="666666">Text</font> Buttons and Action: ► Normal Bypass <a action="bypass -h npc_%objectId%_Chat 1">Normal</a> <font color="b31a1a"><a action="bypass -h npc_%objectId%_Chat 1">Colored</a></font> ► Bypass to Website <a action="url !2265">Go to Web</a> Note: 2265 is Id in sysstring-e.dat containing Web Page that will open. Just Ids 2265, 2266 and 2267 are available ► Buttons <button value="Button Name" action="bypass -h npc_%objectId%_Chat 1" width=100 height=30 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"> fore - Image of the button that shows up when mouse cursor is away back - Image that shows when player clicks on the button What about image that shows when cursor is on image, but it's not clicked? Game Client is taking content of fore and adds "_over" at the end. For example "L2UI_CT1.Button_DF_Over". It's NOT possible to change that path. Adding "over="blabla"" will not work. Simple Image: <img src="L2UI_CH3.map_Moon" width=32 height=32> Tables: <table width=300> <tr> <td width=100> Text 1 </td> <td width=100> Text 2 </td> <td width=100> Text 3 </td> </tr> <tr> <td width=100> Text 4 </td> <td width=100> Text 5 </td> <td width=100> Text 6 </td> </tr> </table> <tr> - New Line <td> - New Column ► Sizes Width Fixwidth - Simple text will not resize the table in width Height ► Bgcolor(uses Html Color Code) <table bgcolor=b31a1a> <tr> <td> Some text </td> </tr> </table> ► Background(uses image from the Game Client) <table cellspacing=0 cellpadding=0 background="icon.skill0226"> <tr> <td> <button value="" action="bypass -h npc_%objectId%_Chat 1" width=34 height=34 back="L2UI_CH3.menu_outline_Down" fore="L2UI_CH3.menu_outline"> </td> </tr> </table> ► Align <td width=100 align=right> Text 1 </td> <td width=100 align=left> Text 2 </td> <td width=100> <center> Text 3 </center> </td> ► Cellspacing(it is set to "2" by default) <table cellspacing=10 bgcolor=ffffff> ► Cellpadding(it is set to "1" by default) <table cellpadding=10 bgcolor=ffffff> ► Border("0" by default) <table border=3> Window Sizes: ► NpcHtmlWindow width=294 height=359 ► Community Board Size without <br> at the beginning: width=773 height=506 Note: Always 10 first pixels of Community Board Height are hidden. <br> will lower everything by 9 pixels, so you should always use it at the beginning of the Community Board Html. Size with <br> at the beginning: width=773 height=496 ► Tutorial Window width=294 height=316 - Example: <table border=0 cellpadding=0 cellspacing=0 width=294 height=359 background="L2UI_CH3.refinewnd_back_Pattern"> <tr> <td height=359> <br> <br> <center> Some Text </center> </td> </tr> </table> Useful Features: ► Combobox <edit width=80 var="comboList" list="Choice 1;Choice 2;Choice 3"> ► Edit(You can't press enter on it, to skip to new line) <edit width=80 var="comboList" list="Choice 1;Choice 2;Choice 3"> <edit width=80 var="editName2" type="password"> <edit width=80 var="editName3" type="number"> ► Multiedit(Scrollbar Up and Down arrows are always present) <multiedit width=80 height=80 var="multiEditName"> - What is var="multiEditName" for? So you can use it in bypass, example: <a action="bypass -h npc_%objectId%_PetitionContentBypass $multiEditName">Send Petition</a> $multiEditName will be replaced by content of the Multiedit(same for Edit, Combobox) Nice Examples: <button value="" action="bypass -h npc_%objectId%_Chat 1" width=32 height=32 back="L2UI_CT1.MiniMap_DF_PlusBtn_Red_Down" fore="L2UI_CT1.MiniMap_DF_PlusBtn_Red"> <table border=0 cellspacing=0 cellpadding=0 width=32 height=32 background="icon.accessary_phoenixs_ring_i00"><tr><td> <table cellspacing=0 cellpadding=0 width=34 height=34 background="L2UI.item_click"> <tr><td><br></td><td height=16><br></td></tr> <tr> <td width=16><br></td> <td width=18> <table height=17 cellspacing=0 cellpadding=0 background="L2UI_CT1.Windows_DF_TooltipBG"> <tr> <td height=17 width=17 align=center> <font color="FFFFFF">A</font> </td> </tr> </table> </td></tr></table></td></tr></table> <table cellspacing=0 cellpadding=0 width=130 height=124 background="L2UI_CH3.refinegrade2_03"> <tr> <td width=170 align=center> <img src="icon.skill5762" width=32 height=32> </td> </tr> </table> <button value="" action="bypass -h npc_%objectId%_Chat 1" width=15 height=15 back="L2UI.CheckBox_checked" fore="L2UI.CheckBox_checked"> <button value="" action="bypass -h npc_%objectId%_Chat 1" width=15 height=15 back="L2UI.CheckBox" fore="L2UI.CheckBox"> <table cellspacing=0 cellpadding=0 width=250 height=50 background="L2UI_CT1.Windows_DF_Drawer_Bg"> <tr> <td width=8><br></td> <td width=35> <table cellspacing=0 cellpadding=0><tr> <td height=14><br></td> </tr><tr> <td height=36> <img src="icon.skill0268" width=32 height=32> </td> </tr></table> </td> <td width=159> <table cellspacing=4 cellpadding=0 width=159> <tr> <td height=20> <font name="hs16" color="B71800">Song of Wind</font> </td> </tr> <tr> <td height=20> <font color="C15D15">Speed + 20</font> </td> </tr> </table> </td> <td width=35> <table cellspacing=0 cellpadding=0><tr> <td height=14><br></td> </tr><tr> <td height=36> <button value="" action="bypass -h npc_%objectId%_Chat 1" width=33 height=32 back="L2UI_CH3.PremiumItemBtn" fore="L2UI_CH3.PremiumItemBtn"> </td> </tr></table> </td> <td width=8> <br> </td> </tr> </table> Edit Box that cannot be edited: <table> <tr><td> <table height=21> <tr><td width=40> Fee: </td></tr> </table> </td><td> <table width=125 height=21 background="L2UI_CT1.CharacterPassword_DF_EditBox"> <tr> <td fixwidth=121 align=right> 123 </td><td width=4> <br1> </td></tr> </table> </td></tr> </table> My Clan Crest:<br1> <table cellpadding=0 cellspacing=0 width=16 height=16 background="Crest.crest_%serverId%_%clanCrestId%"> <tr> <td width=16 height=4> <img src="L2.NonEdistingImage" width=16 height=5>//For getting non Transparent Black Color </td> </tr><tr> <td width=16 height=12> <br> </td> </tr> </table> Note: %serverId% and %clanCrestId% should be replaced in Java Files by real values. Server Id will be most likely 1, Clan Crest can be 2033832109 for example Download H5 Icons: [hide] [/hide] Credits for the tutorial: vampir

About us

MMO-Society is the Forum former known as Lordcraft, MMO-Society offers various of Resources to help you evolve your knowledge within Emulation, In the process we make sure to form a strong community bond in-between each other and thus we are proud to can admit that MMO-Society is possibly the friendliest Community Forum to currently exist.

Useful Quick-Links

×
×
  • Create New...