* Updated Stone Curse, Soul Drain, Auto Berserk

* Fixed MVP exp being multiplied twice

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@442 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
celest 2004-12-03 11:57:50 +00:00
parent feee1d2886
commit 18788ab4ea
9 changed files with 59 additions and 21 deletions

View File

@ -1,4 +1,8 @@
Date Added Date Added
12/3
* Updated Stone Curse, Soul Drain, Auto Berserk [celest]
* Added a fix for MVP exp being multiplied twice by Gengar
12/2 12/2
* Fixed double login feature, resets online users when map connects to char [Wizputer] * Fixed double login feature, resets online users when map connects to char [Wizputer]
* Changed all LOGS inserts to INSERT DELAYED (MySQL has this feature and cache unimportant queries, then * Changed all LOGS inserts to INSERT DELAYED (MySQL has this feature and cache unimportant queries, then

View File

@ -5,6 +5,8 @@
Ayathoya items == Added but no effect ( all are "ect" itens) Ayathoya items == Added but no effect ( all are "ect" itens)
Skill databases == celest working on them i believe. Skill databases == celest working on them i believe.
12/3 * corrected Spider Web's maximum level [celest]
* Removed Soul Drain from Professor's skill tree [celest]
12/2 * Updated skill tree prerequisites for the new kRO skills [celest] 12/2 * Updated skill tree prerequisites for the new kRO skills [celest]

View File

@ -145,7 +145,7 @@
143,0,6,4,0,1,1,1,no,0,1,0,none,0 //NV_TRICKDEAD#?んだふり# 143,0,6,4,0,1,1,1,no,0,1,0,none,0 //NV_TRICKDEAD#?んだふり#
144,0,0,0,0,0,1,0,no,0,1,0,none,0 //SM_MOVINGRECOVERY#移動時HP回復# 144,0,0,0,0,0,1,0,no,0,1,0,none,0 //SM_MOVINGRECOVERY#移動時HP回復#
145,0,0,0,0,0,1,0,no,0,1,0,weapon,0 //SM_FATALBLOW#?所攻撃# 145,0,0,0,0,0,1,0,no,0,1,0,weapon,0 //SM_FATALBLOW#?所攻撃#
146,0,0,0,0,0,1,0,no,0,1,0,weapon,0 //SM_AUTOBERSERK#オ?トバ?サ?ク# 146,0,6,4,0,1,1,1,no,0,1,0,weapon,0 //SM_AUTOBERSERK#オ?トバ?サ?ク#
147,0,0,4,0,1,1,0,no,0,1,0,weapon,0 //AC_MAKINGARROW#矢作成# 147,0,0,4,0,1,1,0,no,0,1,0,weapon,0 //AC_MAKINGARROW#矢作成#
148,-3,6,1,0,2,1,1,no,0,1,0,weapon,6 //AC_CHARGEARROW#?ャ?ジアロ?# 148,-3,6,1,0,2,1,1,no,0,1,0,weapon,6 //AC_CHARGEARROW#?ャ?ジアロ?#
149,8,6,1,2,0,1,1,no,0,1,0,weapon,0 //TF_SPRINKLESAND#砂まき# 149,8,6,1,2,0,1,1,no,0,1,0,weapon,0 //TF_SPRINKLESAND#砂まき#
@ -439,7 +439,7 @@
402,8,6,1,0,1,10,1,no,0,0,0,none,0 //PF_MINDBREAKER#?インドブレ?カ?# 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#メモライズ# 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,256,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#スパイ??ウェッブ# 405,3,6,2,0,1,1,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#メテオアサルト# 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#デッドリ??イズン製造# 407,0,6,4,0,1,10,0,no,0,0,0,none,0 //ASC_CDP#デッドリ??イズン製造#
408,0,0,4,0,1,1,1,yes,0,0,0,magic,0 //WE_BABY## 408,0,0,4,0,1,1,1,yes,0,0,0,magic,0 //WE_BABY##

View File

@ -116,6 +116,7 @@
142,0,0,3,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 //NV_FIRSTAID#?急手?# 142,0,0,3,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 //NV_FIRSTAID#?急手?#
143,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 //NV_TRICKDEAD#死んだふり# 143,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 //NV_TRICKDEAD#死んだふり#
146,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 //SM_AUTOBERSERK#オ?トバ?サ?ク#
147,0,0,10,0,0,0,99,recover_weight_rate,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#矢作成# 147,0,0,10,0,0,0,99,recover_weight_rate,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#矢作成#
148,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 //AC_CHARGEARROW#チャ?ジアロ?# 148,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 //AC_CHARGEARROW#チャ?ジアロ?#
149,0,0,9,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 //TF_SPRINKLESAND#砂まき# 149,0,0,9,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 //TF_SPRINKLESAND#砂まき#

View File

@ -1037,14 +1037,14 @@
4017,288,5,285,3,286,3,287,3,0,0,0,0//SA_LANDPROTECTOR #ランドプロテクター# 4017,288,5,285,3,286,3,287,3,0,0,0,0//SA_LANDPROTECTOR #ランドプロテクター#
4017,289,5,277,3,0,0,0,0,0,0,0,0//SA_DISPELL #ディスペル# 4017,289,5,277,3,0,0,0,0,0,0,0,0//SA_DISPELL #ディスペル#
4017,290,10,279,5,288,1,289,1,0,0,0,0//SA_ABRACADABRA #アブラカタブラ# 4017,290,10,279,5,288,1,289,1,0,0,0,0//SA_ABRACADABRA #アブラカタブラ#
4017,364,10,9,5,13,7,0,0,0,0,0,0//HW_SOULDRAIN #ソウルドレイン# //4017,364,10,9,5,13,7,0,0,0,0,0,0//HW_SOULDRAIN #ソウルドレイン#
4017,373,5,9,1,276,1,0,0,0,0,0,0//PF_HPCONVERSION #ライフ置き換え# 4017,373,5,9,1,276,1,0,0,0,0,0,0//PF_HPCONVERSION #ライフ置き換え#
4017,374,1,276,3,277,2,0,0,0,0,0,0//PF_SOULCHANGE #ソウルチェンジ# 4017,374,1,276,3,277,2,0,0,0,0,0,0//PF_SOULCHANGE #ソウルチェンジ#
4017,375,5,275,5,276,3,277,3,0,0,0,0//PF_SOULBURN #ソウルバーン# 4017,375,5,275,5,276,3,277,3,0,0,0,0//PF_SOULBURN #ソウルバーン#
4017,402,1,9,3,289,2,0,0,0,0,0,0//PF_MINDBREAKER #マインドブレーカー# 4017,402,1,9,3,289,2,0,0,0,0,0,0//PF_MINDBREAKER #マインドブレーカー#
4017,403,1,274,5,278,5,279,1,0,0,0,0//PF_MEMORIZE #メモライズ# 4017,403,1,274,5,278,5,279,1,0,0,0,0//PF_MEMORIZE #メモライズ#
4017,404,1,286,2,287,2,0,0,0,0,0,0//PF_FOGWALL #フォグウォール# 4017,404,1,286,2,287,2,0,0,0,0,0,0//PF_FOGWALL #フォグウォール#
4017,405,5,284,4,0,0,0,0,0,0,0,0//PF_SPIDERWEB #スパイダーウェッブ# 4017,405,1,284,4,0,0,0,0,0,0,0,0//PF_SPIDERWEB #スパイダーウェッブ#
//Stalker //Stalker
4018,1,9,0,0,0,0,0,0,0,0,0,0//NV_BASIC #基本スキル# 4018,1,9,0,0,0,0,0,0,0,0,0,0//NV_BASIC #基本スキル#
4018,142,1,0,0,0,0,0,0,0,0,0,0//NV_FIRSTAID #応急手当# 4018,142,1,0,0,0,0,0,0,0,0,0,0//NV_FIRSTAID #応急手当#

View File

@ -2295,7 +2295,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
mob_unlocktarget((struct mob_data *)src,tick); mob_unlocktarget((struct mob_data *)src,tick);
/* ソウルドレイン */ /* ソウルドレイン */
if(sd && (skill=pc_checkskill(sd,HW_SOULDRAIN))>0){ if(sd && sd->state.attack_type == BF_MAGIC && (skill=pc_checkskill(sd,HW_SOULDRAIN))>0){
clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,skill,1); clif_skill_nodamage(src,&md->bl,HW_SOULDRAIN,skill,1);
sp = (battle_get_lv(&md->bl))*(65+15*skill)/100; sp = (battle_get_lv(&md->bl))*(65+15*skill)/100;
if(sd->status.sp + sp > sd->status.max_sp) if(sd->status.sp + sp > sd->status.max_sp)
@ -2529,7 +2529,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
int log_mvp[2] = {0}; int log_mvp[2] = {0};
int j; int j;
int mexp; int mexp;
temp = ((double)mob_db[md->class].mexp * (double)battle_config.mvp_exp_rate * (9.+(double)count)/1000.); temp = ((double)mob_db[md->class].mexp * (9.+(double)count)/10.); //[Gengar]
mexp = (temp > 2147483647.)? 0x7fffffff:(int)temp; mexp = (temp > 2147483647.)? 0x7fffffff:(int)temp;
if(mexp < 1) mexp = 1; if(mexp < 1) mexp = 1;
clif_mvp_effect(mvp_sd); // エフェクト clif_mvp_effect(mvp_sd); // エフェクト

View File

@ -2098,7 +2098,8 @@ int pc_calcstatus(struct map_session_data* sd,int first)
before.cart_weight != before.cart_weight || before.cart_max_weight != before.cart_max_weight ) before.cart_weight != before.cart_weight || before.cart_max_weight != before.cart_max_weight )
clif_updatestatus(sd,SP_CARTINFO);*/ clif_updatestatus(sd,SP_CARTINFO);*/
if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 && //if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
if(sd->status.hp<sd->status.max_hp>>2 && sd->sc_data[SC_AUTOBERSERK].timer != -1 &&
(sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 ) && !pc_isdead(sd)) (sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 ) && !pc_isdead(sd))
// オ?トバ?サ?ク?動 // オ?トバ?サ?ク?動
skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0); skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);
@ -5339,7 +5340,8 @@ int pc_damage(struct block_list *src,struct map_session_data *sd,int damage)
// まだ生きているならHP更新 // まだ生きているならHP更新
clif_updatestatus(sd,SP_HP); clif_updatestatus(sd,SP_HP);
if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 && //if(sd->status.hp<sd->status.max_hp>>2 && pc_checkskill(sd,SM_AUTOBERSERK)>0 &&
if(sd->status.hp<sd->status.max_hp>>2 && sd->sc_data[SC_AUTOBERSERK].timer != -1 &&
(sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 )) (sd->sc_data[SC_PROVOKE].timer==-1 || sd->sc_data[SC_PROVOKE].val2==0 ))
// オ?トバ?サ?ク?動 // オ?トバ?サ?ク?動
skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0); skill_status_change_start(&sd->bl,SC_PROVOKE,10,1,0,0,0,0);

View File

@ -1,4 +1,4 @@
// $Id: skill.c,v 1.8 2004/12/2 12:58:19 AM Celestia Exp $ // $Id: skill.c,v 1.8 2004/12/3 7:53:42 PM Celestia Exp $
/* スキル?係 */ /* スキル?係 */
#include <stdio.h> #include <stdio.h>
@ -114,7 +114,7 @@ int SkillStatusChangeTable[]={ /* skill.h
SC_SPLASHER, /* ベナムスプラッシャ? */ SC_SPLASHER, /* ベナムスプラッシャ? */
-1, -1,
SC_TRICKDEAD, /* 死んだふり */ SC_TRICKDEAD, /* 死んだふり */
-1,-1,-1,-1,-1,-1, -1,-1,SC_AUTOBERSERK,-1,-1,-1,
/* 150- */ /* 150- */
-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,
SC_LOUD, /* ラウドボイス */ SC_LOUD, /* ラウドボイス */
@ -3218,6 +3218,19 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
skill_status_change_start(src,SC_BLOCKSKILL,skilllv,0,skillid,0,10000,0 ); skill_status_change_start(src,SC_BLOCKSKILL,skilllv,0,skillid,0,10000,0 );
break; break;
case SM_AUTOBERSERK: // Celest
{
struct status_change *tsc_data = battle_get_sc_data(bl);
int sc=SkillStatusChangeTable[skillid];
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if( tsc_data ){
if( tsc_data[sc].timer==-1 )
skill_status_change_start(bl,sc,skilllv,0,0,0,0,0);
else
skill_status_change_end(bl, sc, -1);
}
}
break;
case AS_ENCHANTPOISON: // Prevent spamming [Valaris] case AS_ENCHANTPOISON: // Prevent spamming [Valaris]
if(bl->type==BL_PC) { if(bl->type==BL_PC) {
@ -3693,6 +3706,8 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
skill_status_change_start(bl,SC_STONE,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0); skill_status_change_start(bl,SC_STONE,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
else if(sd) else if(sd)
clif_skill_fail(sd,skillid,0,0); clif_skill_fail(sd,skillid,0,0);
if (dstmd)
mob_target(dstmd,src,skill_get_range(skillid,skilllv));
break; break;
case NV_FIRSTAID: /* ?急手? */ case NV_FIRSTAID: /* ?急手? */
@ -8542,6 +8557,10 @@ int skill_status_change_end(struct block_list* bl, int type, int tid)
case SC_REGENERATION: case SC_REGENERATION:
calc_flag = 1; calc_flag = 1;
break; break;
case SC_AUTOBERSERK:
if (sc_data[SC_PROVOKE].timer != -1)
skill_status_change_end(bl,SC_PROVOKE,-1);
break;
case SC_BERSERK: /* バ?サ?ク */ case SC_BERSERK: /* バ?サ?ク */
calc_flag = 1; calc_flag = 1;
clif_status_change(bl,SC_INCREASEAGI,0); /* アイコン消去 */ clif_status_change(bl,SC_INCREASEAGI,0); /* アイコン消去 */
@ -8870,6 +8889,7 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
break; break;
case SC_ENDURE: /* インデュア */ case SC_ENDURE: /* インデュア */
case SC_AUTOBERSERK: // Celest
if(sd && sd->special_state.infinite_endure) { if(sd && sd->special_state.infinite_endure) {
sc_data[type].timer=add_timer( 1000*60+tick,skill_status_change_timer, bl->id, data ); sc_data[type].timer=add_timer( 1000*60+tick,skill_status_change_timer, bl->id, data );
//sc_data[type].val2=1; //sc_data[type].val2=1;
@ -9305,6 +9325,14 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
calc_flag = 1; // for updating mdef calc_flag = 1; // for updating mdef
val2 = 7; // [Celest] val2 = 7; // [Celest]
break; break;
case SC_AUTOBERSERK:
{
tick = 60*1000;
if (bl->type == BL_PC && sd->status.hp<sd->status.max_hp>>2 &&
(sc_data[SC_PROVOKE].timer==-1 || sc_data[SC_PROVOKE].val2==0))
skill_status_change_start(bl,SC_PROVOKE,10,1,0,0,0,0);
}
break;
case SC_CONCENTRATE: /* 集中力向上 */ case SC_CONCENTRATE: /* 集中力向上 */
calc_flag = 1; calc_flag = 1;
break; break;

View File

@ -1,4 +1,4 @@
// $Id: skill.h,v 1.5 2004/11/26 5:47:12 PM Celestia Exp $ // $Id: skill.h,v 1.5 2004/12/3 7:53:26 PM Celestia $
#ifndef _SKILL_H_ #ifndef _SKILL_H_
#define _SKILL_H_ #define _SKILL_H_
@ -326,6 +326,7 @@ enum { // struct map_session_data
SC_BROKNARMOR =32, SC_BROKNARMOR =32,
SC_BROKNWEAPON =33, SC_BROKNWEAPON =33,
SC_SLOWDOWN =45, // for skill slowdown SC_SLOWDOWN =45, // for skill slowdown
SC_AUTOBERSERK =46,
SC_SIGHTTRASHER =73, SC_SIGHTTRASHER =73,
// SC_BASILICA =125, // 125 is the same id as joint break // SC_BASILICA =125, // 125 is the same id as joint break
SC_BASILICA =102, // temporarily use this before an actual id is found [celest] SC_BASILICA =102, // temporarily use this before an actual id is found [celest]
@ -343,18 +344,18 @@ enum { // struct map_session_data
SC_SPELLBREAKER =192, SC_SPELLBREAKER =192,
SC_DPOISON =193, /* –Ò“Å */ SC_DPOISON =193, /* –Ò“Å */
SC_BLOCKSKILL =194, // for disallowing the use of a skill for a time period SC_BLOCKSKILL =194, // for disallowing the use of a skill for a time period
SC_LEADERSHIP =196,
SC_GLORYWOUNDS =197,
SC_SOULCOLD =198,
SC_HAWKEYES =199,
SC_BATTLEORDERS =200,
SC_REGENERATION =201,
SC_PRESERVE =202,
// [Celest] // [Celest]
SC_BLEEDING = 124, // Temporarily same id as headcrush SC_BLEEDING = 124, // Temporarily same id as headcrush
SC_MOONLIT = 195, SC_MOONLIT =195,
SC_LEADERSHIP = 196,
SC_GLORYWOUNDS = 197,
SC_SOULCOLD = 198,
SC_HAWKEYES = 199,
SC_BATTLEORDERS = 200,
SC_REGENERATION = 201,
SC_PRESERVE = 202,
// -- testing various SC effects // -- testing various SC effects
// SC_AURABLADE =81, // SC_AURABLADE =81,
// SC_CONCENTRATION =83, // SC_CONCENTRATION =83,