pragma solidity ^0.4.18; library Mob { 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 spawn(Monster storage self, uint32 monsterId, uint32 mobSize, uint8 level, uint dungeonId) public { self.health = 1000; /* _id = monsterId; _mobSize = mobSize; _level = level; _dungeonId = dungeonId; if (monsterId == 1) { createGoblins(); } else if (monsterId == 2) { createSkeletons(); } else if (monsterId == 3) { createSlimes(); } */ } /* function createGoblins() { _monsterType = GameEngine.MonsterType.Goblin; } function createSkeletons() { _monsterType = GameEngine.MonsterType.Skeleton; } function createSlimes() { _monsterType = GameEngine.MonsterType.Slime; } */ } contract Dungeon { using Mob for Mob.Monster; function getMonster(uint32 _mid, uint32 _size, uint8 _level, uint _dId) internal returns (Mob.Monster) { Mob.Monster monster; monster.spawn(_mid, _size, _level, _dId); return monster; } function doSomething(uint dungeonBits) public view returns (uint) { Mob.Monster memory monster = getMonster(0, 1, 0, 1); return monster.health; } } 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