Issue information

Issue ID
#384
Status
Fixed
Severity
Low
Started
Hercules Elf Bot
Nov 7, 2007 21:43
Last Post
Hercules Elf Bot
Nov 7, 2007 21:43
Confirmation
N/A

Hercules Elf Bot - Nov 7, 2007 21:43

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