Send item recast timestamps picking up ground spawns

This commit is contained in:
Michael Cook (mackal) 2015-01-31 20:54:56 -05:00
parent 5be1bd2ffb
commit b590eb2dc4
3 changed files with 21 additions and 3 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);