Linux fixes for ChestTraps
This commit is contained in:
parent
efc95eb208
commit
de0979f2ec
3 changed files with 17 additions and 16 deletions
EQ2/source/WorldServer
|
@ -1,6 +1,7 @@
|
|||
#include "ChestTrap.h"
|
||||
#include <vector>
|
||||
#include <algorithm> // std::random_shuffle
|
||||
#include <string.h>
|
||||
|
||||
int32 ChestTrapList::Size() {
|
||||
|
||||
|
@ -26,31 +27,30 @@ void ChestTrapList::AddChestTrap(ChestTrap* trap) {
|
|||
MChestTrapList.releasewritelock(__FUNCTION__, __LINE__);
|
||||
}
|
||||
|
||||
ChestTrap::ChestTrapInfo ChestTrapList::GetChestTrap(int32 id) {
|
||||
bool ChestTrapList::GetChestTrap(int32 id, ChestTrap::ChestTrapInfo* cti) {
|
||||
ChestTrap* res = 0;
|
||||
MChestTrapList.readlock(__FUNCTION__, __LINE__);
|
||||
if (chesttrap_list.count(id) > 0)
|
||||
res = chesttrap_list[id];
|
||||
|
||||
ChestTrap::ChestTrapInfo cti;
|
||||
memset(&cti, 0, sizeof(ChestTrap::ChestTrapInfo));
|
||||
memset(cti, 0, sizeof(ChestTrap::ChestTrapInfo));
|
||||
if (res)
|
||||
memcpy(&cti, &res->GetChestTrapInfo(), sizeof(ChestTrap::ChestTrapInfo));
|
||||
memcpy(cti, &res->GetChestTrapInfo(), sizeof(ChestTrap::ChestTrapInfo));
|
||||
MChestTrapList.releasereadlock(__FUNCTION__, __LINE__);
|
||||
|
||||
return cti;
|
||||
}
|
||||
|
||||
ChestTrap::ChestTrapInfo ChestTrapList::GetNextTrap(int32 zoneid, int32 chest_difficulty)
|
||||
bool ChestTrapList::GetNextTrap(int32 zoneid, int32 chest_difficulty, ChestTrap::ChestTrapInfo* cti)
|
||||
{
|
||||
MChestListsInUse.writelock(__FUNCTION__, __LINE__);
|
||||
ChestTrapList* zoneTrapList = GetChestListByZone(zoneid);
|
||||
ChestTrapList* zoneDifficultyTrapList = zoneTrapList->GetChestListByDifficulty(chest_difficulty);
|
||||
|
||||
ChestTrap::ChestTrapInfo nextTrap = zoneTrapList->GetNextChestTrap();
|
||||
zoneTrapList->GetNextChestTrap(cti);
|
||||
MChestListsInUse.releasewritelock(__FUNCTION__, __LINE__);
|
||||
|
||||
return nextTrap;
|
||||
return true;
|
||||
}
|
||||
|
||||
void ChestTrapList::Clear() {
|
||||
|
@ -60,7 +60,7 @@ void ChestTrapList::Clear() {
|
|||
MChestListsInUse.releasewritelock(__FUNCTION__, __LINE__);
|
||||
}
|
||||
|
||||
ChestTrap::ChestTrapInfo ChestTrapList::GetNextChestTrap() {
|
||||
bool ChestTrapList::GetNextChestTrap(ChestTrap::ChestTrapInfo* cti) {
|
||||
MChestTrapList.readlock(__FUNCTION__, __LINE__);
|
||||
if (cycleItr == chesttrap_list.end())
|
||||
{
|
||||
|
@ -74,15 +74,14 @@ ChestTrap::ChestTrapInfo ChestTrapList::GetNextChestTrap() {
|
|||
MChestTrapList.writelock(__FUNCTION__, __LINE__);
|
||||
ChestTrap* trap = cycleItr->second;
|
||||
|
||||
ChestTrap::ChestTrapInfo cti;
|
||||
memset(&cti, 0, sizeof(ChestTrap::ChestTrapInfo));
|
||||
memset(cti, 0, sizeof(ChestTrap::ChestTrapInfo));
|
||||
if (trap)
|
||||
memcpy(&cti, &trap->GetChestTrapInfo(), sizeof(ChestTrap::ChestTrapInfo));
|
||||
memcpy(cti, &trap->GetChestTrapInfo(), sizeof(ChestTrap::ChestTrapInfo));
|
||||
|
||||
cycleItr++;
|
||||
MChestTrapList.releasewritelock(__FUNCTION__, __LINE__);
|
||||
|
||||
return cti;
|
||||
return true;
|
||||
}
|
||||
|
||||
ChestTrapList* ChestTrapList::GetChestListByDifficulty(int32 difficulty) {
|
||||
|
|
|
@ -88,14 +88,14 @@ public:
|
|||
|
||||
void AddChestTrap(ChestTrap* trap);
|
||||
|
||||
ChestTrap::ChestTrapInfo GetChestTrap(int32 id);
|
||||
bool GetChestTrap(int32 id, ChestTrap::ChestTrapInfo* cti);
|
||||
|
||||
ChestTrap::ChestTrapInfo GetNextTrap(int32 zoneid, int32 chest_difficulty);
|
||||
bool GetNextTrap(int32 zoneid, int32 chest_difficulty, ChestTrap::ChestTrapInfo* cti);
|
||||
|
||||
void Clear();
|
||||
private:
|
||||
// randomized maps so we just iterate the map for our next 'random' result
|
||||
ChestTrap::ChestTrapInfo GetNextChestTrap();
|
||||
bool GetNextChestTrap(ChestTrap::ChestTrapInfo* cti);
|
||||
|
||||
ChestTrapList* GetChestListByDifficulty(int32 difficulty);
|
||||
|
||||
|
|
|
@ -4107,7 +4107,9 @@ void Client::OpenChest(Entity* entity)
|
|||
|
||||
if (chest_difficulty > 0 && !entity->HasTrapTriggered())
|
||||
{
|
||||
ChestTrap::ChestTrapInfo nextTrap = chest_trap_list.GetNextTrap(GetCurrentZone()->GetZoneID(), chest_difficulty);
|
||||
ChestTrap::ChestTrapInfo nextTrap;
|
||||
|
||||
chest_trap_list.GetNextTrap(GetCurrentZone()->GetZoneID(), chest_difficulty, &nextTrap);
|
||||
|
||||
Skill* disarmSkill = GetPlayer()->GetSkillByName("Disarm Trap", false);
|
||||
firstChestOpen = true;
|
||||
|
|
Loading…
Add table
Reference in a new issue