Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Zombot (Клиент для игры Зомби ферма) [Обсуждение]

-

Свободное обсуждение

- Ваши идеи, вопросы и ответы на тему браузерных игр и социальных сетей

Ответ
 
Опции темы
Старый 17.04.2015, 23:00   #4216
 Разведчик
Аватар для doubleaggent
 
doubleaggent никому не известный тип
Регистрация: 17.06.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от CheloveKkKПосмотреть сообщение
Добавлено через 29 минут
Подскажите пожалуйста где именно во friends.py прописывать id декора под которым копать

у меня к примеру декор под которым капать прописан вот в этой строке, в квадратных скобках вставляй нужный тебе декор
favdecors = ['DS_SYMBOL_E']

Цитата:
Сообщение от CheloveKkKПосмотреть сообщение
Добавлено через 29 минут
использует только 20 лопат на каждого соседа

по поводу количества лопат, в данной строке в своём боте поставь нужное тебе количество
if shovels == None: shovels = 300 #Количество лопат которое желаем истратить
  Ответить с цитированием
Старый 19.04.2015, 14:47   #4217
 Разведчик
Аватар для Ori.Man.Aleks
 
Ori.Man.Aleks никому не известный тип
Регистрация: 01.10.2010
Сообщений: 11
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для Ori.Man.Aleks с помощью ICQ Отправить сообщение для Ori.Man.Aleks с помощью Skype™
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Доброго времени суток. Подскажите пожалуйста, где найти самую последнюю версию этого бота?

Добавлено через 5 часов 27 минут
Скачал вот этот архив ([Ссылки могут видеть только зарегистрированные пользователи. ]), установил с офф.сайта Питон 2.7.9, сразу же возникла проблема с установкой переменной PYTHONPATH - не смог найти нигде папку "src/lib", есть 2 разных, одна src, вторая lib. Дальше увидел в теме упоминание, что нужно скачать и распаковать файлы из "vkontakte.zip", взял его от предыдущей версии на том же сайте, методом поиска по теме воткнул файлы в папку lib питона. Основная проблема - при попытке по инструкции запустить бот, окно консоли появляется на полсекунды и закрывается сразу, без возможности даже увидеть что там пишется, файл логов так же не нашел.
Кто чем сможет помочь? Буду очень признателен хотя бы за толчки в нужную сторону рытья, связь предпочтительно через вк\скайп, личку чекаю пару раз в день тут.

Последний раз редактировалось Ori.Man.Aleks; 19.04.2015 в 20:16. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 22.04.2015, 22:44   #4218
 Разведчик
Аватар для doubleaggent
 
doubleaggent никому не известный тип
Регистрация: 17.06.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от CheloveKkKПосмотреть сообщение
Огромное спасибо , выручил))
Разреши ещё 1 вопрос,там у меня во friends.py несколько строк для кодов декора,их бот находит по порядку?
Т.е. сначала проверяет есть ли декор из первой строки,если его не оказывается то переходит ко второй?

а вот этого не знаю, я сам полный нуб в этом боте, кое что понял а в остальное не лезу, лично я пользуюсь только одной строчкой, остальные заблочил у себя
надеюсь более опытные люди ответят тебе на этот вопрос
  Ответить с цитированием
Старый 24.04.2015, 16:46   #4219
 Разведчик
Аватар для greyzza
 
greyzza никому не известный тип
Регистрация: 25.02.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от CheloveKkKПосмотреть сообщение
Огромное спасибо , выручил))
Разреши ещё 1 вопрос,там у меня во friends.py несколько строк для кодов декора,их бот находит по порядку?
Т.е. сначала проверяет есть ли декор из первой строки,если его не оказывается то переходит ко второй?

определена переменная со списком нужного декора например favdecors = ['D_PLATFORM_2','D_PLATFORM'] так вот что происходит в коде есть цикл for object in self._get_game_state().gameObjects: который производит обход всех обьектов на острове и с каждым обьектом он производит определенные действия в зависимости от заданного кодом, возьмем например найден обьект "рука терминатора" которая имеет item '@D_HAND1' в действиях с нужным декором код проверит итем обьекта со списком favdecors, в нашем случае D_HAND1 не указан в списке соответственно никаких действий не будет, и наоборот если обьект перрон то при сравнении со списком favdecors результат будет положительным и код произведет действия для него, теперь другой вопрос если у тебя в коде есть несколько строк с определением переменной favdecors например
favdecors = ['D_PLATFORM_2','D_PLATFORM']
favdecors = ['D_UMBRELLA2_1','D_UMBRELLA1_1']
favdecors = ['D_EIFFEL','B_JAPAN','B_JAPAN_LAKE']

то переменная favdecors будет равна последнему указанному в коде значению, то есть favdecors = ['D_EIFFEL','B_JAPAN','B_JAPAN_LAKE'] потому как переменная получается переназначается

и код будет сравнивать обьекты только со списком ['D_EIFFEL','B_JAPAN','B_JAPAN_LAKE']
  Ответить с цитированием
Старый 25.04.2015, 04:18   #4220
 Разведчик
Аватар для Ori.Man.Aleks
 
Ori.Man.Aleks никому не известный тип
Регистрация: 01.10.2010
Сообщений: 11
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для Ori.Man.Aleks с помощью ICQ Отправить сообщение для Ori.Man.Aleks с помощью Skype™
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Ребят, помогите пожалуйста, как понять что я делаю не так?


Код:
2013 (c) github.com/Vanuan/zombot
 version 0.9.2 master by Reydan


[2015-04-25 03:11:56,443] Выбираем пользователя...
selected user  vk
You selected "vk"
[2015-04-25 03:11:56,443] Логинимся...


[2015-04-25 03:11:56,443] Загружаем словарь объектов...
[2015-04-25 03:12:00,334] Словарь объектов загружен
[2015-04-25 03:12:01,826]  Загружаю размеры обьектов
[2015-04-25 03:12:01,842] Starting new HTTP connection (1): s.shadowlands.ru
[2015-04-25 03:12:01,951] Загружаем остров...
Traceback (most recent call last):
  File "main.py", line 108, in <module>
    run_game()
  File "main.py", line 90, in run_game
    Game(site, settings, UserPrompt(gui_input), gui_input=gui_input).start()
  File "C:\Users\Kirrsan\Downloads\Zombot\game_engine.py", line 599, in start
    start_response,self.__friendsid,self.__uid,self.__server_time = self.__game_
initializer.start()
  File "C:\Users\Kirrsan\Downloads\Zombot\game_engine.py", line 188, in start
    start_response, friendsid, uid = self.start_game(server_time, session_key)
  File "C:\Users\Kirrsan\Downloads\Zombot\game_engine.py", line 220, in start_ga
me
    command, friendsid, uid = self.__site.create_start_command(server_time, clie
nt_time)
ValueError: need more than 2 values to unpack
Очень хочется сделать какой-то рабочий костяк этой программы, чтобы запускалось и коннектилось хотя бы, понять как это работает, а в дальнейшем уже навешивать остальные функции, по типу "от Hello word до изучения более серьезных программ".
Буду очень благодарен за вашу информационную помощь, в идеале даже финансово.
  Ответить с цитированием
Старый 26.04.2015, 17:35   #4221
 Пехотинец
Аватар для vintets
 
vintets скоро будет известенvintets скоро будет известенvintets скоро будет известен
Регистрация: 01.08.2012
Сообщений: 95
Популярность: 255
Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от Ori.Man.AleksПосмотреть сообщение
Ребят, помогите пожалуйста, как понять что я делаю не так?


Код:
2013 (c) github.com/Vanuan/zombot
 version 0.9.2 master by Reydan


[2015-04-25 03:11:56,443] Выбираем пользователя...
selected user  vk
You selected "vk"
[2015-04-25 03:11:56,443] Логинимся...


[2015-04-25 03:11:56,443] Загружаем словарь объектов...
[2015-04-25 03:12:00,334] Словарь объектов загружен
[2015-04-25 03:12:01,826]  Загружаю размеры обьектов
[2015-04-25 03:12:01,842] Starting new HTTP connection (1): s.shadowlands.ru
[2015-04-25 03:12:01,951] Загружаем остров...
Traceback (most recent call last):
  File "main.py", line 108, in <module>
    run_game()
  File "main.py", line 90, in run_game
    Game(site, settings, UserPrompt(gui_input), gui_input=gui_input).start()
  File "C:\Users\Kirrsan\Downloads\Zombot\game_engine.py", line 599, in start
    start_response,self.__friendsid,self.__uid,self.__server_time = self.__game_
initializer.start()
  File "C:\Users\Kirrsan\Downloads\Zombot\game_engine.py", line 188, in start
    start_response, friendsid, uid = self.start_game(server_time, session_key)
  File "C:\Users\Kirrsan\Downloads\Zombot\game_engine.py", line 220, in start_ga
me
    command, friendsid, uid = self.__site.create_start_command(server_time, clie
nt_time)
ValueError: need more than 2 values to unpack
Очень хочется сделать какой-то рабочий костяк этой программы, чтобы запускалось и коннектилось хотя бы, понять как это работает, а в дальнейшем уже навешивать остальные функции, по типу "от Hello word до изучения более серьезных программ".
Буду очень благодарен за вашу информационную помощь, в идеале даже финансово.

Взяты файлы с разных сборок бота. Или при добавлении руками не всё добавлено.
вызываемый метод create_start_command хочет больше двух переменных которые мы ему даём. (или хотим получить больше двух, а их нам не дают.
Скорее второе. Хочешь получить command, friendsid, uid
command + список друзей + наш id
нужно добавить в create_start_command возврат нашего id
________________

Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).

Последний раз редактировалось vintets; 26.04.2015 в 17:41.
  Ответить с цитированием
Старый 26.04.2015, 18:41   #4222
 Разведчик
Аватар для Ori.Man.Aleks
 
Ori.Man.Aleks никому не известный тип
Регистрация: 01.10.2010
Сообщений: 11
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для Ori.Man.Aleks с помощью ICQ Отправить сообщение для Ori.Man.Aleks с помощью Skype™
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Увы, видимо не суждено в этом разобраться, ковырял-ковырял, ничего так и не смог наковырять, сказывается видимо отсутствие специфических понятий и знаний, если даже с нормальными продуктами разобраться не смог, + прошла информация что за использование такой автоматизации - бан.
  Ответить с цитированием
Старый 26.04.2015, 23:08   #4223
 Разведчик
Аватар для v_home
 
v_home никому не известный тип
Регистрация: 21.10.2010
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Всем привет, всегда курил форум, не флудил, находил ответы на свои вопросы, потом попал под бан и подзабил на ЗФ, но дёрнуло меня залезть снова... Вообщем, спасибо Вам, бот ожил, не могли бы Вы поделиться кодом для получения информации о друзьях, когда иду к соседям, спотыкается на забаненных игроках (если в бане, то наооборот, спотыкается на тех, кто не заблокирован), насколько я понял тут выход, это отсортированный список друзей, а если без списка друзей, подскажите, где чего прописать, что бы шёл дальше..

Цитата:
Сообщение от vintetsПосмотреть сообщение
А почему сюда?
В энжине после
PHP код:
logger.info('Остров загружен!'
Добавляем
PHP код:
try:
    
os.remove('friends_id.txt')
except:
    
pass  
with open
('friends_id.txt''a') as f:
    
friends ''
    
for fr_id in friendsid:
        
friends += str(fr_id) + '\n'
    
f.write(friends

Подскажите, как изменить код, что бы вытягивался дополнительно игровой ник, имя и фамилия..

Последний раз редактировалось v_home; 06.05.2015 в 16:33.
  Ответить с цитированием
Старый 27.04.2015, 18:31   #4224
 Разведчик
Аватар для Gelio
 
Gelio никому не известный тип
Регистрация: 13.08.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Привет, Уважаемые! Подскажите плиз где взять свежие итемсы для бота?
  Ответить с цитированием
Старый 28.04.2015, 17:42   #4225
 Разведчик
Аватар для HotBlood
 
HotBlood никому не известный тип
Регистрация: 19.07.2012
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 4 раз(а) в 4 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Такая ситуация, как сделать, что бы бот крутил только выбранные фруктовые рулетки (не рецепты), сразу на весь урожай который есть на складе.
Бот настроил на хождение на 3 острова (2 с деревьями(мандарины и вишня) и 1 с фруктовыми рулетками). Хотел, что бы бот удобрил деревья, собрал урожай и покрутил рулетки на весь урожай. Ходьбу по островам настроил, сбор и удобрение тоже, но с рулетками проблема. После первой попытки запуска выдало ошибку,ошибка была в закомменченой строке с подключение файла с фруктовыми рулетками. Исправил, после бот заработал, но фруктовые рулетки не крутит(включено было кручение фруктовых), после включил кручение всех рулеток, начало крутить только яблочные (не смотря на указанные материалы (вишня и мандарин) и то по 1 (за каждый переход на остров 1 кручение), а так же вместе с этим адмирала начало крутить.
Просидел 2 часа, перерыл старого бота добился лишь лишь кручение яблочной (несмотря на то что я указал вишню и мандарин), после даже этот вариант испортил.
Как решить пою проблему?

del

Последний раз редактировалось HotBlood; 29.04.2015 в 20:40.
  Ответить с цитированием
Старый 28.04.2015, 22:11   #4226
 Разведчик
Аватар для Miha88
 
Miha88 никому не известный тип
Регистрация: 09.07.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от HotBloodПосмотреть сообщение
Такая ситуация, как сделать, что бы бот крутил только выбранные фруктовые рулетки (не рецепты), сразу на весь урожай который есть на складе.
Бот настроил на хождение на 3 острова (2 с деревьями(мандарины и вишня) и 1 с фруктовыми рулетками). Хотел, что бы бот удобрил деревья, собрал урожай и покрутил рулетки на весь урожай. Ходьбу по островам настроил, сбор и удобрение тоже, но с рулетками проблема. После первой попытки запуска выдало ошибку,ошибка была в закомменченой строке с подключение файла с фруктовыми рулетками. Исправил, после бот заработал, но фруктовые рулетки не крутит(включено было кручение фруктовых), после включил кручение всех рулеток, начало крутить только яблочные (не смотря на указанные материалы (вишня и мандарин) и то по 1 (за каждый переход на остров 1 кручение), а так же вместе с этим адмирала начало крутить.
Просидел 2 часа, перерыл старого бота добился лишь лишь кручение яблочной (несмотря на то что я указал вишню и мандарин), после даже этот вариант испортил.
Как решить пою проблему?
Файл рулеток:
PHP код:
# coding=utf-8
import logging
from game_state
.game_types import GameBuildingGamePlayGameDailyBonus
from game_actors_and_handlers
.base import BaseActor
from game_state
.game_event import dict2objobj2dict
import time

logger 
logging.getLogger(__name__)


class 
FrutRouletteRoller(BaseActor):

    
def perform_action(self):
        
# '@R_56' Компот
        # '@R_57' Вишнёвый джем
        # '@R_58' Лимонный микс
        # '@R_59' Мармелад
        # '@R_60' Глазной суп
        # '@S_53' Мандарин
        # '@S_52' Вишня
        # '@S_51' Яблоко
        
ftut_ids = ['@S_52','@S_53']
        
#ftut_ids = ['@S_52']
        
for fr in ftut_ids:
            
frut_count self._get_game_state().count_in_storage(fr)
            if 
frut_count == 0: break
            
buildings self._get_game_location().get_all_objects_by_type(
                            
GameBuilding.type)
            for 
building in list(buildings):
                
building_item self._get_item_reader().get(building.item)
                for 
game in building_item.games:
                    
game_id game.id
                    
if game_id == "B_MAST_ROULETTE": continue
                    
play_cost None
                    
if hasattr(game'playCost'):
                        
play_cost game.playCost.item
                    
# if hasattr(game, 'playsCount'):
                        # plays = building.playsCounts.__dict__
                        # if plays[game_id] >= game.playsCount:
                            # continue
                    
                    #{"type":"roulette","id":"B_SLOT_APPLE_ROULETTE2","level":1,"delayTime":0,"title":"Бонус-Рулетка","hint":"Крути рулетку за 1 Компот, чтобы испытать удачу.","playCost":{"count":1,"image":"storage/recipe_56.png","item":"@R_56"},"prizes":[{"count":1,"item":"@EGG_01"},{"count":5,"item":"@RED_SPEEDUPER"},{"count":1,"item":"@EGG_02"},{"count":10,"item":"@RED_TREE_FERTILIZER"},{"count":5,"item":"@RED_SPEEDUPER"},{"count":1,"item":"@EGG_04"},{"count":10,"item":"@RED_TREE_FERTILIZER"}]}
                    
next_play None
                    next_play_times 
building.nextPlayTimes.__dict__
                    
if game_id in next_play_times:
                        
next_play int(next_play_times[game_id])
                    if (
                            
next_play and
                            
self._get_timer().has_elapsed(next_play) and
                            
play_cost == fr
                        
):
                        
countR=0
                        
#for i in range(10):
                        
for i in range(frut_count):
                            
roll GamePlayGame(building.idgame_id)
                            
self._get_events_sender().send_game_events([roll])
                            
countR += 1
                            self
._get_game_state().remove_from_storage(fr,1)
                        
logger.info(u"Крутим рулетку %d раз в '%s' %d по координатам (%d,%d)"%(countR,building_item.name,building.id,building.x,building.y))
                        
#logger.info(u"Крутим рулетку "+str(countR)+" раз в '"+building_item.name + "' " +str(building.id)+u" по координатам (" +str(building.x) + u", " + str(building.y) + u")")


class RouletteTavernaDub(BaseActor):

    
def perform_action(self):
        
pirate_box False
        
for _obj in list(self._get_game_state().get_state().storageGameObjects):
            if 
_obj.item == '@PIRATE_BOX' or _obj.item == '@PIRATE_BOX_2':
                
pirate_box True
                
break
        if 
pirate_box or (hasattr(self._get_game_state().get_state().pirate'state') and self._get_game_state().get_state().pirate.state == 'PIRATE'): return
        
buildings self._get_game_location().get_all_objects_by_type(
                        
GameBuilding.type)
        for 
building in list(buildings):
            
building_item self._get_item_reader().get(building.item)
            for 
game in building_item.games:
                if 
game.id == "B_TAVERNA_ROULETTE_1" and game.level 3:
                    print 
u'Заскочили в платную таверну'
                    
print 'State Dublon'self._get_game_state().get_state().pirate.state
                    
#print 'building level', building.level
                    #print 'level', game.level
                    
for st in self._get_game_state().get_state().storageItems:
                        if (
not hasattr(st"item")) or (st.item != '@DUBLON'):continue
                        
dub st.count
                        
#print u'Дублонов:', dub

                    
if not pirate_box and dub 5:
                        
dub -= 5
                        
#roll = GamePlayGame(building.id, game.id)
                        #self._get_events_sender().send_game_events([roll])
                        
self._get_game().handle_all_events()
                        
logger.info(u"П Крутим рулетку в '" building_item.name "' " +str(building.id) + u" коорд.(" str(building.x) + u"," str(building.y) + u")")
                        
self._get_game().game_result = []
                        while 
not self._get_game().game_result:
                            print 
u'\b.',
                            
self._get_events_sender().send_game_events([])
                            
self._get_game().handle_all_events()
                            
time.sleep(0.2)
                        print 
u'\b.'
                        
for _obj in list(self._get_game_state().get_state().storageGameObjects):
                            if 
_obj.item == '@PIRATE_BOX' or _obj.item == '@PIRATE_BOX_2':
                                
pirate_box True
                                logger
.info(u'Выигран пиратский сундук!')
                                break
                        
raw_input('-------------   END   ---------------')

"""
class RouletteRoller(BaseActor):

    def perform_action(self):
        buildings = self._get_game_location().get_all_objects_by_type(
                        GameBuilding.type)
        loc = self._get_game_state().get_game_loc().get_location_id()
        for building in list(buildings):
            building_item = self._get_item_reader().get(building.item)
            # print building.item
            for game in building_item.games:
                #print obj2dict(building_item)
                game_id = game.id
                play_cost = None
                playsCount = 0
                if hasattr(game, 'playCost'):
                    play_cost = game.playCost.item
                # проверка на лимит рулетки
                if hasattr(game, 'playsCount'):
                    #print 'playsCount', building.playsCounts
                    plays = building.playsCounts.__dict__
                    if game_id in plays:
                        playsCount = plays[game_id]
                        if plays[game_id] >= game.playsCount:
                            continue
                    # if type(building.playsCounts) != int: #game_id in plays:
                        # plays = building.playsCounts.__dict__
                        # if plays[game_id] >= game.playsCount:
                            # continue
                    # else:
                        # if building.playsCounts >= game.playsCount:
                            # continue

                next_play = None
                #print
                #print 'nextPlayTimes = ', obj2dict(building.nextPlayTimes)
                #print
                next_play_times = building.nextPlayTimes.__dict__
                if game_id in next_play_times:
                    next_play = int(next_play_times[game_id])
                if next_play is None: get_next_play = False
                else: get_next_play = self._get_timer().has_elapsed(next_play)
                
                # next_play_times = building.nextPlayTimes.__dict__
                # if game_id in next_play_times:
                    # next_play = int(next_play_times[game_id]
                
                if game_id == "
B_MAST_ROULETTE": continue
                
                if game_id == "
B_TAVERNA_ROULETTE_1" and game.level > 3:
                    print 'taverna'
                    print 'level', game.level
                    pirate_box = False
                    for _obj in list(self._get_game_state().get_state().storageGameObjects):
                        if _obj.item == '@PIRATE_BOX' or _obj.item == '@PIRATE_BOX_2':
                            pirate_box = True
                            break
                    if not pirate_box and (self._get_game_state().get_state().pirate.state != 'PIRATE'): play_cost = None
                    else: play_cost = game.unconditionalPlayCost
                
                # Крутить рулетку в аисте за 25 малины
                item_count=self._get_game_state().count_in_storage('@S_57')
                if building_item.id == 'B_TREE_STORK' and game_id == 'B_TREE_STORK_ROULETTE' and item_count>=25:
                    self._get_game_state().remove_from_storage('@S_57',25)
                    play_cost = None
                # Конец аиста
                # Крутить рулетку в казино если фишек = 0
                item_count = self._get_game_state().count_in_storage("
@O_CHIPS")
                if (building_item.name == u'Казино'):
                    if (item_count == 0):
                        play_cost = None
                    else:
                        play_cost = 'Nul'
                # Конец казино
                # Зомби фортуна за 5 фишек
                if (building_item.name == u'Зомби-фортуна') and (game_id == 'B_SLOT_B_ROULETTE1') and item_count>=5:
                    self._get_game_state().remove_from_storage('@O_CHIPS',5)
                    play_cost = None
                    next_play = False
                # Конец зомби фортуны
                # Крутить рулетку в Адмирале за 1 глазной суп
                item_count=self._get_game_state().count_in_storage ('@R_60')
                if building_item.id == 'B_SOLDIER' and game_id == 'B_SOLDIER_ROULETTE' and item_count>=1:
                    self._get_game_state().remove_from_storage('@R_60' ,1)
                    play_cost = None
                # Конец Адмирала
                  # Ежедневный бонус
                dailyBonus = self._get_game_state().get_state().dailyBonus 
                if int(dailyBonus.playFrom) and self._get_timer().has_elapsed(dailyBonus.playFrom):
                    daily = DailyBonus()
                    self._get_events_sender().send_game_events([daily])
                    next_play = False
                    logger.info(u"
Крутим рулетку-Ежедневный бонус")
                    dailyBonus.playFrom = 10800000
                    #self._get_game_state().reset_dailyBonus_from_storage()
                # конец ежедневной рулетке
                # башня снегурочки на сказочный лес
                if game_id == 'FILL_TRIDENT':
                    limit = game.limit
                    item_count = self._get_game_state().count_in_storage(game.item)
                    if item_count < limit:play_cost = None
                    else: play_cost = False 
                # конец башня снигурочки
                
                #print building_item.name
                #print next_play_times
                #print next_play
                #print get_next_play
                #print play_cost
                #print (play_cost is None)
                #print ((not next_play) and (game.level == building.level))
                #print ((next_play and self._get_timer().has_elapsed(next_play)) or ((not next_play) and (game.level == building.level)))
                #raw_input()
                    
                if ((play_cost is None) and
                        ((next_play and get_next_play) or ((not next_play) and (game.level == building.level)))):
                    enemies = self._get_game_location().get_all_objects_by_type("
pirateEnemy")
                    enemy_here = 0
                    if enemies and loc != u'main':
                        for enemy in enemies:
                            if(round(((enemy.x - building.x)**2+(enemy.y - building.y)**2)**0.5) < 15):
                                enemy_here = 1
                                break
                    if(enemy_here == 1):
                        #logger.info("
Сильвер мешает крутить рулетку "+str(building.id))
                        continue
                    if playsCount > 0:
                        if plays[game_id] < game.playsCount: plays[game_id] += 1
                        logger.info(
                            u'Крутим рулетку в %s %d коорд.(%d,%d) кручено %d/%d'%(building_item.name,building.id,building.x,building.y,playsCount,game.playsCount))                             
                    else:
                        logger.info(
                            u"
Крутим рулетку в '" + building_item.name + "' " + str(building.id) +
                            u" 
коорд.(" + str(building.x) + u"," + str(building.y) + u")")
                    roll = GamePlayGame(building.id, game_id)
                    self._get_events_sender().send_game_events([roll])
                    next_play_times[game_id] = 10000


class GameResultHandler(object):
    def __init__(self, item_reader, game_location,game_state):
        self.__item_reader = item_reader
        self.__game_location = game_location
        self.__game_state_ = game_state

    def handle(self, event_to_handle):
        #print
        #print 'event_to_handle = ', obj2dict(event_to_handle)
        #print
        #event_to_handle =  {u'nextPlayDate': u'1017978', u'extraId': u'B_TREE_STORK_ROULETTE', u'result': {u'pos'12L}, u'action': u'play', u'type': u'game', u'objId':-5025L}
        pirate_locs_id = ["
exploration_isle1_random","exploration_isle2_random","exploration_isle3_random","exploration_snow1","exploration_isle1_1","exploration_isle4_random"]
        _loc = self.__game_state_.get_location_id() # текущая локация
        instruments = self.__game_state_.get_state().pirate.instruments
        
        if hasattr(event_to_handle, 'nextPlayDate'):
            nextPlayDate = event_to_handle.nextPlayDate
            #print '-------', nextPlayDate, '-------'
        extraId = event_to_handle.extraId
        obj_id = event_to_handle.objId
        gameObject = self.__game_location.get_object_by_id(obj_id)
        if gameObject is None:
            logger.critical("
OMGNo such objectHandle")
            return
        else:
            if nextPlayDate:
                gameObject.nextPlayTimes.__setattr__(extraId, nextPlayDate)
            building = self.__item_reader.get(gameObject.item)
            for game in building.games:
                if game.id == extraId:
                    game_prize = None
                    
                    if extraId == 'FILL_TRIDENT':
                        limit = game.limit
                        count = self.__game_state_.count_in_storage(game.item)
                        fill = limit-count
                        game_prize = dict2obj({"
count":fill,"item":game.item})
                        
                    if hasattr(event_to_handle.result, 'pos'):
                        prize_pos = event_to_handle.result.pos
                        game_prize = game.prizes[prize_pos]
                    elif hasattr(event_to_handle.result, 'won'):
                        prize_pos = event_to_handle.result.won
                        if prize_pos is not None:
                            game_prize = game.combinations[prize_pos].prize
                    if game_prize:
                        prize_item = game_prize.item
                        prize = self.__item_reader.get(prize_item)
                        count = game_prize.count
                        #print 'Rollets'
                        #print prize_item
                        #self.__game_state_.add_from_storage(prize_item,count)
                        #print ' '
                        #for tool in instruments:
                        #    print tool.item,
                        #    print ' = ', tool.count                        
                        logger.info(u'Вы выиграли ' + prize.name +
                                    u'(' + str(count) + u' шт.)')
                        # Добавление в game_state
                        if hasattr(prize, "
id"):                
                            if (_loc in pirate_locs_id) and (prize.id == 'CHOP_MACHETE' or prize.id == 'CHOP_AXE' or prize.id == 'CHOP_HAMMER' or prize.id == '@CHOP_TRIDENT'):
                                self.__game_state_.add_pirate_instruments('@'+prize.id, count)
                            else:
                                self.__game_state_.add_from_storage('@'+prize.id, count)
                        #for tool in instruments:
                        #    print tool.item,
                        #    print ' = ', tool.count
                        #open('prize.txt','a').write(prize.name.encode("
cp1251") + '(' + str(count) + ' st.)'+'\n')
                        #open('prize.txt','a').write(str(obj2dict(prize))+'\n'+'\n')
                    else:
                        logger.info('Вы ничего не выиграли.')
                        


class GameDaylyBonusResultHandler(object):
    def __init__ (self, item_reader, game_state):
        self.__item_reader = item_reader
        self.__game_state_ = game_state
        
    def handle(self, event_to_handle):
        dailyBonus = self.__game_state_.get_state().dailyBonus
        if hasattr(event_to_handle.result, 'pos'):
            prize_pos = event_to_handle.result.pos
            print u('result')
        else:
            prize_pos = event_to_handle.pos
            print u('No result')
            
        game_prize = dailyBonus.prizes[prize_pos]
        prize = self.__item_reader.get(game_prize.item)
        count = game_prize.count
        
        self.__game_state_.add_from_storage(prize_item,count)
        logger.info(u'Вы выиграли ' + prize.name +
                    u'(' + str(count) + u' шт.)')
"""


# Greyzza
class RouletteRoller(BaseActor):
    
def playCostGame(self,game,building_item):
        
rulettes = {
                    
# не комментировать ,а то будет крутить до упора,лучше остаток больше поставить
                    #    рулетка   |сколько оставлять фруктов  |сколько оставлять рецептов
                    
'B_SLOT_APPLE':{'B_SLOT_B_ROULETTE1':31000,'B_SLOT_APPLE_ROULETTE2':100},#         Яблочный автомат
                    
'B_SLOT_CHERRY':{'B_SLOT_B_ROULETTE1':160000,'B_SLOT_CHERRY_ROULETTE2':12000},#       Вишнёвый автомат
                    
'B_SLOT_MANDARIN':{'B_SLOT_B_ROULETTE1':102000,'B_SLOT_MANDARIN_ROULETTE2':1130},#   Мандариновый автомат
                    
'B_SLOT_LEMON':{'B_SLOT_B_ROULETTE1':100000,'B_SLOT_LEMON_ROULETTE2':10000},#     Лимонный автомат
                    
'B_SOLDIER':{'B_SOLDIER_ROULETTE2':3000,'B_SOLDIER_ROULETTE':500},#           Адмирал
                    
}
        
game_id game.id
        play_cost 
game.playCost
        need_item 
play_cost.item
        storageCount 
self._get_game_state().count_in_storage(need_item)
        
need_count int(play_cost.count)
        if 
rulettes.has_key(building_item):
            
needGame rulettes[building_item]
            if 
not needGame.has_key(game_id): return False
            
if storageCount <= needGame[game_id]: return False
            
if storageCount play_cost.count: return False
            self
._get_game_state().remove_from_storage(play_cost.item,play_cost.count)
            return 
True
        
else:
            if 
storageCount need_count:return False
            self
._get_game_state().remove_from_storage(need_item,need_count)
            return 
True

    def unconditionalPlayCost
(self,game,next_play):
        
pirateBox = ['@PIRATE_BOX','@PIRATE_BOX_2']
        
play_cost game.unconditionalPlayCost
        
if game.id == "B_TAVERNA_ROULETTE_1":
            
state self._get_game_state().get_state().pirate.state
            
if state == 'PIRATE' or state == 'AWAY':return False
            
for box in pirateBox:
                if 
self._get_game_state().count_in_storageObjects(box)>0:return False
            dublon 
self._get_game_state().count_in_storage(play_cost.item)
            if 
dublon play_cost.count:return False
            
if self._get_timer().has_elapsed(next_play):return True
            
else:
                
self._get_game_state().remove_from_storage(play_cost.item,play_cost.count)
                return 
True
        
#logger.info(u'No game_id:',game.id)
        
return False

    def enemyStatus
(self,building,enemies):
        
loc self._get_game_state().get_game_loc().get_location_id()
        if 
not enemies or loc == u'main': return False
        
for enemy in enemies:
            if(
round(((enemy.building.x)**2+(enemy.building.y)**2)**0.5) < 15):
                return 
True
        
return False

    def fillToLimit
(self,game):
        
storageCount self._get_game_state().count_in_storage(game.item)
        if 
storageCount game.limit: return True
        
else:return False

    def perform_action
(self):
        
buildings self._get_game_location().get_all_objects_by_type('building')
        
enemies self._get_game_location().get_all_objects_by_type("pirateEnemy")
        
current_loc self._get_game_state().get_location_id()
        
# Ежедневный бонус
        
dailyBonus self._get_game_state().get_state().dailyBonus
        
if self._get_timer().has_elapsed(dailyBonus.playFrom):
            
daily DailyBonus()
            
self._get_events_sender().send_game_events([daily])
            
dailyBonus.playFrom 10800000
        
# Крутим рулетку в волшебнике и т.д
        
if hasattr(self._get_game_state().get_state().npcs,'list'):
            
wizards self._get_game_state().get_state().npcs.list
        else:
wizards = []
        if 
wizards:
            for 
wizard in wizards:
                if 
wizard.type != 'wizard': continue
                if 
hasattr(wizard,'prize'): continue
                
events = {"type":"npc","id":None,"npcId":wizard.id,"action":"play"}
                
self._get_events_sender().send_game_events([events])
        
eventRoll = []
        for 
building in buildings:
            
building_item self._get_item_reader().get(building.item)
            if 
not building_item.games: continue
            for 
game in building_item.games:
                if 
building.level game.level: continue
                
game_id game.id
                
if game_id == "B_MAST_ROULETTE" and (current_loc == u'main' or current_loc == u'isle_omega'): continue
                
roller True
                next_play_times 
building.nextPlayTimes.__dict__
                
if not next_play_times.has_key(game_id):
                    
next_play_times[game_id] = -90000
                next_play 
int(next_play_times[game_id])
                if 
not self._get_timer().has_elapsed(next_play): continue
                if 
hasattr(game,'unconditionalPlayCost'):
                    
roller self.unconditionalPlayCost(game,next_play)
                
elif game.type == 'fillToLimit':
                    
roller self.fillToLimit(game)
                
elif hasattr(game'playCost'):
                    
roller self.playCostGame(game,building_item.id)
                
#if not self._get_timer().has_elapsed(next_play): continue
                
if hasattr(game'playsCount'):
                    
playsCounts building.playsCounts.__dict__
                    
if playsCounts.has_key(game_id):
                        
play_Count int(playsCounts[game_id])
                    else:
                        
playsCounts[game_id] = 0
                        play_Count 
playsCounts[game_id]
                    if 
play_Count >= game.playsCount: continue
                    
playsCounts[game_id] += 1
                    building
.playsCounts dict2obj(playsCounts)
                
#if not enemies: enemy_here = False
                #else: enemy_here = self.enemyStatus(building,enemies)
                
enemy_here self.enemyStatus(building,enemies)
                if 
enemy_here:
                    
logger.info(u"Сильвер мешает крутить '%s'"%building_item.name)
                    
self._get_game_location().remove_object_by_id(building.id)
                    
roller False
                
if not roller: continue
                
roll GamePlayGame(building.idgame_id)
                
eventRoll.append(roll)
                
next_play_times[game_id] = 10000
        
if eventRollself._get_events_sender().send_game_events(eventRoll)

class 
GameResultHandler(object):
    
def __init__(selfitem_readergame_location,game_state):
        
self.__item_reader item_reader
        self
.__game_location game_location
        self
.__game_state_ game_state
        self
.__collection game_state.get_state().collectionItems.__dict__
    def handle
(selfevent_to_handle):
        
#self.cprint = self.__game_state_.cprint
        
_loc self.__game_state_.get_location_id()
        
readerloc self.__item_reader.get(_loc)
        if 
hasattr (event_to_handle,'dailyBonus'):
            
daily self.__game_state_.get_state().dailyBonus
            prize_pos 
event_to_handle.pos
            game_prize 
daily.prizes[prize_pos]
            
prize self.__item_reader.get(game_prize.item)
            
logger.info(u"Крутанул: Ежедневный бонус Приз: %d %s "%(game_prize.count,prize.name.upper()))
        
elif event_to_handle.type == 'wizardNpcPlay':
            
npcsAll self.__game_state_.get_state().npcs.list
            for 
npcs in npcsAll:
                if 
npcs.id != event_to_handle.npcId: continue
                
npcsRead self.__item_reader.get(npcs.item)
                
prize npcsRead.prizes[event_to_handle.pos]
                
prizeRead self.__item_reader.get(prize.item)
                
prizeSTR u'Выиграл %s %s шт.'%(prizeRead.name.upper(),str(prize.count))
                
logger.info(u"Крутанул '%s' %s"%(npcsRead.name,prizeSTR))
                
setattr(npcs,'prize',dict2obj({u'count'prize.countu'item'prize.item}))
            
self.__game_state_.get_state().npcs.list = dict2obj(npcsAll)
        
elif event_to_handle.action == u'play':
            
gameObject self.__game_location.get_object_by_id(event_to_handle.objId)
            if 
gameObject is None: return
            
extraId event_to_handle.extraId
            
if hasattr(event_to_handle,'nextPlayDate'):
                
nextPlayDate event_to_handle.nextPlayDate
                gameObject
.nextPlayTimes.__setattr__(extraId,nextPlayDate)
            
building self.__item_reader.get(gameObject.item)
            for 
game in building.games:
                if 
game.id != extraId: continue
                
game_prize False
                
if extraId == 'FILL_TRIDENT':
                    
fill game.limit-self.__game_state_.count_in_storage(game.item)
                    
game_prize dict2obj({"count":fill,"item":game.item})
                
elif hasattr(event_to_handle.result'pos'):
                    
prize_pos event_to_handle.result.pos
                    game_prize 
game.prizes[prize_pos]
                
elif hasattr(event_to_handle.result'won'):
                    
prize_pos event_to_handle.result.won
                    
if prize_pos is not None:game_prize game.combinations[prize_pos].prize
                
if not game_prize:
                    
prizeSTR u'Ничего не выиграл.'
                    
logger.info(u"Крутанул '%s' %s"%(building.name,prizeSTR))
                    return
                
prize self.__item_reader.get(game_prize.item)
                if 
readerloc.type == 'explorationLocation' and prize.type == 'chopInstrument':
                    if 
not readerloc.disableUseTicketFromGlobus:
                        
self.__game_state_.add_pirate_instruments(game_prize.itemgame_prize.count)
                    else: 
self.__game_state_.add_from_storage(game_prize.itemgame_prize.count)
                
elif prize.type == 'collectionItem':
                    if 
self.__collection.has_key(prize.id):
                        
self.__collection[prize.id] += game_prize.count
                    
else:self.__collection[prize.id] = game_prize.count
                    self
.__game_state_.get_state().collectionItems dict2obj(self.__collection)
                
elif hasattr(prize,'moved') and prize.moved:
                    
self.__game_state_.add_from_storageObjects(game_prize.itemgame_prize.count)
                else: 
self.__game_state_.add_from_storage(game_prize.itemgame_prize.count)
                
prizeSTR u'приз: %s %s шт.'%(prize.name.upper(),str(game_prize.count))
                
logger.info(u"Крутанул '%s' %s"%(building.name,prizeSTR)) 
Файл рулеток со старого бота:
PHP код:
coding=utf-8
import logging
from game_state
.game_types import GameBuildingGamePlayGameDailyBonus
from game_actors_and_handlers
.base import BaseActor
from game_state
.game_event import obj2dict

logger 
logging.getLogger(__name__)

                    
class 
FrutRouletteRoller(BaseActor):

    
def perform_action(self):
        
# '@R_56' Компот
        # '@R_57' Вишнёвый джем
        # '@R_58' Лимонный микс
        # '@R_59' Мармелад
        # '@S_52' Вишня
        # '@S_56' Яблоко
        
ftut_ids = ['@S_52','@S_53']
        for 
fr in ftut_ids:
            
frut_count=self._get_game_state().count_in_storage(fr)
            if 
frut_count==0: break
            
buildings self._get_game_location().get_all_objects_by_type(
                            
GameBuilding.type)
            for 
building in list(buildings):
                
building_item self._get_item_reader().get(building.item)
                for 
game in building_item.games:
                    
game_id game.id
                    play_cost 
None
                    
if hasattr(game'playCost'):
                        
play_cost game.playCost.item
                    
if hasattr(game'playsCount'):
                        
plays building.playsCounts.__dict__
                        
if plays[game_id] >= game.playsCount:
                            continue
                    
#{"type":"roulette","id":"B_SLOT_APPLE_ROULETTE2","level":1,"delayTime":0,"title":"Бонус-Рулетка","hint":"Крути рулетку за 1 Компот, чтобы испытать удачу.","playCost":{"count":1,"image":"storage/recipe_56.png","item":"@R_56"},"prizes":[{"count":1,"item":"@EGG_01"},{"count":5,"item":"@RED_SPEEDUPER"},{"count":1,"item":"@EGG_02"},{"count":10,"item":"@RED_TREE_FERTILIZER"},{"count":5,"item":"@RED_SPEEDUPER"},{"count":1,"item":"@EGG_04"},{"count":10,"item":"@RED_TREE_FERTILIZER"}]}
                    
next_play None
                    next_play_times 
building.nextPlayTimes.__dict__
                    
if game_id in next_play_times:
                        
next_play int(next_play_times[game_id])
                    if (
                            
next_play and
                            
self._get_timer().has_elapsed(next_play) and
                            
play_cost == fr
                    
):
                        
countR=0
                        
for i in range(frut_count):
                            
roll GamePlayGame(building.idgame_id)
                            
self._get_events_sender().send_game_events([roll])
                            
countR+=1
                            self
._get_game_state().remove_from_storage(fr,1)
                        
logger.info(u"Крутим рулетку %d раз в '%s' %d по координатам (%d,%d)"%(countR,building_item.name,building.id,building.x,building.y))
                        
#logger.info(u"Крутим рулетку "+str(countR)+" раз в '"+building_item.name + "' " +str(building.id)+u" по координатам (" +str(building.x) + u", " + str(building.y) + u")")

class RouletteRoller(BaseActor):

    
def perform_action(self):
        
buildings self._get_game_location().get_all_objects_by_type(
                        
GameBuilding.type)
        for 
building in list(buildings):
            
building_item self._get_item_reader().get(building.item)
            for 
game in building_item.games:
                
#print obj2dict(building_item)
                #print obj2dict(game)
                
game_id game.id
                play_cost 
None
                
if hasattr(game'playCost'):
                    
play_cost game.playCost
                
#if building_item.games[0].delayTime==game.delayTime:
                #    next_play = True
                #else: 
                #    next_play = False
                
next_play None
                next_play_times 
building.nextPlayTimes.__dict__
                
if game_id in next_play_times:
                    
next_play int(next_play_times[game_id])
                if 
next_play is Noneget_next_play False
                
else: get_next_play self._get_timer().has_elapsed(next_play)
                
                if 
game_id == "B_TAVERNA_ROULETTE_1":
                    
pirate_box 0
                    
for _obj in list(self._get_game_state().get_state().storageGameObjects):
                        if 
_obj.item == '@PIRATE_BOX' or '@PIRATE_BOX_2'pirate_box 1
                    
if pirate_box!=and (self._get_game_state().get_state().pirate.state != 'PIRATE'): play_cost None
                    
else: play_cost game.unconditionalPlayCost
                
                
# Крутить рулетку в аисте за 25 малины
                
item_count=self._get_game_state().count_in_storage('@S_57')
                if 
building_item.id == 'B_TREE_STORK' and game_id == 'B_TREE_STORK_ROULETTE' and item_count>=25:
                    
self._get_game_state().remove_from_storage('@S_57',25)
                    
play_cost None
                
# Конец аиста
                # Крутить рулетку в казино если фишек = 0
                
item_count=self._get_game_state().count_in_storage("@O_CHIPS")
                if (
building_item.name==u'Казино'):
                    if (
item_count==0):
                        
play_cost None
                    
else: 
                        
play_cost 'Nul'
                
# Конец казино
                # Зомби фортуна за 5 фишек
                
if (building_item.name==u'Зомби-фортуна') and (game_id == 'B_SLOT_B_ROULETTE1') and item_count>=5:
                    
self._get_game_state().remove_from_storage('@O_CHIPS',5)
                    
play_cost None
                    next_play 
False
                
# Конец зомби фортуны
                # Крутить рулетку в Адмирале за 1 глазной суп
                
item_count=self._get_game_state().count_in_storage ('@R_60')
                if 
building_item.id == 'B_SOLDIER' and game_id == 'B_SOLDIER_ROULETTE' and item_count>=1:
                    
self._get_game_state().remove_from_storage('@R_60' ,1)
                    
play_cost None
                
# Конец Адмирала
                  # Ежедневный бонус
                
dailyBonus self._get_game_state().get_state().dailyBonus                
                
if int(dailyBonus.playFrom) and self._get_timer().has_elapsed(dailyBonus.playFrom):
                    
daily DailyBonus()
                    
self._get_events_sender().send_game_events([daily])
                    
next_play False
                    logger
.info(u"Крутим рулетку-Ежедневный бонус")
                    
dailyBonus.playFrom 0
                    
#self._get_game_state().reset_dailyBonus_from_storage()                    
                #конец ежедневной рулетке                 

                
                #print building_item.name
                #print next_play_times
                #print next_play
                #print get_next_play
                #print play_cost
                #print (play_cost is None)
                #print ((not next_play) and (game.level == building.level))
                #print ((next_play and self._get_timer().has_elapsed(next_play)) or ((not next_play) and (game.level == building.level)))
                #raw_input()
                    
                
if ((play_cost is None) and
                        ((
next_play and get_next_play) or ((not next_play) and (game.level == building.level)))):
                    
enemies self._get_game_location().get_all_objects_by_type("pirateEnemy")
                    
enemy_here 0
                    
if enemies:
                        for 
enemy in enemies:
                            if(((
enemy.building.x)**2+(enemy.building.y)**2)**0.5 15):
                                
enemy_here 1
                                
break
                    if(
enemy_here == 1):
                        
#logger.info("Сильвер мешает крутить рулетку "+str(building.id))
                        
continue
                    
logger.info(
                        
u"Крутим рулетку в '" +
                        
building_item.name "' " +
                        
str(building.id) +
                        
u" по координатам (" +
                        
str(building.x) + u", " str(building.y) + u")")
                    
roll GamePlayGame(building.idgame_id)
                    
self._get_events_sender().send_game_events([roll])


class 
GameResultHandler(object):
    
def __init__(selfitem_readergame_location,game_state):
        
self.__item_reader item_reader
        self
.__game_location game_location
        self
.__game_state_ game_state

    def handle
(selfevent_to_handle):
        
nextPlayDate event_to_handle.nextPlayDate
        extraId 
event_to_handle.extraId
        obj_id 
event_to_handle.objId
        gameObject 
self.__game_location.get_object_by_id(obj_id)
        if 
gameObject is None:
            
logger.critical("OMG! No such object")
            return
        else:
            
gameObject.nextPlayTimes.__setattr__(extraIdnextPlayDate)
            
building self.__item_reader.get(gameObject.item)
            for 
game in building.games:
                if 
game.id == extraId:
                    
game_prize None
                    
if hasattr(event_to_handle.result'pos'):
                        
prize_pos event_to_handle.result.pos
                        game_prize 
game.prizes[prize_pos]
                    
elif hasattr(event_to_handle.result'won'):
                        
prize_pos event_to_handle.result.won
                        
if prize_pos is not None:
                            
game_prize game.combinations[prize_pos].prize
                    
if game_prize:
                        
prize_item game_prize.item
                        prize 
self.__item_reader.get(prize_item)
                        
count game_prize.count
                        
#print 'Rollets'
                        #print prize_item
                        
self.__game_state_.add_from_storage(prize_item,count)
                        
logger.info(u'Вы выиграли ' prize.name +
                                    
u'(' str(count) + u' шт.)')
                        
                        
#open('prize.txt','a').write(prize.name.encode("cp1251") + '(' + str(count) + ' шт.)'+'\n')
                        #open('prize.txt','a').write(prize.name + '(' + str(count) + ' шт.)'+'\n')
                    
else:
                        
logger.info('Вы ничего не выиграли.'

а ты редактировал количество фруктов которое нужно оставлять и рецептов?
  Ответить с цитированием
Старый 28.04.2015, 22:29   #4227
 Разведчик
Аватар для HotBlood
 
HotBlood никому не известный тип
Регистрация: 19.07.2012
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 4 раз(а) в 4 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от Miha88Посмотреть сообщение
а ты редактировал количество фруктов которое нужно оставлять и рецептов?

Да, поставил всё по 15, а сюда просто исходный код выложил
  Ответить с цитированием
Старый 28.04.2015, 22:39   #4228
 Разведчик
Аватар для Miha88
 
Miha88 никому не известный тип
Регистрация: 09.07.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

ну если и в GameState, все прописал то даже не знаю, выложи свои game_engine посмотрю что там.
  Ответить с цитированием
Старый 28.04.2015, 23:36   #4229
 Разведчик
Аватар для HotBlood
 
HotBlood никому не известный тип
Регистрация: 19.07.2012
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 4 раз(а) в 4 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
ну если и в GameState, все прописал то даже не знаю, выложи свои game_engine посмотрю что там.

PHP код:
# -*- coding: utf-8 -*-
import os
import sys
import random
import ssl
import message_factory
from message_factory import Session
sys
.path.append('./API')
import requests.api
import vkontakte
.api
from settings import Settings
import vkutils
#import okutils
#import odnoklassniki.api
import mrutils
import logging
import time
from ctypes import windll
from os import walk
import os
.path
import re
import datetime
from game_actors_and_handlers
.storage import SellBot
from game_state
.free_space import FreeSpace
from game_state
.item_reader import GameItemReaderGameCompositionReader
from game_state
.game_event import dict2objobj2dict
from game_state
.game_types import GameEVTGameTIMEGameSTARTGameInfoGameFertilizePlantGamePlayGameGameStartGainMaterialGameStartTimeGainEvent
import pprint
from game_actors_and_handlers
.gifts import GiftReceiverBotAddGiftEventHandlerCakesReceiverBotFreeGiftsStandartGifts
from game_actors_and_handlers
.plants import HarvesterBotSeederBotPlantEventHandlerGameSeedReaderUseEggItemBotFertilBotFertilPlantBotScrollBot
#from game_actors_and_handlers.harvest_buff import GameBuffHarvest
from game_actors_and_handlers.extra_money import HarvestExchange
from game_actors_and_handlers
.roulettes import RouletteRollerGameResultHandlerRouletteTavernaDub
from game_actors_and_handlers
.roulettes import RouletteRollerGameResultHandlerFrutRouletteRollerRouletteTavernaDub
from game_actors_and_handlers
.wood_graves import WoodPickerWoodTargetSelecter
from game_actors_and_handlers
.cook_graves import BrewPickerCookerBotRecipeReaderCookSpeed
from game_actors_and_handlers
.digger_graves import BagsPickerTimeGainEventHandler
from game_actors_and_handlers
.stone_graves import StonePickerStoneTargetSelecter
from game_actors_and_handlers
.workers import GainMaterialEventHandler
from game_actors_and_handlers
.pickups import PickuperAddPickupHandler,BoxPickuper
from game_actors_and_handlers
.location import ChangeLocationBotGameStateEventHandler
from game_actors_and_handlers
.friends import VisitingUsers
from game_state
.brains import PlayerBrains
#from game_actors_and_handlers.brains_exchange import BrainsExchange
from game_actors_and_handlers.emerald_exchange import Emeraldic
from game_actors_and_handlers
.wand import MagicWand
from game_actors_and_handlers
.building_buyer import BuildingBuyer
#from game_actors_and_handlers.building_tent import BuildingTent
from game_actors_and_handlers.chop import PirateTreeCut
from game_actors_and_handlers
.buffs import GameBuffFixHarvestGameBuffDiggerGameBuffFixCookGameTravelBuff
import socket
import urllib2
from game_actors_and_handlers
.burrowing import DigBot
from game_actors_and_handlers
.missions import GetMissionsBotViewMissions
from game_actors_and_handlers
.monster_pit import MonsterPit
from game_actors_and_handlers
.premium_gifts import PremiumGifts
from game_actors_and_handlers
.base import BaseActor
from game_actors_and_handlers
.tree_plant import TreePlant
from game_actors_and_handlers
.pirate_put import PiratePut
from game_actors_and_handlers
.trade_graves import TradeBotTradeSet
from game_actors_and_handlers
.A_work import Work
from game_actors_and_handlers
.buy_shovel_extra import BuyShovel
from game_actors_and_handlers
.craft import TomatoskullsExchangeInstantrertExchangeExchangeShovelsBambooExchangeShovelsNail
from game_actors_and_handlers
.airplane_sell import TiketReceiverBot
from game_actors_and_handlers
.bolt_gift import BoltGift
from game_actors_and_handlers
.deleting_objects import DeletingObjects
from game_actors_and_handlers
.active_user import ActiveUserFinalReportUserFinalReportUserVK
#from game_actors_and_handlers.tent_circus import BowReceiverBot
#from game_actors_and_handlers.barabashka import Barabashka
from ctypes import windll
stdout_handle 
windll.kernel32.GetStdHandle(-11)
SetConsoleTextAttribute windll.kernel32.SetConsoleTextAttribute
##############################


logger logging.getLogger(__name__)


class 
GameLocation():
    
def __init__(selfitem_readergame_locationgame_objects):
        
self.__item_reader item_reader
        self
.__game_location game_location
        
if self.__game_location.id == 'main':
            
openedAreas self.__game_location.openedAreas
            maps 
= [str(i)+':'+str(j) for i in range(0,128) for j in range(48,100)]
            if 
'second' in openedAreas:
                
add=[str(i)+':'+str(j) for i in range(0,48) for j in range(0,48)]
                
maps.extend(add)
            if 
'mount' in openedAreas:
                
add = [str(i)+':'+str(j) for i in range(62,128) for j in range(0,30)]
                
maps.extend(add)
            
objects=[object for object in game_objects if str(object.x)+':'+str(object.yin maps]
            
game_objects objects
        self
.__game_objects game_objects
        self
.__game_objects_dict = {obj.id:obj for obj in game_objects}
        
self.__pickups = []

    
def append_object(selfobj):
        
self.get_game_objects().append(obj)

    
def get_game_location(self):
        return 
self.__game_location

    def get_game_objects
(self):
        return 
self.__game_objects

    def get_location_id
(self):
        return 
self.__game_location.id

    def get_all_objects_by_types
(selfobject_types):
        
objects = []
        for 
game_object in self.get_game_objects():
            
item self.__item_reader.get(game_object.item)
            if 
game_object.type in object_types or item.type in object_types:
                
objects.append(game_object)
        return 
objects

    def get_all_objects_by_type
(selfobject_type):
        return 
self.get_all_objects_by_types([object_type])

    
def get_object_by_id(selfobj_id):
        for 
game_object in self.get_game_objects():
            if 
game_object.id == obj_id:
                return 
game_object
        
return None

    def log_game_objects
(self):
        for 
gameObject in self.get_game_objects():
            
# if gameObject.type != 'base':
                
logger.info(obj2dict(gameObject))

    
def remove_object_by_id(selfobj_id):
        for 
game_object in list(self.get_game_objects()):
            if 
game_object.id == obj_id:
                
self.get_game_objects().remove(game_object)

    
def get_pickups(self):
        return 
tuple(self.__pickups)

    
def add_pickups(selfpickups):
        
self.__pickups += pickups

    def remove_pickup
(selfpickup):
        
self.__pickups.remove(pickup)


class 
GameTimer(object):

    
def __init__(self):
        
self._client_time 0
        self
._start_time 0

    def _get_client_time
(self):
        
random.seed()
        
self._client_time long(random.randrange(28004000))
        
self._start_time time.time()
        return 
self._client_time

    def _get_current_client_time
(self):
        
'''
        returns the current in-game time (in milliseconds)
        '''
        
currentTime self._client_time
        currentTime 
+= (time.time() - self._start_time) * 1000
        
return currentTime

    def _add_sending_time
(selfsending_time):
        
self._client_time += sending_time

    def has_elapsed
(selftime):
        
#return int(time) <= self._get_current_client_time()
        
return int(time)+3000 <= self._get_current_client_time()


class 
GameEventsSender(object):
    
def __init__(selfrequest_sender):
        
self.__events_to_handle = []
        
self.__request_sender request_sender

    def print_game_events
(self):
        if 
len(self.__events_to_handle) > 0:
            
logger.debug("received events: %s" self.__events_to_handle)

    
def get_game_events(self):
        return list(
self.__events_to_handle)

    
def send_game_events(selfevents=[]):
        
'''
        Returns key (string) and time (int)
        '''
        
if len(events) > 0:
            
logger.debug("events to send: %s" events)
        
command GameEVT(events=events)
        
game_response self.__request_sender.send(command)
        
self.__events_to_handle += game_response.events

    def remove_game_event
(selfevent):
        
self.__events_to_handle.remove(event)


class 
GameInitializer():
    
def __init__(selftimersiteselected_site):
        
self.__timer timer
        self
.__site site
        self
.__selected_site selected_site

    def create_events_sender
(self):
        return 
GameEventsSender(self.__request_sender)

    
def start(self):
        
logger.info(u'Подключаемся к игре...')
        
# send TIME request (http://java.shadowlands.ru/zombievk/go)
        # handle redirect (save new url: http://95.163.80.20/zombievk)
        # parse auth key and time id
        
session_keyserver_time self.get_time()

        
# send START
        
start_responsefriendsid self.start_game(server_timesession_key)
        
logger.info(u'Игра подключена!')
        
# id друзей в файл
        # try:
            # os.remove('friends_id.txt')
        # except:
            # pass  
        # with open('friends_id.txt', 'a') as f:
            # friends = ''
            # for fr_id in friendsid:
                # friends += str(fr_id) + '\n'
            # f.write(friends)
        
return start_responsefriendsidserver_time

    def get_time
(self):
        
'''
        Returns key (string) and time (int)
        '''
        
self.__request_sender self.__create_request_sender()
        
key self.__site.get_time_key()
        
command GameTIME(key=key)
        
response self.__request_sender.send(command)
        return 
response.keyresponse.time

    def __create_request_sender
(self):
        
api_user_idgame_auth_keyapi_access_tokenconnection self.__site.get_game_params()
        global 
my_id
        my_id 
api_user_id
        
#global api_session_key
        #api_session_key = api_access_token['session_key']
        
self.__api_access_token api_access_token
        self
.__connection connection
        self
.__session Session(api_user_idgame_auth_key,
                                 
client_version=Game.CLIENT_VERSION)
        
factory message_factory.Factory(self.__sessionself.__selected_siteNone)
        
request_sender RequestSender(factory,
                                       
self.__connection)
        
self.__factory factory
        
return request_sender

    def start_game
(selfserver_timesession_key):
        
self.__factory.setRequestId(server_time)
        
self.__factory.setSessionKey(session_key)
        
client_time self.__timer._get_client_time()
        
start_time time.time()
        
#print client_time, start_time
        
commandfriendsid self.__site.create_start_command(server_timeclient_time)
        
sending_time = (time.time() - start_time) * 1000
        self
.__timer._add_sending_time(sending_time)
        return 
self.__request_sender.send(command),friendsid

    def _getUserInfo
(self):
        
'''
        returns user info using vk api
        '''
        
# get vk user info
        
api vkontakte.api.API(token=self.__api_access_token)
        
info api.getProfiles(
            
uids=self.__session.getUserId(), format='json',
            
fields='bdate,sex,first_name,last_name,city,country')
        
info info[0]
        if 
'bdate' in info:
            
bdate info['bdate']
        else:
            
bdate None
        my_country 
api.places.getCountryById(cids=int(info['country']))[0]
        
info['country'] = my_country['name']
        
my_city api.places.getCityById(cids=int(info['city']))[0]
        
info['city'] = my_city['name']
        
game_info GameInfo(city=info['city'], first_name=info['first_name'],
                 
last_name=info['last_name'],
                 
uid=long(info['uid']), country=info['country'],
                 
sex=long(info['sex']), bdate=bdate)
        return 
game_info


class GameState(BaseActor):

    
def __init__(selfstart_responseitem_readersettingscuruserfriendstimer):
        
self.__curuser curuser
        self
.__friends friends
        self
.__timer timer
        self
.__settings settings
        self
.__item_reader item_reader
        self
.__game_state start_response.state
        game_state_event 
start_response.params.event
        self
.set_game_loc(game_state_event)
        
#self.__player_brains = PlayerBrains(self.__game_state,self.get_game_loc(),item_reader)
        #total_brain_count = self.__player_brains.get_total_brains_count()
        #occupied_brain_count = self.__player_brains.get_occupied_brains_count()

        
playerBrains PlayerBrains(self.__game_state,self.get_game_loc(),item_reader,self.__timer)
        
total_brain_count playerBrains.get_total_brains_count()
        
occupied_brain_count playerBrains.get_occupied_brains_count()        
        
###############
        
"""
        if not hasattr(self.__game_state,'rectsObjects'):self.__game_state.rectsObjects=[]
        vip = ["
@PIRATE_BOX","@PIRATE_BOX_2"]
        need_group = ['compositions','seed']
        compositions = GameItemReader()
        need_catalog = []
        for v in vip:
            if v not in need_catalog:need_catalog.append(v)
        for group in need_group:
            for item_ in self.__item_reader.get(group).items:
                if not item_ in need_catalog:need_catalog.append(item_)
        for item in need_catalog:
            read_item = self.__item_reader.get(item)
            if not hasattr(read_item,'objAnim'):continue
            for obj in read_item.objAnim:
                rectss = compositions.readComposit(obj,'compositions')
                objects = dict2obj({"
objAnim":str(obj),"rects":rectss})
                self.__game_state.rectsObjects.append(objects)
        """
        
        
if not hasattr(self.__game_state,'rectsObjects'):self.__game_state.rectsObjects=[]
        
compositions GameCompositionReader(self.__settings)
        
objAnims compositions.readCompositnew()
        for 
anims in objAnims:
            
rectss compositions.readComposit(anims,'compositions')
            
objects dict2obj({"objAnim":str(anims),"rects":rectss})
            
self.__game_state.rectsObjects.append(objects)
        
################
        
        #open('gameSTATE.txt', 'w').write(str(obj2dict(self.__game_state)))
        
cou 0
        
for fgift in self.__game_state.freeGiftUsers:
            if 
fgift.blockedUntil 0cou+=1

        x1 
0
        z 
0
        
for burySlot in self.__game_state.burySlots:
            
x1 += 1
            
if (hasattr(burySlotu"user"is True): z+=1

        Money 
''
        
for i in range(len(str(self.__game_state.gameMoney)),0,-3):
          if 
>= 3Money str(self.__game_state.gameMoney)[i-3:i]+'.'+Money
          
else: Money str(self.__game_state.gameMoney)[:i]+'.'+Money
        
        
if hasattr(self.__game_state"cashMoney"):
            
zb self.__game_state.cashMoney
        
        dub 
0
        
for st in self.__game_state.storageItems:
            if 
hasattr(st"item") and st.item == '@DUBLON':
                
dub st.count
                
break
        
        
"""
        logger.info(u"
Друзья: %d/%d" % (cou,self.__friends))
        #logger.info("")
        logger.info(u"
Использование слотов для закопки друзей: %d/%d" % (z,x1))
        
        logger.info(u"
Мозги: %d/%d" % (occupied_brain_count, total_brain_count))
        if len(self.__game_state.buyedBrains) <> 0:
            logger.info(u"
Купленные:")
            x = 1
            for buyed_brain in self.__game_state.buyedBrains:
                ms = int(buyed_brain.endTime)-((int(buyed_brain.endTime)/1000)*1000)
                s = (int(buyed_brain.endTime)/1000)-(((int(buyed_brain.endTime)/1000)/60)*60)
                m = ((int(buyed_brain.endTime)/1000)/60)-((((int(buyed_brain.endTime)/1000)/60)/60)*60)
                h = ((int(buyed_brain.endTime)/1000)/60)/60
                logger.info(u"
%dВремя окончания: %d:%d:%d.%d"%(x,h,m,s,ms))
                x += 1
        logger.info("")
        
        logger.info(u"
Игрок"+str(settings._currentUser))
        logger.info(u"
Уровень игрока"+str(self.__game_state.level))
        logger.info(u"
Деньги игрока"+Money[:-1])
        logger.info(u"
Зомбаксов: %d" % (zb))
        logger.info(u"
Дублонов: %d" % (dub))
        logger.info("")
        """

        
print u'Друзья: %d/%d' % (cou,self.__friends)
        print
        
# на принте
        
self.cprint (u"1Слоты для закопки друзей: ^14_%d/%d" % (z,x1))
        
self.cprint (u"1Мозги: ^14_%d/%d" % (occupied_brain_counttotal_brain_count))
        
        if 
len(self.__game_state.buyedBrains) <> 0:
            print 
u"Купленные:"
            
1
            
for buyed_brain in self.__game_state.buyedBrains:
                
ms int(buyed_brain.endTime)-((int(buyed_brain.endTime)/1000)*1000)
                
= (int(buyed_brain.endTime)/1000)-(((int(buyed_brain.endTime)/1000)/60)*60)
                
= ((int(buyed_brain.endTime)/1000)/60)-((((int(buyed_brain.endTime)/1000)/60)/60)*60)
                
= ((int(buyed_brain.endTime)/1000)/60)/60
                
print u"%d. Время окончания: %d:%d:%d.%d"%(x,h,m,s,ms)
                
+= 1
        
print
        
        
self.cprint (u"1Игрок: ^13_%s" % (settings._currentUser))
        
self.cprint (u"1Уровень игрока: ^12_%s" % (self.__game_state.level))
        
self.cprint (u"1Деньги игрока:  ^14_%s  ^1монет" % (Money[:-1]))
        
self.cprint (u"1Зомбаксов:      ^14_%d" % (zb))
        
self.cprint (u"1Дублонов:       ^14_%d" % (dub))
        print

        
os.system((u'title '+u"Акк: "+self.__curuser+u"   Lev: "+str(self.__game_state.level)+u'  Мозгов: ' str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x1) + u'  ЗБ: '+str(zb) + u' Монет: '+str(Money[:-1])).encode('cp1251''ignore'))
        
#os.system((u'title '+u"Акк: "+self.__curuser+u" Lev: "+str(self.__game_state.level)+u'  Мозгов: ' + str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x1)+u' Друзья: '+str(cou)+"/"+str(self.__friends) + '\n' + u'ЗБ: '+str(self.__game_state.cashMoney) + u' Монет: '+str(Money[:-1])).encode('cp1251', 'ignore'))
        #os.system((u'title '+u"Акк: "+self.__curuser+u" Уровень: "+str(self.__game_state.level)+u'  Мозгов: ' + str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x1)+u' Друзья: '+str(len(self.__game_state.freeGiftUsers))+"/"+str(self.__friends)+":"+str(cou)).encode('cp1251', 'ignore'))
        #os.system((u'title '+self.__curuser+u' Мозгов: ' + str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x1)+u' Друзья: '+str(len(self.__game_state.freeGiftUsers))+"/"+str(self.__friends)+":"+str(cou)).encode('cp1251', 'ignore'))
        
    
def get_free_spases(self):
        return 
FreeSpace(self.__item_reader,self.__game_state,self.get_game_loc())

    
def set_game_loc(selfgame_state_event):
        
self.set_game_loc_was True
        self
.__game_loc GameLocation(self.__item_reader,
                                       
game_state_event.location,game_state_event.gameObjects)
        for 
attrval in game_state_event.__dict__.iteritems():
            
self.__game_state.__setattr__(attrval)
        
#self.get_game_loc().log_game_objects()

    
def get_location_id(self):
        return 
self.get_state().locationId

    def get_game_loc
(self):
        return 
self.__game_loc

    def get_state
(self):
        return 
self.__game_state
        
    def get_settings
(self):
        return 
self.__settings
        
    def get_brains
(self):
        
#return self.__player_brains
        
return PlayerBrains(self.__game_state,self.get_game_loc(),self.__item_reader,self.__timer)

    
def has_in_storage(selfitem_idcount):
        for 
itemid in self.__game_state.storageItems:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    return 
itemid.count >= count
        
return False

    def count_in_storage
(selfitem_id):
        for 
itemid in self.__game_state.storageItems:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    return 
itemid.count
        
return 0

    def remove_from_storage
(selfitem_idcount):
        for 
itemid in self.__game_state.storageItems:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    
itemid.count -= count
                    
return True
        
return False

    def add_from_storage
(selfitem_idcount):
        for 
itemid in self.__game_state.storageItems:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    
itemid.count += count
                    
return
        
# for itemid in self.__game_state.storageGameObjects:
            # if hasattr(itemid, "item"): 
                # if itemid.item == item_id:
                    # itemid.count += count
                    # return
        
self.set_from_storage(item_idcount)

    
def count_in_pirate_instruments(selfitem_id):
        
item_id item_id.lstrip('@')
        
item_id '@'+item_id
        
for itemid in self.__game_state.pirate.instruments:
            if 
itemid.item == item_id:return itemid.count
        
return 0

    def remove_from_pirate_instruments
(selfitem_idcount):
        
item_id item_id.lstrip('@')
        
item_id '@'+item_id
        
for itemid in self.__game_state.pirate.instruments:
            if 
hasattr(itemid"item"):
                if 
itemid.item != item_id:continue
                
itemid.count -= count
                
return True
        
return False

    def add_pirate_instruments
(selfitem_idcount):
        
item_id item_id.lstrip('@')
        
item_id '@'+item_id
        
for itemid in self.__game_state.pirate.instruments:
            if 
hasattr(itemid"item"): 
                if 
itemid.item == item_id:
                    
itemid.count += count
                    
return
        
self.set_pirate_instruments(item_idcount)

    
def set_pirate_instruments(selfitem_idcount):
        
itemid=dict2obj({u'item'item_idu'count'count})
        
self.__game_state.pirate.instruments.append(itemid)

    
def set_from_storage(selfitem_idcount):
        
itemid=dict2obj({u'item'item_idu'count'count})
        
self.__game_state.storageItems.append(itemid)
        
#self.__game_state.storageGameObjects.append(itemid)

    
def count_in_storageObjects(selfitem_id):
        for 
itemid in self.__game_state.storageGameObjects:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    return 
itemid.count
        
return 0

    def remove_from_storageObjects
(selfitem_idcount):
        
item_id item_id.lstrip('@')
        
item_id='@'+item_id
        
for itemid in self.__game_state.storageGameObjects:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    
itemid.count -= count
                    
return True
        
return False

    def add_from_storageObjects
(selfitem_idcount):
        
item_id item_id.lstrip('@')
        
item_id='@'+item_id
        
for itemid in self.__game_state.storageGameObjects:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    
itemid.count += count
                    
return
        
self.set_from_storageObjects(item_idcount)

    
def set_from_storageObjects(selfitem_idcount):
        
itemid=dict2obj({u'item'item_idu'count'count})
        
self.__game_state.storageGameObjects.append(itemid)


class 
Game(BaseActor):

    
#CLIENT_VERSION = long(1362084734)
    #CLIENT_VERSION = long(1378103895)
    #CLIENT_VERSION = long(1382714383)
    #CLIENT_VERSION = long(1406282412)
    
CLIENT_VERSION long(1414512369)
    

    
def __init__(selfsitesettings,
                 
user_promptgame_item_reader=Nonegui_input=None):
        
logger.info('Логинимся...')

        
self.__selected_site settings.getSite()
        
self.__timer GameTimer()
        
self.__game_initializer GameInitializer(self.__timersiteself.__selected_site)
        
self.__settings settings

        self
.__itemReader game_item_reader
        self
.__user_prompt user_prompt
        self
.__selected_seed None
        self
.__selected_recipe None
        self
.__selected_location None
        self
.__receive_gifts_with_messages False
        self
.__receive_non_free_gifts False
        self
.__gui_input gui_input
        
        
# load settings
        
self.__ignore_errors settings.get_ignore_errors()
        
self.__selected_recipe settings.getUserCook()
        
self.__selected_seed settings.getUserSeed()
        
self.__selected_sell settings.getUserSell()
        
self.__selected_send settings.getUserSend()
        
self.__setting_view settings.GetUserView()
        
self.__selected_loc_setting settings.getUserLoc()
        
self.__selected_dig_friends settings.getUserDig()
        
self.__selected_PremiumGifts settings.getUserPremiumGifts()
        
self.__selected_curuser settings.getCurUser()

        
        print
        if 
self.__selected_seed <> None:
            if  (
self.__selected_seed == 'None'): print u'Выбранные семена: ничего не сажать'
            
else:
                if 
type(self.__selected_seed) == type(''): print u'Выбранные семена: везде "%s"'%str(self.__selected_seed)
                else:
                    print 
u'Выбранные семена (остров - семена):'
                    
for loc in self.__selected_seed.keys():
                        if 
len(loc) > 8:
                            print 
u'\t%s\t-\t"%s"'%(str(loc),str(self.__selected_seed[loc]))
                        else: print 
u'\t%s\t\t-\t"%s"'%(str(loc),str(self.__selected_seed[loc]))
        print 
''
        
if self.__selected_recipe <> None:
            if  (
self.__selected_recipe == 'None'): print u'Выбранные рецепты: ничего не варить'
            
else:
                if 
type(self.__selected_recipe) == type(''): print u'Выбранные рецепты: везде "%s"'%str(self.__selected_recipe)
                
elif type(self.__selected_recipe) == type([]): print u'Выбранные рецепты: везде "%s"'%str(', '.join(self.__selected_recipe))
                else:
                    print 
u'Выбранные семена (остров - рецепт):'
                    
for loc in self.__selected_recipe.keys():
                        if 
len(loc) > 6: print u'\t%s\t-\t"%s"'%(str(loc),str(self.__selected_recipe[loc]))
                        else: print 
u'\t%s\t\t-\t"%s"'%(str(loc),str(self.__selected_recipe[loc]))
        if  (
self.__selected_sell==None): print u'Предметы на продажу: ничего не продавать'
        
else:
            print 
u'Предметы на продажу (предмет - сколько оставить):'
            
for item in self.__selected_sell.keys():
                print 
u'\t"%s"\t\t-\t%s'%(str(item),str(self.__selected_sell[item]))
        print 
''
        
print u'Настройки показа:'
        
if  (self.__setting_view['pickup']): print u'\tПоказывать подбираемые предметы'
        
else:  print u'\tНе показывать подбираемые предметы'
        
if  (self.__setting_view['location_send']): print u'\tПоказывать перешедшую локацию'
        
else:  print u'\tНе показывать перешедшую локацию'
        
print ''

    
def select_item(selfreader_classprompt_string):
        
item_reader reader_class(self.__itemReader)
        
available_items item_reader.get_avail_names(self.__game_state_)
        
item_name self.__user_prompt.prompt_user(prompt_string,
                                                   
available_items)
        return 
item_reader.get_by_name(item_name)

    
def select_plant_seed(self):
        if 
self.__selected_seed is None:
            
self.__selected_seed self.select_item(GameSeedReader,
                                                    
u'Семена для грядок:')

    
def select_recipe(self):
        if 
self.__selected_recipe is None:
            
self.__selected_recipe self.select_item(RecipeReader,
                                                      
u'Рецепт для поваров:')

    
def select_location(self):
        print 
u'Доступные острова:'
        
print u'(+ платный, - бесплатный, ? - пещера)'
        
locations_nfree = [u'isle_01''isle_small''isle_star''isle_large''isle_moon''isle_giant''isle_xxl''isle_desert']
        
locations_nwalk = [u'un_0'+str(x+1) for x in range(9)]

        
locations = {}
        for 
location in self.get_game_state().locationInfos:
            
name self.__itemReader.get(location.locationId).name
            loc_log 
location.locationId.ljust(18' ')
            if (
location.locationId not in locations_nfree) and (location.locationId not in locations_nwalk):
                
locations[name] = location
                
print u'\t-\t'+loc_log+name
                
#print u'\t-\t'+location.locationId+'\t'+name
            
else:
                if (
location.locationId not in locations_nfree):
                    print 
u'\t?\t'+loc_log+name
                
else:
                    print 
u'\t+\t'+loc_log+name
        
if locations:
            print 
u'Находимся на острове:'
            
self.cprint (u'5        *       %s' % (self.__itemReader.get(self.get_game_loc().get_location_id()).name))
            print
            
#location_name = self.__user_prompt.prompt_user(u'Выберите остров:',locations.keys())
            
location_name locations.keys()[0]
            if 
location_name in locations:
                
self.__selected_location  locations[location_name].locationId
            
else:
                
self.__selected_location  self.get_game_loc().get_location_id()

    
def select_location_logger(self): # logger
        
logger.info(u'Доступные острова:')
        
logger.info(u'(+ платный, - бесплатный, ? - пещера)')
        
locations_nfree = [u'isle_01''isle_small''isle_star''isle_large''isle_moon''isle_giant''isle_xxl''isle_desert']
        
locations_nwalk = [u'un_0'+str(x+1) for x in range(9)]

        
locations = {}
        for 
location in self.get_game_state().locationInfos:
            
name self.__itemReader.get(location.locationId).name
            loc_log 
location.locationId.ljust(18' ')
            if (
location.locationId not in locations_nfree) and (location.locationId not in locations_nwalk):
                
locations[name] = location
                logger
.info('\t-\t'+loc_log+name)
                
#logger.info('\t-\t'+location.locationId+'\t'+name)
            
else:
                if (
location.locationId not in locations_nfree):
                    
logger.info('\t?\t'+loc_log+name)
                else:
                    
logger.info('\t+\t'+loc_log+name)
        if 
locations:
            
logger.info(u'Находимся на острове:')
            
logger.info(u'   *       '+self.__itemReader.get(self.get_game_loc().get_location_id()).name)
            
logger.info("")
            
#location_name = self.__user_prompt.prompt_user(u'Выберите остров:',locations.keys())
            
location_name locations.keys()[0]
            if 
location_name in locations:
                
self.__selected_location  locations[location_name].locationId
            
else:
                
self.__selected_location  self.get_game_loc().get_location_id()

    
def get_user_setting(selfsetting_id):
        return 
self.__settings.get

    def running
(self):
        if 
self.__gui_input:
            
running self.__gui_input.running
        
else:
            
running lambdaTrue
        
return running()

    
def start(self):

        
SetConsoleTextAttribute(stdout_handle0x0001 0x0070)
        
game_state self.get_game_state 
        
while(self.running()):
            try:
                
# load items dictionary
                
if self.__itemReader is None:
                    print 
u'Загружаем словарь объектов...  ',
                    
item_reader GameItemReader(self.__settings)
                    
item_reader.download('items.txt')
                    
item_reader.read('items.txt')
                    
self.__itemReader item_reader
                    
print u'Словарь объектов загружен'
                    
########
                    #compositions = GameItemReader()
                    
compositions GameCompositionReader(self.__settings)
                    print 
u'Загружаю размеры обьектов...'
                    
compositions.loadComposit('compositions')
                    
########
                
start_response,self.__friendsid,self.__server_time self.__game_initializer.start()
                
# Save Game_state
                #open("game_state.txt","w").write(str(obj2dict(start_response)))
                
                
self.__game_events_sender self.__game_initializer.create_events_sender()

                
self.save_game_state(start_response)
                
                
# GetMissionsBot(self.__itemReader, self.__game_state_, self.__game_events_sender, self._get_timer(),{}).perform_action()
                
                
self.select_location()

                
self.select_plant_seed()
                
                
self.select_recipe()
                
                
self.create_all_actors()

                
# TODO send getMissions
                # TODO handle getMissions response
                
                
self.load_friends_names()
                
# self.load_friends_active_game()                
                #self.load_info_users()
                
                
self.eventLoop()
            
except urllib2.HTTPErrore:
                
raise e
            except 
(socket.timeouturllib2.HTTPErrorurllib2.URLError):
                
seconds 3
                logger
.error('Timeout occurred, retrying in %s seconds...'
                             
seconds)
                
time.sleep(seconds)
            
except (socket.errorssl.SSLError) as e:
                
seconds 1
                logger
.error('Socket error occurred, retrying in %s seconds...'
                             
seconds)
                
time.sleep(seconds)
            
except message_factory.GameErrore:
                
time.sleep(1)
                if 
not self.__ignore_errors# 0
                    
raise e

    def save_game_state
(selfstart_response):
        
# parse game state
        
self.__game_state_ GameState(start_responseself.__itemReaderself.__settingsself.__selected_curuserlen(self.__friendsid), self.__timer)

    
def get_game_loc(self):
        return 
self.__game_state_.get_game_loc()

    
def get_game_state(self):
        return 
self.__game_state_.get_state()

    
def load_friends_names(self):        
        try:
            
with open('friends_names.txt''r') as f:
                
self.__game_state_.friends_names = eval(f.read())
        
except:
            
self.__game_state_.friends_names = {}

    
# def load_friends_active_game(self):
        # try:
            # with open('friends_active_game.txt', 'r') as f:
                # self.__game_state_.friends_active_game = eval(f.read())
        # except:
            # self.__game_state_.friends_active_game = {}
        # for friends_id in self.__friendsid:
            # self.__game_state_.friends_active_game.setdefault(friends_id, ['0', '0'])
        # with open('friends_active_game.txt', 'w') as f:
            # f.write(str(self.__game_state_.friends_active_game))

    
def load_info_users(self):
        
friends_copy self.__friendsid[:]
        
players = []
        print 
u'Загружаем информацию о друзьях',
        while 
len(friends_copy):
            
players.append(friends_copy.pop())
            if 
len(players) == 100:
                
events = {"type":"players","id":3,"action":"getInfo","players":players}
                
self.__game_events_sender.send_game_events([events])
                print 
u'\b.',
                
self.handle_all_events()
                
players = []
        if 
players:
            
events = {"type":"players","id":3,"action":"getInfo","players":players}
            
self.__game_events_sender.send_game_events([events])
            print 
u'\b.',
            
self.handle_all_events()    
        print 
u'\b.'
        
#self.wait(2)
        #time.sleep(2)

    
def wait(selfpause):
        print 
u'Загружаем информацию о друзьях',
        while 
pause 0:
            print 
u'\b.',
            
time.sleep(0.2)
            
pause -= 0.2
        
print u'\b.'

    
def eventLoop(self):
        
'''
        in a loop, every 30 seconds
        send EVT request
        handle EVT response
        '''
        
interval 5
        refresh_min 
7
        seconds 
interval
        ref_min 
= []
        while(
self.running()):
            if 
seconds >= interval:
                
self.perform_all_actions()
                
#logger.info('Ждем %d секунд'%interval)
                
seconds 0
            time
.sleep(0.1)
            
seconds += 0.1
            
            cur_time 
self.__timer._get_current_client_time()
            
min int(int(cur_time/1000)/60)
            if 
min not in ref_min:
                if (
refresh_min-min) == 1logger.info(u'Перезагрузка через %s минуту'%str(refresh_min-min))
                
elif ((refresh_min-min) >= 2) and ((refresh_min-min) <= 4): logger.info(u'Перезагрузка через %s минуты'%str(refresh_min-min))
                else: 
logger.info(u'Перезагрузка через %s минут'%str(refresh_min-min))
                
ref_min += [min]
            if 
min >= refresh_min:
                
ref_min = []
                
#exit(0)
                
break

    
def create_all_actors(self):
        
receive_options = {'with_messages'self.__receive_gifts_with_messages,
                           
'non_free'self.__receive_non_free_gifts}
        
options = {'GiftReceiverBot'receive_options,
                   
'SeederBot'self.__selected_seed,
                   
'CookerBot'self.__selected_recipe,
                   
'ChangeLocationBot'self.__selected_location,
                   
'VisitingUsers':[self.__friendsid,my_id],
                   
'SellBot':{'sell_item':self.__selected_sell,'send_user':self.__selected_send},
                   
'ChangeLocationBot':self.__selected_loc_setting,
                   
'DigBot':self.__selected_dig_friends,
                   
'StandartGifts':self.__friendsid,
                   
'PirateTreeCut':self.__selected_curuser,
                   
'PirateTreeCutBroot':self.__selected_curuser,
                   
'PremiumGifts':self.__selected_PremiumGifts,
                   
'ActiveUser':self.__friendsid
                  
}
        
events_sender self.__game_events_sender
        timer 
self._get_timer()
        
item_reader self.__itemReader
        game_state 
self.__game_state_
        actor_classes 
= [
            
#Work,                  # Опыты и тесты
            #SellBot,               # Продажа чего либо
            #ActiveUser,            # Лог активности юзеров
            #FinalReportUser,       # Полный отчёт о друзьях MR
            #FinalReportUserVK,     # Полный отчёт о друзьях VK
            #DigBot,                # Работа с мозгами
            #GameBuffFixHarvest,    # Применение суперурожая
            #GameBuffDigger,        # Активировать супер-поиск
            #GameBuffFixCook,       # Активировать повара-минутки
            #GameTravelBuff,        # Применение проездного
            #GetMissionsBot,        # Запрос выполнения миссий
            #VisitingUsers,         # Посещение друзей (выпилино. В отдельном боте.)
            #FreeGifts,             # Дарить бесплатки
            #StandartGifts,         # Дарить всем ПЛАТНЫЙ подарок с сообщением (не доработан ошибка 48 сообщений)
            #RouletteRoller,        # Кручение рулеток
            #BrainsExchange,        # Создание мозгов в останкино
            #TiketReceiverBot,      # Собираем билеты, обновляем самолет
            #BowReceiverBot,        # Собираем банты из циркового шатра
            #Barabashka,            # Собираем барабашек из дома приведений
            #HarvestExchange,       # Обмен роз на деньги
            #Emeraldic,             # Обмен в изумрудных постройках
            #BuildingBuyer,         # Покупать ракету
            #BuyShovel,             # Покупать золотые лопаты
            #ExchangeShovelsBamboo, # Менять бамбук на лопаты
            #ExchangeShovelsNail,   # Менять гвозди на лопаты
            #TomatoskullsExchange,  # Менять черепки в томате в корабле
            #InstantrertExchange,   # Менять красные удобрения             
            #MonsterPit,            # Работа с Моней            
            #WoodPicker,            # Сбор дерева
            #StonePicker,           # Сбор камня
            #BrewPicker,            # Сбор сваренного
            #BagsPicker,            # Сбор сумок
            #WoodTargetSelecter,    # Отправка работать дровосекам
            #StoneTargetSelecter,   # Отправка работать камнетёсов
            #TradeBot,              # Ставить обмен у торговцев
            #TradeSet,              # Супер торговец (админы добавили автобан!!!)
            #DeletingObjects,       # Удаление объектов
            #BoltGift,              # Передача другу Болтов по 1
            #CookerBot,             # Работа с поварами (подъем из могил, установка рецептов)
            #CookSpeed,             # Cолить рецепты
            #FertilPlantBot,        # Удобрение растений (красным)
            #FertilBot,             # Удобрение деревьев
            
HarvesterBot,          # Сбор чего либо + вскапывание грядок
            #TreePlant,             # Посадка деревьев            
            #CakesReceiverBot,      # Сбор пряников
            #SeederBot,             # Посейка
            #GiftReceiverBot,       # Принятие подарков
            #PremiumGifts,          # Принятие платных выставляемых подарков
            #UseEggItemBot,         # Бить ценности
            #ScrollBot,             # Бьём свитки
            
BoxPickuper,           # Вскрытие чего либо
            #PiratePut,             # Выставляем пиратское барахло
            
FrutRouletteRoller,    # Кручение фруктовых рулеток
            #RouletteTavernaDub,    # Кручение таверны за дублоны  HE ДОДЕЛАНО!
            #PirateTreeCut,         # Рубка на острове сокровищ
            #MagicWand,             # Добыча ресурсов палочками
            #Pickuper,              # Сбор дропа
            
ChangeLocationBot      # Переход по локациям
        
]
        
self.__actors = []
        for 
actor_class in actor_classes:
            
self.__actors.append(
                
actor_class(item_readergame_stateevents_sendertimerself,
                            
options))

    
def perform_all_actions(self):
        
game_state self.__game_state_
        
'''
        Assumes that create_all_actors is called before
        '''
        
self.title()
        
#all_time = []
        
for actor in self.__actors:
            
#time_one = time.time()
            
actor.perform_action()
            
#time_two = time.time()
            #logger.info(u'Класс %s' % (str(actor).split()[0].split('.')[-1]))
            #logger.info(u'Выполнялся %f' % (time_two-time_one))
            #all_time += [[str(actor).split()[0].split('.')[-1],(time_two-time_one)]]
            
self.handle_all_events()
        
#open('time.txt','a').write(str(all_time))
        
self.__game_events_sender.send_game_events()
        
self.handle_all_events()
        
#print "###################"
        
if hasattr(game_state,'getcoins') and game_state.getcoins 0:
            
logger.info(u'Подобрали %d монет' % (game_state.getcoins))
            
del game_state.getcoins
        
if hasattr(game_state,'getxp') and game_state.getxp 0:
            
logger.info(u'Подобрали %d опыта' % (game_state.getxp))
            
del game_state.getxp

    def handle_all_events
(self):
        
self.alerts = []
        
self.res_types = []
        
self.game_result = []
        
self.__game_events_sender.print_game_events()
        for 
event in self.__game_events_sender.get_game_events():
            
self.handleEvent(event)

    
def handleEvent(selfevent_to_handle):
        
# if event_to_handle.action != 'getInfo':
            # with open('events.txt', 'a') as f:
                # f.write(str(obj2dict(event_to_handle)).encode('utf-8')+"\n"+"\n")
        
self.res_types.append(event_to_handle.type)
        if 
event_to_handle.type == 'alert'# and not (event_to_handle.msg in self.alerts):
            
if not (event_to_handle.msg in self.alerts):
                
logger.info('Alert! '+event_to_handle.msg)
            
# коррекция удобренных деревьев
            
if event_to_handle.msg == 'SERVER_REMOTE_FERTILIZE_FRUIT_TREE_NOT_FOUND':
                
#print dir(self.__game_state_.get_state())
                
self.cprint(u'4Дерево нельзы полить, удаляем из списка')
                
nop self.__game_state_.get_state().remoteFertilizeFruitTree.pop()
            else:
                
self.alerts.append(event_to_handle.msg)
            
# print 'Alert! ', event_to_handle.msg, ' type = ', event_to_handle.type
            # if event_to_handle.msg == 'SERVER_NEW_YEAR_GIFT_NOT_ALLOW':
                # self.__game_state_.nyna = 1    
            # if event_to_handle.msg == 'SERVER_REMOTE_TREASURE_ALL_DIGGED':
                # self.__game_state_.alldigged = 1
            # if event_to_handle.msg == 'SERVER_REMOTE_FERTILIZE_FRUIT_TREE_NOT_FOUND':
                # self.__game_state_.get_state().haveRemoteFertilizeFruit = False
            
        
elif event_to_handle.action == 'getInfo'# and event_to_handle.type == 'playersInfo':
            
self.add_users_info(event_to_handle)
        
elif event_to_handle.type == 'monsterPitDigEvent':
            
name self.addName(event_to_handle)
            
sms u'Сосед ' name u' закопал нам медведя на ' unicode(event_to_handle.count) + u' м.'
            
logger.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.type == 'pirateShip':
            
name self.addName(event_to_handle)
            
sms u'Сосед ' name u' вошёл в команду корабля'
            
logger.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.action == u'pirateCheckin':
            
name self.addName(event_to_handle)
            
sms u'Сосед ' name u' застукал наш пиратский сундук'
            
logger.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.type == u'pirateDeath':
            
logger.info(u'Вышло время застуканного сундука. Мы больше не пираты')
            
self.__game_state_.get_state().pirate.state 'DEAD'
        
elif event_to_handle.action == u'readyToSail':
            
#{u'action': u'readyToSail', u'ship': u'@B_PIRATE_SCHOONER_2', u'captain': u'13559763416637162308', u'type': u'pirateSail'}
            
name self.addName(event_to_handle)
            
sms u'Сосед ' name u' отплыл на пиратский остров'
            
logger.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.action == 'exchange':
            
name self.addName(event_to_handle)
            
torg unicode(event_to_handle.objId)
            
sms u'Сосед ' name u' произвёл обмен у торговца ' torg
            logger
.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.type == 'bridge':
            
logger.info(u'Туристы потеряли чемодан')
        
elif event_to_handle.action == 'addGift':
            
AddGiftEventHandler(self.get_game_state()).handle(event_to_handle)
        
elif event_to_handle.action[:4] == 'ping':
            if 
event_to_handle.action[:5] == 'ping2':
                
time.sleep(1)
            else: 
time.sleep(0.005)
            
self.__game_events_sender.send_game_events([])
            
pass
        elif event_to_handle
.type == 'exploration':
            if 
hasattr(event_to_handle'gameObjects'):
                for 
obj in list(event_to_handle.gameObjects):
                    
#print u'Добавим', obj.item.ljust(27, " "), ' id = ', obj.id
                    
self.get_game_loc().append_object(obj)
        
elif event_to_handle.type == 'pirateEnemy':
            if 
event_to_handle.action == 'alreadyHitted':
                
# {u'action': u'alreadyHitted', u'health': 2L, u'objId': -8328L, u'type': u'pirateEnemy'}
                
pass
        elif event_to_handle
.action == 'add':
            if 
event_to_handle.type == 'pickup':
                
AddPickupHandler(self.__itemReaderself.get_game_loc(),self.__game_state_,self.__setting_view).handle(event_to_handle)
        
elif event_to_handle.type == GameFertilizePlant.type:
            
PlantEventHandler(self.get_game_loc()).handle(event_to_handle)
        
#elif event_to_handle.type == GamePlayGame.type:
        
elif event_to_handle.type == 'dailyBonus' or event_to_handle.type == 'wizardNpcPlay' or event_to_handle.type == GamePlayGame.type:
            
self.game_result.append(event_to_handle.type)
            
GameResultHandler(self.__itemReader,self.get_game_loc(),self.__game_state_).handle(event_to_handle)
        
elif event_to_handle.type == GameStartGainMaterial.type:
            
GainMaterialEventHandler(self.__itemReaderself.get_game_loc(),
                                     
self.__timer).handle(event_to_handle)
        
elif event_to_handle.type == GameStartTimeGainEvent.type:
            
TimeGainEventHandler(self.__itemReaderself.get_game_loc(),
                                 
self.__timer).handle(event_to_handle)
        
elif event_to_handle.type == 'gameState':
            
#print 'gameState'
            #with open('events.txt', 'a') as f:
            #    f.write(str(obj2dict(event_to_handle)).encode('utf-8')+"\n"+"\n")
            
self.__game_state_.gameObjects event_to_handle.gameObjects #объекты
            
GameStateEventHandler(self.__game_state_self.__server_time,self.__setting_view).handle(event_to_handle)
        
elif event_to_handle.type == 'mission':
            
ViewMissions(self.__itemReaderself.__setting_view).handle(event_to_handle)
        
# elif event_to_handle.type == 'playersInfo': # информация о пользователе
            # self.__game_state_.playersInfo = event_to_handle.players
        
elif event_to_handle.action == 'buried' or event_to_handle.action == 'cook' or event_to_handle.type == 'newYearTree' or event_to_handle.action == 'changeObject' or event_to_handle.action == 'buyedBrains' or event_to_handle.action == 'releaseBrains' or event_to_handle.action == 'stopRequest':
            
pass
        
else:
            
self.logUnknownEvent(event_to_handle)
        
self.__game_events_sender.remove_game_event(event_to_handle)


    
def add_action_frends(selfsms):
        
with open('action_frends.txt''a') as f:
            
_time datetime.datetime.today().strftime("%Y.%m.%d %H:%M:%S")
            
sms _time u' ' sms u'\n'
            
f.write(sms.encode("utf-8"))
                
    
def add_users_info(selfevent_to_handle):
        
self.__game_state_.resp True
        
if not hasattr(self.__game_state_'playersInfo'):
            
self.__game_state_.playersInfo event_to_handle.players
        
else:
            for 
new_info in event_to_handle.players:
                for 
info in self.__game_state_.playersInfo:
                    if 
new_info.id == info.id:
                        
del info
                        
break
            
self.__game_state_.playersInfo.extend(event_to_handle.players)

        
data = {}
        for 
n in event_to_handle.players:
            
#if hasattr(self.__game_state_, 'friends_names') and self.__game_state_.friends_names.get(n.id): continue # если уже есть
            #print n
            #print 'n.id', n.id
            
if hasattr(n'name') and n.name:
                
name_ n.name
                
while '{' in name_ or '}' in name_ or '[' in name_ or ']' in name_ or '^' in name_:
                    for 
l in '{}[]^':
                        
name_ name_.replace(l'')
                if 
u'\u0456' in name_:
                    
name_ name_.replace(u'\u0456'u'i')
                
#print n.name.replace(u'\u0456', u'i').encode("cp866", "ignore")
                #print n.name.decode('unicode-escape').replace(u'\u0456', u'i')
            
else:
                
name_ u''
                
#name_ = u'Без имени'
            
data[n.id] = name_
        
if data:
            if 
hasattr(self.__game_state_'friends_names'):
                
self.__game_state_.friends_names.update(data)
            else:
                
self.__game_state_.friends_names data
            with open
('friends_names.txt''w') as f:
                
#f.write(str(self.__game_state_.friends_names))
                
text u"{"
                
for el in self.__game_state_.friends_names.keys():
                    if 
text != u"{"text += u", "
                    
text += u"u'" el u"': u'" self.__game_state_.friends_names[el] + u"'"
                
text += u"}"
                
f.write(text.encode("UTF-8""ignore"))

        if 
0#  списки ниже 20 уровня и забаненных
            
try:
                
with open('low_level.txt''r') as f:
                    
self.__game_state_.low_level = eval(f.read())
            
except:
                
self.__game_state_.low_level = []
            try:
                
with open('banned.txt''r') as f:
                    
self.__game_state_.banned = eval(f.read())
            
except:
                
self.__game_state_.banned = [] 
            
lovl = []
            
banned = []
            for 
n in event_to_handle.players:
                if 
hasattr(n'level') and int(n.level) < 20 and (n.id not in self.__game_state_.low_level): lovl.append(n.id)
                if 
hasattr(n'banned') and n.banned and (n.id not in self.__game_state_.banned): banned.append(n.id)
            if 
lovl:
                
self.__game_state_.low_level.extend(lovl)
                
with open('low_level.txt''w') as f:
                    
f.write(str(self.__game_state_.low_level))
            if 
banned:
                
self.__game_state_.banned.extend(banned)
                
with open('banned.txt''w') as f:
                    
f.write(str(self.__game_state_.banned))
        
        
# self.add_friends_active_game(event_to_handle)  # обновляем инфу о последнем посещении
        
    # def add_friends_active_game(self, event_to_handle):
        # data = [datetime.date.today().strftime("%Y.%m.%d"), datetime.date.today().strftime("%j")]
        # for n in event_to_handle.players:
            # if n.liteGameState.haveTreasure:
                # self.__game_state_.friends_active_game[n.id] = data
        # with open('friends_active_game.txt', 'w') as f:
            # f.write(str(self.__game_state_.friends_active_game))

    
def addName(selfevent_to_handle):
        if 
hasattr(event_to_handle'user'):
            
id event_to_handle.user
            
if hasattr(self.__game_state_'friends_names') and self.__game_state_.friends_names.get(id) and self.__game_state_.friends_names.get(id) != u'':
                
name u" '" self.__game_state_.friends_names.get(id) + u"'"
                
name name.replace(u'\u0456'u'i').encode("UTF-8""ignore")
                
name unicode(name"UTF-8")
                
#print name.replace(u'\u0456', u'i').encode("cp866", "ignore")
            
else: name u''
            
id_name unicode(id).ljust(20" ") + (name).ljust(16" ")
        else: 
id_name u' ' 35
        
return id_name

    def logUnknownEvent
(selfevent_to_handle):
        
logger logging.getLogger('unknownEventLogger')
        
#logger.info(pprint.pformat(obj2dict(event_to_handle)))
        
open('unknownEvent.txt','a').write(str(obj2dict(event_to_handle))+"\n")
        
open('unknownEvent.txt','a').write("-----------------------------------------------------------------------------------\n")

    
def _get_timer(self):
        return 
self.__timer

    def get_request_sender
(self):
        return 
self.__request_sender
        
    def cprint
(selfcstr):
        
clst cstr.split('^')
        
color 0x0001
    
        
for cstr in clst:
            
dglen re.search("\D"cstr).start()
            
color int(cstr[:dglen])
            
text cstr[dglen:]
            if 
text[:1] == "_"text text[1:]
            
SetConsoleTextAttribute(stdout_handlecolor 0x0070#78
            
print text,
        
#sys.stdout.flush()
        
print ""
        
SetConsoleTextAttribute(stdout_handle0x0001 0x0070)

    
def title(self):
        
playerBrains self.__game_state_.get_brains()
        
total_brain_count playerBrains.get_total_brains_count()
        
occupied_brain_count playerBrains.get_occupied_brains_count()
        
#total_brain_count = self.__game_state_.get_brains().get_total_brains_count()
        #occupied_brain_count = self.__game_state_.get_brains().get_occupied_brains_count()
        #print total_brain_count, occupied_brain_count

        
x1 0
        z 
0
        
#print dir(self.__game_state_)
        
for burySlot in self.__game_state_.get_state().burySlots#можно так self.get_game_state().burySlots
            
x1 += 1
            
if (hasattr(burySlotu"user"is True): += 1

        Money
=''
        
for i in range(len(str(self.__game_state_.get_state().gameMoney)),0,-3):
            if 
>= 3Money=str(self.__game_state_.get_state().gameMoney)[i-3:i]+'.'+Money
            
else: Money=str(self.__game_state_.get_state().gameMoney)[:i]+'.'+Money

        
if hasattr(self.__game_state_.get_state(), "cashMoney"):
            
zb self.__game_state_.get_state().cashMoney

        dub 
0
        
for st in self.__game_state_.get_state().storageItems:
            if 
hasattr(st"item") and st.item == '@DUBLON':
                
dub st.count
                
break
        
os.system((u'title '+self.__selected_curuser+u"  Lev:"+str(self.__game_state_.get_state().level)+u' Мозги:' str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты:'+str(z)+'/'+str(x1) + u'  ЗБ:'+str(zb) + u' Монет:'+str(Money[:-1]) + u' Дуб:'+str(dub)).encode('cp1251''ignore'))


class 
RequestSender(object):
    
def __init__(selfmessage_factoryconnection):
        
self.__factory message_factory
        self
.__connection connection

    def send
(selfdata):
        
data obj2dict(data)
        
assert 'type' in data
        request 
self.__factory.createRequest(data)
        return 
dict2obj(request.send(self.__connection))

    
def set_url(selfurl):
        
self.__connection.setUrl(url)

    
def clear_session(self):
        
self.__factory.setSessionKey(None)

    
def reset_request_id(self):
        
request_id message_factory._getInitialId()
        
self.__factory.setRequestId(request_id)

    
def set_auth_key(selfauth_key):
        
self.__factory.set_auth_key(auth_key
Хм, пока пытался рулетки починить, забыл включить удобрения, а не работает кручение и удобрения вместе
[Ссылки могут видеть только зарегистрированные пользователи. ]
ЗЫ: Рулетки на дремучем

Последний раз редактировалось HotBlood; 28.04.2015 в 23:44.
  Ответить с цитированием
Старый 29.04.2015, 00:39   #4230
 Разведчик
Аватар для Miha88
 
Miha88 никому не известный тип
Регистрация: 09.07.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от HotBloodПосмотреть сообщение
PHP код:
# -*- coding: utf-8 -*-
import os
import sys
import random
import ssl
import message_factory
from message_factory import Session
sys
.path.append('./API')
import requests.api
import vkontakte
.api
from settings import Settings
import vkutils
#import okutils
#import odnoklassniki.api
import mrutils
import logging
import time
from ctypes import windll
from os import walk
import os
.path
import re
import datetime
from game_actors_and_handlers
.storage import SellBot
from game_state
.free_space import FreeSpace
from game_state
.item_reader import GameItemReaderGameCompositionReader
from game_state
.game_event import dict2objobj2dict
from game_state
.game_types import GameEVTGameTIMEGameSTARTGameInfoGameFertilizePlantGamePlayGameGameStartGainMaterialGameStartTimeGainEvent
import pprint
from game_actors_and_handlers
.gifts import GiftReceiverBotAddGiftEventHandlerCakesReceiverBotFreeGiftsStandartGifts
from game_actors_and_handlers
.plants import HarvesterBotSeederBotPlantEventHandlerGameSeedReaderUseEggItemBotFertilBotFertilPlantBotScrollBot
#from game_actors_and_handlers.harvest_buff import GameBuffHarvest
from game_actors_and_handlers.extra_money import HarvestExchange
from game_actors_and_handlers
.roulettes import RouletteRollerGameResultHandlerRouletteTavernaDub
from game_actors_and_handlers
.roulettes import RouletteRollerGameResultHandlerFrutRouletteRollerRouletteTavernaDub
from game_actors_and_handlers
.wood_graves import WoodPickerWoodTargetSelecter
from game_actors_and_handlers
.cook_graves import BrewPickerCookerBotRecipeReaderCookSpeed
from game_actors_and_handlers
.digger_graves import BagsPickerTimeGainEventHandler
from game_actors_and_handlers
.stone_graves import StonePickerStoneTargetSelecter
from game_actors_and_handlers
.workers import GainMaterialEventHandler
from game_actors_and_handlers
.pickups import PickuperAddPickupHandler,BoxPickuper
from game_actors_and_handlers
.location import ChangeLocationBotGameStateEventHandler
from game_actors_and_handlers
.friends import VisitingUsers
from game_state
.brains import PlayerBrains
#from game_actors_and_handlers.brains_exchange import BrainsExchange
from game_actors_and_handlers.emerald_exchange import Emeraldic
from game_actors_and_handlers
.wand import MagicWand
from game_actors_and_handlers
.building_buyer import BuildingBuyer
#from game_actors_and_handlers.building_tent import BuildingTent
from game_actors_and_handlers.chop import PirateTreeCut
from game_actors_and_handlers
.buffs import GameBuffFixHarvestGameBuffDiggerGameBuffFixCookGameTravelBuff
import socket
import urllib2
from game_actors_and_handlers
.burrowing import DigBot
from game_actors_and_handlers
.missions import GetMissionsBotViewMissions
from game_actors_and_handlers
.monster_pit import MonsterPit
from game_actors_and_handlers
.premium_gifts import PremiumGifts
from game_actors_and_handlers
.base import BaseActor
from game_actors_and_handlers
.tree_plant import TreePlant
from game_actors_and_handlers
.pirate_put import PiratePut
from game_actors_and_handlers
.trade_graves import TradeBotTradeSet
from game_actors_and_handlers
.A_work import Work
from game_actors_and_handlers
.buy_shovel_extra import BuyShovel
from game_actors_and_handlers
.craft import TomatoskullsExchangeInstantrertExchangeExchangeShovelsBambooExchangeShovelsNail
from game_actors_and_handlers
.airplane_sell import TiketReceiverBot
from game_actors_and_handlers
.bolt_gift import BoltGift
from game_actors_and_handlers
.deleting_objects import DeletingObjects
from game_actors_and_handlers
.active_user import ActiveUserFinalReportUserFinalReportUserVK
#from game_actors_and_handlers.tent_circus import BowReceiverBot
#from game_actors_and_handlers.barabashka import Barabashka
from ctypes import windll
stdout_handle 
windll.kernel32.GetStdHandle(-11)
SetConsoleTextAttribute windll.kernel32.SetConsoleTextAttribute
##############################


logger logging.getLogger(__name__)


class 
GameLocation():
    
def __init__(selfitem_readergame_locationgame_objects):
        
self.__item_reader item_reader
        self
.__game_location game_location
        
if self.__game_location.id == 'main':
            
openedAreas self.__game_location.openedAreas
            maps 
= [str(i)+':'+str(j) for i in range(0,128) for j in range(48,100)]
            if 
'second' in openedAreas:
                
add=[str(i)+':'+str(j) for i in range(0,48) for j in range(0,48)]
                
maps.extend(add)
            if 
'mount' in openedAreas:
                
add = [str(i)+':'+str(j) for i in range(62,128) for j in range(0,30)]
                
maps.extend(add)
            
objects=[object for object in game_objects if str(object.x)+':'+str(object.yin maps]
            
game_objects objects
        self
.__game_objects game_objects
        self
.__game_objects_dict = {obj.id:obj for obj in game_objects}
        
self.__pickups = []

    
def append_object(selfobj):
        
self.get_game_objects().append(obj)

    
def get_game_location(self):
        return 
self.__game_location

    def get_game_objects
(self):
        return 
self.__game_objects

    def get_location_id
(self):
        return 
self.__game_location.id

    def get_all_objects_by_types
(selfobject_types):
        
objects = []
        for 
game_object in self.get_game_objects():
            
item self.__item_reader.get(game_object.item)
            if 
game_object.type in object_types or item.type in object_types:
                
objects.append(game_object)
        return 
objects

    def get_all_objects_by_type
(selfobject_type):
        return 
self.get_all_objects_by_types([object_type])

    
def get_object_by_id(selfobj_id):
        for 
game_object in self.get_game_objects():
            if 
game_object.id == obj_id:
                return 
game_object
        
return None

    def log_game_objects
(self):
        for 
gameObject in self.get_game_objects():
            
# if gameObject.type != 'base':
                
logger.info(obj2dict(gameObject))

    
def remove_object_by_id(selfobj_id):
        for 
game_object in list(self.get_game_objects()):
            if 
game_object.id == obj_id:
                
self.get_game_objects().remove(game_object)

    
def get_pickups(self):
        return 
tuple(self.__pickups)

    
def add_pickups(selfpickups):
        
self.__pickups += pickups

    def remove_pickup
(selfpickup):
        
self.__pickups.remove(pickup)


class 
GameTimer(object):

    
def __init__(self):
        
self._client_time 0
        self
._start_time 0

    def _get_client_time
(self):
        
random.seed()
        
self._client_time long(random.randrange(28004000))
        
self._start_time time.time()
        return 
self._client_time

    def _get_current_client_time
(self):
        
'''
        returns the current in-game time (in milliseconds)
        '''
        
currentTime self._client_time
        currentTime 
+= (time.time() - self._start_time) * 1000
        
return currentTime

    def _add_sending_time
(selfsending_time):
        
self._client_time += sending_time

    def has_elapsed
(selftime):
        
#return int(time) <= self._get_current_client_time()
        
return int(time)+3000 <= self._get_current_client_time()


class 
GameEventsSender(object):
    
def __init__(selfrequest_sender):
        
self.__events_to_handle = []
        
self.__request_sender request_sender

    def print_game_events
(self):
        if 
len(self.__events_to_handle) > 0:
            
logger.debug("received events: %s" self.__events_to_handle)

    
def get_game_events(self):
        return list(
self.__events_to_handle)

    
def send_game_events(selfevents=[]):
        
'''
        Returns key (string) and time (int)
        '''
        
if len(events) > 0:
            
logger.debug("events to send: %s" events)
        
command GameEVT(events=events)
        
game_response self.__request_sender.send(command)
        
self.__events_to_handle += game_response.events

    def remove_game_event
(selfevent):
        
self.__events_to_handle.remove(event)


class 
GameInitializer():
    
def __init__(selftimersiteselected_site):
        
self.__timer timer
        self
.__site site
        self
.__selected_site selected_site

    def create_events_sender
(self):
        return 
GameEventsSender(self.__request_sender)

    
def start(self):
        
logger.info(u'Подключаемся к игре...')
        
# send TIME request (http://java.shadowlands.ru/zombievk/go)
        # handle redirect (save new url: http://95.163.80.20/zombievk)
        # parse auth key and time id
        
session_keyserver_time self.get_time()

        
# send START
        
start_responsefriendsid self.start_game(server_timesession_key)
        
logger.info(u'Игра подключена!')
        
# id друзей в файл
        # try:
            # os.remove('friends_id.txt')
        # except:
            # pass  
        # with open('friends_id.txt', 'a') as f:
            # friends = ''
            # for fr_id in friendsid:
                # friends += str(fr_id) + '\n'
            # f.write(friends)
        
return start_responsefriendsidserver_time

    def get_time
(self):
        
'''
        Returns key (string) and time (int)
        '''
        
self.__request_sender self.__create_request_sender()
        
key self.__site.get_time_key()
        
command GameTIME(key=key)
        
response self.__request_sender.send(command)
        return 
response.keyresponse.time

    def __create_request_sender
(self):
        
api_user_idgame_auth_keyapi_access_tokenconnection self.__site.get_game_params()
        global 
my_id
        my_id 
api_user_id
        
#global api_session_key
        #api_session_key = api_access_token['session_key']
        
self.__api_access_token api_access_token
        self
.__connection connection
        self
.__session Session(api_user_idgame_auth_key,
                                 
client_version=Game.CLIENT_VERSION)
        
factory message_factory.Factory(self.__sessionself.__selected_siteNone)
        
request_sender RequestSender(factory,
                                       
self.__connection)
        
self.__factory factory
        
return request_sender

    def start_game
(selfserver_timesession_key):
        
self.__factory.setRequestId(server_time)
        
self.__factory.setSessionKey(session_key)
        
client_time self.__timer._get_client_time()
        
start_time time.time()
        
#print client_time, start_time
        
commandfriendsid self.__site.create_start_command(server_timeclient_time)
        
sending_time = (time.time() - start_time) * 1000
        self
.__timer._add_sending_time(sending_time)
        return 
self.__request_sender.send(command),friendsid

    def _getUserInfo
(self):
        
'''
        returns user info using vk api
        '''
        
# get vk user info
        
api vkontakte.api.API(token=self.__api_access_token)
        
info api.getProfiles(
            
uids=self.__session.getUserId(), format='json',
            
fields='bdate,sex,first_name,last_name,city,country')
        
info info[0]
        if 
'bdate' in info:
            
bdate info['bdate']
        else:
            
bdate None
        my_country 
api.places.getCountryById(cids=int(info['country']))[0]
        
info['country'] = my_country['name']
        
my_city api.places.getCityById(cids=int(info['city']))[0]
        
info['city'] = my_city['name']
        
game_info GameInfo(city=info['city'], first_name=info['first_name'],
                 
last_name=info['last_name'],
                 
uid=long(info['uid']), country=info['country'],
                 
sex=long(info['sex']), bdate=bdate)
        return 
game_info


class GameState(BaseActor):

    
def __init__(selfstart_responseitem_readersettingscuruserfriendstimer):
        
self.__curuser curuser
        self
.__friends friends
        self
.__timer timer
        self
.__settings settings
        self
.__item_reader item_reader
        self
.__game_state start_response.state
        game_state_event 
start_response.params.event
        self
.set_game_loc(game_state_event)
        
#self.__player_brains = PlayerBrains(self.__game_state,self.get_game_loc(),item_reader)
        #total_brain_count = self.__player_brains.get_total_brains_count()
        #occupied_brain_count = self.__player_brains.get_occupied_brains_count()

        
playerBrains PlayerBrains(self.__game_state,self.get_game_loc(),item_reader,self.__timer)
        
total_brain_count playerBrains.get_total_brains_count()
        
occupied_brain_count playerBrains.get_occupied_brains_count()        
        
###############
        
"""
        if not hasattr(self.__game_state,'rectsObjects'):self.__game_state.rectsObjects=[]
        vip = ["
@PIRATE_BOX","@PIRATE_BOX_2"]
        need_group = ['compositions','seed']
        compositions = GameItemReader()
        need_catalog = []
        for v in vip:
            if v not in need_catalog:need_catalog.append(v)
        for group in need_group:
            for item_ in self.__item_reader.get(group).items:
                if not item_ in need_catalog:need_catalog.append(item_)
        for item in need_catalog:
            read_item = self.__item_reader.get(item)
            if not hasattr(read_item,'objAnim'):continue
            for obj in read_item.objAnim:
                rectss = compositions.readComposit(obj,'compositions')
                objects = dict2obj({"
objAnim":str(obj),"rects":rectss})
                self.__game_state.rectsObjects.append(objects)
        """
        
        
if not hasattr(self.__game_state,'rectsObjects'):self.__game_state.rectsObjects=[]
        
compositions GameCompositionReader(self.__settings)
        
objAnims compositions.readCompositnew()
        for 
anims in objAnims:
            
rectss compositions.readComposit(anims,'compositions')
            
objects dict2obj({"objAnim":str(anims),"rects":rectss})
            
self.__game_state.rectsObjects.append(objects)
        
################
        
        #open('gameSTATE.txt', 'w').write(str(obj2dict(self.__game_state)))
        
cou 0
        
for fgift in self.__game_state.freeGiftUsers:
            if 
fgift.blockedUntil 0cou+=1

        x1 
0
        z 
0
        
for burySlot in self.__game_state.burySlots:
            
x1 += 1
            
if (hasattr(burySlotu"user"is True): z+=1

        Money 
''
        
for i in range(len(str(self.__game_state.gameMoney)),0,-3):
          if 
>= 3Money str(self.__game_state.gameMoney)[i-3:i]+'.'+Money
          
else: Money str(self.__game_state.gameMoney)[:i]+'.'+Money
        
        
if hasattr(self.__game_state"cashMoney"):
            
zb self.__game_state.cashMoney
        
        dub 
0
        
for st in self.__game_state.storageItems:
            if 
hasattr(st"item") and st.item == '@DUBLON':
                
dub st.count
                
break
        
        
"""
        logger.info(u"
Друзья: %d/%d" % (cou,self.__friends))
        #logger.info("")
        logger.info(u"
Использование слотов для закопки друзей: %d/%d" % (z,x1))
        
        logger.info(u"
Мозги: %d/%d" % (occupied_brain_count, total_brain_count))
        if len(self.__game_state.buyedBrains) <> 0:
            logger.info(u"
Купленные:")
            x = 1
            for buyed_brain in self.__game_state.buyedBrains:
                ms = int(buyed_brain.endTime)-((int(buyed_brain.endTime)/1000)*1000)
                s = (int(buyed_brain.endTime)/1000)-(((int(buyed_brain.endTime)/1000)/60)*60)
                m = ((int(buyed_brain.endTime)/1000)/60)-((((int(buyed_brain.endTime)/1000)/60)/60)*60)
                h = ((int(buyed_brain.endTime)/1000)/60)/60
                logger.info(u"
%dВремя окончания: %d:%d:%d.%d"%(x,h,m,s,ms))
                x += 1
        logger.info("")
        
        logger.info(u"
Игрок"+str(settings._currentUser))
        logger.info(u"
Уровень игрока"+str(self.__game_state.level))
        logger.info(u"
Деньги игрока"+Money[:-1])
        logger.info(u"
Зомбаксов: %d" % (zb))
        logger.info(u"
Дублонов: %d" % (dub))
        logger.info("")
        """

        
print u'Друзья: %d/%d' % (cou,self.__friends)
        print
        
# на принте
        
self.cprint (u"1Слоты для закопки друзей: ^14_%d/%d" % (z,x1))
        
self.cprint (u"1Мозги: ^14_%d/%d" % (occupied_brain_counttotal_brain_count))
        
        if 
len(self.__game_state.buyedBrains) <> 0:
            print 
u"Купленные:"
            
1
            
for buyed_brain in self.__game_state.buyedBrains:
                
ms int(buyed_brain.endTime)-((int(buyed_brain.endTime)/1000)*1000)
                
= (int(buyed_brain.endTime)/1000)-(((int(buyed_brain.endTime)/1000)/60)*60)
                
= ((int(buyed_brain.endTime)/1000)/60)-((((int(buyed_brain.endTime)/1000)/60)/60)*60)
                
= ((int(buyed_brain.endTime)/1000)/60)/60
                
print u"%d. Время окончания: %d:%d:%d.%d"%(x,h,m,s,ms)
                
+= 1
        
print
        
        
self.cprint (u"1Игрок: ^13_%s" % (settings._currentUser))
        
self.cprint (u"1Уровень игрока: ^12_%s" % (self.__game_state.level))
        
self.cprint (u"1Деньги игрока:  ^14_%s  ^1монет" % (Money[:-1]))
        
self.cprint (u"1Зомбаксов:      ^14_%d" % (zb))
        
self.cprint (u"1Дублонов:       ^14_%d" % (dub))
        print

        
os.system((u'title '+u"Акк: "+self.__curuser+u"   Lev: "+str(self.__game_state.level)+u'  Мозгов: ' str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x1) + u'  ЗБ: '+str(zb) + u' Монет: '+str(Money[:-1])).encode('cp1251''ignore'))
        
#os.system((u'title '+u"Акк: "+self.__curuser+u" Lev: "+str(self.__game_state.level)+u'  Мозгов: ' + str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x1)+u' Друзья: '+str(cou)+"/"+str(self.__friends) + '\n' + u'ЗБ: '+str(self.__game_state.cashMoney) + u' Монет: '+str(Money[:-1])).encode('cp1251', 'ignore'))
        #os.system((u'title '+u"Акк: "+self.__curuser+u" Уровень: "+str(self.__game_state.level)+u'  Мозгов: ' + str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x1)+u' Друзья: '+str(len(self.__game_state.freeGiftUsers))+"/"+str(self.__friends)+":"+str(cou)).encode('cp1251', 'ignore'))
        #os.system((u'title '+self.__curuser+u' Мозгов: ' + str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x1)+u' Друзья: '+str(len(self.__game_state.freeGiftUsers))+"/"+str(self.__friends)+":"+str(cou)).encode('cp1251', 'ignore'))
        
    
def get_free_spases(self):
        return 
FreeSpace(self.__item_reader,self.__game_state,self.get_game_loc())

    
def set_game_loc(selfgame_state_event):
        
self.set_game_loc_was True
        self
.__game_loc GameLocation(self.__item_reader,
                                       
game_state_event.location,game_state_event.gameObjects)
        for 
attrval in game_state_event.__dict__.iteritems():
            
self.__game_state.__setattr__(attrval)
        
#self.get_game_loc().log_game_objects()

    
def get_location_id(self):
        return 
self.get_state().locationId

    def get_game_loc
(self):
        return 
self.__game_loc

    def get_state
(self):
        return 
self.__game_state
        
    def get_settings
(self):
        return 
self.__settings
        
    def get_brains
(self):
        
#return self.__player_brains
        
return PlayerBrains(self.__game_state,self.get_game_loc(),self.__item_reader,self.__timer)

    
def has_in_storage(selfitem_idcount):
        for 
itemid in self.__game_state.storageItems:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    return 
itemid.count >= count
        
return False

    def count_in_storage
(selfitem_id):
        for 
itemid in self.__game_state.storageItems:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    return 
itemid.count
        
return 0

    def remove_from_storage
(selfitem_idcount):
        for 
itemid in self.__game_state.storageItems:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    
itemid.count -= count
                    
return True
        
return False

    def add_from_storage
(selfitem_idcount):
        for 
itemid in self.__game_state.storageItems:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    
itemid.count += count
                    
return
        
# for itemid in self.__game_state.storageGameObjects:
            # if hasattr(itemid, "item"): 
                # if itemid.item == item_id:
                    # itemid.count += count
                    # return
        
self.set_from_storage(item_idcount)

    
def count_in_pirate_instruments(selfitem_id):
        
item_id item_id.lstrip('@')
        
item_id '@'+item_id
        
for itemid in self.__game_state.pirate.instruments:
            if 
itemid.item == item_id:return itemid.count
        
return 0

    def remove_from_pirate_instruments
(selfitem_idcount):
        
item_id item_id.lstrip('@')
        
item_id '@'+item_id
        
for itemid in self.__game_state.pirate.instruments:
            if 
hasattr(itemid"item"):
                if 
itemid.item != item_id:continue
                
itemid.count -= count
                
return True
        
return False

    def add_pirate_instruments
(selfitem_idcount):
        
item_id item_id.lstrip('@')
        
item_id '@'+item_id
        
for itemid in self.__game_state.pirate.instruments:
            if 
hasattr(itemid"item"): 
                if 
itemid.item == item_id:
                    
itemid.count += count
                    
return
        
self.set_pirate_instruments(item_idcount)

    
def set_pirate_instruments(selfitem_idcount):
        
itemid=dict2obj({u'item'item_idu'count'count})
        
self.__game_state.pirate.instruments.append(itemid)

    
def set_from_storage(selfitem_idcount):
        
itemid=dict2obj({u'item'item_idu'count'count})
        
self.__game_state.storageItems.append(itemid)
        
#self.__game_state.storageGameObjects.append(itemid)

    
def count_in_storageObjects(selfitem_id):
        for 
itemid in self.__game_state.storageGameObjects:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    return 
itemid.count
        
return 0

    def remove_from_storageObjects
(selfitem_idcount):
        
item_id item_id.lstrip('@')
        
item_id='@'+item_id
        
for itemid in self.__game_state.storageGameObjects:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    
itemid.count -= count
                    
return True
        
return False

    def add_from_storageObjects
(selfitem_idcount):
        
item_id item_id.lstrip('@')
        
item_id='@'+item_id
        
for itemid in self.__game_state.storageGameObjects:
            if 
hasattr(itemid"item"):
                if 
itemid.item == item_id:
                    
itemid.count += count
                    
return
        
self.set_from_storageObjects(item_idcount)

    
def set_from_storageObjects(selfitem_idcount):
        
itemid=dict2obj({u'item'item_idu'count'count})
        
self.__game_state.storageGameObjects.append(itemid)


class 
Game(BaseActor):

    
#CLIENT_VERSION = long(1362084734)
    #CLIENT_VERSION = long(1378103895)
    #CLIENT_VERSION = long(1382714383)
    #CLIENT_VERSION = long(1406282412)
    
CLIENT_VERSION long(1414512369)
    

    
def __init__(selfsitesettings,
                 
user_promptgame_item_reader=Nonegui_input=None):
        
logger.info('Логинимся...')

        
self.__selected_site settings.getSite()
        
self.__timer GameTimer()
        
self.__game_initializer GameInitializer(self.__timersiteself.__selected_site)
        
self.__settings settings

        self
.__itemReader game_item_reader
        self
.__user_prompt user_prompt
        self
.__selected_seed None
        self
.__selected_recipe None
        self
.__selected_location None
        self
.__receive_gifts_with_messages False
        self
.__receive_non_free_gifts False
        self
.__gui_input gui_input
        
        
# load settings
        
self.__ignore_errors settings.get_ignore_errors()
        
self.__selected_recipe settings.getUserCook()
        
self.__selected_seed settings.getUserSeed()
        
self.__selected_sell settings.getUserSell()
        
self.__selected_send settings.getUserSend()
        
self.__setting_view settings.GetUserView()
        
self.__selected_loc_setting settings.getUserLoc()
        
self.__selected_dig_friends settings.getUserDig()
        
self.__selected_PremiumGifts settings.getUserPremiumGifts()
        
self.__selected_curuser settings.getCurUser()

        
        print
        if 
self.__selected_seed <> None:
            if  (
self.__selected_seed == 'None'): print u'Выбранные семена: ничего не сажать'
            
else:
                if 
type(self.__selected_seed) == type(''): print u'Выбранные семена: везде "%s"'%str(self.__selected_seed)
                else:
                    print 
u'Выбранные семена (остров - семена):'
                    
for loc in self.__selected_seed.keys():
                        if 
len(loc) > 8:
                            print 
u'\t%s\t-\t"%s"'%(str(loc),str(self.__selected_seed[loc]))
                        else: print 
u'\t%s\t\t-\t"%s"'%(str(loc),str(self.__selected_seed[loc]))
        print 
''
        
if self.__selected_recipe <> None:
            if  (
self.__selected_recipe == 'None'): print u'Выбранные рецепты: ничего не варить'
            
else:
                if 
type(self.__selected_recipe) == type(''): print u'Выбранные рецепты: везде "%s"'%str(self.__selected_recipe)
                
elif type(self.__selected_recipe) == type([]): print u'Выбранные рецепты: везде "%s"'%str(', '.join(self.__selected_recipe))
                else:
                    print 
u'Выбранные семена (остров - рецепт):'
                    
for loc in self.__selected_recipe.keys():
                        if 
len(loc) > 6: print u'\t%s\t-\t"%s"'%(str(loc),str(self.__selected_recipe[loc]))
                        else: print 
u'\t%s\t\t-\t"%s"'%(str(loc),str(self.__selected_recipe[loc]))
        if  (
self.__selected_sell==None): print u'Предметы на продажу: ничего не продавать'
        
else:
            print 
u'Предметы на продажу (предмет - сколько оставить):'
            
for item in self.__selected_sell.keys():
                print 
u'\t"%s"\t\t-\t%s'%(str(item),str(self.__selected_sell[item]))
        print 
''
        
print u'Настройки показа:'
        
if  (self.__setting_view['pickup']): print u'\tПоказывать подбираемые предметы'
        
else:  print u'\tНе показывать подбираемые предметы'
        
if  (self.__setting_view['location_send']): print u'\tПоказывать перешедшую локацию'
        
else:  print u'\tНе показывать перешедшую локацию'
        
print ''

    
def select_item(selfreader_classprompt_string):
        
item_reader reader_class(self.__itemReader)
        
available_items item_reader.get_avail_names(self.__game_state_)
        
item_name self.__user_prompt.prompt_user(prompt_string,
                                                   
available_items)
        return 
item_reader.get_by_name(item_name)

    
def select_plant_seed(self):
        if 
self.__selected_seed is None:
            
self.__selected_seed self.select_item(GameSeedReader,
                                                    
u'Семена для грядок:')

    
def select_recipe(self):
        if 
self.__selected_recipe is None:
            
self.__selected_recipe self.select_item(RecipeReader,
                                                      
u'Рецепт для поваров:')

    
def select_location(self):
        print 
u'Доступные острова:'
        
print u'(+ платный, - бесплатный, ? - пещера)'
        
locations_nfree = [u'isle_01''isle_small''isle_star''isle_large''isle_moon''isle_giant''isle_xxl''isle_desert']
        
locations_nwalk = [u'un_0'+str(x+1) for x in range(9)]

        
locations = {}
        for 
location in self.get_game_state().locationInfos:
            
name self.__itemReader.get(location.locationId).name
            loc_log 
location.locationId.ljust(18' ')
            if (
location.locationId not in locations_nfree) and (location.locationId not in locations_nwalk):
                
locations[name] = location
                
print u'\t-\t'+loc_log+name
                
#print u'\t-\t'+location.locationId+'\t'+name
            
else:
                if (
location.locationId not in locations_nfree):
                    print 
u'\t?\t'+loc_log+name
                
else:
                    print 
u'\t+\t'+loc_log+name
        
if locations:
            print 
u'Находимся на острове:'
            
self.cprint (u'5        *       %s' % (self.__itemReader.get(self.get_game_loc().get_location_id()).name))
            print
            
#location_name = self.__user_prompt.prompt_user(u'Выберите остров:',locations.keys())
            
location_name locations.keys()[0]
            if 
location_name in locations:
                
self.__selected_location  locations[location_name].locationId
            
else:
                
self.__selected_location  self.get_game_loc().get_location_id()

    
def select_location_logger(self): # logger
        
logger.info(u'Доступные острова:')
        
logger.info(u'(+ платный, - бесплатный, ? - пещера)')
        
locations_nfree = [u'isle_01''isle_small''isle_star''isle_large''isle_moon''isle_giant''isle_xxl''isle_desert']
        
locations_nwalk = [u'un_0'+str(x+1) for x in range(9)]

        
locations = {}
        for 
location in self.get_game_state().locationInfos:
            
name self.__itemReader.get(location.locationId).name
            loc_log 
location.locationId.ljust(18' ')
            if (
location.locationId not in locations_nfree) and (location.locationId not in locations_nwalk):
                
locations[name] = location
                logger
.info('\t-\t'+loc_log+name)
                
#logger.info('\t-\t'+location.locationId+'\t'+name)
            
else:
                if (
location.locationId not in locations_nfree):
                    
logger.info('\t?\t'+loc_log+name)
                else:
                    
logger.info('\t+\t'+loc_log+name)
        if 
locations:
            
logger.info(u'Находимся на острове:')
            
logger.info(u'   *       '+self.__itemReader.get(self.get_game_loc().get_location_id()).name)
            
logger.info("")
            
#location_name = self.__user_prompt.prompt_user(u'Выберите остров:',locations.keys())
            
location_name locations.keys()[0]
            if 
location_name in locations:
                
self.__selected_location  locations[location_name].locationId
            
else:
                
self.__selected_location  self.get_game_loc().get_location_id()

    
def get_user_setting(selfsetting_id):
        return 
self.__settings.get

    def running
(self):
        if 
self.__gui_input:
            
running self.__gui_input.running
        
else:
            
running lambdaTrue
        
return running()

    
def start(self):

        
SetConsoleTextAttribute(stdout_handle0x0001 0x0070)
        
game_state self.get_game_state 
        
while(self.running()):
            try:
                
# load items dictionary
                
if self.__itemReader is None:
                    print 
u'Загружаем словарь объектов...  ',
                    
item_reader GameItemReader(self.__settings)
                    
item_reader.download('items.txt')
                    
item_reader.read('items.txt')
                    
self.__itemReader item_reader
                    
print u'Словарь объектов загружен'
                    
########
                    #compositions = GameItemReader()
                    
compositions GameCompositionReader(self.__settings)
                    print 
u'Загружаю размеры обьектов...'
                    
compositions.loadComposit('compositions')
                    
########
                
start_response,self.__friendsid,self.__server_time self.__game_initializer.start()
                
# Save Game_state
                #open("game_state.txt","w").write(str(obj2dict(start_response)))
                
                
self.__game_events_sender self.__game_initializer.create_events_sender()

                
self.save_game_state(start_response)
                
                
# GetMissionsBot(self.__itemReader, self.__game_state_, self.__game_events_sender, self._get_timer(),{}).perform_action()
                
                
self.select_location()

                
self.select_plant_seed()
                
                
self.select_recipe()
                
                
self.create_all_actors()

                
# TODO send getMissions
                # TODO handle getMissions response
                
                
self.load_friends_names()
                
# self.load_friends_active_game()                
                #self.load_info_users()
                
                
self.eventLoop()
            
except urllib2.HTTPErrore:
                
raise e
            except 
(socket.timeouturllib2.HTTPErrorurllib2.URLError):
                
seconds 3
                logger
.error('Timeout occurred, retrying in %s seconds...'
                             
seconds)
                
time.sleep(seconds)
            
except (socket.errorssl.SSLError) as e:
                
seconds 1
                logger
.error('Socket error occurred, retrying in %s seconds...'
                             
seconds)
                
time.sleep(seconds)
            
except message_factory.GameErrore:
                
time.sleep(1)
                if 
not self.__ignore_errors# 0
                    
raise e

    def save_game_state
(selfstart_response):
        
# parse game state
        
self.__game_state_ GameState(start_responseself.__itemReaderself.__settingsself.__selected_curuserlen(self.__friendsid), self.__timer)

    
def get_game_loc(self):
        return 
self.__game_state_.get_game_loc()

    
def get_game_state(self):
        return 
self.__game_state_.get_state()

    
def load_friends_names(self):        
        try:
            
with open('friends_names.txt''r') as f:
                
self.__game_state_.friends_names = eval(f.read())
        
except:
            
self.__game_state_.friends_names = {}

    
# def load_friends_active_game(self):
        # try:
            # with open('friends_active_game.txt', 'r') as f:
                # self.__game_state_.friends_active_game = eval(f.read())
        # except:
            # self.__game_state_.friends_active_game = {}
        # for friends_id in self.__friendsid:
            # self.__game_state_.friends_active_game.setdefault(friends_id, ['0', '0'])
        # with open('friends_active_game.txt', 'w') as f:
            # f.write(str(self.__game_state_.friends_active_game))

    
def load_info_users(self):
        
friends_copy self.__friendsid[:]
        
players = []
        print 
u'Загружаем информацию о друзьях',
        while 
len(friends_copy):
            
players.append(friends_copy.pop())
            if 
len(players) == 100:
                
events = {"type":"players","id":3,"action":"getInfo","players":players}
                
self.__game_events_sender.send_game_events([events])
                print 
u'\b.',
                
self.handle_all_events()
                
players = []
        if 
players:
            
events = {"type":"players","id":3,"action":"getInfo","players":players}
            
self.__game_events_sender.send_game_events([events])
            print 
u'\b.',
            
self.handle_all_events()    
        print 
u'\b.'
        
#self.wait(2)
        #time.sleep(2)

    
def wait(selfpause):
        print 
u'Загружаем информацию о друзьях',
        while 
pause 0:
            print 
u'\b.',
            
time.sleep(0.2)
            
pause -= 0.2
        
print u'\b.'

    
def eventLoop(self):
        
'''
        in a loop, every 30 seconds
        send EVT request
        handle EVT response
        '''
        
interval 5
        refresh_min 
7
        seconds 
interval
        ref_min 
= []
        while(
self.running()):
            if 
seconds >= interval:
                
self.perform_all_actions()
                
#logger.info('Ждем %d секунд'%interval)
                
seconds 0
            time
.sleep(0.1)
            
seconds += 0.1
            
            cur_time 
self.__timer._get_current_client_time()
            
min int(int(cur_time/1000)/60)
            if 
min not in ref_min:
                if (
refresh_min-min) == 1logger.info(u'Перезагрузка через %s минуту'%str(refresh_min-min))
                
elif ((refresh_min-min) >= 2) and ((refresh_min-min) <= 4): logger.info(u'Перезагрузка через %s минуты'%str(refresh_min-min))
                else: 
logger.info(u'Перезагрузка через %s минут'%str(refresh_min-min))
                
ref_min += [min]
            if 
min >= refresh_min:
                
ref_min = []
                
#exit(0)
                
break

    
def create_all_actors(self):
        
receive_options = {'with_messages'self.__receive_gifts_with_messages,
                           
'non_free'self.__receive_non_free_gifts}
        
options = {'GiftReceiverBot'receive_options,
                   
'SeederBot'self.__selected_seed,
                   
'CookerBot'self.__selected_recipe,
                   
'ChangeLocationBot'self.__selected_location,
                   
'VisitingUsers':[self.__friendsid,my_id],
                   
'SellBot':{'sell_item':self.__selected_sell,'send_user':self.__selected_send},
                   
'ChangeLocationBot':self.__selected_loc_setting,
                   
'DigBot':self.__selected_dig_friends,
                   
'StandartGifts':self.__friendsid,
                   
'PirateTreeCut':self.__selected_curuser,
                   
'PirateTreeCutBroot':self.__selected_curuser,
                   
'PremiumGifts':self.__selected_PremiumGifts,
                   
'ActiveUser':self.__friendsid
                  
}
        
events_sender self.__game_events_sender
        timer 
self._get_timer()
        
item_reader self.__itemReader
        game_state 
self.__game_state_
        actor_classes 
= [
            
#Work,                  # Опыты и тесты
            #SellBot,               # Продажа чего либо
            #ActiveUser,            # Лог активности юзеров
            #FinalReportUser,       # Полный отчёт о друзьях MR
            #FinalReportUserVK,     # Полный отчёт о друзьях VK
            #DigBot,                # Работа с мозгами
            #GameBuffFixHarvest,    # Применение суперурожая
            #GameBuffDigger,        # Активировать супер-поиск
            #GameBuffFixCook,       # Активировать повара-минутки
            #GameTravelBuff,        # Применение проездного
            #GetMissionsBot,        # Запрос выполнения миссий
            #VisitingUsers,         # Посещение друзей (выпилино. В отдельном боте.)
            #FreeGifts,             # Дарить бесплатки
            #StandartGifts,         # Дарить всем ПЛАТНЫЙ подарок с сообщением (не доработан ошибка 48 сообщений)
            #RouletteRoller,        # Кручение рулеток
            #BrainsExchange,        # Создание мозгов в останкино
            #TiketReceiverBot,      # Собираем билеты, обновляем самолет
            #BowReceiverBot,        # Собираем банты из циркового шатра
            #Barabashka,            # Собираем барабашек из дома приведений
            #HarvestExchange,       # Обмен роз на деньги
            #Emeraldic,             # Обмен в изумрудных постройках
            #BuildingBuyer,         # Покупать ракету
            #BuyShovel,             # Покупать золотые лопаты
            #ExchangeShovelsBamboo, # Менять бамбук на лопаты
            #ExchangeShovelsNail,   # Менять гвозди на лопаты
            #TomatoskullsExchange,  # Менять черепки в томате в корабле
            #InstantrertExchange,   # Менять красные удобрения             
            #MonsterPit,            # Работа с Моней            
            #WoodPicker,            # Сбор дерева
            #StonePicker,           # Сбор камня
            #BrewPicker,            # Сбор сваренного
            #BagsPicker,            # Сбор сумок
            #WoodTargetSelecter,    # Отправка работать дровосекам
            #StoneTargetSelecter,   # Отправка работать камнетёсов
            #TradeBot,              # Ставить обмен у торговцев
            #TradeSet,              # Супер торговец (админы добавили автобан!!!)
            #DeletingObjects,       # Удаление объектов
            #BoltGift,              # Передача другу Болтов по 1
            #CookerBot,             # Работа с поварами (подъем из могил, установка рецептов)
            #CookSpeed,             # Cолить рецепты
            #FertilPlantBot,        # Удобрение растений (красным)
            #FertilBot,             # Удобрение деревьев
            
HarvesterBot,          # Сбор чего либо + вскапывание грядок
            #TreePlant,             # Посадка деревьев            
            #CakesReceiverBot,      # Сбор пряников
            #SeederBot,             # Посейка
            #GiftReceiverBot,       # Принятие подарков
            #PremiumGifts,          # Принятие платных выставляемых подарков
            #UseEggItemBot,         # Бить ценности
            #ScrollBot,             # Бьём свитки
            
BoxPickuper,           # Вскрытие чего либо
            #PiratePut,             # Выставляем пиратское барахло
            
FrutRouletteRoller,    # Кручение фруктовых рулеток
            #RouletteTavernaDub,    # Кручение таверны за дублоны  HE ДОДЕЛАНО!
            #PirateTreeCut,         # Рубка на острове сокровищ
            #MagicWand,             # Добыча ресурсов палочками
            #Pickuper,              # Сбор дропа
            
ChangeLocationBot      # Переход по локациям
        
]
        
self.__actors = []
        for 
actor_class in actor_classes:
            
self.__actors.append(
                
actor_class(item_readergame_stateevents_sendertimerself,
                            
options))

    
def perform_all_actions(self):
        
game_state self.__game_state_
        
'''
        Assumes that create_all_actors is called before
        '''
        
self.title()
        
#all_time = []
        
for actor in self.__actors:
            
#time_one = time.time()
            
actor.perform_action()
            
#time_two = time.time()
            #logger.info(u'Класс %s' % (str(actor).split()[0].split('.')[-1]))
            #logger.info(u'Выполнялся %f' % (time_two-time_one))
            #all_time += [[str(actor).split()[0].split('.')[-1],(time_two-time_one)]]
            
self.handle_all_events()
        
#open('time.txt','a').write(str(all_time))
        
self.__game_events_sender.send_game_events()
        
self.handle_all_events()
        
#print "###################"
        
if hasattr(game_state,'getcoins') and game_state.getcoins 0:
            
logger.info(u'Подобрали %d монет' % (game_state.getcoins))
            
del game_state.getcoins
        
if hasattr(game_state,'getxp') and game_state.getxp 0:
            
logger.info(u'Подобрали %d опыта' % (game_state.getxp))
            
del game_state.getxp

    def handle_all_events
(self):
        
self.alerts = []
        
self.res_types = []
        
self.game_result = []
        
self.__game_events_sender.print_game_events()
        for 
event in self.__game_events_sender.get_game_events():
            
self.handleEvent(event)

    
def handleEvent(selfevent_to_handle):
        
# if event_to_handle.action != 'getInfo':
            # with open('events.txt', 'a') as f:
                # f.write(str(obj2dict(event_to_handle)).encode('utf-8')+"\n"+"\n")
        
self.res_types.append(event_to_handle.type)
        if 
event_to_handle.type == 'alert'# and not (event_to_handle.msg in self.alerts):
            
if not (event_to_handle.msg in self.alerts):
                
logger.info('Alert! '+event_to_handle.msg)
            
# коррекция удобренных деревьев
            
if event_to_handle.msg == 'SERVER_REMOTE_FERTILIZE_FRUIT_TREE_NOT_FOUND':
                
#print dir(self.__game_state_.get_state())
                
self.cprint(u'4Дерево нельзы полить, удаляем из списка')
                
nop self.__game_state_.get_state().remoteFertilizeFruitTree.pop()
            else:
                
self.alerts.append(event_to_handle.msg)
            
# print 'Alert! ', event_to_handle.msg, ' type = ', event_to_handle.type
            # if event_to_handle.msg == 'SERVER_NEW_YEAR_GIFT_NOT_ALLOW':
                # self.__game_state_.nyna = 1    
            # if event_to_handle.msg == 'SERVER_REMOTE_TREASURE_ALL_DIGGED':
                # self.__game_state_.alldigged = 1
            # if event_to_handle.msg == 'SERVER_REMOTE_FERTILIZE_FRUIT_TREE_NOT_FOUND':
                # self.__game_state_.get_state().haveRemoteFertilizeFruit = False
            
        
elif event_to_handle.action == 'getInfo'# and event_to_handle.type == 'playersInfo':
            
self.add_users_info(event_to_handle)
        
elif event_to_handle.type == 'monsterPitDigEvent':
            
name self.addName(event_to_handle)
            
sms u'Сосед ' name u' закопал нам медведя на ' unicode(event_to_handle.count) + u' м.'
            
logger.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.type == 'pirateShip':
            
name self.addName(event_to_handle)
            
sms u'Сосед ' name u' вошёл в команду корабля'
            
logger.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.action == u'pirateCheckin':
            
name self.addName(event_to_handle)
            
sms u'Сосед ' name u' застукал наш пиратский сундук'
            
logger.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.type == u'pirateDeath':
            
logger.info(u'Вышло время застуканного сундука. Мы больше не пираты')
            
self.__game_state_.get_state().pirate.state 'DEAD'
        
elif event_to_handle.action == u'readyToSail':
            
#{u'action': u'readyToSail', u'ship': u'@B_PIRATE_SCHOONER_2', u'captain': u'13559763416637162308', u'type': u'pirateSail'}
            
name self.addName(event_to_handle)
            
sms u'Сосед ' name u' отплыл на пиратский остров'
            
logger.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.action == 'exchange':
            
name self.addName(event_to_handle)
            
torg unicode(event_to_handle.objId)
            
sms u'Сосед ' name u' произвёл обмен у торговца ' torg
            logger
.info(u'%s' sms)
            
self.add_action_frends(sms)
        
elif event_to_handle.type == 'bridge':
            
logger.info(u'Туристы потеряли чемодан')
        
elif event_to_handle.action == 'addGift':
            
AddGiftEventHandler(self.get_game_state()).handle(event_to_handle)
        
elif event_to_handle.action[:4] == 'ping':
            if 
event_to_handle.action[:5] == 'ping2':
                
time.sleep(1)
            else: 
time.sleep(0.005)
            
self.__game_events_sender.send_game_events([])
            
pass
        elif event_to_handle
.type == 'exploration':
            if 
hasattr(event_to_handle'gameObjects'):
                for 
obj in list(event_to_handle.gameObjects):
                    
#print u'Добавим', obj.item.ljust(27, " "), ' id = ', obj.id
                    
self.get_game_loc().append_object(obj)
        
elif event_to_handle.type == 'pirateEnemy':
            if 
event_to_handle.action == 'alreadyHitted':
                
# {u'action': u'alreadyHitted', u'health': 2L, u'objId': -8328L, u'type': u'pirateEnemy'}
                
pass
        elif event_to_handle
.action == 'add':
            if 
event_to_handle.type == 'pickup':
                
AddPickupHandler(self.__itemReaderself.get_game_loc(),self.__game_state_,self.__setting_view).handle(event_to_handle)
        
elif event_to_handle.type == GameFertilizePlant.type:
            
PlantEventHandler(self.get_game_loc()).handle(event_to_handle)
        
#elif event_to_handle.type == GamePlayGame.type:
        
elif event_to_handle.type == 'dailyBonus' or event_to_handle.type == 'wizardNpcPlay' or event_to_handle.type == GamePlayGame.type:
            
self.game_result.append(event_to_handle.type)
            
GameResultHandler(self.__itemReader,self.get_game_loc(),self.__game_state_).handle(event_to_handle)
        
elif event_to_handle.type == GameStartGainMaterial.type:
            
GainMaterialEventHandler(self.__itemReaderself.get_game_loc(),
                                     
self.__timer).handle(event_to_handle)
        
elif event_to_handle.type == GameStartTimeGainEvent.type:
            
TimeGainEventHandler(self.__itemReaderself.get_game_loc(),
                                 
self.__timer).handle(event_to_handle)
        
elif event_to_handle.type == 'gameState':
            
#print 'gameState'
            #with open('events.txt', 'a') as f:
            #    f.write(str(obj2dict(event_to_handle)).encode('utf-8')+"\n"+"\n")
            
self.__game_state_.gameObjects event_to_handle.gameObjects #объекты
            
GameStateEventHandler(self.__game_state_self.__server_time,self.__setting_view).handle(event_to_handle)
        
elif event_to_handle.type == 'mission':
            
ViewMissions(self.__itemReaderself.__setting_view).handle(event_to_handle)
        
# elif event_to_handle.type == 'playersInfo': # информация о пользователе
            # self.__game_state_.playersInfo = event_to_handle.players
        
elif event_to_handle.action == 'buried' or event_to_handle.action == 'cook' or event_to_handle.type == 'newYearTree' or event_to_handle.action == 'changeObject' or event_to_handle.action == 'buyedBrains' or event_to_handle.action == 'releaseBrains' or event_to_handle.action == 'stopRequest':
            
pass
        
else:
            
self.logUnknownEvent(event_to_handle)
        
self.__game_events_sender.remove_game_event(event_to_handle)


    
def add_action_frends(selfsms):
        
with open('action_frends.txt''a') as f:
            
_time datetime.datetime.today().strftime("%Y.%m.%d %H:%M:%S")
            
sms _time u' ' sms u'\n'
            
f.write(sms.encode("utf-8"))
                
    
def add_users_info(selfevent_to_handle):
        
self.__game_state_.resp True
        
if not hasattr(self.__game_state_'playersInfo'):
            
self.__game_state_.playersInfo event_to_handle.players
        
else:
            for 
new_info in event_to_handle.players:
                for 
info in self.__game_state_.playersInfo:
                    if 
new_info.id == info.id:
                        
del info
                        
break
            
self.__game_state_.playersInfo.extend(event_to_handle.players)

        
data = {}
        for 
n in event_to_handle.players:
            
#if hasattr(self.__game_state_, 'friends_names') and self.__game_state_.friends_names.get(n.id): continue # если уже есть
            #print n
            #print 'n.id', n.id
            
if hasattr(n'name') and n.name:
                
name_ n.name
                
while '{' in name_ or '}' in name_ or '[' in name_ or ']' in name_ or '^' in name_:
                    for 
l in '{}[]^':
                        
name_ name_.replace(l'')
                if 
u'\u0456' in name_:
                    
name_ name_.replace(u'\u0456'u'i')
                
#print n.name.replace(u'\u0456', u'i').encode("cp866", "ignore")
                #print n.name.decode('unicode-escape').replace(u'\u0456', u'i')
            
else:
                
name_ u''
                
#name_ = u'Без имени'
            
data[n.id] = name_
        
if data:
            if 
hasattr(self.__game_state_'friends_names'):
                
self.__game_state_.friends_names.update(data)
            else:
                
self.__game_state_.friends_names data
            with open
('friends_names.txt''w') as f:
                
#f.write(str(self.__game_state_.friends_names))
                
text u"{"
                
for el in self.__game_state_.friends_names.keys():
                    if 
text != u"{"text += u", "
                    
text += u"u'" el u"': u'" self.__game_state_.friends_names[el] + u"'"
                
text += u"}"
                
f.write(text.encode("UTF-8""ignore"))

        if 
0#  списки ниже 20 уровня и забаненных
            
try:
                
with open('low_level.txt''r') as f:
                    
self.__game_state_.low_level = eval(f.read())
            
except:
                
self.__game_state_.low_level = []
            try:
                
with open('banned.txt''r') as f:
                    
self.__game_state_.banned = eval(f.read())
            
except:
                
self.__game_state_.banned = [] 
            
lovl = []
            
banned = []
            for 
n in event_to_handle.players:
                if 
hasattr(n'level') and int(n.level) < 20 and (n.id not in self.__game_state_.low_level): lovl.append(n.id)
                if 
hasattr(n'banned') and n.banned and (n.id not in self.__game_state_.banned): banned.append(n.id)
            if 
lovl:
                
self.__game_state_.low_level.extend(lovl)
                
with open('low_level.txt''w') as f:
                    
f.write(str(self.__game_state_.low_level))
            if 
banned:
                
self.__game_state_.banned.extend(banned)
                
with open('banned.txt''w') as f:
                    
f.write(str(self.__game_state_.banned))
        
        
# self.add_friends_active_game(event_to_handle)  # обновляем инфу о последнем посещении
        
    # def add_friends_active_game(self, event_to_handle):
        # data = [datetime.date.today().strftime("%Y.%m.%d"), datetime.date.today().strftime("%j")]
        # for n in event_to_handle.players:
            # if n.liteGameState.haveTreasure:
                # self.__game_state_.friends_active_game[n.id] = data
        # with open('friends_active_game.txt', 'w') as f:
            # f.write(str(self.__game_state_.friends_active_game))

    
def addName(selfevent_to_handle):
        if 
hasattr(event_to_handle'user'):
            
id event_to_handle.user
            
if hasattr(self.__game_state_'friends_names') and self.__game_state_.friends_names.get(id) and self.__game_state_.friends_names.get(id) != u'':
                
name u" '" self.__game_state_.friends_names.get(id) + u"'"
                
name name.replace(u'\u0456'u'i').encode("UTF-8""ignore")
                
name unicode(name"UTF-8")
                
#print name.replace(u'\u0456', u'i').encode("cp866", "ignore")
            
else: name u''
            
id_name unicode(id).ljust(20" ") + (name).ljust(16" ")
        else: 
id_name u' ' 35
        
return id_name

    def logUnknownEvent
(selfevent_to_handle):
        
logger logging.getLogger('unknownEventLogger')
        
#logger.info(pprint.pformat(obj2dict(event_to_handle)))
        
open('unknownEvent.txt','a').write(str(obj2dict(event_to_handle))+"\n")
        
open('unknownEvent.txt','a').write("-----------------------------------------------------------------------------------\n")

    
def _get_timer(self):
        return 
self.__timer

    def get_request_sender
(self):
        return 
self.__request_sender
        
    def cprint
(selfcstr):
        
clst cstr.split('^')
        
color 0x0001
    
        
for cstr in clst:
            
dglen re.search("\D"cstr).start()
            
color int(cstr[:dglen])
            
text cstr[dglen:]
            if 
text[:1] == "_"text text[1:]
            
SetConsoleTextAttribute(stdout_handlecolor 0x0070#78
            
print text,
        
#sys.stdout.flush()
        
print ""
        
SetConsoleTextAttribute(stdout_handle0x0001 0x0070)

    
def title(self):
        
playerBrains self.__game_state_.get_brains()
        
total_brain_count playerBrains.get_total_brains_count()
        
occupied_brain_count playerBrains.get_occupied_brains_count()
        
#total_brain_count = self.__game_state_.get_brains().get_total_brains_count()
        #occupied_brain_count = self.__game_state_.get_brains().get_occupied_brains_count()
        #print total_brain_count, occupied_brain_count

        
x1 0
        z 
0
        
#print dir(self.__game_state_)
        
for burySlot in self.__game_state_.get_state().burySlots#можно так self.get_game_state().burySlots
            
x1 += 1
            
if (hasattr(burySlotu"user"is True): += 1

        Money
=''
        
for i in range(len(str(self.__game_state_.get_state().gameMoney)),0,-3):
            if 
>= 3Money=str(self.__game_state_.get_state().gameMoney)[i-3:i]+'.'+Money
            
else: Money=str(self.__game_state_.get_state().gameMoney)[:i]+'.'+Money

        
if hasattr(self.__game_state_.get_state(), "cashMoney"):
            
zb self.__game_state_.get_state().cashMoney

        dub 
0
        
for st in self.__game_state_.get_state().storageItems:
            if 
hasattr(st"item") and st.item == '@DUBLON':
                
dub st.count
                
break
        
os.system((u'title '+self.__selected_curuser+u"  Lev:"+str(self.__game_state_.get_state().level)+u' Мозги:' str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты:'+str(z)+'/'+str(x1) + u'  ЗБ:'+str(zb) + u' Монет:'+str(Money[:-1]) + u' Дуб:'+str(dub)).encode('cp1251''ignore'))


class 
RequestSender(object):
    
def __init__(selfmessage_factoryconnection):
        
self.__factory message_factory
        self
.__connection connection

    def send
(selfdata):
        
data obj2dict(data)
        
assert 'type' in data
        request 
self.__factory.createRequest(data)
        return 
dict2obj(request.send(self.__connection))

    
def set_url(selfurl):
        
self.__connection.setUrl(url)

    
def clear_session(self):
        
self.__factory.setSessionKey(None)

    
def reset_request_id(self):
        
request_id message_factory._getInitialId()
        
self.__factory.setRequestId(request_id)

    
def set_auth_key(selfauth_key):
        
self.__factory.set_auth_key(auth_key
Хм, пока пытался рулетки починить, забыл включить удобрения, а не работает кручение и удобрения вместе
[Ссылки могут видеть только зарегистрированные пользователи. ]
ЗЫ: Рулетки на дремучем

как вариант попробуй отредактировать "ftut_ids = ['@S_52','@S_53'] " добавить еще или же
PHP код:
                    # не комментировать ,а то будет крутить до упора,лучше остаток больше поставить
                    #    рулетка   |сколько оставлять фруктов  |сколько оставлять рецептов
                    #'B_SLOT_APPLE':{'B_SLOT_B_ROULETTE1':31000,'B_SLOT_APPLE_ROULETTE2':100},#         Яблочный автомат
                    #'B_SLOT_CHERRY':{'B_SLOT_B_ROULETTE1':160000,'B_SLOT_CHERRY_ROULETTE2':12000},#       Вишнёвый автомат
                    #'B_SLOT_MANDARIN':{'B_SLOT_B_ROULETTE1':102000,'B_SLOT_MANDARIN_ROULETTE2':1130},#   Мандариновый автомат
                    #'B_SLOT_LEMON':{'B_SLOT_B_ROULETTE1':100000,'B_SLOT_LEMON_ROULETTE2':10000},#     Лимонный автомат
                    #'B_SOLDIER':{'B_SOLDIER_ROULETTE2':3000,'B_SOLDIER_ROULETTE':500},#           Адмирал 
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Программа] Zombot (Клиент для игры Зомби ферма) AnonProger Баги игр ВКонтакте 189 26.08.2014 15:50
[Статья] Небольшие секреты игры зомби ферма haussuper Баги игр ВКонтакте 11 26.01.2013 11:54
[Информация] Зомби Ферма dekirillov Баги игр ВКонтакте 40 22.10.2011 18:25

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 02:23.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net