소스 검색

- Adjusted Glittering's success rate to 20+10*lv%
- Corrected isequipped() so that cards will not be tagged as "used up" unless all the specified items were found.
- Fixed a confusion in skill_attack using the src instead of dsrc for some calls, which was causing some problems with the KAITE check from AoE spells.
- Fixed ASC_BREAKER's misc damage part not having the ignore-element flag set.


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

skotlex 19 년 전
부모
커밋
200813da7e
4개의 변경된 파일25개의 추가작업 그리고 8개의 파일을 삭제
  1. 8 0
      Changelog-Trunk.txt
  2. 3 2
      src/map/battle.c
  3. 10 2
      src/map/script.c
  4. 4 4
      src/map/skill.c

+ 8 - 0
Changelog-Trunk.txt

@@ -4,6 +4,14 @@ 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/21
+	* Adjusted Glittering's success rate to 20+10*lv% [Skotlex]
+	* Corrected isequipped() so that cards will not be tagged as "used up"
+	  unless all the specified items were found. [Skotlex]
+	* Fixed a confusion in skill_attack using the src instead of dsrc for some
+	  calls, which was causing some problems with the KAITE check from AoE
+	  spells. [Skotlex]
+	* Fixed ASC_BREAKER's misc damage part not having the ignore-element flag
+	  set. [Skotlex]
 	* Moved homunc battle conf from misc.conf to homunc.conf [Toms]
 	* Some cleaning in skill.c in regard to homun skills. [Skotlex]
 	* Madness Canceller now stacks with other aspd bonuses, just like Berserk

+ 3 - 2
src/map/battle.c

@@ -2519,13 +2519,14 @@ struct Damage  battle_calc_misc_attack(
 	case PA_PRESSURE:
 	case GS_FLING:
 	case NJ_ZENYNAGE:
-		flag.elefix = flag.cardfix = 0;
+		flag.cardfix = 0;
+	case ASC_BREAKER:
+		flag.elefix = 0;
 	case HT_BLITZBEAT:
 	case TF_THROWSTONE:
 	case SN_FALCONASSAULT:
 	case PA_GOSPEL:
 	case CR_ACIDDEMONSTRATION:
-	case ASC_BREAKER:
 		md.flag = (md.flag&~BF_RANGEMASK)|BF_LONG;
 		break;
 	case HVAN_EXPLOSION:

+ 10 - 2
src/map/script.c

@@ -10796,6 +10796,8 @@ int buildin_isequipped(struct script_state *st)
 	int i, j, k, id = 1;
 	int index, flag;
 	int ret = -1;
+	//Original hash to reverse it when full check fails.
+	unsigned int setitem_hash = 0, setitem_hash2 = 0;
 
 	sd = script_rid2sd(st);
 	
@@ -10803,7 +10805,9 @@ int buildin_isequipped(struct script_state *st)
 		push_val(st->stack,C_INT,0);
 		return 0;
 	}
-	
+
+	setitem_hash = sd->setitem_hash;
+	setitem_hash2 = sd->setitem_hash2;
 	for (i=0; id!=0; i++)
 	{
 		FETCH (i+2, id) else id = 0;
@@ -10860,7 +10864,11 @@ int buildin_isequipped(struct script_state *st)
 			ret &= flag;
 		if (!ret) break;
 	}
-	
+	if (!ret)
+  	{	//When check fails, restore original hash values. [Skotlex]
+		sd->setitem_hash = setitem_hash;
+		sd->setitem_hash2 = setitem_hash2;
+	}
 	push_val(st->stack,C_INT,ret);
 	return 0;
 }

+ 4 - 4
src/map/skill.c

@@ -1818,14 +1818,14 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
 			return 0;
 	} else if (flag && skill_get_nk(skillid)&NK_SPLASH) {
 		//Note that splash attacks often only check versus the targetted mob, those around the splash area normally don't get checked for being hidden/cloaked/etc. [Skotlex]
-		if (!status_check_skilluse(dsrc, bl, skillid, 2))
+		if (!status_check_skilluse(src, bl, skillid, 2))
 			return 0;
 	}
 
-	BL_CAST(BL_PC, dsrc, sd);
+	BL_CAST(BL_PC, src, sd);
 	BL_CAST(BL_PC, bl, tsd);
 
-	sstatus = status_get_status_data(dsrc);
+	sstatus = status_get_status_data(src);
 	tstatus = status_get_status_data(bl);
 // Is this check really needed? FrostNova won't hurt you if you step right where the caster is?
 	if(skillid == WZ_FROSTNOVA && dsrc->x == bl->x && dsrc->y == bl->y)
@@ -5510,7 +5510,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 	case GS_GLITTERING:
 		if(sd) {
 			clif_skill_nodamage(src,bl,skillid,skilllv,1);
-			if(rand()%100 < (10+10*skilllv))
+			if(rand()%100 < (20+10*skilllv))
 				pc_addspiritball(sd,skill_get_time(skillid,skilllv),10);
 			else if(sd->spiritball > 0)
 				pc_delspiritball(sd,1,0);