Jump to content

newbieppl

Members
  • Content Count

    6
  • Joined

  • Last visited

Posts posted by newbieppl


  1. It seems the refinement of shadow equipment is not treated as stated in the new shadow refiner script:

     

    Shadow weapon, ATK +1, MATK +1 for each refinement

    Other shadow gears, HP +10 for each refinement

     

    Instead, the refinement increases DEF just as normal armors.

     

    So I slightly modified the "src/map/status.c", it might be useful to you.

    But I only tested it for a few hours, not sure if it has bugs.

    		else if (sd->inventory_data[index]->type == IT_ARMOR) {			int r;			if ((r = sd->status.inventory[index].refine))				if (i == EQI_SHADOW_WEAPON) {					struct weapon_atk *wa;					wa = &bstatus->rhw;					wa->atk2 += r;					wa->matk += r;				}				else if (i == EQI_SHADOW_ACC_L || i == EQI_SHADOW_ACC_R || i == EQI_SHADOW_ARMOR || i == EQI_SHADOW_SHIELD || i == EQI_SHADOW_SHOES)					bstatus->max_hp += 10 * r;				 else  //shadow gears has no ordinary refine bonuses					refinedef += status->refine_info[REFINE_TYPE_ARMOR].bonus[r-1]; 

     


  2. As you may know, iRO implemented the new dragon breath formula, which is stated in the iro wiki as:

     

     

    Damage = [(CurrHP ÷ 50) + (MaxSP ÷ 4)] × (SkillLv × BaseLv ÷ 150) × (95 + DragonTraining_Lv × 5)% × (100 + Ranged Damage Modifers)% x (Elemental Modifiers)% x (100 + Racial Modifiers)%

     

    So I think the difference is the new formula takes these range, elemental and racial modifiers into account.

     

    It seems this formula was recently implemented in rathena (BF_WEAPON TYPE), while hercules is still using the old formula (BF_MISC TYPE).

    I have tried to merge rathena's new formula into Hercules, but encountered several problems.

     

    The changes I have made in code are:

    "/src/map/skill.c" ​, changed BF_MISC to BF_WEAPON


    		/**		 * Rune Knight		 **/		case RK_DRAGONBREATH_WATER:		case RK_DRAGONBREATH:		{			struct status_change *tsc = NULL;			if( (tsc = status->get_sc(bl)) && (tsc->data[SC_HIDING] )) {				clif->skill_nodamage(src,src,skill_id,skill_lv,1);			} else				skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);		}

     

    "/src/map/battle.c", delete the original formula in misc type, add the new formula in weapon type

    old:

    struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *target,uint16 skill_id,uint16 skill_lv,int mflag) {...	    case RK_DRAGONBREATH:	case RK_DRAGONBREATH_WATER:		md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;		RE_LVL_MDMOD(150);		if (sd) md.damage = md.damage * (95 + 5 * pc->checkskill(sd,RK_DRAGONTRAINING)) / 100;		md.flag |= BF_LONG|BF_WEAPON;		break;...}

    new:

    struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list *target,uint16 skill_id,uint16 skill_lv,int wflag){...			case RK_DRAGONBREATH:			case RK_DRAGONBREATH_WATER:			{				int damagevalue = (sstatus->hp / 50 + status_get_max_sp(src) / 4) * skill_lv;				if (status->get_lv(src) > 100)					damagevalue = damagevalue * status->get_lv(src) / 150;				if (sd)					damagevalue = damagevalue * (100 + 5 * (pc->checkskill(sd, RK_DRAGONTRAINING) - 1)) / 100;				ATK_ADD(damagevalue);				wd.flag |= BF_LONG;			}			break;...}

    I have also changed the nk (skill type?) of dragonbreath in skill_db to 0x62, thus the skill ignores target's DEF and has no miss.

     

     

    However, after these changes, the dragon breath seems neutral attack (in skill_db it is still set as fire, or water for the breath water), there is no elemental fix involved in the damage.

     

    It would be greatly appreciated if someone could help me to add the elemental modifier, or pointed out where I have missed for merging this new formula.

     

     

     


  3. Hello guys,

    I am trying to merge the "getunitdata" and "setunitdata" script commands to Hercules

     

    I am pretty new, so encountered a lot of questions.

    One of the most urgent is 

    There is a pointer "__64BPRTSIZE" used in the rathena code

    #define getunitdata_sub(idx__,var__) setd_sub(st,sd,name,(idx__),(void *)__64BPRTSIZE((int)(var__)),script_getref(st,3))

    They have it defined in the const.h

    #ifdef __64BIT__	#define __64BPRTSIZE(y) (intptr)y#else	#define __64BPRTSIZE(y) y#endif

    But there is no such definition in Hercules.

    So I am wandering what is the replacement of this pointer?

    Any suggestions will be appreciated.

     



    Figured it out

    it's h64BPTRSIZE instead.


  4. When I tried  to implement the Sarah Card (itemid 4610)

    I found there is no proper item bonus for that effect.

     

    I have some development experience, but I am not very familiar with Hercules code.

    Could some one point out which part of the code should I look into to add some new item bonus?

    I am willing to share the work if I figured out how to implement it without any bugs.

     

    Thank you!

×
×
  • Create New...

Important Information

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