void ProcessGoldenDragon(int conn, int npcId, int future)
{
int ret = FALSE;
if (pMob[conn].MOB.Equip[PET].Index == 4060) //Immaturity_Angel
{
int itemSanc = BASE_GetItemSanc(&pMob[conn].MOB.Equip[PET]);
int sanc9plus = TRUE;
if (itemSanc < 9)
sanc9plus = FALSE;
if (pMob[conn].Affect[MAX_AFFECT - 1].Type)
sanc9plus = FALSE;
if (pMob[conn].CheckEvolution() != ARCH)
{
sanc9plus = FALSE;
SendClientMessage(conn, FALSE, _NN_Need_Trans);
}
if (sanc9plus)
{
STRUCT_ITEM item{};
item.Index = 5338; //Ideal
item.EF1 = EF_NOTRADE;
item.EFV1 = EF_NOTRADE;
ret = SendPutItemInvCarry(conn, 0, &item);
}
//004F893D
if (ret)
{
memset(&pMob[conn].MOB.Equip[PET], 0, sizeof STRUCT_ITEM);
SendItem(conn, EQUIP_TYPE, PET, &pMob[conn].MOB.Equip[PET]);
pMob[conn].Affect[MAX_AFFECT - 1].Type = 49;
pMob[conn].Affect[MAX_AFFECT - 1].Level = 0;
pMob[conn].Affect[MAX_AFFECT - 1].Time += 75600;
pMob[conn].GetCurrentScore(conn);
SendAffect(conn);
SendClientMessage(conn, FALSE, _NN_Congratulations);
}
return;
}
//004F8A06
if(CombineTreasureMap(conn))
return;
for (int i = 0; i < MAX_VISIBLE_INVENTORY; i++)
{
if (pMob[conn].MOB.Inventory[i].Index <= 0)
continue;
for (int j = 0; j < MAX_TREASURE; j++)
{
if (g_pTreasure[j].Source <= 0)
continue;
if (pMob[conn].MOB.Inventory[i].Index != g_pTreasure[j].Source)
continue;
//004F8ACF
char tmpBuffer[128]{};
sprintf_s(temp, "tra,_gold_ 0");
BASE_GetItemCode(&pMob[conn].MOB.Inventory[i], tmpBuffer);
strcat(temp, tmpBuffer);
Log(temp, pUser[conn].AccountName, pUser[conn].IP);
memset(&pMob[conn].MOB.Inventory[i], 0, sizeof STRUCT_ITEM);
SendItem(conn, INVEN_TYPE, i, &pMob[conn].MOB.Inventory[i]);
int sortItem = rand() % 1000;
STRUCT_ITEM item{};
if (sortItem < g_pTreasure[j].Rate[0])
memcpy(&item, &g_pTreasure[j].Target[0], sizeof STRUCT_ITEM);
else if (sortItem < g_pTreasure[j].Rate[1])
memcpy(&item, &g_pTreasure[j].Target[1], sizeof STRUCT_ITEM);
else if (sortItem < g_pTreasure[j].Rate[2])
memcpy(&item, &g_pTreasure[j].Target[2], sizeof STRUCT_ITEM);
else if (sortItem < g_pTreasure[j].Rate[3])
memcpy(&item, &g_pTreasure[j].Target[3], sizeof STRUCT_ITEM);
else if (sortItem < g_pTreasure[j].Rate[4])
memcpy(&item, &g_pTreasure[j].Target[4], sizeof STRUCT_ITEM);
if (!item.Index)
{
SendClientMessage(npcId, TRUE, _NN_Next_Chance);
return;
}
sprintf_s(temp, "tra,%s 0", pUser[conn].AccountName);
BASE_GetItemCode(&item, tmpBuffer);
strcat(temp, tmpBuffer);
Log(temp, "_gold_", pUser[conn].IP);
if (PutItem(conn, &item))
{
SendClientMessage(npcId, TRUE, _NN_Congratulations);
return;
}
}
}
//004F8DCF
int crystal[7]{};
int crystalCount = 0;
for (int i = 0; i < MAX_VISIBLE_INVENTORY; i++)
{
if (pMob[conn].MOB.Inventory[i].Index < 421 || pMob[conn].MOB.Inventory[i].Index > 427)
continue;
crystal[pMob[conn].MOB.Inventory[i].Index - 421] = 1;
crystalCount++;
}
//004F8E78
if (!crystal[0] || !crystal[1] || !crystal[2] || !crystal[3] || !crystal[4] || !crystal[5] || !crystal[6])
{
SendClientMessage(npcId, TRUE, _NN_Gather_7_Clistals);
return;
}
if(!pMob[conn].MOB.Inventory[WEAPON].Index)
{
SendClientMessage(npcId, TRUE, _NN_Equip_Weapon_To_Enchant);
return;
}
if (pMob[conn].MOB.Inventory[WEAPON].Index >= 3000 && pMob[conn].MOB.Inventory[WEAPON].Index < 3200)
{
SendClientMessage(npcId, TRUE, _NN_Equip_Weapon_To_Enchant);
return;
}
int weaponMobType = BASE_GetItemAbility(&pMob[conn].MOB.Inventory[WEAPON], EF_MOBTYPE);
if (weaponMobType == ARCH || weaponMobType == CELESTIAL)
{
SendClientMessage(npcId, TRUE, _NN_NOT_TRANS3ITEM);
return;
}
SendEmotion(conn, 23, 0);
STRUCT_ITEM weapon = pMob[conn].MOB.Inventory[WEAPON];
STRUCT_ITEM tmpWeapon = weapon;
int calcItemLvl = (crystalCount / 10) * 25;
int itemReqLvl = g_pItemList[weapon.Index].ReqLvl;
weapon.EF1 = 0;
weapon.EFV1 = 0;
weapon.EF2 = 0;
weapon.EFV2 = 0;
weapon.EF3 = 0;
weapon.EFV3 = 0;
SetItemBonus(&weapon, calcItemLvl + itemReqLvl, TRUE, 1104, FALSE);
for (int i = 0; i < MAX_VISIBLE_INVENTORY; i++)
{
if (pMob[conn].MOB.Inventory[i].Index < 421 || pMob[conn].MOB.Inventory[i].Index > 427)
continue;
pMob[conn].MOB.Inventory[i].Index = 0;
memset(&pMob[conn].MOB.Inventory[i], 0, sizeof STRUCT_ITEM);
}
SendCarry(conn);
SendItem(conn, EQUIP_TYPE, WEAPON, &weapon);
SendClientMessage(npcId, TRUE, _SN_Now_I_Will_Enchant_Your, pMob[conn].MOB.MobName);
SetTick(conn, 44, 200, 200);
SendScore(conn);
sprintf_s(temp, "etc,crystal %d-%d from %d:%d %d:%d %d:%d to %d:%d %d:%d %d:%d", crystalCount, tmpWeapon.Index,
tmpWeapon.EF1, tmpWeapon.EFV1, tmpWeapon.EF2, tmpWeapon.EFV2, tmpWeapon.EF3, tmpWeapon.EFV3,
weapon.EF1, weapon.EFV1, weapon.EF2, weapon.EFV2, weapon.EF3, weapon.EFV3);
Log(temp, pUser[conn].AccountName, pUser[conn].IP);
}