跳到主要内容

game_server.team

简介

基于engine实现的队伍对象/组件等功能

组件接口

FInTeam.gs

进行队伍操作的组件

函数原型函数作用
object get_team()获取队伍对象
bool is_team_leader()判断是否为队伍领导
bool join_team(object team_ob)加入队伍
bool quit_team()离开队伍
void dismiss_team()解散队伍(仅队长可操作)
void sync_team()同步队伍信息

Team.gs

队伍对象

这里的队伍数据不直接记录成员对象,而是记录成员的队伍外观信息

  • member_dict: 队伍成员数据 - map
  • ordered_list: 队伍成员位置 - array
  • leader: 队长rid - string
  • safe_invoke(): 是为了保证队伍的核心操作不出现并发问题
函数原型函数作用
mixed safe_invoke(function func, ...)安全调用函数,保证队伍的核心操作不出现并发问题
int get_member_capacity()获取队伍容量
int get_member_count()获取队伍成员数量
void sync_to_member(object ent_ob)同步队伍数据到目标对象
bool safe_add_member(object ent_ob)协程安全接口: 添加队伍成员
bool safe_remove_member(object ent_ob)协程安全接口: 移除队伍成员
void remove_all()非协程安全接口: 移除所有队伍成员
void safe_remove_all()协程安全接口: 移除所有队伍成员
string get_leader_rid()获取队长rid
array get_member_rids()获取队伍成员rid列表
map get_leader()获取队长信息
map get_member(string rid)获取队伍成员信息
map get_member_by_position(int position)获取指定位置的队伍成员信息
void iterate_member(function func)遍历队伍成员
map find_member(function func)查找队伍成员
bool contains_member(string rid)判断是否包含队伍成员
void set_leader(string rid)设置队长

team.gs

基于engine实现的队伍对象/组件等功能

函数原型函数作用
void setup(map para = )初始化队伍模块属性

样例

public void test()
{
cfg.init_by_map({
"server_id" : 1234,
"disable_mongo" : true
});
etc.set("transform_to_dat", false);
engine.boot();

EntityFactory.append_dynamic_entity_type("team", {
"prefix" : "TM",
"class_id" : [ 1000, 1999 ],
"title" : "队伍",
"type" : "team",
"ob_file" : GaTeam
}, true);
EntityFactory.append_dynamic_entity_info("team", {
"class_id" : 1000,
"name" : "队伍"
}, true);

EntityFactory.append_dynamic_entity_type("user", {
"prefix" : "U",
"class_id" : [ 1, 999 ],
"title" : "用户",
"type" : "user",
"ob_file" : GaUser
}, true);
EntityFactory.append_dynamic_entity_info("user", {
"class_id" : 1,
"name" : "玩家"
}, true);

FieldsD.add_type_fields("team", {
"leader" : [ "self" ],
"member_dict" : [ "self" ],
"ordered_list" : [ "self" ]
});
FieldsD.add_type_field("team", "class_id", [ "self" ]);
FieldsD.add_type_field("team", "rid", [ "self" ]);
FieldsD.add_type_field("team", "name", [ "self" ]);
FieldsD.add_type_field("team", "value", [ "self" ]);

// 创建队伍对象
map team_dbase = {};
object team_ob = EntityFactory.create_entity(1000, team_dbase);
test_equal(team_ob != nil, true);
printlnf("- %s创建成功", team_ob.desc());

// 创建玩家对象
object user1 = create_user_ob("001");
test_equal(user1 != nil, true);
printlnf("- %s创建成功", user1.desc());

object user2 = create_user_ob("002");
test_equal(user1 != nil, true);
printlnf("- %s创建成功", user2.desc());

// 加入队伍
printlnf("- %s加入%s", user1.desc(), team_ob.desc());
user1=>join_team(team_ob);
test_equal(user1.get_team() == team_ob, true);

printlnf("- %s加入%s", user2.desc(), team_ob.desc());
user2=>join_team(team_ob);
test_equal(user2.get_team() == team_ob, true);

test_equal(team_ob=>get_member_count(), 2);
test_equal(user1.is_team_leader(), true);

printlnf("- %s离开队伍", user1.desc());
user1=>quit_team();
test_equal(user1.get_team(), nil);
test_equal(user2.is_team_leader(), true);

printlnf("- %s再次加入%s", user2.desc(), team_ob.desc());
user1=>join_team(team_ob);
test_equal(user1.get_team() == team_ob, true);

printlnf("- %s修改value值", team_ob.desc());

// 增加队伍值
team_ob=>add("value", 10);
team_ob=>add("value", -1);

// 队伍析构
printlnf("- %s销毁", team_ob.desc());
team_ob.close();
test_equal(user1.get_team(), nil);
test_equal(user2.get_team(), nil);
}

object create_user_ob(string account)
{
map user_dbase = {
"account_id" : account,
"account" : account,
"device_id" : account,
"client_info" : {}
};
object user_ob = EntityFactory.create_entity(1, user_dbase);
return user_ob;
}