Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Олександра
Мужчины, научите пожалуйста, как настроить бота, чтоб он выставил на Домашний остров все подаренные подснежнички "Весеннее настроение". Пожалуйста)
В game_engine.py включаем PremiumGifts.
В \game_actors_and_handlers\premium_gifts.py
Меняем "location_id ="
В массив specified_gifts добавляем '@SNOWDROP_BOX18_1',
free_x = 28 # Координаты пустого места
free_y = 40
можно получить методом тыка, либо сделать пробную установку подарка и подсмотреть в инструментах разработчика браузера, во вкладке Network.
В конце файла закоменчиваем
#events.append(apply_event)
#events.append(open_event)
#self._get_game_state().get_state().gifts.remove(g ift)
И две строки
#self._get_events_sender().send_game_events(events )
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Всем привет!
Цитата:
Сообщение от ABBAtjaga
В game_engine.py включаем PremiumGifts.
В \game_actors_and_handlers\premium_gifts.py
Меняем "location_id ="
В массив specified_gifts добавляем '@SNOWDROP_BOX18_1',
free_x = 28 # Координаты пустого места
free_y = 40
можно получить методом тыка, либо сделать пробную установку подарка и подсмотреть в инструментах разработчика браузера, во вкладке Network.
В конце файла закоменчиваем
#events.append(apply_event)
#events.append(open_event)
#self._get_game_state().get_state().gifts.remove(g ift)
И две строки
#self._get_events_sender().send_game_events(events )
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 _getUserInfo(self): ''' returns user info using vk api ''' # get vk user info api = vkontakte.api.API(token=self.__api_access_token) info = api.getProfiles( uids=self.__session.getUserId(), format='json', fields='bdate,sex,first_name,last_name,city,country') info = info[0] if 'bdate' in info: bdate = info['bdate'] else: bdate = None my_country = api.places.getCountryById(cids=int(info['country']))[0] info['country'] = my_country['name'] my_city = api.places.getCityById(cids=int(info['city']))[0] info['city'] = my_city['name'] game_info = GameInfo(city=info['city'], first_name=info['first_name'], last_name=info['last_name'], uid=long(info['uid']), country=info['country'], sex=long(info['sex']), bdate=bdate) print "UID: "+str(uid) return game_info
class GameState(BaseActor): #self.order = None def __init__(self, start_response, item_reader, curuser, friends): #self.__friendsid = self.__game_state_.get_state().friends self.__curuser = curuser self.__friends = friends self.order = None self.__item_reader = item_reader self.__game_state = start_response.state game_state_event = start_response.params.event self.set_game_loc(game_state_event) self.__player_brains = PlayerBrains(self.__game_state, self.get_game_loc(), item_reader) if not hasattr(self.__game_state,'rectsObjects'):self.__game_state.rectsObjects=[] compositions=GameCompositionReader() 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)
total_brain_count = self.__player_brains.get_total_brains_count() occupied_brain_count = self.__player_brains.get_occupied_brains_count() #logger.info("") #logger.info("Мозги: %d/%d" % (occupied_brain_count, total_brain_count)) cou = 0 for fgift in self.__game_state.freeGiftUsers: if fgift.blockedUntil > 0: cou+=1 #print str(obj2dict(fgift)) #if cou < 1: os.remove('countfnyt.txt') if not os.path.isfile('gameGIFT.txt'): open('gameGIFT.txt', 'a').write(str(cou)+"/"+str(len(self.__game_state.freeGiftUsers))+"\n") for fgift in self.__game_state.freeGiftUsers: open('gameGIFT.txt', 'a').write(str(obj2dict(fgift))+"\n") open('gameGIFT.txt', 'a').write(str(dir(self.__game_state))) open('gameSTATE.txt', 'w').write(str(obj2dict(self.__game_state))) if occupied_brain_count < total_brain_count: print u"Мозги: ", sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0004 | 0x0008) print "%d/%d" % (occupied_brain_count, total_brain_count) SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) sys.stdout.flush() else: print u"Мозги: %d/%d" % (occupied_brain_count, total_brain_count) x=0 z=0 for burySlot in self.__game_state.burySlots: x+=1 if (hasattr(burySlot, u"user") is True): z+=1 if z<x: print u"Использование слотов для закопки друзей: ", sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0004 | 0x0008) print "%d/%d" % (z,x) SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) sys.stdout.flush() else: print u"Слоты для закопки друзей: %d/%d" % (z,x) #self.cprint(u'4'+self.__curuser) os.system((u'title '+self.__curuser+u' Мозгов: ' + str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x)+u' Друзья: '+str(len(self.__game_state.freeGiftUsers))+"/"+str(self.__friends)+":"+str(cou)).encode('cp1251', 'ignore')) #logger.info("Использование слотов для закопки друзей: %d/%d" % (z,x)) 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 #logger.info(u"загружаем друзей") #self.__friendsid=self.__game_state_.get_state().friends print u"Уровень игрока: ", SetConsoleTextAttribute(stdout_handle, 0x0006 | 0x0008) print str(self.__game_state.level) SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) sys.stdout.flush() s='' for i in range(len(str(self.__game_state.gameMoney)),0,-3): if i>=3: s=str(self.__game_state.gameMoney)[i-3:i]+'.'+s else: s=str(self.__game_state.gameMoney)[:i]+'.'+s print u"Деньги игрока: ", sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0006 | 0x0008) print str(s[:-1]), SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) sys.stdout.flush() print u' монет' #logger.info("Деньги игрока: "+s[:-1]) #logger.info("") self.cprint(u'3Положил пряников сегодня:^7_%s'%(len(self.__game_state.remoteNewYear))) self.cprint(u'3Закопал Друзьям Чудика сегодня:^7_%s'%(len(self.__game_state.remoteMonsterPit))) self.cprint(u'3Удобрил друзьям деревья сегодня:^7_%s'%(len(self.__game_state.remoteFertilizeFruitTree)))
#def order(self): # return order def set_game_loc(self, game_state_event): self.__game_loc = GameLocation(self.__item_reader, game_state_event.location,game_state_event.gameObjects) for attr, val in game_state_event.__dict__.iteritems(): self.__game_state.__setattr__(attr, val) #self.get_game_loc().log_game_objects()
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
def count_in_storage(self, item_id): if os.path.isfile('storage.txt'): exif = 1 else: exif = 0 for itemid in self.__game_state.storageItems: if hasattr(itemid, "item"): if itemid.item == item_id: ret = itemid.count if exif == 0: #if itemid.item[:3] == "@S_":open('storage.txt', 'a').write(itemid.item.replace('@S_', 'P_')+": "+str(itemid.count)+"\n") try: name = self.__item_reader.get('P_'+itemid.item[3:]).name except: name = "N/A" open('storage.txt', 'a').write((name+": "+str(itemid.count)+"\t\t"+itemid.item+"\n").encode('utf-8', 'ignore')) #------------------------------------- #if itemid.item == item_id: ret = itemid.count try: return ret #print "##################################################" except: return 0
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
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 self.set_from_storage(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 if (location.locationId not in locations_nfree) and (location.locationId not in locations_nwalk): locations[name] = location print u'\t-\t'+location.locationId+'\t'+name else: if (location.locationId not in locations_nfree): print u'\t?\t'+location.locationId+'\t'+name else: print u'\t+\t'+location.locationId+'\t'+name if locations: print u'Находимся на острове:', print 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()
self.save_game_state(start_response) if hasattr(self.__game_state_.get_state(),'friends'): self.__friendsid=self.__game_state_.get_state().friends #GetMissionsBot(self.__itemReader, self.__game_state_, self.__game_events_sender, self._get_timer(),{}).perform_action()
self.select_location()
self.select_plant_seed()
self.select_recipe()
self.load_info_users()
self.create_all_actors()
# TODO send getMissions # TODO handle getMissions response
self.eventLoop() except urllib2.HTTPError, e: raise e except (socket.timeout, urllib2.HTTPError, urllib2.URLError): seconds = 3 logger.error('Timeout occurred, retrying in %s seconds...' % seconds) time.sleep(seconds) except (socket.error, ssl.SSLError) as e: seconds = 10 logger.error('Socket error occurred, retrying in %s seconds...' % seconds) time.sleep(seconds) except message_factory.GameError, e: if not self.__ignore_errors: raise e ############## def load_info_users(self): friends_copy = self.__friendsid[:] players = [] while len(friends_copy): players.append(friends_copy.pop()) if len(players) == 100: events = {"type":"players","id":3,"action":"getInfo","players":players} self.__game_events_sender.send_game_events([events]) self.handle_all_events() players = [] if players: events = {"type":"players","id":3,"action":"getInfo","players":players} self.__game_events_sender.send_game_events([events]) self.handle_all_events()
def add_users_info(self, event_to_handle): 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)) #time.sleep(2) ################
def save_game_state(self, start_response): # parse game state self.__game_state_ = GameState(start_response, self.__itemReader, self.__selected_curuser, len(self.__friendsid))
def eventLoop(self): ''' in a loop, every 30 seconds send EVT request handle EVT response ''' game_state = self.__game_state_ interval = 1 refresh_min = 5 seconds = interval ref_min = [] while(self.running()): if seconds >= interval: self.perform_all_actions() #logger.info('Ждем %d секунд'%interval) if hasattr(game_state, 'fdend'): #print "interval 20" interval = 1
seconds = 0 time.sleep(0.1) seconds += 0.1
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: pass#logger.info(u'Перезагрузка через %s минуту'%str(refresh_min-min)) elif ((refresh_min-min)>=2) and ((refresh_min-min)<=4):pass# 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 = [] break
def create_all_actors(self): self.__selected_loc_setting['modePassAllAccount'] = self.__selected_modePassAllAccount #print type(self.__selected_Friends) receive_options = {'with_messages': self.__receive_gifts_with_messages, 'non_free': self.__receive_non_free_gifts, 'from_admin': self.__receive_admin_gifts, 'users': self.__friendsid} options = {'GiftReceiverBot': receive_options, 'GameBrains1': self.__selected_brains_count, 'SeederBot': [self.__selected_SeedMode, self.__selected_seed], 'CookerBot': self.__selected_recipe, 'ChangeLocationBot': self.__selected_location, 'ChangeLocationBot': {'modePassAllAccount':self.__selected_modePassAllAccount}, #'VisitingUsers' : str(self.__friendsid)+str(self.__selected_Friends), 'DigBot':self.__selected_Burrowing, 'SellBot':{'sell_item':self.__selected_sell,'send_user':self.__selected_send}, 'ChangeLocationBot':self.__selected_loc_setting, #'PremiumGifts':self.__selected_PremiumGifts } events_sender = self.__game_events_sender timer = self._get_timer() item_reader = self.__itemReader game_state = self.__game_state_ actor_classes1 = [ DigBot, #0 Работа с мозгами StoragePut, #1 выставление сосклада барахло ExhangeCollEmerald, #2 создание изумрудной BowReceiverBot, #3 сбор бантов Emeraldic, #4 создание луксорской GameBrains1, #5 создание коллекций и мозгов GameBrains, #6 производство мозгов (останкинобкорабль) GetMissionsBot, #7 Запрос выполнения миссий MonsterPit, #8 Закапывание чуда #VisitingUsers, #9 Посещение друзей GameBuffHarvest, #10 Приём супер урожая GameBuffDigger, #11 Приём супер-поиск GameBuffFixCook, #12 Прием минутки на день WoodPicker, #13 Сбор дерева StonePicker, #14 Сбор камня BrewPicker, #15 Сбор сваренного BagsPicker, #16 Сбор сумок WoodTargetSelecter, #17 Отправка работать дровосекам StoneTargetSelecter, #18 Отправка работать камнетёсов CookerBot, #19 Работа с поварами (подъем из могил, установка рецептов) CookSpeed, #20 Посолить рецепты FertilBot, #21 Удобрение деревьев HarvesterBot, #22 Сбор чего либо + вскапывание грядок CakesReceiverBot, #23 Сбор пряников SeederBot, #24 Посейка GiftReceiverBot, #25 Принятие подарков BoxPickuper, #26 Вскрытие чего либо PiratePut, #27 Выставление любого барахла со склада RouletteRoller, #28 Кручение рулеток FrutRouletteRoller, #29 Кручение фруктовых рулеток UseEggItemBot, #30 Бить яйца ;) MagicWand, #31 Добыча ресурсов палочками ExchangeKruger, #32 Создаем коллекцию фреди в изумрудной мельнице ExchangeMummy, #33 Создаем коллекцию мумии в изумрдуном маяке Pickuper, #34 Сбор дропа SellBot, #35 Продажа чего либо TraderWork, #36 Торговцы BuildingBuyer, #37 Покупаем, продаем ракету HarvestExchange, #38 создаем деньги в БЦ PirateTreeCut, #39 рубка на острове сокровищ Exchange_Collection, #40 обмен коллекции(любая) MoveItem, #41 воровать вещи с острова(не актуально) TreePlant, #42 Посадка деревьев BuildingTrack, #43 покупка настилов(не актуально) CreateShovelExtra, #44 Создание лопат в Глаз-алмаз DeletingObjects, #45 Удаление объектов BoltGift, #46 передача другу чего либо ExchangeCollections, #47 Torgovec, #48 ChangeLocationBot, #49 Переход по локациям SeederBotMy, #50 FreeGifts, #51 TiketReceiverBot, #52 обнова корзин PremiumGifts, # Принятие платных выставляемых подарков ] br = 0 if self.__selected_Burrowing == None: print u'Никого не закапывать' del actor_classes1[0] br = 1 else: self.__selected_Actors.insert(0, 0) #else: print str(self.__selected_Burrowing) #print str(self.__selected_SeedMode)+" "+str(self.__selected_seed) actor_classes = [] if self.__selected_Actors != None: for ator in self.__selected_Actors: actor_classes.append(actor_classes1[ator-br]) else: actor_classes = actor_classes1 #print self.__selected_Actors self.__actors = [] for actor_class in actor_classes: self.__actors.append( actor_class(item_reader, game_state, events_sender, timer, options))
def perform_all_actions(self): game_state = self.__game_state_ #print str(self.__selected_Friends) options = {'VisitingUsers' : [[self.__selected_curuser, self.__uid, self.__friendsid], self.__selected_Friends]} events_sender = self.__game_events_sender timer = self._get_timer() item_reader = self.__itemReader ''' Assumes that create_all_actors is called before ''' if not hasattr(game_state, 'fdend'): #print '######### VisitingUsers #########' VisitingUsers(item_reader, game_state, events_sender, timer, options).perform_action() else: #print '######## perform_all_actions #######' #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,'tmpall')and len(game_state.tmpall)>0: for i in game_state.tmpall.keys(): if i != u'денег' and i != u'опыта': SetConsoleTextAttribute(stdout_handle, 0x0005 | 0x0008) print u' Подобрали ', sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0007 | 0x0008) print game_state.tmpall[i], sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0003 | 0x0008) print i sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) del game_state.tmpall if hasattr(game_state,'getcoins') and game_state.getcoins > 0: SetConsoleTextAttribute(stdout_handle, 0x0005 | 0x0008) print u'Подобрали: ', sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0006 | 0x0008) print str(game_state.getcoins), sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) print u'монет' del game_state.getcoins if hasattr(game_state,'getxp') and game_state.getxp > 0: SetConsoleTextAttribute(stdout_handle, 0x0005 | 0x0008) print u'Подобрали: ', sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0006 | 0x0008) print str(game_state.getxp), sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) print u'опыта' del game_state.getxp #raw_input()
def handle_all_events(self): 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 == 'addGift': AddGiftEventHandler(self.get_game_state()).handle(event_to_handle) if event_to_handle.type == 'alert': #print event_to_handle.msg if event_to_handle.msg == 'SERVER_NEW_YEAR_GIFT_NOT_ALLOW': self.__game_state_.nyna = 1 elif event_to_handle.msg == 'SERVER_REMOTE_TREASURE_ALL_DIGGED': self.__game_state_.alldigged = 1 elif event_to_handle.msg == 'SERVER_TREASURE_FOUND':#нашел секретный клад print u'НАЙДЕН СЕКРЕТНЫЙ КЛАД!!!' self.__game_state_.treasfound = 1 elif event_to_handle.msg == 'SERVER_REMOTE_TREASURE_NO_TRIES':#Кончились лопаты self.__game_state_.treasnotries = 1 elif event_to_handle.msg == 'SERVER_NO_BRAINS':#Не хватает мозгов self.__game_state_.nobrains = 1 elif event_to_handle.msg == 'SERVER_REMOTE_FERTILIZE_FRUIT_TREE_NOT_FOUND':#Не найдены деревья для удобрения self.__game_state_.fertilizenot = 1 elif event_to_handle.msg == 'SERVER_MONSTER_PIT_DIG_OK':#Закопали мишуту self.__game_state_.monsterpitok = 1 elif event_to_handle.msg == 'SERVER_MONSTER_PIT_INCORRECT_INSTRUMENT':#мишуту можно закопать только за баксы self.__game_state_.monsterpitincorrect = 1 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 # print event_to_handle.action 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: 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': 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.action == 'getInfo': # and event_to_handle.type == 'playersInfo': self.add_users_info(event_to_handle) elif event_to_handle.type == 'monsterPitDigEvent': name = unicode(event_to_handle.user) + self.addName(event_to_handle.user) logger.info(u'Пользователь ' + name + u' закопал нам медведя') #logger.info(u"Пользователь %s закопал нам медведя"% (event_to_handle.user)) with open('action_frends.txt', 'a') as f: sms = u'Пользователь ' + name + u' закопал нам медведя' + u'\n' f.write(sms.encode("utf-8")) elif event_to_handle.type == 'pirateShip': name = unicode(event_to_handle.user) + self.addName(event_to_handle.user) logger.info(u'Пользователь ' + name + u' вошёл в команду корабля') #logger.info(u"Пользователь %s вошёл в команду корабля"% (event_to_handle.user)) with open('action_frends.txt', 'a') as f: sms = u'Пользователь ' + name + u' вошёл в команду корабля' + u'\n' f.write(sms.encode("utf-8")) elif event_to_handle.action == 'exchange': name = unicode(event_to_handle.user) + self.addName(event_to_handle.user) torg = unicode(event_to_handle.objId) logger.info(u'Пользователь ' + name + u' произвёл обмен у торговца ' + torg) #logger.info(u"Пользователь %s произвёл обмен у торговца"% (event_to_handle.user)) with open('action_frends.txt', 'a') as f: sms = u'Пользователь ' + name + u' произвёл обмен у торговца ' + unicode(event_to_handle.objId) + u'\n' f.write(sms.encode("utf-8")) 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(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') 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
def addName(self, id): 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'' return name
def send(self, data): data = obj2dict(data) assert 'type' in data request = self.__factory.createRequest(data) return dict2obj(request.send(self.__connection))
Сдвинул вправо на 1 блок (4 пробела), пробовал также не сдвигать
PHP код:
# coding=utf-8 import logging from game_actors_and_handlers.base import BaseActor from game_state.game_types import GameApplyGiftEvent, GameGift from game_state.game_event import dict2obj, obj2dict import random as random_number import os.path import os import time logger = logging.getLogger(__name__)
class GiftReceiverBot(BaseActor): ''' Receives gifts
@param options: Available receive options:
with_messages: receive gifts with messages non_free: receive non-free gifts '''
def receive_all_gifts(self): gifts = list(set(self._get_game_state().get_state().gifts)) #gifts = [] #for i in gifts_one: # if not i in gifts: # gifts+=[i] # print dir(gifts[0]) #[ u'count', u'free', u'id', u'item', u'msg', u'type', u'user'] if len(gifts) > 0: logger.info(u"Доступно подарков: %s" % len(gifts)) for gift in list(gifts): self.receive_gift(gift)
def receive_gift(self, gift): item = self._get_item_reader().get(gift.item) gift_name = u'П ' + str(gift.count)+' '+item.name # подарок with_message = hasattr(gift, 'msg') and gift.msg != '' moved = hasattr(item, 'moved') and item.moved == True free = hasattr(gift, 'free') and gift.free if with_message: SMS = u" SMS: " + gift.msg + u"" #if u'Перрон' in gift.msg or u'перрон' in gift.msg or u'перон' in gift.msg: # sms_perron = u'id '+gift.user+u' SMS: '+gift.msg+"\n".encode("utf-8") # open('perron_log.txt', 'a').write(sms_perron.encode("utf-8")) else: SMS = u'' if moved: gift_name = u'В' + gift_name # выставляемый #logger.info(u"П"+gift_name[1:]+ u"' нужно поместить") if free and not moved: gift_name = u'Б' + gift_name # бесплатный gift_name = gift_name.ljust(22, ' ') gift_name += u" от " + gift.user gift_name = gift_name.ljust(47, ' ') #print gift_name if hasattr(self._get_game_state(), 'friends_names') and self._get_game_state().friends_names.get(gift.user) and self._get_game_state().friends_names.get(gift.user) != u'Без имени': gift_name += u"'" + self._get_game_state().friends_names.get(gift.user) + u"'" print gift_name.replace(u'\u0456', u'i').encode("cp866", "ignore") if SMS: print SMS.replace(u'\u0456', u'i').encode("cp866", "ignore")
#logger.info(u'' + gift_name) # Доступен CollIt=obj2dict(self._get_game_state().get_state().collectionItems) if not moved and gift.user != 'ACTIVE_NPC_LOVE': if (gift.item == '@CR_44') or (gift.item[1:] in CollIt.keys()) or free or self._get_options()["non_free"]: if (self._get_options()["with_messages"] or not with_message): #logger.info(u"Принимаю " + gift_name) apply_gift_event = GameApplyGiftEvent(GameGift(gift.id)) self._get_events_sender().send_game_events([apply_gift_event]) self._get_game_state().add_from_storage(gift.item,gift.count) if (gift.item[1:] in CollIt.keys()): CollIt[gift.item]=gift.count
#CR_01 Цемент #CR_06 Металл #CR_11 Доска #CR_16 Шестерня #CR_25 Стекло #CR_44 Мир #CR_70 Время
if 0:#отключено if free and (gift.item<>'@CR_44'): # мир #{"userIds":["85678136"],"type":"gifts","action":"sendFreeGifts","itemId":"CR_16","msg":"qwerty"} #{"action":"sendFreeGifts","itemId":"CR_11","userIds":["119482219"],"type":"gifts","msg":":3"} #{"userIds":[str(gift.user)],"type":"gifts","action":"sendFreeGifts","itemId":gift.item[1:],"msg":":3"} self._get_events_sender().send_game_events([{"userIds":[str(gift.user)],"type":"gifts","action":"sendFreeGifts","itemId":gift.item[1:],"msg":":3"}]) #self._get_events_sender().send_game_events([{"userId":[gift.user],"itemId":gift.item[1:],"type":"gifts","msg":"","action":"sendFreeGifts"}]) logger.info(u"Подарок от %s отправлен обратно: %s"%(gift.user,gift_name)) self.remove_gift_from_game_state(gift) self._get_game_state().get_state().collectionItems=dict2obj(CollIt)
def remove_gift_from_game_state(self, gift): for current_gift in list(self._get_game_state().get_state().gifts): if gift.id == current_gift.id: self._get_game_state().get_state().gifts.remove(current_gift) break
class AddGiftEventHandler(object): def __init__(self, game_state): self.__game_state = game_state
def handle(self, event): gift = event.gift self.append_gift_to_game_state(gift)
class CakesReceiverBot(BaseActor): def perform_action(self): # Пряники if not hasattr(self._get_game_state(), 'conifer_user'): try: with open('conifer_user.txt', 'r') as f: self._get_game_state().conifer_user = eval(f.read()) except: self._get_game_state().conifer_user = []
trees = self._get_game_location().\ get_all_objects_by_type('newYearTree') cakes_count = 0 for tree in trees: for i in tree.users: cakes_count += 1 self._get_game_state().conifer_user.append(i.id) apply_tree_event = {"type": "newYearTree", "action": "applyNewYearGift", "objId": tree.id, "index": 0} self._get_events_sender().send_game_events([apply_tree_event]) self._get_game_state().add_from_storage("@CAKE",1) tree.users = [] if cakes_count > 0: logger.info(u"Собрали %d пряников" % cakes_count) with open('conifer_user.txt', 'w') as f: f.write(str(self._get_game_state().conifer_user))
class FreeGifts(BaseActor):
def perform_action(self): # Дарение бесплатки
SMS = u'Привет Друзья!))' #
if not hasattr (self._get_game_state() , "playersInfo"): return 1 # создаём список с бесплатками freeGifts = [] for i in self._get_item_reader().get("FREE_GIFTS").freeGifts: if hasattr (i, u'endDate') and int(i.endDate) < long(time.time())*1000: continue freeGifts.append(i.item) #print 'freeGifts', freeGifts
# создаём список уже осчастливленных GU_go = [] for i in self._get_game_state().get_state().freeGiftUsers: GU_go.append(i.user) #print obj2dict(self._get_game_state().get_state().freeGiftUsers) #print 'GU_go', len(GU_go)
self._event = [] for playerInfo in self._get_game_state().playersInfo: if playerInfo.id in GU_go: continue wish = [] for w in playerInfo.liteGameState.wishlist: if w != None and (w in freeGifts): wish.append(w) if not wish: continue#wish.append('@CR_16') self._event.append({"userIds":[str(playerInfo.id)],"msg":SMS,"type":"gifts","action":"sendFreeGifts","itemId":random_number.choice(wish)[1:]}) self._get_game_state().get_state().freeGiftUsers.append(dict2obj({u'blockedUntil': u'86400000', u'user': playerInfo.id})) if len(self._event) > 499: self.events_send() self.events_send()
def events_send(self): if self._event != []: self._get_events_sender().send_game_events(self._event) if str(len(self._event))[-1:] == '1' and len(self._event) !=11: logger.info(u'Отослали бесплатку %s другу' % (len(self._event))) else: logger.info(u'Отослали бесплатку %s друзьям' % (len(self._event))) self._event = []
def perform_action(self): self.gift_id = "@CR_66" # подарок self.count = 15 # количество SMS = u'' # сообщение #users = self._get_options() # все друзья users = ['577535434622'] # друзья по списку #users = users[80:]
if not users: return if self.gift_id == "@CR_66": self.count = 15 # для металла, количество 10
storage = self._get_game_state().get_state().storageItems for object in storage: if object.item == self.gift_id: self.mat_count = object.count print self.gift_id, object.count break
self.event = [] for user in users: #"id":users.index(user)+1 self.event.append({"action":"sendGift","type":"gift","gift":{"count":self.count,"user":user,"item":self.gift_id,"msg":SMS}}) if user == users[0]: logger.info(u'Отправляем подарок '+str(self.gift_id)+' '+str(len(self.event))+u' раз '+str(len(self.event)*self.count)+u' штук') self._get_events_sender().send_game_events(self.event) object.count -= len(self.event)*self.count self.event = [] if len(self.event) > 19: self.events_send(users[0]) object.count -= len(self.event)*self.count self.events_send(users[0]) print raw_input('------------- END ---------------')
Модуль с прописанным весенним настроением, несколько версий пробовал, здесь люди выкладывали, безрезультатно, кстати, если оттуда все удалить, будет то же самое, как на скрине выше, то есть будто бот и не видит вовсе этого модуля, в чем может быть косяк?
premium_gifts.py
PHP код:
# coding=utf-8 import logging from game_actors_and_handlers.base import BaseActor from game_state.game_types import GameApplyGiftEvent, GameGift from game_state.game_event import dict2obj, obj2dict from game_state.game_types import GamePickPickup, GamePickItem, GamePickup from game_actors_and_handlers.base import BaseActor #from ctypes import windll import sys import time
location = self._get_game_state().get_game_loc().get_location_id() if location == location_id: gifts = list(set(self._get_game_state().get_state().gifts)) num = 0 for gift in gifts: if gift.item == specified_gift: for co in range(gift.count): next_id = self._get_game_state().get_state().gameObjects[-1].id + 1 apply_event={ "x":free_x, "y":free_y, "extraId":gift.id, "action":"applyCompGift", "itemId":specified_gift[1:], "type":"item", "objId":next_id } logger.info(u'Устанавливаем подарок со склада и по х...на все)Я Cheat Cheater') self._get_events_sender().send_game_events([apply_event]) #print u'Открываем подарок' open_event={"action":"pick","type":"item","objId":next_id} self._get_events_sender().send_game_events([open_event]) num += 1 #time.sleep(0.003) if not num % 600: time.sleep(2) break if num > 600: break self._get_game_state().get_state().gifts.remove(gift) logger.info(u" ------------------------------------ ") logger.info(u"Приняли и вскрыли "+str(num)+u" шт. "+specified_gift) logger.info(u" ------------------------------------ ")
""" #min_money = 1000000000 # оставляем денег ставим: {"events":[{"objId":14918,"x":99,"y":4,"extraId":204061,"type":"item","itemId":"@SNOWDROP_BOX18_1","action":"applyCompGift"}]} {"events":[{"objId":14919,"x":96,"y":5,"extraId":203891,"type":"item","itemId":"@SNOWDROP_BOX18_1","action":"applyCompGift"}]}
location = self._get_game_state().get_game_loc().get_location_id() if location == location_id: gifts = list(set(self._get_game_state().get_state().gifts)) num = 0 for gift in gifts: if gift.item == specified_gift: for co in range(gift.count): next_id = self._get_game_state().get_state().gameObjects[-1].id + 1 apply_event={ "x":free_x, "y":free_y, "extraId":gift.id, "action":"applyCompGift", "itemId":specified_gift[1:], "type":"item", "objId":next_id } print u'Устанавливаем подарок ', co self._get_events_sender().send_game_events([apply_event]) #print u'Открываем подарок' open_event={"action":"pick","type":"item","objId":next_id} self._get_events_sender().send_game_events([open_event]) num += 1 if not num % 500: time.sleep(2) break if num > 499: break self._get_game_state().get_state().gifts.remove(gift) logger.info(u" ------------------------------------ ") logger.info(u"Приняли и вскрыли "+str(num)+u" шт. "+specified_gift) logger.info(u" ------------------------------------ ")
Это пример, не обращай внимания на то что там зомбилетто прописано.
Последний раз редактировалось Warrior94; 11.03.2018 в 12:11.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Я мало понимаю в программировании вообще и в питоне в частности, так что с вопросами ко мне очень опасно обращаться До проблем с подключением модуля, я ещё не дорос)
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
[Ссылки могут видеть только зарегистрированные пользователи. ] для выставления и вскрытия весеннего. выставляет и вскрывает на всю свободную площадь острова. остров куда выставлять выбирается внутри модуля. модуль небезгрешен, писался давным давно ))
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от alser2
[Ссылки могут видеть только зарегистрированные пользователи. ] для выставления и вскрытия весеннего. выставляет и вскрывает на всю свободную площадь острова. остров куда выставлять выбирается внутри модуля. модуль небезгрешен, писался давным давно ))
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 _getUserInfo(self): ''' returns user info using vk api ''' # get vk user info api = vkontakte.api.API(token=self.__api_access_token) info = api.getProfiles( uids=self.__session.getUserId(), format='json', fields='bdate,sex,first_name,last_name,city,country') info = info[0] if 'bdate' in info: bdate = info['bdate'] else: bdate = None my_country = api.places.getCountryById(cids=int(info['country']))[0] info['country'] = my_country['name'] my_city = api.places.getCityById(cids=int(info['city']))[0] info['city'] = my_city['name'] game_info = GameInfo(city=info['city'], first_name=info['first_name'], last_name=info['last_name'], uid=long(info['uid']), country=info['country'], sex=long(info['sex']), bdate=bdate) print "UID: "+str(uid) return game_info
class GameState(BaseActor): #self.order = None def __init__(self, start_response, item_reader, curuser, friends): #self.__friendsid = self.__game_state_.get_state().friends self.__curuser = curuser self.__friends = friends self.order = None self.__item_reader = item_reader self.__game_state = start_response.state game_state_event = start_response.params.event self.set_game_loc(game_state_event) self.__player_brains = PlayerBrains(self.__game_state, self.get_game_loc(), item_reader) if not hasattr(self.__game_state,'rectsObjects'):self.__game_state.rectsObjects=[] compositions=GameCompositionReader() 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)
total_brain_count = self.__player_brains.get_total_brains_count() occupied_brain_count = self.__player_brains.get_occupied_brains_count() #logger.info("") #logger.info("Мозги: %d/%d" % (occupied_brain_count, total_brain_count)) cou = 0 for fgift in self.__game_state.freeGiftUsers: if fgift.blockedUntil > 0: cou+=1 #print str(obj2dict(fgift)) #if cou < 1: os.remove('countfnyt.txt') if not os.path.isfile('gameGIFT.txt'): open('gameGIFT.txt', 'a').write(str(cou)+"/"+str(len(self.__game_state.freeGiftUsers))+"\n") for fgift in self.__game_state.freeGiftUsers: open('gameGIFT.txt', 'a').write(str(obj2dict(fgift))+"\n") open('gameGIFT.txt', 'a').write(str(dir(self.__game_state))) open('gameSTATE.txt', 'w').write(str(obj2dict(self.__game_state))) if occupied_brain_count < total_brain_count: print u"Мозги: ", sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0004 | 0x0008) print "%d/%d" % (occupied_brain_count, total_brain_count) SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) sys.stdout.flush() else: print u"Мозги: %d/%d" % (occupied_brain_count, total_brain_count) x=0 z=0 for burySlot in self.__game_state.burySlots: x+=1 if (hasattr(burySlot, u"user") is True): z+=1 if z<x: print u"Использование слотов для закопки друзей: ", sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0004 | 0x0008) print "%d/%d" % (z,x) SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) sys.stdout.flush() else: print u"Слоты для закопки друзей: %d/%d" % (z,x) #self.cprint(u'4'+self.__curuser) os.system((u'title '+self.__curuser+u' Мозгов: ' + str(occupied_brain_count)+'/'+str(total_brain_count)+u' Слоты: '+str(z)+'/'+str(x)+u' Друзья: '+str(len(self.__game_state.freeGiftUsers))+"/"+str(self.__friends)+":"+str(cou)).encode('cp1251', 'ignore')) #logger.info("Использование слотов для закопки друзей: %d/%d" % (z,x)) 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 #logger.info(u"загружаем друзей") #self.__friendsid=self.__game_state_.get_state().friends print u"Уровень игрока: ", SetConsoleTextAttribute(stdout_handle, 0x0006 | 0x0008) print str(self.__game_state.level) SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) sys.stdout.flush() s='' for i in range(len(str(self.__game_state.gameMoney)),0,-3): if i>=3: s=str(self.__game_state.gameMoney)[i-3:i]+'.'+s else: s=str(self.__game_state.gameMoney)[:i]+'.'+s print u"Деньги игрока: ", sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0006 | 0x0008) print str(s[:-1]), SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) sys.stdout.flush() print u' монет' #logger.info("Деньги игрока: "+s[:-1]) #logger.info("") self.cprint(u'3Положил пряников сегодня:^7_%s'%(len(self.__game_state.remoteNewYear))) self.cprint(u'3Закопал Друзьям Чудика сегодня:^7_%s'%(len(self.__game_state.remoteMonsterPit))) self.cprint(u'3Удобрил друзьям деревья сегодня:^7_%s'%(len(self.__game_state.remoteFertilizeFruitTree)))
#def order(self): # return order def set_game_loc(self, game_state_event): self.__game_loc = GameLocation(self.__item_reader, game_state_event.location,game_state_event.gameObjects) for attr, val in game_state_event.__dict__.iteritems(): self.__game_state.__setattr__(attr, val) #self.get_game_loc().log_game_objects()
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
def count_in_storage(self, item_id): if os.path.isfile('storage.txt'): exif = 1 else: exif = 0 for itemid in self.__game_state.storageItems: if hasattr(itemid, "item"): if itemid.item == item_id: ret = itemid.count if exif == 0: #if itemid.item[:3] == "@S_":open('storage.txt', 'a').write(itemid.item.replace('@S_', 'P_')+": "+str(itemid.count)+"\n") try: name = self.__item_reader.get('P_'+itemid.item[3:]).name except: name = "N/A" open('storage.txt', 'a').write((name+": "+str(itemid.count)+"\t\t"+itemid.item+"\n").encode('utf-8', 'ignore')) #------------------------------------- #if itemid.item == item_id: ret = itemid.count try: return ret #print "##################################################" except: return 0
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
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 self.set_from_storage(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 if (location.locationId not in locations_nfree) and (location.locationId not in locations_nwalk): locations[name] = location print u'\t-\t'+location.locationId+'\t'+name else: if (location.locationId not in locations_nfree): print u'\t?\t'+location.locationId+'\t'+name else: print u'\t+\t'+location.locationId+'\t'+name if locations: print u'Находимся на острове:', print 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()
self.save_game_state(start_response) if hasattr(self.__game_state_.get_state(),'friends'): self.__friendsid=self.__game_state_.get_state().friends #GetMissionsBot(self.__itemReader, self.__game_state_, self.__game_events_sender, self._get_timer(),{}).perform_action()
self.select_location()
self.select_plant_seed()
self.select_recipe()
self.load_info_users()
self.create_all_actors()
# TODO send getMissions # TODO handle getMissions response
self.eventLoop() except urllib2.HTTPError, e: raise e except (socket.timeout, urllib2.HTTPError, urllib2.URLError): seconds = 3 logger.error('Timeout occurred, retrying in %s seconds...' % seconds) time.sleep(seconds) except (socket.error, ssl.SSLError) as e: seconds = 10 logger.error('Socket error occurred, retrying in %s seconds...' % seconds) time.sleep(seconds) except message_factory.GameError, e: if not self.__ignore_errors: raise e ############## def load_info_users(self): friends_copy = self.__friendsid[:] players = [] while len(friends_copy): players.append(friends_copy.pop()) if len(players) == 100: events = {"type":"players","id":3,"action":"getInfo","players":players} self.__game_events_sender.send_game_events([events]) self.handle_all_events() players = [] if players: events = {"type":"players","id":3,"action":"getInfo","players":players} self.__game_events_sender.send_game_events([events]) self.handle_all_events()
def add_users_info(self, event_to_handle): 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)) #time.sleep(2) ################
def save_game_state(self, start_response): # parse game state self.__game_state_ = GameState(start_response, self.__itemReader, self.__selected_curuser, len(self.__friendsid))
def eventLoop(self): ''' in a loop, every 30 seconds send EVT request handle EVT response ''' game_state = self.__game_state_ interval = 1 refresh_min = 5 seconds = interval ref_min = [] while(self.running()): if seconds >= interval: self.perform_all_actions() #logger.info('Ждем %d секунд'%interval) if hasattr(game_state, 'fdend'): #print "interval 20" interval = 1
seconds = 0 time.sleep(0.1) seconds += 0.1
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: pass#logger.info(u'Перезагрузка через %s минуту'%str(refresh_min-min)) elif ((refresh_min-min)>=2) and ((refresh_min-min)<=4):pass# 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 = [] break
def create_all_actors(self): self.__selected_loc_setting['modePassAllAccount'] = self.__selected_modePassAllAccount #print type(self.__selected_Friends) receive_options = {'with_messages': self.__receive_gifts_with_messages, 'non_free': self.__receive_non_free_gifts, 'from_admin': self.__receive_admin_gifts, 'users': self.__friendsid} options = {'GiftReceiverBot': receive_options, 'GameBrains1': self.__selected_brains_count, 'SeederBot': [self.__selected_SeedMode, self.__selected_seed], 'CookerBot': self.__selected_recipe, 'ChangeLocationBot': self.__selected_location, 'ChangeLocationBot': {'modePassAllAccount':self.__selected_modePassAllAccount}, #'VisitingUsers' : str(self.__friendsid)+str(self.__selected_Friends), 'DigBot':self.__selected_Burrowing, 'SellBot':{'sell_item':self.__selected_sell,'send_user':self.__selected_send}, 'ChangeLocationBot':self.__selected_loc_setting, #'PremiumGifts':self.__selected_PremiumGifts } events_sender = self.__game_events_sender timer = self._get_timer() item_reader = self.__itemReader game_state = self.__game_state_ actor_classes1 = [ DigBot, #0 Работа с мозгами StoragePut, #1 выставление сосклада барахло ExhangeCollEmerald, #2 создание изумрудной BowReceiverBot, #3 сбор бантов Emeraldic, #4 создание луксорской GameBrains1, #5 создание коллекций и мозгов GameBrains, #6 производство мозгов (останкинобкорабль) GetMissionsBot, #7 Запрос выполнения миссий MonsterPit, #8 Закапывание чуда #VisitingUsers, #9 Посещение друзей GameBuffHarvest, #10 Приём супер урожая GameBuffDigger, #11 Приём супер-поиск GameBuffFixCook, #12 Прием минутки на день WoodPicker, #13 Сбор дерева StonePicker, #14 Сбор камня BrewPicker, #15 Сбор сваренного BagsPicker, #16 Сбор сумок WoodTargetSelecter, #17 Отправка работать дровосекам StoneTargetSelecter, #18 Отправка работать камнетёсов CookerBot, #19 Работа с поварами (подъем из могил, установка рецептов) CookSpeed, #20 Посолить рецепты FertilBot, #21 Удобрение деревьев HarvesterBot, #22 Сбор чего либо + вскапывание грядок CakesReceiverBot, #23 Сбор пряников SeederBot, #24 Посейка GiftReceiverBot, #25 Принятие подарков BoxPickuper, #26 Вскрытие чего либо PiratePut, #27 Выставление любого барахла со склада RouletteRoller, #28 Кручение рулеток FrutRouletteRoller, #29 Кручение фруктовых рулеток UseEggItemBot, #30 Бить яйца ;) MagicWand, #31 Добыча ресурсов палочками ExchangeKruger, #32 Создаем коллекцию фреди в изумрудной мельнице ExchangeMummy, #33 Создаем коллекцию мумии в изумрдуном маяке Pickuper, #34 Сбор дропа SellBot, #35 Продажа чего либо TraderWork, #36 Торговцы BuildingBuyer, #37 Покупаем, продаем ракету HarvestExchange, #38 создаем деньги в БЦ PirateTreeCut, #39 рубка на острове сокровищ Exchange_Collection, #40 обмен коллекции(любая) MoveItem, #41 воровать вещи с острова(не актуально) TreePlant, #42 Посадка деревьев BuildingTrack, #43 покупка настилов(не актуально) CreateShovelExtra, #44 Создание лопат в Глаз-алмаз DeletingObjects, #45 Удаление объектов BoltGift, #46 передача другу чего либо ExchangeCollections, #47 Torgovec, #48 ChangeLocationBot, #49 Переход по локациям SeederBotMy, #50 FreeGifts, #51 TiketReceiverBot, #52 обнова корзин Vesennee, # Выставление весеннего настроения ] br = 0 if self.__selected_Burrowing == None: print u'Никого не закапывать' del actor_classes1[0] br = 1 else: self.__selected_Actors.insert(0, 0) #else: print str(self.__selected_Burrowing) #print str(self.__selected_SeedMode)+" "+str(self.__selected_seed) actor_classes = [] if self.__selected_Actors != None: for ator in self.__selected_Actors: actor_classes.append(actor_classes1[ator-br]) else: actor_classes = actor_classes1 #print self.__selected_Actors self.__actors = [] for actor_class in actor_classes: self.__actors.append( actor_class(item_reader, game_state, events_sender, timer, options))
def perform_all_actions(self): game_state = self.__game_state_ #print str(self.__selected_Friends) options = {'VisitingUsers' : [[self.__selected_curuser, self.__uid, self.__friendsid], self.__selected_Friends]} events_sender = self.__game_events_sender timer = self._get_timer() item_reader = self.__itemReader ''' Assumes that create_all_actors is called before ''' if not hasattr(game_state, 'fdend'): #print '######### VisitingUsers #########' VisitingUsers(item_reader, game_state, events_sender, timer, options).perform_action() else: #print '######## perform_all_actions #######' #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,'tmpall')and len(game_state.tmpall)>0: for i in game_state.tmpall.keys(): if i != u'денег' and i != u'опыта': SetConsoleTextAttribute(stdout_handle, 0x0005 | 0x0008) print u' Подобрали ', sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0007 | 0x0008) print game_state.tmpall[i], sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0003 | 0x0008) print i sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) del game_state.tmpall if hasattr(game_state,'getcoins') and game_state.getcoins > 0: SetConsoleTextAttribute(stdout_handle, 0x0005 | 0x0008) print u'Подобрали: ', sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0006 | 0x0008) print str(game_state.getcoins), sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) print u'монет' del game_state.getcoins if hasattr(game_state,'getxp') and game_state.getxp > 0: SetConsoleTextAttribute(stdout_handle, 0x0005 | 0x0008) print u'Подобрали: ', sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0006 | 0x0008) print str(game_state.getxp), sys.stdout.flush() SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008) print u'опыта' del game_state.getxp #raw_input()
def handle_all_events(self): 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 == 'addGift': AddGiftEventHandler(self.get_game_state()).handle(event_to_handle) if event_to_handle.type == 'alert': #print event_to_handle.msg if event_to_handle.msg == 'SERVER_NEW_YEAR_GIFT_NOT_ALLOW': self.__game_state_.nyna = 1 elif event_to_handle.msg == 'SERVER_REMOTE_TREASURE_ALL_DIGGED': self.__game_state_.alldigged = 1 elif event_to_handle.msg == 'SERVER_TREASURE_FOUND':#нашел секретный клад print u'НАЙДЕН СЕКРЕТНЫЙ КЛАД!!!' self.__game_state_.treasfound = 1 elif event_to_handle.msg == 'SERVER_REMOTE_TREASURE_NO_TRIES':#Кончились лопаты self.__game_state_.treasnotries = 1 elif event_to_handle.msg == 'SERVER_NO_BRAINS':#Не хватает мозгов self.__game_state_.nobrains = 1 elif event_to_handle.msg == 'SERVER_REMOTE_FERTILIZE_FRUIT_TREE_NOT_FOUND':#Не найдены деревья для удобрения self.__game_state_.fertilizenot = 1 elif event_to_handle.msg == 'SERVER_MONSTER_PIT_DIG_OK':#Закопали мишуту self.__game_state_.monsterpitok = 1 elif event_to_handle.msg == 'SERVER_MONSTER_PIT_INCORRECT_INSTRUMENT':#мишуту можно закопать только за баксы self.__game_state_.monsterpitincorrect = 1 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 # print event_to_handle.action 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: 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': 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.action == 'getInfo': # and event_to_handle.type == 'playersInfo': self.add_users_info(event_to_handle) elif event_to_handle.type == 'monsterPitDigEvent': name = unicode(event_to_handle.user) + self.addName(event_to_handle.user) logger.info(u'Пользователь ' + name + u' закопал нам медведя') #logger.info(u"Пользователь %s закопал нам медведя"% (event_to_handle.user)) with open('action_frends.txt', 'a') as f: sms = u'Пользователь ' + name + u' закопал нам медведя' + u'\n' f.write(sms.encode("utf-8")) elif event_to_handle.type == 'pirateShip': name = unicode(event_to_handle.user) + self.addName(event_to_handle.user) logger.info(u'Пользователь ' + name + u' вошёл в команду корабля') #logger.info(u"Пользователь %s вошёл в команду корабля"% (event_to_handle.user)) with open('action_frends.txt', 'a') as f: sms = u'Пользователь ' + name + u' вошёл в команду корабля' + u'\n' f.write(sms.encode("utf-8")) elif event_to_handle.action == 'exchange': name = unicode(event_to_handle.user) + self.addName(event_to_handle.user) torg = unicode(event_to_handle.objId) logger.info(u'Пользователь ' + name + u' произвёл обмен у торговца ' + torg) #logger.info(u"Пользователь %s произвёл обмен у торговца"% (event_to_handle.user)) with open('action_frends.txt', 'a') as f: sms = u'Пользователь ' + name + u' произвёл обмен у торговца ' + unicode(event_to_handle.objId) + u'\n' f.write(sms.encode("utf-8")) 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(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') 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
def addName(self, id): 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'' return name
def send(self, data): data = obj2dict(data) assert 'type' in data request = self.__factory.createRequest(data) return dict2obj(request.send(self.__connection))
# coding=utf-8 import logging import time from game_actors_and_handlers.base import BaseActor
logger = logging.getLogger(__name__)
class Vesennee(BaseActor):
def perform_action(self):
plant_tree = { #u'main':u'SNOWDROP_BOX18_1', # Домашний (Вписать код открываемого объекта SNOWDROP_BOX1) #u'isle_03':u'SNOWDROP_BOX18_1', # Любви #u'isle_02':u'SNOWDROP_BOX18_1', # Майя #u'isle_x':u'SNOWDROP_BOX18_1', # X #u'isle_faith':u'SNOWDROP_BOX18_1', # Веры #u'isle_hope':u'SNOWDROP_BOX18_1', # Надежды #u'isle_scary':u'SNOWDROP_BOX18_1', # Страшный #u'isle_alpha':u'SNOWDROP_BOX18_1', # Альфа u'isle_omega':u'SNOWDROP_BOX18_1', # Омега #u'isle_sand':u'SNOWDROP_BOX18_1', # Песочный #u'isle_polar':u'SNOWDROP_BOX18_1', # Полярной ночи #u'isle_wild':u'SNOWDROP_BOX1', # Дремучий #u'isle_mobile':u'SNOWDROP_BOX18_1', # Мобильный #u'isle_ufo':u'SNOWDROP_BOX18_1', # НЛО #u'isle_dream':u'SNOWDROP_BOX1', # Мечты #u'isle_scarecrow':u'SNOWDROP_BOX18_1', # Пик Админа #u'isle_elephant':u'SNOWDROP_BOX18_1', # Ужасный #u'isle_emerald':u'SNOWDROP_BOX18_1', # Город Призрак #u'isle_monster':u'SNOWDROP_BOX18_1', # Чудовища #u'isle_halloween':u'SNOWDROP_BOX18_1', # Лысая гора # ############### Платные ############### # #u'isle_01':u'SNOWDROP_BOX18_1', # Секретный #u'isle_small':u'SNOWDROP_BOX18_1', # Маленькой ёлочки #u'isle_star':u'SNOWDROP_BOX18_1', # Звездный #u'isle_large':u'SNOWDROP_BOX18_1', # Большой ёлки #u'isle_moon':u'SNOWDROP_BOX18_1', # Лунный #u'isle_giant':u'SNOWDROP_BOX18_1', # Гигантов #u'isle_xxl':u'SNOWDROP_BOX18_1', # Огромной ёлки #u'isle_desert':u'SNOWDROP_BOX18_1', # Необитаемый } current_loc = self._get_game_state().get_location_id() if not current_loc in plant_tree:return 1 need = plant_tree [current_loc] specified_gift = '@SNOWDROP_BOX18_1' # Весеннее настроение (Вписать код открываемого объекта) objects = self._get_game_state().get_free_spases().newObject(need) need = self._get_item_reader().get(need) buy = [] opened = [] opened1 = [] count = 0 if not hasattr(self._get_game_state(), 'vesennee'): t = 0 else: t = self._get_game_state().vesennee gifts = list(set(self._get_game_state().get_state().gifts)) for obj in objects: for gift in gifts: if gift.item == specified_gift: if t == 0: t = gift.count apply_event={ "x":obj.x, "y":obj.y, "extraId":gift.id, "action":"applyCompGift", "itemId":specified_gift[1:], "type":"item", "objId":obj.id } buy.append(apply_event) open_event={"action":"pick","type":"item","objId":obj.id} opened.append(open_event) t -=1 if t == 0: self._get_game_state().get_state().gifts.remove(gift) gifts = list(set(self._get_game_state().get_state().gifts)) break if len(buy) > 0: self._get_events_sender().send_game_events(buy) time.sleep(3) logger.info(u'Выставили %d %s'%(len(buy),need.name)) if len(opened) > 300: for ev in opened: opened1 = opened[:300] self._get_events_sender().send_game_events(opened1) print u' \rОткрываем: '+str(count), count += 300 del opened[:300] else: self._get_events_sender().send_game_events(opened) print u'' self._get_events_sender().send_game_events(opened) print u'' logger.info(u'Открыли %d %s'%(len(buy),need.name)) if not hasattr(self._get_game_state(), 'vesennee'): self._get_game_state().vesennee = t else: self._get_game_state().vesennee = t
gifts.py
PHP код:
# coding=utf-8 import logging from game_actors_and_handlers.base import BaseActor from game_state.game_types import GameApplyGiftEvent, GameGift from game_state.game_event import dict2obj, obj2dict import random as random_number import os.path import os import time logger = logging.getLogger(__name__)
class GiftReceiverBot(BaseActor): ''' Receives gifts
@param options: Available receive options:
with_messages: receive gifts with messages non_free: receive non-free gifts '''
def receive_all_gifts(self): gifts = list(set(self._get_game_state().get_state().gifts)) #gifts = [] #for i in gifts_one: # if not i in gifts: # gifts+=[i] # print dir(gifts[0]) #[ u'count', u'free', u'id', u'item', u'msg', u'type', u'user'] if len(gifts) > 0: logger.info(u"Доступно подарков: %s" % len(gifts)) for gift in list(gifts): self.receive_gift(gift)
def receive_gift(self, gift): item = self._get_item_reader().get(gift.item) gift_name = u'П ' + str(gift.count)+' '+item.name # подарок with_message = hasattr(gift, 'msg') and gift.msg != '' moved = hasattr(item, 'moved') and item.moved == True free = hasattr(gift, 'free') and gift.free if with_message: SMS = u" SMS: " + gift.msg + u"" #if u'Перрон' in gift.msg or u'перрон' in gift.msg or u'перон' in gift.msg: # sms_perron = u'id '+gift.user+u' SMS: '+gift.msg+"\n".encode("utf-8") # open('perron_log.txt', 'a').write(sms_perron.encode("utf-8")) else: SMS = u'' if moved: gift_name = u'В' + gift_name # выставляемый #logger.info(u"П"+gift_name[1:]+ u"' нужно поместить") if free and not moved: gift_name = u'Б' + gift_name # бесплатный gift_name = gift_name.ljust(22, ' ') gift_name += u" от " + gift.user gift_name = gift_name.ljust(47, ' ') #print gift_name if hasattr(self._get_game_state(), 'friends_names') and self._get_game_state().friends_names.get(gift.user) and self._get_game_state().friends_names.get(gift.user) != u'Без имени': gift_name += u"'" + self._get_game_state().friends_names.get(gift.user) + u"'" print gift_name.replace(u'\u0456', u'i').encode("cp866", "ignore") if SMS: print SMS.replace(u'\u0456', u'i').encode("cp866", "ignore")
#logger.info(u'' + gift_name) # Доступен CollIt=obj2dict(self._get_game_state().get_state().collectionItems) if not moved and gift.user != 'ACTIVE_NPC_LOVE': if (gift.item == '@CR_44') or (gift.item[1:] in CollIt.keys()) or free or self._get_options()["non_free"]: if (self._get_options()["with_messages"] or not with_message): #logger.info(u"Принимаю " + gift_name) apply_gift_event = GameApplyGiftEvent(GameGift(gift.id)) self._get_events_sender().send_game_events([apply_gift_event]) self._get_game_state().add_from_storage(gift.item,gift.count) if (gift.item[1:] in CollIt.keys()): CollIt[gift.item]=gift.count
#CR_01 Цемент #CR_06 Металл #CR_11 Доска #CR_16 Шестерня #CR_25 Стекло #CR_44 Мир #CR_70 Время
if 0:#отключено if free and (gift.item<>'@CR_44'): # мир #{"userIds":["85678136"],"type":"gifts","action":"sendFreeGifts","itemId":"CR_16","msg":"qwerty"} #{"action":"sendFreeGifts","itemId":"CR_11","userIds":["119482219"],"type":"gifts","msg":":3"} #{"userIds":[str(gift.user)],"type":"gifts","action":"sendFreeGifts","itemId":gift.item[1:],"msg":":3"} self._get_events_sender().send_game_events([{"userIds":[str(gift.user)],"type":"gifts","action":"sendFreeGifts","itemId":gift.item[1:],"msg":":3"}]) #self._get_events_sender().send_game_events([{"userId":[gift.user],"itemId":gift.item[1:],"type":"gifts","msg":"","action":"sendFreeGifts"}]) logger.info(u"Подарок от %s отправлен обратно: %s"%(gift.user,gift_name)) self.remove_gift_from_game_state(gift) self._get_game_state().get_state().collectionItems=dict2obj(CollIt)
def remove_gift_from_game_state(self, gift): for current_gift in list(self._get_game_state().get_state().gifts): if gift.id == current_gift.id: self._get_game_state().get_state().gifts.remove(current_gift) break
class AddGiftEventHandler(object): def __init__(self, game_state): self.__game_state = game_state
def handle(self, event): gift = event.gift self.append_gift_to_game_state(gift)
class CakesReceiverBot(BaseActor): def perform_action(self): # Пряники if not hasattr(self._get_game_state(), 'conifer_user'): try: with open('conifer_user.txt', 'r') as f: self._get_game_state().conifer_user = eval(f.read()) except: self._get_game_state().conifer_user = []
trees = self._get_game_location().\ get_all_objects_by_type('newYearTree') cakes_count = 0 for tree in trees: for i in tree.users: cakes_count += 1 self._get_game_state().conifer_user.append(i.id) apply_tree_event = {"type": "newYearTree", "action": "applyNewYearGift", "objId": tree.id, "index": 0} self._get_events_sender().send_game_events([apply_tree_event]) self._get_game_state().add_from_storage("@CAKE",1) tree.users = [] if cakes_count > 0: logger.info(u"Собрали %d пряников" % cakes_count) with open('conifer_user.txt', 'w') as f: f.write(str(self._get_game_state().conifer_user))
class FreeGifts(BaseActor):
def perform_action(self): # Дарение бесплатки
SMS = u'Привет Друзья!))' #
if not hasattr (self._get_game_state() , "playersInfo"): return 1 # создаём список с бесплатками freeGifts = [] for i in self._get_item_reader().get("FREE_GIFTS").freeGifts: if hasattr (i, u'endDate') and int(i.endDate) < long(time.time())*1000: continue freeGifts.append(i.item) #print 'freeGifts', freeGifts
# создаём список уже осчастливленных GU_go = [] for i in self._get_game_state().get_state().freeGiftUsers: GU_go.append(i.user) #print obj2dict(self._get_game_state().get_state().freeGiftUsers) #print 'GU_go', len(GU_go)
self._event = [] for playerInfo in self._get_game_state().playersInfo: if playerInfo.id in GU_go: continue wish = [] for w in playerInfo.liteGameState.wishlist: if w != None and (w in freeGifts): wish.append(w) if not wish: continue#wish.append('@CR_16') self._event.append({"userIds":[str(playerInfo.id)],"msg":SMS,"type":"gifts","action":"sendFreeGifts","itemId":random_number.choice(wish)[1:]}) self._get_game_state().get_state().freeGiftUsers.append(dict2obj({u'blockedUntil': u'86400000', u'user': playerInfo.id})) if len(self._event) > 499: self.events_send() self.events_send()
def events_send(self): if self._event != []: self._get_events_sender().send_game_events(self._event) if str(len(self._event))[-1:] == '1' and len(self._event) !=11: logger.info(u'Отослали бесплатку %s другу' % (len(self._event))) else: logger.info(u'Отослали бесплатку %s друзьям' % (len(self._event))) self._event = []
def perform_action(self): self.gift_id = "@CR_66" # подарок self.count = 15 # количество SMS = u'' # сообщение #users = self._get_options() # все друзья users = ['577535434622'] # друзья по списку #users = users[80:]
if not users: return if self.gift_id == "@CR_66": self.count = 15 # для металла, количество 10
storage = self._get_game_state().get_state().storageItems for object in storage: if object.item == self.gift_id: self.mat_count = object.count print self.gift_id, object.count break
self.event = [] for user in users: #"id":users.index(user)+1 self.event.append({"action":"sendGift","type":"gift","gift":{"count":self.count,"user":user,"item":self.gift_id,"msg":SMS}}) if user == users[0]: logger.info(u'Отправляем подарок '+str(self.gift_id)+' '+str(len(self.event))+u' раз '+str(len(self.event)*self.count)+u' штук') self._get_events_sender().send_game_events(self.event) object.count -= len(self.event)*self.count self.event = [] if len(self.event) > 19: self.events_send(users[0]) object.count -= len(self.event)*self.count self.events_send(users[0]) print raw_input('------------- END ---------------')
def space(self, location, need,submap=[]): for obj in self._get_game_state().get_state().rectsObjects: if str(need.objAnim[0])== str(obj.objAnim): need.w = int(obj.rects.rectW) need.h = int(obj.rects.rectH) crd, bad_crd = self.get_coords(location, submap) obj_cache = {} space_crd = [] #перебор объектов на острове objects = self._get_game_location().get_game_objects() for object in list(objects): if not hasattr(object, 'x') or not hasattr(object, 'item'):continue reader_object=self._get_item_reader().get(object.item) x = object.x y = object.y if object.rotate==0:ob_anim=reader_object.objAnim[0] else:ob_anim=reader_object.objAnim[1] if not object.item in obj_cache: object_item = self._get_item_reader().get(object.item) obj_cache[object.item] = object_item else:object_item = obj_cache[object.item] for rect in self._get_game_state().get_state().rectsObjects: if ob_anim== rect.objAnim: h=int(rect.rects.rectH) if int(rect.rects.rectX) < 0: x = int(x) + int(rect.rects.rectX) w = int(rect.rects.rectW) + int(rect.rects.rectX)*-1 else:w = int(rect.rects.rectW) + int(rect.rects.rectX) if int(rect.rects.rectY) < 0: y = int(y) + int(rect.rects.rectY) h = int(rect.rects.rectH) + int(rect.rects.rectY)*-1 else:h = int(rect.rects.rectH) + int(rect.rects.rectY) for ix in range(w): for iy in range(h): k = str(int(x) + ix)+''+str(int(y) + iy) if not k in bad_crd:bad_crd.append(k) W = crd['x2'] - crd['x1'] - need.w + 2 H = crd['y2'] - crd['y1'] - need.h + 2 for iw in range(W): iw += crd['x1'] for ih in range(H): ih += crd['y1'] if (str(iw)+''+str(ih)) in bad_crd:continue good = 1 add = [] for ix in range(need.w): for iy in range(need.h): k = str(iw+ix)+''+str(ih+iy) if k in bad_crd: #занято good = 0 break else:add.append(k) if good == 0:break if good == 1: space_crd.append(str(iw)+''+str(ih)) bad_crd.extend(add) return space_crd
def get_coords(self, ostrov, submap=[]): submap = [ #u'снизу от дороги', u'сверху от дороги', #u'за забором', #u'на горе' ] # Map world Домашний if(ostrov in ['main']): map = [ str(i)+''+str(j) for i in range(48,62) for j in range(12,48)] add = [ str(i)+''+str(j) for i in range(54,60) for j in range(48,100)] map.extend(add) add = [ str(i)+''+str(j) for i in range(62,112) for j in range(30,48)] map.extend(add) add = [ str(i)+''+str(j) for i in range(14,62) for j in range(0,12)] map.extend(add) add = [ str(i)+''+str(j) for i in range(112,128) for j in range(30,112)] map.extend(add) if submap != []: if not u'снизу от дороги' in submap: add = [ str(i)+''+str(j) for i in range(14,54) for j in range(48,100)] map.extend(add) if not u'сверху от дороги' in submap: add = [ str(i)+''+str(j) for i in range(60,112) for j in range(48,100)] map.extend(add) if not u'за забором' in submap: add = [ str(i)+''+str(j) for i in range(14,48) for j in range(12,48)] map.extend(add) if not u'на горе' in submap: add = [ str(i)+''+str(j) for i in range(62,128) for j in range(0,30)] map.extend(add) return {'x1':14, 'x2':127, 'y1':0, 'y2':99}, map
# Map isle_01 Веры, Мечты if(ostrov in ['isle_dream', 'isle_faith']): map = [ str(i)+''+str(j) for i in range(14,16) for j in range(14,16)] add = [ str(i)+''+str(j) for i in range(12,14) for j in range(14,64)] map.extend(add) add = [ str(i)+''+str(j) for i in range(12,18) for j in range(74,76)] map.extend(add) add = [ str(i)+''+str(j) for i in range(40,82) for j in range(74,76)] map.extend(add) add = [ str(i)+''+str(j) for i in range(82,84) for j in range(72,76)] map.extend(add) add = [ str(i)+''+str(j) for i in range(82,84) for j in range(14,22)] map.extend(add) return {'x1':12, 'x2':83, 'y1':14, 'y2':75}, map
# Map isle_02 Альфа, Омега, Пик Админа, Ужасный, Чудовища, Майя, звёздный, гигантов if(ostrov in ['isle_alpha', 'isle_omega', 'isle_scarecrow', 'isle_elephant', 'isle_monster', 'isle_02', 'isle_star', 'isle_giant']): map = [ str(i)+''+str(j) for i in range(10,12) for j in range(10,12)] add = [ str(i)+''+str(j) for i in range(10,12) for j in range(42,44)] map.extend(add) add = [ str(i)+''+str(j) for i in range(42,44) for j in range(42,44)] map.extend(add) add = [ str(i)+''+str(j) for i in range(42,44) for j in range(10,12)] map.extend(add) return {'x1':10, 'x2':43, 'y1':10, 'y2':43}, map
# Map isle_04 Надежды, Страшный if(ostrov in ['isle_hope', 'isle_scary']): map = [ str(i)+''+str(j) for i in range(12,14) for j in range(12,14)] add = [ str(i)+''+str(j) for i in range(46,50) for j in range(12,14)] map.extend(add) add = [ str(i)+''+str(j) for i in range(48,50) for j in range(34,42)] map.extend(add) add = [ str(i)+''+str(j) for i in range(48,50) for j in range(72,74)] map.extend(add) add = [ str(i)+''+str(j) for i in range(12,20) for j in range(72,74)] map.extend(add) return {'x1':12, 'x2':49, 'y1':12, 'y2':73}, map
# Map isle_05 Город-призрак, Секретный if(ostrov in ['isle_emerald', 'isle_01']): map = [ str(i)+''+str(j) for i in range(16,20) for j in range(12,16)] add = [ str(i)+''+str(j) for i in range(70,72) for j in range(30,38)] map.extend(add) add = [ str(i)+''+str(j) for i in range(70,72) for j in range(70,72)] map.extend(add) add = [ str(i)+''+str(j) for i in range(16,18) for j in range(64,72)] map.extend(add) return {'x1':16, 'x2':71, 'y1':12, 'y2':71}, map
# Map isle_snow1 Дремучий, Мобильный, Маленькой ёлочки, Огромной ёлки if(ostrov in ['isle_wild', 'isle_mobile', 'isle_small', 'isle_xxl']): map = [ str(i)+''+str(j) for i in range(8,12) for j in range(6,8)] add = [ str(i)+''+str(j) for i in range(8,10) for j in range(8,10)] map.extend(add) add = [ str(i)+''+str(j) for i in range(42,46) for j in range(6,8)] map.extend(add) add = [ str(i)+''+str(j) for i in range(44,46) for j in range(8,10)] map.extend(add) add = [ str(i)+''+str(j) for i in range(44,46) for j in range(42,46)] map.extend(add) add = [ str(i)+''+str(j) for i in range(42,44) for j in range(44,46)] map.extend(add) add = [ str(i)+''+str(j) for i in range(8,10) for j in range(44,46)] map.extend(add) return {'x1':8, 'x2':45, 'y1':6, 'y2':45}, map
# Map isle_snow2 Полярной ночи, НЛО, Лысая гора, Большой ёлки, Лунный, Вишнёвый if(ostrov in ['isle_polar', 'isle_ufo', 'isle_halloween', 'isle_large', 'isle_moon', 'isle_light']): map = [ str(i)+''+str(j) for i in range(8,12) for j in range(6,10)] add = [ str(i)+''+str(j) for i in range(8,10) for j in range(44,46)] map.extend(add) add = [ str(i)+''+str(j) for i in range(42,46) for j in range(44,46)] map.extend(add) add = [ str(i)+''+str(j) for i in range(44,46) for j in range(42,44)] map.extend(add) add = [ str(i)+''+str(j) for i in range(42,46) for j in range(6,8)] map.extend(add) add = [ str(i)+''+str(j) for i in range(44,46) for j in range(8,10)] map.extend(add) return {'x1':8, 'x2':45, 'y1':6, 'y2':45}, map
# Map un_09 Склад Хакера if(ostrov in ['un_09']): map = [ str(i)+''+str(j) for i in range(14,38) for j in range(14,16)] add = [ str(i)+''+str(j) for i in range(46,52) for j in range(14,16)] map.extend(add) add = [ str(i)+''+str(j) for i in range(12,14) for j in range(14,18)] map.extend(add) add = [ str(i)+''+str(j) for i in range(50,52) for j in range(16,28)] map.extend(add) add = [ str(i)+''+str(j) for i in range(50,52) for j in range(42,74)] map.extend(add) add = [ str(i)+''+str(j) for i in range(12,14) for j in range(64,74)] map.extend(add) return {'x1':12, 'x2':51, 'y1':14, 'y2':73}, map
P.S. в общем получилось запустить PremiumGifts, там все работает.
Последний раз редактировалось Warrior94; 12.03.2018 в 18:27.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Gill.V
А мой вопрос снова проигнорили(( Что никого из Украины здесь нет?
Я не специалист, попробуйте зайти в вк через браузер файрфокс, а потом скопируйте нужные куки в сеттингс.ини. Возможно это поможет в качестве временной меры
Есть вероятность, что вк просит ввести капчу, а как бот взаимодействует с ней, я не имею ни малейшего понятия.