Look ill even show you how to do it, and ill even answer any questions you may have after reading this if you still have some.
1)Go to your ENGLISH TRANSLATION GRF
>LUAFILES514
>LUA FILES
>SKILLINFOZ
Extract skillid.lub and open it in notepad
You want it to look like this
RL_HAMMER_OF_GOD = 2571,
RL_R_TRIP_PLUSATK = 2572,
RL_B_FLICKER_ATK = 2573,
SJ_LIGHTOFMOON = 2574,
SJ_LUNARSTANCE = 2575,
SJ_FULLMOONKICK = 2576,
SJ_LIGHTOFSTAR = 2577,
SJ_STARSTANCE = 2578,
SJ_NEWMOONKICK = 2579,
SJ_FLASHKICK = 2580,
SJ_STAREMPEROR = 2581,
SJ_NOVAEXPLOSING = 2582,
SJ_UNIVERSESTANCE = 2583,
SJ_FALLINGSTAR = 2584,
SJ_GRAVITYCONTROL = 2585,
SJ_BOOKOFDIMENSION = 2586,
SJ_BOOKOFCREATINGSTAR = 2587,
SJ_DOCUMENT = 2588,
SJ_PURIFY = 2589,
SJ_LIGHTOFSUN = 2590,
SJ_SUNSTANCE = 2591,
SJ_SOLARBURST = 2592,
SJ_PROMINENCEKICK = 2593,
SJ_FALLINGSTAR_ATK = 2594,
SJ_FALLINGSTAR_ATK2 = 2595,
SP_SOULGOLEM = 2596,
SP_SOULSHADOW = 2597,
SP_SOULFALCON = 2598,
SP_SOULFAIRY = 2599,
SP_CURSEEXPLOSION = 2600,
SP_SOULCURSE = 2601,
SP_SPA = 2602,
SP_SHA = 2603,
SP_SWHOO = 2604,
SP_SOULUNITY = 2605,
SP_SOULDIVISION = 2606,
SP_SOULREAPER = 2607,
SP_SOULREVOLVE = 2608,
SP_SOULCOLLECT = 2609,
SP_SOULEXPLOSION = 2610,
SP_SOULENERGY = 2611,
SP_KAUTE = 2612,
refer to this for all your ids
2) Fill in your DB > Skill_DB (re or pre re)
{
Id: 2574
Name: "SJ_LIGHTOFMOON"
Description: "Light of Moon"
MaxLevel: 5
Hit: "BDT_SKILL"
SkillType: {
Self: true
}
AttackType: "Weapon"
DamageType: {
NoDamage: true
}
SkillData1: {
Lv1: 20000
Lv2: 30000
Lv3: 40000
Lv4: 50000
Lv5: 60000
}
CoolDown: 0
Requirements: {
SPCost: 8
}
},
{
Id: 2575
Name: "SJ_LUNARSTANCE"
Description: "Lunar Stance"
MaxLevel: 3
Hit: "BDT_SKILL"
SkillType: {
Self: true
}
AttackType: "Weapon"
DamageType: {
NoDamage: true
}
Requirements: {
SPCost: 1
}
},
{
Id: 2576
Name: "SJ_FULLMOONKICK"
Description: "Full Moon Kick"
MaxLevel: 7
Hit: "BDT_SKILL"
SkillType: {
Self: true
}
SkillInfo: {
AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
SplashArea: true
}
SplashRange: 7
CastTime: 0
CoolDown: 0
Requirements: {
SPCost: {
Lv1: 1
Lv2: 1
Lv3: 1
Lv4: 1
Lv5: 1
Lv6: 1
Lv7: 1
}
}
},
{
Id: 2577
Name: "SJ_LIGHTOFSTAR"
Description: "Light of Star"
MaxLevel: 5
Hit: "BDT_SKILL"
SkillType: {
Self: true
}
AttackType: "Weapon"
DamageType: {
NoDamage: true
}
SkillData1: {
Lv1: 20000
Lv2: 30000
Lv3: 40000
Lv4: 50000
Lv5: 60000
}
CoolDown: 0
Requirements: {
SPCost: 8
}
},
{
Id: 2578
Name: "SJ_STARSTANCE"
Description: "Star Stance"
MaxLevel: 3
Hit: "BDT_SKILL"
SkillType: {
Self: true
}
AttackType: "Weapon"
DamageType: {
NoDamage: true
}
Requirements: {
SPCost: 1
}
},
{
Id: 2579
Name: "SJ_NEWMOONKICK"
Description: "New Moon Kick"
MaxLevel: 7
Hit: "BDT_SKILL"
SkillType: {
Self: true
}
SkillInfo: {
AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
DamageType: {
SplashArea: true
}
SplashRange: 7
CastTime: 0
CoolDown: 0
Requirements: {
SPCost: {
Lv1: 1
Lv2: 1
Lv3: 1
Lv4: 1
Lv5: 1
Lv6: 1
Lv7: 1
}
}
},
{
Id: 2580
Name: "SJ_FLASHKICK"
Description: "Flash Kick"
MaxLevel: 7
Range: 7
Hit: "BDT_SKILL"
SkillType: {
Enemy: true
}
SkillInfo: {
AllowReproduce: true
}
AttackType: "Weapon"
Element: "Ele_Weapon"
CastTime: 0
CoolDown: 0
SkillData1: {
Lv1: 4000
Lv2: 5000
Lv3: 6000
Lv4: 7000
Lv5: 8000
Lv6: 9000
Lv7: 10000
}
Requirements: {
SPCost: {
Lv1: 1
Lv2: 1
Lv3: 1
Lv4: 1
Lv5: 1
Lv6: 1
Lv7: 1
}
}
},
You can like at 3ceam emulator, he has it all filled in , but in rathena database but its really simple and anyone who knows ragnarok should be able to tell if its a simple bash skill with a teleport or something from a buff or stance, you can just ask me if you dont know.
3)go to SRC>MAP
Open skill.h
Im being really specific about it cause i dont really trust this thing but:
RL_HAMMER_OF_GOD,
RL_R_TRIP_PLUSATK,
RL_B_FLICKER_ATK,
SJ_LIGHTOFMOON = 2574,
SJ_LUNARSTANCE = 2575,
SJ_FULLMOONKICK = 2576,
SJ_LIGHTOFSTAR = 2577,
SJ_STARSTANCE = 2578,
SJ_NEWMOONKICK = 2579,
SJ_FLASHKICK = 2580,
SJ_STAREMPEROR = 2581,
SJ_NOVAEXPLOSING = 2582,
SJ_UNIVERSESTANCE = 2583,
SJ_FALLINGSTAR = 2584,
SJ_GRAVITYCONTROL = 2585,
SJ_BOOKOFDIMENSION = 2586,
SJ_BOOKOFCREATINGSTAR = 2587,
SJ_DOCUMENT = 2588,
SJ_PURIFY = 2589,
SJ_LIGHTOFSUN = 2590,
SJ_SUNSTANCE = 2591,
SJ_SOLARBURST = 2592,
SJ_PROMINENCEKICK = 2593,
SJ_FALLINGSTAR_ATK = 2594,
SJ_FALLINGSTAR_ATK2 = 2595,
SP_SOULGOLEM = 2596,
SP_SOULSHADOW = 2597,
SP_SOULFALCON = 2598,
SP_SOULFAIRY = 2599,
SP_CURSEEXPLOSION = 2600,
SP_SOULCURSE = 2601,
SP_SPA = 2602,
SP_SHA = 2603,
SP_SWHOO = 2604,
SP_SOULUNITY = 2605,
SP_SOULDIVISION = 2606,
SP_SOULREAPER = 2607,
SP_SOULREVOLVE = 2608,
SP_SOULCOLLECT = 2609,
SP_SOULEXPLOSION = 2610,
SP_SOULENERGY = 2611,
SP_KAUTE = 2612,
KO_YAMIKUMO = 3001,
KO_RIGHT,
KO_LEFT,
KO_JYUMONJIKIRI,
KO_SETSUDAN,
KO_BAKURETSU,
KO_HAPPOKUNAI,
KO_MUCHANAGE,
KO_HUUMARANKA,
KO_MAKIBISHI,
KO_MEIKYOUSISUI,
KO_ZANZOU,
KO_KYOUGAKU,
KO_JYUSATSU,
KO_KAHU_ENTEN,
KO_HYOUHU_HUBUKI,
KO_KAZEHU_SEIRAN,
KO_DOHU_KOUKAI,
KO_KAIHOU,
KO_ZENKAI,
KO_GENWAKU,
KO_IZAYOI,
KG_KAGEHUMI,
KG_KYOMU,
KG_KAGEMUSYA,
OB_ZANGETSU,
OB_OBOROGENSOU,
OB_OBOROGENSOU_TRANSITION_ATK,
OB_AKAITSUKI,
4)go to skill.c in same folder
I added these right above magnum break
case SJ_LUNARSTANCE:
case SJ_LIGHTOFSTAR:
case SJ_STARSTANCE:
case SJ_LIGHTOFMOON:
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
break;
case SM_MAGNUM:
case MS_MAGNUM:
if( flag&1 ) {
//Damage depends on distance, so add it to flag if it is > 1
skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag|SD_ANIMATION|distance_bl(src, bl));
}
break;
now i have accesss to all the buff's visual effects, these are realllly simple things to script though i just dont need it
and for our attack skills...
since fullmoonkick is an splash attack from our skill_db (we wanna make it like arrow storm but centered on ourself so we set the
SkillType: {
Self: true
}
and set our splash to 7 )
case AS_GRIMTOOTH:
case MC_CARTREVOLUTION:
case NPC_SPLASHATTACK:
flag |= SD_PREAMBLE; // a fake packet will be sent for the first target to be hit
FALLTHROUGH
case AS_SPLASHER:
case SM_CANNONSHOT:
case HT_BLITZBEAT:
case SOUL_BLAST:
case AM_WATER:
case AC_SHOWER:
case MA_SHOWER:
case LG_BANISHINGPOINT:
case MG_NAPALMBEAT:
case MG_FIREBALL:
case RG_RAID:
case HW_NAPALMVULCAN:
case NJ_HUUMA:
case NJ_BAKUENRYU:
case ASC_METEORASSAULT:
case GS_DESPERADO:
case GS_SPREADATTACK:
case NPC_PULSESTRIKE:
case NPC_HELLJUDGEMENT:
case SM_SLOWSHOT:
case NPC_VAMPIRE_GIFT:
case WL_SOULEXPANSION:
case SJ_FULLMOONKICK:
case SJ_NEWMOONKICK:
case WL_CRIMSONROCK:
case WL_COMET:
case WL_JACKFROST:
case RA_ARROWSTORM:
case RA_WUGDASH:
case NC_VULCANARM:
case NC_ARMSCANNON:
case NC_SELFDESTRUCTION:
case NC_AXETORNADO:
case GC_ROLLINGCUTTER:
case GC_COUNTERSLASH:
case LG_MOONSLASHER:
case LG_EARTHDRIVE:
case SR_TIGERCANNON:
case SR_RAMPAGEBLASTER:
case SR_SKYNETBLOW:
case SR_WINDMILL:
case SR_RIDEINLIGHTNING:
case WM_REVERBERATION:
case SO_VARETYR_SPEAR:
case GN_CART_TORNADO:
case GN_CARTCANNON:
case KO_HAPPOKUNAI:
case KO_HUUMARANKA:
case KO_MUCHANAGE:
case KO_BAKURETSU:
case GN_ILLUSIONDOPING:
case MH_XENO_SLASHER:
case SU_SCRATCH:
case GS_RAPIDSHOWER:
case GS_SLAM:
case RL_AM_BLAST:
case SU_LUNATICCARROTBEAT:
if (flag&1) { //Recursive invocation
// skill->area_temp[0] holds number of targets in area
// skill->area_temp[1] holds the id of the original target
// skill->area_temp[2] counts how many targets have already been processed
int sflag = skill->area_temp[0] & 0xFFF, heal;
struct status_change *tsc = status->get_sc(bl);
if( flag&SD_LEVEL )
sflag |= SD_LEVEL; // -1 will be used in packets instead of the skill level
if( (skill->area_temp[1] != bl->id && !(skill->get_inf2(skill_id)&INF2_NPC_SKILL)) || flag&SD_ANIMATION )
sflag |= SD_ANIMATION; // original target gets no animation (as well as all NPC skills)
if ( tsc && tsc->data[SC_HOVERING] && ( skill_id == SR_WINDMILL || skill_id == LG_MOONSLASHER ) )
break;
I added it above arrow storm since thats what im trying to make
not sure what flash kick looks like but needs some work but most single target skills would just require this (read basic custom skill tutorial and learn about adding bolts)
case WM_SEVERE_RAINSTORM_MELEE:
case WM_GREAT_ECHO:
case GN_SLINGITEM_RANGEMELEEATK:
case KO_SETSUDAN:
case GC_DARKCROW:
case NPC_CONRAY:
case LG_OVERBRAND_BRANDISH:
case PA_PRESSURE:
case LG_OVERBRAND:
case KN_LIGHTNINGSWING:
case SJ_FLASHKICK:
skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
break;
5) then you wanna do your battle damage calculators, go to battle.c
Doesnt really matter where you put this but ill just put it on top of the ranger
case SJ_FULLMOONKICK:
skillratio += 900 + 80 * skill_lv;
RE_LVL_DMOD(100);
break;
/**
* Ranger
**/
case RA_ARROWSTORM:
skillratio += 900 + 80 * skill_lv;
RE_LVL_DMOD(100);
break;
case RA_AIMEDBOLT:
skillratio += 400 + 50 * skill_lv;
RE_LVL_DMOD(100);
break;
case RA_CLUSTERBOMB:
skillratio += 100 + 100 * skill_lv;
break;
case RA_WUGDASH:// ATK 300%
skillratio = 300;
if( sc && sc->data[SC_DANCE_WITH_WUG] )
skillratio += 10 * sc->data[SC_DANCE_WITH_WUG]->val1 * (2 + battle->calc_chorusbonus(sd));
break;
Dont really know what this re_lvl_dmod thing is but whatever
6) open visual studio or whatever you use to recompile your stuff, and rebuild the solution or whatever you did to get your "run-server.bat" working
7)Now we are going back to step 1........... open your grf editor and your english translation
same folder as before luafiles514>luafiles>skillinfoz
extract skillinfolist or skillinfo (not skillinfo_f)
doesnt matter where but this is how we get our icons and stuff
[SKID.RL_HAMMER_OF_GOD] = {
"RL_HAMMER_OF_GOD",
SkillName = "Hammer of God",
MaxLv = 5,
SpAmount = { 35, 40, 45, 50, 55 },
bSeperateLv = true,
AttackRange = { 7, 8, 9, 10, 11 },
_NeedSkillList = {
{ SKID.RL_RICHS_COIN, 1 },
{ SKID.RL_AM_BLAST, 3 }
}
},
[SKID.SJ_LIGHTOFMOON] = {
"SJ_LIGHTOFMOON",
SkillName = "Light of Moon",
MaxLv = 5,
SpAmount = { 8 },
bSeperateLv = true,
AttackRange = { 1 }
},
[SKID.SJ_LUNARSTANCE] = {
"SJ_LUNARSTANCE",
SkillName = "Lunar Stance",
MaxLv = 3,
SpAmount = { 1 },
bSeperateLv = true,
AttackRange = { 1 }
},
[SKID.SJ_FULLMOONKICK] = {
"SJ_FULLMOONKICK",
SkillName = "Full Moon Kick",
MaxLv = 7,
SpAmount = { 1, 1, 1, 1, 1, 1, 1 },
bSeperateLv = true,
AttackRange = { 7 }
},
[SKID.SJ_LIGHTOFSTAR] = {
"SJ_LIGHTOFSTAR",
SkillName = "Light of Star",
MaxLv = 5,
SpAmount = { 8 },
bSeperateLv = true,
AttackRange = { 1 }
},
[SKID.SJ_STARSTANCE] = {
"SJ_STARSTANCE",
SkillName = "Star Stance",
MaxLv = 3,
SpAmount = { 1 },
bSeperateLv = true,
AttackRange = { 1 }
},
[SKID.SJ_NEWMOONKICK] = {
"SJ_NEWMOONKICK",
SkillName = "New Moon Kick",
MaxLv = 7,
SpAmount = { 1, 1, 1, 1, 1, 1, 1 },
bSeperateLv = true,
AttackRange = { 7 }
},
[SKID.SJ_FLASHKICK] = {
"SJ_FLASHKICK",
SkillName = "Flash Kick",
MaxLv = 7,
SpAmount = { 1, 1, 1, 1, 1, 1, 1 },
bSeperateLv = true,
AttackRange = { 7 }
},
make sure you add skillid.lub/lua and skillinfolist.lub/lua back to your grf
save
8)do the same with your skilldescript but you should get it by now
Go in game and make an item with all these skills to test,
Go read a tutorial on adding jobs if your game didnt come with it
Congrats youve caught up to the hercules team