皮肤等级ok
This commit is contained in:
parent
94f57bd47d
commit
bb24c44830
@ -114,7 +114,7 @@ void Bullet::OnHit(std::set<Entity*>& objects)
|
||||
player->stats.damage_amount_out += finaly_dmg;
|
||||
hum->DecHP(finaly_dmg, player->entity_uniid, player->name, gun_meta->i->id());
|
||||
if (a8::HasBitFlag(hum->status, HS_ReflectDamage) && hum->skill_meta) {
|
||||
float reflect_dmg = finaly_dmg * hum->skill_meta->i->value1();
|
||||
float reflect_dmg = finaly_dmg * hum->skill_meta->GetValue1(hum->skin.skin_lv);
|
||||
if (reflect_dmg > 1.0f) {
|
||||
player->DecHP(reflect_dmg, hum->entity_uniid, hum->name, gun_meta->i->id());
|
||||
}
|
||||
|
@ -146,6 +146,7 @@ const int SYNC_FRAME_RATE = 10;
|
||||
const float FRAME_RATE_MS = 1000.0f / SERVER_FRAME_RATE;
|
||||
|
||||
const int MAX_WEAPON_NUM = 5;
|
||||
const int MAX_SKIN_LV = 9;
|
||||
|
||||
const int GUN_SLOT1 = 1;
|
||||
const int GUN_SLOT2 = 2;
|
||||
|
@ -773,7 +773,7 @@ void Human::DoSkill()
|
||||
{
|
||||
if (skill_meta && skill_meta->i->condition() == SC_Active) {
|
||||
int passed_time = (room->frame_no - last_use_skill_frameno_) * FRAME_RATE_MS;
|
||||
int skill_left_time = std::max(0, skill_meta->i->last_time() * 1000 - passed_time);
|
||||
int skill_left_time = std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time);
|
||||
if (skill_left_time <= 0 || last_use_skill_frameno_ == 0) {
|
||||
skill_xtimer_attacher_.ClearTimerList();
|
||||
switch (skill_meta->i->type()) {
|
||||
@ -781,7 +781,7 @@ void Human::DoSkill()
|
||||
{
|
||||
hide_frameno_ = room->frame_no;
|
||||
a8::SetBitFlag(status, HS_Hide);
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->i->last_time() * SERVER_FRAME_RATE,
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->GetLastTime(skin.skin_lv) * SERVER_FRAME_RATE,
|
||||
a8::XParams()
|
||||
.SetSender(this),
|
||||
[] (const a8::XParams& param)
|
||||
@ -809,8 +809,8 @@ void Human::DoSkill()
|
||||
{
|
||||
accelerate_frameno_ = room->frame_no;
|
||||
a8::SetBitFlag(status, HS_Accelerate);
|
||||
buff.speed += skill_meta->i->value1();
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->i->last_time() * SERVER_FRAME_RATE,
|
||||
buff.speed += skill_meta->GetValue1(skin.skin_lv);
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->GetLastTime(skin.skin_lv) * SERVER_FRAME_RATE,
|
||||
a8::XParams()
|
||||
.SetSender(this),
|
||||
[] (const a8::XParams& param)
|
||||
@ -834,7 +834,7 @@ void Human::DoSkill()
|
||||
{
|
||||
damageadd_frameno_ = room->frame_no;
|
||||
a8::SetBitFlag(status, HS_DamageAdd);
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->i->last_time() * SERVER_FRAME_RATE,
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->GetLastTime(skin.skin_lv) * SERVER_FRAME_RATE,
|
||||
a8::XParams()
|
||||
.SetSender(this),
|
||||
[] (const a8::XParams& param)
|
||||
@ -857,7 +857,7 @@ void Human::DoSkill()
|
||||
{
|
||||
defadd_frameno_ = room->frame_no;
|
||||
a8::SetBitFlag(status, HS_DefAdd);
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->i->last_time() * SERVER_FRAME_RATE,
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->GetLastTime(skin.skin_lv) * SERVER_FRAME_RATE,
|
||||
a8::XParams()
|
||||
.SetSender(this),
|
||||
[] (const a8::XParams& param)
|
||||
@ -894,7 +894,7 @@ void Human::DoSkill()
|
||||
},
|
||||
&skill_xtimer_attacher_.timer_list_
|
||||
);
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->i->last_time() * SERVER_FRAME_RATE,
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->GetLastTime(skin.skin_lv) * SERVER_FRAME_RATE,
|
||||
a8::XParams()
|
||||
.SetSender(this),
|
||||
[] (const a8::XParams& param)
|
||||
@ -917,7 +917,7 @@ void Human::DoSkill()
|
||||
{
|
||||
reflect_damage_frameno_ = room->frame_no;
|
||||
a8::SetBitFlag(status, HS_ReflectDamage);
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->i->last_time() * SERVER_FRAME_RATE,
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->GetLastTime(skin.skin_lv) * SERVER_FRAME_RATE,
|
||||
a8::XParams()
|
||||
.SetSender(this),
|
||||
[] (const a8::XParams& param)
|
||||
@ -1293,50 +1293,50 @@ void Human::FillBodyState(::google::protobuf::RepeatedPtrField<::cs::MFBodyState
|
||||
int passed_time = (room->frame_no - hide_frameno_) * FRAME_RATE_MS;
|
||||
cs::MFBodyState* state = states->Add();
|
||||
state->set_state_type(HS_Hide);
|
||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
||||
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||
}
|
||||
if (a8::HasBitFlag(status, HS_Accelerate) && skill_meta) {
|
||||
int passed_time = (room->frame_no - accelerate_frameno_) * FRAME_RATE_MS;
|
||||
cs::MFBodyState* state = states->Add();
|
||||
state->set_state_type(HS_Accelerate);
|
||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
||||
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||
}
|
||||
if (a8::HasBitFlag(status, HS_DamageAdd) && skill_meta) {
|
||||
int passed_time = (room->frame_no - damageadd_frameno_) * FRAME_RATE_MS;
|
||||
cs::MFBodyState* state = states->Add();
|
||||
state->set_state_type(HS_DamageAdd);
|
||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
||||
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||
}
|
||||
if (a8::HasBitFlag(status, HS_DefAdd) && skill_meta) {
|
||||
int passed_time = (room->frame_no - defadd_frameno_) * FRAME_RATE_MS;
|
||||
cs::MFBodyState* state = states->Add();
|
||||
state->set_state_type(HS_DefAdd);
|
||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
||||
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||
}
|
||||
if (a8::HasBitFlag(status, HS_RecoverHP) && skill_meta) {
|
||||
int passed_time = (room->frame_no - recover_hp_frameno_) * FRAME_RATE_MS;
|
||||
cs::MFBodyState* state = states->Add();
|
||||
state->set_state_type(HS_RecoverHP);
|
||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
||||
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||
}
|
||||
if (a8::HasBitFlag(status, HS_ReflectDamage) && skill_meta) {
|
||||
int passed_time = (room->frame_no - reflect_damage_frameno_) * FRAME_RATE_MS;
|
||||
cs::MFBodyState* state = states->Add();
|
||||
state->set_state_type(HS_ReflectDamage);
|
||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
||||
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||
}
|
||||
if (a8::HasBitFlag(status, HS_SummonHero) && skill_meta) {
|
||||
int passed_time = (room->frame_no - summon_hero_frameno_) * FRAME_RATE_MS;
|
||||
cs::MFBodyState* state = states->Add();
|
||||
state->set_state_type(HS_SummonHero);
|
||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
||||
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1346,7 +1346,7 @@ void Human::SummonHero()
|
||||
if (hero) {
|
||||
summon_hero_frameno_ = room->frame_no;
|
||||
a8::SetBitFlag(status, HS_SummonHero);
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->i->last_time() * SERVER_FRAME_RATE,
|
||||
room->xtimer.AddDeadLineTimerAndAttach(skill_meta->GetLastTime(skin.skin_lv) * SERVER_FRAME_RATE,
|
||||
a8::XParams()
|
||||
.SetSender(this)
|
||||
.SetParam1(hero->entity_uniid),
|
||||
|
@ -332,4 +332,92 @@ namespace MetaData
|
||||
}
|
||||
}
|
||||
|
||||
void Skill::Init()
|
||||
{
|
||||
{
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->value1(), strings, '|');
|
||||
assert(i->value1() == "" || strings.size() == MAX_SKIN_LV);
|
||||
for (size_t i = 0; i < strings.size(); ++i) {
|
||||
if (i < MAX_SKIN_LV) {
|
||||
value1[i] = a8::XValue(strings[i]).GetDouble();
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->value2(), strings, '|');
|
||||
assert(i->value2() == "" || strings.size() == MAX_SKIN_LV);
|
||||
for (size_t i = 0; i < strings.size(); ++i) {
|
||||
if (i < MAX_SKIN_LV) {
|
||||
value2[i] = a8::XValue(strings[i]).GetDouble();
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->area(), strings, '|');
|
||||
assert(i->area() == "" || strings.size() == MAX_SKIN_LV);
|
||||
for (size_t i = 0; i < strings.size(); ++i) {
|
||||
if (i < MAX_SKIN_LV) {
|
||||
area[i] = a8::XValue(strings[i]).GetDouble();
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->last_time(), strings, '|');
|
||||
assert(i->last_time() == "" || strings.size() == MAX_SKIN_LV);
|
||||
for (size_t i = 0; i < strings.size(); ++i) {
|
||||
if (i < MAX_SKIN_LV) {
|
||||
last_time[i] = a8::XValue(strings[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float Skill::GetValue1(int skin_lv)
|
||||
{
|
||||
if (skin_lv < 1) {
|
||||
return value1[0];
|
||||
}
|
||||
if (skin_lv > MAX_SKIN_LV) {
|
||||
return value1[MAX_SKIN_LV - 1];
|
||||
}
|
||||
return value1[skin_lv - 1];
|
||||
}
|
||||
|
||||
float Skill::GetValue2(int skin_lv)
|
||||
{
|
||||
if (skin_lv < 1) {
|
||||
return value2[0];
|
||||
}
|
||||
if (skin_lv > MAX_SKIN_LV) {
|
||||
return value2[MAX_SKIN_LV - 1];
|
||||
}
|
||||
return value2[skin_lv - 1];
|
||||
}
|
||||
|
||||
float Skill::GetArea(int skin_lv)
|
||||
{
|
||||
if (skin_lv < 1) {
|
||||
return area[0];
|
||||
}
|
||||
if (skin_lv > MAX_SKIN_LV) {
|
||||
return area[MAX_SKIN_LV - 1];
|
||||
}
|
||||
return area[skin_lv - 1];
|
||||
}
|
||||
|
||||
int Skill::GetLastTime(int skin_lv)
|
||||
{
|
||||
if (skin_lv < 1) {
|
||||
return last_time[0];
|
||||
}
|
||||
if (skin_lv > MAX_SKIN_LV) {
|
||||
return last_time[MAX_SKIN_LV - 1];
|
||||
}
|
||||
return last_time[skin_lv - 1];
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -131,6 +131,19 @@ namespace MetaData
|
||||
struct Skill
|
||||
{
|
||||
const metatable::Skill* i = nullptr;
|
||||
|
||||
void Init();
|
||||
float GetValue1(int skin_lv);
|
||||
float GetValue2(int skin_lv);
|
||||
float GetArea(int skin_lv);
|
||||
int GetLastTime(int skin_lv);
|
||||
|
||||
private:
|
||||
std::array<float, MAX_SKIN_LV> value1 = {};
|
||||
std::array<float, MAX_SKIN_LV> value2 = {};
|
||||
std::array<float, MAX_SKIN_LV> area = {};
|
||||
std::array<int, MAX_SKIN_LV> last_time = {};
|
||||
|
||||
};
|
||||
|
||||
struct Dress
|
||||
|
@ -226,6 +226,7 @@ private:
|
||||
for (auto& meta : skill_meta_list) {
|
||||
MetaData::Skill& item = a8::FastAppend(skill_list);
|
||||
item.i = &meta;
|
||||
item.Init();
|
||||
skill_hash[item.i->id()] = &item;
|
||||
}
|
||||
|
||||
|
@ -597,8 +597,8 @@ void Room::OnHumanDie(Human* hum)
|
||||
for (auto& pair : human_hash_) {
|
||||
if (pair.second != hum && (pair.second->team_id == 0 || pair.second->team_id != hum->team_id)) {
|
||||
float distance = (hum->pos - pair.second->pos).Norm();
|
||||
if (distance <= hum->skill_meta->i->area()) {
|
||||
pair.second->DecHP(hum->skill_meta->i->value1(),
|
||||
if (distance <= hum->skill_meta->GetArea(hum->skin.skin_lv)) {
|
||||
pair.second->DecHP(hum->skill_meta->GetValue1(hum->skin.skin_lv),
|
||||
hum->entity_uniid,
|
||||
hum->name,
|
||||
VW_SelfDetonate);
|
||||
|
@ -108,11 +108,11 @@ message Skill
|
||||
optional int32 id = 1;
|
||||
optional int32 type = 2;
|
||||
optional int32 condition = 3;
|
||||
optional float value1 = 4;
|
||||
optional float value2 = 5;
|
||||
optional int32 area = 6;
|
||||
optional string value1 = 4;
|
||||
optional string value2 = 5;
|
||||
optional string area = 6;
|
||||
optional int32 cd_time = 7;
|
||||
optional int32 last_time = 8;
|
||||
optional string last_time = 8;
|
||||
}
|
||||
|
||||
message Drop
|
||||
|
Loading…
x
Reference in New Issue
Block a user