Example #1
0
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")
Example #2
0
 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()
Example #3
0
 def take(self):
     # 获取战斗地图,暂时只支持一个场景关联一张战斗地图
     # TODO: 支持一个场景可关联多张战斗地图,根据实际坐标进行获取
     if self.battle_map is None:
         map = Map.template("%s_BTL" % self.subject.scenario.tpl_id)
     else:
         map = self.battle_map
     context.teams[self.object.id] = self.object
     context.teams[self.subject.id] = self.subject
     subject_group = self.subject_group if self.subject_group is not None else self.subject.members
     if self.object.battle is None:
         silent = self.subject != context.PLAYER.team and self.object != context.PLAYER.team
         BattleStartAction(map=map,
                           groups=[subject_group, self.object.members],
                           death=self.death,
                           silent=silent).do()
     else:
         allies = self.object.battle.allies
         new_group_index = len(self.object.battle.groups)
         enemy_group = self.object.battle.groups.index(
             self.object.leader.group)
         for al in allies:
             if enemy_group in al:
                 continue
             al.append(new_group_index)
         BattleJoinAction(battle=self.object.battle,
                          group=subject_group,
                          death=self.death,
                          allies=allies).do()
Example #4
0
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()
Example #5
0
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
Example #6
0
def blank_map(arg):
    name = ui.read("请输入你想要建立的地图的名字:")
    ui.echo()
    rt = ui.read("请输入你想要建立的地图大小(第一个数字为宽,第二个为高,中间使用空格分隔):")
    x, y = rt.split()
    x = int(x)
    y = int(y)
    globals.MAP = Map(name=name, width=x, height=y, window_y=7)
Example #7
0
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()
Example #8
0
def load_map(arg):
    globals.MAP = Map.one(arg)
Example #9
0
    # 峨眉派
    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="百兵堂")
Example #10
0
 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)
Example #11
0
    @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)
Example #12
0
# -- 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]