Kaynağa Gözat

- Corrected KiriKage's range so it works correctly when used by non-players or when use weapon's range is used.
- Changed service for you's flags so it affects all players on range.
- Corrected the skill animation for Absorb Spirits
- Cleaned up a bit the implementation of how Gravity Field blocks the caster from moving.
- Mob class-changing will fail if the new class is the same as the previous one.


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

skotlex 18 yıl önce
ebeveyn
işleme
00409a92bb
9 değiştirilmiş dosya ile 23 ekleme ve 23 silme
  1. 7 1
      Changelog-Trunk.txt
  2. 5 0
      db/Changelog.txt
  3. 1 1
      db/skill_db.txt
  4. 1 1
      db/skill_unit_db.txt
  5. 1 1
      src/map/clif.c
  6. 3 0
      src/map/mob.c
  7. 4 5
      src/map/skill.c
  8. 0 14
      src/map/status.c
  9. 1 0
      src/map/unit.c

+ 7 - 1
Changelog-Trunk.txt

@@ -3,9 +3,15 @@ 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/11/27
+	* Corrected the skill animation for Absorb Spirits [Skotlex]
+	* Cleaned up a bit the implementation of how Gravity Field blocks the
+	  caster from moving. [Skotlex]
+	* Mob class-changing will fail if the new class is the same as the previous
+	  one. [Skotlex]
 2006/11/24
 	* Homunc's min matk is now always equal to max matk [Skotlex]
-	* Fixed EDP's damage being 100% more than it should (should be 5x, not 6x
+	* Fixed EDP's damage being 100% more than it should (should be 4x, not 5x
 	  on normal attacks) [Skotlex]
 	* Self Destruction will only hit everyone and not just enemies when used by
 	  mobs (non marine spheres) unless the map is a versus map. [Skotlex]

+ 5 - 0
db/Changelog.txt

@@ -19,6 +19,11 @@
 	-----
 
 ========================
+11/27
+	* Corrected KiriKage's range so it works correctly when used by non-players
+	  or when use weapon's range is used. [Skotlex]
+	* Changed service for you's flags so it affects all players on range.
+	  [Skotlex]
 11/26
 	* Updated Rachel Field mob stats and drops [Playtester]
 	* Updated selling price for some common drops [Playtester]

+ 1 - 1
db/skill_db.txt

@@ -554,7 +554,7 @@
 527,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,3	//NJ_TATAMIGAESHI#NJ_TATAMIGAESHI#
 528,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//NJ_KASUMIKIRI#NJ_KASUMIKIRI#
 529,7:9:11:13:15,6,2,0,1,0,5,1,no,0,0,0,none,0	//NJ_SHADOWJUMP#NJ_SHADOWJUMP#
-530,-1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0	//NJ_KIRIKAGE#NJ_KIRIKAGE#
+530,7:9:11:13:15,6,1,-1,0,0,5,1,no,0,0,0,weapon,0	//NJ_KIRIKAGE#NJ_KIRIKAGE#
 531,0,6,4,0,1,0,5,1,no,0,0,0,none,7	//NJ_UTSUSEMI#NJ_UTSUSEMI#
 532,0,6,4,0,1,0,10,1,yes,0,0,0,magic,0	//NJ_BUNSINJYUTSU#NJ_BUNSINJYUTSU#
 533,0,0,0,0,0,0,10,0,no,0,0,0,none,0	//NJ_NINPOU#NJ_NINPOU#

+ 1 - 1
db/skill_unit_db.txt

@@ -73,7 +73,7 @@
 327,0xac,    ,  3, 0,  -1,all,   0x120	//DC_HUMMING
 328,0xad,    ,  3, 0,  -1,enemy, 0x100	//DC_DONTFORGETME
 329,0xae,    ,  3, 0,  -1,all,   0x120	//DC_FORTUNEKISS
-330,0xaf,    ,  3, 0,  -1,party, 0x100	//DC_SERVICEFORYOU
+330,0xaf,    ,  3, 0,  -1,all,   0x120	//DC_SERVICEFORYOU
 336,0xb2,    ,  0,-1,  -1,noone, 0x000	//WE_CALLPARTNER
 339,0x86,    , -1, 0, 400,enemy, 0x000	//NPC_DARKGRANDCROSS
 362,0xb4,    ,  0, 3,  -1,all,   0x000	//HP_BASILICA

+ 1 - 1
src/map/clif.c

@@ -7107,7 +7107,7 @@ int clif_guild_skillinfo(struct map_session_data *sd)
 			WFIFOW(fd,c*37+12) = g->skill[i].lv;
 			WFIFOW(fd,c*37+14) = skill_get_sp(id,g->skill[i].lv);
 			WFIFOW(fd,c*37+16) = skill_get_range(id,g->skill[i].lv);
-			malloc_tsetdword(WFIFOP(fd,c*37+18),0,24);
+			strncpy(WFIFOP(fd,c*37+18), skill_get_name(id), NAME_LENGTH);
 			if(g->skill[i].lv < guild_skill_get_max(id) && (sd == g->member[0].sd))
 				up = 1;
 			else

+ 3 - 0
src/map/mob.c

@@ -2315,6 +2315,9 @@ int mob_class_change (struct mob_data *md, int class_)
 	if (mob_is_clone(md->class_))
 		return 0; //Clones
 
+	if (md->class_ == class_)
+		return 0; //Nothing to change.
+
 	hp_rate = md->status.hp*100/md->status.max_hp;
 	md->class_ = class_;
 	md->db = mob_db(class_);

+ 4 - 5
src/map/skill.c

@@ -3174,7 +3174,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 			if (unit_movepos(src, x, y, 0, 0))
 				clif_slide(src,src->x,src->y);
 		}
-		status_change_end(src, SC_HIDING, -1);
+		if (sc && sc->data[SC_HIDING].timer != -1)
+			status_change_end(src, SC_HIDING, -1);
 		skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
 		break;
 	case 0:
@@ -3945,10 +3946,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 			i = 2 * dstmd->level;
 			mob_target(dstmd,src,0);
 		}
-		if (i) {
-			clif_skill_nodamage(src,bl,skillid,skilllv,0);
-			status_heal(src, 0, i, 3);
-		}
+		if (i) status_heal(src, 0, i, 3);
+		clif_skill_nodamage(src,bl,skillid,skilllv,i?1:0);
 		break;
 
 	case AC_MAKINGARROW:

+ 0 - 14
src/map/status.c

@@ -5358,13 +5358,6 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 
 		case SC_GRAVITATION:
 			val2 = 50*val1; //aspd reduction
-			if (val3 == BCT_SELF) {
-				struct unit_data *ud = unit_bl2ud(bl);
-				if (ud) {
-					ud->canmove_tick += tick;
-					ud->canact_tick += tick;
-				}
-			} 
 			break;
 
 		case SC_HERMODE:
@@ -6171,13 +6164,6 @@ int status_change_end( struct block_list* bl , int type,int tid )
 			sc_start4(bl, SC_REGENERATION, 100, 10,0,0,(RGN_HP|RGN_SP),
 				skill_get_time(LK_BERSERK, sc->data[type].val1));
 			break;
-		case SC_GRAVITATION:
-			if (sc->data[type].val3 == BCT_SELF) {
-				struct unit_data *ud = unit_bl2ud(bl);
-				if (ud)
-					ud->canmove_tick = ud->canact_tick = gettick();
-			}
-			break;
 		case SC_GOSPEL: //Clear the buffs from other chars.
 			if (sc->data[type].val3) { //Clear the group.
 				struct skill_unit_group *group = (struct skill_unit_group *)sc->data[type].val3;

+ 1 - 0
src/map/unit.c

@@ -699,6 +699,7 @@ int unit_can_move(struct block_list *bl)
 			|| (sc->data[SC_CLOAKING].timer != -1 && //Need wall at level 1-2
 				sc->data[SC_CLOAKING].val1 < 3 && !(sc->data[SC_CLOAKING].val4&1))
 			|| sc->data[SC_MADNESSCANCEL].timer != -1
+			|| (sc->data[SC_GRAVITATION].timer != -1 && sc->data[SC_GRAVITATION].val3 == BCT_SELF)
 		))
 			return 0;
 	}