pragma solidity ^0.4.18; contract DamageCalculator { struct MonsterDamage { GameEngine.DamageType damageType; uint amount; } struct Monster { uint32 id; uint32 mobSize; GameEngine.MonsterType monsterType; uint8 level; uint dungeonId; uint health; uint experience; // monsters can have up to 3 attacks MonsterDamage attack1; MonsterDamage attack2; MonsterDamage attack3; // default damage multiplier uint defenseSlash; uint defenseBash; uint defensePierce; uint defenseFire; uint defenseIce; uint defenseLightning; } function canFinishDungeon(uint keyId) public pure returns (uint, uint) { Monster[] memory mobs = new Monster[](3); // get dungeon from key // get hero from key // get gear from key // spawn all of the monsters (this would normally come from the dungeon bits) mobs[0] = spawn(1, 3, 1); mobs[1] = spawn(2, 3, 1); return ( mobs[0].attack1.amount, mobs[1].attack1.amount ); } function spawn(uint32 monsterId, uint32 mobSize, uint8 level) pure internal returns (Monster) { Monster memory m; m.id = monsterId; m.mobSize = mobSize; m.level = level; if (monsterId == uint32(GameEngine.MonsterType.Goblin)) { createGoblins(m); } else if (monsterId == uint32(GameEngine.MonsterType.Skeleton)) { createSkeletons(m); } else if (monsterId == uint32(GameEngine.MonsterType.Slime)) { createSlimes(m); } return m; } function createGoblins(Monster m) pure internal { m.monsterType = GameEngine.MonsterType.Goblin; m.attack1 = MonsterDamage(GameEngine.DamageType.Slash, 10000); } function createSkeletons(Monster m) pure internal { m.monsterType = GameEngine.MonsterType.Skeleton; m.attack1 = MonsterDamage(GameEngine.DamageType.Bash, 10000); } function createSlimes(Monster m) pure internal { m.monsterType = GameEngine.MonsterType.Slime; m.attack1 = MonsterDamage(GameEngine.DamageType.Bash, 20000); } } contract GameEngine { enum DamageType { Slash, Bash, Pierce, Fire, Ice, Lightning } enum ItemAffix { BonusDamage, AttackSpeed, Strength, Dexterity, Vitality, LifeRegeneration, MagicFind, GoldFind, ExperienceFixed, ExperiencePercent, CriticalChance, CriticalDamage, FireDamage, FireResistance, IceDamage, IceResistance, LightnintDamage, LightnintResistance, BashDamagePercent, PierceDamagePercent, SlashDamagePercent, BossDamagePercent, RequiredStrengthReduction, RequiredDexterityReduction } enum DungeonAffix { BonusExperiencePercent, BonusGoldPercent, Orbs, BonusFirePercent, BonusIcePercent, BonusLightnintPercent, BonusBashDamagePercent, BonusSlashDamagePercent, BonusPierceDamagePercent } enum MonsterType { Goblin, Slime, Skeleton } }
0.4.18