Browse Source

* Added 'bDelayrate' and changed Phen card, Marduk Card and Berzebub Card's effects to use this
* Some tidying up of skill_castfix and skill_delayfix

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

celest 20 năm trước cách đây
mục cha
commit
2d61cf08f7
9 tập tin đã thay đổi với 40 bổ sung23 xóa
  1. 4 0
      Changelog.txt
  2. 6 0
      db/Changelog.txt
  3. 3 0
      db/const.txt
  4. 4 4
      db/item_db.txt
  5. 4 4
      db/skill_cast_db.txt
  6. 2 2
      db/skill_require_db.txt
  7. 4 4
      src/map/map.h
  8. 5 0
      src/map/pc.c
  9. 8 9
      src/map/skill.c

+ 4 - 0
Changelog.txt

@@ -1,5 +1,9 @@
 Date	Added
 01/07
+        * Added 'bDelayrate' and changed Phen card, Marduk Card and Berzebub Card's
+          effects to use this instead of bCastrate (which was reducing casting time,
+          not delay time) [celest]
+        * Some tidying up of skill_castfix and skill_delayfix [celest]
         * Added Filougarou's fix for Bowling Bash causing it to only display damage, 
           but doesn't do any - thanks! [celest]
         * Set delay_dependon_dex in battle_athena to 'no' by default [celest]

+ 6 - 0
db/Changelog.txt

@@ -5,6 +5,12 @@
 	Ayathoya items == Added but no effect ( all are "ect" itens)
 	Skill databases == celest working on them i believe.
 
+01/07
+        * Added midas' fix for Hammerfall and Adrenaline Rush [celest]
+        * Added 'bDelayrate' and changed Phen card, Marduk Card and Berzebub Card's
+          effects to use this instead of bCastrate (which was reducing casting time,
+          not delay time) [celest]
+
 01/05
         * Added DracoRPG's changes [celest]
           - changed Gungnir to wind element

+ 3 - 0
db/const.txt

@@ -215,6 +215,9 @@ bDisguise		1077
 bClassChange	1078
 bHPDrainValue	1079
 bSPDrainValue	1080
+bWeaponAtk	1081
+bWeaponAtkRate	1082
+bDelayrate	1083
 
 bRestartFullRecover	2000
 bNoCastCancel	2001

+ 4 - 4
db/item_db.txt

@@ -1097,7 +1097,7 @@
 4074,BigFoot_Card,BigFoot Card,6,20,0,10,,,,,,,32,,,,{},{ bonus2 bSubRace,4,30; }
 4075,Argos_Card,Argos Card,6,20,0,10,,,,,,,32,,,,{},{ bonus2 bResEff,Eff_Stone,2000; bonus bDef,1; }
 4076,Magnolia_Card,Magnolia Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddEff,Eff_Curse,500; bonus bBaseAtk,5; }
-4077,Phen_Card,Phen Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bNoCastCancel,0; bonus bCastrate,25; }
+4077,Phen_Card,Phen Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bNoCastCancel,0; bonus bDelayrate,25; }
 4078,Savage_Card,Savage Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bVit,3; }
 4079,Mantis_Card,Mantis Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bStr,3; }
 4080,Flora_Card,Flora Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace,5,20; }
@@ -1132,7 +1132,7 @@
 4109,Jakk_Card,Jakk Card,6,20,0,10,,,,,,,4,,,,{},{ bonus2 bSubEle,3,30; bonus bFlee,5; }
 4110,Ghoul_Card,Ghoul Card,6,20,0,10,,,,,,,769,,,,{},{ bonus2 bResEff,Eff_Poison,2000; bonus bDef,1; }
 4111,Strouf_Card,Strouf Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bAddRace,6,20; }
-4112,Marduk_Card,Marduk Card,6,20,0,10,,,,,,,769,,,,{},{ bonus2 bResEff,Eff_Silence,10000; }
+4112,Marduk_Card,Marduk Card,6,20,0,10,,,,,,,769,,,,{},{ bonus2 bResEff,Eff_Silence,10000; bonus bDelayrate,-5; }
 4113,Marionette_Card,Marionette Card,6,20,0,10,,,,,,,4,,,,{},{ bonus2 bSubEle,8,30; bonus bFlee,5; }
 4114,Argiope_Card,Argiope Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bDefEle,5; bonus bDef,1; }
 4115,Hunter_Fly_Card,Hunter Fly Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bHpDrainRate,3,15; }
@@ -1165,7 +1165,7 @@
 4142,Doppelganger_Card,Doppelganger Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAspdRate,15; }
 4143,Orc_Hero_Card,Orc Hero Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bVit,3; bonus2 bResEff,Eff_Stan,10000; }
 4144,Osiris_Card,Osiris Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bRestartFullRecover,0; }
-4145,Berzebub_Card,Berzebub Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bCastrate,-30; bonus bMaxSPrate,-15; bonus bMaxHPrate,-5; }
+4145,Berzebub_Card,Berzebub Card,6,20,0,10,,,,,,,136,,,,{},{ bonus bDelayrate,-30; bonus bMaxSPrate,-15; bonus bMaxHPrate,-5; }
 4146,Maya_Card,Maya Card,6,20,0,10,,,,,,,32,,,,{},{ bonus bMagicDamageReturn,30; }
 4147,Baphomet_Card,Baphomet Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bHit,-10; bonus bSplashRange,1; }
 4148,Pharaoh_Card,Pharaoh Card,6,20,0,10,,,,,,,769,,,,{},{ bonus bUseSPrate,-30; }
@@ -1181,7 +1181,7 @@
 4158,Dark_Priest_Card,Dark Priest Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bUseSPrate,-15; }
 4159,Punk_Card,Punk Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bUseSPrate,-5; }
 4160,Zherlthsh_Card,Zherlthsh Card,6,20,0,10,,,,,,,4,,,,{},{ bonus bUseSPrate,-10; }
-4161,Mysteltainn_Card,Mysteltainn Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bAtk,30; bonus bMaxHPrate,-22; bonus bCastrate,-10; }
+4161,Mysteltainn_Card,Mysteltainn Card,6,20,0,10,,,,,,,64,,,,{},{ bonus bAtk,30; bonus bMaxHPrate,-22; bonus bDelayrate,-10; }
 4162,Tirfing_Card,Tirfing Card,6,20,0,10,,,,,,,2,,,,{},{ bonus bAgi,3; bonus bFlee,10; }
 4163,Executioner_Card,Executioner Card,6,20,0,10,,,,,,,2,,,,{},{ bonus2 bRandomAttackIncrease,300, 4; }
 4164,Anolian_Card,Anolian Card,6,20,0,10,,,,,,,16,,,,{},{ bonus bStr,2; }

+ 4 - 4
db/skill_cast_db.txt

@@ -270,7 +270,7 @@
 476,1000,1000,75000:90000:105000:120000:135000,0	//ST_FULLSTRIP##
 479,2000,0,120000:240000:360000:480000:600000,0	//CR_FULLPROTECTION##
 
-10010,100,60000,0	//GD_BATTLEORDER##
-10011,100,60000,0	//GD_REGENERATION##
-10012,100,0,0	//GD_RESTORE##
-10013,100,0,0	//GD_EMERGENCYCALL##
+10010,100,1000,60000,0	//GD_BATTLEORDER##
+10011,100,1000,60000,0	//GD_REGENERATION##
+10012,100,1000,0,0	//GD_RESTORE##
+10013,100,1000,0,0	//GD_EMERGENCYCALL##

+ 2 - 2
db/skill_require_db.txt

@@ -85,8 +85,8 @@
 
 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#武器修理#
 
-110,0,0,10,0,0,0,7:8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//BS_HAMMERFALL#ハンマ?フォ?ル#
-111,0,0,20:23:26:29:32,0,0,0,6:7:8:9,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//BS_ADRENALINE#アドレナリンラッシュ#
+110,0,0,10,0,0,0,6:7:8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//BS_HAMMERFALL#ハンマ?フォ?ル#
+111,0,0,20:23:26:29:32,0,0,0,6:7:8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//BS_ADRENALINE#アドレナリンラッシュ#
 112,0,0,18:16:14:12: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	//BS_WEAPONPERFECT#ウェポンパ?フェクション#
 113,0,0,18:16:14:12: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	//BS_OVERTHRUST#オ?バ?トラスト#
 114,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	//BS_MAXIMIZE#マキシマイズパワ?#

+ 4 - 4
src/map/map.h

@@ -240,7 +240,7 @@ struct map_session_data {
 	int watk,watk2,atkmods[3];
 	int def,def2,mdef,mdef2,critical,matk1,matk2;
 	int atk_ele,def_ele,star,overrefine;
-	int castrate,hprate,sprate,dsprate;
+	int castrate,delayrate,hprate,sprate,dsprate;
 	int addele[10],addrace[12],addsize[3],subele[10],subrace[12];
 	int addeff[10],addeff2[10],reseff[10];
 	int watk_,watk_2,atkmods_[3],addele_[10],addrace_[12],addsize_[3];	//“ń“�—¬‚Ě‚˝‚߂ɒljÁ
@@ -616,11 +616,11 @@ enum {
 	SP_DISGUISE,SP_CLASSCHANGE, // 1077-1078
 	SP_HP_DRAIN_VALUE,SP_SP_DRAIN_VALUE, // 1079-1080
 	SP_WEAPON_ATK,SP_WEAPON_ATK_RATE, // 1081-1082
+	SP_DELAYRATE,	// 1083
 
 	SP_RESTART_FULL_RECORVER=2000,SP_NO_CASTCANCEL,SP_NO_SIZEFIX,SP_NO_MAGIC_DAMAGE,SP_NO_WEAPON_DAMAGE,SP_NO_GEMSTONE, // 2000-2005
-	SP_NO_CASTCANCEL2,SP_INFINITE_ENDURE,SP_UNBREAKABLE_WEAPON,SP_UNBREAKABLE_ARMOR, SP_UNBREAKABLE_HELM, 
-	SP_UNBREAKABLE_SHIELD, // 2006-2011
-	SP_LONG_ATK_RATE // 2012 - celest
+	SP_NO_CASTCANCEL2,SP_INFINITE_ENDURE,SP_UNBREAKABLE_WEAPON,SP_UNBREAKABLE_ARMOR, SP_UNBREAKABLE_HELM, // 2006-2010
+	SP_UNBREAKABLE_SHIELD, SP_LONG_ATK_RATE // 2011-2012
 };
 
 enum {

+ 5 - 0
src/map/pc.c

@@ -1296,6 +1296,7 @@ int pc_calcstatus(struct map_session_data* sd,int first)
 	sd->hprate=battle_config.hp_rate;
 	sd->sprate=battle_config.sp_rate;
 	sd->castrate=100;
+	sd->delayrate=100;
 	sd->dsprate=100;
 	sd->base_atk=0;
 	sd->arrow_atk=0;
@@ -2722,6 +2723,10 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
 		if(sd->status.weapon == 11 && sd->state.lr_flag != 2)
 			sd->atk_rate += val;
 		break;
+	case SP_DELAYRATE:
+		if(sd->state.lr_flag != 2)
+			sd->delayrate+=val;
+		break;
 	default:
 		if(battle_config.error_log)
 			printf("pc_bonus: unknown type %d %d !\n",type,val);

+ 8 - 9
src/map/skill.c

@@ -7398,7 +7398,6 @@ int skill_castfix( struct block_list *bl, int time )
 	struct map_session_data *sd = NULL;
 	struct mob_data *md; // [Valaris]
 	struct status_change *sc_data;
-	int dex;
 	int castrate=100;
 	int skill,lv;
 
@@ -7417,7 +7416,6 @@ int skill_castfix( struct block_list *bl, int time )
 	if(lv <= 0) return 0;
 
 	sc_data = battle_get_sc_data(bl);
-	dex=battle_get_dex(bl);
 
 	if (skill > MAX_SKILL_DB || skill < 0)
 	    return 0;
@@ -7430,11 +7428,9 @@ int skill_castfix( struct block_list *bl, int time )
 	if(time==0)
 		return 0;
 	if (sd) {
-		if(skill_get_castnodex(skill, lv) > 0)
+		if(!skill_get_castnodex(skill, lv) > 0) {
 			castrate=((struct map_session_data *)bl)->castrate;
-		else {
-			castrate=((struct map_session_data *)bl)->castrate;
-			time=time*castrate*(battle_config.castrate_dex_scale - dex)/(battle_config.castrate_dex_scale * 100);
+			time=time*castrate*(battle_config.castrate_dex_scale - battle_get_dex(bl))/(battle_config.castrate_dex_scale * 100);
 			time=time*battle_config.cast_rate/100;
 		}
 	}
@@ -7455,6 +7451,7 @@ int skill_delayfix( struct block_list *bl, int time )
 	struct status_change *sc_data;
 	struct map_session_data *sd = NULL;
 	int skill,lv = 0;
+	int delayrate=100;
 	
 	nullpo_retr(0, bl);
 
@@ -7473,12 +7470,14 @@ int skill_delayfix( struct block_list *bl, int time )
 		time = battle_get_adelay (bl)/2;
 
 	if(sd) {
+		delayrate=((struct map_session_data *)bl)->delayrate;
+
 		if(battle_config.delay_dependon_dex &&	/* dexの影響を計算する */
 			!skill_get_delaynodex(skill, lv))	// if skill casttime is allowed to be reduced by dex
-			time=time*(battle_config.castrate_dex_scale - battle_get_dex(bl))/battle_config.castrate_dex_scale;
+			time=time*delayrate*(battle_config.castrate_dex_scale - battle_get_dex(bl))/(battle_config.castrate_dex_scale * 100);
+
+		time=time*battle_config.delay_rate/100;
 	}
-	
-	time=time*battle_config.delay_rate/100;
 
 	/* ブラギの詩 */
 	if(sc_data && sc_data[SC_POEMBRAGI].timer!=-1 )