来喝一杯吧,赏金猎人!

lordless-floor
lordless-tavern
lordless-tavern
lordless-tavern
lordless-tavern
lordless-tavern
lordless-tavern
lordless-tavern
lordless-tavern
lordless-tavern
lordless-circlelordless-circlelordless-circle

角色

无主之城是一款让你可以经营自己酒馆的虚拟游戏。
在无主之城中,你可以招募赏金猎人,为他们派发任务以及获取奖励。你也完全可以成为一名赏金猎人来完成任务来获取奖励。

  • Quest-host
    悬赏者

    悬赏者发布任务来完成预期目标。在无主之城世界中悬赏者是所有任务的发布者,也是所有任务奖励的提供者。

  • tavern-master
    酒馆掌柜

    拥有某个酒馆的用户即为掌柜。一旦你成为掌柜,就会拥有酒馆的买卖权限,同时也拥有酒馆任务奖励的分成权限。

  • Bounty-hunter
    赏金猎人

    赏金猎人可以在不同的酒馆中领取悬赏者发布的任务。当把任务完成后,赏金猎人将会得到相应的奖励。

交易在OpenSea

OpenSea 是全世界最大的数字收藏品交易市场。在这里你可以你可以购买、出售和发现独一无二的数字资产。

  • tavern popularity image
    tavern curve
    tavern preview

    #800

    Shanghai Circus World

     121.446536, 31.2797366

    0x35d4**09
    • 710

      Max AP

    • 84

      Level

    • 53

      Hunters

  • tavern popularity image
    tavern curve
    tavern preview

    #1800

    Shanghai Art Museum

     121.490278, 31.1864101

    0x35d4**09
    • 607

      Max AP

    • 71

      Level

    • 50

      Hunters

  • tavern popularity image
    tavern curve
    tavern preview

    #0

    Oriental Pearl Tower

     121.495376, 31.2416800

    0x35d4**09
    • 1,121

      Max AP

    • 131

      Level

    • 496

      Hunters

  • tavern popularity image
    tavern curve
    tavern preview

    #101

    Jing'an Temple

     12144.0712, 31.2253722

    0x35d4**09
    • 1,044

      Max AP

    • 122

      Level

    • 148

      Hunters

  • tavern popularity image
    tavern curve
    tavern preview

    #100

    Bund 27, The House of Roosevelt

     121.485552, 31.2423914

    0x35d4**09
    • 949

      Max AP

    • 111

      Level

    • 107

      Hunters

  • tavern popularity image
    tavern curve
    tavern preview

    #801

    Xujiahui Saint Ignatius Cathedral

     121.431471, 31.1930143

    0x35d4**09
    • 684

      Max AP

    • 80

      Level

    • 48

      Hunters

  • tavern popularity image
    tavern curve
    tavern preview

    #1801

    Hengshan Moller Villa Hotel Shanghai

     121.451688, 31.2248880

    0x1a08**ed
    • 581

      Max AP

    • 68

      Level

    • 47

      Hunters

  • tavern popularity image
    tavern curve
    tavern preview

    #802

    City God Temple of Shanghai

     121.488054, 31.2277205

    0x35d4**09
    • 616

      Max AP

    • 73

      Level

    • 34

      Hunters

智能合约

无主之城整体构建在以太坊上。所有智能合约互相关联形成整体的去中心化体系。

    pragma solidity ^0.4.24;


    import "../lib/SafeMath.sol";
    import "./ITavern.sol";

    contract TavernBase is ITavern {
      using SafeMath for *;

      struct Tavern {
        uint256 initAt; // The time of tavern init
        int longitude; // The longitude of tavern
        int latitude; // The latitude of tavern
        uint8 popularity; // The popularity of tavern
        uint256 activeness; // The activeness of tavern
      }

      uint8 public constant decimals = 16; // longitude latitude decimals

      mapping(uint256 => Tavern) internal tokenTaverns;

      function _tavern(uint256 _tokenId) internal view returns (uint256, int, int, uint8, uint256) {
        Tavern storage tavern = tokenTaverns[_tokenId];
        return (
          tavern.initAt,
          tavern.longitude,
          tavern.latitude,
          tavern.popularity,
          tavern.activeness
        );
      }

      function _isBuilt(uint256 _tokenId) internal view returns (bool){
        Tavern storage tavern = tokenTaverns[_tokenId];
        return (tavern.initAt > 0);
      }

      function _build(
        uint256 _tokenId,
        int _longitude,
        int _latitude,
        uint8 _popularity
        ) internal {

        // Check whether tokenid has been initialized
        require(!_isBuilt(_tokenId));
        require(_isLongitude(_longitude));
        require(_isLatitude(_latitude));
        require(_popularity != 0);
        uint256 time = block.timestamp;
        Tavern memory tavern = Tavern(
          time, _longitude, _latitude, _popularity, uint256(0)
        );
        tokenTaverns[_tokenId] = tavern;
        emit Build(time, _tokenId, _longitude, _latitude, _popularity);
      }

      function _batchBuild(
        uint256[] _tokenIds,
        int[] _longitudes,
        int[] _latitudes,
        uint8[] _popularitys
        ) internal {
        uint256 i = 0;
        while (i < _tokenIds.length) {
          _build(
            _tokenIds[i],
            _longitudes[i],
            _latitudes[i],
            _popularitys[i]
          );
          i += 1;
        }


      }

      function _activenessUpgrade(uint256 _tokenId, uint256 _deltaActiveness) internal {
        require(_isBuilt(_tokenId));
        Tavern storage tavern = tokenTaverns[_tokenId];
        uint256 oActiveness = tavern.activeness;
        uint256 newActiveness = tavern.activeness.add(_deltaActiveness);
        tavern.activeness = newActiveness;
        tokenTaverns[_tokenId] = tavern;
        emit ActivenessUpgrade(_tokenId, oActiveness, newActiveness);
      }
      function _batchActivenessUpgrade(uint256[] _tokenIds, uint256[] __deltaActiveness) internal {
        uint256 i = 0;
        while (i < _tokenIds.length) {
          _activenessUpgrade(_tokenIds[i], __deltaActiveness[i]);
          i += 1;
        }
      }

      function _popularitySetting(uint256 _tokenId, uint8 _popularity) internal {
        require(_isBuilt(_tokenId));
        uint8 oPopularity = tokenTaverns[_tokenId].popularity;
        tokenTaverns[_tokenId].popularity = _popularity;
        emit PopularitySetting(_tokenId, oPopularity, _popularity);
      }

      function _batchPopularitySetting(uint256[] _tokenIds, uint8[] _popularitys) internal {
        uint256 i = 0;
        while (i < _tokenIds.length) {
          _popularitySetting(_tokenIds[i], _popularitys[i]);
          i += 1;
        }
      }

      function _isLongitude (
        int _param
      ) internal pure returns (bool){

        return(
          _param <= 180 * int(10 ** uint256(decimals))&&
          _param >= -180 * int(10 ** uint256(decimals))
          );
      }

      function _isLatitude (
        int _param
      ) internal pure returns (bool){
        return(
          _param <= 90 * int(10 ** uint256(decimals))&&
          _param >= -90 * int(10 ** uint256(decimals))
          );
        }
      }
    
  

合作伙伴