Форум Администраторов Игровых Серверов..
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

[2.2.3]руда

Перейти вниз

[2.2.3]руда Empty [2.2.3]руда

Сообщение  Admin Пн Дек 06, 2010 1:16 pm

nCount - порядковый номер
ItemCode - айди предмета
Exist - спользуемый или нет (0\1)
Model - айди модели
Icon - айди иконки (спрайта)
Name - название предмета (корейское)
Ore_List - группа руды (красная жёлтая зелёная синяя чёрная)
Ore_Level - Тип руды +1 +2 +3 ( +4 имеет такой же класс как и +3 (2 )) коробки золотые класс 3
OreProbability - Вероятность (без понятия для чего. всегда ноль для +1 +2 +3 +4)
KindClt - не имею понятия для чего это нужно.
Money - денежная единица покупки\продажи (0\1\2)
StdPrice - цена (расовая валюта)
StdPoint - цена (пвп поинты)
ProcessPoint - Очки обработки (в клиенте в самом низу под стихийной стойкостью
StoragePrice - цена хранения
Sell - продажа (0\1)
Exchange - обмен (0\1)
Ground - выкинуть (0\1)
StoragePossible - положить в банк (0\1)
UseableNormalAcc - возможность использования обычным аккаунтом (0\1)
min_C_random - Параметры для расчёта количества лута после обработки
max_C_random - Параметры для расчёта количества лута после обработки
ProcessPrice - цена обработки (очистки)
TooltipIndex - индекс предмета
IsTime - временный или нет (0\1)
____________________________________________________________________________________________________
Код:

void CPlayer::pc_OreCutting(WORD wOreSerial, BYTE byProcessNum)
{
BYTE byErrCode = 0;
__ITEM* pOreItem = NULL;
int nKindNum = 0;
_OreItem_fld* pOreFld = NULL;
int i;
DWORD dwCost = 0;

//°Ў°шАУЅГ°ш°Ј єсїцБ®АЦіЄ И®АО
if(m_Param.GetResBufferNum() > 0)
{
byErrCode = 4; //°Ў°шАУЅГ°ш°Ј ѕИєсїт
goto RESULT;
}

//°Ў№жїЎ ЗШґз їшј®АМ АЦґВБц И®АО
pOreItem = m_Param.m_dbInven.GetPtrFromSerial(wOreSerial);
if(!pOreItem)
{
byErrCode = 1; //їшј® °Ў№ж, ЅГё®ѕуЅЗЖР
goto RESULT;
}
if(pOreItem->m_byTableCode != tbl_code_ore)
{
byErrCode = 1; //їшј® °Ў№ж, ЅГё®ѕуЅЗЖР
goto RESULT;
}
pOreFld = (_OreItem_fld*)g_Main.m_tblItemData[tbl_code_ore].GetRecord(pOreItem->m_wItemIndex);

//°Ў°шјц·®АМ їшј®јц·®єёґЩ АЫАєБц И®АО
if(byProcessNum > pOreItem->m_dwDur)
{
byErrCode = 2; //јц·®ЅЗЖР
goto RESULT;
}

//°Ў°шєсїлИ®АО
dwCost = pOreFld->m_nStdPrice*byProcessNum;
if(dwCost > m_Param.GetDalant())
{
byErrCode = 3;//јТБц±ЭєОБ·
goto RESULT;
}

RESULT:

DWORD dwLeftOreNum;
if(byErrCode == 0)
{
//ГЯГвАЪїшАЗ Бѕ·щё¦ ±ёЗФ
for(i = 0; i < byProcessNum; i++)
{
nKindNum = ::rand()%(pOreFld->m_nmax_C_random - pOreFld->m_nmin_C_random + 1)+pOreFld->m_nmin_C_random;
for(int k = 0; k < nKindNum; k++)
{
//0x7FFF7FFF ±вБШ..
DWORD dwR1 = ::rand();
DWORD dwRand = (dwR1<<16)+::rand();

DWORD dwResIndex = g_Main.m_tblOreCutting.GetOreIndexFromRate(pOreFld->m_dwIndex, dwRand);
if(m_Param.m_wCuttingResBuffer[dwResIndex] < 0xFF) //0xFFё¦ іСА»јц ѕшґЩ..
m_Param.m_wCuttingResBuffer[dwResIndex]++;
}
}

//їшј® °ЁјТ
dwLeftOreNum = Emb_AlterDurPoint(_STORAGE_POS::INVEN, pOreItem->m_byStorageIndex, -byProcessNum, true);//°Ў°ш

//ґЮ¶хЖ® °ЁјТ
AlterMoney(0, -dwCost);

//ITEM HISTORY..
s_MgrItemHistory.cut_item(pOreItem, byProcessNum, m_Param.m_wCuttingResBuffer, dwCost, m_Param.GetDalant(), m_szItemHistoryFileName);

//їщµеїЎ ѕчµҐАМЖ®..
if(m_pUserDB)
{
int nCnt = 0;
_CUTTING_DB_BASE::_LIST BufferList[left_cutting_num];
for(i = 0; i < ::GetMaxResKind(); i++)
{
if(m_Param.m_wCuttingResBuffer[i] > 0)
{
BufferList[nCnt].byResIndex = (BYTE)i;
BufferList[nCnt].byAmt = (BYTE)m_Param.m_wCuttingResBuffer[i];
nCnt++;
}
}

m_pUserDB->Update_CuttingPush(nCnt, BufferList);
}
}

//ГЯ°Ў №Ч °б°ъАьјЫ
SendMsg_OreCuttingResult(byErrCode, (BYTE)dwLeftOreNum, dwCost);
}

Это Касательно минимального и максимального C Randoma

ProcessPoint этоочки обработки они отображаются в клиенте в самом низу под стихийной стойкостью
Там 3 типа очков.

Admin
Admin

Сообщения : 71
Дата регистрации : 2010-12-06
Возраст : 31
Откуда : Москва

http://rf-moscow.2x2forumy.net

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения