本文整理汇总了C++中Zone::deleteCreature方法的典型用法代码示例。如果您正苦于以下问题:C++ Zone::deleteCreature方法的具体用法?C++ Zone::deleteCreature怎么用?C++ Zone::deleteCreature使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zone
的用法示例。
在下文中一共展示了Zone::deleteCreature方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: execute
//.........这里部分代码省略.........
if (g_pResurrectLocationManager->getSlayerPosition(pSlayer->getZone()->getZoneID(), ResurrectCoord))
{
ZoneID = ResurrectCoord.id;
ZoneX = ResurrectCoord.x;
ZoneY = ResurrectCoord.y;
}
else
{
throw Error("Critical Error: ResurrectInfo is not established");
}
}
char pField[80];
sprintf(pField, "ZoneID=%d, XCoord=%d, YCoord=%d, CurrentHP=HP", ZoneID, ZoneX, ZoneY);
pSlayer->tinysave(pField);
}
else if(pCreature->isVampire())
{
Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);
Assert(pVampire != NULL);
if (g_pResurrectLocationManager->getVampirePosition(pVampire->getResurrectZoneID(), ResurrectCoord))
{
ZoneID = ResurrectCoord.id;
ZoneX = ResurrectCoord.x;
ZoneY = ResurrectCoord.y;
}
else
{
if (g_pResurrectLocationManager->getVampirePosition(pVampire->getZone()->getZoneID(), ResurrectCoord))
{
ZoneID = ResurrectCoord.id;
ZoneX = ResurrectCoord.x;
ZoneY = ResurrectCoord.y;
}
else
{
throw Error("Critical Error: ResurrectInfo is not established");
}
}
// 이제 정보를 저장한다.
char pField[80];
sprintf(pField, "ZoneID=%d, XCoord=%d, YCoord=%d, CurrentHP=HP", ZoneID, ZoneX, ZoneY);
pVampire->tinysave(pField);
}
*/
}
//
// 이제, 존에서 PC를 삭제한다.
//
// *CAUTION*
//
// pCreature의 좌표가 실제로 pCreature가 존재하는 타일의 좌표와 같아야 한다.
// 따라서, 이 메쏘드를 호출하기 전에 좌표를 잘 바꿔놔야 한당..
//
pZone->deleteCreature(pCreature , pCreature->getX() , pCreature->getY());
////cout << "PC deleted from Zone >> ";
// 존그룹의 ZPM에서 플레이어를 삭제한다.
// ZonePlayerManager의 ProcessCommand 안에서 지우는 것이므로 반드시 NoBlocked 으로 지워야 한다.
pZone->getZoneGroup()->getZonePlayerManager()->deletePlayer(pGamePlayer->getSocket()->getSOCKET());
// IPM으로 플레이어를 옮긴다.
//g_pIncomingPlayerManager->pushPlayer(pGamePlayer);
// Core의 구조를 바꾸면서 쓰레드로 부터 독립적으로 행하기 위하여 뒤에 한꺼번에 처리하기 위해서
// OutList로 넣는다.
pZone->getZoneGroup()->getZonePlayerManager()->pushOutPlayer(pGamePlayer);
////cout << "Move PC to IPM >> ";
}
catch (NoSuchElementException & nsee)
{
throw DisconnectException();
}
// 로그인 서버로 GLIncomingConnection을 보낸다.
// PlayerName과 ClientIP를 같이 실어서 보낸다.
/*
GLIncomingConnection glIncomingConnection;
glIncomingConnection.setPlayerID(pGamePlayer->getID());
glIncomingConnection.setClientIP(pGamePlayer->getSocket()->getHost());
if (g_pConfig->getProperty("User") == "excel96")
g_pLoginServerManager->sendPacket("211.117.52.12" , g_pConfig->getPropertyInt("LoginServerUDPPort"), &glIncomingConnection);
else if (g_pConfig->getProperty("User") == "elcastle")
g_pLoginServerManager->sendPacket("211.117.52.12" , g_pConfig->getPropertyInt("LoginServerUDPPort"), &glIncomingConnection);
else if (g_pConfig->getProperty("User") == "elca")
g_pLoginServerManager->sendPacket("211.117.52.12" , g_pConfig->getPropertyInt("LoginServerUDPPort"), &glIncomingConnection);
*/
pGamePlayer->setPlayerStatus(GPS_AFTER_SENDING_GL_INCOMING_CONNECTION);
#endif
__END_DEBUG_EX __END_CATCH
}
示例2: execute
void CGTameMonsterHandler::execute (CGTameMonster* pPacket , Player* pPlayer)
throw(Error)
{
__BEGIN_TRY
#ifdef __GAME_SERVER__
GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);
Assert(pGamePlayer != NULL);
PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pGamePlayer->getCreature());
Assert(pPC != NULL);
Zone* pZone = pPC->getZone();
Assert(pZone != NULL);
Monster* pMonster = dynamic_cast<Monster*>(pZone->getCreature(pPacket->getObjectID() ));
if (pMonster == NULL ) return;
Item* pItem = pPC->getExtraInventorySlotItem();
if (pItem == NULL || pItem->getItemClass() != Item::ITEM_CLASS_PET_FOOD || pItem->getNum() != 1 ) return;
PetFoodInfo* pPetFoodInfo = dynamic_cast<PetFoodInfo*>(g_pPetFoodInfoManager->getItemInfo(pItem->getItemType() ));
Assert(pPetFoodInfo != NULL);
Inventory* pInventory = pPC->getInventory();
if (pInventory == NULL ) return;
ItemType_t petType = PET_COMMON;
PetItem* pPetItem = dynamic_cast<PetItem*>(g_pItemFactoryManager->createItem(Item::ITEM_CLASS_PET_ITEM, petType, list<OptionType_t>() ));
Assert(pPetItem != NULL);
_TPOINT pt;
if (!pInventory->getEmptySlot(pPetItem, pt ) )
{
GCCannotUse gcCannotUse;
pGamePlayer->sendPacket(&gcCannotUse);
SAFE_DELETE(pPetItem);
return;
}
pPC->deleteItemFromExtraInventorySlot();
GCDeleteInventoryItem gcDI;
gcDI.setObjectID(pItem->getObjectID());
pGamePlayer->sendPacket(&gcDI);
pItem->destroy();
SAFE_DELETE(pItem);
/*
* 여기서 뭔가 확인을 해야 한다.
*/
int ratio = rand()%100;
if (g_pVariableManager->getVariable(PET_DAY_EVENT) != 0 )
{
ratio = 100;
}
// 공용 펫만 꼬실 수 있다.
PetTypeInfo* pPetTypeInfo = PetTypeInfoManager::getInstance()->getPetTypeInfo(petType);
if (pPetTypeInfo == NULL || pPetTypeInfo->getOriginalMonsterType() != pMonster->getMonsterType() || ratio >= pPetFoodInfo->getTameRatio() )
{
//cout << "꼬시기 실패 : " << ratio << endl;
SAFE_DELETE(pPetItem);
pMonster->addEnemy(pPC);
return;
}
pZone->deleteCreature(pMonster, pMonster->getX(), pMonster->getY());
SAFE_DELETE(pMonster);
/*
* 여기서 해당 펫의 정보를 가져와야 된다.
*/
PetInfo* pPetInfo = new PetInfo;
pPetInfo->setPetType(petType);
pPetInfo->setPetLevel(0);
pPetInfo->setPetCreatureType(pPetTypeInfo->getPetCreatureType(0));
pPetInfo->setPetAttr(0xff);
pPetInfo->setPetExp(0);
pPetInfo->setPetAttrLevel(0);
pPetInfo->setFoodType(pPetFoodInfo->getItemType());
pPetInfo->setGamble(0);
pPetInfo->setCutHead(0);
pPetInfo->setPetHP(pPetFoodInfo->getPetHP());
pPetInfo->setFeedTime(VSDateTime::currentDateTime());
// 양방향 링크
pPetItem->setPetInfo(pPetInfo);
pPetInfo->setPetItem(pPetItem);
pZone->registerObject(pPetItem);
pInventory->addItem(pPetItem, pt);
Assert(pt.x != -1);
pPetItem->create(pPC->getName(), STORAGE_INVENTORY, 0, pt.x, pt.y);
//.........这里部分代码省略.........