add ProcAddItemDto
This commit is contained in:
parent
afed210f7e
commit
1ca8e01b22
@ -3160,6 +3160,7 @@ void Human::GMAddItem(int item_id, int item_num)
|
|||||||
dto.item_level = 1;
|
dto.item_level = 1;
|
||||||
dto.handled = false;
|
dto.handled = false;
|
||||||
dto.item_meta = item_meta;
|
dto.item_meta = item_meta;
|
||||||
|
ProcAddItemDto(dto);
|
||||||
need_sync_active_player = true;
|
need_sync_active_player = true;
|
||||||
|
|
||||||
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||||
|
@ -541,132 +541,14 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google:
|
|||||||
handled_items.insert(equip_id);
|
handled_items.insert(equip_id);
|
||||||
MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(equip_id);
|
MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(equip_id);
|
||||||
if (item_meta) {
|
if (item_meta) {
|
||||||
switch (item_meta->i->equip_type()) {
|
AddItemDTO dto;
|
||||||
case EQUIP_TYPE_WEAPON:
|
dto.uniid = 0;
|
||||||
{
|
dto.item_id = item_meta->i->id();
|
||||||
//装备
|
dto.count = 1;
|
||||||
if (item_meta->i->equip_subtype() == 1) {
|
dto.item_level = 1;
|
||||||
//近战
|
dto.handled = false;
|
||||||
if (default_weapon.weapon_id == weapons[0].weapon_id) {
|
dto.item_meta = item_meta;
|
||||||
weapons[0].weapon_idx = 0;
|
ProcAddItemDto(dto);
|
||||||
weapons[0].weapon_id = equip_id;
|
|
||||||
weapons[0].weapon_lv = std::max(1, GetWeaponConfigLv(weapons[0].weapon_id));
|
|
||||||
weapons[0].ammo = 0;
|
|
||||||
weapons[0].meta = item_meta;
|
|
||||||
weapons[0].Recalc();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Weapon* weapon = TakeonWeapon(item_meta);
|
|
||||||
if (weapon) {
|
|
||||||
weapon->weapon_id = item_meta->i->id();
|
|
||||||
weapon->weapon_lv = std::max(1, 1);
|
|
||||||
weapon->ammo = 0;
|
|
||||||
weapon->meta = item_meta;
|
|
||||||
weapon->Recalc();
|
|
||||||
if (GetCurrWeapon() != weapon) {
|
|
||||||
SetCurrWeapon(weapon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EQUIP_TYPE_CAR:
|
|
||||||
{
|
|
||||||
int car_uniid = room->CreateAndTakeonCar(item_meta->i->id(), GetPos());
|
|
||||||
if (car_uniid != -1) {
|
|
||||||
if (GetCar()) {
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
Car* car = room->CreateCar
|
|
||||||
(
|
|
||||||
this,
|
|
||||||
car_uniid,
|
|
||||||
item_meta,
|
|
||||||
GetPos(),
|
|
||||||
team_id
|
|
||||||
);
|
|
||||||
car->GetOn(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if (item_meta->i->_inventory_slot() >= 0 &&
|
|
||||||
item_meta->i->_inventory_slot() < IS_END) {
|
|
||||||
if (GetInventory(item_meta->i->_inventory_slot()) >=
|
|
||||||
GetVolume(item_meta->i->_inventory_slot())
|
|
||||||
) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
int add_num = GetVolume(item_meta->i->_inventory_slot()) -
|
|
||||||
GetInventory(item_meta->i->_inventory_slot());
|
|
||||||
add_num = std::min(1, add_num);
|
|
||||||
|
|
||||||
AddInventory(item_meta->i->_inventory_slot(), add_num);
|
|
||||||
if (item_meta->i->_inventory_slot() == 5 ||
|
|
||||||
item_meta->i->_inventory_slot() == 6) {
|
|
||||||
Weapon* weapon = &weapons[3 + (item_meta->i->_inventory_slot() - 5)];
|
|
||||||
weapon->weapon_id = equip_id;
|
|
||||||
weapon->weapon_lv = 1;
|
|
||||||
weapon->ammo += 1;
|
|
||||||
weapon->meta = item_meta;
|
|
||||||
weapon->Recalc();
|
|
||||||
DecInventory(item_meta->i->_inventory_slot(), add_num);
|
|
||||||
}
|
|
||||||
if (item_meta->i->_inventory_slot() > 12) {
|
|
||||||
if (item_meta->i->_inventory_slot() - 12 > curr_scope_idx) {
|
|
||||||
curr_scope_idx = item_meta->i->_inventory_slot() - 12;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (item_meta->i->equip_type()) {
|
|
||||||
case 7:
|
|
||||||
{
|
|
||||||
//背包
|
|
||||||
MetaData::Equip* old_item_meta = MetaMgr::Instance()->GetEquip(backpack);
|
|
||||||
if (old_item_meta) {
|
|
||||||
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
room->DropItem(GetPos(), old_item_meta->i->id(), 1, 1);
|
|
||||||
}
|
|
||||||
backpack = item_meta->i->id();
|
|
||||||
RecalcVolume();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
{
|
|
||||||
//防具
|
|
||||||
if (item_meta->i->equip_subtype() == 1) {
|
|
||||||
//盔甲
|
|
||||||
MetaData::Equip* old_item_meta = MetaMgr::Instance()->GetEquip(chest);
|
|
||||||
if (old_item_meta) {
|
|
||||||
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
room->DropItem(GetPos(), old_item_meta->i->id(), 1, 1);
|
|
||||||
}
|
|
||||||
chest = item_meta->i->id();
|
|
||||||
RecalcBaseAttr();
|
|
||||||
} else if (item_meta->i->equip_subtype() == 2) {
|
|
||||||
//头盔
|
|
||||||
MetaData::Equip* old_item_meta = MetaMgr::Instance()->GetEquip(helmet);
|
|
||||||
if (old_item_meta) {
|
|
||||||
if (old_item_meta->i->equip_lv() >= item_meta->i->equip_lv()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
room->DropItem(GetPos(), old_item_meta->i->id(), 1, 1);
|
|
||||||
}
|
|
||||||
helmet = item_meta->i->id();
|
|
||||||
RecalcBaseAttr();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}//end for
|
}//end for
|
||||||
if (GetCurrWeapon()) {
|
if (GetCurrWeapon()) {
|
||||||
@ -679,8 +561,7 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google:
|
|||||||
}
|
}
|
||||||
for (auto& spec_weapon : spec_weapons) {
|
for (auto& spec_weapon : spec_weapons) {
|
||||||
MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(second_weapon.weapon_id);
|
MetaData::Equip* item_meta = MetaMgr::Instance()->GetEquip(second_weapon.weapon_id);
|
||||||
if (item_meta &&
|
if (item_meta) {
|
||||||
item_meta->i->equip_type() == EQUIP_TYPE_WEAPON) {
|
|
||||||
if (item_meta->i->equip_subtype() != 1) {
|
if (item_meta->i->equip_subtype() != 1) {
|
||||||
int weapon_idx = GUN_SLOT1;
|
int weapon_idx = GUN_SLOT1;
|
||||||
if (weapons[weapon_idx].weapon_id != 0) {
|
if (weapons[weapon_idx].weapon_id != 0) {
|
||||||
@ -700,7 +581,7 @@ void Player::ProcPrepareItems(const ::google::protobuf::RepeatedField< ::google:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
need_sync_active_player = true;
|
need_sync_active_player = true;
|
||||||
if (prepare_items.size() > 0) {
|
if (!prepare_items.empty()) {
|
||||||
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
SyncAroundPlayers(__FILE__, __LINE__, __func__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ Player* PlayerMgr::CreatePlayerByCMJoin(Player* hum,
|
|||||||
for (auto& weapon : msg.weapons()) {
|
for (auto& weapon : msg.weapons()) {
|
||||||
if (weapon.weapon_id() != 0 && weapon.weapon_lv() > 0) {
|
if (weapon.weapon_id() != 0 && weapon.weapon_lv() > 0) {
|
||||||
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon.weapon_id());
|
MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquip(weapon.weapon_id());
|
||||||
if (equip_meta) {
|
if (equip_meta && equip_meta->i->equip_type() == EQUIP_TYPE_WEAPON) {
|
||||||
hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv();
|
hum->weapon_configs[weapon.weapon_id()] = weapon.weapon_lv();
|
||||||
Weapon& spec_weapon = a8::FastAppend(hum->spec_weapons);
|
Weapon& spec_weapon = a8::FastAppend(hum->spec_weapons);
|
||||||
spec_weapon.weapon_id = weapon.weapon_id();
|
spec_weapon.weapon_id = weapon.weapon_id();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user