This commit is contained in:
aozhiwei 2022-12-27 12:12:43 +08:00
parent 0355f4ab07
commit f5063dfa29
11 changed files with 37 additions and 44 deletions

View File

@ -102,7 +102,7 @@ static void GSListeneron_error(a8::TcpListener*, int type, int errorid)
void GGListener::Init()
{
tcp_listener_ = new a8::TcpListener();
tcp_listener_ = std::make_shared<a8::TcpListener>();
tcp_listener_->on_create_client_socket = CreateGameClientSocket;
tcp_listener_->on_error = GSListeneron_error;
@ -121,7 +121,6 @@ void GGListener::Init()
void GGListener::UnInit()
{
delete tcp_listener_;
tcp_listener_ = nullptr;
}

View File

@ -31,14 +31,14 @@ public:
void SendProxyMsg(int sockhandle, T& msg)
{
static int msgid = f8::Net_GetMessageId(msg);
f8::Net_SendProxyMsg(tcp_listener_, sockhandle, 0, 0, msgid, msg);
f8::Net_SendProxyMsg(tcp_listener_.get(), sockhandle, 0, 0, msgid, msg);
}
template <typename T>
void SendToClient(int sockhandle, unsigned int seqid, T& msg)
{
static int msgid = f8::Net_GetMessageId(msg);
int packet_size = f8::Net_SendProxyMsg(tcp_listener_, sockhandle, seqid, 0, msgid, msg);
int packet_size = f8::Net_SendProxyMsg(tcp_listener_.get(), sockhandle, seqid, 0, msgid, msg);
if (packet_size > max_packet_size) {
max_packet_size = packet_size;
}
@ -60,5 +60,5 @@ private:
void OnListenError(int errorid);
private:
a8::TcpListener *tcp_listener_ = nullptr;
std::shared_ptr<a8::TcpListener> tcp_listener_;
};

View File

@ -66,9 +66,6 @@ Creature::~Creature()
{
xtimer_attacher.ClearTimerList();
ClearBuffList();
for (auto& pair : skill_hash_) {
delete pair.second;
}
skill_hash_.clear();
ClearPassiveSkill();
trigger_->UnInit();
@ -664,7 +661,7 @@ void Creature::AddPassiveSkill(int skill_id)
{
const mt::Skill* skill_meta = mt::Skill::GetById(skill_id);
if (skill_meta && !GetPassiveSkill(skill_meta->skill_id())) {
Skill* skill = new Skill;
auto skill = std::make_shared<Skill>();
skill->owner = this;
skill->meta = skill_meta;
skill->xtimer_attacher.SetOwner(&room->xtimer);
@ -689,7 +686,6 @@ void Creature::RemovePassiveSkill(int skill_id)
{
auto itr = passive_skill_hash_.find(skill_id);
if (itr != passive_skill_hash_.end()) {
delete itr->second;
passive_skill_hash_.erase(itr);
}
}
@ -709,7 +705,7 @@ void Creature::ClearPassiveSkill()
Skill* Creature::GetPassiveSkill(int skill_id)
{
auto itr = passive_skill_hash_.find(skill_id);
return itr != passive_skill_hash_.end() ? itr->second : nullptr;
return itr != passive_skill_hash_.end() ? itr->second.get() : nullptr;
}
void Creature::TriggerBuff(Skill* skill, std::set<Creature*>& target_list, BuffTriggerType_e trigger_type)
@ -775,7 +771,7 @@ void Creature::TriggerOneObjectBuff(Skill* skill, Creature* target, BuffTriggerT
Skill* Creature::GetSkill(int skill_id)
{
auto itr = skill_hash_.find(skill_id);
return itr != skill_hash_.end() ? itr->second : nullptr;
return itr != skill_hash_.end() ? itr->second.get() : nullptr;
}
bool Creature::CanUseSkill(int skill_id)
@ -1601,7 +1597,7 @@ void Creature::AddSkill(int skill_id)
const mt::Skill* skill_meta = mt::Skill::GetById(skill_id);
if (skill_meta && !GetSkill(skill_id)) {
if (skill_meta->skill_type() == 1) {
Skill* skill = new Skill;
auto skill = std::make_shared<Skill>();
skill->owner = this;
skill->meta = skill_meta;
skill->xtimer_attacher.SetOwner(&room->xtimer);
@ -1617,12 +1613,10 @@ void Creature::AddSkill(int skill_id)
void Creature::ClearSkill()
{
Skill* reserve_skill = nullptr;
std::shared_ptr<Skill> reserve_skill = nullptr;
for (auto& pair : skill_hash_) {
if (pair.second->meta->IsTurnOverSkill()) {
reserve_skill = pair.second;
} else {
delete pair.second;
}
}
skill_hash_.clear();
@ -2781,7 +2775,7 @@ void Creature::TraverseSkill(std::function<void (Skill*, bool&)> func)
{
bool stop = false;
for (auto& pair : skill_hash_) {
func(pair.second, stop);
func(pair.second.get(), stop);
if (stop) {
return;
}

View File

@ -368,8 +368,8 @@ private:
int skill_target_id_ = 0;
Position skill_target_pos_;
float skill_distance_ = 0.0f;
std::map<int, Skill*> skill_hash_;
std::map<int, Skill*> passive_skill_hash_;
std::map<int, std::shared_ptr<Skill>> skill_hash_;
std::map<int, std::shared_ptr<Skill>> passive_skill_hash_;
std::map<int, long long> buff_interval_hash_;
std::array<Inventory, IS_END> inventory_ = {};

View File

@ -230,7 +230,7 @@ void MapInstance::AttachRoom(Room* room, RoomInitInfo& init_info)
init_info.map_meta = map_meta_;
init_info.grid_service = grid_service_;
init_info.map_service = map_service_;
init_info.map_instance = this;
init_info.map_instance = shared_from_this();
}
void MapInstance::CreateThings()

View File

@ -11,7 +11,7 @@ class MapService;
class GridService;
class Room;
struct RoomInitInfo;
class MapInstance
class MapInstance : public std::enable_shared_from_this<MapInstance>
{
public:
int map_id = 0;

View File

@ -16,7 +16,7 @@ void MapMgr::Init()
(
[this] (const mt::Map* map_meta, bool& stop)
{
MapInstance* map_instance = new MapInstance();
auto map_instance = std::make_shared<MapInstance>();
map_instance->map_id = map_meta->map_id();
map_instance->Init();
instance_hash_[map_instance->map_id] = map_instance;
@ -25,7 +25,8 @@ void MapMgr::Init()
if (itr != mode_hash_.end()) {
itr->second.push_back(map_instance);
} else {
mode_hash_[map_meta->map_mode()] = std::vector<MapInstance*>({map_instance});
mode_hash_[map_meta->map_mode()] =
std::vector<std::shared_ptr<MapInstance>>({map_instance});
}
}
});
@ -46,7 +47,6 @@ void MapMgr::UnInit()
{
for (auto& pair : instance_hash_) {
pair.second->UnInit();
delete pair.second;
}
instance_hash_.clear();
}
@ -82,7 +82,7 @@ void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info)
}
#ifdef MAP3D
init_info.init_map_id = 2001;
MapInstance* map_instance = GetMapInstance(init_info.init_map_id);
auto map_instance = GetMapInstance(init_info.init_map_id);
#else
MapInstance* map_instance = init_info.init_map_id == 0 ?
RandMapInstance(init_info.room_mode) : GetMapInstance(init_info.init_map_id);
@ -103,13 +103,13 @@ void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info)
map_instance->AttachRoom(room, init_info);
}
MapInstance* MapMgr::GetMapInstance(int map_id)
std::shared_ptr<MapInstance> MapMgr::GetMapInstance(int map_id)
{
auto itr = instance_hash_.find(map_id);
return itr != instance_hash_.end() ? itr->second : nullptr;
}
MapInstance* MapMgr::RandMapInstance(int map_mode)
std::shared_ptr<MapInstance> MapMgr::RandMapInstance(int map_mode)
{
auto itr = mode_hash_.find(map_mode);
return itr != mode_hash_.end() ? itr->second[rand() % itr->second.size()] : nullptr;

View File

@ -16,12 +16,12 @@ public:
void UnInit();
void AttachRoom(Room* room, RoomInitInfo& init_info);
MapInstance* GetMapInstance(int map_id);
std::shared_ptr<MapInstance> GetMapInstance(int map_id);
private:
MapInstance* RandMapInstance(int map_mode);
std::shared_ptr<MapInstance> RandMapInstance(int map_mode);
private:
std::map<int, MapInstance*> instance_hash_;
std::map<int, std::vector<MapInstance*>> mode_hash_;
std::map<int, std::shared_ptr<MapInstance>> instance_hash_;
std::map<int, std::vector<std::shared_ptr<MapInstance>>> mode_hash_;
};

View File

@ -987,7 +987,7 @@ bool Room::CanJoin(const std::string& accountid,
#endif
}
if (init_map_id != 0) {
MapInstance* map_instance = MapMgr::Instance()->GetMapInstance(init_map_id);
auto map_instance = MapMgr::Instance()->GetMapInstance(init_map_id);
if (map_instance && map_instance->GetMapMeta()->map_mode() == room_mode_ &&
map_instance->map_id != map_meta_->map_id()) {
return false;

View File

@ -62,7 +62,7 @@ public:
a8::Attacher xtimer_attacher_;
GridService* grid_service = nullptr;
MapService* map_service = nullptr;
MapInstance* map_instance = nullptr;
std::shared_ptr<MapInstance> map_instance;
bool debug_trace = false;
bool added_to_over_room = false;
glm::vec3 last_player_jump_pos;

View File

@ -43,7 +43,7 @@ struct RoomInitInfo
std::string map_tpl_name;
GridService* grid_service = nullptr;
MapService* map_service = nullptr;
MapInstance* map_instance = nullptr;
std::shared_ptr<MapInstance> map_instance;
std::vector<const mt::MapTplThing*>* mini_room_spawn_points = nullptr;
std::vector<const mt::MapTplThing*>* normal_room_spawn_points = nullptr;
std::vector<const mt::MapTplThing*>* room_monster_spawn_points = nullptr;