diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index f792c35e..52d91861 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -142,6 +142,12 @@ void MapInstance::Init() fclose(fp); } } +#if 1 + { + dtTileRef tile_ref = navmesh_->getTileRefAt(10, 10, 0); + int i = 0; + } +#endif } void MapInstance::UnInit() diff --git a/server/gameserver/precompile.h b/server/gameserver/precompile.h index a7112fea..6d665724 100644 --- a/server/gameserver/precompile.h +++ b/server/gameserver/precompile.h @@ -8,6 +8,7 @@ #include #include #include +#include typedef std::function&)> CommonCbProc; diff --git a/server/gameserver/typeconvert.cc b/server/gameserver/typeconvert.cc index 5a13f7c0..94cffc51 100644 --- a/server/gameserver/typeconvert.cc +++ b/server/gameserver/typeconvert.cc @@ -12,12 +12,39 @@ namespace TypeConvert pb_obj->set_y(v.y); } + void ToPb(const a8::Vec2& v, cs::MFVec3* pb_obj) + { + pb_obj->set_x(v.x); + pb_obj->set_y(v.y); + pb_obj->set_z(0.0f); + } + void FromPb(a8::Vec2& v, const cs::MFVec2* pb_obj) { v.x = pb_obj->x(); v.y = pb_obj->y(); } + void FromPb(a8::Vec2& v, const cs::MFVec3* pb_obj) + { + v.x = pb_obj->x(); + v.y = pb_obj->y(); + } + + void ToPb(const a8::Vec3& v, cs::MFVec3* pb_obj) + { + pb_obj->set_x(v.x); + pb_obj->set_y(v.y); + pb_obj->set_z(v.z); + } + + void FromPb(a8::Vec3& v, const cs::MFVec3* pb_obj) + { + v.x = pb_obj->x(); + v.y = pb_obj->y(); + v.z = pb_obj->z(); + } + void ToPb(const OverReward& v, cs::MFOverReward* pb_obj) { pb_obj->mutable_hero()->set_id(v.hero.id); diff --git a/server/gameserver/typeconvert.h b/server/gameserver/typeconvert.h index 5da5a4d8..36d6b184 100644 --- a/server/gameserver/typeconvert.h +++ b/server/gameserver/typeconvert.h @@ -3,6 +3,7 @@ namespace cs { class MFVec2; + class MFVec3; class MFOverReward; } @@ -11,7 +12,12 @@ struct OverReward; namespace TypeConvert { void ToPb(const a8::Vec2& v, cs::MFVec2* pb_obj); + void ToPb(const a8::Vec2& v, cs::MFVec3* pb_obj); void FromPb(a8::Vec2& v, const cs::MFVec2* pb_obj); + void FromPb(a8::Vec2& v, const cs::MFVec3* pb_obj); + + void ToPb(const a8::Vec3& v, cs::MFVec3* pb_obj); + void FromPb(a8::Vec3& v, const cs::MFVec3* pb_obj); void ToPb(const OverReward& v, cs::MFOverReward* pb_obj); } diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 6f2cfda1..e3812967 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -99,13 +99,21 @@ message MFTupleString repeated string values = 1; //values } -//向量 +//向量2d message MFVec2 { optional float x = 1; //x轴 optional float y = 2; //y轴 } +//向量3d +message MFVec3 +{ + optional float x = 1; //x轴 + optional float y = 2; //y轴 + optional float z = 3 [default = 0]; //z轴 +} + //属性变更 /* property_type: 1 血量 @@ -195,7 +203,7 @@ message MFCollider message MFMapObject { optional int32 object_id = 1; //物件id(mapThing表id) - optional MFVec2 pos = 2; //位置 + optional MFVec3 pos = 2; //位置 } //武器 @@ -219,8 +227,8 @@ message MFSkin message MFPlayerPart { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 - optional MFVec2 dir = 3; //朝向 + optional MFVec3 pos = 2; //位置 + optional MFVec3 dir = 3; //朝向 optional float speed = 4; //速度 } @@ -244,15 +252,15 @@ message MFCharacterImage message MFTeamMarkPos { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 + optional MFVec3 pos = 2; //位置 } //玩家信息-全量 message MFPlayerFull { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 - optional MFVec2 dir = 3; //朝向 + optional MFVec3 pos = 2; //位置 + optional MFVec3 dir = 3; //朝向 optional int64 guild_id = 4; //公会id optional float max_health = 5; //血量 @@ -307,7 +315,7 @@ message MFPlayerFull message MFObstaclePart { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 + optional MFVec3 pos = 2; //位置 optional float scale = 3; //缩放比 } @@ -315,7 +323,7 @@ message MFObstaclePart message MFObstacleFull { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 + optional MFVec3 pos = 2; //位置 optional float scale = 3; //缩放比 optional float rotate = 5; //旋转 //出生帧号 born_frameno == SMUpdate.frmanoe时表示在当前这帧出生(可能出现为0的情况比如静态物件) @@ -345,14 +353,14 @@ message MFObstacleFull message MFBuildingPart { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 + optional MFVec3 pos = 2; //位置 } //建筑物-全量 message MFBuildingFull { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 + optional MFVec3 pos = 2; //位置 optional int32 building_id = 3; //建筑物id optional bool ceiling_dead = 6; @@ -362,15 +370,15 @@ message MFBuildingFull message MFLootPart { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 + optional MFVec3 pos = 2; //位置 } //loot-全量 message MFLootFull { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 - optional MFVec2 born_pos = 3; //出生位置 + optional MFVec3 pos = 2; //位置 + optional MFVec3 born_pos = 3; //出生位置 optional bool show_anim = 4; //是否显示动画 optional int32 item_id = 6; //道具id @@ -383,8 +391,8 @@ message MFLootFull message MFHeroPart { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 - optional MFVec2 dir = 3; //朝向 + optional MFVec3 pos = 2; //位置 + optional MFVec3 dir = 3; //朝向 } @@ -392,8 +400,8 @@ message MFHeroPart message MFHeroFull { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 - optional MFVec2 dir = 3; //朝向 + optional MFVec3 pos = 2; //位置 + optional MFVec3 dir = 3; //朝向 optional int32 heroid = 4; //配置表id optional int32 master_uniid = 5; //主人id optional float health = 10; //血量 @@ -406,16 +414,16 @@ message MFHeroFull message MFCarPart { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 - optional MFVec2 dir = 3; //朝向 + optional MFVec3 pos = 2; //位置 + optional MFVec3 dir = 3; //朝向 } //载具-全量 message MFCarFull { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 - optional MFVec2 dir = 3; //朝向 + optional MFVec3 pos = 2; //位置 + optional MFVec3 dir = 3; //朝向 optional int32 car_id = 4; //载具id optional int32 driver = 5; //驾驶员id optional int32 heroid = 7; //配置表id @@ -565,8 +573,8 @@ message MFGasData */ optional int32 mode = 1; //0:inactive 1:waiting 2:moving 3:jump optional float duration = 2; //持续时间(秒) - optional MFVec2 pos_old = 3; //前一个圆心 - optional MFVec2 pos_new = 4; //新圆心 + optional MFVec3 pos_old = 3; //前一个圆心 + optional MFVec3 pos_new = 4; //新圆心 optional float rad_old = 5; //前一个圆半径 optional float rad_new = 6; //新圆半径 } @@ -576,8 +584,8 @@ message MFTeamData { optional int32 team_id = 61; //队伍Id optional int32 player_id = 1; //玩家id - optional MFVec2 pos = 2; //位置 - optional MFVec2 dir = 3; //方向 + optional MFVec3 pos = 2; //位置 + optional MFVec3 dir = 3; //方向 optional float health = 4; //血量 optional bool disconnected = 5 [default = false]; //是否短线 optional bool dead = 6 [default = false]; //是否死亡 @@ -607,8 +615,8 @@ message MFBullet { optional int32 player_id = 1; //玩家id optional int32 bullet_id = 2; //子弹id - optional MFVec2 pos = 3; //位置 - optional MFVec2 dir = 4; //方向 + optional MFVec3 pos = 3; //位置 + optional MFVec3 dir = 4; //方向 optional int32 gun_lv = 5; //枪等级 optional int32 bulletskin = 6; //子弹皮肤 未用到 optional int32 gun_id = 10; //枪id @@ -635,7 +643,7 @@ message MFShot message MFExplosion { optional int32 item_id = 1; //配置表id - optional MFVec2 pos = 2; //位置 + optional MFVec3 pos = 2; //位置 optional int32 player_id = 3; //玩家id optional int32 effect = 4 [default = 0]; //爆照效果 0:普通爆照 1:核爆炸 optional float rotate = 5; //旋转 @@ -646,7 +654,7 @@ message MFExplosion message MFSmoke { optional int32 item_id = 1; //配置表id - optional MFVec2 pos = 2; //位置 + optional MFVec3 pos = 2; //位置 optional int32 player_id = 4; //玩家id optional float time_addition = 5; //烟雾弹时间加成(单位毫秒) } @@ -740,14 +748,14 @@ message MFAirDrop { optional int32 appear_time = 1; //箱子出现时间(毫秒) optional int32 box_id = 2; //箱子id - optional MFVec2 pos = 3; //位置 + optional MFVec3 pos = 3; //位置 } //空袭 message MFAirRaid { optional int32 appear_time = 1; //空袭出现时间(毫秒) - optional MFVec2 pos = 3; //空袭位置 + optional MFVec3 pos = 3; //空袭位置 optional float rad = 4; //空袭半径 } @@ -794,16 +802,16 @@ message MFBodyState //飞机 message MFPlane { - optional MFVec2 start_point = 1; //飞机起点 - optional MFVec2 end_point = 2; //飞机终点 - optional MFVec2 pos = 3; //飞机当前位置 + optional MFVec3 start_point = 1; //飞机起点 + optional MFVec3 end_point = 2; //飞机终点 + optional MFVec3 pos = 3; //飞机当前位置 } //载具信息(用于小地图显示) message MFMapCarInfo { optional int32 car_id = 1; //载具id(读equip表) - optional MFVec2 pos = 2; //载具坐标 + optional MFVec3 pos = 2; //载具坐标 } //队友信息 @@ -822,8 +830,8 @@ message MFTeamMember message MFPosition { optional int32 obj_uniid = 1; //唯一id - optional MFVec2 pos = 2; //位置 - optional MFVec2 dir = 3; //朝向 + optional MFVec3 pos = 2; //位置 + optional MFVec3 dir = 3; //朝向 optional int32 race = 4; //1:人 2:僵尸 } @@ -1044,8 +1052,8 @@ message CMMove { optional int32 seq = 1; //序号 - optional MFVec2 move_dir = 2; //移动-方向 - optional MFVec2 attack_dir = 3; //攻击方向(朝向) + optional MFVec3 move_dir = 2; //移动-方向 + optional MFVec3 attack_dir = 3; //攻击方向(朝向) optional bool shot_start = 4; //射击-单发 optional bool shot_hold = 5; //射击-连发 @@ -1068,7 +1076,7 @@ message CMMove optional bool use_skill = 17; //使用技能 optional int32 skill_id = 18; //技能id optional int32 skill_target_id = 19; //技能目标(单体攻击) - optional MFVec2 skill_dir = 20; //技能方向 + optional MFVec3 skill_dir = 20; //技能方向 optional float skill_distance = 21; //技能目标距离 optional float skill_param1 = 22; //辅助参数 @@ -1103,7 +1111,7 @@ message CMImmediateMsg //组队标记目标位置 message CMTeamMarkTargetPos { - optional MFVec2 pos = 1; //目标位置,如果不传表示取消 + optional MFVec3 pos = 1; //目标位置,如果不传表示取消 } //执行GM指令 @@ -1123,7 +1131,7 @@ message CMDropItem message CMEmote { optional int32 type = 1; - optional MFVec2 pos = 2; + optional MFVec3 pos = 2; optional bool team_only = 4; } @@ -1265,7 +1273,7 @@ message SMUpdate optional MFActivePlayerData active_player_data = 6; //活跃玩家数据(如果玩家死亡后是观战对象的数据) optional int32 alive_count = 15; //存活数量 optional int32 gas_progress = 16; //毒圈进度,表示缩进的像素数(只有当gas_data.mode == moving时才会发进度) - optional MFVec2 gas_pos_old = 30; //毒圈当前圆心坐标 + optional MFVec3 gas_pos_old = 30; //毒圈当前圆心坐标 optional MFGasData gas_data = 17; //毒圈数据 repeated MFTeamData team_data = 18; //队伍数据 repeated MFBullet bullets = 20; //子弹