|
Zombot (Клиент для игры Зомби ферма) [Обсуждение] - Свободное обсуждение - Ваши идеи, вопросы и ответы на тему браузерных игр и социальных сетей |
24.03.2014, 12:27
|
#1516
|
|
|
|
Разведчик
|
Регистрация: 22.03.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 6 раз(а) в 5 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
Цитата: |
|
|
|
|
|
|
|
|
А можете поделиться своим файликом chop.py ?
а то я так и не понял как сделать чтобы рубил на упсовых. прочитал половину ветки.
Не понял куда это воткнуть. |
|
|
|
|
|
файл chop.py
PHP код:
# coding=utf-8
import logging
#import pdb
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):
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"]
# Не понятно, что это за острова в списке ???? - Пушистый 1,2,3 и Подземелье 1,2
#"exploration_furry1","exploration_furry2","exploration_furry3","exploration_isle_un1_1","exploration_isle_un1_2"
instruments = [] # переменная для инструментов
_loc = self._get_game_state().get_game_loc().get_location_id() # текущая локация
if resources:
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
#Старый модуль, работает с ошибками
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
for tool in instruments:
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:
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
#А что черепа никому не нужны? Почему никто не рубит камни по 100 сериями по 50?
#Я обычно валуны рублю вручную в 2 этапа - 60 и 40. Зачастую на 60 падает от 2 до 6 черепов (рандом, мать его).
#А на 40 уже так, что выпадет. Когда целиком или по 50, то зачастую порожняки сыпят.
#ЗЫ. Посмотрел сейчас, код не правильный будет на разбиение больших камней.
#Нужно переделывать, кто использует. В данном случае вроде вырубает половину и просто удаляет оставшееся с острова.
#Необходимо 2-ю рубку делать.
#if tool_needed == 100:
# tool_needed = 50
# Рубим мелкими партиями, по 4 шт, для фейков
#if tool_needed > 8:
# tool_needed = 4
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)
tool.count -= tool_needed
break
else:
logger.info("Не осталось ресурсов для добычи")
resources = self._get_game_location().get_all_objects_by_type("pirateCaptureObject")
if resources:
for resource in resources:
resource_name = self._get_item_reader().get_name(resource)
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)
continue
gain_event = {"type":"pirateCapture","objId":resource.id,"action":"capture"}
logger.info(u"Открываем " + resource_name)
self._get_events_sender().send_game_events( [gain_event] )
self._get_game_location().remove_object_by_id(resource.id)
else:
logger.info("Нет неоткрытых сокровищ")
#Новый модуль, нужно проверить
'''
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("Не осталось ресурсов для добычи") '''
вот сам файл-смени на расширение _.py(где _ твой файл)
P.S в пещере все вырубил до основания
|
|
|
24.03.2014, 12:45
|
#1517
|
|
|
|
Разведчик
|
Регистрация: 25.10.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Подскажите можно ли с помощью бота перекидывать коллекции с одного аккаунта на другой? И как это осуществить
|
|
|
24.03.2014, 13:00
|
#1518
|
|
|
|
Разведчик
|
Регистрация: 10.10.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
24.03.2014, 13:15
|
#1519
|
|
|
|
Разведчик
|
Регистрация: 12.12.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Народ! Ну, помогите мне запустить эту чертову хреновину на майле. Все перепробовал , ошибку выдает собака.
|
|
|
24.03.2014, 13:19
|
#1520
|
|
|
|
Разведчик
|
Регистрация: 22.03.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 6 раз(а) в 5 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
Цитата: |
|
|
|
|
|
|
|
|
|
Вот что вышло
ImportError: cannot import name PirateTreeInfo
|
|
|
|
|
|
удали в game_engine эту строку,что бы было вот так!
PHP код:
from game_actors_and_handlers.chop import PirateTreeCut
|
|
|
24.03.2014, 13:25
|
#1521
|
|
|
|
Разведчик
|
Регистрация: 22.03.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 6 раз(а) в 5 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Друзья! помогите довести до нужной кондиции модуль wand,очищаю с помощью его острова в одноклассниках и бот ведет себя неадекватно,раньше вис полностью,я немного поколдовал над ним,но все еще как то не корректно он функционирует...
PHP код:
# coding=utf-8
import logging
from game_state.game_types import GameWoodGrave, GameWoodGraveDouble,\
GamePickItem, GameWoodTree, GameStone, GameGainItem, GamePickup
from game_state.game_event import dict2obj
from game_actors_and_handlers.base import BaseActor
logger = logging.getLogger(__name__)
class MagicWand(BaseActor):
def get_object_type(self):
return GameWoodTree.type and GameWoodTree.type
def perform_action(self):
resources = self._get_game_location().get_all_objects_by_type(self.get_object_type())
for resource in resources:
resource_name = self._get_item_reader().get_name(resource)
while(resources):
# make sure gain is not started yet
resource = self.__find_first_gain_not_started(resources)
if not resource:
logger.info(u"Все ресурсы уже добываются")
break
else:
for _ in range(resource.materialCount):
gain_event = {"action":"magic","type":"item","objId":resource.id}
logger.info(u"Добываем палочкой" +resource_name)
self._get_events_sender().send_game_events( [gain_event] )
resource.gainStarted = True
else:
logger.info(u"Не осталось ресурсов для добычи")
def __find_first_gain_not_started(self, resources):
for resource in resources:
if not resource.gainStarted:
return resource
|
|
|
24.03.2014, 13:28
|
#1522
|
|
|
|
Разведчик
|
Регистрация: 10.10.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
24.03.2014, 13:44
|
#1523
|
|
|
|
Пехотинец
|
Регистрация: 01.08.2012
Сообщений: 95
Популярность: 255
Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
Цитата: |
|
|
|
|
|
|
|
|
|
Добавлено через 1 час 9 минут
В копалке не работает проверка, на "можно копать или нет". Поэтому он просто отсылает запросы на копку. Надо сразу дроп подбирать и если его нет, значит копать нельзя, мне кажется.
|
|
|
|
|
|
Там тупо перепутана очерёдность проверки. Сначала проверяется попало ли что нибудь в список, если да-копает, если нет... проверяет а можно ли вообще копать
Нужно поменять местами.
|
Цитата: |
|
|
|
|
|
|
|
|
|
файл chop.py
"#Старый модуль, работает с ошибками"
|
|
|
|
|
|
Это почему он работает с ошибками? Всё работает отлично. Только если рубить частями, там одной проверки не хватает.
Там где было удаление из базы
PHP код:
self._get_game_location().remove_object_by_id(resource.id)
должно быть
PHP код:
if resource.chopCount == tool_needed: self._get_game_location().remove_object_by_id(resource.id) else: resource.chopCount -= tool_needed
Последний раз редактировалось vintets; 24.03.2014 в 13:48.
|
|
|
24.03.2014, 14:01
|
#1524
|
|
|
|
Разведчик
|
Регистрация: 22.03.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 6 раз(а) в 5 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
24.03.2014, 14:32
|
#1525
|
|
|
|
Разведчик
|
Регистрация: 23.03.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
мдааа.. пересиает колл каким то левим типам .. за что вы так с нами а?Уважаемие отправители ботов..
CollIt=obj2dict(self._get_game_state().get_state() .collectionItems)
send_user = self._get_options()['send_user']
# "26586292"
if send_user<>None:
for item_id in CollIt.keys():
#print item_id+'\t-\t'+str(CollIt[item_id])
#{"gift":{"item":"@CR_53","msg":"","count":1,"user ":"176312587"},"action":"sendGift","id":55,"type": "gift"}
#{"gift":{"msg":"","item":"C_4_1","count":1,"user" :"26586292"},"action":"sendGift","type":"gift"}
if CollIt[item_id]>0:
send_gift={
"item":'@'+item_id,
"msg":"",
"count":CollIt[item_id],
"user":send_user
}
event=GameSendGift(gift=send_gift)
self._get_events_sender().send_game_events([event])
#print 'Otpravleno\t'+str(CollIt[item_id])+'\t'+item_id
logger.info(u"Отправили %d '%s' пользователю %d"%(CollIt[item_id],self._get_item_reader().get(item_id).name,int(sen d_user)))
self._get_game_state().remove_from_storage('@'+ite m_id, CollIt[item_id])
CollIt[item_id]=0
self._get_game_state().get_state().collectionItems =dict2obj(CollIt)
|
|
|
24.03.2014, 14:41
|
#1526
|
|
|
|
Разведчик
|
Регистрация: 25.10.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
Цитата: |
|
|
|
|
Сообщение от PriKolist666 |
|
|
|
|
|
|
|
мдааа.. пересиает колл каким то левим типам .. за что вы так с нами а?Уважаемие отправители ботов..
CollIt=obj2dict(self._get_game_state().get_state() .collectionItems)
send_user = self._get_options()['send_user']
# "26586292"
if send_user<>None:
for item_id in CollIt.keys():
#print item_id+'\t-\t'+str(CollIt[item_id])
#{"gift":{"item":"@CR_53","msg":"","count":1,"user ":"176312587"},"action":"sendGift","id":55,"type": "gift"}
#{"gift":{"msg":"","item":"C_4_1","count":1,"user" :"26586292"},"action":"sendGift","type":"gift"}
if CollIt[item_id]>0:
send_gift={
"item":'@'+item_id,
"msg":"",
"count":CollIt[item_id],
"user":send_user
}
event=GameSendGift(gift=send_gift)
self._get_events_sender().send_game_events([event])
#print 'Otpravleno\t'+str(CollIt[item_id])+'\t'+item_id
logger.info(u"Отправили %d '%s' пользователю %d"%(CollIt[item_id],self._get_item_reader().get(item_id).name,int(sen d_user)))
self._get_game_state().remove_from_storage('@'+ite m_id, CollIt[item_id])
CollIt[item_id]=0
self._get_game_state().get_state().collectionItems =dict2obj(CollIt)
|
|
|
|
|
|
Это в каком файле ты нашел ?
|
|
|
24.03.2014, 14:44
|
#1527
|
|
|
|
Пехотинец
|
Регистрация: 01.08.2012
Сообщений: 95
Популярность: 255
Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
24.03.2014, 14:47
|
#1528
|
|
|
|
Разведчик
|
Регистрация: 23.03.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
storage.py
так же такие строки есть в settings.py
Последний раз редактировалось PriKolist666; 24.03.2014 в 14:52.
|
|
|
24.03.2014, 14:52
|
#1529
|
|
|
|
Пехотинец
|
Регистрация: 01.08.2012
Сообщений: 95
Популярность: 255
Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
Цитата: |
|
|
|
|
Сообщение от PriKolist666 |
|
|
|
|
|
|
|
мдааа.. пересиает колл каким то левим типам .. за что вы так с нами а?Уважаемие отправители ботов..
CollIt=obj2dict(self._get_game_state().get_state() .collectionItems)
send_user = self._get_options()['send_user']
# "26586292"
if send_user<>None:
for item_id in CollIt.keys():
#print item_id+'\t-\t'+str(CollIt[item_id])
#{"gift":{"item":"@CR_53","msg":"","count":1,"user ":"176312587"},"action":"sendGift","id":55,"type": "gift"}
#{"gift":{"msg":"","item":"C_4_1","count":1,"user" :"26586292"},"action":"sendGift","type":"gift"}
if CollIt[item_id]>0:
send_gift={
"item":'@'+item_id,
"msg":"",
"count":CollIt[item_id],
"user":send_user
}
event=GameSendGift(gift=send_gift)
self._get_events_sender().send_game_events([event])
#print 'Otpravleno\t'+str(CollIt[item_id])+'\t'+item_id
logger.info(u"Отправили %d '%s' пользователю %d"%(CollIt[item_id],self._get_item_reader().get(item_id).name,int(sen d_user)))
self._get_game_state().remove_from_storage('@'+ite m_id, CollIt[item_id])
CollIt[item_id]=0
self._get_game_state().get_state().collectionItems =dict2obj(CollIt)
|
|
|
|
|
|
О чём это ты? Во первых так было с самого начала. Эти ЗАКОММЕНТИРОВАННЫЕ строки вставил ещё разработчик. Id принимающего аккаунта вставляется в файл ini.
В указанном тобой куске проблем не вижу.
|
|
|
24.03.2014, 14:56
|
#1530
|
|
|
|
Разведчик
|
Регистрация: 23.03.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
ясно! розраб хитрец я как то не заметил что они закоментирование)) я просто изменил ихние id на ид своего фейка)
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 22:30.
|
|