bool session::del(const char* name, bool delay /* = false */) { if (delay) { std::map<string, VBUF*>::iterator it = attrs_cache_.find(name); if (it == attrs_cache_.end()) attrs_cache_[name] = vbuf_new("", 0, TODO_DEL); else it->second->todo = TODO_DEL; dirty_ = true; return true; } // 直接操作后端 cache 服务器,删除属性字段 string buf(256); if (get_data(sid_->buf, buf) == false) return true; deserialize(buf, attrs_); std::map<string, VBUF*>::iterator it = attrs_.find(name); if (it == attrs_.end()) return false; // 先删除并释放对应的对象 vbuf_free(it->second); attrs_.erase(it); // 如果 sid 中已经没有了数据,则应该将 sid 对象从 memcached 中删除 if (attrs_.empty()) { // 调用虚函数,删除该 sid 对应的缓存内容 if (del_data(sid_->buf) == false) { logger_error("del sid(%s) error", sid_->buf); return false; } return true; } // 向 memcached 中重新添加剩余的数据 serialize(attrs_, buf); attrs_clear(attrs_); if (set_data(sid_->buf, buf.c_str(), buf.length(), ttl_) == false) { logger_error("set cache error, sid(%s)", sid_->buf); return false; } return true; }
MapMatrix::~MapMatrix() { del_data(); m_data = nullptr; }
void teufel_death(int cn,int cc) { struct teufel_pk_data *dat; int n; int kill_n=-1,dam=0,killer=-1; dat=set_data(cn,DRD_TEUFELPK,sizeof(struct teufel_pk_data)); if (!dat) return; // oops... for (n=0; n<MAXTEUFEL; n++) { if (dat->cc[n]) { xlog("killed by %s, damage %.2f",dat->name[n],dat->dam[n]/1000.0f); if (dat->dam[n]>dam) { dam=dat->dam[n]; kill_n=n; killer=dat->cc[n]; } } } if (kill_n==-1 || killer==-1) { elog("no one got the kill?"); } else { db_new_pvp(); for (n=0; n<MAXTEUFEL; n++) { if (dat->cc[n]) { if (n==kill_n) { db_add_pvp(dat->name[n],ch[cn].name,"kill",dat->dam[n]); secure_log(dat->cc[n],cn,"a kill"); } else if (dat->cc[n]==cc) { db_add_pvp(dat->name[n],ch[cn].name,"final",dat->dam[n]); secure_log(dat->cc[n],cn,"a final blow"); } else { db_add_pvp(dat->name[n],ch[cn].name,"assist",dat->dam[n]); secure_log(dat->cc[n],cn,"an assist"); } } } winner_gets_item(killer,cn); } del_data(cn,DRD_TEUFELPK); if (ch[cn].x>=120 && ch[cn].x<=254 && ch[cn].y>=139 && ch[cn].y<=228) { if (teleport_char_driver(cn,225,249)) ; else if (teleport_char_driver(cn,221,248)) ; else if (teleport_char_driver(cn,227,245)) ; else if (teleport_char_driver(cn,219,241)) ; else teleport_char_driver(cn,216,237); } else { // error fallback if (teleport_char_driver(cn,250,250)) ; else if (teleport_char_driver(cn,247,250)) ; else if (teleport_char_driver(cn,250,247)) ; else if (teleport_char_driver(cn,247,247)) ; else teleport_char_driver(cn,245,247); } ch[cn].hp=10*POWERSCALE; }