Opublikowano 28 Czerwca 202428 Cze Witam mam taki problemik ze gdy zmieniam bonusy to usuwa mi jakby dodania np. z 5 na 4 , z 4 na 3 lub z 5 na 3 i potrafi dojść ze przedmiot nie ma bonusu 😄 tutaj kod z char_item.cpp case USE_CHANGE_ATTRIBUTE : if (item2->GetAttributeSetIndex() == -1) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경할 수 없는 아이템입니다.")); return false; } if (item2->GetAttributeCount() == 0) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("변경할 속성이 없습니다.")); return false; } if (GM_PLAYER == GetGMLevel() && false == test_server) { // // Event Flag 를 통해 이전에 아이템 속성 변경을 한 시간으로 부터 충분한 시간이 흘렀는지 검사하고 // 시간이 충분히 흘렀다면 현재 속성변경에 대한 시간을 설정해 준다. // DWORD dwChangeItemAttrCycle = quest::CQuestManager::instance().GetEventFlag(msc_szChangeItemAttrCycleFlag); if (dwChangeItemAttrCycle < msc_dwDefaultChangeItemAttrCycle) dwChangeItemAttrCycle = msc_dwDefaultChangeItemAttrCycle; quest::PC* pPC = quest::CQuestManager::instance().GetPC(GetPlayerID()); if (pPC) { DWORD dwNowMin = get_global_time() / 60; // DWORD dwLastChangeItemAttrMin = pPC->GetFlag(msc_szLastChangeItemAttrFlag); // if (dwLastChangeItemAttrMin + dwChangeItemAttrCycle > dwNowMin) // { // ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 바꾼지 %d분 이내에는 다시 변경할 수 없습니다.(%d 분 남음)"), // dwChangeItemAttrCycle, dwChangeItemAttrCycle - (dwNowMin - dwLastChangeItemAttrMin)); // return false; // } pPC->SetFlag(msc_szLastChangeItemAttrFlag, dwNowMin); } } if (item->GetSubType() == USE_CHANGE_ATTRIBUTE2) { int aiChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] = { 0, 0, 30, 40, 3 }; item2->ChangeAttribute(aiChangeProb); } else if (item->GetVnum() == 76014) { int aiChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] = { 0, 10, 50, 39, 1 }; item2->ChangeAttribute(aiChangeProb); } else { // 연재경 특수처리 // 절대로 연재가 추가 안될거라 하여 하드 코딩함. if (item->GetVnum() == 71151 || item->GetVnum() == 76023) { if ((item2->GetType() == ITEM_WEAPON) || (item2->GetType() == ITEM_ARMOR && item2->GetSubType() == ARMOR_BODY)) { bool bCanUse = true; for (int i = 0; i < ITEM_LIMIT_MAX_NUM; ++i) { if (item2->GetLimitType(i) == LIMIT_LEVEL && item2->GetLimitValue(i) > 40) { bCanUse = false; break; } } if (false == bCanUse) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("적용 레벨보다 높아 사용이 불가능합니다.")); break; } } else { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("무기와 갑옷에만 사용 가능합니다.")); break; } } item2->ChangeAttribute(); } ChatPacket(CHAT_TYPE_INFO, LC_TEXT("속성을 변경하였습니다.")); { char buf[21]; snprintf(buf, sizeof(buf), "%u", item2->GetID()); LogManager::instance().ItemLog(this, item, "CHANGE_ATTRIBUTE", buf); } //item->SetCount(item->GetCount() - 1); break; a tutaj kod item_attribute.cpp: void CItem::ChangeAttribute(const int* aiChangeProb) { int iAttributeCount = GetAttributeCount(); ClearAttribute(); if (iAttributeCount == 0) return; TItemTable const * pProto = GetProto(); if (pProto && pProto->sAddonType) { ApplyAddon(pProto->sAddonType); } static const int tmpChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] = { 0, 10, 40, 35, 15, }; for (int i = GetAttributeCount(); i < iAttributeCount; ++i) { if (aiChangeProb == NULL) { PutAttribute(tmpChangeProb); } else { PutAttribute(aiChangeProb); } } }
Opublikowano 28 Czerwca 202428 Cze Autor Rozwiązanie 18 godzin temu, Marchewa napisał(a): To jest source Entry? niee z innego forum Naprawione. Naprawa: Zmiana wartosci bonusów gdyz podczas zmiany w jednej wartosci dałem 0 zamiast 10 😄