Ver código fonte

Updated Quagmire, Enchant Deadly Poison, Fog Wall

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@416 54d463be-8e91-2dee-dedb-b68131a5f0ec
celest 20 anos atrás
pai
commit
7ff0e4c05c
6 arquivos alterados com 44 adições e 17 exclusões
  1. 1 0
      Changelog.txt
  2. 2 0
      db/Changelog.txt
  3. 2 2
      db/skill_db.txt
  4. 8 8
      src/map/battle.c
  5. 6 4
      src/map/pc.c
  6. 25 3
      src/map/skill.c

+ 1 - 0
Changelog.txt

@@ -1,6 +1,7 @@
 Date	Added
 11/29
         * Added more sc_data checks in skill.c and pc.c [celest]
+        * Updated Quagmire, Enchant Deadly Poison, Fog Wall [celest]
 
 11/28
 	* Fixed a crash in login_sql/login.c [MouseJstr]

+ 2 - 0
db/Changelog.txt

@@ -5,6 +5,8 @@
 	Ayathoya items == Added but no effect ( all are "ect" itens)
 	Skill databases == celest working on them i believe.
 
+11/29   * Updated skill_db for Quagmire, Fog Wall [celest]
+
 11/28	* Fixed Wedding rings placement 2->136 [Lupus]
 	* Fixed mob Amon Ra stats/drops [shadow]
 

+ 2 - 2
db/skill_db.txt

@@ -91,7 +91,7 @@
 89,8,6,2,1,1,10,1,yes,0,0,0,magic,2	//WZ_STORMGUST#スト??ガスト#
 90,8,8,1,2,0,5,1:2:3:4:5,yes,0,0,0,magic,0	//WZ_EARTHSPIKE#ア?ススパイク#
 91,8,8,2,2,0,5,1:2:3:4:5,yes,0,0,0,magic,0	//WZ_HEAVENDRIVE#ヘヴンズドライブ#
-92,8,6,2,2,1,5,1,yes,0,0,3,magic,0	//WZ_QUAGMIRE#ク?グ?イア#
+92,8,6,2,2,1,5,1,yes,0,128,3,magic,0	//WZ_QUAGMIRE#ク?グ?イア#
 93,8,6,1,0,1,1,1,yes,0,0,0,magic,0	//WZ_ESTIMATION#モンス??情報#
 94,0,0,0,0,0,5,0,no,0,0,0,weapon,0	//BS_IRON#鉄製造#
 95,0,0,0,0,0,5,0,no,0,0,0,weapon,0	//BS_STEEL#?鉄製造#
@@ -438,7 +438,7 @@
 401,0,6,4,0,1,1,1,yes,0,0,0,weapon,0	//CH_SOULCOLLECT#狂気功#
 402,8,6,1,0,1,10,1,no,0,0,0,none,0	//PF_MINDBREAKER#?インドブレ?カ?#
 403,0,0,4,0,1,1,1,yes,0,0,0,magic,0	//PF_MEMORIZE#メモライズ#
-404,3,6,2,2,1,5,1,yes,0,128,1,magic,0	//PF_FOGWALL#フォグウォ?ル#
+404,3,6,2,2,1,5,1,yes,0,256,1,magic,0	//PF_FOGWALL#フォグウォ?ル#
 405,3,6,2,0,1,5,1,no,0,128,2,misc,0	//PF_SPIDERWEB#スパイ??ウェッブ#
 406,-1,6,1,0,2,10,1,no,33,0,0,weapon,0	//ASC_METEORASSAULT#メテオアサルト#
 407,0,6,4,0,1,10,0,no,0,0,0,none,0	//ASC_CDP#デッドリ??イズン製造#

+ 8 - 8
src/map/battle.c

@@ -257,8 +257,9 @@ int battle_get_agi(struct block_list *bl)
 
 		if(sc_data[SC_QUAGMIRE].timer!=-1 ) {	// クァグマイア
 			//agi >>= 1;
-			int agib = agi*(sc_data[SC_QUAGMIRE].val1*10)/100;
-			agi -= agib > 50 ? 50 : agib;
+			//int agib = agi*(sc_data[SC_QUAGMIRE].val1*10)/100;
+			//agi -= agib > 50 ? 50 : agib;
+			agi -= (bl->type == BL_PC) ? sc_data[SC_QUAGMIRE].val1*5 : sc_data[SC_QUAGMIRE].val1*10;
 		}
 		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// トゥルーサイト
 			agi += 5;
@@ -367,8 +368,9 @@ int battle_get_dex(struct block_list *bl)
 
 		if(sc_data[SC_QUAGMIRE].timer!=-1 )	{ // クァグマイア
 			// dex >>= 1;
-			int dexb = dex*(sc_data[SC_QUAGMIRE].val1*10)/100;
-			dex -= dexb > 50 ? 50 : dexb;
+			//int dexb = dex*(sc_data[SC_QUAGMIRE].val1*10)/100;
+			//dex -= dexb > 50 ? 50 : dexb;
+			dex -= (bl->type == BL_PC) ? sc_data[SC_QUAGMIRE].val1*5 : sc_data[SC_QUAGMIRE].val1*10;
 		}
 		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// トゥルーサイト
 			dex += 5;
@@ -556,9 +558,7 @@ int battle_get_baseatk(struct block_list *bl)
 		if(sc_data[SC_CURSE].timer!=-1 ) //呪われていたら
 			batk -= batk*25/100; //base_atkが25%減少
 		if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //コンセントレーション
-			batk += batk*(5*sc_data[SC_CONCENTRATION].val1)/100;
-		if(sc_data[SC_EDP].timer != -1) // [Celest]
-			batk += batk*(50+50*sc_data[SC_EDP].val1)/100;
+			batk += batk*(5*sc_data[SC_CONCENTRATION].val1)/100;		
 	}
 	if(batk < 1) batk = 1; //base_atkは最低でも1
 	return batk;
@@ -3553,7 +3553,7 @@ static struct Damage battle_calc_pc_weapon_attack(
 	// 状態異常中のダメージ追加でクリティカルにも有効なスキル
 	if (sc_data) {
 		// エンチャントデッドリーポイズン
-		if(sc_data[SC_EDP].timer != -1) {
+		if(sc_data[SC_EDP].timer != -1 && skill_num != ASC_BREAKER && skill_num != ASC_METEORASSAULT) {
 			damage += damage * (150 + sc_data[SC_EDP].val1 * 50) / 100;
 			damage2 += damage2 * (150 + sc_data[SC_EDP].val1 * 50) / 100;
 			no_cardfix = 1;

+ 6 - 4
src/map/pc.c

@@ -1517,10 +1517,12 @@ int pc_calcstatus(struct map_session_data* sd,int first)
 		if(sd->sc_data[SC_LOUD].timer!=-1 && sd->sc_data[SC_QUAGMIRE].timer == -1)	// ラウドボイス
 			sd->paramb[0]+= 4;
 		if(sd->sc_data[SC_QUAGMIRE].timer!=-1){	// クァグマイア
-			int agib = (sd->status.agi+sd->paramb[1]+sd->parame[1])*(sd->sc_data[SC_QUAGMIRE].val1*10)/100;
-			int dexb = (sd->status.dex+sd->paramb[4]+sd->parame[4])*(sd->sc_data[SC_QUAGMIRE].val1*10)/100;
-			sd->paramb[1]-= agib > 50 ? 50 : agib;
-			sd->paramb[4]-= dexb > 50 ? 50 : dexb;
+			//int agib = (sd->status.agi+sd->paramb[1]+sd->parame[1])*(sd->sc_data[SC_QUAGMIRE].val1*10)/100;
+			//int dexb = (sd->status.dex+sd->paramb[4]+sd->parame[4])*(sd->sc_data[SC_QUAGMIRE].val1*10)/100;
+			//sd->paramb[1]-= agib > 50 ? 50 : agib;
+			//sd->paramb[4]-= dexb > 50 ? 50 : dexb;
+			sd->paramb[1]-= sd->sc_data[SC_QUAGMIRE].val1*5;
+			sd->paramb[4]-= sd->sc_data[SC_QUAGMIRE].val1*5;
 			sd->speed = sd->speed*3/2;
 		}
 		if(sd->sc_data[SC_TRUESIGHT].timer!=-1){	// トゥル?サイト

+ 25 - 3
src/map/skill.c

@@ -1270,7 +1270,7 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
 			skill_status_change_start(bl,SC_AUTOCOUNTER,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
 		break;
 	case PF_FOGWALL:		/* ホ?リ?クロス */
-		if( rand()%100 < 3*skilllv*sc_def_int/100 )
+		if(src!=bl && rand()%100 < 3*skilllv*sc_def_int/100 )
 			skill_status_change_start(bl,SC_BLIND,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
 		break;
 	case LK_HEADCRUSH:				/* ヘッドクラッシュ */
@@ -5965,7 +5965,7 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 	case 0xae:	/* 幸運のキス */
 	case 0xaf:	/* サ?ビスフォ?ユ? */
 	case 0xb4:
-	case 0xb6:				/* フォグウォ?ル */
+//	case 0xb6:				/* フォグウォ?ル */
 		{
 			struct skill_unit *unit2;
 			struct status_change *sc_data=battle_get_sc_data(bl);
@@ -6005,6 +6005,28 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
 			}
 		} break;
 
+	case 0xb6:				/* フォグウォ?ル */
+		{
+			struct skill_unit *unit2;
+			struct status_change *sc_data=battle_get_sc_data(bl);
+			int type=SkillStatusChangeTable[sg->skill_id];
+			if(sc_data) {
+				if (sc_data[type].timer==-1) {
+					skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
+						(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
+					skill_additional_effect(ss,bl,sg->skill_id,sg->skill_lv,BF_MISC,tick);
+				}
+				else if( (unit2=(struct skill_unit *)sc_data[type].val4) && unit2 != src ){
+					if( unit2->group && DIFF_TICK(sg->tick,unit2->group->tick)>0 ) {
+						skill_status_change_start(bl,type,sg->skill_lv,sg->val1,sg->val2,
+							(int)src,skill_get_time2(sg->skill_id,sg->skill_lv),0);
+						skill_additional_effect(ss,bl,sg->skill_id,sg->skill_lv,BF_MISC,tick);
+					}
+//					ts->tick-=sg->interval;
+				}
+			}
+		} break;
+
 	case 0xb1:	/* デモンストレ?ション */
 		skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
 		if(bl->type == BL_PC && rand()%100 < sg->skill_lv && battle_config.equipment_breaking)
@@ -6168,7 +6190,7 @@ int skill_unit_onout(struct skill_unit *src,struct block_list *bl,unsigned int t
 					sc_data[SC_BLIND].timer = add_timer(
 						gettick() + 30000, skill_status_change_timer, bl->id, 0);
 			}
-			sg->limit=DIFF_TICK(tick,sg->tick)+1000;
+			//sg->limit=DIFF_TICK(tick,sg->tick)+1000;
 		}
 		break;
 	case 0x9a:	/* ボルケ?ノ */