I did a trace in 3 different cases and came up with 2 possible solutions. Now, I have some questions:
- Which solution would be best to use?
- Would you recommend any other solutions?
- I need to take a look at the functions I want to overwrite. How can I find them?
Case 1:
I attacked someone else's horse outside of minigame. No damage occurred.
My goal is to enable damage in this case (under certain conditions).
Case 2:
I attacked my own horse outside of minigame. Damage occurred, even though MinigameCanDamage returned -1.
This behaviour could be mimicked and applied to case 1.
Case 3:
I attacked my own horse inside a minigame with weapon damage on. MinigameCanDamage returned 1, so damage occurred.
Solution 1
Modify MinigameCanDamage to return 1 when certain conditions are met.
A simple solution, but it would seem a bit hacky, since everything happens outside of minigame.
Solution 2
Modify ProjectileData::onCollision to call ProjectileData::Damage when certain conditions are met.
Less hacky solution. As seen in case 2, Blockland already does this when attacking your own bot outside of minigame.
Trace:
Passworded internet server
199: My Blockland ID
4382: Someone else's ID
CASE 1
ATTACKING SOMEONE ELSE'S HORSE
OUTSIDE OF MINIGAME
Entering ProjectileData::onCollision(849, 73697, 73654, 1, 288.526367 0.250000 120.277847, 0.000000 1.000000 0.000000, -0.615194 -79.777100 -11.420200)
Entering getBL_IDFromObject(73697)
Entering getBrickGroupFromObject(73697)
Leaving getBrickGroupFromObject() - return 41197
Leaving getBL_IDFromObject() - return 199
Entering miniGameCanDamage(41190, 73654)
Entering getMiniGameFromObject(41190)
Leaving getMiniGameFromObject() - return -1
Entering getMiniGameFromObject(73654)
Entering SimGroup::getClient(42330)
Leaving SimGroup::getClient() - return 0
Leaving getMiniGameFromObject() - return -1
Leaving miniGameCanDamage() - return -1
Leaving ProjectileData::onCollision() - return -1
CASE 2
ATTACKING OWN HORSE
OUTSIDE OF MINIGAME
Entering ProjectileData::onCollision(849, 73705, 73652, 1, 293.442688 0.250000 120.283272, 0.000000 1.000000 0.000000, -0.619024 -80.273804 -11.491300)
Entering getBL_IDFromObject(73705)
Entering getBrickGroupFromObject(73705)
Leaving getBrickGroupFromObject() - return 41197
Leaving getBL_IDFromObject() - return 199
Entering miniGameCanDamage(41190, 73652)
Entering getMiniGameFromObject(41190)
Leaving getMiniGameFromObject() - return -1
Entering getMiniGameFromObject(73652)
Entering SimGroup::getClient(41197)
Leaving SimGroup::getClient() - return 41190
Entering SimGroup::getClient(41197)
Leaving SimGroup::getClient() - return 41190
Leaving getMiniGameFromObject() - return -1
Leaving miniGameCanDamage() - return -1
Entering ProjectileData::Damage(849, 73705, 73652, 1, 293.442688 0.250000 120.283272, 0.000000 1.000000 0.000000)
Entering ShapeBase::Damage(73652, 73705, 293.442688 0.250000 120.283272, 35, 10)
Entering Armor::Damage(855, 73652, 73705, 293.442688 0.250000 120.283272, 35, 10)
Entering Armor::onDamage(855, 73652, 35.000000)
Entering Player::playPain(73652)
Leaving Player::playPain() - return 855
Leaving Armor::onDamage() - return 855
Entering Player::emote(73652, PainMidImage, 1)
Leaving Player::emote() - return 73652
Leaving Armor::Damage() - return 73652
Leaving ShapeBase::Damage() - return 73652
Leaving ProjectileData::Damage() - return 73652
Entering ProjectileData::impactImpulse(849, 73705, 73652, -0.619024 -80.273804 -11.491300)
Leaving ProjectileData::impactImpulse() - return 218836
Leaving ProjectileData::onCollision() - return 218836
CASE 3
ATTACKING OWN HORSE
INSIDE MINIGAME
Entering ProjectileData::onCollision(849, 73765, 73744, 1, 293.506836 0.250000 120.421066, 0.000000 1.000000 0.000000, 3.230390 -76.527901 -6.085890)
Entering getBL_IDFromObject(73765)
Entering getBrickGroupFromObject(73765)
Leaving getBrickGroupFromObject() - return 41197
Leaving getBL_IDFromObject() - return 199
Entering miniGameCanDamage(41190, 73744)
Entering getMiniGameFromObject(41190)
Leaving getMiniGameFromObject() - return 73717
Entering getMiniGameFromObject(73744)
Entering SimGroup::getClient(41197)
Leaving SimGroup::getClient() - return 41190
Entering SimGroup::getClient(41197)
Leaving SimGroup::getClient() - return 41190
Leaving getMiniGameFromObject() - return 73717
Leaving miniGameCanDamage() - return 1
Entering ProjectileData::Damage(849, 73765, 73744, 1, 293.506836 0.250000 120.421066, 0.000000 1.000000 0.000000)
Entering ShapeBase::Damage(73744, 73765, 293.506836 0.250000 120.421066, 35, 10)
Entering Armor::Damage(855, 73744, 73765, 293.506836 0.250000 120.421066, 35, 10)
Entering Armor::onDamage(855, 73744, 35.000000)
Entering Player::playPain(73744)
Leaving Player::playPain() - return 855
Leaving Armor::onDamage() - return 855
Entering Player::emote(73744, PainMidImage, 1)
Leaving Player::emote() - return 73744
Leaving Armor::Damage() - return 73744
Leaving ShapeBase::Damage() - return 73744
Leaving ProjectileData::Damage() - return 73744
Entering ProjectileData::impactImpulse(849, 73765, 73744, 3.230390 -76.527901 -6.085890)
Leaving ProjectileData::impactImpulse() - return 237494
Leaving ProjectileData::onCollision() - return 237494