예제 #1
0
파일: session.cpp 프로젝트: aaronshang/acl
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;
}
예제 #2
0
MapMatrix::~MapMatrix() {
	del_data();
	m_data = nullptr;
}
예제 #3
0
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;
}