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) {
Quests[Q_BLOOD]._qactive = QUEST_DONE;
NetSendCmdQuest(true, Quests[Q_BLOOD]);
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]._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;

Loading…
Cancel
Save