а вот что он выдаёт:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Добавлено через 51 минуту
доделал вроде копание , но ещё есть одна ошибка , не могу понять в чём дело , пишет :
sig is not valid
и перезапускается, и копает с первого друга, можно ли как то сделать чтоб начинал копать с того на ком закончил?
вот сам файл:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Последний раз редактировалось zloy_gnom_2012; 22.12.2013 в 00:52.
Причина: Добавлено сообщение
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от zloy_gnom_2012
Один парень писал дополнения для открытия подарков, сейчас занят не может помочь, может вы поможете, в чём дело ?
вот код :
а вот что он выдаёт:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Добавлено через 51 минуту
доделал вроде копание , но ещё есть одна ошибка , не могу понять в чём дело , пишет :
sig is not valid
и перезапускается, и копает с первого друга, можно ли как то сделать чтоб начинал копать с того на ком закончил?
вот сам файл:
[Ссылки могут видеть только зарегистрированные пользователи. ]
game_engine
PHP код:
# coding=utf-8
import random
import ssl
import message_factory
from message_factory import Session
import vkontakte
from settings import Settings
import vkutils
import pymymailru
import mrutils
import logging
import time
from game_state.item_reader import GameItemReader
from game_state.game_event import dict2obj, obj2dict
from game_state.game_types import GameEVT, GameTIME, GameSTART, GameInfo, GameFertilizePlant, GamePlayGame, GameStartGainMaterial, GameStartTimeGainEvent
import pprint
from game_actors_and_handlers.gifts import GiftReceiverBot, AddGiftEventHandler, CakesReceiverBot
from game_actors_and_handlers.plants import HarvesterBot, SeederBot, PlantEventHandler, GameSeedReader, UseEggItemBot, FertilBot
from game_actors_and_handlers.harvest_buff import GameBuffHarvest
from game_actors_and_handlers.extra_money import HarvestExchange
from game_actors_and_handlers.chop import PirateTreeCut
from game_actors_and_handlers.roulettes import RouletteRoller, GameResultHandler, FrutRouletteRoller
from game_actors_and_handlers.wood_graves import WoodPicker, WoodTargetSelecter
from game_actors_and_handlers.building_buyer import BuildingBuyer
from game_actors_and_handlers.travel_buff import GameTravelBuff
from game_actors_and_handlers.friend_dig import FriendDigger
from game_actors_and_handlers.cook_graves import BrewPicker, CookerBot, RecipeReader, CookSpeed
from game_actors_and_handlers.digger_graves import BagsPicker, TimeGainEventHandler
from game_actors_and_handlers.stone_graves import StonePicker, StoneTargetSelecter
from game_actors_and_handlers.workers import GainMaterialEventHandler
from game_actors_and_handlers.pickups import Pickuper, AddPickupHandler,BoxPickuper
from game_actors_and_handlers.location import ChangeLocationBot, GameStateEventHandler
from game_actors_and_handlers.friends import VisitingUsers
from game_state.brains import PlayerBrains
from game_actors_and_handlers.wand import MagicWand
import socket
import urllib2
from game_actors_and_handlers.burrowing import DigBot, DigBotEventHandler
from game_actors_and_handlers.storage import SellBot
from game_actors_and_handlers.missions import GetMissionsBot, ViewMissions
def get_all_objects_by_types(self, object_types):
objects = []
for game_object in self.get_game_objects():
item = self.__item_reader.get(game_object.item)
if game_object.type in object_types or item.type in object_types:
objects.append(game_object)
return objects
def get_object_by_id(self, obj_id):
for game_object in self.get_game_objects():
if game_object.id == obj_id:
return game_object
return None
def log_game_objects(self):
for gameObject in self.get_game_objects():
# if gameObject.type != 'base':
logger.info(obj2dict(gameObject))
def remove_object_by_id(self, obj_id):
for game_object in list(self.get_game_objects()):
if game_object.id == obj_id:
self.get_game_objects().remove(game_object)
def _getUserInfo(self):
'''
returns user info using vk api
'''
# get vk user info
api = vkontakte.api.API(token=self.__api_access_token)
info = api.getProfiles(
uids=self.__session.getUserId(), format='json',
fields='bdate,sex,first_name,last_name,city,country')
info = info[0]
if 'bdate' in info:
bdate = info['bdate']
else:
bdate = None
my_country = api.places.getCountryById(cids=int(info['country']))[0]
info['country'] = my_country['name']
my_city = api.places.getCityById(cids=int(info['city']))[0]
info['city'] = my_city['name']
game_info = GameInfo(city=info['city'], first_name=info['first_name'],
last_name=info['last_name'],
uid=long(info['uid']), country=info['country'],
sex=long(info['sex']), bdate=bdate)
return game_info
class GameState():
def __init__(self, start_response, item_reader):
self.__item_reader = item_reader
self.__game_state = start_response.state
game_state_event = start_response.params.event
self.set_game_loc(game_state_event)
self.__player_brains = PlayerBrains(self.__game_state,
self.get_game_loc(),
item_reader)
total_brain_count = self.__player_brains.get_total_brains_count()
occupied_brain_count = self.__player_brains.get_occupied_brains_count()
#logger.info("")
logger.info("Мозги: %d/%d" % (occupied_brain_count, total_brain_count))
x=0
z=0
for burySlot in self.__game_state.burySlots:
x+=1
if (hasattr(burySlot, u"user") is True): z+=1
logger.info("Использование слотов для закопки друзей: %d/%d" % (z,x))
if len(self.__game_state.buyedBrains)<>0:
logger.info("Купленные:")
x=1
for buyed_brain in self.__game_state.buyedBrains:
ms=int(buyed_brain.endTime)-((int(buyed_brain.endTime)/1000)*1000)
s=(int(buyed_brain.endTime)/1000)-(((int(buyed_brain.endTime)/1000)/60)*60)
m=((int(buyed_brain.endTime)/1000)/60)-((((int(buyed_brain.endTime)/1000)/60)/60)*60)
h=((int(buyed_brain.endTime)/1000)/60)/60
logger.info("%d. Время окончания: %d:%d:%d.%d"%(x,h,m,s,ms))
x+=1
#logger.info("")
logger.info("Уровень игрока: "+str(self.__game_state.level))
s=''
for i in range(len(str(self.__game_state.gameMoney)),0,-3):
if i>=3: s=str(self.__game_state.gameMoney)[i-3:i]+'.'+s
else: s=str(self.__game_state.gameMoney)[:i]+'.'+s
logger.info("Деньги игрока: "+s[:-1])
#logger.info("")
def set_game_loc(self, game_state_event):
self.__game_loc = GameLocation(self.__item_reader,
game_state_event.location,game_state_event.gameObjects)
for attr, val in game_state_event.__dict__.iteritems():
self.__game_state.__setattr__(attr, val)
#self.get_game_loc().log_game_objects()
def has_in_storage(self, item_id, count):
for itemid in self.__game_state.storageItems:
if hasattr(itemid, "item"):
if itemid.item == item_id:
return itemid.count >= count
return False
def count_in_storage(self, item_id):
for itemid in self.__game_state.storageItems:
if hasattr(itemid, "item"):
if itemid.item == item_id:
return itemid.count
return 0
def remove_from_storage(self, item_id, count):
for itemid in self.__game_state.storageItems:
if hasattr(itemid, "item"):
if itemid.item == item_id:
itemid.count -= count
return True
return False
def add_from_storage(self, item_id, count):
for itemid in self.__game_state.storageItems:
if hasattr(itemid, "item"):
if itemid.item == item_id:
itemid.count += count
return
self.set_from_storage(item_id, count)
#print ''
if self.__selected_seed<>None:
if (self.__selected_seed=='None'): print u'Выбранные семена: ничего не сажать'
else:
if type(self.__selected_seed)==type(''):
#name = self.__itemReader.get(self.__selected_seed).name
print u'Выбранные семена: везде "%s"'%str(self.__selected_seed)
else:
print u'Выбранные семена (остров - семена):'
for loc in self.__selected_seed.keys():
if len(loc)>6: print u'\t%s\t-\t"%s"'%(str(loc),str(self.__selected_seed[loc]))
else: print u'\t%s\t\t-\t"%s"'%(str(loc),str(self.__selected_seed[loc]))
#print ''
if self.__selected_recipe<>None:
if (self.__selected_recipe=='None'): print u'Выбранные рецепты: ничего не варить'
else:
if type(self.__selected_recipe)==type(''): print u'Выбранные рецепты: везде "%s"'%str(self.__selected_recipe)
elif type(self.__selected_recipe)==type([]): print u'Выбранные рецепты: везде "%s"'%str(', '.join(self.__selected_recipe))
else:
print u'Выбранные семена (остров - рецепт):'
for loc in self.__selected_recipe.keys():
if len(loc)>6: print u'\t%s\t-\t"%s"'%(str(loc),str(self.__selected_recipe[loc]))
else: print u'\t%s\t\t-\t"%s"'%(str(loc),str(self.__selected_recipe[loc]))
if (self.__selected_sell==None): print u'Предметы на продажу: ничего не продавать'
else:
print u'Предметы на продажу (предмет - сколько оставить):'
for item in self.__selected_sell.keys():
print u'\t"%s"\t\t-\t%s'%(str(item),str(self.__selected_sell[item]))
'''print ''
print u'Настройки показа:'
if (self.__setting_view['pickup']): print u'\tПоказывать подбираемые предметы'
else: print u'\tНе показывать подбираемые предметы'
if (self.__setting_view['location_send']): print u'\tПоказывать перешедшую локацию'
else: print u'\tНе показывать перешедшую локацию'
print ''
'''
def select_item(self, reader_class, prompt_string):
item_reader = reader_class(self.__itemReader)
available_items = item_reader.get_avail_names(self.__game_state_)
item_name = self.__user_prompt.prompt_user(prompt_string,
available_items)
return item_reader.get_by_name(item_name)
def select_plant_seed(self):
if self.__selected_seed is None:
self.__selected_seed = self.select_item(GameSeedReader,
u'Семена для грядок:')
def select_recipe(self):
if self.__selected_recipe is None:
self.__selected_recipe = self.select_item(RecipeReader,
u'Рецепт для поваров:')
def select_location(self):
logger.info('Доступные острова:')
logger.info('(+ платный, - бесплатный, ? - пещера)')
locations_nfree = [u'isle_01', 'isle_small', 'isle_star', 'isle_large', 'isle_moon', 'isle_giant', 'isle_xxl', 'isle_desert']
locations_nwalk = [u'un_0'+str(x+1) for x in range(9)]
locations = {}
for location in self.get_game_state().locationInfos:
name = self.__itemReader.get(location.locationId).name
if (location.locationId not in locations_nfree) and (location.locationId not in locations_nwalk):
locations[name] = location
logger.info('\t-\t'+location.locationId+'\t'+name)
else:
if (location.locationId not in locations_nfree):
logger.info('\t?\t'+location.locationId+'\t'+name)
else:
logger.info('\t+\t'+location.locationId+'\t'+name)
if locations:
logger.info('Находимся на острове:')
logger.info(' * '+self.__itemReader.get(self.get_game_loc().get_location_id()).name)
#logger.info("")
#location_name = self.__user_prompt.prompt_user(u'Выберите остров:',locations.keys())
location_name = locations.keys()[0]
if location_name in locations:
self.__selected_location = locations[location_name].locationId
else:
self.__selected_location = self.get_game_loc().get_location_id()
cur_time = self.__timer._get_current_client_time()
min = int(int(cur_time/1000)/60)
if min not in ref_min:
if (refresh_min-min)==1: logger.info(u'Перезагрузка через %s минуту'%str(refresh_min-min))
elif ((refresh_min-min)>=2) and ((refresh_min-min)<=4): logger.info(u'Перезагрузка через %s минуты'%str(refresh_min-min))
else: logger.info(u'Перезагрузка через %s минут'%str(refresh_min-min))
ref_min += [min]
if min>=refresh_min:
ref_min = []
break
def create_all_actors(self):
receive_options = {'with_messages': self.__receive_gifts_with_messages,
'non_free': self.__receive_non_free_gifts}
options = {'GiftReceiverBot': receive_options,
'SeederBot': self.__selected_seed,
'CookerBot': self.__selected_recipe,
'ChangeLocationBot': self.__selected_location,
'VisitingUsers':self.__friendsid,
'FriendDigger':self.__friendsid,
'DigBot':self.__friendsid,#self.__game_events_sender,
'SellBot':{'sell_item':self.__selected_sell,'send_user':self.__selected_send},
'ChangeLocationBot':self.__selected_loc_setting,
}
events_sender = self.__game_events_sender
timer = self._get_timer()
item_reader = self.__itemReader
game_state = self.__game_state_
actor_classes = [
#DigBot, # Работа с мозгами
#GetMissionsBot, # Запрос выполнения миссий
#VisitingUsers, # Посещение друзей
# WoodPicker, # Сбор дерева
# StonePicker, # Сбор камня
# BrewPicker, # Сбор сваренного
# BagsPicker, # Сбор сумок
# WoodTargetSelecter, # Отправка работать дровосекам
# StoneTargetSelecter,# Отправка работать камнетёсов
#PirateTreeCut,
### GameBuffHarvest,
#HarvestExchange, # обмен роз на деньги Мая
#GameTravelBuff, # создание проездного на 5 дней
FriendDigger, ###### копание кладов у друзей
# CookerBot, # Работа с поварами (подъем из могил, установка рецептов)
#CookSpeed, # Посолить рецепты
#FertilBot, # Удобрение деревьев
# HarvesterBot, # Сбор чего либо + вскапывание грядок
#CakesReceiverBot, # Сбор пряников
# SeederBot, # Посейка
#GiftReceiverBot, # Принятие подарков
# BoxPickuper, # Вскрытие чего либо
# RouletteRoller, # Кручение рулеток
#FrutRouletteRoller, # Кручение фруктовых рулеток
#UseEggItemBot, # Бить яйца ;)
# MagicWand, # Добыча ресурсов палочками
# Pickuper, # Сбор дропа
# SellBot, # Продажа чего либо
#ChangeLocationBot, # Переход по локациям
]
self.__actors = []
for actor_class in actor_classes:
self.__actors.append(
actor_class(item_reader, game_state, events_sender, timer,
options))
def perform_all_actions(self):
'''
Assumes that create_all_actors is called before
'''
#all_time=[]
for actor in self.__actors:
#time_one=time.time()
actor.perform_action()
#time_two=time.time()
#logger.info(u'Класс %s' % (str(actor).split()[0].split('.')[-1]))
#logger.info(u'Выполнялся %f' % (time_two-time_one))
#all_time+=[[str(actor).split()[0].split('.')[-1],(time_two-time_one)]]
self.handle_all_events()
#open('time.txt','a').write(str(all_time))
self.__game_events_sender.send_game_events()
self.handle_all_events()
#raw_input()
def handle_all_events(self):
self.__game_events_sender.print_game_events()
for event in self.__game_events_sender.get_game_events():
self.handleEvent(event)
def send(self, data):
data = obj2dict(data)
assert 'type' in data
request = self.__factory.createRequest(data)
return dict2obj(request.send(self.__connection))
# coding=utf-8
import sys
import logging
import random as random_number
from game_state.game_types import GameWoodGrave, GameWoodGraveDouble,\
GamePickItem, GameWoodTree, GameGainItem, GamePickup, GameDigItem
from game_state.game_event import dict2obj, obj2dict
from game_actors_and_handlers.base import BaseActor
logger = logging.getLogger(__name__)
class FriendDigger(BaseActor):
def perform_action(self):
#logger.info(u"######### Идем к другу ###########")
#go_to_friend = {"action":"gameState","locationId":"main","user":'201018303',"objId":None,"type":"gameState"}#{"id":8,"action":"gameState","objId":null,"locationId":"main","user":"144371056","type":"gameState"} #,"id":46667
#friends = ['8477452','22656865','27505179','107183826','68030140','163206097']#'476111',
friends = self._get_options()
# Юдо Чудо
friends = ['[BOT]friend1','[BOT]friend2'] + friends
objtypes = ['decoration']
myid = '201018303'
self._get_game_state().shovel = 0
if not hasattr(self._get_game_state(),'countfnyt'):self._get_game_state().countfnyt = 109
if not hasattr(self._get_game_state(), 'countnyt'):self._get_game_state().countnyt = 0
if not hasattr(self._get_game_state(), 'sendNewYearGift'):self._get_game_state().sendNewYearGift = 0
if not hasattr(self._get_game_state(), 'gameObjects') and self._get_game_state().countfnyt < len(friends):
user = friends[self._get_game_state().countfnyt]
print (u"######### Идем к другу "+str(user)+" "+str(self._get_game_state().countfnyt+1)+"/"+str(len(friends))+" #########").encode('cp866')
self._get_events_sender().send_game_events([{"action":"gameState","locationId":"main","user":str(user),"objId":None,"type":"gameState"},{"type":"players","action":"getInfo","players":[str(user)]}])
self._get_game_state().countfnyt += 1
elif hasattr(self._get_game_state(), 'gameObjects'):# and
open('objects.txt', 'a').write(str(friends[self._get_game_state().countfnyt])+"\n")
print "############### gameObjects #################"
countnyt = 0
countmyg = 0
countpickup = 0
objssvl = []
if hasattr(self._get_game_state(),'alldigged'):alldigged = 1
else: alldigged = 0
for object in self._get_game_state().gameObjects:
if self._get_game_state().countnyt + countnyt < 148:
if hasattr(object, 'type'):
tf = 0
if object.type == 'newYearTree':
tf = 1
usrs = len(object.users)
#object.users = usrs
#open('newyeartree.txt', 'a').write(str(obj2dict(object))+"\n")
if tf == 1 and not hasattr(self._get_game_state(), 'nytend'):
#print (u"Ёлка !!!").encode('cp866')
#open('gameObjects.txt', 'a').write(str(obj2dict(object))+"\n")
#open('newyeartree.txt', 'a').write(object.item + " UsersGift:" + str(len(object.users)) + "\n")
tf = 1
f = 0
#Ёлки разной ёмкости. указано не точно.
if object.item == u'@B_SPRUCE_SMOLL' and len(object.users) < 3: f = 1
if object.item == u'@B_SPRUCE_MIDDLE' and len(object.users) < 6: f = 1
if object.item == u'@B_SPRUCE_BIG' and len(object.users) < 15: f = 1
#if object.item == u'@B_BASKETS_EASTER_1' and len(object.users) < 15: f = 1
#if object.item == u'@B_BASKETS_EASTER_2' and len(object.users) < 7: f = 1
#if object.item == u'@B_BASKETS_EASTER_3' and len(object.users) < 3: f = 1
for user in object.users:
if user.id == myid:
countmyg+=1#print "MyGift"
f = 0
break
#if not check_no_my_gift(object.users): f = 1
if self._get_game_state().countnyt + countnyt > 151 or hasattr(self._get_game_state(),'nyna'):
self._get_game_state().nytend = 1
print "################## END ####################"
if f == 1:
# Ложим пряник
#open('newyeartree.txt', 'a').write(str(obj2dict(object)) + "\n")
#self._get_events_sender().send_game_events([{"itemId":"CAKE_PACK_FREE1","action":"remoteNewYear","type":"item","objId":object.id}])
countnyt+=1
#pass
#else: print "NO"
# Вскрываем сундук
if tf == 0 and object.type == 'pickup':
#open('sunduki.txt', 'a').write(str(obj2dict(object)) + "\n")
self._get_events_sender().send_game_events([{"action":"pick","type":"item","objId":object.id}])
countpickup+=1
tf = 2
# Добавляем в список объекты для копания клада
if tf == 0 and alldigged == 0:
for objtype in objtypes:
if object.type == objtype:
if object.item == '@D_SAKURASMALL':
print object.item,object.id
objssvl.append(object)
break
if tf == 0:
open('objects.txt', 'a').write(str(obj2dict(object))+"\n")
if hasattr(self._get_game_state(),'playersInfo'):
open('objects.txt', 'a').write('-------------------------------------' + "\n")
open('objects.txt', 'a').write(str(obj2dict(self._get_game_state().playersInfo))+"\n")
open('objects.txt', 'a').write('-------------------------------------' + "\n")
countlop = 0
if len(objssvl) > 0:
for i in range(150):
objdig = random_number.choice(objssvl)
self._get_events_sender().send_game_events([{"objId":objdig.id,"x":objdig.x,"action":"remoteDig","y":objdig.y,"type":"item"}])
countlop+=1
print (u"Использовал: "+str(countlop)+u" лопат").encode('cp866')
elif alldigged == 1: print (u'Всё уже выкопано!').encode('cp866')
else: print (u'Нечего копать!').encode('cp866')
print (u"Вскрыли сундуков: "+str(countpickup)).encode('cp866')
if hasattr(self._get_game_state(),'alldigged'): del self._get_game_state().alldigged
del self._get_game_state().gameObjects
self._get_game_state().countnyt += countnyt
print (u"поЛожил пряник(ов): "+str(self._get_game_state().sendNewYearGift)+":"+str(self._get_game_state().countnyt)+"/"+str(countnyt)+" dub: "+str(countmyg)).encode('cp866')
self._get_game_state().shovel = 0
#if self._get_game_state().countfnyt + 1 > len(friends):sys.exit(0)
я надеюсь кто хоть что-ниить соображает разберется в строках?а то я и так уже понодавал якобы прогерам с Жука,а оказалось что нет((
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
появился новый сундук (новогодний пиратский, пришлось дописать его, чтоб таверна норм работала... вроде работает =)
Цитата:
if game_id == "B_TAVERNA_ROULETTE_1":
pirate_box = 0
for _obj in list(self._get_game_state().get_state().storageGam eObjects):
if _obj.item == '@PIRATE_BOX' or '@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
Последний раз редактировалось ichi88; 22.12.2013 в 13:19.
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Цитата:
Сообщение от Cheater84
я надеюсь кто хоть что-ниить соображает разберется в строках?а то я и так уже понодавал якобы прогерам с Жука,а оказалось что нет((
PHP код:
if tf == 0 and object.type == 'pickup':
#open('sunduki.txt', 'a').write(str(obj2dict(object)) + "\n")
self._get_events_sender().send_game_events([{"action":"pick","type":"item","objId":object.id}])
countpickup+=1
tf = 2
Вообще-то эти строки попадают под статью "грабеж, совершенный группой лиц с отягчающими обстоятельствами". Он вскрывает чужие сундуки и мешки кладоискателей. Что по меньшей мере неэтично...
Во-вторых, я нигде не видел ответа на запрос PING1 и PING2. При удаленном копании это очень критично - иначе игра как раз выдает invalid sig (если пришел ping, но на него не ответили "пустым event").
def get_all_objects_by_types(self, object_types):
объекты = []
для game_object в self.get_game_objects():
item = self.__item_reader.get(game_object.item)
если game_object.type в object_types или item.type в object_types:
objects.append(game_object)
возвращение объектов
def get_object_by_id(self, obj_id):
для game_object в self.get_game_objects():
если game_object.id == obj_id:
возвращение game_object
возврата Нет
def log_game_objects(self):
для gameObject в self.get_game_objects():
# если gameObject.type != "базовый":
Регистратор.info(obj2dict(gameObject))
def remove_object_by_id(self, obj_id):
для game_object в списке(self.get_game_objects()):
если game_object.id == obj_id:
self.get_game_objects().remove(game_object)
def has_in_storage(self, item_id, count):
для itemid в self.__game_state.storageItems:
если hasattr(itemid, "элемент"):
если itemid.item == item_id:
возвращение itemid.count >= count
return False
def count_in_storage(self, item_id):
для itemid в self.__game_state.storageItems:
если hasattr(itemid, "элемент"):
если itemid.item == item_id:
возвращение itemid.count
возвращает 0,
def remove_from_storage(self, item_id, count):
для itemid в self.__game_state.storageItems:
если hasattr(itemid, "элемент"):
если itemid.item == item_id:
itemid.count -= count
return True
return False
def add_from_storage(self, item_id, count):
для itemid в self.__game_state.storageItems:
если hasattr(itemid, "элемент"):
если itemid.item == item_id:
itemid.count += count
возвращение
self.set_from_storage(item_id, count)
#print "
если self.__selected_seed<>None:
если (self.__selected_seed=='None'): print u'Выбранные семена: ничего не сажать'
другое:
если тип(self.__selected_seed)==тип("):
#name = self.__itemReader.get(self.__selected_seed).name
печать u'Выбранные семена: везде "%s"'%str(self.__selected_seed)
другое:
печать u'Выбранные семена (остров - семена):'
для loc self.__selected_seed.keys():
если len(loc)>6: печать u'\t%s\t\t"%s"'%(str(loc),str(self.__selected_seed[loc]))
остальное: печать u'\t%s\t\t\t"%s"'%(str(loc),str(self.__selected_seed[loc]))
#print "
если self.__selected_recipe<>None:
если (self.__selected_recipe=='None'): print u'Выбранные рецепты: ничего не варить'
другое:
если тип(self.__selected_recipe)==тип("): print u'Выбранные рецепты: везде "%s"'%str(self.__selected_recipe)
elif типа(self.__selected_recipe)==([]): print u'Выбранные рецепты: везде "%s"'%str(', '.join(self.__selected_recipe))
другое:
печать u'Выбранные семена (остров - рецепт):'
для loc в self.__selected_recipe.keys():
если len(loc)>6: печать u'\t%s\t\t"%s"'%(str(loc),str(self.__selected_recipe[loc]))
остальное: печать u'\t%s\t\t\t"%s"'%(str(loc),str(self.__selected_recipe[loc]))
если (self.__selected_sell==None): print u'Предметы на продажу: ничего не продавать'
другое:
печать u'Предметы на продажу (предмет - сколько оставить):'
для элемента в self.__selected_sell.keys():
печать u'\t"%s"\t\t\t%s'%(str(позиция),str(self.__selected_sell[item]))
"печать "
печать u'Настройки показа:'
если (self.__setting_view['пикап']): print u'\tПоказывать подбираемые предметы'
остальное: печать u'\показывать подбираемые предметы'
если (self.__setting_view['location_send']): print u'\tПоказывать перешедшую локацию'
остальное: печать u'\показывать перешедшую локацию'
print "
"'
def select_item(self, reader_class, prompt_string):
item_reader = reader_class(self.__itemReader)
available_items = item_reader.get_avail_names(self.__game_state_)
item_name = self.__user_prompt.prompt_user(prompt_string,
available_items)
возвращение item_reader.get_by_name(item_name)
def select_plant_seed(self):
если self.__selected_seed None:
self.__selected_seed = self.select_item(GameSeedReader,
u'Семена для грядок:')
def select_recipe(self):
если Никто self.__selected_recipe:
self.__selected_recipe = self.select_item(RecipeReader,
u'Рецепт для поваров:')
def select_location(self):
logger.info('Доступные острова:')
logger.info('(+ платный, - бесплатный, ? - пещера)')
locations_nfree = [u'isle_01', 'isle_small', 'isle_star', 'isle_large', 'isle_moon', 'isle_giant', 'isle_xxl', 'isle_desert']
locations_nwalk = [u'un_0'+str(x+1), где x в диапазоне(9)]
местах = {}
для размещения в self.get_game_state().locationInfos:
name = self.__itemReader.get(location.locationId).name
если (location.locationId не в locations_nfree) и (location.locationId не в locations_nwalk):
местах[name] = месте
logger.info('\t\t'+location.locationId+'\t'+имя)
другое:
если (location.locationId не в locations_nfree):
logger.info('\t?\t'+location.locationId+'\t'+имя)
другое:
logger.info('\t+\t'+location.locationId+'\t'+имя)
если местах:
logger.info('Находимся на острове:')
Регистратор.info(' * '+самоуправления.__itemReader.get(self.get_game_loc().get_location_id()).name)
#logger.info("")
#location_name = self.__user_prompt.prompt_user(u'Выберите остров:',locations.keys())
location_name = locations.keys()[0]
если location_name местах:
self.__selected_location = местах[location_name].locationId
другое:
self.__selected_location = self.get_game_loc().get_location_id()
def управлением(self):
если self.__gui_input:
работает = self.__gui_input.running
другое:
работает = лямбда: True
возвращение running()
def start(self):
в то время как(self.running()):
попробуйте:
# загрузка элементов словарь
если self.__itemReader None:
logger.info('Загружаем словарь объектов...')
item_reader = GameItemReader()
#item_reader.download('items.txt')
item_reader.read('items.txt')
self.__itemReader = item_reader
logger.info('Словарь объектов загружен')
start_response,self.__friendsid,self.__server_time = self.__game_initializer.start()
# Сохранить Game_state
#open("game_state.txt","w")написать(str(obj2dict(start_response)))
# TODO отправить getMissions
# TODO ручки getMissions ответ
self.eventLoop()
кроме urllib2.HTTPError, e:
повысить e
за исключением (socket.timeout, urllib2.HTTPError, urllib2.URLError):
секунд = 3
logger.error('истекло, повторять через %s секунд)...'
% секунды)
время.sleep(в секундах)
за исключением (socket.error, ssl.SSLError) e:
секунд = 10
logger.error('ошибка Сокета, повторять через %s секунд)...'
% секунды)
time.sleep(в секундах)
кроме message_factory.GameError, e:
если не self.__ignore_errors:
повысить e
def save_game_state(self, start_response):
# проанализировать состояние игры
self.__game_state_ = GameState(start_response, self.__itemReader)
cur_time = self.__timer._get_current_client_time()
min = int(int(cur_time/1000)/60)
если мин не в ref_min:
если (refresh_min-мин.)==1: logger.info(u'Перезагрузка через %s минуту'%str(refresh_min-min))
elif ((refresh_min-мин)>=2) и ((refresh_min-мин)<=4): logger.info(u'Перезагрузка через %s минуты'%str(refresh_min-min))
остальное: logger.info(u'Перезагрузка через %s минут'%str(refresh_min-min))
ref_min += [min]
если min>=refresh_min:
ref_min = []
перерыв
def create_all_actors(self):
receive_options = {'with_messages': self.__receive_gifts_with_messages,
'non_free': self.__receive_non_free_gifts}
options = {'GiftReceiverBot': receive_options,
'SeederBot': self.__selected_seed,
'CookerBot': self.__selected_recipe,
'ChangeLocationBot': self.__selected_location,
'VisitingUsers':self.__friendsid,
'FriendDigger':self.__friendsid,
'DigBot':self.__friendsid,#самостоятельно.__game_events_sender,
'SellBot':{'sell_item':self.__selected_sell,'send_user':self.__selected_send},
'ChangeLocationBot':self.__selected_loc_setting,
}
events_sender = self.__game_events_sender
таймер = self._get_timer()
item_reader = self.__itemReader
game_state = self.__game_state_
actor_classes = [
#DigBot, # Работа с мозгами
#GetMissionsBot, # Запрос выполнения миссий
#VisitingUsers, # Посещение друзей
# WoodPicker, # Сбор дерева
# StonePicker, # Сбор камня
# BrewPicker, # Сбор сваренного
# BagsPicker, # Сбор сумок
# WoodTargetSelecter, # Отправка работать дровосекам
# StoneTargetSelecter,# Отправка работать камнетесов
#PirateTreeCut,
### GameBuffHarvest,
#HarvestExchange, # обмен роз на деньги Мая
#GameTravelBuff, # создание проездного на 5 дней
FriendDigger, ###### копание кладов у друзей
# CookerBot, # Работа с поварами (подъем из могил, установка рецептов)
#CookSpeed, # Посолить рецепты
#FertilBot, # Удобрение деревьев
# HarvesterBot, # Сбор чего либо + вскапывание грядок
#CakesReceiverBot, # Сбор пряников
# SeederBot, # Посейка
#GiftReceiverBot, # Принятие подарков
# BoxPickuper, # Вскрытие чего либо
# RouletteRoller, # Кручение рулеток
#FrutRouletteRoller, # Кручение фруктовых рулеток
#UseEggItemBot, # Бить яйца ;)
# MagicWand, # Добыча ресурсов палочками
# Pickuper, # Сбор дропа
# SellBot, # Продажа чего либо
#ChangeLocationBot, # Переход по локациям
]
self.__actors = []
для actor_class в actor_classes:
self.__actors.append(
actor_class(item_reader, game_state, events_sender, таймер,
варианты))
def perform_all_actions(self):
"'
Предполагается, что create_all_actors вызывается перед
"'
#all_time=[]
для актера в self.__actors:
#time_one=time.time()
actor.perform_action()
#time_two=time.time()
#logger.info(u'Класс %s' % (str(актер).split()[0].split('.')[-1]))
#logger.info(u'Выполнялся %f' % (time_two-time_one))
#all_time+=[[str(актер).split()[0].split('.')[-1],(time_two-time_one)]]
self.handle_all_events()
#open('time.txt','a')написать(str(all_time))
self.__game_events_sender.send_game_events()
self.handle_all_events()
#raw_input()
def handle_all_events(self):
self.__game_events_sender.print_game_events()
события в self.__game_events_sender.get_game_events():
self.handleEvent(событие)