 |
Zombot (Клиент для игры Зомби ферма) [Обсуждение] - Свободное обсуждение - Ваши идеи, вопросы и ответы на тему браузерных игр и социальных сетей |
12.02.2014, 13:30
|
#991
|
|
|
|
Разведчик
|
 Регистрация: 08.11.2011
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Приветик всем! Подскажите никто не делал модуля для удобрения деревьев? Может у кого есть хоть сырое чёнить?
|
|
|
12.02.2014, 14:38
|
#992
|
|
|
|
Разведчик
|
 Регистрация: 21.12.2012
 Сообщений: 29
 Популярность: 10
 Сказал(а) спасибо: 20
Поблагодарили 4 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
12.02.2014, 15:13
|
#993
|
|
|
|
Разведчик
|
 Регистрация: 08.11.2011
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Спасибо за ответ  ! Но в моей сборке такого нет к сожалению ... Можешь скинуть линк на ту сборку которой пользуешься ты? Пожалуйста.
|
|
|
12.02.2014, 19:24
|
#994
|
|
|
|
Разведчик
|
 Регистрация: 03.12.2010
 Сообщений: 22
 Популярность: 10
 Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Никто больше не пытался сажать деревья?
|
|
|
12.02.2014, 19:59
|
#995
|
|
|
|
Разведчик
|
 Регистрация: 11.12.2012
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Подключи PDB, поставь перед ними pdb.set_trace(), и смотри вручную, что там находится, и есть ли эти параметры вообще в том состоянии, где ты находишься в данный момент.
Подсказка... Используй 'dir(self)', потом 'dir(seld._get_game_state()' и т.д. Собственно можешь смотреть все варианты переменных и функций, которые доступны...
|
|
 |
|
 |
|
Не получается подключить, говорит нет такого модуля, хотя я его вижу, он есть.
Можно попросить вашу копательную часть, Питоном в совершенстве не владею и в самих библиотеках зомбота до конца не разобрался. Очень много объектов и методов, голова кругом.
|
|
|
12.02.2014, 22:17
|
#996
|
|
|
|
Разведчик
|
 Регистрация: 21.12.2012
 Сообщений: 29
 Популярность: 10
 Сказал(а) спасибо: 20
Поблагодарили 4 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
 |
Цитата: |
 |
|
|
|
|
|
|
|
Спасибо за ответ ! Но в моей сборке такого нет к сожалению ... Можешь скинуть линк на ту сборку которой пользуешься ты? Пожалуйста. |
|
 |
|
 |
|
парой страниц назад Читер выкладывал
Добавлено через 2 минуты
У кого бот обламывается при поднятии труб и крюков рядом с пиратами, в pickups.py измените:
Код:
for box in boxes:
name = self._get_item_reader().get_name(box)
boxItem = self._get_item_reader().get(box.item)
enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy")
enemy_here = 0
if enemies:
for enemy in enemies:
if(((enemy.x - box.x)**2+(enemy.y - box.y)**2)**0.5 < 15):
enemy_here = 1
break
if(enemy_here == 1):
self._get_game_location().remove_object_by_id(box.id)
print name
logger.info(u'Сильвер мешает взять ' + name)
continue
gain_event = {"type":"pirateCapture","objId":box.id,"action":"capture"}
print gain_event
logger.info(u"Открываем " + 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)
Последний раз редактировалось Anch665; 12.02.2014 в 22:19.
Причина: Добавлено сообщение
|
|
|
12.02.2014, 23:08
|
#997
|
|
|
|
Разведчик
|
 Регистрация: 03.12.2010
 Сообщений: 22
 Популярность: 10
 Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Anch665, лучше так:
Код:
class BoxPickuper(BaseActor):
def perform_action(self):
boxes = self._get_game_location().get_all_objects_by_type(
GamePickup.type)
enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy")
for box in boxes:
enemy_here = 0
name = self._get_item_reader().get_name(box)
if enemies:
for enemy in enemies:
if(((enemy.x - box.x)**2+(enemy.y - box.y)**2)**0.5 < 15):
enemy_here = 1
break
if(enemy_here == 1):
self._get_game_location().remove_object_by_id(box.id)
logger.info(u'Сильвер мешает взять ' + name)
continue
logger.info(u'Вскрываем ' + 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)
|
|
|
12.02.2014, 23:10
|
#998
|
|
|
|
Разведчик
|
 Регистрация: 21.12.2012
 Сообщений: 29
 Популярность: 10
 Сказал(а) спасибо: 20
Поблагодарили 4 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
 |
Цитата: |
 |
|
|
|
|
|
|
|
Anch665, лучше так: |
|
 |
|
 |
|
ну да, служебные принты пооставлял  Но все равно спасибо!
причесал корд chop.py, избавился от принтов и вывод сделал в logger.info
Код:
# 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
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("Нет неоткрытых сокровищ")
Последний раз редактировалось Anch665; 12.02.2014 в 23:18.
|
|
|
13.02.2014, 00:27
|
#999
|
|
|
|
Разведчик
|
 Регистрация: 27.08.2013
 Сообщений: 2
 Популярность: -54
 Сказал(а) спасибо: 5
Поблагодарили 15 раз(а) в 14 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Последний раз редактировалось Cheater84; 13.02.2014 в 00:30.
Причина: Добавлено сообщение
|
|
|
13.02.2014, 04:28
|
#1000
|
|
|
|
Разведчик
|
 Регистрация: 28.06.2011
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Ребята уже устал писать помогите не крутит рулетки за вишню за яблоки итд...ПОМОГИТЕ
|
|
|
13.02.2014, 05:47
|
#1001
|
|
|
|
Разведчик
|
 Регистрация: 21.12.2012
 Сообщений: 29
 Популярность: 10
 Сказал(а) спасибо: 20
Поблагодарили 4 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
В каpзино за 5 фишек вылетает ошибка, может где подправить?
Код:
[2014-02-13 05:43:06,539] Крутим рулетку в 'Казино' 36699 по координатам (37, 10)
[2014-02-13 05:43:06,607] ingame error
[2014-02-13 05:43:06,609] Connection : {'crc': '171776aeaa9cbf59a9fabad267acd717', 'data': u'{"user":"35834355","type":"EVT","id":1392255716926,,"events":[{"action":"play","type":"game","objId":36699,"extraId":"SKLEP_FILL_CHIPS"}]}'}
[2014-02-13 05:43:06,611] Response : {u'msg': u'ingame error', u'cmd': u'ERR', u'id': u'1392255716926'}
[2014-02-13 05:43:06,611] Загружаем остров...
[2014-02-13 05:43:10,569] Остров загружен!
ну и собственно код
Код:
# Крутить рулетку в казино если фишек = 0
item_count=self._get_game_state().count_in_storage("@O_CHIPS")
if (building_item.name==u'Казино'):
if (item_count==0):
play_cost = None
else:
play_cost = 'Nul'
# Конец казино
|
|
|
13.02.2014, 07:38
|
#1002
|
|
|
|
Разведчик
|
 Регистрация: 27.08.2013
 Сообщений: 2
 Популярность: -54
 Сказал(а) спасибо: 5
Поблагодарили 15 раз(а) в 14 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
В каpзино за 5 фишек вылетает ошибка, может где подправить?
Код:
[2014-02-13 05:43:06,539] Крутим рулетку в 'Казино' 36699 по координатам (37, 10)
[2014-02-13 05:43:06,607] ingame error
[2014-02-13 05:43:06,609] Connection : {'crc': '171776aeaa9cbf59a9fabad267acd717', 'data': u'{"user":"35834355","type":"EVT","id":1392255716926,,"events":[{"action":"play","type":"game","objId":36699,"extraId":"SKLEP_FILL_CHIPS"}]}'}
[2014-02-13 05:43:06,611] Response : {u'msg': u'ingame error', u'cmd': u'ERR', u'id': u'1392255716926'}
[2014-02-13 05:43:06,611] Загружаем остров...
[2014-02-13 05:43:10,569] Остров загружен!
ну и собственно код
Код:
# Крутить рулетку в казино если фишек = 0
item_count=self._get_game_state().count_in_storage("@O_CHIPS")
if (building_item.name==u'Казино'):
if (item_count==0):
play_cost = None
else:
play_cost = 'Nul'
# Конец казино
|
|
 |
|
 |
|
PHP код:
# coding=utf-8 import logging from game_state.game_types import GameBuilding, GamePlayGame, DailyBonus from game_actors_and_handlers.base import BaseActor from game_state.game_event import obj2dict, dict2obj
logger = logging.getLogger(__name__)
class RouletteRoller(BaseActor):
def perform_action(self): buildings = self._get_game_location().get_all_objects_by_type( GameBuilding.type) for building in list(buildings): building_item = self._get_item_reader().get(building.item) for game in building_item.games: game_id = game.id
play_cost = None if hasattr(game, 'playCost'): play_cost = game.playCost
if hasattr(game, 'playsCount'): plays = building.playsCounts.__dict__ if plays[game_id] >= game.playsCount: continue
next_play = None next_play_times = building.nextPlayTimes.__dict__
if game_id in next_play_times: next_play = int(next_play_times[game_id])
# Рулетка в таверне if game_id == "B_TAVERNA_ROULETTE_1": pirate_box = 0 for _obj in list(self._get_game_state().get_state().storageGameObjects): if _obj.item == '@PIRATE_BOX' or _obj.item == '@PIRATE_BOX_2': pirate_box = 1 if pirate_box!=1 and (self._get_game_state().get_state().pirate.state != 'PIRATE'): play_cost = None else: play_cost = game.unconditionalPlayCost
# Ежедневный бонус dailyBonus = self._get_game_state().get_state().dailyBonus if int(dailyBonus.playFrom) and self._get_timer().has_elapsed(dailyBonus.playFrom): daily = DailyBonus() self._get_events_sender().send_game_events([daily]) logger.info(u"Крутим рулетку: Ежедневный бонус") dailyBonus.playFrom = 0 #конец ежедневной рулетке
if next_play is None: get_next_play = False else: get_next_play = self._get_timer().has_elapsed(next_play) # Крутить рулетку в аисте за 25 малины item_count=self._get_game_state().count_in_storage('@S_57') if building_item.id == 'B_TREE_STORK' and game_id == 'B_TREE_STORK_ROULETTE' and item_count>=25: self._get_game_state().remove_from_storage('@S_57',25) play_cost = None # Конец аиста
# Крутить рулетку в Адмирале за 1 глазной суп item_count=self._get_game_state().count_in_storage ('@R_60') if building_item.id == 'B_SOLDIER' and game_id == 'B_SOLDIER_ROULETTE' and item_count>=1: self._get_game_state().remove_from_storage('@R_60' ,1) play_cost = None # Конец Адмирала
# Крутить рулетку в Вишнёвом автомате за 1 вишеневый джем item_count=self._get_game_state().count_in_storage ('@R_57') if building_item.id == 'B_SLOT_CHERRY' and game_id == 'B_SLOT_CHERRY_ROULETTE2' and item_count>=1000: self._get_game_state().remove_from_storage('@R_57' ,1) play_cost = None # Конец Вишнёвого автомата
'''# Крутить рулетку в Вишнёвом автомате за 5 вишен item_count=self._get_game_state().count_in_storage ('@S_52') if building_item.id == 'B_SLOT_CHERRY' and game_id == 'B_SLOT_B_ROULETTE1' and item_count>=1000: self._get_game_state().remove_from_storage('@S_52' ,5) play_cost = None logger.info(u"Осталось %d вишни" %(item_count)) # Конец Вишнёвого автомата
# Крутить рулетку в Мандариновом автомате за 5 мандарин item_count=self._get_game_state().count_in_storage ('@S_53') if building_item.id == 'B_SLOT_MANDARIN' and game_id == 'B_SLOT_B_ROULETTE1' and item_count>=1000: self._get_game_state().remove_from_storage('@S_52' ,5) play_cost = None logger.info(u"Осталось %d мандарин" %(item_count)) # Конец мандаринового автомата
# Крутить рулетку в Адмирале за 5 глазных яблок, item_count - сколько оставить на складе item_count=self._get_game_state().count_in_storage ('@S_55') if building_item.id == 'B_SOLDIER' and game_id == 'B_SOLDIER_ROULETTE2' and item_count>=2000: self._get_game_state().remove_from_storage('@S_55' ,5) play_cost = None # Конец Адмирала'''
# Крутить рулетку в казино если фишек = 0 item_count=self._get_game_state().count_in_storage("@O_CHIPS") if (building_item.name==u'Казино'): if (item_count==0): play_cost = None else: play_cost = 'Nul' # Конец казино
# Зомби фортуна за 5 фишек if (building_item.name==u'Зомби-фортуна') and (game_id == 'B_SLOT_B_ROULETTE1') and item_count>=5: self._get_game_state().remove_from_storage('@O_CHIPS',5) play_cost = None next_play = False # Конец зомби фортуны #print building_item.name #print next_play_times #print next_play #print get_next_play #print play_cost #print (play_cost is None) #print ((not next_play) and (game.level == building.level)) #print ((next_play and self._get_timer().has_elapsed(next_play)) or ((not next_play) and (game.level == building.level))) #raw_input() #if ( # (play_cost is None) and # ((next_play and get_next_play) or ((not next_play) and (game.level == building.level))) #): # logger.info( # u"Крутим рулетку в '" + # building_item.name + "' " + # str(building.id) + # u" по координатам (" + # str(building.x) + u", " + str(building.y) + u")") # roll = GamePlayGame(building.id, game_id) # self._get_events_sender().send_game_events([roll])
if ((play_cost is None) and ((next_play and get_next_play) or ((not next_play) and (game.level == building.level)))): enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy") enemy_here = 0 if enemies: for enemy in enemies: if(((enemy.x - building.x)**2+(enemy.y - building.y)**2)**0.5 < 15): enemy_here = 1 break if(enemy_here == 1): logger.info("Сильвер мешает крутить рулетку "+str(building.id)) continue logger.info( u"Крутим рулетку в '" + building_item.name + "' " + str(building.id) + u" по координатам (" + str(building.x) + u", " + str(building.y) + u")") roll = GamePlayGame(building.id, game_id) self._get_events_sender().send_game_events([roll])
class GameResultHandler(object): def __init__(self, item_reader, game_location,game_state): self.__item_reader = item_reader self.__game_location = game_location self.__game_state_ = game_state
def handle(self, event_to_handle): nextPlayDate = event_to_handle.nextPlayDate extraId = event_to_handle.extraId obj_id = event_to_handle.objId gameObject = self.__game_location.get_object_by_id(obj_id) if gameObject is None: logger.critical("OMG! No such object") return else: gameObject.nextPlayTimes.__setattr__(extraId, nextPlayDate) building = self.__item_reader.get(gameObject.item) for game in building.games: if game.id == extraId: game_prize = None if hasattr(event_to_handle.result, 'pos'): prize_pos = event_to_handle.result.pos game_prize = game.prizes[prize_pos] elif hasattr(event_to_handle.result, 'won'): prize_pos = event_to_handle.result.won if prize_pos is not None: game_prize = game.combinations[prize_pos].prize if game_prize: prize_item = game_prize.item prize = self.__item_reader.get(prize_item) count = game_prize.count #print 'Rollets' #print prize_item self.__game_state_.add_from_storage(prize_item,count) logger.info(u'Вы выиграли ' + prize.name + u'(' + str(count) + u' шт.)') #open('prize.txt','a').write(prize.name.encode("cp1251") + '\t(' + str(count) + u' шт.)'.encode("cp1251")+'\n') open('prize.txt','a').write(prize.name.encode("cp1251") + '\t;' + str(count) +'\n') else: logger.info('Вы ничего не выиграли.')
class FrutRouletteRoller(BaseActor):
def perform_action(self): # '@R_56' Компот # '@R_57' Вишнёвый джем # '@R_58' Лимонный микс # '@R_59' Мармелад # '@R_60' Глазной суп # '@S_53' Мандарин # '@S_52' Вишня # '@S_51' Красные яблоки # '@S_55' Глазное яблоко ftut_ids = {'@R_56','@R_57'} #ftut_ids = ['@R_56'] for fr in ftut_ids: frut_count=self._get_game_state().count_in_storage(fr) if frut_count==0: break buildings = self._get_game_location().get_all_objects_by_type( GameBuilding.type) for building in list(buildings): building_item = self._get_item_reader().get(building.item) for game in building_item.games: game_id = game.id play_cost = None if hasattr(game, 'playCost'): play_cost = game.playCost.item
#{"type":"roulette","id":"B_SLOT_APPLE_ROULETTE2","level":1,"delayTime":0,"title":"Бонус-Рулетка","hint":"Крути рулетку за 1 Компот, чтобы испытать удачу.","playCost":{"count":1,"image":"storage/recipe_56.png","item":"@R_56"},"prizes":[{"count":1,"item":"@EGG_01"},{"count":5,"item":"@RED_SPEEDUPER"},{"count":1,"item":"@EGG_02"},{"count":10,"item":"@RED_TREE_FERTILIZER"},{"count":5,"item":"@RED_SPEEDUPER"},{"count":1,"item":"@EGG_04"},{"count":10,"item":"@RED_TREE_FERTILIZER"}]} next_play = None next_play_times = building.nextPlayTimes.__dict__ if game_id in next_play_times: next_play = int(next_play_times[game_id]) if ( next_play and self._get_timer().has_elapsed(next_play) and play_cost == fr ): countR=0 for i in range(frut_count): roll = GamePlayGame(building.id, game_id) self._get_events_sender().send_game_events([roll]) countR+=1 self._get_game_state().remove_from_storage(fr,1) logger.info(u"Крутим рулетку %d раз в '%s' %d по координатам (%d,%d)"%(countR,building_item.name,building.id,building.x,building.y)) #logger.info(u"Крутим рулетку "+str(countR)+" раз в '"+building_item.name + "' " +str(building.id)+u" по координатам (" +str(building.x) + u", " + str(building.y) + u")")
Последний раз редактировалось Cheater84; 13.02.2014 в 07:41.
|
|
|
13.02.2014, 10:57
|
#1003
|
|
|
|
Пехотинец
|
 Регистрация: 01.08.2012
 Сообщений: 95
 Популярность: 255
 Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
По поводу chop.py.
А что черепа никому не нужны? Почему никто не рубит камни по 100 сериями по 50?
После:
PHP код:
if(enemy_here == 1):
self._get_game_location().remove_object_by_id(resource.id)
logger.info("Сильвер мешает вырубке "+str(resource.id))
break
добавляем
PHP код:
if tool_needed == 100:
tool_needed = 50
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
Пользователь сказал cпасибо:
|
|
13.02.2014, 11:03
|
#1004
|
|
|
|
Разведчик
|
 Регистрация: 30.08.2013
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 26 раз(а) в 21 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
 |
Цитата: |
 |
|
|
|
|
|
|
|
Никто больше не пытался сажать деревья? |
|
 |
|
 |
|
Пытался немного. Есть парочка идей, нужно только реализовать 
1. Создать модуль для создания карты островов.
- Берем остров (из списка указанных в модуле).
- Берем что-то размером 1х1 (например, Фонарь в снегу) и прогоняем в 2-йном цикле move для него. Отловом исключений получаем 0 - можно ставить, 1 - нельзя.
- Размеры острова и карту острова загоняем в переменные секции с названием острова в специально созданный ini-файл.
2. Создаем модуль для посадки деревьев. В нем по списку островов выдергиваем по имени нужного данные и согласно карты садим деревья.
Есть парочка НО...
а) на всех островах есть поля, недоступные для установки чего-либо из игрового клиента. Как их отловить, я так и не понял. По сути, если остров невиден для посетителей, то можно особо и не париццо.
б) могут быть еще подводные камни, пока не придумал какие
ЗЫ. Пример в картинке. Только карта сделана прогоном через 1 в ручном режиме и не с нулевых координат, а за вычетом недоступных в игре полей.
Последний раз редактировалось dark-dragon; 13.02.2014 в 11:09.
|
|
|
13.02.2014, 13:52
|
#1005
|
|
|
|
Разведчик
|
 Регистрация: 08.11.2011
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
PHP код:
# coding=utf-8
import logging
from game_state.game_types import GameBuilding, GamePlayGame, DailyBonus
from game_actors_and_handlers.base import BaseActor
from game_state.game_event import obj2dict, dict2obj
logger = logging.getLogger(__name__)
class RouletteRoller(BaseActor):
def perform_action(self):
buildings = self._get_game_location().get_all_objects_by_type(
GameBuilding.type)
for building in list(buildings):
building_item = self._get_item_reader().get(building.item)
for game in building_item.games:
game_id = game.id
play_cost = None
if hasattr(game, 'playCost'):
play_cost = game.playCost
if hasattr(game, 'playsCount'):
plays = building.playsCounts.__dict__
if plays[game_id] >= game.playsCount:
continue
next_play = None
next_play_times = building.nextPlayTimes.__dict__
if game_id in next_play_times:
next_play = int(next_play_times[game_id])
# Рулетка в таверне
if game_id == "B_TAVERNA_ROULETTE_1":
pirate_box = 0
for _obj in list(self._get_game_state().get_state().storageGameObjects):
if _obj.item == '@PIRATE_BOX' or _obj.item == '@PIRATE_BOX_2': pirate_box = 1
if pirate_box!=1 and (self._get_game_state().get_state().pirate.state != 'PIRATE'): play_cost = None
else: play_cost = game.unconditionalPlayCost
# Ежедневный бонус
dailyBonus = self._get_game_state().get_state().dailyBonus
if int(dailyBonus.playFrom) and self._get_timer().has_elapsed(dailyBonus.playFrom):
daily = DailyBonus()
self._get_events_sender().send_game_events([daily])
logger.info(u"Крутим рулетку: Ежедневный бонус")
dailyBonus.playFrom = 0
#конец ежедневной рулетке
if next_play is None: get_next_play = False
else: get_next_play = self._get_timer().has_elapsed(next_play)
# Крутить рулетку в аисте за 25 малины
item_count=self._get_game_state().count_in_storage('@S_57')
if building_item.id == 'B_TREE_STORK' and game_id == 'B_TREE_STORK_ROULETTE' and item_count>=25:
self._get_game_state().remove_from_storage('@S_57',25)
play_cost = None
# Конец аиста
# Крутить рулетку в Адмирале за 1 глазной суп
item_count=self._get_game_state().count_in_storage ('@R_60')
if building_item.id == 'B_SOLDIER' and game_id == 'B_SOLDIER_ROULETTE' and item_count>=1:
self._get_game_state().remove_from_storage('@R_60' ,1)
play_cost = None
# Конец Адмирала
# Крутить рулетку в Вишнёвом автомате за 1 вишеневый джем
item_count=self._get_game_state().count_in_storage ('@R_57')
if building_item.id == 'B_SLOT_CHERRY' and game_id == 'B_SLOT_CHERRY_ROULETTE2' and item_count>=1000:
self._get_game_state().remove_from_storage('@R_57' ,1)
play_cost = None
# Конец Вишнёвого автомата
'''# Крутить рулетку в Вишнёвом автомате за 5 вишен
item_count=self._get_game_state().count_in_storage ('@S_52')
if building_item.id == 'B_SLOT_CHERRY' and game_id == 'B_SLOT_B_ROULETTE1' and item_count>=1000:
self._get_game_state().remove_from_storage('@S_52' ,5)
play_cost = None
logger.info(u"Осталось %d вишни" %(item_count))
# Конец Вишнёвого автомата
# Крутить рулетку в Мандариновом автомате за 5 мандарин
item_count=self._get_game_state().count_in_storage ('@S_53')
if building_item.id == 'B_SLOT_MANDARIN' and game_id == 'B_SLOT_B_ROULETTE1' and item_count>=1000:
self._get_game_state().remove_from_storage('@S_52' ,5)
play_cost = None
logger.info(u"Осталось %d мандарин" %(item_count))
# Конец мандаринового автомата
# Крутить рулетку в Адмирале за 5 глазных яблок, item_count - сколько оставить на складе
item_count=self._get_game_state().count_in_storage ('@S_55')
if building_item.id == 'B_SOLDIER' and game_id == 'B_SOLDIER_ROULETTE2' and item_count>=2000:
self._get_game_state().remove_from_storage('@S_55' ,5)
play_cost = None
# Конец Адмирала'''
# Крутить рулетку в казино если фишек = 0
item_count=self._get_game_state().count_in_storage("@O_CHIPS")
if (building_item.name==u'Казино'):
if (item_count==0):
play_cost = None
else:
play_cost = 'Nul'
# Конец казино
# Зомби фортуна за 5 фишек
if (building_item.name==u'Зомби-фортуна') and (game_id == 'B_SLOT_B_ROULETTE1') and item_count>=5:
self._get_game_state().remove_from_storage('@O_CHIPS',5)
play_cost = None
next_play = False
# Конец зомби фортуны
#print building_item.name
#print next_play_times
#print next_play
#print get_next_play
#print play_cost
#print (play_cost is None)
#print ((not next_play) and (game.level == building.level))
#print ((next_play and self._get_timer().has_elapsed(next_play)) or ((not next_play) and (game.level == building.level)))
#raw_input()
#if (
# (play_cost is None) and
# ((next_play and get_next_play) or ((not next_play) and (game.level == building.level)))
#):
# logger.info(
# u"Крутим рулетку в '" +
# building_item.name + "' " +
# str(building.id) +
# u" по координатам (" +
# str(building.x) + u", " + str(building.y) + u")")
# roll = GamePlayGame(building.id, game_id)
# self._get_events_sender().send_game_events([roll])
if ((play_cost is None) and
((next_play and get_next_play) or ((not next_play) and (game.level == building.level)))):
enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy")
enemy_here = 0
if enemies:
for enemy in enemies:
if(((enemy.x - building.x)**2+(enemy.y - building.y)**2)**0.5 < 15):
enemy_here = 1
break
if(enemy_here == 1):
logger.info("Сильвер мешает крутить рулетку "+str(building.id))
continue
logger.info(
u"Крутим рулетку в '" +
building_item.name + "' " +
str(building.id) +
u" по координатам (" +
str(building.x) + u", " + str(building.y) + u")")
roll = GamePlayGame(building.id, game_id)
self._get_events_sender().send_game_events([roll])
class GameResultHandler(object):
def __init__(self, item_reader, game_location,game_state):
self.__item_reader = item_reader
self.__game_location = game_location
self.__game_state_ = game_state
def handle(self, event_to_handle):
nextPlayDate = event_to_handle.nextPlayDate
extraId = event_to_handle.extraId
obj_id = event_to_handle.objId
gameObject = self.__game_location.get_object_by_id(obj_id)
if gameObject is None:
logger.critical("OMG! No such object")
return
else:
gameObject.nextPlayTimes.__setattr__(extraId, nextPlayDate)
building = self.__item_reader.get(gameObject.item)
for game in building.games:
if game.id == extraId:
game_prize = None
if hasattr(event_to_handle.result, 'pos'):
prize_pos = event_to_handle.result.pos
game_prize = game.prizes[prize_pos]
elif hasattr(event_to_handle.result, 'won'):
prize_pos = event_to_handle.result.won
if prize_pos is not None:
game_prize = game.combinations[prize_pos].prize
if game_prize:
prize_item = game_prize.item
prize = self.__item_reader.get(prize_item)
count = game_prize.count
#print 'Rollets'
#print prize_item
self.__game_state_.add_from_storage(prize_item,count)
logger.info(u'Вы выиграли ' + prize.name +
u'(' + str(count) + u' шт.)')
#open('prize.txt','a').write(prize.name.encode("cp1251") + '\t(' + str(count) + u' шт.)'.encode("cp1251")+'\n')
open('prize.txt','a').write(prize.name.encode("cp1251") + '\t;' + str(count) +'\n')
else:
logger.info('Вы ничего не выиграли.')
class FrutRouletteRoller(BaseActor):
def perform_action(self):
# '@R_56' Компот
# '@R_57' Вишнёвый джем
# '@R_58' Лимонный микс
# '@R_59' Мармелад
# '@R_60' Глазной суп
# '@S_53' Мандарин
# '@S_52' Вишня
# '@S_51' Красные яблоки
# '@S_55' Глазное яблоко
ftut_ids = {'@R_56','@R_57'}
#ftut_ids = ['@R_56']
for fr in ftut_ids:
frut_count=self._get_game_state().count_in_storage(fr)
if frut_count==0: break
buildings = self._get_game_location().get_all_objects_by_type(
GameBuilding.type)
for building in list(buildings):
building_item = self._get_item_reader().get(building.item)
for game in building_item.games:
game_id = game.id
play_cost = None
if hasattr(game, 'playCost'):
play_cost = game.playCost.item
#{"type":"roulette","id":"B_SLOT_APPLE_ROULETTE2","level":1,"delayTime":0,"title":"Бонус-Рулетка","hint":"Крути рулетку за 1 Компот, чтобы испытать удачу.","playCost":{"count":1,"image":"storage/recipe_56.png","item":"@R_56"},"prizes":[{"count":1,"item":"@EGG_01"},{"count":5,"item":"@RED_SPEEDUPER"},{"count":1,"item":"@EGG_02"},{"count":10,"item":"@RED_TREE_FERTILIZER"},{"count":5,"item":"@RED_SPEEDUPER"},{"count":1,"item":"@EGG_04"},{"count":10,"item":"@RED_TREE_FERTILIZER"}]}
next_play = None
next_play_times = building.nextPlayTimes.__dict__
if game_id in next_play_times:
next_play = int(next_play_times[game_id])
if (
next_play and
self._get_timer().has_elapsed(next_play) and
play_cost == fr
):
countR=0
for i in range(frut_count):
roll = GamePlayGame(building.id, game_id)
self._get_events_sender().send_game_events([roll])
countR+=1
self._get_game_state().remove_from_storage(fr,1)
logger.info(u"Крутим рулетку %d раз в '%s' %d по координатам (%d,%d)"%(countR,building_item.name,building.id,building.x,building.y))
#logger.info(u"Крутим рулетку "+str(countR)+" раз в '"+building_item.name + "' " +str(building.id)+u" по координатам (" +str(building.x) + u", " + str(building.y) + u")")
|
|
 |
|
 |
|
Привет. Хотел спросить у тебя по поводу фрэнд диггера у тебя на гитхабе :-). Сие чудо не допиленно до рабочего состояния? А то я ковырялся-ковырялся так и не смог его запустить))))
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 03:08.
|
 |