This commit is contained in:
aozhiwei 2022-10-18 21:45:17 +08:00
parent fe2924f943
commit 64485476af
4 changed files with 26 additions and 8 deletions

View File

@ -419,12 +419,12 @@ void Bullet::MapServiceUpdate()
Check(distance); Check(distance);
} }
} while(!later_removed_ && move_length >= 0.0001f); } while(!later_removed_ && move_length >= 0.0001f);
#ifdef DEBUG1 #ifdef DEBUG
{ {
if (sender.Get()->IsPlayer()) { if (sender.Get()->IsPlayer()) {
if ((room->GetFrameNo() - create_frameno_) % 2 == 0) { if ((room->GetFrameNo() - create_frameno_) % 2 == 0) {
float distance = (GetPos() - born_pos).Norm(); float distance = (GetPos() - born_pos).Norm();
a8::XPrintf("bullet_id:%d frame_no:%d speed:%f range:%f fly_distance:%f born_pos:%f,%f pos:%f,%f\n", a8::XPrintf("bullet_id:%d frame_no:%d speed:%f range:%f fly_distance:%f born_pos:%f,%f pos:%f,%f src_fly_distance:%f\n",
{ {
gun_meta->i->id(), gun_meta->i->id(),
(room->GetFrameNo() - create_frameno_) / 2, (room->GetFrameNo() - create_frameno_) / 2,
@ -434,7 +434,8 @@ void Bullet::MapServiceUpdate()
born_pos.x, born_pos.x,
born_pos.y, born_pos.y,
GetPos().x, GetPos().x,
GetPos().y GetPos().y,
fly_distance
}); });
} }
} }
@ -609,6 +610,7 @@ void Bullet::Check(float distance)
} }
float bullet_range = gun_meta->i->range(); float bullet_range = gun_meta->i->range();
if (!objects.empty() || (!IsBomb() && distance > bullet_range) || eat || if (!objects.empty() || (!IsBomb() && distance > bullet_range) || eat ||
(gun_meta->i->id() == 30918 && distance >= fly_distance) ||
(IsBomb() && meta->i->_inventory_slot() != IS_RPG && distance >= fly_distance) (IsBomb() && meta->i->_inventory_slot() != IS_RPG && distance >= fly_distance)
) { ) {
if (IsBomb()) { if (IsBomb()) {

View File

@ -38,6 +38,7 @@
#include "httpproxy.h" #include "httpproxy.h"
#include "skillhelper.h" #include "skillhelper.h"
#include "shot.h" #include "shot.h"
#include "battledatacontext.h"
const int kReviveTimeAdd = 12; const int kReviveTimeAdd = 12;
const int kSkinNum = 4; const int kSkinNum = 4;
@ -248,7 +249,7 @@ void PlayerStats::SetHeroWeaponLv(int hero_id, int weapon_lv)
MustBeHero(hero_id).weapon_lv = std::max(MustBeHero(hero_id).weapon_lv, weapon_lv); MustBeHero(hero_id).weapon_lv = std::max(MustBeHero(hero_id).weapon_lv, weapon_lv);
} }
void PlayerStats::ParseReward(a8::XObject& xobj) void PlayerStats::ParseReward(Human* hum, a8::XObject& xobj)
{ {
if (!xobj.IsObject()) { if (!xobj.IsObject()) {
AdjustRewardData(); AdjustRewardData();
@ -265,6 +266,10 @@ void PlayerStats::ParseReward(a8::XObject& xobj)
if (hero_xobj && hero_xobj->IsObject()) { if (hero_xobj && hero_xobj->IsObject()) {
over_reward.hero.obtain_gold = hero_xobj->At("obtain_ceg")->AsXValue().GetString(); over_reward.hero.obtain_gold = hero_xobj->At("obtain_ceg")->AsXValue().GetString();
over_reward.hero.gold_limit = hero_xobj->At("ceg_uplimit")->AsXValue().GetString(); over_reward.hero.gold_limit = hero_xobj->At("ceg_uplimit")->AsXValue().GetString();
if (hum->GetBattleContext()->hero_dto &&
hum->GetBattleContext()->hero_dto->IsObject()) {
over_reward.hero.id = hum->GetBattleContext()->hero_dto->At("hero_id")->AsXValue();
}
} }
} }
{ {
@ -272,6 +277,10 @@ void PlayerStats::ParseReward(a8::XObject& xobj)
if (weapon_xobj && weapon_xobj->IsObject()) { if (weapon_xobj && weapon_xobj->IsObject()) {
over_reward.weapon1.obtain_gold = weapon_xobj->At("obtain_ceg")->AsXValue().GetString(); over_reward.weapon1.obtain_gold = weapon_xobj->At("obtain_ceg")->AsXValue().GetString();
over_reward.weapon1.gold_limit = weapon_xobj->At("ceg_uplimit")->AsXValue().GetString(); over_reward.weapon1.gold_limit = weapon_xobj->At("ceg_uplimit")->AsXValue().GetString();
if (hum->GetBattleContext()->weapon_dto1 &&
hum->GetBattleContext()->weapon_dto1->IsObject()) {
over_reward.hero.id = hum->GetBattleContext()->weapon_dto1->At("gun_id")->AsXValue();
}
} }
} }
{ {
@ -279,6 +288,10 @@ void PlayerStats::ParseReward(a8::XObject& xobj)
if (weapon_xobj && weapon_xobj->IsObject()) { if (weapon_xobj && weapon_xobj->IsObject()) {
over_reward.weapon2.obtain_gold = weapon_xobj->At("obtain_ceg")->AsXValue().GetString(); over_reward.weapon2.obtain_gold = weapon_xobj->At("obtain_ceg")->AsXValue().GetString();
over_reward.weapon2.gold_limit = weapon_xobj->At("ceg_uplimit")->AsXValue().GetString(); over_reward.weapon2.gold_limit = weapon_xobj->At("ceg_uplimit")->AsXValue().GetString();
if (hum->GetBattleContext()->weapon_dto2 &&
hum->GetBattleContext()->weapon_dto2->IsObject()) {
over_reward.hero.id = hum->GetBattleContext()->weapon_dto2->At("gun_id")->AsXValue();
}
} }
} }
{ {
@ -2409,7 +2422,7 @@ void Human::SendBattleReport()
} }
hum->sending_battlereport_ = false; hum->sending_battlereport_ = false;
hum->already_report_battle_ = true; hum->already_report_battle_ = true;
hum->stats.ParseReward(data); hum->stats.ParseReward(hum, data);
hum->SendGameOver(); hum->SendGameOver();
}; };
auto on_error = auto on_error =

View File

@ -41,6 +41,7 @@ struct HeroStats
struct OverRewardItem struct OverRewardItem
{ {
std::string uniid; std::string uniid;
int id = 0;
std::string obtain_gold; std::string obtain_gold;
std::string gold_limit; std::string gold_limit;
}; };
@ -123,7 +124,7 @@ struct PlayerStats
HeroStats& MustBeHero(int hero_id); HeroStats& MustBeHero(int hero_id);
void SetHeroSkillLv(int hero_id, int skill_lv); void SetHeroSkillLv(int hero_id, int skill_lv);
void SetHeroWeaponLv(int hero_id, int weapon_lv); void SetHeroWeaponLv(int hero_id, int weapon_lv);
void ParseReward(a8::XObject& xobj); void ParseReward(Human* hum, a8::XObject& xobj);
void AdjustRewardData(); void AdjustRewardData();
void Statement(Human* hum); void Statement(Human* hum);
}; };

View File

@ -560,12 +560,14 @@ void Skill::ProcCMXD()
Entity* e = std::any_cast<Entity*>(params.at(1)); Entity* e = std::any_cast<Entity*>(params.at(1));
if (sender.Get() && e->IsCreature(sender.Get()->room)) { if (sender.Get() && e->IsCreature(sender.Get()->room)) {
Creature* c = (Creature*)e; Creature* c = (Creature*)e;
a8::Vec2 target_pos = sender.Get()->GetPos() +
sender.Get()->GetAttackDir() * SkillHelper::GetCmxdRange(this_skill_meta) / 2;
bool ret = Check2dRotationRectangle bool ret = Check2dRotationRectangle
(c->GetPos().x, (c->GetPos().x,
c->GetPos().y, c->GetPos().y,
20, 20,
sender.Get()->GetPos().x, target_pos.x,
sender.Get()->GetPos().y, target_pos.y,
shield_buff_meta->param4, shield_buff_meta->param4,
SkillHelper::GetCmxdRange(this_skill_meta), SkillHelper::GetCmxdRange(this_skill_meta),
sender.Get()->GetAttackDirRotate() * 180.0f sender.Get()->GetAttackDirRotate() * 180.0f