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); }
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); }
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; }
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; }
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; }
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; }
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; }
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); } }
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; }