mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
Implemented ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM and ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM
Fixed CMSG_CANCEL_CAST opcode
This commit is contained in:
parent
78ec66babc
commit
d7f8a60835
5 changed files with 26 additions and 2 deletions
|
|
@ -321,6 +321,20 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||||
continue;
|
continue;
|
||||||
SetCriteriaProgress(achievementCriteria, 1, true);
|
SetCriteriaProgress(achievementCriteria, 1, true);
|
||||||
break;
|
break;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM:
|
||||||
|
// speedup for non-login case
|
||||||
|
if(miscvalue1 && achievementCriteria->own_item.itemID!=miscvalue1)
|
||||||
|
continue;
|
||||||
|
SetCriteriaProgress(achievementCriteria, GetPlayer()->GetItemCount(achievementCriteria->own_item.itemID, true));
|
||||||
|
break;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM:
|
||||||
|
// You _have_ to loot that item, just owning it when logging in does _not_ count!
|
||||||
|
if(!miscvalue1)
|
||||||
|
continue;
|
||||||
|
if(miscvalue1 != achievementCriteria->own_item.itemID)
|
||||||
|
continue;
|
||||||
|
SetCriteriaProgress(achievementCriteria, miscvalue2, true);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if(IsCompletedCriteria(achievementCriteria))
|
if(IsCompletedCriteria(achievementCriteria))
|
||||||
CompletedCriteria(achievementCriteria);
|
CompletedCriteria(achievementCriteria);
|
||||||
|
|
@ -395,6 +409,10 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
||||||
return progress->counter >= 1;
|
return progress->counter >= 1;
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM:
|
case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM:
|
||||||
return progress->counter >= achievementCriteria->use_item.itemCount;
|
return progress->counter >= achievementCriteria->use_item.itemCount;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM:
|
||||||
|
return progress->counter >= achievementCriteria->own_item.itemCount;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM:
|
||||||
|
return progress->counter >= achievementCriteria->loot_item.itemCount;
|
||||||
|
|
||||||
// handle all statistic-only criteria here
|
// handle all statistic-only criteria here
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
|
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,7 @@ void WorldSession::HandleAutostoreLootItemOpcode( WorldPacket & recv_data )
|
||||||
--loot->unlootedCount;
|
--loot->unlootedCount;
|
||||||
|
|
||||||
player->SendNewItem(newitem, uint32(item->count), false, false, true);
|
player->SendNewItem(newitem, uint32(item->count), false, false, true);
|
||||||
|
player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM, item->itemid, item->count);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
player->SendEquipError( msg, NULL, NULL );
|
player->SendEquipError( msg, NULL, NULL );
|
||||||
|
|
@ -483,6 +484,7 @@ void WorldSession::HandleLootMasterGiveOpcode( WorldPacket & recv_data )
|
||||||
// not move item from loot to target inventory
|
// not move item from loot to target inventory
|
||||||
Item * newitem = target->StoreNewItem( dest, item.itemid, true, item.randomPropertyId );
|
Item * newitem = target->StoreNewItem( dest, item.itemid, true, item.randomPropertyId );
|
||||||
target->SendNewItem(newitem, uint32(item.count), false, false, true );
|
target->SendNewItem(newitem, uint32(item.count), false, false, true );
|
||||||
|
target->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LOOT_ITEM, item.itemid, item.count);
|
||||||
|
|
||||||
// mark as looted
|
// mark as looted
|
||||||
item.count=0;
|
item.count=0;
|
||||||
|
|
|
||||||
|
|
@ -1672,7 +1672,7 @@ void WorldSession::HandleSpellClick( WorldPacket & recv_data )
|
||||||
|
|
||||||
void WorldSession::HandleInspectAchievements( WorldPacket & recv_data )
|
void WorldSession::HandleInspectAchievements( WorldPacket & recv_data )
|
||||||
{
|
{
|
||||||
sLog.outString("WorldSession::HandleInspectAchievements");
|
CHECK_PACKET_SIZE(recv_data, 1);
|
||||||
uint64 guid;
|
uint64 guid;
|
||||||
if(!readGUID(recv_data, guid))
|
if(!readGUID(recv_data, guid))
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -13054,6 +13054,7 @@ void Player::ItemAddedQuestCheck( uint32 entry, uint32 count )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UpdateForQuestsGO();
|
UpdateForQuestsGO();
|
||||||
|
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_OWN_ITEM, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::ItemRemovedQuestCheck( uint32 entry, uint32 count )
|
void Player::ItemRemovedQuestCheck( uint32 entry, uint32 count )
|
||||||
|
|
|
||||||
|
|
@ -332,9 +332,12 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket)
|
||||||
|
|
||||||
void WorldSession::HandleCancelCastOpcode(WorldPacket& recvPacket)
|
void WorldSession::HandleCancelCastOpcode(WorldPacket& recvPacket)
|
||||||
{
|
{
|
||||||
CHECK_PACKET_SIZE(recvPacket,4);
|
CHECK_PACKET_SIZE(recvPacket,5);
|
||||||
|
|
||||||
|
// increments with every CANCEL packet, don't use for now
|
||||||
|
uint8 counter;
|
||||||
uint32 spellId;
|
uint32 spellId;
|
||||||
|
recvPacket >> counter;
|
||||||
recvPacket >> spellId;
|
recvPacket >> spellId;
|
||||||
|
|
||||||
//FIXME: hack, ignore unexpected client cancel Deadly Throw cast
|
//FIXME: hack, ignore unexpected client cancel Deadly Throw cast
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue