Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Всем привет
У кого есть модуль для:
1.Создания Изум в Планетарии
2.Выганять Торгов на роботу.....
И сразу же,Есть ли у кого ботик для клондайка?Самый обекнавеный но на Питоне)
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Сергійко
Всем привет
У кого есть модуль для:
1.Создания Изум в Планетарии
2.Выганять Торгов на роботу.....
И сразу же,Есть ли у кого ботик для клондайка?Самый обекнавеный но на Питоне)
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Инфа о юзере не полная. Нет имени в .liteGameState.playerSettings.userName, точнее нет всего раздела playerSettings
Сначала нужно проверять есть ли атрибут playerSettings.
PHP код:
if player.id==frend_users and hasattr(player.liteGameState, 'playerSettings'): username=player.liteGameState.playerSettings.userName
Я там имя вообще не беру, беру только зомбоимя в .name а не .liteGameState.playerSettings.userName
По крайней мере в мире, сколько не смотрел эти поля всегда одинаковые.
По идее первое должно хранить имя аккаунта, а второе имя в игре. Но почему у меня дублят я не понял. Полное имя беру из прямых запросов к миру, а не игре.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от vintets
Инфа о юзере не полная. Нет имени в .liteGameState.playerSettings.userName, точнее нет всего раздела playerSettings
Сначала нужно проверять есть ли атрибут playerSettings.
PHP код:
if player.id==frend_users and hasattr(player.liteGameState, 'playerSettings'): username=player.liteGameState.playerSettings.userName
Я там имя вообще не беру, беру только зомбоимя в .name а не .liteGameState.playerSettings.userName
По крайней мере в мире, сколько не смотрел эти поля всегда одинаковые.
По идее первое должно хранить имя аккаунта, а второе имя в игре. Но почему у меня дублят я не понял. Полное имя беру из прямых запросов к миру, а не игре.
Спасибо Vint! все работает, но опять вылезла ошибочка, судя по ней с кодировкой что то не так... Как это можно починить?
кодировка не помогла((
PHP код:
self.cprint(u'22----------^7_ИДЁМ К ДРУГУ^6_%s^4_ник:"%s"^22--------— ^7_%d/%d'%(frend_users, unicode(username).encode('cp866', 'replace').decode('cp866'), self._get_game_state().countfnyt, len(friends)))
Последний раз редактировалось Cheater-84; 02.03.2015 в 17:25.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Да, там имена нужно фильтровать. Особенно часто спотыкалось на украинской букве 'i' Ещё всякие кресты/звёздочки и прочие украшательства.
Я фильтрую в самом начале при занесении в базу. Это когда имена в файл писал, чтобы потом при чтении eval-ом легко преобразовывать и скобки в именах не мешали.
PHP код:
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
А так при доставании все другие ошибки отсекал.
PHP код:
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
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось vintets; 03.03.2015 в 10:02.
def money(self):
return self._get_game_state().get_state().gameMoney
def craft_item_count(self,item):
if item=="@COINS": return self.money()
if item.startswith("@C_"):
item_lstrip=item.lstrip('@')
collectionItems = self._get_game_state().get_state().collectionItems
return 0L if not hasattr(collectionItems,item_lstrip) else getattr(collectionItems,item_lstrip)
return self._get_game_state().count_in_storage(item)
def add_crafted_item(self,item,count):
if item=="@COINS":
self._get_game_state().get_state().gameMoney+=count
return
if item.startswith("@C_"):
item_lstrip=item.lstrip('@')
collectionItems = self._get_game_state().get_state().collectionItems
has = 0L if not hasattr(collectionItems,item_lstrip) else getattr(collectionItems,item_lstrip)
setattr(collectionItems,item_lstrip,has+count)
self._get_game_state().add_from_storage(item, count)
def get_building_craft(self,building,craft_id):
return filter(lambda(obj):obj.id == craft_id,self._get_item_reader().get(building).crafts)[0]
def craft_available(self,building,craft_id):
craft = self.get_building_craft(building,craft_id)
#проверка на то, тратится или нет
#проверка на макс число сделанных
return min(self.craft_item_count(material.item)/material.count for material in craft.materials)
def craft(self,building,craft_id,count,max_count_once=500):
craft = self.get_building_craft(building,craft_id)
for item in self._get_game_state().get_state().gameObjects:
if (item.item == "@"+building) and (item.level>=craft.level):
building_id = item.id
break
else:
return 0
return self.craft_within_building(building,building_id,craft_id,count,max_count_once)
def craft_within_building(self,building,building_id,craft_id,count,max_count_once=500):
craft = self.get_building_craft(building,craft_id)
count = min(count,self.craft_available(building,craft_id))
if count <= 0:
return 0
saved_count=count
#removing
for material in craft.materials:
self.add_crafted_item(material.item, -material.count*count)
#adding
self.add_crafted_item(craft.result, craft.resultCount*count)
craft_event={"itemId":craft_id,"objId":building_id,"action":"craft","type":"item"}
#sending
events=[craft_event] * min(count,max_count_once)
while count>max_count_once:
self.send(events)
count-=max_count_once
events=[craft_event] * count
self.send(events)
return saved_count
def craft_to(self,building,craft_id,count,max_count_once=500):
craft = self.get_building_craft(building,craft_id)
has = self.craft_item_count(craft.result)
if has >= count:
return has
craft_count = (count - has)/craft.resultCount
return self.craft(building,craft_id,craft_count,max_count_once)*craft.resultCount+has
def location_id(self):
return self._get_game_state().get_game_loc().get_location_id()
надо включить в BaseActor. 12 часов, полёт нормальный.
Добавлю, работает, надпись о создании добавил и у кого стандартный base, в def craft_within_building вместо self.send(events) прописать self._get_events_sender().send_game_events(events) .
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Форумчане) на счет рулеток...не знаю , может кому нужно будет...
PHP код:
# Крутить рулетку в чучеле за блин
if game_id.find('RED_ROULETTE1') != -1 and game.playCost.item == '@R_67':
item_count = self._get_game_state().count_in_storage('@R_67')
if item_count >= game.playCost.count:
self._get_game_state().remove_from_storage('@R_67', game.playCost.count)
play_cost = None
else:
break
# Конец
# Крутить рулетку в чучеле за блин с начинкой
if game_id.find('RED_ROULETTE2') != -1 and game.playCost.item == '@R_68':
item_count = self._get_game_state().count_in_storage('@R_68')
if item_count >= game.playCost.count:
self._get_game_state().remove_from_storage('@R_68', game.playCost.count)
play_cost = None
else:
break
# Конец
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Cheater-84
Форумчане) на счет рулеток...не знаю , может кому нужно будет...
PHP код:
# Крутить рулетку в чучеле за блин
if game_id.find('RED_ROULETTE1') != -1 and game.playCost.item == '@R_67':
item_count = self._get_game_state().count_in_storage('@R_67')
if item_count >= game.playCost.count:
self._get_game_state().remove_from_storage('@R_67', game.playCost.count)
play_cost = None
else:
break
# Конец
# Крутить рулетку в чучеле за блин с начинкой
if game_id.find('RED_ROULETTE2') != -1 and game.playCost.item == '@R_68':
item_count = self._get_game_state().count_in_storage('@R_68')
if item_count >= game.playCost.count:
self._get_game_state().remove_from_storage('@R_68', game.playCost.count)
play_cost = None
else:
break
# Конец
Соответственно если рулетка за зб меняем на BLUE_ROULETTE )))