def load(filepath): with open(filepath) as fd: ret = json.loads(fd.read()) context.timestamp = ret["timestamp"] context.timestamp_ = ret["timestamp"] context.explorations = ret["discoveries"] context.script_status = ret["script_status"] context.script_branches = ret["script_branches"] for k, evt in ret["events"].items(): Event.All[k].triggered = evt["triggered"] Event.All[k].active = evt["active"] clean_persons() for k, p_info in ret["persons"].items(): tpl_id = p_info["tpl_id"] if tpl_id not in Entity.Templates: Entity.Templates[tpl_id] = [] if len(Entity.Templates[tpl_id]) == 0: obj = Person() obj.load(**p_info) Entity.Templates[tpl_id].append(obj) Entity.Instances[obj.id] = obj battle_dict = {} for k, b_info in ret["battles"].items(): map = Map.template(b_info["map"]) groups = [] for group in b_info["groups"]: groups.append([Entity.Instances[pid] for pid in group]) allies = b_info["allies"] death = b_info["death"] silent = b_info["silent"] battle = Battle(map=map, groups=groups, allies=allies, silent=silent, death=death) battle.turnidx = b_info["turnidx"] battle.cdmap = b_info["cdmap"] battle.alive = [Entity.Instances[pid] for pid in b_info["alive"]] battle.dead = [Entity.Instances[pid] for pid in b_info["dead"]] battle_dict[b_info["id"]] = battle for k, t_info in ret["teams"].items(): team = Team() team.id = t_info["id"] team.process = t_info["process"] for pid in t_info["members"]: team.include(Entity.Instances[pid]) if t_info["active"]: context.teams[team.id] = team if "battle" in t_info: team.battle = battle_dict[t_info["battle"]] team.scenario = Map.one(t_info["scenario"]) team.scenario.locate(team, t_info["location"]) p = Person.one("PERSON_YANG_LEI") m = Map.one("MAP_WORLD") context.PLAYER = Person.one("PERSON_PLAYER")
def take(self): old_scene = self.team.scenario new_scene = Map.one(old_scene.transport_locs[self.team.location]) tmp_locs = [] # 确定角色转换场景后的位置与方向 if new_scene.tpl_id == "MAP_WORLD": for loc, tpl in new_scene.transport_locs.items(): if tpl == old_scene.tpl_id: tmp_loc = loc break old_dire = old_scene.direction( self.team.location, (old_scene.x // 2, old_scene.y // 2)) for pt in new_scene.circle(tmp_loc, 1): if not new_scene.can_stay(self.team.leader, pt): continue new_dire = new_scene.direction(pt, tmp_loc) dire_diff = abs(new_dire - old_dire) tmp_locs.append((pt, 1 if dire_diff == 5 else dire_diff)) else: old_dire = old_scene.direction(self.team.path[1], self.team.path[0]) for loc, tpl in new_scene.transport_locs.items(): if tpl == old_scene.tpl_id: new_dire = new_scene.direction( loc, (new_scene.x // 2, new_scene.y // 2)) dire_diff = abs(new_dire - old_dire) tmp_locs.append((loc, 1 if dire_diff == 5 else dire_diff)) tmp_locs.sort(key=lambda x: x[1]) location = tmp_locs[0][0] TeamTransportAction(team=self.team, scenario=new_scene, location=location).do()
def start(loadfile=None): print("引擎初始化中……\n") console.init() print("游戏数据载入中……\n") entity.init() print("世界构建中……\n") context.init() m = Map.one("MAP_SUZHOUCHENG") player = Person.one("PERSON_PLAYER") team_player = Team() team_player.include(player) team_player.leader = player team_player.scenario = m context.map = m context.PLAYER = player context.teams[team_player.id] = team_player m.locate(team_player, (18, 27)) m.window_center(m.location(team_player)) if loadfile is not None: print("存档文件加载中……\n") saveload.load(loadfile) engine.init() engine.start()
def handler_world_scenario_change_ensure(ctx): target = ctx.team.scenario.transport_locs[ctx.team.location] target = Map.one(target).name map = ctx.team.scenario ui.map(map, entities=team_info(map), show_trace=True) ui.echo() ret = ui.sure("当前地块可通往%s,是否前往?" % target) return ret
sys.path.append(os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + "/../../")) from proj import data from proj.runtime import context from proj import console from proj import engine from proj.engine import script from proj.entity import Person from proj.entity import Map console.init() if __name__ == "__main__": player = Person.one("PERSON_PLAYER") map = Map.one("MAP_SUZHOUCHENG") time_1 = time.time() script.run(data.scripts.SCRIPT_WANPENGFEI_1, timeflow=1, subject=Person.one("PERSON_PLAYER"), object=Person.one("PERSON_WAN_PENGFEI")) #script.run2(data.scripts.SCRIPT_WANPENGFEI_TEST, timeflow=1, # subject=player, # object=Person.one("PERSON_WAN_PENGFEI")) time_2 = time.time() print(time_2 - time_1) engine.start()
def load_map(arg): globals.MAP = Map.one(arg)
# 峨眉派 p_rwh = Person.one("PERSON_RAN_WUHUA") p_cg = Person.one("PERSON_CI_GUANG") # 甲螺 p_ld = Person.one("PERSON_LI_DAN") p_ysq = Person.one("PERSON_YAN_SIQI") # 巨阙门 p_gzq = Person.one("PERSON_GENG_ZHUQIAO") p_sjy = Person.one("PERSON_SHI_JINGYAN") # 密宗 p_snrd = Person.one("PERSON_SUONAN_RAODAN") m1 = Map.one("MAP_BTL_BAIBINGTANGZONGDUO") m2 = Map.one("MAP_BTL_YOUMINGGONGSHANXIA") m3 = Map.one("MAP_BTL_GRASSLAND_BIG") m4 = Map.one("MAP_SUZHOUCHENG_BTL") m5 = Map.one("MAP_JIUXIPAI_BTL") m6 = Map.one("MAP_SHAOLINSI_BTL") team_shaolin = Team(label="少林寺") team_wudang = Team(label="武当派") team_gaibang = Team(label="丐帮") team_emei = Team(label="峨眉派") team_youminggong = Team(label="幽冥宫") team_huairen = Team() team_beichenpai = Team(label="北辰派") team_jiuxipai = Team(label="九溪派") team_baibingtang = Team(label="百兵堂")
def launch(self): target = self.team.scenario.transport_locs[self.team.location] target = Map.one(target).name self.text = "当前地块可通往%s,是否前往?" % target MSG(style=MSG.ScenarioChangeControl, control=self)
@Control.listener def hook(self): print("HookC") self.close() print("CloseC") console.init() engine.init() if __name__ == "__main__": p_player = Person.one("PERSON_PLAYER") p_sty = Person.one("PERSON_SONG_TIANYONG") p_dtj = Person.one("PERSON_DING_TIEJIANG_SUZHOU") m_world = Map.one("MAP_SUZHOUCHENG") m_world.locate(p_player.team, (12, 37)) p_player.team.include(p_sty) p_player.team.scenario = m_world context.PLAYER = p_player control = TradeControl(subject=p_player, object=p_dtj) #control = TestControlA() #control = SkillControl(subject=p_player) #control = EquipmentControl(subject=p_player) #control = PipeControl() #control.pipe(SkillSelectControl(subject=p_player, type=0), keys=["skill"])\ # .pipe(ItemSelectControl(subject=p_player, object=p_player, quantity=1), keys=["item"]) #control = ScenarioControl(subject=p_player.team, scenario=m_world) #control = TimeflowControl() bth = threading.Thread(target=control.run, daemon=True)
# -- coding: utf-8 -- import os import sys sys.path.append( os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + "/../../")) from proj.entity import Map from proj.entity import Person if __name__ == "__main__": map = Map.one("MAP_TEST_ASTAR") person = Person.one("PERSON_PLAYER") for steps in [-1, 1, 2, 3, 4]: #startpt = (4, 2) startpt = (0, 2) endpt = (6, 2) last = None map.pathblocked = set() print("Steps: %s, StartPos: %s, Destination: %s" % (steps, startpt, endpt)) while startpt != endpt: rst = map.connect_dynamic(startpt, endpt, person, last=last, steps=steps) print(rst) startpt = rst[0] last = rst[1]