Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от eTorres
Обновление здесь
Зомби Фермер 2.3.2
[Ссылки могут видеть только зарегистрированные пользователи. ]
Помогите пожалуйста. Не закапывает соседей.
Включил модуль:
switch_local_brain_bot = 1 # Модуль закапывания соседей, работы с мозгами
Подскажите, может где ещё что-то надо прописывать? Спасибо.
И второе: как закапывать определенных соседей (своих твинков)?
P.S. Поделитесь пожалуйста каким-нибудь ботом, который бы мне помог закапывать твинков. Спасибо.
Последний раз редактировалось slavan86; 26.04.2016 в 23:56.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Что за ошибка. всё было хорошо и тут.
[2016-05-11 20:40:49,186] Загружаем соседей...
[2016-05-11 20:40:49,555] Получаем данные по 3509 соседям
[2016-05-11 20:41:08,894] Принимаем подарок Металл 1 шт от крошка 705
[2016-05-11 20:41:09,223] Traceback (most recent call last):
File "C:\Users\user\Desktop\zombie-farmer 2.3.2\client\game_client.py", line 7
6, in run
context.bot_manager.run()
File "C:\Users\user\Desktop\zombie-farmer 2.3.2\manager\core.py", line 31, in
run
circle_bot.perform_action()
File "C:\Users\user\Desktop\zombie-farmer 2.3.2\manager\local\plant.py", line
25, in perform_action
self._seed_harvest()
File "C:\Users\user\Desktop\zombie-farmer 2.3.2\manager\local\plant.py", line
185, in _seed_harvest
res = min(round(context.game_state.state.gameMoney / seed_item.buyCoins), le
n(grounds))
ZeroDivisionError: long division or modulo by zero
[2016-05-11 20:41:09,223] Переподключаемся...
[2016-05-11 20:41:09,223]
[2016-05-11 20:41:09,223] Получаем токен приложения...
[2016-05-11 20:41:10,094] Получаем информацию по аккаунту...
[2016-05-11 20:41:10,355] Создаем игровую сессию...
[2016-05-11 20:41:10,466] Загружаем статистику по ферме...
[2016-05-11 20:41:11,558] Получаем данные по 3509 соседям
Последний раз редактировалось electroslon11; 11.05.2016 в 21:44.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от electroslon11
Что за ошибка. всё было хорошо и тут.
[2016-05-11 20:40:49,186] Загружаем соседей...
[2016-05-11 20:40:49,555] Получаем данные по 3509 соседям
[2016-05-11 20:41:08,894] Принимаем подарок Металл 1 шт от крошка 705
[2016-05-11 20:41:09,223] Traceback (most recent call last):
File "C:\Users\user\Desktop\zombie-farmer 2.3.2\client\game_client.py", line 7
6, in run
context.bot_manager.run()
File "C:\Users\user\Desktop\zombie-farmer 2.3.2\manager\core.py", line 31, in
run
circle_bot.perform_action()
File "C:\Users\user\Desktop\zombie-farmer 2.3.2\manager\local\plant.py", line
25, in perform_action
self._seed_harvest()
File "C:\Users\user\Desktop\zombie-farmer 2.3.2\manager\local\plant.py", line
185, in _seed_harvest
res = min(round(context.game_state.state.gameMoney / seed_item.buyCoins), le
n(grounds))
ZeroDivisionError: long division or modulo by zero
[2016-05-11 20:41:09,223] Переподключаемся...
[2016-05-11 20:41:09,223]
[2016-05-11 20:41:09,223] Получаем токен приложения...
[2016-05-11 20:41:10,094] Получаем информацию по аккаунту...
[2016-05-11 20:41:10,355] Создаем игровую сессию...
[2016-05-11 20:41:10,466] Загружаем статистику по ферме...
[2016-05-11 20:41:11,558] Получаем данные по 3509 соседям
Ты делишь на 0!
Проверь название семян которые сажаешь. Цена покупки проблемной семечки в базе равна 0.
И вообще, есть же отдельная тема по этому боту, зачем здесь всех путать.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Даниил1234435
Под фейс ни чего нет ?
для твоего ..ээ точнее твоей версии бота нЭт) во всяком случе здесь, в той теме у автора пока нет времени допиливать его, он дал игрушку, допиливайте, за вас никто ничего делать не будет...вот как то так...спасибо за внимание и понимание)
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Кто подскажет? Есть замечательный модуль рулеток, ещё greyzza выкладывал, всё отлично, но dailyBonus вылетает в ошибку, всё думал потом потом, некритично,... вобщем потом пришёл, ошибку исправить не могу, вот модуль .....
Код:
# 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
logger = logging.getLogger(__name__)
class RouletteRoller(BaseActor):
def playCostGame(self,game,building_item):
rulettes = {
# не комментировать ,а то будет крутить до упора,лучше остаток больше поставить
# рулетка |сколько оставлять фруктов |сколько оставлять рецептов
'B_SLOT_APPLE':{'B_SLOT_B_ROULETTE1':5000,'B_SLOT_APPLE_ROULETTE2':100},# Яблочный автомат
'B_SLOT_CHERRY':{'B_SLOT_B_ROULETTE1':5000,'B_SLOT_CHERRY_ROULETTE2':100},# Вишнёвый автомат
'B_SLOT_MANDARIN':{'B_SLOT_B_ROULETTE1':5000,'B_SLOT_MANDARIN_ROULETTE2':100},# Мандариновый автомат
'B_SLOT_LEMON':{'B_SLOT_B_ROULETTE1':1000,'B_SLOT_LEMON_ROULETTE2':100},# Лимонный автомат
'B_SOLDIER':{'B_SOLDIER_ROULETTE2':5000,'B_SOLDIER_ROULETTE':100},# Адмирал
'B_SLOT_B':{'B_SLOT_B_ROULETTE2':5},
}
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):
if not enemies:return False
for enemy in enemies:
if((enemy.x - building.x)**2+(enemy.y - building.y)**2)**0.5 < 15:
return True
return False
def fillToLimit(self,game):
storageCount=self._get_game_state().count_in_storage(game.item)
if storageCount<game.limit:return True
else:return False
def perform_action(self):
buildings = self._get_game_location().get_all_objects_by_type('building')
enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy")
# Ежедневный бонус
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 = 0
# Крутим рулетку в волшебнике и т.д
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
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 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
count_last = game.playsCount - playsCounts[game_id]
logger.info(
u'Крутим рулетку '+
building_item.name+
u'. Осталось: '+
str(count_last)+'/'+
str(game.playsCount))
building.playsCounts=dict2obj(playsCounts)
if not enemies:enemy_here=False
else: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)
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))