-Fix bugreport:8637 itemcombo bug with card
-Fix weird check reported by cppcheck (Redundant condition at status_readdb_attrfix)
This commit is contained in:
parent
462b2bebdb
commit
f90fea2f86
56
src/map/pc.c
56
src/map/pc.c
@ -8847,7 +8847,11 @@ static int pc_checkcombo(struct map_session_data *sd, struct item_data *data) {
|
|||||||
uint16 i;
|
uint16 i;
|
||||||
int success = 0;
|
int success = 0;
|
||||||
for( i = 0; i < data->combos_count; i++ ) {
|
for( i = 0; i < data->combos_count; i++ ) {
|
||||||
short *combo_idx = NULL, idx, j;
|
struct itemchk {
|
||||||
|
int idx;
|
||||||
|
short card[MAX_SLOTS];
|
||||||
|
} *combo_idx;
|
||||||
|
int idx, j;
|
||||||
int nb_itemCombo;
|
int nb_itemCombo;
|
||||||
/* ensure this isn't a duplicate combo */
|
/* ensure this isn't a duplicate combo */
|
||||||
if( sd->combos.bonus != NULL ) {
|
if( sd->combos.bonus != NULL ) {
|
||||||
@ -8861,15 +8865,17 @@ static int pc_checkcombo(struct map_session_data *sd, struct item_data *data) {
|
|||||||
nb_itemCombo = data->combos[i]->count;
|
nb_itemCombo = data->combos[i]->count;
|
||||||
if(nb_itemCombo<2) //a combo with less then 2 item ?? how that possible
|
if(nb_itemCombo<2) //a combo with less then 2 item ?? how that possible
|
||||||
continue;
|
continue;
|
||||||
CREATE(combo_idx,short,nb_itemCombo);
|
CREATE(combo_idx,struct itemchk,nb_itemCombo);
|
||||||
memset(combo_idx,-1,nb_itemCombo * sizeof(short));
|
for(j=0; j < nb_itemCombo; j++){
|
||||||
|
combo_idx[j].idx=-1;
|
||||||
|
memset(combo_idx[j].card,-1,MAX_SLOTS);
|
||||||
|
}
|
||||||
|
|
||||||
for( j = 0; j < nb_itemCombo; j++ ) {
|
for( j = 0; j < nb_itemCombo; j++ ) {
|
||||||
uint16 id = data->combos[i]->nameid[j], k;
|
uint16 id = data->combos[i]->nameid[j], k;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
for( k = 0; k < EQI_MAX; k++ ) {
|
for( k = 0; k < EQI_MAX; k++ ) {
|
||||||
bool do_continue = false; //used to continue that specific loop with some check that also use some loop
|
|
||||||
int8 index;
|
int8 index;
|
||||||
index = sd->equip_index[k];
|
index = sd->equip_index[k];
|
||||||
if( index < 0 )
|
if( index < 0 )
|
||||||
@ -8878,34 +8884,50 @@ static int pc_checkcombo(struct map_session_data *sd, struct item_data *data) {
|
|||||||
continue;
|
continue;
|
||||||
if (!sd->inventory_data[index] )
|
if (!sd->inventory_data[index] )
|
||||||
continue;
|
continue;
|
||||||
if( j > 0 ) {
|
|
||||||
uint8 z;
|
|
||||||
for (z = 0; z < nb_itemCombo; z++)
|
|
||||||
if(combo_idx[z] == index) //we already have that index recorded
|
|
||||||
do_continue=true;
|
|
||||||
if(do_continue)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( itemdb_type(id) != IT_CARD ) {
|
if ( itemdb_type(id) != IT_CARD ) {
|
||||||
if ( sd->inventory_data[index]->nameid != id )
|
if ( sd->inventory_data[index]->nameid != id )
|
||||||
continue;
|
continue;
|
||||||
combo_idx[j] = index;
|
if(j>0){ //check if this item not already used
|
||||||
|
bool do_continue = false; //used to continue that specific loop with some check that also use some loop
|
||||||
|
uint8 z;
|
||||||
|
for (z = 0; z < nb_itemCombo-1; z++)
|
||||||
|
if(combo_idx[z].idx == index) //we already have that index recorded
|
||||||
|
do_continue=true;
|
||||||
|
if(do_continue)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
combo_idx[j].idx = index;
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
} else { //Cards
|
} else { //Cards
|
||||||
//uint16 z;
|
uint16 z;
|
||||||
if ( sd->inventory_data[index]->slot == 0 || itemdb_isspecial(sd->status.inventory[index].card[0]) )
|
if ( sd->inventory_data[index]->slot == 0 || itemdb_isspecial(sd->status.inventory[index].card[0]) )
|
||||||
continue;
|
continue;
|
||||||
/* WIP this will break some combo currently
|
|
||||||
for (z = 0; z < sd->inventory_data[index]->slot; z++) {
|
for (z = 0; z < sd->inventory_data[index]->slot; z++) {
|
||||||
|
bool do_continue=false;
|
||||||
if (sd->status.inventory[index].card[z] != id)
|
if (sd->status.inventory[index].card[z] != id)
|
||||||
continue;
|
continue;
|
||||||
combo_idx[j] = index;
|
if(j>0){
|
||||||
|
int c1, c2;
|
||||||
|
for (c1 = 0; c1 < nb_itemCombo-1; c1++){
|
||||||
|
if(combo_idx[c1].idx == index){
|
||||||
|
for (c2 = 0; c2 < sd->inventory_data[index]->slot; c2++){
|
||||||
|
if(combo_idx[c1].card[c2] == id){ //we already have that card recorded (at this same idx)
|
||||||
|
do_continue = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(do_continue)
|
||||||
|
continue;
|
||||||
|
combo_idx[j].idx = index;
|
||||||
|
combo_idx[j].card[z] = id;
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( !found )
|
if( !found )
|
||||||
|
@ -12745,7 +12745,7 @@ static bool status_readdb_attrfix(const char *basedir,bool silent)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
for(j=0,p=line;j<n && j<ELE_ALL && p;j++) {
|
for(j=0,p=line;j<n && j<ELE_ALL && p;j++) {
|
||||||
while(*p==32 && *p>0)
|
while(*p>0 && *p==32) //skipping newline and space (32=' ')
|
||||||
p++;
|
p++;
|
||||||
attr_fix_table[lv-1][i][j]=atoi(p);
|
attr_fix_table[lv-1][i][j]=atoi(p);
|
||||||
if(battle_config.attr_recover == 0 && attr_fix_table[lv-1][i][j] < 0)
|
if(battle_config.attr_recover == 0 && attr_fix_table[lv-1][i][j] < 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user