Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
обновленный скрипт, с самоустановкой. просто запустите, расслабтесь и получайте удовольствие)))
[Ссылки могут видеть только зарегистрированные пользователи. ]
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
А вот и [Ссылки могут видеть только зарегистрированные пользователи. ] для файла в сообщении выше подвезли.
Ori.Man.Aleks, под линуксом работает, например, уважаемый mike4kz .
viver9, ой, ну Вы же программист? Почему ж сразу чужими руками и жар загрeбaть? О проблеме известно, и она решена, например ruslanische, попробуйте посмотреть его посты в теме. Плюсом к замеченному Вами, были поправлены и &gz=y серверу (что снижает нагрузку на сеть раз в 10 имхо), генерация clientTime и serverTime в первых запросах.
Если уж полностью соответствовать swf-клиенту, тогда и CLIENT_VERSION нужно отдавать по-новее, а как? Каждый раз руками править или zombiferma.swf парсить? Непонятно, что хуже.
Да и не только эти проблемы должны выплыть, если всё по уму делать, имхо.
Последний раз редактировалось megabyte0; 01.04.2016 в 04:04.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
не видел в теме таких исправлений и во всех ботах что видел их не было вот и написал.
я считаю что если делать то лучше делать по уму.
и лично я каждый раз меняю версию клиента так как считаю это САМЫМ ЛЕГКИМ способом выловить ботовода
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Друзья, кто нибудь сталкивался уже с такой проблемой рубки островов УПС (болото, поле чудес, каморка) и нового Забытого острова? Выдает такую ошибку.. Создается впечатление, что он в упор не хочет видеть инвентарь со склада.. Может что-то подправить или добавить в код нужно? Помогите, пожалуйста, советом!
Заранее благодарю
[Ссылки могут видеть только зарегистрированные пользователи. ]
Chop
Код:
# coding=utf-8
import logging
import sys
import time
import os.path
import os
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):
options = [
u'вскрытие сокровищ'
]
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","exploration_isle_un1_4"]
_loc = self._get_game_state().get_game_loc().get_location_id() # текущая локация
instruments = [] # переменная для инструментов
_loc = self._get_game_state().get_game_loc().get_location_id() # текущая локация
sklad = False
if resources:
if _loc not in pirate_locs_id:
sklad = True
st_items = self._get_game_state().get_state().storageItems # Предметы на складе
#print u'СКЛАД!'
for item in list(st_items):
if hasattr(item, "item"):
if '@CHOP_' in item.item:
instruments.append(dict2obj({"item":item.item, "count": item.count}))
# или
# reader = self._get_item_reader().get(item.item)
# if reader.type == 'chopInstrument':
# instruments.append(dict2obj({"item":item.item, "count": item.count}))
# или
# 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}))
# if item.item == ('@CHOP_TRIDENT'): #Трезубец
# instruments.append(dict2obj({"item":"@CHOP_TRIDENT", "count": item.count}))
# или ссылками, тогда исправить учёт траты
# if hasattr(item, "item") and item.item in ['@CHOP_MACHETE','@CHOP_AXE','@CHOP_HAMMER','@CHOP_TRIDENT','@CHOP_TRIDENT_GOLDEN']:
# instruments.append(item)
else: instruments = self._get_game_state().get_state().pirate.instruments
CHOP_MACHETE = 10000
CHOP_AXE = 10000
CHOP_HAMMER = 10000
CHOP_TRIDENT = 0
for tool in instruments:
if hasattr(tool, "item"):
if tool.item == '@CHOP_MACHETE': CHOP_MACHETE = tool.count
if tool.item == '@CHOP_AXE': CHOP_AXE = tool.count
if tool.item == '@CHOP_HAMMER': CHOP_HAMMER = tool.count
if tool.item == '@CHOP_TRIDENT': CHOP_TRIDENT = tool.count
print u'Инструмента перед рубкой М-Т-К-Тр:', str(CHOP_MACHETE)+'-'+str(CHOP_AXE)+'-'+str(CHOP_HAMMER)+'-'+str(CHOP_TRIDENT)
if (CHOP_MACHETE > 250 and CHOP_HAMMER > 250):
self._get_game_state().many_chop = 1 # проставили many_chop если мачете и кирки за 250
resources_dict = {resource : resource.x for resource in resources}
resources_order = resources_dict.items()
if not hasattr(self._get_game_state(), 'many_chop'): # рублено не много, будем сортировать
resources_order.sort(key=lambda x: x[::-1], reverse=True) # ресурсы отсортированные по X
#print resources_order
# Пинатель
if enemies:
if not hasattr(self, 'enemies'):self.enemies = []
for enemy in enemies:
if enemy.id in self.enemies:continue
print u'Шуганём сильвера '+str(enemy.id)
self._get_events_sender().send_game_events([{"type":"pirateEnemy","objId":enemy.id,"action":"hit"}])
self.enemies.append(enemy.id)
#self._get_game_location().remove_object_by_id(enemy.id)
print u'Ресурсов видно:', len(resources_order)
for resource in resources_order:
resource = resource[0]
#print 'Obj: ', resource.item.ljust(27, " "), ' id = ', resource.id
#print 'resource ', resource,' ', resource.x
#print obj2dict(resource)
tool_needed = resource.chopCount
type_of_res = resource.item
type_of_instrument = self._get_item_reader().get(type_of_res).chopInstrumentType
# сортируем что рубим, а что нет
if (not hasattr(self._get_game_state(), 'many_chop')): # рублено не много, ограничиваем траты
if type_of_instrument == '@CIT_MACHETE': # мачете
pass
elif type_of_instrument == '@CIT_TRIDENT': # трезубец
pass
elif type_of_instrument == '@CIT_AXE': # топоры
if CHOP_AXE > 600 or tool_needed == 10 or tool_needed == 15 or tool_needed == 16 or tool_needed > 49:
pass
else: continue
elif type_of_instrument == '@CIT_HAMMER': # кирки
if ('CH_BLACKSTONE' in type_of_res) or ('CH_GREENSTONE' in type_of_res) or ('CH_WHITESTONE' in type_of_res) or ('CH_CRYSTALSTONE' in type_of_res) or tool_needed > 49:
pass
else: continue
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 not hasattr(tool, "item"):
print u'Нет итема', obj2dict(tool)
continue
if self._get_item_reader().get(tool.item).chopInstrumentType == type_of_instrument and tool.count > 0: #= tool_needed:
enemy_here = 0
if enemies:
for enemy in enemies:
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
# if type_of_instrument == '@CIT_HAMMER' and tool_needed == 100:
# tool_needed = 50
# logger.info(u'Снижаем удар киркой до 50')
if tool.count < tool_needed:
if type_of_instrument == '@CIT_TRIDENT':
tool_needed = tool.count
logger.info(u'Рубим неполный')
else: continue
gain_event = {"type":"chop","objId":resource.id,"instruments":{self._get_item_reader().get(tool.item).id:tool_needed},"action":"chop"}
logger.info(u"Рубим " +str(self._get_item_reader().get(tool.item).id).ljust(13, ' ')+str(tool_needed).rjust(3, ' ')+u'L, id '+str(gain_event['objId']))
self._get_events_sender().send_game_events( [gain_event] )
if resource.chopCount == tool_needed:
self._get_game_location().remove_object_by_id(resource.id)
else:
resource.chopCount -= tool_needed
tool.count -= tool_needed
if sklad:
#print 'type_of_instrument', type_of_instrument, 'tool.item', tool.item, 'ins', ins
self._get_game_state().remove_from_storage(tool.item, tool_needed)
break
CHOP_MACHETE2 = 0
CHOP_AXE2 = 0
CHOP_HAMMER2 = 0
CHOP_TRIDENT2 = 0
for tool in instruments:
if hasattr(tool, "item"):
if tool.item == '@CHOP_MACHETE': CHOP_MACHETE2 = tool.count
if tool.item == '@CHOP_AXE': CHOP_AXE2 = tool.count
if tool.item == '@CHOP_HAMMER': CHOP_HAMMER2 = tool.count
if tool.item == '@CHOP_TRIDENT': CHOP_TRIDENT2 = tool.count
if CHOP_MACHETE-CHOP_MACHETE2 or CHOP_AXE-CHOP_AXE2 or CHOP_HAMMER-CHOP_HAMMER2 or CHOP_TRIDENT-CHOP_TRIDENT2:
print u'Инструмента после рубки М-Т-К-Тр:', str(CHOP_MACHETE2)+'-'+str(CHOP_AXE2)+'-'+str(CHOP_HAMMER2)+'-'+str(CHOP_TRIDENT2)
else:
logger.info("Не осталось ресурсов для добычи")
raw_input('------------- END ---------------')
if u'вскрытие сокровищ' in options:
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:
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("Нет неоткрытых сокровищ")
Последний раз редактировалось bes2010; 09.04.2016 в 03:19.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от bes2010
Друзья, кто нибудь сталкивался уже с такой проблемой рубки островов УПС и нового Забытого острова? Выдает такую ошибку.. Создается впечатление, что он в упор не хочет видеть инвентарь со склада.. Может что-то подправить или добавить в код нужно? Помогите, пожалуйста, советом!
Заранее благодарю
[Ссылки могут видеть только зарегистрированные пользователи. ]
Chop
Код:
# coding=utf-8
import logging
import sys
import time
import os.path
import os
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):
options = [
u'вскрытие сокровищ'
]
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","exploration_isle_un1_4"]
_loc = self._get_game_state().get_game_loc().get_location_id() # текущая локация
instruments = [] # переменная для инструментов
_loc = self._get_game_state().get_game_loc().get_location_id() # текущая локация
sklad = False
if resources:
if _loc not in pirate_locs_id:
sklad = True
st_items = self._get_game_state().get_state().storageItems # Предметы на складе
#print u'СКЛАД!'
for item in list(st_items):
if hasattr(item, "item"):
if '@CHOP_' in item.item:
instruments.append(dict2obj({"item":item.item, "count": item.count}))
# или
# reader = self._get_item_reader().get(item.item)
# if reader.type == 'chopInstrument':
# instruments.append(dict2obj({"item":item.item, "count": item.count}))
# или
# 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}))
# if item.item == ('@CHOP_TRIDENT'): #Трезубец
# instruments.append(dict2obj({"item":"@CHOP_TRIDENT", "count": item.count}))
# или ссылками, тогда исправить учёт траты
# if hasattr(item, "item") and item.item in ['@CHOP_MACHETE','@CHOP_AXE','@CHOP_HAMMER','@CHOP_TRIDENT','@CHOP_TRIDENT_GOLDEN']:
# instruments.append(item)
else: instruments = self._get_game_state().get_state().pirate.instruments
CHOP_MACHETE = 10000
CHOP_AXE = 10000
CHOP_HAMMER = 10000
CHOP_TRIDENT = 0
for tool in instruments:
if hasattr(tool, "item"):
if tool.item == '@CHOP_MACHETE': CHOP_MACHETE = tool.count
if tool.item == '@CHOP_AXE': CHOP_AXE = tool.count
if tool.item == '@CHOP_HAMMER': CHOP_HAMMER = tool.count
if tool.item == '@CHOP_TRIDENT': CHOP_TRIDENT = tool.count
print u'Инструмента перед рубкой М-Т-К-Тр:', str(CHOP_MACHETE)+'-'+str(CHOP_AXE)+'-'+str(CHOP_HAMMER)+'-'+str(CHOP_TRIDENT)
if (CHOP_MACHETE > 250 and CHOP_HAMMER > 250):
self._get_game_state().many_chop = 1 # проставили many_chop если мачете и кирки за 250
resources_dict = {resource : resource.x for resource in resources}
resources_order = resources_dict.items()
if not hasattr(self._get_game_state(), 'many_chop'): # рублено не много, будем сортировать
resources_order.sort(key=lambda x: x[::-1], reverse=True) # ресурсы отсортированные по X
#print resources_order
# Пинатель
if enemies:
if not hasattr(self, 'enemies'):self.enemies = []
for enemy in enemies:
if enemy.id in self.enemies:continue
print u'Шуганём сильвера '+str(enemy.id)
self._get_events_sender().send_game_events([{"type":"pirateEnemy","objId":enemy.id,"action":"hit"}])
self.enemies.append(enemy.id)
#self._get_game_location().remove_object_by_id(enemy.id)
print u'Ресурсов видно:', len(resources_order)
for resource in resources_order:
resource = resource[0]
#print 'Obj: ', resource.item.ljust(27, " "), ' id = ', resource.id
#print 'resource ', resource,' ', resource.x
#print obj2dict(resource)
tool_needed = resource.chopCount
type_of_res = resource.item
type_of_instrument = self._get_item_reader().get(type_of_res).chopInstrumentType
# сортируем что рубим, а что нет
if (not hasattr(self._get_game_state(), 'many_chop')): # рублено не много, ограничиваем траты
if type_of_instrument == '@CIT_MACHETE': # мачете
pass
elif type_of_instrument == '@CIT_TRIDENT': # трезубец
pass
elif type_of_instrument == '@CIT_AXE': # топоры
if CHOP_AXE > 600 or tool_needed == 10 or tool_needed == 15 or tool_needed == 16 or tool_needed > 49:
pass
else: continue
elif type_of_instrument == '@CIT_HAMMER': # кирки
if ('CH_BLACKSTONE' in type_of_res) or ('CH_GREENSTONE' in type_of_res) or ('CH_WHITESTONE' in type_of_res) or ('CH_CRYSTALSTONE' in type_of_res) or tool_needed > 49:
pass
else: continue
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 not hasattr(tool, "item"):
print u'Нет итема', obj2dict(tool)
continue
if self._get_item_reader().get(tool.item).chopInstrumentType == type_of_instrument and tool.count > 0: #= tool_needed:
enemy_here = 0
if enemies:
for enemy in enemies:
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
# if type_of_instrument == '@CIT_HAMMER' and tool_needed == 100:
# tool_needed = 50
# logger.info(u'Снижаем удар киркой до 50')
if tool.count < tool_needed:
if type_of_instrument == '@CIT_TRIDENT':
tool_needed = tool.count
logger.info(u'Рубим неполный')
else: continue
gain_event = {"type":"chop","objId":resource.id,"instruments":{self._get_item_reader().get(tool.item).id:tool_needed},"action":"chop"}
logger.info(u"Рубим " +str(self._get_item_reader().get(tool.item).id).ljust(13, ' ')+str(tool_needed).rjust(3, ' ')+u'L, id '+str(gain_event['objId']))
self._get_events_sender().send_game_events( [gain_event] )
if resource.chopCount == tool_needed:
self._get_game_location().remove_object_by_id(resource.id)
else:
resource.chopCount -= tool_needed
tool.count -= tool_needed
if sklad:
#print 'type_of_instrument', type_of_instrument, 'tool.item', tool.item, 'ins', ins
self._get_game_state().remove_from_storage(tool.item, tool_needed)
break
CHOP_MACHETE2 = 0
CHOP_AXE2 = 0
CHOP_HAMMER2 = 0
CHOP_TRIDENT2 = 0
for tool in instruments:
if hasattr(tool, "item"):
if tool.item == '@CHOP_MACHETE': CHOP_MACHETE2 = tool.count
if tool.item == '@CHOP_AXE': CHOP_AXE2 = tool.count
if tool.item == '@CHOP_HAMMER': CHOP_HAMMER2 = tool.count
if tool.item == '@CHOP_TRIDENT': CHOP_TRIDENT2 = tool.count
if CHOP_MACHETE-CHOP_MACHETE2 or CHOP_AXE-CHOP_AXE2 or CHOP_HAMMER-CHOP_HAMMER2 or CHOP_TRIDENT-CHOP_TRIDENT2:
print u'Инструмента после рубки М-Т-К-Тр:', str(CHOP_MACHETE2)+'-'+str(CHOP_AXE2)+'-'+str(CHOP_HAMMER2)+'-'+str(CHOP_TRIDENT2)
else:
logger.info("Не осталось ресурсов для добычи")
raw_input('------------- END ---------------')
if u'вскрытие сокровищ' in options:
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:
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("Нет неоткрытых сокровищ")
[Ссылки могут видеть только зарегистрированные пользователи. ]
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от ripton07
[Ссылки могут видеть только зарегистрированные пользователи. ]
Спасибо!
Ошибка осталась все та же.. Видать тут далеко не в chop дело...
Пробовала ставить другие действия (вместо чистки и кручения рулеток), бот как видит этот остров сразу идет в ошибку...
Значит нужно копать где-то глубже - в энжене или локациях)) пиратские острова чистит на ура! а тут такая досада((
Может кто-то сталкивался с такой же проблемой.. Как боролись?
Последний раз редактировалось bes2010; 09.04.2016 в 03:20.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от bes2010
Создается впечатление, что он в упор не хочет видеть инвентарь со склада..
инвентарь не при чем. ингэйм ловишь при переходе на локацию. какой модуль у тебя посылает этот "кривей" эвент на переход не знаю. попробуй отключить переход по локациям в гэеймэнжин.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от bes2010
Спасибо!
Ошибка осталась все та же.. Видать тут далеко не в chop дело...
Пробовала ставить другие действия (вместо чистки и кручения рулеток), бот как видит этот остров сразу идет в ошибку...
Значит нужно копать где-то глубже - в энжене или локациях)) пиратские острова чистит на ура! а тут такая досада((
Может кто-то сталкивался с такой же проблемой.. Как боролись?
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от shuls188
обновленный скрипт, с самоустановкой. просто запустите, расслабтесь и получайте удовольствие)))
[Ссылки могут видеть только зарегистрированные пользователи. ]
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Изменился адрес загрузки итемсов (у кого нормально работает, ничё не надо), идём в "\game_state\item_reader.py" ищем url = 'http://jmr.shadowlands.ru/zombiemr/items' меняем на url = 'https://jok.shadowlands.ru/zombieok/items'
Последний раз редактировалось ripton07; 16.04.2016 в 21:35.