diff options
author | celest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2004-11-26 10:02:29 +0000 |
---|---|---|
committer | celest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2004-11-26 10:02:29 +0000 |
commit | b064f50c5c54c66cd8e91e75f000a8caa14968d6 (patch) | |
tree | 7dcd12076e63e3e2dbe02a504ac1724289af3f23 | |
parent | 91b84dacf6e1376e097cff7c7eff697d21bf1c62 (diff) | |
download | hercules-b064f50c5c54c66cd8e91e75f000a8caa14968d6.tar.gz hercules-b064f50c5c54c66cd8e91e75f000a8caa14968d6.tar.bz2 hercules-b064f50c5c54c66cd8e91e75f000a8caa14968d6.tar.xz hercules-b064f50c5c54c66cd8e91e75f000a8caa14968d6.zip |
Finished Full Strip, Weapon Refine, Slim Pitcher and Full Protection
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/athena@369 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r-- | Changelog.txt | 3 | ||||
-rw-r--r-- | Dev/bugs.txt | 3 | ||||
-rw-r--r-- | db/skill_cast_db.txt | 4 | ||||
-rw-r--r-- | db/skill_db.txt | 14 | ||||
-rw-r--r-- | db/skill_require_db.txt | 6 | ||||
-rw-r--r-- | db/skill_tree.txt | 6 | ||||
-rw-r--r-- | src/map/battle.c | 10 | ||||
-rw-r--r-- | src/map/clif.c | 27 | ||||
-rw-r--r-- | src/map/clif.h | 1 | ||||
-rw-r--r-- | src/map/guild.c | 6 | ||||
-rw-r--r-- | src/map/pc.c | 99 | ||||
-rw-r--r-- | src/map/pc.h | 1 | ||||
-rw-r--r-- | src/map/skill.c | 92 | ||||
-rw-r--r-- | src/map/skill.h | 8 |
14 files changed, 205 insertions, 75 deletions
diff --git a/Changelog.txt b/Changelog.txt index b89769f76..2bc1f2b4c 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,4 +1,7 @@ Date Added +11/26 + * Finished Full Strip, Weapon Refine, Slim Pitcher and Full Protection. [celest] + 11/25 * Added @skilltree to help GM's answer skill tree questions [MouseJstr] * Update Spider Web; I believe you cannot use it on yourself now. [Codemaster] diff --git a/Dev/bugs.txt b/Dev/bugs.txt index 47f24c7a7..7b4de0165 100644 --- a/Dev/bugs.txt +++ b/Dev/bugs.txt @@ -81,7 +81,8 @@ Progess: 0% Problem: @job/#job turns you into 2-2-1 and not into any other jobs Assigned: N/a -Progess: 0% +Progess: 0% (Notes by Celest: Actually, check here ^_- +http://eathena.deltaanime.net/forum/viewtopic.php?p=79951#79951) Problem: @disguise has no death sprite so the client crashes when you die, a solution would be that upon death before the sprites change you're undisguised. Assigned: N/a diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt index b16117ab4..cc4218f52 100644 --- a/db/skill_cast_db.txt +++ b/db/skill_cast_db.txt @@ -268,6 +268,10 @@ 406,0,0,0,3000 //ASC_METEORASSAULT#メテオアサルト# 407,0,5000,0,0 //ASC_CDP +475,0,0,300000,0 //ST_PRESERVE## +476,1000,1000,75000:90000:105000:120000:135000,0 //ST_FULLSTRIP## +479,2000,0,60000:120000:180000:240000:300000,0 //CR_FULLPROTECTION## + 10010,100,60000,0 //GD_BATTLEORDER## 10011,100,60000,0 //GD_REGENERATION## 10012,100,0,0 //GD_RESTORE## diff --git a/db/skill_db.txt b/db/skill_db.txt index 6e93217f0..7d6745196 100644 --- a/db/skill_db.txt +++ b/db/skill_db.txt @@ -508,6 +508,12 @@ 471,0,0,0,0,0,0,0,no,0,0,0,none,0 //SL_SKE## 472,0,0,0,0,0,0,0,no,0,0,0,none,0 //SL_SKA## +475,0,0,4,0,1,1,1,yes,0,0,0,magic,0 //ST_PRESERVE## +476,1,6,1,0,1,5,1,yes,0,0,0,weapon,0 //ST_FULLSTRIP## +477,0,6,4,0,1,10,1,no,0,0,0,weapon,0 //WS_WEAPONREFINE## +478,3,6,2,0,1,10,1,no,0,0,0,none,0 //CR_SLIMPITCHER## +479,1,6,16,0,1,5,1,yes,0,0,0,weapon,0 //CR_FULLPROTECTION## + //id,range,hit,inf,pl,nk,max,list_num,castcancel,cast_defence_rate,inf2,maxcount,skill_type,blow_count 10000,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_APPROVAL#正規ギルド承認# 10001,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_KAFRACONTRACT#カプラ雇用# @@ -525,9 +531,5 @@ 10013,0,0,4,0,1,1,0,no,0,0,0,none,0 //GD_EMERGENCYCALL## 10014,0,0,0,0,0,1,0,no,0,0,0,none,0 //GD_DEVELOPMENT## -// ST_PRESERVE#ヌチクョタコ# -// ST_FULLSTRIP#ヌョ_スコニョクウ# -// WS_WEAPONREFINE#ケォア簔ヲキテ# -// CR_SLIMPITCHER#ススクイ_ヌヌテト# -// CR_FULLPROTECTION#ヌョ_トノケフトョヌチキホナリシヌ# -// ITM_TOMAHAWK#ナ荳カネ」ナゥ_エチア#
\ No newline at end of file + +// ITM_TOMAHAWK#ナ荳カネ」ナゥ_エチア# 337
\ No newline at end of file diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt index 4b2c7ca88..42f73555f 100644 --- a/db/skill_require_db.txt +++ b/db/skill_require_db.txt @@ -291,6 +291,12 @@ //407,0,0,50,0,0,0,99,none,0,937,1,952,1,939,1,7033,1,972,1,657,1,713,1,0,0,0,0,0,0 //ASC_CDP 407,0,0,50,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 //ASC_CDP#デッドリ?ポイズン作成# +475,0,0,40,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 //ST_PRESERVE## +476,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 //ST_FULLSTRIP## +477,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 //WS_WEAPONREFINE## +478,0,0,30,0,0,0,99,none,0,545,1,545,1,545,1,545,1,545,1,546,1,546,1,546,1,546,1,547,1 //CR_SLIMPITCHER## +479,0,0,30,0,0,0,99,none,0,7139,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CR_FULLPROTECTION## + 10010,0,0,1,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 //GD_BATTLEORDER## 10011,0,0,1,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 //GD_REGENERATION## 10012,0,0,1,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 //GD_RESTORE## diff --git a/db/skill_tree.txt b/db/skill_tree.txt index a2825ee58..db7a97c1e 100644 --- a/db/skill_tree.txt +++ b/db/skill_tree.txt @@ -837,6 +837,7 @@ 4011,386,3,97,3,106,1,107,5,0,0,0,0//WS_CREATENUGGET #基本スキル# 4011,387,1,39,5,153,1,154,1,105,1,0,0//WS_CARTBOOST #基本スキル# 4011,388,1,107,10,112,3,0,0,0,0,0,0//WS_SYSTEMCREATE #基本スキル# +4011,477,10,109,5,94,5,96,3,97,2,0,0//WS_WEAPONREFINE //Sniper 4012,1,9,0,0,0,0,0,0,0,0,0,0//NV_BASIC #基本スキル# 4012,142,1,0,0,0,0,0,0,0,0,0,0//NV_FIRSTAID #応急手当# @@ -1080,6 +1081,8 @@ 4018,389,5,51,5,213,3,0,0,0,0,0,0//ST_CHASEWALK 4018,390,5,215,1,0,0,0,0,0,0,0,0//ST_REJECTSWORD 4018,391,5,215,1,0,0,0,0,0,0,0,0//ST_STEALBACKPACK +4018,475,1,219,5,225,1,0,0,0,0,0,0//ST_PRESERVE +4018,476,5,215,1,216,1,217,1,218,1,0,0//ST_FULLSTRIP //Creator 4019,1,9,0,0,0,0,0,0,0,0,0,0//NV_BASIC #基本スキル# 4019,142,1,0,0,0,0,0,0,0,0,0,0//NV_FIRSTAID #応急手当# @@ -1106,6 +1109,9 @@ 4019,235,5,237,3,0,0,0,0,0,0,0,0//AM_CP_SHIELD #ケミカルシールドチャージ# 4019,236,5,235,3,0,0,0,0,0,0,0,0//AM_CP_ARMOR #ケミカルアーマーチャージ# 4019,237,5,228,2,0,0,0,0,0,0,0,0//AM_CP_HELM #ケミカルヘルムチャージ# +4019,478,10,228,3,0,0,0,0,0,0,0,0//CR_SLIMPITCHER +4019,479,5,234,1,235,1,236,1,237,1,0,0//CR_FULLPROTECTION + // 韓国でも未実装なので以下のツリーコメントアウト //4019,238,1,0,0,0,0,0,0,0,0,0,0//AM_BIOETHICS #生命倫理# //4019,239,10,238,1,0,0,0,0,0,0,0,0//AM_BIOTECHNOLOGY #生命工学研究# diff --git a/src/map/battle.c b/src/map/battle.c index 22731f01d..24547762d 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3562,21 +3562,13 @@ static struct Damage battle_calc_pc_weapon_attack( } // 状態異常中のダメージ追加でクリティカルにも有効なスキル - if (sc_data) { - // エンチャントデッドリーポイズン - if(sc_data[SC_EDP].timer != -1) { - damage += damage * (150 + sc_data[SC_EDP].val1 * 50) / 100; - damage2 += damage2 * (150 + sc_data[SC_EDP].val1 * 50) / 100; - no_cardfix = 1; - } - } // 精錬ダメージの追加 @@ -4500,9 +4492,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, } if(battle_check_target(src,target,BCT_ENEMY) <= 0 && - !battle_check_range(src,target,0)) - return 0; // 攻撃対象外 race = battle_get_race(target); diff --git a/src/map/clif.c b/src/map/clif.c index 2038304dc..9163671a8 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -5031,6 +5031,33 @@ int clif_item_repair_list(struct map_session_data *sd) } /*========================================== + * Weapon Refining [Celest] + *------------------------------------------ + */ +int clif_item_refine_list(struct map_session_data *sd) +{ + int i,c; + int fd; + + nullpo_retr(0, sd); + + fd=sd->fd; + + WFIFOW(fd,0)=0x177; // temporarily use same packet as clif_item_identify + for(i=c=0;i<MAX_INVENTORY;i++){ + if(sd->status.inventory[i].nameid > 0 && itemdb_type(sd->status.inventory[i].nameid)==4){ + WFIFOW(fd,c*2+4)=i+2; + c++; + } + } + if(c > 0) { + WFIFOW(fd,2)=c*2+4; + WFIFOSET(fd,WFIFOW(fd,2)); + } + return 0; +} + +/*========================================== * アイテムによる一時的なスキル効果 *------------------------------------------ */ diff --git a/src/map/clif.h b/src/map/clif.h index 595c7f7be..cf03820b1 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -188,6 +188,7 @@ int clif_cart_equiplist(struct map_session_data *sd); int clif_item_identify_list(struct map_session_data *sd); int clif_item_identified(struct map_session_data *sd,int idx,int flag); int clif_item_repair_list(struct map_session_data *sd); +int clif_item_refine_list(struct map_session_data *sd); int clif_item_skill(struct map_session_data *sd,int skillid,int skilllv,const char *name); diff --git a/src/map/guild.c b/src/map/guild.c index ca3bbf1fe..a48bb3020 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -62,16 +62,10 @@ int guild_skill_get_max(int id) { // Modified for new skills [Sara] // ギルドスキルがあるか確認 int guild_checkskill(struct guild *g,int id) { - int idx = id-GD_SKILLBASE; - - if (idx < 0 || idx >= MAX_GUILDSKILL) - return 0; - return g->skill[idx].lv; - } diff --git a/src/map/pc.c b/src/map/pc.c index a4503b2c1..5ec5b8a1b 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1,4 +1,4 @@ -// $Id: pc.c 101 2004-11-25 4:02:51 PM Celestia $ +// $Id: pc.c 101 2004-11-26 5:47:29 PM Celestia $ #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -2733,23 +2733,14 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) } break; case SP_HP_DRAIN_VALUE: - if(!sd->state.lr_flag) { - sd->hp_drain_rate += type2; - sd->hp_drain_value += val; - } - else if(sd->state.lr_flag == 1) { - sd->hp_drain_rate_ += type2; - sd->hp_drain_value_ += val; - } - break; case SP_SP_DRAIN_RATE: if(!sd->state.lr_flag) { @@ -2762,21 +2753,13 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) } break; case SP_SP_DRAIN_VALUE: - if(!sd->state.lr_flag) { - sd->sp_drain_rate += type2; - sd->sp_drain_value += val; - } - else if(sd->state.lr_flag == 1) { - sd->sp_drain_rate_ += type2; - sd->sp_drain_value_ += val; - } break; @@ -3448,9 +3431,10 @@ int pc_item_identify(struct map_session_data *sd,int idx) nullpo_retr(0, sd); // Celest - if (sd->skillid == BS_REPAIRWEAPON) { + if (sd->skillid == BS_REPAIRWEAPON) return pc_item_repair (sd, idx); - } + else if (sd->skillid == WS_WEAPONREFINE) + return pc_item_refine (sd, idx); if(idx >= 0 && idx < MAX_INVENTORY) { if(sd->status.inventory[idx].nameid > 0 && sd->status.inventory[idx].identify == 0 ){ @@ -3492,6 +3476,81 @@ int pc_item_repair(struct map_session_data *sd,int idx) } /*========================================== + * Weapon Refining [Celest] + *------------------------------------------ + */ +int pc_item_refine(struct map_session_data *sd,int idx) +{ + int flag = 1, i = 0, count = 0, ep = 0, per, refine; + int material[5] = { 0, 1010, 1011, 984, 984 }; + + nullpo_retr(0, sd); + struct item *item = &sd->status.inventory[idx]; + + if(idx >= 0 && idx < MAX_INVENTORY) { + if(item->nameid > 0 && itemdb_type(item->nameid)==4) { + // if it's no longer refineable + if (item->refine == 10) { + clif_skill_fail(sd,sd->skillid,0,0); + return 0; + } + refine = item->refine + sd->skilllv > 10 + ? 10 - item->refine : sd->skilllv; + for (i=0; i < MAX_INVENTORY; i++) + if(sd->status.inventory[i].nameid == material [itemdb_wlv (item->nameid)]) + count += sd->status.inventory[i].amount; + if (count < refine ) { + clif_skill_fail(sd,sd->skillid,0,0); + return 0; + } + per = percentrefinery [itemdb_wlv (item->nameid)][item->refine + refine - 1]; + //per += pc_checkskill(sd,BS_WEAPONRESEARCH); + per *= (75 + sd->status.job_level/2)/100; + + if (per > rand() % 100) { + flag = 0; + item->refine += refine; + + for (i=0; i < MAX_INVENTORY; i++) + if(sd->status.inventory[i].nameid == material [itemdb_wlv (item->nameid)]) { + if (sd->status.inventory[i].amount >= refine) { + pc_delitem(sd,i,refine,0); + break; + } else { + refine -= sd->status.inventory[i].amount; + pc_delitem(sd,i,sd->status.inventory[i].amount,0); + } + } + + if(item->equip) { + ep = item->equip; + pc_unequipitem(sd,idx,0, BF_NORMAL); + } + clif_refine(sd->fd,sd,0,idx,item->refine); + clif_delitem(sd,idx,1); + clif_additem(sd,idx,1,0); + if (ep) + pc_equipitem(sd,idx,ep); + clif_misceffect(&sd->bl,3); + } + else { + clif_delitem(sd,i,refine); + item->refine = 0; + if(item->equip) + pc_unequipitem(sd,idx,0, BF_NORMAL); + clif_refine(sd->fd,sd,1,idx,item->refine); + pc_delitem(sd,idx,1,0); + clif_misceffect(&sd->bl,2); + + clif_emotion(&sd->bl, 23); + } + } + } + + return !flag; +} + +/*========================================== * スティル品公開 *------------------------------------------ */ diff --git a/src/map/pc.h b/src/map/pc.h index 7861fb43c..372dd72f7 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -89,6 +89,7 @@ int pc_insert_card(struct map_session_data *sd,int idx_card,int idx_equip); int pc_item_identify(struct map_session_data *sd,int idx); int pc_item_repair(struct map_session_data *sd,int idx); // [Celest] +int pc_item_refine(struct map_session_data *sd,int idx); // [Celest] int pc_steal_item(struct map_session_data *sd,struct block_list *bl); int pc_steal_coin(struct map_session_data *sd,struct block_list *bl); diff --git a/src/map/skill.c b/src/map/skill.c index 536af3bdb..2c7be17ea 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1,4 +1,4 @@ -// $Id: skill.c,v 1.8 2004/11/25 4:02:35 PM Celestia Exp $ +// $Id: skill.c,v 1.8 2004/11/26 5:46:59 PM Celestia Exp $ /* スキル?係 */ #include <stdio.h> @@ -3718,7 +3718,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int map_freeblock_unlock(); return 1; } - clif_item_repair_list(sd); + clif_item_repair_list(sd); } break; @@ -3876,22 +3876,38 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int } break; + // Full Strip [Celest] case ST_FULLSTRIP: { struct status_change *tsc_data = battle_get_sc_data(bl); - - if(tsc_data && tsc_data[SC_CP_HELM].timer != -1) - break; + int c=0, i, j; + int striplist[2][4] = { { 0, 0, 0, 0 }, + { 0x0002, 0x0020, 0x0010, 0x0100 } }; + strip_per = 5+2*skilllv+strip_fix/5; strip_time = skill_get_time(skillid,skilllv)+strip_fix/2; - if(rand()%100 < strip_per){ + for (i=0; i<4; i++) { + if(tsc_data && tsc_data[SC_CP_WEAPON + i].timer != -1) + break; + if(rand()%100 < strip_per) { + striplist[0][i] = 1; + c++; + } + } + + if (c > 0) { clif_skill_nodamage(src,bl,skillid,skilllv,1); - skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,strip_time,0 ); - if(dstsd){ - for(i=0;i<MAX_INVENTORY;i++){ - if(dstsd->status.inventory[i].equip && dstsd->status.inventory[i].equip & 0x0100){ - pc_unequipitem(dstsd,i,0,BF_SKILL); - break; + for (j=0; j<4 && c > 0; j++) { + if (striplist[0][j]) { + skill_status_change_start(bl,SC_STRIPWEAPON + i,skilllv,0,0,0,strip_time,0 ); + if(dstsd){ + for(i=0;i<MAX_INVENTORY;i++){ + if(dstsd->status.inventory[i].equip && dstsd->status.inventory[i].equip & striplist[1][j]){ + pc_unequipitem(dstsd,i,0,BF_SKILL); + --c; + break; + } + } } } } @@ -3972,46 +3988,46 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int case AM_CP_WEAPON: { struct status_change *tsc_data = battle_get_sc_data(bl); - clif_skill_nodamage(src,bl,skillid,skilllv,1); + clif_skill_nodamage(src,bl,skillid,skilllv,1); if(tsc_data && tsc_data[SC_STRIPWEAPON].timer != -1) - skill_status_change_end(bl, SC_STRIPWEAPON, -1 ); - skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 ); + skill_status_change_end(bl, SC_STRIPWEAPON, -1 ); + skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 ); } break; case AM_CP_SHIELD: { struct status_change *tsc_data = battle_get_sc_data(bl); - clif_skill_nodamage(src,bl,skillid,skilllv,1); + clif_skill_nodamage(src,bl,skillid,skilllv,1); if(tsc_data && tsc_data[SC_STRIPSHIELD].timer != -1) - skill_status_change_end(bl, SC_STRIPSHIELD, -1 ); - skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 ); + skill_status_change_end(bl, SC_STRIPSHIELD, -1 ); + skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 ); } break; case AM_CP_ARMOR: { struct status_change *tsc_data = battle_get_sc_data(bl); - clif_skill_nodamage(src,bl,skillid,skilllv,1); + clif_skill_nodamage(src,bl,skillid,skilllv,1); if(tsc_data && tsc_data[SC_STRIPARMOR].timer != -1) - skill_status_change_end(bl, SC_STRIPARMOR, -1 ); - skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 ); + skill_status_change_end(bl, SC_STRIPARMOR, -1 ); + skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 ); } break; case AM_CP_HELM: { struct status_change *tsc_data = battle_get_sc_data(bl); - clif_skill_nodamage(src,bl,skillid,skilllv,1); + clif_skill_nodamage(src,bl,skillid,skilllv,1); if(tsc_data && tsc_data[SC_STRIPHELM].timer != -1) - skill_status_change_end(bl, SC_STRIPHELM, -1 ); - skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 ); + skill_status_change_end(bl, SC_STRIPHELM, -1 ); + skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 ); } break; case SA_DISPELL: /* ディスペル */ { int i; - clif_skill_nodamage(src,bl,skillid,skilllv,1); - if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage ) - break; + clif_skill_nodamage(src,bl,skillid,skilllv,1); + if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_magic_damage ) + break; for(i=0;i<136;i++){ if(i==SC_RIDING || i== SC_FALCON || i==SC_HALLUCINATION || i==SC_WEIGHT50 || i==SC_WEIGHT90 || i==SC_STRIPWEAPON || i==SC_STRIPSHIELD || i==SC_STRIPARMOR @@ -4421,7 +4437,13 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int } break; - // Slim Pitcher [Celest] + // Weapon Refining [Celest] + case WS_WEAPONREFINE: + if(sd) + clif_item_refine_list(sd); + break; + + // Slim Pitcher case CR_SLIMPITCHER: { if (sd && flag&1) { @@ -4434,6 +4456,20 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int } } break; + // Full Chemical Protection + case CR_FULLPROTECTION: + { + int i, skilltime; + struct status_change *tsc_data = battle_get_sc_data(bl); + clif_skill_nodamage(src,bl,skillid,skilllv,1); + skilltime = skill_get_time(skillid,skilllv); + for (i=0; i<4; i++) { + if(tsc_data && tsc_data[SC_STRIPWEAPON + i].timer != -1) + skill_status_change_end(bl, SC_STRIPWEAPON + i, -1 ); + skill_status_change_start(bl,SC_CP_WEAPON + i,skilllv,0,0,0,skilltime,0 ); + } + } + break; case RG_CLEANER: //AppleGirl clif_skill_nodamage(src,bl,skillid,skilllv,1); diff --git a/src/map/skill.h b/src/map/skill.h index 2a7c17652..01f077158 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -1,4 +1,4 @@ -// $Id: skill.h,v 1.5 2004/09/25 05:32:19 MouseJstr Exp $ +// $Id: skill.h,v 1.5 2004/11/26 5:47:12 PM Celestia Exp $ #ifndef _SKILL_H_ #define _SKILL_H_ @@ -734,6 +734,7 @@ enum { WE_CALLPARTNER, NPC_SELFDESTRUCTION2 = 331, + ITM_TOMAHAWK = 337, NPC_DARKCROSS = 338, LK_AURABLADE = 355, @@ -855,13 +856,12 @@ enum { SL_SKE, SL_SKA, - // Will assign skill id's later [Celest] - ST_PRESERVE, + ST_PRESERVE = 475, ST_FULLSTRIP, WS_WEAPONREFINE, CR_SLIMPITCHER, CR_FULLPROTECTION, - ITM_TOMAHAWK, + // moved to common/mmo.h /* GD_APPROVAL=10000, |