This commit is contained in:
aozhiwei 2019-09-11 10:49:08 +08:00
parent 528ffb1b67
commit c1b20c8ac1
5 changed files with 75 additions and 37 deletions

View File

@ -170,6 +170,12 @@ enum PropertyType_e
kPropTankOil = 7
};
enum MapObjectType_e
{
kMOT_Object = 1,
kMOT_SpawnPoint = 2
};
const char* const PROJ_NAME_FMT = "game%d_gameserver";
const char* const PROJ_ROOT_FMT = "/data/logs/%s";

View File

@ -326,6 +326,12 @@ namespace MetaData
)
);
}
metatable::MapTplThingJson* mutable_i = (metatable::MapTplThingJson*)i;
if (mutable_i->object_type() == "spawn_point") {
mutable_i->set__object_type(kMOT_SpawnPoint);
} else {
mutable_i->set__object_type(kMOT_Object);
}
}
int MapTplThing::RandThing()

View File

@ -358,45 +358,19 @@ void Room::CreateThings()
if (things) {
for (auto& thing_tpl : *things) {
if (thing_tpl.i->weight() >= rand() % 10000) {
int thing_id = thing_tpl.RandThing();
MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(thing_id);
if (thing_meta) {
if (thing_meta->i->is_house()) {
CreateBuilding(thing_id, thing_tpl.i->x(), thing_tpl.i->y());
} else {
CreateObstacle(thing_id, thing_tpl.i->x(), thing_tpl.i->y());
}
} else if (thing_id == BORN_POINT_THINGID) {
CreateBornPoint(thing_tpl.i->x(),
thing_tpl.i->y(),
thing_tpl.i->width(),
thing_tpl.i->height(),
thing_tpl.i->param1()
);
} else {
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(thing_id);
if (equip_meta) {
int entity_uniid = CreateLoot(equip_meta->i->id(),
a8::Vec2(
thing_tpl.i->x(),
thing_tpl.i->y()
),
1,
1
);
if (entity_uniid && equip_meta->i->is_luck() == 2) {
Entity* loot_entity = GetEntityByUniId(entity_uniid);
if (loot_entity && loot_entity->entity_type == ET_Loot) {
((Loot*)loot_entity)->bullet_num = equip_meta->i->clip_volume();
((Loot*)loot_entity)->param1 = MetaMgr::Instance()->max_oil;
((Loot*)loot_entity)->param2 = MetaMgr::Instance()->max_oil;
CarObject car;
car.car_id = equip_meta->i->id();
car.pos = loot_entity->pos;
car_hash_[loot_entity->entity_uniid] = car;
}
switch (thing_tpl.i->_object_type()) {
case kMOT_Object:
{
CreateMapObject(thing_tpl);
}
break;
case kMOT_SpawnPoint:
{
CreateMapSpawnPoint(thing_tpl);
}
break;
default:
break;
}
}
}
@ -1536,3 +1510,50 @@ BornPoint* Room::AllocBornPoint(Human* hum)
}
return born_point;
}
void Room::CreateMapObject(MetaData::MapTplThing& thing_tpl)
{
int thing_id = thing_tpl.RandThing();
MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(thing_id);
if (thing_meta) {
if (thing_meta->i->is_house()) {
CreateBuilding(thing_id, thing_tpl.i->x(), thing_tpl.i->y());
} else {
CreateObstacle(thing_id, thing_tpl.i->x(), thing_tpl.i->y());
}
} else {
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(thing_id);
if (equip_meta) {
int entity_uniid = CreateLoot(equip_meta->i->id(),
a8::Vec2(
thing_tpl.i->x(),
thing_tpl.i->y()
),
1,
1
);
if (entity_uniid && equip_meta->i->is_luck() == 2) {
Entity* loot_entity = GetEntityByUniId(entity_uniid);
if (loot_entity && loot_entity->entity_type == ET_Loot) {
((Loot*)loot_entity)->bullet_num = equip_meta->i->clip_volume();
((Loot*)loot_entity)->param1 = MetaMgr::Instance()->max_oil;
((Loot*)loot_entity)->param2 = MetaMgr::Instance()->max_oil;
CarObject car;
car.car_id = equip_meta->i->id();
car.pos = loot_entity->pos;
car_hash_[loot_entity->entity_uniid] = car;
}
}
}
}
}
void Room::CreateMapSpawnPoint(MetaData::MapTplThing& thing_tpl)
{
CreateBornPoint(thing_tpl.i->x(),
thing_tpl.i->y(),
thing_tpl.i->width(),
thing_tpl.i->height(),
thing_tpl.i->param1()
);
}

View File

@ -14,6 +14,7 @@ namespace MetaData
struct SafeArea;
struct Building;
struct AirLine;
struct MapTplThing;
}
struct timer_list;
@ -122,6 +123,8 @@ private:
void NotifyWxVoip();
void CreateBornPoint(int x, int y, int width, int height, int hum_limit);
BornPoint* AllocBornPoint(Human* hum);
void CreateMapObject(MetaData::MapTplThing& thing_tpl);
void CreateMapSpawnPoint(MetaData::MapTplThing& thing_tpl);
private:
int elapsed_time_ = 0;

View File

@ -253,4 +253,6 @@ message MapTplThingJson
optional float param1 = 9;
optional float param2 = 10;
optional float param3 = 11;
optional string object_type = 12;
optional int32 _object_type = 13;
}