Fixed bugreport:6456 repair scroll (#14587) is now fully functional, bug was due to the range being checked on pc_checkskill and it'd return 0 when the caster isn't a blacksmith class (or doesn't have repair weapon mastered), the skill level cast is now stored in (struct map_session_data)->menuskill_val2. special thanks to kyeme for his persistence
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16624 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
3f2bdc58fd
commit
83d20aea87
@ -5817,7 +5817,7 @@ void clif_item_identified(struct map_session_data *sd,int idx,int flag)
|
||||
|
||||
/// Presents a list of items that can be repaired (ZC_REPAIRITEMLIST).
|
||||
/// 01fc <packet len>.W { <index>.W <name id>.W <refine>.B <card1>.W <card2>.W <card3>.W <card4>.W }*
|
||||
void clif_item_repair_list(struct map_session_data *sd,struct map_session_data *dstsd)
|
||||
void clif_item_repair_list(struct map_session_data *sd,struct map_session_data *dstsd, int lv)
|
||||
{
|
||||
int i,c;
|
||||
int fd;
|
||||
@ -5844,6 +5844,7 @@ void clif_item_repair_list(struct map_session_data *sd,struct map_session_data *
|
||||
WFIFOSET(fd,WFIFOW(fd,2));
|
||||
sd->menuskill_id = BS_REPAIRWEAPON;
|
||||
sd->menuskill_val = dstsd->bl.id;
|
||||
sd->menuskill_val2 = lv;
|
||||
}else
|
||||
clif_skill_fail(sd,sd->ud.skillid,USESKILL_FAIL_LEVEL,0);
|
||||
}
|
||||
|
@ -468,7 +468,7 @@ void clif_clearcart(int fd);
|
||||
|
||||
void clif_item_identify_list(struct map_session_data *sd);
|
||||
void clif_item_identified(struct map_session_data *sd,int idx,int flag);
|
||||
void clif_item_repair_list(struct map_session_data *sd, struct map_session_data *dstsd);
|
||||
void clif_item_repair_list(struct map_session_data *sd, struct map_session_data *dstsd, int lv);
|
||||
void clif_item_repaireffect(struct map_session_data *sd, int idx, int flag);
|
||||
void clif_item_damaged(struct map_session_data* sd, unsigned short position);
|
||||
void clif_item_refine_list(struct map_session_data *sd);
|
||||
|
@ -5906,7 +5906,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
||||
|
||||
case BS_REPAIRWEAPON:
|
||||
if(sd && dstsd)
|
||||
clif_item_repair_list(sd,dstsd);
|
||||
clif_item_repair_list(sd,dstsd,skilllv);
|
||||
break;
|
||||
|
||||
case MC_IDENTIFY:
|
||||
@ -13725,45 +13725,51 @@ void skill_brandishspear(struct block_list* src, struct block_list* bl, int skil
|
||||
/*==========================================
|
||||
* Weapon Repair [Celest/DracoRPG]
|
||||
*------------------------------------------*/
|
||||
void skill_repairweapon (struct map_session_data *sd, int idx)
|
||||
{
|
||||
void skill_repairweapon (struct map_session_data *sd, int idx) {
|
||||
int material;
|
||||
int materials[4] = { 1002, 998, 999, 756 };
|
||||
struct item *item;
|
||||
struct map_session_data *target_sd;
|
||||
|
||||
nullpo_retv(sd);
|
||||
target_sd = map_id2sd(sd->menuskill_val);
|
||||
if (!target_sd) //Failed....
|
||||
|
||||
if ( !( target_sd = map_id2sd(sd->menuskill_val) ) ) //Failed....
|
||||
return;
|
||||
if(idx==0xFFFF) // No item selected ('Cancel' clicked)
|
||||
|
||||
if( idx == 0xFFFF ) // No item selected ('Cancel' clicked)
|
||||
return;
|
||||
if(idx < 0 || idx >= MAX_INVENTORY)
|
||||
if( idx < 0 || idx >= MAX_INVENTORY )
|
||||
return; //Invalid index??
|
||||
|
||||
item = &target_sd->status.inventory[idx];
|
||||
if(item->nameid <= 0 || item->attribute == 0)
|
||||
if( item->nameid <= 0 || item->attribute == 0 )
|
||||
return; //Again invalid item....
|
||||
|
||||
if(sd!=target_sd && !battle_check_range(&sd->bl,&target_sd->bl,skill_get_range2(&sd->bl, sd->menuskill_id,pc_checkskill(sd, sd->menuskill_id)))){
|
||||
if( sd != target_sd && !battle_check_range(&sd->bl,&target_sd->bl, skill_get_range2(&sd->bl, sd->menuskill_id,sd->menuskill_val2) ) ){
|
||||
clif_item_repaireffect(sd,idx,1);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( target_sd->inventory_data[idx]->type == IT_WEAPON)
|
||||
material = materials [itemdb_wlv(item->nameid)-1]; // Lv1/2/3/4 weapons consume 1 Iron Ore/Iron/Steel/Rough Oridecon
|
||||
if ( target_sd->inventory_data[idx]->type == IT_WEAPON )
|
||||
material = materials [ target_sd->inventory_data[idx]->wlv - 1 ]; // Lv1/2/3/4 weapons consume 1 Iron Ore/Iron/Steel/Rough Oridecon
|
||||
else
|
||||
material = materials [2]; // Armors consume 1 Steel
|
||||
if (pc_search_inventory(sd,material) < 0 ) {
|
||||
if ( pc_search_inventory(sd,material) < 0 ) {
|
||||
clif_skill_fail(sd,sd->menuskill_id,USESKILL_FAIL_LEVEL,0);
|
||||
return;
|
||||
}
|
||||
|
||||
clif_skill_nodamage(&sd->bl,&target_sd->bl,sd->menuskill_id,1,1);
|
||||
item->attribute=0;
|
||||
|
||||
item->attribute = 0;/* clear broken state */
|
||||
|
||||
clif_equiplist(target_sd);
|
||||
|
||||
pc_delitem(sd,pc_search_inventory(sd,material),1,0,0,LOG_TYPE_CONSUME);
|
||||
|
||||
clif_item_repaireffect(sd,idx,0);
|
||||
if(sd!=target_sd)
|
||||
|
||||
if( sd != target_sd )
|
||||
clif_item_repaireffect(target_sd,idx,0);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user