Skip to content

Commit 71ed99e

Browse files
committed
i swear on me mum
1 parent 49ba43b commit 71ed99e

6 files changed

Lines changed: 86 additions & 71 deletions

File tree

broadcast/deploy-battle-nads.s.sol/10143/run-latest.json

Lines changed: 27 additions & 27 deletions
Large diffs are not rendered by default.

src/battle-nads/Character.sol

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -332,19 +332,17 @@ abstract contract Character is Abilities {
332332

333333
// if (!combatant.isMonster()) {
334334
combatant.activeTask.taskAddress = _loadActiveTaskAddress(combatant.id);
335-
if (_isValidAddress(combatant.activeTask.taskAddress)) {
335+
if (
336+
isTask && _isValidAddress(combatant.activeTask.taskAddress)
337+
&& combatant.activeTask.taskAddress == underlyingMsgSender
338+
) {
336339
_clearKey(combatant, combatant.activeTask.taskAddress);
337-
}
338-
_clearActiveTask(combatant.id);
339-
combatant.activeTask.taskAddress = _EMPTY_ADDRESS;
340-
combatant.tracker.updateActiveTask = false;
341-
combatant = _checkClearAbility(combatant);
342-
//}
343-
} else {
344-
if (!combatant.isMonster()) {
345-
combatant = _checkClearAbility(combatant);
340+
_clearActiveTask(combatant.id);
341+
combatant.activeTask.taskAddress = _EMPTY_ADDRESS;
342+
combatant.tracker.updateActiveTask = false;
346343
}
347344
}
345+
combatant = _checkClearAbility(combatant);
348346
return combatant;
349347
}
350348

src/battle-nads/Combat.sol

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ abstract contract Combat is MonsterFactory {
5454
if (attackerBitmap & defenderBit != 0) {
5555
attackerBitmap &= ~defenderBit;
5656
attacker.stats.combatantBitMap = uint64(attackerBitmap);
57-
if (!attacker.isInCombat()) {
58-
attacker = _exitCombat(attacker);
59-
}
57+
//if (!attacker.isInCombat()) {
58+
// attacker = _exitCombat(attacker);
59+
//}
6060
// NOTE: To prevent chaining, we only decrement combatants and sumOfCombatantLevels when combat is over
6161
if (!attacker.tracker.updateStats) attacker.tracker.updateStats = true;
6262
}
@@ -70,9 +70,9 @@ abstract contract Combat is MonsterFactory {
7070
if (defenderBitmap & attackerBit != 0) {
7171
defenderBitmap &= ~attackerBit;
7272
defender.stats.combatantBitMap = uint64(defenderBitmap);
73-
if (!defender.isInCombat()) {
74-
defender = _exitCombat(defender);
75-
}
73+
//if (!defender.isInCombat()) {
74+
// defender = _exitCombat(defender);
75+
//}
7676
// NOTE: To prevent chaining, we only decrement combatants and sumOfCombatantLevels when combat is over
7777
if (!defender.tracker.updateStats) defender.tracker.updateStats = true;
7878
}
@@ -216,7 +216,9 @@ abstract contract Combat is MonsterFactory {
216216
combatantBitmap &= ~(1 << attackerIndex);
217217

218218
if (combatantBitmap == 0) {
219-
attacker = _exitCombat(attacker);
219+
// attacker = _exitCombat(attacker);
220+
attacker.stats.combatantBitMap = uint64(0);
221+
attacker.stats.nextTargetIndex = 0;
220222
BattleNad memory nullDefender;
221223
return (attacker, nullDefender, area);
222224
}
@@ -307,12 +309,14 @@ abstract contract Combat is MonsterFactory {
307309
} while (combatantBitmap != 0 && gasleft() > 110_000);
308310

309311
if (combatantBitmap == 0) {
310-
attacker = _exitCombat(attacker);
312+
//attacker = _exitCombat(attacker);
313+
attacker.stats.combatantBitMap = uint64(0);
314+
attacker.stats.nextTargetIndex = uint8(0);
311315
} else {
312316
attacker.stats.combatantBitMap = uint64(combatantBitmap);
313317
attacker.stats.nextTargetIndex = uint8(targetIndex);
314318
if (attacker.stats.nextTargetIndex == attacker.stats.index) {
315-
if (++attacker.stats.nextTargetIndex > 64) attacker.stats.nextTargetIndex = 1;
319+
if (++attacker.stats.nextTargetIndex > 64) attacker.stats.nextTargetIndex = isBossEncounter ? 1 : 2;
316320
}
317321
}
318322
BattleNad memory nullDefender;

src/battle-nads/Handler.sol

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -507,9 +507,9 @@ abstract contract Handler is Balances {
507507

508508
// CASE: No combatants remain
509509
if (!attacker.isInCombat()) {
510-
if (!attacker.isMonster()) {
511-
attacker = _checkClearAbility(attacker);
512-
}
510+
//if (!attacker.isMonster()) {
511+
// attacker = _checkClearAbility(attacker);
512+
//}
513513

514514
reschedule = false;
515515
nextExecutionBlock = 0;
@@ -573,7 +573,6 @@ abstract contract Handler is Balances {
573573

574574
// CASE: All opponents have been defeated
575575
if (!attacker.isInCombat()) {
576-
attacker = _exitCombat(attacker);
577576
reschedule = false;
578577
nextExecutionBlock = 0;
579578

@@ -625,8 +624,11 @@ abstract contract Handler is Balances {
625624
if (reschedule) {
626625
(attacker, reschedule) = _createOrRescheduleAbilityTask(attacker, nextBlock);
627626
if (!reschedule) {
627+
attacker = _checkClearAbility(attacker);
628628
revert Errors.TaskNotRescheduled();
629629
}
630+
} else {
631+
attacker = _checkClearAbility(attacker);
630632
}
631633

632634
return attacker;
@@ -672,6 +674,8 @@ abstract contract Handler is Balances {
672674
// revert Errors.TaskNotRescheduled();
673675
attacker = _checkClearAbility(attacker);
674676
}
677+
} else {
678+
attacker = _checkClearAbility(attacker);
675679
}
676680

677681
return attacker;
@@ -706,11 +710,11 @@ abstract contract Handler is Balances {
706710
attacker.stats.combatantBitMap = uint64(attackerBitmap);
707711
attacker.tracker.updateStats = true;
708712
}
709-
if (!attacker.isInCombat()) {
710-
attacker = _exitCombat(attacker);
711-
} else {
712-
attacker = _checkClearAbility(attacker);
713-
}
713+
// if (!attacker.isInCombat()) {
714+
// attacker = _exitCombat(attacker);
715+
// } else {
716+
// attacker = _checkClearAbility(attacker);
717+
// }
714718
return (attacker, false, 0);
715719
}
716720

@@ -724,11 +728,11 @@ abstract contract Handler is Balances {
724728
attacker.stats.combatantBitMap = uint64(attackerBitmap);
725729
attacker.tracker.updateStats = true;
726730
}
727-
if (!attacker.isInCombat()) {
728-
attacker = _exitCombat(attacker);
729-
} else {
730-
attacker = _checkClearAbility(attacker);
731-
}
731+
// if (!attacker.isInCombat()) {
732+
// attacker = _exitCombat(attacker);
733+
// } else {
734+
// attacker = _checkClearAbility(attacker);
735+
// }
732736
// Return early if target cant be found - process their death in regular combat task.
733737
return (attacker, false, 0);
734738
}
@@ -810,6 +814,7 @@ abstract contract Handler is Balances {
810814
}
811815
*/
812816

817+
/*
813818
if (!attacker.isDead() && !attacker.isMonster() && attacker.isInCombat() && !_isTask()) {
814819
bool scheduledTask;
815820
(attacker, scheduledTask,) = _checkClearTasks(attacker);
@@ -823,14 +828,15 @@ abstract contract Handler is Balances {
823828
}
824829
}
825830
}
831+
*/
826832

827-
if (!reschedule) {
828-
if (!attacker.isInCombat()) {
829-
attacker = _exitCombat(attacker);
830-
} else {
831-
attacker = _checkClearAbility(attacker);
832-
}
833-
}
833+
// if (!reschedule) {
834+
//if (!attacker.isInCombat()) {
835+
// attacker = _exitCombat(attacker);
836+
//} else {
837+
//attacker = _checkClearAbility(attacker);
838+
//}
839+
// }
834840

835841
return (attacker, reschedule, nextBlock);
836842
}

src/battle-nads/Storage.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,9 @@ abstract contract Storage {
244244
if (character.tracker.died) {
245245
character.stats.health = 0;
246246
}
247-
if (character.stats.combatantBitMap == uint64(0)) {
248-
character = _exitCombat(character);
249-
}
247+
//if (character.stats.combatantBitMap == uint64(0)) {
248+
// character = _exitCombat(character);
249+
//}
250250
if (character.tracker.updateStats) {
251251
character = _removeClassStatAdjustments(character);
252252
_storeBattleNadStats(character.stats, character.id);

src/battle-nads/TaskHandler.sol

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ contract TaskHandler is Handler, GeneralReschedulingTask {
7575
//}
7676

7777
// Set reschedule lock for reimbursement call afterwards
78-
if (reschedule) {
78+
if (!reschedule && !attacker.isInCombat()) {
79+
attacker = _exitCombat(attacker);
80+
} else if (reschedule) {
7981
(attacker, reschedule) = _createOrRescheduleCombatTask(attacker, targetBlock);
8082
if (!reschedule) {
8183
emit Events.TaskNotScheduledInTaskHandler(20, attacker.id, block.number, targetBlock);
@@ -183,8 +185,11 @@ contract TaskHandler is Handler, GeneralReschedulingTask {
183185
if (reschedule) {
184186
(attacker, reschedule) = _createOrRescheduleAbilityTask(attacker, targetBlock);
185187
if (!reschedule) {
188+
attacker = _checkClearAbility(attacker);
186189
emit Events.TaskNotScheduledInTaskHandler(22, attacker.id, block.number, targetBlock);
187190
}
191+
} else {
192+
attacker = _checkClearAbility(attacker);
188193
}
189194

190195
// If successful, store the data
@@ -427,6 +432,7 @@ contract TaskHandler is Handler, GeneralReschedulingTask {
427432

428433
uint64 activeBlock = uint64(_loadBal.activeBlockMedium);
429434

435+
/*
430436
if (!combatant.isMonster()) {
431437
if (!_isValidAddress(combatant.activeAbility.taskAddress)) {
432438
combatant.activeAbility = _loadAbility(combatant.id);
@@ -449,6 +455,7 @@ contract TaskHandler is Handler, GeneralReschedulingTask {
449455
}
450456
}
451457
}
458+
*/
452459

453460
if (_isValidAddress(combatant.activeTask.taskAddress)) {
454461
if (underlyingMsgSender != combatant.activeTask.taskAddress) {

0 commit comments

Comments
 (0)