跳到主要内容

game_server.game_attrib

简介

基于engine和pkg.attrib_calc2实现的实体对象属性模块

几点说明:

  1. 默认的属性加成是一个三元组格式: [ 属性, 数值类型, 加成值 ]

  2. regular_improvement_dict/plus_improvement_dict系列是为了默认的三元组格式属性提供的,

不使用默认的属性加成数据格式时,可以不需要该系列函数

  1. 配置表: attrib.xlsx和attrib_sources.xlsx表必须配置;

  2. attrib.xlsx表中每个属性都必须包含calculator_list和is_float配置,

calculator用于记录属性属于哪些属性计算器,is_float用于指明属性的最终值是不是float(不是则为int)

  1. attrib_sources.xlsx表中都必须要包含calculator和source配置,用于指明属性计算器有哪些属性加成来源

组件接口

game_attrib.gs

函数原型函数作用
bool setup(mixed para = nil)初始化属性计算单元
array new_ratio_improvement(string attrib, mixed val)生成比例提升的属性加成值
bool is_ratio_improvement_value(array value)判断是否为比例提升的属性加成值
array new_num_improvement(string attrib, mixed val)生成固定数值提升的属性加成值
bool is_num_improvement_value(array value)判断是否为固定数值提升的属性加成值
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其值相加

样例

import engine;
import engine.preimport;
import pkg.util_lib.*;
import pkg.game_server.game_attrib;

cfg.init_by_map({
"server_id" : 1234,
});
engine.boot();
LOAD_PKG(game_attrib);

public void test()
{
write("test");
}

// 初始化
game_attrib.setup({
"calculation_unit_path" : __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"));
}