Browse Source

- Reverted the previous change, changed the pet capture code to try to capture a mob based on their view class rather than actual class.
- Changed various instances of md->db->lv for md->level, since the later is the actual mob level.


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

skotlex 19 years ago
parent
commit
383129375f
5 changed files with 12 additions and 14 deletions
  1. 3 0
      Changelog-Trunk.txt
  2. 2 3
      src/map/mob.c
  3. 2 2
      src/map/pc.c
  4. 4 8
      src/map/pet.c
  5. 1 1
      src/map/skill.c

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ 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/24
+	* Reverted the previous change, changed the pet capture code to try to
+	  capture a mob based on their view class rather than actual class.
+	  [Skotlex]
 	* Fixed the md->class_ variable not being updated when a mob's class is
 	  changed. [Skotlex]
 	* Added setting clear_skills_on_warp to specify when a character's

+ 2 - 3
src/map/mob.c

@@ -1954,7 +1954,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 					drop_rate += (int)(0.5+drop_rate*status_get_luk(src)*battle_config.drops_by_luk2/10000.);
 			}
 			if (sd && battle_config.pk_mode &&
-				(int)(md->db->lv - sd->status.base_level) >= 20)
+				(int)(md->level - sd->status.base_level) >= 20)
 				drop_rate = (int)(drop_rate*1.25); // pk_mode increase drops if 20 level difference [Valaris]
 
 //			if (10000 < rand()%10000+drop_rate) //May be better if MAX_RAND is too low?
@@ -2014,7 +2014,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
 			}
 				
 			if(sd->get_zeny_num && rand()%100 < sd->get_zeny_rate) //Gets get_zeny_num per level +/-10% [Skotlex]
-				pc_getzeny(sd,md->db->lv*sd->get_zeny_num*(90+rand()%21)/100);
+				pc_getzeny(sd,md->level*sd->get_zeny_num*(90+rand()%21)/100);
 		}
 		if(md->lootitem) {
 			for(i=0;i<md->lootitem_count;i++)
@@ -2275,7 +2275,6 @@ int mob_class_change (struct mob_data *md, int class_)
 
 	hp_rate = md->status.hp*100/md->status.max_hp;
 	md->db = mob_db(class_);
-	md->class_ = class_;
 	if (battle_config.override_mob_names==1)
 		memcpy(md->name,md->db->name,NAME_LENGTH-1);
 	else

+ 2 - 2
src/map/pc.c

@@ -3234,9 +3234,9 @@ int pc_steal_coin(struct map_session_data *sd,struct block_list *target)
 		return 0;
 
 	skill = pc_checkskill(sd,RG_STEALCOIN)*10;
-	rate = skill + (sd->status.base_level - md->db->lv)*3 + sd->battle_status.dex*2 + sd->battle_status.luk*2;
+	rate = skill + (sd->status.base_level - md->level)*3 + sd->battle_status.dex*2 + sd->battle_status.luk*2;
 	if(rand()%1000 < rate) {
-		pc_getzeny(sd,md->db->lv*10 + rand()%100);
+		pc_getzeny(sd,md->level*10 + rand()%100);
 		md->state.steal_coin_flag = 1;
 		return 1;
 	}

+ 4 - 8
src/map/pet.c

@@ -577,23 +577,19 @@ int pet_catch_process2(struct map_session_data *sd,int target_id)
 		pc_delitem(sd,i,1,0);
 	}
 
-	i = search_petDB_index(md->class_,PET_CLASS);
+	i = search_petDB_index(md->vd->class_,PET_CLASS);
 	//catch_target_class == 0 is used for universal lures. [Skotlex]
 	//for now universal lures do not include bosses.
 	if (sd->catch_target_class == 0 && !(md->status.mode&MD_BOSS))
-		sd->catch_target_class = md->class_;
-	if(i < 0 || sd->catch_target_class != md->class_) {
+		sd->catch_target_class = md->vd->class_;
+	if(i < 0 || sd->catch_target_class != md->vd->class_) {
 		clif_emotion(&md->bl, 7);	//mob will do /ag if wrong lure is used on them.
 		clif_pet_rulet(sd,0);
 		sd->catch_target_class = -1;
 		return 1;
 	}
 
-	//target_idによる敵→卵判定
-//	if(battle_config.etc_log)
-//		printf("mob_id = %d, mob_class = %d\n",md->bl.id,md->class_);
-		//成功の場合
-	pet_catch_rate = (pet_db[i].capture + (sd->status.base_level - md->db->lv)*30 + sd->battle_status.luk*20)*(200 - md->status.hp*100/md->status.max_hp)/100;
+	pet_catch_rate = (pet_db[i].capture + (sd->status.base_level - md->level)*30 + sd->battle_status.luk*20)*(200 - md->status.hp*100/md->status.max_hp)/100;
 	if(pet_catch_rate < 1) pet_catch_rate = 1;
 	if(battle_config.pet_catch_rate != 100)
 		pet_catch_rate = (pet_catch_rate*battle_config.pet_catch_rate)/100;

+ 1 - 1
src/map/skill.c

@@ -3929,7 +3929,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 			pc_delspiritball(dstsd,dstsd->spiritball,0);
 		} else if (dstmd && !(tstatus->mode&MD_BOSS) && rand() % 100 < 20)
 		{	// check if target is a monster and not a Boss, for the 20% chance to absorb 2 SP per monster's level [Reddozen]
-			i = 2 * dstmd->db->lv;
+			i = 2 * dstmd->level;
 			mob_target(dstmd,src,0);
 		}
 		if (i) {