Browse Source

Sync break crux

pull/5492/head
obligaron 3 years ago committed by Anders Jenbo
parent
commit
610e80f098
  1. 2
      Source/missiles.cpp
  2. 20
      Source/objects.cpp
  3. 2
      Source/objects.h

2
Source/missiles.cpp

@ -446,7 +446,7 @@ void CheckMissileCol(Missile &missile, int minDamage, int maxDamage, bool isDama
if (IsMissileBlockedByTile({ mx, my })) { if (IsMissileBlockedByTile({ mx, my })) {
Object *object = FindObjectAtPosition({ mx, my }); Object *object = FindObjectAtPosition({ mx, my });
if (object != nullptr && object->IsBreakable()) { if (object != nullptr && object->IsBreakable()) {
BreakObjectMissile(*object); BreakObjectMissile(missile.sourcePlayer(), *object);
} }
if (!dontDeleteOnCollision) if (!dontDeleteOnCollision)

20
Source/objects.cpp

@ -3432,7 +3432,7 @@ bool AreAllCruxesOfTypeBroken(int cruxType)
return true; return true;
} }
void BreakCrux(Object &crux) void BreakCrux(const Player *player, Object &crux)
{ {
crux._oAnimFlag = true; crux._oAnimFlag = true;
crux._oAnimFrame = 1; crux._oAnimFrame = 1;
@ -3442,6 +3442,9 @@ void BreakCrux(Object &crux)
crux._oBreak = -1; crux._oBreak = -1;
crux._oSelFlag = 0; crux._oSelFlag = 0;
if (player == MyPlayer || player == nullptr)
NetSendCmdLoc(MyPlayerId, false, CMD_BREAKOBJ, crux.position);
if (!AreAllCruxesOfTypeBroken(crux._oVar8)) if (!AreAllCruxesOfTypeBroken(crux._oVar8))
return; return;
@ -4616,32 +4619,37 @@ void SyncOpObject(Player &player, int cmd, Object &object)
} }
} }
void BreakObjectMissile(Object &object) void BreakObjectMissile(const Player *player, Object &object)
{ {
if (object.IsCrux()) if (object.IsCrux())
BreakCrux(object); BreakCrux(player, object);
} }
void BreakObject(const Player &player, Object &object) void BreakObject(const Player &player, Object &object)
{ {
if (object.IsBarrel()) { if (object.IsBarrel()) {
BreakBarrel(player, object, false, true); BreakBarrel(player, object, false, true);
} else if (object.IsCrux()) { } else if (object.IsCrux()) {
BreakCrux(object); BreakCrux(&player, object);
} }
} }
void DeltaSyncBreakObj(Object &object) void DeltaSyncBreakObj(Object &object)
{ {
if (!object.IsBarrel() || object._oSelFlag == 0) if (!object.IsBreakable() || object._oSelFlag == 0)
return; return;
object._oSolidFlag = false;
object._oMissFlag = true; object._oMissFlag = true;
object._oBreak = -1; object._oBreak = -1;
object._oSelFlag = 0; object._oSelFlag = 0;
object._oPreFlag = true; object._oPreFlag = true;
object._oAnimFlag = false; object._oAnimFlag = false;
object._oAnimFrame = object._oAnimLen; object._oAnimFrame = object._oAnimLen;
if (object.IsBarrel()) {
object._oSolidFlag = false;
} else if (object.IsCrux() && AreAllCruxesOfTypeBroken(object._oVar8)) {
ObjChangeMap(object._oVar1, object._oVar2, object._oVar3, object._oVar4);
}
} }
void SyncBreakObj(const Player &player, Object &object) void SyncBreakObj(const Player &player, Object &object)

2
Source/objects.h

@ -319,7 +319,7 @@ void ObjChangeMapResync(int x1, int y1, int x2, int y2);
_item_indexes ItemMiscIdIdx(item_misc_id imiscid); _item_indexes ItemMiscIdIdx(item_misc_id imiscid);
void OperateObject(Player &player, Object &object); void OperateObject(Player &player, Object &object);
void SyncOpObject(Player &player, int cmd, Object &object); void SyncOpObject(Player &player, int cmd, Object &object);
void BreakObjectMissile(Object &object); void BreakObjectMissile(const Player *player, Object &object);
void BreakObject(const Player &player, Object &object); void BreakObject(const Player &player, Object &object);
void DeltaSyncOpObject(Object &object); void DeltaSyncOpObject(Object &object);
void DeltaSyncBreakObj(Object &object); void DeltaSyncBreakObj(Object &object);

Loading…
Cancel
Save