Yang bomba a leltárba

Indította endox93, 2018-07-14, 19:01:55

Nos a téma adott hogyan lehetne a földre droppolt yang leltárba rakni egyből ?
Skype : Derota2

Régen volt erről téma, aszem a char_battle meg még vhol át kell írni az AddToGround-ot inventoryra, ahol yang van persze.

Megtaláltam ezt a részt viszont nem értem hogy mire kellene cserélni  ???


   // 1% 확률로 돈을 10개 떨어 뜨린다. (10배 드롭임)
   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
         }
      }
   }
Skype : Derota2

Kiszeded a földre dobást és átírod h leltárba pakolja, pointchange stb ahogy teccik.

Valahogy igy néz ki így sikerült megoldani hogy ne adjon yang bombát de viszont nem adja a inventoryba az AddToGround ot kellene változtatni vagy mit?

//item->AddToGround(GetMapIndex(), pos);
Skype : Derota2

Nyisd meg a char_battle.cpp fájlt és ez alá:
#include "DragonLair.h"


Tedd ezt:
#include "../../common/service.h"


Nyisd meg a common/service.h fájlt és add hozzá ezt:
#define DISABLE_YANG_BOMB


Nyisd meg a char_battle.cpp fájlt és keress rá erre:
void CHARACTER::RewardGold(LPCHARACTER pkAttacker)


Cseréld le az egész funkciót erre:

void CHARACTER::RewardGold(LPCHARACTER pkAttacker)
{
// ADD_PREMIUM
bool isAutoLoot =
(pkAttacker->GetPremiumRemainSeconds(PREMIUM_AUTOLOOT) > 0 ||
pkAttacker->IsEquipUniqueGroup(UNIQUE_GROUP_AUTOLOOT))
? true : false; // Á¦3ŔÇ ĽŐ
// END_OF_ADD_PREMIUM


PIXEL_POSITION pos;


if (!isAutoLoot)
if (!SECTREE_MANAGER::instance().GetMovablePosition(GetMapIndex(), GetX(), GetY(), pos))
return;


int iTotalGold = 0;
//
// --------- µ· µĺ·Ó Č®·ü °č»ę ----------
//
int iGoldPercent = MobRankStats[GetMobRank()].iGoldPercent;


if (pkAttacker->IsPC())
iGoldPercent = iGoldPercent * (100 + CPrivManager::instance().GetPriv(pkAttacker, PRIV_GOLD_DROP)) / 100;


if (pkAttacker->GetPoint(POINT_MALL_GOLDBONUS))
iGoldPercent += (iGoldPercent * pkAttacker->GetPoint(POINT_MALL_GOLDBONUS) / 100);


iGoldPercent = iGoldPercent * CHARACTER_MANAGER::instance().GetMobGoldDropRate(pkAttacker) / 100;


// ADD_PREMIUM
if (pkAttacker->GetPremiumRemainSeconds(PREMIUM_GOLD) > 0 ||
pkAttacker->IsEquipUniqueGroup(UNIQUE_GROUP_LUCKY_GOLD))
iGoldPercent += iGoldPercent;
// END_OF_ADD_PREMIUM


if (iGoldPercent > 100)
iGoldPercent = 100;


int iPercent;


if (GetMobRank() >= MOB_RANK_BOSS)
iPercent = ((iGoldPercent * PERCENT_LVDELTA_BOSS(pkAttacker->GetLevel(), GetLevel())) / 100);
else
iPercent = ((iGoldPercent * PERCENT_LVDELTA(pkAttacker->GetLevel(), GetLevel())) / 100);
//int iPercent = CALCULATE_VALUE_LVDELTA(pkAttacker->GetLevel(), GetLevel(), iGoldPercent);


if (number(1, 100) > iPercent)
return;


int iGoldMultipler = GetGoldMultipler();


if (1 == number(1, 50000)) // 1/50000 Č®·ü·Î µ·ŔĚ 10ąč
iGoldMultipler *= 10;
else if (1 == number(1, 10000)) // 1/10000 Č®·ü·Î µ·ŔĚ 5ąč
iGoldMultipler *= 5;


// °łŔÎ Ŕűżë
if (pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
if (number(1, 100) <= pkAttacker->GetPoint(POINT_GOLD_DOUBLE_BONUS))
iGoldMultipler *= 2;


//
// --------- µ· µĺ·Ó ąčĽö °áÁ¤ ----------
//
if (test_server)
pkAttacker->ChatPacket(CHAT_TYPE_PARTY, "gold_mul %d rate %d", iGoldMultipler, CHARACTER_MANAGER::instance().GetMobGoldAmountRate(pkAttacker));


//
// --------- ˝ÇÁ¦ µĺ·Ó Ăł¸® -------------
//
LPITEM item;


int iGold10DropPct = 100;
iGold10DropPct = (iGold10DropPct * 100) / (100 + CPrivManager::instance().GetPriv(pkAttacker, PRIV_GOLD10_DROP));


// MOB_RANK°ˇ BOSSş¸´Ů łôŔ¸¸é ą«Á¶°Ç µ·ĆřĹş
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();
}
}
}
}


DBManager::instance().SendMoneyLog(MONEY_LOG_MONSTER, GetRaceNum(), iTotalGold);
}



Mentést csinálj előtte.
Garanciát nem vállalok rá!
Forrás: Metin2dev

Tudtommal több helyen kellett piszkálni, bár való igaz az minden yangot a leltárba adott, ha a bombát akarod csak akk lehet elég ez is.

Igen működik így köszönöm .
Skype : Derota2