GameData.sol 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.0;
  3. import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
  4. import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol";
  5. import "@openzeppelin/contracts/utils/Strings.sol";
  6. import "@openzeppelin/contracts/access/Ownable.sol";
  7. contract GameData is ERC1155, Ownable, ERC1155Burnable {
  8. //------------------------------ ERC1155 COLLECTION-------------------------------
  9. uint256 public constant TOURNAMENT_TICKETS = 0;
  10. uint256 public constant SafeCoins = 1;
  11. uint256 public constant PP = 2;
  12. uint256 public constant TOURNAMENT_TROPHIES = 3;
  13. uint256 public nextUserId = 100; //Dynamically change with user count, hence: new id for new player
  14. uint256 public ticketPrice = 0.0001 ether; // Price for each ticket
  15. constructor() ERC1155("http://linode.playpoolstudios.com/begula/nft_data/{id}.json") Ownable(msg.sender){
  16. _mint(msg.sender, TOURNAMENT_TICKETS, 10**27, "");
  17. _mint(msg.sender, SafeCoins, 10**27,"");
  18. _mint(msg.sender, PP, 10**27, "");
  19. _mint(msg.sender, TOURNAMENT_TROPHIES, 36000, "");
  20. }
  21. function buyTickets(uint256 amount) external payable {
  22. require(msg.value >= ticketPrice * amount, "Not enough Ether sent");
  23. //_mint(msg.sender, TOURNAMENT_TICKETS, amount, "");
  24. _safeTransferFrom(owner(), msg.sender, 0, amount, '');
  25. }
  26. function setTicketPrice(uint256 newPrice) public onlyOwner {
  27. ticketPrice = newPrice;
  28. }
  29. function withdraw() external onlyOwner {
  30. payable(owner()).transfer(address(this).balance);
  31. }
  32. function uri(uint256 _tokenid) public pure override returns (string memory) {
  33. return string(abi.encodePacked("http://linode.playpoolstudios.com/begula/nft_data/", Strings.toString(_tokenid), ".json"));
  34. }
  35. //------------------------------Game Management -------------------------------
  36. //-----------setters and getters--------------------/
  37. address public operator = 0x05Ed0E0905979682bBD13A4524B2B1300153847e;
  38. function setOperator(address newOp) external onlyOwner{
  39. operator = newOp;
  40. }
  41. mapping(uint256 => address[]) tournamentParticipants;
  42. function getTournamentParticipants(uint256 tournamentId) public view returns(address[] memory) {
  43. return tournamentParticipants[tournamentId];
  44. }
  45. function getTournamentParticipentsCount(uint256 tournamentId) public view returns(uint256){
  46. return tournamentParticipants[tournamentId].length;
  47. }
  48. uint256[] expiredTournaments;
  49. function getExpiredTournaments() public view returns(uint256[] memory){
  50. return expiredTournaments;
  51. }
  52. mapping(address=> uint256[]) ticketOwnerships;
  53. function getUserTickets(address user) public view returns(uint256[] memory){
  54. return ticketOwnerships[user];
  55. }
  56. //-----------end of Setters and getters----------/
  57. //----------User Management--------------------/
  58. function GetCurrentUserIndex() public view returns(uint256){
  59. return nextUserId;
  60. }
  61. function MintUser(uint256 newUserId,address newUserAddress) public{
  62. require(msg.sender == operator, "Only the operator can do this");
  63. _mint(newUserAddress, newUserId, 1, "");
  64. nextUserId++;
  65. }
  66. //------------------------------/
  67. //----------Tourneys and tickets--------------------/
  68. function useTicket(address user, uint256 tournament_id) public {
  69. require(balanceOf(user, 0) > 0, "Purchase tickets to participate in this");
  70. _burn(user, 0, 1);
  71. tournamentParticipants[tournament_id].push(user);
  72. ticketOwnerships[user].push(tournament_id);
  73. }
  74. function startTournament(uint256 tournament_id) public{
  75. require(msg.sender == operator, "Only the operator can do this");
  76. expiredTournaments.push(tournament_id);
  77. }
  78. //------------------------------/
  79. }