1
This commit is contained in:
parent
bc1d9d6141
commit
02032c8789
@ -8,6 +8,7 @@
|
||||
#include "metamgr.h"
|
||||
#include "player.h"
|
||||
#include "app.h"
|
||||
#include "car.h"
|
||||
|
||||
const int SHUA_RANGE = 580;
|
||||
|
||||
@ -306,6 +307,7 @@ void AndroidAI::UpdateThinking()
|
||||
if (hum->room->GetGasData().gas_mode == GasInactive ||
|
||||
hum->room->IsWaitingStart() ||
|
||||
hum->HasBuffEffect(kBET_Jump) ||
|
||||
hum->HasBuffEffect(kBET_PeaceMode) ||
|
||||
a8::HasBitFlag(hum->status, CS_DisableAttack)) {
|
||||
if (hum->room->IsWaitingStart()) {
|
||||
ChangeToStateNewAI(ASE_Idle);
|
||||
@ -413,6 +415,7 @@ void AndroidAI::UpdatePursuit()
|
||||
if (node_->target.Get()) {
|
||||
float distance = myself->GetPos().Distance(node_->target.Get()->GetPos());
|
||||
if (!myself->HasBuffEffect(kBET_Jump) &&
|
||||
!myself->HasBuffEffect(kBET_PeaceMode) &&
|
||||
!a8::HasBitFlag(myself->status, CS_DisableAttack) &&
|
||||
distance < GetAttackRange()) {
|
||||
ChangeToStateNewAI(ASE_Attack);
|
||||
@ -554,6 +557,9 @@ Creature* AndroidAI::GetTarget()
|
||||
if (hum->HasBuffEffect(kBET_Jump)) {
|
||||
return;
|
||||
}
|
||||
if (hum->IsCar() && hum->AsCar()->HasPassenter()) {
|
||||
return;
|
||||
}
|
||||
if (target) {
|
||||
if (myself->GetPos().ManhattanDistance(target->GetPos()) >
|
||||
myself->GetPos().ManhattanDistance(hum->GetPos())) {
|
||||
|
@ -636,11 +636,6 @@ void Buff::ProcDisperse()
|
||||
}
|
||||
}
|
||||
|
||||
void Buff::ProcAISeting()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Buff::CalcPassengerShotOffset()
|
||||
{
|
||||
if (meta->i->buff_effect() == kBET_Passenger && caster_.Get()->IsHuman()) {
|
||||
|
@ -72,7 +72,6 @@ class Buff
|
||||
void ProcAutoShot();
|
||||
void ProcBeatBack();
|
||||
void ProcDisperse();
|
||||
void ProcAISeting();
|
||||
|
||||
void CalcPassengerShotOffset();
|
||||
|
||||
|
@ -38,6 +38,7 @@ class Car : public Creature
|
||||
float GetMaxOil();
|
||||
bool HasOil() { return cur_oil_ >= 0.00000001f; };
|
||||
void DecOil(float dec_oil);
|
||||
bool HasPassenter() { return !passengers_.empty();};
|
||||
virtual float GetRadius() override;
|
||||
virtual float GetSpeed() override;
|
||||
virtual void DecHP(float dec_hp, int killer_id, const std::string& killer_name, int weapon_id) override;
|
||||
|
@ -16,6 +16,7 @@ const int kDownBuffId = 7015;
|
||||
const int kPoisioningBuffId = 7016;
|
||||
const int kRescueBuffId = 7017;
|
||||
const int kVertigoBuffId = 7018;
|
||||
const int kPeaceModeBuffId = 7019;
|
||||
|
||||
enum BuffEffectType_e
|
||||
{
|
||||
@ -89,7 +90,7 @@ enum BuffEffectType_e
|
||||
kBET_AutoShot = 66, //自动射击
|
||||
kBET_BeatBack = 67, //击退
|
||||
kBET_Disperse = 68, //驱散
|
||||
kBET_AiSeting = 69, //设置ai参数
|
||||
kBET_PeaceMode = 69, //和平模式
|
||||
|
||||
kBET_End
|
||||
};
|
||||
|
@ -1277,9 +1277,8 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff)
|
||||
buff->ProcDisperse();
|
||||
}
|
||||
break;
|
||||
case kBET_AiSeting:
|
||||
case kBET_PeaceMode:
|
||||
{
|
||||
buff->ProcAISeting();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "metamgr.h"
|
||||
#include "player.h"
|
||||
#include "roomobstacle.h"
|
||||
#include "car.h"
|
||||
|
||||
HeroAI::HeroAI()
|
||||
{
|
||||
@ -104,6 +105,7 @@ void HeroAI::UpdateThinking()
|
||||
Hero* hero = (Hero*)owner;
|
||||
if (hero->room->GetGasData().gas_mode == GasInactive ||
|
||||
hero->room->IsWaitingStart() ||
|
||||
hero->HasBuffEffect(kBET_PeaceMode) ||
|
||||
hero->HasBuffEffect(kBET_Jump)
|
||||
) {
|
||||
if (hero->room->IsWaitingStart()) {
|
||||
@ -219,6 +221,7 @@ void HeroAI::UpdatePursuit()
|
||||
Hero* myself = (Hero*)owner;
|
||||
float distance = myself->GetPos().Distance(node_->target.Get()->GetPos());
|
||||
if (!myself->HasBuffEffect(kBET_Jump) &&
|
||||
!myself->HasBuffEffect(kBET_PeaceMode) &&
|
||||
distance < GetAttackRange()) {
|
||||
ChangeToStateAI(HSE_Attack);
|
||||
} else {
|
||||
@ -392,6 +395,9 @@ Creature* HeroAI::GetTarget()
|
||||
if (hum->HasBuffEffect(kBET_Jump)) {
|
||||
return;
|
||||
}
|
||||
if (hum->IsCar() && hum->AsCar()->HasPassenter()) {
|
||||
return;
|
||||
}
|
||||
if (target) {
|
||||
if (myself->GetPos().ManhattanDistance(target->GetPos()) >
|
||||
myself->GetPos().ManhattanDistance(hum->GetPos())) {
|
||||
|
@ -84,6 +84,7 @@ void Hero::OnExplosionHit(Explosion* e)
|
||||
if (dead) {
|
||||
return;
|
||||
}
|
||||
RemoveBuffByEffectId(kBET_PeaceMode);
|
||||
float dmg = e->GetDmg();
|
||||
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
||||
GetAbility()->GetAttrAbs(kHAT_Def);
|
||||
@ -115,6 +116,7 @@ void Hero::OnBulletHit(Bullet* bullet)
|
||||
if (IsInvincible()) {
|
||||
return;
|
||||
}
|
||||
RemoveBuffByEffectId(kBET_PeaceMode);
|
||||
if (!IsDead(room) && (bullet->IsBomb() || bullet->sender.Get()->team_id != team_id)) {
|
||||
float dmg = bullet->GetAtk();
|
||||
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
||||
@ -297,4 +299,17 @@ void Hero::InitAI()
|
||||
ai->ai_meta = ai_meta;
|
||||
}
|
||||
ai->owner = this;
|
||||
int buff_uniid = MustBeAddBuff(this,
|
||||
kPeaceModeBuffId
|
||||
);
|
||||
if (buff_uniid) {
|
||||
Buff* buff = GetBuffByUniId(buff_uniid);
|
||||
if (buff) {
|
||||
int peace_time = 1000 * 6;
|
||||
if (ai->ai_meta->i->peace_time() > 0) {
|
||||
peace_time += ai->ai_meta->i->peace_time();
|
||||
}
|
||||
room->xtimer.ModifyTimer(buff->remover_timer, peace_time / FRAME_RATE_MS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3273,6 +3273,21 @@ void Human::OnLand()
|
||||
}
|
||||
SetPos(old_pos);
|
||||
}
|
||||
if (IsAndroid()) {
|
||||
int buff_uniid = MustBeAddBuff(this,
|
||||
kPeaceModeBuffId
|
||||
);
|
||||
if (buff_uniid) {
|
||||
Buff* buff = GetBuffByUniId(buff_uniid);
|
||||
if (buff) {
|
||||
int peace_time = 2000;
|
||||
if (ai->ai_meta->i->peace_time() > 0) {
|
||||
peace_time += ai->ai_meta->i->peace_time();
|
||||
}
|
||||
room->xtimer.ModifyTimer(buff->remover_timer, peace_time / FRAME_RATE_MS);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Human::NextReload(int prev_weapon_id, int prev_weapon_idx)
|
||||
@ -3547,6 +3562,7 @@ void Human::OnBulletHit(Bullet* bullet)
|
||||
bullet->sender.Get()->GetRace() == GetRace()) {
|
||||
return;
|
||||
}
|
||||
RemoveBuffByEffectId(kBET_PeaceMode);
|
||||
if (!dead && (bullet->IsBomb() || bullet->sender.Get()->team_id != team_id)) {
|
||||
float old_hp = GetHP();
|
||||
float old_max_hp = GetMaxHP();
|
||||
@ -3598,6 +3614,7 @@ void Human::OnExplosionHit(Explosion* e)
|
||||
if (dead) {
|
||||
return;
|
||||
}
|
||||
RemoveBuffByEffectId(kBET_PeaceMode);
|
||||
float dmg = e->GetDmg();
|
||||
float def = GetDef() * (1 + GetAbility()->GetAttrRate(kHAT_Def)) +
|
||||
GetAbility()->GetAttrAbs(kHAT_Def);
|
||||
|
@ -358,6 +358,7 @@ message AI
|
||||
optional string param3 = 17;
|
||||
optional string param4 = 18;
|
||||
optional string param5 = 19;
|
||||
optional int32 peace_time = 20;
|
||||
}
|
||||
|
||||
message Text
|
||||
|
Loading…
x
Reference in New Issue
Block a user