merge master
This commit is contained in:
commit
fd1151523a
@ -80,6 +80,7 @@ void Bullet::OnHit(std::vector<Entity*>& objects)
|
||||
{
|
||||
Human* hum = (Human*)target;
|
||||
if (!hum->dead) {
|
||||
player->stats.damage_amount += 10;
|
||||
hum->DecHP(10, player->entity_uniid, player->name);
|
||||
}
|
||||
}
|
||||
|
@ -328,8 +328,32 @@ void Human::ResetAction()
|
||||
|
||||
void Human::FillSMGameOver(cs::SMGameOver& msg)
|
||||
{
|
||||
std::vector<Human*> human_list;
|
||||
room->TouchHumanList(a8::XParams(),
|
||||
[&human_list] (Human* hum, a8::XParams& param)
|
||||
{
|
||||
human_list.push_back(hum);
|
||||
});
|
||||
std::sort(human_list.begin(), human_list.end(),
|
||||
[] (Human* a, Human* b )
|
||||
{
|
||||
if (a->dead_frameno == b->dead_frameno) {
|
||||
return a->entity_uniid < b->entity_uniid;
|
||||
} else {
|
||||
return a->dead_frameno == 0 ||
|
||||
(b->dead_frameno != 0 && a->dead_frameno > b->dead_frameno);
|
||||
}
|
||||
});
|
||||
int rank = human_list.size();
|
||||
for (size_t i = 0; i < human_list.size(); ++i) {
|
||||
if (human_list[i] == this) {
|
||||
rank = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
msg.set_team_id(0);
|
||||
msg.set_team_rank(0);
|
||||
msg.set_team_rank(rank);
|
||||
msg.set_team_allcnt(1);
|
||||
msg.set_game_over(true);
|
||||
msg.set_victory(false);
|
||||
@ -341,6 +365,10 @@ void Human::FillSMGameOver(cs::SMGameOver& msg)
|
||||
void Human::BeKill(int killer_id, const std::string& killer_name)
|
||||
{
|
||||
if (!dead) {
|
||||
Entity* hum = room->GetEntityByUniId(killer_id);
|
||||
if (hum && hum->entity_type == ET_Player) {
|
||||
((Human*)hum)->stats.kills++;
|
||||
}
|
||||
stats.killer_id = killer_id;
|
||||
stats.killer_name = killer_name;
|
||||
dead = true;
|
||||
@ -354,7 +382,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name)
|
||||
|
||||
void Human::DecHP(float dec_hp, int killer_id, const std::string& killer_name)
|
||||
{
|
||||
health = std::min(0.0f, health - dec_hp);
|
||||
health = std::max(0.0f, health - dec_hp);
|
||||
if (health <= 0.0001f) {
|
||||
BeKill(killer_id, killer_name);
|
||||
}
|
||||
|
@ -195,8 +195,10 @@ void Player::UpdateAction()
|
||||
MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquipBySlotId(action_item_id);
|
||||
if (item_meta){
|
||||
if (inventory[item_meta->i->_inventory_slot()] > 0) {
|
||||
float old_health = health;
|
||||
health += item_meta->i->heal();
|
||||
health = std::min(100.0f, health);
|
||||
stats.heal_amount += health - old_health;
|
||||
--inventory[item_meta->i->_inventory_slot()];
|
||||
need_sync_active_player = true;
|
||||
SyncAroundPlayers();
|
||||
@ -517,7 +519,7 @@ void Player::LootInteraction(Loot* entity)
|
||||
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
||||
return;
|
||||
}
|
||||
room->DropItem(pos, old_item_meta->i->id());
|
||||
room->DropItem(pos, old_item_meta->i->id(), 1);
|
||||
}
|
||||
backpack = item_meta->i->id();
|
||||
}
|
||||
@ -532,7 +534,7 @@ void Player::LootInteraction(Loot* entity)
|
||||
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
||||
return;
|
||||
}
|
||||
room->DropItem(pos, old_item_meta->i->id());
|
||||
room->DropItem(pos, old_item_meta->i->id(), 1);
|
||||
}
|
||||
chest = item_meta->i->id();
|
||||
} else if (item_meta->i->equip_subtype() == 2) {
|
||||
@ -542,7 +544,7 @@ void Player::LootInteraction(Loot* entity)
|
||||
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
||||
return;
|
||||
}
|
||||
room->DropItem(pos, old_item_meta->i->id());
|
||||
room->DropItem(pos, old_item_meta->i->id(), 1);
|
||||
}
|
||||
helmet = item_meta->i->id();
|
||||
}
|
||||
|
@ -300,7 +300,7 @@ void Room::ScatterDrop(Vector2D center, int drop_id)
|
||||
for (auto& item : drop_items) {
|
||||
Vector2D dir = Vector2D::UP;
|
||||
dir.Rotate(a8::RandAngle());
|
||||
DropItem(center + dir * (5 + rand() % 50), std::get<0>(item));
|
||||
DropItem(center + dir * (5 + rand() % 50), std::get<0>(item), std::get<1>(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -381,7 +381,7 @@ void Room::FillSMMapInfo(cs::SMMapInfo& map_info)
|
||||
}
|
||||
}
|
||||
|
||||
void Room::DropItem(Vector2D pos, int item_id)
|
||||
void Room::DropItem(Vector2D pos, int item_id, int item_count)
|
||||
{
|
||||
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(item_id);
|
||||
if (equip_meta) {
|
||||
@ -395,7 +395,7 @@ void Room::DropItem(Vector2D pos, int item_id)
|
||||
entity->pos = pos + dir * (25 + rand() % 50);
|
||||
}
|
||||
entity->item_id = equip_meta->i->id();
|
||||
entity->count = 1;
|
||||
entity->count = item_count;
|
||||
entity->Initialize();
|
||||
uniid_hash_[entity->entity_uniid] = entity;
|
||||
for (auto& pair : human_hash_) {
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
std::function<void (Human*, a8::XParams&)> func);
|
||||
|
||||
void ScatterDrop(Vector2D center, int drop_id);
|
||||
void DropItem(Vector2D pos, int item_id);
|
||||
void DropItem(Vector2D pos, int item_id, int item_count);
|
||||
|
||||
void CreateThings();
|
||||
void CreateDoor(Building* building, int door_idx);
|
||||
|
Loading…
x
Reference in New Issue
Block a user