// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol"; import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract GameData is ERC1155, Ownable, ERC1155Burnable { string public name = "Sekret Game Launcher"; string public symbol = "SGL"; //------------------------------ ERC1155 COLLECTION------------------------------- uint256 public constant TOURNAMENT_TICKETS = 0; uint256 public constant SafeCoins = 1; uint256 public constant PP = 2; uint256 public constant TOURNAMENT_TROPHIES = 3; uint256 public nextUserId = 100; //Dynamically change with user count, hence: new id for new player uint256 public ticketPrice = 0.0001 ether; // Price for each ticket constructor() ERC1155("http://linode.playpoolstudios.com/begula/nft_data/{id}.json") Ownable(msg.sender){ _mint(msg.sender, TOURNAMENT_TICKETS, 10**27, ""); _mint(msg.sender, SafeCoins, 10**27,""); _mint(msg.sender, PP, 10**27, ""); _mint(msg.sender, TOURNAMENT_TROPHIES, 36000, ""); } function buyTickets(uint256 amount) external payable { require(msg.value >= ticketPrice * amount, "Not enough Ether sent"); //_mint(msg.sender, TOURNAMENT_TICKETS, amount, ""); _safeTransferFrom(owner(), msg.sender, 0, amount, ''); } function setTicketPrice(uint256 newPrice) public onlyOwner { ticketPrice = newPrice; } function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } function uri(uint256 _tokenid) public pure override returns (string memory) { return string(abi.encodePacked("http://linode.playpoolstudios.com/begula/nft_data/", Strings.toString(_tokenid), ".json")); } function setCollectionName(string memory _name) public{ name= _name; } //------------------------------Game Management ------------------------------- //-----------setters and getters--------------------/ address public operator = 0x05Ed0E0905979682bBD13A4524B2B1300153847e; function setOperator(address newOp) external onlyOwner{ operator = newOp; } mapping(uint256 => address[]) tournamentParticipants; function getTournamentParticipants(uint256 tournamentId) public view returns(address[] memory) { return tournamentParticipants[tournamentId]; } function getTournamentParticipentsCount(uint256 tournamentId) public view returns(uint256){ return tournamentParticipants[tournamentId].length; } uint256[] expiredTournaments; function getExpiredTournaments() public view returns(uint256[] memory){ return expiredTournaments; } mapping(address=> uint256[]) ticketOwnerships; function getUserTickets(address user) public view returns(uint256[] memory){ return ticketOwnerships[user]; } //-----------end of Setters and getters----------/ //----------User Management--------------------/ uint256[] public userMintedIds; function GetUserMintedIds() public view returns(uint256[] memory){ return userMintedIds; } function GetCurrentUserIndex() public view returns(uint256){ return nextUserId; } function MintUser(uint256 newUserId,address newUserAddress) public{ require(msg.sender == operator || msg.sender == owner(), "Only the operator can do this"); _mint(newUserAddress, newUserId, 1, ""); userMintedIds.push(newUserId); nextUserId++; } //------------------------------/ //----------Tourneys and tickets--------------------/ function useTicket(address user, uint256 tournament_id) public { require(balanceOf(user, 0) > 0, "Purchase tickets to participate in this"); _burn(user, 0, 1); tournamentParticipants[tournament_id].push(user); ticketOwnerships[user].push(tournament_id); } function startTournament(uint256 tournament_id) public{ require(msg.sender == operator , "Only the operator can do this"); expiredTournaments.push(tournament_id); } //------------------------------/ }