Re: zombie-farmer 2.3.1(Клиент для игры Зомби ферма)
я знаю в чем ошибка но не знаю как ее решить)) надо calcSig в Factory изменить на старую калькуляцию сиг
А как это сделать я хз)) в этом боте) если кто сделает кинете новый фактори?
Re: zombie-farmer 2.3.1(Клиент для игры Зомби ферма)
Цитата:
Сообщение от Coca-c
я знаю в чем ошибка но не знаю как ее решить)) надо calcSig в Factory изменить на старую калькуляцию сиг
А как это сделать я хз)) в этом боте) если кто сделает кинете новый фактори?
Уже лучше будем надеется что кто то решит проблему!
Re: zombie-farmer 2.3.1(Клиент для игры Зомби ферма)
Цитата:
я знаю в чем ошибка но не знаю как ее решить)) надо calcSig в Factory изменить на старую калькуляцию сиг
А как это сделать я хз)) в этом боте) если кто сделает кинете новый фактори?
а точно это ТЫ знаешь в чем проблема? даже слова не поменял)
делать нужно следующее:
открываем factory
меняем функцию def generate_sig(self):
на это
Re: zombie-farmer 2.3.1(Клиент для игры Зомби ферма)
Цитата:
Сообщение от greyzza
а точно это ТЫ знаешь в чем проблема? даже слова не поменял)
делать нужно следующее:
открываем factory
меняем функцию def generate_sig(self):
на это пробуем
я этим ботом не пользуюсь поэтому проверить не могу, так чисто по наитию
можете пожалуйста записать это в factory и скинуть его?)не получается самому это сделать
Re: zombie-farmer 2.3.1(Клиент для игры Зомби ферма)
Цитата:
Сообщение от greyzza
а точно это ТЫ знаешь в чем проблема? даже слова не поменял)
делать нужно следующее:
открываем factory
меняем функцию def generate_sig(self):
на это пробуем
я этим ботом не пользуюсь поэтому проверить не могу, так чисто по наитию
не особо работает, ну или я кривой прост
# -*- coding: utf-8 -*-
import json
import logging
import hashlib
from engine.salt import salt_parser
from engine.context import context
from engine.helper import obj2dict
logger = logging.getLogger(__name__)
class Factory(object):
def __init__(self, uid, auth_key, master):
Re: zombie-farmer 2.3.1(Клиент для игры Зомби ферма)
Цитата:
не особо работает, ну или я кривой прост
видимо не особо прямой)
я не знаю как там у вас по версиям насколько актуален будет этот [Ссылки могут видеть только зарегистрированные пользователи. ]
у меня какой был тот и посмотрел, но смысл понятен как нужно сделать
Re: zombie-farmer 2.3.1(Клиент для игры Зомби ферма)
Цитата:
Сообщение от greyzza
видимо не особо прямой)
я не знаю как там у вас по версиям насколько актуален будет этот [Ссылки могут видеть только зарегистрированные пользователи. ]
у меня какой был тот и посмотрел, но смысл понятен как нужно сделать
Спасибо тебе большое)))все работает
Добавлено через 20 минут
Цитата:
Сообщение от greyzza
видимо не особо прямой)
я не знаю как там у вас по версиям насколько актуален будет этот [Ссылки могут видеть только зарегистрированные пользователи. ]
у меня какой был тот и посмотрел, но смысл понятен как нужно сделать
можете дать какой-то файл для реанимирования вашего бота ZomBot_by_greyzza?
Последний раз редактировалось Юрий))); 23.01.2017 в 10:22.
Причина: Добавлено сообщение
Re: zombie-farmer 2.3.1(Клиент для игры Зомби ферма)
Цитата:
можете дать какой-то файл для реанимирования вашего бота ZomBot_by_greyzza?
а зачем он вам? вы же фермером пользуетесь, а вообще если файлы не скомпилированы можете просто открыть message_factory там есть две функции calcSig, так вот которая нижняя просто переименуйте ее например в calcSig2 этого будет достаточно
Sig = sessionKey + str(requestId) + authKey
Sig += __saltFunction(Sig)
Sig = hashsum._md5hash(Sig)
return Sig
def calcAuth(requestId, authKey):
auth = str(requestId) + authKey
auth += __saltFunction(auth)
sig = hashsum._md5hash(auth)
return sig
class Session():
'''
This class represents session data needed
to authenticate and sign messages
'''
def __init__(self, user_id, auth_key, client_version=1362084734,
session_key=None):
self.__user_id = user_id # vk user id
self.__session_key = session_key # session key from TIME request
self.__auth_session_key = None # key from TIME response
self.__auth_key = auth_key # auth key from vk.com flashvars
self.CLIENT_VERSION = client_version
class Factory():
'''
This class will be used to generate signed messages
'''
def __init__(self, session, base_request_id=None):
if base_request_id is None:
base_request_id = _getInitialId()
self.__session = session
assert isinstance(self.__session, Session)
self.BASE_REQUEST_ID = base_request_id # "magick" initial value
self.__request_id = self.BASE_REQUEST_ID
def createRequest(self, data, data_keys_order=None):
request_data = {}
request_data['data'] = self.__createDataValue(data, data_keys_order)
request_data['crc'] = calcCRC(request_data['data'])
return Request(request_data)
'''
def calcSig(self,sessionKey, requestId, authKey):
postfix = sessionKey.split(':')[1]
if not hasattr(self,'postfix') or self.postfix != postfix:
self.postfix = postfix
url = base_redirect_url+'/salt'
#logger.info('Getting %s?postfix=%s'%(url,postfix))
opener = urllib2.build_opener()
response = opener.open(url, 'postfix='+postfix, timeout=8)
if response:
content = response.read()
response.close()
else:
raise GameError("Cannot load salt swf")
self.functions = swf2functions(content,postfix)
sig = sessionKey + str(requestId) + authKey
saltFunction_sig = sig
for f in self.functions:
saltFunction_sig = f(saltFunction_sig)
sig += saltFunction_sig
sig = hashsum._md5hash(sig)
return sig
'''
def calcSig(self, sessionKey, requestId, authKey):
sig = sessionKey + str(requestId) + authKey
result = str(len(sig)) + hashsum._md5hash(sig + "stufff...")
salt13 = str(len(sig) * 17 + 13)
result += hashsum._md5hash(salt13 + str(len(sig))+ str(len(salt13)))
result += str(reduce(lambda res, _: res + (ord(_) & 250), sig, 0))
sig += result
sig = hashsum._md5hash(sig)
return sig
def __createDataValue(self, data, data_keys_order):
if data_keys_order is None:
data_keys_order = _getDataKeyOrder(data['type'])
datacopy = data.copy()
datacopy['user'] = str(self.__session.getUserId())
datacopy['id'] = self.__request_id
datacopy['sig'] = ''
datacopy['auth'] = ''
datacopy['clientVersion'] = self.__session.CLIENT_VERSION
data_value = collections.OrderedDict()
for key in data_keys_order:
if key in datacopy:
data_value[key] = datacopy[key]
message_type = datacopy['type']
if message_type == 'START':
info_keys = ["uid", "bdate", "country", "first_name",
"sex", "city", "last_name"]
data_value['info'] = collections.OrderedDict()
for info_key in info_keys:
if info_key in datacopy['info']:
data_value['info'][info_key] = datacopy['info'][info_key]
self.__addSigOrAuth(data_value)
result = json.dumps(data_value, separators=(',', ':'),
ensure_ascii=False, encoding="utf-8")
self._generateRequestId()
return result
if sessionKey is not None:
objectData["sig"] = self.calcSig(sessionKey, self.__request_id,
auth_key)
else:
objectData["auth"] = calcAuth(self.__request_id, auth_key)
if authSessionKey is not None:
objectData["key"] = authSessionKey
return objectData
class Request():
'''
This class represents a POST body ready to be send via HTTP
'''
def __init__(self, data):
self.__data = data
def __str__(self):
return str(self.__data)
def getData(self):
return self.__data
def send(self, connection):
'''
Sends request data to server,
handles redirect
Returns response as dict
'''
response = self.send_request_get_response(connection)
global base_redirect_url
response = self.send_request_get_response(connection)
if 'redirect' in response:
#with open("sig\\bin\\url.txt",'wt') as f:
# f.write(response['redirect'])
base_redirect_url = response['redirect']
server_url = response['redirect'] + '/go'
connection.setUrl(server_url)
if 'cmd' in response:
if response['cmd'] == 'REDIRECT':
# send request again with new url
response = self.send_request_get_response(connection)
elif response['cmd'] == 'ERR':
error_msg = response["msg"]
logger.error(error_msg)
# TODO send error to the game server
open('error_log.txt','a').write("Connection: " + str(self.getData())+'\nResponse: '+str(response)+'\n\n')
logger.info("Connection : " + str(self.getData()))
logger.info("Response : " + str(response))
raise GameError("Game server returned error: " + error_msg)
return response
class Response():
'''
This class represents a response
'''
def __init__(self, response_string):
if '$' in response_string:
crc, response = response_string.split("$", 1)
if(calcCRC(response) != crc):
raise ValueError("CRC is invalid: " + crc)
else:
response = response_string
self.__response = json.loads(response)
def getDict(self):
return self.__response
def _getInitialId():
'''
flash.utils.getTimer() called to get initial request id.
http://help.adobe.com/en_US/FlashPlatform/reference/
actionscript/3/flash/utils/package.html#getTimer()
varies randomly from 40 to 60
'''
random.seed()
return random.randrange(40, 60)
Re: zombie-farmer 2.3.1(Клиент для игры Зомби ферма)
Цитата:
Сообщение от greyzza
а зачем он вам? вы же фермером пользуетесь, а вообще если файлы не скомпилированы можете просто открыть message_factory там есть две функции calcSig, так вот которая нижняя просто переименуйте ее например в calcSig2 этого будет достаточно
этот файл к сожалению скомпелирован((
Добавлено через 34 минуты
Цитата:
Сообщение от greyzza
а зачем он вам? вы же фермером пользуетесь, а вообще если файлы не скомпилированы можете просто открыть message_factory там есть две функции calcSig, так вот которая нижняя просто переименуйте ее например в calcSig2 этого будет достаточно
фермер не умеет стучать в туковые постройки..а ваш умеет
Последний раз редактировалось Юрий))); 23.01.2017 в 21:47.
Причина: Добавлено сообщение