本文整理汇总了C++中PlayerCreature::isVampire方法的典型用法代码示例。如果您正苦于以下问题:C++ PlayerCreature::isVampire方法的具体用法?C++ PlayerCreature::isVampire怎么用?C++ PlayerCreature::isVampire使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PlayerCreature
的用法示例。
在下文中一共展示了PlayerCreature::isVampire方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: killPC
void DynamicZoneSlayerMirrorOfAbyss::killPC()
{
Assert(m_pZone != NULL);
// PC 를 죽인다.
map<ObjectID_t, Creature*>::const_iterator itr = m_pZone->getPCManager()->getCreatures().begin();
map<ObjectID_t, Creature*>::const_iterator endItr = m_pZone->getPCManager()->getCreatures().end();
for (; itr != endItr; ++itr )
{
Assert(itr->second != NULL);
if (itr->second->isPC() )
{
PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(itr->second);
Assert(pPC != NULL);
if (pPC->isSlayer() )
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);
Assert(pSlayer != NULL);
pSlayer->setHP(0);
}
else if (pPC->isVampire() )
{
Vampire* pVampire = dynamic_cast<Vampire*>(pPC);
Assert(pVampire != NULL);
pVampire->setHP(0);
}
else if (pPC->isOusters() )
{
Ousters* pOusters = dynamic_cast<Ousters*>(pPC);
Assert(pOusters != NULL);
pOusters->setHP(0);
}
}
}
}
示例2: execute
////////////////////////////////////////////////////////////////////////////////
// 액션을 실행한다.
////////////////////////////////////////////////////////////////////////////////
void ActionTradeGiftBox::execute(Creature * pCreature1 , Creature * pCreature2)
throw(Error)
{
__BEGIN_TRY
Assert(pCreature1 != NULL);
Assert(pCreature2 != NULL);
Assert(pCreature1->isNPC());
Assert(pCreature2->isPC());
PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature2);
Assert(pPC != NULL);
Player* pPlayer = pPC->getPlayer();
Assert(pPlayer != NULL);
Inventory* pInventory = pPC->getInventory();
Assert(pInventory != NULL);
Zone* pZone = pPC->getZone();
Assert(pZone != NULL);
FlagSet* pFlagSet = pPC->getFlagSet();
Item::ItemClass ItemClass;
ItemType_t ItemType;
OptionType_t OptionType;
Item* pItem;
Item* pGiftBoxItem;
// 이미 선물을 교환해 갔다면
if (pFlagSet->isOn(FLAGSET_TRADE_GIFT_BOX_2002_12 ) )
{
GCNPCResponse response;
response.setCode(NPC_RESPONSE_TRADE_GIFT_BOX_ALREADY_TRADE);
pPlayer->sendPacket(&response);
GCNPCResponse quit;
quit.setCode(NPC_RESPONSE_QUIT_DIALOGUE);
pPlayer->sendPacket(&quit);
return;
}
// 빨간 선물 상자가 있는지 확인한다.
CoordInven_t X,Y;
pGiftBoxItem = pInventory->findItem(Item::ITEM_CLASS_EVENT_GIFT_BOX, 1, X, Y);
if (pGiftBoxItem == NULL )
{
GCNPCResponse response;
response.setCode(NPC_RESPONSE_TRADE_GIFT_BOX_NO_ITEM);
pPlayer->sendPacket(&response);
GCNPCResponse quit;
quit.setCode(NPC_RESPONSE_QUIT_DIALOGUE);
pPlayer->sendPacket(&quit);
return;
}
LuaSelectItem* pLuaSelectItem = NULL;
string luaFileName;
if (pPC->isSlayer() )
{
// 루아에 슬레이어 능력치의 합을 set한다.
Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);
Assert(pSlayer != NULL);
Attr_t sum = pSlayer->getSTR(ATTR_BASIC )
+ pSlayer->getDEX(ATTR_BASIC )
+ pSlayer->getINT(ATTR_BASIC);
m_pLuaSlayerItem->setSum(sum);
pLuaSelectItem = m_pLuaSlayerItem;
luaFileName = m_SlayerFilename;
}
else if (pPC->isVampire() )
{
// 루아에 뱀파이어의 레벨을 set한다.
Vampire* pVampire = dynamic_cast<Vampire*>(pPC);
Assert(pVampire != NULL);
int level = pVampire->getLevel();
m_pLuaVampireItem->setLevel(level);
pLuaSelectItem = m_pLuaVampireItem;
luaFileName = m_VampireFilename;
}
//--------------------------------------------------------
// 속도 체크를 위해서 1000번 돌려보는 코드
// 결과는.. 0.07초 정도 나왔다. 감덩~ -_-;
/*
Timeval beforeTime;
getCurrentTime(beforeTime);
//.........这里部分代码省略.........
示例3: execute
//////////////////////////////////////////////////////////////////////////////
// 클라이언트가 CGLogout 패킷을 보내면, 게임 서버는 크리처를 존에서 삭제하고,
// 크리처와 아이템 정보를 DB에 저장한 후, 접속을 종료한다.
//////////////////////////////////////////////////////////////////////////////
void CGLogoutHandler::execute (CGLogout* pPacket , Player* pPlayer)
throw(ProtocolException , Error)
{
__BEGIN_TRY __BEGIN_DEBUG_EX
#ifdef __GAME_SERVER__
// Assert(pPacket != NULL);
Assert(pPlayer != NULL);
// 새로그인 구조에서는 Logout을 하면 대기 상태로 나가야 한다.
// Logout 패킷을 받으면 플레이어를 IncomingPlayerManager로 보낸다.
GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);
//cout << "CGLogoutHandler: " << pGamePlayer->getID() << endl;
Creature* pCreature = pGamePlayer->getCreature();
Assert(pCreature != NULL);
Zone* pZone = pCreature->getZone();
Assert(pZone != NULL);
// 나는 나간다 라고 로그를 남긴다.
pGamePlayer->logLoginoutDateTime();
try
{
// 로그아웃할때 성물, 피의 성서 조각을 떨어뜨린다.
// bool bSendPacket = false;
// dropRelicToZone(pCreature, bSendPacket);
if (pCreature->isPLAYER() && g_pPKZoneInfoManager->isPKZone(pCreature->getZoneID() ) )
{
g_pPKZoneInfoManager->leavePKZone(pCreature->getZoneID());
}
if (g_pConfig->hasKey("Hardcore") && g_pConfig->getPropertyInt("Hardcore")!=0 && pPacket==NULL )
{
}
else
{
// 크리처의 정보를 저장한다.
pCreature->save();
if (pCreature->isSlayer() )
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pCreature);
pSlayer->tinysave("LastPlayDate=now()");
}
else if (pCreature->isVampire() )
{
Vampire* pVampire = dynamic_cast<Vampire*>(pCreature);
pVampire->tinysave("LastPlayDate=now()");
}
else if (pCreature->isOusters() )
{
Ousters* pOusters = dynamic_cast<Ousters*>(pCreature);
pOusters->tinysave("LastPlayDate=now()");
}
//////////////////////////////////////////////////////////////
// 플레이어가 COMA상태(현재 죽은 상태)라면 로그아웃시 자동으로
// 부활위치로 캐릭터를 이동시킨다.
// Login/Logout의 반복으로 부활기술을 사용하지 못하게 함
//
// Creature의 정보를 먼저 DB에 업데이트한 후 새로 업데이트를 한다.
//////////////////////////////////////////////////////////////
// 이터니티를 한번 쓴 상태로 로그아웃하면 부활 위치로 날라간다.
if (pCreature->isFlag(Effect::EFFECT_CLASS_COMA) || pCreature->isFlag(Effect::EFFECT_CLASS_ETERNITY))
{
//cout << "COMA 상태에서 로그아웃했음" << endl;
ZoneID_t ZoneID = 0;
ZoneCoord_t ZoneX = 0;
ZoneCoord_t ZoneY = 0;
ZONE_COORD ResurrectCoord;
if (pCreature->isPC() )
{
PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);
g_pResurrectLocationManager->getPosition(pPC, ResurrectCoord);
ZoneID = ResurrectCoord.id;
ZoneX = ResurrectCoord.x;
ZoneY = ResurrectCoord.y;
char pField[80];
sprintf(pField, "ZoneID=%d, XCoord=%d, YCoord=%d, CurrentHP=HP", ZoneID, ZoneX, ZoneY);
if (pPC->isSlayer() )
{
//.........这里部分代码省略.........
示例4: executeNormal
//.........这里部分代码省略.........
// 걸어다니는 크리쳐를 검색
if (tile.hasCreature(Creature::MOVE_MODE_WALKING))
{
pNearCreature = tile.getCreature(Creature::MOVE_MODE_WALKING);
if (pNearCreature == NULL) continue;
// 방금 물건을 판 플레이어라면 생략
if (pNearCreature->getObjectID() == pPC->getObjectID()) continue;
// 만약 플레이어라면 패킷을 보내준다.
if (pNearCreature->isPC())
{
pNearPlayer = pNearCreature->getPlayer();
if (pNearPlayer == NULL) continue;
pNearPlayer->sendPacket(&boughtpkt);
}
}
// 날아다니는 크리쳐를 검색
if (tile.hasCreature(Creature::MOVE_MODE_FLYING))
{
pNearCreature = tile.getCreature(Creature::MOVE_MODE_FLYING);
if (pNearCreature == NULL) continue;
// 방금 물건을 판 플레이어라면 생략
if (pNearCreature->getObjectID() == pPC->getObjectID()) continue;
// 만약 플레이어라면 패킷을 보내준다.
if (pNearCreature->isPC())
{
pNearPlayer = pNearCreature->getPlayer();
if (pNearPlayer == NULL) continue;
pNearPlayer->sendPacket(&boughtpkt);
}
}
} // end of for (ZoneCoord_t zy=CenterY-5; zy<=CenterY+5; zy++)
} // end of for (ZoneCoord_t zx=CenterX-5; zx<=CenterX+5; zx++)
}
catch (Throwable & t)
{
filelog("shopbug_packet.log", "%s", t.toString().c_str());
}
} // if (index < SHOP_RACK_INDEX_MAX)
else
{
SAFE_DELETE(pItem);
}
} // if (pItem->getOptionType() != 0)
else
{
bSpecialItem = false;
SAFE_DELETE(pItem);
}
// 물건을 산 플레이어에게 GCShopSellOK를...보낸다.
GCShopSellOK okpkt;
okpkt.setObjectID(NPCID);
if (bSpecialItem) okpkt.setShopVersion(pNPC->getShopVersion(SHOP_RACK_SPECIAL));
else okpkt.setShopVersion(pNPC->getShopVersion(SHOP_RACK_NORMAL));
okpkt.setItemObjectID(ITEMOID);
//okpkt.setPrice(playerMoney+itemPrice);
// playerMoney + itemPrice 가 MAX_MONEY를 넘어갈 수 있다.
// 2003.1.8 by bezz
okpkt.setPrice(pPC->getGold());
pPlayer->sendPacket(&okpkt);
if (bClearDefaultOptionTypes )
{
pPC->clearDefaultOptionTypes();
pPC->initAllStatAndSend();
if (pPC->isSlayer() )
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);
Assert(pSlayer != NULL);
pSlayer->sendRealWearingInfo();
}
else if (pPC->isVampire() )
{
Vampire* pVampire = dynamic_cast<Vampire*>(pPC);
Assert(pVampire != NULL);
pVampire->sendRealWearingInfo();
}
else if (pPC->isOusters() )
{
Ousters* pOusters = dynamic_cast<Ousters*>(pPC);
Assert(pOusters != NULL);
pOusters->sendRealWearingInfo();
}
}
#endif
__END_DEBUG_EX __END_CATCH
}
示例5: execute
//.........这里部分代码省略.........
zoneID = 1411;
X = 125;
Y = 58;
}
bool bTransport = true;
#if defined(__PAY_SYSTEM_ZONE__) || defined(__PAY_SYSTEM_FREE_LIMIT__)
try {
ZoneInfo* pZoneInfo = g_pZoneInfoManager->getZoneInfo(zoneID);
// 유료존인데 유료사용자가 아니면...
if (pZoneInfo==NULL
|| pZoneInfo->isPayPlay() && !pGamePlayer->isPayPlaying())
{
string connectIP = pGamePlayer->getSocket()->getHost();
// 유료 서비스 사용이 가능한가?
if (pGamePlayer->loginPayPlay(connectIP, pGamePlayer->getID()))
{
sendPayInfo(pGamePlayer);
}
else
{
// 유료 서비스 사용 불가인 경우
GCSystemMessage gcSystemMessage;
if (g_pConfig->getPropertyInt("IsNetMarble")==0)
{
gcSystemMessage.setMessage(g_pStringPool->getString(STRID_CANNOT_ENTER_PAY_ZONE ));
}
else
{
gcSystemMessage.setMessage(g_pStringPool->getString(STRID_CANNOT_ENTER ));
}
pGamePlayer->sendPacket (&gcSystemMessage);
bTransport = false;
return;
}
}
} catch (NoSuchElementException&) {
}
#endif
if (bTransport)
{
if (pPC->isSlayer() )
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);
Assert(pSlayer != NULL);
// 오토바이를 타고 있으면 오토바이에서 내린다.
if (pSlayer->hasRideMotorcycle() )
{
pSlayer->getOffMotorcycle();
}
}
if (pPC->isOusters() )
{
Ousters* pOusters = dynamic_cast<Ousters*>(pPC);
Assert(pOusters != NULL);
// 실프 타고 있으면 내려준다
if (pOusters->isFlag(Effect::EFFECT_CLASS_SUMMON_SYLPH) )
{
Effect* pEffect = pOusters->findEffect(Effect::EFFECT_CLASS_SUMMON_SYLPH);
if (pEffect != NULL ) pEffect->setDeadline(0);
}
}
if (pPC->isVampire() )
{
Vampire* pVampire = dynamic_cast<Vampire*>(pPC);
Assert(pVampire != NULL);
if (pVampire->isFlag(Effect::EFFECT_CLASS_TRANSFORM_TO_BAT) )
{
addUntransformCreature(pVampire->getZone(), pVampire, true);
}
}
Effect* pEffect = pPC->findEffect(Effect::EFFECT_CLASS_CAN_ENTER_GDR_LAIR);
if (pEffect != NULL ) pEffect->setDeadline(0);
transportCreature(pCreature, zoneID, X, Y, true);
}
else
{
GCSystemMessage gcSystemMessage;
gcSystemMessage.setMessage(g_pStringPool->getString(STRID_CANNOT_ENTER ));
pGamePlayer->sendPacket (&gcSystemMessage);
}
__END_DEBUG
__END_CATCH
}
示例6: execute
//.........这里部分代码省略.........
if (pPC->isSlayer() )
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);
QuestGrade_t qGrade = pSlayer->getTotalAttr(ATTR_BASIC);
iClass = Item::ITEM_CLASS_RING;
if (qGrade < 131 )
{
iType = 1;
makeOptionList(options1[ rand()%5 ], oList);
}
else if (qGrade < 211 )
{
iType = 2;
makeOptionList(options1[ rand()%5 ], oList);
}
else if (qGrade < 271 )
{
iType = 3;
makeOptionList(options2[ rand()%5 ], oList);
}
else if (qGrade < 300 )
{
iType = 4;
makeOptionList(options2[ rand()%5 ], oList);
}
else
{
iType = 5;
makeOptionList(options2[ rand()%5 ], oList);
}
}
else if (pPC->isVampire() )
{
Vampire* pVampire = dynamic_cast<Vampire*>(pPC);
Level_t level = pVampire->getLevel();
iClass = Item::ITEM_CLASS_VAMPIRE_RING;
if (level < 31 )
{
iType = 1;
makeOptionList(options1[ rand()%5 ], oList);
}
else if (level < 51 )
{
iType = 2;
makeOptionList(options1[ rand()%5 ], oList);
}
else if (level < 71 )
{
iType = 3;
makeOptionList(options2[ rand()%5 ], oList);
}
else if (level < 91 )
{
iType = 4;
makeOptionList(options2[ rand()%5 ], oList);
}
else
{
iType = 5;
makeOptionList(options2[ rand()%5 ], oList);
}
}
示例7: execute
////////////////////////////////////////////////////////////////////////////////
// 액션을 실행한다.
////////////////////////////////////////////////////////////////////////////////
void ActionGiveAccountEventItem::execute(Creature * pCreature1 , Creature * pCreature2)
throw(Error)
{
__BEGIN_TRY
Assert(pCreature1 != NULL);
Assert(pCreature2 != NULL);
Assert(pCreature1->isNPC());
Assert(pCreature2->isPC());
PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature2);
Assert(pPC != NULL);
Player* pPlayer = pPC->getPlayer();
Assert(pPlayer != NULL);
GamePlayer* pGamePlayer = dynamic_cast<GamePlayer*>(pPlayer);
Assert(pGamePlayer != NULL);
Inventory* pInventory = pPC->getInventory();
Assert(pInventory != NULL);
Zone* pZone = pPC->getZone();
Assert(pZone != NULL);
Item::ItemClass ItemClass;
ItemType_t ItemType;
OptionType_t OptionType;
OptionType_t OptionType2;
Item* pItem;
// 이벤트가 진행중이지 않은 경우
if (!g_pVariableManager->isActiveGiveEventItem())
{
GCNPCResponse response;
response.setCode(NPC_RESPONSE_GIVE_EVENT_ITEM_FAIL_NOW);
pPlayer->sendPacket(&response);
GCNPCResponse quit;
quit.setCode(NPC_RESPONSE_QUIT_DIALOGUE);
pPlayer->sendPacket(&quit);
return;
}
// 이미 받았는지 체크한다.
if (pGamePlayer->getSpecialEventCount() & m_SpecialEventFlag)
{
GCNPCResponse response;
response.setCode(NPC_RESPONSE_GIVE_EVENT_ITEM_FAIL);
pPlayer->sendPacket(&response);
GCNPCResponse quit;
quit.setCode(NPC_RESPONSE_QUIT_DIALOGUE);
pPlayer->sendPacket(&quit);
return;
}
// 유료 사용자 여부를 체크한다.
if (!PaySystem::isPayPlayingPeriodPersonal(pGamePlayer->getID() ) )
{
GCNPCResponse response;
response.setCode(NPC_RESPONSE_GIVE_PREMIUM_USER_ONLY);
pPlayer->sendPacket(&response);
GCNPCResponse quit;
quit.setCode(NPC_RESPONSE_QUIT_DIALOGUE);
pPlayer->sendPacket(&quit);
return;
}
LuaSelectItem* pLuaSelectItem = NULL;
string luaFileName;
if (pPC->isSlayer() )
{
// 루아에 슬레이어 능력치의 합을 set한다.
Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);
Assert(pSlayer != NULL);
Attr_t sum = pSlayer->getSTR(ATTR_BASIC )
+ pSlayer->getDEX(ATTR_BASIC )
+ pSlayer->getINT(ATTR_BASIC);
m_pLuaSlayerItem->setSum(sum);
pLuaSelectItem = m_pLuaSlayerItem;
luaFileName = m_SlayerFilename;
}
else if (pPC->isVampire() )
{
// 루아에 뱀파이어의 레벨을 set한다.
Vampire* pVampire = dynamic_cast<Vampire*>(pPC);
Assert(pVampire != NULL);
//.........这里部分代码省略.........
示例8: execute
//----------------------------------------------------------------------
//
// SGDeleteGuildOKHandler::execute()
//
//----------------------------------------------------------------------
void SGDeleteGuildOKHandler::execute (SGDeleteGuildOK* pPacket )
throw(ProtocolException , Error )
{
__BEGIN_TRY
#ifdef __GAME_SERVER__
// 길드 아지트에 있는 멤버를 warp 시킨다.
// 길드 아지트를 삭제한다.
// 멤버 warp와 길드 아지트 삭제 시 다른 쓰레드에서 ZoneGroup Thread 내부에서 일어나게 해야 별탈이 없을 듯 하다.
// 일단은 걍 둔다. Portal 이 막히므로 다시 들어갈 수 없을 것이다.
Assert(pPacket != NULL);
// 길드를 가져온다.
Guild* pGuild = g_pGuildManager->getGuild(pPacket->getGuildID());
try { Assert(pGuild != NULL); } catch (Throwable& ) { return; }
// 길드 활동 중인 상태에서의 해체인지 대기 중인 상태에서의 해체인지 구별한다.
if (pGuild->getState() == Guild::GUILD_STATE_ACTIVE )
{
HashMapGuildMember& Members = pGuild->getMembers();
HashMapGuildMemberItor itr = Members.begin();
for (; itr != Members.end(); itr++ )
{
GuildMember* pGuildMember = itr->second;
// 접속해 있으면
__ENTER_CRITICAL_SECTION((*g_pPCFinder))
Creature* pCreature = g_pPCFinder->getCreature_LOCKED(pGuildMember->getName());
if (pCreature != NULL && pCreature->isPC() )
{
Player* pPlayer = pCreature->getPlayer();
Assert(pPlayer != NULL);
PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature);
Assert(pPlayerCreature != NULL);
// Slayer, Vampire 의 길드 아이디를 바꾼다.
if (pPlayerCreature->isSlayer() )
{
pPlayerCreature->setGuildID(99); // 슬레이어 가입안한 상태의 길드 ID
// 클라이언트에 길드 아이디가 바꼈음을 알린다.
GCModifyGuildMemberInfo gcModifyGuildMemberInfo;
gcModifyGuildMemberInfo.setGuildID(pPlayerCreature->getGuildID());
gcModifyGuildMemberInfo.setGuildName("");
gcModifyGuildMemberInfo.setGuildMemberRank(GuildMember::GUILDMEMBER_RANK_DENY);
pPlayer->sendPacket(&gcModifyGuildMemberInfo);
}
else if (pPlayerCreature->isVampire() )
{
pPlayerCreature->setGuildID(0); // 뱀파이어 가입안한 상태의 길드 ID
// 클라이언트에 길드 아이디가 바꼈음을 알린다.
GCModifyGuildMemberInfo gcModifyGuildMemberInfo;
gcModifyGuildMemberInfo.setGuildID(pPlayerCreature->getGuildID());
gcModifyGuildMemberInfo.setGuildName("");
gcModifyGuildMemberInfo.setGuildMemberRank(GuildMember::GUILDMEMBER_RANK_DENY);
pPlayer->sendPacket(&gcModifyGuildMemberInfo);
}
else if (pPlayerCreature->isOusters() )
{
pPlayerCreature->setGuildID(66); // 아우스터즈 가입안한 상태의 길드 ID
// 클라이언트에 길드 아이디가 바꼈음을 알린다.
GCModifyGuildMemberInfo gcModifyGuildMemberInfo;
gcModifyGuildMemberInfo.setGuildID(pPlayerCreature->getGuildID());
gcModifyGuildMemberInfo.setGuildName("");
gcModifyGuildMemberInfo.setGuildMemberRank(GuildMember::GUILDMEMBER_RANK_DENY);
pPlayer->sendPacket(&gcModifyGuildMemberInfo);
}
// 주위에 클라이언트에 길드 아이디가 바꼈음을 알린다.
GCOtherModifyInfo gcOtherModifyInfo;
gcOtherModifyInfo.setObjectID(pCreature->getObjectID());
gcOtherModifyInfo.addShortData(MODIFY_GUILDID, pPlayerCreature->getGuildID());
Zone* pZone = pCreature->getZone();
Assert(pZone != NULL);
pZone->broadcastPacket(pCreature->getX(), pCreature->getY(), &gcOtherModifyInfo, pCreature);
}
__LEAVE_CRITICAL_SECTION((*g_pPCFinder))
// Guild Member 객체를 삭제한다.
SAFE_DELETE(pGuildMember);
}
// 길드 멤버 맵을 삭제한다.
Members.clear();
//.........这里部分代码省略.........
示例9: execute
//.........这里部分代码省略.........
{
pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 9);
bUpgrade = true;
MonsterType = GDR_TYPE;
}
else if (m_Type == 6) // 젬스톤이지롱~
{
pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 4);
MonsterType = BATORI_TYPE;
}
else if (m_Type == 7) // 보름달~
{
pMasterItem = pInventory->findItem(Item::ITEM_CLASS_QUEST_ITEM, 5);
ItemMineInfo* pItemMineInfo;
if (pPC->isSlayer() )
{
Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);
Assert(pSlayer != NULL);
Attr_t totalAttr = pSlayer->getTotalAttr(ATTR_BASIC);
if (totalAttr <= 130 ) // 하드코딩 ㅜ.ㅠ
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(0);
else if (totalAttr <= 210 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(1);
else if (totalAttr <= 270 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(2);
else if (totalAttr <= 300 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(3);
else
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(4);
}
else if (pPC->isVampire() )
{
Vampire* pVampire = dynamic_cast<Vampire*>(pPC);
Assert(pVampire != NULL);
Level_t level = pVampire->getLevel();
if (level <= 20 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(5);
else if (level <= 40 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(6);
else if (level <= 60 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(7);
else if (level <= 90 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(8);
else
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(9);
}
else if (pPC->isOusters() )
{
Ousters* pOusters = dynamic_cast<Ousters*>(pPC);
Assert(pOusters != NULL);
Level_t level = pOusters->getLevel();
if (level <= 20 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(10);
else if (level <= 40 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(11);
else if (level <= 60 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(12);
else if (level <= 90 )
pItemMineInfo = g_pItemMineInfoManager->getItemMineInfo(13);
示例10: execute
////////////////////////////////////////////////////////////////////////////////
// 액션을 실행한다.
////////////////////////////////////////////////////////////////////////////////
void ActionGiveEventItem::execute(Creature * pCreature1 , Creature * pCreature2)
throw(Error)
{
__BEGIN_TRY
Assert(pCreature1 != NULL);
Assert(pCreature2 != NULL);
Assert(pCreature1->isNPC());
Assert(pCreature2->isPC());
PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature2);
Assert(pPC != NULL);
Player* pPlayer = pPC->getPlayer();
Assert(pPlayer != NULL);
Inventory* pInventory = pPC->getInventory();
Assert(pInventory != NULL);
Zone* pZone = pPC->getZone();
Assert(pZone != NULL);
FlagSet* pFlagSet = pPC->getFlagSet();
Item::ItemClass ItemClass;
ItemType_t ItemType;
OptionType_t OptionType;
OptionType_t OptionType2;
Item* pItem;
// 이벤트 진행 기간이 아닌 경우
if (!g_pVariableManager->isActiveGiveEventItem())
{
GCNPCResponse response;
response.setCode(NPC_RESPONSE_GIVE_EVENT_ITEM_FAIL_NOW);
pPlayer->sendPacket(&response);
GCNPCResponse quit;
quit.setCode(NPC_RESPONSE_QUIT_DIALOGUE);
pPlayer->sendPacket(&quit);
return;
}
// 이 값과 관련해서
// 캐릭터 생성시에 FlagSet을 바꿔줘야한다. (default ON 으로)
// 이미 선물을 교환해 갔다면
if (pFlagSet->isOn(m_FlagSetType ) )
{
GCNPCResponse response;
response.setCode(NPC_RESPONSE_GIVE_EVENT_ITEM_FAIL);
pPlayer->sendPacket(&response);
GCNPCResponse quit;
quit.setCode(NPC_RESPONSE_QUIT_DIALOGUE);
pPlayer->sendPacket(&quit);
return;
}
LuaSelectItem* pLuaSelectItem = NULL;
string luaFileName;
if (pPC->isSlayer() )
{
// 루아에 슬레이어 능력치의 합을 set한다.
Slayer* pSlayer = dynamic_cast<Slayer*>(pPC);
Assert(pSlayer != NULL);
Attr_t sum = pSlayer->getSTR(ATTR_BASIC )
+ pSlayer->getDEX(ATTR_BASIC )
+ pSlayer->getINT(ATTR_BASIC);
m_pLuaSlayerItem->setSum(sum);
pLuaSelectItem = m_pLuaSlayerItem;
luaFileName = m_SlayerFilename;
}
else if (pPC->isVampire() )
{
// 루아에 뱀파이어의 레벨을 set한다.
Vampire* pVampire = dynamic_cast<Vampire*>(pPC);
Assert(pVampire != NULL);
int level = pVampire->getLevel();
m_pLuaVampireItem->setLevel(level);
pLuaSelectItem = m_pLuaVampireItem;
luaFileName = m_VampireFilename;
}
//--------------------------------------------------------
// 속도 체크를 위해서 1000번 돌려보는 코드
// 결과는.. 0.07초 정도 나왔다. 감덩~ -_-;
/*
Timeval beforeTime;
getCurrentTime(beforeTime);
//.........这里部分代码省略.........