소스 검색

- Some cleaning of the slave moving code.
- Fixed the icon for Provoke not showing.
- Fixed skill_timerskills (type was not being stored, water-ball at least got broken, doing only 1 hit always)
- pc_setinventorydata won't try to set data for positions with no item.


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

skotlex 19 년 전
부모
커밋
931033a7b1
6개의 변경된 파일32개의 추가작업 그리고 30개의 파일을 삭제
  1. 5 0
      Changelog-Trunk.txt
  2. 1 1
      src/map/battle.c
  3. 20 24
      src/map/mob.c
  4. 1 1
      src/map/pc.c
  5. 4 3
      src/map/skill.c
  6. 1 1
      src/map/status.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.  EVERYTHING ELSE
 GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
 2006/02/14
+	* pc_setinventorydata won't use itemdb_search on empty inventory slots (id
+	  = 0) [Skotlex]
+	* Fixed the icon from Provoke being gone. [Skotlex]
+	* Fixed skill_timerskill (most notable skill broken: water ball doing 1
+	  hit) [Skotlex]
 	* Removed the declaration of puchar and pchar from my_global.h which was
 	  preventing compiles on native win NT systems. Drawback is now Win9X systems
 	  will fail to compile instead... [Skotlex]

+ 1 - 1
src/map/battle.c

@@ -3098,7 +3098,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target,
 			int boss = status_get_mode(target)&MD_BOSS;
 			int rate = 0;
 			if (sd->weapon_coma_ele[ele] > 0)
-				rate+=sd->weapon_coma_ele[ele];
+				rate += sd->weapon_coma_ele[ele];
 			if (sd->weapon_coma_race[race] > 0)
 				rate += sd->weapon_coma_race[race];
 			if (sd->weapon_coma_race[boss?10:11] > 0)

+ 20 - 24
src/map/mob.c

@@ -1420,34 +1420,30 @@ static int mob_ai_sub_hard_slavemob(struct mob_data *md,unsigned int tick)
 			return 0;
 		}
 
-		// Although there is the master, since it is somewhat far, it approaches.
-		if((!md->target_id || md->state.targettype == NONE_ATTACKABLE) && mob_can_move(md) &&
-			md->master_dist<md->db->range3 && (md->walkpath.path_pos>=md->walkpath.path_len || md->walkpath.path_len==0)){
+		// Approach master if within view range, chase back to Master's area also if standing on top of the master.
+		if(md->master_dist<md->db->range3 && (md->master_dist>MOB_SLAVEDISTANCE || md->master_dist == 0) &&
+			mob_can_move(md) && md->state.state == MS_IDLE)
+		{
 			int i=0,dx,dy,ret;
-			if(md->master_dist>MOB_SLAVEDISTANCE || md->master_dist == 0)
-		  	{  //Chase back to Master's area also if standing on top of the master.
-				do {
-					if(i<=5){
-						dx=bl->x - md->bl.x;
-						dy=bl->y - md->bl.y;
+			do {
+				if(i<=5){
+					dx=bl->x - md->bl.x;
+					dy=bl->y - md->bl.y;
 						
-						if(dx<0) dx+=rand()%MOB_SLAVEDISTANCE +1;
-						else if(dx>0) dx-=rand()%MOB_SLAVEDISTANCE +1;
-
-						if(dy<0) dy+=rand()%MOB_SLAVEDISTANCE +1;
-						else if(dy>0) dy-=rand()%MOB_SLAVEDISTANCE +1;
+					if(dx<0) dx+=rand()%MOB_SLAVEDISTANCE +1;
+					else if(dx>0) dx-=rand()%MOB_SLAVEDISTANCE +1;
+					if(dy<0) dy+=rand()%MOB_SLAVEDISTANCE +1;
+					else if(dy>0) dy-=rand()%MOB_SLAVEDISTANCE +1;
 						
-					}else{
-						ret = MOB_SLAVEDISTANCE*2+1;
-						dx=bl->x - md->bl.x + rand()%ret - MOB_SLAVEDISTANCE;
-						dy=bl->y - md->bl.y + rand()%ret - MOB_SLAVEDISTANCE;
-					}
+				}else{
+					ret = MOB_SLAVEDISTANCE*2+1;
+					dx=bl->x - md->bl.x + rand()%ret - MOB_SLAVEDISTANCE;
+					dy=bl->y - md->bl.y + rand()%ret - MOB_SLAVEDISTANCE;
+				}
 
-					ret=mob_walktoxy(md,md->bl.x+dx,md->bl.y+dy,0);
-					i++;
-				} while(ret && i<10);
-				md->next_walktime=tick+1000;
-			}
+				ret=mob_walktoxy(md,md->bl.x+dx,md->bl.y+dy,0);
+				i++;
+			} while(ret && i<10);
 		}
 	} else if (bl->m != md->bl.m && map_flag_gvg(md->bl.m)) {
 		//Delete the summoned mob if it's in a gvg ground and the master is elsewhere. [Skotlex]

+ 1 - 1
src/map/pc.c

@@ -490,7 +490,7 @@ int pc_setinventorydata(struct map_session_data *sd)
 
 	for(i=0;i<MAX_INVENTORY;i++) {
 		id = sd->status.inventory[i].nameid;
-		sd->inventory_data[i] = itemdb_search(id);
+		sd->inventory_data[i] = id?itemdb_search(id):NULL;
 	}
 	return 0;
 }

+ 4 - 3
src/map/skill.c

@@ -2330,7 +2330,7 @@ int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int
 	}
 	for(i=0;i<max && sts[i].timer != -1;i++);
 	if (i>=max) return 1;
-	
+
 	sts[i].timer = add_timer(tick, skill_timerskill, src->id, i);
 	sts[i].src_id = src->id;
 	sts[i].target_id = target;
@@ -2339,6 +2339,7 @@ int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int
 	sts[i].map = src->m;
 	sts[i].x = x;
 	sts[i].y = y;
+	sts[i].type = type;
 	sts[i].flag = flag;
 	if (count)
 		(*count)++;
@@ -2532,11 +2533,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s
 	case NPC_HOLYATTACK:
 	case NPC_DARKNESSATTACK:
 	case NPC_TELEKINESISATTACK:
+	case NPC_UNDEADATTACK:
 	case NPC_BREAKARMOR:
+	case NPC_BREAKWEAPON:
 	case NPC_BREAKHELM:
 	case NPC_BREAKSHIELD:
-	case NPC_BREAKWEAPON:
-	case NPC_UNDEADATTACK:
 	case LK_AURABLADE:		/* オ?ラブレ?ド */
 	case LK_SPIRALPIERCE:	/* スパイラルピア?ス */
 	case LK_HEADCRUSH:	/* ヘッドクラッシュ */

+ 1 - 1
src/map/status.c

@@ -75,7 +75,7 @@ void initChangeTables(void) {
 	if (StatusIconChangeTable[sc]==SI_BLANK) StatusIconChangeTable[sc] = icon; 
 	
 	set_sc(SM_BASH,                 SC_STUN,                SI_BLANK);
-	set_sc(SM_PROVOKE,              SC_PROVOKE,             SI_BLANK);
+	set_sc(SM_PROVOKE,              SC_PROVOKE,             SI_PROVOKE);
 	set_sc(SM_MAGNUM,               SC_WATK_ELEMENT,        SI_BLANK);
 	set_sc(SM_ENDURE,               SC_ENDURE,              SI_ENDURE);
 	set_sc(MG_SIGHT,                SC_SIGHT,               SI_BLANK);