Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от CheloveKkK
разобрался
Добавлено через 16 минут
Кто нибудь вкурсе как приобрести онлайн версию бота znest.ru ?А то этот [продавец 80лвл] ни по почте ни ВК не отвечает уже второй месяц
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
заметил что на пиратском острове бот почему то работает странно...
не рубит ничего без мачете... то есть топоры и кирки по 50-100 штук с лишним, а пока мачете не появится - не пользует их(((
Гляньте в чём проблема?!
chop.py
Код:
# 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"]
_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 = 0
CHOP_AXE = 0
CHOP_HAMMER = 0
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("Нет неоткрытых сокровищ")
да и вскрывает как то тоже странно... если включить в game_engine BoxPickuper - натыкаясь на сильвера - циклическая перезагрузка... выключаю, после вырубки всего, много не вскрытых кладов остаётся, приходится вручную, из браузера открывать, а многие уже другими вскрыты(((
вот тоже подскажите что изменить? (сам пробовал, ошибки сыпет)
pickups.py
Код:
# coding=utf-8
import logging
from game_state.game_types import GamePickPickup, GamePickItem, GamePickup
from game_actors_and_handlers.base import BaseActor
logger = logging.getLogger(__name__)
class Pickuper(BaseActor):
def perform_action(self):
pickups = self._get_game_location().get_pickups()
self.pick_pickups(pickups)
def pick_pickups(self, pickups):
if pickups:
logger.info(u'Подбираем дроп...')
all_pick = []
for pickup in pickups:
pick_event = GamePickPickup([pickup])
all_pick += [pick_event]
if len(all_pick)>0:
self._get_events_sender().send_game_events(all_pick)
for pickup in pickups:
self._get_game_location().remove_pickup(pickup)
'''
for pickup in pickups:
pick_event = GamePickPickup([pickup])
self._get_events_sender().send_game_events([pick_event])
self._get_game_location().remove_pickup(pickup)'''
class BoxPickuper(BaseActor):
def getOpeningPriceMsg(self, boxItem):
openingPrice = boxItem.openingPrice[0]
count = openingPrice.count
item_name = self._get_item_reader().get(openingPrice.item).name
price_msg = u'%d %s' % (count, item_name)
return price_msg
def perform_action(self):
boxes = self._get_game_location().get_all_objects_by_type(
GamePickup.type)
for box in boxes:
name = self._get_item_reader().get_name(box)
boxItem = self._get_item_reader().get(box.item)
if not hasattr(boxItem, 'openingPrice'):
logger.info(u'Вскрываем %s' % name)
pick_event = GamePickItem(objId=box.id)
self._get_events_sender().send_game_events([pick_event])
self._get_game_location().remove_object_by_id(box.id)
class AddPickupHandler(object):
def __init__(self, itemReader, game_location, game_state, setting_view):
self.__game_loc = game_location
self.__item_reader = itemReader
self.__game_state_ = game_state
self.__setting_view = setting_view
def handle(self, event_to_handle):
if event_to_handle is None:
logger.critical("OMG! No such object")
return
else:
tmp={}
for pickup in event_to_handle.pickups:
item_type_msg = {
'coins':
lambda pickup: u'денег',
'xp':
lambda pickup: u'опыта',
'collection':
lambda pickup: u'предмет(ов) коллекции ',
'storageItem':
lambda pickup: u'предмет(ов) ',
'shovel':
lambda pickup: u'лопат',
'scrapItem':
lambda pickup: u'шт. металлолома'
}.get(pickup.type, lambda pickup: pickup.type)(pickup)
if (pickup.type=='collection') or (pickup.type=='storageItem'):
item_type_msg = ('%s%s'%(item_type_msg,self.__item_reader.get(pickup.id).name))
if item_type_msg in tmp.keys(): tmp[item_type_msg]+=pickup.count
else: tmp[item_type_msg]=pickup.count
# Добавление в game_state
if hasattr(pickup, "id"):
self.__game_state_.add_from_storage('@'+pickup.id, pickup.count)
if self.__setting_view['pickup']:
if len(tmp.keys())>0:
for i in tmp.keys():
logger.info(u'Подобрали %d %s' % (tmp[i], i))
self.__game_loc.add_pickups(event_to_handle.pickups)
Последний раз редактировалось GadW1n; 18.05.2015 в 03:03.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от GadW1n
заметил что на пиратском острове бот почему то работает странно...
не рубит ничего без мачете... то есть топоры и кирки по 50-100 штук с лишним, а пока мачете не появится - не пользует их(((
Гляньте в чём проблема?!
chop.py
Код:
# 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"]
_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 = 0
CHOP_AXE = 0
CHOP_HAMMER = 0
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("Нет неоткрытых сокровищ")
да и вскрывает как то тоже странно... если включить в game_engine BoxPickuper - натыкаясь на сильвера - циклическая перезагрузка... выключаю, после вырубки всего, много не вскрытых кладов остаётся, приходится вручную, из браузера открывать, а многие уже другими вскрыты(((
вот тоже подскажите что изменить? (сам пробовал, ошибки сыпет)
pickups.py
Код:
# coding=utf-8
import logging
from game_state.game_types import GamePickPickup, GamePickItem, GamePickup
from game_actors_and_handlers.base import BaseActor
logger = logging.getLogger(__name__)
class Pickuper(BaseActor):
def perform_action(self):
pickups = self._get_game_location().get_pickups()
self.pick_pickups(pickups)
def pick_pickups(self, pickups):
if pickups:
logger.info(u'Подбираем дроп...')
all_pick = []
for pickup in pickups:
pick_event = GamePickPickup([pickup])
all_pick += [pick_event]
if len(all_pick)>0:
self._get_events_sender().send_game_events(all_pick)
for pickup in pickups:
self._get_game_location().remove_pickup(pickup)
'''
for pickup in pickups:
pick_event = GamePickPickup([pickup])
self._get_events_sender().send_game_events([pick_event])
self._get_game_location().remove_pickup(pickup)'''
class BoxPickuper(BaseActor):
def getOpeningPriceMsg(self, boxItem):
openingPrice = boxItem.openingPrice[0]
count = openingPrice.count
item_name = self._get_item_reader().get(openingPrice.item).name
price_msg = u'%d %s' % (count, item_name)
return price_msg
def perform_action(self):
boxes = self._get_game_location().get_all_objects_by_type(
GamePickup.type)
for box in boxes:
name = self._get_item_reader().get_name(box)
boxItem = self._get_item_reader().get(box.item)
if not hasattr(boxItem, 'openingPrice'):
logger.info(u'Вскрываем %s' % name)
pick_event = GamePickItem(objId=box.id)
self._get_events_sender().send_game_events([pick_event])
self._get_game_location().remove_object_by_id(box.id)
class AddPickupHandler(object):
def __init__(self, itemReader, game_location, game_state, setting_view):
self.__game_loc = game_location
self.__item_reader = itemReader
self.__game_state_ = game_state
self.__setting_view = setting_view
def handle(self, event_to_handle):
if event_to_handle is None:
logger.critical("OMG! No such object")
return
else:
tmp={}
for pickup in event_to_handle.pickups:
item_type_msg = {
'coins':
lambda pickup: u'денег',
'xp':
lambda pickup: u'опыта',
'collection':
lambda pickup: u'предмет(ов) коллекции ',
'storageItem':
lambda pickup: u'предмет(ов) ',
'shovel':
lambda pickup: u'лопат',
'scrapItem':
lambda pickup: u'шт. металлолома'
}.get(pickup.type, lambda pickup: pickup.type)(pickup)
if (pickup.type=='collection') or (pickup.type=='storageItem'):
item_type_msg = ('%s%s'%(item_type_msg,self.__item_reader.get(pickup.id).name))
if item_type_msg in tmp.keys(): tmp[item_type_msg]+=pickup.count
else: tmp[item_type_msg]=pickup.count
# Добавление в game_state
if hasattr(pickup, "id"):
self.__game_state_.add_from_storage('@'+pickup.id, pickup.count)
if self.__setting_view['pickup']:
if len(tmp.keys())>0:
for i in tmp.keys():
logger.info(u'Подобрали %d %s' % (tmp[i], i))
self.__game_loc.add_pickups(event_to_handle.pickups)
Может этот пикапер поможет?
PHP код:
# coding=utf-8
import logging
from game_state.game_types import GamePickPickup, GamePickItem, GamePickup
from game_actors_and_handlers.base import BaseActor
from game_state.game_event import dict2obj, obj2dict
def pick_pickups(self, pickups):
if pickups:
logger.info(u'Подбираем дроп...')
all_pick = []
for pickup in pickups:
pick_event = GamePickPickup([pickup])
all_pick += [pick_event]
if len(all_pick)>0:
self._get_events_sender().send_game_events(all_pick)
for pickup in pickups:
self._get_game_location().remove_pickup(pickup)
'''
for pickup in pickups:
pick_event = GamePickPickup([pickup])
self._get_events_sender().send_game_events([pick_event])
self._get_game_location().remove_pickup(pickup)'''
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Прошу прощения уважаемые гуру инета. А скрипта для сбора урожая аэропланом, для одноклассников нет? Смог прочитать только до 101 страницы и чуть не тронулся умом. Может кто поможет???
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от ЯСергей
Прошу прощения уважаемые гуру инета. А скрипта для сбора урожая аэропланом, для одноклассников нет? Смог прочитать только до 101 страницы и чуть не тронулся умом. Может кто поможет???
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
пытаюсь походить по друзьям - выдаёт такое(((
Цитата:
2015-05-25 01:35:39,078
Traceback (most recent call last):
File "main.py", line 93, in <module>
run_game()
File "main.py", line 74, in run_game
Game(site, settings, UserPrompt(gui_input), gui_input=gui_input).start()
File "c:\Bot\kopk\game_engine.py", line 498, in start
self.eventLoop()
File "c:\Bot\kopk\game_engine.py", line 552, in eventLoop
self.perform_all_actions()
File "c:\Bot\kopk\game_engine.py", line 638, in perform_all_actions
actor.perform_action()
File "c:\Bot\kopk\game_actors_and_handlers\friends. py", line 46, in perform_ac
tion
curuser = self._get_options()[0][0]
TypeError: 'int' object has no attribute '__getitem__'
Не согласованные файлы game_engine и okutils. Или от разных сборок/редакций или изменения проводимые в vkutils не вносили в okutils.
В частности что получает и возвращает метод def create_start_command
Всем же плевать. Они редактируют только под ВК, а остальное зачастую даже выпиливают из модулей.
целиком согласен... просто у всех сборная солянка из ботов, нет единообразия))) вот кто нибудь из "гуру" выложили бы доработанную на данный момент версию, под неё бы уже и дорабатывали люди))) ну это наверное мечты)))
Последний раз редактировалось GadW1n; 25.05.2015 в 00:52.
Причина: Добавлено сообщение
целиком согласен... просто у всех сборная солянка из ботов, нет единообразия))) вот кто нибудь из "гуру" выложили бы доработанную на данный момент версию, под неё бы уже и дорабатывали люди))) ну это наверное мечты)))
Выкладывать никто не будет, так как потом начнется еще тыщу пятьсот вопросов - как и куда и опять будет много переделываний и переписываний, так что проще уж самому собрать, а иначе это будет бесконечное топтание на годном и том же месте, здесь столько вопросов, которые еще были почти с самого начала, просто кому-то лень прочиталь - "от и до". Я бы выложил бот, он у меня везде работает, даже на фейсбуке, но.....опять возникает НО. потом начнется все с самого начала - "как , куда и для чего, а как заменить, а что с этим делать и так далее.."
Помогите с ботом на "ВЕРНОСТЬ"
Последний раз редактировалось Cheater-84; 25.05.2015 в 07:14.
целиком согласен... просто у всех сборная солянка из ботов, нет единообразия))) вот кто нибудь из "гуру" выложили бы доработанную на данный момент версию, под неё бы уже и дорабатывали люди))) ну это наверное мечты)))
Опять не тот game_engine, не передаются или не так передаются параметры в модуль.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Выкладывать никто не будет, так как потом начнется еще тыщу пятьсот вопросов - как и куда и опять будет много переделываний и переписываний, так что проще уж самому собрать, а иначе это будет бесконечное топтание на годном и том же месте, здесь столько вопросов, которые еще были почти с самого начала, просто кому-то лень прочиталь - "от и до". Я бы выложил бот, он у меня везде работает, даже на фейсбуке, но.....опять возникает НО. потом начнется все с самого начала - "как , куда и для чего, а как заменить, а что с этим делать и так далее.."
и тут согласен, но... множество вопросов как раз таки и возникают от "солянки"))) сам стараюсь уйти от вопросов, если они не критичны... вот вчера выложил вопрос, и немного поискав, в выложенных ранее сборниках нашёл рабочее решение... но мне кажется это не совсем правильное решение, когда за каждую отдельную функцию бота отвечает "другая" сборка... приходится держать зоопарк ботов, каждый для своего, какой то основной - садит вконтакте, другой то в одноклассниках работает, третий на пиратских себя раскрывает, четвёртый по друзьям ходит, и так до бесконечности...
сменили разработчики чтото, вы тут выложили фикс - отлично!!! только фикс в одной сборке работает на ура, в другой - как то хромает... третью вообще ломает... а четвёртую забыл сразу обновить и через неделю хрен разберёшь что и куда))) поэтому то я за унификацию)))
извините уж за флуд...
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от GadW1n
и тут согласен, но... множество вопросов как раз таки и возникают от "солянки"))) сам стараюсь уйти от вопросов, если они не критичны... вот вчера выложил вопрос, и немного поискав, в выложенных ранее сборниках нашёл рабочее решение... но мне кажется это не совсем правильное решение, когда за каждую отдельную функцию бота отвечает "другая" сборка... приходится держать зоопарк ботов, каждый для своего, какой то основной - садит вконтакте, другой то в одноклассниках работает, третий на пиратских себя раскрывает, четвёртый по друзьям ходит, и так до бесконечности...
сменили разработчики чтото, вы тут выложили фикс - отлично!!! только фикс в одной сборке работает на ура, в другой - как то хромает... третью вообще ломает... а четвёртую забыл сразу обновить и через неделю хрен разберёшь что и куда))) поэтому то я за унификацию)))
извините уж за флуд...
Я так же за унификацию, и пытался делать это с год назад на github там мой бот и лежит, но тогда особой поддержки не нашлось, хотя возможно плохо старался найти.
Сейчас же нужно все начинать с почти нуля, возможно выбрать не гитхаб а другой репозитарий, дабы в случае отсутствия кого-то одного проэкт работал дальше.
Кроме того нужна отдельная ветка обсуждение задач их реализации и контакт кто их сейчас реализует. Это можно в группе ВК организовать.
Добавлено через 6 часов 36 минут
Столкнулся тут с задачей, требуется сортировка по возрастанию/убыванию выбираемых для рубки/копания деревьев.
Как реализовать?
Насколько я понял то выбор дерева идет тут
фаил game_types.py
PHP код:
class GameWoodTree(GameType):
type = 'woodTree'
def __init__(self, materialCount=None, # @ReservedAssignment
gainStarted=None, # @ReservedAssignment
y=None, # @ReservedAssignment
x=None, # @ReservedAssignment
id=None): # @ReservedAssignment
assert (gainStarted is None
or isinstance(gainStarted, bool))
assert (id is None
or isinstance(id, long))
assert (materialCount is None
or isinstance(materialCount, long))
assert (x is None
or isinstance(x, long))
assert (y is None
or isinstance(y, long))
self.gainStarted = gainStarted
self.id = id
self.item = '@SC_OAK6'
self.materialCount = materialCount
self.type = 'woodTree'
self.x = x
self.y = y
Но вот как сделать сортировку в этом я не осиливаю, да и в целом не совсем понимаю логику работы этого куска.
Последний раз редактировалось АлехВК; 27.05.2015 в 23:21.
Причина: Добавлено сообщение