summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/battle.c31
-rw-r--r--src/map/script.c5
-rw-r--r--src/map/skill.c6
3 files changed, 20 insertions, 22 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index 51101b3c0..facdd6169 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -953,17 +953,15 @@ static struct Damage battle_calc_weapon_attack(
if (skill_num == GS_GROUNDDRIFT)
s_ele = s_ele_ = wflag; //element comes in flag.
- if (sd && sd->weapontype1 == 0 && sd->weapontype2 > 0)
- {
- flag.rh=0;
- flag.lh=1;
- }
- if (sstatus->lhw && sstatus->lhw->atk)
- flag.lh=1;
-
- if (skill_num == ASC_BREAKER)
- { //Soul Breaker disregards dual-wielding.
- flag.rh = 1; flag.lh = 0;
+ if(!skill_num)
+ { //Skills ALWAYS use ONLY your right-hand weapon (tested on Aegis 10.2)
+ if (sd && sd->weapontype1 == 0 && sd->weapontype2 > 0)
+ {
+ flag.rh=0;
+ flag.lh=1;
+ }
+ if (sstatus->lhw && sstatus->lhw->atk)
+ flag.lh=1;
}
//Check for critical
@@ -1193,7 +1191,6 @@ static struct Damage battle_calc_weapon_attack(
short index = sd->equip_index[8];
wd.damage = sstatus->batk;
- if (flag.lh) wd.damage2 = wd.damage;
if (index >= 0 &&
sd->inventory_data[index] &&
@@ -1205,7 +1202,6 @@ static struct Damage battle_calc_weapon_attack(
if(src->type == BL_HOM){
TBL_HOM *hd = (TBL_HOM*)src;
wd.damage = hd->master->homunculus.intimacy ;
- wd.damage2 = hd->master->homunculus.intimacy ;
hd->master->homunculus.intimacy = 200;
clif_send_homdata(hd->master,0x100,hd->master->homunculus.intimacy/100);
break;
@@ -1230,7 +1226,7 @@ static struct Damage battle_calc_weapon_attack(
i |= 16; // for ex. shuriken must not be influenced by DEX
}
wd.damage = battle_calc_base_damage(sstatus, &sstatus->rhw, sc, tstatus->size, sd, i);
- if (sstatus->lhw && flag.lh)
+ if (flag.lh)
wd.damage2 = battle_calc_base_damage(sstatus, sstatus->lhw, sc, tstatus->size, sd, i);
// Added split damage for Huuma
@@ -1766,7 +1762,8 @@ static struct Damage battle_calc_weapon_attack(
}
wd.damage = battle_addmastery(sd,target,wd.damage,0);
- if (flag.lh) wd.damage2 = battle_addmastery(sd,target,wd.damage2,1);
+ if (flag.lh)
+ wd.damage2 = battle_addmastery(sd,target,wd.damage2,1);
if((skill=pc_checkskill(sd,SG_STAR_ANGER)) >0 && (t_class == sd->hate_mob[2] || (sc && sc->data[SC_MIRACLE].timer!=-1)))
{
@@ -1989,8 +1986,8 @@ static struct Damage battle_calc_weapon_attack(
wd.damage2 = wd.damage2 * (30 + (skill * 10))/100;
if(wd.damage2 < 1) wd.damage2 = 1;
}
- } else if(sd->status.weapon == W_KATAR)
- { //Katars
+ } else if(sd->status.weapon == W_KATAR && !skill_num)
+ { //Katars (offhand damage only applies to normal attacks, tested on Aegis 10.2)
skill = pc_checkskill(sd,TF_DOUBLE);
wd.damage2 = wd.damage * (1 + (skill * 2))/100;
diff --git a/src/map/script.c b/src/map/script.c
index 7d199721d..79cdb517a 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -5276,9 +5276,8 @@ int buildin_getnameditem(struct script_state *st)
}else
nameid = conv_num(st,data);
- if(!itemdb_exists(nameid) || itemdb_isstackable(nameid))
- { //We don't allow non-equipable/stackable items to be named
- //to avoid any qty exploits that could happen because of it.
+ if(!itemdb_exists(nameid)/* || itemdb_isstackable(nameid)*/)
+ { //Even though named stackable items "could" be risky, they are required for certain quests.
push_val(st->stack,C_INT,0);
return 0;
}
diff --git a/src/map/skill.c b/src/map/skill.c
index 132cf7eff..9ab0bbb95 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -3045,7 +3045,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case 2: sid=MG_LIGHTNINGBOLT; break;
case 3: sid=WZ_EARTHSPIKE; break;
}
- skill_attack(BF_MAGIC,src,src,bl,sid,skilllv,tick,flag);
+ skill_attack(BF_MAGIC,src,src,bl,sid,skilllv,tick,flag|0xF000);
}
break;
case WZ_WATERBALL: /* ウォーターボール */
@@ -6247,14 +6247,16 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s
case AM_RESURRECTHOMUN: //[orn]
if (sd)
{
+ /* According to Tharis, the correct % SHOULD be 20*lv%
int p;
// If skilllv = 1, range = 1~4%, lv 2 : 5~25%, lv 3 : 25~45%, ...
if (skilllv == 1)
p = 1 + rand() % 4;
else
p = 5 + 20 * (skilllv - 2) + rand() % 21;
+ */
if (map_flag_gvg(src->m) || //No reviving in WoE grounds!
- !merc_revive_homunculus(sd, p, x, y))
+ !merc_revive_homunculus(sd, 20*skilllv, x, y))
{
clif_skill_fail(sd,skillid,0,0);
break;