Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от k0stik0v
Кому не жалко поделитесь пожалуйста уже настроенной прогой со всеми скриптами (под себя). Я пытался настроить, но ошибки одна за другой появляются, уже устал, гораздо проще было бы, если кто то поделился, был бы благодарен
current_loc_id = self._get_game_state().get_location_id()
if current_loc_id in self._visit_queue:
while self._visit_queue[-1] != current_loc_id:
self._visit_queue.rotate(1)
.
Что происходит? Бот не начинает с какого-то заданного острова (это отдельно где-то отключается в game_engine), а продолжает ходить по той же очереди островов с того острова, на котором он сейчас, а не с начального.
А в чём проблема с таймаутом, я не разбирался.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от megabyte0
DarkLost...
Что происходит? Бот не начинает с какого-то заданного острова (это отдельно где-то отключается в game_engine), а продолжает ходить по той же очереди островов с того острова, на котором он сейчас, а не с начального.
А в чём проблема с таймаутом, я не разбирался.
Там вообще всё через зад. Такое ощущение что начинал писать и ввёл коллекции (очереди) один человек, а потом переделал другой и их возможности не использует.
Список тратит и создаёт опять с нуля.
Кстати и там нигде не учтены проездные которые могут закончится.
Я переделал 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 (Клиент для игры Зомби ферма) [Обсуждение]
друзья, я понимаю что подобные скрипты тут всплывали и не раз, но я не могу их переделывать под новые обновы, в следствии чего прошу вас поделиться кодом для новой обновы, для стукалки, заранее спасибо
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
поделиться кодом для новой обновы
Код:
# Стучим в мавзолей
if object.item == '@B_MAUSOLEUM':
remoteTrick = self._get_game_state().get_state().remoteTrickTreating
if len(remoteTrick)>0:
for cot in remoteTrick:
if frend_users == cot.user :
baranka = 1
break
if baranka == 0:
if self._get_game_state().countCircus < 100 and self._get_game_state().tentCircus == True :
self._get_events_sender().send_game_events([{"objId":object.id,"type":"item","itemId":"METALL_PACK_DEFAULT","action":"remoteTrickTreating"}])
self.cprint(u'4Стучим в мавзолей!!!')
self._get_game_state().countCircus+=1
self._get_game_state().tentCircus = False
Вроде работает, на одном с ошибками на другом нормально, причина банальна - ХЗ.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от ripton07
Код:
# Стучим в мавзолей
if object.item == '@B_MAUSOLEUM':
remoteTrick = self._get_game_state().get_state().remoteTrickTreating
if len(remoteTrick)>0:
for cot in remoteTrick:
if frend_users == cot.user :
baranka = 1
break
if baranka == 0:
if self._get_game_state().countCircus < 100 and self._get_game_state().tentCircus == True :
self._get_events_sender().send_game_events([{"objId":object.id,"type":"item","itemId":"METALL_PACK_DEFAULT","action":"remoteTrickTreating"}])
self.cprint(u'4Стучим в мавзолей!!!')
self._get_game_state().countCircus+=1
self._get_game_state().tentCircus = False
Вроде работает, на одном с ошибками на другом нормально, причина банальна - ХЗ.
У меня вообще не пошло выкладываю свой файл стучалки, так как я очень плохо в этом кумекаю, может кто поковыряет да настроит)))
Код:
# -*- coding: utf-8 -*-
import logging
from remote.base import RemoteBot
from engine.game_types import GameRemoteHalloweenPumpkin
logger = logging.getLogger(__name__)
class RemoteKnockBot(RemoteBot):
def __init__(self, game):
super(RemoteKnockBot, self).__init__(game)
# Главная функция
self.action = self.remote_halloween
# Максимум сколько можно в тыкву стукнуть
max_pumpkin = 200
# Количество стуков в тыкву
count_pumpkin = 200
# Типы тыквы
def get_halloween_types(self):
return [u'halloweenTower']
def get_halloween_items(self):
return [u'@B_BIG_PUMPKIN', u'@B_PUMPKIN_PYRAMIDE']
# Проверяем можно ли в тыкву стукнуть
def is_valid_pumpkin_item(self, pumpkin):
is_valid = True
remote_trick_treating = self.get_game_state().get_state().remoteTrickTreating
# Если не забрали тыкву
for user in pumpkin.users:
if user.id == self.get_game_state().get_current_user().id:
is_valid = False
break
# Если сегодня уже удобрили это дерево
for remote_trick in remote_trick_treating:
if remote_trick.user == self.get_game_state().get_current_user().id:
is_valid = False
break
return is_valid
def remote_halloween(self, event_to_handle):
self.count_pumpkin = len(self.get_game_state().get_state().remoteTrickTreating)
if self.count_pumpkin < self.max_pumpkin:
remote_game_objects = event_to_handle.gameObjects
success_items = []
item_ids = {
u'@B_PUMPKIN_PYRAMIDE': u'KITTY_PACK_DEFAULT',
u'@B_BIG_PUMPKIN': u'PUMPKIN_PACK_DEFAULT'
}
for remote_object in remote_game_objects:
# Если нашли стуковую постройку
if remote_object.type in self.get_halloween_types() and remote_object.item in self.get_halloween_items() and \
not remote_object.item in success_items:
remote_pumpkin = remote_object
# Если она не удовлетворяет условиям, то ищем следующую
if not self.is_valid_pumpkin_item(remote_pumpkin):
continue
logger.info(u'Стучим в %s %i' % (self.get_item_reader().get(remote_pumpkin.item).name, remote_pumpkin.id))
remote_pumpkin_item = GameRemoteHalloweenPumpkin(objId=remote_pumpkin.id, itemId=item_ids[remote_pumpkin.item])
self.get_events_sender().send_game_events([remote_pumpkin_item])
# Добавляем тип постройки в которую уже стукнули
success_items.append(remote_pumpkin.item)
else:
logger.info(u'Уже стукнуто в %i тыкв' % self.max_pumpkin)
#self.get_game_state().set_remote_stop(True)
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от B gpoBa
Ну пусть другой, может по нему что то наковыряют, брал то я его отсюда.
Зашибись. Один человек кинул ссылку по доброте душевной на другую сборку полностью рефакторенную, а теперь притензии пошли.
В этой сборке думаю никто здесь ковыряться не будет. Обратись к автору. Тем более что его контакты там указаны.