This commit is contained in:
aozhiwei 2019-07-12 14:22:35 +08:00
parent f3250e450c
commit 78399a1199
6 changed files with 104 additions and 12 deletions

View File

@ -264,8 +264,6 @@ void GridService::ComputeDiff(int old_grid_id, int new_grid_id,
std::set<GridCell*>& inc_grid_list, std::set<GridCell*>& inc_grid_list,
std::set<GridCell*>& dec_grid_list) std::set<GridCell*>& dec_grid_list)
{ {
int diff_grid = new_grid_id - old_grid_id;
#if 1
{ {
std::set<GridCell*> new_grid_list; std::set<GridCell*> new_grid_list;
GetAllCells(new_grid_id, new_grid_list); GetAllCells(new_grid_id, new_grid_list);
@ -280,7 +278,6 @@ void GridService::ComputeDiff(int old_grid_id, int new_grid_id,
} }
} }
} }
#endif
grid_list.clear(); grid_list.clear();
GetAllCells(new_grid_id, grid_list); GetAllCells(new_grid_id, grid_list);

View File

@ -22,6 +22,8 @@
#include "framework/cpp/utils.h" #include "framework/cpp/utils.h"
#include "framework/cpp/httpclientpool.h" #include "framework/cpp/httpclientpool.h"
const int HIDE_BUFF_ID = 1010;
Human::Human():Entity() Human::Human():Entity()
{ {
default_weapon.weapon_idx = 0; default_weapon.weapon_idx = 0;
@ -247,6 +249,7 @@ void Human::DirectShot(MetaData::Equip* bullet_meta)
} }
} }
} }
OnAttack();
} }
void Human::RecalcSelfCollider() void Human::RecalcSelfCollider()
@ -697,6 +700,7 @@ void Human::DoSkill()
} else { } else {
playing_skill = false; playing_skill = false;
} }
OnAttack();
} }
use_skill = false; use_skill = false;
} }
@ -1504,6 +1508,91 @@ void Human::ProcBuffEffect(Buff* buff)
} }
} }
void Human::OnAttack()
{
if (a8::HasBitFlag(status, HS_InGrass)) {
if (HasBuffEffect(BET_Hide)) {
RemoveBuff(buff_effect_[BET_Hide]->meta->i->buff_id());
}
if (grass_hide_timer_list_) {
room->xtimer.ModifyTimer(grass_hide_timer_list_,
MetaMgr::Instance()->grass_invisible_time2 * SERVER_FRAME_RATE);
} else {
auto hide_func =
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->grass_hide_timer_list_ = nullptr;
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(HIDE_BUFF_ID);
if (buff_meta) {
hum->AddBuff(buff_meta);
}
};
grass_hide_timer_list_ =
room->xtimer.AddDeadLineTimerAndAttach(MetaMgr::Instance()->grass_invisible_time2 * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
hide_func,
&xtimer_attacher.timer_list_);
}
}
}
void Human::OnEnterGrass()
{
if (a8::HasBitFlag(status, HS_InGrass)) {
return;
}
a8::SetBitFlag(status, HS_InGrass);
if (leave_grass_timer_list_) {
room->xtimer.DeleteTimer(leave_grass_timer_list_);
leave_grass_timer_list_ = nullptr;
}
if (grass_hide_timer_list_) {
room->xtimer.DeleteTimer(grass_hide_timer_list_);
grass_hide_timer_list_ = nullptr;
}
auto hide_func =
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->grass_hide_timer_list_ = nullptr;
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(HIDE_BUFF_ID);
if (buff_meta) {
hum->AddBuff(buff_meta);
}
};
grass_hide_timer_list_ =
room->xtimer.AddDeadLineTimerAndAttach(MetaMgr::Instance()->grass_invisible_time * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
hide_func,
&xtimer_attacher.timer_list_);
}
void Human::OnLeaveGrass()
{
a8::UnSetBitFlag(status, HS_InGrass);
if (grass_hide_timer_list_) {
room->xtimer.DeleteTimer(grass_hide_timer_list_);
grass_hide_timer_list_ = nullptr;
}
if (leave_grass_timer_list_) {
room->xtimer.DeleteTimer(leave_grass_timer_list_);
leave_grass_timer_list_ =
room->xtimer.AddDeadLineTimerAndAttach(MetaMgr::Instance()->grass_show_time * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->leave_grass_timer_list_ = nullptr;
hum->RemoveBuff(HIDE_BUFF_ID);
},
&xtimer_attacher.timer_list_);
}
}
void Human::_UpdateMove(int speed) void Human::_UpdateMove(int speed)
{ {
for (int i = 0; i < speed; ++i) { for (int i = 0; i < speed; ++i) {

View File

@ -17,14 +17,7 @@ namespace MetaData
enum HumanStatus enum HumanStatus
{ {
HS_Hide = 4, HS_InGrass = 1,
HS_Accelerate = 5,
HS_DamageAdd = 6,
HS_DefAdd = 7,
HS_RecoverHP = 8,
HS_ReflectDamage = 9,
HS_SummonHero = 10,
HS_Invincible = 11,
HS_End HS_End
}; };
@ -84,7 +77,7 @@ class Human : public Entity
int lethal_weapon = 0; int lethal_weapon = 0;
long long dead_frameno = 0; long long dead_frameno = 0;
long long join_frameno = 0; long long join_frameno = 0;
int status = 0; long long status = 0;
Weapon default_weapon; Weapon default_weapon;
std::vector<Weapon> weapons; std::vector<Weapon> weapons;
@ -213,6 +206,9 @@ class Human : public Entity
Buff* GetBuffByEffectId(int effect_id); Buff* GetBuffByEffectId(int effect_id);
void RecalcBuffAttr(); void RecalcBuffAttr();
void ProcBuffEffect(Buff* buff); void ProcBuffEffect(Buff* buff);
void OnAttack();
void OnEnterGrass();
void OnLeaveGrass();
protected: protected:
void _UpdateMove(int speed); void _UpdateMove(int speed);
@ -272,6 +268,9 @@ private:
Skin skin; Skin skin;
xtimer_list* grass_hide_timer_list_ = nullptr;
xtimer_list* leave_grass_timer_list_ = nullptr;
friend class FrameMaker; friend class FrameMaker;
friend class FrameEvent; friend class FrameEvent;
}; };

View File

@ -113,6 +113,9 @@ public:
MetaMgr::Instance()->fighting_mode = MetaMgr::Instance()->GetSysParamAsInt("fighting_mode", 1); MetaMgr::Instance()->fighting_mode = MetaMgr::Instance()->GetSysParamAsInt("fighting_mode", 1);
MetaMgr::Instance()->revive_time = MetaMgr::Instance()->GetSysParamAsInt("revive_time", 5); MetaMgr::Instance()->revive_time = MetaMgr::Instance()->GetSysParamAsInt("revive_time", 5);
MetaMgr::Instance()->game_duration = MetaMgr::Instance()->GetSysParamAsInt("revive_time", 60 * 2); MetaMgr::Instance()->game_duration = MetaMgr::Instance()->GetSysParamAsInt("revive_time", 60 * 2);
MetaMgr::Instance()->grass_invisible_time = MetaMgr::Instance()->GetSysParamAsInt("grass_invisible_time", 0.5f);
MetaMgr::Instance()->grass_show_time = MetaMgr::Instance()->GetSysParamAsInt("grass_show_time", 0.5f);
MetaMgr::Instance()->grass_invisible_time2 = MetaMgr::Instance()->GetSysParamAsInt("grass_invisible_time2", 2.0f);
if (MetaMgr::Instance()->K < 0.01f) { if (MetaMgr::Instance()->K < 0.01f) {
abort(); abort();
} }

View File

@ -47,6 +47,9 @@ class MetaMgr : public a8::Singleton<MetaMgr>
int fighting_mode = 0; int fighting_mode = 0;
int revive_time = 5; int revive_time = 5;
int game_duration = 60 * 2; int game_duration = 60 * 2;
float grass_invisible_time = 0.5;
float grass_show_time = 0.5f;
float grass_invisible_time2 = 2.0f;
private: private:
MetaDataLoader* loader_ = nullptr; MetaDataLoader* loader_ = nullptr;

View File

@ -259,6 +259,7 @@ message BuildingJson
repeated DropObjJson dropObj = 5; repeated DropObjJson dropObj = 5;
repeated StaticObjJson staticObj = 6; repeated StaticObjJson staticObj = 6;
repeated LootObjJson lootObj = 7; repeated LootObjJson lootObj = 7;
repeated StaticObjJson grassObj = 8;
required int32 mapId = 20; required int32 mapId = 20;
} }