From ce8af68f753dd0713bcf172253514373dfb4cd68 Mon Sep 17 00:00:00 2001
From: MrDeadCe11
Date: Sun, 7 Jul 2024 15:56:19 -0500
Subject: [PATCH] added verification to the executeCombat function
---
packages/contracts/script/PostDeploy.s.sol | 529 +++++++++---------
.../contracts/src/systems/CombatSystem.sol | 7 +-
packages/contracts/worlds.json | 2 +-
3 files changed, 265 insertions(+), 273 deletions(-)
diff --git a/packages/contracts/script/PostDeploy.s.sol b/packages/contracts/script/PostDeploy.s.sol
index 9db55a8af..9ab5e5259 100644
--- a/packages/contracts/script/PostDeploy.s.sol
+++ b/packages/contracts/script/PostDeploy.s.sol
@@ -1,286 +1,277 @@
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.24;
-import { Script } from "forge-std/Script.sol";
-import { console } from "forge-std/console.sol";
-import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol";
-import { StoreCore, EncodedLengths } from "@latticexyz/store/src/StoreCore.sol";
-import { MockEntropy } from "@test/mocks/MockEntropy.sol";
-import { PuppetModule } from "@latticexyz/world-modules/src/modules/puppet/PuppetModule.sol";
-import { Systems } from "@latticexyz/world/src/codegen/tables/Systems.sol";
-import { IWorld } from "@world/IWorld.sol";
-import { UltimateDominionConfig, Levels, MapConfig } from "@codegen/index.sol";
-import { ResourceIdLib } from "@latticexyz/store/src/ResourceId.sol";
-import { ResourceId, WorldResourceIdLib, WorldResourceIdInstance } from "@latticexyz/world/src/WorldResourceId.sol";
-import { RESOURCE_SYSTEM } from "@latticexyz/world/src/worldResourceTypes.sol";
-import { RngSystem } from "../src/systems/RngSystem.sol";
-import { IERC721Mintable } from "@latticexyz/world-modules/src/modules/erc721-puppet/IERC721Mintable.sol";
-import { registerERC721 } from "@latticexyz/world-modules/src/modules/erc721-puppet/registerERC721.sol";
-import { ERC721System } from "@latticexyz/world-modules/src/modules/erc721-puppet/ERC721System.sol";
-import { ERC721MetadataData } from "@latticexyz/world-modules/src/modules/erc721-puppet/tables/ERC721Metadata.sol";
-import { GOLD_NAMESPACE, CHARACTERS_NAMESPACE, ERC721_NAME, ERC721_SYMBOL, ITEMS_NAMESPACE, TOKEN_URI } from "../constants.sol";
-import { NoTransferHook } from "../src/NoTransferHook.sol";
-import { BEFORE_CALL_SYSTEM } from "@latticexyz/world/src/systemHookTypes.sol";
-import { Classes, ItemType, MobType } from "@codegen/common.sol";
-import { WeaponStats, MonsterStats, MonsterTemplateDetails } from "@interfaces/Structs.sol";
-import { IERC20Mintable } from "@latticexyz/world-modules/src/modules/erc20-puppet/IERC20Mintable.sol";
-import { ERC20MetadataData } from "@latticexyz/world-modules/src/modules/erc20-puppet/tables/ERC20Metadata.sol";
-import { ERC20System } from "@latticexyz/world-modules/src/modules/erc20-puppet/ERC20System.sol";
-import { registerERC20 } from "@latticexyz/world-modules/src/modules/erc20-puppet/registerERC20.sol";
-import { System } from "@latticexyz/world/src/System.sol";
-import { CharacterSystem } from "../src/systems/CharacterSystem.sol";
-
-import { ERC1155Module } from "@erc1155/ERC1155Module.sol";
-import { ERC1155System } from "@erc1155/ERC1155System.sol";
-import { IERC1155 } from "@erc1155/IERC1155.sol";
-import { registerERC1155 } from "@erc1155/registerERC1155.sol";
-import { _erc1155SystemId } from "@erc1155/utils.sol";
+import {Script} from "forge-std/Script.sol";
+import {console} from "forge-std/console.sol";
+import {StoreSwitch} from "@latticexyz/store/src/StoreSwitch.sol";
+import {StoreCore, EncodedLengths} from "@latticexyz/store/src/StoreCore.sol";
+import {MockEntropy} from "@test/mocks/MockEntropy.sol";
+import {PuppetModule} from "@latticexyz/world-modules/src/modules/puppet/PuppetModule.sol";
+import {Systems} from "@latticexyz/world/src/codegen/tables/Systems.sol";
+import {IWorld} from "@world/IWorld.sol";
+import {UltimateDominionConfig, Levels, MapConfig} from "@codegen/index.sol";
+import {ResourceIdLib} from "@latticexyz/store/src/ResourceId.sol";
+import {ResourceId, WorldResourceIdLib, WorldResourceIdInstance} from "@latticexyz/world/src/WorldResourceId.sol";
+import {RESOURCE_SYSTEM} from "@latticexyz/world/src/worldResourceTypes.sol";
+import {RngSystem} from "../src/systems/RngSystem.sol";
+import {IERC721Mintable} from "@latticexyz/world-modules/src/modules/erc721-puppet/IERC721Mintable.sol";
+import {registerERC721} from "@latticexyz/world-modules/src/modules/erc721-puppet/registerERC721.sol";
+import {ERC721System} from "@latticexyz/world-modules/src/modules/erc721-puppet/ERC721System.sol";
+import {ERC721MetadataData} from "@latticexyz/world-modules/src/modules/erc721-puppet/tables/ERC721Metadata.sol";
+import {
+ GOLD_NAMESPACE,
+ CHARACTERS_NAMESPACE,
+ ERC721_NAME,
+ ERC721_SYMBOL,
+ ITEMS_NAMESPACE,
+ TOKEN_URI
+} from "../constants.sol";
+import {NoTransferHook} from "../src/NoTransferHook.sol";
+import {BEFORE_CALL_SYSTEM} from "@latticexyz/world/src/systemHookTypes.sol";
+import {Classes, ItemType, MobType} from "@codegen/common.sol";
+import {WeaponStats, MonsterStats, MonsterTemplateDetails} from "@interfaces/Structs.sol";
+import {IERC20Mintable} from "@latticexyz/world-modules/src/modules/erc20-puppet/IERC20Mintable.sol";
+import {ERC20MetadataData} from "@latticexyz/world-modules/src/modules/erc20-puppet/tables/ERC20Metadata.sol";
+import {ERC20System} from "@latticexyz/world-modules/src/modules/erc20-puppet/ERC20System.sol";
+import {registerERC20} from "@latticexyz/world-modules/src/modules/erc20-puppet/registerERC20.sol";
+import {System} from "@latticexyz/world/src/System.sol";
+import {CharacterSystem} from "../src/systems/CharacterSystem.sol";
+
+import {ERC1155Module} from "@erc1155/ERC1155Module.sol";
+import {ERC1155System} from "@erc1155/ERC1155System.sol";
+import {IERC1155} from "@erc1155/IERC1155.sol";
+import {registerERC1155} from "@erc1155/registerERC1155.sol";
+import {_erc1155SystemId} from "@erc1155/utils.sol";
import "forge-std/console2.sol";
import "forge-std/StdJson.sol";
struct ResourceIds {
- ResourceId erc721SystemId;
- ResourceId erc721NamespaceId;
- ResourceId characterSystemId;
- ResourceId erc20SystemId;
- ResourceId erc20NamespaceId;
- ResourceId rngSystemId;
- ResourceId erc1155SystemId;
- ResourceId erc1155NamespaceId;
- ResourceId itemsSystemId;
+ ResourceId erc721SystemId;
+ ResourceId erc721NamespaceId;
+ ResourceId characterSystemId;
+ ResourceId erc20SystemId;
+ ResourceId erc20NamespaceId;
+ ResourceId rngSystemId;
+ ResourceId erc1155SystemId;
+ ResourceId erc1155NamespaceId;
+ ResourceId itemsSystemId;
+ ResourceId combatSystemId;
}
contract PostDeploy is Script {
- using stdJson for string;
-
- IWorld public world;
- ResourceIds public resourceIds;
- address public worldAddress;
-
- function run(address _worldAddress) external {
- worldAddress = _worldAddress;
- world = IWorld(worldAddress);
- // Specify a store so that you can use tables directly in PostDeploy
- StoreSwitch.setStoreAddress(worldAddress);
-
- // Load the private key from the `PRIVATE_KEY` environment variable (in .env)
- uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
-
- // Start broadcasting transactions from the deployer account
- vm.startBroadcast(deployerPrivateKey);
- if (block.chainid == 31337) {
- // Set entropy contracts
- address mockEntropy = address(new MockEntropy());
- UltimateDominionConfig.setEntropy(mockEntropy);
- UltimateDominionConfig.setPythProvider(address(1));
- } else if (block.chainid == 84532) {
- UltimateDominionConfig.setEntropy(0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c);
- UltimateDominionConfig.setPythProvider(0x6CC14824Ea2918f5De5C2f75A9Da968ad4BD6344);
- } else if (block.chainid == 8453) {
- UltimateDominionConfig.setEntropy(0x6E7D74FA7d5c90FEF9F0512987605a6d546181Bb);
- UltimateDominionConfig.setPythProvider(0x52DeaA1c84233F7bb8C8A45baeDE41091c616506);
+ using stdJson for string;
+
+ IWorld public world;
+ ResourceIds public resourceIds;
+ address public worldAddress;
+
+ function run(address _worldAddress) external {
+ worldAddress = _worldAddress;
+ world = IWorld(worldAddress);
+ // Specify a store so that you can use tables directly in PostDeploy
+ StoreSwitch.setStoreAddress(worldAddress);
+
+ // Load the private key from the `PRIVATE_KEY` environment variable (in .env)
+ uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
+
+ // Start broadcasting transactions from the deployer account
+ vm.startBroadcast(deployerPrivateKey);
+ if (block.chainid == 31337) {
+ // Set entropy contracts
+ address mockEntropy = address(new MockEntropy());
+ UltimateDominionConfig.setEntropy(mockEntropy);
+ UltimateDominionConfig.setPythProvider(address(1));
+ } else if (block.chainid == 84532) {
+ UltimateDominionConfig.setEntropy(0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c);
+ UltimateDominionConfig.setPythProvider(0x6CC14824Ea2918f5De5C2f75A9Da968ad4BD6344);
+ } else if (block.chainid == 8453) {
+ UltimateDominionConfig.setEntropy(0x6E7D74FA7d5c90FEF9F0512987605a6d546181Bb);
+ UltimateDominionConfig.setPythProvider(0x52DeaA1c84233F7bb8C8A45baeDE41091c616506);
+ }
+
+ uint16 height = uint16(10);
+ uint16 width = uint16(10);
+ MapConfig.set(width, height);
+
+ //install puppet
+ world.installModule(new PuppetModule(), new bytes(0));
+
+ _addRngSystem();
+
+ // install gold module
+ IERC20Mintable goldToken = registerERC20(
+ world, GOLD_NAMESPACE, ERC20MetadataData({decimals: 18, name: "GoldToken", symbol: unicode"🜚"})
+ );
+
+ UltimateDominionConfig.setGoldToken(address(goldToken));
+
+ // characters
+ IERC721Mintable characters = registerERC721(
+ world,
+ CHARACTERS_NAMESPACE,
+ ERC721MetadataData({name: ERC721_NAME, symbol: ERC721_SYMBOL, baseURI: TOKEN_URI})
+ );
+
+ UltimateDominionConfig.setCharacterToken(address(characters));
+
+ {
+ resourceIds.erc20NamespaceId = WorldResourceIdLib.encodeNamespace(GOLD_NAMESPACE);
+ resourceIds.erc20SystemId =
+ WorldResourceIdLib.encode({typeId: RESOURCE_SYSTEM, namespace: "Gold", name: "GoldToken"});
+
+ resourceIds.characterSystemId =
+ WorldResourceIdLib.encode({typeId: RESOURCE_SYSTEM, namespace: "UD", name: "CharacterSystem"});
+
+ resourceIds.erc721NamespaceId = WorldResourceIdLib.encodeNamespace(CHARACTERS_NAMESPACE);
+
+ resourceIds.erc721SystemId =
+ WorldResourceIdLib.encode({typeId: RESOURCE_SYSTEM, namespace: "Characters", name: "ERC721System"});
+ resourceIds.combatSystemId =
+ WorldResourceIdLib.encode({typeId: RESOURCE_SYSTEM, namespace: "UD", name: "CombatSystem"});
+ resourceIds.erc1155SystemId = _erc1155SystemId(ITEMS_NAMESPACE);
+ resourceIds.erc1155NamespaceId = WorldResourceIdLib.encodeNamespace(ITEMS_NAMESPACE);
+ resourceIds.itemsSystemId =
+ WorldResourceIdLib.encode({typeId: RESOURCE_SYSTEM, namespace: "UD", name: "ItemsSystem"});
+ }
+
+ address characterSystemAddress = Systems.getSystem(resourceIds.characterSystemId);
+
+ System goldSystemContract = new ERC20System();
+
+ world.registerSystem(resourceIds.erc20SystemId, goldSystemContract, true);
+
+ IWorld(worldAddress).grantAccess(resourceIds.erc20NamespaceId, worldAddress);
+ IWorld(worldAddress).registerFunctionSelector(resourceIds.erc20SystemId, "mint(address,uint256)");
+
+ world.transferOwnership(resourceIds.erc20NamespaceId, address(characterSystemAddress));
+
+ System systemContract = new ERC721System();
+ world.registerSystem(resourceIds.erc721SystemId, systemContract, true);
+
+ NoTransferHook characterHook = new NoTransferHook();
+
+ world.registerSystemHook(resourceIds.erc721SystemId, characterHook, BEFORE_CALL_SYSTEM);
+
+ // Transfer characters namespace to World
+ world.grantAccess(resourceIds.erc721SystemId, worldAddress);
+ world.grantAccess(resourceIds.erc721SystemId, characterSystemAddress);
+ world.transferOwnership(resourceIds.erc721NamespaceId, characterSystemAddress);
+
+ address items = _deployErc1155(world, ITEMS_NAMESPACE);
+ UltimateDominionConfig.setItems(address(items));
+ //allow entropy system to call callback on Combat system
+ world.grantAccess(resourceIds.combatSystemId, UltimateDominionConfig.getEntropy());
+ _createStarterItems();
+ _createMonsters();
+ setLevels();
+ vm.stopBroadcast();
+ }
+
+ function _deployErc1155(IWorld _world, bytes14 itemsNamespace) internal returns (address) {
+ IERC1155 _items = registerERC1155(_world, itemsNamespace, "test_Items_uri/");
+
+ // ERC1155System erc1155System = new ERC1155System();
+ address itemsSystemAddress = Systems.getSystem(resourceIds.itemsSystemId);
+
+ // _world.registerSystem(resourceIds.erc1155SystemId, erc1155System, false);
+ _world.grantAccess(resourceIds.erc1155SystemId, worldAddress);
+ world.transferOwnership(resourceIds.erc1155NamespaceId, itemsSystemAddress);
+ return address(_items);
+ }
+
+ function _addRngSystem() internal {
+ System rngSystem = new RngSystem();
+
+ resourceIds.rngSystemId = WorldResourceIdLib.encode(RESOURCE_SYSTEM, "", "RngSystem");
+
+ world.registerSystem(resourceIds.rngSystemId, rngSystem, true);
+ world.registerRootFunctionSelector(
+ resourceIds.rngSystemId, "getRng(bytes32,uint8,bytes)", "getRng(bytes32,uint8,bytes)"
+ );
+ world.registerRootFunctionSelector(
+ resourceIds.rngSystemId,
+ "entropyCallback(uint64,address,bytes32)",
+ "entropyCallback(uint64,address,bytes32)"
+ );
+ world.registerRootFunctionSelector(
+ resourceIds.rngSystemId,
+ "_entropyCallback(uint64,address,bytes32)",
+ "_entropyCallback(uint64,address,bytes32)"
+ );
+ world.registerRootFunctionSelector(resourceIds.rngSystemId, "getFee()", "getFee()");
+ world.registerRootFunctionSelector(resourceIds.rngSystemId, "getEntropy()", "getEntropy()");
+ }
+
+ function _createStarterItems() internal {
+ uint8[] memory restrictions = new uint8[](0);
+ WeaponStats memory weaponStats = WeaponStats({
+ minDamage: 1,
+ maxDamage: 4,
+ classRestrictions: restrictions,
+ minLevel: 0,
+ strModifier: 0,
+ agiModifier: 0,
+ intModifier: 0,
+ hitPointModifier: 0
+ });
+
+ uint256 starterItemId =
+ world.UD__createItem(ItemType.Weapon, 10 ether, abi.encode(weaponStats), "starter-weapon-uri/");
+ uint256[] memory itemIds = new uint256[](1);
+ itemIds[0] = starterItemId;
+ uint256[] memory amounts = new uint256[](1);
+ amounts[0] = 1;
+ world.UD__setStarterItems(Classes.Rogue, itemIds, amounts);
+ world.UD__setStarterItems(Classes.Warrior, itemIds, amounts);
+ world.UD__setStarterItems(Classes.Mage, itemIds, amounts);
}
- uint16 height = uint16(10);
- uint16 width = uint16(10);
- MapConfig.set(width, height);
-
- //install puppet
- world.installModule(new PuppetModule(), new bytes(0));
-
- _addRngSystem();
-
- // install gold module
- IERC20Mintable goldToken = registerERC20(
- world,
- GOLD_NAMESPACE,
- ERC20MetadataData({ decimals: 18, name: "GoldToken", symbol: unicode"🜚" })
- );
-
- UltimateDominionConfig.setGoldToken(address(goldToken));
-
- // characters
- IERC721Mintable characters = registerERC721(
- world,
- CHARACTERS_NAMESPACE,
- ERC721MetadataData({ name: ERC721_NAME, symbol: ERC721_SYMBOL, baseURI: TOKEN_URI })
- );
-
- UltimateDominionConfig.setCharacterToken(address(characters));
-
- {
- resourceIds.erc20NamespaceId = WorldResourceIdLib.encodeNamespace(GOLD_NAMESPACE);
- resourceIds.erc20SystemId = WorldResourceIdLib.encode({
- typeId: RESOURCE_SYSTEM,
- namespace: "Gold",
- name: "GoldToken"
- });
-
- resourceIds.characterSystemId = WorldResourceIdLib.encode({
- typeId: RESOURCE_SYSTEM,
- namespace: "UD",
- name: "CharacterSystem"
- });
-
- resourceIds.erc721NamespaceId = WorldResourceIdLib.encodeNamespace(CHARACTERS_NAMESPACE);
-
- resourceIds.erc721SystemId = WorldResourceIdLib.encode({
- typeId: RESOURCE_SYSTEM,
- namespace: "Characters",
- name: "ERC721System"
- });
-
- resourceIds.erc1155SystemId = _erc1155SystemId(ITEMS_NAMESPACE);
- resourceIds.erc1155NamespaceId = WorldResourceIdLib.encodeNamespace(ITEMS_NAMESPACE);
- resourceIds.itemsSystemId = WorldResourceIdLib.encode({
- typeId: RESOURCE_SYSTEM,
- namespace: "UD",
- name: "ItemsSystem"
- });
+ function _createMonsters() internal {
+ string memory json = vm.readFile("monsters.json");
+ bytes memory monsterStatsData = vm.parseJson(json, ".monsters");
+
+ MonsterTemplateDetails[] memory monsterTemplateDetails =
+ abi.decode(monsterStatsData, (MonsterTemplateDetails[]));
+
+ for (uint256 i = 0; i < monsterTemplateDetails.length; i++) {
+ MonsterTemplateDetails memory monsterTemplate = monsterTemplateDetails[i];
+
+ MonsterStats memory newMonster = MonsterStats({
+ agility: monsterTemplate.stats.agility,
+ armor: monsterTemplate.stats.armor,
+ class: monsterTemplate.stats.class,
+ experience: monsterTemplate.stats.experience,
+ hitPoints: monsterTemplate.stats.hitPoints,
+ level: monsterTemplate.stats.level,
+ intelligence: monsterTemplate.stats.intelligence,
+ inventory: monsterTemplate.stats.inventory,
+ strength: monsterTemplate.stats.strength
+ });
+
+ world.UD__createMob(MobType.Monster, abi.encode(newMonster), monsterTemplate.metadataUri);
+ }
}
- address characterSystemAddress = Systems.getSystem(resourceIds.characterSystemId);
-
- System goldSystemContract = new ERC20System();
-
- world.registerSystem(resourceIds.erc20SystemId, goldSystemContract, true);
-
- IWorld(worldAddress).grantAccess(resourceIds.erc20NamespaceId, worldAddress);
- IWorld(worldAddress).registerFunctionSelector(resourceIds.erc20SystemId, "mint(address,uint256)");
-
- world.transferOwnership(resourceIds.erc20NamespaceId, address(characterSystemAddress));
-
- System systemContract = new ERC721System();
- world.registerSystem(resourceIds.erc721SystemId, systemContract, true);
-
- NoTransferHook characterHook = new NoTransferHook();
-
- world.registerSystemHook(resourceIds.erc721SystemId, characterHook, BEFORE_CALL_SYSTEM);
-
- // Transfer characters namespace to World
- world.grantAccess(resourceIds.erc721SystemId, worldAddress);
- world.grantAccess(resourceIds.erc721SystemId, characterSystemAddress);
- world.transferOwnership(resourceIds.erc721NamespaceId, characterSystemAddress);
-
- address items = _deployErc1155(world, ITEMS_NAMESPACE);
- UltimateDominionConfig.setItems(address(items));
-
- _createStarterItems();
- _createMonsters();
- setLevels();
- vm.stopBroadcast();
- }
-
- function _deployErc1155(IWorld _world, bytes14 itemsNamespace) internal returns (address) {
- IERC1155 _items = registerERC1155(_world, itemsNamespace, "test_Items_uri/");
-
- // ERC1155System erc1155System = new ERC1155System();
- address itemsSystemAddress = Systems.getSystem(resourceIds.itemsSystemId);
-
- // _world.registerSystem(resourceIds.erc1155SystemId, erc1155System, false);
- _world.grantAccess(resourceIds.erc1155SystemId, worldAddress);
- world.transferOwnership(resourceIds.erc1155NamespaceId, itemsSystemAddress);
- return address(_items);
- }
-
- function _addRngSystem() internal {
- System rngSystem = new RngSystem();
-
- resourceIds.rngSystemId = WorldResourceIdLib.encode(RESOURCE_SYSTEM, "", "RngSystem");
-
- world.registerSystem(resourceIds.rngSystemId, rngSystem, true);
- world.registerRootFunctionSelector(
- resourceIds.rngSystemId,
- "getRng(bytes32,uint8,bytes)",
- "getRng(bytes32,uint8,bytes)"
- );
- world.registerRootFunctionSelector(
- resourceIds.rngSystemId,
- "entropyCallback(uint64,address,bytes32)",
- "entropyCallback(uint64,address,bytes32)"
- );
- world.registerRootFunctionSelector(
- resourceIds.rngSystemId,
- "_entropyCallback(uint64,address,bytes32)",
- "_entropyCallback(uint64,address,bytes32)"
- );
- world.registerRootFunctionSelector(resourceIds.rngSystemId, "getFee()", "getFee()");
- world.registerRootFunctionSelector(resourceIds.rngSystemId, "getEntropy()", "getEntropy()");
- }
-
- function _createStarterItems() internal {
- uint8[] memory restrictions = new uint8[](0);
- WeaponStats memory weaponStats = WeaponStats({
- minDamage: 1,
- maxDamage: 4,
- classRestrictions: restrictions,
- minLevel: 0,
- strModifier: 0,
- agiModifier: 0,
- intModifier: 0,
- hitPointModifier: 0
- });
-
- uint256 starterItemId = world.UD__createItem(
- ItemType.Weapon,
- 10 ether,
- abi.encode(weaponStats),
- "starter-weapon-uri/"
- );
- uint256[] memory itemIds = new uint256[](1);
- itemIds[0] = starterItemId;
- uint256[] memory amounts = new uint256[](1);
- amounts[0] = 1;
- world.UD__setStarterItems(Classes.Rogue, itemIds, amounts);
- world.UD__setStarterItems(Classes.Warrior, itemIds, amounts);
- world.UD__setStarterItems(Classes.Mage, itemIds, amounts);
- }
-
- function _createMonsters() internal {
- string memory json = vm.readFile("monsters.json");
- bytes memory monsterStatsData = vm.parseJson(json, ".monsters");
-
- MonsterTemplateDetails[] memory monsterTemplateDetails = abi.decode(monsterStatsData, (MonsterTemplateDetails[]));
-
- for (uint256 i = 0; i < monsterTemplateDetails.length; i++) {
- MonsterTemplateDetails memory monsterTemplate = monsterTemplateDetails[i];
-
- MonsterStats memory newMonster = MonsterStats({
- agility: monsterTemplate.stats.agility,
- armor: monsterTemplate.stats.armor,
- class: monsterTemplate.stats.class,
- experience: monsterTemplate.stats.experience,
- hitPoints: monsterTemplate.stats.hitPoints,
- level: monsterTemplate.stats.level,
- intelligence: monsterTemplate.stats.intelligence,
- inventory: monsterTemplate.stats.inventory,
- strength: monsterTemplate.stats.strength
- });
-
- world.UD__createMob(MobType.Monster, abi.encode(newMonster), monsterTemplate.metadataUri);
+ function setLevels() internal {
+ Levels.setExperience(1, 300);
+ Levels.setExperience(2, 900);
+ Levels.setExperience(3, 2700);
+ Levels.setExperience(4, 6500);
+ Levels.setExperience(5, 14000);
+ Levels.setExperience(6, 23000);
+ Levels.setExperience(7, 34000);
+ Levels.setExperience(8, 48000);
+ Levels.setExperience(9, 64000);
+ Levels.setExperience(10, 85000);
+ Levels.setExperience(11, 100000);
+ Levels.setExperience(12, 120000);
+ Levels.setExperience(13, 140000);
+ Levels.setExperience(14, 165000);
+ Levels.setExperience(15, 195000);
+ Levels.setExperience(16, 225000);
+ Levels.setExperience(17, 265000);
+ Levels.setExperience(18, 305000);
+ Levels.setExperience(19, 355000);
}
- }
-
- function setLevels() internal {
- Levels.setExperience(1, 300);
- Levels.setExperience(2, 900);
- Levels.setExperience(3, 2700);
- Levels.setExperience(4, 6500);
- Levels.setExperience(5, 14000);
- Levels.setExperience(6, 23000);
- Levels.setExperience(7, 34000);
- Levels.setExperience(8, 48000);
- Levels.setExperience(9, 64000);
- Levels.setExperience(10, 85000);
- Levels.setExperience(11, 100000);
- Levels.setExperience(12, 120000);
- Levels.setExperience(13, 140000);
- Levels.setExperience(14, 165000);
- Levels.setExperience(15, 195000);
- Levels.setExperience(16, 225000);
- Levels.setExperience(17, 265000);
- Levels.setExperience(18, 305000);
- Levels.setExperience(19, 355000);
- }
}
diff --git a/packages/contracts/src/systems/CombatSystem.sol b/packages/contracts/src/systems/CombatSystem.sol
index 5165ba310..526507fea 100644
--- a/packages/contracts/src/systems/CombatSystem.sol
+++ b/packages/contracts/src/systems/CombatSystem.sol
@@ -24,7 +24,7 @@ import {
} from "@codegen/index.sol";
import {RngRequestType, MobType, Alignment, EncounterType} from "@codegen/common.sol";
import {MonsterStats, WeaponStats, NPCStats, Action, PhysicalAttackStats} from "@interfaces/Structs.sol";
-import {_requireOwner} from "../utils.sol";
+import {_requireOwner, _requireAccess} from "../utils.sol";
import {UltimateDominionConfig} from "@codegen/index.sol";
import {IRngSystem} from "../interfaces/IRngSystem.sol";
import {
@@ -151,8 +151,9 @@ contract CombatSystem is System {
}
function executeCombat(uint256 randomNumber, bytes32 encounterId, Action[] memory actions) public {
- // ensure this is an authorised call
- // _requireAccess(address(this), _msgSender());
+ // ensure this is an authorised call from the entropy contract
+ _requireAccess(address(this), _msgSender());
+
//get encounter data
CombatEncounterData memory encounterData = CombatEncounter.get(encounterId);
diff --git a/packages/contracts/worlds.json b/packages/contracts/worlds.json
index 30a593019..a09baf344 100644
--- a/packages/contracts/worlds.json
+++ b/packages/contracts/worlds.json
@@ -1,6 +1,6 @@
{
"31337": {
- "address": "0xa126646aa3e22c4052563f691709e00e700bb49a"
+ "address": "0xa0f55835acb2c9dc2bf51da4d41fed6883208e30"
},
"84532": {
"address": "0x68bc54061d87a87a6d4bd3527430c48a87a5f098",