Exemple #1
0
def usage_menu(ctrl):
    ret = [
        ui.menuitem("使用", value=0, validator=ctrl.validator, goto=ctrl.select),
        ui.menuitem("给与", value=1, validator=ctrl.validator, goto=ctrl.select),
        ui.menuitem("丢弃", value=2, goto=ctrl.select)
    ]
    return ret
Exemple #2
0
def load_map(arg):
    ret = [ui.menuitem("另存为")]
    for file in os.listdir("%s/../../data/maps" % os.path.dirname(__file__)):
        if not file.endswith(".py") or file.startswith("__init__.py"):
            continue
        ret.append(ui.menuitem(file[:-3], goto=lambda x: load_map_module(x)))
    ui.menu(ret, goback=True)
Exemple #3
0
def item_menu(ctrl):
    smenu = []
    for itm, person, valid in ctrl.items:
        suffix_list = []
        if len(ctrl.persons) > 1:
            suffix_list.append("持有人:%s" %
                               ui.colored(person.name, attrs=["bold"]))
        if "Equip" in itm.tags:
            suffix_list.append("数量:1,耐久度:%s/%s" %
                               (itm.durability_current, itm.durability))
        else:
            suffix_list.append("数量:%s" % person.quantities[itm.tpl_id])
        if ctrl.showmoney and itm.tpl_id != "ITEM_MONEY":
            if ctrl.moneystyle == 0:
                money_num = itm.money
            else:
                money_num = int(itm.money * 0.4)
            suffix_list.append("价值:%s" % ui.byellow(money_num))
        if itm in person.equipment:
            suffix_list.append(ui.colored("装备中", color="green"))
        suffix = "(%s)" % ",".join(suffix_list)
        if not valid:
            mitem = ui.menuitem(itm.name + ui.bgrey(suffix),
                                value=(itm, person),
                                validator=lambda x: False)
        else:
            comments = ui.item(itm)
            mitem = ui.menuitem(ui.rank(itm) + suffix,
                                comments=comments,
                                value=(itm, person),
                                goto=ctrl.select)
        smenu.append(mitem)
    return smenu
Exemple #4
0
def element_menu(ctrl):
    ret = [
        ui.menuitem("建筑", value="ELEMENT_BUILDING", goto=ctrl.select),
        ui.menuitem("城墙", value="ELEMENT_WALL", goto=ctrl.select),
        ui.menuitem("塔楼", value="ELEMENT_TOWER", goto=ctrl.select),
        ui.menuitem("岩石", value="ELEMENT_ROCK", goto=ctrl.select)
    ]
    return ret
Exemple #5
0
def transport_menu(ctrl):
    targets = ctrl.targets
    tmenu = []
    tmenu.append(ui.menuitem("留在原处", value="", goto=ctrl.select))
    for target in targets:
        tmenu.append(
            ui.menuitem("前往%s" % target["name"],
                        value=(target["scenario"], target["location"]),
                        goto=ctrl.select))
    return tmenu
Exemple #6
0
def world_menu(team):
    title = ui.colored("队员一览:%s队" % team.leader.name,
                       color="yellow",
                       attrs=["bold"])
    ret = [
        ui.menuitem("移动", goto=lambda x: WorldMovePositionOrder()),
        ui.menuitem("交谈", goto=lambda x: WorldTalkPositionOrder()),
        ui.menuitem("赠与", goto=lambda x: WorldGivePositionOrder()),
        ui.menuitem("探索", goto=lambda x: WorldExplorePositionOrder()),
        ui.menuitem("建设", goto=lambda x: WorldBuildPositionOrder()),
        ui.menuitem("攻击", goto=lambda x: WorldAttackPositionOrder()),
        ui.menuitem("休息", goto=lambda x: WorldRestOrder()),
        ui.menuitem(
            "队伍",
            goto=lambda x: ui.menu(member_menu(),
                                   title=title,
                                   goback=True,
                                   backmethod=lambda: WorldPlayerOrder())),
        ui.menuitem(
            "系统",
            goto=lambda x: ui.menu(system_menu,
                                   columns=2,
                                   width=15,
                                   goback=True,
                                   backmethod=lambda: WorldPlayerOrder()))
    ]
    return ret
Exemple #7
0
def handler_superskill_select_control(ctrl):
    skmenu = []
    for sk in ctrl.superskills:
        comments = [Item.one("ITEM_%s" % sk.tpl_id[11:]).description]
        skmenu.append(
            ui.menuitem(ui.rank(sk),
                        value=sk,
                        comments=comments,
                        goto=ctrl.select))
    skmenu.append(ui.menuitem("离开", value='', goto=ctrl.select))
    ui.menu(skmenu, title=ctrl.title)
Exemple #8
0
def build_menu(person, pos):
    bmenu = [
        ui.menuitem(
            "建造建筑",
            goto=lambda x: ui.menu(buildings_menu(person, pos), goback=True)),
        ui.menuitem(
            "拆除建筑",
            goto=lambda x: ui.menu(buildings_menu(person, pos), goback=True)),
        ui.menuitem(
            "改造地形",
            goto=lambda x: ui.menu(terran_menu(person, pos), goback=True))
    ]
    return bmenu
Exemple #9
0
def list_modules(arg, map_func, newbuild=False):
    ret = []
    if newbuild:
        ret.append(ui.menuitem("新建地图组",
                               goto=lambda x: new_module(x, map_func)))
    for file in os.listdir("%s/../../data/maps" % os.path.dirname(__file__)):
        if not file.endswith(".py") or file.startswith("__init__.py"):
            continue
        ret.append(
            ui.menuitem(file[:-3],
                        goto=lambda x: list_maps(x, map_func, newbuild)))
    ui.echo()
    ui.menu(ret, title="请选择目标地图组:", goback=True)
Exemple #10
0
def team_menu(p):
    ret = [
        ui.menuitem("状态", value=p, goto=lambda x: profile(x)),
        ui.menuitem(
            "物品",
            value=p,
            goto=lambda x: PersonItemChooseOrder(subject=x,
                                                 quantity=1,
                                                 candidates=x.team.members,
                                                 order=PersonItemOrder)),
        ui.menuitem("转移",
                    value=p,
                    goto=lambda x: PersonItemChooseOrder(
                        subject=x,
                        candidates=x.team.members,
                        order=PersonItemTransferOrder)),
        ui.menuitem("技能", value=p, goto=lambda x: PersonSkillOrder(subject=x)),
        ui.menuitem("装备",
                    value=p,
                    goto=lambda x: PersonEquipmentOrder(subject=x)),
        ui.menuitem("配方",
                    value=p,
                    goto=lambda x: PersonRecipeChooseOrder(subject=x)),
        ui.menuitem("切磋"),
        ui.menuitem("离队", validator=lambda x: False)
    ]
    return ret
Exemple #11
0
def equip_menu(person):
    emenu = [
        ui.menuitem(
            "主手卸下",
            goto=lambda x: PersonEquipOffOrder(subject=person, position=0)),
        ui.menuitem("主手装上",
                    goto=lambda x: PersonItemChooseOrder(
                        subject=person,
                        persons=[person],
                        object=person,
                        quantity=1,
                        order=PersonEquipOnOrder,
                        orderarg={"position": 0},
                        tags=set(["Weapon"]),
                        backmethod=lambda: PersonEquipmentOrder(
                            subject=self.subject, fromoff=True))),
        ui.menuitem(
            "副手卸下",
            goto=lambda x: PersonEquipOffOrder(subject=person, position=1)),
        ui.menuitem("副手装上",
                    goto=lambda x: PersonItemChooseOrder(
                        subject=person,
                        persons=[person],
                        object=person,
                        quantity=1,
                        order=PersonEquipOnOrder,
                        orderarg={"position": 1},
                        tags=set(["Weapon"]),
                        backmethod=lambda: PersonEquipmentOrder(
                            subject=self.subject, fromoff=True))),
        ui.menuitem(
            "身体卸下",
            goto=lambda x: PersonEquipOffOrder(subject=person, position=2)),
        ui.menuitem("身体装上",
                    goto=lambda x: PersonItemChooseOrder(
                        subject=person,
                        persons=[person],
                        object=person,
                        quantity=1,
                        order=PersonEquipOnOrder,
                        orderarg={"position": 2},
                        tags=set(["Armor"]),
                        backmethod=lambda: PersonEquipmentOrder(
                            subject=self.subject, fromoff=True))),
        ui.menuitem(
            "饰品卸下",
            goto=lambda x: PersonEquipOffOrder(subject=person, position=3)),
        ui.menuitem("饰品装上",
                    goto=lambda x: PersonItemChooseOrder(
                        subject=person,
                        persons=[person],
                        object=person,
                        quantity=1,
                        order=PersonEquipOnOrder,
                        orderarg={"position": 3},
                        tags=set(["Ornament"]),
                        backmethod=lambda: PersonEquipmentOrder(
                            subject=self.subject, fromoff=True)))
    ]
    return emenu
Exemple #12
0
def files_menu(func, allow_new=False):
    load_menu = []
    if allow_new:
        load_menu.append(ui.menuitem("新建存档", goto=lambda x: new_file(func)))
    loaddir = options.SAVEFILE_PATH
    for itm in os.listdir(loaddir):
        apath = loaddir + "/" + itm
        if not apath.endswith(".savefile"):
            continue
        mtime = os.stat(apath).st_mtime
        mtime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(mtime))
        showword = "%s (%s)" % (itm, mtime)
        load_menu.append(
            ui.menuitem(showword, value=apath, goto=lambda x: func(x)))
    ui.menu(load_menu, title="当前可用存档:", goback=True)
Exemple #13
0
def list_maps(arg, map_func, newbuild=False):
    ret = []
    if newbuild:
        ret.append(ui.menuitem("新建地图", goto=lambda x: new_map(x, map_func)))
    nomod = False
    try:
        globals.MAP_MODULE = importlib.import_module("proj.data.maps.%s" % arg)
    except Exception as e:
        nomod = True
    if not nomod:
        for m in dir(globals.MAP_MODULE):
            if not m.startswith("MAP_"):
                continue
            ret.append(ui.menuitem(m, value=m, goto=lambda x: map_func(x)))
    ui.echo()
    ui.menu(ret, title="请选择目标地图:", goback=True)
Exemple #14
0
def handler_item_inlay_select_control(ctrl):
    imenu = []
    for idx, inlay in enumerate(ctrl.item.inlays):
        enabled = "filled" not in inlay
        if enabled:
            name_str = inlay["name"]
            comments = [
                "接受材料:%s" % "、".join([ui.tag(acp) for acp in inlay["accept"]])
            ]
            validator = lambda x: True
        else:
            name_str = inlay["name"]
            comments = ["已强化:%s" % ui.rank(inlay["filled"])]
            comments.extend([
                ui.effect(effe, grey=True) for effe in inlay["filled"].effects
                if effe.name is not None
            ])
            validator = lambda x: False
        imenu.append(
            ui.menuitem(name_str,
                        value=idx,
                        comments=comments,
                        validator=validator,
                        goto=ctrl.select))
    ret = ui.menu(imenu,
                  title="请选择你要强化的部位:",
                  goback=True,
                  backmethod=ctrl.close)
    return ret
Exemple #15
0
def item_menu(persons,
              obj,
              tags=None,
              showmoney=False,
              moneystyle=0,
              show_comments=True,
              filter=None):
    smenu = []
    for person in persons:
        for itm in person.items:
            show_state = 0
            if filter is not None:
                show_state = filter(person, obj, itm, tags)
            if show_state == 2:
                continue
            suffix_list = []
            if len(persons) > 1:
                suffix_list.append("持有人:%s" %
                                   ui.colored(person.name, attrs=["bold"]))
            if "Equip" in itm.tags:
                suffix_list.append("数量:1,耐久度:%s/%s" %
                                   (itm.durability_current, itm.durability))
            else:
                suffix_list.append("数量:%s" % person.quantities[itm.tpl_id])
            if showmoney and itm.tpl_id != "ITEM_MONEY":
                suffix_list.append("价值:%s" % ui.colored(
                    itm.money if moneystyle == 0 else int(itm.money * 0.4),
                    color="yellow",
                    attrs=["bold"]))
            if itm in person.equipment:
                suffix_list.append(ui.colored("装备中", color="green"))
            suffix = "(%s)" % ",".join(suffix_list)
            if show_state == 1:
                mitem = ui.menuitem(
                    ui.rank(itm) +
                    ui.colored(suffix, color="grey", attrs=["bold"]),
                    value=(itm, person),
                    validator=lambda x: False)
            elif show_comments:
                comments = ui.item(itm)
                mitem = ui.menuitem(ui.rank(itm) + suffix,
                                    comments=comments,
                                    value=(itm, person))
            else:
                mitem = ui.menuitem(ui.rank(itm) + suffix, value=(itm, person))
            smenu.append(mitem)
    return smenu
Exemple #16
0
def editor_menu(ctrl):
    ret = [
        ui.menuitem("地形", goto=ctrl.terran),
        ui.menuitem("物件", goto=ctrl.element),
        ui.menuitem("人物", goto=ctrl.person),
        ui.menuitem("擦除", goto=ctrl.erase),
        ui.menuitem("裁扩", goto=ctrl.resize),
        ui.menuitem("坐标", goto=ctrl.coordinate),
        ui.menuitem("缩略", goto=ctrl.thumbnail),
        ui.menuitem("镜头", goto=ctrl.camera),
        ui.menuitem("保存", goto=ctrl.save)
    ]
    return ret
Exemple #17
0
def person_menu(point, map, include_self=False):
    ret = []
    team = map.loc_entity[point]
    for m in team.members:
        if m == context.PLAYER and not include_self:
            continue
        ret.append(ui.menuitem(m.name, value=m))
    return ret
Exemple #18
0
def task_menu():
    tmenu = []
    for t in context.tasks_index:
        tlist = context.tasks[t]
        bold = context.tasks_status[t]
        tmenu.append(
            ui.menuitem(t, value=(t, tlist), bold=bold, goto=task_method))
    return tmenu
Exemple #19
0
def handler_explore_tool_select_control(ctrl):
    i_menu = item_menu(ctrl)
    i_menu.insert(
        0, ui.menuitem("徒手", value=(None, ctrl.team.leader), goto=ctrl.select))
    ui.menu(i_menu,
            title=ui.byellow(ctrl.title),
            goback=True,
            backmethod=ctrl.close)
Exemple #20
0
def handler_world_explore_tool(ctx):
    itm_menu = [ui.menuitem("徒手", value="")]
    itm_menu.extend(item_menu(ctx.subject.members, None, filter=ctx.filter))
    if len(itm_menu) == 1:
        ret = itm_menu[0].value
    else:
        ret = ui.menu(itm_menu, title="以下工具可用于该地块探索:", goback=True)
    return ret
Exemple #21
0
def handler_world_attack_select(ctx):
    ret = ui.menu([ui.menuitem(m.name, value=m) for m in ctx.subject.members],
                  title=ui.colored("请选择需要出战的角色:",
                                   color="yellow",
                                   attrs=["bold"]),
                  multiple=True,
                  multiple_range=[1, ctx.number])
    return ret
Exemple #22
0
def skill_menu(ctrl):
    smenu = []
    skills = ctrl.skills
    for sk, errormsg in skills:
        comments = [ui.skill(sk)]
        for effe in sk.effects:
            comments.append(ui.effect(effe))
        if errormsg is None:
            sk_str = "%s:%s" % (ui.rank(sk.belongs), ui.rank(sk))
            smenu.append(
                ui.menuitem(sk_str,
                            comments=comments,
                            value=sk,
                            goto=ctrl.select))
        else:
            sk_str = "%s:%s(%s)" % (sk.belongs.name, sk.name, errormsg)
            smenu.append(ui.menuitem(sk_str, validator=lambda x: False))
    return smenu
Exemple #23
0
def skill_menu(person):
    smenu = []
    for sk in person.skills:
        sk_str = "%s:%s" % (ui.rank(sk.belongs), ui.rank(sk))
        comments = [ui.skill(sk)]
        for effe in sk.effects:
            comments.append(ui.effect(effe))
        smenu.append(ui.menuitem(sk_str, comments=comments, value=sk))
    return smenu
Exemple #24
0
def handler_person_item_object(ctx):
    person_menu = []
    for c in ctx.candidates:
        person_menu.append(ui.menuitem(c.name, value=c))
    if len(person_menu) == 1:
        return person_menu[0].value
    else:
        ret = ui.menu(person_menu, title="你选择你要作用的人物:", goback=True)
        return ret
Exemple #25
0
def superskill_menu(ctrl):
    superskill = ctrl.superskill
    person = ctrl.person
    ret = []
    for idx, nd in enumerate(superskill.nodes):
        learn_sts = superskill.learn_status(person, idx)
        enable = True
        if learn_sts == -1:
            nd_str = nd.name + ui.nodecond(nd)
            enable = False
        elif learn_sts == 0:
            nd_str = nd.name + "(已习得)"
            enable = False
        elif nd == person.studying:
            nd_str = nd.name + "(修炼中)"
            enable = False
        else:
            nd_str = nd.name
        comments = [nd.description]
        grey = not enable
        for nt in nd.tags:
            if nt.startswith("SKILL_"):
                sk = Skill.one(nt)
                if "Neigong" not in sk.style:
                    comments.append(ui.skill(sk, grey=grey))
                    for effe in sk.effects:
                        comments.append(ui.effect(effe, grey=grey))
                else:
                    for effe in sk.effects:
                        comments.append(ui.effect(effe.exertion, grey=grey))
        if enable:
            ret.append(
                ui.menuitem(nd_str,
                            value=nd,
                            comments=comments,
                            goto=ctrl.select))
        else:
            ret.append(
                ui.menuitem(nd_str,
                            value=nd,
                            comments=comments,
                            validator=lambda x: False))
    return ret
Exemple #26
0
def equip_menu(ctrl):
    emenu = [
        ui.menuitem("主手卸下", value=0, goto=ctrl.equip_off),
        ui.menuitem("主手装上", value=(0, set(["Weapon"])), goto=ctrl.equip_on),
        ui.menuitem("副手卸下", value=1, goto=ctrl.equip_off),
        ui.menuitem("副手装上", value=(1, set(["Weapon"])), goto=ctrl.equip_on),
        ui.menuitem("身体卸下", value=2, goto=ctrl.equip_off),
        ui.menuitem("身体装上", value=(2, set(["Armor"])), goto=ctrl.equip_on),
        ui.menuitem("饰品卸下", value=3, goto=ctrl.equip_off),
        ui.menuitem("饰品装上", value=(3, set(["Ornament"])), goto=ctrl.equip_on)
    ]
    return emenu
Exemple #27
0
def resize_menu(ctrl):
    ret = [
        ui.menuitem("左边界扩展", value=("x", 1, True), goto=ctrl.select),
        ui.menuitem("左边界剪裁", value=("x", -1, True), goto=ctrl.select),
        ui.menuitem("右边界扩展", value=("x", 1, False), goto=ctrl.select),
        ui.menuitem("右边界剪裁", value=("x", -1, False), goto=ctrl.select),
        ui.menuitem("上边界扩展", value=("y", 1, True), goto=ctrl.select),
        ui.menuitem("上边界剪裁", value=("y", -1, True), goto=ctrl.select),
        ui.menuitem("下边界扩展", value=("y", 1, False), goto=ctrl.select),
        ui.menuitem("下边界剪裁", value=("y", -1, False), goto=ctrl.select)
    ]
    return ret
Exemple #28
0
def recipe_menu(ctrl):
    str_list = [
        "一",
        "二",
        "三",
        "四",
        "五",
        "六",
        "七",
        "八",
        "九",
    ]
    rmenu = []
    for idx, ownerrecipe in enumerate(ctrl.recipes):
        owner, recipe = ownerrecipe
        enabled = recipe.check(ctrl.persons)
        if len(recipe.materials) == 0:
            comments = ["无"]
        else:
            comments = [",".join(["任意%s" % ui.tag(k) if isinstance(k, str) else ui.rank(k, grey=not enabled) +
                                   ui.colored("×%s" % v, color=None if enabled else "grey", attrs=None if enabled else ["bold"]) \
                                   for k, v in recipe.materials])]
        showword = ("方案%s" % str_list[idx]) if ctrl.sub else recipe.name
        suffix = []
        if enabled:
            if not ctrl.sub:
                suffix.append("持有人:%s" % owner.name)
            if owner not in ctrl.persons:
                suffix.append(
                    "费用:%s" %
                    ui.byellow(str(25 + recipe.tmpdict.get("money", 0))))
            if len(suffix) > 0:
                showword += "(%s)" % ",".join(suffix)
            mitem = ui.menuitem(showword,
                                value=(owner, recipe),
                                comments=comments,
                                goto=ctrl.select)
        else:
            mitem = ui.menuitem(showword + "(材料不足)",
                                comments=comments,
                                validator=lambda x: False)
        rmenu.append(mitem)
    return rmenu
Exemple #29
0
def handler_person_select_control(ctrl):
    person_menu = []
    for c in ctrl.candidates:
        person_menu.append(ui.menuitem(c.name, value=c, goto=ctrl.select))
    if len(person_menu) == 1 and ctrl.canskip:
        ctrl.select(person_menu[0].value)
    else:
        ret = ui.menu(person_menu,
                      title=ui.byellow(ctrl.title),
                      goback=True,
                      backmethod=ctrl.close)
Exemple #30
0
def handler_person_dialog_branch(ctx):
    menulist = []
    ui.echo("%s:" % ctx.subject.name)
    for b in ctx.branches:
        bold = ctx.name not in context.script_status or \
               b not in context.script_status[ctx.name]
        menulist.append(
            ui.menuitem(ctx.conversation[b]["content"], value=b, bold=bold))
    ret = ui.menu(menulist)
    ui.echo()
    return ret