This commit is contained in:
aozhiwei 2020-12-01 17:40:57 +08:00
commit 62adb69ef8
8 changed files with 112 additions and 47 deletions

View File

@ -738,9 +738,15 @@ void Human::UpdatePoisoning()
bool need_notify = poisoning_time > 1000; bool need_notify = poisoning_time > 1000;
while (poisoning_time > 1000) { while (poisoning_time > 1000) {
if (room->GetGasData().is_last_gas) { if (room->GetGasData().is_last_gas) {
DecHP(room->GetGasData().new_area_meta->i->hurt(), VP_SafeArea, "毒圈", VW_SafeArea); DecHP(room->GetGasData().new_area_meta->i->hurt(),
VP_SafeArea,
MetaMgr::Instance()->GetText("battle_server_killer_gas", "毒圈"),
VW_SafeArea);
} else { } else {
DecHP(room->GetGasData().old_area_meta->i->hurt(), VP_SafeArea, "毒圈", VW_SafeArea); DecHP(room->GetGasData().old_area_meta->i->hurt(),
VP_SafeArea,
MetaMgr::Instance()->GetText("battle_server_killer_gas", "毒圈"),
VW_SafeArea);
} }
if (dead) { if (dead) {
poisoning_time = 0; poisoning_time = 0;
@ -976,10 +982,11 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
Entity* hum = room->GetEntityByUniId(killer_id); Entity* hum = room->GetEntityByUniId(killer_id);
if (hum && hum->IsEntityType(ET_Player)) { if (hum && hum->IsEntityType(ET_Player)) {
if (killer_id == GetEntityUniId()) { if (killer_id == GetEntityUniId()) {
std::string msg = a8::Format("%s 自杀", std::string msg = a8::Format
{ (MetaMgr::Instance()->GetText("battle_server_dead_specate", "%s 自杀").c_str(),
killer_name, {
}); killer_name,
});
SendRollMsg(msg); SendRollMsg(msg);
} else { } else {
((Human*)hum)->stats.kills++; ((Human*)hum)->stats.kills++;
@ -987,22 +994,25 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
((Human*)hum)->kill_humans.insert(this); ((Human*)hum)->kill_humans.insert(this);
((Human*)hum)->SyncAroundPlayers(__FILE__, __LINE__, __func__); ((Human*)hum)->SyncAroundPlayers(__FILE__, __LINE__, __func__);
if (weapon_id == VW_Tank) { if (weapon_id == VW_Tank) {
std::string msg = a8::Format("%s 使用 %s 干掉了 %s", std::string msg = a8::Format
{ (MetaMgr::Instance()->GetText("battle_server_dead_car",
killer_name, "%s 使用 载具 干掉了 %s").c_str(),
"载具", {
name killer_name,
}); name
});
SendRollMsg(msg); SendRollMsg(msg);
} else { } else {
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon_id); MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon_id);
if (equip_meta) { if (equip_meta) {
std::string msg = a8::Format("%s 使用 %s 干掉了 %s", std::string msg = a8::Format
{ (MetaMgr::Instance()->GetText("battle_server_dead_weapon",
killer_name, "%s 使用 %s 干掉了 %s").c_str(),
equip_meta->i->name(), {
name killer_name,
}); equip_meta->i->name(),
name
});
SendRollMsg(msg); SendRollMsg(msg);
} }
} }
@ -1011,37 +1021,42 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
switch (weapon_id) { switch (weapon_id) {
case VW_SafeArea: case VW_SafeArea:
{ {
std::string msg = a8::Format("%s 被毒圈干掉", std::string msg = a8::Format
{ (MetaMgr::Instance()->GetText("battle_server_dead_gas", "%s 被毒圈干掉").c_str(),
name {
}); name
});
SendRollMsg(msg); SendRollMsg(msg);
} }
break; break;
case VW_Spectate: case VW_Spectate:
{ {
std::string msg = a8::Format("%s 自杀", std::string msg = a8::Format
{ (MetaMgr::Instance()->GetText("battle_server_dead_specate", "%s 自杀").c_str(),
name {
}); name
});
SendRollMsg(msg); SendRollMsg(msg);
} }
break; break;
case VW_SelfDetonate: case VW_SelfDetonate:
{ {
std::string msg = a8::Format("%s 被炸死", std::string msg = a8::Format
{ (MetaMgr::Instance()->GetText("battle_server_dead_self_detonate",
name "%s 被炸死").c_str(),
}); {
name
});
SendRollMsg(msg); SendRollMsg(msg);
} }
break; break;
case VW_Mine: case VW_Mine:
{ {
std::string msg = a8::Format("%s 被地雷炸死", std::string msg = a8::Format
{ (MetaMgr::Instance()->GetText("battle_server_dead_mine", "%s 被地雷炸死").c_str(),
name {
}); name
});
SendRollMsg(msg); SendRollMsg(msg);
} }
break; break;
@ -3152,7 +3167,11 @@ void Human::ProcBuffEffect(Human* caster, Buff* buff)
MetaMgr::Instance()->terminator_meta && MetaMgr::Instance()->terminator_meta &&
meta != MetaMgr::Instance()->terminator_meta) { meta != MetaMgr::Instance()->terminator_meta) {
WinExp(this, MetaMgr::Instance()->terminator_meta->i->exp() + 1); WinExp(this, MetaMgr::Instance()->terminator_meta->i->exp() + 1);
room->NotifySysPiao("终结者出现", a8::MkRgb(255, 0, 0), 3); room->NotifySysPiao
(MetaMgr::Instance()->GetText("battle_server_terminator_appear",
"终结者出现").c_str(),
a8::MkRgb(255, 0, 0), 3
);
OnChgToTerminator(); OnChgToTerminator();
} }
} }

View File

@ -62,6 +62,7 @@ public:
std::vector<MetaData::Robot> robot_list; std::vector<MetaData::Robot> robot_list;
std::list<metatable::AI> ai_meta_list; std::list<metatable::AI> ai_meta_list;
std::list<MetaData::AI> ai_list; std::list<MetaData::AI> ai_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;
@ -90,6 +91,7 @@ public:
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<int, MetaData::AI*> ai_hash; std::map<int, MetaData::AI*> ai_hash;
std::map<std::string, std::string> text_hash;
void Load() void Load()
{ {
@ -138,6 +140,7 @@ public:
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 + "ai@ai.csv", ai_meta_list); f8::ReadCsvMetaFile(res_path + "ai@ai.csv", ai_meta_list);
f8::ReadCsvMetaFile(res_path + "text@text.csv", text_meta_list);
BindToMetaData(); BindToMetaData();
#if 1 #if 1
{ {
@ -616,6 +619,11 @@ private:
item.Init(); item.Init();
ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item; ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item;
} }
for (auto& meta : text_meta_list) {
text_hash[meta.textid()] = meta.text();
}
} }
private: private:
@ -848,3 +856,9 @@ MetaData::AI* MetaMgr::GetAI(int ai_level, int ai_mode)
auto itr = loader_->ai_hash.find(a8::MakeInt64(ai_level, ai_mode)); auto itr = loader_->ai_hash.find(a8::MakeInt64(ai_level, ai_mode));
return itr != loader_->ai_hash.end() ? itr->second : nullptr; return itr != loader_->ai_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;
}

View File

@ -48,6 +48,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
int GetKillPointParam2(int kill_num); int GetKillPointParam2(int kill_num);
MetaData::Robot* RandRobot(std::set<int>& refreshed_robot_set); MetaData::Robot* RandRobot(std::set<int>& refreshed_robot_set);
MetaData::AI* GetAI(int ai_level, int ai_mode); MetaData::AI* GetAI(int ai_level, int ai_mode);
std::string GetText(const std::string& textid, const std::string& def_text="");
int gas_inactive_time = 10; int gas_inactive_time = 10;
int newbie_gas_inactive_time = 5; int newbie_gas_inactive_time = 5;

View File

@ -294,7 +294,10 @@ void Obstacle::Explosion(Bullet* bullet)
float dmg = meta->i->damage(); float dmg = meta->i->damage();
float def = hum->ability.def; float def = hum->ability.def;
float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K); float finaly_dmg = dmg * (1 - def/MetaMgr::Instance()->K);
hum->DecHP(finaly_dmg, VP_Mine, "地雷", VW_Mine); hum->DecHP(finaly_dmg,
VP_Mine,
MetaMgr::Instance()->GetText("battle_server_killer_mine", "地雷"),
VW_Mine);
} }
} }
break; break;

View File

@ -935,7 +935,7 @@ void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
need_sync_active_player = true; need_sync_active_player = true;
cs::SMReconnect respmsg; cs::SMReconnect respmsg;
respmsg.set_errcode(0); respmsg.set_errcode(0);
respmsg.set_errmsg("战斗重连成功"); respmsg.set_errmsg(MetaMgr::Instance()->GetText("battle_server_reconnect_ok", "战斗重连成功"));
SendNotifyMsg(respmsg); SendNotifyMsg(respmsg);
PlayerMgr::Instance()->ReBindSocket(this); PlayerMgr::Instance()->ReBindSocket(this);
a8::UdpLog::Instance()->Debug a8::UdpLog::Instance()->Debug
@ -1375,7 +1375,7 @@ void Player::_CMOpenBox(f8::MsgHdr& hdr, const cs::CMOpenBox& msg)
receved_box_hash_.insert(msg.box_id()); receved_box_hash_.insert(msg.box_id());
} else { } else {
respmsg.set_errcode(1); respmsg.set_errcode(1);
respmsg.set_errmsg("不能重复领取"); respmsg.set_errmsg(MetaMgr::Instance()->GetText("battle_server_received", "不能重复领取"));
} }
} }
SendNotifyMsg(respmsg); SendNotifyMsg(respmsg);

View File

@ -1428,7 +1428,9 @@ void Room::AirDrop(int appear_time, int box_id, int airdrop_id)
} }
if (GetRoomMode() == kZombieMode) { if (GetRoomMode() == kZombieMode) {
if (airdrop_id != map_meta_->i->terminator_airdrop()) { if (airdrop_id != map_meta_->i->terminator_airdrop()) {
NotifyCountdown("距离物资箱抵达还有%d秒", appear_time / 1000); NotifyCountdown(MetaMgr::Instance()->GetText("battle_server_box_countdown",
"距离物资箱抵达还有%d秒"),
appear_time / 1000);
} }
} }
if (thing_meta && thing_meta->i->type() == 2) { if (thing_meta && thing_meta->i->type() == 2) {
@ -1497,7 +1499,8 @@ void Room::AirDrop(int appear_time, int box_id, int airdrop_id)
if (obstacle->is_terminator_airdrop_box) { if (obstacle->is_terminator_airdrop_box) {
room->NotifySysPiao room->NotifySysPiao
( (
"终结者补给箱已送达", MetaMgr::Instance()->GetText("battle_server_box_serviced",
"终结者补给箱已送达"),
a8::MkRgb(0, 255, 0), a8::MkRgb(0, 255, 0),
3 3
); );
@ -2345,7 +2348,7 @@ void Room::ProcDieAndroid(int die_time, int die_num)
if (alive_humans.size() == 1) { if (alive_humans.size() == 1) {
Human* hum = alive_humans[0]; Human* hum = alive_humans[0];
hum->BeKill(VP_SafeArea, hum->BeKill(VP_SafeArea,
"毒圈", MetaMgr::Instance()->GetText("battle_server_killer_gas", "毒圈"),
VW_SafeArea); VW_SafeArea);
a8::UnSetBitFlag(hum->status, HS_Disable); a8::UnSetBitFlag(hum->status, HS_Disable);
return; return;
@ -2373,7 +2376,7 @@ void Room::ProcDieAndroid(int die_time, int die_num)
a8::UnSetBitFlag(hum->status, HS_Disable); a8::UnSetBitFlag(hum->status, HS_Disable);
} else { } else {
hum->BeKill(VP_SafeArea, hum->BeKill(VP_SafeArea,
"毒圈", MetaMgr::Instance()->GetText("battle_server_killer_gas", "毒圈"),
VW_SafeArea); VW_SafeArea);
if (!alive_humans.empty()) { if (!alive_humans.empty()) {
alive_humans.erase(alive_humans.begin() + i); alive_humans.erase(alive_humans.begin() + i);
@ -2439,7 +2442,7 @@ void Room::CheckAutoDie(Human* target,
} else { } else {
a8::UnSetBitFlag(target->status, HS_Disable); a8::UnSetBitFlag(target->status, HS_Disable);
target->BeKill(VP_SafeArea, target->BeKill(VP_SafeArea,
"毒圈", MetaMgr::Instance()->GetText("battle_server_killer_gas", "毒圈"),
VW_SafeArea); VW_SafeArea);
} }
} }
@ -3290,7 +3293,9 @@ void Room::OnZombieAppear(Human* hum)
.SetParam1(hum->meta->i->name()), .SetParam1(hum->meta->i->name()),
[] (Player* hum, a8::XParams& param) [] (Player* hum, a8::XParams& param)
{ {
hum->SendSysPiaoMsg(a8::Format("%s出现了", {param.param1.GetString()}), hum->SendSysPiaoMsg(a8::Format(MetaMgr::Instance()->GetText("battle_server_appear",
"%s出现了").c_str(),
{param.param1.GetString()}),
a8::MkRgb(255, 0, 0), a8::MkRgb(255, 0, 0),
3); 3);
} }

View File

@ -201,7 +201,12 @@ void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
Room* room = GetRoomByUuid(a8::XValue(msg.room_uuid())); Room* room = GetRoomByUuid(a8::XValue(msg.room_uuid()));
if (!room) { if (!room) {
send_reconnect_failed(hdr.socket_handle, 1, "房间已销毁"); send_reconnect_failed
(hdr.socket_handle,
1,
MetaMgr::Instance()->GetText("battle_server_reconnect_failreason_room_destoryed",
"房间已销毁")
);
a8::UdpLog::Instance()->Debug a8::UdpLog::Instance()->Debug
("房间已销毁 %s", ("房间已销毁 %s",
{ {
@ -210,12 +215,24 @@ void RoomMgr::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
return; return;
} }
if (room->GetRoomMode() != kChiJiMode) { if (room->GetRoomMode() != kChiJiMode) {
send_reconnect_failed(hdr.socket_handle, 1, "只有吃鸡模式支持重连"); send_reconnect_failed
(hdr.socket_handle,
1,
MetaMgr::Instance()->GetText("battle_server_reconnect_failreason_only_chiji",
"只有吃鸡模式支持重连"
)
);
return; return;
} }
Player* hum = room->GetPlayerByAccountId(msg.account_id()); Player* hum = room->GetPlayerByAccountId(msg.account_id());
if (!hum) { if (!hum) {
send_reconnect_failed(hdr.socket_handle, 1, "accountid未在房间列表"); send_reconnect_failed
(hdr.socket_handle,
1,
MetaMgr::Instance()->GetText("battle_server_reconnect_failreason_notfound_accountid",
"accountid未在房间列表"
)
);
return; return;
} }
hum->_CMReconnect(hdr, msg); hum->_CMReconnect(hdr, msg);

View File

@ -271,6 +271,12 @@ message AI
optional int32 ai_mode = 12; optional int32 ai_mode = 12;
} }
message Text
{
optional string textid = 1;
optional string text = 2;
}
//end //end
message DoorObjJson message DoorObjJson