- 1. Wchodzimy do char_battle.cpp i szukamy:
- else if (1 == number(1, iGold10DropPct))
- {
- //
- // µ· ĆřĹş˝Ä µĺ·Ó
- //
- for (int i = 0; i < 10; ++i)
- {
- int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);
- iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
- iGold *= iGoldMultipler;
- if (iGold == 0)
- {
- continue;
- }
- // NOTE: µ· ĆřĹşŔş Á¦ 3ŔÇ ĽŐ Ăł¸®¸¦ ÇĎÁö ľĘŔ˝
- if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
- {
- pos.x = GetX() + (number(-7, 7) * 20);
- pos.y = GetY() + (number(-7, 7) * 20);
- item->AddToGround(GetMapIndex(), pos);
- item->StartDestroyEvent();
- iTotalGold += iGold; // Total gold
- }
- }
- }
- 2. Gdy znajdziemy kod, usuwamy całość podaną wyżej.
- 3. Zapisujemy i kompilujemy game.
- *Źródło https://metin2.dev/*
- #Dodatkowo gdy chcemy usunąć z Bossów (Nie sprawdzane) .
- Wbijamy do:
- service.h
- Dodajemy:
- #define DISABLE_YANG_BOMB
- Wbijamy do:
- char_battle.cpp
- Szukamy:
- if (GetMobRank() >= MOB_RANK_BOSS && !IsStone() && GetMobTable().dwGoldMax != 0)
- {
- if (1 == number(1, iGold10DropPct))
- iGoldMultipler *= 10; // 1% 확률로 돈 10배
- int iSplitCount = number(25, 35);
- for (int i = 0; i < iSplitCount; ++i)
- {
- int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax) / iSplitCount;
- if (test_server)
- sys_log(0, "iGold %d", iGold);
- iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
- iGold *= iGoldMultipler;
- if (iGold == 0)
- {
- continue ;
- }
- if (test_server)
- {
- sys_log(0, "Drop Moeny MobGoldAmountRate %d %d", CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker), iGoldMultipler);
- sys_log(0, "Drop Money gold %d GoldMin %d GoldMax %d", iGold, GetMobTable().dwGoldMax, GetMobTable().dwGoldMax);
- }
- // NOTE: 돈 폭탄은 제 3의 손 처리를 하지 않음
- if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
- {
- pos.x = GetX() + ((number(-14, 14) + number(-14, 14)) * 23);
- pos.y = GetY() + ((number(-14, 14) + number(-14, 14)) * 23);
- item->AddToGround(GetMapIndex(), pos);
- item->StartDestroyEvent();
- iTotalGold += iGold; // Total gold
- }
- }
- }
- Cały kod zmieniamy na:
- if (GetMobRank() >= MOB_RANK_BOSS && !IsStone() && GetMobTable().dwGoldMax != 0)
- {
- if (1 == number(1, iGold10DropPct))
- iGoldMultipler *= 10; // 1% Č®·ü·Î µ· 10ąč
- int iSplitCount = number(25, 35);
- for (int i = 0; i < iSplitCount; ++i)
- {
- int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax) / iSplitCount;
- if (test_server)
- sys_log(0, "iGold %d", iGold);
- iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
- iGold *= iGoldMultipler;
- if (iGold == 0)
- {
- continue ;
- }
- if (test_server)
- {
- sys_log(0, "Drop Moeny MobGoldAmountRate %d %d", CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker), iGoldMultipler);
- sys_log(0, "Drop Money gold %d GoldMin %d GoldMax %d", iGold, GetMobTable().dwGoldMax, GetMobTable().dwGoldMax);
- }
- // NOTE: µ· ĆřĹşŔş Á¦ 3ŔÇ ĽŐ Ăł¸®¸¦ ÇĎÁö ľĘŔ
- #ifdef DISABLE_YANG_BOMB
- pkAttacker->GiveGold(iGold / iSplitCount);
- iTotalGold += iGold;
- #else
- if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
- {
- pos.x = GetX() + ((number(-14, 14) + number(-14, 14)) * 23);
- pos.y = GetY() + ((number(-14, 14) + number(-14, 14)) * 23);
- item->AddToGround(GetMapIndex(), pos);
- item->StartDestroyEvent();
- iTotalGold += iGold; // Total gold
- }
- #endif
- }
- }
- // 1% Č®·ü·Î µ·Ŕ» 10°ł ¶łľî ¶ß¸°´Ů. (10ąč µĺ·ÓŔÓ
- #ifndef DISABLE_YANG_BOMB
- else if (1 == number(1, iGold10DropPct))
- {
- //
- // µ· ĆřĹş˝Ä µĺ·Ó
- //
- for (int i = 0; i < 10; ++i)
- {
- int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);
- iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
- iGold *= iGoldMultipler;
- if (iGold == 0)
- {
- continue;
- }
- // NOTE: µ· ĆřĹşŔş Á¦ 3ŔÇ ĽŐ Ăł¸®¸¦ ÇĎÁö ľĘŔ˝
- if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold)))
- {
- pos.x = GetX() + (number(-7, 7) * 20);
- pos.y = GetY() + (number(-7, 7) * 20);
- item->AddToGround(GetMapIndex(), pos);
- item->StartDestroyEvent();
- iTotalGold += iGold; // Total gold
- }
- }
- }
- #endif
- else
- {
- //
- // ŔĎąÝŔűŔÎ ąć˝ÄŔÇ µ· µĺ·Ó
- //
- int iGold = number(GetMobTable().dwGoldMin, GetMobTable().dwGoldMax);
- iGold = iGold * CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker) / 100;
- iGold *= iGoldMultipler;
- int iSplitCount;
- if (iGold >= 3 && !LC_IsYMIR())
- iSplitCount = number(1, 3);
- else if (GetMobRank() >= MOB_RANK_BOSS)
- {
- iSplitCount = number(3, 10);
- if ((iGold / iSplitCount) == 0)
- iSplitCount = 1;
- }
- else
- iSplitCount = 1;
- if (iGold != 0)
- {
- iTotalGold += iGold; // Total gold
- for (int i = 0; i < iSplitCount; ++i)
- {
- if (isAutoLoot)
- {
- pkAttacker->GiveGold(iGold / iSplitCount);
- }
- else if ((item = ITEM_MANAGER::instance().CreateItem(1, iGold / iSplitCount)))
- {
- pos.x = GetX() + (number(-7, 7) * 20);
- pos.y = GetY() + (number(-7, 7) * 20);
- item->AddToGround(GetMapIndex(), pos);
- item->StartDestroyEvent();
- }
- }
- }
- }