本文整理汇总了C++中Slayer::getWearItem方法的典型用法代码示例。如果您正苦于以下问题:C++ Slayer::getWearItem方法的具体用法?C++ Slayer::getWearItem怎么用?C++ Slayer::getWearItem使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Slayer
的用法示例。
在下文中一共展示了Slayer::getWearItem方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: execute
void ActionRedeemMotorcycle::execute (Creature * pCreature1 , Creature* pCreature2)
throw(Error)
{
__BEGIN_TRY
Assert(pCreature1 != NULL);
Assert(pCreature2 != NULL);
Assert(pCreature1->isNPC());
Assert(pCreature2->isPC());
Player* pPlayer = pCreature2->getPlayer();
Assert(pPlayer != NULL);
// 일단 클라이언트를 위해 ok패킷을 하나 날려주고...
GCNPCResponse answerOKpkt;
pPlayer->sendPacket(&answerOKpkt);
// 플레이어가 슬레이어인지 검사한다.
if (pCreature2->isSlayer())
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature2);
Zone* pZone = pSlayer->getZone();
Inventory* pInventory = pSlayer->getInventory();
uint InvenWidth = pInventory->getWidth();
uint InvenHeight = pInventory->getHeight();
Item* pItem = NULL;
Inventory* pBeltInventory = NULL;
uint BeltInvenWidth = 0;
uint BeltInvenHeight = 0;
Item* pBelt = NULL;
pBelt = pSlayer->getWearItem(Slayer::WEAR_BELT);
if(pBelt != NULL)
{
pBeltInventory = ((Belt*)pBelt)->getInventory();
BeltInvenWidth = pBeltInventory->getWidth();
BeltInvenHeight = pBeltInventory->getHeight();
}
// 인벤토리를 검색한다.
for (uint y=0; y<InvenHeight; y++)
{
for (uint x=0; x<InvenWidth; x++)
{
// x, y에 아이템이 있다면...
if (pInventory->hasItem(x, y))
{
pItem = pInventory->getItem(x, y);
if (load(pItem, pSlayer, pZone, pSlayer->getX(), pSlayer->getY()))
{
return;
}
}
}
}
if(pBelt != NULL)
{
// 벨트를 검색한다
for (uint y = 0; y < BeltInvenHeight; y++)
{
for(uint x = 0; x < BeltInvenWidth; x++)
{
if(pBeltInventory->hasItem(x, y))
{
pItem= pBeltInventory->getItem(x, y);
if (load(pItem, pSlayer, pZone, pSlayer->getX(), pSlayer->getY()))
{
return;
}
}
}
}
}
}
else // 뱀파이어라면...오토바이를 찾아줄 이유가 있을까?
{
}
__END_CATCH
}
示例2: execute
void CGAddMouseToQuickSlotHandler::execute (CGAddMouseToQuickSlot* pPacket , Player* pPlayer)
throw(ProtocolException, Error)
{
__BEGIN_TRY __BEGIN_DEBUG_EX
#ifdef __GAME_SERVER__
Assert(pPacket != NULL);
Assert(pPlayer != NULL);
GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);
Creature* pCreature = pGamePlayer->getCreature();
bool Success = false;
if (pCreature->isSlayer())
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);
InventorySlot* pExtraSlot = pSlayer->getExtraInventorySlot();
Item* pItem = pExtraSlot->getItem();
if (pItem == NULL)
{
GCCannotAdd _GCCannotAdd;
_GCCannotAdd.setObjectID(pPacket->getObjectID());
pPlayer->sendPacket(&_GCCannotAdd);
return;
}
ObjectID_t ItemObjectID = pItem->getObjectID();
SlotID_t SlotID = pPacket->getSlotID();
Item::ItemClass IClass = pItem->getItemClass();
// 아이템의 ObjectID가 일치하는지 체크한다.
if (ItemObjectID != pPacket->getObjectID())
{
GCCannotAdd _GCCannotAdd;
_GCCannotAdd.setObjectID(pPacket->getObjectID());
pPlayer->sendPacket(&_GCCannotAdd);
return;
}
// 벨트를 입고 있지 않다면 벨트에다 아이템을 더할 수가 없다.
if (!pSlayer->isWear(Slayer::WEAR_BELT))
{
GCCannotAdd _GCCannotAdd;
_GCCannotAdd.setObjectID(pPacket->getObjectID());
pPlayer->sendPacket(&_GCCannotAdd);
return;
}
// 포션도 아니고, 탄창도 아니라면 더할 수가 없지.
if (IClass != Item::ITEM_CLASS_POTION && IClass != Item::ITEM_CLASS_MAGAZINE && IClass != Item::ITEM_CLASS_EVENT_ETC && IClass != Item::ITEM_CLASS_KEY)
{
GCCannotAdd _GCCannotAdd;
_GCCannotAdd.setObjectID(pPacket->getObjectID());
pPlayer->sendPacket(&_GCCannotAdd);
return;
}
if (IClass == Item::ITEM_CLASS_EVENT_ETC && pItem->getItemType() < 14 )
{
GCCannotAdd _GCCannotAdd;
_GCCannotAdd.setObjectID(pPacket->getObjectID());
pPlayer->sendPacket(&_GCCannotAdd);
return;
}
Item* pBelt = pSlayer->getWearItem(Slayer::WEAR_BELT);
Inventory* pBeltInventory = ((Belt*)pBelt)->getInventory();
if (pBeltInventory->canAdding(SlotID, 0, pItem))
{
// 현재 벨트에 있는 Item을 받아온다.
Item* pPrevItem = pBeltInventory->getItem(SlotID, 0);
// 지정한 자리에 아이템이 있다면...
if (pPrevItem != NULL)
{
// 아이템이 완전히 같은 아이템이라면...
if (isStackable(pItem) && isSameItem(pItem, pPrevItem))
{
int MaxStack = ItemMaxStack[pItem->getItemClass()];
if (pItem->getNum() + pPrevItem->getNum() > MaxStack)
{
ItemNum_t CurrentNum = pPrevItem->getNum();
ItemNum_t AddNum = pItem->getNum();
ItemNum_t NewNum = AddNum + CurrentNum - MaxStack;
pPrevItem->setNum(MaxStack);
pItem->setNum(NewNum);
pBeltInventory->increaseNum(MaxStack - CurrentNum);
pBeltInventory->increaseWeight(pItem->getWeight()* (MaxStack - CurrentNum));
//pPrevItem->save(pSlayer->getName(), STORAGE_BELT, pBelt->getItemID(), SlotID, 0);
// item저장 최적화. by sigi. 2002.5.13
char pField[80];
sprintf(pField, "Num=%d, Storage=%d, StorageID=%lu, X=%d", MaxStack, STORAGE_BELT, pBelt->getItemID(), SlotID);
pPrevItem->tinysave(pField);
//pItem->save(pSlayer->getName(), STORAGE_EXTRASLOT, 0, 0, 0);
// item저장 최적화. by sigi. 2002.5.13
//.........这里部分代码省略.........
示例3: execute
void ActionSearchMotorcycle::execute (Creature * pCreature1 , Creature* pCreature2)
throw(Error)
{
__BEGIN_TRY
Assert(pCreature1 != NULL);
Assert(pCreature2 != NULL);
Assert(pCreature1->isNPC());
Assert(pCreature2->isPC());
Player* pPlayer = pCreature2->getPlayer();
Assert(pPlayer != NULL);
// 일단 클라이언트를 위해 ok패킷을 하나 날려주고...
GCNPCResponse answerOKpkt;
pPlayer->sendPacket(&answerOKpkt);
// 플레이어가 슬레이어인지 검사한다.
if (pCreature2->isSlayer())
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature2);
Inventory* pInventory = pSlayer->getInventory();
uint InvenWidth = pInventory->getWidth();
uint InvenHeight = pInventory->getHeight();
Item* pItem = NULL;
uint motorZoneID = 0;
uint motorX = 0;
uint motorY = 0;
Inventory* pBeltInventory = NULL;
uint BeltInvenWidth = 0;
uint BeltInvenHeight = 0;
Item* pBelt = NULL;
pBelt = pSlayer->getWearItem(Slayer::WEAR_BELT);
if(pBelt != NULL)
{
pBeltInventory = ((Belt*)pBelt)->getInventory();
BeltInvenWidth = pBeltInventory->getWidth();
BeltInvenHeight = pBeltInventory->getHeight();
}
// 인벤토리를 검색한다.
for (uint y=0; y<InvenHeight; y++)
{
for (uint x=0; x<InvenWidth; x++)
{
// x, y에 아이템이 있다면...
if (pInventory->hasItem(x, y))
{
pItem = pInventory->getItem(x, y);
if (search(pItem, motorZoneID, motorX, motorY))
{
GCSearchMotorcycleOK okpkt;
okpkt.setZoneID(motorZoneID);
okpkt.setX(motorX);
okpkt.setY(motorY);
pPlayer->sendPacket(&okpkt);
return;
}
}
}
}
if(pBelt != NULL)
{
// 인벤토리를 검색한다.
for (uint y=0; y<BeltInvenHeight; y++)
{
for (uint x=0; x<BeltInvenWidth; x++)
{
// x, y에 아이템이 있다면...
if (pBeltInventory->hasItem(x, y))
{
pItem = pBeltInventory->getItem(x, y);
if (search(pItem, motorZoneID, motorX, motorY))
{
GCSearchMotorcycleOK okpkt;
okpkt.setZoneID(motorZoneID);
okpkt.setX(motorX);
okpkt.setY(motorY);
pPlayer->sendPacket(&okpkt);
return;
}
}
}
}
}
}
else // 뱀파이어라면...오토바이를 찾아줄 이유가 있을까?
{
}
GCSearchMotorcycleFail failpkt;
pPlayer->sendPacket(&failpkt);
__END_CATCH
}
示例4: executeAll
//////////////////////////////////////////////////////////////////////////////
// 모든 아이템 수리하기
//////////////////////////////////////////////////////////////////////////////
void CGRequestRepairHandler::executeAll(CGRequestRepair* pPacket , Player* pPlayer)
throw(ProtocolException , Error)
{
__BEGIN_TRY __BEGIN_DEBUG_EX
#ifdef __GAME_SERVER__
Creature* pPC = dynamic_cast<GamePlayer*>(pPlayer)->getCreature();
Price_t repairPrice = 0;
GCNPCResponse response;
bool bSendRealWearingInfo = false;
if (pPC->isSlayer())
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);
// 모든 아이템을 합한 수리비를 계산한다.
for (int i=0; i<Slayer::WEAR_MAX; i++)
{
Item* pItem = pSlayer->getWearItem((Slayer::WearPart)i);
if (pItem != NULL)
{
if (i == Slayer::WEAR_RIGHTHAND && isTwohandWeapon(pItem))
{
// 오른손이고, 현재 들고 있는 무기가 양손 무기라면...
// 수리 가격에 포함시킬 필요가 없다.
}
else
{
repairPrice += g_pPriceManager->getRepairPrice(pItem);
}
}
}
// 돈이 모자라다면 리턴한다.
if (pSlayer->getGold() < repairPrice)
{
response.setCode(NPC_RESPONSE_REPAIR_FAIL_MONEY);
pPlayer->sendPacket(&response);
return;
}
// 각각의 아이템을 수리하고, DB에 저장한다.
char pField[80];
for (int i=0; i<Slayer::WEAR_MAX; i++)
{
Item* pItem = pSlayer->getWearItem((Slayer::WearPart)i);
if (pItem != NULL)
{
if (i == Slayer::WEAR_RIGHTHAND && isTwohandWeapon(pItem))
{
// 오른손이고, 현재 들고 있는 무기가 양손 무기라면...
// 수리할 필요가 없다.
}
else if (isRepairableItem(pItem ) )
{
Durability_t oldDurability = pItem->getDurability();
repairItem(pItem);
if (pItem->getDurability() != oldDurability)
{
// DB 쿼리를 줄이기 위해서
// 내구도의 변화가 생긴 경우에만 세이브한다.
//pItem->save(pSlayer->getName(), STORAGE_GEAR, 0, i, 0);
// item저장 최적화. by sigi. 2002.5.13
sprintf(pField, "Durability=%d", pItem->getDurability());
pItem->tinysave(pField);
}
if (oldDurability == 0 )
bSendRealWearingInfo = true;
}
}
}
// 돈을 줄이고...
//pSlayer->setGoldEx(pSlayer->getGold() - repairPrice);
// by sigi.2002.9.4
pSlayer->decreaseGoldEx(repairPrice);
// 로그를 남긴다.
//log(LOG_REPAIR_ITEM, pSlayer->getName(), "", "ALL");
// OK 패킷을 날려준다.
response.setCode(NPC_RESPONSE_REPAIR_OK);
response.setParameter(pSlayer->getGold());
pPlayer->sendPacket(&response);
}
else if (pPC->isVampire())
{
Vampire* pVampire = dynamic_cast<Vampire*>(pPC);
// 모든 아이템을 합한 수리비를 계산한다.
for (int i=0; i<Vampire::VAMPIRE_WEAR_MAX; i++)
{
//.........这里部分代码省略.........