1
This commit is contained in:
parent
30daad3228
commit
09bcbe9142
@ -207,8 +207,8 @@ void Bullet::RayDetectionUpdate()
|
||||
}//end for
|
||||
movement->GetCollisionObjects(objects);
|
||||
float bullet_range = gun_meta->i->range();
|
||||
if (gun_upgrade_meta && gun_upgrade_meta->attr[EA_ShotRange] > 0) {
|
||||
bullet_range += gun_upgrade_meta->attr[EA_ShotRange];
|
||||
if (gun_upgrade_meta && gun_upgrade_meta->GetAttrValue(gun_lv, EA_ShotRange) > 0) {
|
||||
bullet_range += gun_upgrade_meta->GetAttrValue(gun_lv, EA_ShotRange);
|
||||
}
|
||||
if (!objects.empty() || distance > bullet_range || distance >= movement->target_distance ||
|
||||
(IsBomb() && meta->i->_inventory_slot() != 4 && distance >= fly_distance)
|
||||
@ -270,8 +270,8 @@ void Bullet::MapServiceUpdate()
|
||||
}
|
||||
#endif
|
||||
float bullet_range = gun_meta->i->range();
|
||||
if (gun_upgrade_meta && gun_upgrade_meta->attr[EA_ShotRange] > 0) {
|
||||
bullet_range += gun_upgrade_meta->attr[EA_ShotRange];
|
||||
if (gun_upgrade_meta && gun_upgrade_meta->GetAttrValue(gun_lv, EA_ShotRange) > 0) {
|
||||
bullet_range += gun_upgrade_meta->GetAttrValue(gun_lv, EA_ShotRange);
|
||||
}
|
||||
if (!objects.empty() || distance > bullet_range ||
|
||||
(IsBomb() && meta->i->_inventory_slot() != 4 && distance >= fly_distance)
|
||||
|
@ -16,6 +16,7 @@ class MovementComponent;
|
||||
class Bullet : public Entity
|
||||
{
|
||||
public:
|
||||
int gun_lv = 0;
|
||||
MetaData::Equip* gun_meta = nullptr;
|
||||
MetaData::EquipUpgrade* gun_upgrade_meta = nullptr;
|
||||
MetaData::Equip* meta = nullptr;
|
||||
|
@ -132,6 +132,14 @@ enum EquipAttr_e
|
||||
EA_End
|
||||
};
|
||||
|
||||
enum DressAttr_e
|
||||
{
|
||||
DA_Atk = 1,
|
||||
DA_Def = 2,
|
||||
DA_Speed = 3,
|
||||
DA_End
|
||||
};
|
||||
|
||||
const char* const PROJ_NAME_FMT = "game%d_gameserver";
|
||||
const char* const PROJ_ROOT_FMT = "/data/logs/%s";
|
||||
|
||||
|
@ -226,7 +226,7 @@ void Human::Shot(Vector2D& target_dir)
|
||||
if (curr_weapon->meta->i->bullet_angle() >= 0.10f) {
|
||||
int angle = (int)curr_weapon->meta->i->bullet_angle() * 1000;
|
||||
if (curr_weapon->upgrade_meta) {
|
||||
angle -= curr_weapon->upgrade_meta->attr[EA_BulletAngle] * 1000;
|
||||
angle -= curr_weapon->upgrade_meta->GetAttrValue(curr_weapon->weapon_lv, EA_BulletAngle) * 1000;
|
||||
}
|
||||
if (angle > 0) {
|
||||
bullet_angle += (rand() % angle) / 1000.0f * (rand() % 2 == 0 ? 1 : -1);
|
||||
@ -1423,13 +1423,13 @@ void Human::RecalcBuff()
|
||||
{
|
||||
buff = HumanAbility();
|
||||
if (skin_jlf_meta) {
|
||||
buff.damage_add += skin_jlf_meta->i->atk_add();
|
||||
buff.def_add += skin_jlf_meta->i->def_add();
|
||||
buff.speed += skin_jlf_meta->i->speed_add();
|
||||
buff.damage_add += skin_jlf_meta->GetAttrValue(skin_jlf.skin_lv, DA_Atk);
|
||||
buff.def_add += skin_jlf_meta->GetAttrValue(skin_jlf.skin_lv, DA_Def);
|
||||
buff.speed += skin_jlf_meta->GetAttrValue(skin_jlf.skin_lv, DA_Speed);
|
||||
} else if (skin_meta) {
|
||||
buff.damage_add += skin_meta->i->atk_add();
|
||||
buff.def_add += skin_meta->i->def_add();
|
||||
buff.speed += skin_meta->i->speed_add();
|
||||
buff.damage_add += skin_meta->GetAttrValue(skin.skin_lv, DA_Atk);
|
||||
buff.def_add += skin_meta->GetAttrValue(skin.skin_lv, DA_Def);
|
||||
buff.speed += skin_meta->GetAttrValue(skin.skin_lv, DA_Speed);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,28 +81,49 @@ namespace MetaData
|
||||
|
||||
void EquipUpgrade::Init()
|
||||
{
|
||||
std::vector<int> attr_type;
|
||||
std::vector<float> attr_value;
|
||||
for (size_t j = 0; j < i->max_lv(); ++j) {
|
||||
std::array<float, EA_End>& attrs = a8::FastAppend(level_attrs);
|
||||
for (size_t k = 0; k < EA_End; ++k) {
|
||||
attrs[k] = 0;
|
||||
}
|
||||
}
|
||||
{
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->attr_type(), strings, '|');
|
||||
for (auto& str : strings) {
|
||||
attr_type.push_back(a8::XValue(str).GetInt());
|
||||
std::vector<std::string> strings2;
|
||||
a8::Split(str, strings2, ':');
|
||||
if (strings2.size() != 3) {
|
||||
abort();
|
||||
}
|
||||
int attr_type = a8::XValue(strings2[0]);
|
||||
int attr_level = a8::XValue(strings2[1]);
|
||||
float attr_value = a8::XValue(strings2[2]).GetDouble();
|
||||
if (attr_type < EA_End) {
|
||||
if (attr_level >= 0 && attr_level < i->max_lv()) {
|
||||
for (size_t j = 1; j < i->max_lv(); ++j) {
|
||||
if (j % attr_type == 0) {
|
||||
level_attrs[j][attr_type] = attr_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->attr_value(), strings, '|');
|
||||
for (auto& str : strings) {
|
||||
attr_value.push_back(a8::XValue(str).GetDouble());
|
||||
}
|
||||
}
|
||||
|
||||
float EquipUpgrade::GetAttrValue(int level, int attr_type)
|
||||
{
|
||||
if (level < 1) {
|
||||
return 0;
|
||||
}
|
||||
assert(attr_type.size() == attr_value.size());
|
||||
for (size_t i = 0; i < attr_type.size(); ++i) {
|
||||
if (attr_type[i] < EA_End) {
|
||||
attr[attr_type[i]] = attr_value[i];
|
||||
}
|
||||
if (level > level_attrs.size()) {
|
||||
return 0;
|
||||
}
|
||||
if (attr_type < EA_End) {
|
||||
return level_attrs[level][attr_type];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Player::Init()
|
||||
@ -345,4 +366,51 @@ namespace MetaData
|
||||
last_time = a8::XValue(i->last_time()).GetInt();
|
||||
}
|
||||
|
||||
void Dress::Init()
|
||||
{
|
||||
for (size_t j = 0; j < i->max_lv(); ++j) {
|
||||
std::array<float, DA_End>& attrs = a8::FastAppend(level_attrs);
|
||||
for (size_t k = 0; k < DA_End; ++k) {
|
||||
attrs[k] = 0;
|
||||
}
|
||||
}
|
||||
{
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->attr_type(), strings, '|');
|
||||
for (auto& str : strings) {
|
||||
std::vector<std::string> strings2;
|
||||
a8::Split(str, strings2, ':');
|
||||
if (strings2.size() != 3) {
|
||||
abort();
|
||||
}
|
||||
int attr_type = a8::XValue(strings2[0]);
|
||||
int attr_level = a8::XValue(strings2[1]);
|
||||
float attr_value = a8::XValue(strings2[2]).GetDouble();
|
||||
if (attr_type < DA_End) {
|
||||
if (attr_level >= 0 && attr_level < i->max_lv()) {
|
||||
for (size_t j = 1; j < i->max_lv(); ++j) {
|
||||
if (j % attr_type == 0) {
|
||||
level_attrs[j][attr_type] = attr_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float Dress::GetAttrValue(int level, int attr_type)
|
||||
{
|
||||
if (level < 1) {
|
||||
return 0;
|
||||
}
|
||||
if (level > level_attrs.size()) {
|
||||
return 0;
|
||||
}
|
||||
if (attr_type < DA_End) {
|
||||
return level_attrs[level][attr_type];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -56,8 +56,11 @@ namespace MetaData
|
||||
{
|
||||
const metatable::EquipUpgrade* i = nullptr;
|
||||
|
||||
std::array<float, EA_End> attr = {};
|
||||
void Init();
|
||||
float GetAttrValue(int level, int attr_type);
|
||||
|
||||
private:
|
||||
std::vector<std::array<float, EA_End>> level_attrs;
|
||||
};
|
||||
|
||||
struct Player
|
||||
@ -149,7 +152,13 @@ namespace MetaData
|
||||
struct Dress
|
||||
{
|
||||
const metatable::Dress* i = nullptr;
|
||||
};
|
||||
|
||||
void Init();
|
||||
float GetAttrValue(int level, int attr_type);
|
||||
|
||||
private:
|
||||
std::vector<std::array<float, DA_End>> level_attrs;
|
||||
};
|
||||
|
||||
struct RankReward
|
||||
{
|
||||
|
@ -58,11 +58,11 @@ public:
|
||||
std::map<int, MetaData::Drop*> drop_hash;
|
||||
std::map<std::string, std::list<metatable::MapTplThingJson>> maptpl_meta_hash;
|
||||
std::map<std::string, std::vector<MetaData::MapTplThing>> maptpl_hash;
|
||||
std::map<long long, MetaData::Dress*> dress_hash;
|
||||
std::map<int, MetaData::Dress*> dress_hash;
|
||||
std::map<int, MetaData::Skill*> skill_hash;
|
||||
std::map<int, MetaData::RankReward*> rankreward_hash;
|
||||
std::map<int, MetaData::KillReward*> killreward_hash;
|
||||
std::map<long long, MetaData::EquipUpgrade*> equipupgrade_hash;
|
||||
std::map<int, MetaData::EquipUpgrade*> equipupgrade_hash;
|
||||
std::map<int, MetaData::Robot*> robot_hash;
|
||||
|
||||
void Load()
|
||||
@ -232,15 +232,7 @@ private:
|
||||
for (auto& meta : dress_meta_list) {
|
||||
MetaData::Dress& item = a8::FastAppend(dress_list);
|
||||
item.i = &meta;
|
||||
dress_hash[a8::MakeInt64(item.i->id(),
|
||||
item.i->level()
|
||||
)] = &item;
|
||||
}
|
||||
for (auto& meta : dress_meta_list) {
|
||||
MetaData::Dress* dress_meta = MetaMgr::Instance()->GetDress(meta.id(), 1);
|
||||
if (dress_meta) {
|
||||
meta.set_skill_id(dress_meta->i->skill_id());
|
||||
}
|
||||
dress_hash[item.i->id()] = &item;
|
||||
}
|
||||
|
||||
for (auto& meta : skill_meta_list) {
|
||||
@ -265,7 +257,7 @@ private:
|
||||
for (auto& meta : equipupgrade_meta_list) {
|
||||
MetaData::EquipUpgrade& item = a8::FastAppend(equipupgrade_list);
|
||||
item.i = &meta;
|
||||
equipupgrade_hash[a8::MakeInt64(meta.id(), meta.level())] = &item;
|
||||
equipupgrade_hash[meta.id()] = &item;
|
||||
}
|
||||
|
||||
for (auto& meta : robot_meta_list) {
|
||||
@ -350,9 +342,9 @@ MetaData::Equip* MetaMgr::GetEquipBySlotId(int slot_id)
|
||||
return itr != loader_->equip_slot_hash.end() ? itr->second : nullptr;
|
||||
}
|
||||
|
||||
MetaData::EquipUpgrade* MetaMgr::GetEquipUpgrade(int equip_id, int equip_lv)
|
||||
MetaData::EquipUpgrade* MetaMgr::GetEquipUpgrade(int equip_id)
|
||||
{
|
||||
auto itr = loader_->equipupgrade_hash.find(a8::MakeInt64(equip_id, equip_lv));
|
||||
auto itr = loader_->equipupgrade_hash.find(equip_id);
|
||||
return itr != loader_->equipupgrade_hash.end() ? itr->second : nullptr;
|
||||
}
|
||||
|
||||
@ -399,9 +391,9 @@ MetaData::Skill* MetaMgr::GetSkill(int skill_id)
|
||||
return itr != loader_->skill_hash.end() ? itr->second : nullptr;
|
||||
}
|
||||
|
||||
MetaData::Dress* MetaMgr::GetDress(int dress_id, int level)
|
||||
MetaData::Dress* MetaMgr::GetDress(int dress_id)
|
||||
{
|
||||
auto itr = loader_->dress_hash.find(a8::MakeInt64(dress_id, level));
|
||||
auto itr = loader_->dress_hash.find(dress_id);
|
||||
return itr != loader_->dress_hash.end() ? itr->second : nullptr;
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
||||
MetaData::Player* GetPlayer(int id);
|
||||
MetaData::Equip* GetEquip(int id);
|
||||
MetaData::Equip* GetEquipBySlotId(int slot_id);
|
||||
MetaData::EquipUpgrade* GetEquipUpgrade(int equip_id, int equip_lv);
|
||||
MetaData::EquipUpgrade* GetEquipUpgrade(int equip_id);
|
||||
MetaData::Building* GetBuilding(int building_id);
|
||||
MetaData::Drop* GetDrop(int drop_id);
|
||||
MetaData::SafeArea* GetSafeArea(int area_id);
|
||||
@ -32,7 +32,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
||||
std::list<MetaData::AirDrop>& GetAirDrops();
|
||||
MetaData::AirLine* RandAirLine();
|
||||
MetaData::Skill* GetSkill(int skill_id);
|
||||
MetaData::Dress* GetDress(int dress_id, int level);
|
||||
MetaData::Dress* GetDress(int dress_id);
|
||||
float GetRankRewardParam(int rank);
|
||||
float GetKillRewardParam(int kill_num);
|
||||
std::vector<MetaData::Robot>* GetRobotList();
|
||||
|
@ -32,7 +32,7 @@ void Player::Initialize()
|
||||
Human::Initialize();
|
||||
health = meta->i->health();
|
||||
max_energy_shield = energy_shield;
|
||||
skin_meta = MetaMgr::Instance()->GetDress(SkinId(), SkinLv());
|
||||
skin_meta = MetaMgr::Instance()->GetDress(SkinId());
|
||||
if (skin_meta) {
|
||||
skill_meta = MetaMgr::Instance()->GetSkill(skin_meta->i->skill_id());
|
||||
} else {
|
||||
@ -341,7 +341,7 @@ void Player::Shot()
|
||||
if (curr_weapon->meta->i->bullet_angle() >= 0.01f) {
|
||||
int angle = (int)curr_weapon->meta->i->bullet_angle() * 1000;
|
||||
if (curr_weapon->upgrade_meta) {
|
||||
angle -= curr_weapon->upgrade_meta->attr[EA_BulletAngle] * 1000;
|
||||
angle -= curr_weapon->upgrade_meta->GetAttrValue(curr_weapon->weapon_lv, EA_BulletAngle) * 1000;
|
||||
}
|
||||
if (angle > 0) {
|
||||
bullet_angle += (rand() % angle) / 1000.0f * (rand() % 2 == 0 ? 1 : -1);
|
||||
@ -552,7 +552,7 @@ void Player::LootInteraction(Loot* entity)
|
||||
}
|
||||
skin_jlf.skin_id = entity->item_id;
|
||||
skin_jlf.skin_lv = std::max(1, GetSkinConfigLv(skin_jlf.skin_id));
|
||||
skin_jlf_meta = MetaMgr::Instance()->GetDress(skin_jlf.skin_id, skin_jlf.skin_lv);
|
||||
skin_jlf_meta = MetaMgr::Instance()->GetDress(skin_jlf.skin_id);
|
||||
if (skin_jlf_meta) {
|
||||
skill_meta = MetaMgr::Instance()->GetSkill(skin_jlf_meta->i->skill_id());
|
||||
} else {
|
||||
|
@ -13,15 +13,13 @@ void Weapon::ToPB(cs::MFWeapon* pb_obj)
|
||||
|
||||
void Weapon::Recalc()
|
||||
{
|
||||
upgrade_meta = MetaMgr::Instance()->GetEquipUpgrade(weapon_id,
|
||||
weapon_lv);
|
||||
|
||||
upgrade_meta = MetaMgr::Instance()->GetEquipUpgrade(weapon_id);
|
||||
}
|
||||
|
||||
int Weapon::GetClipVolume()
|
||||
{
|
||||
if (upgrade_meta) {
|
||||
return meta->i->clip_volume() + upgrade_meta->attr[EA_Volume];
|
||||
return meta->i->clip_volume() + upgrade_meta->GetAttrValue(weapon_lv, EA_Volume);
|
||||
} else {
|
||||
return meta->i->clip_volume();
|
||||
}
|
||||
|
@ -85,10 +85,8 @@ message Equip
|
||||
message EquipUpgrade
|
||||
{
|
||||
optional int32 id = 1;
|
||||
optional int32 level = 2;
|
||||
optional int32 next_level = 3;
|
||||
optional string attr_type = 4;
|
||||
optional string attr_value = 5;
|
||||
optional int32 max_lv = 5;
|
||||
}
|
||||
|
||||
message Player
|
||||
@ -157,9 +155,8 @@ message Dress
|
||||
optional int32 id = 1;
|
||||
optional int32 level = 2;
|
||||
optional int32 skill_id = 3;
|
||||
optional int32 atk_add = 10;
|
||||
optional int32 def_add = 11;
|
||||
optional int32 speed_add = 12;
|
||||
optional string attr_type = 4;
|
||||
optional int32 max_lv = 5;
|
||||
}
|
||||
|
||||
message RankReward
|
||||
|
Loading…
x
Reference in New Issue
Block a user