Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
580a9e1519 | ||
![]() |
3c3c897625 |
@ -1,16 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
source /etc/profile
|
python manage.py restart $1 $2
|
||||||
source /root/.bash_profile
|
|
||||||
|
|
||||||
pid=$(ps -ef|grep "gameserver2001 -n $2 -i $1"|grep -v grep|awk '{print $2}')
|
echo 'success'
|
||||||
echo $pid
|
|
||||||
|
|
||||||
if [[ $pid != "" ]]
|
|
||||||
then
|
|
||||||
echo $pid|xargs kill -9
|
|
||||||
else
|
|
||||||
echo "pid 为空"
|
|
||||||
fi
|
|
||||||
|
|
||||||
nohup ./gameserver2001 -n $2 -i $1 >> gameserver2001$2_$1.out &
|
|
||||||
|
@ -90,6 +90,9 @@ void AndroidAI::ChangeToState(AndroidState_e to_state)
|
|||||||
void AndroidAI::DoMove()
|
void AndroidAI::DoMove()
|
||||||
{
|
{
|
||||||
Human* hum = (Human*)owner;
|
Human* hum = (Human*)owner;
|
||||||
|
if (hum->room->IsWaitingStart()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (a8::HasBitFlag(hum->status, HS_Fly)) {
|
if (a8::HasBitFlag(hum->status, HS_Fly)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -118,6 +121,9 @@ void AndroidAI::DoAttack()
|
|||||||
a8::HasBitFlag(hum->status, HS_Jump)) {
|
a8::HasBitFlag(hum->status, HS_Jump)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (hum->room->IsWaitingStart()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (hum->room->gas_data.gas_mode == GasInactive) {
|
if (hum->room->gas_data.gas_mode == GasInactive) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,6 @@ void HandlerMgr::RegisterNetMsgHandlers()
|
|||||||
RegisterNetMsgHandler(&ggmsghandler, &PlayerMgr::_SS_WSP_SocketDisconnect);
|
RegisterNetMsgHandler(&ggmsghandler, &PlayerMgr::_SS_WSP_SocketDisconnect);
|
||||||
RegisterNetMsgHandler(&ggmsghandler, &PlayerMgr::_SS_Ping);
|
RegisterNetMsgHandler(&ggmsghandler, &PlayerMgr::_SS_Ping);
|
||||||
RegisterNetMsgHandler(&ggmsghandler, &RoomMgr::_CMJoin);
|
RegisterNetMsgHandler(&ggmsghandler, &RoomMgr::_CMJoin);
|
||||||
RegisterNetMsgHandler(&ggmsghandler, &RoomMgr::_CMReconnect);
|
|
||||||
|
|
||||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMMove);
|
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMMove);
|
||||||
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMEmote);
|
RegisterNetMsgHandler(&ggmsghandler, &Player::_CMEmote);
|
||||||
|
@ -118,7 +118,7 @@ class Human : public Entity
|
|||||||
std::set<Human*> kill_humans;
|
std::set<Human*> kill_humans;
|
||||||
Human* last_tank_attacker = nullptr;
|
Human* last_tank_attacker = nullptr;
|
||||||
long long last_tank_attack_idx = 0;
|
long long last_tank_attack_idx = 0;
|
||||||
const BornPoint* born_point = nullptr;
|
BornPoint* born_point = nullptr;
|
||||||
|
|
||||||
bool shot_start = false;
|
bool shot_start = false;
|
||||||
bool shot_hold = false;
|
bool shot_hold = false;
|
||||||
|
@ -34,7 +34,6 @@ void JsonDataMgr::Init()
|
|||||||
gameserver_cluster_json_.ReadFromFile(gameserver_cluster_json_file);
|
gameserver_cluster_json_.ReadFromFile(gameserver_cluster_json_file);
|
||||||
ip = GetConf()->At("ip")->AsXValue().GetString();
|
ip = GetConf()->At("ip")->AsXValue().GetString();
|
||||||
listen_port = GetConf()->At("listen_port")->AsXValue();
|
listen_port = GetConf()->At("listen_port")->AsXValue();
|
||||||
server_info = a8::Format("%s:%d", {ip, listen_port});
|
|
||||||
Reload();
|
Reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ public:
|
|||||||
|
|
||||||
std::string ip;
|
std::string ip;
|
||||||
int listen_port = 0;
|
int listen_port = 0;
|
||||||
std::string server_info;
|
|
||||||
|
|
||||||
void Reload();
|
void Reload();
|
||||||
|
|
||||||
|
@ -49,7 +49,6 @@ public:
|
|||||||
std::list<MetaData::KillPoint> killpoint_list;
|
std::list<MetaData::KillPoint> killpoint_list;
|
||||||
std::list<metatable::Robot> robot_meta_list;
|
std::list<metatable::Robot> robot_meta_list;
|
||||||
std::vector<MetaData::Robot> robot_list;
|
std::vector<MetaData::Robot> robot_list;
|
||||||
std::list<metatable::Text> text_meta_list;
|
|
||||||
|
|
||||||
std::map<std::string, MetaData::Parameter*> parameter_hash;
|
std::map<std::string, MetaData::Parameter*> parameter_hash;
|
||||||
std::map<int, MetaData::Map*> gamemap_hash;
|
std::map<int, MetaData::Map*> gamemap_hash;
|
||||||
@ -73,7 +72,6 @@ public:
|
|||||||
std::map<int, MetaData::EquipUpgrade*> equipupgrade_hash;
|
std::map<int, MetaData::EquipUpgrade*> equipupgrade_hash;
|
||||||
std::map<int, MetaData::Robot*> robot_hash;
|
std::map<int, MetaData::Robot*> robot_hash;
|
||||||
std::map<int, std::vector<MetaData::AirLine*>> airline_hash;
|
std::map<int, std::vector<MetaData::AirLine*>> airline_hash;
|
||||||
std::map<std::string, std::string> text_hash;
|
|
||||||
|
|
||||||
void Load()
|
void Load()
|
||||||
{
|
{
|
||||||
@ -117,7 +115,6 @@ public:
|
|||||||
f8::ReadCsvMetaFile(res_path + "rankPoint@rankPoint.csv", rankpoint_meta_list);
|
f8::ReadCsvMetaFile(res_path + "rankPoint@rankPoint.csv", rankpoint_meta_list);
|
||||||
f8::ReadCsvMetaFile(res_path + "equipUpgrade@equipUpgrade.csv", equipupgrade_meta_list);
|
f8::ReadCsvMetaFile(res_path + "equipUpgrade@equipUpgrade.csv", equipupgrade_meta_list);
|
||||||
f8::ReadCsvMetaFile(res_path + "robot@robot.csv", robot_meta_list);
|
f8::ReadCsvMetaFile(res_path + "robot@robot.csv", robot_meta_list);
|
||||||
f8::ReadCsvMetaFile(res_path + "text@text.csv", text_meta_list);
|
|
||||||
BindToMetaData();
|
BindToMetaData();
|
||||||
#if 1
|
#if 1
|
||||||
{
|
{
|
||||||
@ -132,7 +129,6 @@ public:
|
|||||||
MetaMgr::Instance()->tank_damage_interval = MetaMgr::Instance()->GetSysParamAsFloat("tank_damage_interval", 1);
|
MetaMgr::Instance()->tank_damage_interval = MetaMgr::Instance()->GetSysParamAsFloat("tank_damage_interval", 1);
|
||||||
MetaMgr::Instance()->average_oil = MetaMgr::Instance()->GetSysParamAsInt("average_oil");
|
MetaMgr::Instance()->average_oil = MetaMgr::Instance()->GetSysParamAsInt("average_oil");
|
||||||
MetaMgr::Instance()->max_oil = MetaMgr::Instance()->GetSysParamAsInt("max_oil");
|
MetaMgr::Instance()->max_oil = MetaMgr::Instance()->GetSysParamAsInt("max_oil");
|
||||||
MetaMgr::Instance()->max_energy_shield = MetaMgr::Instance()->GetSysParamAsInt("max_energy_shield");
|
|
||||||
if (MetaMgr::Instance()->K < 0.01f) {
|
if (MetaMgr::Instance()->K < 0.01f) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
@ -314,10 +310,6 @@ private:
|
|||||||
robot_hash[meta.id()] = &item;
|
robot_hash[meta.id()] = &item;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& meta : text_meta_list) {
|
|
||||||
text_hash[meta.textid()] = meta.text();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -504,9 +496,3 @@ MetaData::Robot* MetaMgr::GetRobot(int robot_id)
|
|||||||
auto itr = loader_->robot_hash.find(robot_id);
|
auto itr = loader_->robot_hash.find(robot_id);
|
||||||
return itr != loader_->robot_hash.end() ? itr->second : nullptr;
|
return itr != loader_->robot_hash.end() ? itr->second : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string MetaMgr::GetText(const std::string& textid, const std::string& def_text)
|
|
||||||
{
|
|
||||||
auto itr = loader_->text_hash.find(textid);
|
|
||||||
return itr != loader_->text_hash.end() ? itr->second : def_text;
|
|
||||||
}
|
|
||||||
|
@ -42,7 +42,6 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
|||||||
int GetKillPointParam2(int kill_num);
|
int GetKillPointParam2(int kill_num);
|
||||||
std::vector<MetaData::Robot>* GetRobotList();
|
std::vector<MetaData::Robot>* GetRobotList();
|
||||||
MetaData::Robot* GetRobot(int robot_id);
|
MetaData::Robot* GetRobot(int robot_id);
|
||||||
std::string GetText(const std::string& textid, const std::string& def_text);
|
|
||||||
|
|
||||||
int gas_inactive_time = 10;
|
int gas_inactive_time = 10;
|
||||||
int jump_time = 10;
|
int jump_time = 10;
|
||||||
@ -55,7 +54,6 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
|||||||
float tank_damage_interval = 0.0f;
|
float tank_damage_interval = 0.0f;
|
||||||
float average_oil = 0.0f;
|
float average_oil = 0.0f;
|
||||||
float max_oil = 0.0f;
|
float max_oil = 0.0f;
|
||||||
int max_energy_shield = 100;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MetaDataLoader* loader_ = nullptr;
|
MetaDataLoader* loader_ = nullptr;
|
||||||
|
@ -31,12 +31,7 @@ void Player::Initialize()
|
|||||||
{
|
{
|
||||||
Human::Initialize();
|
Human::Initialize();
|
||||||
health = meta->i->health();
|
health = meta->i->health();
|
||||||
if (energy_shield) {
|
max_energy_shield = energy_shield;
|
||||||
energy_shield = MetaMgr::Instance()->max_energy_shield;
|
|
||||||
max_energy_shield = energy_shield;
|
|
||||||
} else {
|
|
||||||
max_energy_shield = 0;
|
|
||||||
}
|
|
||||||
skin_meta = MetaMgr::Instance()->GetDress(SkinId());
|
skin_meta = MetaMgr::Instance()->GetDress(SkinId());
|
||||||
if (skin_meta) {
|
if (skin_meta) {
|
||||||
skill_meta = MetaMgr::Instance()->GetSkill(skin_meta->i->skill_id());
|
skill_meta = MetaMgr::Instance()->GetSkill(skin_meta->i->skill_id());
|
||||||
@ -112,7 +107,9 @@ void Player::UpdateMove()
|
|||||||
if (action_type == AT_Relive) {
|
if (action_type == AT_Relive) {
|
||||||
CancelAction();
|
CancelAction();
|
||||||
}
|
}
|
||||||
if (dead || a8::HasBitFlag(status, HS_Fly)) {
|
if (dead ||
|
||||||
|
room->IsWaitingStart() ||
|
||||||
|
a8::HasBitFlag(status, HS_Fly)) {
|
||||||
moving = false;
|
moving = false;
|
||||||
moved_frames = 0;
|
moved_frames = 0;
|
||||||
last_collision_door = nullptr;
|
last_collision_door = nullptr;
|
||||||
@ -142,6 +139,8 @@ void Player::UpdateMove()
|
|||||||
void Player::UpdateShot()
|
void Player::UpdateShot()
|
||||||
{
|
{
|
||||||
if (dead ||
|
if (dead ||
|
||||||
|
downed ||
|
||||||
|
room->IsWaitingStart() ||
|
||||||
a8::HasBitFlag(status, HS_Fly) ||
|
a8::HasBitFlag(status, HS_Fly) ||
|
||||||
a8::HasBitFlag(status, HS_Jump) ) {
|
a8::HasBitFlag(status, HS_Jump) ) {
|
||||||
shot_start = false;
|
shot_start = false;
|
||||||
@ -867,13 +866,8 @@ void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg)
|
|||||||
if (moving) {
|
if (moving) {
|
||||||
moved_frames = 0;
|
moved_frames = 0;
|
||||||
}
|
}
|
||||||
//前一个状态是纯点射
|
shot_start = msg.shot_start();
|
||||||
if (shot_start && !shot_hold) {
|
shot_hold = msg.shot_hold();
|
||||||
|
|
||||||
} else {
|
|
||||||
shot_start = msg.shot_start();
|
|
||||||
shot_hold = msg.shot_hold();
|
|
||||||
}
|
|
||||||
fly_distance = std::min(200.0f, msg.fly_distance());
|
fly_distance = std::min(200.0f, msg.fly_distance());
|
||||||
if (!shot_hold) {
|
if (!shot_hold) {
|
||||||
series_shot_frames = 0;
|
series_shot_frames = 0;
|
||||||
@ -922,38 +916,6 @@ void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
|
|
||||||
{
|
|
||||||
int old_socket_handle = socket_handle;
|
|
||||||
if (socket_handle != 0) {
|
|
||||||
GGListener::Instance()->ForceCloseChildSocket(socket_handle);
|
|
||||||
PlayerMgr::Instance()->RemovePlayerBySocket(socket_handle);
|
|
||||||
}
|
|
||||||
socket_handle = hdr.socket_handle;
|
|
||||||
#if 0
|
|
||||||
TouchAllLayerHumanList
|
|
||||||
(
|
|
||||||
[this] (Human* hum, bool& stop)
|
|
||||||
{
|
|
||||||
AddToNewObjects(hum);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
#endif
|
|
||||||
need_sync_active_player = true;
|
|
||||||
cs::SMReconnect respmsg;
|
|
||||||
respmsg.set_errcode(0);
|
|
||||||
respmsg.set_errmsg("战斗重连成功");
|
|
||||||
SendNotifyMsg(respmsg);
|
|
||||||
PlayerMgr::Instance()->ReBindSocket(this);
|
|
||||||
a8::UdpLog::Instance()->Debug
|
|
||||||
("战斗服重连成功 %s %d %d",
|
|
||||||
{
|
|
||||||
account_id,
|
|
||||||
hdr.socket_handle,
|
|
||||||
old_socket_handle
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void Player::UpdateDropWeapon()
|
void Player::UpdateDropWeapon()
|
||||||
{
|
{
|
||||||
if (drop_weapon_idx >= 0 && drop_weapon_idx < weapons.size()) {
|
if (drop_weapon_idx >= 0 && drop_weapon_idx < weapons.size()) {
|
||||||
@ -1133,8 +1095,6 @@ void Player::_CMRevive(f8::MsgHdr& hdr, const cs::CMRevive& msg)
|
|||||||
dead = false;
|
dead = false;
|
||||||
real_dead = false;
|
real_dead = false;
|
||||||
downed = false;
|
downed = false;
|
||||||
energy_shield = MetaMgr::Instance()->max_energy_shield;
|
|
||||||
max_energy_shield = energy_shield;
|
|
||||||
FreeDownedTimer();
|
FreeDownedTimer();
|
||||||
health = GetMaxHP();
|
health = GetMaxHP();
|
||||||
ResetTankSkin();
|
ResetTankSkin();
|
||||||
|
@ -5,9 +5,8 @@
|
|||||||
namespace cs
|
namespace cs
|
||||||
{
|
{
|
||||||
class CMMove;
|
class CMMove;
|
||||||
class CMReconnect;
|
|
||||||
class CMDropItem;
|
class CMDropItem;
|
||||||
class CMmEmote;
|
class CMEmote;
|
||||||
class CMVoice;
|
class CMVoice;
|
||||||
class MFActivePlayerData;
|
class MFActivePlayerData;
|
||||||
class MFGasData;
|
class MFGasData;
|
||||||
@ -84,7 +83,6 @@ class Player : public Human
|
|||||||
void ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& prepare_items);
|
void ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google::protobuf::int32 >& prepare_items);
|
||||||
|
|
||||||
void _CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg);
|
void _CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg);
|
||||||
void _CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg);
|
|
||||||
void _CMEmote(f8::MsgHdr& hdr, const cs::CMEmote& msg);
|
void _CMEmote(f8::MsgHdr& hdr, const cs::CMEmote& msg);
|
||||||
void _CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg);
|
void _CMVoice(f8::MsgHdr& hdr, const cs::CMVoice& msg);
|
||||||
void _CMGameOver(f8::MsgHdr& hdr, const cs::CMGameOver& msg);
|
void _CMGameOver(f8::MsgHdr& hdr, const cs::CMGameOver& msg);
|
||||||
|
@ -113,8 +113,3 @@ void PlayerMgr::RemovePlayerBySocket(int socket_handle)
|
|||||||
socket_hash_.erase(itr);
|
socket_hash_.erase(itr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMgr::ReBindSocket(Player* hum)
|
|
||||||
{
|
|
||||||
socket_hash_[hum->socket_handle] = hum;
|
|
||||||
}
|
|
||||||
|
@ -33,7 +33,6 @@ class PlayerMgr : public a8::Singleton<PlayerMgr>
|
|||||||
Player* CreatePlayerByCMJoin(long ip_saddr, int socket, const cs::CMJoin& msg);
|
Player* CreatePlayerByCMJoin(long ip_saddr, int socket, const cs::CMJoin& msg);
|
||||||
void OnClientDisconnect(a8::XParams& param);
|
void OnClientDisconnect(a8::XParams& param);
|
||||||
void RemovePlayerBySocket(int socket_handle);
|
void RemovePlayerBySocket(int socket_handle);
|
||||||
void ReBindSocket(Player* hum);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<int, Player*> socket_hash_;
|
std::map<int, Player*> socket_hash_;
|
||||||
|
@ -746,20 +746,14 @@ bool Room::CanJoin(const std::string& accountid)
|
|||||||
|
|
||||||
void Room::OnPlayerOffline(Player* hum)
|
void Room::OnPlayerOffline(Player* hum)
|
||||||
{
|
{
|
||||||
if (GetOnlinePlayerNum() <= 0) {
|
bool has_player = false;
|
||||||
xtimer.AddDeadLineTimerAndAttach
|
for (auto& pair : accountid_hash_) {
|
||||||
(
|
if (pair.second->socket_handle != 0) {
|
||||||
SERVER_FRAME_RATE * 15,
|
has_player = true;
|
||||||
a8::XParams()
|
}
|
||||||
.SetSender(this),
|
}
|
||||||
[] (const a8::XParams& param)
|
if (!has_player) {
|
||||||
{
|
RoomMgr::Instance()->AddOverRoom(room_uuid);
|
||||||
Room* room = (Room*)param.sender.GetUserData();
|
|
||||||
if (room->GetOnlinePlayerNum() <= 0 && !room->added_to_over_room) {
|
|
||||||
RoomMgr::Instance()->AddOverRoom(room->room_uuid);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
&xtimer_attacher.timer_list_);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -958,45 +952,72 @@ void Room::UpdateGasInactive()
|
|||||||
{
|
{
|
||||||
if (frame_no - gas_data.gas_start_frameno >=
|
if (frame_no - gas_data.gas_start_frameno >=
|
||||||
MetaMgr::Instance()->gas_inactive_time * SERVER_FRAME_RATE) {
|
MetaMgr::Instance()->gas_inactive_time * SERVER_FRAME_RATE) {
|
||||||
|
#if 1
|
||||||
|
gas_data.gas_mode = GasWaiting;
|
||||||
|
gas_data.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001);
|
||||||
|
gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002);
|
||||||
|
gas_data.gas_progress = gas_data.old_area_meta->i->rad();
|
||||||
|
gas_data.gas_start_frameno = frame_no;
|
||||||
|
gas_data.pos_old = a8::Vec2(map_meta->i->map_width() / 2.0f,
|
||||||
|
map_meta->i->map_height() / 2.0f);
|
||||||
|
gas_data.pos_old_bk = gas_data.pos_old;
|
||||||
|
{
|
||||||
|
bool gen_ok = GenSmallCircle(gas_data.pos_old,
|
||||||
|
gas_data.old_area_meta->i->rad(),
|
||||||
|
gas_data.new_area_meta->i->rad(),
|
||||||
|
gas_data.pos_new);
|
||||||
|
assert(gen_ok);
|
||||||
|
}
|
||||||
|
gas_data.rad_old = gas_data.old_area_meta->i->rad();
|
||||||
|
gas_data.rad_new = gas_data.new_area_meta->i->rad();
|
||||||
|
battle_start_frameno_ = frame_no;
|
||||||
|
#else
|
||||||
gas_data.gas_mode = GasJump;
|
gas_data.gas_mode = GasJump;
|
||||||
gas_data.gas_start_frameno = frame_no;
|
gas_data.gas_start_frameno = frame_no;
|
||||||
|
#endif
|
||||||
if (human_hash_.size() < ROOM_MAX_PLAYER_NUM) {
|
if (human_hash_.size() < ROOM_MAX_PLAYER_NUM) {
|
||||||
CreateAndroid(ROOM_MAX_PLAYER_NUM - human_hash_.size());
|
CreateAndroid(ROOM_MAX_PLAYER_NUM - human_hash_.size());
|
||||||
NotifyUiUpdate();
|
|
||||||
}
|
}
|
||||||
|
NotifyUiUpdate();
|
||||||
CombineTeam();
|
CombineTeam();
|
||||||
ShuaPlane();
|
NotifyGameStart();
|
||||||
NotifyWxVoip();
|
NotifyWxVoip();
|
||||||
InitAirDrop();
|
InitAirDrop();
|
||||||
RoomMgr::Instance()->ActiveRoom(room_uuid);
|
RoomMgr::Instance()->ActiveRoom(room_uuid);
|
||||||
|
#if 0
|
||||||
|
ShuaPlane();
|
||||||
int auto_jump_interval = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_interval");
|
int auto_jump_interval = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_interval");
|
||||||
auto_jump_timer_ = xtimer.AddRepeatTimerAndAttach(SERVER_FRAME_RATE * auto_jump_interval,
|
auto_jump_timer_ = xtimer.AddRepeatTimerAndAttach
|
||||||
a8::XParams()
|
(SERVER_FRAME_RATE * auto_jump_interval,
|
||||||
.SetSender(this),
|
a8::XParams()
|
||||||
[] (const a8::XParams& param)
|
.SetSender(this),
|
||||||
{
|
[] (const a8::XParams& param)
|
||||||
Room* room = (Room*)param.sender.GetUserData();
|
{
|
||||||
int auto_jump_min_num = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_min_num");
|
Room* room = (Room*)param.sender.GetUserData();
|
||||||
int auto_jump_max_num = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_max_num");
|
int auto_jump_min_num = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_min_num");
|
||||||
int jump_num = a8::RandEx(auto_jump_min_num, auto_jump_max_num);
|
int auto_jump_max_num = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_max_num");
|
||||||
if (room->last_player_jump_pos.Distance(room->plane.curr_pos) < 64 * 8) {
|
int jump_num = a8::RandEx(auto_jump_min_num, auto_jump_max_num);
|
||||||
jump_num = 1 + rand() % 2;
|
if (room->last_player_jump_pos.Distance(room->plane.curr_pos) < 64 * 8) {
|
||||||
}
|
jump_num = 1 + rand() % 2;
|
||||||
for (int i = 0; i < jump_num; ++i) {
|
}
|
||||||
room->TouchHumanList(
|
for (int i = 0; i < jump_num; ++i) {
|
||||||
a8::XParams()
|
room->TouchHumanList
|
||||||
.SetSender(room),
|
(
|
||||||
[] (Human* hum, a8::XParams& param) -> bool
|
a8::XParams()
|
||||||
{
|
.SetSender(room),
|
||||||
if (a8::HasBitFlag(hum->status, HS_Fly) && hum->entity_subtype != EST_Player) {
|
[] (Human* hum, a8::XParams& param) -> bool
|
||||||
hum->DoJump();
|
{
|
||||||
return false;
|
if (a8::HasBitFlag(hum->status, HS_Fly) &&
|
||||||
}
|
hum->entity_subtype != EST_Player) {
|
||||||
return true;
|
hum->DoJump();
|
||||||
});
|
return false;
|
||||||
}
|
}
|
||||||
},
|
return true;
|
||||||
&xtimer_attacher.timer_list_);
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
&xtimer_attacher.timer_list_);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1551,13 +1572,113 @@ void Room::CreateMapSpawnPoint(MetaData::MapTplThing& thing_tpl)
|
|||||||
born_point_hash_[AllocUniid()] = born_point;
|
born_point_hash_[AllocUniid()] = born_point;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Room::GetOnlinePlayerNum()
|
void Room::SecondRandPoint()
|
||||||
{
|
{
|
||||||
int num = 0;
|
|
||||||
for (auto& pair : accountid_hash_) {
|
for (auto& pair : accountid_hash_) {
|
||||||
if (pair.second->socket_handle != 0) {
|
Human* hum = pair.second;
|
||||||
++num;
|
hum->born_point = AllocBornPoint(hum);
|
||||||
|
}
|
||||||
|
CombineTeamBornPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Room::NotifyGameStart()
|
||||||
|
{
|
||||||
|
cs::SMGameStart msg;
|
||||||
|
for (auto& pair : accountid_hash_) {
|
||||||
|
pair.second->SendNotifyMsg(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
waiting_start_ = true;
|
||||||
|
xtimer.AddDeadLineTimerAndAttach
|
||||||
|
(SERVER_FRAME_RATE * 2,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(this),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
Room* room = (Room*)param.sender.GetUserData();
|
||||||
|
room->waiting_start_ = false;
|
||||||
|
},
|
||||||
|
&xtimer_attacher.timer_list_);
|
||||||
|
xtimer.AddDeadLineTimerAndAttach
|
||||||
|
(SERVER_FRAME_RATE * 1,
|
||||||
|
a8::XParams()
|
||||||
|
.SetSender(this),
|
||||||
|
[] (const a8::XParams& param)
|
||||||
|
{
|
||||||
|
Room* room = (Room*)param.sender.GetUserData();
|
||||||
|
room->SecondRandPoint();
|
||||||
|
},
|
||||||
|
&xtimer_attacher.timer_list_);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Room::CombineTeamBornPoint()
|
||||||
|
{
|
||||||
|
for (auto& pair : team_hash_) {
|
||||||
|
Human* target = nullptr;
|
||||||
|
for (Human* hum : pair.second) {
|
||||||
|
if (!target) {
|
||||||
|
target = hum;
|
||||||
|
} else {
|
||||||
|
if (target->born_point) {
|
||||||
|
if (hum->born_point) {
|
||||||
|
DecBornPointHumanNum(hum->born_point, hum);
|
||||||
|
}
|
||||||
|
hum->born_point = target->born_point;
|
||||||
|
if (hum->born_point) {
|
||||||
|
IncBornPointHumanNum(hum->born_point, hum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} //end if
|
||||||
|
if (!hum->born_point) {
|
||||||
|
hum->pos = a8::Vec2(DEFAULT_BORN_POINT_X + rand() % 100,
|
||||||
|
DEFAULT_BORN_POINT_Y + rand() % 200);
|
||||||
|
} else {
|
||||||
|
hum->pos = hum->born_point->RandPoint();
|
||||||
|
}
|
||||||
|
hum->FindLocation();
|
||||||
|
hum->RefreshView();
|
||||||
|
grid_service.MoveHuman(hum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return num;
|
}
|
||||||
|
|
||||||
|
void Room::IncBornPointHumanNum(BornPoint* point, Human* hum)
|
||||||
|
{
|
||||||
|
switch (hum->entity_subtype) {
|
||||||
|
case EST_Player:
|
||||||
|
{
|
||||||
|
++point->player_num;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EST_Android:
|
||||||
|
{
|
||||||
|
++point->android_num;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Room::DecBornPointHumanNum(BornPoint* point, Human* hum)
|
||||||
|
{
|
||||||
|
switch (hum->entity_subtype) {
|
||||||
|
case EST_Player:
|
||||||
|
{
|
||||||
|
--point->player_num;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EST_Android:
|
||||||
|
{
|
||||||
|
--point->android_num;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,6 @@ public:
|
|||||||
long long pending_request = 0;
|
long long pending_request = 0;
|
||||||
long long last_debugout_tick = 0;
|
long long last_debugout_tick = 0;
|
||||||
a8::Vec2 last_player_jump_pos;
|
a8::Vec2 last_player_jump_pos;
|
||||||
bool added_to_over_room = false;
|
|
||||||
|
|
||||||
~Room();
|
~Room();
|
||||||
void Init();
|
void Init();
|
||||||
@ -60,6 +59,7 @@ public:
|
|||||||
Player* GetPlayerByAccountId(const std::string& accountid);
|
Player* GetPlayerByAccountId(const std::string& accountid);
|
||||||
Player* GetPlayerByUniId(int uniid);
|
Player* GetPlayerByUniId(int uniid);
|
||||||
Entity* GetEntityByUniId(int uniid);
|
Entity* GetEntityByUniId(int uniid);
|
||||||
|
bool IsWaitingStart() { return waiting_start_; }
|
||||||
|
|
||||||
void AddPlayer(Player* hum);
|
void AddPlayer(Player* hum);
|
||||||
Human* FindEnemy(Human* hum);
|
Human* FindEnemy(Human* hum);
|
||||||
@ -100,7 +100,6 @@ public:
|
|||||||
void UpdateCarObject(int old_uniid, int new_uniid, a8::Vec2 pos);
|
void UpdateCarObject(int old_uniid, int new_uniid, a8::Vec2 pos);
|
||||||
void TakeOnCarObject(int car_uniid);
|
void TakeOnCarObject(int car_uniid);
|
||||||
void TakeOffCarObject(int car_uniid, a8::Vec2 pos);
|
void TakeOffCarObject(int car_uniid, a8::Vec2 pos);
|
||||||
int GetOnlinePlayerNum();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int AllocUniid();
|
int AllocUniid();
|
||||||
@ -132,6 +131,11 @@ private:
|
|||||||
BornPoint* AllocBornPoint(Human* hum);
|
BornPoint* AllocBornPoint(Human* hum);
|
||||||
void CreateMapObject(MetaData::MapTplThing& thing_tpl);
|
void CreateMapObject(MetaData::MapTplThing& thing_tpl);
|
||||||
void CreateMapSpawnPoint(MetaData::MapTplThing& thing_tpl);
|
void CreateMapSpawnPoint(MetaData::MapTplThing& thing_tpl);
|
||||||
|
void SecondRandPoint();
|
||||||
|
void NotifyGameStart();
|
||||||
|
void CombineTeamBornPoint();
|
||||||
|
void IncBornPointHumanNum(BornPoint* point, Human* hum);
|
||||||
|
void DecBornPointHumanNum(BornPoint* point, Human* hum);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int elapsed_time_ = 0;
|
int elapsed_time_ = 0;
|
||||||
@ -139,6 +143,7 @@ private:
|
|||||||
MetaData::AirLine* airline_ = nullptr;
|
MetaData::AirLine* airline_ = nullptr;
|
||||||
a8::XTimerAttacher xtimer_attacher;
|
a8::XTimerAttacher xtimer_attacher;
|
||||||
xtimer_list* auto_jump_timer_ = nullptr;
|
xtimer_list* auto_jump_timer_ = nullptr;
|
||||||
|
bool waiting_start_ = false;
|
||||||
|
|
||||||
int current_teamid = 0;
|
int current_teamid = 0;
|
||||||
int current_uniid = 0;
|
int current_uniid = 0;
|
||||||
|
@ -99,7 +99,6 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg)
|
|||||||
{
|
{
|
||||||
cs::SMJoinedNotify notifymsg;
|
cs::SMJoinedNotify notifymsg;
|
||||||
notifymsg.set_error_code(0);
|
notifymsg.set_error_code(0);
|
||||||
notifymsg.set_server_info(JsonDataMgr::Instance()->server_info);
|
|
||||||
room->FillSMJoinedNotify(hum, notifymsg);
|
room->FillSMJoinedNotify(hum, notifymsg);
|
||||||
GGListener::Instance()->SendToClient(hdr.socket_handle, hdr.seqid, notifymsg);
|
GGListener::Instance()->SendToClient(hdr.socket_handle, hdr.seqid, notifymsg);
|
||||||
}
|
}
|
||||||
@ -112,45 +111,6 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
|
|
||||||
{
|
|
||||||
auto send_reconnect_failed =
|
|
||||||
[] (int socket_handle, int errcode, const std::string& errmsg)
|
|
||||||
{
|
|
||||||
cs::SMReconnect respmsg;
|
|
||||||
respmsg.set_errcode(errcode);
|
|
||||||
respmsg.set_errmsg(errmsg);
|
|
||||||
GGListener::Instance()->SendToClient(socket_handle, 0, respmsg);
|
|
||||||
a8::Timer::Instance()->AddDeadLineTimer
|
|
||||||
(
|
|
||||||
1000 * 3,
|
|
||||||
a8::XParams()
|
|
||||||
.SetSender(socket_handle),
|
|
||||||
[] (const a8::XParams& param)
|
|
||||||
{
|
|
||||||
GGListener::Instance()->ForceCloseChildSocket(param.sender);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
Room* room = GetRoomByUuid(a8::XValue(msg.room_uuid()));
|
|
||||||
if (!room) {
|
|
||||||
send_reconnect_failed(hdr.socket_handle, 1, "房间已销毁");
|
|
||||||
a8::UdpLog::Instance()->Debug
|
|
||||||
("房间已销毁 %s",
|
|
||||||
{
|
|
||||||
msg.room_uuid()
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player* hum = room->GetPlayerByAccountId(msg.account_id());
|
|
||||||
if (!hum) {
|
|
||||||
send_reconnect_failed(hdr.socket_handle, 1, "accountid未在房间列表");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
hum->_CMReconnect(hdr, msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
int RoomMgr::RoomNum()
|
int RoomMgr::RoomNum()
|
||||||
{
|
{
|
||||||
return room_hash_.size();
|
return room_hash_.size();
|
||||||
@ -195,7 +155,6 @@ void RoomMgr::AddOverRoom(long long room_uuid)
|
|||||||
inactive_room_hash_.erase(room_uuid);
|
inactive_room_hash_.erase(room_uuid);
|
||||||
Room* room = GetRoomByUuid(room_uuid);
|
Room* room = GetRoomByUuid(room_uuid);
|
||||||
if (room) {
|
if (room) {
|
||||||
room->added_to_over_room = true;
|
|
||||||
room->game_over_tick = a8::XGetTickCount();
|
room->game_over_tick = a8::XGetTickCount();
|
||||||
room->game_over_timer = a8::Timer::Instance()->AddRepeatTimer(500,
|
room->game_over_timer = a8::Timer::Instance()->AddRepeatTimer(500,
|
||||||
a8::XParams()
|
a8::XParams()
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
namespace cs
|
namespace cs
|
||||||
{
|
{
|
||||||
class CMJoin;
|
class CMJoin;
|
||||||
class CMReconnect;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Room;
|
class Room;
|
||||||
@ -24,7 +23,6 @@ class RoomMgr : public a8::Singleton<RoomMgr>
|
|||||||
void Update(int delta_time);
|
void Update(int delta_time);
|
||||||
|
|
||||||
void _CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg);
|
void _CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg);
|
||||||
void _CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg);
|
|
||||||
void ActiveRoom(long long room_uuid);
|
void ActiveRoom(long long room_uuid);
|
||||||
int RoomNum();
|
int RoomNum();
|
||||||
int OverRoomNum();
|
int OverRoomNum();
|
||||||
|
@ -6,7 +6,6 @@ enum CMMessageId_e
|
|||||||
_CMPing = 101;
|
_CMPing = 101;
|
||||||
|
|
||||||
_CMJoin = 103;
|
_CMJoin = 103;
|
||||||
_CMReconnect = 104;
|
|
||||||
_CMMove = 201;
|
_CMMove = 201;
|
||||||
_CMEmote = 204;
|
_CMEmote = 204;
|
||||||
_CMVoice = 206;
|
_CMVoice = 206;
|
||||||
@ -26,7 +25,6 @@ enum SMMessageId_e
|
|||||||
_SMLeave = 209;
|
_SMLeave = 209;
|
||||||
|
|
||||||
_SMJoinedNotify = 103;
|
_SMJoinedNotify = 103;
|
||||||
_SMReconnect = 104;
|
|
||||||
_SMMapInfo = 1002;
|
_SMMapInfo = 1002;
|
||||||
_SMPlayerInfo = 1003;
|
_SMPlayerInfo = 1003;
|
||||||
_SMUpdate = 1004;
|
_SMUpdate = 1004;
|
||||||
|
@ -662,24 +662,6 @@ message CMJoin
|
|||||||
optional int32 today_enter_times = 28; //今天进入游戏的次数
|
optional int32 today_enter_times = 28; //今天进入游戏的次数
|
||||||
}
|
}
|
||||||
|
|
||||||
//断线重连
|
|
||||||
message CMReconnect
|
|
||||||
{
|
|
||||||
optional int32 server_id = 1; //保留
|
|
||||||
optional string team_uuid = 2; //保留
|
|
||||||
optional string account_id = 3; //账号id
|
|
||||||
optional string session_id = 4; //session_id
|
|
||||||
optional string room_uuid = 5; //房间唯一id
|
|
||||||
optional string server_info = 6; //服务器信息
|
|
||||||
}
|
|
||||||
|
|
||||||
//断线重连回复
|
|
||||||
message SMReconnect
|
|
||||||
{
|
|
||||||
optional int32 errcode = 1; //错误码 0:成功 1:重连失败
|
|
||||||
optional string errmsg = 2; //错误描述
|
|
||||||
}
|
|
||||||
|
|
||||||
//移动
|
//移动
|
||||||
message CMMove
|
message CMMove
|
||||||
{
|
{
|
||||||
@ -784,7 +766,6 @@ message SMJoinedNotify
|
|||||||
optional bool elo_start = 6; //目前没用到
|
optional bool elo_start = 6; //目前没用到
|
||||||
|
|
||||||
optional int32 error_code = 7; //错误 1:服务器维护中 2:服务器繁忙请稍后再进入
|
optional int32 error_code = 7; //错误 1:服务器维护中 2:服务器繁忙请稍后再进入
|
||||||
optional string server_info = 8; //服务器信息
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//地图信息
|
//地图信息
|
||||||
|
@ -190,12 +190,6 @@ message KillPoint
|
|||||||
optional int32 parameter2 = 3;
|
optional int32 parameter2 = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Text
|
|
||||||
{
|
|
||||||
optional string textid = 1;
|
|
||||||
optional string text = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
//end
|
//end
|
||||||
|
|
||||||
message DoorObjJson
|
message DoorObjJson
|
||||||
|
Loading…
x
Reference in New Issue
Block a user