Просмотр исходного кода

- Corrected Cloaking level 1-2 not letting you move across walls.
- updated cloaking code so that when you set "enable cloaking without walls", the code will consider you as "always next to a wall", thus you get the wall-speed bonus always.


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

skotlex 19 лет назад
Родитель
Сommit
de6883c0bb
6 измененных файлов с 28 добавлено и 25 удалено
  1. 4 0
      Changelog-Trunk.txt
  2. 8 8
      conf-tmpl/battle/skill.conf
  3. 1 1
      src/map/battle.c
  4. 4 4
      src/map/skill.c
  5. 7 9
      src/map/status.c
  6. 4 3
      src/map/unit.c

+ 4 - 0
Changelog-Trunk.txt

@@ -4,6 +4,10 @@ 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/07/20
+	* Corrected Cloaking level 1-2 not letting you move across walls. [Skotlex]
+	* updated cloaking code so that when you set "enable cloaking without
+	  walls", the code will consider you as "always next to a wall", thus you get
+	  the wall-speed bonus always. [Skotlex]
 	* Applied the fix to homunculus name saving... [Skotlex]
 	* Added battle config settings agi_penalty_target and vit_penalty_target,
 	  they define which object types will get vit/flee reductions when

+ 8 - 8
conf-tmpl/battle/skill.conf

@@ -138,17 +138,17 @@ traps_setting: 2
 // (Makes it so that Storm Gust/Lord of Vermillion/etc when casted next to a wall, won't hit on the other side) 
 skill_wall_check: yes
 
-// When a player is cloaking, Whether the wall is checked or not. (Note 1)
-// Note: When set to no players can always cloak away from walls and move around
-// freely even if the skill level is below 3.
-// no or 0 = doesn't check for walls (you can cloak without walls)
+// When cloaking, Whether the wall is checked or not. (Note 1)
+// Note: When the skill does not checks for walls, you will always be considered
+//  as if you had a wall-next to you (you always get the wall-based speed).
+// When "cloaking lasts forever" is set, it means attacking or using skills
+//  won't uncloak you, but being hit does.
+// 0 = doesn't check for walls
 // 1 = it checks for walls
 // 2 = it doesn't checks for walls + your cloaking lasts forever
-// 3 = it checks for walls + your cloaking lasts forever (it is not cancelled on attack)
+// 3 = it checks for walls + your cloaking lasts forever
 player_cloak_check_type: 1
-
-// When a monster is cloaking, Whether the wall is checked or not. (Note 1)
-monster_cloak_check_type: no
+monster_cloak_check_type: 0
 
 // Can't place unlimited land skills at the same time (Note 4)
 land_skill_limit: 1

+ 1 - 1
src/map/battle.c

@@ -2817,7 +2817,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target,
 		}
 	}
 
-	if (sc && sc->data[SC_CLOAKING].timer != -1 && !(sc->data[SC_CLOAKING].val4&1))
+	if (sc && sc->data[SC_CLOAKING].timer != -1 && !(sc->data[SC_CLOAKING].val4&2))
 		status_change_end(src,SC_CLOAKING,-1);
 
 	//Check for counter attacks that block your attack. [Skotlex]

+ 4 - 4
src/map/skill.c

@@ -9490,16 +9490,16 @@ int skill_check_cloaking(struct block_list *bl, struct status_change *sc)
 		if (sc->data[SC_CLOAKING].timer != -1) {
 			if (sc->data[SC_CLOAKING].val1 < 3) //End cloaking.
 				status_change_end(bl, SC_CLOAKING, -1);
-			else if(sc->data[SC_CLOAKING].val4&2)
+			else if(sc->data[SC_CLOAKING].val4&1)
 			{	//Remove wall bonus
-				sc->data[SC_CLOAKING].val4&=~2;
+				sc->data[SC_CLOAKING].val4&=~1;
 				status_calc_bl(bl,SCB_SPEED);
 			}
 		} 
 	}
-	else if(sc->data[SC_CLOAKING].timer != -1 && !(sc->data[SC_CLOAKING].val4&2))
+	else if(sc->data[SC_CLOAKING].timer != -1 && !(sc->data[SC_CLOAKING].val4&1))
 	{	//Add wall speed bonus
-		sc->data[SC_CLOAKING].val4|=2;
+		sc->data[SC_CLOAKING].val4|=1;
 		status_calc_bl(bl,SCB_SPEED);
 	}
 

+ 7 - 9
src/map/status.c

@@ -3473,7 +3473,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
 	}
 	if(sc->data[SC_CLOAKING].timer!=-1)
 		speed = speed * 100 /(
-			(sc->data[SC_CLOAKING].val4&2?25:0) //Wall speed bonus
+			(sc->data[SC_CLOAKING].val4&1?25:0) //Wall speed bonus
 			+sc->data[SC_CLOAKING].val3); //Normal adjustment bonus.
 	
 	if(sc->data[SC_LONGING].timer!=-1)
@@ -4904,14 +4904,12 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 				val3 *= -1; //Substract the Dodge speed bonus.
 			val3+= 70+val1*3; //Speed adjustment without a wall.
 			//With a wall, it is val3 +25.
-			//val4&2 signals the presence of a wall.
-			if (!val4)
-			{ //val4&1 signals eternal cloaking (not cancelled on attack) [Skotlex]
-				if (bl->type == BL_PC)	//Standard cloaking.
-					val4 = battle_config.pc_cloak_check_type&2?1:0;
-				else
-					val4 = battle_config.monster_cloak_check_type&2?1:0;
-			}
+			//val4&1 signals the presence of a wall.
+			//val4&2 signals eternal cloaking (not cancelled on attack) [Skotlex]
+			if (bl->type == BL_PC)	//Standard cloaking.
+				val4 |= battle_config.pc_cloak_check_type&3;
+			else
+				val4 |= battle_config.monster_cloak_check_type&3;
 			break;
 		case SC_SIGHT:			/* ƒTƒCƒg/ƒ‹ƒAƒt */
 		case SC_RUWACH:

+ 4 - 3
src/map/unit.c

@@ -668,7 +668,8 @@ int unit_can_move(struct block_list *bl)
 			sc->data[SC_STOP].timer != -1 ||
 			sc->data[SC_CLOSECONFINE].timer != -1 ||
 			sc->data[SC_CLOSECONFINE2].timer != -1 ||
-			(sc->data[SC_CLOAKING].timer != -1 && sc->data[SC_CLOAKING].val1 < 3)
+			(sc->data[SC_CLOAKING].timer != -1 && //Need wall at level 1-2
+			 sc->data[SC_CLOAKING].val1 < 3 && !(sc->data[SC_CLOAKING].val4&1))
 		))
 			return 0;
 	}
@@ -933,7 +934,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, int skill_num, int
 	ud->skilllv      = skill_lv;
 
  	if(sc && sc->data[SC_CLOAKING].timer != -1 &&
-		!(sc->data[SC_CLOAKING].val4&1) && skill_num != AS_CLOAKING)
+		!(sc->data[SC_CLOAKING].val4&2) && skill_num != AS_CLOAKING)
 		status_change_end(src,SC_CLOAKING,-1);
 
 	if(casttime > 0) {
@@ -1026,7 +1027,7 @@ int unit_skilluse_pos2( struct block_list *src, int skill_x, int skill_y, int sk
 	ud->skilltarget  = 0;
 
 	if (sc && sc->data[SC_CLOAKING].timer != -1 &&
-		!(sc->data[SC_CLOAKING].val4&1))
+		!(sc->data[SC_CLOAKING].val4&2))
 		status_change_end(src,SC_CLOAKING,-1);
 
 	if(casttime > 0) {