1
This commit is contained in:
parent
a28e2870c2
commit
49a2f32ae5
@ -145,16 +145,16 @@ enum BuffEffectType_e
|
||||
kBET_HunLuan = 23, //混乱,在烟雾弹中不自动瞄准
|
||||
kBET_Fly = 24, //飞行中
|
||||
kBET_Jump = 25, //跳伞中
|
||||
kBET_InGrass = 27, //在草丛
|
||||
kBET_InWater = 28, //在水里
|
||||
kBET_InIce = 29, //在冰里
|
||||
kBET_Shield = 31, //护盾
|
||||
|
||||
kBET_ThroughWall = 50, //穿墙
|
||||
kBET_Driver = 51, //驾驶中
|
||||
kBET_Passenger = 52, //乘座中
|
||||
kBET_Recoil = 55, //后坐力
|
||||
|
||||
kBET_InGrass = 56, //在草丛
|
||||
kBET_InWater = 57, //在水里
|
||||
kBET_InIce = 58, //在冰里
|
||||
|
||||
kBET_End
|
||||
};
|
||||
|
||||
@ -422,4 +422,7 @@ const int JUMP_BUFFID = 7002;
|
||||
const int DRIVER_BUFFID = 7003;
|
||||
const int PASSENGER_BUFFID = 7004;
|
||||
const int kRecoilBuffId = 7005;
|
||||
const int kInGrassBuffId = 7006;
|
||||
const int kInWaterBuffId = 7007;
|
||||
const int kInIceBuffId = 7008;
|
||||
|
||||
|
@ -3330,9 +3330,17 @@ void Human::CheckSpecObject()
|
||||
}
|
||||
}
|
||||
|
||||
static const int spec_tag_array[kColliderSpecTag_End + 1] =
|
||||
{
|
||||
0,
|
||||
0,
|
||||
kBET_InGrass, //kColliderTag_Grass
|
||||
kBET_InWater, //kColliderTag_Water
|
||||
kBET_InIce //kColliderTag_Ice
|
||||
};
|
||||
for (int i = kColliderSpecTag_Begin; i <= kColliderSpecTag_End; ++i) {
|
||||
SpecMapObject& map_obj = spec_map_objects_[i - kColliderSpecTag_Begin];
|
||||
int buff_effect = 0;
|
||||
int buff_effect = spec_tag_array[i];
|
||||
if (a8::HasBitFlag(flags, i)) {
|
||||
if (!HasBuffEffect(buff_effect)) {
|
||||
OnEnterSpecMapArea(i, map_obj);
|
||||
@ -3347,6 +3355,9 @@ void Human::CheckSpecObject()
|
||||
|
||||
void Human::OnEnterSpecMapArea(int tag, SpecMapObject& map_obj)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
SendDebugMsg("进入特殊区域");
|
||||
#endif
|
||||
ClearSpecMapAreaTimer(map_obj);
|
||||
map_obj.enter_timer = room->xtimer.AddDeadLineTimerAndAttach
|
||||
(MetaMgr::Instance()->GetSpecMapAreaEnterTime(tag) * SERVER_FRAME_RATE,
|
||||
@ -3357,11 +3368,8 @@ void Human::OnEnterSpecMapArea(int tag, SpecMapObject& map_obj)
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
Human* hum = (Human*)param.sender.GetUserData();
|
||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff
|
||||
(MetaMgr::Instance()->GetSpecMapAreaBuffId(param.param2));
|
||||
if (buff_meta) {
|
||||
hum->AddBuff(hum, buff_meta, 1);
|
||||
}
|
||||
int buff_id = MetaMgr::Instance()->GetSpecMapAreaBuffId(param.param2);
|
||||
hum->MustBeAddBuff(hum, buff_id);
|
||||
},
|
||||
&xtimer_attacher.timer_list_,
|
||||
[] (const a8::XParams& param)
|
||||
@ -3374,6 +3382,9 @@ void Human::OnEnterSpecMapArea(int tag, SpecMapObject& map_obj)
|
||||
|
||||
void Human::OnLeaveSpecMapArea(int tag, SpecMapObject& map_obj)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
SendDebugMsg("离开特殊区域");
|
||||
#endif
|
||||
ClearSpecMapAreaTimer(map_obj);
|
||||
map_obj.leave_timer = room->xtimer.AddDeadLineTimerAndAttach
|
||||
(MetaMgr::Instance()->GetSpecMapAreaLeaveTime(tag) * SERVER_FRAME_RATE,
|
||||
|
@ -213,7 +213,10 @@ void MapInstance::CreateTerrain()
|
||||
|
||||
MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(80001);
|
||||
#ifdef DEBUG
|
||||
a8::XPrintf("%s %f %f\n", {map_tpl_name_, (float)first_layer->width(), (float)first_layer->height()});
|
||||
a8::XPrintf("%s %s %f %f\n", {map_tpl_name_,
|
||||
map_meta_->i->map_pic(),
|
||||
(float)first_layer->width(),
|
||||
(float)first_layer->height()});
|
||||
#endif
|
||||
if (thing_meta) {
|
||||
for (int w = 0; w < first_layer->width(); ++w) {
|
||||
@ -222,17 +225,21 @@ void MapInstance::CreateTerrain()
|
||||
int grid_val = grids[w * first_layer->width() + h];
|
||||
if (grid_val != 0) {
|
||||
float x = w * thing_meta->i->width() + thing_meta->i->width() / 2.0f;
|
||||
float y = h * thing_meta->i->height() + thing_meta->i->height() / 2.0f;
|
||||
float y = (first_layer->height() * thing_meta->i->height()) - (h * thing_meta->i->height() + thing_meta->i->height() / 2.0f);
|
||||
int collider_tag = 0;
|
||||
if (dusts.find(grid_val) != dusts.end()) {
|
||||
a8::SetBitFlag(collider_tag, kColliderTag_Ice);
|
||||
assert(collider_tag > 0);
|
||||
} else if (waters.find(grid_val) != waters.end()) {
|
||||
a8::SetBitFlag(collider_tag, kColliderTag_Water);
|
||||
assert(collider_tag > 0);
|
||||
} else if (grasses.find(grid_val) != grasses.end()) {
|
||||
a8::SetBitFlag(collider_tag, kColliderTag_Grass);
|
||||
assert(collider_tag > 0);
|
||||
}
|
||||
if (collider_tag != 0) {
|
||||
assert(w < 300 && h < 300);
|
||||
assert(collider_tag > 0);
|
||||
InternalCreateObstacle(thing_meta->i->thing_id(), x, y, collider_tag,
|
||||
[] (Obstacle* entity)
|
||||
{
|
||||
|
@ -108,12 +108,18 @@ void MapService::AddCollider(ColliderComponent* collider)
|
||||
int max_grid_x = ceil(max_x / cell_width_) - 1;
|
||||
int max_grid_y = ceil(max_y / cell_width_) - 1;
|
||||
#endif
|
||||
if (min_grid_x == -1) {
|
||||
min_grid_x = 0;
|
||||
}
|
||||
if (min_grid_x < 0) {
|
||||
abort();
|
||||
}
|
||||
if (max_grid_x >= map_width_) {
|
||||
max_grid_x = map_width_ - 1;
|
||||
}
|
||||
if (min_grid_y == -1) {
|
||||
min_grid_y = 0;
|
||||
}
|
||||
if (min_grid_y < 0) {
|
||||
abort();
|
||||
}
|
||||
@ -247,7 +253,7 @@ void MapService::GetSpecColliders(long long flags,
|
||||
}
|
||||
struct CellNode *node, *tmp;
|
||||
list_for_each_entry_safe(node, tmp, head, entry) {
|
||||
if (a8::HasBitFlag(flags, node->collider->tag)) {
|
||||
if ((flags & (long long)node->collider->tag) != 0) {
|
||||
colliders.insert(node->collider);
|
||||
}
|
||||
}
|
||||
|
@ -913,11 +913,11 @@ int MetaMgr::GetSpecMapAreaBuffId(int tag)
|
||||
{
|
||||
switch (tag) {
|
||||
case kColliderTag_Grass:
|
||||
return 6005;
|
||||
return kInGrassBuffId;
|
||||
case kColliderTag_Water:
|
||||
return 6006;
|
||||
return kInWaterBuffId;
|
||||
case kColliderTag_Ice:
|
||||
return 6007;
|
||||
return kInIceBuffId;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user