Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
так мой не подойдёт в чистом виде
PHP код:
# encoding=utf-8
from game_state.connection import Connection
from game_state.settings import Settings
import pdb
import requests.api
import re
import json
import vkontakte.api
from game_state.game_types import GameSTART, GameInfo
from game_state.game_event import dict2obj, obj2dict
from hashlib import md5
class OK():
def __init__(self, credentials):
self._credentials = credentials
def str2dict(self, val): # Convert "string" cookies to "dict"
if type(val) is str:
res = {}
for tmp in val.replace(' ','').split(';'):
k = tmp.split('=')[0]
v = tmp.split('=')[1]
res[k] = v
# print k,v
return res
else:
return val
def getAppParams(self, session_cookies=None): # Called from: local->
# print 'FLOW[okutils.py]: OK():getAppParams()'
if session_cookies is None:
session_cookies = self._getSessionCookies() # OK cookies
# Step 4 - get App Params
# html = requests.get('http://www.ok.ru/games/zm', cookies=self.str2dict(session_cookies)).text
html = requests.get('http://ok.ru/game/zm?st.cmd=appMain&st.appId=625920&gwt.requested=' + self.gwtHash +'&p_sId=0', cookies=self.str2dict(session_cookies)).text
params = None
if html:
matcher = re.compile('.*zombiefarm.html\?(.*?)"')
for line in html.split('\n'):
match = matcher.match(line)
if match is not None:
params = match.group(1)
break
if params is not None:
orig_params = params # Save unparsed params
pairs = params.split('&')
params = {}
for pair in pairs:
key = pair.split('=')[0]
value = pair.split('=')[1]
params[key] = value
return params # Return Dict of params
def _getFriendsList(self):
post = {
'new_sig': 1,
'session_key': self.__params['session_key'],
'application_key': self.__params['application_key'],
'format': 'Json'
}
post_keys = sorted(post.keys())
param_str = "".join(["%s=%s" % (str(key), vkontakte.api._encode(post[key])) for key in post_keys])
param_str += self.__params['session_secret_key']
sign = md5(param_str).hexdigest().lower()
post.update({'sig': sign})
info = requests.post('http://api.ok.ru/api/friends/getAppUsers', data=post, cookies=self.str2dict(self._credentials.getSessionCookies())).json()['uids']
return info
def _validateSessionCookies(self, session_cookies):
valid = False
if session_cookies is not None:
valid = self.getAppParams(session_cookies) is not None
return valid
def _getSessionCookies(self):
session_cookies = self._credentials.getSessionCookies()
print 'session_cookies 1'
print session_cookies
if session_cookies:
with open('ok.txt', 'a') as f:
f.write('session_cookies 1')
f.write(session_cookies)
cookies_are_valid = self._validateSessionCookies(session_cookies)
print 'cookies_are_valid', cookies_are_valid
if not cookies_are_valid:
username = self._credentials.getUserEmail()
password = self._credentials.getUserPassword()
post = {
'st.posted':'set',
'st.redirect': '%2Fgames%2Fzm',
'st.originalaction': u'http://www.ok.ru/dk?cmd=AnonymLogin&st.cmd=anonymLogin',
'st.fJS': 'on',
'st.email': username,
'st.password': password,
'st.remember': 'on',
'st.iscode': 'false',
'button_go': 'Sign in'}
Можно напрямую, можно через новый метод в settings.
Просто у меня даже до последних переделок куки были не в ini, а отдельной папке, а сейчас так вообще засунуты в папки учёток.
Смысла нет расписывать и подстраиваться под все сборки.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Привет Vint) можно по подробнее по поводу этого -
#############################################
этот самый self.gwtHash сохранить в файл.
И выше загружать из файла, там, где
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от vintets
Там вообще всё через зад. Такое ощущение что начинал писать и ввёл коллекции (очереди) один человек, а потом переделал другой и их возможности не использует.
Список тратит и создаёт опять с нуля.
Кстати и там нигде не учтены проездные которые могут закончится.
Я переделал lokation на автоподхват после перезагрузки новых открытых островов. Было как: открыли остров, нужно не забыть внести его в settings. Забыл - вспомнил через 3 месяца
Вот с новым включаем все острова (не ориентируемся открыты или нет) и убираем только те, на которые сами запрещаем ходить
def __init_visit_queue(self, loc_setting, current_loc_id):
if not hasattr(self, '_visit_queue'):
self._visit_queue = collections.deque()
locations_only = eval(loc_setting['locations_only'])
ban_isle = eval(loc_setting['locations_nfree']) # Запрет платных островов
ban_isle.extend(eval(loc_setting['locations_nwalk'])) # Запрет пещер
ban_isle.extend(eval(loc_setting['locations_nother'])) # Прочие запреты
self.loc_nfree = []
open_locations = [current_loc_id]
for location in self._get_game_state().get_state().locationInfos:
reader = self._get_item_reader().get(location.locationId)
if reader.disableGlobus: continue
open_locations.append(location.locationId)
if reader.paid:
self.loc_nfree.append(location.locationId)
if locations_only == []:
for location in open_locations:
if location not in ban_isle:
self._visit_queue.appendleft(location)
else:
for location in locations_only:
if location in open_locations:
self._visit_queue.append(location)
self.__rotation_current(current_loc_id)
def __rotation_current(self, current):
while self._visit_queue[0] != current:
self._visit_queue.rotate(1)
def __rotation_until_free(self):
while self._visit_queue[-1] in self.loc_nfree:
self._visit_queue.rotate(1)
return self._visit_queue.pop()
def __get_next_loc_id(self, loc_setting, current_loc_id):
locations_only = eval(loc_setting['locations_only'])
next_loc_id = self._visit_queue.pop()
if next_loc_id in self.loc_nfree:
buff_list = self._get_game_state().get_state().buffs.list
buff = False
for buffs in buff_list:
if '@BUFF_TRAVEL_TICKET_TIME' in buffs.item:
time_exp = buffs.expire.endDate
if not self._get_timer().has_elapsed(time_exp):
buff = True
if not buff:
self._visit_queue.appendleft(next_loc_id)
next_loc_id = self.__rotation_until_free()
self._visit_queue.appendleft(next_loc_id)
return next_loc_id
А его там и нет. Вот и не выдаёт.
Этот параметр дальше.
Добавлено через 5 часов 45 минут
Поправил я ваш okutils
Даже пришлось ферму на оки ставить.
Только у меня изначально okutils изменённый был, после рефакторинга пути изменены, поэтому наверно проще правками, а не файлом.
И да... я параметр не сохраняю, а получаю каждый раз, поэтому и сохранённые куки не срабатывают и получаются заново.
Но это думаю не проблема, сохраните параметр в файл, а в нужном месте сделаете чтение. Мне уже в лом чужие СС ковырять
В методе def getAppParams(self, session_cookies=None):
получение параметров игры будет такое
PHP код:
html = requests.get('http://ok.ru/game/zm?st.cmd=appMain&st.appId=625920&gwt.requested=' + self.gwtHash +'&p_sId=0', cookies=self.str2dict(session_cookies)).text
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Miha88
это у тебя из-за бафа ...у меня тоже ошибка, я оставил как и было
PHP код:
def __get_next_loc_id(self,loc_setting):
locations_only=eval(loc_setting['locations_only'])
if (locations_only==[]):
# Запрет платных островов
locations_nfree = eval(loc_setting['locations_nfree'])
# Запрет пещер
locations_nwalk = eval(loc_setting['locations_nwalk'])
# Прочие запреты
locations_nother = eval(loc_setting['locations_nother'])
current_loc_id = self._get_game_state().get_location_id()
if (current_loc_id not in locations_nfree) and (current_loc_id not in locations_nwalk) and (current_loc_id not in locations_nother):
self._visit_queue.appendleft(current_loc_id)
else:
current_loc_id = self._get_game_state().get_location_id()
if current_loc_id in locations_only:
self._visit_queue.appendleft(current_loc_id)
next_loc_id = self._visit_queue.pop()
return next_loc_id
Добавлено через 2 часа 45 минут
Робят! у кого чопер на острове Астероид нормально рубит? чет не пойму интсрументы есть, а бот пытается со склада золотыми рубить...подскажите что то может изменить надо?
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Miha88
vintes, при установке летит ошибка [Ссылки могут видеть только зарегистрированные пользователи. ]
Значит у тебя переделанный бот.
Там где ругается просто принимает параметр из game_engine.py который берёт его из setting.py setting.ini
Так было всегда, со времён сборки reydan и там ничего не менялось.
Либо у тебя всего этого нет либо нет параметра в setting.ini.