From 6e5e733174adfc9c8136a66c0f781e6834259b37 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 9 Apr 2021 20:39:33 +0800 Subject: [PATCH] 1 --- server/gameserver/bullet.cc | 3 +++ server/gameserver/constant.h | 1 + server/gameserver/creature.cc | 4 ++++ server/gameserver/creature.h | 1 + server/gameserver/roomobstacle.cc | 28 ++++++++++++++++++++++++++++ server/gameserver/roomobstacle.h | 1 + 6 files changed, 38 insertions(+) diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 70ee8db..99050e4 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -374,6 +374,8 @@ void Bullet::ProcPosionGasBomb(int delay_time) { if (sender.Get()) { #if 1 + a8::Vec2 old_buff_vec2_param1 = sender.Get()->buff_vec2_param1; + sender.Get()->buff_vec2_param1 = GetPos(); MetaData::Buff * buff_meta = MetaMgr::Instance()->GetBuff(gun_meta->i->buffid()); if (buff_meta) { sender.Get()->AddBuff(sender.Get(), @@ -381,6 +383,7 @@ void Bullet::ProcPosionGasBomb(int delay_time) 1 ); } + sender.Get()->buff_vec2_param1 = old_buff_vec2_param1; #else PosionGasMiTask* task = new PosionGasMiTask(); task->room = room; diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index b72db83..c501daf 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -383,6 +383,7 @@ enum ObstacleType_e kObstacleSelfExplosion = 1, kObstacleMine = 2, kObstacleTrap = 3, + kObstaclePosionGas = 4, }; const char* const PROJ_NAME_FMT = "game%d_gameserver"; diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index e0eab1c..6da8f6c 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -21,6 +21,8 @@ void InternalShot(Creature* c, { if (weapon_meta->i->_inventory_slot() == IS_TRAP || weapon_meta->i->_inventory_slot() == IS_MINE) { + a8::Vec2 old_buff_vec2_param1 = c->buff_vec2_param1; + c->buff_vec2_param1 = c->GetPos(); MetaData::Buff * buff_meta = MetaMgr::Instance()->GetBuff(bullet_meta->i->buffid()); if (buff_meta) { c->AddBuff(c, @@ -28,6 +30,7 @@ void InternalShot(Creature* c, 1 ); } + c->buff_vec2_param1 = old_buff_vec2_param1; return; } for (auto& tuple : weapon_meta->bullet_born_offset) { @@ -843,6 +846,7 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) case kBET_SummonObstacle: { a8::Vec2 target_pos = caster->GetPos() + caster->skill_dir_ * caster->skill_distance_; + target_pos = buff_vec2_param1; SummonObstacle(buff->meta->param1, target_pos); } break; diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index b9f17ca..1c4d5c3 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -47,6 +47,7 @@ class Creature : public MoveableEntity long long poisoning_time = 0; Weapon car_weapon; + a8::Vec2 buff_vec2_param1; bool need_sync_active_player = false; std::function on_loading_bullet; diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index ac060b0..f3f34e5 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -330,6 +330,11 @@ void RoomObstacle::Active() ActiveTrap(); } break; + case kObstaclePosionGas: + { + ActivePosionGas(); + } + break; default: break; } @@ -393,3 +398,26 @@ void RoomObstacle::ActiveTrap() &xtimer_attacher.timer_list_ ); } + +void RoomObstacle::ActivePosionGas() +{ + room->frame_event.AddExplosionEx + (master, + 0,//task->meta->i->id(), + GetPos(), + meta->i->explosion_effect()); + + room->xtimer.AddDeadLineTimerAndAttach + ( + SERVER_FRAME_RATE, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + RoomObstacle* obstacle = (RoomObstacle*)param.sender.GetUserData(); + obstacle->Die(obstacle->room); + obstacle->BroadcastFullState(obstacle->room); + }, + &xtimer_attacher.timer_list_ + ); +} diff --git a/server/gameserver/roomobstacle.h b/server/gameserver/roomobstacle.h index 613100a..78600cd 100644 --- a/server/gameserver/roomobstacle.h +++ b/server/gameserver/roomobstacle.h @@ -28,6 +28,7 @@ private: void ActiveSelfExplosion(); void ActiveMine(); void ActiveTrap(); + void ActivePosionGas(); protected: bool temp_through_ = false;