世界快讯:格斗游戏圈小技巧:python脚本编写的应用
目录
【资料图】
序言
Python模拟键盘鼠标输入
一些简单的小连段
一键出招的实现
结语
2020.07.26更新
kof_robot.py
kof_command.py
kof_hyperparameters.py
kof_utils.py
kyo1.py
举个例子:
序言
前排声明本文只是以KOF13为例介绍python脚本编写的应用,虽然格斗游戏圈小,但是并无意冒犯KOF13的玩家。
笔者本身是个空闲时间打打拳皇街机的键盘小白,偶尔会连线菜鸡互啄。KOF97至今连特瑞无限连都敲得不妥当,KOF98之后的各个版本再也不能按出反摇拉前的指令投,更不用说跑抓这种高难度动作,大学看了三年Abang的视频,去年入手KOF13,到现在除了能站桩打咬草的一套民工BC,实战BC从来都是用来凹NEOMAX,KOF13里的蓄力,八稚女取消乃至最简单的HD取消都做不到,把键盘上的D键都敲坏了也没能按出一次波草的鬼胧取消,实在是悲惨。
昨晚难得打馆长的MISSION挑战,笔者其他角色正常都只能过一两关,熟练些的八神草剃能打通四关,然而第一次玩馆长竟然打到了第六关,那时候就特别想打通,结果第六关的跳A下A目押站D敲了半天都确认不到接半月,心灰意冷下笔者决定开始用科技武装自己通关,这才引出了利用python脚本实现KOF13的连段。
但是在编写连段的过程中,笔者遇到一些python模拟键盘中的一些坑点,并且逐渐发现可以实现一键出招以及实现一些自己永远也打不出的连段,比如八稚女取消乃至无限葵花,于是写了这篇博客来分享。本身格斗游戏圈子就小,KOF13圈就更小了,本文主要是分享python在模拟键盘鼠标这类输入器上的方法。
序言的最后挂上自己的战绩,笔者真的是小白中的小白,编写脚本仅仅是自娱自乐,不会在实战里恶心其他玩家的,万望包涵👇
PS:笔者之所以对战完成率很低就是最近不知道怎么回事一连线就卡死在获取对手资料的界面,挂VPN也不管用,然后就不得不强退,还被封了几天号,实在是太冤枉了。
Python模拟键盘鼠标输入
目前就笔者所知,python可用于操控模拟键盘和鼠标的包有以下三个👇
pymouse包与pykeyboard包;pynput包中的pynput.keyboard与pynput.mouse模块;win32con包与win32api包;
1与2中的包都可以用pip简单安装,3中的两个包大概是python自带的两个包,或者可能是在pywin32包安装时附带安装的两个包。下面给出1与2两种包操控键盘鼠标的代码示例👇
pymouse包与pykeyboard包使用示例👇
from pykeyboard import PyKeyboardk = PyKeyboard()x_dim, y_dim = m.screen_size()m.click(x_dim//2, y_dim//2, 1) #取整除 - 向下取接近除数的整数k.type_string("Hello, World!")# pressing a keyk.press_key("H")# which you then follow with a release of the keyk.release_key("H")# or you can "tap" a key which does bothk.tap_key("e")# note that that tap_key does support a way of repeating keystrokes with a interval time between eachk.tap_key("l",n=2,interval=5)# and you can send a string if needed took.type_string("o World!")#Create an Alt+Tab combok.press_key(k.alt_key)k.tap_key(k.tab_key)k.release_key(k.alt_key)k.tap_key(k.function_keys[5]) # Tap F5k.tap_key(k.numpad_keys["Home"]) # Tap "Home" on the numpadk.tap_key(k.numpad_keys[5], n=3) # Tap 5 on the numpad, thricek.press_key(k.alt_key)k.press_key(k.control_key)####################################################from pymouse import PyMouse# instantiate an mouse objectm = PyMouse()# move the mouse to int x and int y (these are absolute positions)m.move(200, 200)# click works about the same, except for int button possible values are 1: left, 2: right, 3: middlem.click(500, 300, 1)# get the screen sizem.screen_size()# (1024, 768)# get the mouse positionm.position()# (500, 300)
pynput模拟键盘鼠标输入👇
# pynput模拟键盘from pynput.keyboard import Key, Controllerk.press(Key.space)k.release(Key.space)k.press("a")k.press("A")with k.pressed(Key.shift):k.press("a")k.release("a")k.type("Hello")# pynput模拟鼠标from pynput.mouse import Button, Controllerm = Controller()m.position # 鼠标位置m.position = (10,20) # 调整位置m.move(5,-5) # 相对位置移动m.press(Button.left)m.release(Button.left)m.click(Button.left,2)m.scroll(0,2) # 滚两圈滚轮
可以发现pykeyboard和pymouse以及pynput在操控鼠标键盘上的代码是极为相似且非常通俗易懂,笔者没有完善注释应该也可以很明白每一句代码是什么意思。如模拟键盘主要是模拟点击按键和输入字符串两种效果,模拟鼠标则是移动鼠标位置以及点击鼠标按键。事实上pynput应该相对功能更加完善,它可以实现键盘及鼠标事件的监听,这个在本文后面介绍如何编写一键出招时会介绍到事件监听的方法。
但是本文的脚本是基于3中的两个包来实现的。原因是1与2中的包都不能在KOF13运行的环境下成功模拟输入指令,笔者在测试过程中发现如果使用pynput或者pykeyboard来实现模拟键盘输入指令在KOF13中只会起到让角色挑衅一下的效果,虽然不是很明白这里面的机制,笔者猜想可能是因为3中的两个包更贴近硬件底层,而KOF13可能在控制器输入这块做了一些转换。
以下为利用win32con与win32api两个包编写的自定义模拟按键函数👇
# -*- coding: UTF-8 -*-# @author: caoyang# @email: lzwcy110@163.comimport timeimport win32conimport win32apikey2code = { # 键盘上的每个按键对应的键码"0": 49, "1": 50, "2": 51, "3": 52, "4": 53,"5": 54, "6": 55, "7": 56, "8": 57, "9": 58,"A": 65, "B": 66, "C": 67, "D": 68, "E": 69, "F": 70, "G": 71,"H": 72, "I": 73, "J": 74, "K": 75, "L": 76, "M": 77, "N": 78,"O": 79, "P": 80, "Q": 81, "R": 82, "S": 83, "T": 84,"U": 85, "V": 86, "W": 87, "X": 88, "Y": 89, "Z": 90,}def key_down(key): # 按下键盘上的按键keykey = key.upper()vk_code = key2code[key]win32api.keybd_event(vk_code,win32api.MapVirtualKey(vk_code,0),0,0)def key_up(key): # 抬起键盘上的按键keykey = key.upper()vk_code = key2code[key]win32api.keybd_event(vk_code, win32api.MapVirtualKey(vk_code,0),win32con.KEYEVENTF_KEYUP,0)def key_press(key,interval=0.016): # 按下-->抬起键盘上的按键key, 停顿interval时间 key_down(key) time.sleep(interval) key_up(key)
注意到这里主要是涉及按键按下与按键松开两个动作,本质上只要有两个动作就完全足够了。核心函数是win32api.keybd_event,这个函数的详细用法可以参照polyhedronx的博客keybd_event模拟键盘输入,限于篇幅笔者不多作介绍。
有了必要的知识储备后笔者开始编写KOF13的连段脚本。注意以下代码中的key_press, key_up, key_down函数都已经在上述代码中写好了
一些简单的小连段
笔者的上下左右按键为WSAD,ABCD的按键分别为JKUI,AC组合键Y,BD组合键O,AB组合键H,BC组合键L。
先以八神的葵花三段作为一个简单的例子。
注意KOF13对指令的要求是较为精确的,如果只是单纯敲击三遍↓ ← + LP是不会有任何动作发生的👇
# 错误的葵花三段指令interval = 0.016for i in range(3):key_press("s")time.sleep(interval)key_press("a")time.sleep(interval)key_press("j")time.sleep(interval)time.sleep(0.1)
代码执行效果👇
修正代码后我们再来测试一次葵花三段👇
# 正确的葵花三段指令interval = 0.016for i in range(3):key_down("s")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")time.sleep(interval)key_press("j",interval=interval)time.sleep(0.1)
代码执行效果👇
从左边的一列指令可以看到上述代码非常精准地实现了葵花三段的指令。其中每次敲击键盘的时间间隔interval设置为0.016是考虑到KOF全系列都是60帧的画面,每帧大约0.016秒,每段葵花间一定要间隔一定时间,上述代码中设置为0.1秒,否则连续一顿按反摇拳是出不了三段葵花的。
同理我们可以精确实现八稚女的指令👇
# 八稚女脚本interval = 0.016key_down("s")time.sleep(interval)key_down("d")time.sleep(interval)key_up("s")time.sleep(interval)key_down("s")time.sleep(interval)key_up("d")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")time.sleep(interval)key_press("j")
代码执行效果👇
接下来为了实现无限葵花,必不可少的是八稚女取消,即在两段小葵花后立刻输入八稚女指令,然后接着输入两段小葵花,为了测得八稚女取消的精准放帧时间,笔者采用两段小葵花→八稚女取消→大升龙的简易连段来测量,最终得到下面代码中的放帧时间👇
# 八稚女取消示例脚本interval = 0.016# 1. 两段小葵花## 1.1 第一段key_down("s")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")key_press("j",interval=interval)time.sleep(0.25)## 1.2 第二段key_down("s")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")key_press("j",interval=interval)time.sleep(0.03)# 2. 八稚女取消key_down("s")time.sleep(interval)key_down("d")time.sleep(interval)key_up("s")time.sleep(interval)key_down("s")time.sleep(interval)key_up("d")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")time.sleep(interval)key_press("j")time.sleep(0.4)# 3. 大升龙key_press("d")time.sleep(interval)key_down("s")time.sleep(interval)key_down("d")time.sleep(interval)key_up("s")key_up("d")key_press("u")
可知两段小葵花后放帧0.03秒,八稚女指令输入完后放帧0.4秒,调参过程中笔者发现这些放帧的秒数精确度要求几乎已经达到1/50秒,即差不多是1帧的级别,而且这还是笔者在零HD槽的情况下测试出的放帧秒数,有HD槽这段代码就直接会把八稚女放出来,真的难以想象这些能每次都能精确打出八稚女取消的大佬是怎么做到的。代码测试实际效果如下所示(两段小葵花→八稚女取消→大升龙)👇
注意可以看到八神在升龙时没有消耗HD槽,这表明八稚女取消是成功的,但是为了调出这个放帧时间,几乎是花了将近一个小时,因为靠人眼真的很难捕捉到指令的输入的速度是否是合理的。
最后笔者试图实现无限葵花,不过不知道是因为笔者对无限葵花指令的理解有偏差,还是说真的无限葵花对输入指令的节奏要求特别高,总之一直不能实现到无限葵花,即便是EX葵花起接大升龙取消的起手,也葵不出两循环以上,真的是佩服那些用手把无限葵花搓出来的巨佬,这里只能放上无限葵花的脚本代码,但是其中time.sleep()的参数是不能真正实现无限葵花的👇
# 无限葵花脚本interval = 0.016# 1. 无限葵花前先用EX葵花打出高浮空key_down("s")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")key_press("y",interval=interval)time.sleep(0.5)key_down("s")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")key_press("j",interval=interval)time.sleep(0.75)# 2. 再用大升龙进一步提高浮空高度key_press("d")time.sleep(interval)key_down("s")time.sleep(interval)key_down("d")time.sleep(interval)key_up("s")key_up("d")key_press("u")time.sleep(0.4)# 3. 无限葵花开始for i in range(10):# 3.1 第一段小葵花key_down("s")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")key_press("j",interval=0.016)time.sleep(0.05)# 3.2 第二段小葵花key_down("s")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")time.sleep(interval)key_press("j",interval=0.016)time.sleep(0.25)# 3.3 八稚女取消key_down("s")time.sleep(interval)key_down("d")time.sleep(interval)key_up("s")time.sleep(interval)key_down("s")time.sleep(interval)key_up("d")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")time.sleep(interval)key_press("j")time.sleep(2)
其他一些零碎的指令也不多作介绍了,笔者单单测试出一个后后后撤步的指令就发现非常困难,很难做到一个又快又短的后撤步,这也就导致很难实现44236A的无限空雷,但是实际上可以用2369A打有限空雷,这个用脚本实现还是非常容易的👇
interval = 0.016# 1. EX黄石公打出高浮空key_down("s")time.sleep(interval)key_down("a")time.sleep(interval)key_up("s")time.sleep(interval)key_up("a")time.sleep(interval)key_press("y")time.sleep(0.2)# 2. 2369A有限空雷for i in range(10):key_down("s")time.sleep(interval)key_down("d")time.sleep(interval)key_up("s")time.sleep(interval)key_up("d")time.sleep(interval)key_down("d")key_down("w")time.sleep(0.1)key_up("d")key_up("w")key_press("j")time.sleep(0.5)
代码执行效果如下👇
其实像笔者这样每个单招都要手动写确实太不经济,笔者有想过把每个角色的出招表上的每个招都写成脚本存起来,以后连段里需要直接调用就可以了,KOF13的36个角色的文件夹都建好了,但是肯定是有生之年系列了,大约笔者是很难把每个人的招都能写完,确实是太浩繁的工作量了。而且也许这种事情用TAS是更适合的👇
一键出招的实现
其实上面的连段脚本如果真的想用到实战几乎不太可能,还需要对实战画面进行监听分析才能真正生效,这是极为复杂的。那么接下来的一键出招脚本可能确实是有所用处的。
笔者一直困扰于反摇拉前的投技总是按不出来,比如八神的屑风,红丸的红丸投,大门的天地返,键盘确实按起来是很别扭的,在MISSION凡是遇到这些招就只能干瞪眼根本出不来(比如八神下A接屑风,这辈子是安不出来了),那么这里就可以用一键出招来完美解决。
利用pynput的监听器对象Listener可以很容易的实现这件事情👇
import timefrom pynput import keyboarddef on_press(key):try:print("字母键{}被点击".format(key.char))if key.char=="q":"""# 升龙key_press("d",0.016)key_down("s")time.sleep(0.016)key_down("d")time.sleep(0.016)key_up("s")key_up("d")key_press("k")"""# 红丸投key_down("d")time.sleep(0.016)key_down("s")time.sleep(0.016)key_up("d")time.sleep(0.016)key_down("a")time.sleep(0.016)key_up("s")time.sleep(0.016)key_up("a")key_press("d")key_press("j")except AttributeError:print("特殊键{}被点击".format(key))def on_release(key):print("{} 释放".format(key))if key==keyboard.Key.esc: # 停止监听return Falsewith keyboard.Listener(on_press=on_press,on_release=on_release,) as listener:listener.join()
keyboard类中的Listener模块接收两个函数参数,分别是对应按键点击和按键松开需要执行的脚本,只需要将升龙或者红丸投的脚本天价到on_press函数中就可以轻松实现一键出招(上述代码中将一键出招设置在Q键上)👆
通过这样的脚本,可以轻松实现前冲跑抓的效果👇
一键跑红丸投效果展示👇
当然你可以将一键出招变成一键出一个大连段,这个也是可以很容易的实现的,只是一些在放帧或目押要求非常高的连段是很难编写的。
结语
KOF13是个好游戏,希望大家不要用脚本来恶心对手!笔者本人兴趣使然,本文仅是对Python中的脚本应用做一个简要的介绍。笔者认为这类脚本的应用可以有很多。
分享学习,共同进步!
2020.07.26更新
最近抽空把代码整合了一下,有需求的可以自取,写了波草的一些比较帅气的连段。有些放帧真的很难调,比如波草MISSION的第五关,EX暗拂→胧车后接鬼烧一直都接不上,我手操升龙也一直接不上去,最后无奈只能放弃了。感觉一个个写还是太废时间了,调得我头都大了,只能搁置了先👇
下面的各个py文件代码代码结构如下所示👇
../kof_robot.py --kof机器人类: 目前只写了一个一键出招的函数../kof_command.py --kof指令类: 里面写了十几种诸如正摇,反摇,反摇拉前,前拉正摇,蓄力技,特殊技等函数../kof_hyperparameters.py --kof超参类: 里面主要保存键位设置和日志文件夹文件名等信息../kof_utils.py --kof工具类: 里面主要是win32con模拟按键的函数,读取超参数的函数../combo_script/kyo/kyo1.py --波草连段总结: 目前写了两个鬼胧循环的BC连,以及波草MISSION里的几个挑战任务../logging/ --新建一个logging文件夹../temp/ --新建一个temp文件夹
Tips:根目录和../combo_script/kyo1/两个目录下都新建一个空的__init__.py文件,这两个目录的py文件是要互相调用的。如果想要测试连段直接运行kyo1.py即可,想要测试一键出招运行kof_robot.py即可,注释都写得很详细的,通俗易懂。
代码自取👇
kof_robot.py
# -*- coding: UTF-8 -*-# @author: caoyang# @email: lzwcy110@163.comimport osimport timefrom pynput import keyboardfrom kof_utils import *from kof_command import Commandfrom combo_script.kyo1 import kyo1from combo_script.benimaru import benimaruclass Robot(object):def __init__(self,hp):self.hp = hpdef set_hotkey(self,key2job,abort_key=None,is_logging=True): # 设置热键: 用于一键出招if abort_key is None:abort_key = keyboard.Key.esc # 设置一个默认的退出键print("Warning: Expect param "abort_key" is not None for security. Press the key "esc" to exit from this hotkey job.")if is_logging: # 如果需要记录日志文件: 新建默认名称的文件夹filepath = os.path.join(self.hp.dir_logging,"hotkey_{}.log".format(time.strftime("%Y%m%d%H%M%S")))with open(filepath,"w") as f:logging_string = "Logging for function "set_hotkey" exiting on "{}" with jobs:\n".format(abort_key)for key,(function,params) in key2job.items(): logging_string += " - {}|{}|{}\n".format(key,function,params)f.write(logging_string)hot_keys = list(map(lambda x: x.lower(),key2job.keys())) # 所有热键的集合: 转小写字母def _on_press(key): # 点击按键: 触发任务try: key_string = key.charexcept AttributeError: # 目前热键只能在字母及数字(非小键盘)按键上触发logging_string = "Press: {}".format(key)print(logging_string)if is_logging:with open(filepath,"a") as f: f.write(logging_string+"\n")return Truelogging_string = "Press: {}".format(key_string)print(logging_string)if is_logging:with open(filepath,"a") as f: f.write(logging_string+"\n")if key_string in hot_keys:function,params = key2job.get(key_string.lower(),key2job.get(key_string.upper()))# 你他娘的还真是个天才: 这个愚蠢的写法可以水一篇博客"""code_string = "function("for i in range(len(params)): code_string += "params[{}],".format(i)code_string += ")"eval(code_string)"""function(*params) # 直接加个星号就完事了return Truedef _on_release(key): # 松开按键: 一般不触发任务logging_string = " - Release: {}".format(key)print(logging_string)if is_logging:with open(filepath,"a") as f: f.write(logging_string+"\n")if key==abort_key:logging_string = "Job aborted."print(logging_string)if is_logging:with open(filepath,"a") as f: f.write(logging_string+"\n")return False # 停止监听return Truewith keyboard.Listener(on_press=_on_press,on_release=_on_release) as listener: listener.join()if __name__ == "__main__":hp = get_hparams()c = Command(hp)r = Robot(hp)"""r.set_hotkey(key2job={#"m":(kyo1.combo1,(hp,c)),#"n":(kyo1.combo2,(hp,c)),#"b":(kyo1.combo3,(hp,c)),},abort_key=None,is_logging=False)"""r.set_hotkey(key2job={"m":(c.half_clockwise_forward,("AC",1)),"n":(c.half_clockwise_forward,("AC",2)),"0":(c.half_clockwise_forward,("A",1)),"9":(c.half_clockwise_forward,("A",2)),},abort_key=None,is_logging=False)
kof_command.py
# -*- coding: UTF-8 -*-# @author: caoyang# @email: lzwcy110@163.com# 一些常见的正摇反摇指令: 拳皇13有少数不是单纯正摇反摇的指令(如Kim的超必杀和真超必杀), 需要额外去考虑吧import osimport timefrom kof_utils import *from kof_hyperparameters import HyperParametersclass Command(object):def __init__(self,hp):self.hp = hpself.ons = ["a","b","c","d","ac","bd","ab","cd","bc",None]self.direction2keys = { # 方向键对应键盘按键1: [hp.down,hp.left], # ↙2: [hp.down], # ↓3: [hp.down,hp.right], # ↘4: [hp.left], # ←5: [], # 回中6: [hp.right], # →7: [hp.left,hp.up], # ↖8: [hp.up], # ↑9: [hp.right,hp.up], # ↗}def check_params(self,on): # 指令输入后点击on, 默认输入指令时玩家位于1Pon = None if on is None else on.lower()assert on in self.ons, "Expect string param "on" in {} but got {} .".format(self.ons,on)def backstep(self,player=1): # 后撤步passdef jump(self,direction,mode="normal",stime=0.05,ltime=0.15): # 默认大跳, 小跳持续时间0.05s, 大跳持续时间0.15sassert direction in [7,8,9]assert mode in ["long","middle","normal","short"], "Expect string param "mode" in ["long","middle","short","normal"] but got {} .".format(mode)"""mode 参数说明: - long大影跳: 按方向键↓, 跳跃持续时间>0.1s, 推荐时间0.15s - middle小影跳: 按方向键↓, 跳跃持续时间, 持续时间0.01~0.08s, 推荐时间0.05s - normal大跳: 跳跃持续时间>0.1s, 推荐时间0.15s - short小跳: 跳跃持续时间0.01~0.08s, 推荐时间0.05s"""direction_keys = self.direction2keys.get(direction)if mode=="long" or mode=="middle": key_press(self.hp.down) # 影跳需要蓄力for direction_key in direction_keys: key_down(direction_key) # 按下方向键if mode=="long" or mode=="normal": time.sleep(ltime) # 大影跳, 大跳time.sleep(ltime)if mode=="short" or mode=="middle": time.sleep(ltime) # 小影跳, 小跳time.sleep(ltime)for direction_key in direction_keys: key_up(direction_key) # 松开方向键def special_skill(self,direction,on=None,times=1): # 特殊技: direction取值为[1,2,3,4,5,6,7,8,9], 其中5就是普通攻击assert direction in [1,2,3,4,5,6,7,8,9], "Expect integer param "direction" in [1,2,3,4,5,6,7,8,9] but got {} .".format(direction)self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())direction_keys = self.direction2keys.get(direction) # 获取该direction需要按键盘上的哪些键for i in range(times): # 一般来说times都是1, 极少的特殊技是需要点2次及以上的for direction_key in direction_keys: key_down(direction_key) # 同时按下方向键if key is not None and i==times-1: key_press(key,interval=self.hp.press_time)for direction_key in direction_keys: key_up(direction_key) # 同时抬起方向键: 在点击key之后哦def storage_skill(self,direction1,direction2,on=None,stime=0.5): # 蓄力技: direction1为蓄力方向, direction2为出力方向, 这个函数用处不大, 因为大部分蓄力技都是在空中或连段中的间隙开始蓄力, 可能只能用于像莉安娜的双蓄力BC中assert direction1 in [1,2,3,4,6], "Expect integer param "direction1" in [1,2,3,4,6] but got {} .".format(direction1)assert direction2 in [4,6,7,8,9], "Expect integer param "direction2" in [4,6,7,8,9] but got {} .".format(direction2)""" 未完成 """passdef half_clockwise(self,on=None,player=1,times=1): # 反摇(半圈): e.g. 琴月阳if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())for i in range(times):key_down(self.hp.right)time.sleep(self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.right)time.sleep(self.hp.press_time)key_down(self.hp.left)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.left)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.half_anticlockwise(on=on,player=1,times=times)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def half_anticlockwise(self,on=None,player=1,times=1): # 正摇(半圈): e.g. 旋风拳(东丈)if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())for i in range(times):key_down(self.hp.left)time.sleep(self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.left)time.sleep(self.hp.press_time)key_down(self.hp.right)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.right)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.half_clockwise(on=on,player=1,times=times)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def quarter_clockwise(self,on=None,player=1,times=1): # 反摇(1/4圈): e.g. 葵花if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())for i in range(times):key_down(self.hp.down)time.sleep(self.hp.press_time)key_down(self.hp.left)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.left)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.quarter_anticlockwise(on=on,player=1,times=times)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def quarter_anticlockwise(self,on=None,player=1,times=1): # 正摇(1/4圈): e.g. 荒咬if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())for i in range(times):key_down(self.hp.down)time.sleep(self.hp.press_time)key_down(self.hp.right)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.right)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.quarter_clockwise(on=on,player=1,times=times)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def forward_quarter_anticlockwise(self,on=None,player=1): # 前拉正摇(1/8圈): e.g. 鬼烧if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_press(self.hp.right,interval=self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_down(self.hp.right)time.sleep(self.hp.press_time)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)key_up(self.hp.down)key_up(self.hp.right)elif player==2: self.backward_quarter_clockwise(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def backward_quarter_clockwise(self,on=None,player=1): # 后拉反摇(1/8圈): e.g. 胧车if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_press(self.hp.left,interval=self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_down(self.hp.left)time.sleep(self.hp.press_time)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)key_up(self.hp.down)key_up(self.hp.left)elif player==2: self.forward_quarter_anticlockwise(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def forward_backward_forward(self,on=None,player=1): # 前后前: e.g. 暂烈拳(天狗)if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_press(self.hp.right,interval=self.hp.press_time)key_press(self.hp.left,interval=self.hp.press_time)key_press(self.hp.right,interval=self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.backward_forward_backward(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def backward_forward_backward(self,on=None,player=1): # 后前后: e.g. 暂列拳(天狗2P)if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_press(self.hp.left,interval=self.hp.press_time)key_press(self.hp.right,interval=self.hp.press_time)key_press(self.hp.left,interval=self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.forward_backward_forward(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def half_clockwise_forward(self,on=None,player=1): # 反摇(半圈)拉前: e.g. 红丸投if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_down(self.hp.right)time.sleep(self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.right)time.sleep(self.hp.press_time)key_down(self.hp.left)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.left)time.sleep(self.hp.press_time)key_press(self.hp.right,interval=self.hp.press_time) # 比half_clockwise函数多一步拉前if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.half_anticlockwise_backward(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def half_anticlockwise_backward(self,on=None,player=1): # 正摇(半圈)拉后: e.g. 红丸投(2P)if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_down(self.hp.left)time.sleep(self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.left)time.sleep(self.hp.press_time)key_down(self.hp.right)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.right)time.sleep(self.hp.press_time)key_press(self.hp.left,interval=self.hp.press_time) # 比half_anticlockwise函数多一步拉后if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.half_clockwise_forward(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def forward_half_anticlockwise(self,on=None,player=1): # 前拉正摇(半圈): e.g. 霸王翔吼拳(坂崎百合)if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_press(self.hp.right,interval=self.hp.press_time) # 比half_anticlockwise函数多一步拉前key_down(self.hp.left)time.sleep(self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.left)time.sleep(self.hp.press_time)key_down(self.hp.right)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.right)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.backward_half_clockwise(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def backward_half_clockwise(self,on=None,player=1): # 后拉反摇(半圈): e.g. 霸王翔吼拳(坂崎百合2P)if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_press(self.hp.left,interval=self.hp.press_time) # 比half_clockwise函数多一步拉后key_down(self.hp.right)time.sleep(self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.right)time.sleep(self.hp.press_time)key_down(self.hp.left)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.left)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.forward_half_anticlockwise(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def quarter_anticlockwise_half_clockwise(self,on=None,player=1): # 正摇(1/4圈)反摇(半圈): e.g 八稚女if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_down(self.hp.down)time.sleep(self.hp.press_time)key_down(self.hp.right)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.right)time.sleep(self.hp.press_time)key_down(self.hp.left)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.left)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.quarter_clockwise_half_anticlockwise(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def quarter_clockwise_half_anticlockwise(self,on=None,player=1): # 反摇(1/4圈)正摇(半圈): e.g 大蛇剃if player==1:self.check_params(on)key = None if on is None else self.hp.__getattribute__(on.lower())key_down(self.hp.down)time.sleep(self.hp.press_time)key_down(self.hp.left)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_down(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.left)time.sleep(self.hp.press_time)key_down(self.hp.right)time.sleep(self.hp.press_time)key_up(self.hp.down)time.sleep(self.hp.press_time)key_up(self.hp.right)time.sleep(self.hp.press_time)if key is not None: key_press(key,interval=self.hp.press_time)elif player==2: self.quarter_anticlockwise_half_clockwise(on=on,player=1)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))if __name__ == "__main__":hp = get_hparams()c = Command(hp)time.sleep(7)for i in range(5):key_press(hp.down,0.01)key_down(hp.right)key_down(hp.up)time.sleep(0.05)key_up(hp.right)key_up(hp.up)time.sleep(2)
kof_hyperparameters.py
# -*- coding: UTF-8 -*-# @author: caoyang# @email: lzwcy110@163.com# 项目超参数import argparseclass HyperParameters:parser = argparse.ArgumentParser("--")# 1. 常用文件夹与文件名parser.add_argument("--dir_logging",default="logging",help="日志数据文件夹",type=str)parser.add_argument("--dir_temp",default="temp",help="临时数据文件夹",type=str)# 2. 键位设置parser.add_argument("--left",default="a",help="方向键左",type=str)parser.add_argument("--right",default="d",help="方向键右",type=str)parser.add_argument("--up",default="w",help="方向键上",type=str)parser.add_argument("--down",default="s",help="方向键下",type=str)parser.add_argument("--a",default="j",help="A键",type=str)parser.add_argument("--b",default="k",help="B键",type=str)parser.add_argument("--c",default="u",help="C键",type=str)parser.add_argument("--d",default="i",help="D键",type=str)parser.add_argument("--ac",default="y",help="AC组合键",type=str)parser.add_argument("--bd",default="o",help="BD组合键",type=str)parser.add_argument("--bc",default="l",help="BC组合键",type=str)parser.add_argument("--ab",default="h",help="AB组合键",type=str)parser.add_argument("--cd",default="1",help="CD组合键",type=str)# 3. 常用变量parser.add_argument("--press_time",default=0.016,help="按键持续时间",type=float)if __name__ == "__main__":hyperparameters = HyperParameters()parser = hyperparameters.parserhp = parser.parse_args()print(hp.__getattribute__("ac"))
kof_utils.py
# -*- coding: UTF-8 -*-# @author: caoyang# @email: lzwcy110@163.comimport timeimport win32conimport win32apifrom kof_hyperparameters import HyperParametersdef get_hparams(): # 读取kof_hyperparameters.py中保存的超参数hyperparameters = HyperParameters()parser = hyperparameters.parserhp = parser.parse_args()return hpdef key_down(key): # 按下按键keykey = key.upper()keycode = ord(key)win32api.keybd_event(keycode,win32api.MapVirtualKey(keycode,0),0,0) # 其中第三个参数0表示按下按键: 没有特别的变量值对应def key_up(key): # 抬起按键keykey = key.upper()keycode = ord(key)win32api.keybd_event(keycode,win32api.MapVirtualKey(keycode,0),2,0) # 其中第三个参数2表示抬起按键: 对应win32con.KEYEVENTF_KEYUPdef key_press(key,interval=0.016): # 按下-->抬起键盘上的按键key, 停顿interval时间 key_down(key) time.sleep(interval) key_up(key)if __name__ == "__main__":hp = get_hparams()print(hp)
kyo1.py
import osimport syssys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))import timefrom kof_utils import *from kof_command import Commanddef skill1(hp,c,on="AC",player=1,jtime=0.08): # 空蛇: 21412369, on取值范围:{"AC","A","C"}, 无关大小写, jtime是跳跃起来的持续时间(高/低空蛇), 默认0.08是低空蛇if player==1:key_down(hp.down)time.sleep(hp.press_time)key_down(hp.left)time.sleep(hp.press_time)key_up(hp.down)time.sleep(hp.press_time)key_down(hp.down)time.sleep(hp.press_time)key_up(hp.left)time.sleep(hp.press_time)key_down(hp.right)time.sleep(hp.press_time)key_up(hp.down)time.sleep(hp.press_time)key_up(hp.right)time.sleep(hp.press_time)key_down(hp.right)key_down(hp.up)time.sleep(jtime) # Tip: 这个跳跃要持续一段时间key_up(hp.right)key_up(hp.up)time.sleep(hp.press_time)key_press(hp.__getattribute__(on.lower()),interval=hp.press_time)elif player==2:key_down(hp.down)time.sleep(hp.press_time)key_down(hp.right)time.sleep(hp.press_time)key_up(hp.down)time.sleep(hp.press_time)key_down(hp.down)time.sleep(hp.press_time)key_up(hp.right)time.sleep(hp.press_time)key_down(hp.left)time.sleep(hp.press_time)key_up(hp.down)time.sleep(hp.press_time)key_up(hp.left)time.sleep(hp.press_time)key_down(hp.left)key_down(hp.up)time.sleep(jtime) # Tip: 这个跳跃要持续一段时间key_up(hp.left)key_up(hp.up)time.sleep(hp.press_time)key_press(hp.__getattribute__(on.lower()),interval=hp.press_time)else: raise Exception("Expect integer param "player" in [1,2] but got {} .".format(player))def combo1(hp,c): # 版边: 八十八式-->bc-->八十八式-->鬼胧×4-->鬼烧-->天丛云c.special_skill(direction=3,on="D",times=1) # 八十八式time.sleep(0.6)key_press(hp.bc) # bctime.sleep(0.16)c.special_skill(direction=3,on="D",times=1) # 八十八式time.sleep(0.6)c.forward_quarter_anticlockwise(on="A",player=1) # 鬼烧time.sleep(0.1)c.backward_quarter_clockwise(on="B",player=1) # 胧车time.sleep(0.88) # Tip: 第一个鬼胧的放帧时间要稍长一些, 否则人物浮空太高会导致后面的鬼胧断连for i in range(4): # 鬼胧×3c.forward_quarter_anticlockwise(on="A",player=1)time.sleep(0.1)c.backward_quarter_clockwise(on="B",player=1)time.sleep(0.86)c.forward_quarter_anticlockwise(on="A",player=1) # 鬼烧c.quarter_anticlockwise(on="AC",player=1,times=2) # 天丛云def combo2(hp,c): # 版边: 小影跳奈落落-->近重拳-->八十八式-->bc-->鬼胧×5-->鬼烧-->天丛云c.jump(direction=9,mode="middle") # 小影跳time.sleep(0.2)c.special_skill(direction=2,on="C",times=1) # 奈落落time.sleep(0.425)key_press(hp.c,interval=hp.press_time) # 近重拳time.sleep(0.1) # Tip: 近重拳接八十八式一定要快c.special_skill(direction=3,on="D",times=1) # 八十八式time.sleep(0.5)key_press(hp.bc) # bctime.sleep(0.16)c.forward_quarter_anticlockwise(on="A",player=1) # 鬼烧time.sleep(0.1)c.backward_quarter_clockwise(on="B",player=1) # 胧车time.sleep(0.89) # Tip: 第一个鬼胧的放帧时间要稍长一些, 否则人物浮空太高会导致后面的鬼胧断连for i in range(4): # 鬼胧×4c.forward_quarter_anticlockwise(on="A",player=1)time.sleep(0.1)c.backward_quarter_clockwise(on="B",player=1)time.sleep(0.86)c.forward_quarter_anticlockwise(on="A",player=1) # 鬼烧c.quarter_anticlockwise(on="AC",player=1,times=2) # 天丛云def combo3(hp,c): # 版边(不稳定): 小影跳奈落落-->近重拳-->八十八式-->七十五式改-->胧车-->七十五式改-->胧车-->鬼烧(-->七十五式改-->空蛇(EX)-->胧车-->鬼烧)c.jump(direction=9,mode="middle") # 小影跳time.sleep(0.2)c.special_skill(direction=2,on="C",times=1) # 奈落落time.sleep(0.425)key_press(hp.c,interval=hp.press_time) # 近重拳time.sleep(0.1) # Tip: 近重拳接八十八式一定要快c.special_skill(direction=3,on="D",times=1) # 八十八式time.sleep(0.4) # Tip: 非bc状态下八十八式要一段快速取消c.quarter_anticlockwise(on="D",player=1,times=1) # 七十五式改time.sleep(1.25)c.backward_quarter_clockwise(on="B",player=1) # 胧车time.sleep(0.61)c.quarter_anticlockwise(on="B",player=1,times=1) # 七十五式改time.sleep(1.2)c.backward_quarter_clockwise(on="B",player=1) # 胧车time.sleep(0.6)c.forward_quarter_anticlockwise(on="A",player=1) # 鬼烧"""time.sleep(0.25)c.quarter_anticlockwise(on="D",player=1,times=1) # 七十五式改time.sleep(1.1)c.backward_quarter_clockwise(on="B",player=1) # 胧车time.sleep(0.61)c.quarter_anticlockwise(on="B",player=1,times=1) # 七十五式改time.sleep(0.59)skill1(hp,c,on="AC") # EX空蛇time.sleep(1)c.backward_quarter_clockwise(on="B",player=1) # 胧车time.sleep(0.603)c.forward_quarter_anticlockwise(on="A",player=1) # 鬼烧"""def mission1(hp,c):passdef mission2(hp,c):passdef mission3(hp,c):passdef mission4(hp,c): # 版边: 小影跳奈落落-->近重拳-->八十八式-->琴月阳-->七十五式改-->胧车-->胧车(EX)c.jump(direction=9,mode="middle") # 小影跳time.sleep(0.2)c.special_skill(direction=2,on="C",times=1) # 奈落落time.sleep(0.425)key_press(hp.c,interval=hp.press_time) # 近重拳time.sleep(0.1) # Tip: 近重拳接八十八式一定要快c.special_skill(direction=3,on="D",times=1) # 八十八式time.sleep(0.4) # Tip: 非bc状态下八十八式要一段快速取消c.half_clockwise(on="B",player=1,times=1) # 琴月阳time.sleep(0.1)c.quarter_anticlockwise(on="D",player=1,times=1) # 七十五式改time.sleep(1.35) # Tip: 这个间隔尽可能短, 确保胧车踢到的高度较高c.backward_quarter_clockwise(on="B",player=1) # 胧车time.sleep(0.65)c.backward_quarter_clockwise(on="BD",player=1) # 胧车(EX)def mission5(hp,c): # 版边: 小影跳轻脚-->近重拳-->八十八式-->七十五式改-->胧车-->空蛇-->暗拂-->暗拂(EX)-->胧车-->鬼烧-->空蛇-->琴月阳c.jump(direction=9,mode="middle") # 小影跳time.sleep(0.2)key_press(hp.b,interval=hp.press_time) # 轻脚time.sleep(0.425)key_press(hp.c,interval=hp.press_time) # 近重拳time.sleep(0.1) # Tip: 近重拳接八十八式一定要快c.special_skill(direction=3,on="D",times=1) # 八十八式time.sleep(0.4) # Tip: 非bc状态下八十八式要一段快速取消c.quarter_anticlockwise(on="D",player=1,times=1) # 七十五式改time.sleep(1.25)c.backward_quarter_clockwise(on="B",player=1) # 胧车time.sleep(0.05)c.quarter_clockwise_half_anticlockwise(on="A",player=1) # 空蛇: 此时已经在空中, 直接摇大蛇剃即可time.sleep(1.3)c.quarter_anticlockwise(on="A",player=1,times=1) # 暗拂time.sleep(0.63)c.quarter_anticlockwise(on="AC",player=1,times=1) # 暗拂(EX)time.sleep(0.6)c.backward_quarter_clockwise(on="B",player=1) # 胧车time.sleep(0.61)c.forward_quarter_anticlockwise(on="A",player=1) # 鬼烧time.sleep(0.05)c.quarter_clockwise_half_anticlockwise(on="A",player=1) # 空蛇: 此时已经在空中, 直接摇大蛇剃即可time.sleep(1)c.half_clockwise(on="B",player=1,times=1) # 琴月阳def temp(hp,c):c.forward_quarter_anticlockwise(on="A",player=1) # 鬼烧time.sleep(0.05)c.quarter_clockwise_half_anticlockwise(on="A",player=1) # 空蛇: 此时已经在空中, 直接摇大蛇剃即可time.sleep(1)c.half_clockwise(on="B",player=1,times=1) # 琴月阳if __name__ == "__main__":hp = get_hparams()c = Command(hp)time.sleep(6)combo2(hp,c)
举个例子:
运行KOF13进入练习模式选择波草,按WIN键退出到桌面,运行kyo1.py(注意kyo1.py里最后那块是暂停了6秒就是等待打开KOF13)然后立即点开KOF13界面,就会看到跳奈起手的鬼胧五循环接NEOMAX的735伤害的标准BC连(即combo2函数)。运行kof_robot.py后打开KOF13可以进入一键出招模式,点击ESC退出一键出招。要出什么招可以自定义,目前设置的是m键是1P的EX红丸投,n键是2P的EX红丸投,0键是1P的红丸投,9键是2P的红丸投;不过就笔者现在网战的经验是,不如设成一键升龙靠谱,用投技去抢招,要么就是按不出来,要么就是一顿毒打。
标签:
相关推荐:
精彩放送:
- []世界热资讯!Mac电脑上怎么设置手写输入?Mac自带手写输入法设置教程
- []数据库性能测试工具——BenchmarkFactory
- []世界热点!google官方安装指导:installation跑数据集
- []【环球报资讯】北京2022年冬奥会吉祥物“冰墩墩”发布
- []天天简讯:魔兽世界彻底没人玩了?全球服务器最新人口普查 欧服人数最多
- []要闻:古人“折柳送别”的习俗起源于什么时候?折柳赠别的风俗介绍
- []【数据更新】iPhone11系列数据升级至4.1版
- []春心动矣是什么意思?光磊收藏系列开山之作
- []双节同庆手抄报怎么画?双节同庆手抄报
- []当前讯息:吵架会导致心肌梗死吗?心肌梗死的根本原因是什么?
- []环球简讯:侠盗飞车罪恶都市下水有什么秘籍?侠盗飞车罪恶都市下水秘籍
- []世界热点!摄入过量食盐有什么危害?可能引起高血压
- []支付宝商家收款码怎么开通?开通方法来了
- []天天微头条丨小纹身价格一般多少钱?小纹身价格介绍
- []环球新动态:会议电话的组成是什么?会议电视系统有哪些?
- []白了少年头的上一句是什么?白了少年头出自哪里?
- []环球短讯!关于紫石英事件你了解多少?关于紫石英事件的介绍
- []威胁的近义词是什么?威胁的近义词有哪些?
- []墓土彩虹在哪里?墓土彩虹相关内容介绍
- []【天天聚看点】历史上的李温把皇位传给了谁?详情介绍
- []淘宝超级店长是什么?超级店长适用于所有淘宝网店
- []李焕英真实人物是谁?是谁的原型怎么发生意外的?
- []电脑假死怎么办?电脑假死的三种解决方法
- []天天资讯:哪家的移动电源做的好?泓能移动电源价格介绍
- []cmd命令提示符详细介绍
- []全球即时:全员加速中猎人军团 全员加速中猎人名单
- []tooky京崎手机手绘密码忘记了怎么办?解锁教程了解一下
- []唐山12中和23中高中哪所学校好?两校实力旗鼓相当
- []环球快讯:三星S5830i内存不足怎么办?刷机教程来了
- []关于大熊猫的资料大全300字 你知道多少?
- []视焦点讯!白景屹和刘柏辛分手了没有?刘柏辛和小白什么时候在一起的?
- []今日快看!一台电脑多少瓦?电脑功耗如何?
- []天天信息:梢棒是什么意思?梢棒的详情介绍
- []景甜到底什么背景?景甜个人资料介绍?
- []今日要闻!无线路由是什么?无线路由有哪些应用?
- []今日热门!dota2为什么一直显示连接至游戏协调服务器中?原因分析
- []世界动态:课外常识:夏天的英文单词怎么说?夏天的英文单词介绍
- []安卓设备的USB周边和安卓USB配件如何调试?具体操作方法
- []【环球时快讯】动态语言:C、PHP、Perl、Ruby哪个更适合你?
- []今日看点:洛克王国果子怎么得?洛克王国手游V3.2安卓版
- []今日精选:最后的勇士讲述了什么故事?最后的勇士剧情介绍?
- []天天看热讯:2016笔记本哪款销量好?2016笔记本销量排行榜大全
- []当前热讯:慧通V8机动车检测站收费管理软件 实现数据电子化
- []【环球新视野】QQ如何使用声卡?QQ检测不到声音怎么办?
- []每日视讯:什么是车载gps终端?车载GPS终端有什么作用?
- []如何解决家中的无线信号覆盖问题?wifi无线覆盖解决方案
- []世界热文:七个巧克力怎么分给三个人?七招巧很多
- []当前要闻:三极管进入截止区与饱和区的条件及制作方法
- []精选!CentOS怎么升级Proftpd?CentOS升级Proftpd教程
- []每日报道:浙江理工大学在杭州什么位置?浙江理工大学资料介绍?
- []ppt中的控件工具箱——ShockwaveFlash
- []如何用ghost进行一键还原?六个步骤教你正确使用
- []【世界时快讯】宁波大榭島有哪些景点?宁波大榭島附近的景点介绍?
- []天天实时:教你用4种方法实现项目目录中的界面功能
- []全球快看点丨擦玻璃神器有哪些?擦玻璃神器汇总?
- []什么是SEM?SEM和SEM有什么区别?
- []通讯!Windows生态系统:限制用户的应用程序
- []天天观点:yydsNginx–无root权限安装(内网安装)
- []当前滚动:dns输入错误怎么办?dns设置错误解决办法
- []umd是什么格式?umd格式怎么打开?
- []全球热议:矣怎么组词?矣的组词有哪些?
- []当前信息:苹果ipad3 ios6.1怎么越狱?苹果ipad3 ios6.1越狱教程介绍
- []珠海吉林大学在哪里?珠海吉林大学怎么样?
- []看热讯:【技术】空间光调制器与激光加工技术的应用介绍
- []每日关注!如何安装HTC更新实用程序?Android手机更新实用程序(RUU)的使用方法
- []环球快报:驱动到底是什么?我们应该如何安装和更新驱动?
- []当前头条:CSS文件中的中文字体名称怎么写?CSS常用的中文字体名称对照表
- []世界今亮点!Win10怎么关闭自动更新?Win10关闭自动更新方法
- []环球最新:华为g525可以刷鸿蒙系统吗?华为g525强刷官方rom系统的教程
- []热点在线丨商标买卖网站哪个靠谱?尚标商标转让网商标购买平台
- []解析ElasticSearch ElasticSearch字段类型解析
- []当前观点:互联网广告表现形式有哪些?一文读懂互联网广告分类及收费方式
- []【热闻】博彩股集体走强 澳门3月博彩毛收入127.38亿澳门元
- []ClamAV病毒扫描工具怎么安装?ClamAV3.扫描工具安装使用教程
- []世界聚焦:如何设置默认浏览器?谷歌浏览器设置默认Tip流程
- []【世界时快讯】港股内房股多数上涨 裕田中国涨超8%、中海涨超7%
- []当前滚动:浙江余姚工业园区建设公司4亿中票回售 并调整利率至3.50%
- []SEO优化中如何利用爱站工具去分析搜索引擎蜘蛛?
- []环球视点!天山铝业:截止3月31日公司股东人数71783人
- []阳澄湖滨酒店和新江南8.51亿元商业ABS更新至“已受理”
- []【全球新要闻】博主探店变“探钱”,消费者避雷变“踩雷”
- []焦点热文:4月3日限售股解禁一览(名单)
- []环球今亮点!周口城投10亿元私募债项目更新至“已受理”
- []世界快播:金能科技:截至2023年3月31日,公司股东户数共42007户
- []世界讯息:三川智慧:截至3月31日,公司股东总数是30,425户
- []环球观热点:青海华鼎:截止2023年3月31日公司股东人数为31900名
- []当前焦点!最牛大赚400%!刚刚 基金公司长期业绩榜单来了
- []【全球时快讯】思南人B队0-3金海绿化 罗志伟取得进球
- []天天热消息:邮轮出境游重新起航,上海、深圳率先试点恢复
- []全球新动态:厌倦上班的年轻人,辞职开民宿:本以为要亏本,却意外爆满
- []即时:哈登带伤出战,大帝陷入重围,76人季后赛敲响警钟
- []国瑞健康:2022年实现收入33.4亿元
- []世界速读:朗诗绿色管理:2022年归属股东净亏损25.88亿元
- []节能铁汉:公司正在按照相关程序推进以简易程序向特定对象发行股票事项
- []观热点:聚焦IPO | 四月第一周再迎10家新股申购,客户依赖问题需重点关注
- []全球今热点:唐人神:公司截至3月31日的股东人数将在2023年一季报中披露,还
- []大地海洋:截至2023年3月31日,公司共有股东3611户
- []环球微资讯!运机集团:您好投资者,截止3.31公司股东人数为10354户
- []个人养老金投资最新成绩出炉 七成养老FOF跑输基准
- []估值持续修复 基金一季度业绩迎“开门红”
- 世界聚焦:后视镜和倒车影像哪个更好?新手司机还是看后视镜好点?
- vld安装VLD打开项目目录 VLD的安装使用及其问题
- 今日播报!qq炫舞手游进不去怎么办?详细的解决方案
- 全球观天下!mp2格式怎么转换mp3?优速音频处理器软件下载
- 天天消息!apk改之理简单教程 双击ApkIDE.exe启动程序的使用方法
- 如何开通QQ聊天工具界面?如何取消QQ验证设置?
- 世界快讯:格斗游戏圈小技巧:python脚本编写的应用
- 天天微动态丨游戏环境下如何实现真正D3D的窗口?启动进程和取得进程的方法
- 环球新动态:【配置】TrinityCore魔兽世界私服11159完整配置
- 【世界快播报】如何用计算机制作美女找茬?QQ美女找茬辅助器制作
- 全球快看点丨派息分红是利好还是利空
- 每日时讯!炒股会亏钱吗
- 信息:外资机构大举加仓ETF 新锐基金经理产品成自购热门
- 美团企业版即将上线;阿里商旅推出因私预订功能 | 一周商旅动态
- 全球快看点丨国债逆回购周五买几天合算
- 每日精选:萌翻啦!第十七届华南(广州)宠物嘉年华在华农举行
- 每日速递:光储那通事 | 户用光储系统,你选对了吗?
- 全球实时:最快4.8年可回本!光伏巨头户用光储系统经济性分析
- 环球实时:美股期指什么意思
- 今热点:投资也有“鄙视链”?不怕被“看不起” 这只超级牛基创造了传奇!
- 天天通讯!九安医疗为什么涨这么多
- 【全球新要闻】银河证券:当前阶段银行板块估值性价比高 配置价值凸显
- 环球即时:缴费基数是啥意思,参保人缴纳社会保险的基本基数
- 医无忧保险具体条款
- 两部门发文要推进的“带押过户”到底是什么?
- 【全球时快讯】2022现在车险可以提前多久买,最少30天
- 每日速读!西安雁塔区推出2宗共148亩商住用地 挂牌截止时间为5月6日
- “带押过户”全面推广 已有百余城开闸
- 雅居乐获授23.08亿港元及3693.6万美元定期贷款融资
- 不断加码,贝壳累计回购金额近2.3亿美金
- 全球焦点!职工医保余额怎么查询
- 全球观焦点:公积金租房提取多久可以申请一次,三个月
- 康师傅方便面:长期稳健经营,多元细分产品塑造竞争优势
- 在元宇宙里,咏声动漫正在掀起新生代文化娱乐热潮
- 在元宇宙里,咏声动漫正在掀起新生代文化娱乐热潮
- 当前聚焦:k线怎么看涨跌
- 全球观点:跌停板吸筹的特征
- 动态:五行火行业比较有前景的行业
- 【全球播资讯】股票市场是什么
- 热点评!三峡能源股票前景怎么样
- 【世界速看料】玉米面营养价值及功效_玉米的营养价值及功效与作用
- 世界热头条丨中指研究院企业研究总监刘水:前3月重点房企销售出现正增长
- 世界最资讯丨标榜股份:公司主营业务为汽车尼龙管路及连接件等系列产品的研发、生产和销售
- 【焦点热闻】阿里变阵,飞猪“提前开跑”;东呈推出超级IP青猫 | 一周速览
- 世界聚焦:4月新规来了
- 【环球速看料】闰土股份:截至2023年3月31日,公司的股东人数为37,556
- 天天热门:鹏华基金经理金笑非:医药板块开启投资新周期 中国创新药未来三五年会成为全球高地
- 环球快资讯丨亚朵连续四年盈利;百度仍为携程最大股东 | 大公司简报
- 【天天新要闻】新纽科技完成稳中求进 2022年实现收入及净利润双增长
- 首席经济学家七人谈:二季度GDP同比增速或超7% 财政货币政策将继续发力
- 【播资讯】纳斯:等赛季结束会花几周时间考虑去留
- 天天通讯!3月基金发行迎“小阳春” 增量资金等待时机进场
- 热点在线丨重磅!2022年公募基金年报数据全解!
- 奕东电子:公司的动力电池管理系统FPC根据设计和要求可与各类电池进行适配
- 天天即时:*ST皇台:待公司2022年年度报告披露后,若符合深交所股票上市规则的相关规定,公司会向深交所提出申请
- 当前速读:加满一箱油少花13元!油价迎今年来最大降幅
- 爱仕达:公司暂未涉及乡村振兴相关的业务
- 首批试点!市中医院入选胃癌规范化诊疗“国家队”
- 【环球新视野】德信中国:2022年总收入约人民币221.45亿元
- 全球快播:给宝宝买保险怎么选择
- 环球微头条丨公积金第三次贷款条件
- 富力地产:2022年实现收入352亿元
- 如何根据身材挑选T恤衫 怎么根据身材挑选T恤衫
- 每日时讯!明发集团:2022年综合收入约105.684亿元
- 环球简讯:绿地香港:2022年实现收入266.14亿元
- 【环球聚看点】通鼎互联:公司密切关注6G技术发展方向,未来将结合主营业务适时布局相关产品及解决方案
- 当前滚动:支付宝申请失业补助金成功后怎么领取
- 华侨城亚洲:2022年权益持有人应占亏损约19.13亿元
- 国寿财是哪个保险公司
- 第三者责任险只赔人不赔车吗,都赔
- 世界消息!诈骗5万元能判几年_5万元左右最好的车
- 正荣服务:2022年实现收入11.41亿元
- 天天视点!灰谷狩猎的三个怪在线观看_灰谷狩猎的三个怪
- 快看点丨亿达中国:2022年收入为人民币45.32亿元
- 播报:市场下行期,融创仍稳步降负债:2022年整体有息负债减少642亿
- 【环球新要闻】农业银行2022年归母净利2591.40亿 2023年力争新增县域贷款超万亿
- 环球信息:合景泰富2022全年按权益合并收入约为人民币224.62亿元
- 全球今日报丨福晟国际:2022年收入约为人民币17.93亿元
- 大悦城地产:2022年物业开发收入同比增长130.6%
- 融信服务:2022年总收益约为人民币8.76亿元
- 每日短讯:本钢板材:公司会按照季度报告披露要求,在规定时间内披露
- 顺络电子:3月30日公司高管袁金钰减持公司股份合计321.19万股
- 消息!港龙中国2022年业绩:稳健经营,提质增效
- 环球热文:远大中国:2022年收入约人民币14.71亿元
- 每日动态!佳云科技控股股东所持1.35亿股股份被司法冻结,持股方为佳兆业商业集团
- 北京市挂牌两宗住宅用地,总起拍价56.3亿元,涉及大兴区、丰台区
- 保利发展2022年报:穿越行业周期波动 企稳高质量发展之路
- 【环球快播报】港龙中国地产:2022年收益约为人民币118.92亿元
- 全球播报:中国三迪:2022年总收入约为人民币34.49亿元
- 天天关注:大悦城地产:2022年实现收入208.31亿元
- 中泰证券发布中泰财富与家族信托等金融服务
- 保利发展:3月31日公司高管黄海增持公司股份合计2万股
- 三立期货3月31日基差:一张图尽览有色金属、黑色系、能源化工和农产品基差
- 环球观天下!国锐地产:2022年亏损约3.2亿港元
- 新资讯:宋都服务:2022年实现收入2.68亿元
- 环球今亮点!荣万家:2022年归属股东净利润2.35亿元
- 远洋服务:2022年归属股东净利润人民币7540万元
- 雅化集团:业绩预告的发布有相应的规则和时间要求,具体信息您可上网查询和了解
- 今日讯!ST步森股民索赔时效不足4个月 此前已有获赔案例
- 世界快消息!买房卖房大消息!"带押过户"全国全面推进!北京正式启动,100多地市已开展
- 维金加德推出了与热门电视剧维京人合作的第二部分
- 【天天新视野】从可用座位公里,看航空市场过去25年的变化
- 环球焦点!超级IP青猫出道,东呈互联网化又下一棋
- 焦点热门:旅行社入境团队游今起恢复,入境航班搜索热度增长370%
- 环球聚焦:香港旅游业复苏推动航空运力增长,但全面恢复并不容易
- 当前滚动:世茂集团:2022年全年业绩及2022年年报延迟刊发及寄发
- 全球关注:上坤地产:延迟刊发2022年经审核末期业绩
- 财报金选|杨惠妍:在分化市场中寻找确定性
- 罗牛山:各行各业的采购方会对投标企业设立不同情况的资格门槛,要求投标单位具备各种其所需的条件
- 每日关注!云南能投:截至目前公司未收到任何大股东有关减持的通知