Just a heads up I am very limited on time so releases will come slowly. Monster and Item releases will follow. Not all of the instances have been cleaned up yet so I won't add those until that has been done. These instances and quests were either released on Herc or rAthena and then translated and cleaned up by my team. We have invested months of our time in order to compile all of the information. Not much needs to be said here as it is all said in the git.
All I ask in return it to encourage sharing in the community.
https://github.com/WoonRO/share
Monster and item info was gathered from the following websites:
http://www.divine-pride.net/
http://ro.gnjoy.com/guide/runemidgarts/
http://kafra.kr/#!/en/KRO/
http://db.123ro.cn/
And:
https://github.com/rosfus/cRO
Additional Instance information was gotten from forums such as:
http://forum.gamer.com.tw/
rAthena: I will not be making an official release topic on rA since I do not feel it is my place to release content that is not ready for you. Though some of you have already contacted me and started converting the instances to rAthena. If you send those to me I will add them to the git under an rAthena folder, don't be jerks and not share. rAthena deserves some love too.
Side note: Some of these instances require source edits such as getmobdata, setmobdata, specialeffects3, mobremove. I'm in the process of making these into plugins but my source knowledge is crap. All the information you need for these source edits can be found on the forums and some stuff you will have to search the web. If anyone wants to make plugin versions of these that would be much appreciated. It is possible btw, I know for a fact it is because I have a super messy version of getmobdata, but it works.
Hello, here is the adapted version of
@emotion @heart @show @hold @detach
commands so popular in the Russian eA, rA, Herc community.
I don't claim to be the Author, credit for the work goes to each mod respective Author.
I just made all of them into Hercules plugins and changed source code a little...
emotion.c
@emotion 0 - 81 without delay. Now, you can do nasty spam with emotions.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "../common/HPMi.h"
#include "../map/clif.h"
#include "../map/atcommand.h"
#include "../map/script.h"
#include "../map/pc.h"
#include "../common/nullpo.h"
#include "../common/HPMDataCheck.h"
HPExport struct hplugin_info pinfo =
{
"@emotion", // Plugin name
SERVER_TYPE_MAP,// Which server types this plugin works with?
"0.1", // Plugin version
HPM_VERSION, // HPM Version (don't change, macro is automatically updated)
};
/*==========================================
* @emotion X by Anarchist
* => Displays the emotions without delay
*------------------------------------------*/
int emotion_max = 81; // Set las emotion number available forr this command
ACMD(emotion)
{
nullpo_retr(-1, sd);
char err_msg[1024];
if(!message || !*message || atoi(message)<0 || atoi(message)>emotion_max)
{
sprintf(err_msg, "usage: @emotion 0-%d", emotion_max);
clif->message(fd, err_msg);
return -1;
}
clif->emotion(&sd->bl,atoi(message));
return 1;
}
/* Server Startup */
HPExport void plugin_init (void)
{
addAtcommand("emotion",emotion);
}
heart.c
@heart 1 or 2 (heart emotion without delay)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "../common/HPMi.h"
#include "../map/clif.h"
#include "../map/atcommand.h"
#include "../map/script.h"
#include "../map/pc.h"
#include "../common/nullpo.h"
#include "../common/HPMDataCheck.h"
HPExport struct hplugin_info pinfo =
{
"@heart", // Plugin name
SERVER_TYPE_MAP,// Which server types this plugin works with?
"0.1", // Plugin version
HPM_VERSION, // HPM Version (don't change, macro is automatically updated)
};
/*==========================================
@heart X by Anarchist
=> Displays the heart special effect
------------------------------------------
*/
ACMD(heart)
{
nullpo_retr(-1, sd);
if(!message || !*message || atoi(message)<0 || atoi(message)>2)
{
clif->message(fd, "usage: @heart 1 or 2");
return -1;
}
if(atoi(message)==1)
{
clif->specialeffect(&sd->bl,364,0);
}
else if(atoi(message)==2)
{
clif->specialeffect(&sd->bl,509,0);
}
return 1;
}
/* Server Startup */
HPExport void plugin_init (void)
{
addAtcommand("heart",heart);
}
dance.c
@dance 1 - 8 (character perform different tricks...)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "../common/HPMi.h"
#include "../map/clif.h"
#include "../map/atcommand.h"
#include "../map/script.h"
#include "../map/pc.h"
#include "../common/nullpo.h"
#include "../common/HPMDataCheck.h"
HPExport struct hplugin_info pinfo =
{
"@dance", // Plugin name
SERVER_TYPE_MAP,// Which server types this plugin works with?
"0.1", // Plugin version
HPM_VERSION, // HPM Version (don't change, macro is automatically updated)
};
/*==========================================
@dance X by Anarchist
=> Special effects with dance style
------------------------------------------
*/
ACMD(dance)
{
nullpo_retr(-1, sd);
if(!message || !*message || atoi(message)<0 || atoi(message)>9)
{
clif->message(fd, "usage: @dance 1-9");
return -1;
}
switch(atoi(message))
{
case 1 :
clif->specialeffect(&sd->bl,413,0);
break;
case 2 :
clif->specialeffect(&sd->bl,414,0);
break;
case 3 :
clif->specialeffect(&sd->bl,415,0);
break;
case 4 :
clif->specialeffect(&sd->bl, 426,0);
break;
case 5 :
clif->specialeffect(&sd->bl,458,0);
break;
case 6 :
clif->specialeffect(&sd->bl,466,0);
break;
case 7 :
clif->specialeffect(&sd->bl,501,0);
break;
case 8 :
clif->specialeffect(&sd->bl,540,0);
break;
case 9 :
clif->specialeffect(&sd->bl,550,0);
break;
}
return 1;
}
/* Server Startup */
HPExport void plugin_init (void)
{
addAtcommand("dance",dance);
}
show.c
@show X Y (Displays a red dot on the minimap for the given coordinates, useful when searching for quest npc or a merchant selling needed items....)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "../common/HPMi.h"
#include "../map/clif.h"
#include "../map/atcommand.h"
#include "../map/script.h"
#include "../map/pc.h"
#include "../common/nullpo.h"
#include "../common/HPMDataCheck.h"
HPExport struct hplugin_info pinfo =
{
"@show", // Plugin name
SERVER_TYPE_MAP,// Which server types this plugin works with?
"0.1", // Plugin version
HPM_VERSION, // HPM Version (don't change, macro is automatically updated)
};
/*==========================================
* @show by KarLaeda
* => Displays the point on minimap
*------------------------------------------*/
ACMD(show)
{
int x = 0, y = 0;
nullpo_retr(-1, sd);
if(!message || !*message || (sscanf(message, "%d %d", &x, &y) != 2))
{
clif->message(fd, "usage: @show <x> <y>");
return -1;
}
clif->viewpoint(sd, 1, 1, x, y, 2, 0xFF0000);
return 1;
}
/* Server Startup */
HPExport void plugin_init (void)
{
addAtcommand("show",show);
}
hold.c
@hold (Disables / Enables character movement, useful on low rates to Archer/Mages when leveling on immobile monsters)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "../common/HPMi.h"
#include "../map/clif.h"
#include "../map/atcommand.h"
#include "../map/script.h"
#include "../map/pc.h"
#include "../common/nullpo.h"
#include "../common/HPMDataCheck.h"
HPExport struct hplugin_info pinfo =
{
"@hold", // Plugin name
SERVER_TYPE_MAP,// Which server types this plugin works with?
"0.1", // Plugin version
HPM_VERSION, // HPM Version (don't change, macro is automatically updated)
};
/*==========================================
* @hold by Voidless
*==========================================*/
ACMD(hold)
{
nullpo_retr(-1, sd);
if (!sd->state.blockedmove)
{
sd->state.blockedmove=1;
clif->message(fd, "Character movement turned off");
}
else
{
sd->state.blockedmove=0;
clif->message(fd, "Character movement turned on");
}
return 1;
}
/* Server Startup */
HPExport void plugin_init (void)
{
addAtcommand("hold",hold);
}
For this plugin, I used the work : http://herc.ws/board/topic/2615-atcommand-afk/
of Mhalicot : http://herc.ws/board/user/1582-mhalicot/
To inspire myself...
detach.c
@detach (leaves character in game while client can be disconnected)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../common/HPMi.h"
#include "../common/timer.h"
#include "../common/nullpo.h"
#include "../map/channel.h"
#include "../map/script.h"
#include "../map/pc.h"
#include "../map/clif.h"
#include "../map/chat.h"
#include "../map/battle.h"
#include "../map/status.h"
#include "../common/HPMDataCheck.h"
HPExport struct hplugin_info pinfo =
{
"@detach", // Plugin name
SERVER_TYPE_MAP,// Which server types this plugin works with?
"0.1", // Plugin version
HPM_VERSION, // HPM Version (don't change, macro is automatically updated)
};
/*==========================================
* @detach
*==========================================*/
ACMD(detach)
{
nullpo_retr(-1, sd);
if( pc_isdead(sd) ) {
clif->message(fd, "Cannot use @detach if you are dead.");
return true;
}
if( map->list[sd->bl.m].flag.autotrade == battle->bc->autotrade_mapflag )
{
if(map->list[sd->bl.m].flag.pvp || map->list[sd->bl.m].flag.gvg){
clif->message(fd, "You may not use @detach when you are on maps PVP or GVG.");
return true;
}
sd->state.monster_ignore = 0;
sd->state.autotrade = 1;
chat->create_pc_chat(sd, "DETACH", "", 1, true);
sd->sc.opt1 = OPT1_STONE;
pc->setoption(sd, sd->sc.option);
pc_setsit(sd);
skill->sit(sd,1);
clif->sitting(&sd->bl);
channel->quit(sd);
clif->authfail_fd(sd->fd, 15);
return true;
}
else
{
clif->message(fd, "@detach is not allowed on this map.");
return true;
}
}
/* Server Startup */
HPExport void plugin_init (void)
{
addAtcommand("detach",detach);
}
Put all .c files inside src/plugins
in the file src/plugins/makefile.in include the plugins
MYPLUGINS = show heart emotion dance hold detach
run commmand : make plugins
in file conf/plugins.conf
add plugins
plugins_list: [
/* Enable HPMHooking when plugins in use rely on Hooking */
//"HPMHooking",
//"db2sql",
//"sample",
//"other",
"show",
"heart",
"emotion",
"dance",
"hold",
"detach"
]
Start server, enhoy
I decided to share all my instance scripts with the community to thank back.
I have spent mass of time to TRY TO write the official instance scripts.
However, they are "semi-official" because:
1. I only get information from youtube, so I cannot make sure everything is correct.
2. some of them are from jRO, which has its own custom things.
**WHAT YOU NEED TO KNOW**
0. These scripts are NOT ready to use, you may need a lot of time to merge them into your servers.
1. All the NPC talks are written in Chinese because I am opening a server for Chinese players. My plan is to slowly translate it back to English, but I might not have enough time to do this, so it is very welcome if you can help to translate it.
2. I have made some custom script commands for the scripts, I will provide a patch for these commands in this weekend.
3. Some mobs and skills are not implemented in the Hercules yet
4. You will find some of the scripts are really messy, I am sorry for that. I will slowly clean them up and update the package.
5. I will slowly update this package, but you can use it if you want, and any help to merge it into Hercules will be greatly appreciated.
**WHAT I CAN DO FURTHER WITH YOUR HELP**
1. If you can provide some replay or video or some detailed information for official instances, I can correct the non-official part in these scripts
2. If you can record npc talks in iRO, I can quickly replace the texts with the English ones.
3. If you can record npc talks in kRO, I can slowly translate them into English, as well as Chinese.
-------------------------------------------Update: 01/06/2016------------------------------------------------------------------
Old Glast Heim, hard mode
Comments:
Texts in Old Glast Heim hard mode is replaced with Euphy's texts.
Copied Euphy's entrance part for entering the Old Glast Heim (Hard mode), here if some one could provide information about the official entrance part, I can re-write this part.
Skill Venom Fog is not implemented in Hercules yet, the patch is for this skill, but the behavior is not 100% official, more information is needed.
Special skills for the MVPs are also not 100% official, the detailed information about this part is difficult to get.
There should be an skill unit in this instance according to aegis, but I cannot find the proper one, so I assigned 2960 here, which is the same skill unit used in Devil tower (I named it Morroc Tower here).
To have it run, there are still some work to do:
1. The mob ids in OGH-HM are 3139 to 3152 and a skill unit (I used 2960), since my mobs are highly custom due to lack of info, I am not sharing these.
You can simply copy the OGH monsters to these id and make them stronger.
2. The map 1@gl_kh and 2@gl_kh is not in Hercules yet, you need add it to your maplist and run the map_cache for it.
I am going to translate Faceworm script in this weekend, since it is easy to find iRO video for that.
instances package v0.2 (Chinese).rar
OldGlastHeim_HM_Eng.txt
OGH-HM.patch
"." - A NPC variable.
They exist in the NPC and disappear when the server restarts or
the NPC is reloaded. Can be accessed from inside the NPC or by
calling 'getvariableofnpc'. Function objects can also have
.variables which are accessible from inside the function,
however 'getvariableofnpc' does NOT work on function objects.
In your herc folder look under doc/script_commands.txt line 438 starts the variable explanation.
That script is using .mvpid .itemid and so on. Look in that document for a more appropriate way of setting the variable. A lot of people here could just give you the answer but I think you will find it a lot more rewarding if you figure it out your self, just use replace all in notepad++
If you can't figure it out then let us know, if you do figure it out also let us know
A few of us from my team have been in touch with some of the devs and we understand a bit how things work around here. Each dev has their own style and is a totally unique person. No one is paid for developing hercules to the next step, if they are paid it is because of a per project basis. Everyone chooses what they will work on and if they feel like working on it they will do it and if their time permits they will do it. If they have paid jobs pending then they will do those first. I have found a few of the devs to be extremely helpful and respond relatively quickly to my own scripting questions... as long as it's not the weekend. Judging from your post it seems you feel they are obligated to help you. Which is totally not the case since no one is going to build an RO server for you.
Could they prioritize better and work on different things? Possibly, but posts like that won't encourage them.
Basically you enter a new town, and you gain Base & Job EXP! Supports ONLY towns currently I will update it with every map in the game, but be patient.
If you download my work, the least I could get is a thanks or a rep up... C'mon hercules, don't leech, be nice leechers!
onnewmapexp.txt