From 69157e0ed740155f423edc364313d250b34aa5da Mon Sep 17 00:00:00 2001 From: rud0lp20 Date: Sat, 12 Jan 2013 16:39:38 +0000 Subject: Change GC_VENOMIMPRESS to 10 cells.(bugreport:6419) Fixed bugreport:6503 where SR_GT_REVITALIZE causes glitch display in stat window. Change WM_LULLABY_DEEPSLEEP to self targeted skill.(bugreport:6579) Fixed bugreport:6642 where SR_CURSEDCIRCLE effect is not remove after casting AL_WARP. Change SO_ARULLO to ground targeted skill.(bugreport:6842) Fixed bugreport:7165 where 'npcwalkto' script command is not working properly. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17094 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/script.c | 5 +++++ src/map/skill.c | 39 +++++++++++++++++++++++++++------------ src/map/status.c | 10 +++------- 3 files changed, 35 insertions(+), 19 deletions(-) (limited to 'src/map') diff --git a/src/map/script.c b/src/map/script.c index a918bc853..3e65a4f25 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -12911,6 +12911,11 @@ BUILDIN_FUNC(npcwalkto) y=script_getnum(st,3); if(nd) { + if (!nd->status.hp) { + status_calc_npc(nd, true); + } else { + status_calc_npc(nd, false); + } unit_walktoxy(&nd->bl,x,y,0); } diff --git a/src/map/skill.c b/src/map/skill.c index 8c21b7eba..f63975023 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -4496,11 +4496,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } break; - case WM_LULLABY_DEEPSLEEP: - if( bl != src && rnd()%100 < 88 + 2 * skill_lv ) - sc_start(bl,status_skill2sc(skill_id),100,skill_lv,skill_get_time(skill_id,skill_lv)); - break; - case SO_POISON_BUSTER: { struct status_change *tsc = status_get_sc(bl); if( tsc && tsc->data[SC_POISON] ) { @@ -8592,12 +8587,25 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case SO_ARRULLO: - if( flag&1 ) - sc_start2(bl, type, 88 + 2 * skill_lv, skill_lv, 1, skill_get_time(skill_id, skill_lv)); - else { - clif_skill_nodamage(src, bl, skill_id, 0, 1); + { + // [(15 + 5 * Skill Level) + ( Caster’s INT / 5 ) + ( Caster’s Job Level / 5 ) - ( Target’s INT / 6 ) - ( Target’s LUK / 10 )] % + int rate = (15 + 5 * skill_lv) + status_get_int(src)/5 + (sd)?sd->status.job_level:0; + rate -= status_get_int(bl)/6 - status_get_luk(bl)/10; + clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); + sc_start2(bl, type, rate, skill_lv, 1, skill_get_time(skill_id, skill_lv)); + } + break; + + case WM_LULLABY_DEEPSLEEP: + if( flag&1 ){ + //[(Skill Level x 4) + (Voice Lessons Skill Level x 2) + (Caster’s Base Level / 15) + (Caster’s Job Level / 5)] % + int rate = (4 * skill_lv) + ( (sd) ? pc_checkskill(sd,WM_LESSON)*2 + sd->status.job_level/5 : 0 ) + status_get_lv(src) / 15; + if( bl != src ) + sc_start(bl,type,rate,skill_lv,skill_get_time(skill_id,skill_lv)); + }else { + clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, - src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id); + src, skill_id, skill_lv, tick, flag|BCT_ALL|1, skill_castend_nodamage_id); } break; @@ -9821,6 +9829,8 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui (skill_lv >= 4) ? sd->status.memo_point[2].map : 0 ); } + if( sc && sc->data[SC_CURSEDCIRCLE_ATKER] ) //Should only remove after the skill has been casted. + status_change_end(src,SC_CURSEDCIRCLE_ATKER,INVALID_TIMER); return 0; // not to consume item. case MO_BODYRELOCATION: @@ -10008,10 +10018,15 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case NC_COLDSLOWER: case NC_ARMSCANNON: case RK_DRAGONBREATH: - case WM_LULLABY_DEEPSLEEP: i = skill_get_splash(skill_id,skill_lv); map_foreachinarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,splash_target(src), - src,skill_id,skill_lv,tick,flag|(skill_id==WM_LULLABY_DEEPSLEEP?BCT_ALL:BCT_ENEMY)|1,skill_castend_damage_id); + src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id); + break; + + case SO_ARRULLO: + i = skill_get_splash(skill_id,skill_lv); + map_foreachinarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,splash_target(src), + src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id); break; /** * Guilotine Cross diff --git a/src/map/status.c b/src/map/status.c index 649cfa1ae..d4d230d36 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -3246,7 +3246,7 @@ int status_calc_npc_(struct npc_data *nd, bool first) { status->race = RC_DEMIHUMAN; status->size = nd->size; status->rhw.range = 1 + status->size; - status->mode = MD_CANMOVE|MD_CANATTACK; + status->mode = (MD_CANMOVE|MD_CANATTACK); status->speed = nd->speed; } @@ -4978,8 +4978,6 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change def2 -= def2 * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100; if( sc->data[SC_ECHOSONG] ) def2 += def2 * sc->data[SC_ECHOSONG]->val2/100; - if( sc->data[SC_GT_REVITALIZE] && sc->data[SC_GT_REVITALIZE]->val4) - def2 += def2 * sc->data[SC_GT_REVITALIZE]->val4 / 100; if(sc->data[SC_ASH] && (bl->type==BL_MOB)){ if(status_get_race(bl)==RC_PLANT) def2 /= 2; @@ -5791,7 +5789,7 @@ struct status_data *status_get_status_data(struct block_list *bl) case BL_HOM: return &((TBL_HOM*)bl)->battle_status; case BL_MER: return &((TBL_MER*)bl)->battle_status; case BL_ELEM: return &((TBL_ELEM*)bl)->battle_status; - case BL_NPC: return ((mobdb_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : &dummy_status); + case BL_NPC: return &((TBL_NPC*)bl)->status; default: return &dummy_status; } @@ -5807,7 +5805,7 @@ struct status_data *status_get_base_status(struct block_list *bl) case BL_HOM: return &((TBL_HOM*)bl)->base_status; case BL_MER: return &((TBL_MER*)bl)->base_status; case BL_ELEM: return &((TBL_ELEM*)bl)->base_status; - case BL_NPC: return ((mobdb_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : NULL); + case BL_NPC: return &((TBL_NPC*)bl)->status; default: return NULL; } @@ -5825,8 +5823,6 @@ defType status_get_def(struct block_list *bl) { unsigned short status_get_speed(struct block_list *bl) { - if(bl->type==BL_NPC)//Only BL with speed data but no status_data [Skotlex] - return ((struct npc_data *)bl)->speed; return status_get_status_data(bl)->speed; } -- cgit v1.2.3-70-g09d2 From f6593616b3f8edfe0402051decc9071d3e9dadfa Mon Sep 17 00:00:00 2001 From: rud0lp20 Date: Sun, 13 Jan 2013 12:48:44 +0000 Subject: Fixed bugreport:7170 where AL_INCAGI where it double DEF. Fixed bugreport:6961 WL_COMET AOE range is now 15x15. Fixed bugreport:5811 where SC_BLEEDING is not attach to caster to give exp. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17097 54d463be-8e91-2dee-dedb-b68131a5f0ec --- db/pre-re/skill_db.txt | 2 +- db/re/skill_db.txt | 2 +- src/map/skill.c | 28 ++++++++++++++-------------- src/map/status.c | 9 +++++---- 4 files changed, 21 insertions(+), 20 deletions(-) (limited to 'src/map') diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 039aff956..882ffb6e2 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -714,7 +714,7 @@ 2210,11,6,1,0,0,0,5,1,yes,0,0,0,magic,0, WL_DRAINLIFE,Drain Life 2211,11,8,1,3,0x2,3,5,-7,yes,0,0,0,magic,3, WL_CRIMSONROCK,Crimson Rock 2212,11,6,1,3,0,0,5,1,yes,0,0,0,magic,0, WL_HELLINFERNO,Hell Inferno -2213,11,8,2,0,0x2,15,5,-20,yes,0,0,0,magic,2, WL_COMET,Comet //CHECK AoE in official code appears to be 15 x 15, yet casting circle is much bigger then that. +2213,11,8,2,0,0x2,7,5,-20,yes,0,0,0,magic,2, WL_COMET,Comet 2214,11,6,1,0,0,3,5,1,yes,0,0,0,magic,0, WL_CHAINLIGHTNING,Chain Lightning //CHECK Is the splash being used for the target search? 2215,11,6,1,4,0,0,5,1,no,0,0,0,magic,0, WL_CHAINLIGHTNING_ATK,Chain Lightning Attack 2216,3,8,2,2,0,0,5,-6:-7:-8:-9:-10,yes,0,0,0,magic,0, WL_EARTHSTRAIN,Earth Strain diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 4ca69f1df..acb879442 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -714,7 +714,7 @@ 2210,11,6,1,0,0,0,5,1,yes,0,0,0,magic,0, WL_DRAINLIFE,Drain Life 2211,11,8,1,3,0x2,3,5,-7,yes,0,0,0,magic,3, WL_CRIMSONROCK,Crimson Rock 2212,11,6,1,3,0,0,5,1,yes,0,0,0,magic,0, WL_HELLINFERNO,Hell Inferno -2213,11,8,2,0,0x2,15,5,-20,yes,0,0,0,magic,2, WL_COMET,Comet //CHECK AoE in official code appears to be 15 x 15, yet casting circle is much bigger then that. +2213,11,8,2,0,0x2,7,5,-20,yes,0,0,0,magic,2, WL_COMET,Comet 2214,11,6,1,0,0,3,5,1,yes,0,0,0,magic,0, WL_CHAINLIGHTNING,Chain Lightning //CHECK Is the splash being used for the target search? 2215,11,6,1,4,0,0,5,1,no,0,0,0,magic,0, WL_CHAINLIGHTNING_ATK,Chain Lightning Attack 2216,3,8,2,2,0,0,5,-6:-7:-8:-9:-10,yes,0,0,0,magic,0, WL_EARTHSTRAIN,Earth Strain diff --git a/src/map/skill.c b/src/map/skill.c index f63975023..8718c3b58 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -988,7 +988,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint break; case AM_ACIDTERROR: - sc_start(bl,SC_BLEEDING,(skill_lv*3),skill_lv,skill_get_time2(skill_id,skill_lv)); + sc_start2(bl,SC_BLEEDING,(skill_lv*3),skill_lv,src->id,skill_get_time2(skill_id,skill_lv)); if (skill_break_equip(bl, EQP_ARMOR, 100*skill_get_time(skill_id,skill_lv), BCT_ENEMY)) clif_emotion(bl,E_OMG); break; @@ -1060,7 +1060,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint sc_start(bl,status_skill2sc(skill_id),70,skill_lv,skill_get_time2(skill_id,skill_lv)); break; case NPC_BLEEDING: - sc_start(bl,SC_BLEEDING,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); + sc_start2(bl,SC_BLEEDING,(20*skill_lv),skill_lv,src->id,skill_get_time2(skill_id,skill_lv)); break; case NPC_MENTALBREAKER: { //Based on observations by Tharis, Mental Breaker should do SP damage @@ -1106,13 +1106,13 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint case LK_HEADCRUSH: //Headcrush has chance of causing Bleeding status, except on demon and undead element if (!(battle_check_undead(tstatus->race, tstatus->def_ele) || tstatus->race == RC_DEMON)) - sc_start(bl, SC_BLEEDING,50, skill_lv, skill_get_time2(skill_id,skill_lv)); + sc_start2(bl, SC_BLEEDING,50, skill_lv, src->id, skill_get_time2(skill_id,skill_lv)); break; case LK_JOINTBEAT: status = status_skill2sc(skill_id); if (tsc->jb_flag) { - sc_start2(bl,status,(5*skill_lv+5),skill_lv,tsc->jb_flag&BREAK_FLAGS,skill_get_time2(skill_id,skill_lv)); + sc_start4(bl,status,(5*skill_lv+5),skill_lv,tsc->jb_flag&BREAK_FLAGS,src->id,0,skill_get_time2(skill_id,skill_lv)); tsc->jb_flag = 0; } break; @@ -1126,7 +1126,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint sc_start(bl,SC_STUN,(5+skill_lv*5),skill_lv,skill_get_time2(skill_id,2)); break; default: - sc_start(bl,SC_BLEEDING,(5+skill_lv*5),skill_lv,skill_get_time2(skill_id,3)); + sc_start2(bl,SC_BLEEDING,(5+skill_lv*5),skill_lv,src->id,skill_get_time2(skill_id,3)); } break; @@ -1167,7 +1167,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint status_change_start(bl,SC_COMA,10,skill_lv,0,src->id,0,0,0); break; case GS_PIERCINGSHOT: - sc_start(bl,SC_BLEEDING,(skill_lv*3),skill_lv,skill_get_time2(skill_id,skill_lv)); + sc_start2(bl,SC_BLEEDING,(skill_lv*3),skill_lv,src->id,skill_get_time2(skill_id,skill_lv)); break; case NJ_HYOUSYOURAKU: sc_start(bl,SC_FREEZE,(10+10*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); @@ -1271,7 +1271,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint rate = 30 + (((5 * (sd?pc_checkskill(sd,LG_PINPOINTATTACK):skill_lv)) + (sstatus->agi + status_get_lv(src))) / 10); switch( skill_lv ) { case 1: - sc_start(bl,SC_BLEEDING,rate,skill_lv,skill_get_time(skill_id,skill_lv)); + sc_start2(bl,SC_BLEEDING,rate,skill_lv,src->id,skill_get_time(skill_id,skill_lv)); break; case 2: if( dstsd && dstsd->spiritball && rnd()%100 < rate ) @@ -1351,7 +1351,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint } break; case SO_EARTHGRAVE: - sc_start(bl, SC_BLEEDING, 5 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv)); // Need official rate. [LimitLine] + sc_start2(bl, SC_BLEEDING, 5 * skill_lv, skill_lv, src->id, skill_get_time2(skill_id, skill_lv)); // Need official rate. [LimitLine] break; case SO_DIAMONDDUST: rate = 5 + 5 * skill_lv; @@ -1367,7 +1367,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint switch( sd->itemid ) { // Starting SCs here instead of do it in skill_additional_effect to simplify the code. case 13261: sc_start(bl, SC_STUN, 100, skill_lv, skill_get_time2(GN_SLINGITEM, skill_lv)); - sc_start(bl, SC_BLEEDING, 100, skill_lv, skill_get_time2(GN_SLINGITEM, skill_lv)); + sc_start2(bl, SC_BLEEDING, 100, skill_lv, src->id, skill_get_time2(GN_SLINGITEM, skill_lv)); break; case 13262: sc_start(bl, SC_MELON_BOMB, 100, skill_lv, skill_get_time(GN_SLINGITEM, skill_lv)); // Reduces ASPD and moviment speed @@ -1382,10 +1382,10 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint break; case GN_HELLS_PLANT_ATK: sc_start(bl, SC_STUN, 5 + 5 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv)); - sc_start(bl, SC_BLEEDING, 20 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv)); + sc_start2(bl, SC_BLEEDING, 20 + 10 * skill_lv, skill_lv, src->id,skill_get_time2(skill_id, skill_lv)); break; case EL_WIND_SLASH: // Non confirmed rate. - sc_start(bl, SC_BLEEDING, 25, skill_lv, skill_get_time(skill_id,skill_lv)); + sc_start2(bl, SC_BLEEDING, 25, skill_lv, src->id, skill_get_time(skill_id,skill_lv)); break; case EL_STONE_HAMMER: rate = 10 * skill_lv; @@ -3239,7 +3239,7 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data) { i = applyeffects[rnd()%j]; status_change_start(target, i, 10000, skl->skill_lv, - (i == SC_BURNING ? 1000 : 0), + (i == SC_BURNING ? 1000 : (i == SC_BLEEDING ? src->id : 0)), (i == SC_BURNING ? src->id : 0), 0, skill_get_time(WL_TETRAVORTEX,skl->skill_lv), 0); } @@ -7388,7 +7388,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui const enum sc_type sc[] = { SC_STUN, SC_SILENCE, SC_CONFUSION, SC_BLEEDING }; int j; j = i = rnd()%ARRAYLENGTH(sc); - while ( !sc_start(bl,sc[i],100,skill_lv,skill_get_time2(skill_id,i+1)) ) { + while ( !sc_start2(bl,sc[i],100,skill_lv,src->id,skill_get_time2(skill_id,i+1)) ) { i++; if ( i == ARRAYLENGTH(sc) ) i = 0; @@ -7408,7 +7408,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case NPC_SLOWCAST: case NPC_WIDEHELLDIGNITY: if (flag&1) - sc_start(bl,type,100,skill_lv,skill_get_time2(skill_id,skill_lv)); + sc_start2(bl,type,100,skill_lv,src->id,skill_get_time2(skill_id,skill_lv)); else { skill_area_temp[2] = 0; //For SD_PREAMBLE clif_skill_nodamage(src,bl,skill_id,skill_lv,1); diff --git a/src/map/status.c b/src/map/status.c index d4d230d36..22094af4a 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -3700,7 +3700,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) else status->def2 = status_calc_def2(bl, sc, b_status->def2 #ifdef RENEWAL - + (int)( ((float)status->vit/2 + (float)b_status->vit/2) + ((float)status->agi/5 + (float)b_status->agi/5) ) + + (int)( ((float)status->vit/2 - (float)b_status->vit/2) + ((float)status->agi/5 - (float)b_status->agi/5) ) #else + (status->vit - b_status->vit) #endif @@ -3725,7 +3725,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) else status->mdef2 = status_calc_mdef2(bl, sc, b_status->mdef2 +(status->int_ - b_status->int_) #ifdef RENEWAL - + (int)( ((float)status->dex/5 - (float)b_status->dex/5) + ((float)status->vit/5 + (float)b_status->vit/5) ) + + (int)( ((float)status->dex/5 - (float)b_status->dex/5) + ((float)status->vit/5 - (float)b_status->vit/5) ) #else + ((status->vit - b_status->vit)>>1) #endif @@ -7583,7 +7583,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_JOINTBEAT: if( val2&BREAK_NECK ) - sc_start(bl,SC_BLEEDING,100,val1,skill_get_time2(status_sc2skill(type),val1)); + sc_start2(bl,SC_BLEEDING,100,val1,val3,skill_get_time2(status_sc2skill(type),val1)); break; case SC_BERSERK: @@ -9944,8 +9944,9 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) case SC_BLEEDING: if (--(sce->val4) >= 0) { int hp = rnd()%600 + 200; + struct block_list* src = map_id2bl(sce->val2); map_freeblock_lock(); - status_fix_damage(NULL, bl, sd||hphp?hp:status->hp-1, 1); + status_fix_damage(src, bl, sd||hphp?hp:status->hp-1, 1); if( sc->data[type] ) { if( status->hp == 1 ) { map_freeblock_unlock(); -- cgit v1.2.3-70-g09d2 From b73e466ed5311a164749ab22e2d3fb1fb0dd6ff6 Mon Sep 17 00:00:00 2001 From: rud0lp20 Date: Sun, 13 Jan 2013 17:06:39 +0000 Subject: Follow up r17094.(bugreport:7173) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17098 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/status.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/map') diff --git a/src/map/status.c b/src/map/status.c index 22094af4a..2c2c2ae83 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -5789,7 +5789,7 @@ struct status_data *status_get_status_data(struct block_list *bl) case BL_HOM: return &((TBL_HOM*)bl)->battle_status; case BL_MER: return &((TBL_MER*)bl)->battle_status; case BL_ELEM: return &((TBL_ELEM*)bl)->battle_status; - case BL_NPC: return &((TBL_NPC*)bl)->status; + case BL_NPC: return ((mobdb_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : &dummy_status); default: return &dummy_status; } @@ -5805,7 +5805,7 @@ struct status_data *status_get_base_status(struct block_list *bl) case BL_HOM: return &((TBL_HOM*)bl)->base_status; case BL_MER: return &((TBL_MER*)bl)->base_status; case BL_ELEM: return &((TBL_ELEM*)bl)->base_status; - case BL_NPC: return &((TBL_NPC*)bl)->status; + case BL_NPC: return ((mobdb_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : NULL); default: return NULL; } @@ -5823,6 +5823,8 @@ defType status_get_def(struct block_list *bl) { unsigned short status_get_speed(struct block_list *bl) { + if(bl->type==BL_NPC)//Only BL with speed data but no status_data [Skotlex] + return ((struct npc_data *)bl)->speed; return status_get_status_data(bl)->speed; } -- cgit v1.2.3-70-g09d2 From 27e6526a5ea0a01d4fb79ee009ad5aeb04999892 Mon Sep 17 00:00:00 2001 From: trojal Date: Mon, 14 Jan 2013 14:05:39 +0000 Subject: * Added quotes parsing to @set (bugreport:7171) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17099 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/atcommand.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/map') diff --git a/src/map/atcommand.c b/src/map/atcommand.c index c6292a7a9..2a18b7d2f 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8585,7 +8585,7 @@ ACMD_FUNC(accinfo) { ACMD_FUNC(set) { char reg[32], val[128]; struct script_data* data; - int toset = 0; + int toset = 0, len; bool is_str = false; if( !message || !*message || (toset = sscanf(message, "%32s %128[^\n]s", reg, val)) < 1 ) { @@ -8607,6 +8607,13 @@ ACMD_FUNC(set) { is_str = ( reg[strlen(reg) - 1] == '$' ) ? true : false; + if( ( len = strlen(val) ) > 1 ) { + if( val[0] == '"' && val[len-1] == '"') { + val[len-1] = '\0'; //Strip quotes. + memmove(val, val+1, len-1); + } + } + if( toset >= 2 ) {/* we only set the var if there is an val, otherwise we only output the value */ if( is_str ) set_var(sd, reg, (void*) val); -- cgit v1.2.3-70-g09d2 From 2905b80803313112e951e2d1e32f2c2e1252c170 Mon Sep 17 00:00:00 2001 From: euphyy Date: Wed, 16 Jan 2013 01:09:24 +0000 Subject: * Documented @set command from r16123. * Fixed a waitingroom bug in Wizard job quest (bugreport:7189). * Fixed getequipname() returning -1 instead of an empty string (bugreport:7186). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17100 54d463be-8e91-2dee-dedb-b68131a5f0ec --- doc/atcommands.txt | 10 +++++++++- npc/jobs/2-1/wizard.txt | 22 ++++++++++------------ src/map/script.c | 2 +- 3 files changed, 20 insertions(+), 14 deletions(-) (limited to 'src/map') diff --git a/doc/atcommands.txt b/doc/atcommands.txt index a8d00ef19..a0afa043c 100644 --- a/doc/atcommands.txt +++ b/doc/atcommands.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= rAthena Dev Team //===== Current Version: ===================================== -//= 20121223 +//= 20130115 //===== Description: ========================================= //= List of available atcommands and their functions. //============================================================ @@ -1145,6 +1145,14 @@ Reloads the specified configuration file. --------------------------------------- +@set {} + +Changes a player or account variable to the specified value. +If no value is given, the variable's current value will be displayed. +Note that the value of a string variable may be typed with or without double quotes. + +--------------------------------------- + @setbattleflag Changes a battle_config flag without rebooting the server. diff --git a/npc/jobs/2-1/wizard.txt b/npc/jobs/2-1/wizard.txt index b24728a24..6598a0cc2 100644 --- a/npc/jobs/2-1/wizard.txt +++ b/npc/jobs/2-1/wizard.txt @@ -4,7 +4,7 @@ //= (Aegis) Translated by yoshiki, converted by kobra_k88 //= Further bugfixed and tested by Lupus //===== Current Version: ===================================== -//= 3.2 +//= 3.3 //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= @@ -26,6 +26,7 @@ //= 3.0 Added Quest Log commands. [Kisuka] //= 3.1 Removed the need for use of 'goto.' [L0ne_W0lf] //= 3.2 Modified the quest to renewal. [Vali] (Thanks to Muad_Dib for the necessary info). +//= 3.3 Fixed waitingroom bug. [Euphy] //============================================================ gef_tower,111,37,4 script Wizard Guildsman 70,{ @@ -1067,11 +1068,9 @@ job_wiz,50,165,4 script Arena Assistant 700,{ mes "Each person may take approximately 5 to 10 minutes."; mes "If you would like to leave the arena, please log off anytime."; close; -} -job_wiz,50,165,4 script Waiting Room#wiz 700,{ OnInit: - waitingroom "Waiting Room",20,"Waiting Room#wiz::OnStartArena",1; + waitingroom "Waiting Room",20,"Arena Assistant::OnStartArena",1; enablewaitingroomevent; end; @@ -1079,7 +1078,6 @@ OnStartArena: killmonsterall "job_wiz"; warpwaitingpc "job_wiz",114,169; donpcevent "Room of Water::OnEnable"; - disablenpc "Waiting Room#wiz"; disablewaitingroomevent; end; @@ -1180,7 +1178,7 @@ OnTimer185000: OnTimer186000: disablenpc "Room of Water#Failed"; donpcevent "Room of Water::OnDisable"; - donpcevent "Waiting Room#wiz::OnStart"; + donpcevent "Arena Assistant::OnStart"; end; } @@ -1246,7 +1244,7 @@ OnTimer62000: OnTimer63000: disablenpc "Room of Water#Failed"; donpcevent "Room of Water#Door::OnDisable"; - donpcevent "Waiting Room#wiz::OnStart"; + donpcevent "Arena Assistant::OnStart"; end; } @@ -1354,7 +1352,7 @@ OnTimer185000: OnTimer186000: disablenpc "Room of Earth#Failed"; donpcevent "Room of Earth::OnDisable"; - donpcevent "Waiting Room#wiz::OnStart"; + donpcevent "Arena Assistant::OnStart"; end; } @@ -1426,7 +1424,7 @@ OnTimer62000: OnTimer63000: disablenpc "Room of Earth#Failed"; donpcevent "Room of Earth#Door::OnDisable"; - donpcevent "Waiting Room#wiz::OnStart"; + donpcevent "Arena Assistant::OnStart"; end; } @@ -1532,7 +1530,7 @@ OnTimer185000: OnTimer186000: disablenpc "Room of Fire#Failed"; donpcevent "Room of Fire::OnDisable"; - donpcevent "Waiting Room#wiz::OnStart"; + donpcevent "Arena Assistant::OnStart"; end; } @@ -1610,7 +1608,7 @@ OnTimer122000: OnTimer123000: disablenpc "Room of Fire#Failed"; donpcevent "Room of Fire#Door::OnDisable"; - donpcevent "Waiting Room#wiz::OnStart"; + donpcevent "Arena Assistant::OnStart"; } job_wiz,46,99,0 script Room of Fire#Failed -1,16,16,{ @@ -1656,7 +1654,7 @@ OnTimer7000: OnTimer9000: donpcevent "Test Helper#wiz::OnDisable"; - donpcevent "Waiting Room#wiz::OnStart"; + donpcevent "Arena Assistant::OnStart"; stopnpctimer; end; } diff --git a/src/map/script.c b/src/map/script.c index 3e65a4f25..4099820f1 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -7414,7 +7414,7 @@ BUILDIN_FUNC(getequipname) i = pc_checkequip(sd,equip[num]); if( i < 0 ) { - script_pushint(st,-1); + script_pushconststr(st,""); return 0; } -- cgit v1.2.3-70-g09d2 From 32ea0d89b449710473aab78d83840d22fccfd5b4 Mon Sep 17 00:00:00 2001 From: rud0lp20 Date: Wed, 16 Jan 2013 14:45:42 +0000 Subject: Fixed bugreport:7182 where GN_MIX_COOKING is limited in creating 1 food item. Fixed bugreport:7172 missing elemental resistance bonus of NC_RESEARCHFE. Recoded RA_FEARBREEZE.(bugreport:7188). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17101 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/battle.c | 34 +++++++++++++++++++++++++--------- src/map/clif.c | 2 +- src/map/status.c | 4 ++++ 3 files changed, 30 insertions(+), 10 deletions(-) (limited to 'src/map') diff --git a/src/map/battle.c b/src/map/battle.c index 7b6bf5869..0959ea858 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1857,19 +1857,35 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo wd.div_ = skill_get_num(GS_CHAINACTION,skill_lv); wd.type = 0x08; } - else if(sc && sc->data[SC_FEARBREEZE] && sd->weapontype1==W_BOW && (i = sd->equip_index[EQI_AMMO]) >= 0 && sd->inventory_data[i] && sd->status.inventory[i].amount > 1){ - short rate[] = { 4, 4, 7, 9, 10 }; - if(sc->data[SC_FEARBREEZE]->val1 > 0 && sc->data[SC_FEARBREEZE]->val1 < 6 && rand()%100 < rate[sc->data[SC_FEARBREEZE]->val1-1]) { + else if(sc && sc->data[SC_FEARBREEZE] && sd->weapontype1==W_BOW + && (i = sd->equip_index[EQI_AMMO]) >= 0 && sd->inventory_data[i] && sd->status.inventory[i].amount > 1){ + int chance = rand()%100; wd.type = 0x08; - wd.div_ = 2; - if(sc->data[SC_FEARBREEZE]->val1 > 2){ - int chance = rand()%100; - wd.div_ += (chance >= 40) + (chance >= 70) + (chance >= 90); - wd.div_ = min(wd.div_,sc->data[SC_FEARBREEZE]->val1); + switch(sc->data[SC_FEARBREEZE]->val1){ + case 5: + if( chance < 3){// 3 % chance to attack 5 times. + wd.div_ = 5; + break; + } + case 4: + if( chance < 7){// 6 % chance to attack 4 times. + wd.div_ = 4; + break; + } + case 3: + if( chance < 10){// 9 % chance to attack 3 times. + wd.div_ = 3; + break; + } + case 2: + case 1: + if( chance < 13){// 12 % chance to attack 2 times. + wd.div_ = 2; + break; + } } wd.div_ = min(wd.div_,sd->status.inventory[i].amount); sc->data[SC_FEARBREEZE]->val4 = wd.div_-1; - } } } diff --git a/src/map/clif.c b/src/map/clif.c index a47a98891..31c3cc53c 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -11057,7 +11057,7 @@ void clif_parse_Cooking(int fd,struct map_session_data *sd) { return; } if( skill_can_produce_mix(sd,nameid,sd->menuskill_val, amount) ) - skill_produce_mix(sd,0,nameid,0,0,0,amount); + skill_produce_mix(sd,(type>1?sd->menuskill_id:0),nameid,0,0,0,amount); clif_menuskill_clear(sd); } diff --git a/src/map/status.c b/src/map/status.c index 2c2c2ae83..8a173f611 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2995,6 +2995,10 @@ int status_calc_pc_(struct map_session_data* sd, bool first) sd->subele[ELE_NEUTRAL] += skill; sd->subele[ELE_FIRE] += skill*4; } + if((skill=pc_checkskill(sd,NC_RESEARCHFE))>0) { + sd->subele[ELE_EARTH] += skill*10; + sd->subele[ELE_FIRE] += skill*10; + } if((skill=pc_checkskill(sd,SA_DRAGONOLOGY))>0 ){ skill = skill*4; sd->right_weapon.addrace[RC_DRAGON]+=skill; -- cgit v1.2.3-70-g09d2