Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от megabyte0
Нет атрибута count. Она просто высылает 1 первым евентом и остальные кучей. По сколько максимум, я не проверил, ценностей жаль было.
Первый евент он такой же, как и в куче? Или обычный, как при вскрытии со склада?
Максимум, наверное, как во всех евентах(vintets писал 64 кб). Но я так поняла, разработчики рекомендуют длину 499)))
Последний раз редактировалось GirlKris; 25.01.2015 в 18:43.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
а у всех нормально закапываются соседи, если сидеть на одном острове? У меня иногда пропускает закопку, если слоты свободные есть, или когда кто-то откапывается. Трудно ловимые баги...
# -*- coding: utf-8 -*-
import logging
import random
from engine.base_actor import BaseActor
logger = logging.getLogger(__name__)
class BurrowBot(BaseActor):
def __init__(self, *args):
super(BurrowBot, self).__init__(*args)
self.buriedUntil = 0
self.unburied_friends = {}
def handle_events(self):
for event in self.gameEngine.events:
if event[u'type'] == u'buried' and event.get(u'action') == u'buried':
self.gameEngine.remove_event(event)
self.__handle_buried(event)
def perform_action(self):
# если не прошло время откапывание, то выходим
if not self.gameTimer.has_elapsed(self.buriedUntil):
return
for friend_id in self.unburied_friends.keys():
if self.gameTimer.has_elapsed(self.unburied_friends[friend_id]):
del self.unburied_friends[friend_id]
if self.buried:
self.dig_out_user(self.user_id)
for i in range(self.free_bury_slots_count):
friends_not_buried = filter(lambda(friend): not self.user_was_buried(friend[u'id']), self.friends_zombies)
friends_not_buried = filter(lambda(friend): friend['id'] not in self.unburied_friends, friends_not_buried)
if friends_not_buried:
random_friend = random.choice(friends_not_buried)
# следующие 5 минут не закапываем этого соседа
self.unburied_friends[random_friend['id']] = self.gameTimer.get_client_time() + (5*60)*1000
logging.info(u"Закапываем: id='%s'", random_friend[u'id'])
self.bury_friend(random_friend)
# раскапываем случайного соседа (кроме закопанных нами)
# если у нас появились свободные слоты
if self.free_bury_slots_count > 0:
buried_friends = filter(lambda(friend): self.user_was_buried(friend[u'id']), self.friends_zombies)
our_buried_friends_ids = [slot['user'] for slot in self.bury_slots if 'user' in slot]
buried_friends = filter(lambda(friend): friend['id'] not in our_buried_friends_ids, buried_friends)
if buried_friends:
random_friend = random.choice(buried_friends)
logging.info(u"Откапываем: id='%s'", random_friend[u'id'])
# следующие 5 минут не закапываем этого соседа
self.unburied_friends[random_friend['id']] = self.gameTimer.get_client_time() + (5*60)*1000
self.dig_out_friend(random_friend)
def dig_out_user(self, user_id):
assert self.user_was_buried(user_id)
if self.emulating:
if self.user_id != user_id:
returned_event = {
'type': u'alert',
u'action': u'',
u'msg': u'SERVER_DIG_OUT_BEGIN'
}
self.gameEngine.add_events([returned_event])
self.gameEngine.send_empty_event()
returned_event = {u'type': u'buried', u'action': u'buried', u'user': unicode(user_id), u'slot': -1}
self.gameEngine.add_events([returned_event])
self.gameEngine.send_empty_event()
else:
event_to_send = {
u'user': unicode(user_id),
u'slot': -1,
u'type': u'bury',
u'action': u'digOut'
}
self.send_event(event_to_send)
def dig_out_friend(self, friend):
self.dig_out_user(friend[u'id'])
def bury_friend(self, friend):
assert self.friend_is_a_zombie(friend) and not self.user_was_buried(friend[u'id'])
assert self.free_bury_slots
slot_index = self.index_of_first_free_bury_slot
event_to_send = {
u'user': friend[u'id'],
u'type': u'bury',
u'action': u'bury',
u'slot': slot_index
}
self.send_event(event_to_send)
if self.emulating:
self.gameEngine.send_empty_event()
returned_event = {u'type': u'buried', u'action': u'buried', u'user': unicode(friend[u'id']), u'slot': slot_index, u'buriedBy':unicode(self.user_id)}
self.gameEngine.add_events([returned_event])
self.gameEngine.send_empty_event()
returned_event = {u'type': u'buried', u'action': u'buried', u'user': unicode(friend[u'id']), u'slot': slot_index}
self.gameEngine.add_events([returned_event])
self.gameEngine.send_empty_event()
def __handle_buried(self, event):
target_user_id = event[u'user']
slot_index = int(event['slot'])
# если действие над нами
if target_user_id == self.user_id:
# если нас закопали
if not self.buried and u'buriedBy' in event:
logging.info(u"Нас закопали: id='%s'", event[u'buriedBy'])
self.game_state[u'state'][u'buriedBy'] = event[u'buriedBy']
# если мы откопались
elif self.buried and u'buriedBy' not in event:
logging.info(u'Мы откопались')
del self.game_state[u'state'][u'buriedBy']
# если начали раскапываться
if u'buriedUntil' in event:
logger.info(u'Раскапываемся, будет готово через минуту')
self.buriedUntil = long(int(event[u'buriedUntil'])+60000)
# если действие над соседом
else:
# если соседа закопали мы
if u'buriedBy' in event and event['buriedBy'] == self.user_id:
logging.info(u"Закопали соседа: id='%s'", target_user_id)
slot = {
u'enabled': True,
u'user': target_user_id,
u'buriedUntil': self.gameTimer.get_client_time() + (6*60*60)*1000
}
self.bury_slots[slot_index] = slot
# если сосед раскопался
else:
if slot_index >= 0:
logging.info(u"Нами закопанный сосед откопался: id='%s'", target_user_id)
self.bury_slots[slot_index] = {'enabled': True}
# запоминаем соседа и время его раскопки, чтобы пока его не закапывать
self.unburied_friends[target_user_id] = self.gameTimer.get_client_time() + (5*60)*1000
else:
logging.info(u"Сосед откопался: id='%s'", target_user_id)
self.unburied_friends[target_user_id] = self.gameTimer.get_client_time() + (5*60)*1000
if self.emulating:
self.gameState.update_friend_list()
else:
self.gameState.update_friend_info(target_user_id)
Последний раз редактировалось ruslanische; 25.01.2015 в 19:07.
Причина: Добавлено сообщение
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Иногда вываливается sig not valid. Причем заметил, что это происходит, когда когда сильная движуха (т.е. бот добывает ресурсы, сосед откапывается, бот тут же закапывает другого соседа и тот сразу откапывается и все это за несколько секунд). Когда все тихо и соседи откапываются редко, то нормально. Может я какие-то евенты обрабатываю раньше времени?
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Цитата:
Сообщение от Cheater-84
подскажите как сделать задержку
Учитывая {"type":"building","item":"@B_BABEL","id":,"x": ,"y ":,"rotate":0,"level":9,"nextPlayTimes":{"BABE L_1" :"-116854010"},"playsCounts":{}}
Пишется что-то типа
Код:
if any(hasattr(building.nextPlayTimes,str(i)) and not self._get_timer().has_elapsed( long(getattr( building.nextPlayTimes,str(i) )) ) for i in xrange(11,16)):continue
и ставится перед строчкой
Код:
obj_id_observatory = building.id
с тем же отступом. Это позволит крафтить не в одной обсерватории, пропуская те, в которых нельзя.
Дальше, убивается for i in range(needcountbozon): , а 6 строчек под ним сдвигаются на 1 отступ влево, соответственно правится весь вывод сколько скрафчено.
P.S. Я не тестил.
к сожалению megabyte0 ничего не выходит...
[Ссылки могут видеть только зарегистрированные пользователи. ]
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от har4a
подскажите что нужно исправить что бы открывало зомбилетто?
Возможно в gifts.py удаляются платные подарки.
Попробуй сместить строку self.remove_gift_from_game_state(gift) на 4 пробела. Или отключи приём подарков.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от GirlKris
Возможно в gifts.py удаляются платные подарки.
Попробуй сместить строку self.remove_gift_from_game_state(gift) на 4 пробела. Или отключи приём подарков.
сделал, теперь возникла другая проблема))
[Ссылки могут видеть только зарегистрированные пользователи. ]
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Traceback (most recent call last):
File "main.py", line 93, in <module>
run_game()
File "main.py", line 74, in run_game
Game(site, settings, UserPrompt(gui_input), gui_input=gui_input).start()
File "C:\Python27\bot2\game_engine.py", line 555, in start
self.save_game_state(start_response)
File "C:\Python27\bot2\game_engine.py", line 590, in save_game_state
self.__game_state_ = GameState(start_response, self.__itemReader)
File "C:\Python27\bot2\game_engine.py", line 262, in __init__
occupied_brain_count = self.__player_brains.get_occupied_brains_count()
File "C:\Python27\bot2\game_state\brains.py", line 39, in get_occupied_brains_
count
zombie_types)
File "C:\Python27\bot2\game_engine.py", line 86, in get_all_objects_by_types
item = self.__item_reader.get(game_object.item)
File "C:\Python27\bot2\game_state\item_reader.py", line 27, in get
return dict2obj(self.content_dict[item_id])
KeyError: 'B_TIC_TAC'