Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от ruslanische
sig not valid
Цитата:
Сообщение от ruslanische
сосед откапывается
Попробуйте сразу после того, что сервер сказал "эй, положи такое-то число зомбаков спать", вот прямо в следующем пакете серверу, их спать ложить? Я выше отписывался, что у меня sig is not valid только из за этого летит.
Последний раз редактировалось megabyte0; 27.01.2015 в 04:34.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от megabyte0
Попробуйте сразу после того, что сервер сказал "эй, положи такое-то число зомбаков спать", вот прямо в следующем пакете серверу, их спать ложить? Я выше отписывался, что у меня sig is not valid только из за этого летит.
Хм... надо еще раз проверить, но вроде после прихода {u'action': u'stopRequest', u'objId': 93, u'type': u'item'} я помечаю, что рабочий 93 пошел спать. Или надо прям отправить запрос на сервер 'action':'stop', что я сам остановил его ?
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
ребят, у меня такой вопрос, в последней обнове появились трофеи на кормление слоника и копание колокольчиков, не у кого случаем нет скриптов для этих действий, буду благодарен за любой совет и ответ
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от ruslanische
Или надо прям отправить запрос на сервер 'action':'stop', что я сам остановил его ?
Меня это никогда не интересовало. Меня устраивает 'sig is not valid' и перезапуск бота в таком случае. Можно же ведь и прочарлить, что отдаётся оф. клиентом серверу?
Я этот запрос имел в виду, если что:
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от ruslanische
Кстати, можно ли в чарли пропатчить в запросе "gz":"y"? А то напрягает вручную распаковывать ответы сервера в winhex
Меня этот вопрос волновал уже очень давно. Похоже что "самый новый" Чарли имеет опцию автоматически декомпрессировать ответ, если тот сжат. Однако любые модификации заголовка пакета (в моих экспериментах) заканчивались вываливанием с ошибкой. Если убрать параметр "gz" в запросе, то сразу валится "ошибка" от сервера. Когда я попытался изменить ответ сервера, чтобы "content-type" был "compressed" (или "gzip"), то Чарли видит ответ, но флеш-игра вываливается с ошибкой. Может у кого есть Чарли 3.9 (в 3.7 такой опции нет)?
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Cheater-84
к сожалению megabyte0 ничего не выходит...
Я вижу всего 3 возможности, почему это не работает:
или я как-то неправильно интерпретирую nextPlayTimes
или какие-то косяки с таймером, тогда можно попробовать поменять строчку на такую:
Код:
if any(hasattr(building.nextPlayTimes,str(i)) and not self._get_timer().has_elapsed( long(getattr( building.nextPlayTimes,str(i) ))+60000 ) for i in xrange(11,16)):continue
def get_all_objects_by_items(self, object_items):
objects = []
for game_object in self.get_game_objects():
if hasattr(game_object,'item') and game_object.item.lstrip('@') in object_items:
objects.append(game_object)
return objects
и фором по ним пробежать.
Цитата:
Сообщение от ruslanische
вручную распаковывать ответы сервера
Пользую wireshark, он по-быстрее и более общепризнанный в плане перехвата траффика, слегка. Проблема сохраняется. В принципе, можно написать мультипоточную прокси с использованием requests connection pool , где-то я такое уже видел. И пусть пакеты сама логгает распакованные?
Последний раз редактировалось megabyte0; 29.01.2015 в 17:47.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Задался вопросом вот, а как правильно определить, когда на сервере наступит "завтра"? Вроде сервер считает по Московскому времени, по нему и считать? Или правильно с веб-сервера, апач там или кто, брать временную зону? Или брать свое unix-time, сервера (в ответе на TIME) и считать на сколько часов отличается?
Добавлено через 47 минут
Правильно я понимаю, что решение "в лоб" для определения, когда на сервере наступит следующий день, такое:
Добавлено через 2 часа 4 минуты
если у кого нет кода для дарения бесплатных подарков, то вот мой вариант, правда вам придется переделать под свой лад, но логика там понятна:
Код:
class GiftSenderBot(BaseActor):
def __init__(self, *args):
super(GiftSenderBot, self).__init__(*args)
# список из ID бесплатных подарков
self.free_gifts_ids = [record['item'] for record in self.stateProcessor.get_item_by_id(u'FREE_GIFTS').get(u'freeGifts', [])]
# список из бесплатных подарков
self.free_gifts = [self.stateProcessor.get_item_by_id(gift) for gift in self.free_gifts_ids]
def perform_action(self):
self.send_free_gifts()
@property
def friend_without_gifts(self):
freeGiftUsers = self.game_state['state']['freeGiftUsers']
for user in list(freeGiftUsers):
if self.gameTimer.has_elapsed(user['blockedUntil']):
freeGiftUsers.remove(user)
blocked_users = [user['user'] for user in freeGiftUsers]
# список соседей, которым сегодня не дарили бесплатного подарка
friends_without_gift = filter(lambda(x): x[u'id'] not in blocked_users, self.friends)
return friends_without_gift
def friend_free_gift_wishes(self, friend):
# список хотелок соседа
friend_wishlist = friend.get(u'liteGameState', {}).get(u'wishlist', [])
# список ID бесплатных хотелок соседа
friend_free_wishlist_ids = [wish.lstrip('@') for wish in friend_wishlist if wish in self.free_gifts_ids]
# список бесплатных хотелок соседа
friend_free_wishlist_items = [wish_item for wish_item in self.free_gifts if wish_item['id'] in friend_free_wishlist_ids]
return friend_free_wishlist_items
def friends_who_wants_free_gift(self, gift):
return [friend for friend in self.friend_without_gifts if gift in self.friend_free_gift_wishes(friend)]
def send_free_gifts(self):
sended_gifts = 0
# дарим бесалатные подарки соседям по фильтру
for free_gift in self.free_gifts:
friends = self.friends_who_wants_free_gift(free_gift)
if friends:
sended_gifts += len(friends)
friends_ids = [friend[u'id'] for friend in friends]
# помечаем соседей, что подарки им подарены в этот день
for friend_id in friends_ids:
self.game_state['state']['freeGiftUsers'].append({u'user': friend_id, u'blockedUntil': self.gameTimer.client_time_next_day()})
send_event = {
u'type': u'gifts',
u'msg': self.settings.message_for_gifts,
u'userIds': friends_ids,
u'action': u'sendFreeGifts',
u'itemId': free_gift['id']
}
self.send_event(send_event)
# дарим случайные подарки остальным соседям
friends = self.friend_without_gifts
if friends:
sended_gifts += len(friends)
wish_item = random.choice(self.free_gifts)
friends_ids = [friend[u'id'] for friend in friends]
# помечаем соседей, что подарки им подарены в этот день
for friend_id in friends_ids:
self.game_state['state']['freeGiftUsers'].append({u'user': friend_id, u'blockedUntil': self.gameTimer.client_time_next_day()})
send_event = {
u'type': u'gifts',
u'msg': self.settings.message_for_gifts,
u'userIds': friends_ids,
u'action': u'sendFreeGifts',
u'itemId': wish_item['id']
}
self.send_event(send_event)
if sended_gifts > 0:
logger.info(u"Подарено %s бесплатных подарков" % sended_gifts)
Последний раз редактировалось ruslanische; 29.01.2015 в 23:16.
Причина: Добавлено сообщение
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
ruslanische, бесплатки от чуда и юда ещё есть на этот случай. А с этими временными зонами.. то в 0:00 GMT+3 они считали, то GMT+4 .. кто б знал универсальный ответ...
Вам хорошо, Вы в Москве живёте, а остальные? Я бы сделал так:
Код:
t=time.gmtime(now)
new_day_timestamp=calendar.timegm(t[:3]+(21+(0 if t[3]<21 else 24),0,0)+t[6:9])
, если нужна такая логика с вычитаниями, но тоже косовато выглядит. И даже ещё не идеально, мы же можем просто выкинуть день, число, месяц, и т д, а использовать
Код:
offset=3
return (calendar.timegm((1970,1,1 if t.tm_hour<24-offset else 2,23-offset-t.tm_hour,59-t.tm_min,60-t.tm_sec,0,0,0)) - math.modf(now)[0] )*1000
, всё равно выглядит криво
P.S. datetime.timedelta ещё есть...
Последний раз редактировалось megabyte0; 30.01.2015 в 02:38.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
А с этими временными зонами.. то в 0:00 GMT+3 они считали, то GMT+4
нормальные люди в UTC считают, иначе ломается потом все
Цитата:
бесплатки от чуда и юда ещё есть на этот случай
на какой случай? бесплатные от них я принимаю, там в подарке есть поле 'type': ADMIN - подарки от администрации, FAKE_USER - от этих ботов, чуда и юда.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Со временем раньше было нормально - как в Москве настала полночь, сразу все обнулялось. А с последним обновлением пришла проблема с разницей в один час - рулетка "ежедневная" уже вывалилась, а подарки еще не обнулились. Поэтому я у себя просто сделал "игнорирование" одного часа (то есть ни с подарками, ни чудищем ничего в этот час не делаю).
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
У меня, заметьте, в UTC и посчитано.
А на кой в UTC считать, если сервер отдает в местном (его) времени, тут хоть обсчитайся. Про нормальных людей я имел в виду, что в БД время д.б. в UTC, между клиентами и серверами д.б. в UTC. А локальное только для отображения клиенту.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от ripton07
Ребят, помогите разобраться где собака зарыта [Ссылки могут видеть только зарегистрированные пользователи. ]
Да потому что не MANDARINE, а MANDARIN
Я в тупую переназначал в плантс
PHP код:
if name == 'MANDARINE': name = 'MANDARIN' if name == 'CHERRY_WHITE': # FT_CHERRY_WHITE name = '@D_MAIL_BOX_CHERRY' else: name = '@FT_PICKUP_BOX_' + name
Тот кто делал превращалку деревьев в сундуки сразу не заморочился чтением итема, а взял и из названия дерева
@FT_APPLE делает сундук @FT_PICKUP_BOX_APPLE
Но только разработчики иногда косячат и называют по разному (другая смена )
Вот так из @FT_MANDARINE получается @FT_PICKUP_BOX_MANDARIN
А из зимней вишни @FT_CHERRY_WHITE вообще @D_MAIL_BOX_CHERRY
P.S. Всех кумарят хр... плохо вырезанные смайлики на жуке? Как смотрю, так и плачу. Я понимаю, что сделано под светлую тему и там всё равно. Но тема тёмная давно, если не всегда.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось vintets; 30.01.2015 в 17:25.