@version 1 # Battlechain : Decentralized turn based battle game # max players number : 1000 # reset action points daily at midnight # action points can be used for : attack , heal , feed and many more coming ... # the reset is read and consumed when player do their first resfresh action of the day ( new day find) actions triggered_by: interval, at: "0 0 * * *" do current_day = State.get("day",1) State.set("day", current_day + 1 ) end # end turn every 30 minutes # player can do only one action per turn actions triggered_by: interval, at: "*/30 * * * *" do current_turn = State.get("turn",1) State.set("turn", current_turn + 1 ) end # player can resurrect their archmon every 12 hours actions triggered_by: interval, at: "0 */12 * * *" do current_round = State.get("round",1) State.set("round", current_round + 1) end condition triggered_by: transaction, on: add_player(), as: [ content: ( player_previous_address = Chain.get_previous_address(transaction) player = get_player(Chain.get_genesis_address(player_previous_address)) player == nil ) ] actions triggered_by: transaction, on: add_player() do player_genesis_address = Chain.get_genesis_address(transaction.address) base_health = 10 base_power = 2 archmon = [ level: 1, xp: 0, base_health: base_health, base_power: base_power, health: base_health, power: base_power, is_ko: false ] player = [ action_points: 10, consumed_day: State.get("day",1) - 1, consumed_round: State.get("round",1) - 1, consumed_turn: State.get("turn",1) - 1 , last_action: [version: 0], archmon: archmon ] players = State.get("players", Map.new()) players = Map.set(players,player_genesis_address, player) State.set("players",players) end condition triggered_by: transaction, on: attack(player_address), as: [ content: ( player_attacker_previous_address = Chain.get_previous_address(transaction) player_attacker_genesis_address = Chain.get_genesis_address(player_attacker_previous_address) player_defender_genesis_address = Chain.get_genesis_address(String.to_hex(player_address)) player_attacker = get_player(player_attacker_genesis_address) player_defender = get_player(player_defender_genesis_address) #if player_attacker_genesis_address != player_defender_genesis_address do players_are_known? = player_attacker != nil && player_defender != nil archmons_ko? = !player_attacker.archmon.is_ko && !player_defender.archmon.is_ko players_are_known? && archmons_ko? && player_attacker.action_points > 0 && player.consumed_turn < State.get("turn",1) #else #false #end ) ] actions triggered_by: transaction, on: attack(player_address) do players = State.get("players") player_attacker_previous_address = Chain.get_previous_address(transaction) player_attacker_genesis_address = Chain.get_genesis_address(player_attacker_previous_address) player_defender_genesis_address = Chain.get_genesis_address(String.to_hex(player_address)) player_attacker = Map.get(players,player_attacker_genesis_address) player_defender = Map.get(players,player_defender_genesis_address) attacker_power = player_attacker.archmon.power defender_health = player_defender.archmon.health - attacker_power action_code = nil defender_archmon = player_defender.archmon if defender_health <= 0 do defender_archmon = Map.set(defender_archmon,"health", 0) defender_archmon = Map.set(defender_archmon,"is_ko", true) action_code = "ko" else defender_archmon = Map.set(defender_archmon,"health", defender_health) action_code = "hit" end action = create_action(player_attacker, action_code, player_defender_genesis_address, nil) player_defender = Map.set(player_defender,"archmon",defender_archmon ) player_attacker = Map.set(player_attacker,"last_action",action) player_attacker = Map.set(player_attacker,"action_points", player_attacker.action_points - 1) player_attacker = Map.set(player_attacker,"consumed_turn", State.get("turn",1)) players = Map.set(players,player_attacker_genesis_address, player_attacker) players = Map.set(players,player_defender_genesis_address, player_defender) State.set("players", players) Contract.set_content(Json.to_string(action)) end condition triggered_by: transaction, on: feed(), as: [ content: ( player_previous_address = Chain.get_previous_address(transaction) player_genesis_address = Chain.get_genesis_address(player_previous_address) player = get_player(player_genesis_address) player != nil && !player.archmon.is_ko && player.action_points > 0 && player.consumed_turn < State.get("turn",1) ) ] actions triggered_by: transaction, on: feed() do players = State.get("players") player_previous_address = Chain.get_previous_address(transaction) player_genesis_address = Chain.get_genesis_address(player_previous_address) player = Map.get(players,player_genesis_address) archmon = player.archmon exp_from_feed = 20 xp_after_feed = archmon.xp + exp_from_feed xp_to_next_level = get_xp_to_next_level(archmon.level) message = nil if xp_after_feed >= xp_to_next_level do add_xp = xp_after_feed - xp_to_next_level #level up archmon = level_up(archmon, add_xp ) message ="level up" else archmon = Map.set(archmon,"xp", xp_after_feed) message ="xp up" end action = create_action(player, "feed",player_genesis_address,message) player = Map.set(player,"last_action", action) player = Map.set(player,"action_points", player.action_points - 1) player = Map.set(player,"consumed_turn", State.get("turn",1)) player = Map.set(player,"archmon", archmon) players = Map.set(players,player_genesis_address,player) State.set("players", players) Contract.set_content(Json.to_string(action)) end condition triggered_by: transaction, on: heal(), as: [ content: ( player_previous_address = Chain.get_previous_address(transaction) player_genesis_address = Chain.get_genesis_address(player_previous_address) player = get_player(player_genesis_address) if player != nil && player.action_points > 0 do player.consumed_turn < State.get("turn",1) && !player.archmon.is_ko && player.archmon.health < player.archmon.base_health else false end ) ] actions triggered_by: transaction, on: heal() do players = State.get("players") player_previous_address = Chain.get_previous_address(transaction) player_genesis_address = Chain.get_genesis_address(player_previous_address) player = Map.get(players,player_genesis_address) archmon = player.archmon if archmon.health + archmon.power < archmon.base_health do archmon = Map.set(archmon,"health", archmon.health + archmon.power) else archmon = Map.set(archmon,"health", archmon.base_health) end action = create_action(player, "heal", player_genesis_address, nil) player = Map.set(player,"last_action",action) player = Map.set(player,"action_points", player.action_points - 1 ) player = Map.set(player,"consumed_turn",State.get("turn",1)) player = Map.set(player,"archmon",archmon) players = Map.set(players,player_genesis_address,player) State.set("players", players) Contract.set_content(Json.to_string(action)) end condition triggered_by: transaction, on: refresh_action_points(), as: [ content: ( player_previous_address = Chain.get_previous_address(transaction) player_genesis_address = Chain.get_genesis_address(player_previous_address) player = get_player(player_genesis_address) player != nil && player.consumed_day < State.get("day", 1)) && player.action_points == 0 ] actions triggered_by: transaction, on: refresh_action_points() do players = State.get("players") player_previous_address = Chain.get_previous_address(transaction) player_genesis_address = Chain.get_genesis_address(player_previous_address) player = Map.get(players,player_genesis_address) player = Map.set(player,"action_points", 10) player = Map.set(player,"consumed_day",State.get("day",1)) players = Map.set(players,player_genesis_address, player) State.set("players", players) end condition triggered_by: transaction, on: resurrect(), as: [ content: ( player_previous_address = Chain.get_previous_address(transaction) player_genesis_address = Chain.get_genesis_address(player_previous_address) player = get_player(player_genesis_address) player != nil && player.archmon.is_ko && player.consumed_round < State.get("round",1) ) ] actions triggered_by: transaction, on: resurrect() do players = State.get("players") player_previous_address = Chain.get_previous_address(transaction) player_genesis_address = Chain.get_genesis_address(player_previous_address) player = Map.get(players,player_genesis_address ) archmon = player.archmon archmon = Map.set(archmon, "health", archmon.base_health) archmon = Map.set(archmon, "is_ko", false) player = Map.set(player,"archmon", archmon) player = Map.set(player,"consumed_round", State.get("round",1)) players = Map.set(players,player_genesis_address,player) State.set("players",players) end fun create_action(player,code,target,message) do last_action = Map.get(player,"last_action") action = [ code: code, message: message, version: last_action.version + 1 ] action end fun save_action(player,action) do player = Map.set(player,"last_action",action) player = Map.set(player,"action_points", player.action_points - 1) player end fun level_up(archmon,add_xp) do archmon = Map.set(archmon,"base_health", archmon.base_health + 5) archmon = Map.set(archmon,"health", archmon.base_health) archmon = Map.set(archmon,"base_power", archmon.base_power + 1) archmon = Map.set(archmon,"power", archmon.base_power) archmon = Map.set(archmon,"level", archmon.level + 1) archmon = Map.set(archmon,"xp",add_xp) archmon end fun get_xp_to_next_level(current_level) do current_level * 20 end fun is_known(player_genesis_address) do players = State.get("players", Map.new()) player = Map.get(players, player_genesis_address) player != nil end fun get_player(player_genesis_address) do players = State.get("players", Map.new()) Map.get(players, player_genesis_address, nil) end export fun get_player_info(player_genesis_address) do player_genesis_address = String.to_hex(player_genesis_address) players = State.get("players", Map.new()) Map.get(players, player_genesis_address, nil) end export fun get_archmon_info(player_genesis_address) do player_genesis_address = String.to_hex(player_genesis_address) players = State.get("players") player = Map.get(players, player_genesis_address) archmon = nil if player do archmon = player.archmon end archmon end export fun get_last_action(player_genesis_address) do player_genesis_address = String.to_hex(player_genesis_address) players = State.get("players") player = Map.get(players, player_genesis_address) last_action = nil if player do last_action = player.last_action end last_action end export fun get_turn() do State.get("turn",1) end export fun get_round() do State.get("round",1) end export fun get_day() do State.get("day",1) end
Content (0 B)
{ "day": 8, "players": { "00000ADB339FE21E5B7D58B967182B43603C3B26C4452B5EBA6EF6E9C99C54231EEC": { "action_points": 10, "archmon": { "base_health": 10, "base_power": 2, "health": 10, "is_ko": false, "level": 1, "power": 2, "xp": 0 }, "consumed_day": 0, "consumed_round": 0, "consumed_turn": 1, "last_action": { "version": 0 } }, "00007FF81D78413058B8C9E2799E59F2BE28E3F454767D3DBE479403B40C4DFF5FE9": { "action_points": 10, "archmon": { "base_health": 10, "base_power": 2, "health": 10, "is_ko": false, "level": 1, "power": 2, "xp": 0 }, "consumed_day": 0, "consumed_round": 0, "consumed_turn": 0, "last_action": { "version": 0 } } }, "round": 47, "turn": 2416 }
-
Secret shared with 1 key
Encoded secret
674F1E8B4A7836CDD06AC88909361CC1EB6183B1E2B4FEEC002FC1B20A466974BB026DFD3D18CEEF59F588978DE857A14A45F22A60B2B44CFBAAD2EA
Authorized keys
- 00017877BCF4122095926A49489009649603AB129822A19EF9D573B8FD714911ED7F
Contract recipients (0)
Inputs (0)
Contract inputs (0)
Unspent outputs (0)
Previous public key
00017052028ADD426A87732749CBF05D056CE2AF49D309BF4D8063FAF1151512491B
Previous signature
4D57580EB1124D7CE856543B1C66E7493C4B7AB0AB265F542C695A57441907ED0D6D6396F296E524EB1810B4BEE27BB166844DF5292B6A8E69D3FA743D4CEF01
Origin signature
30450221008D521026B1D4F39057433A0959739649B0B14587110B7B61DB90A011BE1ABB430220418CBDA828204DAE4AFA09C6AAB761718D8D8D486870CD7256629287828123AF
Proof of work
010204D6052E0C6CA9244CDE5F3D664296BDFBA0090B330404C3C16B098758F27965DFEC0D3F25D1365F389C2B6C516195552F8779DEE0796C8C33F1A9C0404F4E3381
Proof of integrity
00C92F863811FB79524C8EC95A5B47766734432516E8E715E3AD66FB6E81D7F223
Coordinator signature
B42A254FF95B665D295C0C6A7271B694140206C5793C3DB0C0E2E123CA35604BFAC47F83327E2E42B95852A504DF1DF7AE1A6BD097D4F8747905EE8A9897FC0F
Validator #1 public key
0001118FF200888730B2963590093B3E384A49F58832314D00A9E65E07505DBBC73E
Validator #1 signature
ECB95BAB41720119E2DD1BC4A0473DCC9AE11316FF3E55D6085736326689E068B66FC315E93547EE17352061FE50A865285DAD7CAE4924CC4F822013CD97670F
Validator #2 public key
000134C0EC1A10E466EAEF43BF20464C614B4FB1D4E7BD8FD72F107D756638FE43AB
Validator #2 signature
559B812DF08C1406A0CA06BD065036C14DE5E21F2E38C513E55DC6F954B7AE0867AC71A1077AE55B37963554B8ADE0D86D8E180EF416921C5B638FF32D1A0D05