Browse Source

Take Object by reference when operating quest objects (#5066)

pull/5071/head
Andrew James 4 years ago committed by GitHub
parent
commit
986650afc8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 60
      Source/objects.cpp

60
Source/objects.cpp

@ -2531,34 +2531,34 @@ void OperateL3Door(const Player &player, int i)
OperateL3LDoor(i, true);
}
void OperatePedistal(Player &player, int i)
void OperatePedestal(Player &player, Object &pedestal)
{
if (ActiveItemCount >= MAXITEMS) {
return;
}
if (Objects[i]._oVar6 == 3 || !RemoveInventoryItemById(player, IDI_BLDSTONE)) {
if (pedestal._oVar6 == 3 || !RemoveInventoryItemById(player, IDI_BLDSTONE)) {
return;
}
Objects[i]._oAnimFrame++;
Objects[i]._oVar6++;
if (Objects[i]._oVar6 == 1) {
PlaySfxLoc(LS_PUDDLE, Objects[i].position);
pedestal._oAnimFrame++;
pedestal._oVar6++;
if (pedestal._oVar6 == 1) {
PlaySfxLoc(LS_PUDDLE, pedestal.position);
ObjChangeMap(SetPiece.position.x, SetPiece.position.y + 3, SetPiece.position.x + 2, SetPiece.position.y + 7);
SpawnQuestItem(IDI_BLDSTONE, SetPiece.position.megaToWorld() + Displacement { 3, 10 }, 0, 1);
}
if (Objects[i]._oVar6 == 2) {
PlaySfxLoc(LS_PUDDLE, Objects[i].position);
if (pedestal._oVar6 == 2) {
PlaySfxLoc(LS_PUDDLE, pedestal.position);
ObjChangeMap(SetPiece.position.x + 6, SetPiece.position.y + 3, SetPiece.position.x + SetPiece.size.width, SetPiece.position.y + 7);
SpawnQuestItem(IDI_BLDSTONE, SetPiece.position.megaToWorld() + Displacement { 15, 10 }, 0, 1);
}
if (Objects[i]._oVar6 == 3) {
PlaySfxLoc(LS_BLODSTAR, Objects[i].position);
ObjChangeMap(Objects[i]._oVar1, Objects[i]._oVar2, Objects[i]._oVar3, Objects[i]._oVar4);
if (pedestal._oVar6 == 3) {
PlaySfxLoc(LS_BLODSTAR, pedestal.position);
ObjChangeMap(pedestal._oVar1, pedestal._oVar2, pedestal._oVar3, pedestal._oVar4);
LoadMapObjects("Levels\\L2Data\\Blood2.DUN", SetPiece.position.megaToWorld());
SpawnUnique(UITEM_ARMOFVAL, SetPiece.position.megaToWorld() + Displacement { 9, 3 });
Objects[i]._oSelFlag = 0;
pedestal._oSelFlag = 0;
}
}
@ -3657,16 +3657,16 @@ bool OperateNakrulBook(int s)
return false;
}
void OperateStoryBook(int i)
void OperateStoryBook(Object &storyBook)
{
if (Objects[i]._oSelFlag == 0 || qtextflag) {
if (storyBook._oSelFlag == 0 || qtextflag) {
return;
}
Objects[i]._oAnimFrame = Objects[i]._oVar4;
PlaySfxLoc(IS_ISCROL, Objects[i].position);
auto msg = static_cast<_speech_id>(Objects[i]._oVar2);
if (Objects[i]._oVar8 != 0 && currlevel == 24) {
if (!IsUberLeverActivated && Quests[Q_NAKRUL]._qactive != QUEST_DONE && OperateNakrulBook(Objects[i]._oVar8)) {
storyBook._oAnimFrame = storyBook._oVar4;
PlaySfxLoc(IS_ISCROL, storyBook.position);
auto msg = static_cast<_speech_id>(storyBook._oVar2);
if (storyBook._oVar8 != 0 && currlevel == 24) {
if (!IsUberLeverActivated && Quests[Q_NAKRUL]._qactive != QUEST_DONE && OperateNakrulBook(storyBook._oVar8)) {
NetSendCmd(false, CMD_NAKRUL);
return;
}
@ -3676,22 +3676,22 @@ void OperateStoryBook(int i)
Quests[Q_NAKRUL]._qmsg = msg;
}
InitQTextMsg(msg);
NetSendCmdParam1(false, CMD_OPERATEOBJ, i);
NetSendCmdParam1(false, CMD_OPERATEOBJ, storyBook.GetId());
}
void OperateLazStand(int i)
void OperateLazStand(Object &stand)
{
if (ActiveItemCount >= MAXITEMS) {
return;
}
if (Objects[i]._oSelFlag == 0 || qtextflag) {
if (stand._oSelFlag == 0 || qtextflag) {
return;
}
Objects[i]._oAnimFrame++;
Objects[i]._oSelFlag = 0;
Point pos = GetSuperItemLoc(Objects[i].position);
stand._oAnimFrame++;
stand._oSelFlag = 0;
Point pos = GetSuperItemLoc(stand.position);
SpawnQuestItem(IDI_LAZSTAFF, pos, 0, 0);
}
@ -4921,10 +4921,10 @@ void OperateObject(Player &player, int i, bool teleFlag)
case OBJ_STORYBOOK:
case OBJ_L5BOOKS:
if (sendmsg)
OperateStoryBook(i);
OperateStoryBook(object);
break;
case OBJ_PEDISTAL:
OperatePedistal(player, i);
OperatePedestal(player, object);
break;
case OBJ_WARWEAP:
case OBJ_WEAPONRACK:
@ -4935,7 +4935,7 @@ void OperateObject(Player &player, int i, bool teleFlag)
break;
case OBJ_LAZSTAND:
if (sendmsg)
OperateLazStand(i);
OperateLazStand(object);
break;
case OBJ_SLAINHERO:
OperateSlainHero(player, i);
@ -5108,10 +5108,10 @@ void SyncOpObject(Player &player, int cmd, int i)
case OBJ_STORYBOOK:
case OBJ_L5BOOKS:
if (sendmsg)
OperateStoryBook(i);
OperateStoryBook(object);
break;
case OBJ_PEDISTAL:
OperatePedistal(player, i);
OperatePedestal(player, object);
break;
case OBJ_WARWEAP:
case OBJ_WEAPONRACK:

Loading…
Cancel
Save