diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index 06a498f..0da913f 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -93,7 +93,7 @@ void Bullet::OnHit(std::set& objects) if (obstacle->dead) { if (obstacle->meta->i->damage_dia() > 0.01f && obstacle->meta->i->damage() > 0.01f) { - obstacle->Explosion(this); + obstacle->Explosion(); } room->ScatterDrop(obstacle->pos, obstacle->meta->i->drop()); } diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index dc10cbe..2f3428e 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -245,8 +245,8 @@ const int GUN_SLOT2 = 2; const int FRAG_SLOT = 3; const int SMOKE_SLOT = 4; -const int MAP_HEIGHT = 1536; -const int MAP_WIDTH = 1536; +const int MAP_HEIGHT = 2560; +const int MAP_WIDTH = 2560; const int MAP_CELL_WIDTH = 64 * 8; const int MAP_GRID_WIDTH = 64; diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index 42d6554..7abce9c 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -84,8 +84,9 @@ void FrameEvent::AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fl } } -void FrameEvent::AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos) +void FrameEvent::AddExplosion(int item_id, a8::Vec2 bomb_pos, int effect) { + #if 0 { auto& tuple = a8::FastAppend(explosions_); std::get<0>(tuple) = bullet->player; @@ -93,7 +94,6 @@ void FrameEvent::AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos) p.set_item_id(item_id); TypeConvert::ToPb(bomb_pos, p.mutable_pos()); - p.set_player_id(bullet->player->entity_uniid); } { int explosion_idx = explosions_.size() - 1; @@ -103,28 +103,7 @@ void FrameEvent::AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos) } } } -} - -void FrameEvent::AddExplosionEx(Human* sender, int item_id, a8::Vec2 bomb_pos, int effect) -{ - { - auto& tuple = a8::FastAppend(explosions_); - std::get<0>(tuple) = sender; - auto& p = std::get<1>(tuple); - - p.set_item_id(item_id); - TypeConvert::ToPb(bomb_pos, p.mutable_pos()); - p.set_player_id(sender->entity_uniid); - p.set_effect(effect); - } - { - int explosion_idx = explosions_.size() - 1; - for (auto& cell : sender->grid_list) { - for (auto& hum : cell->human_list) { - hum->explosions_.push_back(explosion_idx); - } - } - } + #endif } void FrameEvent::AddSmoke(Bullet* bullet, int item_id, a8::Vec2 pos) @@ -242,4 +221,10 @@ void FrameEvent::Clear() if (!dead_objs_.empty()) { dead_objs_.clear(); } + if (!add_buffs_.empty()) { + add_buffs_.clear(); + } + if (!remove_buffs_.empty()) { + remove_buffs_.clear(); + } } diff --git a/server/gameserver/frameevent.h b/server/gameserver/frameevent.h index 551e712..a71b7d8 100644 --- a/server/gameserver/frameevent.h +++ b/server/gameserver/frameevent.h @@ -5,16 +5,19 @@ class Bullet; class Human; class Buff; +class Room; struct FrameEvent { +public: + Room* room = nullptr; + public: void AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos); void AddEmote(Human* hum, int emote_id); void AddShot(Human* hum); void AddBullet(Human* hum, a8::Vec2 born_pos, a8::Vec2 dir, float fly_distance); - void AddExplosion(Bullet* bullet, int item_id, a8::Vec2 bomb_pos); + void AddExplosion(int item_id, a8::Vec2 bomb_pos, int effect); void AddSmoke(Bullet* bullet, int item_id, a8::Vec2 pos); - void AddExplosionEx(Human* sender, int item_id, a8::Vec2 bomb_pos, int effect); void AddDead(Human* hum); void AddRevive(Human* hum); void AddBuff(Human* hum, Buff* buff); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index a5184ab..7d3f59a 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1733,6 +1733,13 @@ void Human::ProcSkillPhase(MetaData::SkillPhase* phase) Obstacle* obstacle = room->CreateObstacle(phase->param1.GetInt(), pos.x, pos.y); if (obstacle) { obstacle->master_id = entity_uniid; + room->xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 5, + a8::XParams(), + [] (const a8::XParams& param) + { + + }, + &obstacle->xtimer_attacher.timer_list_); } } break; diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 90d418a..ac49460 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -160,7 +160,7 @@ void Obstacle::GetCircleBox(CircleCollider& circle_box) } -void Obstacle::Explosion(Bullet* bullet) +void Obstacle::Explosion() { float old_rad = self_collider_->rad; if (self_collider_) { @@ -195,7 +195,7 @@ void Obstacle::Explosion(Bullet* bullet) }//end for } a8::Vec2 bomb_pos = pos; - room->frame_event.AddExplosion(bullet, meta->i->thing_id(), bomb_pos); + room->frame_event.AddExplosion(meta->i->thing_id(), bomb_pos, 0); for (auto& target : objects) { switch (target->entity_type) { case ET_Player: diff --git a/server/gameserver/obstacle.h b/server/gameserver/obstacle.h index 74076ae..13f85fc 100644 --- a/server/gameserver/obstacle.h +++ b/server/gameserver/obstacle.h @@ -44,7 +44,7 @@ class Obstacle : public Entity virtual void FillMFObjectFull(cs::MFObjectFull* full_data) override; virtual void GetAabbBox(AabbCollider& aabb_box) override; virtual void GetCircleBox(CircleCollider& circle_box) override; - void Explosion(Bullet* bullet); + void Explosion(); private: CircleCollider* self_collider_ = nullptr; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 2c02149..f154926 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -38,6 +38,7 @@ void Room::Init() { xtimer.Init(RoomXGetTickCount, this, 100, 100); xtimer_attacher.xtimer = &xtimer; + frame_event.room = this; grid_service.Init(MAP_WIDTH, MAP_HEIGHT, MAP_CELL_WIDTH * 8); map_service.Init(MAP_WIDTH / MAP_GRID_WIDTH, MAP_HEIGHT / MAP_GRID_WIDTH, MAP_GRID_WIDTH); diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index d03601d..a7fc325 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -484,7 +484,6 @@ message MFExplosion { optional int32 item_id = 1; //配置表id optional MFVec2 pos = 2; //位置 - optional int32 player_id = 3; //玩家id optional int32 effect = 4 [default = 0]; //爆照效果 0:普通爆照 1:核爆炸 }