diff options
author | celest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2004-11-20 10:41:21 +0000 |
---|---|---|
committer | celest <celest@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2004-11-20 10:41:21 +0000 |
commit | a4756bb8123d607ed5c4b854653d2ddab814f555 (patch) | |
tree | 58919b57647884cbbf93a0e76b37a9c7919ed34e /src | |
parent | 756284de71ecc32123edb92e88edd145c0301e66 (diff) | |
download | hercules-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.c | 2 | ||||
-rw-r--r-- | src/map/skill.c | 221 | ||||
-rw-r--r-- | src/map/skill.h | 55 |
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 |