Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //add
- #include "../common/VnumHelper.h"
- //search
- void CInputMain::Refine(LPCHARACTER ch, const char* c_pData)
- {
- //add under
- void CInputMain::SoulStoneUse(LPCHARACTER ch, const char* c_pData)
- {
- TPacketCGSoulStoneUse* p = (TPacketCGSoulStoneUse*)c_pData;
- // check general data
- const DWORD* c_adwAvailSkillVnums = ch->GetUsableSkillList();
- if (!c_adwAvailSkillVnums)
- return;
- bool bFoundVnum = false;
- for (int i = 0; i < CHARACTER_SKILL_COUNT; ++i)
- {
- if (!c_adwAvailSkillVnums[i])
- continue;
- if (c_adwAvailSkillVnums[i] == p->skillIndex)
- {
- bFoundVnum = true;
- break;
- }
- }
- if (!bFoundVnum)
- return;
- if (ch->GetSkillMasterType(p->skillIndex) != SKILL_GRAND_MASTER)
- return;
- if (!p->Cell.IsDefaultInventoryPosition())
- return;
- // check item
- LPITEM pkItem = ch->GetInventoryItem(p->Cell.cell);
- if (!pkItem || !CItemVnumHelper::IsSoulStone(pkItem->GetVnum()))
- return;
- if (pkItem->IsExchanging())
- return;
- if (ch->GetRaceNum() >= MAIN_RACE_MAX_NUM)
- return;
- // use soulstones
- BYTE bCount = p->all ? pkItem->GetCount() : 1;
- BYTE bUseCount = 0;
- BYTE bSuccessCount = 0;
- for (int i = 0; i < bCount; ++i)
- {
- ++bUseCount;
- if (ch->LearnGrandMasterSkill(p->skillIndex))
- {
- ++bSuccessCount;
- if (ch->GetSkillMasterType(p->skillIndex) > SKILL_GRAND_MASTER)
- break;
- }
- }
- pkItem->SetCount(pkItem->GetCount() - bUseCount);
- if (bSuccessCount == 0)
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Egitim basarisiz oldu."));
- else if (ch->GetSkillMasterType(p->skillIndex) > SKILL_GRAND_MASTER)
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Grandmaster seviyesinde basarili oldunuz."));
- else if (bCount == 1)
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Egitim basarili oldu."));
- else if (bCount == bSuccessCount)
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Tum ruh taslari basariyla kullanildi."));
- else
- ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%d/%d ruh taslari basariyla kullanildi."), bSuccessCount, bCount);
- }
- //search
- case HEADER_CG_XTRAP_ACK:
- {
- TPacketXTrapCSVerify* p = reinterpret_cast<TPacketXTrapCSVerify*>((void*)c_pData);
- CXTrapManager::instance().Verify_CSStep3(d->GetCharacter(), p->bPacketData);
- }
- break;
- //add under
- case HEADER_CG_SOULSTONE_USE:
- SoulStoneUse(ch, c_pData);
- break;
Advertisement
Add Comment
Please, Sign In to add comment