merge master

This commit is contained in:
aozhiwei 2019-07-02 09:39:52 +08:00
commit 81f5f5c983
10 changed files with 36 additions and 133 deletions

View File

@ -1,17 +1,12 @@
project(gameserver) project(gameserver)
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 2.8)
if (${GAME_ID}) set(GAME_ID 2001)
message(GAME_ID: ${GAME_ID})
else()
set(GAME_ID 2001)
message(GAME_ID: ${GAME_ID})
endif()
set(CMAKE_BUILD_TYPE "Debug") set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_BUILD_TYPE "Release") set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DA8_TCP_SESSION2=1") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g -std=gnu++11 -DGAME_ID=${GAME_ID}")
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID} -DA8_TCP_SESSION2=1") set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -std=gnu++11 -DGAME_ID=${GAME_ID}")
include_directories( include_directories(
AFTER AFTER

View File

@ -4,6 +4,12 @@
#include "human.h" #include "human.h"
#include "bullet.h" #include "bullet.h"
/*
1 2 3
4 5 6
7 8 9
*/
GridService::GridService() GridService::GridService()
{ {
@ -74,48 +80,6 @@ void GridService::GetAllCellsByXy(int x, int y, std::set<GridCell*>& grid_list)
GetAllCells(new_grid_id, grid_list); GetAllCells(new_grid_id, grid_list);
} }
void GridService::Get123(int grid_id, std::set<GridCell*>& grid_list)
{
GetGridList(grid_id, 1, grid_list);
GetGridList(grid_id, 2, grid_list);
GetGridList(grid_id, 3, grid_list);
}
void GridService::Get456(int grid_id, std::set<GridCell*>& grid_list)
{
GetGridList(grid_id, 4, grid_list);
GetGridList(grid_id, 5, grid_list);
GetGridList(grid_id, 6, grid_list);
}
void GridService::Get789(int grid_id, std::set<GridCell*>& grid_list)
{
GetGridList(grid_id, 7, grid_list);
GetGridList(grid_id, 8, grid_list);
GetGridList(grid_id, 9, grid_list);
}
void GridService::Get147(int grid_id, std::set<GridCell*>& grid_list)
{
GetGridList(grid_id, 1, grid_list);
GetGridList(grid_id, 4, grid_list);
GetGridList(grid_id, 7, grid_list);
}
void GridService::Get258(int grid_id, std::set<GridCell*>& grid_list)
{
GetGridList(grid_id, 2, grid_list);
GetGridList(grid_id, 5, grid_list);
GetGridList(grid_id, 8, grid_list);
}
void GridService::Get369(int grid_id, std::set<GridCell*>& grid_list)
{
GetGridList(grid_id, 3, grid_list);
GetGridList(grid_id, 6, grid_list);
GetGridList(grid_id, 9, grid_list);
}
void GridService::AddHuman(Human* hum) void GridService::AddHuman(Human* hum)
{ {
int x = (int)hum->pos.x + cell_width_; int x = (int)hum->pos.x + cell_width_;

View File

@ -11,11 +11,6 @@ struct GridCell
std::set<Bullet*> bullet_list; std::set<Bullet*> bullet_list;
}; };
/*
1 2 3
4 5 6
7 8 9
*/
class Human; class Human;
class Entity; class Entity;
class Room; class Room;
@ -47,13 +42,6 @@ class GridService
void RemoveFromGridList(std::set<GridCell*>& grid_list, Entity* entity); void RemoveFromGridList(std::set<GridCell*>& grid_list, Entity* entity);
private: private:
void Get123(int grid_id, std::set<GridCell*>& grid_list);
void Get456(int grid_id, std::set<GridCell*>& grid_list);
void Get789(int grid_id, std::set<GridCell*>& grid_list);
void Get147(int grid_id, std::set<GridCell*>& grid_list);
void Get258(int grid_id, std::set<GridCell*>& grid_list);
void Get369(int grid_id, std::set<GridCell*>& grid_list);
inline void GetGridList(int grid_id, int offset, inline void GetGridList(int grid_id, int offset,
std::set<GridCell*>& grid_list); std::set<GridCell*>& grid_list);
void ComputeDiff(int old_grid_id, int new_grid_id, void ComputeDiff(int old_grid_id, int new_grid_id,

View File

@ -1983,6 +1983,22 @@ void Human::InternalSendGameOver()
hum->stats.history_kills = data.Get("kill_his"); hum->stats.history_kills = data.Get("kill_his");
hum->stats.history_damage_amount = data.Get("harm_his"); hum->stats.history_damage_amount = data.Get("harm_his");
hum->stats.history_heal_amount = data.Get("add_HP_his"); hum->stats.history_heal_amount = data.Get("add_HP_his");
{
std::string extra_drop = data.Get("extra_drop");
std::vector<std::string> strings1;
a8::Split(extra_drop, strings1, '|');
for (std::string& str1 : strings1) {
std::vector<std::string> strings2;
a8::Split(str1, strings2, ':');
if (strings2.size() == 2) {
hum->stats.extra_drop.push_back(std::make_pair(
a8::XValue(strings2[0]).GetInt(),
a8::XValue(strings2[1]).GetInt()
)
);
}
}
}
cs::SMGameOver msg; cs::SMGameOver msg;
hum->FillSMGameOver(msg); hum->FillSMGameOver(msg);
hum->SendNotifyMsg(msg); hum->SendNotifyMsg(msg);

View File

@ -961,11 +961,13 @@ void Player::UpdateDropWeapon()
if (drop_ok) { if (drop_ok) {
if (drop_weapon_idx == 0 || if (drop_weapon_idx == 0 ||
drop_weapon_idx == GUN_SLOT1 || drop_weapon_idx == GUN_SLOT1 ||
drop_weapon_idx == GUN_SLOT2 drop_weapon_idx == GUN_SLOT2 ||
drop_weapon_idx == FRAG_SLOT ||
drop_weapon_idx == SMOKE_SLOT
) { ) {
a8::Vec2 dir = a8::Vec2::UP; a8::Vec2 dir = a8::Vec2::UP;
dir.Rotate(a8::RandAngle()); dir.Rotate(a8::RandAngle());
room->CreateLoot(weapon_id, pos + dir * (25 + rand() % 50), 1, weapon_lv); room->CreateLoot(weapon_id, pos + dir * (40 + rand() % 50), 1, weapon_lv);
} }
if (weapon_ammo > 0) { if (weapon_ammo > 0) {
MetaData::Equip* bullet_meta = MetaMgr::Instance()->GetEquip(weapon_meta->i->use_bullet()); MetaData::Equip* bullet_meta = MetaMgr::Instance()->GetEquip(weapon_meta->i->use_bullet());
@ -973,7 +975,8 @@ void Player::UpdateDropWeapon()
int volume = GetVolume(bullet_meta->i->_inventory_slot()); int volume = GetVolume(bullet_meta->i->_inventory_slot());
int inventory = GetInventory(bullet_meta->i->_inventory_slot()); int inventory = GetInventory(bullet_meta->i->_inventory_slot());
int add_inventory = std::min(weapon_ammo, volume - std::min(volume, inventory)); int add_inventory = std::min(weapon_ammo, volume - std::min(volume, inventory));
if (add_inventory > 0) { if (add_inventory > 0 &&
!(drop_weapon_idx == FRAG_SLOT || drop_weapon_idx == SMOKE_SLOT)) {
AddInventory(bullet_meta->i->_inventory_slot(), add_inventory); AddInventory(bullet_meta->i->_inventory_slot(), add_inventory);
} }
int drop_num = weapon_ammo - add_inventory; int drop_num = weapon_ammo - add_inventory;

View File

@ -44,20 +44,6 @@ void Room::Init()
map_service.Init(MAP_WIDTH / MAP_GRID_WIDTH, MAP_HEIGHT / MAP_GRID_WIDTH, MAP_GRID_WIDTH); map_service.Init(MAP_WIDTH / MAP_GRID_WIDTH, MAP_HEIGHT / MAP_GRID_WIDTH, MAP_GRID_WIDTH);
CreateThings(); CreateThings();
#if 0
stats_timer_ = a8::Timer::Instance()->AddRepeatTimer(
1000 * 5,
a8::XParams()
.SetSender(this),
[] (const a8::XParams& param)
{
Room* room = (Room*)param.sender.GetUserData();
if (!room->game_over) {
room->OutputDebugLog();
}
}
);
#endif
if (App::Instance()->HasFlag(1)) { if (App::Instance()->HasFlag(1)) {
xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 3, xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 3,
a8::XParams() a8::XParams()
@ -80,10 +66,6 @@ void Room::UnInit()
game_over_timer = nullptr; game_over_timer = nullptr;
} }
xtimer_attacher.ClearTimerList(); xtimer_attacher.ClearTimerList();
if (stats_timer_) {
a8::Timer::Instance()->DeleteTimer(stats_timer_);
stats_timer_ = nullptr;
}
for (auto& pair : accountid_hash_) { for (auto& pair : accountid_hash_) {
PlayerMgr::Instance()->RemovePlayerBySocket(pair.second->socket_handle); PlayerMgr::Instance()->RemovePlayerBySocket(pair.second->socket_handle);
} }
@ -138,9 +120,6 @@ void Room::Update(int delta_time)
elapsed_time_ -= 50; elapsed_time_ -= 50;
} }
long long end_tick = a8::XGetTickCount(); long long end_tick = a8::XGetTickCount();
if (end_tick - begin_tick > profile.max_rundelay) {
profile.max_rundelay = end_tick - begin_tick;
}
} }
int Room::GetPlayerNum() int Room::GetPlayerNum()
@ -1080,44 +1059,6 @@ bool Room::GenSmallCircle(a8::Vec2 big_circle_pos, float big_circle_rad, float s
return true; return true;
} }
void Room::OutputDebugLog()
{
a8::UdpLog::Instance()->Debug("roomid:%d max_rundelay:%d frame_no:%d game_over:%d game_over_frameno:%d "
"elapsed_time:%d alive_count:%d current_uniid:%d "
"state:%d accountid_hash.size:%d moveable_hash_.size:%d "
"uniid_hash.size:%d human_hash.size:%d ",
{
room_uuid,
profile.max_rundelay,
frame_no,
game_over ? 1 : 0,
game_over_frameno,
elapsed_time_,
alive_count_,
current_uniid,
(int)gas_data.gas_mode,
accountid_hash_.size(),
moveable_hash_.size(),
uniid_hash_.size(),
human_hash_.size(),
});
{
int entity_num_arr[ET_MAX] = {0};
a8::MutableXObject* logobj = a8::MutableXObject::NewObject();
for (auto& pair : uniid_hash_) {
if (pair.second->entity_type >= 0 && pair.second->entity_type < ET_MAX) {
++(entity_num_arr[pair.second->entity_type]);
}
}
for (int i = 0; i < ET_MAX; ++i) {
logobj->SetVal(a8::XValue(i).GetString(), entity_num_arr[i]);
}
a8::UdpLog::Instance()->Debug("roomid:%d %s", {room_uuid, logobj->ToJsonStr()});
delete logobj;
}
profile.max_rundelay = 0;
}
void Room::AutoMatchTeam() void Room::AutoMatchTeam()
{ {
#if 0 #if 0

View File

@ -16,11 +16,6 @@ namespace MetaData
struct AirLine; struct AirLine;
} }
struct RoomProfile
{
long long max_rundelay = 0;
};
struct timer_list; struct timer_list;
struct xtimer_list; struct xtimer_list;
class Entity; class Entity;
@ -45,7 +40,6 @@ public:
long long game_over_frameno = 0; long long game_over_frameno = 0;
long long game_over_tick = 0; long long game_over_tick = 0;
timer_list* game_over_timer = nullptr; timer_list* game_over_timer = nullptr;
RoomProfile profile;
a8::XTimer xtimer; a8::XTimer xtimer;
Plane plane; Plane plane;
GridService grid_service; GridService grid_service;
@ -105,7 +99,6 @@ private:
void UpdateGas(); void UpdateGas();
bool GenSmallCircle(a8::Vec2 big_circle_pos, float big_circle_rad, float small_circle_rad, bool GenSmallCircle(a8::Vec2 big_circle_pos, float big_circle_rad, float small_circle_rad,
a8::Vec2& out_pos); a8::Vec2& out_pos);
void OutputDebugLog();
void AutoMatchTeam(); void AutoMatchTeam();
void MatchTeam(Human* hum); void MatchTeam(Human* hum);
void InitAirDrop(); void InitAirDrop();
@ -124,7 +117,6 @@ private:
void NotifyWxVoip(); void NotifyWxVoip();
private: private:
timer_list* stats_timer_ = nullptr;
int elapsed_time_ = 0; int elapsed_time_ = 0;
int alive_count_ = 0; int alive_count_ = 0;
MetaData::AirLine* airline_ = nullptr; MetaData::AirLine* airline_ = nullptr;

View File

@ -83,6 +83,8 @@ struct PlayerStats
int gold = 0; int gold = 0;
int score = 0; int score = 0;
std::vector<std::pair<int, int>> extra_drop;
int killer_id = 0; int killer_id = 0;
std::string killer_name; std::string killer_name;
int weapon_id = 0; int weapon_id = 0;

View File

@ -532,6 +532,8 @@ message MFPlayerStats
optional int32 gold = 10; // optional int32 gold = 10; //
optional int32 score = 11; // optional int32 score = 11; //
repeated MFPair extra_drop = 12; //,key:item_id value:(广)
optional bool dead = 5; // optional bool dead = 5; //
optional int32 killer_id = 7; //id() id: -1: optional int32 killer_id = 7; //id() id: -1:
optional string killer_name = 40; // optional string killer_name = 40; //

@ -1 +1 @@
Subproject commit bb10963a71fbd0d6dd145dc7fd333b09ab708300 Subproject commit 88b75d811aecd688865fddf4d47413a50f953d34