Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6a2355c730 | ||
![]() |
3aa9102bcf | ||
![]() |
ef4c086efc | ||
![]() |
11f016d4fc | ||
![]() |
8dac601238 | ||
![]() |
baffa33246 | ||
![]() |
f4823c9ca9 | ||
![]() |
9a8352f190 | ||
![]() |
a7a66aab6f | ||
![]() |
057a191b9a | ||
![]() |
c8261ea620 | ||
![]() |
79801598da | ||
![]() |
43968dd48c | ||
![]() |
f3204a4bd2 | ||
![]() |
823f51a8c8 |
@ -781,6 +781,9 @@ void Buff::ProcDive()
|
|||||||
},
|
},
|
||||||
&xtimer_attacher.timer_list_
|
&xtimer_attacher.timer_list_
|
||||||
);
|
);
|
||||||
|
if (owner->IsHuman()) {
|
||||||
|
++owner->AsHuman()->stats.diving_times;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Buff::ProcRemoveDive()
|
void Buff::ProcRemoveDive()
|
||||||
|
@ -62,7 +62,11 @@ void Bullet::OnHit(std::set<Entity*>& objects)
|
|||||||
sender.Get()->context_pos = GetPos();
|
sender.Get()->context_pos = GetPos();
|
||||||
|
|
||||||
for (auto& target : objects) {
|
for (auto& target : objects) {
|
||||||
|
bool old_is_dead = target->IsDead(room);
|
||||||
target->OnBulletHit(this);
|
target->OnBulletHit(this);
|
||||||
|
if (target->IsDead(room) && !old_is_dead) {
|
||||||
|
OnKillTarget(target);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.Get()->context_dir = old_context_dir;
|
sender.Get()->context_dir = old_context_dir;
|
||||||
@ -188,6 +192,9 @@ void Bullet::ProcBomb()
|
|||||||
case IS_RPG:
|
case IS_RPG:
|
||||||
{
|
{
|
||||||
//榴弹炮
|
//榴弹炮
|
||||||
|
if (sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponUseTimes(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
a8::Vec2 bomb_pos = GetPos();
|
a8::Vec2 bomb_pos = GetPos();
|
||||||
room->frame_event.AddExplosionEx(sender,
|
room->frame_event.AddExplosionEx(sender,
|
||||||
meta->i->id(),
|
meta->i->id(),
|
||||||
@ -199,12 +206,18 @@ void Bullet::ProcBomb()
|
|||||||
case IS_FRAG:
|
case IS_FRAG:
|
||||||
{
|
{
|
||||||
//手雷
|
//手雷
|
||||||
|
if (sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponUseTimes(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
ProcFragBomb(delay_time);
|
ProcFragBomb(delay_time);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IS_SMOKE:
|
case IS_SMOKE:
|
||||||
{
|
{
|
||||||
//烟雾弹
|
//烟雾弹
|
||||||
|
if (sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponUseTimes(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
#if 1
|
#if 1
|
||||||
AddGunBuff();
|
AddGunBuff();
|
||||||
#else
|
#else
|
||||||
@ -221,18 +234,27 @@ void Bullet::ProcBomb()
|
|||||||
case IS_POSION_GAS_BOMB:
|
case IS_POSION_GAS_BOMB:
|
||||||
{
|
{
|
||||||
//毒气弹
|
//毒气弹
|
||||||
|
if (sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponUseTimes(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
ProcPosionGasBomb(delay_time);
|
ProcPosionGasBomb(delay_time);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IS_MOLOTOR_COCKTAIL:
|
case IS_MOLOTOR_COCKTAIL:
|
||||||
{
|
{
|
||||||
//燃烧瓶
|
//燃烧瓶
|
||||||
|
if (sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponUseTimes(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
ProcMolotorCocktailBomb(delay_time);
|
ProcMolotorCocktailBomb(delay_time);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IS_C4:
|
case IS_C4:
|
||||||
{
|
{
|
||||||
//c4
|
//c4
|
||||||
|
if (sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponUseTimes(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
if (block) {
|
if (block) {
|
||||||
delay_time = gun_meta->i->missiles_time();
|
delay_time = gun_meta->i->missiles_time();
|
||||||
}
|
}
|
||||||
@ -241,16 +263,25 @@ void Bullet::ProcBomb()
|
|||||||
break;
|
break;
|
||||||
case IS_SINGAL_GUN:
|
case IS_SINGAL_GUN:
|
||||||
{
|
{
|
||||||
|
if (sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponUseTimes(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
ProcSignalGunBomb(delay_time);
|
ProcSignalGunBomb(delay_time);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IS_SHIELD_WALL:
|
case IS_SHIELD_WALL:
|
||||||
{
|
{
|
||||||
|
if (sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponUseTimes(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
ProcShieldWallBomb(delay_time);
|
ProcShieldWallBomb(delay_time);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IS_OIL_BUCKET:
|
case IS_OIL_BUCKET:
|
||||||
{
|
{
|
||||||
|
if (sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponUseTimes(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
ProcOilBucketBomb(delay_time);
|
ProcOilBucketBomb(delay_time);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -626,3 +657,13 @@ bool Bullet::IsPreBattleBullet()
|
|||||||
{
|
{
|
||||||
return create_frameno_ <= room->GetBattleStartFrameNo() || room->GetBattleStartFrameNo() == 0;
|
return create_frameno_ <= room->GetBattleStartFrameNo() || room->GetBattleStartFrameNo() == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Bullet::OnKillTarget(Entity* target)
|
||||||
|
{
|
||||||
|
if (target->IsCreature(room)) {
|
||||||
|
Creature* c = (Creature*)target;
|
||||||
|
if (c->IsHuman() && sender.Get() && sender.Get()->IsHuman()) {
|
||||||
|
sender.Get()->AsHuman()->stats.IncWeaponKills(gun_meta->i->id(), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -61,6 +61,7 @@ protected:
|
|||||||
inline void MapServiceUpdate();
|
inline void MapServiceUpdate();
|
||||||
void Check(float distance);
|
void Check(float distance);
|
||||||
void AddGunBuff();
|
void AddGunBuff();
|
||||||
|
void OnKillTarget(Entity* target);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CircleCollider* self_collider_ = nullptr;
|
CircleCollider* self_collider_ = nullptr;
|
||||||
|
@ -384,6 +384,10 @@ void Car::DecHP(float dec_hp, int killer_id, const std::string& killer_name, int
|
|||||||
|
|
||||||
void Car::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
|
void Car::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
|
||||||
{
|
{
|
||||||
|
Human* killer = room->GetHumanByUniId(killer_id);
|
||||||
|
if (killer) {
|
||||||
|
++killer->stats.destory_car_times;
|
||||||
|
}
|
||||||
dead = true;
|
dead = true;
|
||||||
later_removed_ = true;
|
later_removed_ = true;
|
||||||
if (hero_meta_->i->delay_remove() > 0) {
|
if (hero_meta_->i->delay_remove() > 0) {
|
||||||
@ -527,3 +531,15 @@ void Car::RemoveFromScene()
|
|||||||
room->RemoveObjectLater(this);
|
room->RemoveObjectLater(this);
|
||||||
room->NotifyUiUpdate();
|
room->NotifyUiUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Car::OnKillTarget(Creature* target)
|
||||||
|
{
|
||||||
|
if (target->IsHuman()) {
|
||||||
|
for (auto passenger : passengers_) {
|
||||||
|
++passenger->stats.ride_car_kills;
|
||||||
|
}
|
||||||
|
if (driver_) {
|
||||||
|
++driver_->stats.ride_car_kills;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -49,6 +49,7 @@ class Car : public Creature
|
|||||||
virtual void SendDebugMsg(const std::string& debug_msg) override;
|
virtual void SendDebugMsg(const std::string& debug_msg) override;
|
||||||
virtual void SetAttackDir(const a8::Vec2& attack_dir) override;
|
virtual void SetAttackDir(const a8::Vec2& attack_dir) override;
|
||||||
virtual void DropItems(Obstacle* obstacle) override;
|
virtual void DropItems(Obstacle* obstacle) override;
|
||||||
|
void OnKillTarget(Creature* target);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int AllocSeat();
|
int AllocSeat();
|
||||||
|
@ -648,6 +648,26 @@ void Creature::RecalcBuffAttr()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (auto& tuple : talent_list) {
|
||||||
|
auto talent_meta = MetaMgr::Instance()->GetTalent(std::get<0>(tuple), std::get<1>(tuple));
|
||||||
|
if (talent_meta) {
|
||||||
|
for (auto& tuple1 : talent_meta->addattr) {
|
||||||
|
int attr_type = std::get<0>(tuple1);
|
||||||
|
int attr_val = std::get<1>(tuple1);
|
||||||
|
if (talent_meta->i->addtype() == 0) {
|
||||||
|
float* p = ability_->GetBuffAttrAbsPtr(attr_type);
|
||||||
|
if (p) {
|
||||||
|
*p += attr_val;
|
||||||
|
}
|
||||||
|
} else if (talent_meta->i->addtype() == 1) {
|
||||||
|
float* p = ability_->GetBuffAttrRatePtr(attr_type);
|
||||||
|
if (p) {
|
||||||
|
*p += attr_val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (need_refresh_hp) {
|
if (need_refresh_hp) {
|
||||||
SetHP(GetMaxHP());
|
SetHP(GetMaxHP());
|
||||||
GetTrigger()->HpChg();
|
GetTrigger()->HpChg();
|
||||||
@ -921,6 +941,9 @@ void Creature::DoSkill(int skill_id,
|
|||||||
}
|
}
|
||||||
GetTrigger()->UseSkill(skill);
|
GetTrigger()->UseSkill(skill);
|
||||||
DoSkillPostProc(true, skill_id, target_id, target_pos);
|
DoSkillPostProc(true, skill_id, target_id, target_pos);
|
||||||
|
if (IsHuman()) {
|
||||||
|
++AsHuman()->stats.use_skill_times;
|
||||||
|
}
|
||||||
#if 0
|
#if 0
|
||||||
if (skill_id != TURN_OVER_SKILL_ID) {
|
if (skill_id != TURN_OVER_SKILL_ID) {
|
||||||
#else
|
#else
|
||||||
@ -1108,6 +1131,9 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
|
|||||||
if (action_type != AT_None) {
|
if (action_type != AT_None) {
|
||||||
CancelAction();
|
CancelAction();
|
||||||
}
|
}
|
||||||
|
if (IsHuman()) {
|
||||||
|
++AsHuman()->stats.use_camouflage_times;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case kBET_BePull:
|
case kBET_BePull:
|
||||||
|
@ -94,6 +94,8 @@ class Creature : public MoveableEntity
|
|||||||
a8::Vec2 context_dir;
|
a8::Vec2 context_dir;
|
||||||
std::shared_ptr<Ability> context_ability;
|
std::shared_ptr<Ability> context_ability;
|
||||||
|
|
||||||
|
std::vector<std::tuple<int, int>> talent_list;
|
||||||
|
|
||||||
bool need_sync_active_player = false;
|
bool need_sync_active_player = false;
|
||||||
std::function<void ()> on_loading_bullet;
|
std::function<void ()> on_loading_bullet;
|
||||||
CreatureWeakPtr follow_target;
|
CreatureWeakPtr follow_target;
|
||||||
|
@ -40,6 +40,58 @@
|
|||||||
const int kReviveTimeAdd = 12;
|
const int kReviveTimeAdd = 12;
|
||||||
const int kSkinNum = 4;
|
const int kSkinNum = 4;
|
||||||
|
|
||||||
|
WeaponStats& PlayerStats::MustBeWeapon(int weapon_id)
|
||||||
|
{
|
||||||
|
auto itr = weapon_stats.find(weapon_id);
|
||||||
|
if (itr == weapon_stats.end()){
|
||||||
|
WeaponStats weapon;
|
||||||
|
weapon_stats[weapon_id] = weapon;
|
||||||
|
itr = weapon_stats.find(weapon_id);
|
||||||
|
}
|
||||||
|
return itr->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerStats::IncWeaponKills(int weapon_id, int val)
|
||||||
|
{
|
||||||
|
MustBeWeapon(weapon_id).kills += val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerStats::IncWeaponDamageOut(int weapon_id, int val)
|
||||||
|
{
|
||||||
|
MustBeWeapon(weapon_id).damage_out += val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerStats::IncWeaponObtainCount(int weapon_id, int val)
|
||||||
|
{
|
||||||
|
MustBeWeapon(weapon_id).obtain_count += val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerStats::IncWeaponUseTimes(int weapon_id, int val)
|
||||||
|
{
|
||||||
|
MustBeWeapon(weapon_id).use_times += val;
|
||||||
|
}
|
||||||
|
|
||||||
|
HeroStats& PlayerStats::MustBeHero(int hero_id)
|
||||||
|
{
|
||||||
|
auto itr = hero_stats.find(hero_id);
|
||||||
|
if (itr == hero_stats.end()){
|
||||||
|
HeroStats hero;
|
||||||
|
hero_stats[hero_id] = hero;
|
||||||
|
itr = hero_stats.find(hero_id);
|
||||||
|
}
|
||||||
|
return itr->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerStats::SetHeroSkillLv(int hero_id, int skill_lv)
|
||||||
|
{
|
||||||
|
MustBeHero(hero_id).skill_lv = std::max(MustBeHero(hero_id).skill_lv, skill_lv);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerStats::SetHeroWeaponLv(int hero_id, int weapon_lv)
|
||||||
|
{
|
||||||
|
MustBeHero(hero_id).weapon_lv = std::max(MustBeHero(hero_id).weapon_lv, weapon_lv);
|
||||||
|
}
|
||||||
|
|
||||||
Human::Human():Creature()
|
Human::Human():Creature()
|
||||||
{
|
{
|
||||||
default_weapon.weapon_idx = 0;
|
default_weapon.weapon_idx = 0;
|
||||||
@ -218,8 +270,8 @@ void Human::FillMFObjectFull(Room* room, Human* hum, cs::MFObjectFull* full_data
|
|||||||
if (vip_lv != 0) {
|
if (vip_lv != 0) {
|
||||||
p->set_vip_lv(vip_lv);
|
p->set_vip_lv(vip_lv);
|
||||||
}
|
}
|
||||||
if (head != 0) {
|
if (head_frame != 0) {
|
||||||
p->set_head(head);
|
p->set_head_frame(head_frame);
|
||||||
}
|
}
|
||||||
if (sex != 0) {
|
if (sex != 0) {
|
||||||
p->set_sex(sex);
|
p->set_sex(sex);
|
||||||
@ -348,8 +400,8 @@ void Human::FillMFPlayerStats(cs::MFPlayerStats* stats_pb)
|
|||||||
if (vip_lv != 0) {
|
if (vip_lv != 0) {
|
||||||
stats_pb->set_vip_lv(vip_lv);
|
stats_pb->set_vip_lv(vip_lv);
|
||||||
}
|
}
|
||||||
if (head != 0) {
|
if (head_frame != 0) {
|
||||||
stats_pb->set_head(head);
|
stats_pb->set_head_frame(head_frame);
|
||||||
}
|
}
|
||||||
if (sex != 0) {
|
if (sex != 0) {
|
||||||
stats_pb->set_sex(sex);
|
stats_pb->set_sex(sex);
|
||||||
@ -448,8 +500,8 @@ void Human::FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_o
|
|||||||
if (vip_lv != 0) {
|
if (vip_lv != 0) {
|
||||||
team_data->set_vip_lv(vip_lv);
|
team_data->set_vip_lv(vip_lv);
|
||||||
}
|
}
|
||||||
if (head != 0) {
|
if (head_frame != 0) {
|
||||||
team_data->set_head(head);
|
team_data->set_head_frame(head_frame);
|
||||||
}
|
}
|
||||||
if (sex != 0) {
|
if (sex != 0) {
|
||||||
team_data->set_sex(sex);
|
team_data->set_sex(sex);
|
||||||
@ -1720,63 +1772,70 @@ void Human::GenBattleReportData(a8::MutableXObject* params)
|
|||||||
params->SetVal("session_id", session_id);
|
params->SetVal("session_id", session_id);
|
||||||
params->SetVal("map_id", room->GetMapMeta()->i->map_id());
|
params->SetVal("map_id", room->GetMapMeta()->i->map_id());
|
||||||
params->SetVal("map_name", room->GetMapMeta()->i->map_name());
|
params->SetVal("map_name", room->GetMapMeta()->i->map_name());
|
||||||
|
params->SetVal("team_mode", GetTeam() && GetTeam()->GetMemberNum() > 1 ? 1 : 0);
|
||||||
params->SetVal("map_tpl_name", room->GetMapTplName());
|
params->SetVal("map_tpl_name", room->GetMapTplName());
|
||||||
params->SetVal("game_time", time(nullptr));
|
params->SetVal("room_uuid", room->GetRoomUuid());
|
||||||
params->SetVal("hurt", stats.damage_amount_in);
|
params->SetVal("game_time", time(nullptr)); //?
|
||||||
params->SetVal("rank", rank);
|
|
||||||
params->SetVal("kills", stats.kills);
|
|
||||||
params->SetVal("harm", stats.damage_amount_out);
|
|
||||||
params->SetVal("add_HP", stats.heal_amount);
|
|
||||||
if (!dead) {
|
if (!dead) {
|
||||||
params->SetVal("alive_time", room->GetFrameNo() * 1000.0f / SERVER_FRAME_RATE);
|
params->SetVal("alive_time", room->GetFrameNo() * 1000.0f / SERVER_FRAME_RATE);
|
||||||
} else {
|
} else {
|
||||||
params->SetVal("alive_time", dead_frameno * 1000.0f / SERVER_FRAME_RATE);
|
params->SetVal("alive_time", dead_frameno * 1000.0f / SERVER_FRAME_RATE);
|
||||||
}
|
}
|
||||||
params->SetVal("team_status", GetTeam() && GetTeam()->GetMemberNum() > 1 ? 1 : 0);
|
params->SetVal("ranked", rank);
|
||||||
params->SetVal("room_uuid", room->GetRoomUuid());
|
params->SetVal("kills", stats.kills);
|
||||||
|
params->SetVal("damage_out", stats.damage_amount_out);
|
||||||
int snipe_kill = 0;
|
params->SetVal("rescue_teammate_times", stats.rescue_member);
|
||||||
int rifle_kill = 0;
|
params->SetVal("diving_times", stats.diving_times);
|
||||||
int pistol_kill = 0;
|
params->SetVal("damage_in", stats.damage_amount_in);
|
||||||
int submachine_kill = 0;
|
params->SetVal("recover_hp", stats.heal_amount);
|
||||||
for (Human* hum : kill_humans) {
|
params->SetVal("open_airdrop_times", stats.open_airdrop_times);
|
||||||
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(stats.weapon_id);
|
params->SetVal("use_medicine_times", stats.use_medicine_times);
|
||||||
if (equip_meta) {
|
params->SetVal("destory_car_times", stats.destory_car_times);
|
||||||
switch (equip_meta->i->equip_subtype()) {
|
params->SetVal("use_camouflage_times", stats.use_camouflage_times);
|
||||||
case 7:
|
params->SetVal("use_skill_times", stats.use_skill_times);
|
||||||
|
params->SetVal("ride_car_move_distance", stats.ride_car_move_distance);
|
||||||
|
params->SetVal("ride_car_kills", stats.ride_car_kills);
|
||||||
|
params->SetVal("max_hero_skill_lv", stats.max_hero_skill_lv);
|
||||||
{
|
{
|
||||||
//狙击枪
|
std::string weapons_type;
|
||||||
++snipe_kill;
|
std::string weapons_slot;
|
||||||
}
|
for (auto& pair : stats.weapon_stats) {
|
||||||
break;
|
auto& weapon = pair.second;
|
||||||
case 5:
|
if (weapon.kills || weapon.damage_out || weapon.obtain_count) {
|
||||||
|
weapons_type += a8::Format("%d:%d:%d:%d|",
|
||||||
{
|
{
|
||||||
//步枪
|
weapon.weapon_id,
|
||||||
++rifle_kill;
|
weapon.kills,
|
||||||
|
weapon.damage_out,
|
||||||
|
weapon.obtain_count
|
||||||
|
});
|
||||||
}
|
}
|
||||||
break;
|
if (weapon.use_times) {
|
||||||
case 2:
|
weapons_slot += a8::Format("%d:%d|",
|
||||||
{
|
{
|
||||||
//手枪
|
weapon.weapon_id,
|
||||||
++pistol_kill;
|
weapon.use_times
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
params->SetVal("weapons_type", weapons_type);
|
||||||
|
params->SetVal("weapons_slot", weapons_slot);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
{
|
{
|
||||||
//冲锋枪
|
std::string heros;
|
||||||
++submachine_kill;
|
for (auto& pair : stats.hero_stats) {
|
||||||
}
|
auto& hero = pair.second;
|
||||||
break;
|
if (hero.skill_lv || hero.weapon_lv) {
|
||||||
|
heros += a8::Format("%d:%d:%d|",
|
||||||
|
{
|
||||||
|
hero.hero_id,
|
||||||
|
hero.skill_lv,
|
||||||
|
hero.weapon_lv,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
params->SetVal("heros", heros);
|
||||||
}
|
}
|
||||||
params->SetVal("snipe_kill", snipe_kill);
|
|
||||||
params->SetVal("rifle_kill", rifle_kill);
|
|
||||||
params->SetVal("pistol_kill", pistol_kill);
|
|
||||||
params->SetVal("submachine_kill", submachine_kill);
|
|
||||||
|
|
||||||
params->SetVal("rescue_member", stats.rescue_member);
|
|
||||||
params->SetVal("rescue_guild_member", stats.rescue_guild_member);
|
|
||||||
{
|
{
|
||||||
float rank_param = MetaMgr::Instance()->GetRankRewardParam(rank);
|
float rank_param = MetaMgr::Instance()->GetRankRewardParam(rank);
|
||||||
float kill_param = MetaMgr::Instance()->GetKillRewardParam(stats.kills);
|
float kill_param = MetaMgr::Instance()->GetKillRewardParam(stats.kills);
|
||||||
@ -2288,6 +2347,7 @@ void Human::DropItems(Obstacle* obstacle)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (room->GetRoomType() == RT_NewBrid && IsPlayer()) {
|
if (room->GetRoomType() == RT_NewBrid && IsPlayer()) {
|
||||||
|
++stats.open_airdrop_times;
|
||||||
if (is_treasure_box) {
|
if (is_treasure_box) {
|
||||||
if (box_drop_times_ < MetaMgr::Instance()->newbie_airdrop.size()) {
|
if (box_drop_times_ < MetaMgr::Instance()->newbie_airdrop.size()) {
|
||||||
drop_id = MetaMgr::Instance()->newbie_airdrop[box_drop_times_];
|
drop_id = MetaMgr::Instance()->newbie_airdrop[box_drop_times_];
|
||||||
@ -2753,6 +2813,7 @@ void Human::ProcUseItemAction()
|
|||||||
switch (action_item_id) {
|
switch (action_item_id) {
|
||||||
case IS_HEALTHKIT:
|
case IS_HEALTHKIT:
|
||||||
{
|
{
|
||||||
|
+stats.use_medicine_times;
|
||||||
AddHp(item_meta->i->heal() * (1 + GetAbility()->GetAttrRate(kHAT_DrugEfficacy)));
|
AddHp(item_meta->i->heal() * (1 + GetAbility()->GetAttrRate(kHAT_DrugEfficacy)));
|
||||||
DecInventory(item_meta->i->_inventory_slot(), 1);
|
DecInventory(item_meta->i->_inventory_slot(), 1);
|
||||||
GetTrigger()->UseItemAction(action_item_id);
|
GetTrigger()->UseItemAction(action_item_id);
|
||||||
@ -2760,6 +2821,7 @@ void Human::ProcUseItemAction()
|
|||||||
break;
|
break;
|
||||||
case IS_PAIN_KILLER:
|
case IS_PAIN_KILLER:
|
||||||
{
|
{
|
||||||
|
+stats.use_medicine_times;
|
||||||
if (pain_killer_timer) {
|
if (pain_killer_timer) {
|
||||||
int passed_time = (room->GetFrameNo() - pain_killer_frameno) * FRAME_RATE_MS;
|
int passed_time = (room->GetFrameNo() - pain_killer_frameno) * FRAME_RATE_MS;
|
||||||
int left_time = std::max(0, pain_killer_lastingtime * 1000 - passed_time);
|
int left_time = std::max(0, pain_killer_lastingtime * 1000 - passed_time);
|
||||||
@ -2802,6 +2864,7 @@ void Human::ProcUseItemAction()
|
|||||||
break;
|
break;
|
||||||
case IS_SHEN_BAO:
|
case IS_SHEN_BAO:
|
||||||
{
|
{
|
||||||
|
+stats.use_medicine_times;
|
||||||
if (!dead) {
|
if (!dead) {
|
||||||
if (downed) {
|
if (downed) {
|
||||||
SetHP(MetaMgr::Instance()->GetSysParamAsInt("downed_relive_recover_hp"));
|
SetHP(MetaMgr::Instance()->GetSysParamAsInt("downed_relive_recover_hp"));
|
||||||
@ -3203,6 +3266,10 @@ void Human::OnBulletHit(Bullet* bullet)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!bullet->IsPreBattleBullet()) {
|
if (!bullet->IsPreBattleBullet()) {
|
||||||
|
if (bullet->sender.Get() && bullet->sender.Get()->IsHuman()) {
|
||||||
|
bullet->sender.Get()->AsHuman()->stats.IncWeaponDamageOut
|
||||||
|
(bullet->gun_meta->i->id(), finaly_dmg);
|
||||||
|
}
|
||||||
DecHP(finaly_dmg,
|
DecHP(finaly_dmg,
|
||||||
bullet->sender.Get()->GetUniId(),
|
bullet->sender.Get()->GetUniId(),
|
||||||
bullet->sender.Get()->GetName(),
|
bullet->sender.Get()->GetName(),
|
||||||
|
@ -22,6 +22,22 @@ struct HumanBehavior
|
|||||||
int total_destory_box_times = 0;
|
int total_destory_box_times = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct WeaponStats
|
||||||
|
{
|
||||||
|
int weapon_id = 0;
|
||||||
|
int kills = 0;
|
||||||
|
int damage_out = 0;
|
||||||
|
int obtain_count = 0;
|
||||||
|
int use_times = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct HeroStats
|
||||||
|
{
|
||||||
|
int hero_id = 0;
|
||||||
|
int skill_lv = 0;
|
||||||
|
int weapon_lv = 0;
|
||||||
|
};
|
||||||
|
|
||||||
struct PlayerStats
|
struct PlayerStats
|
||||||
{
|
{
|
||||||
int kills = 0;
|
int kills = 0;
|
||||||
@ -37,6 +53,19 @@ struct PlayerStats
|
|||||||
int history_damage_amount = 0;
|
int history_damage_amount = 0;
|
||||||
int history_heal_amount = 0;
|
int history_heal_amount = 0;
|
||||||
|
|
||||||
|
int diving_times = 0;
|
||||||
|
int open_airdrop_times = 0;
|
||||||
|
int use_medicine_times = 0;
|
||||||
|
int destory_car_times = 0;
|
||||||
|
int use_camouflage_times = 0;
|
||||||
|
int use_skill_times = 0;
|
||||||
|
int ride_car_move_distance = 0;
|
||||||
|
int ride_car_kills = 0;
|
||||||
|
int max_hero_skill_lv = 0;
|
||||||
|
|
||||||
|
std::map<int, WeaponStats> weapon_stats;
|
||||||
|
std::map<int, HeroStats> hero_stats;
|
||||||
|
|
||||||
int gold = 0;
|
int gold = 0;
|
||||||
int score = 0;
|
int score = 0;
|
||||||
std::vector<std::pair<int, int>> items;
|
std::vector<std::pair<int, int>> items;
|
||||||
@ -53,6 +82,15 @@ struct PlayerStats
|
|||||||
int skill_times = 0;
|
int skill_times = 0;
|
||||||
|
|
||||||
int dead_times = 0;
|
int dead_times = 0;
|
||||||
|
|
||||||
|
WeaponStats& MustBeWeapon(int weapon_id);
|
||||||
|
void IncWeaponKills(int weapon_id, int val);
|
||||||
|
void IncWeaponDamageOut(int weapon_id, int val);
|
||||||
|
void IncWeaponObtainCount(int weapon_id, int val);
|
||||||
|
void IncWeaponUseTimes(int weapon_id, int val);
|
||||||
|
HeroStats& MustBeHero(int hero_id);
|
||||||
|
void SetHeroSkillLv(int hero_id, int skill_lv);
|
||||||
|
void SetHeroWeaponLv(int hero_id, int weapon_lv);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct xtimer_list;
|
struct xtimer_list;
|
||||||
@ -90,7 +128,7 @@ class Human : public Creature
|
|||||||
long long user_value3 = 0;
|
long long user_value3 = 0;
|
||||||
long long guild_id = 0;
|
long long guild_id = 0;
|
||||||
int vip_lv = 0;
|
int vip_lv = 0;
|
||||||
int head = 0;
|
int head_frame = 0;
|
||||||
int sex = 0;
|
int sex = 0;
|
||||||
std::string user_data;
|
std::string user_data;
|
||||||
long long last_cmmove_frameno = 0;
|
long long last_cmmove_frameno = 0;
|
||||||
|
@ -24,7 +24,7 @@ void RawTeamMember::FillMFMatchTeamMember(cs::MFMatchTeamMember* p)
|
|||||||
}
|
}
|
||||||
p->set_is_leader(is_leader);
|
p->set_is_leader(is_leader);
|
||||||
p->set_state(state);
|
p->set_state(state);
|
||||||
p->set_head(msg.head());
|
p->set_head_frame(msg.head_frame());
|
||||||
p->set_hero_skin(msg.hero_skin());
|
p->set_hero_skin(msg.hero_skin());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,6 +37,7 @@ void RawTeamMember::InitRobot()
|
|||||||
std::set<int> refreshed_robot_set;
|
std::set<int> refreshed_robot_set;
|
||||||
robot_meta = MetaMgr::Instance()->RandRobot(refreshed_robot_set);
|
robot_meta = MetaMgr::Instance()->RandRobot(refreshed_robot_set);
|
||||||
if (robot_meta) {
|
if (robot_meta) {
|
||||||
|
msg.set_avatar_url(a8::Format("%s", {50001 + (robot_meta->i->id() % 3)}));
|
||||||
#if 1
|
#if 1
|
||||||
msg.set_hero_id(30100 + 100 * (robot_meta->i->id() % 3));
|
msg.set_hero_id(30100 + 100 * (robot_meta->i->id() % 3));
|
||||||
#else
|
#else
|
||||||
@ -51,7 +52,7 @@ void RawTeamMember::InitRobot()
|
|||||||
{
|
{
|
||||||
MetaData::Player* hero_meta = MetaMgr::Instance()->GetPlayer(msg.hero_id());
|
MetaData::Player* hero_meta = MetaMgr::Instance()->GetPlayer(msg.hero_id());
|
||||||
if (hero_meta) {
|
if (hero_meta) {
|
||||||
MetaData::PlayerSkin* skin_meta = MetaMgr::Instance()->GetPlayerSkin(hero_meta->i->skinlist());
|
MetaData::Item* skin_meta = MetaMgr::Instance()->GetHeroSkin(msg.hero_id());
|
||||||
if (skin_meta) {
|
if (skin_meta) {
|
||||||
msg.set_hero_skin(skin_meta->i->id());
|
msg.set_hero_skin(skin_meta->i->id());
|
||||||
}
|
}
|
||||||
|
@ -642,11 +642,6 @@ namespace MetaData
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerSkin::Init()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Robot::Init()
|
void Robot::Init()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@ -1535,4 +1530,24 @@ namespace MetaData
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GunTalentGrow::Init()
|
||||||
|
{
|
||||||
|
std::vector<std::string> tmp_strs1;
|
||||||
|
a8::Split(i->addattr(), tmp_strs1, '|');
|
||||||
|
for (std::string& str : tmp_strs1) {
|
||||||
|
std::vector<std::string> tmp_strs2;
|
||||||
|
a8::Split(str, tmp_strs2, ':');
|
||||||
|
if (tmp_strs2.size() >= 2) {
|
||||||
|
addattr.push_back(
|
||||||
|
std::make_tuple(a8::XValue(tmp_strs2[0]), a8::XValue(tmp_strs2[1]))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Item::Init()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,8 @@ namespace MetaData
|
|||||||
struct Item
|
struct Item
|
||||||
{
|
{
|
||||||
const metatable::Item* i = nullptr;
|
const metatable::Item* i = nullptr;
|
||||||
|
|
||||||
|
void Init();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Buff;
|
struct Buff;
|
||||||
@ -138,13 +140,6 @@ namespace MetaData
|
|||||||
int RandDrop();
|
int RandDrop();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PlayerSkin
|
|
||||||
{
|
|
||||||
const metatable::PlayerSkin* i = nullptr;
|
|
||||||
|
|
||||||
void Init();
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Robot
|
struct Robot
|
||||||
{
|
{
|
||||||
const metatable::Robot* i = nullptr;
|
const metatable::Robot* i = nullptr;
|
||||||
@ -327,6 +322,15 @@ namespace MetaData
|
|||||||
const metatable::KillPoint* i = nullptr;
|
const metatable::KillPoint* i = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct GunTalentGrow
|
||||||
|
{
|
||||||
|
const metatable::GunTalentGrow* i = nullptr;
|
||||||
|
|
||||||
|
std::vector<std::tuple<int, int>> addattr;
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
};
|
||||||
|
|
||||||
struct AI
|
struct AI
|
||||||
{
|
{
|
||||||
const metatable::AI* i = nullptr;
|
const metatable::AI* i = nullptr;
|
||||||
|
@ -153,8 +153,6 @@ public:
|
|||||||
std::list<MetaData::Equip> equip_list;
|
std::list<MetaData::Equip> equip_list;
|
||||||
std::list<metatable::Player> player_meta_list;
|
std::list<metatable::Player> player_meta_list;
|
||||||
std::list<MetaData::Player> player_list;
|
std::list<MetaData::Player> player_list;
|
||||||
std::list<metatable::PlayerSkin> playerskin_meta_list;
|
|
||||||
std::list<MetaData::PlayerSkin> playerskin_list;
|
|
||||||
std::list<metatable::MapThing> mapthing_meta_list;
|
std::list<metatable::MapThing> mapthing_meta_list;
|
||||||
std::list<MetaData::MapThing> mapthing_list;
|
std::list<MetaData::MapThing> mapthing_list;
|
||||||
std::list<metatable::BuildingJson> building_meta_list;
|
std::list<metatable::BuildingJson> building_meta_list;
|
||||||
@ -191,6 +189,7 @@ public:
|
|||||||
std::list<MetaData::AI> ai_list;
|
std::list<MetaData::AI> ai_list;
|
||||||
std::list<metatable::Text> text_meta_list;
|
std::list<metatable::Text> text_meta_list;
|
||||||
std::list<metatable::TerrainJson> terrain_meta_list;
|
std::list<metatable::TerrainJson> terrain_meta_list;
|
||||||
|
std::list<metatable::GunTalentGrow> talent_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;
|
||||||
@ -200,10 +199,10 @@ public:
|
|||||||
std::map<int, MetaData::SafeArea*> safearea_type_hash;
|
std::map<int, MetaData::SafeArea*> safearea_type_hash;
|
||||||
std::map<int, std::vector<MetaData::SafeAreaPos*>> safearea_pos_hash;
|
std::map<int, std::vector<MetaData::SafeAreaPos*>> safearea_pos_hash;
|
||||||
std::map<int, MetaData::Item*> item_hash;
|
std::map<int, MetaData::Item*> item_hash;
|
||||||
|
std::map<int, MetaData::Item*> item_heroskin_hash;
|
||||||
std::map<int, MetaData::Equip*> equip_hash;
|
std::map<int, MetaData::Equip*> equip_hash;
|
||||||
std::map<int, MetaData::Equip*> equip_slot_hash;
|
std::map<int, MetaData::Equip*> equip_slot_hash;
|
||||||
std::map<int, MetaData::Player*> player_hash;
|
std::map<int, MetaData::Player*> player_hash;
|
||||||
std::map<int, MetaData::PlayerSkin*> playerskin_hash;
|
|
||||||
std::map<int, MetaData::MapThing*> mapthing_hash;
|
std::map<int, MetaData::MapThing*> mapthing_hash;
|
||||||
std::map<int, MetaData::Building*> building_hash;
|
std::map<int, MetaData::Building*> building_hash;
|
||||||
std::map<int, MetaData::Drop*> drop_hash;
|
std::map<int, MetaData::Drop*> drop_hash;
|
||||||
@ -227,6 +226,7 @@ public:
|
|||||||
std::map<long long, MetaData::AI*> android_ai_hash;
|
std::map<long long, MetaData::AI*> android_ai_hash;
|
||||||
std::map<int, MetaData::AI*> ai_hash;
|
std::map<int, MetaData::AI*> ai_hash;
|
||||||
std::map<std::string, std::string> text_hash;
|
std::map<std::string, std::string> text_hash;
|
||||||
|
std::map<int, std::shared_ptr<MetaData::GunTalentGrow>> talent_hash;
|
||||||
std::map<std::string, std::vector<std::tuple<int, std::string>>> text_element_hash;
|
std::map<std::string, std::vector<std::tuple<int, std::string>>> text_element_hash;
|
||||||
|
|
||||||
int curr_group_id = 1001;
|
int curr_group_id = 1001;
|
||||||
@ -260,7 +260,6 @@ public:
|
|||||||
f8::ReadCsvMetaFile(res_path + "buff@buff.csv", buff_meta_list);
|
f8::ReadCsvMetaFile(res_path + "buff@buff.csv", buff_meta_list);
|
||||||
f8::ReadCsvMetaFile(res_path + "equip@equip.csv", equip_meta_list);
|
f8::ReadCsvMetaFile(res_path + "equip@equip.csv", equip_meta_list);
|
||||||
f8::ReadCsvMetaFile(res_path + "player@player.csv", player_meta_list);
|
f8::ReadCsvMetaFile(res_path + "player@player.csv", player_meta_list);
|
||||||
f8::ReadCsvMetaFile(res_path + "playerskin@playerskin.csv", playerskin_meta_list);
|
|
||||||
f8::ReadCsvMetaFile(res_path + "mapThing@mapThing.csv", mapthing_meta_list);
|
f8::ReadCsvMetaFile(res_path + "mapThing@mapThing.csv", mapthing_meta_list);
|
||||||
f8::ReadCsvMetaFile(res_path + "drop@drop.csv", drop_meta_list);
|
f8::ReadCsvMetaFile(res_path + "drop@drop.csv", drop_meta_list);
|
||||||
f8::ReadCsvMetaFile(res_path + "airdrop@airdrop.csv", airdrop_meta_list);
|
f8::ReadCsvMetaFile(res_path + "airdrop@airdrop.csv", airdrop_meta_list);
|
||||||
@ -278,6 +277,7 @@ public:
|
|||||||
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);
|
f8::ReadCsvMetaFile(res_path + "text@text.csv", text_meta_list);
|
||||||
|
f8::ReadCsvMetaFile(res_path + "gunTalentGrow@gunTalentGrow.csv", talent_meta_list);
|
||||||
f8::ReadJsonMetaFile(res_path + "terrain.json", terrain_meta_list);
|
f8::ReadJsonMetaFile(res_path + "terrain.json", terrain_meta_list);
|
||||||
BindToMetaData();
|
BindToMetaData();
|
||||||
#if 1
|
#if 1
|
||||||
@ -729,7 +729,11 @@ private:
|
|||||||
for (auto& meta : item_meta_list) {
|
for (auto& meta : item_meta_list) {
|
||||||
MetaData::Item& item = a8::FastAppend(item_list);
|
MetaData::Item& item = a8::FastAppend(item_list);
|
||||||
item.i = &meta;
|
item.i = &meta;
|
||||||
|
item.Init();
|
||||||
item_hash[item.i->id()] = &item;
|
item_hash[item.i->id()] = &item;
|
||||||
|
if (meta.playerid()) {
|
||||||
|
item_heroskin_hash[item.i->playerid()] = &item;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& meta : equip_meta_list) {
|
for (auto& meta : equip_meta_list) {
|
||||||
@ -763,13 +767,6 @@ private:
|
|||||||
player_hash[item.i->id()] = &item;
|
player_hash[item.i->id()] = &item;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto& meta : playerskin_meta_list) {
|
|
||||||
MetaData::PlayerSkin& item = a8::FastAppend(playerskin_list);
|
|
||||||
item.i = &meta;
|
|
||||||
item.Init();
|
|
||||||
playerskin_hash[item.i->id()] = &item;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto& meta : mapthing_meta_list) {
|
for (auto& meta : mapthing_meta_list) {
|
||||||
MetaData::MapThing& item = a8::FastAppend(mapthing_list);
|
MetaData::MapThing& item = a8::FastAppend(mapthing_list);
|
||||||
item.i = &meta;
|
item.i = &meta;
|
||||||
@ -900,6 +897,13 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto& meta : talent_meta_list) {
|
||||||
|
std::shared_ptr<MetaData::GunTalentGrow> item = std::make_shared<MetaData::GunTalentGrow>();
|
||||||
|
item->i = &meta;
|
||||||
|
item->Init();
|
||||||
|
talent_hash[a8::MakeInt64(meta.talent_id(), meta.talent_lv())] = item;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -968,18 +972,6 @@ MetaData::Player* MetaMgr::GetPlayer(int id)
|
|||||||
return itr != loader_->player_hash.end() ? itr->second : nullptr;
|
return itr != loader_->player_hash.end() ? itr->second : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaData::PlayerSkin* MetaMgr::GetPlayerSkin(int id)
|
|
||||||
{
|
|
||||||
auto itr = loader_->playerskin_hash.find(id);
|
|
||||||
return itr != loader_->playerskin_hash.end() ? itr->second : nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<std::vector<MetaData::PlayerSkin*>> MetaMgr::GetHeroSkins(int hero_id)
|
|
||||||
{
|
|
||||||
std::shared_ptr<std::vector<MetaData::PlayerSkin*>> p;
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
MetaData::Equip* MetaMgr::GetEquip(int id)
|
MetaData::Equip* MetaMgr::GetEquip(int id)
|
||||||
{
|
{
|
||||||
auto itr = loader_->equip_hash.find(id);
|
auto itr = loader_->equip_hash.find(id);
|
||||||
@ -1224,3 +1216,21 @@ std::vector<std::tuple<int, std::string>>* MetaMgr::GetTextElements(const std::s
|
|||||||
auto itr = loader_->text_element_hash.find(textid);
|
auto itr = loader_->text_element_hash.find(textid);
|
||||||
return itr != loader_->text_element_hash.end() ? &itr->second : nullptr;
|
return itr != loader_->text_element_hash.end() ? &itr->second : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MetaData::GunTalentGrow* MetaMgr::GetTalent(int talent_id, int talent_lv)
|
||||||
|
{
|
||||||
|
auto itr = loader_->talent_hash.find(a8::MakeInt64(talent_id, talent_lv));
|
||||||
|
return itr != loader_->talent_hash.end() ? itr->second.get() : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
MetaData::Item* MetaMgr::GetItem(int id)
|
||||||
|
{
|
||||||
|
auto itr = loader_->item_hash.find(id);
|
||||||
|
return itr != loader_->item_hash.end() ? itr->second : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
MetaData::Item* MetaMgr::GetHeroSkin(int hero_id)
|
||||||
|
{
|
||||||
|
auto itr = loader_->item_heroskin_hash.find(hero_id);
|
||||||
|
return itr != loader_->item_heroskin_hash.end() ? itr->second : nullptr;
|
||||||
|
}
|
||||||
|
@ -25,11 +25,11 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
|||||||
std::list<MetaData::Map>* GetMaps();
|
std::list<MetaData::Map>* GetMaps();
|
||||||
MetaData::MapThing* GetMapThing(int mapthing_id);
|
MetaData::MapThing* GetMapThing(int mapthing_id);
|
||||||
MetaData::Player* GetPlayer(int id);
|
MetaData::Player* GetPlayer(int id);
|
||||||
MetaData::PlayerSkin* GetPlayerSkin(int id);
|
|
||||||
std::shared_ptr<std::vector<MetaData::PlayerSkin*>> GetHeroSkins(int hero_id);
|
|
||||||
MetaData::Equip* GetEquip(int id);
|
MetaData::Equip* GetEquip(int id);
|
||||||
MetaData::Equip* GetEquipBySlotId(int slot_id);
|
MetaData::Equip* GetEquipBySlotId(int slot_id);
|
||||||
MetaData::EquipUpgrade* GetEquipUpgrade(int equip_id);
|
MetaData::EquipUpgrade* GetEquipUpgrade(int equip_id);
|
||||||
|
MetaData::Item* GetItem(int id);
|
||||||
|
MetaData::Item* GetHeroSkin(int id);
|
||||||
MetaData::Building* GetBuilding(int building_id);
|
MetaData::Building* GetBuilding(int building_id);
|
||||||
MetaData::Drop* GetDrop(int drop_id);
|
MetaData::Drop* GetDrop(int drop_id);
|
||||||
MetaData::SafeArea* GetSafeArea(int area_id);
|
MetaData::SafeArea* GetSafeArea(int area_id);
|
||||||
@ -52,6 +52,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
|||||||
MetaData::Dress* GetDress(int dress_id);
|
MetaData::Dress* GetDress(int dress_id);
|
||||||
MetaData::Dress* RandDress();
|
MetaData::Dress* RandDress();
|
||||||
MetaData::RankReward* GetRankReward(int rank);
|
MetaData::RankReward* GetRankReward(int rank);
|
||||||
|
MetaData::GunTalentGrow* GetTalent(int talent_id, int talent_lv);
|
||||||
float GetRankRewardParam(int rank);
|
float GetRankRewardParam(int rank);
|
||||||
float GetKillRewardParam(int kill_num);
|
float GetKillRewardParam(int kill_num);
|
||||||
int GetRankPointParam1(int rank);
|
int GetRankPointParam1(int rank);
|
||||||
|
@ -83,7 +83,7 @@ Player* PlayerMgr::CreatePlayerByCMJoin(Player* hum,
|
|||||||
hum->user_value3 = msg.user_value3();
|
hum->user_value3 = msg.user_value3();
|
||||||
hum->guild_id = msg.guild_id();
|
hum->guild_id = msg.guild_id();
|
||||||
hum->vip_lv = msg.vip_lv();
|
hum->vip_lv = msg.vip_lv();
|
||||||
hum->head = msg.head();
|
hum->head_frame = msg.head_frame();
|
||||||
hum->sex = msg.sex();
|
hum->sex = msg.sex();
|
||||||
hum->user_data = msg.user_data();
|
hum->user_data = msg.user_data();
|
||||||
for (auto& weapon : msg.weapons()) {
|
for (auto& weapon : msg.weapons()) {
|
||||||
@ -127,6 +127,11 @@ Player* PlayerMgr::CreatePlayerByCMJoin(Player* hum,
|
|||||||
#else
|
#else
|
||||||
hum->SetSkinInfo(msg.baseskin());
|
hum->SetSkinInfo(msg.baseskin());
|
||||||
#endif
|
#endif
|
||||||
|
for (auto& pair : msg.talent_list()) {
|
||||||
|
hum->talent_list.push_back(
|
||||||
|
std::make_tuple(pair.key(), pair.value())
|
||||||
|
);
|
||||||
|
}
|
||||||
socket_hash_[socket] = hum;
|
socket_hash_[socket] = hum;
|
||||||
return hum;
|
return hum;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "skill.h"
|
#include "skill.h"
|
||||||
#include "room.h"
|
#include "room.h"
|
||||||
#include "human.h"
|
#include "human.h"
|
||||||
|
#include "car.h"
|
||||||
|
|
||||||
void Trigger::Init()
|
void Trigger::Init()
|
||||||
{
|
{
|
||||||
@ -107,6 +108,9 @@ void Trigger::Kill(Creature* target)
|
|||||||
owner_->AsHuman()->kill_humans.insert(target->AsHuman());
|
owner_->AsHuman()->kill_humans.insert(target->AsHuman());
|
||||||
owner_->AsHuman()->SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
owner_->AsHuman()->SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||||
}
|
}
|
||||||
|
if (owner_->IsCar()) {
|
||||||
|
owner_->AsCar()->OnKillTarget(target);
|
||||||
|
}
|
||||||
++kill_num_;
|
++kill_num_;
|
||||||
TraverseCondBuffs
|
TraverseCondBuffs
|
||||||
(kCondBuffKillTarget,
|
(kCondBuffKillTarget,
|
||||||
|
@ -265,7 +265,7 @@ message MFPlayerFull
|
|||||||
optional int32 killer_id = 33; //杀手id(自杀时为自己) 特殊id: -1:倒在安全区
|
optional int32 killer_id = 33; //杀手id(自杀时为自己) 特殊id: -1:倒在安全区
|
||||||
|
|
||||||
optional int32 vip_lv = 35 [default = 0]; //vip等级
|
optional int32 vip_lv = 35 [default = 0]; //vip等级
|
||||||
optional int32 head = 36 [default = 0]; //头像框
|
optional int32 head_frame = 36 [default = 0]; //头像框
|
||||||
optional int32 sex = 37 [default = 0]; //性别
|
optional int32 sex = 37 [default = 0]; //性别
|
||||||
|
|
||||||
repeated MFSkill skill_list = 38; //技能列表
|
repeated MFSkill skill_list = 38; //技能列表
|
||||||
@ -645,7 +645,7 @@ message MFTeamData
|
|||||||
optional int64 user_value3 = 33; //对应好友系统的user_value3
|
optional int64 user_value3 = 33; //对应好友系统的user_value3
|
||||||
optional int64 guild_id = 34; //公会id
|
optional int64 guild_id = 34; //公会id
|
||||||
optional int32 vip_lv = 35 [default = 0]; //等级
|
optional int32 vip_lv = 35 [default = 0]; //等级
|
||||||
optional int32 head = 36 [default = 0]; //头像框
|
optional int32 head_frame = 36 [default = 0]; //头像框
|
||||||
optional int32 sex = 37 [default = 0]; //性别
|
optional int32 sex = 37 [default = 0]; //性别
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -739,7 +739,7 @@ message MFPlayerStats
|
|||||||
optional int32 rescue_guild_member = 23; //救起公会成员次数
|
optional int32 rescue_guild_member = 23; //救起公会成员次数
|
||||||
|
|
||||||
optional int32 vip_lv = 35 [default = 0]; //等级
|
optional int32 vip_lv = 35 [default = 0]; //等级
|
||||||
optional int32 head = 36 [default = 0]; //头像框
|
optional int32 head_frame = 36 [default = 0]; //头像框
|
||||||
optional int32 sex = 37 [default = 0]; //性别
|
optional int32 sex = 37 [default = 0]; //性别
|
||||||
optional int32 charid = 38; //人物id
|
optional int32 charid = 38; //人物id
|
||||||
optional int32 team_id = 39; //tamid
|
optional int32 team_id = 39; //tamid
|
||||||
@ -885,7 +885,7 @@ message MFMatchTeamMember
|
|||||||
repeated MFPair skill_list = 7; //技能列表 key:技能id value:预留给之后扩展,目前传0就行
|
repeated MFPair skill_list = 7; //技能列表 key:技能id value:预留给之后扩展,目前传0就行
|
||||||
optional bool is_leader = 8; //是否队长
|
optional bool is_leader = 8; //是否队长
|
||||||
optional int32 state = 9; //0:准备 1:已准备
|
optional int32 state = 9; //0:准备 1:已准备
|
||||||
optional int32 head = 10; //头像框
|
optional int32 head_frame = 10; //头像框
|
||||||
repeated int32 baseskin = 11; //皮肤id
|
repeated int32 baseskin = 11; //皮肤id
|
||||||
optional int32 hero_skin = 12; //英雄皮肤
|
optional int32 hero_skin = 12; //英雄皮肤
|
||||||
}
|
}
|
||||||
@ -938,7 +938,7 @@ message CMJoin
|
|||||||
optional int64 user_value3 = 33; //对应好友系统的user_value3
|
optional int64 user_value3 = 33; //对应好友系统的user_value3
|
||||||
optional int64 guild_id = 34; //公会id
|
optional int64 guild_id = 34; //公会id
|
||||||
optional int32 vip_lv = 35 [default = 0]; //等级
|
optional int32 vip_lv = 35 [default = 0]; //等级
|
||||||
optional int32 head = 36 [default = 0]; //头像框
|
optional int32 head_frame = 36 [default = 0]; //头像框
|
||||||
optional int32 sex = 37 [default = 0]; //性别
|
optional int32 sex = 37 [default = 0]; //性别
|
||||||
optional bool force_entry_newbie_room = 50; //是否强制进新手房
|
optional bool force_entry_newbie_room = 50; //是否强制进新手房
|
||||||
repeated MFTeamMember team_members = 51; //包括自己
|
repeated MFTeamMember team_members = 51; //包括自己
|
||||||
@ -947,6 +947,7 @@ message CMJoin
|
|||||||
repeated MFPair skill_list = 54; //技能列表 key:技能id value:预留给之后扩展,目前传0就行
|
repeated MFPair skill_list = 54; //技能列表 key:技能id value:预留给之后扩展,目前传0就行
|
||||||
optional string user_data = 60 [default = ""]; //用户自定义数据
|
optional string user_data = 60 [default = ""]; //用户自定义数据
|
||||||
optional int32 hero_id = 61; //英雄id
|
optional int32 hero_id = 61; //英雄id
|
||||||
|
repeated MFPair talent_list = 64; //天赋列表 key:天赋id value:天赋等级
|
||||||
/*
|
/*
|
||||||
是否显示队伍界面(回传getSwitch返回的结果)
|
是否显示队伍界面(回传getSwitch返回的结果)
|
||||||
1:显示队伍界面
|
1:显示队伍界面
|
||||||
|
@ -118,7 +118,14 @@ message SafeAreaPos
|
|||||||
|
|
||||||
message Item
|
message Item
|
||||||
{
|
{
|
||||||
optional int32 id = 1; //道具id
|
optional int32 id = 1;
|
||||||
|
optional int32 type = 2;
|
||||||
|
optional int32 sub_type = 3;
|
||||||
|
optional int32 quality = 4;
|
||||||
|
optional int32 use = 5;
|
||||||
|
optional int32 skinid = 6;
|
||||||
|
optional int32 isdefaultskin = 7;
|
||||||
|
optional int32 playerid = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Equip
|
message Equip
|
||||||
@ -230,14 +237,6 @@ message Player
|
|||||||
optional int32 skinlist = 48;
|
optional int32 skinlist = 48;
|
||||||
}
|
}
|
||||||
|
|
||||||
message PlayerSkin
|
|
||||||
{
|
|
||||||
optional int32 id = 1;
|
|
||||||
optional int32 itemid = 2;
|
|
||||||
optional int32 playerid = 3;
|
|
||||||
optional int32 skinid = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Robot
|
message Robot
|
||||||
{
|
{
|
||||||
optional int32 id = 1;
|
optional int32 id = 1;
|
||||||
@ -416,6 +415,15 @@ message Text
|
|||||||
optional string text = 2;
|
optional string text = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message GunTalentGrow
|
||||||
|
{
|
||||||
|
optional int32 id = 1;
|
||||||
|
optional int32 talent_id = 2;
|
||||||
|
optional int32 talent_lv = 3;
|
||||||
|
optional int32 addtype = 4;
|
||||||
|
optional string addattr = 5;
|
||||||
|
}
|
||||||
|
|
||||||
//end
|
//end
|
||||||
|
|
||||||
message DoorObjJson
|
message DoorObjJson
|
||||||
|
Loading…
x
Reference in New Issue
Block a user