1
This commit is contained in:
parent
08ca2046f3
commit
bf3047febd
@ -332,17 +332,10 @@ void Car::OnExplosionHit(Explosion* e)
|
|||||||
finaly_dmg}));
|
finaly_dmg}));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if 1
|
|
||||||
DecHP(finaly_dmg,
|
DecHP(finaly_dmg,
|
||||||
1,
|
VP_Explosion,
|
||||||
"",
|
"",
|
||||||
1);
|
e->GetExplosionEffect());
|
||||||
#else
|
|
||||||
DecHP(finaly_dmg,
|
|
||||||
sender.Get()->GetUniId(),
|
|
||||||
sender.Get()->GetName(),
|
|
||||||
gun_meta->i->id());
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Car::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id)
|
void Car::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id)
|
||||||
|
@ -408,6 +408,20 @@ enum HpOpt_e
|
|||||||
kHpOptEnd
|
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_NAME_FMT = "game%d_gameserver";
|
||||||
const char* const PROJ_ROOT_FMT = "/data/logs/%s";
|
const char* const PROJ_ROOT_FMT = "/data/logs/%s";
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ class Explosion
|
|||||||
float GetDmg() { return dmg_; };
|
float GetDmg() { return dmg_; };
|
||||||
long long GetSpecialDamageType() { return special_damage_type_; };
|
long long GetSpecialDamageType() { return special_damage_type_; };
|
||||||
bool IsPreBattleExplosion();
|
bool IsPreBattleExplosion();
|
||||||
|
int GetExplosionEffect() { return explosion_effect_; };
|
||||||
|
|
||||||
void IndifferenceAttack(Room* room,
|
void IndifferenceAttack(Room* room,
|
||||||
const a8::Vec2& center,
|
const a8::Vec2& center,
|
||||||
|
@ -108,17 +108,10 @@ void Hero::OnExplosionHit(Explosion* e)
|
|||||||
finaly_dmg}));
|
finaly_dmg}));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if 1
|
|
||||||
DecHP(finaly_dmg,
|
DecHP(finaly_dmg,
|
||||||
1,
|
VP_Explosion,
|
||||||
"",
|
"",
|
||||||
1);
|
e->GetExplosionEffect());
|
||||||
#else
|
|
||||||
DecHP(finaly_dmg,
|
|
||||||
sender.Get()->GetUniId(),
|
|
||||||
sender.Get()->GetName(),
|
|
||||||
gun_meta->i->id());
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hero::OnBulletHit(Bullet* bullet)
|
void Hero::OnBulletHit(Bullet* bullet)
|
||||||
|
@ -3263,17 +3263,10 @@ void Human::OnExplosionHit(Explosion* e)
|
|||||||
finaly_dmg}));
|
finaly_dmg}));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if 1
|
|
||||||
DecHP(finaly_dmg,
|
DecHP(finaly_dmg,
|
||||||
1,
|
VP_Explosion,
|
||||||
"",
|
"",
|
||||||
1);
|
e->GetExplosionEffect());
|
||||||
#else
|
|
||||||
DecHP(finaly_dmg,
|
|
||||||
sender.Get()->GetUniId(),
|
|
||||||
sender.Get()->GetName(),
|
|
||||||
gun_meta->i->id());
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Human::SendRollMsgEx(KillInfo& info,
|
void Human::SendRollMsgEx(KillInfo& info,
|
||||||
|
@ -8,6 +8,49 @@
|
|||||||
|
|
||||||
#include "cs_proto.pb.h"
|
#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()
|
void KillMgr::Init()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -43,28 +86,30 @@ void KillMgr::FillHintInfo(Human* dead_hum, KillInfo* info, RollMsgHintInfo& hin
|
|||||||
case VP_Gas:
|
case VP_Gas:
|
||||||
{
|
{
|
||||||
hint_info.killer_name = "";
|
hint_info.killer_name = "";
|
||||||
hint_info.template_name = "battle_server_dead_text_gas";
|
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
|
||||||
hint_info.template_defval = "%s 被${weapon_text_icon}干掉";
|
("battle_server_dead_text_gas");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VP_Buff:
|
case VP_Buff:
|
||||||
{
|
{
|
||||||
hint_info.killer_name = "";
|
hint_info.killer_name = "";
|
||||||
hint_info.template_name = a8::Format("battle_server_dead_text_buff_%d", {1});
|
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
|
||||||
if (!MetaMgr::Instance()->HasText(hint_info.template_name)) {
|
(a8::Format("battle_server_dead_text_buff_%d", {1}));
|
||||||
hint_info.template_name = "battle_server_dead_text_buff_default";
|
if (!hint_info.hint_template) {
|
||||||
|
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
|
||||||
|
("battle_server_dead_text_buff_default");
|
||||||
}
|
}
|
||||||
hint_info.template_defval = "%s 被";
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VP_Explosion:
|
case VP_Explosion:
|
||||||
{
|
{
|
||||||
hint_info.killer_name = "";
|
hint_info.killer_name = "";
|
||||||
hint_info.template_name = a8::Format("battle_server_dead_text_explosion_%d", {1});
|
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
|
||||||
if (!MetaMgr::Instance()->HasText(hint_info.template_name)) {
|
(a8::Format("battle_server_dead_text_explosion_%d", {1}));
|
||||||
hint_info.template_name = "battle_server_dead_text_explosion_default";
|
if (!hint_info.hint_template) {
|
||||||
|
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
|
||||||
|
("battle_server_dead_text_explosion_default");
|
||||||
}
|
}
|
||||||
hint_info.template_defval = "%s 被";
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -73,11 +118,13 @@ void KillMgr::FillHintInfo(Human* dead_hum, KillInfo* info, RollMsgHintInfo& hin
|
|||||||
if (killer) {
|
if (killer) {
|
||||||
hint_info.killer_name = killer->GetName();
|
hint_info.killer_name = killer->GetName();
|
||||||
if (info->killer_id == dead_hum->GetUniId()) {
|
if (info->killer_id == dead_hum->GetUniId()) {
|
||||||
hint_info.template_name = "battle_server_dead_text_specate";
|
//${dead.name} 自杀
|
||||||
hint_info.template_defval = "${dead.name} 自杀";
|
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
|
||||||
|
("battle_server_dead_text_specate");
|
||||||
} else {
|
} else {
|
||||||
hint_info.template_name = "battle_server_dead_text_weapon";
|
//${killer.name} 使用 ${weapon.text_icon} 干掉了 ${dead.name}
|
||||||
hint_info.template_defval = "${killer.name} 使用 ${weapon.text_icon} 干掉了 ${dead.name}";
|
hint_info.hint_template = MetaMgr::Instance()->GetTextElements
|
||||||
|
("battle_server_dead_text_weapon");
|
||||||
}
|
}
|
||||||
} else {
|
} 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,
|
void KillMgr::PreprocessRollMsg(std::shared_ptr<cs::SMRollMsg> pb_msg,
|
||||||
RollMsgHintInfo& hint_info)
|
RollMsgHintInfo& hint_info)
|
||||||
{
|
{
|
||||||
#if 0
|
if (hint_info.hint_template) {
|
||||||
cs::SMRollMsg *pb_msg = new cs::SMRollMsg;
|
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:
|
||||||
{
|
{
|
||||||
std::string result;
|
auto e = pb_msg->add_elements();
|
||||||
result.reserve(1024);
|
e->set_element_type(el_type);
|
||||||
const char *p = fmt;
|
e->mutable_union_obj_1()->set_text(el_val);
|
||||||
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;
|
break;
|
||||||
case 'f':
|
case kImageElement:
|
||||||
{
|
{
|
||||||
assert(itr != args.end());
|
auto e = pb_msg->add_elements();
|
||||||
result.append(itr->GetString().c_str());
|
e->set_element_type(el_type);
|
||||||
itr++;
|
e->mutable_union_obj_2()->set_id(a8::XValue(el_val));
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 's':
|
|
||||||
{
|
|
||||||
assert(itr != args.end());
|
|
||||||
result.append(itr->GetString().c_str());
|
|
||||||
itr++;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
result.push_back('%');
|
std::string text;
|
||||||
result.push_back(*p);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
} 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);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result.push_back(*p);
|
|
||||||
}
|
|
||||||
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,
|
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) {
|
for (int i = 0; i < pb_msg->elements_size(); ++i) {
|
||||||
auto element = pb_msg->mutable_elements(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();
|
int color = element->mutable_union_obj_1()->color();
|
||||||
if (info->killer_id == hum->GetUniId()){
|
if (info->killer_id == hum->GetUniId()){
|
||||||
color = MetaMgr::Instance()->self_kill_color;
|
color = MetaMgr::Instance()->self_kill_color;
|
||||||
|
@ -13,18 +13,8 @@ struct KillInfo
|
|||||||
int weapon_id = 0;
|
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;
|
class Human;
|
||||||
|
struct RollMsgHintInfo;
|
||||||
class KillMgr : public a8::Singleton<KillMgr>
|
class KillMgr : public a8::Singleton<KillMgr>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user