Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от doubleaggent
благодарю за ответ
Спасибо greyzza за данный код!
PHP код:
###туки### if 'tuk' in action: if object.type == 'thanksgivingTable': day_stuk=self._get_game_state().get_state().remoteThanksgiving if len(day_stuk)>=100:continue reader_thanks=self._get_item_reader().get(object.item) if hasattr(reader_thanks,'endSellingDate') and int(reader_thanks.endSellingDate)/1000<time.time():continue readerGifts=self._get_item_reader().get(reader_thanks.gifts[0]) if object.usedPlatesCount>=reader_thanks.platesCount:continue for days in day_stuk: if str(user)==str(days.user):break else: self._get_events_sender().send_game_events([{"itemId": readerGifts.id, "action": "remoteThanksgiving", "type": "item", "objId": object.id}]) apend_frend={u'count': 0L, u'date': u'-19849562', u'user': str(user)} self._get_game_state().get_state().remoteThanksgiving.append(dict2obj(apend_frend)) self.cprint(u'5 %s в %s'%(readerGifts.name,reader_thanks.name))
Последний раз редактировалось Cheater-84; 28.05.2015 в 14:57.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от ripton07
# Надуваем футбольный подарок
if object.type == 'pickup':
if object.item =='@FOOTBALL_GIFT_BOX':
self.cprint(u'3 Надуваем футбольный подарок')
eventpick.append({"action":"pick","type":"item","o bjId"bject.id})
Полнейший бред, уже было решение, вот пример на вскрытии тайников
PHP код:
# Надуваем футбольный подарок
if u'naduv' in action:
if object.type=='friendTransformObject':
if object.transformed:continue
name = self._get_item_reader().get(object.item).name
eventtrans={"action":"remoteFriendTransform","type":"item","objId":object.id}
self._get_events_sender().send_game_events([eventtrans])
self.cprint(u'5 Надул %s'%name.upper())
Последний раз редактировалось Cheater-84; 31.05.2015 в 14:01.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
# Надуваем футбольный подарок
if u'naduv' in action:
if object.type=='friendTransformObject':
if object.transformed:continue
name = self._get_item_reader().get(object.item).name
eventtrans={"action":"remoteFriendTransform","type ":"item","objId"bject.id}
self._get_events_sender().send_game_events([eventtrans])
self.cprint(u'5 Надул %s'%name.upper())
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от vintets
PHP код:
if box.item in ('@FOOTBALL_GIFT_BOX', '@VALENT_GIFT_BOX6'):
continue
спасибо Vint все работает, а для тех у кого включена рубка палочками, модуль wand.py, прописать надо то же самое, у себя заметил такую вещь, что какой бы остров не был прописан в палочках, бот все равно будет вскрывать ящики из этого модуля на всех островах.
в модуле wand.py -
PHP код:
def BoxOpener(self):
box_all = 0
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 box.item in ('@FOOTBALL_GIFT_BOX', '@VALENT_GIFT_BOX6'):
self.cprint(u'6Невскрываем %s' % name)
continue
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)
Последний раз редактировалось Cheater-84; 01.06.2015 в 01:03.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Код:
Traceback (most recent call last):
File "main.py", line 108, in <module>
run_game()
File "main.py", line 90, in run_game
Game(site, settings, UserPrompt(gui_input), gui_input=gui_input).start()
File "D:\Programs\Pyton273\zombot\game_engine.py", line 531, in start
self.eventLoop()
File "D:\Programs\Pyton273\zombot\game_engine.py", line 570, in eventLoop
self.perform_all_actions()
File "D:\Programs\Pyton273\zombot\game_engine.py", line 672, in perform_all_actions
actor.perform_action()
File "D:\Programs\Pyton273\zombot\game_actors_and_handlers\roulettes.py", line 98, in perform_action
roller=self.unconditionalPlayCost(game,next_play)
File "D:\Programs\Pyton273\zombot\game_actors_and_handlers\roulettes.py", line 44, in unconditionalPlayCost
if self._get_game_state().count_in_storageObjects(box)>0:return False
AttributeError: GameState instance has no attribute 'count_in_storageObjects'
Помогите с пиратской рулеткой.
Код самой рулетки.
И подскажите, как отключить что бы за дублоны не крутил?
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 playCostGame(self,game,building_item):
rulettes = {
# не комментировать ,а то будет крутить до упора,лучше остаток больше поставить
# рулетка |сколько оставлять фруктов |сколько оставлять рецептов
'B_SLOT_APPLE':{'B_SLOT_B_ROULETTE1':10000,'B_SLOT_APPLE_ROULETTE2':100},# Яблочный автомат
'B_SLOT_CHERRY':{'B_SLOT_B_ROULETTE1':10000,'B_SLOT_CHERRY_ROULETTE2':100},# Вишнёвый автомат
'B_SLOT_MANDARIN':{'B_SLOT_B_ROULETTE1':10000,'B_SLOT_MANDARIN_ROULETTE2':100},# Мандариновый автомат
'B_SLOT_LEMON':{'B_SLOT_B_ROULETTE1':100000,'B_SLOT_LEMON_ROULETTE2':10000},# Лимонный автомат
'B_SOLDIER':{'B_SOLDIER_ROULETTE2':100000,'B_SOLDIER_ROULETTE':10000},# Адмирал
}
game_id=game.id
play_cost = game.playCost
need_item=play_cost.item
storageCount=self._get_game_state().count_in_storage(need_item)
need_count=int(play_cost.count)
if rulettes.has_key(building_item):
needGame=rulettes[building_item]
if not needGame.has_key(game_id):return False
if storageCount<=needGame[game_id]:return False
if storageCount<play_cost.count:return False
self._get_game_state().remove_from_storage(play_cost.item,play_cost.count)
return True
else:
if storageCount<need_count:return False
self._get_game_state().remove_from_storage(need_item,need_count)
return True
def unconditionalPlayCost(self,game,next_play):
pirateBox=['@PIRATE_BOX','@PIRATE_BOX_2']
play_cost = game.unconditionalPlayCost
if game.id == "B_TAVERNA_ROULETTE_1":
state=self._get_game_state().get_state().pirate.state
if state == 'PIRATE' or state == 'AWAY':return False
for box in pirateBox:
if self._get_game_state().count_in_storageObjects(box)>0:return False
dublon=self._get_game_state().count_in_storage(play_cost.item)
if dublon<play_cost.count:return False
if self._get_timer().has_elapsed(next_play):return True
else:
self._get_game_state().remove_from_storage(play_cost.item,play_cost.count)
return True
#logger.info(u'No game_id:',game.id)
return False
def enemyStatus(self,building,enemies):
if not enemies:return False
for enemy in enemies:
if((enemy.x - building.x)**2+(enemy.y - building.y)**2)**0.5 < 15:
return True
return False
def fillToLimit(self,game):
storageCount=self._get_game_state().count_in_storage(game.item)
if storageCount<game.limit:return True
else:return False
def perform_action(self):
buildings = self._get_game_location().get_all_objects_by_type('building')
enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy")
# Ежедневный бонус
dailyBonus = self._get_game_state().get_state().dailyBonus
if self._get_timer().has_elapsed(dailyBonus.playFrom):
daily = DailyBonus()
self._get_events_sender().send_game_events([daily])
dailyBonus.playFrom = 10800000
# Крутим рулетку в волшебнике и т.д
if hasattr(self._get_game_state().get_state().npcs,'list'):
wizards=self._get_game_state().get_state().npcs.list
else:wizards=[]
if wizards:
for wizard in wizards:
if wizard.type!='wizard':continue
if hasattr(wizard,'prize'):continue
events={"type":"npc","id":None,"npcId":wizard.id,"action":"play"}
self._get_events_sender().send_game_events([events])
eventRoll=[]
for building in buildings:
building_item = self._get_item_reader().get(building.item)
if not building_item.games:continue
for game in building_item.games:
if building.level<game.level:continue
game_id = game.id
roller=True
next_play_times = building.nextPlayTimes.__dict__
if not next_play_times.has_key(game_id):
next_play_times[game_id]=-90000
next_play = int(next_play_times[game_id])
if hasattr(game,'unconditionalPlayCost'):
roller=self.unconditionalPlayCost(game,next_play)
elif game.type=='fillToLimit':
roller=self.fillToLimit(game)
elif hasattr(game, 'playCost'):
roller=self.playCostGame(game,building_item.id)
if not self._get_timer().has_elapsed(next_play):continue
if hasattr(game, 'playsCount'):
playsCounts=building.playsCounts.__dict__
if playsCounts.has_key(game_id):
play_Count = int(playsCounts[game_id])
else:
playsCounts[game_id]=0
play_Count=playsCounts[game_id]
if play_Count>=game.playsCount:continue
playsCounts[game_id]+=1
building.playsCounts=dict2obj(playsCounts)
if not enemies:enemy_here=False
else:enemy_here = self.enemyStatus(building,enemies)
if enemy_here:
logger.info(u"Сильвер мешает крутить '%s'"%building_item.name)
self._get_game_location().remove_object_by_id(building.id)
roller=False
if not roller:continue
roll = GamePlayGame(building.id, game_id)
eventRoll.append(roll)
if eventRoll:self._get_events_sender().send_game_events(eventRoll)
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
self.__collection = game_state.get_state().collectionItems.__dict__
def handle(self, event_to_handle):
#self.cprint=self.__game_state_.cprint
_loc = self.__game_state_.get_location_id()
readerloc = self.__item_reader.get(_loc)
if hasattr (event_to_handle,'dailyBonus'):
daily=self.__game_state_.get_state().dailyBonus
prize_pos = event_to_handle.pos
game_prize = daily.prizes[prize_pos]
prize = self.__item_reader.get(game_prize.item)
logger.info(u"Крутанул: Ежедневный бонус Приз: %d %s "%(game_prize.count,prize.name.upper()))
elif event_to_handle.type == 'wizardNpcPlay':
npcsAll=self.__game_state_.get_state().npcs.list
for npcs in npcsAll:
if npcs.id!=event_to_handle.npcId:continue
npcsRead=self.__item_reader.get(npcs.item)
prize=npcsRead.prizes[event_to_handle.pos]
prizeRead=self.__item_reader.get(prize.item)
prizeSTR=u'Выиграл %s %s шт.'%(prizeRead.name.upper(),str(prize.count))
logger.info(u"Крутанул '%s' %s"%(npcsRead.name,prizeSTR))
setattr(npcs,'prize',dict2obj({u'count': prize.count, u'item': prize.item}))
self.__game_state_.get_state().npcs.list=dict2obj(npcsAll)
elif event_to_handle.action==u'play':
gameObject = self.__game_location.get_object_by_id(event_to_handle.objId)
if gameObject is None:return
extraId = event_to_handle.extraId
if hasattr(event_to_handle,'nextPlayDate'):
nextPlayDate = event_to_handle.nextPlayDate
gameObject.nextPlayTimes.__setattr__(extraId,nextPlayDate)
building = self.__item_reader.get(gameObject.item)
for game in building.games:
if game.id != extraId:continue
game_prize = False
if extraId=='FILL_TRIDENT':
fill=game.limit-self.__game_state_.count_in_storage(game.item)
game_prize = dict2obj({"count":fill,"item":game.item})
elif 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 not game_prize:
prizeSTR=u'Ничего не выиграл.'
logger.info(u"Крутанул '%s' %s"%(building.name,prizeSTR))
return
prize = self.__item_reader.get(game_prize.item)
if readerloc.type=='explorationLocation' and prize.type=='chopInstrument':
if not readerloc.disableUseTicketFromGlobus:
self.__game_state_.add_pirate_instruments(game_prize.item, game_prize.count)
else:self.__game_state_.add_from_storage(game_prize.item, game_prize.count)
elif prize.type=='collectionItem':
if self.__collection.has_key(prize.id):
self.__collection[prize.id]+=game_prize.count
else:self.__collection[prize.id]=game_prize.count
self.__game_state_.get_state().collectionItems=dict2obj(self.__collection)
elif hasattr(prize,'moved') and prize.moved:
self.__game_state_.add_from_storageObjects(game_prize.item, game_prize.count)
else:self.__game_state_.add_from_storage(game_prize.item, game_prize.count)
prizeSTR=u'приз: %s %s шт.'%(prize.name.upper(),str(game_prize.count))
logger.info(u"Крутанул '%s' %s"%(building.name,prizeSTR))
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")")
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от АлехВК
Код:
Traceback (most recent call last):
File "main.py", line 108, in <module>
run_game()
File "main.py", line 90, in run_game
Game(site, settings, UserPrompt(gui_input), gui_input=gui_input).start()
File "D:\Programs\Pyton273\zombot\game_engine.py", line 531, in start
self.eventLoop()
File "D:\Programs\Pyton273\zombot\game_engine.py", line 570, in eventLoop
self.perform_all_actions()
File "D:\Programs\Pyton273\zombot\game_engine.py", line 672, in perform_all_actions
actor.perform_action()
File "D:\Programs\Pyton273\zombot\game_actors_and_handlers\roulettes.py", line 98, in perform_action
roller=self.unconditionalPlayCost(game,next_play)
File "D:\Programs\Pyton273\zombot\game_actors_and_handlers\roulettes.py", line 44, in unconditionalPlayCost
if self._get_game_state().count_in_storageObjects(box)>0:return False
AttributeError: GameState instance has no attribute 'count_in_storageObjects'
Помогите с пиратской рулеткой.
Код самой рулетки.
И подскажите, как отключить что бы за дублоны не крутил?
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 playCostGame(self,game,building_item): rulettes = { # не комментировать ,а то будет крутить до упора,лучше остаток больше поставить # рулетка |сколько оставлять фруктов |сколько оставлять рецептов 'B_SLOT_APPLE':{'B_SLOT_B_ROULETTE1':10000,'B_SLOT_APPLE_ROULETTE2':100},# Яблочный автомат 'B_SLOT_CHERRY':{'B_SLOT_B_ROULETTE1':10000,'B_SLOT_CHERRY_ROULETTE2':100},# Вишнёвый автомат 'B_SLOT_MANDARIN':{'B_SLOT_B_ROULETTE1':10000,'B_SLOT_MANDARIN_ROULETTE2':100},# Мандариновый автомат 'B_SLOT_LEMON':{'B_SLOT_B_ROULETTE1':100000,'B_SLOT_LEMON_ROULETTE2':10000},# Лимонный автомат 'B_SOLDIER':{'B_SOLDIER_ROULETTE2':100000,'B_SOLDIER_ROULETTE':10000},# Адмирал } game_id=game.id play_cost = game.playCost need_item=play_cost.item storageCount=self._get_game_state().count_in_storage(need_item) need_count=int(play_cost.count) if rulettes.has_key(building_item): needGame=rulettes[building_item] if not needGame.has_key(game_id):return False if storageCount<=needGame[game_id]:return False if storageCount<play_cost.count:return False self._get_game_state().remove_from_storage(play_cost.item,play_cost.count) return True else: if storageCount<need_count:return False self._get_game_state().remove_from_storage(need_item,need_count) return True
def unconditionalPlayCost(self,game,next_play): pirateBox=['@PIRATE_BOX','@PIRATE_BOX_2'] play_cost = game.unconditionalPlayCost if game.id == "B_TAVERNA_ROULETTE_1": state=self._get_game_state().get_state().pirate.state if state == 'PIRATE' or state == 'AWAY':return False for box in pirateBox: if self._get_game_state().count_in_storageObjects(box)>0:return False dublon=self._get_game_state().count_in_storage(play_cost.item) if dublon<play_cost.count:return False if self._get_timer().has_elapsed(next_play):return True else: self._get_game_state().remove_from_storage(play_cost.item,play_cost.count) return True #logger.info(u'No game_id:',game.id) return False
def enemyStatus(self,building,enemies): if not enemies:return False for enemy in enemies: if((enemy.x - building.x)**2+(enemy.y - building.y)**2)**0.5 < 15: return True return False
def fillToLimit(self,game): storageCount=self._get_game_state().count_in_storage(game.item) if storageCount<game.limit:return True else:return False
def perform_action(self): buildings = self._get_game_location().get_all_objects_by_type('building') enemies = self._get_game_location().get_all_objects_by_type("pirateEnemy") # Ежедневный бонус dailyBonus = self._get_game_state().get_state().dailyBonus if self._get_timer().has_elapsed(dailyBonus.playFrom): daily = DailyBonus() self._get_events_sender().send_game_events([daily]) dailyBonus.playFrom = 10800000 # Крутим рулетку в волшебнике и т.д if hasattr(self._get_game_state().get_state().npcs,'list'): wizards=self._get_game_state().get_state().npcs.list else:wizards=[] if wizards: for wizard in wizards: if wizard.type!='wizard':continue if hasattr(wizard,'prize'):continue events={"type":"npc","id":None,"npcId":wizard.id,"action":"play"} self._get_events_sender().send_game_events([events]) eventRoll=[] for building in buildings: building_item = self._get_item_reader().get(building.item) if not building_item.games:continue for game in building_item.games: if building.level<game.level:continue game_id = game.id roller=True next_play_times = building.nextPlayTimes.__dict__ if not next_play_times.has_key(game_id): next_play_times[game_id]=-90000 next_play = int(next_play_times[game_id]) if hasattr(game,'unconditionalPlayCost'): roller=self.unconditionalPlayCost(game,next_play) elif game.type=='fillToLimit': roller=self.fillToLimit(game) elif hasattr(game, 'playCost'): roller=self.playCostGame(game,building_item.id) if not self._get_timer().has_elapsed(next_play):continue if hasattr(game, 'playsCount'): playsCounts=building.playsCounts.__dict__ if playsCounts.has_key(game_id): play_Count = int(playsCounts[game_id]) else: playsCounts[game_id]=0 play_Count=playsCounts[game_id] if play_Count>=game.playsCount:continue playsCounts[game_id]+=1 building.playsCounts=dict2obj(playsCounts) if not enemies:enemy_here=False else:enemy_here = self.enemyStatus(building,enemies) if enemy_here: logger.info(u"Сильвер мешает крутить '%s'"%building_item.name) self._get_game_location().remove_object_by_id(building.id) roller=False if not roller:continue roll = GamePlayGame(building.id, game_id) eventRoll.append(roll) if eventRoll:self._get_events_sender().send_game_events(eventRoll)
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 self.__collection = game_state.get_state().collectionItems.__dict__ def handle(self, event_to_handle): #self.cprint=self.__game_state_.cprint _loc = self.__game_state_.get_location_id() readerloc = self.__item_reader.get(_loc) if hasattr (event_to_handle,'dailyBonus'): daily=self.__game_state_.get_state().dailyBonus prize_pos = event_to_handle.pos game_prize = daily.prizes[prize_pos] prize = self.__item_reader.get(game_prize.item) logger.info(u"Крутанул: Ежедневный бонус Приз: %d %s "%(game_prize.count,prize.name.upper())) elif event_to_handle.type == 'wizardNpcPlay': npcsAll=self.__game_state_.get_state().npcs.list for npcs in npcsAll: if npcs.id!=event_to_handle.npcId:continue npcsRead=self.__item_reader.get(npcs.item) prize=npcsRead.prizes[event_to_handle.pos] prizeRead=self.__item_reader.get(prize.item) prizeSTR=u'Выиграл %s %s шт.'%(prizeRead.name.upper(),str(prize.count)) logger.info(u"Крутанул '%s' %s"%(npcsRead.name,prizeSTR)) setattr(npcs,'prize',dict2obj({u'count': prize.count, u'item': prize.item})) self.__game_state_.get_state().npcs.list=dict2obj(npcsAll) elif event_to_handle.action==u'play': gameObject = self.__game_location.get_object_by_id(event_to_handle.objId) if gameObject is None:return extraId = event_to_handle.extraId if hasattr(event_to_handle,'nextPlayDate'): nextPlayDate = event_to_handle.nextPlayDate gameObject.nextPlayTimes.__setattr__(extraId,nextPlayDate) building = self.__item_reader.get(gameObject.item) for game in building.games: if game.id != extraId:continue game_prize = False if extraId=='FILL_TRIDENT': fill=game.limit-self.__game_state_.count_in_storage(game.item) game_prize = dict2obj({"count":fill,"item":game.item}) elif 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 not game_prize: prizeSTR=u'Ничего не выиграл.' logger.info(u"Крутанул '%s' %s"%(building.name,prizeSTR)) return prize = self.__item_reader.get(game_prize.item) if readerloc.type=='explorationLocation' and prize.type=='chopInstrument': if not readerloc.disableUseTicketFromGlobus: self.__game_state_.add_pirate_instruments(game_prize.item, game_prize.count) else:self.__game_state_.add_from_storage(game_prize.item, game_prize.count) elif prize.type=='collectionItem': if self.__collection.has_key(prize.id): self.__collection[prize.id]+=game_prize.count else:self.__collection[prize.id]=game_prize.count self.__game_state_.get_state().collectionItems=dict2obj(self.__collection) elif hasattr(prize,'moved') and prize.moved: self.__game_state_.add_from_storageObjects(game_prize.item, game_prize.count) else:self.__game_state_.add_from_storage(game_prize.item, game_prize.count) prizeSTR=u'приз: %s %s шт.'%(prize.name.upper(),str(game_prize.count)) logger.info(u"Крутанул '%s' %s"%(building.name,prizeSTR))
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")")
если не ошибаюсь, то game_engine.py - class GameState():
после def set_from_storage_objects....
PHP код:
def count_in_pirate_instruments(self, item_id): item_id = item_id.lstrip('@') item_id = '@'+item_id for itemid in self.__game_state.pirate.instruments: if itemid.item == item_id:return itemid.count return 0
def remove_from_pirate_instruments(self, item_id, count): item_id = item_id.lstrip('@') item_id = '@'+item_id for itemid in self.__game_state.pirate.instruments: if hasattr(itemid, "item"): if itemid.item != item_id:continue itemid.count -= count return True return False
def add_pirate_instruments(self, item_id, count): item_id = item_id.lstrip('@') item_id = '@'+item_id for itemid in self.__game_state.pirate.instruments: if hasattr(itemid, "item"): if itemid.item != item_id:continue itemid.count += count return self.set_pirate_instruments(item_id, count)