ソースを参照

- Deluge/Violent Gale/Volcano tiles will now fail to be placed on cells that are already ocuppied by anything else.
- status_is_immune will now return 0 or the amount of immunity of the target. In which cases it returns 100 for WoH and the GTB bonus when they have passed the gtb_sc_immunity setting. This enables targetted spells to not "fail silently" unless GTB's magic reduction is 100.


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

skotlex 18 年 前
コミット
3b530a5702
3 ファイル変更21 行追加4 行削除
  1. 6 0
      Changelog-Trunk.txt
  2. 11 1
      src/map/skill.c
  3. 4 3
      src/map/status.c

+ 6 - 0
Changelog-Trunk.txt

@@ -4,6 +4,12 @@ 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/11/10
+	* Deluge/Violent Gale/Volcano tiles will now fail to be placed on cells
+	  that are already ocuppied by anything else. [Skotlex]
+	* status_is_immune will now return 0 or the amount of immunity of the
+	  target. In which cases it returns 100 for WoH and the GTB bonus when they
+	  have passed the gtb_sc_immunity setting. This enables targetted spells to
+	  not "fail silently" unless GTB's magic reduction is 100. [Skotlex]
 	* Fixed Homunculus being spawned as soon as they arrive from the
 	  char-server even if the Master has not spawned on the map yet. [Skotlex]
 	* AL_TELEPORT now fails when used on top of Land Protector. [Skotlex]

+ 11 - 1
src/map/skill.c

@@ -2639,7 +2639,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 	if (status_isdead(bl))
 		return 1;
 
-	if (skillid && skill_get_type(skillid) == BF_MAGIC && status_isimmune(bl))
+	if (skillid && skill_get_type(skillid) == BF_MAGIC && status_isimmune(bl) == 100)
 	{	//GTB makes all targetted magic fail silently.
 		if (sd) clif_skill_fail(sd,skillid,0,0);
 		return 1;
@@ -9323,6 +9323,15 @@ int skill_cell_overlap(struct block_list *bl, va_list ap)
 // Suiton/Kaensin CAN super-impose on each another.
 //		case NJ_SUITON:
 //		case NJ_KAENSIN:
+// The official implementation makes them fail to appear when casted on top of ANYTHING
+// but I wonder if they didn't actually meant to fail when casted on top of each other?
+// hence, I leave the alternate implementation here, commented. [Skotlex]
+			if (unit->range <= 0)
+			{
+				(*alive) = 0;
+				return 1;
+			}
+/*
 			switch (unit->group->skill_id)
 			{	//These cannot override each other.
 				case SA_VOLCANO:
@@ -9333,6 +9342,7 @@ int skill_cell_overlap(struct block_list *bl, va_list ap)
 					(*alive) = 0;
 					return 1;
 			}
+*/
 			break;
 		case PF_FOGWALL:
 			switch(unit->group->skill_id)

+ 4 - 3
src/map/status.c

@@ -4168,10 +4168,11 @@ int status_isimmune(struct block_list *bl)
 {
 	struct status_change *sc =status_get_sc(bl);
 	if (sc && sc->count && sc->data[SC_HERMODE].timer != -1)
-		return 1;
+		return 100;
+
 	if (bl->type == BL_PC &&
-		((TBL_PC*)bl)->special_state.no_magic_damage)
-		return ((TBL_PC*)bl)->special_state.no_magic_damage > battle_config.gtb_sc_immunity;
+		((TBL_PC*)bl)->special_state.no_magic_damage > battle_config.gtb_sc_immunity)
+		return ((TBL_PC*)bl)->special_state.no_magic_damage;
 	return 0;
 }