summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcelest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec>2004-11-20 10:41:21 +0000
committercelest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec>2004-11-20 10:41:21 +0000
commita4756bb8123d607ed5c4b854653d2ddab814f555 (patch)
tree58919b57647884cbbf93a0e76b37a9c7919ed34e /src
parent756284de71ecc32123edb92e88edd145c0301e66 (diff)
downloadhercules-a4756bb8123d607ed5c4b854653d2ddab814f555.tar.gz
hercules-a4756bb8123d607ed5c4b854653d2ddab814f555.tar.bz2
hercules-a4756bb8123d607ed5c4b854653d2ddab814f555.tar.xz
hercules-a4756bb8123d607ed5c4b854653d2ddab814f555.zip
Updated napalm vulcan, enchant and create deadly poison, slow poison, meteor assault.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/athena@266 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/map/pc.c2
-rw-r--r--src/map/skill.c221
-rw-r--r--src/map/skill.h55
3 files changed, 170 insertions, 108 deletions
diff --git a/src/map/pc.c b/src/map/pc.c
index 2ec8b8875..6b9148119 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -1465,9 +1465,9 @@ int pc_calcstatus(struct map_session_data* sd,int first)
if(sd->sc_data[SC_QUAGMIRE].timer!=-1){ // �N�@�O�}�C�A
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->speed = sd->speed*3/2;
sd->paramb[1]-= agib > 50 ? 50 : agib;
sd->paramb[4]-= dexb > 50 ? 50 : dexb;
+ sd->speed = sd->speed*3/2;
}
if(sd->sc_data[SC_TRUESIGHT].timer!=-1){ // �g�D��?�T�C�g
sd->paramb[0]+= 5;
diff --git a/src/map/skill.c b/src/map/skill.c
index e01e01727..a9fa326de 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -945,13 +945,13 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
dstsd=(struct map_session_data *)bl;
else if(bl->type==BL_MOB){
dstmd=(struct mob_data *)bl; //���g�p�H
- if(sc_def_mdef>50)
+ if(sc_def_mdef<50)
sc_def_mdef=50;
- if(sc_def_vit>50)
+ if(sc_def_vit<50)
sc_def_vit=50;
- if(sc_def_int>50)
+ if(sc_def_int<50)
sc_def_int=50;
- if(sc_def_luk>50)
+ if(sc_def_luk<50)
sc_def_luk=50;
}
if(sc_def_mdef<0)
@@ -977,6 +977,30 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
//else
// clif_skill_fail(sd,skillid,0,0); // it's annoying! =p [Celest]
}
+ // �G���`�����g�f�b�g���[�|�C�Y��(�ғŌ���)
+ if (sd && sd->sc_data[SC_EDP].timer != -1 && rand() % 10000 < sd->sc_data[SC_EDP].val2 * sc_def_vit) {
+ int mhp = battle_get_max_hp(bl);
+ int hp = battle_get_hp(bl);
+ int lvl = sd->sc_data[SC_EDP].val1;
+ int diff;
+ // MHP��1/4�ȉ��ɂ͂Ȃ�Ȃ�
+ if(hp > mhp>>2) {
+ if(bl->type == BL_PC) {
+ diff = mhp*10/100;
+ if (hp - diff < mhp>>2)
+ diff = hp - (mhp>>2);
+ pc_heal((struct map_session_data *)bl, -hp, 0);
+ } else if(bl->type == BL_MOB) {
+ struct mob_data *md = (struct mob_data *)bl;
+ hp -= mhp*15/100;
+ if (hp > mhp>>2)
+ md->hp = hp;
+ else
+ md->hp = mhp>>2;
+ }
+ }
+ skill_status_change_start(bl,SC_DPOISON,lvl,0,0,0,skill_get_time2(ASC_EDP,lvl),0);
+ }
break;
case SM_BASH: /* �o�b�V���i�}���U?�j */
@@ -1184,6 +1208,11 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
//���C�����g����5���Ԏ��R�񕜂��Ȃ��悤�ɂȂ�
skill_status_change_start(src,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time2(skillid,skilllv),0 );
break;
+ case HW_NAPALMVULCAN: /* �i�p�[���o���J�� */
+ // skilllv*5%�̊m���Ŏ�
+ if (rand()%10000 < 5*skilllv*sc_def_luk)
+ skill_status_change_start(bl,SC_CURSE,7,0,0,0,skill_get_time2(NPC_CURSEATTACK,7),0);
+ break;
}
if(sd && skillid != MC_CARTREVOLUTION && attack_type&BF_WEAPON){ /* �J?�h�ɂ��lj�?�� */
@@ -2358,6 +2387,11 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
ar=1;
else if(skillid==NPC_SPLASHATTACK) /* �X�v���b�V���A�^�b�N�͔�?7*7 */
ar=3;
+
+ // meteor assault cast effect (not sure how else to properly add it =p) [Celest]
+ if (skillid == ASC_METEORASSAULT)
+ clif_specialeffect(&sd->bl,409, 1);
+
skill_area_temp[1]=bl->id;
skill_area_temp[2]=x;
skill_area_temp[3]=y;
@@ -3130,6 +3164,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
case CR_DEVOTION: /* �f�B�{?�V���� */
if(sd && dstsd){
//?����{�q�̏ꍇ�̌��̐E�Ƃ��Z�o����
+ struct pc_base_job dst_s_class = pc_calc_base_job(dstsd->status.class);
int lv = sd->status.base_level-dstsd->status.base_level;
lv = (lv<0)?-lv:lv;
@@ -3139,8 +3174,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
||(!sd->status.party_id && !sd->status.guild_id) // PT�ɂ��M���h�ɂ���?�����͂���
||((sd->status.party_id != dstsd->status.party_id) // �����p?�e�B?���A
&&(sd->status.guild_id != dstsd->status.guild_id)) // �����M���h����Ȃ��Ƃ���
- ||(dstsd->status.class==14||dstsd->status.class==21
- ||dstsd->status.class==4015||dstsd->status.class==4022)){ // �N���Z����
+ ||(dst_s_class.job==14||dst_s_class.job==21)){ // �N���Z����
clif_skill_fail(sd,skillid,0,0);
map_freeblock_unlock();
return 1;
@@ -3233,6 +3267,13 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
clif_skill_nodamage(src,bl,skillid,skilllv,1);
}
break;
+ case ASC_CDP: // [DracoRPG]
+ // notes: success rate (from emperium.org) = 20 + [(20*Dex)/50] + [(20*Luk)/100]
+ if(sd) {
+ clif_skill_produce_mix_list(sd,256);
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ }
+ break;
case BS_HAMMERFALL: /* �n���}?�t�H?�� */
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if( bl->type==BL_PC && ((struct map_session_data *)bl)->special_state.no_weapon_damage )
@@ -3466,7 +3507,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
if(pc_steal_item(sd,bl))
clif_skill_nodamage(src,bl,skillid,skilllv,1);
else
- clif_skill_nodamage(src,bl,skillid,skilllv,0);
+ clif_skill_fail(sd,skillid,0x0a,0);
}
break;
@@ -3480,7 +3521,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
mob_target((struct mob_data *)bl,src,range);
}
else
- clif_skill_nodamage(src,bl,skillid,skilllv,0);
+ clif_skill_fail(sd,skillid,0,0);
}
break;
@@ -3518,6 +3559,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
case TF_DETOXIFY: /* ��� */
clif_skill_nodamage(src,bl,skillid,skilllv,1);
skill_status_change_end(bl, SC_POISON , -1 );
+ skill_status_change_end(bl, SC_DPOISON , -1 );
break;
case PR_STRECOVERY: /* ���J�o��? */
@@ -4196,25 +4238,6 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
clif_skill_nodamage(src,bl,skillid,skilllv,1);
skill_status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,skillid,src->id,0,skill_get_time(skillid,skilllv),0 );
break;
- case ASC_CDP: // Temporary skill for Create Deadly Poison[Celest]
- // notes: success rate (from emperium.org) = 20 + [(20*Dex)/50] + [(20*Luk)/100]
- if(sd) {
- int eflag;
- struct item item_tmp;
- struct block_list tbl;
- clif_skill_nodamage(src,bl,skillid,skilllv,1);
- memset(&item_tmp,0,sizeof(item_tmp));
- memset(&tbl,0,sizeof(tbl)); // [MouseJstr]
- item_tmp.nameid = 678;
- item_tmp.identify = 1;
- tbl.id = 0;
- eflag = pc_additem(sd,&item_tmp,1);
- if(eflag) {
- clif_additem(sd,0,0,eflag);
- map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,NULL,NULL,NULL,0);
- }
- }
- break;
case PF_MINDBREAKER: /* �v���{�b�N */
{
struct status_change *sc_data = battle_get_sc_data(bl);
@@ -6086,13 +6109,11 @@ static int skill_check_condition_char_sub(struct block_list *bl,va_list ap)
return 0;
}
- ;
ss_class = pc_calc_base_job(ssd->status.class);
switch(ssd->skillid){
case PR_BENEDICTIO: /* ��?�~�� */
- if(sd != ssd && (sd->status.class == 4 || sd->status.class == 8 || sd->status.class == 15 ||
- sd->status.class == 4005 || sd->status.class == 4009 || sd->status.class == 4016) &&
+ if(sd != ssd && (s_class.job == 4 || s_class.job == 8 || s_class.job == 15) &&
(sd->bl.x == ssd->bl.x - 1 || sd->bl.x == ssd->bl.x + 1) && sd->status.sp >= 10)
(*c)++;
break;
@@ -6107,12 +6128,8 @@ static int skill_check_condition_char_sub(struct block_list *bl,va_list ap)
case BD_RAGNAROK: /* �_?��?�� */
case CG_MOONLIT: /* ������̐�ɗ�����Ԃт� */
if(sd != ssd &&
- ((ssd->status.class==19 && sd->status.class==20) ||
- (ssd->status.class==20 && sd->status.class==19) ||
- (ssd->status.class==4020 && sd->status.class==4021) ||
- (ssd->status.class==4021 && sd->status.class==4020) ||
- (ssd->status.class==20 && sd->status.class==4020) ||
- (ssd->status.class==19 && sd->status.class==4021)) &&
+ ((ss_class.job==19 && s_class.job==20) ||
+ (ss_class.job==20 && s_class.job==19)) &&
pc_checkskill(sd,ssd->skillid) > 0 &&
(*c)==0 &&
sd->status.party_id == ssd->status.party_id &&
@@ -6160,8 +6177,7 @@ static int skill_check_condition_use_sub(struct block_list *bl,va_list ap)
if(skilllv <= 0) return 0;
switch(skillid){
case PR_BENEDICTIO: /* ��?�~�� */
- if(sd != ssd && (sd->status.class == 4 || sd->status.class == 8 || sd->status.class == 15 ||
- sd->status.class == 4005 || sd->status.class == 4009 || sd->status.class == 4016) &&
+ if(sd != ssd && (s_class.job == 4 || s_class.job == 8 || s_class.job == 15) &&
(sd->bl.x == ssd->bl.x - 1 || sd->bl.x == ssd->bl.x + 1) && sd->status.sp >= 10){
sd->status.sp -= 10;
pc_calcstatus(sd,0);
@@ -6179,12 +6195,8 @@ static int skill_check_condition_use_sub(struct block_list *bl,va_list ap)
case BD_RAGNAROK: /* �_?��?�� */
case CG_MOONLIT: /* ������̐�ɗ�����Ԃт� */
if(sd != ssd && //�{�l�ȊO��
- ((ssd->status.class==19 && sd->status.class==20) ||
- (ssd->status.class==20 && sd->status.class==19) ||
- (ssd->status.class==4020 && sd->status.class==4021) ||
- (ssd->status.class==4021 && sd->status.class==4020) ||
- (ssd->status.class==20 && sd->status.class==4020) ||
- (ssd->status.class==19 && sd->status.class==4021)) && //�������_���T?�Ȃ�o?�h��
+ ((ss_class.job==19 && s_class.job==20) || //�������o�[�h�Ȃ�_���T�[��
+ (ss_class.job==20 && s_class.job==19)) && //�������_���T�[�Ȃ�o�[�h��
pc_checkskill(sd,skillid) > 0 && //�X�L������������
(*c)==0 && //�ŏ��̈�l��
sd->status.party_id == ssd->status.party_id && //�p?�e�B?��������
@@ -6255,7 +6267,8 @@ int skill_check_condition(struct map_session_data *sd,int type)
sd->skillitem = sd->skillitemlv = -1;
return 0;
}
- if(sd->skillid == AM_PHARMACY && sd->state.produce_flag == 1) {
+ if((sd->skillid == AM_PHARMACY || sd->skillid == ASC_CDP)
+ && sd->state.produce_flag == 1) {
sd->skillitem = sd->skillitemlv = -1;
return 0;
}
@@ -7516,7 +7529,7 @@ int skill_gangsterparadise(struct map_session_data *sd ,int type)
map_foreachinarea(skill_gangster_count,sd->bl.m,
sd->bl.x-range,sd->bl.y-range,
sd->bl.x+range,sd->bl.y+range,BL_PC,&c);
- if(c > 0) {/*�M�����O�X�^?���������玩���ɂ��M�����O�X�^??���t?*/
+ if(c > 1) {/*�M�����O�X�^�[���������玩���ɂ��M�����O�X�^�[�����t�^*/
map_foreachinarea(skill_gangster_in,sd->bl.m,
sd->bl.x-range,sd->bl.y-range,
sd->bl.x+range,sd->bl.y+range,BL_PC);
@@ -7528,7 +7541,7 @@ int skill_gangsterparadise(struct map_session_data *sd ,int type)
map_foreachinarea(skill_gangster_count,sd->bl.m,
sd->bl.x-range,sd->bl.y-range,
sd->bl.x+range,sd->bl.y+range,BL_PC,&c);
- if(c < 1)
+ if(c < 2)
map_foreachinarea(skill_gangster_out,sd->bl.m,
sd->bl.x-range,sd->bl.y-range,
sd->bl.x+range,sd->bl.y+range,BL_PC);
@@ -8001,13 +8014,23 @@ int skill_status_change_end(struct block_list* bl, int type, int tid)
break;
case SC_POISON:
+ if (sc_data[SC_DPOISON].timer != -1) //
+ break; // DPOISON�p�̃I�v�V����
+ *opt2 &= ~1; // ����p�ɗp�ӂ��ꂽ�ꍇ�ɂ�
+ opt_flag = 1; // �����͍폜����
+ break; //
case SC_CURSE:
case SC_SILENCE:
case SC_BLIND:
*opt2 &= ~(1<<(type-SC_POISON));
opt_flag = 1;
break;
-
+ case SC_DPOISON:
+ if (sc_data[SC_POISON].timer != -1) // DPOISON�p�̃I�v�V������
+ break; // �p�ӂ��ꂽ��폜
+ *opt2 &= ~1; // �ŏ�ԉ���
+ opt_flag = 1;
+ break;
case SC_SIGNUMCRUCIS:
*opt2 &= ~0x40;
opt_flag = 1;
@@ -8308,6 +8331,26 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
else
sc_data[type].timer=add_timer(1000+tick,skill_status_change_timer, bl->id, data );
break;
+ case SC_DPOISON:
+ if (sc_data[SC_SLOWPOISON].timer == -1 && (--sc_data[type].val3) > 0) {
+ int hp = battle_get_max_hp(bl);
+ if (battle_get_hp(bl) > hp>>2) {
+ if(bl->type == BL_PC) {
+ hp = 3 + hp/50;
+ pc_heal((struct map_session_data *)bl, -hp, 0);
+ } else if (bl->type == BL_MOB) {
+ struct mob_data *md;
+ if ((md=((struct mob_data *)bl)) == NULL)
+ break;
+ hp = 3 + hp/100;
+ md->hp -= hp;
+ }
+ }
+ }
+ if (sc_data[type].val3 > 0)
+ sc_data[type].timer=add_timer(1000+tick,skill_status_change_timer, bl->id, data );
+ break;
+
case SC_TENSIONRELAX: /* �e���V���������b�N�X */
if(sd){ /* SP�������āAHP��?�^���łȂ����?? */
if( sd->status.sp > 12 && sd->status.max_hp > sd->status.hp ){
@@ -8326,7 +8369,6 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
break;
case SC_HEADCRUSH: // temporary damage [celest]
// case SC_BLEEDING:
- case SC_POISON2:
if((--sc_data[type].val3) > 0) {
int hp = battle_get_max_hp(bl);
if(bl->type == BL_PC) {
@@ -8526,6 +8568,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
case SC_STAN:
case SC_SILENCE:
case SC_POISON:
+ case SC_DPOISON:
scdef=3+battle_get_vit(bl)+battle_get_luk(bl)/3;
break;
case SC_SLEEP:
@@ -8650,7 +8693,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
clif_emotion(bl,4);
break;
case SC_SLOWPOISON:
- if(sc_data[SC_POISON].timer == -1 )
+ if (sc_data[SC_POISON].timer == -1 && sc_data[SC_DPOISON].timer == -1)
return 0;
break;
case SC_TWOHANDQUICKEN: /* 2HQ */
@@ -8683,6 +8726,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
skill_encchant_eremental_end(bl,SC_ENCPOISON);
break;
case SC_EDP: // [Celest]
+ val2 = val1 + 2; /* �ғŕt�^�m��(%) */
calc_flag = 1;
break;
case SC_POISONREACT: /* �|�C�Y�����A�N�g */
@@ -8981,6 +9025,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
/* option2 */
case SC_POISON: /* �� */
+ case SC_DPOISON: /* �ғ� */
calc_flag = 1;
if(!(flag&2)) {
int sc_def = 100 - (battle_get_vit(bl) + battle_get_luk(bl)/5);
@@ -9229,6 +9274,10 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
*opt2 |= 1<<(type-SC_POISON);
opt_flag = 1;
break;
+ case SC_DPOISON: // �b��œł̃G�t�F�N�g���g�p
+ *opt2 |= 1;
+ opt_flag = 1;
+ break;
case SC_SIGNUMCRUCIS:
*opt2 |= 0x40;
opt_flag = 1;
@@ -10225,7 +10274,7 @@ int skill_can_produce_mix( struct map_session_data *sd, int nameid, int trigger
return 0;
if(trigger>=0){
- if(trigger==32 || trigger==16 || trigger==64){
+ if(trigger == 32 || trigger == 16 || trigger==64 || trigger == 256) {
if(skill_produce_db[i].itemlv!=trigger) /* �t�@?�}�V?���|?�V�����ނƗn??��?�ΈȊO�͂��� */
return 0;
}else{
@@ -10238,7 +10287,7 @@ int skill_can_produce_mix( struct map_session_data *sd, int nameid, int trigger
if( (j=skill_produce_db[i].req_skill)>0 && pc_checkskill(sd,j)<=0 )
return 0; /* �X�L��������Ȃ� */
- for(j=0;j<5;j++){
+ for(j=0;j<MAX_PRODUCE_RESOURCE;j++){
int id,x,y;
if( (id=skill_produce_db[i].mat_id[j]) <= 0 ) /* ����ȏ�͍ޗ��v��Ȃ� */
continue;
@@ -10250,7 +10299,7 @@ int skill_can_produce_mix( struct map_session_data *sd, int nameid, int trigger
for(y=0,x=0;y<MAX_INVENTORY;y++)
if( sd->status.inventory[y].nameid == id )
x+=sd->status.inventory[y].amount;
- if(x<skill_produce_db[i].mat_amount[j]) /* �A�C�e��������Ȃ� */
+ if(x<skill_produce_db[i].mat_amount[j]) /* �A�C�e��������Ȃ� */
return 0;
}
}
@@ -10296,7 +10345,7 @@ int skill_produce_mix( struct map_session_data *sd,
}
/* �ޗ����� */
- for(i=0;i<5;i++){
+ for(i=0;i<MAX_PRODUCE_RESOURCE;i++){
int j,id,x;
if( (id=skill_produce_db[idx].mat_id[i]) <= 0 )
continue;
@@ -10339,8 +10388,10 @@ int skill_produce_mix( struct map_session_data *sd,
pc_checkskill(sd,AM_CP_SHIELD)*100 + pc_checkskill(sd,AM_CP_ARMOR)*100 + pc_checkskill(sd,AM_CP_HELM)*100;
else
make_per = 1000 + sd->status.base_level*30 + sd->paramc[3]*20 + sd->paramc[4]*15 + pc_checkskill(sd,AM_LEARNINGPOTION)*100 + pc_checkskill(sd,AM_PHARMACY)*300;
- }
- else {
+ } else if (skill_produce_db[idx].req_skill == ASC_CDP) {
+ make_per = 2000 + 40*sd->paramc[4] + 20*sd->paramc[5];
+ //make_per = 20 + (20*sd->paramc[4])/50 + (20*sd->paramc[5])/100;
+ } else {
if(nameid == 998)
make_per = 2000 + sd->status.base_level*30 + sd->paramc[4]*20 + sd->paramc[5]*10 + pc_checkskill(sd,skill_produce_db[idx].req_skill)*600;
else if(nameid == 985)
@@ -10365,7 +10416,8 @@ int skill_produce_mix( struct map_session_data *sd,
if(make_per < 1) make_per = 1;
- if(skill_produce_db[idx].req_skill==AM_PHARMACY) {
+ if(skill_produce_db[idx].req_skill==AM_PHARMACY ||
+ skill_produce_db[idx].req_skill==ASC_CDP) {
if( battle_config.pp_rate!=100 )
make_per=make_per*battle_config.pp_rate/100;
}
@@ -10401,16 +10453,19 @@ int skill_produce_mix( struct map_session_data *sd,
log_produce(sd,nameid,slot1,slot2,slot3,1);
#endif //USE_SQL
- if(skill_produce_db[idx].req_skill!=AM_PHARMACY && skill_produce_db[idx].req_skill!=WS_CREATECOIN) { //���퐻���̏ꍇ
- clif_produceeffect(sd,0,nameid);/* ���퐻���G�t�F�N�g�p�P�b�g */
- clif_misceffect(&sd->bl,3); /* ���l�ɂ�������ʒm�i��?�����G�t�F�N�g�Ɠ����ł����́H�j */
- }
- else if(skill_produce_db[idx].req_skill==AM_PHARMACY){ //�t�@?�}�V?�̏ꍇ
- clif_produceeffect(sd,2,nameid);/* ��?�G�t�F�N�g�p�P�b�g */
- clif_misceffect(&sd->bl,5); /* ���l�ɂ�������ʒm*/
- }else{
- clif_produceeffect(sd,0,nameid);/* �s���Ȃ̂łƂ肠���������G�t�F�N�g�p�P�b�g */
- clif_misceffect(&sd->bl,3); /* ���l�ɂ�������ʒm*/
+ switch (skill_produce_db[idx].req_skill) {
+ case AM_PHARMACY:
+ clif_produceeffect(sd,2,nameid);/* ����G�t�F�N�g */
+ clif_misceffect(&sd->bl,5); /* ���l�ɂ�������ʒm */
+ break;
+ case ASC_CDP:
+ clif_produceeffect(sd,2,nameid);/* �b�����G�t�F�N�g */
+ clif_misceffect(&sd->bl,5);
+ break;
+ default: /* ���퐻���A�R�C������ */
+ clif_produceeffect(sd,0,nameid); /* ���퐻���G�t�F�N�g */
+ clif_misceffect(&sd->bl,3);
+ break;
}
if((flag = pc_additem(sd,&tmp_item,1))) {
@@ -10424,16 +10479,22 @@ int skill_produce_mix( struct map_session_data *sd,
log_produce(sd,nameid,slot1,slot2,slot3,0);
#endif //USE_SQL
- if(skill_produce_db[idx].req_skill!=AM_PHARMACY) { //���퐻���̏ꍇ
- clif_produceeffect(sd,1,nameid);/* ���퐻�����s�G�t�F�N�g�p�P�b�g */
- clif_misceffect(&sd->bl,2); /* ���l�ɂ����s��ʒm */
- }
- else if(skill_produce_db[idx].req_skill==AM_PHARMACY){ //�t�@?�}�V?�̏ꍇ
- clif_produceeffect(sd,3,nameid);/* ��?���s�G�t�F�N�g�p�P�b�g */
- clif_misceffect(&sd->bl,6); /* ���l�ɂ����s��ʒm*/
- }else{
- clif_produceeffect(sd,1,nameid);/* �s���Ȃ̂łƂ肠�����������s�G�t�F�N�g�p�P�b�g */
- clif_misceffect(&sd->bl,2); /* ���l�ɂ����s��ʒm*/
+ switch (skill_produce_db[idx].req_skill) {
+ case AM_PHARMACY:
+ clif_produceeffect(sd,3,nameid);/* ���򎸔s�G�t�F�N�g */
+ clif_misceffect(&sd->bl,6); /* ���l�ɂ����s��ʒm */
+ break;
+ case ASC_CDP:
+ {
+ clif_produceeffect(sd,3,nameid); /* �b�����G�t�F�N�g */
+ clif_misceffect(&sd->bl,6); /* ���l�ɂ����s��ʒm */
+ pc_heal(sd, -(sd->status.max_hp>>2), 0);
+ }
+ break;
+ default:
+ clif_produceeffect(sd,1,nameid);/* ���퐻�����s�G�t�F�N�g */
+ clif_misceffect(&sd->bl,2); /* ���l�ɂ����s��ʒm */
+ break;
}
}
return 0;
@@ -10785,12 +10846,12 @@ int skill_readdb(void)
}
k=0;
while(fgets(line,1020,fp)){
- char *split[16];
+ char *split[6 + MAX_PRODUCE_RESOURCE * 2];
int x,y;
if(line[0]=='/' && line[1]=='/')
continue;
memset(split,0,sizeof(split));
- for(j=0,p=line;j<13 && p;j++){
+ for(j=0,p=line;j<3 + MAX_PRODUCE_RESOURCE * 2 && p;j++){
split[j]=p;
p=strchr(p,',');
if(p) *p++=0;
@@ -10805,7 +10866,7 @@ int skill_readdb(void)
skill_produce_db[k].itemlv=atoi(split[1]);
skill_produce_db[k].req_skill=atoi(split[2]);
- for(x=3,y=0;split[x] && split[x+1] && y<5;x+=2,y++){
+ for(x=3,y=0; split[x] && split[x+1] && y<MAX_PRODUCE_RESOURCE; x+=2,y++){
skill_produce_db[k].mat_id[y]=atoi(split[x]);
skill_produce_db[k].mat_amount[y]=atoi(split[x+1]);
}
diff --git a/src/map/skill.h b/src/map/skill.h
index 17def6148..2a49e8e4b 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -6,10 +6,11 @@
#define MAX_SKILL_DB 450
#define MAX_SKILL_PRODUCE_DB 150
+#define MAX_PRODUCE_RESOURCE 7
#define MAX_SKILL_ARROW_DB 150
#define MAX_SKILL_ABRA_DB 350
-// �X�L���f�[�^�x�[�X
+// �X�L���f?�^�x?�X
struct skill_db {
int range[MAX_SKILL_LEVEL],hit,inf,pl,nk,max;
int num[MAX_SKILL_LEVEL];
@@ -32,22 +33,22 @@ struct skill_name_db {
};
extern struct skill_name_db skill_names[];
-// �A�C�e���쐬�f�[�^�x�[�X
+// �A�C�e���쐬�f?�^�x?�X
struct skill_produce_db {
int nameid, trigger;
int req_skill,itemlv;
- int mat_id[5],mat_amount[5];
+ int mat_id[MAX_PRODUCE_RESOURCE],mat_amount[MAX_PRODUCE_RESOURCE];
};
extern struct skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB];
-// ��쐬�f�[�^�x�[�X
+// ��쐬�f?�^�x?�X
struct skill_arrow_db {
int nameid, trigger;
int cre_id[5],cre_amount[5];
};
extern struct skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
-// �A�u���J�_�u���f�[�^�x�[�X
+// �A�u���J�_�u���f?�^�x?�X
struct skill_abra_db {
int nameid;
int req_lv;
@@ -62,7 +63,7 @@ struct skill_unit_group;
int do_init_skill(void);
-// �X�L���f�[�^�x�[�X�ւ̃A�N�Z�T
+// �X�L���f?�^�x?�X�ւ̃A�N�Z�T
int skill_get_hit( int id );
int skill_get_inf( int id );
int skill_get_pl( int id );
@@ -97,7 +98,7 @@ int skill_castend_map( struct map_session_data *sd,int skill_num, const char *ma
int skill_cleartimerskill(struct block_list *src);
int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int x,int y,int skill_id,int skill_lv,int type,int flag);
-// �lj�����
+// �lj�?��
int skill_additional_effect( struct block_list* src, struct block_list *bl,int skillid,int skilllv,int attack_type,unsigned int tick);
// ���j�b�g�X�L��
@@ -146,7 +147,7 @@ int skill_check_cloaking(struct block_list *bl);
int skill_type_cloaking(struct block_list *bl);
int skill_is_danceskill(int id);
-// �X�e�[�^�X�ُ�
+// �X�e?�^�X�ُ�
int skill_status_change_start(struct block_list *bl,int type,int val1,int val2,int val3,int val4,int tick,int flag);
int skill_status_change_timer(int tid, unsigned int tick, int id, int data);
int skill_encchant_eremental_end(struct block_list *bl, int type);
@@ -166,7 +167,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skilllv,unsigned int tick,int flag);
-// �X�L���U���ꊇ����
+// �X�L���U?�ꊇ?��
int skill_attack( int attack_type, struct block_list* src, struct block_list *dsrc,
struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
@@ -177,9 +178,9 @@ enum {
ST_RECOV_WEIGHT_RATE,ST_MOVE_ENABLE,ST_WATER,
};
-enum { // struct map_session_data �� status_change�̔ԍ��e�[�u��
-// SC_SENDMAX�����̓N���C�A���g�ւ̒ʒm����B
-// 2-2���E�̒l�͂Ȃ񂩂߂��Ⴍ������ۂ��̂Ŏb��B���Ԃ�ύX����܂��B
+enum { // struct map_session_data �� status_change�̔�?�e?�u��
+// SC_SENDMAX��?�̓N���C�A���g�ւ̒ʒm����B
+// 2-2���E�̒l�͂Ȃ񂩂߂��Ⴍ������ۂ��̂Ŏb��B���Ԃ�?�X����܂��B
SC_SENDMAX =128,
SC_PROVOKE = 0,
SC_ENDURE = 1,
@@ -241,21 +242,21 @@ enum { // struct map_session_data �� status_change�̔ԍ��e�[�u��
SC_FROSTWEAPON =91,
SC_LIGHTNINGLOADER =92,
SC_SEISMICWEAPON =93,
- SC_AURABLADE =103, /* �I�[���u���[�h */
+ SC_AURABLADE =103, /* �I?���u��?�h */
SC_PARRYING =104, /* �p���C���O */
- SC_CONCENTRATION =105, /* �R���Z���g���[�V���� */
+ SC_CONCENTRATION =105, /* �R���Z���g��?�V���� */
SC_TENSIONRELAX =106, /* �e���V���������b�N�X */
- SC_BERSERK =107, /* �o�[�T�[�N */
+ SC_BERSERK =107, /* �o?�T?�N */
SC_ASSUMPTIO =110, /* �A�V�����v�e�B�I */
- SC_MAGICPOWER =113, /* ���@�͑��� */
- SC_TRUESIGHT =115, /* �g�D���[�T�C�g */
- SC_WINDWALK =116, /* �E�C���h�E�H�[�N */
+ SC_MAGICPOWER =113, /* ���@��?�� */
+ SC_TRUESIGHT =115, /* �g�D��?�T�C�g */
+ SC_WINDWALK =116, /* �E�C���h�E�H?�N */
SC_MELTDOWN =117, /* �����g�_�E�� */
- SC_CARTBOOST =118, /* �J�[�g�u�[�X�g */
- SC_REJECTSWORD =120, /* ���W�F�N�g�\�[�h */
- SC_MARIONETTE =121, /* �}���I�l�b�g�R���g���[�� */
+ SC_CARTBOOST =118, /* �J?�g�u?�X�g */
+ SC_REJECTSWORD =120, /* ���W�F�N�g�\?�h */
+ SC_MARIONETTE =121, /* �}���I�l�b�g�R���g��?�� */
SC_HEADCRUSH =124, /* �w�b�h�N���b�V�� */
- SC_JOINTBEAT =125, /* �W���C���g�r�[�g */
+ SC_JOINTBEAT =125, /* �W���C���g�r?�g */
SC_STONE =128,
SC_FREEZE =129,
@@ -307,12 +308,12 @@ enum { // struct map_session_data �� status_change�̔ԍ��e�[�u��
SC_FORTUNE =176,
SC_SERVICE4U =177,
- SC_SPIDERWEB =180, /* �X�p�C�_�[�E�F�b�u */
+ SC_SPIDERWEB =180, /* �X�p�C�_?�E�F�b�u */
SC_MEMORIZE =181, /* �������C�Y */
- SC_WEDDING =187, //�����p(�����ߏւɂȂ��ĕ����̂��x���Ƃ�)
- SC_NOCHAT =188, //�ԃG�����
- SC_SPLASHER =189, /* �x�i���X�v���b�V���[ */
+ SC_WEDDING =187, //�����p(�����ߏւɂȂ���?���̂�?���Ƃ�)
+ SC_NOCHAT =188, //�ԃG��?��
+ SC_SPLASHER =189, /* �x�i���X�v���b�V��? */
SC_SELFDESTRUCTION =190, /* ���� */
@@ -338,7 +339,7 @@ enum { // struct map_session_data �� status_change�̔ԍ��e�[�u��
// [Celest]
SC_SLOWDOWN = 45, // for skill slowdown
SC_BLEEDING = 124, // Temporarily same id as headcrush
- SC_POISON2 = 193, // for EDP -- notes: Not implemented since damage unknown yet
+ SC_DPOISON = 193, /* �ғ� */
SC_BLOCKSKILL = 194, // for disallowing the use of a skill for a time period
// -- testing various SC effects