Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion packages/contracts/mud.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,6 @@ export default defineWorld({
schema: {
encounterEntityId: "bytes32",
// by default this is bytes(0), if this entity is in an encounter it will be set,
// if the mob survives its encounter this will be set back to bytes(0)
encounterId: "bytes32",
died: "bool",
},
Expand Down

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/contracts/out/CombatSystem.sol/CombatSystem.json

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/contracts/out/IWorld.sol/IWorld.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/contracts/out/MapSystem.sol/MapSystem.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions packages/contracts/src/interfaces/Structs.sol
Original file line number Diff line number Diff line change
Expand Up @@ -170,12 +170,12 @@ struct QuestEntity {
}

struct RewardDistributionTemps {
bytes32 defenderTemp;
bytes32 monsterTemp;
bytes32 entityIdTemp;
uint256 defenderLevelTemp;
uint256 totalItemsDropped;
uint256 livingPlayers;
uint256 cumulativeAttackerLevels;
uint256 cumulativePlayerLevels;
bytes32[] players;
bytes32[] monsters;
}
20 changes: 10 additions & 10 deletions packages/contracts/src/systems/EncounterSystem.sol
Original file line number Diff line number Diff line change
Expand Up @@ -232,11 +232,17 @@ contract EncounterSystem is System {
encounterData.end = block.timestamp;
}

bytes32 defenderTemp;
bytes32 entityTemp;
for (uint256 i; i < encounterData.defenders.length; i++) {
defenderTemp = encounterData.defenders[i];
if (!EncounterEntity.getDied(defenderTemp)) {
EncounterEntity.setEncounterId(defenderTemp, bytes32(0));
entityTemp = encounterData.defenders[i];
if (EncounterEntity.getDied(entityTemp)) {
IWorld(_world()).UD__removeEntityFromBoard(entityTemp);
}
}
for (uint256 i; i < encounterData.attackers.length; i++) {
entityTemp = encounterData.attackers[i];
if (EncounterEntity.getDied(entityTemp)) {
IWorld(_world()).UD__removeEntityFromBoard(entityTemp);
}
}
uint256 expAmount;
Expand All @@ -255,15 +261,9 @@ contract EncounterSystem is System {

for (uint256 i; i < encounterData.attackers.length; i++) {
EncounterEntity.setEncounterId(encounterData.attackers[i], bytes32(0));
if (!IWorld(_world()).UD__isValidCharacterId(encounterData.attackers[i])) {
IWorld(_world()).UD__removeEntityFromBoard(encounterData.attackers[i]);
}
}
for (uint256 i; i < encounterData.defenders.length; i++) {
EncounterEntity.setEncounterId(encounterData.defenders[i], bytes32(0));
if (!IWorld(_world()).UD__isValidCharacterId(encounterData.defenders[i])) {
IWorld(_world()).UD__removeEntityFromBoard(encounterData.defenders[i]);
}
}
CombatOutcome.set(encounterId, combatOutcome);
}
Expand Down
25 changes: 13 additions & 12 deletions packages/contracts/src/systems/LootManagerSystem.sol
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ contract LootManagerSystem is System {
internal
returns (uint256[] memory)
{
console2.log("Calculating item drop");
uint256 mobId = IWorld(_world()).UD__getMobId(entityId);
MonsterStats memory monsterStats = abi.decode(Mobs.getMobStats(mobId), (MonsterStats));

Expand Down Expand Up @@ -162,7 +161,7 @@ contract LootManagerSystem is System {
}
for (uint256 i; i < distTemps.players.length; i++) {
statsTemp = Stats.get(distTemps.players[i]);
distTemps.cumulativeAttackerLevels += statsTemp.level;
distTemps.cumulativePlayerLevels += statsTemp.level;
if (statsTemp.currentHp > 0) {
distTemps.livingPlayers++;
}
Expand All @@ -174,22 +173,24 @@ contract LootManagerSystem is System {
bytes[] memory itemsDroppedTemp = new bytes[](distTemps.monsters.length);

for (uint256 i; i < distTemps.monsters.length; i++) {
distTemps.defenderTemp = distTemps.monsters[i];
distTemps.defenderLevelTemp = Stats.getLevel(distTemps.defenderTemp);
bool correctLevelSpread = distTemps.defenderLevelTemp > distTemps.cumulativeAttackerLevels
distTemps.monsterTemp = distTemps.monsters[i];
distTemps.defenderLevelTemp = Stats.getLevel(distTemps.monsterTemp);
bool correctLevelSpread = distTemps.defenderLevelTemp > distTemps.cumulativePlayerLevels
? true
: (distTemps.cumulativeAttackerLevels - distTemps.defenderLevelTemp) <= 5;
: (distTemps.cumulativePlayerLevels - distTemps.defenderLevelTemp) <= 5;

if (EncounterEntity.getDied(distTemps.defenderTemp) && correctLevelSpread) {
_expAmount += Stats.getExperience(distTemps.defenderTemp);
if (EncounterEntity.getDied(distTemps.monsterTemp) && correctLevelSpread) {
_expAmount += Stats.getExperience(distTemps.monsterTemp);
_goldAmount += _calculateGoldDrop(statsTemp.level, randomNumber);
EncounterEntity.setEncounterId(distTemps.defenderTemp, bytes32(0));
EncounterEntity.setEncounterId(distTemps.monsterTemp, bytes32(0));

// get dropped items into temporary array
bytes32 playerToDropTo = distTemps.players[randomNumber % distTemps.players.length];

_itemIdsDropped = _calculateItemDrop(
randomNumber, distTemps.defenderTemp, distTemps.players[randomNumber % distTemps.players.length]
);
// if player is still alive drop item
if (!EncounterEntity.getDied(playerToDropTo)) {
_itemIdsDropped = _calculateItemDrop(randomNumber, distTemps.monsterTemp, playerToDropTo);
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion packages/contracts/worlds.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
"address": "0x3cf01199a18fd3900c49710563177505085371ca",
"blockNumber": 13947614
}
}
}