Pos Lua >> Moon 29 1:[ local mod = ... ] >> 3:[ mod = ... ] 39 2:[ local connect = require("connect") ] >> 4:[ connect = require "connect" ] 67 3:[ local lobby = require("lobby") ] >> 5:[ lobby = require "lobby" ] 91 4:[ local joined = require("joined") ] >> 6:[ joined = require "joined" ] 117 5:[ local party = require("party") ] >> 7:[ party = require "party" ] 141 6:[ local char = require("char") ] >> 8:[ char = require "char" ] 184 8:[ Character = char.Character ] >> 9:[ import Character from char ] 207 10:[ Enemy = char.Enemy ] >> 10:[ import Enemy from char ] 230 12:[ Party = party.Party ] >> 11:[ import Party from party ] 237 13:[ local player = require("player") ] >> 12:[ player = require "player" ] 287 15:[ RemotePlayer = player.RemotePlayer ] >> 13:[ import RemotePlayer from player ] 318 17:[ LocalPlayer = player.LocalPlayer ] >> 14:[ import LocalPlayer from player ] 326 18:[ local main = require("main") ] >> 15:[ main = require "main" ] 348 19:[ local room = require("room") ] >> 16:[ room = require "room" ] 386 21:[ Room = room.Room ] >> 17:[ import Room from room ] 413 23:[ LobbyRoom = room.LobbyRoom ] >> 18:[ import LobbyRoom from room ] 419 24:[ local ui = require("ui") ] >> 19:[ ui = require "ui" ] 437 25:[ local ability = require("ability_reg") ] >> 20:[ ability = require "ability_reg" ] 1117 31:[ local peer = msg.peer ] >> 40:[ peer = msg.peer ] 1135 32:[ self.players[peer] = RemotePlayer(peer, nil, char.classes.Tumbler) ] >> 41:[ @players[peer] = RemotePlayer(peer,nil,char.classes.Tumbler) ] 1198 33:[ am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 42:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_player_joined",uname:peer,class:"Tumbler"}))) ] 1262 34:[ msg = "info_player_joined", ] >> 42:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_player_joined",uname:peer,class:"Tumbler"}))) ] 1289 35:[ uname = peer, ] >> 42:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_player_joined",uname:peer,class:"Tumbler"}))) ] 1300 36:[ class = "Tumbler" ] >> 42:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_player_joined",uname:peer,class:"Tumbler"}))) ] 1198 37:[ }))) ] >> 42:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_player_joined",uname:peer,class:"Tumbler"}))) ] 1318 38:[ if self.host == nil then ] >> 43:[ if @host == nil ] 1335 39:[ self.host = peer ] >> 44:[ @host = peer ] 1316 40:[ end ] >> 43:[ if @host == nil ] 1382 43:[ if self.game_state == "lobby" then ] >> 46:[ if @game_state == "lobby" ] 1411 44:[ if self.players[msg.peer] then ] >> 47:[ if @players[msg.peer] ] 1435 45:[ self.players[msg.peer]:set_class(char.classes[msg.class]) ] >> 48:[ @players[msg.peer]\set_class(char.classes[msg.class]) ] 1501 47:[ self.players[msg.peer] = RemotePlayer(msg.peer, nil, char.classes[msg.class]) ] >> 50:[ @players[msg.peer] = RemotePlayer(msg.peer,nil,char.classes[msg.class]) ] 1576 49:[ am.eval_js(string.format("GLOBAL.send_message(%q,%q)", msg.peer, am.to_json({ ] >> 51:[ am.eval_js(string.format("GLOBAL.send_message(%q,%q)",msg.peer,am.to_json({msg: "confirm_class_change", class: msg.class}))) ] 1655 50:[ msg = "confirm_class_change", ] >> 51:[ am.eval_js(string.format("GLOBAL.send_message(%q,%q)",msg.peer,am.to_json({msg: "confirm_class_change", class: msg.class}))) ] 1686 51:[ class = msg.class ] >> 51:[ am.eval_js(string.format("GLOBAL.send_message(%q,%q)",msg.peer,am.to_json({msg: "confirm_class_change", class: msg.class}))) ] 1576 52:[ }))) ] >> 51:[ am.eval_js(string.format("GLOBAL.send_message(%q,%q)",msg.peer,am.to_json({msg: "confirm_class_change", class: msg.class}))) ] 1704 53:[ return am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 52:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_class_change",uname:msg.peer,class:msg.class}))) ] 1768 54:[ msg = "info_class_change", ] >> 52:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_class_change",uname:msg.peer,class:msg.class}))) ] 1794 55:[ uname = msg.peer, ] >> 52:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_class_change",uname:msg.peer,class:msg.class}))) ] 1809 56:[ class = msg.class ] >> 52:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_class_change",uname:msg.peer,class:msg.class}))) ] 1704 57:[ }))) ] >> 52:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_class_change",uname:msg.peer,class:msg.class}))) ] 1833 59:[ return am.eval_js(string.format("GLOBAL.send_message(%q,%q)", msg.peer, am.to_json({ ] >> 54:[ am.eval_js(string.format("GLOBAL.send_message(%q,%q)",msg.peer,am.to_json({msg: "deny_class_change", class:@players[msg.peer].class}))) ] 1912 60:[ msg = "deny_class_change", ] >> 54:[ am.eval_js(string.format("GLOBAL.send_message(%q,%q)",msg.peer,am.to_json({msg: "deny_class_change", class:@players[msg.peer].class}))) ] 1940 61:[ class = self.players[msg.peer].class ] >> 54:[ am.eval_js(string.format("GLOBAL.send_message(%q,%q)",msg.peer,am.to_json({msg: "deny_class_change", class:@players[msg.peer].class}))) ] 1833 62:[ }))) ] >> 54:[ am.eval_js(string.format("GLOBAL.send_message(%q,%q)",msg.peer,am.to_json({msg: "deny_class_change", class:@players[msg.peer].class}))) ] 2005 66:[ if msg.peer == self.host and self.game_state == "lobby" then ] >> 56:[ if msg.peer == @host and @game_state == "lobby" ] 2054 67:[ self.player_party = Party() ] >> 57:[ @player_party = Party! ] 2136 68:[ for _, chartbl in pairs(self.players) do ] >> 59:[ for _, chartbl in pairs(@players) ] 2157 69:[ chartbl.position = chartbl.class.default_position ] >> 60:[ chartbl.position = chartbl.class.default_position ] 2211 70:[ chartbl.hp = chartbl.class.default_hp ] >> 61:[ chartbl.hp = chartbl.class.default_hp ] 2253 71:[ self.player_party:add_member(chartbl) ] >> 62:[ @player_party\add_member(chartbl) ] 2119 72:[ end ] >> 59:[ for _, chartbl in pairs(@players) ] 2290 73:[ self:campaign_start() ] >> 63:[ @campaign_start! ] 2310 74:[ return am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 64:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_campaign_start",time_ref:@player_start_time}))) ] 2374 75:[ msg = "info_campaign_start", ] >> 64:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_campaign_start",time_ref:@player_start_time}))) ] 2405 76:[ time_ref = self.player_start_time ] >> 64:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_campaign_start",time_ref:@player_start_time}))) ] 2310 77:[ }))) ] >> 64:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_campaign_start",time_ref:@player_start_time}))) ] 2003 78:[ end ] >> 56:[ if msg.peer == @host and @game_state == "lobby" ] 2451 81:[ self.game_state = "room_entry" ] >> 66:[ @game_state = "room_entry" ] 2481 82:[ self.player_start_time = am.eval_js("new Date().getTime()") ] >> 67:[ @player_start_time = am.eval_js("new Date().getTime()") ] 2540 83:[ room = Room.generate(self.cr) ] >> 68:[ room = Room.generate(@cr) ] 2569 84:[ self.room = room ] >> 69:[ @room = room ] 2585 85:[ self.enemy_party = self:generate_enemies() ] >> 70:[ @enemy_party = @generate_enemies! ] 2622 86:[ self.enemy_party:set_room(room) ] >> 71:[ @enemy_party\set_room(room) ] 2653 87:[ self.player_party:set_room(room) ] >> 72:[ @player_party\set_room(room) ] 2685 88:[ am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 73:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 2754 89:[ msg = "info_enemy_party", ] >> 74:[ msg: "info_enemy_party", ] 2784 90:[ data = self.enemy_party:serialize() ] >> 75:[ data: @enemy_party\serialize! ] 2685 91:[ }))) ] >> 73:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 2820 92:[ room:distribute_party(self.player_party, self.enemy_party) ] >> 77:[ room\distribute_party(@player_party,@enemy_party) ] 2873 93:[ am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 78:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_room",data:room\serialize!,time_ref:@player_start_time}))) ] 2937 94:[ msg = "info_room", ] >> 78:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_room",data:room\serialize!,time_ref:@player_start_time}))) ] 2954 95:[ data = room:serialize(), ] >> 78:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_room",data:room\serialize!,time_ref:@player_start_time}))) ] 2979 96:[ time_ref = self.player_start_time ] >> 78:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_room",data:room\serialize!,time_ref:@player_start_time}))) ] 2873 97:[ }))) ] >> 78:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"info_room",data:room\serialize!,time_ref:@player_start_time}))) ] 3005 98:[ self.game_state = "room_players" ] >> 79:[ @game_state = "room_players" ] 3066 101:[ local player_ser = { } ] >> 82:[ player_ser = {} ] 3105 102:[ for peerid, player in pairs(self.players) do ] >> 83:[ for peerid, player in pairs(@players) ] 3125 103:[ player_ser[peerid] = player:serialize() ] >> 84:[ player_ser[peerid] = player\serialize! ] 3084 104:[ end ] >> 83:[ for peerid, player in pairs(@players) ] 3166 105:[ return am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 85:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"respond_player_list", data:player_ser}))) ] 3230 106:[ msg = "respond_player_list", ] >> 85:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"respond_player_list", data:player_ser}))) ] 3258 107:[ data = player_ser ] >> 85:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"respond_player_list", data:player_ser}))) ] 3166 108:[ }))) ] >> 85:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({msg:"respond_player_list", data:player_ser}))) ] 3298 111:[ if self.game_state == "room_players" then ] >> 87:[ if @game_state == "room_players" ] 3334 112:[ if not self.dead_players[msg.peer] then ] >> 88:[ if not @dead_players[msg.peer] ] 3367 113:[ self.set_actions[msg.peer] = ability[msg.action] ] >> 89:[ @set_actions[msg.peer] = ability[msg.action] ] 3332 114:[ end ] >> 88:[ if not @dead_players[msg.peer] ] 3296 115:[ end ] >> 87:[ if @game_state == "room_players" ] 3428 118:[ local msg = am.eval_js("GLOBAL.get_message()") ] >> 91:[ msg = am.eval_js("GLOBAL.get_message()") ] 3473 119:[ if msg ~= nil then ] >> 92:[ if msg != nil ] 3490 120:[ if msg.msg == "data" then ] >> 93:[ if msg.msg == "data" ] 3513 121:[ local info = am.parse_json(msg.data) ] >> 94:[ info = am.parse_json(msg.data) ] 3548 122:[ info.peer = msg.peer ] >> 95:[ info.peer = msg.peer -- server messages have an extra "peer" field that the client didn't add. ] 3649 123:[ if self[info.msg] then ] >> 96:[ if @[info.msg] ] 3667 124:[ self[info.msg](self, info) ] >> 97:[ @[info.msg](@,info) ] 3701 126:[ print("Failed to find server message handler:", msg, "no handler", info.msg) ] >> 99:[ print("Failed to find server message handler:",msg,"no handler",info.msg) ] 3787 129:[ print("Msg was nil") ] >> 101:[ print("Msg was nil") ] 3471 131:[ end ] >> 92:[ if msg != nil ] 3833 132:[ if self.game_state == "room_players" then ] >> 103:[ if @game_state == "room_players" ] 3869 133:[ if am.eval_js("new Date().getTime()") > self.player_start_time + 6000 then ] >> 104:[ if am.eval_js("new Date().getTime()") > @player_start_time + 6000 ] 3982 134:[ local npc_actions = { } ] >> 106:[ npc_actions = {} ] 4003 135:[ local used_actions = { } ] >> 107:[ used_actions = {} ] 4025 136:[ local party_index = { } ] >> 108:[ party_index = {} ] 4046 137:[ local character_index = { } ] >> 109:[ character_index = {} ] 4088 138:[ for uname, npc in pairs(self.enemy_party.members) do ] >> 110:[ for uname, npc in pairs(@enemy_party.members) ] 4122 139:[ npc_actions[uname] = npc:select_action() ] >> 111:[ npc_actions[uname] = npc\select_action! ] 4167 140:[ table.insert(used_actions, npc_actions[uname]) ] >> 112:[ table.insert(used_actions, npc_actions[uname]) ] 4219 141:[ party_index[npc_actions[uname]] = self.enemy_party ] >> 113:[ party_index[npc_actions[uname]] = @enemy_party ] 4271 142:[ character_index[npc_actions[uname]] = npc ] >> 114:[ character_index[npc_actions[uname]] = npc ] 4071 143:[ end ] >> 110:[ for uname, npc in pairs(@enemy_party.members) ] 4317 144:[ local total_actions = { } ] >> 115:[ total_actions = {} ] 4350 145:[ for k, v in pairs(npc_actions) do ] >> 116:[ for k,v in pairs(npc_actions) ] 4375 146:[ total_actions[k] = v.__name ] >> 117:[ total_actions[k] = v.__name ] 4340 147:[ end ] >> 116:[ for k,v in pairs(npc_actions) ] 4417 148:[ for k, v in pairs(self.set_actions) do ] >> 118:[ for k,v in pairs(@set_actions) ] 4443 149:[ total_actions[k] = v.__name ] >> 119:[ total_actions[k] = v.__name ] 4476 150:[ table.insert(used_actions, v) ] >> 120:[ table.insert(used_actions, v) ] 4511 151:[ party_index[v] = self.player_party ] >> 121:[ party_index[v] = @player_party ] 4547 152:[ character_index[v] = self.player_party:member(k) ] >> 122:[ character_index[v] = @player_party\member(k) ] 4407 153:[ end ] >> 118:[ for k,v in pairs(@set_actions) ] 4649 154:[ table.sort(used_actions, function(a, b) ] >> 124:[ table.sort(used_actions, (a,b) -> ] 4688 155:[ return a.speed < b.speed ] >> 125:[ a.speed < b.speed ] 4649 156:[ end) ] >> 124:[ table.sort(used_actions, (a,b) -> ] 4757 157:[ for k, v in ipairs(used_actions) do ] >> 128:[ for k,v in ipairs(used_actions) ] 4784 158:[ local tchar = character_index[v] ] >> 129:[ tchar = character_index[v] ] 4816 159:[ v.__class.use(self, party_index[v], tchar) ] >> 130:[ v.__class.use(@,party_index[v],tchar) ] 4747 160:[ end ] >> 128:[ for k,v in ipairs(used_actions) ] 4858 161:[ am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 131:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 4928 162:[ msg = "info_actions", ] >> 132:[ msg:"info_actions", ] 4954 163:[ data = total_actions ] >> 133:[ data: total_actions ] 4858 164:[ }))) ] >> 131:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 5012 165:[ self.game_state = "room_battle_animate" ] >> 136:[ @game_state = "room_battle_animate" ] 5052 166:[ self.set_actions = { } ] >> 137:[ @set_actions = {} ] 3867 167:[ end ] >> 104:[ if am.eval_js("new Date().getTime()") > @player_start_time + 6000 ] 3831 168:[ end ] >> 103:[ if @game_state == "room_players" ] 5074 169:[ if self.game_state == "room_battle_animate" then ] >> 138:[ if @game_state == "room_battle_animate" --only exists for 1 tick, calc dammge, check if room is done, check if we're defeated, ect. ] 5207 170:[ local _ = self.calculate_damage ] >> 139:[ @calculate_damage ] 5228 171:[ self.player_start_time = am.eval_js("new Date().getTime()") + 500 ] >> 140:[ @player_start_time = am.eval_js("new Date().getTime()")+500 --500 ms for animations ] 5315 172:[ self.game_state = "room_players" ] >> 141:[ @game_state = "room_players" ] 5347 173:[ am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 142:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 5416 174:[ msg = "info_timeref", ] >> 143:[ msg:"info_timeref", ] 5445 175:[ time_ref = self.player_start_time ] >> 144:[ time_ref:@player_start_time ] 5347 176:[ }))) ] >> 142:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 5475 177:[ local dead_characters = { } ] >> 146:[ dead_characters = {} ] 5517 178:[ for uname, char in pairs(self.player_party.members) do ] >> 147:[ for uname, char in pairs(@player_party.members) ] 5553 179:[ if char.data.hp <= 0 then ] >> 148:[ if char.data.hp <= 0 ] 5577 180:[ table.insert(dead_characters, uname) ] >> 149:[ table.insert(dead_characters,uname) ] 5618 181:[ char:die() ] >> 150:[ char\die! ] 5633 182:[ self.player_party:remove_member(char) ] >> 151:[ @player_party\remove_member(char) ] 5672 183:[ self.dead_players[uname] = true ] >> 152:[ @dead_players[uname] = true ] 5551 184:[ end ] >> 148:[ if char.data.hp <= 0 ] 5499 185:[ end ] >> 147:[ for uname, char in pairs(@player_party.members) ] 5721 186:[ for uname, char in pairs(self.enemy_party.members) do ] >> 153:[ for uname, char in pairs(@enemy_party.members) ] 5756 187:[ if char.data.hp <= 0 then ] >> 154:[ if char.data.hp <= 0 ] 5780 188:[ table.insert(dead_characters, uname) ] >> 155:[ table.insert(dead_characters,uname) ] 5821 189:[ char:die() ] >> 156:[ char\die! ] 5836 190:[ self.enemy_party:remove_member(char) ] >> 157:[ @enemy_party\remove_member(char) ] 5754 191:[ end ] >> 154:[ if char.data.hp <= 0 ] 5703 192:[ end ] >> 153:[ for uname, char in pairs(@enemy_party.members) ] 5872 193:[ am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 158:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 5941 194:[ msg = "info_deaths", ] >> 159:[ msg:"info_deaths", ] 5965 195:[ data = dead_characters ] >> 160:[ data:dead_characters ] 5872 196:[ }))) ] >> 158:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 5994 197:[ if self.player_party:nmembers() == 0 then ] >> 162:[ if @player_party\nmembers! == 0 ] 6028 198:[ self.game_state = "defeat" ] >> 163:[ @game_state = "defeat" ] 6060 199:[ elseif self.enemy_party:nmembers() == 0 then ] >> 164:[ elseif @enemy_party\nmembers! == 0 ] 6093 200:[ am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 165:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 6163 201:[ msg = "info_loot", ] >> 166:[ msg:"info_loot" ] 6189 202:[ time_ref = self.player_start_time ] >> 167:[ time_ref:@player_start_time ] 6093 203:[ }))) ] >> 165:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 6277 204:[ self.player_start_time = am.eval_js("new Date().getTime()") ] >> 170:[ @player_start_time = am.eval_js("new Date().getTime()") ] 6337 205:[ self.game_state = "victory" ] >> 171:[ @game_state = "victory" ] 5072 207:[ end ] >> 138:[ if @game_state == "room_battle_animate" --only exists for 1 tick, calc dammge, check if room is done, check if we're defeated, ect. ] 6365 208:[ if self.game_state == "defeat" then ] >> 172:[ if @game_state == "defeat" ] 6393 209:[ am.eval_js(string.format("GLOBAL.broadcast(%q)", am.to_json({ ] >> 173:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 6462 210:[ msg = "info_defeat" ] >> 174:[ msg:"info_defeat" ] 6393 211:[ }))) ] >> 173:[ am.eval_js(string.format("GLOBAL.broadcast(%q)",am.to_json({ ] 6487 212:[ self.game_state = "done" ] >> 176:[ @game_state = "done" ] 6363 213:[ end ] >> 172:[ if @game_state == "defeat" ] 6512 214:[ if self.game_state == "victory" then ] >> 177:[ if @game_state == "victory" ] 6543 215:[ if am.eval_js("new Date().getTime()") > self.player_start_time + 6000 then ] >> 178:[ if am.eval_js("new Date().getTime()") > @player_start_time + 6000 -- a few seconds for victory! (and animations) ] 6658 216:[ self.cr = self.cr + 1 ] >> 179:[ @cr += 1 ] 6671 217:[ return self:campaign_start() ] >> 180:[ @campaign_start! ] 6541 218:[ end ] >> 178:[ if am.eval_js("new Date().getTime()") > @player_start_time + 6000 -- a few seconds for victory! (and animations) ] 6510 219:[ end ] >> 177:[ if @game_state == "victory" ] 6717 222:[ return print("calculating dammage...") ] >> 183:[ print("calculating dammage...") ] 6776 225:[ local enemies = { } ] >> 186:[ enemies = {} ] 6791 226:[ local tcr = self.cr ] >> 187:[ tcr = @cr ] 6803 227:[ local possible_enemies = { } ] >> 188:[ possible_enemies = {} ] 6837 228:[ for k, v in pairs(char.enemies) do ] >> 189:[ for k,v in pairs(char.enemies) ] 6861 229:[ table.insert(possible_enemies, v) ] >> 190:[ table.insert(possible_enemies,v) ] 6827 230:[ end ] >> 189:[ for k,v in pairs(char.enemies) ] 6896 231:[ local enemy_party = Party() ] >> 191:[ enemy_party = Party! ] 6924 232:[ while tcr > 0 and #possible_enemies > 0 do ] >> 192:[ while tcr > 0 and #possible_enemies > 0 ] 6962 233:[ local filtered_enemies = { } ] >> 193:[ filtered_enemies = {} ] 7002 234:[ for _, enemy in pairs(possible_enemies) do ] >> 194:[ for _, enemy in pairs(possible_enemies) ] 7033 235:[ if enemy.cr <= tcr then ] >> 195:[ if enemy.cr <= tcr ] 7055 236:[ table.insert(filtered_enemies, enemy) ] >> 196:[ table.insert(filtered_enemies,enemy) ] 7031 237:[ end ] >> 195:[ if enemy.cr <= tcr ] 6987 238:[ end ] >> 194:[ for _, enemy in pairs(possible_enemies) ] 7095 239:[ table.shuffle(filtered_enemies) ] >> 197:[ table.shuffle(filtered_enemies) ] 7130 240:[ local rng_enemy = table.remove(filtered_enemies) ] >> 198:[ rng_enemy = table.remove(filtered_enemies) ] 7176 241:[ tcr = tcr - rng_enemy.cr ] >> 199:[ tcr = tcr - rng_enemy.cr ] 7204 242:[ enemy_party:add_member(Enemy(nil, rng_enemy)) ] >> 200:[ enemy_party\add_member(Enemy(nil,rng_enemy)) ] 6919 243:[ end ] >> 192:[ while tcr > 0 and #possible_enemies > 0 ] 7251 244:[ return enemy_party ] >> 201:[ enemy_party ] 496 250:[ self.server = true ] >> 24:[ @server = true ] 513 251:[ self.client = false ] >> 25:[ @client = false ] 531 252:[ am.eval_js(connect) ] >> 26:[ am.eval_js(connect) ] 553 253:[ am.eval_js(lobby) ] >> 27:[ am.eval_js(lobby) ] 573 254:[ self.lobby_id = am.eval_js("GLOBAL.lobby_id") ] >> 28:[ @lobby_id = am.eval_js("GLOBAL.lobby_id") ] 617 255:[ self.game_state = "lobby" ] >> 29:[ @game_state = "lobby" --lobby, room_entry, room_players, room_battle_animate, victory, camp_entry, camp_players_animate, defeat, done ] 753 256:[ self.game_state_extra = 0 ] >> 30:[ @game_state_extra = 0 ] 777 257:[ self.players = { } ] >> 31:[ @players = {} --[peer_id] = tbl ] 811 258:[ self.set_actions = { } ] >> 32:[ @set_actions = {} --[peer_id] = "name" ] 852 259:[ self.player_party = nil ] >> 33:[ @player_party = nil -- the party, created at campaign start ] 914 260:[ self.host = nil ] >> 34:[ @host = nil --who is the lobby host, with the power to start the game? ] 987 261:[ self.enemy_party = nil ] >> 35:[ @enemy_party = nil -- The enemy party ] 1027 262:[ self.updates = { } ] >> 36:[ @updates = {} ] 1043 263:[ self.dead_players = { } ] >> 37:[ @dead_players = {} --[peer_id] = true ] 1083 264:[ self.cr = 1 ] >> 38:[ @cr = 1 ] 7663 284:[ am.eval_js(joined) ] >> 221:[ am.eval_js(joined) ] 7684 285:[ return am.eval_js("CLIENT.join('" .. id .. "');") ] >> 222:[ am.eval_js("CLIENT.join('" .. id .. "');") ] 7748 288:[ return am.eval_js("CLIENT.open") ] >> 224:[ am.eval_js("CLIENT.open") ] 7793 291:[ return am.eval_js("CLIENT.peer") ] >> 226:[ am.eval_js("CLIENT.peer") ] 7853 294:[ return self.localplayer:set_class(char.classes[msg.class]) ] >> 228:[ @localplayer\set_class(char.classes[msg.class]) ] 7932 297:[ return self.localplayer:set_class(char.classes[msg.class]) ] >> 230:[ @localplayer\set_class(char.classes[msg.class]) ] 8036 300:[ for peerid, chardata in pairs(msg.data) do ] >> 232:[ for peerid, chardata in pairs(msg.data) ] 8058 301:[ if not self.player_party:member(peerid) then ] >> 233:[ if not @player_party\member(peerid) ] 8098 302:[ if peerid == am.eval_js("CLIENT.peer._id") then ] >> 234:[ if peerid == am.eval_js("CLIENT.peer._id") ] 8144 303:[ self.localplayer = Character.deserialize(chardata) ] >> 235:[ @localplayer = Character.deserialize(chardata) ] 8196 304:[ self.player_party:add_member(self.localplayer) ] >> 236:[ @player_party\add_member(@localplayer) ] 8240 305:[ self.localplayer:enter_room(self.player_party.room) ] >> 237:[ @localplayer\enter_room(@player_party.room) ] 8298 307:[ local newplayer = Character.deserialize(chardata) ] >> 239:[ newplayer = Character.deserialize(chardata) ] 8347 308:[ self.player_party:add_member(newplayer) ] >> 240:[ @player_party\add_member(newplayer) ] 8388 309:[ newplayer:enter_room(self.player_party.room) ] >> 241:[ newplayer\enter_room(@player_party.room) ] 8441 312:[ print("Do nothing...") ] >> 243:[ print("Do nothing...") ] 8013 314:[ end ] >> 232:[ for peerid, chardata in pairs(msg.data) ] 8497 317:[ if msg.uname == self.localplayer.uname then ] >> 245:[ if msg.uname == @localplayer.uname ] 8533 318:[ return ] >> 246:[ return ] 8495 319:[ end ] >> 245:[ if msg.uname == @localplayer.uname ] 8544 320:[ if not self.player_party:member(msg.uname) then ] >> 247:[ if not @player_party\member(msg.uname) ] 8584 321:[ return self.player_party:add_member(Character.deserialize(msg.class)) ] >> 248:[ @player_party\add_member(Character.deserialize(msg.class)) ] 8653 323:[ return self.player_party:member(msg.uname):set_class(char.classes[msg.class]) ] >> 250:[ @player_party\member(msg.uname)\set_class(char.classes[msg.class]) ] 8754 327:[ if msg.uname == am.eval_js("CLIENT.peer._id") then ] >> 252:[ if msg.uname == am.eval_js("CLIENT.peer._id") ] 8803 328:[ if self.localplayer ~= nil then ] >> 253:[ if @localplayer != nil ] 8828 329:[ return ] >> 254:[ return ] 8801 330:[ end ] >> 253:[ if @localplayer != nil ] 8838 331:[ self.localplayer = LocalPlayer(msg.uname, { }, char.classes[msg.class]) ] >> 255:[ @localplayer = LocalPlayer(msg.uname, {}, char.classes[msg.class]) ] 8908 332:[ self.player_party:add_member(self.localplayer) ] >> 256:[ @player_party\add_member(@localplayer) ] 8950 333:[ return self.localplayer:enter_room(self.player_party.room) ] >> 257:[ @localplayer\enter_room(@player_party.room) ] 9002 334:[ elseif not self.player_party:member(msg.uname) then ] >> 258:[ elseif not @player_party\member(msg.uname) ] 9042 335:[ local newplayer = RemotePlayer(msg.uname, nil, char.classes[msg.class]) ] >> 259:[ newplayer = RemotePlayer(msg.uname, nil, char.classes[msg.class]) ] 9111 336:[ self.player_party:add_member(newplayer) ] >> 260:[ @player_party\add_member(newplayer) ] 9150 337:[ return newplayer:enter_room(self.player_party.room) ] >> 261:[ newplayer\enter_room(@player_party.room) ] 9201 339:[ return print("Do nothing") ] >> 263:[ print("Do nothing") ] 9254 343:[ local lobby_menu = require("lobby_menu") ] >> 265:[ lobby_menu = require "lobby_menu" ] 9290 344:[ local create_party_menu = require("create_party_menu") ] >> 266:[ create_party_menu = require "create_party_menu" ] 9342 345:[ if create_party_menu.loaded then ] >> 267:[ if create_party_menu.loaded ] 9371 346:[ create_party_menu.unload() ] >> 268:[ create_party_menu.unload! ] 9340 347:[ end ] >> 267:[ if create_party_menu.loaded ] 9401 348:[ if lobby_menu.loaded then ] >> 269:[ if lobby_menu.loaded ] 9423 349:[ lobby_menu.unload() ] >> 270:[ lobby_menu.unload! ] 9399 350:[ end ] >> 269:[ if lobby_menu.loaded ] 9444 351:[ local battle_menu = require("battle_menu") ] >> 271:[ battle_menu = require "battle_menu" ] 9482 352:[ battle_menu.load() ] >> 272:[ battle_menu.load! ] 9502 353:[ ui.fadeout() ] >> 273:[ ui.fadeout! ] 9516 354:[ self.time_ref = msg.time_ref ] >> 274:[ @time_ref = msg.time_ref ] 9564 357:[ self.room = Room.deserialize(msg.data) ] >> 276:[ @room = Room.deserialize(msg.data) ] 9601 358:[ self.time_ref = msg.time_ref ] >> 277:[ @time_ref = msg.time_ref ] 9628 359:[ self:set_room(self.room) ] >> 278:[ @set_room(@room) ] 9647 360:[ local battle_menu = require("battle_menu") ] >> 279:[ battle_menu = require "battle_menu" ] 9685 361:[ battle_menu.victory = false ] >> 280:[ battle_menu.victory = false ] 9715 362:[ return main.root:remove("infocard") ] >> 281:[ main.root\remove("infocard") ] 9770 365:[ main.root:remove("infocard") ] >> 283:[ main.root\remove("infocard") ] 9801 366:[ self.time_ref = msg.time_ref ] >> 284:[ @time_ref = msg.time_ref ] 9858 369:[ if self.enemy_party then ] >> 286:[ if @enemy_party ] 9875 370:[ self.node:remove(self.enemy_party.rnode) ] >> 287:[ @node\remove(@enemy_party.rnode) ] 9856 371:[ end ] >> 286:[ if @enemy_party ] 9910 372:[ self.enemy_party = Party.deserialize(msg.data) ] >> 288:[ @enemy_party = Party.deserialize(msg.data) ] 9955 373:[ self.enemy_party:set_room(self.room) ] >> 289:[ @enemy_party\set_room(@room) ] 9988 374:[ if self.room.__class ~= LobbyRoom then ] >> 290:[ if @room.__class != LobbyRoom ] 10019 375:[ self.enemy_party:set_room(self.room) ] >> 291:[ @enemy_party\set_room(@room) ] 9986 376:[ end ] >> 290:[ if @room.__class != LobbyRoom ] 10050 377:[ local battle_menu = require("battle_menu") ] >> 292:[ battle_menu = require "battle_menu" ] 10088 378:[ battle_menu.victory = false ] >> 293:[ battle_menu.victory = false ] 10118 379:[ return main.root:remove("infocard") ] >> 294:[ main.root\remove("infocard") ] 10208 382:[ local battle_menu = require("battle_menu") ] >> 297:[ battle_menu = require("battle_menu") ] 10247 383:[ local defeat_menu = require("defeat_menu") ] >> 298:[ defeat_menu = require("defeat_menu") ] 10286 384:[ table.insert(main.action_queue, { ] >> 299:[ table.insert(main.action_queue,{battle_menu.unload, {}}) ] 10318 385:[ battle_menu.unload, ] >> 299:[ table.insert(main.action_queue,{battle_menu.unload, {}}) ] 10286 387:[ }) ] >> 299:[ table.insert(main.action_queue,{battle_menu.unload, {}}) ] 10345 388:[ return table.insert(main.action_queue, { ] >> 300:[ table.insert(main.action_queue,{defeat_menu.load,{}}) ] 10377 389:[ defeat_menu.load, ] >> 300:[ table.insert(main.action_queue,{defeat_menu.load,{}}) ] 10345 391:[ }) ] >> 300:[ table.insert(main.action_queue,{defeat_menu.load,{}}) ] 10422 394:[ self.time_ref = msg.time_ref ] >> 302:[ @time_ref = msg.time_ref ] 10449 395:[ local battle_menu = require("battle_menu") ] >> 303:[ battle_menu = require "battle_menu" ] 10487 396:[ battle_menu.victory = true ] >> 304:[ battle_menu.victory = true ] 10516 397:[ return main.root:remove("infocard") ] >> 305:[ main.root\remove("infocard") ] 10592 400:[ for uname, updated in pairs(msg.data) do ] >> 307:[ for uname, updated in pairs(msg.data) ] 10612 401:[ local tchar = self.player_party:member(uname) or self.enemy_party:member(uname) ] >> 308:[ tchar = @player_party\member(uname) or @enemy_party\member(uname) ] 10691 402:[ for k, v in pairs(updated) do ] >> 309:[ for k,v in pairs(updated) ] 10711 403:[ tchar.data[k] = v ] >> 310:[ tchar.data[k] = v ] 10681 404:[ end ] >> 309:[ for k,v in pairs(updated) ] 10571 405:[ end ] >> 307:[ for uname, updated in pairs(msg.data) ] 10769 408:[ for _, uname in pairs(msg.data) do ] >> 312:[ for _, uname in pairs(msg.data) ] 10791 409:[ if self.player_party:member(uname) then ] >> 313:[ if @player_party\member(uname) ] 10824 410:[ local tchar = self.player_party:member(uname) ] >> 314:[ tchar = @player_party\member(uname) ] 10864 411:[ tchar:die() ] >> 315:[ tchar\die! ] 10879 412:[ self.player_party:remove_member(tchar) ] >> 316:[ @player_party\remove_member(tchar) ] 10923 413:[ elseif self.enemy_party:member(uname) then ] >> 317:[ elseif @enemy_party\member(uname) ] 10955 414:[ local tchar = self.enemy_party:member(uname) ] >> 318:[ tchar = @enemy_party\member(uname) ] 10994 415:[ tchar:die() ] >> 319:[ tchar\die! ] 11009 416:[ self.enemy_party:remove_member(tchar) ] >> 320:[ @enemy_party\remove_member(tchar) ] 10754 418:[ end ] >> 312:[ for _, uname in pairs(msg.data) ] 11094 421:[ for uname, action_name in pairs(msg.data) do ] >> 322:[ for uname, action_name in pairs(msg.data) ] 11114 422:[ local action = ability[action_name] ] >> 323:[ action = ability[action_name] ] 11149 423:[ if self.player_party:member(uname) then ] >> 324:[ if @player_party\member(uname) ] 11182 424:[ action.use(self, self.player_party, self.player_party:member(uname)) ] >> 325:[ action.use(@,@player_party,@player_party\member(uname)) ] 11242 425:[ ui.battle_log(string.format("%s used %s", self.player_party:member(uname).class.name, action.text)) ] >> 326:[ ui.battle_log(string.format("%s used %s",@player_party\member(uname).class.name,action.text)) ] 11345 426:[ elseif self.enemy_party:member(uname) then ] >> 327:[ elseif @enemy_party\member(uname) ] 11377 427:[ action.use(self, self.enemy_party, self.enemy_party:member(uname)) ] >> 328:[ action.use(@,@enemy_party,@enemy_party\member(uname)) ] 11435 428:[ ui.battle_log(string.format("%s used %s", uname, action.text)) ] >> 329:[ ui.battle_log(string.format("%s used %s",uname,action.text)) ] 11069 430:[ end ] >> 322:[ for uname, action_name in pairs(msg.data) ] 11498 431:[ return main.root:remove("infocard") ] >> 330:[ main.root\remove("infocard") ] 11544 434:[ local msg = am.eval_js("CLIENT.get()") ] >> 332:[ msg = am.eval_js("CLIENT.get()") ] 11581 435:[ if msg ~= nil then ] >> 333:[ if msg != nil ] 11596 436:[ local info = am.parse_json(msg) ] >> 334:[ info = am.parse_json(msg) ] 11627 437:[ if self[info.msg] then ] >> 335:[ if @[info.msg] ] 11644 438:[ return self[info.msg](self, info) ] >> 336:[ @[info.msg](@,info) ] 11676 440:[ return print("Failed to find client message handler", info) ] >> 338:[ print("Failed to find client message handler", info) ] 11579 442:[ end ] >> 333:[ if msg != nil ] 11755 445:[ self.localplayer = player ] >> 340:[ @localplayer = player ] 11779 446:[ self.player_party:add_member(player) ] >> 341:[ @player_party\add_member(player) ] 11814 447:[ return self.localplayer:enter_room(self.player_party.room) ] >> 342:[ @localplayer\enter_room(@player_party.room) ] 11881 450:[ self.room = room ] >> 344:[ @room = room ] 11896 451:[ assert(self.room, "cannot set a nil room") ] >> 345:[ assert(@room, "cannot set a nil room") ] 11937 452:[ assert(self.room.load, "rooms must have a .load") ] >> 346:[ assert(@room.load, "rooms must have a .load") ] 11987 453:[ if self.player_party.room then ] >> 347:[ if @player_party.room ] 12010 454:[ self.player_party.room:unload() ] >> 348:[ @player_party.room\unload! ] 11985 455:[ end ] >> 347:[ if @player_party.room ] 12082 456:[ self.room:load() ] >> 350:[ @room\load! ] 12124 457:[ self.player_party:set_room(room) ] >> 352:[ @player_party\set_room(room) ] 12157 458:[ if self.enemy_party then ] >> 353:[ if @enemy_party ] 12176 459:[ if self.enemy_party.room then ] >> 354:[ if @enemy_party.room ] 12199 460:[ self.enemy_party.room:unload() ] >> 355:[ @enemy_party.room\unload! ] 12174 461:[ end ] >> 354:[ if @enemy_party.room ] 12228 462:[ self.enemy_party:set_room(self.room) ] >> 356:[ @enemy_party\set_room(@room) ] 12155 463:[ end ] >> 353:[ if @enemy_party ] 12303 464:[ if self.enemy_party then ] >> 358:[ if @enemy_party ] 12391 465:[ return self.node:append(self.enemy_party.rnode) ] >> 361:[ @node\append(@enemy_party.rnode) ] 12301 466:[ end ] >> 358:[ if @enemy_party ] 12439 469:[ return main.root("world_characters"):append(self.node) ] >> 363:[ main.root("world_characters")\append(@node) ] 7289 475:[ self.client = true ] >> 205:[ @client = true ] 7306 476:[ self.server = false ] >> 206:[ @server = false ] 7324 477:[ am.eval_js(connect) ] >> 207:[ am.eval_js(connect) ] 7346 478:[ self.players = { } ] >> 208:[ @players = {} ] 7362 479:[ self.player_party = Party() ] >> 209:[ @player_party = Party! ] 7387 480:[ self.enemy_party = nil ] >> 210:[ @enemy_party = nil ] 7408 481:[ main.root("world_characters"):append(self.player_party.node) ] >> 211:[ main.root("world_characters")\append(@player_party.node) ] 7467 482:[ self.parties = { ] >> 212:[ @parties = {@player_party} ] 7479 483:[ self.player_party ] >> 212:[ @parties = {@player_party} ] 7467 484:[ } ] >> 212:[ @parties = {@player_party} ] 7496 485:[ self.node = am.group() ] >> 213:[ @node = am.group! ] 7516 486:[ self.node:append(self.player_party.node) ] >> 214:[ @node\append(@player_party.node) ] 7551 487:[ self.node:action(coroutine.create(function() ] >> 215:[ @node\action(coroutine.create(()-> ] 7594 488:[ while true do ] >> 216:[ while true ] 7604 489:[ coroutine.yield() ] >> 217:[ coroutine.yield! ] 7589 490:[ end ] >> 216:[ while true ] 7551 491:[ end)) ] >> 215:[ @node\action(coroutine.create(()-> ] 7628 492:[ self.localplayer = nil ] >> 219:[ @localplayer = nil ] 12485 507:[ mod["World"] = World ] >> 366:[ mod["World"] = World ] 12506 508:[ mod["Server"] = Server ] >> 367:[ mod["Server"] = Server ] 12529 509:[ return mod ] >> 368:[ mod ]