Jump to content

Ind

Retired Staff
  • Content Count

    1655
  • Joined

  • Last visited

  • Days Won

    131

Reputation Activity

  1. Upvote
    Ind reacted to Haru in Item DB file structure overhaul   
    Item DB file structure overhaul
     
    Hello~! Uguu~?!
    We noticed that the Item Database file format, unchanged for years, is less than optimal (read: terrible)
    The file is really hard to read (is it the fifteenth or the sixteenth zero? No wait, that line has an extra comma!!) Whenever you merge an update, if you had a customized entry, you're sure to encounter large conflicts that won't be trivial to solve How do we fix it?
    We're switching to a brand new, modern, file format, making use of the libconfig library we're already using for other configuration files.
    It uses libconfig. This means the parser is more solid and, perhaps not faster, but surely easier to maintain, with simpler code. And the file format is something you're already used to, since it's the same as many other configuration files we use! Empty fields and the long sequences of those hard to count commas are gone! You just specify the fields you need, and the others can be completely skipped. The item_db2 entries can be left incomplete and set to inherit the original item_db entry. If you have a custom script for your Knife[3], you can just write the script in your item_db, and let it read the other values from the item_db, so that if we update them, you get the update automatically Item scripts can be split into several lines, so they can made easier to read, especially the long ones. We can finally add more fields (to support new features) to the file at any time, easily and without having to edit all the lines (or force you to edit all the lines of your custom item_db2)! Pre-Renewal and Renewal Item databases now use the same format. This also means that you can make use of the min/max level feature in both renewal and pre-renewal (of course, pre-renewal servers will ignore the Matk field, if you specify it, since it's meaningless there) What does it look like?
     
    Each entry follows this structure:
    {     // =================== Mandatory fields ===============================     Id: ID                        (int)     AegisName: "Aegis_Name"       (string, optional if Inherit: true)     Name: "Item Name"             (string, optional if Inherit: true)     // =================== Optional fields ================================     Type: Item Type               (int, defaults to 3 = etc item)     Buy: Buy Price                (int, defaults to Sell * 2)     Sell: Sell Price              (int, defaults to Buy / 2)     Weight: Item Weight           (int, defaults to 0)     Atk: Attack                   (int, defaults to 0)     Matk: Magical Attack          (int, defaults to 0, ignored in pre-re)     Def: Defense                  (int, defaults to 0)     Range: Attack Range           (int, defaults to 0)     Slots: Slots                  (int, defaults to 0)     Job: Job mask                 (int, defaults to all jobs = 0xFFFFFFFF)     Upper: Upper mask             (int, defaults to any = 0x3f)     Gender: Gender                (int, defaults to both = 2)     Loc: Equip location           (int, required value for equipment)     WeaponLv: Weapon Level        (int, defaults to 0)     EquipLv: Equip required level (int, defaults to 0)     EquipLv: [min, max]           (alternative syntax with min / max level)     Refine: Refineable            (boolean, defaults to true)     View: View ID                 (int, defaults to 0)     Script: <"         Script         (it can be multi-line)     ">     OnEquipScript: <" OnEquip Script (can also be multi-line) ">     OnUnequipScript: <" OnUnequip Script (can also be multi-line) ">     // =================== Optional fields (item_db2 only) ================     Inherit: true/false           (boolean, if true, inherit the values                                   that weren't specified, from item_db.conf,                                   else override it and use default values) }, Here's a Red Potion in the old format:
    501,Red_Potion,Red Potion,0,50,,70,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(45,65),0; },{},{} And here's the same Red Potion in the new format:
    {     Id: 501     AegisName: "Red_Potion"     Name: "Red Potion"     Type: 0     Buy: 50     Weight: 70     Script: <" itemheal rand(45,65),0; "> }, Not convinced yet it's easier to read? Okay, let's try a Poison Bottle:
    678,Poison_Bottle,Poison Bottle,2,5000,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if(Class==Job_Assassin_Cross) { sc_start SC_DPOISON,60000,0; sc_start SC_ATTHASTE_INFINITY,60000,0; } else percentheal -100,-100; },{},{} changes to:
    {     Id: 678     AegisName: "Poison_Bottle"     Name: "Poison Bottle"     Type: 2     Buy: 5000     Weight: 100     Script: <"         if(Class==Job_Assassin_Cross) {             sc_start SC_DPOISON,60000,0;             sc_start SC_ATTHASTE_INFINITY,60000,0;         }         else percentheal -100,-100;     "> }, Better, isn't it!? Let's now try a Jellopy:
    909,Jellopy,Jellopy,3,6,,10,,,,,,,,,,,,,,{},{},{} Count the commas! Did I miss any? An extra comma you say? No, I don't want to count them, thanks...
    {     Id: 909     AegisName: "Jellopy"     Name: "Jellopy"     Buy: 6     Weight: 10 }, Not even a comma!
    Now, help me read what this item does?
    13307,Krieger_Huuma_Shuriken1,Glorious Shuriken,4,20,,0,55,,1,0,0x02000000,7,2,34,4,80,1,22,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bMatkRate,15; autobonus "{ bonus2 bSkillAtk,NJ_HUUMA,100; bonus2 bSkillAtk,NJ_ISSEN,100; }",50,10000; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,NJ_ISSEN,AL_HEAL,10,1000,1; bonus4 bAutoSpellOnSkill,NJ_HUUMA,NPC_CRITICALWOUND,2,200; } },{},{} {     Id: 13307     AegisName: "Krieger_Huuma_Shuriken1"     Name: "Glorious Shuriken"     Type: 4     Buy: 20     Atk: 55     Range: 1     Job: 0x02000000     Loc: 34     WeaponLv: 4     EquipLv: 80     View: 22     Script: <"         bonus2 bAddRace,RC_DemiHuman,95;         bonus2 bIgnoreDefRate,RC_DemiHuman,20;         bonus bMatkRate,15;         autobonus "{ bonus2 bSkillAtk,NJ_HUUMA,100; bonus2 bSkillAtk,NJ_ISSEN,100; }",50,10000;         bonus bUnbreakableWeapon,0;         if(getrefine()>5) {             bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3);             bonus2 bIgnoreDefRate,RC_DemiHuman,5;         }         if(getrefine()>8) {             bonus5 bAutoSpellOnSkill,NJ_ISSEN,AL_HEAL,10,1000,1;             bonus4 bAutoSpellOnSkill,NJ_HUUMA,NPC_CRITICALWOUND,2,200;         }     "> }, Which one did you find easier to read? Old or new format?
     
    Want to see an example that specifies both min and max levels? Here you go:
    {     Id: 2819     AegisName: "Swordman_Manual"     Name: "Swordman Manual"     Type: 5     Buy: 0     Weight: 100     Job: 0x00000001     Upper: 47     Loc: 136     EquipLv: [1, 12]     Refine: false     Script: <"         bonus bMaxSP,100;         skill SM_BASH,1;         skill SM_PROVOKE,1;         skill SM_MAGNUM,1;     "> }, Okay, one last example. Let's try to make an item_db2 entry for a Pupa Card that gives a bonus of 1000 HP rather than just 700.
    {     Id: 4003     Inherit: true     Script: <" bonus bMaxHP,1000; "> }, Done. No need to rewrite the name, location, prices... those are already in the item_db!
     
    But... I have several custom items, do I have to manually convert all of them...?
     
    Of course you do! No, I'm kidding, don't hate me
     
    It's true that you need to convert your item database to the new format, but we can do it for you!
    Go to http://haru.ws/hercules/itemdbconverter/ and paste (or upload) your item_db2.txt (or even your item_db.txt if you have custom entries there), press the Convert button, wait a few seconds and you're done! It's already converted for you. Easy, isn't it? Don't trust us? No, no, we don't need your custom items, you can sleep safe... But if you still don't want to paste anything on a website... well, we have provided the source code of the converter script! It's in the 'tools' folder of the Hercules repository. All you need is a Perl interpreter (and if you're running Linux or Mac OS, on either your server or your own computer, it's almost certain that you already have that). All you have to do is run it (example: perl tools/itemdbconverter.pl < db/item_db2.txt > db/item_db2.conf), and your item database will be converted in a split second! What if I was using SQL item databases?
     
    Well... Then you won't have to worry about the txt databases, unless you were creating the items in txt, then converting them to sql (if you're not doing this, maybe you should consider it, you know? It's easier to create and manage them in txt even if you use the sql version!)
     
    If you were converting your custom item databases from the txt version to sql through the db2sql plugin, there are good news for you! We just updated the plugin, and now it's able to create a .sql script rather than just inserting the entries into your database. This means that you can create the SQL entries in your own computer, without even needing a database (just a copy of Hercules), without risking to slow down your server, and then upload them whenever you want.
     
    And if you're relying on the .sql scripts we provide... well, there are still good news for you! Outdated item_db.sql files are a thing of the past now: those scripts will get updated automatically after every commit by our HerculesWS API bot, exactly like the HPM Hooks!
     
    As a final note, now the pre-re and re databases share the same structure in SQL as well! no more column mismatch if you're trying to import into your Renewal server an item that was meant for pre-renewal.
     
    If you have data already imported to your item_db2 SQL table, it'll be updated to the new table format through the regular upgrade sql mechanism (just run the provided script in the sql-files/upgrades folder). Please note that the script requires MySQL 5.0 or newer -- if you're still on MySQL 4.0, please open it in a text editor, read the comments and run the provided queries manually.
     
    I have this event item entry that came with an old script I downloaded...
     
    No worries, you can get it converted. Use the same script (or the provided web page) you'd use to convert an entire item database, it'll work just fine even for an item or two!
     
    Special thanks
    To Ind, for bringing up the idea and pushing it forward until it was implemented. And for his awesome work on the HerculesWS API and database converter plugin. To Yommy, for the original idea, and for some invaluable help finalizing the actual database format. Links~u!
    Main commit. Removed redundant item_db2_re.sql (now both have the same structure). db2sql plugin update. item_db2 inheritance. item_db2 SQL upgrade script.
  2. Upvote
    Ind got a reaction from Prourhildr in Hercules WPE Free - June 14th Patch   
    Hercules WPE Free - June 14th Patch
     
    Made Possible Thanks to Yommy
    We're only able to provide you with this feature thanks to Yommy, Thank you very much! WPE Free - Official Packet Obfuscation Support Packet spamming is no longer possible by normal means, with this feature each packet sent has its own id, so spamming (by sending the same packet more than once) is impossible. For this feature to function you MUST NOT use the 'disable packet obfuscation' client diff. conf/battle/client.conf
    // Whether to enable the official packet obfuscation support (good vs WPE)// 0: disabled// 1: optional (not recommended) -- identifies whether it is required// 2: enabled (recommended)packet_obfuscation: <value>
    Currently functional for over 44 clients (Thanks to Shakto!): 2011-08-17 - 2015-05-13 Special Thanks to Yommy ..Yommy ...The all-awesome Yommy~! Thank you again! Shakto for the 44 PacketKeys! Also - SQL DB Updates & DB2SQL For logical and performance reasons we've modified the structure of the renewal item db tables, atk and matk no longer share the same column, equip_level was replaced by equip_level_min so that we could add equip_level_max which is required by new renewal items. Note however that because of the previous atk:matk format, it was not possible to provide a upgrade file that would save the matk data Item script errors from sql dbs used to point to a inexistent line number, it was modified to display the item id instead. This update has shrunk the sizes of the item db .sql files, making it possible for tools such as phpmyadmin to parse them, once again. With this patch we're also introducing a new official plugin, db2sql, its purpose is to make it easier for our developers to keep the .sql db files up to date (but you may use that to convert your own if you so desire, too), to use this plugin (when it is enabled in plugins.conf) type server tools db2sql in the console. Link~u! Commit 1 Commit 2
  3. Upvote
    Ind reacted to Neo-Mind in NEMO - Client Patcher   
    N.E.M.O. - Neo Exe Modification Organizer

    Why another client patcher? well
    1) WeeDiffGen - isn't working for 2013 clients + it depends on dlls (not that its a bad thing but i like scripting )
    2) xDiffGen - yes its scripted but we need to depend on xdiff files.

    so i made a new one based on xDiffGen and here it is. The patches are written in QtScript format.
    Details of making a patch have already been written in a seperate topic - although now it needs to be updated with more details.
    I have already converted most of the patches from xDiffGen.

    Why this name? - well I didn't want it to be called * Gen No offense  
    plus someone keeps calling me Nemo in IRC which gave me the idea

    Snapshot
    -----------------


    How to use?
    ---------------------
    1) First you need to specify your client file in Input Exe file box. If you browse to select the file name, Output Patched box gets updated with a _patched suffix filename automatically. Ofcourse you can select your own name for the output.
     
    2) Next we need to load both the client and the scripts (patches & addons). so click Load Client button.
     
    3) Select the patches you want . In case you patched once before (for whatever date) they will be saved in your local and you can use the Select Previous button to select them again. Also you can try using the Select Rcomnded button to select all the Recommended patches.
     
    4) So your patches are selected and client is loaded what next but to Apply Patches  which will generate the output file. In 2.0 version , NEMO also generates a .secure.txt file containing the MD5, SHA1 and CRC32 values of the output exe file which you can use in various tools.
     
    5) You can use the Save Profile and  Load Profile buttons for saving/reloading a set of patches & input values, that you have selected (even if they are not applied) for future use.
     
    6) Whenever you apply patches to a client, NEMO updates the patchlist.log file (along with Inputlist.db) in the folder where NEMO.exe is. This file will contain the list of patches you have applied along with their IDs (do not tamper with either of them).
     
    Changes in 2.0:
    ----------------------
    1) I have made some obvious modifications to the interface (you can definitely see the change in case you have seen v1.0).
         i) Buttons have come downwards and is no longer strippable (toolbar has been fixed in position)
     
         ii) New status Label has been added which shows your currently loaded client date and how many patches are selected.
     
         iii) NEMO now has support for Addons - scripts that are meant to retrieve data from the client and do its own thing (not patch the client).
              All the Extract xDiff patches has been added here already. 1 extra addon will be coming soon once i can fix it.
     
         iv) New Filter box has been added which does live search (i.e. filter as you type) for filtering out only the patches u want to see.
               For e.g. if you type color, it will only show patches that have the string color in either it's name or the description.
              You can also use regular expression . Also you can sort the columns now
     
        v) An upcoming feature - Test Patches. this one you can use for testing a newly added patch for a variety of clients that you select.
     
    2) NEMO is no longer there in SVN. I have shifted it to GitHub . The rar file uploaded has the .git file so you should be able to directly pull to get updates. But just in case I have also provided the repository link below.
     
    Remember to pull for updates before using NEMO and let me know if you are facing any bugs or issues or if i have missed out on anything. Enjoy .
     
    Repository: https://github.com/MStr3am/NEMO.git
     
    Download Link: NEMO zip file 
  4. Upvote
    Ind reacted to jaBote in Introducing rAthena to Hercules database converters.   
    * jaBote switches on @Ind mode *
     
    rAthena to Hercules database converters
     
    Hello~! What?!
    I've observed a big rise of rAthena to Hercules database conversion requests this week, so I've just revised again the converters I made before and will be releasing on the repository so that people can find them more easily. What does that do?
    We have two new .SQL files on our repository that make the conversion easy. One is for applying on the main ragnarok table (sql-files/rathena-main-upgrade.sql) and the other is for the logs one (sql-files/rathena-logs-upgrade.sql).Please remember to make a backup prior to converting the database, just in case something goes wrong. This is meant to convert a fully upgraded rAthena to a fully upgraded Hercules. If you have some uninstalled rAthena upgrades please install them first. Avoid using it if there has been an upgrade posted in rAthena newer than the date of the converter or, at least, you didn't apply it or know how to undo the changes (remember that main.sql is usually fully upgraded both in Hercules and in rAthena). Some data (especially the data we don't use here on Hercules may be lost on the conversion). We'll not be resposible for this. How does it work?
    Plain and simple: just load them on the respective databases you have in rAthena, as if they were the original main.sql or logs.sql. Obviously enough, they won't work if you don't have CREATE, ALTER, INDEX and DROP permissions (and maybe others too) for the user(s) you'll be running this. These converters will NOT work if you changed the table names. Special thanks
    rAthena staff for their database structure and upgrades. Hercules staff for the database structure and upgrades. All the users that requested the converters in their respective topics. for suggesting this to be committed to the repository. @Haru for last minute corrections. Disclaimer
    As I warned before, there may be some intended or unintended data loss. Please make a backup before applying. This may get outdated quite quicly without me noticing about that. If that's so, please make a pull request or ping me to update the converter when I have time. I've avoided to name the files as "upgrades" here on the topic, but I've named them like that to make them have the name structure as the eAthena upgrade. This is NOT an offense to rAthena staff by any means. People are requesting this, so I made the conversion process easy for them, much like rAthena made a converter from eAthena and nobody got offended. Just that. Links~u!
    Main database converter commit. Logs database converter commit. * jaBote switches off @Ind mode *
  5. Upvote
    Ind reacted to ossi0110 in AtCommand plugin overwrite?   
    change 
     
    clif->message(fd, msg_txt(10)); // Invisible: Offclif->message(fd, msg_txt(11)); // Invisible: ON TO
    clif->message(fd, atcommand->msg_table[10]); // Invisible: Offclif->message(fd, atcommand->msg_table[11]); // Invisible: On  
     
    and you didnt importet all Symbols , this is why you get  Map Server Crashes
     
    Change
     
    clif = GET_SYMBOL("clif");script = GET_SYMBOL("script");pc = GET_SYMBOL("pc");atcommand = GET_SYMBOL("atcommand");  
    TO
    clif = GET_SYMBOL("clif");script = GET_SYMBOL("script");pc = GET_SYMBOL("pc");atcommand = GET_SYMBOL("atcommand");status = GET_SYMBOL("status");map = GET_SYMBOL("map");timer = GET_SYMBOL("timer");  
    last add the 2 more #includes at the header
     
    #include "../map/map.h"#include "../map/status.h"
  6. Upvote
    Ind reacted to Rytech in Official Oktoberfest Costume Job   
    Ragnarok Costume Job - Oktoberfest


    Job ID: OKTOBERFEST = 29
    Effect State: OPTION_OKTOBERFEST = 0x10000000
    Item: 22625 = Oktoberfest_Bag (Activates the costume for 10 minutes)
     
    // Oktoberfest Outfit22625,Oktoberfest_Bag,Oktoberfest Bag,2,0,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_OKTOBERFEST,600000,0; },{},{}  
    Ragnarok Oktoberfest Job Sprites.rar

    Note: This is a official costume job released exclusively for European RO server from the Oktoberfest event. I don't know if it works on the latest kRO clients we can connect with.
     
    Thanks goes to jaBote for sending me the sprites.
  7. Upvote
    Ind reacted to Mystery in Septober Digest 2013   
    As mentioned in my previous news, here is the Septober Digest that covers the month of September and October!

    Septober Digest 2013
    The following digest covers the month of September 1st - October 31st 2013.
     
    Team Changes
    [*]sevenzz23 has joined as a Community Contributor. [*]ossi0110 has joined as a Community Contributor. [*]kyeme has been moved from Community Contributor to High Council. [*]Uzieal joined the team as a Graphic Moderator.

    Development Highlights
    [*]Official Monster Transformation Support (9692bc0) [*]HPM: Hooking (a49787f) (Topic) [*]Changing 'tick' variables to 64 bit (44c33fd) [*]Addition of idletime options (e08c05a) [*]Official Font Support (4340bf7) [*]New ability to use NPC Constants instead of their Sprite IDs (124ab2a) [*]Shadow System implemented (baef78f, Topic) [*]Mapflag: 'nocashshop' has been added (8629562) [*]'Quest Bubbles' modified to work as Official (94b7b25) [*]Added support for missing or empty categories in cashshop_db.conf (448dce8) [*]Introduction of Bank Support (c5c3381) (Topic) [*]Support of Rebellion Class has made its way to Hercules! (7d8f83d) (Update: f8f073b) [*]A wide range of HPM Interface Updates: [*]Mob.c Interface [*]Unit.c Interface [*]Npc.c Interface [*]Pet.c Interface [*]Path.c Interface [*]Quest.c Interface [*]Itemdb.c Interface [*]Battleground.c Interface [*]npc_chat.c interface [*]Guild.c Interface [*]Storage.c Interface [*]Homunculus.c Interface [*]Instance.c Interface [*]Intif.c Interface [*]log.h Interface [*]Mercenary.c Interface [*]Party.c Interface [*]Trade.c Interface [*]Searchstore.c Interface [*]pc.c Interface [*]Script.c Interface [*]Status.c Interface



    Scripting Highlights
    [*]downrefitem command update (baa5c1f) [*]Addition of 'consumeitem' as an alias of 'itemeffect' (b703fbd) [*]Script commands that have been added: addmonsterdrop and delmonsterdrop (7ddcff9) [*]query_sql will now halt script execution when a invalid query is used (3a8837f)

    Server-Client Highlights
    [*]Fixed several packet errors with pre-renewal clients from 2006-2008 (df0a324) (Updated: 272ff45) [*]Fixed super novices' guardian angel prayer (ae850bd) [*]Job ranking display fixes (3738fc7) [*]Fixed Char Deletion Bug on 2013++ Clients (ca15680) [*]Fixed Client Login Packet 0x0825 (fad3040) [*]Attempting to add a item to a full storage will no longer render the item un-draggable (24556fb) [*]Movement of invisible units is no longer sent to foes (e587d71) [*]Storage list/packet size is no longer a problem (d080ed8)

    Skill Fixes
    [*]Guild Aura bug that'd disregard friend-or-foe data (eb53067) [*]Fixed skill unit bug that'd disregard friend-or-foe data (e2330c6) [*]Addition of 'WE_BABY' distance check (a879388) [*]Shadow Form and Multi-Hit Skills (9de926c)

    Build System Highlights
    [*]Added Makefile.in change detection (and auto-rebuild) capabilities (beaf3a2) [*]Makefiles have been improved to better serve concurrent jobs (-j) (babdf60) [*]Changed Makefiles to avoid rebuilding targets if nothing was modified (233453c) [*]Added 'buildclean' target to all makefiles (d6965a8)

    NPC & Database Highlights
    [*]Support of Moon Star and Super Star items (da1f16b) [*]Huge Instance Improvements/Updates (93f6104) [*]Support of Skill ID Constants Added (c87513d[/size]) [*]Moscovia Quest Update / Catalog Magician Move (f821e43) [*]Massive Merge on NPCs (418dd82) [*]Homun-S Quest Updated (a2e01e4) [*]Updated spawns for: iz_dun05, dic_dun, dewata and dew_dun (d8f102f)

    September Statistics
    [*]During the period there were 130 Commits. [*]Of these 130 commits, 20 included bug-fixes. [*]5 Commits from Pull Requests [*]In this month, there were 112,008 Additions and 22,003 Deletions.

    October Statistics
    [*]During the period there were 136 Commits. [*]Of these 136 commits, 31 included bug-fixes. [*]12 Commits from Pull Requests [*]In this month, there were 99,179 Additions and 82,893 Deletions.

  8. Upvote
    Ind reacted to Angelmelody in How to change the Background Music Of Prontera Map   
    modify datamp3nametable.txt
     
    and put custom mp3 file into BGM folder
  9. Upvote
    Ind got a reaction from Jedzkie in Memory Slasher !!" - May 30 Patch   
    Hercules casts "Memory Slasher !!" - May 30 Patch
    Memory Slasher !!
    Regardless all the fancy features in it, this patch's greatest achievement is smart, clever employment of memory, by looking at our memory usage wisely we've been able to reduce map-server's memory (RAM) usage by more than 2/3, about 183MB of RAM were dropped, while maintaining Hercules outstanding record on performance improvement. Beyond the memory usage drop there is also a significant processing speed improvement which can be noticed during boot, map cache loading which used to account for most of the map-servers boot time no longer exists, its gone, dead, fini, boom! it was replaced by a smart map cache handler that loads its data only when a map is necessary (the data is then kept until shut down), this logic also makes map-server's shut down process a hell lot faster.
     
    Instance Rework
    As suggested by the community, this wasnt supposed to be bundled with this commit but the memory usage improvements required me to modify how instances were stored, so I re-wrote part of it to fit the suggestion as well.
    Instance Functionality/Feature Server may now create instances of any maps regardless of client-side edits, e.g. one can clone prontera and call it "mymapname" (as is best described in the *instance_attachmap script command note) Instances may now be available in 4 distinct ways (as is best described in *instance_create script command note), by nobody (server type instance, to be used with special map names), by a sole character, by a party, or by a guild Script Command Changes *instance_create 2nd param is now called owner_id instead of party_id, and it got a 3rd optional param that defines what kind of owner id it is (when not provided, assumes party_id, for backwards compatibility), available options are (IOT_ stands for INSTANCE OWNER TYPE) IOT_NONE (0), IOT_CHAR (1), IOT_PARTY (2) and IOT_GUILD (3). *instance_destroy no longer autodetects instance id from party id *instance_attachmap now supports a 4th, optional, param, "<new map name>", it will allow you to specify a entirely new map name for the instance (without the need of client-side edits). This option can be best employed when used on a instance of <owner_type> IOT_NONE *instance_detachmap no longer autodetects instance id from party id *instance_id no longer supports any param *instance_set_timeout no longer autodetects instance id from party id *instance_announce no longer autodetects instance id from party id, and to tell it to autodetect from the attached script you must set instance_id param as -1 as opposed to 0 *instance_npcname no longer autodetects instance id from party id *has_instance no longer autodetects instance from party, however it now checks if attached player possesses a instance with same map as has_instance(<param>) checks for *instance_warpall no longer autodetects instance from party Other ChangesInstance IDs (valid ones) are now always >= 0 as opposed to > 0 (update your scripts!) Battlegrounds Queue
    As suggested by the community, most of its features were added in this patch, we were unable to finish it though because we lacked some information, we've put our questions in this topic, once our questions are answered we should be able to finish it in a matter of minutes (all the heavy lifting was done in this patch).
    Arenas They're easily configurable in the new conf/battlegrounds.conf file, it possible to add more arenas by editing the client's lua files/entryqueue/entryqueuelist.lua file Configuration Sample arenas: ({    name: "Tierra Gorge" //must match the name in client files    event: "Tierra_BG2::OnPlayerListReady"    minLevel: 80    maxLevel: 150    reward: {/* amount of badges awarded on each case */        win: 3        loss: 1        draw: 1    }    minPlayers: 6 /* minimum amount of players to start */    maxPlayers: 60 /* maximum amount of players */    minTeamPlayers: 6 /* minimum amount of team members required for a team (party or guild) to join */    delay_var: "Tierra_BG_Tick" /* npc variable name that will store the delay for this match */    maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */},{    name: "KVM (Level 59 and below)" //must match the name in client files    event: "KvM03_BG::OnPlayerListReady"    minLevel: 1    maxLevel: 59    reward: {/* amount of badges awarded on each case */        win: 1        loss: 0        draw: 0    }    minPlayers: 4 /* minimum amount of players to start */    maxPlayers: 60 /* maximum amount of players */    minTeamPlayers: 5 /* minimum amount of team members required for a team (party or guild) to join */    delay_var: "KVM_BG_Tick" /* npc variable name that will store the delay for this match */    maxDuration: 30 /* maximum duration in minutes, if reached game ends and highest score wins (or calls a draw if scores are equal) */}) QueueWe wanted to make the queue as easy to play with as possible, so we've created a whole new set of script commands designed with this purpose. These commands make it easy to create and control queues for anything, games, events, quests, and of course in this case, the battleground's queue. Queue - Script Commands *queue()creates a new queue instance, returns created queue id set .@id,queue(); *queuesize(<queue_id>)returns the amount of entries in queue instance of <queue_id>. set .@length,queuesize(.@queue_id); *queueadd(<queue_id>,<var_id>)adds <var_id> to queue of <queue_id>, returns 1 if <var_id> is already present in the queue, 0 otherwise. queueadd(.@queue_id,.@var_id); *queueremove(<queue_id>,<var_id>)removes <var_id> from queue of <queue_id>, returns 1 if <var_id> is not present in the queue, 0 otherwise. queueremove(.@queue_id,.@var_id); *queueopt(<queue_id>,<optionType>,{Optional <option val>})modifies <queue_id>'s <optionType>, when <option val> is not present, <optionType> is removed from <queue_id>, when present it modifies <queue_id>'s <optionType> with the new <option val> value.
    Currently 3 options are available, HQO_OnDeath (0), HQO_OnLogout (1), HQO_OnMapChange (2) (the constant names are not final). queueopt(.@queue_id,0,"MyNPC::MyOnQueueMemberDeathEventName");It allows you to hook npc events to be triggered by specific actions that may happen to a player in the queue (when the queue in question is used for account ids) *queuedel(<queue_id>)deletes <queue_id> returns 1 when <queue_id> is not found, 0 otherwise. queuedel(.@queue_id); *queueiterator(<queue_id>)creates a new queue iterator instance, a queue iterator is not a reference to a queue's actual members, it copies the queues members when initialized, this way you can loop through them even if you remove them from the queue set .@it,queueiterator(.@queue_id); *qicheck(<queue_iterator_id>)checks whether there is a next member in the iterator's queue, 1 when it does, 0 otherwise. qicheck(.@queue_iterator_id); *qiget(<queue_iterator_id>)obtains the next member in the iterator's queue, returns the next member's id or 0 when it doesnt exist. for( set .@elem,qiget(.@queue_iterator_id); qicheck(.@queue_iterator_id); set .@elem,qiget(.@queue_iterator_id) ) *qiclear(<queue_iterator_id>)deletes a queue iterator from memory, returns 1 when it fails, 0 otherwise. qiclear(.@queue_iterator_id) Sample Usage: /* say create a queue */set .@id,queue();queueadd(.@id,getcharid(3));/* ... add as many entries ... (no limit) */if( queuesize(.@id) == 999 ) {    /* whatever */}/* anywhere in the code */set .@it,queueiterator(.@id);for( set .@elem,qiget(.@it); qicheck(.@it); set .@elem,qiget(.@it) ) {    //do anything e.g.    /* attachrid .@elem; */    /* mes "ID:"+.@elem; */}qiclear(.@it); Special Thanks To
    Yommy for providing me with a hell lot of data for the BG Queue, wouldn't have been able to get it to this point without his help. Rosiel for his suggestion on the instance feature Xgear for his help with the network timeout bug mkbu95 for pinpointing the script parser bug All of Hercules Staff for their ideas/suggestions/criticism and support, and for keeping me sane during this memory slashing madness The Future~! This patch sure has taken me away from my usual bug-squashing mode, I'll be going back to my over-10-bug-fix-a-day schedule. We have quite a hell lot planned so this might not last long, make sure to keep an eye on your bug reports for I sure will be replying to them. Link~u! Commit 1 Commit 2 Commit 3
  10. Upvote
    Ind got a reaction from Wolfeh in Introducing Hercules' Stress Test Server   
    Introducing Hercules' Stress Test Server
    Hello~!
     
    The "Stress" Part
    Over 1.000 IndAI units (equivalent to +1k online players) will be in the server playing 24/7, farming, going to pvp, doing woe, playing battlegrounds, doing anything a player does, this will create a perfect scenario for us to debug and test Hercules.
     
    The Development Benefits
    We'll be able to keep track of performance usage 24/7, making us able to detect whenever a update increases a server's usage, allowing us to further optimise said update in order to take the processing down. With the AI characters doing stuff non-stop 24/7 we'll be able to identify and fix any crashes existent. Hercules will gain a super stability boost thanks to this. How to connect / Moving in and out
    This is the fun part.
    No new clients, and no sclient/clientinfo/blablabla edits will be required. get to the test server by typing '@hercules warp', test whatever you like, and go back to your server with '@hercules leave'. This technology *might* also be employed in the future by us to create hercules-hosted inter-server events.
     
    Entirely Secure
    The only data your server will pass to our test server upon warp is the name of the character (and maybe hairstyle vals).
    The test server is unable to modify (or even access) any data on your server, it is entirely secure and damage-free.
     
    Unique to Hercules
    The ability to connect through your ordinary client will be made possible by our custom server hosted over at herc.ws, the code won't be made public.
     
    Coming
    I felt inspired to write about this feature, which is why this announce is out before the feature itself.
    This is one of the features to be powered by our Hercules Plugin Manager and will be made public once the HPM implementation reaches the level capable of sustaining it.

    FAQ
    what if i dont want my players to go to the test server?@hercules is a command like any other, you can restrict access by groups.conf (by default only gms will be able to use it) what if i dont have a test server to use as a gateway to the hercules stress test server?we will also provide clients for those who don't have/want to use a server as the gateway
  11. Upvote
    Ind got a reaction from satsugaides in Hercules WPE Free - June 14th Patch   
    Hercules WPE Free - June 14th Patch
     
    Made Possible Thanks to Yommy
    We're only able to provide you with this feature thanks to Yommy, Thank you very much! WPE Free - Official Packet Obfuscation Support Packet spamming is no longer possible by normal means, with this feature each packet sent has its own id, so spamming (by sending the same packet more than once) is impossible. For this feature to function you MUST NOT use the 'disable packet obfuscation' client diff. conf/battle/client.conf
    // Whether to enable the official packet obfuscation support (good vs WPE)// 0: disabled// 1: optional (not recommended) -- identifies whether it is required// 2: enabled (recommended)packet_obfuscation: <value>
    Currently functional for over 44 clients (Thanks to Shakto!): 2011-08-17 - 2015-05-13 Special Thanks to Yommy ..Yommy ...The all-awesome Yommy~! Thank you again! Shakto for the 44 PacketKeys! Also - SQL DB Updates & DB2SQL For logical and performance reasons we've modified the structure of the renewal item db tables, atk and matk no longer share the same column, equip_level was replaced by equip_level_min so that we could add equip_level_max which is required by new renewal items. Note however that because of the previous atk:matk format, it was not possible to provide a upgrade file that would save the matk data Item script errors from sql dbs used to point to a inexistent line number, it was modified to display the item id instead. This update has shrunk the sizes of the item db .sql files, making it possible for tools such as phpmyadmin to parse them, once again. With this patch we're also introducing a new official plugin, db2sql, its purpose is to make it easier for our developers to keep the .sql db files up to date (but you may use that to convert your own if you so desire, too), to use this plugin (when it is enabled in plugins.conf) type server tools db2sql in the console. Link~u! Commit 1 Commit 2
  12. Upvote
    Ind reacted to Mystery in Hercules: Changes, Adjustments, and Explanations!   
    Hello Hercules Community!   As you may have noticed, the staff has been working hard around Hercules whether it's through forum moderation, commit-a-ganzas, and even keeping the community updated as much as possible through staff's blogs. With that in mind, we would like to bring this topic to the community's attention to give the community a more 'insight' into behind the scenes of what staff has been discussing about.     Calling Developers! Do you have experience and knowledge when it comes to scripting or maybe within the source? Would you like to take part on helping Hercules? Then you've come to the right topic! Hercules is looking for well rounded knowledgeable script and core developers. You are required to have knowledge when it comes to scripting (i.e. script commands, its functions, etc.) and source structure (i.e. understanding the emulator's source structure, code, algorithm, etc.).   As a Script Developer, you'll be responsible for developing functioning scripts for the emulator as well as maintaining the Script Release & Support section of the boards. As for Core Developers, your sole purpose is to help develop functional source code and structure; with a side of browsing through the Source & Plugin Release & Support sections.   If you wish to take apart of Hercules' staff, please drop a Staff Application which then the rest of the staff get to critique. In the 'Message Subject' field, please indicate the position you wish to apply for: Script Developer or Core Developer.    Important: Please make sure you provide work you've done or created! You can simply do this by providing us link(s) to your work / creation. Keep in mind that this work can be valid through 'Pull Requests' you've put towards Hercules (They have to be actual scripting work/source code work; no simple database updates or small command changes, etc.).   If you have no work at all to show us, we will require you to do something by means of fixing a given number of bugs (or if it's a substantial one) through the bug tracker. By doing so we're able to validate your knowledge in the position in which you're applying for.     Development under the Panel Are you knowledgeable when it comes to knowing the inside and outs of a Flux Control Panel and know how to function with PHP, Javascript, CSS, etc.? Well, if you're saying yes to this, then we would like you to be a part of our team! Recently, Hercules released a Flux Control Panel catered only for Hercules' emulator with the help of Gepard! You can view the release information here.   This position will be titled 'Flux CP Developer' and you'll have a couple of responsibilities. With this position, you'll be in charge of maintaining our FluxCP branch by adding new code, features, and adjusting the database to match Hercules'. If you feel you can fit this description, please don't hesitate to drop us a Staff Application which then the rest of the staff get to critique. In the 'Message Subject' field, please indicate 'Flux CP Developer' as your position.   Important: Please make sure you provide work you've done or created! You can simply do this by providing us link(s) to your work / creation. Keep in mind that this work can be valid through 'Pull Requests' you've put towards Hercules' Flux CP Branch (The work can't be simple; has to be sufficient enough for us to judge your knowledge).   You can find our Hercules' FluxCP Repo here.     Septober Digest We realize that we did not release a digest for the Month of September. The reason behind this was that in September, we did not have enough 'worthwhile' activity. However, this doesn't mean we shouldn't have done statistics… though if we did, it wouldn't be much. This is why when November hits, we'll be releasing a 'Septober' Digest which will encompass all of September's activity and October's. Stay tuned~     Forum Descriptions Some of you may have noticed that our sub-forums have gotten new little 'descriptions' underneath them; with the help of Uzieal~   We've discussed that it was probably beneficial to have forum descriptions describing what the sub-forum is supposed to be about. Hopefully with the new descriptions, they will help give a better understanding to our members regarding a proper designation towards topics they wish to create - hopefully reducing the amount of topics that need to be moved around~ =P     Introducing 'Former' Staff Positions Behind the scenes of discussion, which hasn't been open to the public, the staff has discussed issues regarding staff activity. What we mean by this is that, normally when it came to eAthena and rAthena, we would simply move staff who have been inactive for quite some time into the CC (Community Contributor) group. However, doing this meant that the staff has lost their position and is no longer known for their previous role. In Hercules, we decided to setup a Staff Activity system (thanks for the concept Uzieal~) where that staff who are no longer active, will have a opacity image of their former role; their name will also change from <Role> to Former <Role> indicating that this certain member is no longer active with us, but we kept their identity.   For example: [Active Staff Member]   [Inactive Staff Member]   As well, they'll be changed from 'Forum Managers' to 'Former Forum Manager'.      We feel that this new system will help members of the community know who former staff members were, and their role.
  13. Upvote
    Ind got a reaction from AnnieRuru in Implement The Shadows System   
    There we go https://github.com/HerculesWS/Hercules/commit/baef78f7954fa4e6fa2449f2c7de92a901c7f5f3 this is the base of the feature, which allows for shadow gear to be created (the item db entries)
  14. Upvote
    Ind got a reaction from EriNa_KillerSoul in Implement The Shadows System   
    There we go https://github.com/HerculesWS/Hercules/commit/baef78f7954fa4e6fa2449f2c7de92a901c7f5f3 this is the base of the feature, which allows for shadow gear to be created (the item db entries)
  15. Upvote
    Ind got a reaction from Rytech in Implement The Shadows System   
    There we go https://github.com/HerculesWS/Hercules/commit/baef78f7954fa4e6fa2449f2c7de92a901c7f5f3 this is the base of the feature, which allows for shadow gear to be created (the item db entries)
  16. Upvote
    Ind got a reaction from jTynne in Implement The Shadows System   
    There we go https://github.com/HerculesWS/Hercules/commit/baef78f7954fa4e6fa2449f2c7de92a901c7f5f3 this is the base of the feature, which allows for shadow gear to be created (the item db entries)
  17. Upvote
    Ind got a reaction from quesoph in Implement The Shadows System   
    There we go https://github.com/HerculesWS/Hercules/commit/baef78f7954fa4e6fa2449f2c7de92a901c7f5f3 this is the base of the feature, which allows for shadow gear to be created (the item db entries)
  18. Upvote
    Ind got a reaction from Angelmelody in Implement The Shadows System   
    There we go https://github.com/HerculesWS/Hercules/commit/baef78f7954fa4e6fa2449f2c7de92a901c7f5f3 this is the base of the feature, which allows for shadow gear to be created (the item db entries)
  19. Upvote
    Ind got a reaction from Jedzkie in Implement The Shadows System   
    There we go https://github.com/HerculesWS/Hercules/commit/baef78f7954fa4e6fa2449f2c7de92a901c7f5f3 this is the base of the feature, which allows for shadow gear to be created (the item db entries)
  20. Upvote
    Ind reacted to 安赫尔 in Implement The Shadows System   
    Shardow System
     



     
    Conformation
    ------------------------
    Shardow equipment have no conformation, 
     
    Equip
    ----------
    Shardow can equip 6 position.
    1. Armor
    2. Weapon  [ This weapon include all kinds of normal weapon, ex: Staff / Sword / Katar / ....]
    3. Shield
    4. Acc_L
    5. Acc_R
    6. Shoes
     
    Property
    ---------------
    Shardow have a little property,
    ex: FLEE+5, HP+20, HIT+10.
    And the weapon have no Atk/Matk, Armor & Shield have no Def.
     
    Packs
    ----------
    Shardow Usually packs with 2 or 3 Shardow Equipment.
    ex: Acc_L + Acc_R  /  Weapon + Armor / Shield + Shoes / Armor + Shield / Weapon + Acc_L + Acc_R
    Packs can increase a little property.
     
    Refine
    -----------
    Shardow can be refine, but can not enchant.
    Shardow's refine does't increase anything. But can active refine bouns, ex: if(getrefine>=7){......}
    Shardow's Pack also have refine bouns, ex: if((getequiprefinerycnt(EQI_HAND_R) + getequiprefinerycnt(EQI_ARMOR)) >=21){......}
     
    ItemDB
    -------------
    24000 - 24098
    Total: 99 equipments.
    Shardow Is already a large segment of the equipments.
    Ver.1 Just add 1 Str , Now Maybe Ver.8 
     
    신발에 추가로 신을 수 있는 신발. 단일로도 사용할 수 있지만 효과는 적다DEF + 1.1 제련 당 암흑 내성 1% 증가.스테빌리티 쉴드 쉐도우와 애듀레이트 (아머, 슈즈) 쉐도우를 함께 장착 시, DEF + 5.제련도의 합이 20이상일 경우, 결코 암흑에 걸리지 않는다.계열 : 쉐도우 장비위치 : 슈즈 무게 : 0요구 레벨 : 1장착 : 전직업 Translation by Google
     
    In addition to shoes, to be able to wear shoes. Also available as a single, but the effect is lessDEF + 1.Shadow resistance increased by 1% per 1 smelting.Stephen shadow shield stability and aedyu rate (armor, shoes) when mounted with the shadow, DEF + 5.If it is more than the sum of smelting 20, never in the dark does not take.Series: Shadow KitLocation: Shoes Weight: 0Required Level: 1Mounting: All Job Other----------
    All the Shardow Equipments have no slot. 
     
     
    Hope to see it soon in the Hercules.
     
    And I use rAthena can test out the look. Like this.

     
    But I don't know how to increase the property to them.    I think it's very easy for Hercules!  [/size]
  21. Upvote
    Ind got a reaction from Angelmelody in checkidle2()   
    There we go, I've made it in a way that would satisfy the argument in the bug report https://github.com/HerculesWS/Hercules/commit/e08c05a0f73d6e6ea4fe64a9b91291bc0a002251
  22. Upvote
    Ind got a reaction from kyeme in checkidle2()   
    There we go, I've made it in a way that would satisfy the argument in the bug report https://github.com/HerculesWS/Hercules/commit/e08c05a0f73d6e6ea4fe64a9b91291bc0a002251
  23. Upvote
    Ind got a reaction from quesoph in checkidle2()   
    There we go, I've made it in a way that would satisfy the argument in the bug report https://github.com/HerculesWS/Hercules/commit/e08c05a0f73d6e6ea4fe64a9b91291bc0a002251
  24. Upvote
    Ind got a reaction from hsombini in N> Help Testing New Instances   
    We heard you, and we're very close to releasing it, while the adjustments were few I'd like to have it properly tested just to be sure we didn't miss anything.
    Includes:
    [*]npc/instances/EndlessTower.txt
    [*]npc/instances/NydhoggsNest.txt
    [*]npc/instances/OrcsMemory.txt
    [*]npc/instances/SealedShrine.txt
    [*]npc/re/instances/BakonawaLake.txt
    [*]npc/re/instances/BangungotHospital.txt
    [*]npc/re/instances/BuwayaCave.txt
    [*]npc/re/instances/HazyForest.txt
    [*]npc/re/instances/MalangdoCulvert.txt
    [*]npc/re/instances/OctopusCave.txt
    [*]npc/re/instances/OldGlastHeim.txt

    Please post in this thread for any issues you encounter, I'll be committing it into the repository once we deem it to be all green.
    InstancesUpdate.003.patch
    Thanks.
  25. Upvote
    Ind got a reaction from Zirius in @storeitem   
    File Name: @storeitem
    File Submitter: Ind
    File Submitted: 10 Oct 2013
    File Category: Plugins
     
    HPM Plugin. Implements the @storeitem command
    @storeitem <item name or ID> <quantity> <refine> <char name> Designed by Beowulf/Nightroad
     
    How to Install
    Check the wiki page on 'Building a Plugin' http://herc.ws/wiki/HPM#Building_a_plugin
     
    Contribute / Customize
    Its available at our Staff Plugins Repo, pull requests are more than welcome.
     
    Click here to download this file
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.