avatar_8BitCore

Продажа вещей за другие валюты

Автор 8BitCore, 2012 Дек. 18, 15:03

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlinemu developmentпродажа вещейgem points.

8BitCore

Будет полезно для тех, кто любит поковыряться не только в настройках своего сервера.
На данном примере продается вещь, которую можно сложить в пачку, и в зависимости от прочность выдаются GEM points.

Credits: Webzen


Функцию CGSellRequestRecv_Hook нужно хукнуть вместо оригинальной CGSellRequestRecv

struct PMSG_SELLREQUEST
{
PBMSG_HEAD h;
BYTE Pos;        // 3
BYTE Info[4];    // reedlan
};

struct PMSG_SELLRESULT
{
PBMSG_HEAD h;    // C1:33
BYTE Result;    // 3
DWORD Money;    // 4
};

void CGSellRequestRecv_Hook(PMSG_SELLREQUEST * lpMsg, int aIndex)
{
OBJECTSTRUCT *gObj = (OBJECTSTRUCT*)OBJECT_POINTER(aIndex);

if ( gObj->pInventory[lpMsg->Pos].m_Type == ITEMGET(14,125) )
{
PMSG_SELLRESULT pResult;
PHeadSetB((LPBYTE)&pResult, 0x33, sizeof(pResult));
pResult.Result = false;
pResult.Money = gObj->Money;

if ( gObj->CloseType != -1 )
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
return;
}

if ( gObj->m_IfState.use > 0 && gObj->m_IfState.type != 3 )
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
return;
}

if ( gObj->pTransaction == 1 )
{
return;
}

if ( lpMsg->Pos > MAIN_INVENTORY_SIZE-1 )
{
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
return;
}

unsigned short gems = 0;
(gObj->pInventory[lpMsg->Pos].m_Durability == 0) ? gems = 1 : gems = gObj->pInventory[lpMsg->Pos].m_Durability;

g_Query.ExecuteQuery("UPDATE MuCashShop_DATA SET CashPoint = CashPoint + %d WHERE memb_guid = (SELECT memb_guid FROM MEMB_INFO WHERE memb___id = '%s')", gems, gObj->AccountID);
MsgNormal(aIndex, "Barbarian Claw: %d GEM(s) added", gems);

gObjInventoryDeleteItem(aIndex, lpMsg->Pos);
GCInventoryItemDeleteSend(aIndex, lpMsg->Pos, 1);

pResult.Result = true;
DataSend(aIndex, (LPBYTE)&pResult, pResult.h.size);
return;
}

CGSellRequestRecv(lpMsg, aIndex);
}

Похожие темы (3)