示例#1
0
void load_ply_info_cb(struct db_result *result)
{
	//数据导入后的回调函数
	if(result){
		player_t ply = result->ud;
		if(result->result_set){
			redisReply *r = (redisReply*)result->result_set;	
			if(r->type != REDIS_REPLY_NIL){
				lua_State *L = tls_get(LUASTATE);
				if(0 != CALL_LUA_FUNC2(L,"CreateLuaPlayer",1,
						               PUSH_LUSRDATA(L,ply),
									   PUSH_TABLE3(L,
									   PUSH_STRING(L,r->element[0]->str),
									   PUSH_STRING(L,r->element[1]->str),
									   PUSH_STRING(L,r->element[2]->str))))
				{
					const char * error = lua_tostring(L, -1);
					lua_pop(L,1);
					printf("%s\n",error);
				}else
					ply->_luaply = create_luaObj(L,-1);							
			}else{
				//没有角色,通知客户端创建角色
				shortmsg2gate(CMD_GAME2C_CREATE,ply->_agentsession);					
			}
		}else{
			//数据库访问出错
			shortmsg2gate(CMD_GAME2GATE_BUSY,ply->_agentsession);	
			remove_player(ply);	
		}
	}
}
示例#2
0
battleservice_t new_battleservice()
{
	lua_State *L = luaL_newstate();
	luaL_openlibs(L);
	if (luaL_dofile(L,"battlemgr.lua")) {
		const char * error = lua_tostring(L, -1);
		lua_pop(L,1);
		printf("%s\n",error);
		exit(0);
	}
	register_battle_cfunction(L);
	battleservice_t bservice = calloc(1,sizeof(*bservice));
	if(0 != CALL_LUA_FUNC(L,"CreateBattleMgr",1))
	{
		const char * error = lua_tostring(L, -1);
		lua_pop(L,1);
		printf("%s\n",error);
		exit(0);
	}
	bservice->battlemgr = create_luaObj(L,-1);
	bservice->msgdisp = new_msgdisp(NULL,NULL,NULL, NULL,battle_processpacket,NULL);
	bservice->thd = create_thread(THREAD_JOINABLE);
    thread_start_run(bservice->thd,service_main,(void*)bservice);
	return bservice;
}
示例#3
0
int reg_cmd_handler(lua_State *L){
	uint16_t cmd = lua_tonumber(L,1);
	luaObject_t obj = create_luaObj(L,2);
	if(!handler[cmd]){
		printf("reg cmd %d\n",cmd);
		cmd_handler_t h = calloc(1,sizeof(*h));
		h->_type = FN_LUA;
		h->obj = obj;
		handler[cmd] = h;
		lua_pushboolean(L,1);
	}else{
		release_luaObj(obj);
		lua_pushboolean(L,0);
	}
	return 1;
}
示例#4
0
int luaAoiEnterMap(lua_State *L){
	struct battlemap *battlemap = (struct battlemap*)lua_touserdata(L,-1);
	luaObject_t self = create_luaObj(L,-2);
	int x = (int)lua_tonumber(L,-3);
	int y = (int)lua_tonumber(L,-4);	
	struct aoi_object *aoi_obj = calloc(1,sizeof(*aoi_obj));
	aoi_obj->ud = self;
	aoi_obj->in_myscope = in_myscope;
	aoi_obj->cb_enter = cb_enter;
	aoi_obj->cb_leave = cb_leave;
	
	if(0 == aoi_enter(battlemap->aoi,aoi_obj,x,y)){
		PUSH_LUSRDATA(L,aoi_obj);
	}else
	{
		free(aoi_obj);
		PUSH_NIL(L);
	}
	return 1;
}