Originally posted by [b]theultramage[/b]
http://www.eathena.ws/board/index.php?autocom=bugtracker&showbug=384
CODE
enum weapon_type {
W_FIST, //Bare hands
W_DAGGER, //1
...
W_HUUMA, //22
MAX_WEAPON_TYPE
};
CODE
int pc_calcweapontype(struct map_session_data *sd)
{
...
else if(sd->weapontype1 == W_DAGGER && sd->weapontype2 == W_DAGGER)
sd->status.weapon = MAX_WEAPON_TYPE+1;
else if(sd->weapontype1 == W_1HSWORD && sd->weapontype2 == W_1HSWORD)
sd->status.weapon = MAX_WEAPON_TYPE+2;
else if(sd->weapontype1 == W_1HAXE && sd->weapontype2 == W_1HAXE)
sd->status.weapon = MAX_WEAPON_TYPE+3;
else if( (sd->weapontype1 == W_DAGGER && sd->weapontype2 == W_1HSWORD) ||
(sd->weapontype1 == W_1HSWORD && sd->weapontype2 == W_DAGGER) )
sd->status.weapon = MAX_WEAPON_TYPE+4;
else if( (sd->weapontype1 == W_DAGGER && sd->weapontype2 == W_1HAXE) ||
(sd->weapontype1 == W_1HAXE && sd->weapontype2 == W_DAGGER) )
sd->status.weapon = MAX_WEAPON_TYPE+5;
else if( (sd->weapontype1 == W_1HSWORD && sd->weapontype2 == W_1HAXE) ||
(sd->weapontype1 == W_1HAXE && sd->weapontype2 == W_1HSWORD) )
sd->status.weapon = MAX_WEAPON_TYPE+6;
...
}
eAthena uses this crazy hack to identify dual-wielded weapon combinations O_O
jAthena uses these enum entries instead:
CODE
W_DOUBLE_DD = 23, // 短剣+短剣
W_DOUBLE_SS, // 片手剣+片手剣
W_DOUBLE_AA, // 片手斧+片手斧
W_DOUBLE_DS, // 短剣+片手剣
W_DOUBLE_DA, // 短剣+片手斧
W_DOUBLE_SA, // 片手剣+片手斧
The revisions to blame are:
r5527 and
r5912.
I suggest adding proper dualwield weapon defines, and to rename MAX_WEAPON_TYPE to MAX_1H_WEAPON_TYPE (I guess...).
The max define is sort of convenient in single/dual checks. Not sure whether to give it a separate value, or merge 2 enum values together (make it equal to W_DOUBLE_DD).
This post has been edited by theultramage: Nov 7 2007, 01:45 PM