ACMD(do_change_pet)
{
if (quest::CQuestManager::instance().GetEventFlag("pet_kapat") == 1)
{
ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("PET_SYSTEM_DISABLED"));
return;
}
char arg1[256], arg2[256], arg3[256], arg4[256];
four_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2), arg3, sizeof(arg3), arg4, sizeof(arg4));
if (!*arg1 || !*arg2 || !*arg3 || !*arg4)
return;
int firstInvenType = atoi(arg1);
int firstInvenPos = atoi(arg2);
int secondInvenType = atoi(arg3);
int secondInvenPos = atoi(arg4);
if (firstInvenType < 0)
return;
if (secondInvenType <0)
return;
if (firstInvenType == INVENTORY)
{
if (firstInvenPos >= INVENTORY_MAX_NUM)
return;
}
else
{
if (firstInvenPos >= 225)
return;
}
if (secondInvenType == INVENTORY)
{
if (secondInvenPos >= INVENTORY_MAX_NUM)
return;
}
else
{
if (secondInvenPos >= 225)
return;
}
LPITEM petItem = ch->GetItem(TItemPos(firstInvenType, firstInvenPos));
LPITEM secondItem = ch->GetItem(TItemPos(secondInvenType, secondInvenPos));
if (!petItem)
return;
if (!secondItem)
return;
if (secondItem->GetVnum() != 55033)
return;
int m_dwbonuspet[3][2];
for (int x = 0; x < 3; ++x) //Inizializzazione bonus del pet
{
int btype[3] = { 1, 54, 53 };
m_dwbonuspet[x][0] = btype[x];
m_dwbonuspet[x][1] = 0;
}
int newpettype = number(0, 7);
int level = petItem->GetSocket(1);
int age = petItem->GetSocket(3);
int tmpage = (time(0) + age) / 86400;
if (newpettype == 0)
{
m_dwbonuspet[0][1] = number(1, 30);
m_dwbonuspet[1][1] = number(1, 30);
m_dwbonuspet[2][1] = number(1, 30);;
for (int i = 0; i < level; ++i)
{
int lvbonus = 0;
if (level >= 60)
lvbonus = 1;
if (i % 6 == 0)
{
m_dwbonuspet[0][1] += number(1 + lvbonus, 5 + lvbonus);
m_dwbonuspet[2][1] += number(1 + lvbonus, 5 + lvbonus);
}
if (i % 8 == 0)
{
m_dwbonuspet[1][1] += number(1 + lvbonus, 5 + lvbonus);
}
}
}
else if (newpettype == 1) // sabit
{
m_dwbonuspet[0][1] = number(1, 30);
m_dwbonuspet[1][1] = number(1, 30);
m_dwbonuspet[2][1] = number(1, 30);
for (int i = 0; i < level; ++i)
{
int lvbonus = 0;
if (tmpage >= 60)
lvbonus = 1;
if (i % 5 == 0)
{
m_dwbonuspet[0][1] += number(2 + lvbonus, 3 + lvbonus);
m_dwbonuspet[2][1] += number(2 + lvbonus, 3 + lvbonus);
}
if (i % 7 == 0)
{
m_dwbonuspet[1][1] += number(2 + lvbonus, 3 + lvbonus);
}
}
}
else if (newpettype == 2)
{
m_dwbonuspet[0][1] = number(1, 30);
m_dwbonuspet[1][1] = number(1, 30);
m_dwbonuspet[2][1] = number(1, 30);
for (int i = 0; i < level; ++i)
{
int lvbonus = 0;
if (level >= 60)
lvbonus = 1;
if (i % 6 == 0)
{
m_dwbonuspet[0][1] += number(1 + lvbonus, 7 + lvbonus);
m_dwbonuspet[2][1] += number(1 + lvbonus, 7 + lvbonus);
}
if (i % 8 == 0)
{
m_dwbonuspet[1][1] += number(1 + lvbonus, 7 + lvbonus);
}
}
}
else if (newpettype == 3) // sabit
{
m_dwbonuspet[0][1] = number(1, 30);
m_dwbonuspet[1][1] = number(1, 30);
m_dwbonuspet[2][1] = number(1, 30);
for (int i = 0; i < level; ++i)
{
int lvbonus = 0;
if (tmpage >= 60)
lvbonus = 1;
if (i % 5 == 0)
{
m_dwbonuspet[0][1] += number(3 + lvbonus, 4 + lvbonus);
m_dwbonuspet[2][1] += number(3 + lvbonus, 4 + lvbonus);
}
if (i % 7 == 0)
{
m_dwbonuspet[1][1] += number(3 + lvbonus, 4 + lvbonus);
}
}
}
else if (newpettype == 4)
{
m_dwbonuspet[0][1] = number(1, 30);
m_dwbonuspet[1][1] = number(1, 30);
m_dwbonuspet[2][1] = number(1, 30);
for (int i = 0; i < level; ++i)
{
int lvbonus = 0;
if (level >= 60)
lvbonus = 1;
if (i % 6 == 0)
{
m_dwbonuspet[0][1] += number(1 + lvbonus, 9 + lvbonus);
m_dwbonuspet[2][1] += number(1 + lvbonus, 9 + lvbonus);
}
if (i % 8 == 0)
{
m_dwbonuspet[1][1] += number(1 + lvbonus, 9 + lvbonus);
}
}
}
else if (newpettype == 5) // sabit
{
m_dwbonuspet[0][1] = number(1, 30);
m_dwbonuspet[1][1] = number(1, 30);
m_dwbonuspet[2][1] = number(1, 30);
for (int i = 0; i < level; ++i)
{
int lvbonus = 0;
if (tmpage >= 60)
lvbonus = 1;
if (i % 5 == 0)
{
m_dwbonuspet[0][1] += number(5 + lvbonus, 6 + lvbonus);
m_dwbonuspet[2][1] += number(5 + lvbonus, 6 + lvbonus);
}
if (i % 7 == 0)
{
m_dwbonuspet[1][1] += number(5 + lvbonus, 6 + lvbonus);
}
}
}
else if (newpettype == 6)
{
m_dwbonuspet[0][1] = number(1, 30);
m_dwbonuspet[1][1] = number(1, 30);
m_dwbonuspet[2][1] = number(1, 30);
for (int i = 0; i < level; ++i)
{
int lvbonus = 0;
if (level >= 60)
lvbonus = 1;
if (i % 6 == 0)
{
m_dwbonuspet[0][1] += number(1 + lvbonus, 10 + lvbonus);
m_dwbonuspet[2][1] += number(1 + lvbonus, 10 + lvbonus);
}
if (i % 8 == 0)
{
m_dwbonuspet[1][1] += number(1 + lvbonus, 10 + lvbonus);
}
}
}
else if (newpettype == 7)
{
m_dwbonuspet[0][1] = number(1, 30);
m_dwbonuspet[1][1] = number(1, 30);
m_dwbonuspet[2][1] = number(1, 30);
for (int i = 0; i < level; ++i)
{
int lvbonus = 0;
if (tmpage >= 60)
lvbonus = 1;
if (i % 5 == 0)
{
m_dwbonuspet[0][1] += number(5 + lvbonus, 7 + lvbonus);
m_dwbonuspet[2][1] += number(5 + lvbonus, 7 + lvbonus);
}
if (i % 7 == 0)
{
m_dwbonuspet[1][1] += number(5 + lvbonus, 7 + lvbonus);
}
}
}
std::unique_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("UPDATE new_petsystem SET bonus0 = '%d', bonus1 = '%d', bonus2 = '%d', pet_type = '%d' WHERE id = '%lu'", m_dwbonuspet[0][1], m_dwbonuspet[1][1], m_dwbonuspet[2][1], newpettype, petItem->GetID()));
for (int b = 0; b < 3; b++) {
petItem->SetForceAttribute(b, 1, m_dwbonuspet[1]);
}
secondItem->SetCount(secondItem->GetCount() - 1);
ch->ChatPacket(CHAT_TYPE_COMMAND, "OnResultPetAttrChange %d", newpettype);
}