Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от CheloveKkK
Добавлено через 29 минут
Подскажите пожалуйста где именно во friends.py прописывать id декора под которым копать
у меня к примеру декор под которым капать прописан вот в этой строке, в квадратных скобках вставляй нужный тебе декор
favdecors = ['DS_SYMBOL_E']
Цитата:
Сообщение от CheloveKkK
Добавлено через 29 минут
использует только 20 лопат на каждого соседа
по поводу количества лопат, в данной строке в своём боте поставь нужное тебе количество
if shovels == None: shovels = 300 #Количество лопат которое желаем истратить
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Доброго времени суток. Подскажите пожалуйста, где найти самую последнюю версию этого бота?
Добавлено через 5 часов 27 минут
Скачал вот этот архив ([Ссылки могут видеть только зарегистрированные пользователи. ]), установил с офф.сайта Питон 2.7.9, сразу же возникла проблема с установкой переменной PYTHONPATH - не смог найти нигде папку "src/lib", есть 2 разных, одна src, вторая lib. Дальше увидел в теме упоминание, что нужно скачать и распаковать файлы из "vkontakte.zip", взял его от предыдущей версии на том же сайте, методом поиска по теме воткнул файлы в папку lib питона. Основная проблема - при попытке по инструкции запустить бот, окно консоли появляется на полсекунды и закрывается сразу, без возможности даже увидеть что там пишется, файл логов так же не нашел.
Кто чем сможет помочь? Буду очень признателен хотя бы за толчки в нужную сторону рытья, связь предпочтительно через вк\скайп, личку чекаю пару раз в день тут.
Последний раз редактировалось Ori.Man.Aleks; 19.04.2015 в 20:16.
Причина: Добавлено сообщение
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от CheloveKkK
Огромное спасибо , выручил))
Разреши ещё 1 вопрос,там у меня во friends.py несколько строк для кодов декора,их бот находит по порядку?
Т.е. сначала проверяет есть ли декор из первой строки,если его не оказывается то переходит ко второй?
а вот этого не знаю, я сам полный нуб в этом боте, кое что понял а в остальное не лезу, лично я пользуюсь только одной строчкой, остальные заблочил у себя
надеюсь более опытные люди ответят тебе на этот вопрос
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']
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 до изучения более серьезных программ".
Буду очень благодарен за вашу информационную помощь, в идеале даже финансово.
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.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Увы, видимо не суждено в этом разобраться, ковырял-ковырял, ничего так и не смог наковырять, сказывается видимо отсутствие специфических понятий и знаний, если даже с нормальными продуктами разобраться не смог, + прошла информация что за использование такой автоматизации - бан.
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.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Такая ситуация, как сделать, что бы бот крутил только выбранные фруктовые рулетки (не рецепты), сразу на весь урожай который есть на складе.
Бот настроил на хождение на 3 острова (2 с деревьями(мандарины и вишня) и 1 с фруктовыми рулетками). Хотел, что бы бот удобрил деревья, собрал урожай и покрутил рулетки на весь урожай. Ходьбу по островам настроил, сбор и удобрение тоже, но с рулетками проблема. После первой попытки запуска выдало ошибку,ошибка была в закомменченой строке с подключение файла с фруктовыми рулетками. Исправил, после бот заработал, но фруктовые рулетки не крутит(включено было кручение фруктовых), после включил кручение всех рулеток, начало крутить только яблочные (не смотря на указанные материалы (вишня и мандарин) и то по 1 (за каждый переход на остров 1 кручение), а так же вместе с этим адмирала начало крутить.
Просидел 2 часа, перерыл старого бота добился лишь лишь кручение яблочной (несмотря на то что я указал вишню и мандарин), после даже этот вариант испортил.
Как решить пою проблему?
del
Последний раз редактировалось HotBlood; 29.04.2015 в 20:40.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от HotBlood
Такая ситуация, как сделать, что бы бот крутил только выбранные фруктовые рулетки (не рецепты), сразу на весь урожай который есть на складе.
Бот настроил на хождение на 3 острова (2 с деревьями(мандарины и вишня) и 1 с фруктовыми рулетками). Хотел, что бы бот удобрил деревья, собрал урожай и покрутил рулетки на весь урожай. Ходьбу по островам настроил, сбор и удобрение тоже, но с рулетками проблема. После первой попытки запуска выдало ошибку,ошибка была в закомменченой строке с подключение файла с фруктовыми рулетками. Исправил, после бот заработал, но фруктовые рулетки не крутит(включено было кручение фруктовых), после включил кручение всех рулеток, начало крутить только яблочные (не смотря на указанные материалы (вишня и мандарин) и то по 1 (за каждый переход на остров 1 кручение), а так же вместе с этим адмирала начало крутить.
Просидел 2 часа, перерыл старого бота добился лишь лишь кручение яблочной (несмотря на то что я указал вишню и мандарин), после даже этот вариант испортил.
Как решить пою проблему?
Файл рулеток:
PHP код:
# coding=utf-8
import logging
from game_state.game_types import GameBuilding, GamePlayGame, DailyBonus
from game_actors_and_handlers.base import BaseActor
from game_state.game_event import dict2obj, obj2dict
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.id, game_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
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("OMG! No such object. Handle")
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('Вы ничего не выиграли.')
# 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.x - building.x)**2+(enemy.y - building.y)**2)**0.5) < 15):
return True
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.id, game_id)
eventRoll.append(roll)
next_play_times[game_id] = 10000
if eventRoll: self._get_events_sender().send_game_events(eventRoll)
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
self.__collection = game_state.get_state().collectionItems.__dict__
def handle(self, event_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.count, u'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.item, game_prize.count)
else: self.__game_state_.add_from_storage(game_prize.item, game_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.item, game_prize.count)
else: self.__game_state_.add_from_storage(game_prize.item, game_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 GameBuilding, GamePlayGame, DailyBonus
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.id, game_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 None: get_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!=1 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.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
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])
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 GameItemReader, GameCompositionReader from game_state.game_event import dict2obj, obj2dict from game_state.game_types import GameEVT, GameTIME, GameSTART, GameInfo, GameFertilizePlant, GamePlayGame, GameStartGainMaterial, GameStartTimeGainEvent import pprint from game_actors_and_handlers.gifts import GiftReceiverBot, AddGiftEventHandler, CakesReceiverBot, FreeGifts, StandartGifts from game_actors_and_handlers.plants import HarvesterBot, SeederBot, PlantEventHandler, GameSeedReader, UseEggItemBot, FertilBot, FertilPlantBot, ScrollBot #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 RouletteRoller, GameResultHandler, RouletteTavernaDub from game_actors_and_handlers.roulettes import RouletteRoller, GameResultHandler, FrutRouletteRoller, RouletteTavernaDub from game_actors_and_handlers.wood_graves import WoodPicker, WoodTargetSelecter from game_actors_and_handlers.cook_graves import BrewPicker, CookerBot, RecipeReader, CookSpeed from game_actors_and_handlers.digger_graves import BagsPicker, TimeGainEventHandler from game_actors_and_handlers.stone_graves import StonePicker, StoneTargetSelecter from game_actors_and_handlers.workers import GainMaterialEventHandler from game_actors_and_handlers.pickups import Pickuper, AddPickupHandler,BoxPickuper from game_actors_and_handlers.location import ChangeLocationBot, GameStateEventHandler 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 GameBuffFixHarvest, GameBuffDigger, GameBuffFixCook, GameTravelBuff import socket import urllib2 from game_actors_and_handlers.burrowing import DigBot from game_actors_and_handlers.missions import GetMissionsBot, ViewMissions 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 TradeBot, TradeSet 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 TomatoskullsExchange, InstantrertExchange, ExchangeShovelsBamboo, ExchangeShovelsNail 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 ActiveUser, FinalReportUser, FinalReportUserVK #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__(self, item_reader, game_location, game_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.y) in maps] game_objects = objects self.__game_objects = game_objects self.__game_objects_dict = {obj.id:obj for obj in game_objects} self.__pickups = []
def get_all_objects_by_types(self, object_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_object_by_id(self, obj_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(self, obj_id): for game_object in list(self.get_game_objects()): if game_object.id == obj_id: self.get_game_objects().remove(game_object)
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_key, server_time = self.get_time()
# send START start_response, friendsid = self.start_game(server_time, session_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_response, friendsid, server_time
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 > 0: cou+=1
x1 = 0 z = 0 for burySlot in self.__game_state.burySlots: x1 += 1 if (hasattr(burySlot, u"user") is True): z+=1
Money = '' for i in range(len(str(self.__game_state.gameMoney)),0,-3): if i >= 3: Money = 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" % (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("")
if len(self.__game_state.buyedBrains) <> 0: print 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 print u"%d. Время окончания: %d:%d:%d.%d"%(x,h,m,s,ms) x += 1 print
def has_in_storage(self, item_id, count): 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(self, item_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(self, item_id, count): 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(self, item_id, count): 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_id, count)
def count_in_pirate_instruments(self, item_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(self, item_id, count): 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(self, item_id, count): 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_id, count)
def count_in_storageObjects(self, item_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(self, item_id, count): 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(self, item_id, count): 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_id, count)
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()
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) == 1: logger.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_reader, game_state, events_sender, timer, self, 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(self, event_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.__itemReader, self.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.__itemReader, self.get_game_loc(), self.__timer).handle(event_to_handle) elif event_to_handle.type == GameStartTimeGainEvent.type: TimeGainEventHandler(self.__itemReader, self.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.__itemReader, self.__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_users_info(self, event_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(self, event_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 cprint(self, cstr): 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_handle, color | 0x0070) #78 print text, #sys.stdout.flush() print "" SetConsoleTextAttribute(stdout_handle, 0x0001 | 0x0070)
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(burySlot, u"user") is True): z += 1
Money='' for i in range(len(str(self.__game_state_.get_state().gameMoney)),0,-3): if i >= 3: Money=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'))
def send(self, data): data = obj2dict(data) assert 'type' in data request = self.__factory.createRequest(data) return dict2obj(request.send(self.__connection))
Хм, пока пытался рулетки починить, забыл включить удобрения, а не работает кручение и удобрения вместе
[Ссылки могут видеть только зарегистрированные пользователи. ]
ЗЫ: Рулетки на дремучем
Последний раз редактировалось HotBlood; 28.04.2015 в 23:44.
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 GameItemReader, GameCompositionReader
from game_state.game_event import dict2obj, obj2dict
from game_state.game_types import GameEVT, GameTIME, GameSTART, GameInfo, GameFertilizePlant, GamePlayGame, GameStartGainMaterial, GameStartTimeGainEvent
import pprint
from game_actors_and_handlers.gifts import GiftReceiverBot, AddGiftEventHandler, CakesReceiverBot, FreeGifts, StandartGifts
from game_actors_and_handlers.plants import HarvesterBot, SeederBot, PlantEventHandler, GameSeedReader, UseEggItemBot, FertilBot, FertilPlantBot, ScrollBot
#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 RouletteRoller, GameResultHandler, RouletteTavernaDub
from game_actors_and_handlers.roulettes import RouletteRoller, GameResultHandler, FrutRouletteRoller, RouletteTavernaDub
from game_actors_and_handlers.wood_graves import WoodPicker, WoodTargetSelecter
from game_actors_and_handlers.cook_graves import BrewPicker, CookerBot, RecipeReader, CookSpeed
from game_actors_and_handlers.digger_graves import BagsPicker, TimeGainEventHandler
from game_actors_and_handlers.stone_graves import StonePicker, StoneTargetSelecter
from game_actors_and_handlers.workers import GainMaterialEventHandler
from game_actors_and_handlers.pickups import Pickuper, AddPickupHandler,BoxPickuper
from game_actors_and_handlers.location import ChangeLocationBot, GameStateEventHandler
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 GameBuffFixHarvest, GameBuffDigger, GameBuffFixCook, GameTravelBuff
import socket
import urllib2
from game_actors_and_handlers.burrowing import DigBot
from game_actors_and_handlers.missions import GetMissionsBot, ViewMissions
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 TradeBot, TradeSet
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 TomatoskullsExchange, InstantrertExchange, ExchangeShovelsBamboo, ExchangeShovelsNail
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 ActiveUser, FinalReportUser, FinalReportUserVK
#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__(self, item_reader, game_location, game_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.y) in maps]
game_objects = objects
self.__game_objects = game_objects
self.__game_objects_dict = {obj.id:obj for obj in game_objects}
self.__pickups = []
def get_all_objects_by_types(self, object_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_object_by_id(self, obj_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(self, obj_id):
for game_object in list(self.get_game_objects()):
if game_object.id == obj_id:
self.get_game_objects().remove(game_object)
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_key, server_time = self.get_time()
# send START
start_response, friendsid = self.start_game(server_time, session_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_response, friendsid, server_time
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 > 0: cou+=1
x1 = 0
z = 0
for burySlot in self.__game_state.burySlots:
x1 += 1
if (hasattr(burySlot, u"user") is True): z+=1
Money = ''
for i in range(len(str(self.__game_state.gameMoney)),0,-3):
if i >= 3: Money = 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" % (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("")
if len(self.__game_state.buyedBrains) <> 0:
print 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
print u"%d. Время окончания: %d:%d:%d.%d"%(x,h,m,s,ms)
x += 1
print
def has_in_storage(self, item_id, count):
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(self, item_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(self, item_id, count):
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(self, item_id, count):
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_id, count)
def count_in_pirate_instruments(self, item_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(self, item_id, count):
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(self, item_id, count):
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_id, count)
def count_in_storageObjects(self, item_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(self, item_id, count):
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(self, item_id, count):
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_id, count)
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()
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) == 1: logger.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_reader, game_state, events_sender, timer, self,
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(self, event_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.__itemReader, self.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.__itemReader, self.get_game_loc(),
self.__timer).handle(event_to_handle)
elif event_to_handle.type == GameStartTimeGainEvent.type:
TimeGainEventHandler(self.__itemReader, self.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.__itemReader, self.__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_users_info(self, event_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(self, event_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 cprint(self, cstr):
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_handle, color | 0x0070) #78
print text,
#sys.stdout.flush()
print ""
SetConsoleTextAttribute(stdout_handle, 0x0001 | 0x0070)
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(burySlot, u"user") is True): z += 1
Money=''
for i in range(len(str(self.__game_state_.get_state().gameMoney)),0,-3):
if i >= 3: Money=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'))
def send(self, data):
data = obj2dict(data)
assert 'type' in data
request = self.__factory.createRequest(data)
return dict2obj(request.send(self.__connection))
Хм, пока пытался рулетки починить, забыл включить удобрения, а не работает кручение и удобрения вместе
[Ссылки могут видеть только зарегистрированные пользователи. ]
ЗЫ: Рулетки на дремучем
как вариант попробуй отредактировать "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},# Адмирал