Ejemplo n.º 1
0
int GetMatchCombineAgatha(STRUCT_ITEM *Item)
{
	for(int i = 0; i < MAX_COMBINE; i++)
	{
		if(Item[i].sIndex == 747)
			return 0;
	}

	if (Item[0].sIndex <= 0 || Item[0].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[1].sIndex <= 0 || Item[1].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[2].sIndex <= 0 || Item[2].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[3].sIndex <= 0 || Item[3].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[4].sIndex <= 0 || Item[4].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[5].sIndex <= 0 || Item[5].sIndex >= MAX_ITEMLIST)
		return 0;

	if (BASE_GetItemAbility(&Item[0], EF_MOBTYPE) != ARCH)
		return 0;

	if (BASE_GetItemAbility(&Item[1], EF_ITEMTYPE) != MORTAL && BASE_GetItemAbility(&Item[1], EF_ITEMTYPE) != 0)
		return 0;

	if (BASE_GetItemAbility(&Item[1], EF_ITEMLEVEL) < 4)
		return 0;

	if (g_pItemList[Item[0].sIndex].nPos != g_pItemList[Item[1].sIndex].nPos)
		return 0;

	if (BASE_GetItemSanc(&Item[0]) < 9)
		return 0;

	if (BASE_GetItemSanc(&Item[1]) < 9)
		return 0;

	if (Item[2].sIndex != 3140 || Item[3].sIndex != 3140 || Item[4].sIndex != 3140 || Item[5].sIndex != 3140)
		return 0;

	return g_pAgathaBase + (g_pItemList[Item[1].sIndex].Grade * 5) + (BASE_GetItemAbility(&Item[1], EF_ITEMLEVEL) == 5 ? 30 : 1);
}
Ejemplo n.º 2
0
int GetMatchCombineTiny(STRUCT_ITEM *Item)
{
	for(int i = 0; i < MAX_COMBINE; i++)
	{
		if(Item[i].sIndex == 747)
			return 0;
	}

	if (Item[0].sIndex <= 0 || Item[0].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[1].sIndex <= 0 || Item[1].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[2].sIndex <= 0 || Item[2].sIndex >= MAX_ITEMLIST)
		return 0;

	if (BASE_GetItemAbility(&Item[0], EF_MOBTYPE) != ARCH)
		return 0;

	if (g_pItemList[Item[0].sIndex].Grade < 5 || g_pItemList[Item[0].sIndex].Grade > 8)
		return 0;

	if (BASE_GetItemAbility(&Item[1], EF_ITEMTYPE) != 4 || BASE_GetItemAbility(&Item[1], EF_ITEMTYPE) != 5)
		return 0;

	if (g_pItemList[Item[1].sIndex].Grade < 5 || g_pItemList[Item[1].sIndex].Grade > 8)
		return 0;

	if (BASE_GetItemAbility(&Item[2], EF_ITEMTYPE) != 4 || BASE_GetItemAbility(&Item[2], EF_ITEMTYPE) != 5)
		return 0;

	if (g_pItemList[Item[0].sIndex].nPos != g_pItemList[Item[1].sIndex].nPos)
		return 0;

	if(g_pItemList[Item[0].sIndex].nPos != 64 && g_pItemList[Item[0].sIndex].nPos != 192)
		return 0;

	if (BASE_GetItemSanc(&Item[0]) < 9)
		return 0;

	if (BASE_GetItemSanc(&Item[1]) < 9)
		return 0;

	if (BASE_GetItemSanc(&Item[2]) < 9)
		return 0;

	return g_pTinyBase + (BASE_GetItemAbility(&Item[1], EF_ITEMLEVEL) * 5);
}
Ejemplo n.º 3
0
int GetMatchCombineEhre(STRUCT_ITEM *Item)
{
	int rate = 0;

	for(int i = 0; i < MAX_COMBINE; i++)
	{
		if(Item[i].sIndex == 747)
			return 0;
	}

	if (Item[0].sIndex < 0 || Item[0].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[1].sIndex < 0 || Item[1].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[2].sIndex < 0 || Item[2].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[3].sIndex < 0 || Item[3].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[4].sIndex < 0 || Item[4].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[5].sIndex < 0 || Item[5].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[6].sIndex < 0 || Item[6].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[7].sIndex < 0 || Item[7].sIndex >= MAX_ITEMLIST)
		return 0;
	
	if (Item[0].sIndex == 697 && Item[1].sIndex == 697 && BASE_GetItemSanc(&Item[2]) >= 9 && Item[2].sIndex != 3338)
		rate = 1;//Pacote Oriharucon

	else if (Item[0].sIndex >= 5110 && Item[0].sIndex <= 5133 && Item[1].sIndex >= 5110 && Item[1].sIndex <= 5133 && Item[2].sIndex == 413 && BASE_GetItemAmount(&Item[2]) >= 10)
		rate = 2;//Pedra Misteriosa

	else if (Item[0].sIndex >= 661 && Item[0].sIndex <= 663 && Item[1].sIndex >= 661 && Item[1].sIndex <= 663 && Item[2].sIndex == 633 && BASE_GetItemSanc(&Item[2]) >= 9)
		rate = 3;//Pedra espiritual

	else if (Item[0].sIndex >= 661 && Item[0].sIndex <= 663 && Item[1].sIndex >= 661 && Item[1].sIndex <= 663 && Item[2].sIndex == 3464 && BASE_GetItemSanc(&Item[2]) >= 9)
		rate = 4;//Pedra Amunrá

	else if (Item[0].sIndex == 697 && Item[1].sIndex == 697 && Item[2].sIndex == 3338 && BASE_GetItemSanc(&Item[2]) <= 8)
		rate = 5;//Refinação abençoada Purificada

	else if (Item[0].sIndex >= 2360 && Item[0].sIndex <= 2389 && Item[1].sIndex >= 4190 && Item[1].sIndex <= 4199)
		rate = 6;//Traje montaria

	else if (Item[0].sIndex >= 2360 && Item[0].sIndex <= 2389 && Item[1].sIndex == 4899)
		rate = 7;//Restaurar Traje montaria

	else if (Item[0].sIndex >= 2441 && Item[0].sIndex <= 2444 && Item[1].sIndex >= 2441 && Item[1].sIndex <= 2444 && Item[2].sIndex >= 2441 && Item[2].sIndex <= 2444)
		rate = 8;//Soul

	return rate;
}
Ejemplo n.º 4
0
int GetMatchCombineShany(STRUCT_ITEM *Item)
{
	for (int i = 0; i < MAX_COMBINE; i++)
	{
		if (Item[i].sIndex == 747)
			return 0;
	}

	if (Item[0].sIndex <= 0 || Item[0].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[1].sIndex <= 0 || Item[1].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[2].sIndex <= 0 || Item[2].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[3].sIndex <= 0 || Item[3].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[4].sIndex <= 0 || Item[4].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[5].sIndex <= 0 || Item[5].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[6].sIndex <= 0 || Item[6].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[0].sIndex != 540 && Item[0].sIndex != 541 || BASE_GetItemSanc(&Item[0]) < 9)
		return 0;

	if (Item[1].sIndex != 540 && Item[1].sIndex != 541 || BASE_GetItemSanc(&Item[1]) < 9)
		return 0;

	if (Item[2].sIndex != 540 && Item[2].sIndex != 541 && Item[2].sIndex != 633)
		return 0;

	if (Item[3].sIndex != 413 || Item[4].sIndex != 413 || Item[5].sIndex != 413 || Item[6].sIndex != 413)
		return 0;

	return 1;
}
Ejemplo n.º 5
0
int GetMatchCombineAlquimia(STRUCT_ITEM *Item)
{
	for(int i = 0; i < MAX_COMBINE; i++)
	{
		if(Item[i].sIndex == 747)
			return 0;
	}
	if (Item[0].sIndex < 0 || Item[0].sIndex >= MAX_ITEMLIST)
		return -1;

	if (Item[1].sIndex < 0 || Item[1].sIndex >= MAX_ITEMLIST)
		return -1;

	if (Item[2].sIndex < 0 || Item[2].sIndex >= MAX_ITEMLIST)
		return -1;

	if (Item[3].sIndex < 0 || Item[3].sIndex >= MAX_ITEMLIST)
		return -1;

	if (Item[4].sIndex < 0 || Item[4].sIndex >= MAX_ITEMLIST)
		return -1;

	if (Item[5].sIndex < 0 || Item[5].sIndex >= MAX_ITEMLIST)
		return -1;

	if (Item[6].sIndex < 0 || Item[6].sIndex >= MAX_ITEMLIST)
		return -1;

	if (Item[7].sIndex < 0 || Item[7].sIndex >= MAX_ITEMLIST)
		return -1;
	
	if(Item[0].sIndex == 413 && Item[1].sIndex == 2441 && Item[2].sIndex == 2442)
		return 0;//Sagacidade

	if(Item[0].sIndex == 413 && Item[1].sIndex == 2443 && Item[2].sIndex == 2442)
		return 1;//Resistencia

	if(Item[0].sIndex == 4127 && Item[1].sIndex == 4127 && Item[2].sIndex == 4127)
		return 2;//Revelação

	if(Item[0].sIndex == 4127 && Item[1].sIndex == 4127 && Item[2].sIndex == 697)
		return 3;//Recuperação

	if(Item[0].sIndex == 412 && Item[1].sIndex == 2441 && Item[2].sIndex == 2444)
		return 4;//Absorção

	if(Item[0].sIndex == 412 && Item[1].sIndex == 2444 && Item[2].sIndex == 2443)
		return 5;//Proteção

	if(Item[0].sIndex == 612 && BASE_GetItemSanc(&Item[0]) >= 9 && Item[1].sIndex == 2441 && Item[2].sIndex == 2442)
		return 6;//Poder

	if(Item[0].sIndex == 612 && Item[1].sIndex == 613 && Item[2].sIndex == 614 && Item[3].sIndex == 615)
		return 7;//Armazenagem

	if(Item[0].sIndex == 614 && BASE_GetItemSanc(&Item[0]) >= 9 && Item[1].sIndex == 2443 && Item[2].sIndex == 2444)
		return 8;//Precisão

	if(Item[0].sIndex == 615 && BASE_GetItemSanc(&Item[0]) >= 9 && Item[1].sIndex == 697 && Item[2].sIndex == 697 && Item[3].sIndex == 697)
		return 9;//Magia

	return -1;
}
Ejemplo n.º 6
0
int GetMatchCombineOdin(STRUCT_ITEM *Item)
{
	for(int i = 0; i < MAX_COMBINE; i++)
	{
		if(Item[i].sIndex == 747)
			return 0;
	}

	if (Item[0].sIndex < 0 || Item[0].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[1].sIndex < 0 || Item[1].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[2].sIndex < 0 || Item[2].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[3].sIndex < 0 || Item[3].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[4].sIndex < 0 || Item[4].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[5].sIndex < 0 || Item[5].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[6].sIndex < 0 || Item[6].sIndex >= MAX_ITEMLIST)
		return 0;

	if (Item[7].sIndex < 0 || Item[7].sIndex >= MAX_ITEMLIST)
		return 0;
	
	if (Item[0].sIndex == g_pItemList[Item[1].sIndex].Extra && BASE_GetItemSanc(&Item[0]) >= 9 && BASE_GetItemSanc(&Item[1]) == REF_15
		&& (Item[2].sIndex == 542 || Item[2].sIndex == 772) && Item[3].sIndex == 5334 && Item[4].sIndex == 5335 && Item[5].sIndex == 5336 && Item[6].sIndex == 5337)
		return 1;//Item celestial

	else if ((Item[0].sIndex == 413 && BASE_GetItemAmount(&Item[0]) >= 10 && Item[1].sIndex == 413 && BASE_GetItemAmount(&Item[1]) >= 10 || Item[0].sIndex == 4043 && Item[1].sIndex == 4043)
		&& BASE_GetItemSanc(&Item[2]) > REF_10 && BASE_GetItemSanc(&Item[2]) <= REF_15 && (Item[3].sIndex >= 5334 && Item[3].sIndex <= 5337 || Item[3].sIndex == 3338) && (Item[4].sIndex >= 5334 && Item[4].sIndex <= 5337 || Item[4].sIndex == 3338)
		&& (Item[5].sIndex >= 5334 && Item[5].sIndex <= 5337 || Item[5].sIndex == 3338) && (Item[6].sIndex >= 5334 && Item[6].sIndex <= 5337 || Item[6].sIndex == 3338) && (g_pItemList[Item[2].sIndex].nPos == 2 || g_pItemList[Item[2].sIndex].nPos == 4 || g_pItemList[Item[2].sIndex].nPos == 8 || g_pItemList[Item[2].sIndex].nPos == 16 || g_pItemList[Item[2].sIndex].nPos == 32 || g_pItemList[Item[2].sIndex].nPos == 64 || g_pItemList[Item[2].sIndex].nPos == 192 || g_pItemList[Item[2].sIndex].nPos == 128))
		return 2;//Ref+12+

	else if (Item[0].sIndex == 413 && Item[1].sIndex == 413 && Item[2].sIndex == 413 && Item[3].sIndex == 413 && Item[4].sIndex == 413 && Item[5].sIndex == 413 && Item[6].sIndex == 413)
		return 3;//Pista de runas

	else if (Item[0].sIndex == 4127 && Item[1].sIndex == 4127 && Item[2].sIndex == 5135 && Item[3].sIndex == 5113 && Item[4].sIndex == 5129 && Item[5].sIndex == 5112 && Item[6].sIndex == 5110)
		return 4;//Level40 Celestial

	else if (Item[0].sIndex == 5125 && Item[1].sIndex == 5115 && Item[2].sIndex == 5111 && Item[3].sIndex == 5112 && Item[4].sIndex == 5120 && Item[5].sIndex == 5128 && Item[6].sIndex == 5119)
		return 5;//Pedra da fúria

	else if (Item[0].sIndex == 5126 && Item[1].sIndex == 5127 && Item[2].sIndex == 5121 && Item[3].sIndex == 5114 && Item[4].sIndex == 5125 && Item[5].sIndex == 5111 && Item[6].sIndex == 5118)
		return 6;//Secreta da Agua

	else if (Item[0].sIndex == 5131 && Item[1].sIndex == 5113 && Item[2].sIndex == 5115 && Item[3].sIndex == 5116 && Item[4].sIndex == 5125 && Item[5].sIndex == 5112 && Item[6].sIndex == 5114)
		return 7;//Secreta da Terra

	else if (Item[0].sIndex == 5110 && Item[1].sIndex == 5124 && Item[2].sIndex == 5117 && Item[3].sIndex == 5129 && Item[4].sIndex == 5114 && Item[5].sIndex == 5125 && Item[6].sIndex == 5128)
		return 8;//Secreta do Sol

	else if (Item[0].sIndex == 5122 && Item[1].sIndex == 5119 && Item[2].sIndex == 5132 && Item[3].sIndex == 5120 && Item[4].sIndex == 5130 && Item[5].sIndex == 5133 && Item[6].sIndex == 5123)
		return 9;//Secreta do Vento

	else if (Item[0].sIndex == 421 && Item[1].sIndex == 422 && Item[2].sIndex == 423 && Item[3].sIndex == 424 && Item[4].sIndex == 425 && Item[5].sIndex == 426 && Item[6].sIndex == 427)
		return 10;//Semente de cristal
	
	else if (Item[0].sIndex == 4127 && Item[1].sIndex == 4127 && Item[2].sIndex == 5135 && Item[3].sIndex == 413 && Item[4].sIndex == 413 && Item[5].sIndex == 413 && Item[6].sIndex == 413)
		return 11;//Capa

	return 0;
}
Ejemplo n.º 7
0
int GetMatchCombine(STRUCT_ITEM *item)
{
	int target = item[0].sIndex;

	for(int i = 0; i < MAX_COMBINE; i++)
	{
		if(item[i].sIndex == 747)
			return 0;
	}

	if (target <= 0 || target >= MAX_ITEMLIST)
		return 0;

	int	stone = item[1].sIndex;

	if (stone <= 0 || stone >= MAX_ITEMLIST)
		return 0;

	if (g_pItemList[target].nUnique < 41 || g_pItemList[target].nUnique > 49)
		return 0;

	if (g_pItemList[target].Extra <= 0)
		return 0;

	if (BASE_GetItemAbility(&item[0], EF_MOBTYPE) == 3)
		return 0;

	int rate = 1;
	for (int j = 2; j < MAX_COMBINE; j++)
	{
		int idx = item[j].sIndex;

		if (idx <= 0 || idx >= MAX_ITEMLIST)
			continue;

		int eq = BASE_GetItemAbility(&item[j], EF_POS);

		if (eq == 0)
			return 0;

		int il1 = BASE_GetItemAbility(&item[0], EF_ITEMLEVEL);
		int il2 = (BASE_GetItemAbility(&item[j], EF_ITEMLEVEL));

		if(il1 > il2)
			return 0;

		int	sa = BASE_GetItemSanc(&item[j]);

		if (sa == 7)
		{
			rate = rate + g_pAnctChance[0];

			continue;
		}
		if (sa == 8)
		{
			rate = rate + g_pAnctChance[1];

			continue;
		}
		if (sa == 9)
		{
			rate = rate + g_pAnctChance[2];

			continue;
		}

		return 0;
	}

	return rate;
}
Ejemplo n.º 8
0
void Exec_MSG_CombineItemExtracao(int conn, char *pMsg)
{
	MSG_STANDARDPARM2 *m = (MSG_STANDARDPARM2*)pMsg;

	int ItemSlot = m->Parm2;

	if (ItemSlot < 0 || ItemSlot >= pMob[conn].MaxCarry)
		return;

	int item = pMob[conn].MOB.Carry[ItemSlot].sIndex;

	if(item <= 0 || item >= MAX_ITEMLIST)
		return;

	int itemlevel = BASE_GetItemAbility(&pMob[conn].MOB.Carry[ItemSlot], EF_ITEMLEVEL);

	if(itemlevel >= 5)
		return;

	if(BASE_GetItemSanc(&pMob[conn].MOB.Carry[ItemSlot]) < 9)
		return;

	if((g_pItemList[item].nPos != 2 && g_pItemList[item].nPos != 4 && g_pItemList[item].nPos != 8 && g_pItemList[item].nPos != 16 && g_pItemList[item].nPos != 32) || BASE_GetItemAbility(&pMob[conn].MOB.Carry[ItemSlot], EF_MOBTYPE) != 0)
		return;

	int i = 0;

	for (i = 0; i < pMob[conn].MaxCarry; i++)
	{
		if (pMob[conn].MOB.Carry[i].sIndex != 1774)
			continue;

		BASE_ClearItem(&pMob[conn].MOB.Carry[i]);
		SendItem(conn, ITEM_PLACE_CARRY, i, &pMob[conn].MOB.Carry[i]);
		break;
	}

	if (i == pMob[conn].MaxCarry)
		return;
		
	int _rnd = rand()%115;

	if(_rnd > 100)
		_rnd -= 15;

	int rate = (pMob[conn].MOB.CurrentScore.Special[2] + 1) / 6;

	if(_rnd < rate)
	{
		pMob[conn].MOB.Carry[ItemSlot].stEffect[0].cEffect = EF_ITEMLEVEL;
		pMob[conn].MOB.Carry[ItemSlot].stEffect[0].cValue = itemlevel;

		if(pMob[conn].MOB.Carry[ItemSlot].stEffect[1].cEffect == EF_DAMAGE)
			pMob[conn].MOB.Carry[ItemSlot].stEffect[1].cValue += BASE_GetStaticItemAbility(&pMob[conn].MOB.Carry[ItemSlot], EF_DAMAGE);

		if(pMob[conn].MOB.Carry[ItemSlot].stEffect[2].cEffect == EF_DAMAGE)
			pMob[conn].MOB.Carry[ItemSlot].stEffect[2].cValue += BASE_GetStaticItemAbility(&pMob[conn].MOB.Carry[ItemSlot], EF_DAMAGE);

		pMob[conn].MOB.Carry[ItemSlot].sIndex = 3021;

		if(g_pItemList[item].nPos == 4)
			pMob[conn].MOB.Carry[ItemSlot].sIndex++;

		else if(g_pItemList[item].nPos == 8)
			pMob[conn].MOB.Carry[ItemSlot].sIndex += 2;

		else if(g_pItemList[item].nPos == 16)
			pMob[conn].MOB.Carry[ItemSlot].sIndex += 3;

		else if(g_pItemList[item].nPos == 32)
			pMob[conn].MOB.Carry[ItemSlot].sIndex += 4;

		SendItem(conn, ITEM_PLACE_CARRY, ItemSlot, &pMob[conn].MOB.Carry[ItemSlot]);

		char tt[256];
		sprintf(temp, "%s ", pUser[conn].AccountName);
		BASE_GetItemCode(&pMob[conn].MOB.Carry[ItemSlot], tt);
		strcat(temp, tt);

		ItemLog(temp, "*** Combine ht_skill_extração sucess ***", pUser[conn].IP);
	}
	else
	{
		BASE_ClearItem(&pMob[conn].MOB.Carry[ItemSlot]);
		SendItem(conn, ITEM_PLACE_CARRY, ItemSlot, &pMob[conn].MOB.Carry[ItemSlot]);

		ItemLog("*** Combine ht_skill_extração fail ***", pMob[conn].MOB.MobName, pUser[conn].IP);
	}
}
Ejemplo n.º 9
0
void CMob::GetCurrentScore(int idx)
{
	if (idx < MAX_USER)
		pMob[idx].MOB.Clan = 0;

	if (idx < MAX_USER && MOB.BaseScore.Level < 2000)
	{
		MOB.Resist[0] = BASE_GetMobAbility(&MOB, EF_RESIST1) >= 100 ? 100 : BASE_GetMobAbility(&MOB, EF_RESIST1);
		MOB.Resist[1] = BASE_GetMobAbility(&MOB, EF_RESIST2) >= 100 ? 100 : BASE_GetMobAbility(&MOB, EF_RESIST2);
		MOB.Resist[2] = BASE_GetMobAbility(&MOB, EF_RESIST3) >= 100 ? 100 : BASE_GetMobAbility(&MOB, EF_RESIST3);
		MOB.Resist[3] = BASE_GetMobAbility(&MOB, EF_RESIST4) >= 100 ? 100 : BASE_GetMobAbility(&MOB, EF_RESIST4);

		if(MOB.Resist[0] >= 100)
			MOB.Resist[0] = 100;

		if(MOB.Resist[1] >= 100)
			MOB.Resist[1] = 100;

		if(MOB.Resist[2] >= 100)
			MOB.Resist[2] = 100;

		if(MOB.Resist[3] >= 100)
			MOB.Resist[3] = 100;

		MOB.Equip[0].stEffect[0].cEffect = 0;
		MOB.Equip[0].stEffect[0].cValue = 0;

		MOB.Rsv = 0;



	}
	else if (idx >= MAX_USER)
	{
		int geneidx = GenerateIndex;

		if (geneidx > 0 && geneidx < MAX_NPCGENERATOR)
		{
			MOB.Resist[0] = mNPCGen.pList[geneidx].Leader.Resist[0];
			MOB.Resist[1] = mNPCGen.pList[geneidx].Leader.Resist[1];
			MOB.Resist[2] = mNPCGen.pList[geneidx].Leader.Resist[2];
			MOB.Resist[3] = mNPCGen.pList[geneidx].Leader.Resist[3];

			if(MOB.Resist[0] > 100)
				MOB.Resist[0] = 50;

			if(MOB.Resist[1] > 100)
				MOB.Resist[1] = 50;

			if(MOB.Resist[2] > 100)
				MOB.Resist[2] = 50;

			if(MOB.Resist[3] > 100)
				MOB.Resist[3] = 50;
		}

		MOB.Rsv = 0;
	}

	Parry = BASE_GetMobAbility(&MOB, EF_PARRY);

	if (idx < MAX_USER)
	{
		pUser[idx].Range = BASE_GetMobAbility(&MOB, EF_RANGE);
		pUser[idx].Range = 23;
	}

	ExpBonus = 0;
	DropBonus = 0;
	ForceDamage = 0;
	ReflectDamage = 0;
	ForceMobDamage = 0;
	Accuracy = 0;
	HpAbs = 0;
	

	BASE_GetCurrentScore(MOB, Affect, &extra, &ExpBonus, &ForceMobDamage, idx >= MAX_USER ? 1 : 0, &Accuracy, &HpAbs, &ForceDamage);

	//Fada Verde 3D
	if(MOB.Equip[13].sIndex == 3900)
		ExpBonus += 16;

	//Fada Azul 3D
	if(MOB.Equip[13].sIndex == 3901)
		DropBonus += 32;

	//Fada Vermelha
	if(MOB.Equip[13].sIndex == 3902 || MOB.Equip[13].sIndex == 3905 || MOB.Equip[13].sIndex == 3908)
	{
		ExpBonus += 32;
		DropBonus += 16;
	}

	//Fada Verde
	if(MOB.Equip[13].sIndex == 3903 || MOB.Equip[13].sIndex == 3906 || MOB.Equip[13].sIndex == 3911 || MOB.Equip[13].sIndex == 3912 || MOB.Equip[13].sIndex == 3913)
		ExpBonus += 16;

	//Fada Verde Azul 
	if(MOB.Equip[13].sIndex == 3904 || MOB.Equip[13].sIndex == 3907)
		ExpBonus += 32;

	//Concentração
	if ((MOB.LearnedSkill & (1 << 28)) != 0)
		Accuracy += 50;

	if(MOB.Resist[0] < 0 && idx < MAX_USER)
		MOB.Resist[0] = 0;

	if(MOB.Resist[1] < 0 && idx < MAX_USER)
		MOB.Resist[1] = 0;

	if(MOB.Resist[2] < 0 && idx < MAX_USER)
		MOB.Resist[2] = 0;

	if(MOB.Resist[3] < 0 && idx < MAX_USER)
		MOB.Resist[3] = 0;

	if (MOB.CurrentScore.Hp > MOB.CurrentScore.MaxHp)
		MOB.CurrentScore.Hp = MOB.CurrentScore.MaxHp;

	if (MOB.CurrentScore.Mp > MOB.CurrentScore.MaxMp)
		MOB.CurrentScore.Mp = MOB.CurrentScore.MaxMp;

	int w1 = BASE_GetItemAbility(&MOB.Equip[6], EF_DAMAGE);
	int w2 = BASE_GetItemAbility(&MOB.Equip[7], EF_DAMAGE);

	int fw1 = (w1 / 2);
	int fw2 = (w2 / 2);

	//Pericia do caçador
	if(MOB.LearnedSkill & (1 << 10) && MOB.Class == 3)
	{
		fw1 = w1;
		fw2 = w2;
	}

	//Mestre das Armas
	if(MOB.LearnedSkill & (1 << 9) && MOB.Class == 0)
	{
		fw1 = w1;
		fw2 = w2;
	}

	if(MOB.Class == 2)
	{
		if(MOB.LearnedSkill & (1 << 17))
			ReflectDamage += ((MOB.CurrentScore.Special[3] + 1) / 6);

		//Escudo do tormento
		if(MOB.LearnedSkill & (1 << 19) && g_pItemList[MOB.Equip[7].sIndex].nPos == 128)
			MOB.CurrentScore.Ac += (BASE_GetItemAbility(&MOB.Equip[7], EF_AC) + 1) / 7;
	}

	if (w1 >= w2)
		WeaponDamage = w1 + fw2;
	else
		WeaponDamage = w2 + fw1;



	int idx1 = MOB.Equip[6].sIndex;
	int nPos = g_pItemList[idx1].nPos;

	if (idx1 >= 0 || idx1 < MAX_ITEMLIST)
	{
		if (nPos == 64 || nPos == 192)
		{
			int isanc = BASE_GetItemSanc(&MOB.Equip[6]);

			if (isanc >= 9)
				WeaponDamage += 40;
		}
	}

	int idx2 = MOB.Equip[7].sIndex;
	int nPos2 = g_pItemList[idx2].nPos;

	if (idx2 >= 0 || idx2 < MAX_ITEMLIST)
	{
		if (nPos2 == 64 || nPos2 == 192)
		{
			int isanc = BASE_GetItemSanc(&MOB.Equip[7]);

			if (isanc >= 9)
				WeaponDamage += 40;
		}
	}

	for (int i = 0; i < 16; i++)
	{
		int ItemId = MOB.Equip[i].sIndex;
		int itemGem = BASE_GetItemGem(&MOB.Equip[i]);
		int itemSanc = BASE_GetItemSanc(&MOB.Equip[i]);


		if (ItemId <= 0 || ItemId > MAX_ITEMLIST)
			continue;

		if (g_pItemList[ItemId].Grade == 5)
			DropBonus += 8;

		if (g_pItemList[ItemId].Grade == 6)
			ForceDamage += i == 20;

		if (g_pItemList[ItemId].Grade == 7)
			ExpBonus += 2;

		if (g_pItemList[ItemId].Grade == 8)
			ReflectDamage += 20;

		int isanc = 0;

		if(itemSanc == REF_10)
			isanc = 1;

		else if(itemSanc == REF_11)
			isanc = 2;

		else if(itemSanc == REF_12)
			isanc = 3;

		else if(itemSanc == REF_13)
			isanc = 4;

		else if(itemSanc == REF_14)
			isanc = 5;

		else if(itemSanc == REF_15)
			isanc = 6;

		if(itemGem == 0)
			DropBonus += 8;

		if(itemGem == 1)
			ForceDamage += (g_pItemList[ItemId].Grade == 6 ? 80 : 40) * isanc;

		if(itemGem == 2)
			ExpBonus += 2;

		if(itemGem == 3)
			ReflectDamage += (g_pItemList[ItemId].Grade == 8 ? 80 : 40) * isanc;
	}
	
	PvPDamage = 0;
	ReflectPvP = 0;

	int AtaquePvP = BASE_GetMobAbility(&MOB, EF_HWORDGUILD);

	AtaquePvP = (AtaquePvP + 1) / 10;

	PvPDamage = AtaquePvP;

	int DefesaPvP = BASE_GetMobAbility(&MOB, EF_LWORDGUILD);

	DefesaPvP = (DefesaPvP + 1) / 10;

	ReflectPvP = DefesaPvP;
}