Basic arch work, doesn't make a ton of sense yet but it will

This commit is contained in:
KimLS 2015-02-19 23:34:43 -08:00
parent a5274b9b6e
commit 551c0ef368
8 changed files with 132 additions and 22 deletions

View File

@ -31,8 +31,10 @@ SET(common_sources
guild_base.cpp
guilds.cpp
inventory.cpp
inventory_database_controller.cpp
ipc_mutex.cpp
item.cpp
item_container.cpp
item_instance.cpp
md5.cpp
memory_mapped_file.cpp
@ -138,8 +140,10 @@ SET(common_headers
guild_base.h
guilds.h
inventory.h
inventory_database_controller.h
ipc_mutex.h
item.h
item_container.h
item_data.h
item_fieldlist.h
item_instance.h

View File

@ -23,16 +23,3 @@ EQEmu::Inventory::Inventory() {
EQEmu::Inventory::~Inventory() {
}
std::shared_ptr<EQEmu::ItemInstance> EQEmu::Inventory::GetItem(InventoryType type, int16 slot) {
auto area = items_.find(type);
if(area != items_.end()) {
auto item = area->second.find(slot);
if(item != area->second.end()) {
return item->second;
}
}
return std::shared_ptr<EQEmu::ItemInstance>(nullptr);
}

View File

@ -19,16 +19,15 @@
#ifndef COMMON_INVENTORY_H
#define COMMON_INVENTORY_H
#include "item_instance.h"
#include <map>
#include <memory>
#include <tuple>
#include "item_container.h"
#include <string>
namespace EQEmu
{
enum InventoryType : int16
enum InventoryType : int
{
InvTypePersonal,
InvTypePersonal = 0,
InvTypeBank,
InvTypeSharedBank,
InvTypeTrade,
@ -45,10 +44,8 @@ namespace EQEmu
Inventory();
~Inventory();
std::shared_ptr<ItemInstance> GetItem(InventoryType type, int16 slot);
private:
std::map<int16, std::map<int16, std::shared_ptr<ItemInstance>>> items_;
std::map<int, ItemContainer> containers_;
};
} // EQEmu

View File

View File

@ -0,0 +1,24 @@
/* EQEMu: Everquest Server Emulator
Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY except by those people which sell it, which
are required to give you total support for your newly bought product;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef COMMON_INVENTORY_DATABASE_CONTROLLER_H
#define COMMON_INVENTORY_DATABASE_CONTROLLER_H
#endif

52
common/item_container.cpp Normal file
View File

@ -0,0 +1,52 @@
#include "item_container.h"
#include <map>
#include <utility>
struct EQEmu::ItemContainer::impl
{
std::map<int, std::shared_ptr<ItemInstance>> items;
};
EQEmu::ItemContainer::ItemContainer()
{
impl_ = new impl;
}
EQEmu::ItemContainer::~ItemContainer()
{
delete impl_;
}
std::shared_ptr<EQEmu::ItemInstance> EQEmu::ItemContainer::Get(int slot_id) {
auto iter = impl_->items.find(slot_id);
if(iter != impl_->items.end()) {
return iter->second;
}
return std::shared_ptr<EQEmu::ItemInstance>(nullptr);
}
bool EQEmu::ItemContainer::Put(int slot_id, std::shared_ptr<ItemInstance> inst) {
if(!inst)
return false;
auto iter = impl_->items.find(slot_id);
if(iter == impl_->items.end()) {
impl_->items[slot_id] = inst;
//trigger put in slot_id
return true;
}
return false;
}
bool EQEmu::ItemContainer::Delete(int slot_id) {
auto iter = impl_->items.find(slot_id);
if(iter == impl_->items.end()) {
return false;
} else {
impl_->items.erase(iter);
//trigger delete in slotid
return true;
}
}

42
common/item_container.h Normal file
View File

@ -0,0 +1,42 @@
/* EQEMu: Everquest Server Emulator
Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY except by those people which sell it, which
are required to give you total support for your newly bought product;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef COMMON_ITEM_CONTAINER_H
#define COMMON_ITEM_CONTAINER_H
#include "item_instance.h"
#include <memory>
namespace EQEmu
{
class ItemContainer
{
public:
ItemContainer();
~ItemContainer();
std::shared_ptr<ItemInstance> Get(int slot_id);
bool Put(int slot_id, std::shared_ptr<ItemInstance> inst);
bool Delete(int slot_id);
private:
struct impl;
impl *impl_;
};
} // EQEmu
#endif

View File

@ -26,6 +26,7 @@
namespace EQEmu
{
class ItemContainer;
class ItemInstance
{
public:
@ -35,6 +36,7 @@ namespace EQEmu
~ItemInstance();
std::shared_ptr<ItemInstance> GetItem(int index);
void SetContainer(ItemContainer *parent) { parent_ = parent; }
private:
const ItemData *base_item_;
ItemData *modified_item_;
@ -46,7 +48,9 @@ namespace EQEmu
uint32 ornament_icon_;
uint32 ornament_hero_model_;
uint64 tracking_id_;
std::map<int, std::shared_ptr<ItemInstance>> contents_;
ItemContainer *parent_;
};
} // EQEmu