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
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)