game_server.game_attrib
简介
基于engine和pkg.attrib_calc2实现的游戏属性功能模块
组件接口
game_attrib.gs
基于engine和pkg.attrib_calc2实现的实体对象属性模块
几点说明:
- 默认的属性加成是一个 三元组格式: [ 属性, 数值类型, 加成值 ]
- regular_improvement_dict/plus_improvement_dict系列是为了默认的三元组格式属性提供的,
- 不使用默认的属性加成数据格式时,可以不需要该系列函数
- 配置表: attrib.xlsx和attrib_sources.xlsx表必须配置;
- attrib.xlsx表中每个属性都必须包含calculator_list和is_float配置,calculator用于记录属性属于哪些属性计算器,is_float用于指明属性的最终值是不是float(不是则为int)
- attrib_sources.xlsx表中都必须要包含calculator和source配置,用于指明属性计算器有哪些属性加成来源
函数原型 | 函数作用 |
---|---|
void setup(string calculation_unit_path = nil) | 安装初始化配置 |
array new_ratio_improvement(string attrib, mixed val) | 生成比例提升的属性加成值 |
array new_num_improvement(string attrib, mixed val) | 生成固定数值提升的属性加成值 |
void regular_improvement_dict(map improvement_dict, array improvements) | 把一组属性加成值规范成一个标准的属性加成表 |
void plus_improvement_dict(map result, map improvement_dict) | 相加合并属性加成值表 |
void plus_map(map result, map dict) | 相加合并map值,其中相同的key其值相加 |
样例
public void pkg_sample()
{
import engine;
import engine.preimport;
import pkg.util_lib.*;
import pkg.game_server.game_attrib;
import pkg.game_server.predefine;
import .GaHero;
cfg.init_by_map({
"server_id" : 1234,
});
engine.boot();
LOAD_PKG(game_attrib);
public void test()
{
write("test");
}
// 初始化
game_attrib.setup(__DIR__ "impl/");
// 生成一个实体对象进行测试
map hero_dbase = {
"level" : 1,
"base_improvement" : [],
"equipment_improvement" : []
};
object hero_ob = EntityFactory.create_entity(1, hero_dbase);
// 模拟属性加成
//
// hp
hero_ob=>add_base_improvement("hp", 100, false);
hero_ob=>add_base_improvement("hp", 200, false);
hero_ob=>add_base_improvement("hp", 0.1, true);
hero_ob=>add_base_improvement("hp", 0.2, true);
hero_ob=>add_equipment_improvement("hp", 1000, false);
hero_ob=>add_equipment_improvement("hp", 2000, false);
hero_ob=>add_equipment_improvement("hp", 0.4, true);
hero_ob=>add_equipment_improvement("hp", 0.8, true);
// mp
hero_ob=>add_base_improvement("mp", 200, false);
hero_ob=>add_base_improvement("mp", 400, false);
hero_ob=>add_base_improvement("mp", 0.2, true);
hero_ob=>add_base_improvement("mp", 0.4, true);
hero_ob=>add_equipment_improvement("mp", 2000, false);
hero_ob=>add_equipment_improvement("mp", 4000, false);
hero_ob=>add_equipment_improvement("mp", 0.8, true);
hero_ob=>add_equipment_improvement("mp", 1.6, true);
// 执行
for (int level = 1 upto 10)
{
hero_ob=>set("level", level);
hero_ob=>refresh_attribs();
printf("[level %d]%s hp=%d\n", level, hero_ob.desc(), hero_ob.query_attrib("hp"));
printf("[level %d]%s mp=%d\n", level, hero_ob.desc(), hero_ob.query_attrib("mp"));
}
}