Jump to content

Neffletics

Members
  • Content Count

    65
  • Joined

  • Last visited

  • Days Won

    5

Reputation Activity

  1. Upvote
    Neffletics reacted to 4144 in Linux Concurrent Connection Limit   
    in hercules in configure enable epoll.
    in system settings if need increase connections count. default limit may works too.
     
    Also don't use centos 7. It was released 20 years ago. It very outdated.
     
  2. Like
    Neffletics reacted to Antares in roBrowser continued - Join the effort!   
    Hi everyone!

    In the last few years I have been continuing the development of roBrowser. I implemented many features and effects and also searched the internet for every roBrowser fork and tried to merge and finish every development that was made outside of the main repo. The client became pretty playable compared to other versions, but there is much to be done and I am short handed on people. Some awesome guys already joined and implemented/working on much needed stuff, but there is more required. I am writing to gain some attention and perhaps someone could help us in getting the client in shape. If you are not interested in development, but you can help us in acquiring information about assets/layouts/"how to do it", that would be also a huge help! I have to spend hours listening to effect sounds and watch animations and on top of all translate their names from korean/latin1 gibberish to get exactly what we need and it is a really tiring task.  If you are interested in none of those, but you have roBrowser on your server (that is unfortunately pretty outdated now), check out our version and consider using it. Everyone can use this fork and anyone can join the effort. There is only one request I have: if you implement/fix something, don't forget to open a pull request, so everyone can benefit
     
    The repository is located here:
    https://github.com/MrAntares/Ragna.roBrowser
     
    And finally some screenshots that contain things we implemented/fixed, but keep in mind, everything is WIP and many things are still missing:
    - Pushcart and related GUIs and other features like Forging, Brewing, Arrow Crafting, Alt+M shortcuts, Weapon sounds, Critical and combo damage display, Taming, and many more
    - Status effects (coloring)
    - Map Effects

    - Hard coded skill and item effects and of course sounds

    - Sprite based effects
    - Minimap icons
    - Skillbar cooldown display (as of yet the old style, but the clock style is also in the barrel)

    It also works on mobile and we try to improve the experience by adding UI elements/features that support us in the handheld environment, like
    - Full screen button in the top left corner
    - Exit battle mode/ open chat on the bottom left side of the ChatBox

  3. Upvote
    Neffletics reacted to pan in Multi-threaded Hercules   
    Long time no see!
    I've been dabbling with adding multi-thread support to Hercules for quite some time and even started quite a few server projects from scratch, and having failed in most of my attempts - last year I tried again with a new core design and it seems to be working so far. A lot of the systems that the server core is reliant were reworked, I believe some of these changes can even be used upstream but they would need to be revised first. This is mostly a proof of concept.
    I'm still planning on finishing the map-server but as of now only login and char servers have multi-thread enabled - I didn't test with multiple users yet. There's no linux / FreeBSD support because I want to have everything in working condition before trying to add another I/O paradigm, the architecture is very reliant on the way that this module works so I thought it'd better to implement the whole server before trying to add other paradigms.
    Lately I haven't got much free time to finish the map-server, but sometime later this year I think I can finish it.
    The code is at https://github.com/panikon/HerculesMT , I forked from stable v2021.08.04
     
    Server architecture

    Hercules employs a multi-server approach in order to better load balance player requests, so for each game world there'll be at least three separate program instances running at all times. These instrances are: login-server, char-server and map-server. Each of which can only access a subset of the world's SQL tables and is responsible for a different step of the game experience.

    Authentication and account database changes are segregated to the login-server, while character selection and character specific information are to the char-server, and the actual gameplay to the map-server.
    The login-server is the player entry-point and can be responsible for multiple different world instances, so it's possible to use the same account table (login) for multiple worlds (char-server + map-server) and to dynamically change their IP without needing to push a new patch. After authentication the player is queried for which service they'll use and then the server relays the proper address so the client can connect.
    In the char-server the player usually is queried again for a four digit PIN (PACKETVER >= 20180124), after which they can select which playable character will be used to play. The server then relays the address of the proper map-server to the client.
    A single world instance can have multiple map-servers where each is responsible for a zone (set of maps), all inter map connectivity is managed by the char-server. When the player requests to change character the char-server IP is then relayed.
    A single map-server can be responsible for multiple different zones, and each will be a different thread.
     
    Relationship of each of the possible server instances

     Brown - Game world | White - program instances
     
    Core design
    All servers are multi-threaded. Basic server functions are assigned to different threads:

    Console (../src/common/console.c):
    This thread is responsible for all console input operations. Timer (../src/common/timer.c):
    The timer thread manages the `timer_heap` and dequeues timer actions from the `timer_queue`. Each timer can be ran in a different thread depending on the `timer_target`, this is accomplished by either queuing an action in one of the available action queues (`target_id`) or by running the specified function in the main timer loop (`do_timer`).
    Other threads queue different timer actions (add, delete, set tick) to the `timer_queue`.
    The timer module is also responsible for tick acquiral via (`timer->gettick` and `timer->gettick_nocache`). Message(../src/common/showmsg.c):
    The message thread is used to synchronize the output of multiple different threads, each call to `Show*` instead of being directly outputted to `STDOUT` is queued in the `showmsg_queue` and then dequeued by the main thread function `showmsg_worker`. I/O Worker(../src/common/socket.c):
    All I/O operations are asynchronous and implemented via I/O completion ports and a thread pool. The main workers are defined in `socket_worker` and after a operation is dequeued it's converted into an action (`socket_operation_process`) that is then queued to the proper action worker (each session has a responsible worker, and it's obtained by the I/O worker via `action->queue_get`).
    These workers don't execute any "business logic" so we can minimize the time that they are blocked by any given operation, and also so we can better isolate different session groups without having to take into account in I/O operations (e.g. in map-server each zone has a different action worker and multiple actions can be queued simultaneously without having to block any of the threads for a longer period of time). Action Worker(../src/common/action.c):
    Action workers perform all the "business logic" of each of the servers, and each is responsible for a different session group. After every action loop all send actions are queued to the completion port.

    Login-server:
    Each char-server connection has a different worker. Player connections are randomly assigned. Char-server:
    Each map-server connection has a different worker. Player connections are randomly assigned. Map-server:
    Player connections are assigned depending on the current map according to the different configured zones. The char-server connection is randomly assigned.



    Thread relationships

  4. Like
    Neffletics got a reaction from IndieRO in Http support in hercules (merged to hercules)   
    This is the first time I've seen this post. As a way of saying thank you to Herc, I'll be donating on a regular basis. This is the emulator that we've been using for SolaceRO.

    Thanks for your dedication! 

    Update: I just realized, my payment was declined. Not sure if this is connected with the situation in Eastern Europe. Sucks, I don't have crypto.
  5. Like
    Neffletics reacted to 4144 in Http support in hercules (merged to hercules)   
    For long time i worked on incomplete yet project for add http support into hercules.
    And this is funding page for this project.
     
    What parts this project contains already:
    new server with http support (named api-server). missing packets for guild emblems. http guild emblems (bmp, gif). hotkeys. emotes. adventurer agency (without search). basic plugins support for all this. basic plugins support for custom urls. extend plugins support for inter server packets. add support for api to login, char, map packets. protection against different attacks on servers. sample http plugin. Add support for emblems bigger than 64k bytes. Add shared configs support between login/char/map/api. Add configuration with default emotes for new chars.  
    What need to add
    adventurer agency search. extend service urls support. add support for browsers and web panels api for control servers. twitter like messages support for old clients. support for vending shops load/save. other different small things.  
    Now this project merged to hercules.
    Merged pull request: https://github.com/HerculesWS/Hercules/pull/3198
     
     
  6. Upvote
    Neffletics reacted to Ai4rei in Elurair, v2.14.0.369 - last updated 2024/04/14   
    Elurair Patching Launcher
    (RO Patcher Lite+ROCred Merge)
     

     
    About
    Universal auto-patcher for all your updating needs combined with a launcher, which is fully skinnable, highly customizable and easy on resources. It is free of any cost and works on every 32-bit and 64-bit Microsoft* Windows* platform. How this came to be: Future of ROCred and RO Patcher Lite
     
    Known Issues
    None.
     
    FAQ
    Q: Does the patcher support encrypted GRFs?
    A: Yes, common GRF encryption schemes are supported.
    Q: Can I use the Patcher part without the Launcher part?
    A: Yes, the Launcher mechanics and UI can be disabled in configuration.
    Q: Can I use the Launcher part without the Patcher part?
    A: Yes, remove all Patcher sections from the configuration.
     
    Download & Website
    http://ai4rei.net/p/skal
     
    License

    This work is licensed under a Creative Commons Attribution-Noncommercial 4.0 International License.
  7. Upvote
    Neffletics reacted to Aeromesi in [Utility Instance] Create your own Farm Zone Instance IN-GAME 2021 NEW!   
    Hello Herc, I hope you enjoy testing out my Farm Zone Instance creator script.

    Here's some information about the script:

    It is a Beta Build. I will be updating this script frequently. So be on the lookout for my GitHub updates.

    IMPORTANT:
    Player cannot access until you setup and enable farm zones
    Edit .GMList$ array for certain GM names to use GM menu
     
     
    When creating Farm Zone instance you:
    1) Create total amount of Farm Zones you want
    (Say you make Elunium, Oridicon, Dead Brach, Bloody Branch, and EXP Farming) when clicking [First Click] in npc Menu you would make 5. This is just an example
     
     2) Type out names of instances
    2) Input delay time (this was working and now it's randomly not)
    3) Input item ID
    4) Input Max amount of items
    5) Input rate at which you want player to receive item

    You can either download it directly from an upload I did on Hercules, or download directly from my GitHub.


    GitHub Link:
    https://github.com/Aeromesi/AeromesiCodes/blob/master/Instances/Hercules/CopyPaste/npc/custom/custom_instances/farm_creator_instance_Herc.txt
    farm_creator_instance_Herc.txt
  8. Upvote
    Neffletics reacted to Aeromesi in [Official Instance] Geffen Magic Tournament   
    Hello and good evening my fellow Ragnarok fans.
    I decided to rewrite Geffen Magic Tournament for Hercules as close to official as possible.

    The slight modifications to my version include the following:

    1) Quest progression doesn't exist (I plan on changing this once I have Geffen Magic Tournament quest DB converted)
    2) Emmitt White doesn't start the instance, he just tells you time left you have until you can go back.

    All in all the script is about I'd say 99% accurate to the real deal. Enjoy
     
     
    Remember to keep a close eye on my GitHub, when I update the script, the latest download will be available immediately when I commit changes. So make sure to follow my GitHub!
     
    Link to download:
    https://github.com/Aeromesi/AeromesiCodes/blob/master/Instances/Hercules/CopyPaste/npc/custom/custom_instances/geffen_magic_tournament_Herc.txt
  9. Upvote
    Neffletics reacted to 4144 in How Hercules skill coding structure actually works?   
    I not looked what this skill really do,
    But most skills works like this. At first skill name AS_GRIMTOOTH.
    Often skill activate some SC_* option.
    And if need some kind of helpers, skill may spawn skill units UNT_*.
    Logic separated between configs and code.
    So if you need understand how exactly selected skill works, you can look in code for skill constant first (in example AS_GRIMTOOTH)
     
  10. Upvote
    Neffletics reacted to Asheraf in Upcoming Feature: Macro Detection Interface   
    Macro Detection Interface
     
    Four new client interfaces are getting implemented in Hercules:
    - Macro Register UI
    - Macro Detector UI
    - Macro Reporter UI
    - Captcha Preview UI
     
    Usable though the chat commands: /macro_register, /macro_detector, macro_preview for all clients starting 2016-06-30.
    Available for testing now at: https://github.com/HerculesWS/Hercules/pull/3051
     
    Some sample images


  11. Like
    Neffletics reacted to BuLaLaKaW in Jikari-Cube - old patcher for oldies like me   
    Hi Everyone,
     
    Good day. It has been a long vacation for me since I played RO and even setup my server using eathena, then 3CEAM (rytech's), then rathena and then herc. At some point I was using Judas' services also. Main point, after my 2011 server (tinyro.com) I went into work frenzy until I no longer have time for RO due to work and family. And now after a decade of inactivity, I am posting this particular share that may help other players or maybe only those people who experienced and maybe a lover of jikari patcher like me.
    jikari-cube_guide.pdf Jikari-Cube.zip
    if ever this is on the wrong section, will it be possible to transfer this and keep the files for knowledge sake and possible future use
     
    thanks
  12. Like
    Neffletics reacted to 4144 in Upcoming hercules feature   
    Already merged into hercules
     
    New feature: Items preview in cash shop
     
    Can be enabled by:
    1. defining ENABLE_CASHSHOP_PREVIEW_PATCH in core.h or by configure flag --enable-cashshop-preview-patch
    2. Then need apply this nemo patch http://nemo.herc.ws/patches/ExtendCashShopPreview/
     
    Feature can works only if option in server side enabled and enabled patch in client side. In other case cash shop will be corrupted
     

     
  13. Like
    Neffletics got a reaction from Azhura in No Delay Program   
    You have to write it yourself. I manually applied hard delays in my server; it counts the animation speed as well.
  14. Like
    Neffletics got a reaction from `Azhul in Race to 99 Script   
    Update: setarray .@rewardablejobs[0] and change the jobs there to Job_Whitesmith, Job_Creator, Job_Sniper, etc. (reference: doc/const.txt)

    Then change the coordinate of the training grounds NPC.

    P.S. Untested, I just wrote it from my phone. I wrote it in a simple manner, please learn from the changes I made.
    /////////////////////////////////////////////////////// // ___________ _____.__ // \__ ___/__.__.________/ ____\__| ____ ____ // | | < | |\_ __ \ __\| |/ \ / ___\ // | | \___ | | | \/| | | | | \/ /_/ > // |____| / ____| |__| |__| |__|___| /\___ / // \/ Scripts \//_____/ // //===================================================== // Name: Race to Max Level // // Description: // This NPC allows for Game Masters to set a reward to // be given to the first player of each 2nd class that // reaches maximum level (base and class). //===================================================== /////////////////////////////////////////////////////// new_1-1,111,111,4 script Race to 99#reg 58,{ mes "[Race to 99]"; mes "Would you like to join the race to 99 event?"; switch(select("Yes.","Leave him alone.")) { case 1: mes "[Race to 99]"; mes "Okay, you're in!"; set RaceParticipate,1; close; case 2: mes "[Race to 99]"; mes "Okay, that sucks."; close; } } prontera,147,180,5 script Race to Max Level 58,{ set .@gm_level, 99; // GM level required to set the reward set .@maxbase, 99; set .@maxjob, 50; set .@defaultreward, 510; setarray .@rewardablejobs[0], Job_Knight, Job_Alchemist, Job_Assassin, Job_Bard, Job_Blacksmith, Job_Crusader, Job_Dancer, Job_Hunter, Job_Monk, Job_Priest, Job_Rogue, Job_Sage, Job_Wizard; Begin: clear; if (RaceReward == 1) { mes "[ ^0099ccRace to Max Level^000000 ]"; mes "You have already received your reward."; close; } if (RaceParticipate != 1) { mes "[ ^0099ccRace to Max Level^000000 ]"; mes "You're not a participant of this event."; close; } mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Hello, " + ((getgmlevel() >= .@gm_level) ? "master! What do you want to do today?" : "are you here for your reward?"); switch(select(((getgmlevel() >= .@gm_level) ? "Set Reward:Restart Race" : ":") + ":YES!:...Reward?:Who was rewarded?:Cancel")) { case 1: goto SetReward; case 2: goto RestartRace; case 3: goto GetReward; case 4: goto ExplainRace; case 5: goto ShowRewarded; default: end; } SetReward: clear; mes "[ ^0099ccRace to Max Level^000000 ]"; if ($reward == 0) set $reward, .@defaultreward; mes "The reward is " + getitemname($reward) + " (ID: " + $reward + ")."; mes "Do you want to change it?"; if (select("Yes:No") == 1) { clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Please enter the new reward item ID."; input .@rewardid; clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Set " + getitemname(.@rewardid) + " as the reward?"; if(select("Yes:No") == 1) { set $reward, .@rewardid; } } goto Begin; RestartRace: clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Are you sure you want to restart the race?"; if (select("Yes:No") == 1) { for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) { set $rewarded$[.@rewardablejobs[.@i]], ""; } announce "The Race to Max Level has begun! Claim a reward once you reach " + .@maxbase + " base and " + .@maxjob + " class!", bc_all; } goto Begin; GetReward: mes "Let's see... " + strcharinfo(0) + ", huh?"; if (Upper != 1) { mes "You're not a rebirth class. You're not qualified"; close; } set .@competitioner, 0; for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) { if (Class == .@rewardablejobs[.@i]) { set .@competitioner, 1; if (BaseLevel < .@maxbase || JobLevel < .@maxjob) { mes "I'm sorry, but you still need to level a bit more."; } else if ($rewarded$[Class] == strcharinfo(0)) { mes "You have already claimed your reward."; } else if ($rewarded$[Class] != "") { mes "Too late!"; mes "The reward for " + jobname(Class) + " was already claimed by " + $rewarded$[Class] + "."; } else goto GiveReward; } } if (.@competitioner == 0) mes "You need to change your job."; close; GiveReward: set $rewarded$[Class], strcharinfo(0); set RaceReward, 1; clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Congratulations! You were the first " + jobname(Class) + " to reach " + .@maxbase + " base and " + .@maxjob + " class!"; getitem $reward, 1; announce strcharinfo(0) + " (" + jobname(Class) + ") reached Max. Level and received " + getitemname($reward) + "!", bc_all; close; ExplainRace: clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Yes! When you reach the maximum level for your class, talk to me and you'll be rewarded with a special item."; next; goto Begin; ShowRewarded: clear; mes "[ ^0099ccRace to Max Level^000000 ]"; for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) { mes jobname(.@rewardablejobs[.@i]) + ": " + (($rewarded$[.@rewardablejobs[.@i]] != "") ? $rewarded$[.@rewardablejobs[.@i]] : "^ff0000Nobody^000000"); } next; goto Begin; }

     
  15. Like
    Neffletics got a reaction from lowkey in Things to know as server owner   
    Everything you need to know is in Herc and rAthena forums. Also, you'll get a faster response in the Discord channel should you have technical questions. Good luck!
  16. Like
    Neffletics reacted to lowkey in Things to know as server owner   
    thanks for the input.. im following your tips and currently developing everything on the offline server. maybe ill give myself time and if I can learn everything, i will be the server/developer as well. Cheers*
  17. Like
    Neffletics got a reaction from lowkey in Things to know as server owner   
    If you don't know how to independently operate everything, you're not supposed to open a server. You'll just end up like most of the server owners in the Philippines, who are popping out like mushrooms because of the income they can generate and disappears in a month. I'm sure most server owners will deny it, but you can easily tell what motivates them just by viewing their donation shop and patch notes.

    Running a server requires competence, patience, and consistency. These 3 values are important for a server to survive its 1st year. This is based on my own experience in SolaceRO.
     
    Final advice: 
    Knowing how to 'program' will not make you a good server owner. Acquire some experience first; join someone else's server as a co-developer.
  18. Like
    Neffletics got a reaction from vBrenth in Things to know as server owner   
    If you don't know how to independently operate everything, you're not supposed to open a server. You'll just end up like most of the server owners in the Philippines, who are popping out like mushrooms because of the income they can generate and disappears in a month. I'm sure most server owners will deny it, but you can easily tell what motivates them just by viewing their donation shop and patch notes.

    Running a server requires competence, patience, and consistency. These 3 values are important for a server to survive its 1st year. This is based on my own experience in SolaceRO.
     
    Final advice: 
    Knowing how to 'program' will not make you a good server owner. Acquire some experience first; join someone else's server as a co-developer.
  19. Like
    Neffletics got a reaction from hanx in MVP Blueprint System and Monster Fragment System   
    It's just items calling certain functions; checking if the items are in the inventory; then getitem, delitem, etc. Just read through the script_commands and you'll understand how to make something similar.
  20. Upvote
    Neffletics reacted to Inzanity in Inzanity's Services [Client side setup] [Custom Client patches] [SRC mods / Scripting]   
    Hello everyone!

    [About us]
    We are a team that consists of multiple incredibly experienced developers and long-term Ragnarok players. Some of us have been playing since the old beta iRO days.
    We are very confident in our ability to read and modify most modern Ragnarok clients. We have worked with various clients from 2018, 2019 and 2020, as well as a few older ones.
    We primarily work with NEMO Patcher, but also recently started working with WARP Patcher as well.


    [What do we offer]

    1. Finding and patching your desired client.exe with NEMO or WARP according to your wishes. Providing support for said patches, counseling for optimal client setup for your server. (Low latency, best features, avoid "client bloating")

    2. Create custom NEMO or WARP patches! Have a cool idea that you want to implement into your client but cannot find any dedicated Reverse Engineers? We are all that you need. Consult with us regarding possibilities.
     
    3. Selling already completed pre-made custom NEMO patches. WARP patches coming soon...

    4. Creating, modifying or debugging small - medium sized scripts or source modifications. Need a custom NPC feature? A custom skill or skill edit perhaps? A custom item script / bonus? Perhaps you have a map error you cannot figure out. Contact me for details!
     
    [Availability Status : Unavailable] [We are currently occupied with existing tasks and Real Life situations, so we cannot take any further jobs at the moment!] (To provide the best customer experience we will not take more than 2 Jobs at a time, but feel free to contact us anyway!)
     
     
    [Details]
     
    - For our first service we will use patches that already come with NEMO or WARP. Custom patches are not included. You can pick your own client version or let us choose (based on your needs). Additional counseling for customers is free of charge if it's within reason.
    - For our second service you need to consider that Server Side modifications may also be necessary to realize your custom client patch. We will need to charge extra for that and the price can and will heavily vary based on the project scope.
    - For our third service you need to consider that these patches have been tested only on specific client versions and may not work for your desired client. If the patch can be adjusted without much hassle for your client, you will not be charged extra for the adjustment. However if the adjustments require substantial amount of time, we may be UNABLE to adjust the patch for you. In that case you will get a full refund, unless you agree to pay for further adjustment fees.
    - We reserve the right to deny any request we deem inappropriate or too difficult / large scale. In case of language barriers (eg. unable to accurately determine the client's wishes), we may also deny your request.
    - WARP patches may take longer to complete and have a slightly higher cost, since we only recently started working with this Patcher. (As of 2021-01-14)
     
    [PRE-MADE CUSTOM NEMO PATCHES]
    Note: Pre-Made patches have to be applied by our team personally to your client.exe, together with the other patches you wish to use. (Contact us for further information) This is to prevent re-selling our work.
     
    1. Party Member SP bars, fully integrated with Party Window, Battlegrounds and GM Mode.
    https://imgur.com/a/ekcHEAc
    PRICE: 120$
    +$ fee if the patch does not natively work on your desired client version and has to be modified to work with it (see Details above).
    - Tested on : 2019-02-13e
    - Includes a Server Side patch to enable the feature client side. [Tested on Hercules, can be ported to rAthena for a small fee!]
    - Does not replace any other Status Bars.
    - Gepard compatible!
     
    2. Coming Soon:
    - Pre-Renewal UI port to modern clients
    - Unit Collision disable Patch
    - Attack / movement delay adjustments
    - Kafra Storage Pin Code system
    - Restoring Skill animations for Modern Clients (2019+)
    - Adjusted and improved Walk Delay improvement patch
    - Improved Item storage speed. (no delay between item right clicking to storage)
    - And more...
     
    [Payment & Contact]
     
    1. As of now we only accept Paypal. Based on the developer who will tackle your request, the paypal address to send the money to might change.
    2. You can contact us on discord : Inzanity#1558
    3. If you want your client directly patched, instead of getting a patch file, the price will be lower. (Due to the extra time needed to write NEMO/WARP patches) However we do not recommend this option, because server owners possibly opting to upgrade their client version in the future.
    4. If possible, we require to use "Friends & Family" at Paypal. (Some countries may not allow that). The customer will cover any transaction fees.
     
    5. We are getting questions regarding exclusivity options and prices:
    5.1 If you do not wish for your requested patch to be re-sold / modified for other customers, we charge a 10% fee. This will have us start from scratch should another customer want the same thing as you.
    5.2 If you do not wish for your requested patch to be re-created at all for other customers, we charge a 100% fee. This will ensure that we do not make that same patch again for other customers.
     
    6. In general we charge 11$ per working hour for our work. In case some cases this might be less. (Bundled work, discounts, etc) This is for client side.
    7. Generally the base price for any project is 10$. The final price depends on scale and complexity of the request.
    8. If within reason, we offer free support for our scripts / patches.
  21. Upvote
    Neffletics got a reaction from Daraen in [Release] ExtendedBG for Hercules (with eAmod BG modes)   
    There's a command called @ignorebg, it works like @listenbg. 
  22. Upvote
    Neffletics reacted to meko in Array manipulation functions   
    View File Array manipulation functions
    This script provides various array manipulation functions, and more might be added in the future.
    All of those functions (except the arithmetic ones) work with both integer and string arrays.
    The start of the array is always implicitly index 0, unless an index is specified, ie @array[index]



    array_pad(<array>, <size>, <value>)
    pads the array left or right with <value> until it reaches <size> size. If <size> is negative it will pad left.
    > returns the number of added entries
    setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_pad(.@foo, 8, 69); // => 3 // array is now: 1, 2, 3, 4, 5, 69, 69, 69 setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_pad(.@foo, -8, 69); // => 3 // array is now: 69, 69, 69, 1, 2, 3, 4, 5


    array_replace(<array>, <needle>, <replacement>{, <neq>})
    finds every occurrence of <needle> within the array and replaces it with <replacement>. if <neq> is true, finds entries that do not match instead
    > returns the number of changed entries setarray(.@foo, 1, 1, 3, 1, 5); // initialize the array array_replace(.@foo, 1, 69); // => 3 // array is now: 69, 69, 3, 69, 5


    array_find(<array>, <needle>{, <neq>})
    finds the first occurrence of <needle> within the array. if <neq> is true, finds entries that do not match instead
    > returns the index, or if none is found returns -1 setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_find(.@foo, 3); // => 2 array_find(.@foo, 1); // => 0 array_find(.@foo, 6); // => -1


    array_rfind(<array>, <needle>{, <neq>})
    like array_find, but finds the last occurrence. if <neq> is true, finds entries that do not match instead
    > returns the index, or if none is found returns -1 setarray(.@foo, 1, 2, 3, 4, 3); // initialize the array array_rfind(.@foo, 3); // => 4 array_rfind(.@foo, 4); // => 3 array_rfind(.@foo, 6); // => -1


    array_exists(<array>, <needle>{, <neq>})
    very similar to array_find() but it instead just checks if it exists or not. if <neq> is true, finds entries that do not match instead > returns true or false setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_exists(.@foo, 3); // => true array_exists(.@foo, 6); // => false


    array_count(<array>, <needle>{, <neq>})
    similar to array_find() but iterates through the whole array. if <neq> is true, finds entries that do not match instead
    > returns the total number of occurrences of <needle> setarray(.@foo, 1, 69, 3, 69, 5); // initialize the array array_count(.@foo, 69); // => 2


    array_entries(<array>)
    a wrapper around array_count(). behaves similarly to getaraysize() but does not count holes
    > returns the number of non-empty entries setarray(.@foo, 1, 2, 0, 0, 5); // initialize the array getarraysize(.@foo); // => 5 array_entries(.@foo); // => 3



    array_remove(<array>, <needle>{, <neq>})
    finds and removes every occurrence of <needle> from the array, while shifting left. if <neq> is true, finds entries that do not match instead
    > returns the number of removed entries setarray(.@foo, 1, 69, 3, 69, 5); // initialize the array array_remove(.@foo, 69); // => 2 // array is now: 1, 3, 5


    array_reverse(<array>)
    reverses the array
    > returns true setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_reverse(.@foo); // => true // array is now: 5, 4, 3, 2, 1


    array_sum(<array>)
    iterates through the whole array to perform an arithmetic addition
    > returns the sum of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_sum(.@foo); // ((((1 + 2) + 3) + 4) + 5) => 15


    array_difference(<array>)
    iterates through the whole array to perform an arithmetic subtraction
    > returns the difference of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_difference(.@foo); // ((((1 - 2) - 3) - 4) - 5) => -13


    array_product(<array>)
    iterates through the whole array to perform an arithmetic multiplication
    > returns the product of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_product(.@foo); // ((((1 * 2) * 3) * 4) * 5) => 120


    array_quotient(<array>)
    iterates through the whole array to perform an arithmetic division
    > returns the quotient of every entries of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_quotient(.@foo); // ((((1 / 2) / 3) / 4) / 5) => 0


    array_shift(<array>)
    removes the first entry of the array, while shifting left
    > returns the value of the removed entry setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_shift(.@foo); // => 1 // array is now: 2, 3, 4, 5


    array_unshift(<array>, <value>)
    adds <value> to the start of the array, while shifting right
    > returns the new size of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_unshift(.@foo, 69); // => 6 // array is now: 69, 1, 2, 3, 4, 5


    array_pop(<array>)
    removes the last entry of the array
    > returns the value of the removed entry setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_pop(.@foo); // => 5 // array is now: 1, 2, 3, 4


    array_push(<array>, <value>)
    adds <value> to the end of the array
    > returns the new size of the array setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_push(.@foo, 69); // => 6 // array is now: 1, 2, 3, 4, 5, 69


    array_shuffle(<array>)
    shuffles the array
    > returns true setarray(.@foo, 1, 2, 3, 4, 5); // initialize the array array_shuffle(.@foo); // => true // array is now: 1, 4, 2, 3, 5 (example, unpredictable)


    array_unique(<array>{, <threshold>})
    allows array entries to appear up to <threshold> times (1 by default) and removes the extraneous ones. useful to remove duplicate entries
    > returns the number of removed entries
    setarray(.@foo, 1, 3, 3, 4, 5); // initialize the array array_unique(.@foo); // => 1 // array is now: 1, 3, 4, 5


    array_diff(<base array>, <array>{, <array>...}, <result array>)
    compares the base array against one or more other arrays and fills the result array with the entries in base array that are not present in any of the other arrays
    > returns the number of entries not found in other arrays
    setarray(.@base, 1, 2, 3, 4, 5, 6, 7, 8); // initialize the base array // fill the arrays to compare with the base array: setarray(.@foo, 2, 3, 4, 5, 6, 7, 8); // missing "1" setarray(.@bar, 1, 2, 3, 4, 6, 7, 8); // missing "5" setarray(.@baz, 1, 2, 3, 4, 5, 6, 7); // missing "8" // compare foo, bar and baz against base, and fill result: array_diff(.@base, .@foo, .@bar, .@baz, .@result); // => 3 // .@result is now: 1, 5, 8


    array_filter(<array>, "<function>")
    filters the array using a function that is tested against every entries. if the function returns false, the relevant entry is removed and the array is shifted left
    > returns the number of removed entries
    function script is_prime { if (getarg(0) <= 1) return false; for (.@i = 2; .@i <= getarg(0) / 2; ++.@i) if ((getarg(0) % .@i) == 0) return false; return true; } setarray(.@foo, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); array_filter(.@foo, "is_prime"); // => 9 // array is now: 2, 3, 5, 7, 11, 13


    array_sort(<array>)
    sorts the array in ascending order
    > returns true
    setarray(.@foo, 2, 1, 8, 4, 5, 7, 6, 3); // initialize the array array_sort(.@foo); // => true // array is now: 1, 2, 3, 4, 5, 6, 7, 8


    array_rsort(<array>)
    sorts the array in descending order
    > returns true
    setarray(.@foo, 2, 1, 8, 4, 5, 7, 6, 3); // initialize the array array_rsort(.@foo); // => true // array is now: 8, 7, 6, 5, 4, 3, 2, 1



    Requires Hercules of June 24 2017 or newer version


     
    --------------------------------------------------------------------------------------
    This script was made by me, for The Mana World + Evol.
    License: public domain (CC0)
    Submitter meko Submitted 05/29/17 Category Quest, Shops, Functions & Algorithms  
  23. Upvote
    Neffletics reacted to AnnieRuru in Party Match   
    originate from rathena
     
    Download 1.0
    script
     
     
    Description -> copy paste from rathena forum

    by the way I added OnPCUseSkillEvent feature
    its totally up to you to add this or not, but I found it's very convenient after add them
    having a cursor to immediately select the player I want without typing the name out
  24. Upvote
    Neffletics reacted to Dastgir in Dastgir's Services   
    Hello Hercules Community,

    I am offering my Services to you @ some expense of money.

    Works for Emulator: Hercules/rAthena/Others(if any)
    Services:
    Scripting. (Min Price:5$ ) Source Modification(/Addition).(Min Price: 5$) Converting to/Creating a Plugin[Hercules Specific].(Min Price: 5$) Migrating Your Server. (Min Price: 10$) Adding Custom Items/Maps/Mobs. (Min Price: 5$) Creating/Adding New Skills. (Min Price: 10$) Changing of Emulator (Min Price: 10$) ClientSide Things. (Min Price: 5$) Fixing Errors. (Min Price: 5$) Script Review. Consulting And Anything else, that you want, just drop me a PM
    Maximum Price: Depends on Complexity of the Work
    What Else:
    Free Support for Service bought from me.

    Contact Info:
    Post Here Via PM Payment Methods:
    PayPal Only PM me if you want any other payment method, and I might check If I can have it.

    Status: AVAILABLE
  25. Like
    Neffletics reacted to AnnieRuru in inventoryselect   
    Credit to Epoque for the idea
     
    Download : 1.4
    plugin
     
    while reading the description,
    allow list all the items in your inventory, or only show part of it
    with version 1.2 onwards, now can list out only certain types of items
    for example inventoryselect(ITF_WEAPON|ITF_ARMOR) only shows equipments available in your inventory
    and inventoryselect(ITF_CARD) only shows card available in your inventory
     
    no, don't do stuffs like adding item temporary, player can find ways to dup item
     
    tested with

     
     
×
×
  • Create New...

Important Information

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