I won't give you a full guide but in general it's pretty easy:
1. Modify your router to forward the ports you use for RO to the computer you are using to run the server software on.
2. Make sure that computer has a fixed IP.
3. Set up IP and correct subnet in the conf files.
4. Tell your friends your external IP or give them an appropriate clientinfo.xml file.
5. ???
6. Profit
You'll have to write your own handling what should happen when a PC has SC_REBIRTH. Right now it only handles monsters (status.c -> status_damage):
if (target->type == BL_MOB && sc && sc->data[SC_REBIRTH] && !((TBL_MOB*) target)->state.rebirth) { // Ensure the monster has not already rebirthed before doing so.
status_revive(target, sc->data[SC_REBIRTH]->val2, 0);
status_change_clear(target,0);
((TBL_MOB*)target)->state.rebirth = 1;
return (int)(hp+sp);
}
It's a lot easier to work with hex though. Because each character will always exactly have 4 bits (1, 2, 4 and 8) and then you just need to add those together and you have A=10 to F=15.
So if you have modes 0x0001, 0x0004, 0x0008, 0x0020, 0x0800, 0x1000 and 0x2000 you can just calculate it in your head: 0x382D
With decimals you'd probably need a calculator.
1. Fix position lag issues.
2. Revert to pre-renewal but keep and all renewal maps added in a rebalanced way. Change 3rd classes to alternative trans classes (so from Swordsman High you can decide if you want to become a Lord Knight or a Rune Knight) and rebalance them.
3. Rebalance several monsters, so there are not just a few monsters worth killing.
It should be fine Backslide was already coded so it's not prevent by "No Knockback" equips:
case TF_BACKSLIDING: //This is the correct implementation as per packet logging information. [Skotlex]
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
skill_blown(src,bl,skill_get_blewcount(skill_id,skill_lv),unit_getdir(bl),2);
break;
/**
* Used to knock back players, monsters, traps, etc
* @param src Object that give knock back
* @param target Object that receive knock back
* @param count Number of knock back cell requested
* @param dir Direction indicates the way OPPOSITE to the knockback direction (or -1 for default behavior)
* @param flag
0x01 - position update packets must not be sent
0x02 - ignores players' special_state.no_knockback
These flags "return 'count' instead of 0 if target is cannot be knocked back":
0x04 - at WOE/BG map
0x08 - if target is MD_KNOCKBACK_IMMUNE
0x10 - if target has 'special_state.no_knockback'
0x20 - if target is in Basilica area
* @return Number of knocked back cells done
*/
Cloaking ending conditions are all over the place, check battle.c and status.c.
I think the main part is in status.c in function "status_damage", there it lists all status changes that end when taking damage.
// 16 inf3 (skill information 3):// 0x00001 - skill ignores land protector
653,0,8,4,0,0x6,5:7:9:11:13:5:7:9:11:13,10,1,no,0,0x40002,0,magic,0,0x0, NPC_EARTHQUAKE,Earthquake
Try to change the 0x0 to 0x1.
And 9999 DEF / 9999 MDEF is probably too high. And it could be that 65535 damage is actually max for base damage, but not sure. Higher values are risking an overflow, so not sure about that.
Even if those class are not on my game? What cause them to be loaded? I don't even want them
If you don't want them in game, edit the at job command and remove the npcs, so they are unobtainable. That or do large src and db edits to remove completely.
Personally id just remove their skill tree and lower their max level to 1/1.
He just doesn't want the jobs to be read from the database. I'm just not sure how rAthena even knows which jobs to look for. Maybe job_db?
You'll have to work a bit with the code.
I give you one example in skill.c, find:
// Autospell when attacking if( sd && !status_isdead(bl) && sd->autospell[0].id )
If you scroll a bit further down inside that block you'll see:
//Set canact delay. [Skotlex] ud = unit_bl2ud(src); if (ud) { rate = skill_delayfix(src, skill, autospl_skill_lv); if (DIFF_TICK(ud->canact_tick, tick + rate) < 0){ ud->canact_tick = max(tick + rate, ud->canact_tick); if ( battle_config.display_status_timers && sd ) clif_status_change(src, SI_ACTIONDELAY, 1, rate, 0, 0, 0); } }
If you remove that part, you have removed aftercast delay for autospells when attacking. Now you need to do the same for autospell when being hit. The code to be removed actually looks identical so you should be able to find it easily, just search for the comment from Skotlex.
If you wanted full renewal, you should actually not change anything in renewal.h. It's renewal by default. If you uncomment the PRERE define there, it will actually be pre-renewal.
Ok, can confirm it, but it has to do with the dissonance song overlap effect. Enemies inside that are killed throw skill id error 0. Enemies that lost overlap effect throw skill id error 65535.
Created issue on github: https://github.com/rathena/rathena/issues/1341