C'est un peu sale tout ça...
Y'a moyen d'améliorer ce méli-mélo ^^. Trois possibilités :
BOOL CInstanceBase::IsBoss()
{
switch(GetRace())
case 691:
case 692:
case 693:
case 791:
case 991:
case 992:
case 993:
case 1091:
case 1092:
case 1093:
case 1094:
case 1095:
case 2191:
case 1191:
case 1192:
case 1304:
case 1306:
case 1307:
case 1901:
case 1902:
case 1903:
case 2206:
case 2207:
case 2291:
case 2306:
case 2307:
case 2492:
case 2493:
case 2494:
case 2598:
case 3090:
case 3091:
case 3190:
case 3191:
case 3290:
case 3291:
case 3390:
case 3391:
case 3490:
case 3491:
case 3590:
case 3591:
case 3690:
case 3691:
case 3790:
case 3791:
case 3890:
case 3891:
case 5001:
case 5004:
case 5002:
case 5161:
case 5162:
case 5163:
case 6091:
case 6191:
return TRUE;
break; // Si on ne break pas, il passe au case suivant
default:
return FALSE;
break;
}
La manière plus propre, mais toujours un peu sale, ou alors une manière plus propre de faire la même chose:
BOOL CInstanceBase::IsBoss()
{
const char maxElems = 56;
int iVnums[maxElems] = { 691, 692, 693, 791, 991, 992, 993, 1091,
1092, 1093, 1094, 1095, 2191, 1191, 1192, 1304, 1306,
1307, 1901, 1902, 1903, 2206, 2207, 2291, 2306, 2307,
2492, 2493, 2494, 2598, 3090, 3091, 3190, 3191, 3290,
3291, 3390, 3391, 3490, 3491, 3590, 3591, 3690, 3691,
3790, 3791, 3890, 3891, 5001, 5004, 5002, 5161, 5162,
5163, 6091, 6191 };
for (int i=0; i < maxElems; i++)
{
if (GetRace() == i)
return TRUE;
}
return FALSE;
}
Le problème de Metin2 c'est qu'ils sont bêtes au point d'avoir oublié de différencier les vrais boss avec de simples pierres Metin ou monstres nommés.
C'est con, mais c'est pas irréalisable, je m'y étais penché un peu plus dessus... En gros l'idée c'est qu'un boss c'est un rank supérieur ou égal à 4, et qui n'est pas une pierre metin.
Dans l'idéal et en troisième option, pour faire un truc vraiment plus propre il faudrait faire un truc du style:
BOOL CInstanceBase::IsBoss()
{
const CPythonNonPlayer::TMobTable *pkTab = CPythonNonPlayer::Instance().GetTable(GetRace());
if (pkTab->bRank >= 4 && pkTab->bType == 0 && !IsStone())
return TRUE;
return FALSE;
}
C'est beaucoup plus agréable à lire et plus simple d'utilisation ;).
La condition c'est que le Type soit égal à 0 (NPC de type mob), que son rank soit supérieur ou égal à S_KNIGHT ( = 4 comme le chef orc, et 5 comme le Dragon Rouge, de rank KING), et que le mob en question ne soit pas une pierre Metin (car leur rank est égal à 5 !)
Des bisous