一直都很想自己实现对CSGO中皮肤磨损的查询,花了不少功夫最近终于找到了相关的轮子
Valve官方对于CSGO磨损查询的说明很简洁,是使用的protobuf,但是从知道传输格式到实现还有很多东西要做,上GitHub搜了搜“csgo float”,发现已经有了很多可用的轮子,比如这个:CSGO-Item-Floats-From-Inspect-Links。但是很多实现都是用的其他语言,而我想要Python的版本,找了很久之后终于发现了一个神器:
全面地实现了所有steam和CSGO的接口,只要稍加调用就可以实现查询磨损的功能,十分方便,下面是我使用这个库写的查询磨损的Python代码:
from steam import SteamClient
from csgo import CSGOClient
from csgo.enums import ECsgoGCMsg
import csgo
import re
# print out logs
import logging
logging.basicConfig(format='[%(asctime)s] %(levelname)s %(name)s: %(message)s', level=logging.DEBUG)
client = SteamClient()
cs = CSGOClient(client)
logger = {
'username':'',
'password':'',
}
@client.on('logged_on')
def start_csgo():
cs.launch()
client.cli_login(**logger)
# client.run_forever()
# print(str(cs.account_id))
def get_param(inspect_link):
inspect_params = {}
re_s = re.search('S\d*',inspect_link)
re_m = re.search('M\d*',inspect_link)
re_a = re.search('A\d*',inspect_link)
re_d = re.search('D\d*',inspect_link)
param_m = ""
param_s = ""
param_a = re_a.group()[1:]
inspect_params["param_a"] = int(param_a)
param_d = re_d.group()[1:]
inspect_params["param_d"] = int(param_d)
if re_s:
param_s = re_s.group()[1:]
inspect_params["param_s"] = int(param_s)
print("S:{}\nA:{}\nD:{}".format(param_s,param_a,param_d))
elif re_m:
param_m = re_m.group()[1:]
inspect_params["param_m"] = int(param_m)
print("M:{}\nA:{}\nD:{}".format(param_m,param_a,param_d))
else:
msg = "check if the link is correct"
print(msg)
return inspect_params
while(1):
inspect_link = input("inspect link:")
# inspect_link = "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198282463169A15145586192D16595344889481721483"
inspect_params = get_param(inspect_link)
cs.send(ECsgoGCMsg.EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockRequest,inspect_params)
response = cs.wait_event(ECsgoGCMsg.EMsgGCCStrike15_v2_Client2GCEconPreviewDataBlockResponse, timeout=10)
#player_profle = response.paintwear
print(response)
登录之后就可以查询CSGO皮肤的磨损了。