mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 05:21:29 +00:00
Send item recast timestamps picking up ground spawns
This commit is contained in:
parent
5be1bd2ffb
commit
b590eb2dc4
@ -747,6 +747,18 @@ std::map<uint32, uint32> SharedDatabase::GetItemRecastTimestamps(uint32 char_id)
|
|||||||
return timers; // RVO or move assigned
|
return timers; // RVO or move assigned
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32 SharedDatabase::GetItemRecastTimestamp(uint32 char_id, uint32 recast_type)
|
||||||
|
{
|
||||||
|
std::string query = StringFormat("SELECT timestamp FROM character_item_recast WHERE id=%u AND recast_type=%u",
|
||||||
|
char_id, recast_type);
|
||||||
|
auto results = QueryDatabase(query);
|
||||||
|
if (!results.Success() || results.RowCount() == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
auto row = results.begin();
|
||||||
|
return static_cast<uint32>(atoul(row[0]));
|
||||||
|
}
|
||||||
|
|
||||||
void SharedDatabase::ClearOldRecastTimestamps(uint32 char_id)
|
void SharedDatabase::ClearOldRecastTimestamps(uint32 char_id)
|
||||||
{
|
{
|
||||||
// This actually isn't strictly live-like. Live your recast timestamps are forever
|
// This actually isn't strictly live-like. Live your recast timestamps are forever
|
||||||
|
|||||||
@ -71,6 +71,7 @@ class SharedDatabase : public Database
|
|||||||
bool GetInventory(uint32 char_id, Inventory* inv);
|
bool GetInventory(uint32 char_id, Inventory* inv);
|
||||||
bool GetInventory(uint32 account_id, char* name, Inventory* inv);
|
bool GetInventory(uint32 account_id, char* name, Inventory* inv);
|
||||||
std::map<uint32, uint32> GetItemRecastTimestamps(uint32 char_id);
|
std::map<uint32, uint32> GetItemRecastTimestamps(uint32 char_id);
|
||||||
|
uint32 GetItemRecastTimestamp(uint32 char_id, uint32 recast_type);
|
||||||
void ClearOldRecastTimestamps(uint32 char_id);
|
void ClearOldRecastTimestamps(uint32 char_id);
|
||||||
bool SetStartingItems(PlayerProfile_Struct* pp, Inventory* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin);
|
bool SetStartingItems(PlayerProfile_Struct* pp, Inventory* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin);
|
||||||
|
|
||||||
|
|||||||
@ -467,16 +467,21 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object)
|
|||||||
if (m_inst && sender) {
|
if (m_inst && sender) {
|
||||||
// if there is a lore conflict, delete the offending item from the server inventory
|
// if there is a lore conflict, delete the offending item from the server inventory
|
||||||
// the client updates itself and takes care of sending "duplicate lore item" messages
|
// the client updates itself and takes care of sending "duplicate lore item" messages
|
||||||
if(sender->CheckLoreConflict(m_inst->GetItem())) {
|
auto item = m_inst->GetItem();
|
||||||
int16 loreslot = sender->GetInv().HasItem(m_inst->GetItem()->ID, 0, invWhereBank);
|
if(sender->CheckLoreConflict(item)) {
|
||||||
|
int16 loreslot = sender->GetInv().HasItem(item->ID, 0, invWhereBank);
|
||||||
if (loreslot != INVALID_INDEX) // if the duplicate is in the bank, delete it.
|
if (loreslot != INVALID_INDEX) // if the duplicate is in the bank, delete it.
|
||||||
sender->DeleteItemInInventory(loreslot);
|
sender->DeleteItemInInventory(loreslot);
|
||||||
else
|
else
|
||||||
cursordelete = true; // otherwise, we delete the new one
|
cursordelete = true; // otherwise, we delete the new one
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (item->RecastDelay)
|
||||||
|
m_inst->SetRecastTimestamp(
|
||||||
|
database.GetItemRecastTimestamp(sender->CharacterID(), item->RecastType));
|
||||||
|
|
||||||
char buf[10];
|
char buf[10];
|
||||||
snprintf(buf, 9, "%u", m_inst->GetItem()->ID);
|
snprintf(buf, 9, "%u", item->ID);
|
||||||
buf[9] = '\0';
|
buf[9] = '\0';
|
||||||
std::vector<EQEmu::Any> args;
|
std::vector<EQEmu::Any> args;
|
||||||
args.push_back(m_inst);
|
args.push_back(m_inst);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user