def perform_action(self): if not self.get_params().switch_local_send_bot: return if not self.send_accounts: return send_items = self.get_params().send_items for send_item in send_items: item_obj = self.get_item_reader().get(send_item.name) for send_account in self.send_accounts: if u'collection' in item_obj.type: # Если указан только минимум и стоит флаг, пересылать все ддо минимума не равнями частями if not self.get_params().send_equal_parts_collection and not send_item.count: for coll_element in item_obj.items: item_col_obj = self.get_item_reader().get(coll_element) storage_count = self.get_game_state().count_collection_item(coll_element) delta = get_item_count(send_item, storage_count) if delta: logger.info(u'Отправили %s %i шт на %s' % (item_col_obj.name, delta, self.user_dict.get(send_account))) msg = self.get_params().send_account_msg gift_item = SendGiftItem(msg=msg, item=coll_element, count=delta, user=send_account) send_event = SendGift(gift=gift_item) self.get_events_sender().send_game_events([send_event]) self.get_game_state().remove_collection_item(coll_element, delta) else: storage_count = self.get_game_state().count_collection(item_obj.items) delta = get_item_count(send_item, storage_count) if delta: logger.info(u'Отправили %s %i шт на %s' % (item_obj.name, delta, self.user_dict.get(send_account))) msg = self.get_params().send_account_msg for coll_element in item_obj.items: gift_item = SendGiftItem(msg=msg, item=coll_element, count=delta, user=send_account) send_event = SendGift(gift=gift_item) self.get_events_sender().send_game_events([send_event]) self.get_game_state().remove_collection_item(coll_element, delta) else: storage_count = self.get_game_state().count_storage(send_item.name) delta = get_item_count(send_item, storage_count) if delta: logger.info(u'Отправили %s %i шт на %s' % (item_obj.name, delta, self.user_dict.get(send_account))) msg = self.get_params().send_account_msg gift_item = SendGiftItem(msg=msg, item=send_item.name, count=delta, user=send_account) send_event = SendGift(gift=gift_item) self.get_events_sender().send_game_events([send_event]) self.get_game_state().remove_storage(send_item.name, delta) if not send_item.loop: send_items.remove(send_item)
def perform_action(self): if not self.get_params().switch_local_collection_bot: return changed_colls = self.get_params().changed_colls for coll in changed_colls: coll_obj = self.get_item_reader().get(coll.name) coll_count = self.get_game_state().count_collection(coll_obj.items) delta = get_item_count(coll, coll_count) if delta: logger.info(u'Обменяли %s %i шт' % (coll_obj.name, delta)) exchange_coll_event = GameExchangeCollection(itemId=coll.name, count=delta) self.get_events_sender().send_game_events( [exchange_coll_event]) self.get_game_state().remove_collection(coll_obj.items, delta) for prize in coll_obj.prizes: if prize.item == u'@COINS': self.get_game_state().get_state( ).gameMoney += prize.count * delta elif prize.item == u'@XP': self.get_game_state().get_state( ).experience += prize.count * delta elif prize.item == u'@CASH': self.get_game_state().get_state( ).cashMoney += prize.count * delta else: self.get_game_state().add_storage( prize.item, prize.count * delta)
def perform_action(self): if not self.get_params().switch_local_storage_bot: return sell_items = self.get_params().sell_items for sell_item in sell_items: item_count = self.get_game_state().count_storage(sell_item.name) delta = get_item_count(sell_item, item_count) if delta: item_obj = self.get_item_reader().get(sell_item.name) sell_item_event = GameSellItem(itemId=sell_item.name[1:], count=delta) self.get_events_sender().send_game_events([sell_item_event]) self.get_game_state().remove_storage(sell_item.name, delta) logger.info(u"Продали со склада %s %i шт" % (item_obj.name, delta)) for wealth in self.get_params().wealth_types: wealth_count = self.get_game_state().count_storage(wealth) item_obj = self.get_item_reader().get(wealth) if wealth_count: logger.info(u"Открываем со склада %s %i шт" % (item_obj.name, wealth_count)) while wealth_count: x = 10 if wealth_count >= 10 else wealth_count wealth_event = GameUseStorageItem(itemId=item_obj.id, x=10, y=10) self.get_events_sender().send_game_events([wealth_event] * x) self.get_game_state().remove_storage(wealth, x) wealth_count -= x # Если на текущем острове нельзя убирать декор то выходим current_loc_id = self.get_game_state().get_game_loc().id if current_loc_id in self.get_params().allow_move_decoration_locations: decor_evts = [] decorations = self.get_game_state().get_objects_by_types(["decoration"]) decorations += self.get_game_state().get_objects_by_items( [u"@SC_BASE", u"@SCASTLE_GIRL", u"@MP_MONSTER_PIT_1"] ) for decoration in decorations: decoration_obj = self.get_item_reader().get(decoration.item) logger.info(u"Убираем на склад декорацию %s" % decoration_obj.name) evt = MoveToStorage(objId=decoration.id) decor_evts.append(evt) if decor_evts: self.get_events_sender().send_game_events(decor_evts)
def perform_action(self): if not self.get_params().switch_local_daily_bot: return players = self.get_game_state().get_players() # Ежедневный бонус daily_bonus = self.get_game_state().get_state().dailyBonus if int(daily_bonus.playFrom) and self.get_timer().has_elapsed(daily_bonus.playFrom, 10): daily = DailyBonus() self.get_events_sender().send_game_events([daily]) # Если можно крутнуть ежедневную рулетку, # Значит можно уже и дарить ежедневные подарочки self.get_game_state().get_state().freeGiftUsers = [] # Сбрасываем палочки-выручалочки self.get_game_state().get_state().magic.used = 0 self.get_game_state().get_state().magic.expire = unicode(86400000) free_gift_users = [x.user for x in self.get_game_state().get_state().freeGiftUsers] not_gift_users = [ x for x in players if x.id not in free_gift_users and x.id not in self.get_params().exclude_low_level ] if not_gift_users: # Подарки нищебродам до 80 уровня # Максиммальное время отсутствия, не может быть больше 3 суток deadline = 3 day_timestamp = 1000 * 60 * 60 * 24 deadline_timestamp = deadline * day_timestamp pre_aways = [x for x in not_gift_users if hasattr(x, u"accessDate")] lst = [x for x in pre_aways if abs(int(x.accessDate)) < deadline_timestamp and x.level in xrange(40, 81)] for user in lst: if type(user) == unicode: continue for low_level_gift in self.low_level_gifts: if low_level_gift.name in user.liteGameState.wishlist: # Если на складе нет нужного количества для подарка идем к следущему подарку storage_count = self.get_game_state().count_storage(low_level_gift.name) delta = get_item_count(low_level_gift, storage_count) if delta: # Выбрали подарок и дарим его low_level_gift_obj = self.get_item_reader().get(low_level_gift.name) gift_item = SendGiftItem( msg=self.low_level_msg, item=low_level_gift.name, count=delta, user=user.id ) send_event = SendGift(gift=gift_item) evts = self.get_events_sender().send_game_events([send_event]) evts += self.get_events_sender().send_game_events() # Если успешно прошел подарок идем к следущему соседу по списку filter_evts = [x.type for x in evts] if u"alert" not in filter_evts: friend = self.get_game_state().get_player(user.id) user_name = friend.name if hasattr(friend, "name") else user.id logger.info( u"Отправляем для %s в подарок % s %i шт" % (user_name, low_level_gift_obj.name, delta) ) if u"storage" in low_level_gift_obj.type: self.get_game_state().remove_storage(low_level_gift.name, delta) break # Бесплатные подарки for free_gift in self.free_gifts: gift_obj = self.get_item_reader().get(free_gift) free_gift_users = [x.user for x in self.get_game_state().get_state().freeGiftUsers] lst = [x.id for x in players if free_gift in x.liteGameState.wishlist and x.id not in free_gift_users] if lst: logger.info(u"Отправляем бесплатный подарок %s %i игрокам" % (gift_obj.name, len(lst))) freegift_event = SendFreeGifts(msg=self.free_msg, itemId=gift_obj.id, userIds=lst) self.get_events_sender().send_game_events([freegift_event]) while lst: lst_item = lst.pop(0) user_obj = dict2obj({"user": lst_item}) self.get_game_state().get_state().freeGiftUsers.append(user_obj) free_gift = random.choice(self.free_gifts) gift_obj = self.get_item_reader().get(free_gift) free_gift_users = [x.user for x in self.get_game_state().get_state().freeGiftUsers] lst = [x.id for x in players if x.id not in free_gift_users] if lst: logger.info(u"Отправляем бесплатный подарок %s %i игрокам" % (gift_obj.name, len(lst))) freegift_event = SendFreeGifts(msg=self.free_msg, itemId=gift_obj.id, userIds=lst) self.get_events_sender().send_game_events([freegift_event]) while lst: lst_item = lst.pop(0) user_obj = dict2obj({"user": lst_item}) self.get_game_state().get_state().freeGiftUsers.append(user_obj)
def perform_action(self): if not self.get_params().switch_local_send_bot: return if not self.send_accounts: return send_items = self.get_params().send_items for send_item in send_items: item_obj = self.get_item_reader().get(send_item.name) for send_account in self.send_accounts: if u'collection' in item_obj.type: # Если указан только минимум и стоит флаг, пересылать все ддо минимума не равнями частями if not self.get_params( ).send_equal_parts_collection and not send_item.count: for coll_element in item_obj.items: item_col_obj = self.get_item_reader().get( coll_element) storage_count = self.get_game_state( ).count_collection_item(coll_element) delta = get_item_count(send_item, storage_count) if delta: logger.info(u'Отправили %s %i шт на %s' % (item_col_obj.name, delta, self.user_dict.get(send_account))) msg = self.get_params().send_account_msg gift_item = SendGiftItem(msg=msg, item=coll_element, count=delta, user=send_account) send_event = SendGift(gift=gift_item) self.get_events_sender().send_game_events( [send_event]) self.get_game_state().remove_collection_item( coll_element, delta) else: storage_count = self.get_game_state().count_collection( item_obj.items) delta = get_item_count(send_item, storage_count) if delta: logger.info(u'Отправили %s %i шт на %s' % (item_obj.name, delta, self.user_dict.get(send_account))) msg = self.get_params().send_account_msg for coll_element in item_obj.items: gift_item = SendGiftItem(msg=msg, item=coll_element, count=delta, user=send_account) send_event = SendGift(gift=gift_item) self.get_events_sender().send_game_events( [send_event]) self.get_game_state().remove_collection_item( coll_element, delta) else: storage_count = self.get_game_state().count_storage( send_item.name) delta = get_item_count(send_item, storage_count) if delta: logger.info(u'Отправили %s %i шт на %s' % (item_obj.name, delta, self.user_dict.get(send_account))) msg = self.get_params().send_account_msg gift_item = SendGiftItem(msg=msg, item=send_item.name, count=delta, user=send_account) send_event = SendGift(gift=gift_item) self.get_events_sender().send_game_events([send_event]) self.get_game_state().remove_storage( send_item.name, delta) if not send_item.loop: send_items.remove(send_item)
def perform_action(self): if not self.get_params().switch_local_daily_bot: return players = self.get_game_state().get_players() # Ежедневный бонус daily_bonus = self.get_game_state().get_state().dailyBonus if int(daily_bonus.playFrom) and self.get_timer().has_elapsed(daily_bonus.playFrom, 10): daily = DailyBonus() self.get_events_sender().send_game_events([daily]) # Если можно крутнуть ежедневную рулетку, # Значит можно уже и дарить ежедневные подарочки self.get_game_state().get_state().freeGiftUsers = [] # Сбрасываем палочки-выручалочки self.get_game_state().get_state().magic.used = 0 self.get_game_state().get_state().magic.expire = unicode(86400000) free_gift_users = [x.user for x in self.get_game_state().get_state().freeGiftUsers] not_gift_users = [x for x in players if x.id not in free_gift_users and x.id not in self.get_params().exclude_low_level] if not_gift_users: # Подарки нищебродам до 80 уровня # Максиммальное время отсутствия, не может быть больше 3 суток deadline = 3 day_timestamp = 1000 * 60 * 60 * 24 deadline_timestamp = deadline * day_timestamp pre_aways = [x for x in not_gift_users if hasattr(x, u'accessDate')] lst = [x for x in pre_aways if abs(int(x.accessDate)) < deadline_timestamp and x.level in xrange(40, 81)] for user in lst: if type(user) == unicode: continue for low_level_gift in self.low_level_gifts: if low_level_gift.name in user.liteGameState.wishlist: # Если на складе нет нужного количества для подарка идем к следущему подарку storage_count = self.get_game_state().count_storage(low_level_gift.name) delta = get_item_count(low_level_gift, storage_count) if delta: # Выбрали подарок и дарим его low_level_gift_obj = self.get_item_reader().get(low_level_gift.name) gift_item = SendGiftItem(msg=self.low_level_msg, item=low_level_gift.name, count=delta, user=user.id) send_event = SendGift(gift=gift_item) evts = self.get_events_sender().send_game_events([send_event]) evts += self.get_events_sender().send_game_events() # Если успешно прошел подарок идем к следущему соседу по списку filter_evts = [x.type for x in evts] if u'alert' not in filter_evts: friend = self.get_game_state().get_player(user.id) user_name = friend.name if hasattr(friend, 'name') else user.id logger.info(u'Отправляем для %s в подарок % s %i шт' % (user_name, low_level_gift_obj.name, delta)) if u'storage' in low_level_gift_obj.type: self.get_game_state().remove_storage(low_level_gift.name, delta) break # Бесплатные подарки for free_gift in self.free_gifts: gift_obj = self.get_item_reader().get(free_gift) free_gift_users = [x.user for x in self.get_game_state().get_state().freeGiftUsers] lst = [x.id for x in players if free_gift in x.liteGameState.wishlist and x.id not in free_gift_users] if lst: logger.info(u'Отправляем бесплатный подарок %s %i игрокам' % (gift_obj.name, len(lst))) freegift_event = SendFreeGifts(msg=self.free_msg, itemId=gift_obj.id, userIds=lst) self.get_events_sender().send_game_events([freegift_event]) while lst: lst_item = lst.pop(0) user_obj = dict2obj({'user': lst_item}) self.get_game_state().get_state().freeGiftUsers.append(user_obj) free_gift = random.choice(self.free_gifts) gift_obj = self.get_item_reader().get(free_gift) free_gift_users = [x.user for x in self.get_game_state().get_state().freeGiftUsers] lst = [x.id for x in players if x.id not in free_gift_users] if lst: logger.info(u'Отправляем бесплатный подарок %s %i игрокам' % (gift_obj.name, len(lst))) freegift_event = SendFreeGifts(msg=self.free_msg, itemId=gift_obj.id, userIds=lst) self.get_events_sender().send_game_events([freegift_event]) while lst: lst_item = lst.pop(0) user_obj = dict2obj({'user': lst_item}) self.get_game_state().get_state().freeGiftUsers.append(user_obj)
def perform_action(self): if not self.get_params().switch_local_cook_bot: return cook_events = [] pick_events = [] speedup_events = [] recipes = self.get_params().recipes if not recipes: return cook_graves = self.get_game_state().get_objects_by_types(self.get_worker_types()) for cook_grave in cook_graves: cook_grave_obj = self.get_item_reader().get(cook_grave.item) # Если повар не работает, то отправляем его на работу if not cook_grave.isUp: start_evt = StartWorker(objId=cook_grave.id) evts = self.get_events_sender().send_game_events([start_evt]) # Если от сервера пришло сообщение о том что нет мозгов, # то обрабатываем его сразу чтобы знать кто не будет работать no_brains = False for evt in evts: if evt.type == u'alert': if evt.msg == u'SERVER_NO_BRAINS': no_brains = True if not no_brains: logger.info(u'Отправляем работать %s %i' % (cook_grave_obj.name, cook_grave.id)) cook_grave.isUp = True # Если у него есть рецепты в корзинках, то готовим их if cook_grave.pendingRecipes: cook_grave.currentRecipe = cook_grave.pendingRecipes.pop(0) # Солим рецепт если разрешено и есть соль на складе if self.get_params().allow_cook_speedup: if not cook_grave.speeduped: speeduper_obj = self.get_item_reader().get(u'@RED_SPEEDUPER') speeduper_count = self.get_game_state().count_storage(u'@RED_SPEEDUPER') if speeduper_count: logger.info(u'Используем %s для %s %i' % (speeduper_obj.name, cook_grave_obj.name, cook_grave.id)) speedup_evt = CookSpeedup(objId=cook_grave.id) speedup_events.append(speedup_evt) self.get_game_state().remove_storage(u'@RED_SPEEDUPER', 1) # Если у него есть бочки, их нужно собрать while cook_grave.materials: material_item = cook_grave.materials.pop(0) material = self.get_item_reader().get(material_item) logger.info(u'Забираем у %s %i %s 1 шт' % (cook_grave_obj.name, cook_grave.id, material.name)) pick_item = GamePickItem(itemId=material.id, objId=cook_grave.id) pick_events.append(pick_item) # Добавляем на склад if u'storage' in material.type: self.get_game_state().add_storage(material_item, 1) # Если есть рецепты еще, то ставим их на варение if cook_grave.pendingRecipes: cook_grave.currentRecipe = cook_grave.pendingRecipes.pop(0) # Если сейчас ничего не варим if not hasattr(cook_grave, u'currentRecipe') and cook_grave.isUp or \ (hasattr(cook_grave, u'currentRecipe') and len(cook_grave.pendingRecipes) < self.get_params().cook_receipts - 1): current_count = 1 if hasattr(cook_grave, u'currentRecipe') else 0 need_count = self.get_params().cook_receipts - len(cook_grave.pendingRecipes) - current_count while need_count: for recipe in recipes: # Берем рецепт recipe_obj = self.get_item_reader().get(recipe.name) storage_count = self.get_game_state().count_storage(recipe_obj.result) delta = get_item_count(recipe, storage_count) if delta: # Проверяем наличие ингридиентов ingridients = recipe_obj.ingridients ingridients_enough = True for ingridient in ingridients: if self.get_game_state().count_storage(ingridient.item) < ingridient.count: ingridients_enough = False break # Если нам хватает ингридиентов на рецепт, то варим его if ingridients_enough: logger.info(u'Начали готовить %s' % recipe_obj.name) cook_event = GameCookRecipe(itemId=recipe_obj.id, objId=cook_grave.id) cook_events.append(cook_event) if not hasattr(cook_grave, u'currentRecipe'): cook_grave.currentRecipe = recipe.name else: cook_grave.pendingRecipes.append(recipe.name) break need_count -= 1 # Если повара без мозгов не начали работать, # то отправляем их спать, чтобы не занимать мозги if not hasattr(cook_grave, u'currentRecipe') and cook_grave_obj.id.find(u'BRAIN') == -1 and cook_grave.isUp: stop_evt = StopWorker(objId=cook_grave.id) self.get_events_sender().send_game_events([stop_evt]) logger.info(u'Отправляем %s %i спать' % (cook_grave_obj.name, cook_grave.id)) cook_grave.isUp = False # Шлем все на сервер self.get_events_sender().send_game_pack_events(speedup_events) self.get_events_sender().send_game_pack_events(pick_events) self.get_events_sender().send_game_pack_events(cook_events)