Browse Source

Updated some more skills. ;P

git-svn-id: https://svn.code.sf.net/p/rathena/svn/athena@169 54d463be-8e91-2dee-dedb-b68131a5f0ec
celest 20 years ago
parent
commit
62089ca111
8 changed files with 263 additions and 214 deletions
  1. 5 1
      Changelog.txt
  2. 1 1
      db/skill_cast_db.txt
  3. 1 1
      db/skill_db.txt
  4. 1 1
      db/skill_require_db.txt
  5. 48 19
      src/map/battle.c
  6. 19 4
      src/map/pc.c
  7. 186 187
      src/map/skill.c
  8. 2 0
      src/map/skill.h

+ 5 - 1
Changelog.txt

@@ -6,7 +6,11 @@ Date	Added
 	* Fixed chrif_changesex and @changesex, now uses packet 0x3000. [MC Cameri]
         * Updated some skills, credits to orn and midas. [celest]
           - Magnum Break, Throw Stone, Sprinkle Sand, Magic Power, Memorise, Quagmire,
-            Spider Web, Reject Sword, and assassin's Dodge.
+            Spider Web, Reject Sword, assassin's Dodge, Demonbane, Divine Protection.
+          - Firewall, Quagmire, Fog Wall (100%), Marionette Control (30%), Sandman, 
+            Claymore Trap
+          - Adjusted some mob skills for mod support.
+        * Fixed weight increase when riding. [celest]
 
 11/12
 	* added folder: /save-tmpl, removed folder /save

+ 1 - 1
db/skill_cast_db.txt

@@ -263,7 +263,7 @@
 401,2000,0,600000,0	//CH_SOULCOLLECT#狂気功#
 402,0,800:900:1000:1100:1200,30000,0	//PF_MINDBREAKER
 403,5000,0,0,0 //PF_MEMORIZE 
-404,0,0,30000,10000	//PF_FOGWALL#フォグウォール#
+404,0,0,20000,10000	//PF_FOGWALL#フォグウォール#
 405,0,0,30000,8000	//PF_SPIDERWEB#スパイダーウェッブ#
 406,0,0,0,3000	//ASC_METEORASSAULT#メテオアサルト#
 407,0,5000,0,0	//ASC_CDP

+ 1 - 1
db/skill_db.txt

@@ -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,2,magic,0	//PF_FOGWALL#フォグウォール#
+404,3,6,2,2,1,5,1,yes,0,128,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#デッドリーポイズン製造#

+ 1 - 1
db/skill_require_db.txt

@@ -80,7 +80,7 @@
 89,0,0,78,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WZ_STORMGUST#???????#
 90,0,0,12:14:16:18:20,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WZ_EARTHSPIKE#???????#
 91,0,0,28:32:36:40:44,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WZ_HEAVENDRIVE#????????#
-92,0,0,15,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WZ_QUAGMIRE#??????#
+92,0,0,5:10:15:20:25,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WZ_QUAGMIRE#??????#
 93,0,0,10,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WZ_ESTIMATION#???????#
 
 108,0,0,5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//BS_REPAIRWEAPON#????#

+ 48 - 19
src/map/battle.c

@@ -247,8 +247,11 @@ int battle_get_agi(struct block_list *bl)
 		if(sc_data[SC_DECREASEAGI].timer!=-1)	// 速度減少
 			agi -= 2+sc_data[SC_DECREASEAGI].val1;
 
-		if(sc_data[SC_QUAGMIRE].timer!=-1 )	// クァグマイア
-			agi >>= 1;
+		if(sc_data[SC_QUAGMIRE].timer!=-1 ) {	// クァグマイア
+			//agi >>= 1;
+			int agib = agi*(sc_data[SC_QUAGMIRE].val1*10)/100;
+			agi -= agib > 50 ? 50 : agib;
+		}
 		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// トゥルーサイト
 			agi += 5;
 	}
@@ -345,8 +348,11 @@ int battle_get_dex(struct block_list *bl)
 			else dex += sc_data[SC_BLESSING].val1;	// その他
 		}
 
-		if(sc_data[SC_QUAGMIRE].timer!=-1 )	// クァグマイア
-			dex >>= 1;
+		if(sc_data[SC_QUAGMIRE].timer!=-1 )	{ // クァグマイア
+			// dex >>= 1;
+			int dexb = dex*(sc_data[SC_QUAGMIRE].val1*10)/100;
+			dex -= dexb > 50 ? 50 : dexb;
+		}
 		if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC)	// トゥルーサイト
 			dex += 5;
 	}
@@ -1581,6 +1587,10 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
 				damage<<=1;
 				skill_status_change_end(bl, SC_SPIDERWEB, -1);
 			}
+		
+		if(sc_data[SC_FOGWALL].timer != -1 && flag&BF_MAGIC)
+			if(rand()%100 < sc_data[SC_FOGWALL].val2)
+				damage = 0;
 	}
 
 	if(class == 1288 || class == 1287 || class == 1286 || class == 1285) {
@@ -2126,13 +2136,17 @@ static struct Damage battle_calc_pet_weapon_attack(
 	if(damage<1) damage=1;
 
 	// 回避修正
+	if(	hitrate < 1000000 && t_sc_data ) {			// 必中攻撃
+		if(t_sc_data[SC_FOGWALL].timer != -1 && flag&BF_LONG)
+			hitrate -= 50;
+		if (t_sc_data[SC_SLEEP].timer!=-1 ||	// 睡眠は必中
+			t_sc_data[SC_STAN].timer!=-1 ||		// スタンは必中
+			t_sc_data[SC_FREEZE].timer!=-1 || 
+			(t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0))	// 凍結は必中
+			hitrate = 1000000;
+	}
 	if(hitrate < 1000000)
 		hitrate = ( (hitrate>95)?95: ((hitrate<5)?5:hitrate) );
-	if(	hitrate < 1000000 &&			// 必中攻撃
-		(t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 ||	// 睡眠は必中
-		t_sc_data[SC_STAN].timer!=-1 ||		// スタンは必中
-		t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) )	// 凍結は必中
-		hitrate = 1000000;
 	if(type == 0 && rand()%100 >= hitrate) {
 		damage = damage2 = 0;
 		dmg_lv = ATK_FLEE;
@@ -2145,6 +2159,8 @@ static struct Damage battle_calc_pet_weapon_attack(
 		int cardfix=100;
 		if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG)
 			cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100;
+		if(t_sc_data[SC_FOGWALL].timer != -1 && flag&BF_LONG)
+			cardfix=cardfix*(100-t_sc_data[SC_FOGWALL].val2)/100;
 		if(cardfix != 100)
 			damage=damage*cardfix/100;
 	}
@@ -2613,13 +2629,17 @@ static struct Damage battle_calc_mob_weapon_attack(
 	if(damage<1) damage=1;
 
 	// 回避修正
+	if(	hitrate < 1000000 && t_sc_data ) {			// 必中攻撃
+		if(t_sc_data[SC_FOGWALL].timer != -1 && flag&BF_LONG)
+			hitrate -= 50;
+		if (t_sc_data[SC_SLEEP].timer!=-1 ||	// 睡眠は必中
+			t_sc_data[SC_STAN].timer!=-1 ||		// スタンは必中
+			t_sc_data[SC_FREEZE].timer!=-1 || 
+			(t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0))	// 凍結は必中
+			hitrate = 1000000;
+	}
 	if(hitrate < 1000000)
 		hitrate = ( (hitrate>95)?95: ((hitrate<5)?5:hitrate) );
-	if(	hitrate < 1000000 &&			// 必中攻撃
-		(t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 ||	// 睡眠は必中
-		t_sc_data[SC_STAN].timer!=-1 ||		// スタンは必中
-		t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) )	// 凍結は必中
-		hitrate = 1000000;
 	if(type == 0 && rand()%100 >= hitrate) {
 		damage = damage2 = 0;
 		dmg_lv = ATK_FLEE;
@@ -2651,6 +2671,8 @@ static struct Damage battle_calc_mob_weapon_attack(
 		int cardfix=100;
 		if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG)
 			cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100;
+		if(t_sc_data[SC_FOGWALL].timer != -1 && flag&BF_LONG)
+			cardfix=cardfix*(100-t_sc_data[SC_FOGWALL].val2)/100;
 		if(cardfix != 100)
 			damage=damage*cardfix/100;
 	}
@@ -3533,18 +3555,23 @@ static struct Damage battle_calc_pc_weapon_attack(
 	}
 
 	// 回避修正
+	if(	hitrate < 1000000 && t_sc_data ) {			// 必中攻撃
+		if(t_sc_data[SC_FOGWALL].timer != -1 && flag&BF_LONG)
+			hitrate -= 50;
+		if (t_sc_data[SC_SLEEP].timer!=-1 ||	// 睡眠は必中
+			t_sc_data[SC_STAN].timer!=-1 ||		// スタンは必中
+			t_sc_data[SC_FREEZE].timer!=-1 || 
+			(t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0))	// 凍結は必中
+			hitrate = 1000000;
+	}
 	hitrate = (hitrate<5)?5:hitrate;
-	if(	hitrate < 1000000 && // 必中攻撃
-		(t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 ||	// 睡眠は必中
-		t_sc_data[SC_STAN].timer!=-1 ||		// スタンは必中
-		t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) )	// 凍結は必中
-		hitrate = 1000000;
 	if(type == 0 && rand()%100 >= hitrate) {
 		damage = damage2 = 0;
 		dmg_lv = ATK_FLEE;
 	} else {
 		dmg_lv = ATK_DEF;
 	}
+
 	// スキル修正3(武器研究)
 	if( (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0) {
 		damage+= skill*2;
@@ -3665,6 +3692,8 @@ static struct Damage battle_calc_pc_weapon_attack(
 		cardfix=100;
 		if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG) //ディフェンダー状態で遠距離攻撃
 			cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100; //ディフェンダーによる減衰
+		if(t_sc_data[SC_FOGWALL].timer != -1 && flag&BF_LONG)
+			cardfix=cardfix*(100-t_sc_data[SC_FOGWALL].val2)/100;
 		if(cardfix != 100) {
 			damage=damage*cardfix/100; //ディフェンダー補正によるダメージ減少
 			damage2=damage2*cardfix/100; //ディフェンダー補正による左手ダメージ減少

+ 19 - 4
src/map/pc.c

@@ -1455,8 +1455,10 @@ int pc_calcstatus(struct map_session_data* sd,int first)
 			sd->paramb[0]+= 4;
 		if(sd->sc_data[SC_QUAGMIRE].timer!=-1){	// クァグマイア
 			sd->speed = sd->speed*3/2;
-			sd->paramb[1]-=(sd->status.agi+sd->paramb[1]+sd->parame[1])/2;
-			sd->paramb[4]-=(sd->status.dex+sd->paramb[4]+sd->parame[4])/2;
+			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;
 		}
 		if(sd->sc_data[SC_TRUESIGHT].timer!=-1){	// トゥルーサイト
 			sd->paramb[0]+= 5;
@@ -1466,6 +1468,14 @@ int pc_calcstatus(struct map_session_data* sd,int first)
 			sd->paramb[4]+= 5;
 			sd->paramb[5]+= 5;
 		}
+		if(sd->sc_data[SC_MARIONETTE].timer!=-1){
+			sd->paramb[0]-= (sd->status.str+sd->paramb[0]+sd->parame[0])/2;
+			sd->paramb[1]-= (sd->status.agi+sd->paramb[1]+sd->parame[1])/2;
+			sd->paramb[2]-= (sd->status.vit+sd->paramb[2]+sd->parame[2])/2;
+			sd->paramb[3]-= (sd->status.int_+sd->paramb[3]+sd->parame[3])/2;
+			sd->paramb[4]-= (sd->status.dex+sd->paramb[4]+sd->parame[4])/2;
+			sd->paramb[5]-= (sd->status.luk+sd->paramb[5]+sd->parame[5])/2;			
+		}
 	}
 
 	//1度も死んでないJob70スパノビに+10
@@ -1562,9 +1572,10 @@ int pc_calcstatus(struct map_session_data* sd,int first)
 		sd->speed += (1.2*DEFAULT_WALK_SPEED - skill*9);
 	if (pc_iscarton(sd) && (skill=pc_checkskill(sd,MC_PUSHCART))>0)	// カートによる速度低下
 		sd->speed += (10-skill) * (DEFAULT_WALK_SPEED * 0.1);
-	else if (pc_isriding(sd))	// ペコペコ乗りによる速度増加
+	else if (pc_isriding(sd)) {	// ペコペコ乗りによる速度増加
 		sd->speed -= (0.25 * DEFAULT_WALK_SPEED);
-		sd->max_weight += 1000;
+		sd->max_weight += 10000;
+	}
 	if(sd->sc_count){
 		if(sd->sc_data[SC_WINDWALK].timer!=-1)	//ウィンドウォーク時はLv*2%減算
 			sd->speed -= sd->speed *(sd->sc_data[SC_WINDWALK].val1*2)/100;
@@ -1890,6 +1901,10 @@ int pc_calcstatus(struct map_session_data* sd,int first)
 		if(sd->sc_data[SC_DELUGE].timer!=-1)	// エンチャントポイズン(属性はbattle.cで)
 			sd->addeff[0]+=sd->sc_data[SC_DELUGE].val2;//% of granting
 		*/
+		if(sd->sc_data[SC_KEEPING].timer!=-1)
+			sd->def = 100;
+		if(sd->sc_data[SC_BARRIER].timer!=-1)
+			sd->mdef = 100;
 	}
 
 	if(sd->speed_rate != 100)

File diff suppressed because it is too large
+ 186 - 187
src/map/skill.c


+ 2 - 0
src/map/skill.h

@@ -332,6 +332,8 @@ enum {	// struct map_session_data 
 	SC_SPELLBREAKER		=192,
 
 	SC_EDP				= 114,	// [Celest]
+	SC_MARIONETTE2      = 122,
+	SC_BLEEDING         = 124,
 
 // -- testing various SC effects
 //	SC_AURABLADE			=81,

Some files were not shown because too many files changed in this diff