Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions src/engine/core/handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
#include "gameplay/core/base_stats.h"
#include "utils/utils_time.h"
#include "gameplay/classes/pc_classes.h"
#include "gameplay/core/obj_decay_manager.h"

using classes::CalcCircleSlotsAmount;

Expand Down Expand Up @@ -459,7 +458,7 @@ void PlaceObjToInventory(ObjData *object, CharData *ch) {

if (!ch->IsNpc() || (ch->has_master() && !ch->get_master()->IsNpc())) {
object->set_extra_flag(EObjFlag::kTicktimer); // start timer unconditionally when character picks item up.
obj_decay_manager.insert(object);
world_objects.decay_manager().insert(object);
ArrangeObjs(object, &ch->carrying);
} else {
// Вот эта муть, чтобы временно обойти завязку магазинов на порядке предметов в инве моба // Krodo
Expand Down Expand Up @@ -1303,8 +1302,8 @@ bool PlaceObjToRoom(ObjData *object, RoomRnum room) {
object->set_destroyer(kRoomDestroyTimer);
}
if (object->get_type() != EObjType::kFountain && !object->has_flag(EObjFlag::kNodecay)) {
obj_decay_manager.insert(object);
obj_decay_manager.add_env_check(object);
world_objects.decay_manager().insert(object);
world_objects.decay_manager().add_env_check(object);
}
return true;
}
Expand Down Expand Up @@ -1394,7 +1393,7 @@ void RemoveObjFromRoom(ObjData *object) {

object->set_in_room(kNowhere);
object->set_next_content(nullptr);
obj_decay_manager.remove_env_check(object);
world_objects.decay_manager().remove_env_check(object);
}

void PlaceObjIntoObj(ObjData *obj, ObjData *obj_to) {
Expand Down Expand Up @@ -1543,7 +1542,6 @@ void ExtractObjFromWorld(ObjData *obj, bool showlog) {

check_auction(nullptr, obj);
check_exchange(obj);
obj_decay_manager.remove(obj);
obj->get_script()->set_purged();
world_objects.remove(obj);
// if (showlog);
Expand Down
3 changes: 1 addition & 2 deletions src/engine/db/obj_save.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
#include "gameplay/mechanics/named_stuff.h"
#include "engine/core/utils_char_obj.inl"
#include "gameplay/mechanics/stable_objs.h"
#include "gameplay/core/obj_decay_manager.h"
#include "gameplay/mechanics/weather.h"
#include "utils/utils_time.h"
#include "player_index.h"
Expand Down Expand Up @@ -533,7 +532,7 @@ ObjData::shared_ptr read_one_object_new(char **data, int *error) {
}
ConvertDrinkconSkillField(object.get(), false);
object->remove_incorrect_values_keys(object->get_type());
obj_decay_manager.insert(object.get());
world_objects.decay_manager().insert(object.get());
return (object);
}

Expand Down
1 change: 1 addition & 0 deletions src/engine/db/world_objects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ void WorldObjects::remove(ObjData *object) {
m_zone_to_object_ptr[object_ptr->get_vnum() / 100].erase(object_ptr);
m_random_trigger_objs.erase(object);
m_named_objs.erase(object);
m_decay_manager.remove(object);
m_objects_list.erase(object_i->second);
m_object_raw_ptr_to_object_ptr.erase(object);

Expand Down
3 changes: 3 additions & 0 deletions src/engine/db/world_objects.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include "id.h"
#include "engine/entities/obj_data.h"
#include "gameplay/core/obj_decay_manager.h"

#include <list>
#include <functional>
Expand Down Expand Up @@ -80,6 +81,7 @@ class WorldObjects {
void foreach_random_trigger_obj(const std::function<void(ObjData *)> &function) const;
void foreach_named_obj(const std::function<void(ObjData *)> &function) const;
void update_obj_indices(ObjData *obj);
ObjDecayManager &decay_manager() { return m_decay_manager; }
ObjData::shared_ptr find_if(const predicate_f &predicate) const;
ObjData::shared_ptr find_if(const predicate_f &predicate, int number) const;
ObjData::shared_ptr find_if_and_dec_number(const predicate_f &predicate, int &number) const;
Expand Down Expand Up @@ -119,6 +121,7 @@ class WorldObjects {
zone_to_object_ptr_t m_zone_to_object_ptr;
std::unordered_set<ObjData *> m_random_trigger_objs;
std::unordered_set<ObjData *> m_named_objs;
ObjDecayManager m_decay_manager;

WO_IDChangeObserver::shared_ptr m_id_change_observer;
WO_RNumChangeObserver::shared_ptr m_rnum_change_observer;
Expand Down
11 changes: 5 additions & 6 deletions src/engine/entities/obj_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

#include "engine/db/obj_save.h"
#include "engine/db/world_objects.h"
#include "gameplay/core/obj_decay_manager.h"
#include "utils/parse.h"
#include "engine/core/handler.h"
#include "engine/ui/color.h"
Expand Down Expand Up @@ -632,18 +631,18 @@ void ObjData::set_tag(const char *tag) {

void ObjData::set_timer(int timer) {
CObjectPrototype::set_timer(timer);
obj_decay_manager.on_timer_changed(this);
world_objects.decay_manager().on_timer_changed(this);
}

int ObjData::get_timer() const {
if (!obj_decay_manager.contains(this)) {
if (!world_objects.decay_manager().contains(this)) {
return CObjectPrototype::get_timer();
}
auto deadline = obj_decay_manager.get_deadline(this);
auto deadline = world_objects.decay_manager().get_deadline(this);
if (deadline == UINT64_MAX) {
return CObjectPrototype::UNLIMITED_TIMER;
}
auto now = obj_decay_manager.current_mud_hour();
auto now = world_objects.decay_manager().current_mud_hour();
if (deadline <= now) {
return 0;
}
Expand Down Expand Up @@ -832,7 +831,7 @@ void ObjData::add_timed_spell(const ESpell spell_id, const int time) {
}
m_timed_spell.add(this, spell_id, time);
if (time > 0) {
obj_decay_manager.add_timed_spell_obj(this);
world_objects.decay_manager().add_timed_spell_obj(this);
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/engine/ui/cmd/do_get.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#include "engine/core/utils_char_obj.inl"
#include "gameplay/economics/currencies.h"
#include "gameplay/mechanics/groups.h"
#include "gameplay/core/obj_decay_manager.h"
#include "engine/db/world_objects.h"

#include <third_party_libs/fmt/include/fmt/format.h>

Expand Down Expand Up @@ -225,7 +225,7 @@ int perform_get_from_room(CharData *ch, ObjData *obj) {
if (CanTakeObj(ch, obj) && get_otrigger(obj, ch) && bloody::handle_transfer(nullptr, ch, obj)) {
RemoveObjFromRoom(obj);
if (ch->IsNpc() && !obj->has_flag(EObjFlag::kTicktimer)) {
obj_decay_manager.remove(obj);
world_objects.decay_manager().remove(obj);
}
PlaceObjToInventory(obj, ch);
if (obj->get_carried_by() == ch) {
Expand Down
5 changes: 2 additions & 3 deletions src/gameplay/core/game_limits.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
#include "gameplay/mechanics/damage.h"
#include "gameplay/mechanics/bonus.h"
#include "gameplay/ai/mobact.h"
#include "gameplay/core/obj_decay_manager.h"

#include <third_party_libs/fmt/include/fmt/format.h>

Expand Down Expand Up @@ -1374,7 +1373,7 @@ void charmee_obj_decay_tell(CharData *charmee, ObjData *obj, ECharmeeObjPos obj_
void obj_point_update() {
utils::CExecutionTimer timer;

auto tick_result = obj_decay_manager.process_tick();
auto tick_result = world_objects.decay_manager().process_tick();

for (auto it : tick_result.env_destroy) {
ExtractObjFromWorld(it);
Expand Down Expand Up @@ -1515,7 +1514,7 @@ void obj_point_update() {
ExtractObjFromWorld(j);
}
}
log("obj_point_update stop, size %ld, delta %f", obj_decay_manager.size(), timer.delta().count());
log("obj_point_update stop, size %ld, delta %f", world_objects.decay_manager().size(), timer.delta().count());

}

Expand Down
2 changes: 0 additions & 2 deletions src/gameplay/core/obj_decay_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
#include "gameplay/core/game_limits.h"
#include "gameplay/mechanics/stable_objs.h"

ObjDecayManager obj_decay_manager;

void ObjDecayManager::insert(ObjData *obj) {
if (!obj) {
return;
Expand Down
2 changes: 0 additions & 2 deletions src/gameplay/core/obj_decay_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@ class ObjDecayManager {
std::unordered_set<ObjData *> m_timed_spell_objs;
};

extern ObjDecayManager obj_decay_manager;

#endif // OBJ_DECAY_MANAGER_H_

// vim: ts=4 sw=4 tw=0 noet syntax=cpp :
Loading
Loading