Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Cheater84
я не добавлял еще friend_dig на GitHub....времени мало там разбираться...было бы намного удобнее если бы здесь можно было подправлять и дописывать коды не копируя их и заново не вставляя...и к тому же я не дописывал копание у друзей,данного бота я не писал,так что с копкой помочь не могу.
Добавлено через 2 минуты
где то был...как найду выложу. Извиняюсь за код,писал не я,но надеюсь люди доведут и допишут до ума,желательно бы в отдельный модуль....
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
def perform_action(self): #frends_ids = self._get_options() #seeds = ['P_06','P_23','P_10','P_13'] ''' for itemid in self._get_game_state().get_state().storageItems: #for seed in seeds: #seedm = seed.replace('P_', '@S_') if hasattr(itemid, "item"):# and itemid.item[:3] == "@S_": try: name = self._get_item_reader().get('P_'+itemid.item[3:]).name except: name = "N/A" # print type(name) count = self._get_game_state().count_in_storage(itemid.item) #print name[:-1] open('storage.txt', 'a').write((name+": "+str(count)+"\t\t"+itemid.item+"\n").encode('utf-8', 'ignore')) print u'######## Готово ! ! ! ########' '''
if not hasattr(self._get_game_state(),'vgbstp'): location = self._get_game_state().get_game_loc().get_location_id() if location != 'isle_x': change_location_event = { "user": None, "locationId" : 'isle_x', "type":"gameState", "action":"gameState", "objId": None, "extraId":None } print u'Переходим на Остров X' self._get_events_sender().send_game_events([change_location_event]) if not hasattr(self._get_game_state(),'gifo'): self._get_game_state().vgb = [] gifts = list(set(self._get_game_state().get_state().gifts)) #cou = 0 for gift in gifts: #open('gifts.txt', 'a').write(gift.item + "\t" + str(gift.count) + "\n") if gift.item == '@VALENT_GIFT_BOX1': self._get_game_state().vgb.append(gift) self._get_game_state().gifo = 1 self._get_game_state().gifcou = 0 else: gift = self._get_game_state().vgb[self._get_game_state().gifcou]
apply_event={ "x":38, # А вот тут остается надеяться что по координатам ничего нет "y":48, # "extraId":252058, "action":"applyCompGift", "itemId":"VALENT_GIFT_BOX1", "type":"item", "objId":gift.id } print u'Устанавливаем подарок' apply_gift_event = GameApplyGiftEvent(GameGift(gift.id)) self._get_events_sender().send_game_events([apply_event]) self._get_game_state().gifcou += 1 #print u'Открываем подарок' #cou+=1 #if not hasattr(self._get_game_state(),'vgbstp'):self._get_game_state().vgbstp = 1
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Оказывается рулетку надо крутануть.
В старом боте не нужно ничего предварительно крутить вручную, рулетки берутся в обиход при обнаружении. А вот в новом уже геморрой. Все никак не дойдут руки разобраться с разницей в коде.
Добавлено через 6 минут
Кто подскажет, что нужно прописать в код, чтобы бот при получении ошибки на эвент от сервера не ребутился? Нужно прогнать цикл, а бот после ошибки начинает все с начала, цука.
Последний раз редактировалось dark-dragon; 14.02.2014 в 12:31.
Причина: Добавлено сообщение
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Как сделать проверку на наличие инструмента в складе? Бот рулетки норм крутит на новом острове, но при рубке вылетает:
[2014-02-14 15:01:10,131] Вы выиграли Кирка(15 шт.)
[2014-02-14 15:01:10,131] Вы выиграли Топор(15 шт.)
[2014-02-14 15:01:10,134] Вы выиграли Кирка(15 шт.)
[2014-02-14 15:01:10,134] Вы выиграли Мачете(15 шт.)
[2014-02-14 15:01:10,184] Рубим Тропический камень с помощью 50 Кирка
[2014-02-14 15:01:10,479] Рубим Валун с помощью 15 Кирка
[2014-02-14 15:01:10,815] Нет неоткрытых сокровищ
[2014-02-14 15:01:20,273] Подбираем дроп...
[2014-02-14 15:01:20,756] Рубим Валун с помощью 15 Кирка
[2014-02-14 15:01:21,059] ingame error
Chop модуль взял Anch665
Код:
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
хотя проверка есть, но почему он продолжает рубить, если инструмента не хватает
Последний раз редактировалось 4erepaha89; 14.02.2014 в 16:17.
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" ------------------------------------ ")
Что делать с количеством решайте сами. Я кучу элементов коллекций не подобрал пока эксперементировал. Где тот предел - не знаю.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось vintets; 14.02.2014 в 17:23.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
но почему он продолжает рубить, если инструмента не хватает
Потому что:
1. писалась эта проверка с расчетом уже достаточного количества инструментов на складе.
2. не было и нету как проверить
Вот кусок кода, заточенный "правильно" (проверьте, у кого есть возможность)
PHP код:
for resource in resources:
resource_name = self._get_item_reader().get_name(resource)
tool_needed = resource.chopCount
type_of_res = resource.item
type_of_instrument = self._get_item_reader().get(type_of_res).chopInstrumentType
_i = -1
for tool in instruments:
_i += 1
name_tool = self._get_item_reader().get_name(tool)
if self._get_item_reader().get(tool.item).chopInstrumentType == type_of_instrument and tool.count >= tool_needed:
dell = instruments.pop(_i)
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(u"Сильвер мешает вырубке " + resource_name)
break
if tool_needed == 100:
tool_needed = 50
gain_event = {"type":"chop","objId":resource.id,"instruments":{self._get_item_reader().get(tool.item).id:tool_needed},"action":"chop"}
logger.info(u"Рубим " + resource_name + u" с помощью " + str(tool_needed) + u" " + name_tool)
self._get_events_sender().send_game_events( [gain_event] )
self._get_game_location().remove_object_by_id(resource.id)
dell.count -= tool_needed
instruments.insert(_i,dell)
break
else:
logger.info("Не осталось ресурсов для добычи")
Использовал тут код с разбиением камней весом 100 на 2 по 50.
Добавлено через 14 минут
ЗЫ. Посмотрел сейчас, код не правильный будет на разбиение больших камней. Нужно переделывать, кто использует. В данном случае вроде вырубает половину и просто удаляет оставшееся с острова. Необходимо 2-ю рубку делать.
Последний раз редактировалось dark-dragon; 14.02.2014 в 18:08.
Причина: Добавлено сообщение
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от lokanaft
Не знаю, зачем большие камни бить по 50 - у меня если и выпадает череп, то только один раз. А может 2 выпасть при рубке 100.
Я обычно валуны рублю вручную в 2 этапа - 60 и 40. Зачастую на 60 падает от 2 до 6 черепов (рандом, мать его). А на 40 уже так, что выпадет. Когда целиком или по 50, то зачастую порожняки сыпят.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Добавка. Всё то же самое, только не с подарками, а покупка у себя.
Спешите.
...значит некуда. Левый нижний угол на домашнем координаты 14-12. Освободить.
Если не хотите править гифт или он не стандартный, временно отключите прием подарков обычных.
сам включил покупку уже когда домой доехал. На сейчас намотало 30 уровней.
Кто покупает, вы выставили сколько денег оставлять?
... у меня около 18:00 совсем всё отвалилось. Нагрузка на сервер большая, все кинулись, вот и отваливается.
количество обязательно уменьшите с 500 (в 2 местах) если подарки. Если покупка у меня по 300 по умолчанию как часы.
... там где числа 500 и 499. Блин, товарищи, там всего 65 строк.
... Я не знаю что у вас. Сборок развелось...
Ну принты повставляйте. Если всё сделать правильно -работает.
[Ссылки могут видеть только зарегистрированные пользователи. ]
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось vintets; 15.02.2014 в 15:44.