添加武器等级
This commit is contained in:
parent
db3dcb8dfa
commit
530a0ce572
@ -1859,7 +1859,7 @@ void Human::DeadDrop()
|
|||||||
for (auto& weapon : weapons) {
|
for (auto& weapon : weapons) {
|
||||||
if (weapon.weapon_id != 0 && weapon.weapon_id != default_weapon.weapon_id) {
|
if (weapon.weapon_id != 0 && weapon.weapon_id != default_weapon.weapon_id) {
|
||||||
Vector2D drop_pos = pos;
|
Vector2D drop_pos = pos;
|
||||||
room->DropItem(drop_pos, weapon.weapon_id, 1);
|
room->DropItem(drop_pos, weapon.weapon_id, 1, weapon.weapon_lv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (size_t slot = 0; slot < inventory_.size(); ++slot) {
|
for (size_t slot = 0; slot < inventory_.size(); ++slot) {
|
||||||
@ -1871,7 +1871,7 @@ void Human::DeadDrop()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Vector2D drop_pos = pos;
|
Vector2D drop_pos = pos;
|
||||||
room->DropItem(drop_pos, equip_meta->i->id(), inventory_[slot]);
|
room->DropItem(drop_pos, equip_meta->i->id(), inventory_[slot], 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ class Loot : public Entity
|
|||||||
MetaData::Equip* meta = nullptr;
|
MetaData::Equip* meta = nullptr;
|
||||||
int item_id = 0;
|
int item_id = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
int item_level = 0;
|
||||||
bool pickuped = false;
|
bool pickuped = false;
|
||||||
|
|
||||||
Loot();
|
Loot();
|
||||||
|
@ -135,10 +135,17 @@ namespace MetaData
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(itemids.size() == nums.size());
|
assert(itemids.size() == nums.size());
|
||||||
|
#if 1
|
||||||
|
std::vector<int> item_lvs;
|
||||||
|
for (auto& itr : itemids) {
|
||||||
|
item_lvs.push_back(1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (this->i->type() == 1) {
|
if (this->i->type() == 1) {
|
||||||
auto item_tuple = std::make_tuple(
|
auto item_tuple = std::make_tuple(
|
||||||
itemids,
|
itemids,
|
||||||
nums,
|
nums,
|
||||||
|
item_lvs,
|
||||||
a8::XValue(weight_list[i]).GetInt()
|
a8::XValue(weight_list[i]).GetInt()
|
||||||
);
|
);
|
||||||
items.push_back(item_tuple);
|
items.push_back(item_tuple);
|
||||||
@ -146,6 +153,7 @@ namespace MetaData
|
|||||||
auto item_tuple = std::make_tuple(
|
auto item_tuple = std::make_tuple(
|
||||||
itemids,
|
itemids,
|
||||||
nums,
|
nums,
|
||||||
|
item_lvs,
|
||||||
total_weight
|
total_weight
|
||||||
);
|
);
|
||||||
items.push_back(item_tuple);
|
items.push_back(item_tuple);
|
||||||
@ -154,15 +162,16 @@ namespace MetaData
|
|||||||
assert(i->type() == 1 || i->type() == 2);
|
assert(i->type() == 1 || i->type() == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Drop::RandItems(std::vector<std::tuple<int, int>>& drop_items)
|
void Drop::RandItems(std::vector<std::tuple<int, int, int>>& drop_items)
|
||||||
{
|
{
|
||||||
if (i->type() == 1) {
|
if (i->type() == 1) {
|
||||||
for (auto& item : items) {
|
for (auto& item : items) {
|
||||||
if ((rand() % 10000) <= std::get<2>(item)) {
|
if ((rand() % 10000) <= std::get<3>(item)) {
|
||||||
for (size_t i = 0; i < std::get<0>(item).size(); ++i) {
|
for (size_t i = 0; i < std::get<0>(item).size(); ++i) {
|
||||||
drop_items.push_back(std::make_tuple(
|
drop_items.push_back(std::make_tuple(
|
||||||
std::get<0>(item)[i],
|
std::get<0>(item)[i],
|
||||||
std::get<1>(item)[i]
|
std::get<1>(item)[i],
|
||||||
|
std::get<2>(item)[i]
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -170,11 +179,12 @@ namespace MetaData
|
|||||||
} else if (total_weight > 0) {
|
} else if (total_weight > 0) {
|
||||||
int rnd = rand() % total_weight;
|
int rnd = rand() % total_weight;
|
||||||
for (auto& item : items) {
|
for (auto& item : items) {
|
||||||
if (std::get<2>(item) >= rnd) {
|
if (std::get<3>(item) >= rnd) {
|
||||||
for (size_t i = 0; i < std::get<0>(item).size(); ++i) {
|
for (size_t i = 0; i < std::get<0>(item).size(); ++i) {
|
||||||
drop_items.push_back(std::make_tuple(
|
drop_items.push_back(std::make_tuple(
|
||||||
std::get<0>(item)[i],
|
std::get<0>(item)[i],
|
||||||
std::get<1>(item)[i]
|
std::get<1>(item)[i],
|
||||||
|
std::get<2>(item)[i]
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -84,10 +84,10 @@ namespace MetaData
|
|||||||
const metatable::Drop* i = nullptr;
|
const metatable::Drop* i = nullptr;
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
void RandItems(std::vector<std::tuple<int, int>>& drop_items);
|
void RandItems(std::vector<std::tuple<int, int, int>>& drop_items);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::tuple<std::vector<int>, std::vector<int>, int>> items;
|
std::vector<std::tuple<std::vector<int>, std::vector<int>, std::vector<int>, int>> items;
|
||||||
int total_weight = 0;
|
int total_weight = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -498,7 +498,7 @@ void Player::LootInteraction(Loot* entity)
|
|||||||
} else {
|
} else {
|
||||||
weapons[0].weapon_idx = 0;
|
weapons[0].weapon_idx = 0;
|
||||||
weapons[0].weapon_id = entity->item_id;
|
weapons[0].weapon_id = entity->item_id;
|
||||||
weapons[0].weapon_lv = 1;
|
weapons[0].weapon_lv = entity->item_level;
|
||||||
weapons[0].ammo = 0;
|
weapons[0].ammo = 0;
|
||||||
}
|
}
|
||||||
need_sync_active_player = true;
|
need_sync_active_player = true;
|
||||||
@ -527,7 +527,7 @@ void Player::LootInteraction(Loot* entity)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
weapon->weapon_id = entity->item_id;
|
weapon->weapon_id = entity->item_id;
|
||||||
weapon->weapon_lv = 1;
|
weapon->weapon_lv = entity->item_level;
|
||||||
weapon->ammo = 0;
|
weapon->ammo = 0;
|
||||||
weapon->meta = item_meta;
|
weapon->meta = item_meta;
|
||||||
AutoLoadingBullet();
|
AutoLoadingBullet();
|
||||||
@ -539,7 +539,7 @@ void Player::LootInteraction(Loot* entity)
|
|||||||
case 8:
|
case 8:
|
||||||
{
|
{
|
||||||
if (skin != 0) {
|
if (skin != 0) {
|
||||||
room->DropItem(pos, skin, 1);
|
room->DropItem(pos, skin, 1, 1);
|
||||||
}
|
}
|
||||||
skin = entity->item_id;
|
skin = entity->item_id;
|
||||||
skin_meta = MetaMgr::Instance()->GetDress(skin);
|
skin_meta = MetaMgr::Instance()->GetDress(skin);
|
||||||
@ -601,7 +601,7 @@ void Player::LootInteraction(Loot* entity)
|
|||||||
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
room->DropItem(pos, old_item_meta->i->id(), 1);
|
room->DropItem(pos, old_item_meta->i->id(), 1, 1);
|
||||||
}
|
}
|
||||||
backpack = item_meta->i->id();
|
backpack = item_meta->i->id();
|
||||||
RecalcVolume();
|
RecalcVolume();
|
||||||
@ -617,7 +617,7 @@ void Player::LootInteraction(Loot* entity)
|
|||||||
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
room->DropItem(pos, old_item_meta->i->id(), 1);
|
room->DropItem(pos, old_item_meta->i->id(), 1, 1);
|
||||||
}
|
}
|
||||||
chest = item_meta->i->id();
|
chest = item_meta->i->id();
|
||||||
RecalcAttr();
|
RecalcAttr();
|
||||||
@ -628,7 +628,7 @@ void Player::LootInteraction(Loot* entity)
|
|||||||
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
room->DropItem(pos, old_item_meta->i->id(), 1);
|
room->DropItem(pos, old_item_meta->i->id(), 1, 1);
|
||||||
}
|
}
|
||||||
helmet = item_meta->i->id();
|
helmet = item_meta->i->id();
|
||||||
RecalcAttr();
|
RecalcAttr();
|
||||||
@ -765,6 +765,7 @@ void Player::UpdateDropWeapon()
|
|||||||
bool drop_ok = false;
|
bool drop_ok = false;
|
||||||
Weapon* weapon = &weapons[drop_weapon_idx];
|
Weapon* weapon = &weapons[drop_weapon_idx];
|
||||||
int weapon_id = weapon->weapon_id;
|
int weapon_id = weapon->weapon_id;
|
||||||
|
int weapon_lv = weapon->weapon_lv;
|
||||||
int weapon_ammo = weapon->ammo;
|
int weapon_ammo = weapon->ammo;
|
||||||
MetaData::Equip* weapon_meta = weapon->meta;
|
MetaData::Equip* weapon_meta = weapon->meta;
|
||||||
if (weapon->weapon_id != 0) {
|
if (weapon->weapon_id != 0) {
|
||||||
@ -829,7 +830,7 @@ void Player::UpdateDropWeapon()
|
|||||||
) {
|
) {
|
||||||
Vector2D dir = Vector2D::UP;
|
Vector2D dir = Vector2D::UP;
|
||||||
dir.Rotate(a8::RandAngle());
|
dir.Rotate(a8::RandAngle());
|
||||||
room->CreateLoot(weapon_id, pos + dir * (25 + rand() % 50), 1);
|
room->CreateLoot(weapon_id, pos + dir * (25 + rand() % 50), 1, weapon_lv);
|
||||||
}
|
}
|
||||||
if (weapon_ammo > 0) {
|
if (weapon_ammo > 0) {
|
||||||
MetaData::Equip* bullet_meta = MetaMgr::Instance()->GetEquip(weapon_meta->i->use_bullet());
|
MetaData::Equip* bullet_meta = MetaMgr::Instance()->GetEquip(weapon_meta->i->use_bullet());
|
||||||
@ -845,7 +846,7 @@ void Player::UpdateDropWeapon()
|
|||||||
Vector2D drop_dir = Vector2D::UP;
|
Vector2D drop_dir = Vector2D::UP;
|
||||||
drop_dir.Rotate(a8::RandAngle());
|
drop_dir.Rotate(a8::RandAngle());
|
||||||
Vector2D drop_pos = pos + drop_dir * (25 + rand() % 50);
|
Vector2D drop_pos = pos + drop_dir * (25 + rand() % 50);
|
||||||
room->DropItem(drop_pos, bullet_meta->i->id(), drop_num);
|
room->DropItem(drop_pos, bullet_meta->i->id(), drop_num, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -291,12 +291,12 @@ void Room::ScatterDrop(Vector2D center, int drop_id)
|
|||||||
{
|
{
|
||||||
MetaData::Drop* drop_meta = MetaMgr::Instance()->GetDrop(drop_id);
|
MetaData::Drop* drop_meta = MetaMgr::Instance()->GetDrop(drop_id);
|
||||||
if (drop_meta) {
|
if (drop_meta) {
|
||||||
std::vector<std::tuple<int, int>> drop_items;
|
std::vector<std::tuple<int, int, int>> drop_items;
|
||||||
drop_meta->RandItems(drop_items);
|
drop_meta->RandItems(drop_items);
|
||||||
for (auto& item : drop_items) {
|
for (auto& item : drop_items) {
|
||||||
Vector2D dir = Vector2D::UP;
|
Vector2D dir = Vector2D::UP;
|
||||||
dir.Rotate(a8::RandAngle());
|
dir.Rotate(a8::RandAngle());
|
||||||
DropItem(center + dir * (5 + rand() % 50), std::get<0>(item), std::get<1>(item));
|
DropItem(center + dir * (5 + rand() % 50), std::get<0>(item), std::get<1>(item), std::get<1>(item));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -354,7 +354,7 @@ void Room::FillSMMapInfo(cs::SMMapInfo& map_info)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::DropItem(Vector2D pos, int item_id, int item_count)
|
void Room::DropItem(Vector2D pos, int item_id, int item_count, int item_lv)
|
||||||
{
|
{
|
||||||
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(item_id);
|
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(item_id);
|
||||||
if (equip_meta && equip_meta->i->group_num() > 0 && item_count > 0) {
|
if (equip_meta && equip_meta->i->group_num() > 0 && item_count > 0) {
|
||||||
@ -366,7 +366,7 @@ void Room::DropItem(Vector2D pos, int item_id, int item_count)
|
|||||||
dir.Rotate(a8::RandAngle());
|
dir.Rotate(a8::RandAngle());
|
||||||
pos = pos + dir * (25 + rand() % 50);
|
pos = pos + dir * (25 + rand() % 50);
|
||||||
}
|
}
|
||||||
CreateLoot(item_id, pos, drop_num);
|
CreateLoot(item_id, pos, drop_num, item_lv);
|
||||||
total_count -= drop_num;
|
total_count -= drop_num;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -431,6 +431,7 @@ void Room::CreateBuilding(int thing_id, float building_x, float building_y)
|
|||||||
building->pos.x + obj.x() - building_meta->i->tilewidth() / 2.0,
|
building->pos.x + obj.x() - building_meta->i->tilewidth() / 2.0,
|
||||||
building->pos.y + obj.y() - building_meta->i->tileheight() / 2.0
|
building->pos.y + obj.y() - building_meta->i->tileheight() / 2.0
|
||||||
),
|
),
|
||||||
|
1,
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -481,7 +482,7 @@ Hero* Room::CreateHero(Human* hum)
|
|||||||
return hero;
|
return hero;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::CreateLoot(int equip_id, Vector2D pos, int count)
|
void Room::CreateLoot(int equip_id, Vector2D pos, int count, int equip_lv)
|
||||||
{
|
{
|
||||||
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(equip_id);
|
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(equip_id);
|
||||||
if (equip_meta) {
|
if (equip_meta) {
|
||||||
@ -496,6 +497,7 @@ void Room::CreateLoot(int equip_id, Vector2D pos, int count)
|
|||||||
entity->pos = pos;
|
entity->pos = pos;
|
||||||
entity->item_id = equip_id;
|
entity->item_id = equip_id;
|
||||||
entity->count = count;
|
entity->count = count;
|
||||||
|
entity->item_level = equip_lv;
|
||||||
entity->Initialize();
|
entity->Initialize();
|
||||||
uniid_hash_[entity->entity_uniid] = entity;
|
uniid_hash_[entity->entity_uniid] = entity;
|
||||||
grid_service.AddEntity(entity);
|
grid_service.AddEntity(entity);
|
||||||
|
@ -74,10 +74,10 @@ public:
|
|||||||
std::function<bool (Entity*, a8::XParams&)> func);
|
std::function<bool (Entity*, a8::XParams&)> func);
|
||||||
|
|
||||||
void ScatterDrop(Vector2D center, int drop_id);
|
void ScatterDrop(Vector2D center, int drop_id);
|
||||||
void DropItem(Vector2D pos, int item_id, int item_count);
|
void DropItem(Vector2D pos, int item_id, int item_count, int item_lv);
|
||||||
|
|
||||||
Hero* CreateHero(Human* hum);
|
Hero* CreateHero(Human* hum);
|
||||||
void CreateLoot(int equip_id, Vector2D pos, int count);
|
void CreateLoot(int equip_id, Vector2D pos, int count, int equip_lv);
|
||||||
void CreateBullet(Human* hum, MetaData::Equip* gun_meta,
|
void CreateBullet(Human* hum, MetaData::Equip* gun_meta,
|
||||||
Vector2D pos, Vector2D dir, float fly_distance);
|
Vector2D pos, Vector2D dir, float fly_distance);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user