diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 4bfb03cd..61c4acb7 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1411,10 +1411,10 @@ void Creature::CheckSpecObject() room->map_service->GetSpecColliders(SPEC_MAP_OBJECT_FLAGS, room, GetPos().x, GetPos().y, colliders); #ifdef DEBUG - long long old_cell_flags = cell_flags_; int water_w = 0; int water_h = 0; #endif + long long old_cell_flags = cell_flags_; cell_flags_ = 0; for (const ColliderComponent* collider : colliders) { switch (collider->owner->GetEntityType()) { @@ -1436,6 +1436,32 @@ void Creature::CheckSpecObject() break; } } + if (old_cell_flags != cell_flags_) { + if (!a8::SameBitFlag(old_cell_flags, cell_flags_, kColliderTag_Grass)) { + if (a8::HasBitFlag(cell_flags_, kColliderTag_Grass)) { + TryAddBuff(this, kInGrassBuffId); + } else { + RemoveBuffById(kInGrassBuffId); + } + } + + if (!a8::SameBitFlag(old_cell_flags, cell_flags_, kColliderTag_Water)) { + if (a8::HasBitFlag(cell_flags_, kColliderTag_Water)) { + TryAddBuff(this, kInWaterBuffId); + } else { + RemoveBuffById(kInWaterBuffId); + } + } + + if (!a8::SameBitFlag(old_cell_flags, cell_flags_, kColliderTag_Ice)) { + if (a8::HasBitFlag(cell_flags_, kColliderTag_Ice)) { + TryAddBuff(this, kInIceBuffId); + } else { + RemoveBuffById(kInIceBuffId); + } + } + + } #ifdef DEBUG if (IsPlayer()) { if (old_cell_flags != cell_flags_) { diff --git a/third_party/a8engine b/third_party/a8engine index f32b842b..41cb09fe 160000 --- a/third_party/a8engine +++ b/third_party/a8engine @@ -1 +1 @@ -Subproject commit f32b842baf3c97def6871a831dd4509842d461ea +Subproject commit 41cb09fe83abc21db2e912117d11feceb4b00a55