📄 heroitem.cpp
字号:
if (nPosition == ITEMPOSITION_WEAPONR)
{
if (this->GetEquipment(ITEMPOSITION_WEAPONL))
{
const OBJID idUnequipLeftWeaponFirst = 100053;
g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idUnequipLeftWeaponFirst));
return false;
}
}
CItem* pItem = this->GetEquipment(nPosition);
if (!pItem)
return false;
CMsgItem msg;
if(msg.Create(pItem->GetID(), nPosition, ITEMACT_UNEQUIP))
msg.Send();
return true;
}
//--------------------------------------------------------------
CItem* CHero::SearchEquipment(OBJID idItem)
{
if (ID_NONE == idItem)
return NULL;
for (int i=0; i<_MAX_EQUIPMENT; i++)
{
CItem* pEquip = m_pEquipment[i];
if (pEquip && pEquip->GetID() == idItem)
return pEquip;
}
return NULL;
}
//--------------------------------------------------------------
BOOL CHero::CanEquip(int nPosition, CItem* pItem) const
{
return true;
}
//--------------------------------------------------------------
DWORD CHero::GetCarryingCapacity()
{
int nStep = 0;
int nBaseWeight = 0;
switch(this->GetProfessionSort())
{
case PROFSORT_SOLDIER:
nStep = 3;
nBaseWeight = 30;
break;
case PROFSORT_ARCHER:
nStep = 2;
nBaseWeight = 20;
break;
case PROFSORT_MAGICIAN:
nStep = 2;
nBaseWeight = 20;
break;
}
int nWeight = nBaseWeight + this->GetLev() * nStep - nStep;
return __max(0, nWeight);
}
//--------------------------------------------------------------
DWORD CHero::GetItemTotalWeight()
{
// 圣战不走负重
return 0;
}
//--------------------------------------------------------------
BOOL CHero::IsPackageFull(CItem* pItem)
{
if (pItem)
{
int nPackageType = pItem->GetPackageType();
if ( g_objHero.GetItemAmount (nPackageType) < g_objHero.GetPackageLimit (nPackageType) )
return FALSE;
if (pItem->GetAmount() >= pItem->GetAmountLimit())
{
if ( g_objHero.GetItemAmount (nPackageType) < g_objHero.GetPackageLimit (nPackageType) )
return FALSE;
}
else
{
int nAmount = g_objHero.GetItemAmount(nPackageType);
for(int i =0 ;i< nAmount ;i++)
{
CItem* pOldItem = g_objHero.GetItemByIndex(i,nPackageType);
if (pOldItem && pOldItem->GetTypeID() == pItem->GetTypeID()
&& (pItem->GetAmount() + pOldItem->GetAmount() <= pItem->GetAmountLimit()))
return FALSE;
}
}
}
return TRUE;
}
//--------------------------------------------------------------
int CHero::GetAtkRange()
{
/* if(this->HaveBow())
return this->GetBowShootRange();*/
if (this->IsTransform())
return 1;
int nRange = 1, nRangeR = 0, nRangeL = 0;
CItem* pRWeapon = this->GetEquipment(ITEMPOSITION_WEAPONR);
if (pRWeapon)
nRangeR = pRWeapon->GetAtkRange();
CItem* pLWeapon = this->GetEquipment(ITEMPOSITION_WEAPONL);
if (pLWeapon)
nRangeL = pLWeapon->GetAtkRange();
if(nRangeR && nRangeL)
nRange = (nRangeR + nRangeL) / 2;
else if(nRangeR)
nRange = nRangeR;
else if(nRangeL)
nRange = nRangeL;
// weapon skill factor
int nAmount = m_setMagic.size();
for(int i = 0; i < nAmount; i ++)
{
CMagic* pMagic = m_setMagic[i];
if (pMagic && (MAGICSORT_ATKRANGE == pMagic->m_infoMagicType.dwActionSort))
{
CItem* pWeaponR = this->GetEquipment(ITEMPOSITION_WEAPONR);
CItem* pWeaponL = this->GetEquipment(ITEMPOSITION_WEAPONL);
if ((pWeaponR && pWeaponR->GetWeaponSkillType() == pMagic->GetWeaponRequired())
|| (pWeaponL && pWeaponL->GetWeaponSkillType() == pMagic->GetWeaponRequired()))
{
nRange += pMagic->GetPower();
}
}
}
return nRange;
}
//--------------------------------------------------------------
void CHero::ImproveItem(OBJID idItem, OBJID idTreasure)
{
CItem* pTreasure = this->GetItem(idTreasure);
if (!pTreasure || !pTreasure->IsDragonBall())
return;
CItem* pItem = this->GetItem(idItem);
if (!pItem || pItem->GetAmount() < pItem->GetAmountLimit())
return;
CMsgItem msg;
IF_SUC (msg.Create(idItem, idTreasure, ITEMACT_IMPROVE))
msg.Send();
}
//--------------------------------------------------------------
void CHero::UpLevelItem(OBJID idItem, OBJID idTreasure)
{
CItem* pTreasure = this->GetItem(idTreasure);
if (!pTreasure || !pTreasure->IsShootingStar())
return;
CItem* pItem = this->GetItem(idItem);
if (!pItem || pItem->GetAmount() < pItem->GetAmountLimit())
return;
CMsgDataArray msgDataArray;
long id[3];
id[0]= idItem;
id[1]= idTreasure;
if(msgDataArray.Create(_DATAARRAY_ACTION_UPGRADE_EQUIPLEVEL,2,id))
msgDataArray.Send();
}
//--------------------------------------------------------------
void CHero::EmbedGem (OBJID idItem, OBJID idGem, int nPos)
{
// param check
if (!this->GetItem(idItem))
return;
if (!this->GetItem(idGem))
return;
if (nPos != 1 && nPos != 2)
return;
// send msg
CMsgGemEmbed msg;
IF_OK (msg.Create(this->GetID(), idItem, idGem, nPos))
msg.Send();
}
//--------------------------------------------------------------
void CHero::TakeOutGem (OBJID idItem, int nPos)
{
// param check
if (!this->GetItem(idItem))
return;
if (nPos != 1 && nPos != 2)
return;
// send msg
CMsgGemEmbed msg;
IF_OK (msg.Create(this->GetID(), idItem, ID_NONE, nPos, GEM_TAKEOUT))
msg.Send();
}
//--------------------------------------------------------------
BOOL CHero::IsMiner(void)
{
CItem* pWeapon = this->GetEquipment(ITEMPOSITION_WEAPONR);
if (!pWeapon)
return false;
OBJID idType = pWeapon->GetTypeID();
if (ID_NONE == idType || 562 != (idType/1000)%1000)
return false;
return true;
}
//--------------------------------------------------------------
void CHero::Mine(void)
{
if(this->IsTransform())
{
// 变身以后不可采矿...
return;
}
// condition check
CItem* pWeapon = this->GetEquipment(ITEMPOSITION_WEAPONR);
if (!pWeapon)
{
OBJID idMineToolError = 100054;
g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idMineToolError));
return;
}
OBJID idType = pWeapon->GetTypeID();
if (ID_NONE == idType || 562 != (idType/1000)%1000)
{
OBJID idMineToolError = 100054;
g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idMineToolError));
return;
}
// prevent repeat
if (_COMMAND_MINE == this->GetCommandType())
return;
// set cmd now
CCommand cmd;
cmd.iType = _COMMAND_MINE;
cmd.iStatus = _CMDSTATUS_BEGIN;
this->SetCommand(&cmd);
CMsgAction msg;
IF_SUC (msg.Create(this->GetID(), 0, 0, this->GetDir(), actionMine))
msg.Send();
}
//--------------------------------------------------------------
BOOL CHero::IsAllEquipmentNonsuch()
{
BOOL bReturn = true;
for (int i=0; i<_MAX_EQUIPMENT; i++)
{
if(!m_pEquipment[i])
{
bReturn = false;
}
else
{
if(!CItem::IsNonsuchItem(m_pEquipment[i]->GetTypeID()))
{
bReturn = false;
}
}
}
return bReturn;
}
//--------------------------------------------------------------
BOOL CHero::SplitItem (OBJID idItem, int nAmount)
{
CItem* pItem = g_objHero.GetItem(idItem);
if(!pItem)
return false;
if(nAmount <= 0)
return false;
if(pItem->GetSort() != ITEMSORT_EXPEND)
return false;
if(pItem->GetAmount() <= nAmount)
return false;
CMsgItem msg;
if(msg.Create(idItem, nAmount, ITEMACT_SPLITITEM))
msg.Send();
return true;
}
//--------------------------------------------------------------
BOOL CHero::CombinItem (OBJID idItemSource, OBJID idItemTarget)
{
/* CItem* pItemSource = g_objHero.GetItem(idItemSource);
CItem* pItemTarget = g_objHero.GetItem(idItemTarget);
if(!pItemSource || !pItemTarget)
return false;
if(pItemSource->GetSort() != ITEMSORT_EXPEND && pItemSource->GetSort() != ITEMSORT_EXPEND)
return false;*/
CMsgItem msg;
if(msg.Create(idItemSource, idItemTarget, ITEMACT_COMBINEITEM))
msg.Send();
return true;
}
//--------------------------------------------------------------
void CHero::IdentItem(OBJID idItem)
{
CItem* pItem = this->GetItem(idItem);
if(pItem && pItem->TestStatus(_ITEM_STATUS_NOT_IDENT))
{
CMsgItem msgItem;
if(msgItem.Create(idItem, 0, ITEMACT_IDENT))
msgItem.Send();
}
else
{
// 只有未鉴定物品才能被鉴定
const OBJID idStr = 100158;
g_objGameMsg.AddMsg(g_objGameDataSet.GetStr(idStr));
}
}
//--------------------------------------------------------------
void CHero::ImproveQuality(OBJID idItem, OBJID idGem)
{
CMsgDataArray msgDataArray;
long id[2];
id[0]= idItem;
id[1]= idGem;
if(msgDataArray.Create(_DATAARRAY_ACTION_UPGRADE_QUALITY,2,id))
msgDataArray.Send();
}
//--------------------------------------------------------------
void CHero::ImproveSoulDegree(OBJID idItem, OBJID idGem)
{
CMsgDataArray msgDataArray;
long id[2];
id[0]= idItem;
id[1]= idGem;
if(msgDataArray.Create(_DATAARRAY_ACTION_UPGRADE_SUPERADDITION,2,id))
msgDataArray.Send();
}
//--------------------------------------------------------------
void CHero::ImproveMagic(OBJID idItem, OBJID idGem)
{
CMsgDataArray msgDataArray;
long id[2];
id[0]= idItem;
id[1]= idGem;
if(msgDataArray.Create(_DATAARRAY_ACTION_EMBEDGEM,2,id))
msgDataArray.Send();
}
//--------------------------------------------------------------
int CHero::GetPackageLimit(int nPackageType)
{
int nLimit = 0;
switch(nPackageType)
{
case PACKAGE_BAG:
nLimit = _MAX_HEROITEM;
break;
case PACKAGE_PET:
nLimit = _MAX_HEROPET;
break;
case PACKAGE_EGG:
nLimit = _MAX_HEROEGG;
break;
case PACKAGE_SOUL:
nLimit = _MAX_HEROITEM;
break;
default:
break;
}
return nLimit;
}
int CHero::GetGhostGemAmount(int nSubType)
{
int nReturn = 0;
int nAmount = this->GetItemAmount(PACKAGE_SOUL) ;
for(int i=0;i<nAmount;i++)
{
CItem* pItem = this->GetItemByIndex(i,PACKAGE_SOUL);
if (pItem!=NULL)
{
if (nSubType/1000*1000 == pItem->GetSubType()/1000*1000)
{
nReturn++;
}
}
}
return nReturn;
}
void CHero::CompletePlayerTaskForItem(OBJID idTask,OBJID idItem)
{
if (idTask)
{
CMsgItem msgItem;
if(msgItem.Create(idTask,idItem,ITEMACT_COMPLETE_TASK))
msgItem.Send();
}
}
//-------------------------------------------------------------------
//拍卖物品
void CHero::AuctionAddItem(OBJID idNpc,OBJID idItem,int dwValue)
{
if (idNpc != ID_NONE && idItem != ID_NONE)
{
CMsgAuction msg;
if (msg.Create(idNpc,idItem,dwValue,AUCTION_ADD))
msg.Send();
}
}
void CHero::AuctionBid(OBJID idNpc,OBJID idItem,int dwValue)
{
if (idNpc !=ID_NONE && idItem !=ID_NONE)
{
CMsgAuction msg;
if (msg.Create(idNpc,idItem,dwValue,AUCTION_BID))
msg.Send();
}
}
void CHero::AuctionItemInfo(OBJID idNpc, OBJID idItem)
{
if (idNpc != ID_NONE && idItem != ID_NONE)
{
CMsgAuction msg;
if (msg.Create(idNpc,idItem,AUCTION_ITEM_INFO))
msg.Send();
}
}
CItem* CHero::GetAuctionItem()
{
//temp code!
if (m_AuctionItem != NULL)
return m_AuctionItem;
else
return NULL;
}
void CHero::SetAuctionItem(CItem* pItem)
{
//temp code!
if (pItem != NULL)
m_AuctionItem = pItem;
}
void CHero::DelAuctionItem ()
{
m_AuctionItemId = 0;
m_AuctionItemMoney = 0; //拍卖价格
strcpy(m_AuctionName,""); //加价人
strcpy(m_AuctionOwnerName,""); //物品主人
SAFE_DELETE(m_AuctionItem); //拍卖物品
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -