-
Content Count
850 -
Joined
-
Last visited
-
Days Won
35
Reputation Activity
-
bWolfie got a reaction from Pupay in @refresh NPC Fix
This fixes the client hang issue when using the @refresh command while a NPC dialog box/menu is open. I don't know if this plugin will compile, as I made it on the fly, but the command fix definitely works.
Inspired from npc_rr_secure_timeout_timer
Download: https://pastebin.com/zUzYyz1S
ACMD(refresh) { if (sd->npc_id) { /** * If we still have the NPC script attached, tell it to stop. **/ if (sd->st) sd->st->state = END; sd->state.menu_or_input = 0; sd->npc_menu = 0; clif->scriptclose(sd, sd->npc_id); /** * We will end the script ourselves, client will request to end it again if it have dialog, * however it will be ignored, workaround for client stuck if NPC have no dialog. [hemagx] **/ sd->state.dialog = 0; npc->scriptcont(sd, sd->npc_id, true); } clif->refresh(sd); return true; }
-
bWolfie got a reaction from some1 in [Guide] Mapcache Generation 2018
As of Release v2018.03.13, the method to generate mapcache for Hercules has changed. A lot of people. myself included, were confused as to how it works. In this thread, I will do my best to explain the new way to generate your cache. This guide is intended to help people using the old system, not to aid new people (i.e. never generated mapcache before), so if you are new, some of it may seem like alien talk.
Old (your source predates [is older than] Feb 18, 2018)
In the old system, there were two ways to generate mapcache
You could run the mapcache executable in Hercules root folder. Or use a program such as WeeMapCache to edit in your required mapcache. These two methods would generate or alter your required mapcache located in db/[pre-re or re]/map_cache.dat. However, they are no longer supported.
New (your source is using Release v2018.03.13 or newer)
The new system involves the use of the new 'mapcache' plugin to generate files. Some quick points:
db/[pre-re or re]/map_cache.dat has been dropped (no longer supported). In its place are individual .mcache files for every map located in maps/[pre-re or re]/ Mapcache executable has been removed. Replaced with the mapcache plugin (src/plugins/mapcache.c). How to generate the mapcache?
Same as before, check conf/map/maps.conf and db/map_index.txt have all the maps you want to cache. Your maps need to exist somewhere in your repository! There are two ways for the plugin to find them:
a. Place all your maps, including resnametable.txt, inside the data folder of your Hercules repo. I.e. Hercules/data/prontera.gat/gnd/gnd/rsw (note: I forget if all three files are needed).
b. OR Configure your conf/grf-files.txt to tell it where to find your GRF(s) which contains your maps. Build the mapcache plugin. On linux, this can be done by running the following command:
make plugin.mapcache
If using MSVC, compile as you would any other plugin. Execute plugin. This can be done using the following command:
./map-server --load-plugin mapcache [param]
In windows, just remove the './' and run the commands in your command prompt. The params:
The first thing you should do is run
./map-server --load-plugin mapcache --help
A list of usable parameters will appear. Here are the ones you need to know for mapcache:
[Info]: --convert-old-mapcache Converts an old db/pre-re/map_cache.dat file to the new format. [Mapcache] [Info]: --rebuild-mapcache Rebuilds the entire mapcache folder (maps/pre-re/), using db/map_index.txt as index. [Mapcache] [Info]: --map <name> Rebuilds an individual map's cache into maps/pre-re/ (usage: --map <map_name_without_extension>). [Mapcache] [Info]: --fix-md5 Updates the checksum for the files in maps/pre-re/, using db/map_index.txt as index (see PR #1981). [Mapcache] ./map-server --load-plugin mapcache --convert-old-mapcache
Rebuild all the .mcache files using your old db/[pre-re or re]map_cache.dat file.
NOTE: You should only run this command when you have an old map_cache.dat file you need to convert.
./map-server --load-plugin mapcache --rebuild-mapcache
Rebuild all the .mcache files using your map files specified in step 2 of generation.
NOTE: You should only run this command in special circumstances. This erases ALL the existing mapcache and rebuilds it with whatever files you provide it. If you don't have the required files, the build will fail and you will be left with missing mapcache files, meaning you won't be able to access those particular maps.
./map-server --load-plugin mapcache --map <name>
Rebuild the .mcache file for the map name you specify. E.g. if you replace <name> with prontera, the maps/[pre-re or re]/prontera.mcache file will be rebuilt.
NOTE: This is the best command to run, as it only caches a single map at a time.
./map-server --load-plugin mapcache --fix-md5
I don't know what checksum is for.
The End
Feel free to ask for help here. I'll try to answer questions re: mapcache if possible. And if you think anything needs correcting or added, let me know.
Hope this helps!
-
bWolfie reacted to KirieZ in Hercules Versioning and Available Features
Well, the short answer is: It depends.
But let's go for the long answer:
RO is a game that uses client/server model, and the server (in our case, Hercules) is the one which holds most of the game logic.
What this mean is, pretty much everything only happens in the game because the server tells the client to do so. To name a few examples:
- When you click to walk, Hercules is the one saying the client it can walk, and Hercules is the one letting other knows the player is walking
- A monster spawn only happens because Hercules is creating it and just letting the client knows the monster is there
- An attack (and a skill) only happens because Hercules calculated it and told the client that it happened
- A NPC is only shown in the screen because Hercules created it and told the client about its existence
- A Quest is received by the player because, for example, a NPC in Hercules added a quest to the player, and thus Hercules told the client about that
So, as you can see, pretty much everything requires something on Hercules side to work.
The client also plays some part on this:
- There are hardcoded limits of which IDs can be used
- For example, an item which has an ID > 32k would only work on clients that supports IDs above 32k
- Certain IDs for monsters/NPCs/etc won't be properly recognized in certain client versions
- There are some hardcoded logic on how skills works or shows up
- For example, the old, ground-based effect of bard/dancer performances doesn't show in 2019 clients and newer (unless you use a patch to restore the old code in client). The ground effect would still happen (Because Hercules is controlling it), but the player would see nothing in the ground.
- UI elements are part of the client, so an older client may not have certain windows
- But depending on the window, Hercules also needs to implement the network code to allow that window to work (e.g. Achievements, RoDEX, Equipment switch, etc)
Going back to your example about 4th jobs. Having a 2022 client means:
1. The visual effect for the 4th job skills are there
2. If the server says your job is one of the 4th jobs, you will see the sprite and it will be treated as a player sprite
3. You can see the new attributes window
4. You can see the new AP bar
But:
1. You don't have job change quests (Hercules must have the NPCs, which we don't as of April/2024)
2. You don't have a working skill tree and skills (Hercules must have the skill trees and skills coded, which we don't as of April/2024)
3. You don't have the effect of the new attributes being applied to your damage (Hercules must have new formulas for it, which we don't as of April/2024)
So:
Base client: kRO 2023 08 04
This means your resource files (sprites, luas, textures, maps, etc. the "visual" content and config files are from how kRO looked like in 2023-08-04).
For example, if a new hat is released in 2023-05, you will have the .spr file in your data.grf (but you can't get it in game if Hercules doesn't have it)
Client exe: 2022-04-06_Ragexe_1648707856
This means that your client will process client sided things as kRO did in 2022-04-06, this means it will be affected by client limitations from this date, and it will only load files that were expected at that time.
For example:
- if a new UI was released in 2023, you won't see it in a 2022 client, because the code was not there yet. (even if you have the images for that UI in your data.grf, you don't have the code to actually use them)
- if there is a new map format released in 2023 (map format meaning the structure of the files in the data.grf), this map file won't work here. On the other hand, if a map was released in 2023 using a structure that is compatible with a 2022 client, you can use it just fine.
Generally, having too different dates between Client exe and Base client may give you issues, because:
1. You have incompatible lua files (usually worked around by using translation projects)
2. You have new resources that are not compatible with your client (usually worked around by replacing the files or avoiding certain things)
Hercules: v2024.03
This is Hercules release date. This just means this is the state of Hercules code as of March/2024.
Hercules makes a new release every month, which may include bug fixes, new features, some custom code for something Hercules thinks is worth having, etc. You can see the changelog here: https://github.com/HerculesWS/Hercules/blob/stable/CHANGELOG.md
This date has pretty much nothing to do with the other 2. The only thing that it may suggest is that a 2018 Hercules will probably not work with a 2020 client, because we couldn't even imagine what 2020 client would look like when developing code in 2018.
But a 2024 Hercules doesn't mean it supports features from 2024 official servers, nor that a 2024 client would flawlessly work in Hercules. Currently, Hercules v2024.03 is a mix of content:
1. NPC/quest/job/monsters wise, I think we are around kRO 2015
2. Our client support is better, I think a 2022 client should work fine most of the time (some buttons won't work, though -- e.g. Equipment Switch is not there)
Hope this clarifies a bit
-
bWolfie got a reaction from sfosodkw2 in How can i get the CHAR_ID_CHAR for all players in a map?
Needs to be getcharid(CHAR_ID_CHAR, .@units[.@i])
-
bWolfie reacted to Asheraf in Help with map server leak
Either add a
aFree(item_name); or better use a stack allocation instead of malloc
char item_name[ITEM_NAME_LENGTH];
-
bWolfie reacted to 4144 in Help with map server leak
after sprintf, add
aFree(item_name); and why memcpy? server may crash if name too short. probably better strncpy or safestrncpy
-
bWolfie got a reaction from kalabasa in FCP debuff Strip
Yup it seems this may be official behavior...it is silly though isn't it. A former dev on my server fixed this for me. If I recall, another issue is if you don't have an item equipped in that area, the skill Chemical Protection cannot be cast.
I'm sure he wouldn't mind me sharing this here. Hopefully...
Can't guarantee it will work or if all the code is the same as this was from an old revision.
1. Open skill.c
- Find:
case AM_CP_ARMOR: case AM_CP_HELM: { unsigned int equip[] = { EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HEAD_TOP }; int index; if ( sd && (bl->type != BL_PC || (dstsd && pc->checkequip(dstsd, equip[skill_id - AM_CP_WEAPON]) < 0) || (dstsd && equip[skill_id - AM_CP_WEAPON] == EQP_SHIELD && pc->checkequip(dstsd, EQP_SHIELD) > 0 && (index = dstsd->equip_index[EQI_HAND_L]) >= 0 && dstsd->inventory_data[index] && dstsd->inventory_data[index]->type != IT_ARMOR)) ) { clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0); map->freeblock_unlock(); // Don't consume item requirements return 0; } clif->skill_nodamage(src, bl, skill_id, skill_lv, break; } case AM_TWILIGHT1: Replace with:
case AM_CP_ARMOR: case AM_CP_HELM: { if ( sd && (bl->type != BL_PC ) ) { clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0); map->freeblock_unlock(); // Don't consume item requirements return 0; } clif->skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv))); if (tsc->data[SC_PROTECTWEAPON]) status_change_end(bl, SC_NOEQUIPWEAPON, INVALID_TIMER); if (tsc->data[SC_PROTECTSHIELD]) status_change_end(bl, SC_NOEQUIPSHIELD, INVALID_TIMER); if (tsc->data[SC_PROTECTARMOR]) status_change_end(bl, SC_NOEQUIPARMOR, INVALID_TIMER); if (tsc->data[SC_PROTECTHELM]) status_change_end(bl, SC_NOEQUIPHELM, INVALID_TIMER); break; } case AM_TWILIGHT1: 2. Then find:
// Full Chemical Protection case CR_FULLPROTECTION: { unsigned int equip[] = { EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HEAD_TOP }; int i, s = 0, skilltime = skill->get_time(skill_id, skill_lv); for ( i = 0; i < 4; i++ ) { if ( bl->type != BL_PC || (dstsd && pc->checkequip(dstsd, equip[i]) < 0) ) continue; if ( dstsd && equip[i] == EQP_SHIELD ) { short index = dstsd->equip_index[EQI_HAND_L]; if ( index >= 0 && dstsd->inventory_data[index] && dstsd->inventory_data[index]->type != IT_ARMOR ) continue; } sc_start(src, bl, (sc_type)(SC_PROTECTWEAPON + i), 100, skill_lv, skilltime); s++; } if ( sd && !s ) { And replace with:
// Full Chemical Protection case CR_FULLPROTECTION: { int i, s = 0, skilltime = skill->get_time(skill_id, skill_lv); for ( i = 0; i < 4; i++ ) { if ( bl->type != BL_PC ) continue; sc_start(src, bl, (sc_type)(SC_PROTECTWEAPON + i), 100, skill_lv, skilltime); status_change_end(bl, (sc_type)(SC_NOEQUIPWEAPON + i), INVALID_TIMER); s++; } if ( sd && !s ) { -
bWolfie reacted to astralprojection in What's happen, I found weird IP ?
IP's are recycled upon termination of machine rental or services. maybe previous user moved/migrated to new ip but there are clients is still trying to send packets to old ip. i dont know.
-
bWolfie reacted to AnnieRuru in @packetfilter
No more Work in Progress, Please report if there are any bug
Download: 1.0a [Complete]
plugin
What is `@packetfilter` ?
`@packetfilter` is a custom mod originate from eamod
https://github.com/zephyrus-cr/eamod/blob/master/Servers/rAthena/conf/groups.conf#L418-L422
it can actually reduce lag on your live server during woe depends on how many players activate it
it totally depends on the player's side, community effort that every player should together turn on the `@packetfilter` to reduce massive lag during woe
this modification is actually very famous and there are members willingly to pay for it
https://rathena.org/board/topic/121200-packetfilter-battleinfo/
https://rathena.org/board/topic/123203-battleinfo-packetfilter/
https://rathena.org/board/topic/111797-packetfilter-zepyhrus-ramod/
https://rathena.org/board/topic/79995-buy-noactnodelay-partybuff-src-as-it-was-on-pro-ro-or-packetfilter/
this `@packetfilter` is unlike the one you are having, or that is circulating on rathena forum
this one has been written entirely from scratch and added some other flags that the original don't
for example,
`@packetfilter COHM EOHM`
allow block normal chat and emotion from non-related players, pets, homunculus and monsters
but this doesn't block normal chat from party/guild members
a full list of flags are
C = ignore normal Chat, including Dancer's scream, Bard's frost joke, and pet's talk (pet start to talk when intimacy > 900) E = ignore emotion, including monster and pet emotion (but NOT pet performance) I = ignore Item use effect A = ignore normal Attack animation (based on receiving side), your own attack animation are always shown B = Buffing skill animations (based on receiving side), your own casting animation are always shown S = Status effect T = offensive single Target skill/spell animations (based on receiving side), your own casting animation are always shown G = Ground based skills (eg:storm gust), your own casting animation are always shown M = Music dance/songs from Bard/Dancer D = Direction. Recommend filter on Party/Guild type and not enemies. Highly Recommend for supportive type Class. after the Main type, also support additional flags
S = Self P = Party G = Guild B = Battleground C = Clan O = Other players, none of the above H = Homunculus/pets/elementals/mercenary and player's @summon M = Monsters
Why This plugin doesn't block Kaite or Energy Coat ?
2 reasons
No.1 - currently there is a bug with plugin,
struct packet_spawn_unit *p = (struct packet_spawn_unit*)RBUFP(buf, 0); this line will throw error on Linux
so no choice, maybe I'll make a bug report
this bug also has been reported on Dastgir's `@noview`
No.2 - just set p->virtue = 0; isn't really blocking the packet
this goes against the very principle of this plugin, which is NOT send certain packet to the client
OPT3 (including OPT3_KAITE | OPT3_ENERGYCOAT | OPT3_SOULLINK) is part of the idle_unitType, unit_walkingType and spawn_unitType function
and blocking those 3 packet entirely is stupid
in case you don't understand, look under clif_set_unit_walking and clif_set_unit_idle function inside src\map\clif.c file
p.GUID = g_id; p.GEmblemVer = status->get_emblem_id(bl); p.honor = (sd) ? sd->status.manner : 0; // p.virtue = (sc) ? sc->opt3 : 0; <-- change this line p.virtue = 0; p.isPKModeON = (sd && sd->status.karma) ? 1 : 0; p.sex = vd->sex;
Note: about [D]irection type packet
try add a ShowDebug inside clif->send
src/map/clif.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/map/clif.c b/src/map/clif.c index ab3c4422a..9e245f335 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -450,6 +450,7 @@ static bool clif_send(const void *buf, int len, struct block_list *bl, enum send return true; } +ShowDebug("source:%s buf:0x%x send_target:%d\n", (sd != NULL)? sd->status.name : "NULL", RBUFW(buf, 0), type); switch(type) { case ALL_CLIENT: //All player clients. iter = mapit_getallusers(); you will find 0x9c is being send repeatedly on every attack and every skill cast , getting attack etc
this direction update packet isn't just send by Shift-click, but also including all the actions above
this packet is very spam-able and I think can be safely block on party/guild/clan/bg flags
for supportive class, I also think can block all of them since supportive class doesn't need information from enemies
-
bWolfie got a reaction from evilpuncker in Old exp tables - exp_group_db.conf for Base Level 999
https://pastebin.com/H9e2SG9t
Based on the old exp.txt tables. This only works for base level 999.
If you want to use a lower level, you need to comment out all entries above that level. E.g. if you want base level 500, you need to comment out entries 500-999.
The formula for no. of entries you need is [Max Base Level - 1]. So if max level is 400, you need 399 entries; 250 needs 249, and so on.
Let me know if there are any issues with it.
-
bWolfie got a reaction from iraciz in [Event] Wheel of fortune
only works with best emulator hercules master race we are best habilis prime transform no noob emulator
-
bWolfie reacted to Ai4rei in Hex to enable /nc in WoE
I was bored, so here you go @PunkBuster:
// long jmp F:85C00F85????00006A11 R:85C00F85000000006A11 // short jmp F:85C075??6A11 R:85C075006A11 Any combination of these two patches should yield total of 4 hits. You did not state a client version, so these are only tested up to 2012.
-
bWolfie got a reaction from Neffletics in @adopt atcommand
Description: Adds the @adopt command to your server.
Usage: @adopt <char name>
The adoption feature exists in the source. However, from experience, some clients don't support the right-click menu option to adopt players, rendering the feature unusable. Perhaps this atcommand should be added to the main repo.
For now, you can use this to allow your players to use the adoption system.
Download: https://github.com/bWolfie/HPM-Plugins/blob/master/src/plugins/adopt.c
-
bWolfie got a reaction from eitopop in [Guide] Mapcache Generation 2018
As of Release v2018.03.13, the method to generate mapcache for Hercules has changed. A lot of people. myself included, were confused as to how it works. In this thread, I will do my best to explain the new way to generate your cache. This guide is intended to help people using the old system, not to aid new people (i.e. never generated mapcache before), so if you are new, some of it may seem like alien talk.
Old (your source predates [is older than] Feb 18, 2018)
In the old system, there were two ways to generate mapcache
You could run the mapcache executable in Hercules root folder. Or use a program such as WeeMapCache to edit in your required mapcache. These two methods would generate or alter your required mapcache located in db/[pre-re or re]/map_cache.dat. However, they are no longer supported.
New (your source is using Release v2018.03.13 or newer)
The new system involves the use of the new 'mapcache' plugin to generate files. Some quick points:
db/[pre-re or re]/map_cache.dat has been dropped (no longer supported). In its place are individual .mcache files for every map located in maps/[pre-re or re]/ Mapcache executable has been removed. Replaced with the mapcache plugin (src/plugins/mapcache.c). How to generate the mapcache?
Same as before, check conf/map/maps.conf and db/map_index.txt have all the maps you want to cache. Your maps need to exist somewhere in your repository! There are two ways for the plugin to find them:
a. Place all your maps, including resnametable.txt, inside the data folder of your Hercules repo. I.e. Hercules/data/prontera.gat/gnd/gnd/rsw (note: I forget if all three files are needed).
b. OR Configure your conf/grf-files.txt to tell it where to find your GRF(s) which contains your maps. Build the mapcache plugin. On linux, this can be done by running the following command:
make plugin.mapcache
If using MSVC, compile as you would any other plugin. Execute plugin. This can be done using the following command:
./map-server --load-plugin mapcache [param]
In windows, just remove the './' and run the commands in your command prompt. The params:
The first thing you should do is run
./map-server --load-plugin mapcache --help
A list of usable parameters will appear. Here are the ones you need to know for mapcache:
[Info]: --convert-old-mapcache Converts an old db/pre-re/map_cache.dat file to the new format. [Mapcache] [Info]: --rebuild-mapcache Rebuilds the entire mapcache folder (maps/pre-re/), using db/map_index.txt as index. [Mapcache] [Info]: --map <name> Rebuilds an individual map's cache into maps/pre-re/ (usage: --map <map_name_without_extension>). [Mapcache] [Info]: --fix-md5 Updates the checksum for the files in maps/pre-re/, using db/map_index.txt as index (see PR #1981). [Mapcache] ./map-server --load-plugin mapcache --convert-old-mapcache
Rebuild all the .mcache files using your old db/[pre-re or re]map_cache.dat file.
NOTE: You should only run this command when you have an old map_cache.dat file you need to convert.
./map-server --load-plugin mapcache --rebuild-mapcache
Rebuild all the .mcache files using your map files specified in step 2 of generation.
NOTE: You should only run this command in special circumstances. This erases ALL the existing mapcache and rebuilds it with whatever files you provide it. If you don't have the required files, the build will fail and you will be left with missing mapcache files, meaning you won't be able to access those particular maps.
./map-server --load-plugin mapcache --map <name>
Rebuild the .mcache file for the map name you specify. E.g. if you replace <name> with prontera, the maps/[pre-re or re]/prontera.mcache file will be rebuilt.
NOTE: This is the best command to run, as it only caches a single map at a time.
./map-server --load-plugin mapcache --fix-md5
I don't know what checksum is for.
The End
Feel free to ask for help here. I'll try to answer questions re: mapcache if possible. And if you think anything needs correcting or added, let me know.
Hope this helps!
-
bWolfie reacted to eitopop in Low max SP
At lvl 151 my char's max SP suddenly dropped to 19. HP is fine.
Mainly Renewal mechanics but disabled some things, such as ASPD.
I tried #streset but that doesn't seem to help
Any ideas what is happening? Thanks.
EDIT:
Looks like when I disabled RENEWAL_ASPD, the job_db.conf from pre-re folder gets read, which doesn't have the SP Table beyond level 150.
Manually copied the HP and SP Tables from re\job_db.conf to the pre-re file. Problem solved.
-
bWolfie got a reaction from w0wZukuBg in [Showcase] Chowd Castle
this is a forum for showcasing maps. doesn't mean they are for sale like @freezing1 said.
-
bWolfie got a reaction from Zarbony in [Guide] Mapcache Generation 2018
As of Release v2018.03.13, the method to generate mapcache for Hercules has changed. A lot of people. myself included, were confused as to how it works. In this thread, I will do my best to explain the new way to generate your cache. This guide is intended to help people using the old system, not to aid new people (i.e. never generated mapcache before), so if you are new, some of it may seem like alien talk.
Old (your source predates [is older than] Feb 18, 2018)
In the old system, there were two ways to generate mapcache
You could run the mapcache executable in Hercules root folder. Or use a program such as WeeMapCache to edit in your required mapcache. These two methods would generate or alter your required mapcache located in db/[pre-re or re]/map_cache.dat. However, they are no longer supported.
New (your source is using Release v2018.03.13 or newer)
The new system involves the use of the new 'mapcache' plugin to generate files. Some quick points:
db/[pre-re or re]/map_cache.dat has been dropped (no longer supported). In its place are individual .mcache files for every map located in maps/[pre-re or re]/ Mapcache executable has been removed. Replaced with the mapcache plugin (src/plugins/mapcache.c). How to generate the mapcache?
Same as before, check conf/map/maps.conf and db/map_index.txt have all the maps you want to cache. Your maps need to exist somewhere in your repository! There are two ways for the plugin to find them:
a. Place all your maps, including resnametable.txt, inside the data folder of your Hercules repo. I.e. Hercules/data/prontera.gat/gnd/gnd/rsw (note: I forget if all three files are needed).
b. OR Configure your conf/grf-files.txt to tell it where to find your GRF(s) which contains your maps. Build the mapcache plugin. On linux, this can be done by running the following command:
make plugin.mapcache
If using MSVC, compile as you would any other plugin. Execute plugin. This can be done using the following command:
./map-server --load-plugin mapcache [param]
In windows, just remove the './' and run the commands in your command prompt. The params:
The first thing you should do is run
./map-server --load-plugin mapcache --help
A list of usable parameters will appear. Here are the ones you need to know for mapcache:
[Info]: --convert-old-mapcache Converts an old db/pre-re/map_cache.dat file to the new format. [Mapcache] [Info]: --rebuild-mapcache Rebuilds the entire mapcache folder (maps/pre-re/), using db/map_index.txt as index. [Mapcache] [Info]: --map <name> Rebuilds an individual map's cache into maps/pre-re/ (usage: --map <map_name_without_extension>). [Mapcache] [Info]: --fix-md5 Updates the checksum for the files in maps/pre-re/, using db/map_index.txt as index (see PR #1981). [Mapcache] ./map-server --load-plugin mapcache --convert-old-mapcache
Rebuild all the .mcache files using your old db/[pre-re or re]map_cache.dat file.
NOTE: You should only run this command when you have an old map_cache.dat file you need to convert.
./map-server --load-plugin mapcache --rebuild-mapcache
Rebuild all the .mcache files using your map files specified in step 2 of generation.
NOTE: You should only run this command in special circumstances. This erases ALL the existing mapcache and rebuilds it with whatever files you provide it. If you don't have the required files, the build will fail and you will be left with missing mapcache files, meaning you won't be able to access those particular maps.
./map-server --load-plugin mapcache --map <name>
Rebuild the .mcache file for the map name you specify. E.g. if you replace <name> with prontera, the maps/[pre-re or re]/prontera.mcache file will be rebuilt.
NOTE: This is the best command to run, as it only caches a single map at a time.
./map-server --load-plugin mapcache --fix-md5
I don't know what checksum is for.
The End
Feel free to ask for help here. I'll try to answer questions re: mapcache if possible. And if you think anything needs correcting or added, let me know.
Hope this helps!
-
bWolfie reacted to AnnieRuru in How to apply a diff file
getting tired of people keep sending me personal message -> how do I apply your koe patch
after about 6 PMs or so I getting really fed up,
only then I realize there is no guide to properly teach members how to apply a diff file, so here I make one for you guys
First step
A lot of people download hercules in .zip format. This is WRONG.
instead, follow the proper guide and use tortoisegit (if you are using windows) to download your server
This is the proper guide on how to install hercules
Question: but I am using rathena, not hercules
Answer: just change the link into rathena ones
https://github.com/rathena/rathena/wiki/Install-on-Windows
Second step
after you get your proper server, the first thing you have to do is get rid of your current one
this is the painful process, because you did not follow the guide
but on the up side, you can always update your server every week just by Git pull
which already mentioned in that installation topic guide
Question: but every time I Git pull, it always ask to resolve conflicts
Answer: that's the reason hercules community stop providing patch file and transition towards plugin system
you should always keep your server up to date with the latest revision as we always add new features and bug fix
nobody on the board like to give support on old emulator
Question: but rathena doesn't have plugin system
Answer: yes rathena doesn't support right now, but will be soon in the near future. rathena already slowly transition towards C++ format
Third Step
now you have a .diff file, download the file somewhere, right click on it
then point the link towards your hercules installation folder
Apply Patch Serial... Review/apply single patch... if either option doesn't work, try the other
Disclaimer:
I am windows user, so I never use Linux or Centos whatever,
so this guide is purely meant for those keep bombard my PM box over and over
-
bWolfie reacted to Dastgir in dDelays(Anti NoDelays) - Releasing this weekend
Update 27-10-2019:
dDelays will be up for Hercules in next 24 hours.
For other emulators, It will take few days (please be patient)
dDelays will be initially available for linux only, windows build is in progress and will be up with other emulator update
-
bWolfie reacted to fiction in How to use mobskilldb convert
Thank you, with that pr i has knew where was the problem reside.
Anyways, my problem was for some reason i has a dot in JExp, i changed to an integer and problem was fixed.
Exp: 18000 JExp: . Fixed
-
-
bWolfie reacted to Ridley in External Paid Services Special Offers
Writing this to share some good offers I use by myself. Neither I am nor Hercules is related to these services.
VPS Availability Check 2019-10-21
ionos.DE (ionos = 1&1) is offering a good VPS for 1€/month. The website is - as you may thought - in german, but it is simple enough to order it. You need to scroll down and select VPS S. I don't think there is any cheaper service for a small VPS like this.
1 vCore Intel® Xeon® E5 CPU 512 MB RAM 10 GB SSD 1,– €/Mon. Website: https://www.ionos.de/server/vps
Google Translated: https://translate.google.com/translate?hl=de&sl=de&tl=en&u=https%3A%2F%2Fwww.ionos.de%2Fserver%2Fvps
VPN Availability Check 2019-10-21
Windscripe is offering a free VPN Service with 20gb/month traffic for lifetime.
You need to register an account, then go to your accounts status tab and use the code FACTORY2
Free servers to use:
US Central US East US West Canada East Canada West France Germany Netherlands Norway Romania Switzerland United Kingdom Hong Kong I used it by myself a few times and got usually 80/20 mb/s (out of my usual 100/40).
____________________________________________________________________________________________
OkayFreedom VPN
OkayFreedom is offering a 1 Year free premium subscription. Simply input your email adress in the coupon link below and you will receive a code to redeem it. I did not check for the available servers location.
Website: https://www.okayfreedom.com/en
Google Translated coupon: https://translate.google.com/translate?sl=auto&tl=en&u=https%3A%2F%2Fwww.okayfreedom.com%2Fspecials%2Fchip1219%2Fof
Webhosting Availability Check 2019-10-21
To be clear: You get what you pay for - Well, nowhere else in the tech business this is truer than with web hosting, but sometimes you just need one for... well, whatever you want/need to do. Be aware there is NO free webhosting provider without security issues and you should NOT use them for a live server.
Infinity Free https://infinityfree.net/ Free SSL certificate with all plans No front-end ads Free Cloudflare CDN 10 email accounts 1 FTP account 400 MySQL databases. Byethost https://byet.host/ 5GB Disk Space FTP account and File Manager Control Panel MySQL databases & PHP Support Free tech support Unlimited Addon domain, Parked Domains, Sub-Domains Free Community Access (Forums) Clustered Servers No ads https SSL on all free hosting domains. (self signed certificate) -
bWolfie got a reaction from Naruto in How to disable certain skills from being copied by rogue class?
Requires source edit. Go to src/map/skill.c, find static int can_copy().
Anywhere after nullpo_ret(sd); you can put your conditions.
if (skill_id == WZ_WATERBALL) return 0;
If you want to carryover skill_lv, you need to edit 2 lines.
Change 1, find line:
can_copy(tsd,copy_skill,bl)) // Split all the check into their own function [Aru]
Change to:
can_copy(tsd, copy_skill, skill_lv, bl)) // Split all the check into their own function [Aru]
Change 2, find line:
static int can_copy(struct map_session_data *sd, uint16 skill_id, struct block_list *bl)
Change to:
static int can_copy(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, struct block_list *bl)
-
bWolfie got a reaction from Tsuuu in how to optimize this script
In my opinion, best thing to do is to save all data as char_reg variables, e.g.
WoE_Kill += 1;
And then once WoE is finished, run a SQL query to copy data from char_reg_num_db and char_reg_str_db to your custom table. E.g.
OnAgitEnd: query_sql("TRUNCATE TABLE `woe_rank`;"); // clear old data. this table is only used to hold temporary values for displaying elsewhere .@count = query_sql("SELECT `char_id`, `value` FROM `char_reg_num_db` WHERE `key` = 'WoE_Kill';", .@CID, .@WoE_Kill); for (.@i = 0; .@i < .@count; .@i++) { query_sql(sprintf("INSERT INTO `woe_rank`(`char_id`, `kills`) VALUES(%d, %d);", .@CID, .@WoE_Kill)); sleep(50); // don't perform too many queries at once (20 per second) } end; So then the query_sql() command is only being run under controlled circumstances, and only used once.
-
bWolfie reacted to Dastgir in September Digest 2019
For pre-re:
python itemcombodbconverter.py --mode pre-re > item_combo_db.conf For re:
python itemcombodbconverter.py --mode re > item_combo_db.conf then move the item_combo_db.conf to your db folder