Browse Source

- @useskill will now cause your homun to use the skill instead of you if the skill is a Homun skill and you have an active homunculus.
- Some cleanups...


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

skotlex 19 năm trước cách đây
mục cha
commit
cb1a6f5bf0
4 tập tin đã thay đổi với 17 bổ sung11 xóa
  1. 2 0
      Changelog-Trunk.txt
  2. 9 2
      src/map/atcommand.c
  3. 1 3
      src/map/skill.c
  4. 5 6
      src/map/status.c

+ 2 - 0
Changelog-Trunk.txt

@@ -3,6 +3,8 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 2006/08/20
+	* @useskill will now cause your homun to use the skill instead of you if
+	  the skill is a Homun skill and you have an active homunculus. [Skotlex]
 	* Reduced the Success Chance of GS_FLING to 10+10*lv% (Playtester told me
 	  that Vicious told him the chance was much lower like that) [Skotlex]
 	* Fixed some Homunc issues with HR servers (capping some values) [Toms]

+ 9 - 2
src/map/atcommand.c

@@ -7547,6 +7547,7 @@ atcommand_useskill(const int fd, struct map_session_data* sd,
 	const char* command, const char* message)
 {
 	struct map_session_data *pl_sd = NULL;
+	struct block_list *bl;
 	int skillnum;
 	int skilllv;
 	char target[255];
@@ -7562,10 +7563,16 @@ atcommand_useskill(const int fd, struct map_session_data* sd,
 		return -1;
 	}
 
+	if (skillnum >= HM_SKILLBASE && skillnum < HM_SKILLBASE+MAX_HOMUNSKILL
+		&& sd->hd && merc_is_hom_active(sd->hd)) // (If used with @useskill, put the homunc as dest)
+		bl = &sd->hd->bl;
+	else
+		bl = &sd->bl;
+	
 	if (skill_get_inf(skillnum)&INF_GROUND_SKILL)
-		unit_skilluse_pos(&sd->bl, pl_sd->bl.x, pl_sd->bl.y, skillnum, skilllv);
+		unit_skilluse_pos(bl, pl_sd->bl.x, pl_sd->bl.y, skillnum, skilllv);
 	else
-		unit_skilluse_id(&sd->bl, pl_sd->bl.id, skillnum, skilllv);
+		unit_skilluse_id(bl, pl_sd->bl.id, skillnum, skilllv);
 
 	return 0;
 }

+ 1 - 3
src/map/skill.c

@@ -5523,8 +5523,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		break;
 
 	case HAMI_CASTLE:	//[orn]
-		if (src == bl && sd && sd->hd && merc_is_hom_active(sd->hd)) // (If used with @useskill, put the homunc as dest)
-			bl = &sd->hd->bl;
 		if(rand()%100 < 20*skilllv && src != bl)
 		{
 			int x,y;
@@ -5549,7 +5547,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 			// Failed
 			if (hd)
 				clif_skill_fail(hd->master, skillid, 0, 0);
-			else
+			else if (sd)
 				clif_skill_fail(sd, skillid, 0, 0);
 		}
 		break;

+ 5 - 6
src/map/status.c

@@ -2220,8 +2220,10 @@ int status_calc_homunculus(struct homun_data *hd, int first)
 	status->rhw.range = 1 + status->size;	//[orn]
 	status->mode = MD_CANMOVE|MD_CANATTACK|MD_ASSIST|MD_AGGRESSIVE|MD_CASTSENSOR;	//[orn]
 	status->speed = DEFAULT_WALK_SPEED;
-	status->def = cap_value(hom->level/10 + status->vit/5, 0, SCHAR_MAX);
-	status->mdef = cap_value(hom->level/10 + status->int_/5, 0, SCHAR_MAX);
+	skill = hom->level/10 + status->vit/5;
+	status->def = cap_value(skill, 0, 99);
+	skill = hom->level/10 + status->int_/5;
+	status->mdef = cap_value(skill, 0, 99);
 
 	status->hp = 1;
 	status->sp = 1;
@@ -2243,10 +2245,7 @@ int status_calc_homunculus(struct homun_data *hd, int first)
 		status->max_hp += skill * 2 * status->max_hp / 100;
 
 	if((skill = merc_hom_checkskill(hd->master,HLIF_BRAIN)) > 0)
-	{
-		int p = 1 +skill/2 -skill/4 +skill/5;
-		status->max_sp += p * status->max_sp / 100 ;
-	}
+		status->max_sp += (1 +skill/2 -skill/4 +skill/5) * status->max_sp / 100 ;
 
 	if (first) {
 		hd->battle_status.hp = hom->hp ;