Ejemplo n.º 1
0
    def commit(self):
        if not os.path.exists(self.filename):
            print("配置文件不存在,请先使用create创建配置文件")
            return
        from run.record.path_data.DynamicConfig import DynamicConfig
        from lib.db.mysql import Mysql
        import json
        import numpy as np

        sql = "INSERT INTO AreaInfo (level_min,level_max,fly_npc_name,repair_npc_name,heartstone_npc_name,maibox_pos,area_pos,grave_path,reapir_path,`ctime`,`map`,`memo`,fly_npc_gossip,repair_npc_gossip,finder_path) " \
              "VALUES ({a},{b},{c},{d},{e},{f},{g},{h},{i},{j},{k},{l},{m},{n},{o})".format(
            a=DynamicConfig.level_min,
            b=DynamicConfig.level_max,
            c="'" + DynamicConfig.fly_npc_name + "'",
            d="'" + DynamicConfig.repair_npc_name + "'",
            e="'" + DynamicConfig.heartstone_npc_name + "'",
            f="'" + json.dumps(dict(zip([str(x) for x in np.arange(len(DynamicConfig.mailbox_pos))], DynamicConfig.mailbox_pos)),ensure_ascii=False) + "'",
            g="'" + json.dumps(DynamicConfig.area_fighting_pos,ensure_ascii=False) + "'",
            h="'" + json.dumps(dict(zip([str(x) for x in np.arange(len(DynamicConfig.grave_path))], DynamicConfig.grave_path)),ensure_ascii=False) + "'",
            i="'" + json.dumps(dict(zip([str(x) for x in np.arange(len(DynamicConfig.repair_path))], DynamicConfig.repair_path)),ensure_ascii=False) + "'",
            j="'" + self.getFormatTime(True) + "'",
            k="'" + DynamicConfig.map + "'",
            l="'" + DynamicConfig.memo + "'",
            m=DynamicConfig.fly_npc_gossip,
            n=DynamicConfig.repair_npc_gossip,
            o="'" + json.dumps(dict(zip([str(x) for x in np.arange(len(DynamicConfig.finder_path))], DynamicConfig.finder_path)),ensure_ascii=False) + "'",
        )

        #print(sql)
        client = Mysql().getClient()
        cursor = client.cursor()
        try:
            # 执行sql语句
            cursor.execute(sql)
            # 提交到数据库执行
            client.commit()
        except Exception as e:
            # 如果发生错误则回滚
            client.rollback()
            client.close()
            cursor.close()
            print(e)
            print("数据提交失败")
            return

        # 关闭数据库连接
        client.close()
        cursor.close()
        print("数据提交成功")
        return
Ejemplo n.º 2
0
class Monitor(threading.Thread):
    def __init__(self, player: lib.Player):
        super().__init__()
        self.player = player
        self.target = lib.Target()
        self.bagitem = lib.BagItem(scanItems=True)
        self.mysql = Mysql().getClient()
        self.keyrecorder = lib.KeyRecorder()

    def info(self):
        player = self.player
        target = self.target
        bagitem = self.bagitem

        # 玩家信息
        gold = player.getGold()
        cls = player.getClass()
        shape = player.getShapeForm()
        playtime = player.getPlaytime()
        status = player.getStatus()
        playerInfo = {
            "name":
            player.getName(),
            "level":
            player.getLevel(),
            "map":
            player.getArea(),
            "coordi":
            player.getCoordi().toString(),
            "life":
            format(player.getLiftPercent() * 100, '.0f') + "%",
            "mama":
            format(player.getManaPercent() * 100, '.0f') + "%",
            "gold":
            str(gold["gold"]) + "金" + str(gold['silver']) + "银" +
            str(gold['copper']) + "铜",
            # "playtime": str(playtime["hours"]) + "小时",
            "howManyAreAttackingMe":
            player.howManyAreAttackingMe(),
            "status":
            status
        }
        if isinstance(player, lib.Silithus_reputation_player):
            playerInfo['战地任务次数'] = player.counter

        if cls == "战士":  # 战士
            if shape == 1:
                playerInfo['姿态'] = "战斗姿态"
            if shape == 2:
                playerInfo['姿态'] = "防御姿态"
            if shape == 3:
                playerInfo['姿态'] = "狂暴姿态"

        if cls == "盗贼":  # 盗贼
            if shape == 1:
                playerInfo['姿态'] = "未潜行"
            if shape == 2:
                playerInfo['姿态'] = "潜行"

        # TODO 小德 牧师

        # 目标信息
        tt = target.IsTargetOfTargetPlayerAsNumber()
        tt_mapper = ["我看我", "我", "无目标", "其它", "我宠物"]
        targetInfo = {
            "UUID": target.getUUID(),
            "name": target.getName(),
            "class": target.getClass(),
            "level": target.getLevel(),
            "touchByOther": target.isTouchByAnoter(),
            "combatPoint": target.getCombatPoints(),
            "targettarget": "未知" if 0 > tt or tt > 4 else tt_mapper[tt],
            "life": format(target.getLiftPercent() * 100, ".0f") + "%",
            "mama": format(target.getManaPercent() * 100, ".0f") + "%",
            "status": target.getStatus()
        }

        ret = {
            "player": playerInfo,
            "t": targetInfo,
            "bag": bagitem.getAllItems()
        }

        return json.dumps(ret, ensure_ascii=False)

    # 键盘按键
    def keys(self):
        return json.dumps(self.keyrecorder.getRecords())

    def insert_or_update(self, info, keys):
        name = self.player.getName()
        cursor = self.mysql.cursor()
        if name is not None and name != "":
            cursor.execute("select id from monitor where `name`=%s", (name))
            res = cursor.fetchone()
            t = time.strftime("%Y-%m-%d %H:%M:%S",
                              time.localtime(int(time.time())))
            if res is not None and res != 0:
                sql = "update monitor set `info`=%s,`keys`=%s,`ctime`=%s where id=%s"
                args = (info, keys, t, res[0])
            else:
                sql = "insert into monitor (`name`,`info`,`keys`,`ctime`) values (%s,%s,%s,%s)"
                args = [name, info, keys, t]
            cursor.execute(sql, args)
            self.mysql.commit()
            cursor.close()
            return True
        return False

    def run(self) -> None:
        while True:
            info = self.info()
            keys = self.keys()
            self.insert_or_update(info, keys)