|
|
|
|
@ -1992,7 +1992,9 @@ void OperateBookLever(Object &questBook, bool sendmsg)
|
|
|
|
|
Quests[Q_BLOOD]._qactive = QUEST_ACTIVE; |
|
|
|
|
Quests[Q_BLOOD]._qlog = true; |
|
|
|
|
Quests[Q_BLOOD]._qvar1 = 1; |
|
|
|
|
SpawnQuestItem(IDI_BLDSTONE, SetPiece.position.megaToWorld() + Displacement { 9, 17 }, 0, 1, true); |
|
|
|
|
NetSendCmdQuest(true, Quests[Q_BLOOD]); |
|
|
|
|
if (sendmsg) |
|
|
|
|
SpawnQuestItem(IDI_BLDSTONE, SetPiece.position.megaToWorld() + Displacement { 9, 17 }, 0, 1, true); |
|
|
|
|
} |
|
|
|
|
if (questBook._otype == OBJ_STEELTOME && Quests[Q_WARLORD]._qvar1 == 0) { |
|
|
|
|
Quests[Q_WARLORD]._qactive = QUEST_ACTIVE; |
|
|
|
|
@ -2241,7 +2243,7 @@ void OperateSarcophagus(Object &sarcophagus, bool sendMsg, bool sendLootMsg)
|
|
|
|
|
NetSendCmdLoc(MyPlayerId, false, CMD_OPERATEOBJ, sarcophagus.position); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void OperatePedestal(Player &player, Object &pedestal) |
|
|
|
|
void OperatePedestal(Player &player, Object &pedestal, bool sendmsg) |
|
|
|
|
{ |
|
|
|
|
if (ActiveItemCount >= MAXITEMS) { |
|
|
|
|
return; |
|
|
|
|
@ -2256,20 +2258,32 @@ void OperatePedestal(Player &player, Object &pedestal)
|
|
|
|
|
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, true); |
|
|
|
|
if (sendmsg) |
|
|
|
|
SpawnQuestItem(IDI_BLDSTONE, SetPiece.position.megaToWorld() + Displacement { 3, 10 }, 0, 1, true); |
|
|
|
|
} |
|
|
|
|
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, true); |
|
|
|
|
if (sendmsg) |
|
|
|
|
SpawnQuestItem(IDI_BLDSTONE, SetPiece.position.megaToWorld() + Displacement { 15, 10 }, 0, 1, true); |
|
|
|
|
} |
|
|
|
|
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 }); |
|
|
|
|
if (sendmsg) |
|
|
|
|
SpawnUnique(UITEM_ARMOFVAL, SetPiece.position.megaToWorld() + Displacement { 9, 3 }); |
|
|
|
|
pedestal._oSelFlag = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (sendmsg) { |
|
|
|
|
NetSendCmdLoc(MyPlayerId, false, CMD_OPERATEOBJ, pedestal.position); |
|
|
|
|
if (gbIsMultiplayer) { |
|
|
|
|
// Store added stones to pedestal in qvar2, cause we get only one CMD_OPERATEOBJ from DeltaLoadLevel even if we add multiple stones
|
|
|
|
|
Quests[Q_BLOOD]._qvar2++; |
|
|
|
|
NetSendCmdQuest(true, Quests[Q_BLOOD]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void OperateShrineMysterious(Player &player) |
|
|
|
|
@ -3548,20 +3562,30 @@ void SyncQSTLever(const Object &qstLever)
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SyncPedestal(const Object &pedestal, Point origin, int width) |
|
|
|
|
void SyncPedestal(const Object &pedestal) |
|
|
|
|
{ |
|
|
|
|
if (pedestal._oVar6 == 1) |
|
|
|
|
ObjChangeMapResync(origin.x, origin.y + 3, origin.x + 2, origin.y + 7); |
|
|
|
|
ObjChangeMapResync(SetPiece.position.x, SetPiece.position.y + 3, SetPiece.position.x + 2, SetPiece.position.y + 7); |
|
|
|
|
if (pedestal._oVar6 == 2) { |
|
|
|
|
ObjChangeMapResync(origin.x, origin.y + 3, origin.x + 2, origin.y + 7); |
|
|
|
|
ObjChangeMapResync(origin.x + 6, origin.y + 3, origin.x + width, origin.y + 7); |
|
|
|
|
ObjChangeMapResync(SetPiece.position.x, SetPiece.position.y + 3, SetPiece.position.x + 2, SetPiece.position.y + 7); |
|
|
|
|
ObjChangeMapResync(SetPiece.position.x + 6, SetPiece.position.y + 3, SetPiece.position.x + SetPiece.size.width, SetPiece.position.y + 7); |
|
|
|
|
} |
|
|
|
|
if (pedestal._oVar6 == 3) { |
|
|
|
|
if (pedestal._oVar6 >= 3) { |
|
|
|
|
ObjChangeMapResync(pedestal._oVar1, pedestal._oVar2, pedestal._oVar3, pedestal._oVar4); |
|
|
|
|
LoadMapObjects("levels\\l2data\\blood2.dun", origin.megaToWorld()); |
|
|
|
|
LoadMapObjects("levels\\l2data\\blood2.dun", SetPiece.position.megaToWorld()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UpdatePedestalState(Object &pedestal) |
|
|
|
|
{ |
|
|
|
|
int addedStones = Quests[Q_BLOOD]._qvar2; |
|
|
|
|
pedestal._oAnimFrame += addedStones; |
|
|
|
|
pedestal._oVar6 += addedStones; |
|
|
|
|
SyncPedestal(pedestal); |
|
|
|
|
if (pedestal._oVar6 >= 3) |
|
|
|
|
pedestal._oSelFlag = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SyncDoor(Object &door) |
|
|
|
|
{ |
|
|
|
|
if (door._oVar4 == DOOR_CLOSED) { |
|
|
|
|
@ -4425,7 +4449,7 @@ void OperateObject(Player &player, Object &object)
|
|
|
|
|
OperateStoryBook(object); |
|
|
|
|
break; |
|
|
|
|
case OBJ_PEDESTAL: |
|
|
|
|
OperatePedestal(player, object); |
|
|
|
|
OperatePedestal(player, object, sendmsg); |
|
|
|
|
break; |
|
|
|
|
case OBJ_WARWEAP: |
|
|
|
|
case OBJ_WEAPONRACK: |
|
|
|
|
@ -4488,7 +4512,7 @@ void DeltaSyncOpObject(Object &object)
|
|
|
|
|
case OBJ_BLINDBOOK: |
|
|
|
|
case OBJ_BLOODBOOK: |
|
|
|
|
case OBJ_STEELTOME: |
|
|
|
|
UpdateState(object, object._oVar6); |
|
|
|
|
object._oAnimFrame = object._oVar6; |
|
|
|
|
break; |
|
|
|
|
case OBJ_BOOKCASEL: |
|
|
|
|
case OBJ_BOOKCASER: |
|
|
|
|
@ -4520,6 +4544,9 @@ void DeltaSyncOpObject(Object &object)
|
|
|
|
|
UpdateState(object, object._oAnimFrame + 2); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case OBJ_PEDESTAL: |
|
|
|
|
UpdatePedestalState(object); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
@ -4603,7 +4630,7 @@ void SyncOpObject(Player &player, int cmd, Object &object)
|
|
|
|
|
OperateStoryBook(object); |
|
|
|
|
break; |
|
|
|
|
case OBJ_PEDESTAL: |
|
|
|
|
OperatePedestal(player, object); |
|
|
|
|
OperatePedestal(player, object, sendmsg); |
|
|
|
|
break; |
|
|
|
|
case OBJ_WARWEAP: |
|
|
|
|
case OBJ_WEAPONRACK: |
|
|
|
|
@ -4711,7 +4738,7 @@ void SyncObjectAnim(Object &object)
|
|
|
|
|
SyncQSTLever(object); |
|
|
|
|
break; |
|
|
|
|
case OBJ_PEDESTAL: |
|
|
|
|
SyncPedestal(object, SetPiece.position, SetPiece.size.width); |
|
|
|
|
SyncPedestal(object); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|
|