This commit is contained in:
aozhiwei 2021-03-08 13:10:08 +08:00
parent 8ce7854986
commit 3fe0802f45
5 changed files with 169 additions and 6 deletions

View File

@ -706,6 +706,9 @@ Human* AndroidNewAI::GetTarget()
if (a8::HasBitFlag(hum->status, HS_Disable)) {
return;
}
if (hum->HasBuffEffect(kBET_InGrass)) {
return;
}
if (myself->team_id == hum->team_id) {
return;
}

View File

@ -405,3 +405,7 @@ const int HUNLUAN_BUFFID = 6001;
const int DRIVER_BUFFID = 6003;
const int PASSENGER_BUFFID = 6004;
const int GRASS_HIDE_BUFF_ID = 6005;
const int WATER_BUFF_ID = 6006;
const int ICE_BUFF_ID = 6007;

View File

@ -4335,30 +4335,169 @@ void Human::CheckSpecObject()
void Human::OnEnterGrass()
{
if (leave_grass_timer_) {
room->xtimer.DeleteTimer(leave_grass_timer_);
leave_grass_timer_ = nullptr;
}
if (hide_grass_timer_) {
room->xtimer.DeleteTimer(hide_grass_timer_);
hide_grass_timer_ = nullptr;
}
hide_grass_timer_ = room->xtimer.AddDeadLineTimerAndAttach
(MetaMgr::Instance()->grass_invisible_time * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(GRASS_HIDE_BUFF_ID);
if (buff_meta) {
hum->AddBuff(hum, buff_meta, 1);
}
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->hide_grass_timer_ = nullptr;
});
}
void Human::OnLeaveGrass()
{
if (hide_grass_timer_) {
room->xtimer.DeleteTimer(hide_grass_timer_);
hide_grass_timer_ = nullptr;
}
if (leave_grass_timer_) {
room->xtimer.DeleteTimer(leave_grass_timer_);
}
leave_grass_timer_ = 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_ = nullptr;
hum->RemoveBuffById(GRASS_HIDE_BUFF_ID);
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->leave_grass_timer_ = nullptr;
});
}
void Human::OnEnterWater()
{
if (leave_water_timer_) {
room->xtimer.DeleteTimer(leave_water_timer_);
leave_water_timer_ = nullptr;
}
if (hide_water_timer_) {
room->xtimer.DeleteTimer(hide_water_timer_);
hide_water_timer_ = nullptr;
}
hide_water_timer_ = room->xtimer.AddDeadLineTimerAndAttach
(MetaMgr::Instance()->water_invisible_time * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(WATER_BUFF_ID);
if (buff_meta) {
hum->AddBuff(hum, buff_meta, 1);
}
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->hide_water_timer_ = nullptr;
});
}
void Human::OnLeaveWater()
{
if (hide_water_timer_) {
room->xtimer.DeleteTimer(hide_water_timer_);
hide_water_timer_ = nullptr;
}
if (leave_water_timer_) {
room->xtimer.DeleteTimer(leave_water_timer_);
}
leave_water_timer_ = room->xtimer.AddDeadLineTimerAndAttach
(MetaMgr::Instance()->water_show_time * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->RemoveBuffById(WATER_BUFF_ID);
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->leave_water_timer_ = nullptr;
});
}
void Human::OnEnterIce()
{
if (leave_ice_timer_) {
room->xtimer.DeleteTimer(leave_ice_timer_);
leave_ice_timer_ = nullptr;
}
if (hide_ice_timer_) {
room->xtimer.DeleteTimer(hide_ice_timer_);
hide_ice_timer_ = nullptr;
}
hide_ice_timer_ = room->xtimer.AddDeadLineTimerAndAttach
(MetaMgr::Instance()->ice_invisible_time * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(ICE_BUFF_ID);
if (buff_meta) {
hum->AddBuff(hum, buff_meta, 1);
}
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->hide_ice_timer_ = nullptr;
});
}
void Human::OnLeaveIce()
{
if (hide_ice_timer_) {
room->xtimer.DeleteTimer(hide_ice_timer_);
hide_ice_timer_ = nullptr;
}
if (leave_ice_timer_) {
room->xtimer.DeleteTimer(leave_ice_timer_);
}
leave_ice_timer_ = room->xtimer.AddDeadLineTimerAndAttach
(MetaMgr::Instance()->ice_show_time * SERVER_FRAME_RATE,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->RemoveBuffById(ICE_BUFF_ID);
},
&xtimer_attacher.timer_list_,
[] (const a8::XParams& param)
{
Human* hum = (Human*)param.sender.GetUserData();
hum->leave_ice_timer_ = nullptr;
});
}

View File

@ -436,6 +436,13 @@ private:
Entity* last_collision_door_ = nullptr;
long long jump_frameno_ = 0;
xtimer_list* leave_grass_timer_ = nullptr;
xtimer_list* hide_grass_timer_ = nullptr;
xtimer_list* leave_water_timer_ = nullptr;
xtimer_list* hide_water_timer_ = nullptr;
xtimer_list* leave_ice_timer_ = nullptr;
xtimer_list* hide_ice_timer_ = nullptr;
friend class FrameMaker;
friend class FrameEvent;
};

View File

@ -124,6 +124,16 @@ class MetaMgr : public a8::Singleton<MetaMgr>
int level1room_robot_autodie_distance = 0;
std::string level1room_born_point;
float grass_invisible_time = 0.5;
float grass_show_time = 0.5f;
float grass_invisible_time2 = 2.0f;
float water_invisible_time = 0.5;
float water_show_time = 0.5f;
float water_invisible_time2 = 2.0f;
float ice_invisible_time = 0.5;
float ice_show_time = 0.5f;
float ice_invisible_time2 = 2.0f;
#if 0
int refresh_robot_min_num = 0;
int refresh_robot_max_num = 0;