This commit is contained in:
aozhiwei 2021-09-02 15:04:45 +08:00
parent 08ca2046f3
commit bf3047febd
7 changed files with 117 additions and 122 deletions

View File

@ -332,17 +332,10 @@ void Car::OnExplosionHit(Explosion* e)
finaly_dmg}));
}
#endif
#if 1
DecHP(finaly_dmg,
1,
VP_Explosion,
"",
1);
#else
DecHP(finaly_dmg,
sender.Get()->GetUniId(),
sender.Get()->GetName(),
gun_meta->i->id());
#endif
e->GetExplosionEffect());
}
void Car::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id)

View File

@ -408,6 +408,20 @@ enum HpOpt_e
kHpOptEnd
};
enum RichTextElementType
{
kTextElement = 1,
kImageElement = 2
};
enum KillTextFieldIdx
{
kFieldIdxMasterName = 1000,
kFieldIdxKillerName,
kFieldIdxDeadName,
kFieldIdxWeaponTextIcon,
};
const char* const PROJ_NAME_FMT = "game%d_gameserver";
const char* const PROJ_ROOT_FMT = "/data/logs/%s";

View File

@ -13,6 +13,7 @@ class Explosion
float GetDmg() { return dmg_; };
long long GetSpecialDamageType() { return special_damage_type_; };
bool IsPreBattleExplosion();
int GetExplosionEffect() { return explosion_effect_; };
void IndifferenceAttack(Room* room,
const a8::Vec2& center,

View File

@ -108,17 +108,10 @@ void Hero::OnExplosionHit(Explosion* e)
finaly_dmg}));
}
#endif
#if 1
DecHP(finaly_dmg,
1,
VP_Explosion,
"",
1);
#else
DecHP(finaly_dmg,
sender.Get()->GetUniId(),
sender.Get()->GetName(),
gun_meta->i->id());
#endif
e->GetExplosionEffect());
}
void Hero::OnBulletHit(Bullet* bullet)

View File

@ -3263,17 +3263,10 @@ void Human::OnExplosionHit(Explosion* e)
finaly_dmg}));
}
#endif
#if 1
DecHP(finaly_dmg,
1,
VP_Explosion,
"",
1);
#else
DecHP(finaly_dmg,
sender.Get()->GetUniId(),
sender.Get()->GetName(),
gun_meta->i->id());
#endif
e->GetExplosionEffect());
}
void Human::SendRollMsgEx(KillInfo& info,

View File

@ -8,6 +8,49 @@
#include "cs_proto.pb.h"
struct RollMsgHintInfo
{
std::string master_name;
std::string killer_name;
std::string dead_name;
std::string weapon_text_icon;
std::vector<std::tuple<int, std::string>>* hint_template = nullptr;
bool Replace(int idx, std::string& text)
{
switch (idx) {
case kFieldIdxMasterName:
{
text = master_name;
}
break;
case kFieldIdxKillerName:
{
text = killer_name;
}
break;
case kFieldIdxDeadName:
{
text = dead_name;
}
break;
case kFieldIdxWeaponTextIcon:
{
text = weapon_text_icon;
}
break;
default:
{
return false;
}
break;
}
return true;
}
};
void KillMgr::Init()
{
@ -43,28 +86,30 @@ void KillMgr::FillHintInfo(Human* dead_hum, KillInfo* info, RollMsgHintInfo& hin
case VP_Gas:
{
hint_info.killer_name = "";
hint_info.template_name = "battle_server_dead_text_gas";
hint_info.template_defval = "%s 被${weapon_text_icon}干掉";
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
("battle_server_dead_text_gas");
}
break;
case VP_Buff:
{
hint_info.killer_name = "";
hint_info.template_name = a8::Format("battle_server_dead_text_buff_%d", {1});
if (!MetaMgr::Instance()->HasText(hint_info.template_name)) {
hint_info.template_name = "battle_server_dead_text_buff_default";
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
(a8::Format("battle_server_dead_text_buff_%d", {1}));
if (!hint_info.hint_template) {
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
("battle_server_dead_text_buff_default");
}
hint_info.template_defval = "%s 被";
}
break;
case VP_Explosion:
{
hint_info.killer_name = "";
hint_info.template_name = a8::Format("battle_server_dead_text_explosion_%d", {1});
if (!MetaMgr::Instance()->HasText(hint_info.template_name)) {
hint_info.template_name = "battle_server_dead_text_explosion_default";
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
(a8::Format("battle_server_dead_text_explosion_%d", {1}));
if (!hint_info.hint_template) {
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
("battle_server_dead_text_explosion_default");
}
hint_info.template_defval = "%s 被";
}
break;
default:
@ -73,11 +118,13 @@ void KillMgr::FillHintInfo(Human* dead_hum, KillInfo* info, RollMsgHintInfo& hin
if (killer) {
hint_info.killer_name = killer->GetName();
if (info->killer_id == dead_hum->GetUniId()) {
hint_info.template_name = "battle_server_dead_text_specate";
hint_info.template_defval = "${dead.name} 自杀";
//${dead.name} 自杀
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
("battle_server_dead_text_specate");
} else {
hint_info.template_name = "battle_server_dead_text_weapon";
hint_info.template_defval = "${killer.name} 使用 ${weapon.text_icon} 干掉了 ${dead.name}";
//${killer.name} 使用 ${weapon.text_icon} 干掉了 ${dead.name}
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
("battle_server_dead_text_weapon");
}
} else {
}
@ -89,80 +136,44 @@ void KillMgr::FillHintInfo(Human* dead_hum, KillInfo* info, RollMsgHintInfo& hin
void KillMgr::PreprocessRollMsg(std::shared_ptr<cs::SMRollMsg> pb_msg,
RollMsgHintInfo& hint_info)
{
#if 0
cs::SMRollMsg *pb_msg = new cs::SMRollMsg;
{
std::string result;
result.reserve(1024);
const char *p = fmt;
auto itr = args.begin();
while (*p) {
if (*p == '%' && *(p+1)) {
p++;
switch(*p){
case 'd':
{
assert(itr != args.end());
result.append(itr->GetString().c_str());
itr++;
}
break;
case 'f':
{
assert(itr != args.end());
result.append(itr->GetString().c_str());
itr++;
}
break;
case 's':
{
assert(itr != args.end());
result.append(itr->GetString().c_str());
itr++;
}
break;
default:
{
result.push_back('%');
result.push_back(*p);
}
break;
if (hint_info.hint_template) {
for (auto& tuple : *hint_info.hint_template) {
int el_type = std::get<0>(tuple);
std::string el_val = std::get<1>(tuple);
switch (el_type) {
case kTextElement:
{
auto e = pb_msg->add_elements();
e->set_element_type(el_type);
e->mutable_union_obj_1()->set_text(el_val);
}
} else if (*p == '$' && *(p+1)) {
char* p1 = strstr((char*)p, "${weapon_text_icon}");
if (p1) {
if (!result.empty()) {
auto element = pb_msg->add_elements();
element->set_element_type(1);
element->mutable_union_obj_1()->set_text(result);
}
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(info.weapon_id);
if (equip_meta) {
auto element = pb_msg->add_elements();
element->set_element_type(2);
element->mutable_union_obj_2()->set_id(equip_meta->i->text_icon());
} else {
auto element = pb_msg->add_elements();
element->set_element_type(2);
element->mutable_union_obj_2()->set_id(info.weapon_id);
}
result = "";
p = p1 + strlen("${weapon_text_icon}") - 1;
} else {
result.push_back(*p);
break;
case kImageElement:
{
auto e = pb_msg->add_elements();
e->set_element_type(el_type);
e->mutable_union_obj_2()->set_id(a8::XValue(el_val));
}
} else {
result.push_back(*p);
break;
default:
{
std::string text;
if (hint_info.Replace(el_type, text)) {
if (el_type == kFieldIdxWeaponTextIcon) {
auto e = pb_msg->add_elements();
e->set_element_type(el_type);
e->mutable_union_obj_2()->set_id(a8::XValue(text));
} else {
auto e = pb_msg->add_elements();
e->set_element_type(el_type);
e->mutable_union_obj_1()->set_text(text);
}
}
}
break;
}
p++;
} //end while p
if (!result.empty()) {
auto element = pb_msg->add_elements();
element->set_element_type(1);
element->mutable_union_obj_1()->set_text(result);
}
}
#endif
}
void KillMgr::BoradcastRollMsg(Human* dead_hum,
@ -216,7 +227,7 @@ void KillMgr::BoradcastRollMsgCb(Human* dead_hum,
{
for (int i = 0; i < pb_msg->elements_size(); ++i) {
auto element = pb_msg->mutable_elements(i);
if (element->element_type() == 1) {
if (element->element_type() == kTextElement) {
int color = element->mutable_union_obj_1()->color();
if (info->killer_id == hum->GetUniId()){
color = MetaMgr::Instance()->self_kill_color;

View File

@ -13,18 +13,8 @@ struct KillInfo
int weapon_id = 0;
};
struct RollMsgHintInfo
{
std::string master_name;
std::string killer_name;
std::string dead_name;
std::string weapon_text_icon;
std::string template_name;
std::string template_defval;
};
class Human;
struct RollMsgHintInfo;
class KillMgr : public a8::Singleton<KillMgr>
{