estructuras, asignaciones y enumeraciones. ¿Cómo hacer que funcionen juntos?

Tengo este código. Mi pregunta se refiere a las variables de estructura weapons, armour, &stats

enum Armour {Chest, Helm, Boots, Leggings, Gloves, Shield} 
enum Weapon {Sword, Axe, Wand, Gun, Hammer, Fist}

struct Statistics { uint16 testing; }

struct Character {string name;
                  uint dna;
                  mapping (uint => Statistics) stats; 
                  mapping (uint => Weapon[10]) weapons; 
                  Armour[10] armour;                  
    }

Character[] public characters;
Armour[10] armourTest;
Weapon[10] weaponsTest;

No veo mucho http://solidity.readthedocs.io/en/v0.4.21/types.html#enumssobre matrices de enumeración y asignaciones de enumeraciones como valores de matriz.

¿Cómo puedo usar variables de estructura weapons, armoury statsdespués de haber insertado un carácter en la variable pública characters?

Respuestas (1)

Este es un fragmento muy abreviado para darle algunas ideas. Es posible que esté buscando un modelo relacional con más características completas como el que se describe aquí: https://medium.com/@robhitchens/enforcing-referential-integrity-in-ethereum-smart-contracts-a9ab1427ff42

pragma solidity ^0.4.19;

contract RPG {
    enum Armor {Chest, Helm, Boots, Leggings, Gloves, Shield} 
    enum Weapon {Sword, Axe, Wand, Gun, Hammer, Fist}

    struct CharacterStruct {string name;
                      bool isCharacter;
                      uint dna;
                      Armor[] armors; 
                      Weapon[] weapons;                  
        }

    mapping(address => CharacterStruct) public characterStructs;
    address[] public characters;

    modifier onlyIfRegistered() {
        require(characterStructs[msg.sender].isCharacter);
        _;
    }

    function register() public returns(bool success) {
        require(!characterStructs[msg.sender].isCharacter);
        characters.push(msg.sender);
        characterStructs[msg.sender].isCharacter = true;
        return true;
    }

    function addArmor(Armor a) public onlyIfRegistered returns(bool success) {
        characterStructs[msg.sender].armors.push(a);
        return true;
    }

    function getArmor(address player, uint row) public view returns(Armor armor) {
        return characterStructs[player].armors[row];
    }

}

Espero eso ayude.

¿ Cómo llamas a addArmor()la función? Me gusta: addArmor('Chest')o addArmor(0)@Rob Hitchens - B9lab
El ejemplo usa enumfor, Armorpor lo que la entrada sería uint8(0 para 'Cofre', 1 para Helm, 2 para Botas, etc. La sintaxis depende de su interfaz. En JS con Truffle, myRPGInstance.addArmor(0)};`
Lo tengo, así que addArmor(<uint8>)será la forma correcta de llamarlo.