 |
Zombot (Клиент для игры Зомби ферма) [Обсуждение] - Свободное обсуждение - Ваши идеи, вопросы и ответы на тему браузерных игр и социальных сетей |
09.02.2014, 13:24
|
#976
|
|
|
|
Разведчик
|
 Регистрация: 18.09.2013
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
у кого на тропический рулетки есть киньте
|
|
|
09.02.2014, 13:29
|
#977
|
|
|
|
Разведчик
|
 Регистрация: 14.10.2012
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
09.02.2014, 17:23
|
#978
|
|
|
|
Разведчик
|
 Регистрация: 23.08.2013
 Сообщений: 1
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Здравствуйте!
Поставил задачу дописать часть копания под себя.
Вопрос 1. Как выявить тех друзей, у которых еще можно копать.
|
|
 |
|
 |
|
Когда заходишь к другу, обновляется game_state. Соответствено я сделал две проверки:
1. Проверить, если пользователь вообще был в игре:
PHP код:
if (self._get_game_state().get_state().isAway):
...
2. Проверить, если у пользователя еще есть возможность копаться:
PHP код:
if (self._get_game_state().get_state().haveTreasure):
...
 |
Цитата: |
 |
|
|
|
|
|
|
|
Вопрос 2. После посещения острова main у соседа, хочу переключиться к нему на остров любви, или любой другой, как проверить после этого, зашли мы на этот остров или нет, чтобы в случае отсутствия данного острова, можно было идти на другой. |
|
 |
|
 |
|
Судя по всему никак. Я не нашел списка островов друга. Я ходил по списку СВОИХ островов, и если попадал на остров друга, который у него не открыт, то система выдавала ingame_error, и я просто вел лог, чтобы исключать этот остров в последующих проходах (естественно, вел внешний файл, где была структура типа "{user1:[island1,island2,...],user2:...}"
 |
Цитата: |
 |
|
|
|
|
|
|
|
Вопрос 3. Как получить все объекты установленные на острове, чтобы в дальнейшем выбрать нужный и копать именно его. |
|
 |
|
 |
|
Список объектов - самое простое. Делаешь выборку типа:
PHP код:
objects = self._get_game_location()._get_object_by_type(obj_type)
А вообще подключай модуль PDB (Python Debug), ставь точку остановки, и исследуй, что есть, где какие функции и словари доступны и т.д.
Добавлено через 3 минуты
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
он у меня не работает, expected an indented block выдает при запуске, скиньте рабочий бот плиз который крутит мачту
|
|
 |
|
 |
|
А поГуглить ошибку слабо? Тебе система черным по белому (или белым по черному) говорит, что в этой строчке у тебя "отступ" не соответствует остальному блоку. Пойди на предыдущую строчку в коде, посмотри, стоят там пробелы или табуляции, и замени в строчке с ошибкой на такой же отступ.
Последний раз редактировалось mike4kz; 09.02.2014 в 17:26.
Причина: Добавлено сообщение
|
|
|
09.02.2014, 23:27
|
#979
|
|
|
|
Разведчик
|
 Регистрация: 27.08.2013
 Сообщений: 2
 Популярность: -54
 Сказал(а) спасибо: 5
Поблагодарили 15 раз(а) в 14 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Друзья!есть такая мысля..что если рулетку пиратскую(chop.py)переписать для новых островов?..ведь предметы по другому называются не @chop_hammer ,а @cit_hammer....
PHP код:
# coding=utf-8
import logging
from game_state.game_types import GameWoodGrave, GameWoodGraveDouble,\
GamePickItem, GameWoodTree, GameStone, GameGainItem, GamePickup
from game_state.game_event import dict2obj
from game_actors_and_handlers.base import BaseActor
logger = logging.getLogger(__name__)
class PirateTreeInfo(BaseActor):
def get_object_type(self):
tools = self._get_game_state().get_state().pirate
for tools in tools.instruments:
logger.info(u'На складе: %s' (tool.count))
class PirateTreeCut(BaseActor):
def get_object_type(self):
return "cit"
def perform_action(self):
resources = self._get_game_location().get_all_objects_by_type(
self.get_object_type()
)
enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy")
if resources:
for resource in resources:
tools = self._get_game_state().get_state().pirate
tool_needed = resource.citCount
type_of_res = resource.item
type_of_instrument = self._get_item_reader().get(type_of_res).citInstrumentType
for tool in tools.instruments:
if self._get_item_reader().get(tool.item).citInstrumentType == type_of_instrument and tool.count >= tool_needed:
enemy_here = 0
if enemies:
for enemy in enemies:
#Заменили квадрат 10x10 на радиус
#if((enemy.x - 15 <= resource.x and enemy.x + 15 >= resource.x) or (enemy.y - 15 <= resource.y and enemy.y + 15 >= resource.y)):
if(((enemy.x - resource.x)**2+(enemy.y - resource.y)**2)**0.5 < 16):
enemy_here = 1
break
if(enemy_here == 1):
self._get_game_location().remove_object_by_id(resource.id)
logger.info("Сильвер мешает вырубке "+str(resource.id))
break
print tool.count, tool_needed
gain_event = {"type":"cit","objId":resource.id,"instruments":{self._get_item_reader().get(tool.item).id:tool_needed},"action":"cit"}
print gain_event
logger.info("Рубим с помощью " + str(type_of_instrument))
self._get_events_sender().send_game_events( [gain_event] )
self._get_game_location().remove_object_by_id(resource.id)
tool.count -= tool_needed
break
else:
logger.info("Не осталось ресурсов для добычи")
resources = self._get_game_location().get_all_objects_by_type("pirateCaptureObject")
if resources:
for resource in resources:
enemy_here = 0
if enemies:
for enemy in enemies:
#Заменили квадрат 10x10 на радиус
#if((enemy.x - 15 <= resource.x and enemy.x + 15 >= resource.x) or (enemy.y - 15 <= resource.y and enemy.y + 15 >= resource.y)):
if(((enemy.x - resource.x)**2+(enemy.y - resource.y)**2)**0.5 < 15):
enemy_here = 1
break
if(enemy_here == 1):
self._get_game_location().remove_object_by_id(resource.id)
logger.info("Сильвер мешает взять "+str(resource.id))
continue
gain_event = {"type":"pirateCapture","objId":resource.id,"action":"capture"}
print gain_event
logger.info("Открываем " + str(resource.id))
self._get_events_sender().send_game_events( [gain_event] )
self._get_game_location().remove_object_by_id(resource.id)
else:
logger.info("Нет неоткрытых сокровищ")
что то на подобие этого....если что поправьте)) 
и лучше переименовать классы и модуль...один будет для одних островов,другой для других..вот как то так...
это Я Cheat Cheater
не ребят это все бред...новые инструменты тоже называются 'chop',
PHP код:
{"type":"chopInstrumentType","id":"CIT_HAMMER","name":"Кирка"}]
в чем же тогда проблема?...может остров нужно прописать как-нить?...
[
Последний раз редактировалось Cheater84; 10.02.2014 в 00:04.
|
|
|
Пользователь сказал cпасибо:
|
|
10.02.2014, 03:31
|
#980
|
|
|
|
Разведчик
|
 Регистрация: 30.08.2013
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 26 раз(а) в 21 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Выдалось немного свободных минуток. Почитал посты с последнего визита. В большинстве своем - тихий ужас.
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
в чем же тогда проблема?...может остров нужно прописать как-нить?...
|
|
 |
|
 |
|
Проблема в понимании желаемого  Ниже твой код, только с проверкой островов на привязку к пиратству.
PHP код:
# coding=utf-8 import logging from game_state.game_types import GameWoodGrave, GameWoodGraveDouble,\ GamePickItem, GameWoodTree, GameStone, GameGainItem, GamePickup from game_state.game_event import dict2obj, obj2dict from game_actors_and_handlers.base import BaseActor
logger = logging.getLogger(__name__)
class PirateTreeInfo(BaseActor):
def get_object_type(self): tools = self._get_game_state().get_state().pirate for tools in tools.instruments: logger.info(u'На складе: %s' (tool.count))
class PirateTreeCut(BaseActor):
def get_object_type(self): return "chop"
def perform_action(self): resources = self._get_game_location().get_all_objects_by_type( self.get_object_type() ) enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy")
# пиратские острова : Остров сокровищ , Таинственный , Жуткий , Северный полюс , Остров сокровищ , Древний pirate_locs_id = ["exploration_isle1_random","exploration_isle2_random","exploration_isle3_random","exploration_snow1","exploration_isle1_1","exploration_isle4_random"] # Не понятно, что это за острова в списке ???? - Пушистый 1,2,3 и Подземелье 1,2 #"exploration_furry1","exploration_furry2","exploration_furry3","exploration_isle_un1_1","exploration_isle_un1_2"
instruments = [] # переменная для инструментов _loc = self._get_game_state().get_game_loc().get_location_id() # текущая локация if resources: if _loc not in pirate_locs_id: st_items = self._get_game_state().get_state().storageItems # Предметы на складе for item in list(st_items): if hasattr(item, "item"): if item.item == ('@CHOP_MACHETE'): #мачете instruments.append(dict2obj({"item":"@CHOP_MACHETE", "count": item.count})) if item.item == ('@CHOP_AXE'): #топор instruments.append(dict2obj({"item":"@CHOP_AXE", "count": item.count})) if item.item == ('@CHOP_HAMMER'): #кирка instruments.append(dict2obj({"item":"@CHOP_HAMMER", "count": item.count})) else: instruments = self._get_game_state().get_state().pirate.instruments
for resource in resources: tool_needed = resource.citCount type_of_res = resource.item type_of_instrument = self._get_item_reader().get(type_of_res).citInstrumentType for tool in instruments: if self._get_item_reader().get(tool.item).citInstrumentType == type_of_instrument and tool.count >= tool_needed: enemy_here = 0 if enemies: for enemy in enemies: #Заменили квадрат 10x10 на радиус #if((enemy.x - 15 <= resource.x and enemy.x + 15 >= resource.x) or (enemy.y - 15 <= resource.y and enemy.y + 15 >=resource.y)): if(((enemy.x - resource.x)**2+(enemy.y - resource.y)**2)**0.5 < 16): enemy_here = 1 break if(enemy_here == 1): self._get_game_location().remove_object_by_id(resource.id) logger.info("Сильвер мешает вырубке "+str(resource.id)) break print tool.count, tool_needed gain_event = {"type":"cit","objId":resource.id,"instruments":{self._get_item_reader().get(tool.item).id:tool_needed},"action":"cit"} print gain_event logger.info("Рубим с помощью " + str(type_of_instrument)) self._get_events_sender().send_game_events( [gain_event] ) self._get_game_location().remove_object_by_id(resource.id) tool.count -= tool_needed break else: logger.info("Не осталось ресурсов для добычи") resources = self._get_game_location().get_all_objects_by_type("pirateCaptureObject") if resources: for resource in resources: enemy_here = 0 if enemies: for enemy in enemies: #Заменили квадрат 10x10 на радиус #if((enemy.x - 15 <= resource.x and enemy.x + 15 >= resource.x) or (enemy.y - 15 <= resource.y and enemy.y + 15 >= resource.y)): if(((enemy.x - resource.x)**2+(enemy.y - resource.y)**2)**0.5 < 15): enemy_here = 1 break if(enemy_here == 1): self._get_game_location().remove_object_by_id(resource.id) logger.info("Сильвер мешает взять "+str(resource.id)) continue gain_event = {"type":"pirateCapture","objId":resource.id,"action":"capture"} print gain_event logger.info("Открываем " + str(resource.id)) self._get_events_sender().send_game_events( [gain_event] ) self._get_game_location().remove_object_by_id(resource.id) else: logger.info("Нет неоткрытых сокровищ")
Не проверял целиком, но должно работать. Всем удачи.
Последний раз редактировалось dark-dragon; 10.02.2014 в 03:44.
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
10.02.2014, 04:14
|
#981
|
|
|
|
Разведчик
|
 Регистрация: 23.08.2013
 Сообщений: 1
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
10.02.2014, 08:23
|
#982
|
|
|
|
Разведчик
|
 Регистрация: 27.08.2013
 Сообщений: 2
 Популярность: -54
 Сказал(а) спасибо: 5
Поблагодарили 15 раз(а) в 14 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
dark-dragon,mike4kz ОГРОМНОЕ СПАСИБО!!!!)))
|
|
|
10.02.2014, 12:45
|
#983
|
|
|
|
Разведчик
|
 Регистрация: 21.12.2012
 Сообщений: 29
 Популярность: 10
 Сказал(а) спасибо: 20
Поблагодарили 4 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
 |
Цитата: |
 |
|
|
|
|
|
|
|
Не проверял целиком, но должно работать. Всем удачи. |
|
 |
|
 |
|
в предыдущем варианте были ошибки, подправил - весь остров вырубил
Код:
# coding=utf-8
import logging
from game_state.game_types import GameWoodGrave, GameWoodGraveDouble,\
GamePickItem, GameWoodTree, GameStone, GameGainItem, GamePickup
from game_state.game_event import dict2obj, obj2dict
from game_actors_and_handlers.base import BaseActor
logger = logging.getLogger(__name__)
class PirateTreeCut(BaseActor):
def get_object_type(self):
return "chop"
def perform_action(self):
resources = self._get_game_location().get_all_objects_by_type(
self.get_object_type()
)
enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy")
# пиратские острова : Остров сокровищ , Таинственный , Жуткий , Северный полюс , Остров сокровищ , Древний
pirate_locs_id = ["exploration_isle1_random","exploration_isle2_random","exploration_isle3_random","exploration_snow1","exploration_isle1_1","exploration_isle4_random"]
# Не понятно, что это за острова в списке ???? - Пушистый 1,2,3 и Подземелье 1,2
#"exploration_furry1","exploration_furry2","exploration_furry3","exploration_isle_un1_1","exploration_isle_un1_2"
instruments = [] # переменная для инструментов
_loc = self._get_game_state().get_game_loc().get_location_id() # текущая локация
if resources:
if _loc not in pirate_locs_id:
st_items = self._get_game_state().get_state().storageItems # Предметы на складе
for item in list(st_items):
if hasattr(item, "item"):
if item.item == ('@CHOP_MACHETE'): #мачете
instruments.append(dict2obj({"item":"@CHOP_MACHETE", "count": item.count}))
if item.item == ('@CHOP_AXE'): #топор
instruments.append(dict2obj({"item":"@CHOP_AXE", "count": item.count}))
if item.item == ('@CHOP_HAMMER'): #кирка
instruments.append(dict2obj({"item":"@CHOP_HAMMER", "count": item.count}))
else: instruments = self._get_game_state().get_state().pirate.instruments
for resource in resources:
#print obj2dict(resource)
tool_needed = resource.chopCount
type_of_res = resource.item
type_of_instrument = self._get_item_reader().get(type_of_res).chopInstrumentType
for tool in instruments:
#print "self._get_item_reader().get(tool.item).chopInstrumentType", self._get_item_reader().get(tool.item).chopInstrumentType
#print "type_of_instrument", type_of_instrument
if self._get_item_reader().get(tool.item).chopInstrumentType == type_of_instrument and tool.count >= tool_needed:
enemy_here = 0
if enemies:
for enemy in enemies:
#Заменили квадрат 10x10 на радиус
#if((enemy.x - 15 <= resource.x and enemy.x + 15 >= resource.x) or (enemy.y - 15 <= resource.y and enemy.y + 15 >=resource.y)):
if(((enemy.x - resource.x)**2+(enemy.y - resource.y)**2)**0.5 < 16):
enemy_here = 1
break
if(enemy_here == 1):
self._get_game_location().remove_object_by_id(resource.id)
logger.info("Сильвер мешает вырубке "+str(resource.id))
break
print tool.count, tool_needed
gain_event = {"type":"chop","objId":resource.id,"instruments":{self._get_item_reader().get(tool.item).id:tool_needed},"action":"chop"}
print gain_event
logger.info("Рубим с помощью " + str(type_of_instrument))
self._get_events_sender().send_game_events( [gain_event] )
self._get_game_location().remove_object_by_id(resource.id)
tool.count -= tool_needed
break
else:
logger.info("Не осталось ресурсов для добычи")
resources = self._get_game_location().get_all_objects_by_type("pirateCaptureObject")
if resources:
for resource in resources:
enemy_here = 0
if enemies:
for enemy in enemies:
#Заменили квадрат 10x10 на радиус
#if((enemy.x - 15 <= resource.x and enemy.x + 15 >= resource.x) or (enemy.y - 15 <= resource.y and enemy.y + 15 >= resource.y)):
if(((enemy.x - resource.x)**2+(enemy.y - resource.y)**2)**0.5 < 15):
enemy_here = 1
break
if(enemy_here == 1):
self._get_game_location().remove_object_by_id(resource.id)
logger.info("Сильвер мешает взять "+str(resource.id))
continue
gain_event = {"type":"pirateCapture","objId":resource.id,"action":"capture"}
print gain_event
logger.info("Открываем " + str(resource.id))
self._get_events_sender().send_game_events( [gain_event] )
self._get_game_location().remove_object_by_id(resource.id)
else:
logger.info("Нет неоткрытых сокровищ")
как бы запихнуть обработчик рулеток? у них нынче лимит есть
|
|
|
Пользователь сказал cпасибо:
|
|
10.02.2014, 13:17
|
#984
|
|
|
|
Разведчик
|
 Регистрация: 30.08.2013
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 26 раз(а) в 21 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
10.02.2014, 23:06
|
#985
|
|
|
|
Разведчик
|
 Регистрация: 11.12.2012
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
[QUOTE=mike4kz;5234478]Когда заходишь к другу, обновляется game_state. Соответствено я сделал две проверки:
1. Проверить, если пользователь вообще был в игре:
PHP код:
if (self._get_game_state().get_state().isAway):
...
PHP код:
if (self._get_game_state().get_state().haveTreasure):
...
Огромное спасибо за развернутые ответы.
Эти две инструкции все время false.
Не пойму в чем дело
Добавлено через 32 минуты
mike4kz
Скинь пожалуйста мыло, или скайп, или любой коммуникационный идент.
Нужна твоя консультация в режиме он лайн.
Жду ответа
Последний раз редактировалось ZombikG; 10.02.2014 в 23:38.
Причина: Добавлено сообщение
|
|
|
11.02.2014, 00:23
|
#986
|
|
|
|
Разведчик
|
 Регистрация: 18.09.2013
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Люди в чем может быть проблема? раскоментировал sellbot для продажи указал что продавать а ни какой реакции хотя пишет и предмет который я указал и сколько оставить. подскажите
|
|
|
11.02.2014, 01:17
|
#987
|
|
|
|
Разведчик
|
 Регистрация: 23.08.2013
 Сообщений: 1
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
12.02.2014, 02:08
|
#988
|
|
|
|
Разведчик
|
 Регистрация: 21.12.2012
 Сообщений: 29
 Популярность: 10
 Сказал(а) спасибо: 20
Поблагодарили 4 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Где ошибка?
Код:
[2014-02-12 02:05:34,494] Крутим рулетку: Ежедневный бонус
[2014-02-12 02:05:34,565] ingame error
[2014-02-12 02:05:34,568] Connection : {'crc': '61fc7cdbf3fcaab6c3946be1ce970c92', 'data': '{"user":"35908611","type":"EVT","id":1392156335906,,"events":[{"action":"play","type":"dailyBonus"}]}'}
[2014-02-12 02:05:34,569] Response : {u'msg': u'ingame error', u'cmd': u'ERR', u'id': u'1392156335906'}
[2014-02-12 02:05:34,569] Загружаем остров...
Код:
# Ежедневный бонус
dailyBonus = self._get_game_state().get_state().dailyBonus
if int(dailyBonus.playFrom) and self._get_timer().has_elapsed(dailyBonus.playFrom):
daily = DailyBonus()
self._get_events_sender().send_game_events([daily])
logger.info(u"Крутим рулетку: Ежедневный бонус")
#конец ежедневной рулетке
|
|
|
12.02.2014, 10:01
|
#989
|
|
|
|
Разведчик
|
 Регистрация: 30.08.2013
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 26 раз(а) в 21 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Не сбрасывается таймер в боте до перезагрузки, потому при повторном обращении вываливает ошибку
PHP код:
logger.info(u"Крутим рулетку: Ежедневный бонус")
dailyBonus.playFrom = 500
Так будет лучше.
|
|
|
12.02.2014, 12:18
|
#990
|
|
|
|
Пехотинец
|
 Регистрация: 01.08.2012
 Сообщений: 95
 Популярность: 255
 Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
А почему 500? Может нужно 0?
с 500 в условие может успеть опять войти, там же по всем рулеткам пробегает, а ежедневка на каждом проходе проверяется.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось vintets; 12.02.2014 в 12:21.
|
|
|
Пользователь сказал cпасибо:
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 15:39.
|
 |