Bladeren bron

- getnameditem will now also work on stackable items
- Corrected battle_calc_weapon_attack so that all skills ignore your left-hand weapon, and that the Katar's double-attack damage bonus for the offhand damage applies ONLY on normal attacks.
- Fixed Resurrect Homunculus's % to 20*lv%


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8426 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 19 jaren geleden
bovenliggende
commit
d359756066
4 gewijzigde bestanden met toevoegingen van 25 en 22 verwijderingen
  1. 5 0
      Changelog-Trunk.txt
  2. 14 17
      src/map/battle.c
  3. 2 3
      src/map/script.c
  4. 4 2
      src/map/skill.c

+ 5 - 0
Changelog-Trunk.txt

@@ -4,6 +4,11 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/08/22
+	* getnameditem will now also work on stackable items [Skotlex]
+	* Corrected battle_calc_weapon_attack so that all skills ignore your
+	  left-hand weapon, and that the Katar's double-attack damage bonus for the
+	  offhand damage applies ONLY on normal attacks. [Skotlex]
+	* Fixed Resurrect Homunculus's % to 20*lv% [Skotlex]
  	* Added SQL update which should remove \' from guild names [Toms]
 	* Added option to disable character deletion of certain levels [Lupus]
 		check char_athena.conf for this option format

+ 14 - 17
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;
 

+ 2 - 3
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;
 	}

+ 4 - 2
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;