@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 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 5 minutes # player can do only one action per turn actions triggered_by: interval, at: "*/5 * * * *" do current_turn = State.get("turn",1) State.set("turn", current_turn + 1 ) end # resurrect all archmon every hour actions triggered_by: interval, at: "0 * * * *" do current_rez_round = State.get("rez_round",1) State.set("rez_round", current_rez_round + 1) end condition triggered_by: transaction, on: add_player(), as: [ content: ( player = get_player(Chain.get_genesis_address(transaction.address)) player == nil ) ] actions triggered_by: transaction, on: add_player() do player_genesis_address_hex = 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), consumed_rez_round: State.get("rez_round",1), consumed_turn: State.get("turn",1) - 1 , last_action: nil, archmon: archmon ] players = State.get("players", Map.new()) players = Map.set(players,player_genesis_address_hex, player) State.set("players",players) end #player_attacker = get_player(Chain.get_genesis_address(transaction.address)) #player_defender = get_player(Chain.get_genesis_address(player_address)) #player_attacker != nil && player_defender != nil && !player_attacker.archmon.is_ko #&& !player_defender.archmon.is_ko #&& player_attacker.action_points > 0 condition triggered_by: transaction, on: attack(player_address), as: [ content: ( player_attacker = get_player(Chain.get_genesis_address(transaction.address)) player_defender = get_player(Chain.get_genesis_address(String.to_hex(player_address))) player_attacker != nil && player_defender != nil ) ] actions triggered_by: transaction, on: attack(player_address) do players = State.get("players") player_raw_transaction_address = transaction.address player_raw_genesis_address = Chain.get_genesis_address(transaction.address) player_attacker_previous_address = Chain.get_previous_address(transaction) player_attacker_genesis_address_hex = Chain.get_genesis_address(player_attacker_previous_address) player_defender_genesis_address_hex = Chain.get_genesis_address(String.to_hex(player_address)) player_defender_without_hex = Chain.get_genesis_address(player_address) player_attacker = Map.get(players,player_attacker_genesis_address_hex) player_defender = Map.get(players,player_defender_genesis_address_hex) attacker_power = player_attacker.archmon.power defender_health = player_defender.archmon.health - attacker_power action = 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", target: player_defender_genesis_address_hex ] else defender_archmon = Map.set(defender_archmon,"health", defender_health) action = [ code: "hit", target: player_defender_genesis_address_hex ] end 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) players = Map.set(players,player_attacker_genesis_address_hex, player_attacker) players = Map.set(players,player_defender_genesis_address_hex, player_defender) State.set("players", players) Contract.set_content(Json.to_string(action)) #Contract.set_content("attack done to : #{player_address},#{player_raw_transaction_address},#{player_raw_genesis_address},#{player_defender_without_hex},#{Json.to_string(player_attacker)}") end condition triggered_by: transaction, on: feed(), as: [ content: ( player = get_player(Chain.get_genesis_address(transaction.address)) player != nil && !player.archmon.is_ko && player.action_points > 0 ) ] actions triggered_by: transaction, on: feed() do players = State.get("players") player_genesis_address_hex = String.to_hex(Chain.get_genesis_address(transaction.address)) player = Map.get(players,player_genesis_address_hex) archmon = player.archmon xp_from_feed = 20 xp_after_feed = archmon.xp + xp_from_feed xp_to_next_level = get_xp_to_next_level(current_level) 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 ) else archmon = Map.set(archmon,"xp", xp_after_feed) end action = [ code: "feed", target: player_genesis_address_hex ] player = Map.set(player,"last_action", action) player = Map.set(player,"action_points", player.action_points - 1) player = Map.set(player,"archmon", archmon) players = Map.set(players,player_genesis_address_hex,player) State.set("players", players) Contract.set_content(Json.to_string(action)) end condition triggered_by: transaction, on: heal(), as: [ content: ( player = get_player(Chain.get_genesis_address(transaction.address)) player != nil && !player.archmon.is_ko && player.action_points > 0 ) ] actions triggered_by: transaction, on: heal() do players = State.get("players") player_genesis_address_hex = String.to_hex(Chain.get_genesis_address(transaction.address)) player = Map.get(players,player_genesis_address_hex) archmon = player.archmon if archmon.health + 2 < archmon.base_health do archmon = Map.set(archmon,"health", archmon.health + 2) else archmon = Map.set(archmon,"health", archmon.base_health) end action = [ code: "heal", target: player_genesis_address_hex ] player = Map.set(player,"last_action",action) player = Map.set(player,"action_points", player.action_points - 1 ) player = Map.set(player,"archmon",archmon) players = Map.set(players,player_genesis_address_hex,player) State.set("players", players) Contract.set_content(Json.to_string(action)) end condition triggered_by: transaction, on: refrech_action_points(), as: [ content: (player = get_player(Chain.get_genesis_address(transaction.address)) player != nil && player.consumed_day < State.get("day", 1)) ] actions triggered_by: transaction, on: refrech_action_points() do players = State.get("players") player_genesis_address_hex = String.to_hex(Chain.get_genesis_address(transaction.address)) player = Map.get(players,player_genesis_address_hex) player = Map.set(player,"action_points", 10) player = Map.set(player,"consumed_day",State.get("day",1)) players = Map.set(players,player_genesis_address_hex, player) State.set("players", player) end condition triggered_by: transaction, on: resurrect(), as: [ content: ( player = get_player(Chain.get_genesis_address(transaction.address)) player != nil && player.archmon.is_ko && player.consumed_rez_round < State.get("rez_round",1) ) ] actions triggered_by: transaction, on: resurrect() do players = State.get("players") player_genesis_address_hex = String.to_hex(Chain.get_genesis_address transaction.address) player = Map.get(players,player_genesis_address_hex ) Map.set(player.archmon, "health", player.archmon.base_health) Map.set(player,"consumed_rez_round", State.get("rez_round",1)) Map.set(players,player_genesis_address_hex,player) State.set("players",players) end fun save_action(player,action) do Map.set(player,"last_action",action) 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 + 5) archmon = Map.set(archmon,"base_power", archmon.base_power + 1) archmon = Map.set(archmon,"power", archmon.base_power + 1) 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 Math.pow(current_level, 2) * 10 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 #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_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
Content (0 B)
{ "day": 4, "players": { "00007FF81D78413058B8C9E2799E59F2BE28E3F454767D3DBE479403B40C4DFF5FE9": { "action_points": 10, "archmon": { "base_health": 10, "base_power": 2, "health": 10, "is_ko": false, "level": 1, "power": 2, "xp": 0 }, "consumed_day": 1, "consumed_rez_round": 1, "consumed_turn": 1, "last_action": null } }, "rez_round": 500, "turn": 12194 }
-
Secret shared with 1 key
Encoded secret
6883B4E96FBF5DB69A9A0B5F7B0A18C873B8FBD13DF558D56E68BE972FEEE8336F95793DC4CF0BD861F6D758B39A0E60B88650C8FB740C51408986F1
Authorized keys
- 00017877BCF4122095926A49489009649603AB129822A19EF9D573B8FD714911ED7F
Contract recipients (0)
Inputs (0)
Contract inputs (0)
Unspent outputs (0)
Previous public key
00018E5864E3AFAE179159ED317B72BE96F955A4896E7392E908F50E96A9A4CA3058
Previous signature
AA5CD46F792B7906042FB1A560D6E41FE841B3A7F2DD2746FCBAB6E0FA37BB56DF9D250DE4DF31E7A8577D2A96B4BAABA5A2A88B0D3F1A1CB48C52B7EE984900
Origin signature
3044022062EAB43E092953807BFCF7DE97E87DBA39B905C8259CE451D78C3DD7DE866718022076D8C1AE2C6396C0880A5B0D978A6D16EED7B69EDDF8D2754275802312F46673
Proof of work
01020451684966573439C38DA99334546FBBDE4A6D96A50B4A4ECBB6572CDBED023F079607407E254421D1779525D11C60D55684F0B403B93B95823554E29D1E2CDB16
Proof of integrity
0054A8DE87C12CBFA38E4A87FB7E4FFE61BE626CA25359A8D489A080347F8A1CF7
Coordinator signature
122766270C6072658BEA1687FEF929936592979BC567A49C06A64D79C95A4BA0705A49057FD1EB3D9AAB3B1769E932CC8E18C2826F41CE03A24C8E7AAF284A05
Validator #1 public key
000134C0EC1A10E466EAEF43BF20464C614B4FB1D4E7BD8FD72F107D756638FE43AB
Validator #1 signature
9FA27FC7935FE97B964CE1A9D109BE883DBEC2CCA84DBD648ADB6BC0EF3155F98D8CE29C440A0F4FB41867E35B2157DDD5D51394CDE9C3B2F7DA849DCFE15200
Validator #2 public key
0001118FF200888730B2963590093B3E384A49F58832314D00A9E65E07505DBBC73E
Validator #2 signature
233F826C839F673E5D3A49E64FCC2EE31A1CB8DA9F3EB4AEEB29DEA68CBEE0EAA15FC709D71C2974A320EBACD4D9DD86AE5BFFE1C68EE87D4065589C1C284003