皮肤等级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;
|
player->stats.damage_amount_out += finaly_dmg;
|
||||||
hum->DecHP(finaly_dmg, player->entity_uniid, player->name, gun_meta->i->id());
|
hum->DecHP(finaly_dmg, player->entity_uniid, player->name, gun_meta->i->id());
|
||||||
if (a8::HasBitFlag(hum->status, HS_ReflectDamage) && hum->skill_meta) {
|
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) {
|
if (reflect_dmg > 1.0f) {
|
||||||
player->DecHP(reflect_dmg, hum->entity_uniid, hum->name, gun_meta->i->id());
|
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 float FRAME_RATE_MS = 1000.0f / SERVER_FRAME_RATE;
|
||||||
|
|
||||||
const int MAX_WEAPON_NUM = 5;
|
const int MAX_WEAPON_NUM = 5;
|
||||||
|
const int MAX_SKIN_LV = 9;
|
||||||
|
|
||||||
const int GUN_SLOT1 = 1;
|
const int GUN_SLOT1 = 1;
|
||||||
const int GUN_SLOT2 = 2;
|
const int GUN_SLOT2 = 2;
|
||||||
|
@ -773,7 +773,7 @@ void Human::DoSkill()
|
|||||||
{
|
{
|
||||||
if (skill_meta && skill_meta->i->condition() == SC_Active) {
|
if (skill_meta && skill_meta->i->condition() == SC_Active) {
|
||||||
int passed_time = (room->frame_no - last_use_skill_frameno_) * FRAME_RATE_MS;
|
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) {
|
if (skill_left_time <= 0 || last_use_skill_frameno_ == 0) {
|
||||||
skill_xtimer_attacher_.ClearTimerList();
|
skill_xtimer_attacher_.ClearTimerList();
|
||||||
switch (skill_meta->i->type()) {
|
switch (skill_meta->i->type()) {
|
||||||
@ -781,7 +781,7 @@ void Human::DoSkill()
|
|||||||
{
|
{
|
||||||
hide_frameno_ = room->frame_no;
|
hide_frameno_ = room->frame_no;
|
||||||
a8::SetBitFlag(status, HS_Hide);
|
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()
|
a8::XParams()
|
||||||
.SetSender(this),
|
.SetSender(this),
|
||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
@ -809,8 +809,8 @@ void Human::DoSkill()
|
|||||||
{
|
{
|
||||||
accelerate_frameno_ = room->frame_no;
|
accelerate_frameno_ = room->frame_no;
|
||||||
a8::SetBitFlag(status, HS_Accelerate);
|
a8::SetBitFlag(status, HS_Accelerate);
|
||||||
buff.speed += skill_meta->i->value1();
|
buff.speed += skill_meta->GetValue1(skin.skin_lv);
|
||||||
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()
|
a8::XParams()
|
||||||
.SetSender(this),
|
.SetSender(this),
|
||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
@ -834,7 +834,7 @@ void Human::DoSkill()
|
|||||||
{
|
{
|
||||||
damageadd_frameno_ = room->frame_no;
|
damageadd_frameno_ = room->frame_no;
|
||||||
a8::SetBitFlag(status, HS_DamageAdd);
|
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()
|
a8::XParams()
|
||||||
.SetSender(this),
|
.SetSender(this),
|
||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
@ -857,7 +857,7 @@ void Human::DoSkill()
|
|||||||
{
|
{
|
||||||
defadd_frameno_ = room->frame_no;
|
defadd_frameno_ = room->frame_no;
|
||||||
a8::SetBitFlag(status, HS_DefAdd);
|
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()
|
a8::XParams()
|
||||||
.SetSender(this),
|
.SetSender(this),
|
||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
@ -894,7 +894,7 @@ void Human::DoSkill()
|
|||||||
},
|
},
|
||||||
&skill_xtimer_attacher_.timer_list_
|
&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()
|
a8::XParams()
|
||||||
.SetSender(this),
|
.SetSender(this),
|
||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
@ -917,7 +917,7 @@ void Human::DoSkill()
|
|||||||
{
|
{
|
||||||
reflect_damage_frameno_ = room->frame_no;
|
reflect_damage_frameno_ = room->frame_no;
|
||||||
a8::SetBitFlag(status, HS_ReflectDamage);
|
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()
|
a8::XParams()
|
||||||
.SetSender(this),
|
.SetSender(this),
|
||||||
[] (const a8::XParams& param)
|
[] (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;
|
int passed_time = (room->frame_no - hide_frameno_) * FRAME_RATE_MS;
|
||||||
cs::MFBodyState* state = states->Add();
|
cs::MFBodyState* state = states->Add();
|
||||||
state->set_state_type(HS_Hide);
|
state->set_state_type(HS_Hide);
|
||||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||||
}
|
}
|
||||||
if (a8::HasBitFlag(status, HS_Accelerate) && skill_meta) {
|
if (a8::HasBitFlag(status, HS_Accelerate) && skill_meta) {
|
||||||
int passed_time = (room->frame_no - accelerate_frameno_) * FRAME_RATE_MS;
|
int passed_time = (room->frame_no - accelerate_frameno_) * FRAME_RATE_MS;
|
||||||
cs::MFBodyState* state = states->Add();
|
cs::MFBodyState* state = states->Add();
|
||||||
state->set_state_type(HS_Accelerate);
|
state->set_state_type(HS_Accelerate);
|
||||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||||
}
|
}
|
||||||
if (a8::HasBitFlag(status, HS_DamageAdd) && skill_meta) {
|
if (a8::HasBitFlag(status, HS_DamageAdd) && skill_meta) {
|
||||||
int passed_time = (room->frame_no - damageadd_frameno_) * FRAME_RATE_MS;
|
int passed_time = (room->frame_no - damageadd_frameno_) * FRAME_RATE_MS;
|
||||||
cs::MFBodyState* state = states->Add();
|
cs::MFBodyState* state = states->Add();
|
||||||
state->set_state_type(HS_DamageAdd);
|
state->set_state_type(HS_DamageAdd);
|
||||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||||
}
|
}
|
||||||
if (a8::HasBitFlag(status, HS_DefAdd) && skill_meta) {
|
if (a8::HasBitFlag(status, HS_DefAdd) && skill_meta) {
|
||||||
int passed_time = (room->frame_no - defadd_frameno_) * FRAME_RATE_MS;
|
int passed_time = (room->frame_no - defadd_frameno_) * FRAME_RATE_MS;
|
||||||
cs::MFBodyState* state = states->Add();
|
cs::MFBodyState* state = states->Add();
|
||||||
state->set_state_type(HS_DefAdd);
|
state->set_state_type(HS_DefAdd);
|
||||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||||
}
|
}
|
||||||
if (a8::HasBitFlag(status, HS_RecoverHP) && skill_meta) {
|
if (a8::HasBitFlag(status, HS_RecoverHP) && skill_meta) {
|
||||||
int passed_time = (room->frame_no - recover_hp_frameno_) * FRAME_RATE_MS;
|
int passed_time = (room->frame_no - recover_hp_frameno_) * FRAME_RATE_MS;
|
||||||
cs::MFBodyState* state = states->Add();
|
cs::MFBodyState* state = states->Add();
|
||||||
state->set_state_type(HS_RecoverHP);
|
state->set_state_type(HS_RecoverHP);
|
||||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||||
}
|
}
|
||||||
if (a8::HasBitFlag(status, HS_ReflectDamage) && skill_meta) {
|
if (a8::HasBitFlag(status, HS_ReflectDamage) && skill_meta) {
|
||||||
int passed_time = (room->frame_no - reflect_damage_frameno_) * FRAME_RATE_MS;
|
int passed_time = (room->frame_no - reflect_damage_frameno_) * FRAME_RATE_MS;
|
||||||
cs::MFBodyState* state = states->Add();
|
cs::MFBodyState* state = states->Add();
|
||||||
state->set_state_type(HS_ReflectDamage);
|
state->set_state_type(HS_ReflectDamage);
|
||||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||||
}
|
}
|
||||||
if (a8::HasBitFlag(status, HS_SummonHero) && skill_meta) {
|
if (a8::HasBitFlag(status, HS_SummonHero) && skill_meta) {
|
||||||
int passed_time = (room->frame_no - summon_hero_frameno_) * FRAME_RATE_MS;
|
int passed_time = (room->frame_no - summon_hero_frameno_) * FRAME_RATE_MS;
|
||||||
cs::MFBodyState* state = states->Add();
|
cs::MFBodyState* state = states->Add();
|
||||||
state->set_state_type(HS_SummonHero);
|
state->set_state_type(HS_SummonHero);
|
||||||
state->set_left_time(std::max(0, skill_meta->i->last_time() * 1000 - passed_time));
|
state->set_left_time(std::max(0, skill_meta->GetLastTime(skin.skin_lv) * 1000 - passed_time));
|
||||||
state->set_lasting_time(skill_meta->i->last_time() * 1000);
|
state->set_lasting_time(skill_meta->GetLastTime(skin.skin_lv) * 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1346,7 +1346,7 @@ void Human::SummonHero()
|
|||||||
if (hero) {
|
if (hero) {
|
||||||
summon_hero_frameno_ = room->frame_no;
|
summon_hero_frameno_ = room->frame_no;
|
||||||
a8::SetBitFlag(status, HS_SummonHero);
|
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()
|
a8::XParams()
|
||||||
.SetSender(this)
|
.SetSender(this)
|
||||||
.SetParam1(hero->entity_uniid),
|
.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
|
struct Skill
|
||||||
{
|
{
|
||||||
const metatable::Skill* i = nullptr;
|
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
|
struct Dress
|
||||||
|
@ -226,6 +226,7 @@ private:
|
|||||||
for (auto& meta : skill_meta_list) {
|
for (auto& meta : skill_meta_list) {
|
||||||
MetaData::Skill& item = a8::FastAppend(skill_list);
|
MetaData::Skill& item = a8::FastAppend(skill_list);
|
||||||
item.i = &meta;
|
item.i = &meta;
|
||||||
|
item.Init();
|
||||||
skill_hash[item.i->id()] = &item;
|
skill_hash[item.i->id()] = &item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -597,8 +597,8 @@ void Room::OnHumanDie(Human* hum)
|
|||||||
for (auto& pair : human_hash_) {
|
for (auto& pair : human_hash_) {
|
||||||
if (pair.second != hum && (pair.second->team_id == 0 || pair.second->team_id != hum->team_id)) {
|
if (pair.second != hum && (pair.second->team_id == 0 || pair.second->team_id != hum->team_id)) {
|
||||||
float distance = (hum->pos - pair.second->pos).Norm();
|
float distance = (hum->pos - pair.second->pos).Norm();
|
||||||
if (distance <= hum->skill_meta->i->area()) {
|
if (distance <= hum->skill_meta->GetArea(hum->skin.skin_lv)) {
|
||||||
pair.second->DecHP(hum->skill_meta->i->value1(),
|
pair.second->DecHP(hum->skill_meta->GetValue1(hum->skin.skin_lv),
|
||||||
hum->entity_uniid,
|
hum->entity_uniid,
|
||||||
hum->name,
|
hum->name,
|
||||||
VW_SelfDetonate);
|
VW_SelfDetonate);
|
||||||
|
@ -108,11 +108,11 @@ message Skill
|
|||||||
optional int32 id = 1;
|
optional int32 id = 1;
|
||||||
optional int32 type = 2;
|
optional int32 type = 2;
|
||||||
optional int32 condition = 3;
|
optional int32 condition = 3;
|
||||||
optional float value1 = 4;
|
optional string value1 = 4;
|
||||||
optional float value2 = 5;
|
optional string value2 = 5;
|
||||||
optional int32 area = 6;
|
optional string area = 6;
|
||||||
optional int32 cd_time = 7;
|
optional int32 cd_time = 7;
|
||||||
optional int32 last_time = 8;
|
optional string last_time = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Drop
|
message Drop
|
||||||
|
Loading…
x
Reference in New Issue
Block a user