Browse Source

Multiplayer: Enable Arkaine's Valor Quest

pull/5542/head
obligaron 3 years ago committed by Anders Jenbo
parent
commit
600cb656fb
  1. 1
      Source/inv.cpp
  2. 57
      Source/objects.cpp

1
Source/inv.cpp

@ -924,6 +924,7 @@ void CheckQuestItem(Player &player, Item &questItem)
if (questItem.IDidx == IDI_ARMOFVAL && Quests[Q_BLOOD]._qactive == QUEST_ACTIVE) { if (questItem.IDidx == IDI_ARMOFVAL && Quests[Q_BLOOD]._qactive == QUEST_ACTIVE) {
Quests[Q_BLOOD]._qactive = QUEST_DONE; Quests[Q_BLOOD]._qactive = QUEST_DONE;
NetSendCmdQuest(true, Quests[Q_BLOOD]);
myPlayer.Say(HeroSpeech::MayTheSpiritOfArkaineProtectMe, 20); myPlayer.Say(HeroSpeech::MayTheSpiritOfArkaineProtectMe, 20);
} }

57
Source/objects.cpp

@ -1992,7 +1992,9 @@ void OperateBookLever(Object &questBook, bool sendmsg)
Quests[Q_BLOOD]._qactive = QUEST_ACTIVE; Quests[Q_BLOOD]._qactive = QUEST_ACTIVE;
Quests[Q_BLOOD]._qlog = true; Quests[Q_BLOOD]._qlog = true;
Quests[Q_BLOOD]._qvar1 = 1; 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) { if (questBook._otype == OBJ_STEELTOME && Quests[Q_WARLORD]._qvar1 == 0) {
Quests[Q_WARLORD]._qactive = QUEST_ACTIVE; 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); NetSendCmdLoc(MyPlayerId, false, CMD_OPERATEOBJ, sarcophagus.position);
} }
void OperatePedestal(Player &player, Object &pedestal) void OperatePedestal(Player &player, Object &pedestal, bool sendmsg)
{ {
if (ActiveItemCount >= MAXITEMS) { if (ActiveItemCount >= MAXITEMS) {
return; return;
@ -2256,20 +2258,32 @@ void OperatePedestal(Player &player, Object &pedestal)
if (pedestal._oVar6 == 1) { if (pedestal._oVar6 == 1) {
PlaySfxLoc(LS_PUDDLE, pedestal.position); PlaySfxLoc(LS_PUDDLE, pedestal.position);
ObjChangeMap(SetPiece.position.x, SetPiece.position.y + 3, SetPiece.position.x + 2, SetPiece.position.y + 7); 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) { if (pedestal._oVar6 == 2) {
PlaySfxLoc(LS_PUDDLE, pedestal.position); PlaySfxLoc(LS_PUDDLE, pedestal.position);
ObjChangeMap(SetPiece.position.x + 6, SetPiece.position.y + 3, SetPiece.position.x + SetPiece.size.width, SetPiece.position.y + 7); 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) { if (pedestal._oVar6 == 3) {
PlaySfxLoc(LS_BLODSTAR, pedestal.position); PlaySfxLoc(LS_BLODSTAR, pedestal.position);
ObjChangeMap(pedestal._oVar1, pedestal._oVar2, pedestal._oVar3, pedestal._oVar4); ObjChangeMap(pedestal._oVar1, pedestal._oVar2, pedestal._oVar3, pedestal._oVar4);
LoadMapObjects("levels\\l2data\\blood2.dun", SetPiece.position.megaToWorld()); 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; 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) 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) 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) { if (pedestal._oVar6 == 2) {
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);
ObjChangeMapResync(origin.x + 6, origin.y + 3, origin.x + width, origin.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); 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) void SyncDoor(Object &door)
{ {
if (door._oVar4 == DOOR_CLOSED) { if (door._oVar4 == DOOR_CLOSED) {
@ -4425,7 +4449,7 @@ void OperateObject(Player &player, Object &object)
OperateStoryBook(object); OperateStoryBook(object);
break; break;
case OBJ_PEDESTAL: case OBJ_PEDESTAL:
OperatePedestal(player, object); OperatePedestal(player, object, sendmsg);
break; break;
case OBJ_WARWEAP: case OBJ_WARWEAP:
case OBJ_WEAPONRACK: case OBJ_WEAPONRACK:
@ -4488,7 +4512,7 @@ void DeltaSyncOpObject(Object &object)
case OBJ_BLINDBOOK: case OBJ_BLINDBOOK:
case OBJ_BLOODBOOK: case OBJ_BLOODBOOK:
case OBJ_STEELTOME: case OBJ_STEELTOME:
UpdateState(object, object._oVar6); object._oAnimFrame = object._oVar6;
break; break;
case OBJ_BOOKCASEL: case OBJ_BOOKCASEL:
case OBJ_BOOKCASER: case OBJ_BOOKCASER:
@ -4520,6 +4544,9 @@ void DeltaSyncOpObject(Object &object)
UpdateState(object, object._oAnimFrame + 2); UpdateState(object, object._oAnimFrame + 2);
} }
break; break;
case OBJ_PEDESTAL:
UpdatePedestalState(object);
break;
default: default:
break; break;
} }
@ -4603,7 +4630,7 @@ void SyncOpObject(Player &player, int cmd, Object &object)
OperateStoryBook(object); OperateStoryBook(object);
break; break;
case OBJ_PEDESTAL: case OBJ_PEDESTAL:
OperatePedestal(player, object); OperatePedestal(player, object, sendmsg);
break; break;
case OBJ_WARWEAP: case OBJ_WARWEAP:
case OBJ_WEAPONRACK: case OBJ_WEAPONRACK:
@ -4711,7 +4738,7 @@ void SyncObjectAnim(Object &object)
SyncQSTLever(object); SyncQSTLever(object);
break; break;
case OBJ_PEDESTAL: case OBJ_PEDESTAL:
SyncPedestal(object, SetPiece.position, SetPiece.size.width); SyncPedestal(object);
break; break;
default: default:
break; break;

Loading…
Cancel
Save