Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
подскажите в чем проблемма , не могу вкурить
Items downloaded!
Exception in thread Thread-1:
Traceback (most recent call last):
File "c:\Python27\lib\threading.py", line 808, in __bootstrap_inner
self.run()
File "c:\1\app.py", line 35, in run
self.run_function(self)
File "main.py", line 79, in run_game
Game(site, settings, UserPrompt(gui_input), gui_input=gui_input).start()
File "c:\1\game_engine.py", line 486, in start
self.eventLoop()
File "c:\1\game_engine.py", line 525, in eventLoop
self.perform_all_actions()
File "c:\1\game_engine.py", line 607, in perform_all_actions
actor.perform_action()
File "c:\1\game_actors_and_handlers\friend_dig.py", line 18, in perform_ac
friends = self._get_options()
File "c:\1\game_actors_and_handlers\base.py", line 12, in _get_options
return self.__options
AttributeError: 'FriendDigger' object has no attribute '_BaseActor__options'
Цитата:
# coding=utf-8
import sys
import logging
import random as random_number
from game_state.game_types import GameWoodGrave, GameWoodGraveDouble,\
GamePickItem, GameWoodTree, GameGainItem, GamePickup, GameDigItem
from game_state.game_event import dict2obj, obj2dict
from game_actors_and_handlers.base import BaseActor
logger = logging.getLogger(__name__)
class FriendDigger(BaseActor):
def perform_action(self):
#logger.info(u"######### Идем к другу ###########")
#go_to_friend = {"action":"gameState","locationId":"main","user":' 201018303',"objId":None,"type":"gameState"}#{"id": 8,"action":"gameState","objId":null,"locationId":" main","user":"144371056","type":"gameState"} #,"id":46667
#friends = ['8477452','22656865','27505179','107183826','68030 140','163206097']#'476111',
friends = self._get_options()
# Юдо Чудо
#friends = ['7942552'] + friends
#friends = ['35908611','7942552'] + friends
objtypes = ['decoration']
myid = '180606352'
self._get_game_state().shovel = 0
if not hasattr(self._get_game_state(),'countfnyt'):self._ get_game_state().countfnyt = 0
if not hasattr(self._get_game_state(), 'countnyt'):self._get_game_state().countnyt = 0
if not hasattr(self._get_game_state(), 'sendNewYearGift'):self._get_game_state().sendNewY earGift = 0
if not hasattr(self._get_game_state(), 'gameObjects') and self._get_game_state().countfnyt < len(friends):
user = friends[self._get_game_state().countfnyt]
print (u"######### Идем к другу "+str(user)+" "+str(self._get_game_state().countfnyt+1)+"/"+str(len(friends))+" #########").encode('cp866')
self._get_events_sender().send_game_events([{"action":"gameState","locationId":"main","user":s tr(user),"objId":None,"type":"gameState"},{"type": "players","action":"getInfo","players":[str(user)]}])
self._get_game_state().countfnyt += 1
elif hasattr(self._get_game_state(), 'gameObjects'):# and
open('objects.txt', 'a').write(str(friends[self._get_game_state().countfnyt])+"\n")
print "############### gameObjects #################"
countnyt = 0
countmyg = 0
countpickup = 0
objssvl = []
if hasattr(self._get_game_state(),'alldigged'):alldig ged = 1
else: alldigged = 0
for object in self._get_game_state().gameObjects:
if self._get_game_state().countnyt + countnyt < 148:
if hasattr(object, 'type'):
tf = 0
if object.type == 'newYearTree':
tf = 1
usrs = len(object.users)
#object.users = usrs
#open('newyeartree.txt', 'a').write(str(obj2dict(object))+"\n")
if tf == 1 and not hasattr(self._get_game_state(), 'nytend'):
print (u"Ёлка !!!").encode('cp866')
#open('gameObjects.txt', 'a').write(str(obj2dict(object))+"\n")
#open('newyeartree.txt', 'a').write(object.item + " UsersGift:" + str(len(object.users)) + "\n")
tf = 1
f = 0
#Ёлки разной ёмкости. указано не точно.
if object.item == u'@B_SPRUCE_SMOLL' and len(object.users) < 3: f = 1
if object.item == u'@B_SPRUCE_MIDDLE' and len(object.users) < 6: f = 1
if object.item == u'@B_SPRUCE_BIG' and len(object.users) < 15: f = 1
#if object.item == u'@B_BASKETS_EASTER_1' and len(object.users) < 15: f = 1
#if object.item == u'@B_BASKETS_EASTER_2' and len(object.users) < 7: f = 1
#if object.item == u'@B_BASKETS_EASTER_3' and len(object.users) < 3: f = 1
for user in object.users:
if user.id == myid:
countmyg+=1#print "MyGift"
f = 0
break
#if not check_no_my_gift(object.users): f = 1
if self._get_game_state().countnyt + countnyt > 151 or hasattr(self._get_game_state(),'nyna'):
self._get_game_state().nytend = 1
print "################## END ####################"
f = 0 #0 - Пряники не ложим, 1 - пряники ложим
if f == 1:
# Ложим пряник
#open('newyeartree.txt', 'a').write(str(obj2dict(object)) + "\n")
self._get_events_sender().send_game_events([{"itemId":"CAKE_PACK_FREE1","action":"remoteNewYea r","type":"item","objId"bject.id}])
countnyt+=1
pass
else: print "NO"
# Вскрываем сундук
if tf == 0 and object.type == 'pickup':
open('sunduki.txt', 'a').write(str(obj2dict(object)) + "\n")
self._get_events_sender().send_game_events([{"action":"pick","type":"item","objId"bject.i d}])
countpickup+=1
tf = 2
# Добавляем в список объекты для копания клада
if tf == 0 and alldigged == 0:
for objtype in objtypes:
if object.type == objtype:
if object.item == '@DS_SYMBOL_E' or object.item == '@D_BALLOONS' or object.item == '@D_SAKURASMALL':
print object.item,object.id
objssvl.append(object)
break
if tf == 0:
open('objects.txt', 'a').write(str(obj2dict(object))+"\n")
if hasattr(self._get_game_state(),'playersInfo'):
open('objects.txt', 'a').write('-------------------------------------' + "\n")
#open('objects.txt', 'a').write(str(obj2dict(self._get_game_state().pla yersInfo))+"\n")
open('users.txt', 'a').write(str(obj2dict(self._get_game_state().pla yersInfo))+"\n")
open('objects.txt', 'a').write('-------------------------------------' + "\n")
countlop = 0
if len(objssvl) > 0:
for i in range(300):
objdig = random_number.choice(objssvl)
self._get_events_sender().send_game_events([{"objId"bjdig.id,"x"bjdig.x,"action":"remoteDi g","y"bjdig.y,"type":"item"}])
countlop+=1
print (u"Использовал: "+str(countlop)+u" лопат").encode('cp866')
elif alldigged == 1: print (u'Всё уже выкопано!').encode('cp866')
else: print (u'Нечего копать!').encode('cp866')
print (u"Вскрыли сундуков: "+str(countpickup)).encode('cp866')
if hasattr(self._get_game_state(),'alldigged'): del self._get_game_state().alldigged
del self._get_game_state().gameObjects
self._get_game_state().countnyt += countnyt
print (u"поЛожил пряник(ов): "+str(self._get_game_state().sendNewYearGift)+":"+ str(self._get_game_state().countnyt)+"/"+str(countnyt)+" dub: "+str(countmyg)).encode('cp866')
self._get_game_state().shovel = 0
#if self._get_game_state().countfnyt + 1 > len(friends):sys.exit(0)
появилась мысля!нужно через чарлика или как-нить еще посмотреть все ID игроков,или с одтельным модулем и записать их в текстовый документ,далее при загрузке копки...или как это правильно изложить мысль...вобщем айдишники для мыла будут загружаться из данного документа...ну например friendsIdmail.txt как то так.....есть какие предложения по этому поводу?
Последний раз редактировалось Cheater84; 23.02.2014 в 02:05.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
всё, слепил из кусков работающего копателя, вроде всё фурычит
[Ссылки могут видеть только зарегистрированные пользователи. ]
.............
теперь нужно сделать как то , чтоб он розпознавал только тех, у кого можно копать,
чтоб как то в отдельный файлик записывались id тех кто помечен зелёным, а бот потом
свободно брал эти id, и копал по ним,
никто не вкурсе как это сделать?
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от zloy_gnom_2012
всё, слепил из кусков работающего копателя, вроде всё фурычит
[Ссылки могут видеть только зарегистрированные пользователи. ]
.............
теперь нужно сделать как то , чтоб он розпознавал только тех, у кого можно копать,
чтоб как то в отдельный файлик записывались id тех кто помечен зелёным, а бот потом
свободно брал эти id, и копал по ним,
никто не вкурсе как это сделать?
что в нем изменилось в твоем (слепке)? можно в кратце?
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от zloy_gnom_2012
он копать начал
а если серьёзно, то из твоего бота и ещё какого то бота слепил один робочий...
Добавлено через 2 минуты
кстати , бот , который на в вк залит [Ссылки могут видеть только зарегистрированные пользователи. ]
он что то не хочет нифига делать, только по островам бегает..
потому что я не обновляю там уже давно ничего,во-первых нет времени,во - вторых уж слишком много людей знают про бота ,да еще такие которые не знают что такое РАЗАРХИВИРОВАТЬ....человек ввел данные прямо в архиве и там же его запускает...вот скажи есть смысл что либо выкладывать в открытый доступ?......
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Cheater84
потому что я не обновляю там уже давно ничего,во-первых нет времени,во - вторых уж слишком много людей знают про бота ,да еще такие которые не знают что такое РАЗАРХИВИРОВАТЬ....человек ввел данные прямо в архиве и там же его запускает...вот скажи есть смысл что либо выкладывать в открытый доступ?......
ну да , логики 0, а можешь дать робочего бота?
а то я с кусков леплю ... и получается куча мусора..
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от zloy_gnom_2012
ну да , логики 0, а можешь дать робочего бота?
а то я с кусков леплю ... и получается куча мусора..
у меня их несколько версий,каждый бот для чего-либо отдельно,вот бота на копку переписываю с print на logger.info....странно но стали появляться ошибки...короче будет время постараюсь разобраться что к чему....а бота сейчас основную версию свою скину...
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от zloy_gnom_2012
Ребят кто может сделать модуль на создание "хелий, клеверхела, чесночной"?
Есть созданный. Давно ) Так и быть, выложу.
Тут модуль для создания мозгов в "Останкино за монеты".
Хеллия, клеверхелл и чесночная лилия создаются при необходимости в корабле. Если не хватает для создания каких-либо компонентов (тыквахелл, клевер, лилия, чеснок или любовь) выдается предупреждение.
Если нету корабля и не хватает хеллии, то бот скажет сколько еще нужно её сварить.
Модуль создает мозги при первом запуске (т.е. мозги не создавались еще), либо добавляет до необходимого количества. Если время истечения действия мозга < 5 минут (можно поменять для подстраховки), то создается дубль для беспрерывной работы запущенных зомбей (при этом повторного дубля не будет !!!)
Строка 25
Код:
brains_const = 6 # Указываем нужное постоянное количество без имеющихся у игрока бесплатных
Думаю понятно на что менять.
Строка 132
Код:
if h==0 and m<=5:
5 меняем на большее/меньшее в зависимости от времени обхода ботом всех островов за 1 цикл. Не советую ставить много или мало, могут работающие зомби лечь спать.
Как подключить:
1. Открываем файл game_engine.py
2. В шапке вставляем строку
Код:
from game_actors_and_handlers.brains import GameBrains
3. В actor_classes = [ вставляем строку
Код:
GameBrains #Мозги
4. Сохраняем файл.
6. Файл во вложении сохраняем в папку бота game_actors_and_handlers
7. Переименовываем расширение с txt на py
8. Запускаем бот и радуемся
Вроде всё. Юзайте на здоровье, но помните: лень - это ЗЛО
Ах да. Модуль тестился в течении где-то 3-х месяцев. Мозги создавались исправно и в нужном количестве. Одно но, не проверены действия по контролю и созданию компонентов, поэтому, если вылезут косяки, то пишите - будем разбираться по возможности.
UPD. Останкино и Корабль должны стоять на одном острове, в модуле прописан домашний. Можно перенести, но тогда поменять в строке
Код:
if _loc == u'main':
main на ID нужного острова.
Последний раз редактировалось dark-dragon; 23.02.2014 в 17:30.