Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от eTorres
Зомби Фермер 2.3.1
[Ссылки могут видеть только зарегистрированные пользователи. ]
Надо протестировать, могут быть баги
eTorres, а может темку сделать отдельно для этого бота?) а с вылавливаем бажков я помогу) уже имеются))
Добавлено через 29 минут
Цитата:
Сообщение от Bezmen
У меня с новыми аккаунтами фбутилс неработает со старым аккаунтом работает там видимо какие-то изменения добавлены.А какие незнаю вот к примеру лог ошибки Connection: {'crc': 'f6c25012dddc559882d211a5f0512339', 'data': u'{"auth":"c5887bff69554a1a9b38fd387124432c","type ":"TIME","clientVersion":1441879202,"user":"100011 190765474","id":51,"key":"1454423961060"}'}
Response: {u'msg': u'user is not valid', u'cmd': u'ERR', u'id': u'51'}
Connection: {'crc': 'ae4e70dc9803b07c8f27d51816eed950', 'data': u'{"auth":"e05214615f176f0705aeef362ca5002f","type ":"TIME","clientVersion":1441879202,"user":"100011 190765474","id":57,"key":"1454423987221"}'}
Response: {u'msg': u'user is not valid', u'cmd': u'ERR', u'id': u'57'} и так бесконечно пробовал 3 аккаунта новые такая вот петрушка
у меня тоже новые акки не работают, а старый который отдал работает, не знаю в чем проблема
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Bezmen
У меня с новыми аккаунтами фбутилс неработает со старым аккаунтом работает там видимо какие-то изменения добавлены.А какие незнаю вот к примеру лог ошибки Connection: {'crc': 'f6c25012dddc559882d211a5f0512339', 'data': u'{"auth":"c5887bff69554a1a9b38fd387124432c","type ":"TIME","clientVersion":1441879202,"user":"100011 190765474","id":51,"key":"1454423961060"}'}
Response: {u'msg': u'user is not valid', u'cmd': u'ERR', u'id': u'51'}
Connection: {'crc': 'ae4e70dc9803b07c8f27d51816eed950', 'data': u'{"auth":"e05214615f176f0705aeef362ca5002f","type ":"TIME","clientVersion":1441879202,"user":"100011 190765474","id":57,"key":"1454423987221"}'}
Response: {u'msg': u'user is not valid', u'cmd': u'ERR', u'id': u'57'} и так бесконечно пробовал 3 аккаунта новые такая вот петрушка
"user":"100011 190765474"
я не уверен но мне кажется что дело в иде пользователя.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Bezmen
С ид всё в порядке.Бот от Woowap отлично заходит логинится и тд но мне нужен Zombot так как у него функционал больше Знать бы какие изменения
тоесть ты хочешь сказать что это твой ид??? "100011 190765474"
тебе даже сервер сообщение кидает что пользователь не правильный. 'user is not valid'
но конечно я могу ошибаться. может у всех в фейсбуке ид через пробел))
кинь свой fbutils попробую у себя.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от viver9
тоесть ты хочешь сказать что это твой ид??? "100011 190765474"
тебе даже сервер сообщение кидает что пользователь не правильный. 'user is not valid'
но конечно я могу ошибаться. может у всех в фейсбуке ид через пробел))
кинь свой fbutils попробую у себя.
Это сообщение так форум изменил так ид слитно идёт.Повторюсь это новые созданные аккаунты так себя ведут старые заходят хорошо без нареканий!!!Но Ботом Woowap новые аккаунты работают также как и старые но у него бот написан на PHP как там соединение идёт незнаю
fbutils.py
[Ссылки могут видеть только зарегистрированные пользователи. ]
Последний раз редактировалось Bezmen; 03.02.2016 в 22:03.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Bezmen
Это сообщение так форум изменил так ид слитно идёт.Повторюсь это новые созданные аккаунты так себя ведут старые заходят хорошо без нареканий!!!Но Ботом Woowap новые аккаунты работают также как и старые но у него бот написан на PHP как там соединение идёт незнаю
fbutils.py
[Ссылки могут видеть только зарегистрированные пользователи. ]
у меня старица старая но таже ошибка.
вообщем модуль почему то берет ид из куки. а там ид страницы а не игровой.
для одной страницы исправить просто. в нужном месте вписать свой игровой ид и все работает.
а для нескольких или каждый раз менять или придумать как парсить игровой ид.
userID='свой_ид'
[Ссылки могут видеть только зарегистрированные пользователи. ]
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от maroder912
В чем причина когда бот работает на одном острове работает без перебоев,а по всем островам постоянно пишет timeout occured
Да вообще уже ботом невозможно пользоваться...(( Это тебе еще везет что у тебя только когда по островам бегает выкидывает timeout occured, у меня из за обилия рыбаков он с домашки даже убежать не успевает. А когда все 6 основных аков запускаешь разом так еще и вылетать начинает(там тоже как бы по 28 островам каждый из них должен бегать). Клонов не оживить, пол часа уходит на 30 штук, а раньше уходило минуты 3 максимум, да и 6 основных никогда не вылетали... Короче вообще беда...(( Надеюсь, что кто нибудь подскажет как эту болезнь побороть!
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от viver9
у меня старица старая но таже ошибка.
вообщем модуль почему то берет ид из куки. а там ид страницы а не игровой.
для одной страницы исправить просто. в нужном месте вписать свой игровой ид и все работает.
а для нескольких или каждый раз менять или придумать как парсить игровой ид.
userID='свой_ид'
[Ссылки могут видеть только зарегистрированные пользователи. ]
Спасибо дружище ну хотя бы так на время подставил ид действительно стало работать!!Ну может кто нибудь из знающих запилит потом по возможности парсер а пока можно и так.Правда на каждый акаунт отдельную папку с ботом но это уже мелочи.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Друзья, у кого рабочий модуль на закопку соседей есть??? Есть два, этот делает вид что закапывает, пишет свободный слот-> закапываю, а по сути ничего не делает( правда 1 раз всё же двоих закопал, чудом не иначе)
[SPOILER="Первый"]
Код:
## coding=utf-8
import logging
from game_state.game_event import dict2obj, obj2dict
from game_actors_and_handlers.base import BaseActor
from game_state.game_types import GameWoodTree, GameStone
import sys
##############################
from ctypes import windll
import sys
##############################
#import sys.stdout
logger = logging.getLogger(__name__)
class DigBot(BaseActor):
def perform_action(self):
friends = self._get_options()
if friends == [] or friends == None:
return
#print 'friends ', friends
i=0
freeslots=[]
#open('burySlots.txt', 'w').write(str(obj2dict(self._get_game_state().get_state().burySlots)))
for burySlot in self._get_game_state().get_state().burySlots:
if not hasattr(burySlot, 'user'):
#print str(i) + " " + 'Free'
freeslots.append(i)
i+=1
#else:
#print str(i) + " " + burySlot.user
if freeslots == []: return #если все слоты заняты выходим из функции
friendsslot=[]
for slot in freeslots:
print u'Слот свободен: ' + str(slot+1)
friendsslot.append(friends[slot])
#обратный счетчик раскопки
if hasattr(self._get_game_state(), 'digOut'):
self._get_game_state().digOut -= 1
#print self._get_game_state().digOut
if self._get_game_state().digOut < 0:
del self._get_game_state().digOut
else: return
if hasattr(self._get_game_state(), 'playersInfo'):
#players_info = self._get_game_state().evinf
players_info = self._get_game_state().playersInfo
print 'playersInfo:', len(players_info)
else:
self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friendsslot}])
print u'Запрашиваем инфу о друзьях'
return
for slot in freeslots:
#print u'обрабатываем слот', slot+1
#self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friends[slot]}])
#print u'Запрашиваем/обновляем инфу о друге'
load = False
for info in players_info:
if friends[slot] == str(info.id):
load = True
break
if load:
if hasattr(info, 'buried'):
print u'Раскапываем: ', str(info.id)
cook_event = {"user":str(info.id),"type":"bury","action":"digOut"}
self._get_events_sender().send_game_events([cook_event])
del info.buried
if not hasattr(self._get_game_state(), 'digOut'):
self._get_game_state().digOut = 2
continue
text = u'Закапываем: '
text += u' в слот '+str(slot+1)
print text
cook_event = {"action":"bury","type":"bury","user":str(info.id),"slot":slot}
self._get_events_sender().send_game_events([cook_event])
self._get_game_state().get_state().burySlots[slot].user = friends[slot]
[/SPOILER]
И второй, этот исправно показывает, что все четыре слота свободны и количество друзей такое-то, вобщем и на том спасибо. Вроде никогда их не использовал, а тут понадобились и оказалось где то собака порылась.
Код:
# coding=utf-8
import logging
from game_actors_and_handlers.base import BaseActor
from game_state.game_event import dict2obj, obj2dict
from message_factory import Session
import sys
from ctypes import windll
import time
logger = logging.getLogger(__name__)
stdout_handle = windll.kernel32.GetStdHandle(-11)
SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
class DigBot(BaseActor):
def perform_action(self):
friends = self._get_options()[0]
myid = self._get_options()[1]
#обратный счетчик раскопки
if hasattr(self._get_game_state(), 'digOut'):
if self._get_game_state().digOut > time.time():
return
else:
del self._get_game_state().digOut
#если закопаны, раскапываемся
try: Buried = self._get_game_state().get_state().buriedBy
except: Buried = None
if Buried:
SetConsoleTextAttribute(stdout_handle, 0x0005 | 0x0078)
print (u'!!!! Раскапываемся !!!!').encode('cp866')
SetConsoleTextAttribute(stdout_handle, 0x0001 | 0x0078)
sys.stdout.flush()
self._get_events_sender().send_game_events([{"user":str(myid),"slot":-1,"type":"bury","action":"digOut"}])
self._get_game_state().digOut = time.time() + 32
Buried = None
del self._get_game_state().get_state().buriedBy
return
if friends == [] or friends == None:
return
i = 0
freeslots = []
#open('burySlots.txt', 'w').write(str(obj2dict(self._get_game_state().get_state().burySlots)))
for burySlot in self._get_game_state().get_state().burySlots:
if not hasattr(burySlot, 'user'):
#print str(i) + " " + 'Free'
freeslots.append(i)
i += 1
#else:
#print str(i) + " " + burySlot.user
if freeslots == []: return #если все слоты заняты выходим из функции
friendsslot = []
for slot in freeslots:
print u'Слот свободен: ' + str(slot + 1)
friendsslot.append(friends[slot])
if hasattr(self._get_game_state(), 'playersInfo'):
players_info = self._get_game_state().playersInfo
print 'playersInfo:', len(players_info)
else:
self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friendsslot}])
print u'Запрашиваем инфу о друзьях'
return
for slot in freeslots:
#print u'обрабатываем слот', slot+1
#self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friends[slot]}])
#print u'Запрашиваем/обновляем инфу о друге'
load = False
for info in players_info:
if str(friends[slot]) == str(info.id):
load = True
break
if load:
if hasattr(info, 'buried'):
print u'Раскапываем: ', str(info.id)
cook_event = {"user":str(info.id),"type":"bury","action":"digOut"}
self._get_events_sender().send_game_events([cook_event])
del info.buried
self._get_game_state().digOut = time.time() + 5
text = u'Закапываем: '+str(info.id)
if hasattr(info, 'name') and info.name:
text += u' ' + info.name
text += u' в слот '+str(slot+1)
print text
cook_event = {"action":"bury","type":"bury","user":str(info.id),"slot":slot}
self._get_events_sender().send_game_events([cook_event])
self._get_game_state().get_state().burySlots[slot].user = friends[slot]
На всякий случай вот мой game_engine [Ссылки могут видеть только зарегистрированные пользователи. ]
P.S. Как тут под сполер прятать???
Последний раз редактировалось ripton07; 04.02.2016 в 13:36.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Bezmen
Спасибо дружище ну хотя бы так на время подставил ид действительно стало работать!!Ну может кто нибудь из знающих запилит потом по возможности парсер а пока можно и так.Правда на каждый акаунт отдельную папку с ботом но это уже мелочи.
вот более удобный код. просто введи сразу ид страницы и ид игры для каждого фейка.
userIDS={
'ид_страницы':'ид_игры',
'ид_страницы':'ид_игры',
'ид_страницы':'ид_игры',
}
if userID in userIDS.keys():
userID=userIDS[userID]
[Ссылки могут видеть только зарегистрированные пользователи. ]
Друзья, у кого рабочий модуль на закопку соседей есть??? Есть два, этот делает вид что закапывает, пишет свободный слот-> закапываю, а по сути ничего не делает( правда 1 раз всё же двоих закопал, чудом не иначе)
[SPOILER="Первый"]
Код:
## coding=utf-8
import logging
from game_state.game_event import dict2obj, obj2dict
from game_actors_and_handlers.base import BaseActor
from game_state.game_types import GameWoodTree, GameStone
import sys
##############################
from ctypes import windll
import sys
##############################
#import sys.stdout
logger = logging.getLogger(__name__)
class DigBot(BaseActor):
def perform_action(self):
friends = self._get_options()
if friends == [] or friends == None:
return
#print 'friends ', friends
i=0
freeslots=[]
#open('burySlots.txt', 'w').write(str(obj2dict(self._get_game_state().get_state().burySlots)))
for burySlot in self._get_game_state().get_state().burySlots:
if not hasattr(burySlot, 'user'):
#print str(i) + " " + 'Free'
freeslots.append(i)
i+=1
#else:
#print str(i) + " " + burySlot.user
if freeslots == []: return #если все слоты заняты выходим из функции
friendsslot=[]
for slot in freeslots:
print u'Слот свободен: ' + str(slot+1)
friendsslot.append(friends[slot])
#обратный счетчик раскопки
if hasattr(self._get_game_state(), 'digOut'):
self._get_game_state().digOut -= 1
#print self._get_game_state().digOut
if self._get_game_state().digOut < 0:
del self._get_game_state().digOut
else: return
if hasattr(self._get_game_state(), 'playersInfo'):
#players_info = self._get_game_state().evinf
players_info = self._get_game_state().playersInfo
print 'playersInfo:', len(players_info)
else:
self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friendsslot}])
print u'Запрашиваем инфу о друзьях'
return
for slot in freeslots:
#print u'обрабатываем слот', slot+1
#self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friends[slot]}])
#print u'Запрашиваем/обновляем инфу о друге'
load = False
for info in players_info:
if friends[slot] == str(info.id):
load = True
break
if load:
if hasattr(info, 'buried'):
print u'Раскапываем: ', str(info.id)
cook_event = {"user":str(info.id),"type":"bury","action":"digOut"}
self._get_events_sender().send_game_events([cook_event])
del info.buried
if not hasattr(self._get_game_state(), 'digOut'):
self._get_game_state().digOut = 2
continue
text = u'Закапываем: '
text += u' в слот '+str(slot+1)
print text
cook_event = {"action":"bury","type":"bury","user":str(info.id),"slot":slot}
self._get_events_sender().send_game_events([cook_event])
self._get_game_state().get_state().burySlots[slot].user = friends[slot]
[/SPOILER]
И второй, этот исправно показывает, что все четыре слота свободны и количество друзей такое-то, вобщем и на том спасибо. Вроде никогда их не использовал, а тут понадобились и оказалось где то собака порылась.
Код:
# coding=utf-8
import logging
from game_actors_and_handlers.base import BaseActor
from game_state.game_event import dict2obj, obj2dict
from message_factory import Session
import sys
from ctypes import windll
import time
logger = logging.getLogger(__name__)
stdout_handle = windll.kernel32.GetStdHandle(-11)
SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
class DigBot(BaseActor):
def perform_action(self):
friends = self._get_options()[0]
myid = self._get_options()[1]
#обратный счетчик раскопки
if hasattr(self._get_game_state(), 'digOut'):
if self._get_game_state().digOut > time.time():
return
else:
del self._get_game_state().digOut
#если закопаны, раскапываемся
try: Buried = self._get_game_state().get_state().buriedBy
except: Buried = None
if Buried:
SetConsoleTextAttribute(stdout_handle, 0x0005 | 0x0078)
print (u'!!!! Раскапываемся !!!!').encode('cp866')
SetConsoleTextAttribute(stdout_handle, 0x0001 | 0x0078)
sys.stdout.flush()
self._get_events_sender().send_game_events([{"user":str(myid),"slot":-1,"type":"bury","action":"digOut"}])
self._get_game_state().digOut = time.time() + 32
Buried = None
del self._get_game_state().get_state().buriedBy
return
if friends == [] or friends == None:
return
i = 0
freeslots = []
#open('burySlots.txt', 'w').write(str(obj2dict(self._get_game_state().get_state().burySlots)))
for burySlot in self._get_game_state().get_state().burySlots:
if not hasattr(burySlot, 'user'):
#print str(i) + " " + 'Free'
freeslots.append(i)
i += 1
#else:
#print str(i) + " " + burySlot.user
if freeslots == []: return #если все слоты заняты выходим из функции
friendsslot = []
for slot in freeslots:
print u'Слот свободен: ' + str(slot + 1)
friendsslot.append(friends[slot])
if hasattr(self._get_game_state(), 'playersInfo'):
players_info = self._get_game_state().playersInfo
print 'playersInfo:', len(players_info)
else:
self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friendsslot}])
print u'Запрашиваем инфу о друзьях'
return
for slot in freeslots:
#print u'обрабатываем слот', slot+1
#self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friends[slot]}])
#print u'Запрашиваем/обновляем инфу о друге'
load = False
for info in players_info:
if str(friends[slot]) == str(info.id):
load = True
break
if load:
if hasattr(info, 'buried'):
print u'Раскапываем: ', str(info.id)
cook_event = {"user":str(info.id),"type":"bury","action":"digOut"}
self._get_events_sender().send_game_events([cook_event])
del info.buried
self._get_game_state().digOut = time.time() + 5
text = u'Закапываем: '+str(info.id)
if hasattr(info, 'name') and info.name:
text += u' ' + info.name
text += u' в слот '+str(slot+1)
print text
cook_event = {"action":"bury","type":"bury","user":str(info.id),"slot":slot}
self._get_events_sender().send_game_events([cook_event])
self._get_game_state().get_state().burySlots[slot].user = friends[slot]
На всякий случай вот мой game_engine [Ссылки могут видеть только зарегистрированные пользователи. ]
i=0
freeslots=[]
#open('burySlots.txt', 'w').write(str(obj2dict(self._get_game_state().get_state().burySlots)))
for burySlot in self._get_game_state().get_state().burySlots:
if not hasattr(burySlot, 'user'):
#print str(i) + " " + 'Free'
freeslots.append(i)
i+=1
#else:
#print str(i) + " " + burySlot.user
if freeslots == []: return #если все слоты заняты выходим из функции
friendsslot=[]
for slot in freeslots:
print u'Слот свободен: ' + str(slot+1)
friendsslot.append(friends[slot])
#обратный счетчик раскопки
if hasattr(self._get_game_state(), 'digOut'):
self._get_game_state().digOut -= 1
#print self._get_game_state().digOut
if self._get_game_state().digOut < 0:
del self._get_game_state().digOut
else: return
if hasattr(self._get_game_state(), 'playersInfo'):
#players_info = self._get_game_state().evinf
players_info = self._get_game_state().playersInfo
print 'playersInfo:', len(players_info)
else:
self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friendsslot}])
print u'Запрашиваем инфу о друзьях'
return
for slot in freeslots:
#print u'обрабатываем слот', slot+1
#self._get_events_sender().send_game_events([{"type":"players","action":"getInfo","players":friends[slot]}])
#print u'Запрашиваем/обновляем инфу о друге'
load = False
for info in players_info:
if friends[slot] == str(info.id):
load = True
break
if load:
if hasattr(info, 'buried'):
print u'Раскапываем: ', str(info.id)
cook_event = {"user":str(info.id),"type":"bury","action":"digOut"}
self._get_events_sender().send_game_events([cook_event])
del info.buried
if not hasattr(self._get_game_state(), 'digOut'):
self._get_game_state().digOut = 2
continue
text = u'Закапываем: '+str(info.id)
if hasattr(info, 'name') and info.name:
text += u' '+str(info.id)
text += u' в слот '+str(slot+1)
print text
cook_event = {"action":"bury","type":"bury","user":str(info.id),"slot":slot}
self._get_events_sender().send_game_events([cook_event])
self._get_game_state().get_state().burySlots[slot].user = friends[slot]
def cprint(self, cstr):
clst = cstr.split('^')
color = 0x0001
for cstr in clst:
dglen = re.search("\D", cstr).start()
color = int(cstr[:dglen])
text = cstr[dglen:]
if text[:1] == "_": text = text[1:]
SetConsoleTextAttribute(stdout_handle, color | 0x0008)
print text,
#sys.stdout.flush()
print ""
SetConsoleTextAttribute(stdout_handle, 0x0002 | 0x0008)
в game_engine -
PHP код:
from game_actors_and_handlers.burrowing import DigBot
в game_engine, class Game() - там где #load settings
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от ripton07
Друзья, у кого рабочий модуль на закопку соседей есть??? Есть два, этот делает вид что закапывает, пишет свободный слот-> закапываю, а по сути ничего не делает( правда 1 раз всё же двоих закопал, чудом не иначе)
И второй, этот исправно показывает, что все четыре слота свободны и количество друзей такое-то, вобщем и на том спасибо. Вроде никогда их не использовал, а тут понадобились и оказалось где то собака порылась.
Второй правильный. Это мой 1 в 1. Работает как часы.
Ты неправильно в game_engine ему параметры передаёшь.
Вместо
PHP код:
'DigBot':self.__friendsid,
должно быть
PHP код:
'DigBot':[self.__selected_dig_friends,my_id],
Естественно в конструкторе def __init__ класса class Game(): делжно быть получение из сеттинга
И в самом setting.ini должен быть метод getUserDig()
Ещё в модуль передаётся my_id - это наш id нужен для раскопки. Либо тянуть его через пол бота (у меня), либо указать вручную.
Ну и вариант: выпилить раскапывание из бурровинга убрав передачу my_id