Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Zombot (Клиент для игры Зомби ферма) [Обсуждение]

-

Свободное обсуждение

- Ваши идеи, вопросы и ответы на тему браузерных игр и социальных сетей

Ответ
 
Опции темы
Старый 04.01.2015, 17:26   #3811
 Разведчик
Аватар для greyzza
 
greyzza никому не известный тип
Регистрация: 25.02.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

я и говорю зажрались, без реала, этих коллекций хватает, а если не хватает зб есть много способов чтобы их заиметь не мне вас учить, конечно не накупить теперь рыбаков с мозгами и не заставить ими все острова), хотя и это возможно при фанатизме
  Ответить с цитированием
Старый 06.01.2015, 16:30   #3812
 Разведчик
Аватар для ruslanische
 
ruslanische никому не известный тип
Регистрация: 22.03.2012
Сообщений: 3
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Ох, как же трудно избавится от хитросплетения классов и упростить код... Но силы пока не покидают меня connection.py выпилил практически полностью, используя пакет requests.
скоро доберусь до game_types.py, хочу от него избавиться. Надо определиться, в каком виде ворочать данными, может работать просто с json, используя запросы xpath?

Добавлено через 14 минут
Проблемы с юникодом вообще выносят мозг...

Последний раз редактировалось ruslanische; 06.01.2015 в 16:44. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 06.01.2015, 16:55   #3813
 Разведчик
Аватар для GirlKris
 
GirlKris никому не известный тип
Регистрация: 17.02.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Проблемы с юникодом вообще выносят мозг...

В чём же проблема?)
  Ответить с цитированием
Старый 06.01.2015, 17:07   #3814
 Разведчик
Аватар для ruslanische
 
ruslanische никому не известный тип
Регистрация: 22.03.2012
Сообщений: 3
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от GirlKrisПосмотреть сообщение
В чём же проблема?)

Проблемы выяснились при переходе на пакет requsets. В оригинальном боте половина строк была байтовая и посыпались исключения при неявной конвертации из юникода в аски и наоборот. Вроде щас все перевел в юникод.
  Ответить с цитированием
Старый 07.01.2015, 02:11   #3815
 Разведчик
Аватар для dreamerag2
 
dreamerag2 никому не известный тип
Регистрация: 29.07.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от ruslanischeПосмотреть сообщение
скоро доберусь до game_types.py, хочу от него избавиться.

эт правильно, он мне давно не нравится. лишняя писанина.
  Ответить с цитированием
Старый 07.01.2015, 11:56   #3816
 Разведчик
Аватар для harDDDcore
 
harDDDcore никому не известный тип
Регистрация: 24.03.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Здравствуйте! Хочу обратиться к Вам за помощью, очень надеюсь, что Вы мне не откажете. На сегодняшний день у меня на руках 4 бота: пиратский, копалка, и две разных сеялки. В каждой из них есть свой функционал, которого нет в других. Все они собраны разными людьми. Спаять в одно целое мне не под силу, поэтому я решил обратиться к Вам. Вы вместе делаете одно большое дело: с одной стороны упрощая игру себе, с другой - познавая программирование на практике в прикладных целях. Вероятно, существует версия программы, объединяющая все возможности в одной сборке, можно у Вас ее попросить?
Поделитесь, пожалуйста, со мной!
P.S. Всех с Новым Годом!

Можете кинуть копателя?
  Ответить с цитированием
Старый 07.01.2015, 14:43   #3817
 Разведчик
Аватар для ruslanische
 
ruslanische никому не известный тип
Регистрация: 22.03.2012
Сообщений: 3
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от dreamerag2Посмотреть сообщение
эт правильно, он мне давно не нравится. лишняя писанина.

Как писал megabyte0, можно от него избавиться, использую dict as obj, но это тоже костыли. Я просто переделываю на обычный dict (что нативно для питона). Но будет немного топорно смотреться, но мне так почему-то понятнее:

Код:
                game_state = self.__game_engine.game_state_new #dict
                start_time = time.time()
                objects = game_state['params']['event']['gameObjects']
                plants = []
                for object in objects:
                    if object['type'] == u'plant':
                        plants.append(object)
                time_1 = time.time()-start_time

                self.save_game_state(start_response)

                start_time = time.time()
                objects2 = self.__game_state_.get_game_loc().get_game_objects()
                plants = self.__game_state_.get_game_loc().get_all_objects_by_type(u'plant')
                time_2 = time.time()-start_time
Если сравнить скорость, то get_all_objects_by_type() проигрывает в 25 раз простому dict.

Добавлено через 48 минут
Может кто еще подсказать, зачем в классе GameTimer хранится client_time?
Код:
random.seed()
self._client_time = long(random.randrange(2800, 4000))
Нафига? Может какие подводные камни? Вот так можно?
Код:
class GameTimer(object):
    def __init__(self):
        # время старта клиента
        self._start_time = time.time()

    # Возвращает время работы бота в милисекундах
    def _get_current_client_time(self):
        return long((time.time() - self._start_time) * 1000)

    def has_elapsed(self, time):
        return int(time) <= self._get_current_client_time()

Последний раз редактировалось ruslanische; 07.01.2015 в 15:31. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 08.01.2015, 10:04   #3818
 Разведчик
Аватар для dreamerag2
 
dreamerag2 никому не известный тип
Регистрация: 29.07.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от ruslanische
Я просто переделываю на обычный dict (что нативно для питона). Но будет немного топорно смотреться, но мне так почему-то понятнее

Полностью с тобой согласен)
  Ответить с цитированием
Старый 10.01.2015, 17:02   #3819
 Разведчик
Аватар для megabyte0
 
megabyte0 никому не известный тип
Регистрация: 29.07.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 8 раз(а) в 5 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от ruslanischeПосмотреть сообщение
Как писал megabyte0, можно от него избавиться, использую dict as obj, но это тоже костыли.

Можете пояснить, чем именно? Это тот же dict, по быстродействию где-то в пару раз, но именно! Посмотрите на кодинг.
Цитата:
Сообщение от ruslanischeПосмотреть сообщение
Код:
objects = game_state['params']['event']['gameObjects']

Куда проще и нативнее поставить точку, чем ворочать [' и '] , это очень неудобно лично мне в процессе кодинга. Больше низачем dict as an obj не нужен, разумеется.

Цитата:
Сообщение от ruslanischeПосмотреть сообщение
start_time = time.time()

time.clock() советуют, точность слегка выше, порядка 1us

Цитата:
Сообщение от ruslanischeПосмотреть сообщение
используя пакет requests.

Keep-alive будет? Оо, спасибо
Цитата:
Сообщение от ruslanischeПосмотреть сообщение
Код:
                plants = []
                for object in objects:
                    if object['type'] == u'plant':
                        plants.append(object)

Ну Вы опять на C/php пишете? На питоне короче:
Код:
plants=filter(lambda(x):x['type'] == u'plant',objects)
, либо используя ленивые итераторы. Хотя, конечно, никто не мешает писать "сделай так" (4 строчки) вместо "я хочу" (одной), приемлемо и то, и то, разумеется.

А в game_types я уже писал, assertы вставлены. Что меня разок спасало от посылки ереси на сервер. Опять, если правильно кодить, то они не нужны.

И гляньте потом на game_engine.Game.handle_event ? Очень хочется перенести необходимость изменений оттуда в сами реализации потомков BaseActor.

По просьбе выкладываю свой костыль для rects, который может помочь при посадке деревьев. Подобная практика вроде уже была.
P.S. Спасибо уважаемому vhyrix за идею просто найти строчку с objAnim в compositions

Последний раз редактировалось megabyte0; 11.01.2015 в 14:07. Причина: поправлен код compositions_read
  Ответить с цитированием
Старый 11.01.2015, 01:16   #3820
 Разведчик
Аватар для Shurup240
 
Shurup240 никому не известный тип
Регистрация: 04.02.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от megabyte0Посмотреть сообщение
По просьбе выкладываю свой костыль для rects

Что я сделал не так? Не хочет работать
Screenshot_18.jpg
Может что-то в GameItemReader не так ?
PHP код:
from game_state.game_event import dict2obj
import json
import logging
import os
import time
from connection import Connection
import pprint
from settings import Settings


class MyPrettyPrinter(pprint.PrettyPrinter):
    
def format(selfobjcontextmaxlevelslevel):
        if 
isinstance(objunicode):
            return (
obj.encode('utf8'), TrueFalse)
        return 
pprint.PrettyPrinter.format(selfobj,
                                           
contextmaxlevelslevel)


class 
GameItemReader():
    
def __init__(self):
        
self.content_dict = {}
        
settings Settings()
        
self.__ignore_errors settings.get_ignore_errors()

    
def get(selfitem_id):
        
item_id str(item_id).lstrip('@')
        return 
dict2obj(self.content_dict[item_id])

    
def get_name(selfitem):
        return 
self.get(item.item).name

    def read
(selffilename):
        
with open(filename) as f:
            
self.contents json.load(f)
        for 
content in self.contents:
            if 
'id' not in content:
                
logging.debug(u"there is no id: %s" content)
            else:
                
self.content_dict[content['id']] = content

    def _getModificationTime
(selffilename):
        try:
            return 
time.localtime(os.path.getmtime(filename))
        
except OSError:  # no such file
            
return None
            
    def load
(self,filename,url,get_data,file_descr):
        
last_modified_time self._getModificationTime(filename)
        if 
not self.__ignore_errors:
          
data Connection(url).getChangedDocument(
              
data=get_data,
              
last_client_time=last_modified_time
              
)
        else:
          while 
1:
              try:
                  print 
'Download %s...'%file_descr.lower()
                  
data Connection(url).getChangedDocument(
                      
data=get_data,
                      
last_client_time=last_modified_time
                  
)
                  print 
'%s downloaded!'%(file_descr[0].upper()+file_descr[1:].lower())
                  break
              
except Exception as e:
                  print 
'Refresh download... '#+'['+(' '*60)+']'+('\b'*61),
##                  for i in xrange(60):
##                      time.sleep(20)
##                      print '\b.',
##                  print ''
        
return data
    
    def download
(selffilename):
        
data=self.load(filename,url'http://java.shadowlands.ru/zombievk/items',
                       
get_data={'lang''ru'},file_descr="items")
        
with open(filename'w') as f:
            
f.write(data.encode('utf-8'))

    
def compositions_load(self,filename):
        
data self.load(filenameurl='http://s.shadowlands.ru/zombievk-res/res/compositions.soc',
                         
get_data=None,file_descr='compositions')
        
with open(filename'wb') as f:
            
f.write(data)

    
def compositions_read(self,filename):
        
with open(filename,'rb') as f:
            
data=f.read()
            
data=zlib.decompress(data)
            
beg_end_table=[]
            
in_str '\x20' <= data[0] <= '\x7f'
            
for i,s in enumerate(data):
                
in_str_old in_str
                in_str 
'\x20' <= <= '\x7f'
                
if in_str and not in_str_old:
                    
beg i
                
if in_str_old and not in_str:
                    
end i
                    
if end beg == ord(data[beg-1]) and end beg 1:
                        
beg_end_table.append((data[beg:end],beg,end))
            
rects={s:tuple(sum(ord(data[end+4*i+1+(3-j)])<<(j*8) for j in xrange(4)) for i in xrange(4)) for (s,beg,endin beg_end_table}
            
order=['rectX','rectY','rectW','rectH']
            for 
obj in self.content_dict.values():
                if 
'objAnim' in obj:
                    
obj['rects']=[dict(zip(order,rects[objAnim])) for objAnim in obj['objAnim'] if objAnim in rects]




class 
LogicalItemReader(object):
    
'defines item ids and names that are available to use'

    
def __init__(selfgame_item_reader):
        
self._item_reader game_item_reader

    def get_avail_names
(selfgame_state):
        return 
sorted(self.__get_items_available(game_state).keys())

    
def get_by_name(selfitem_name):
        
items self.__get_name_to_item()
        if 
item_name in items:
            return 
items[item_name]

    
def is_item_available(selfitemgame_state):
        
level game_state.get_state().level
        location_id 
game_state.get_game_loc().get_location_id()
        
location self._item_reader.get(location_id)
        
allowed_here = (not hasattr(location'allowCompositionIds') or \
                        
item.id in location.allowCompositionIds) and \
                       (
not hasattr(item'locations') or \
                        
location_id in item.locations)
        
is_a_type item.type == self._get_item_type()
        
allowed_for_level not hasattr(item'level') or item.level <= level
        
return is_a_type and allowed_here and allowed_for_level

    def __get_name_to_item
(self):
        
items = {}
        
item_ids self._get_all_item_ids()
        for 
item_id in item_ids:
            
item self._item_reader.get(item_id)
            
items[item.name] = item
        
return items

    def __get_items_available
(selfgame_state):
        
items self.__get_name_to_item()
        
items = {kfor kv in items.iteritems()\
                      if 
self.is_item_available(vgame_state)}
        return 
items

    def _get_all_item_ids
(self):
        
raise NotImplementedError  # inherit and implement

    
def _get_item_type(self):
        
raise NotImplementedError  # inherit and implement 
  Ответить с цитированием
Старый 11.01.2015, 01:18   #3821
 Разведчик
Аватар для greyzza
 
greyzza никому не известный тип
Регистрация: 25.02.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от Shurup240Посмотреть сообщение
Что я сделал не так? Не хочет работать
Вложение 60717
Может что-то в GameItemReader не так ?
PHP код:
from game_state.game_event import dict2obj
import json
import logging
import os
import time
from connection import Connection
import pprint
from settings import Settings


class MyPrettyPrinter(pprint.PrettyPrinter):
    
def format(selfobjcontextmaxlevelslevel):
        if 
isinstance(objunicode):
            return (
obj.encode('utf8'), TrueFalse)
        return 
pprint.PrettyPrinter.format(selfobj,
                                           
contextmaxlevelslevel)


class 
GameItemReader():
    
def __init__(self):
        
self.content_dict = {}
        
settings Settings()
        
self.__ignore_errors settings.get_ignore_errors()

    
def get(selfitem_id):
        
item_id str(item_id).lstrip('@')
        return 
dict2obj(self.content_dict[item_id])

    
def get_name(selfitem):
        return 
self.get(item.item).name

    def read
(selffilename):
        
with open(filename) as f:
            
self.contents json.load(f)
        for 
content in self.contents:
            if 
'id' not in content:
                
logging.debug(u"there is no id: %s" content)
            else:
                
self.content_dict[content['id']] = content

    def _getModificationTime
(selffilename):
        try:
            return 
time.localtime(os.path.getmtime(filename))
        
except OSError:  # no such file
            
return None
            
    def load
(self,filename,url,get_data,file_descr):
        
last_modified_time self._getModificationTime(filename)
        if 
not self.__ignore_errors:
          
data Connection(url).getChangedDocument(
              
data=get_data,
              
last_client_time=last_modified_time
              
)
        else:
          while 
1:
              try:
                  print 
'Download %s...'%file_descr.lower()
                  
data Connection(url).getChangedDocument(
                      
data=get_data,
                      
last_client_time=last_modified_time
                  
)
                  print 
'%s downloaded!'%(file_descr[0].upper()+file_descr[1:].lower())
                  break
              
except Exception as e:
                  print 
'Refresh download... '#+'['+(' '*60)+']'+('\b'*61),
##                  for i in xrange(60):
##                      time.sleep(20)
##                      print '\b.',
##                  print ''
        
return data
    
    def download
(selffilename):
        
data=self.load(filename,url'http://java.shadowlands.ru/zombievk/items',
                       
get_data={'lang''ru'},file_descr="items")
        
with open(filename'w') as f:
            
f.write(data.encode('utf-8'))

    
def compositions_load(self,filename):
        
data self.load(filenameurl='http://s.shadowlands.ru/zombievk-res/res/compositions.soc',
                         
get_data=None,file_descr='compositions')
        
with open(filename'wb') as f:
            
f.write(data)

    
def compositions_read(self,filename):
        
with open(filename,'rb') as f:
            
data=f.read()
            
data=zlib.decompress(data)
            
beg_end_table=[]
            
in_str '\x20' <= data[0] <= '\x7f'
            
for i,s in enumerate(data):
                
in_str_old in_str
                in_str 
'\x20' <= <= '\x7f'
                
if in_str and not in_str_old:
                    
beg i
                
if in_str_old and not in_str:
                    
end i
                    
if end beg == ord(data[beg-1]) and end beg 1:
                        
beg_end_table.append((data[beg:end],beg,end))
            
rects={s:tuple(sum(ord(data[end+4*i+1+(3-j)])<<(j*8) for j in xrange(4)) for i in xrange(4)) for (s,beg,endin beg_end_table}
            
order=['rectX','rectY','rectW','rectH']
            for 
obj in self.content_dict.values():
                if 
'objAnim' in obj:
                    
obj['rects']=[dict(zip(order,rects[objAnim])) for objAnim in obj['objAnim'] if objAnim in rects]




class 
LogicalItemReader(object):
    
'defines item ids and names that are available to use'

    
def __init__(selfgame_item_reader):
        
self._item_reader game_item_reader

    def get_avail_names
(selfgame_state):
        return 
sorted(self.__get_items_available(game_state).keys())

    
def get_by_name(selfitem_name):
        
items self.__get_name_to_item()
        if 
item_name in items:
            return 
items[item_name]

    
def is_item_available(selfitemgame_state):
        
level game_state.get_state().level
        location_id 
game_state.get_game_loc().get_location_id()
        
location self._item_reader.get(location_id)
        
allowed_here = (not hasattr(location'allowCompositionIds') or \
                        
item.id in location.allowCompositionIds) and \
                       (
not hasattr(item'locations') or \
                        
location_id in item.locations)
        
is_a_type item.type == self._get_item_type()
        
allowed_for_level not hasattr(item'level') or item.level <= level
        
return is_a_type and allowed_here and allowed_for_level

    def __get_name_to_item
(self):
        
items = {}
        
item_ids self._get_all_item_ids()
        for 
item_id in item_ids:
            
item self._item_reader.get(item_id)
            
items[item.name] = item
        
return items

    def __get_items_available
(selfgame_state):
        
items self.__get_name_to_item()
        
items = {kfor kv in items.iteritems()\
                      if 
self.is_item_available(vgame_state)}
        return 
items

    def _get_all_item_ids
(self):
        
raise NotImplementedError  # inherit and implement

    
def _get_item_type(self):
        
raise NotImplementedError  # inherit and implement 

импортировать zlib не пробовал?
  Ответить с цитированием
Старый 11.01.2015, 01:39   #3822
 Разведчик
Аватар для Shurup240
 
Shurup240 никому не известный тип
Регистрация: 04.02.2013
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от greyzzaПосмотреть сообщение
импортировать zlib не пробовал?

Спасибо=)) Все оказалось на столько просто!

Добавлено

Влючил посадку
Снова ошибка
fiAcGQ4QM04.jpg
Помогите ее решить)

Добавлено


Старая сажалка, судя по всему не подходит?
PHP код:
# coding=utf-8
import logging
from game_actors_and_handlers
.base import BaseActor
from game_state
.game_event import dict2objobj2dict
import copy

logger 
logging.getLogger(__name__)

class 
TreePlant(BaseActor):

    
def perform_action(self):
        
min_money 150000  # оставляем денег    
        # Что где сажаем   u'FT_CHERRY', u'FT_APPLE', u'FT_MANDARINE', u'FT_SKULL'  GROUND
        
plant_tree = {
                
#u'main':u'FT_CHERRY',                # Домашний
                
u'isle_03':u'FT_CHERRY',              # Любви
                
u'isle_02':u'FT_CHERRY',             # Майя
                
u'isle_x':u'FT_CHERRY',           # X
                
u'isle_faith':u'FT_CHERRY',       # Веры
                
u'isle_hope':u'FT_CHERRY',        # Надежды
                
u'isle_scary':u'FT_CHERRY',          # Страшный
                
u'isle_alpha':u'FT_CHERRY',          # Альфа
                
u'isle_omega':u'FT_CHERRY',          # Омега
                
u'isle_sand':u'FT_CHERRY',           # Песочный
                
u'isle_polar':u'FT_CHERRY',          # Полярной ночи
                
u'isle_wild':u'FT_CHERRY',           # Дремучий
                
u'isle_mobile':u'FT_CHERRY',           # Мобильный
                
u'isle_ufo':u'FT_CHERRY',            # НЛО
                
u'isle_dream':u'FT_CHERRY',           # Мечты
                
u'isle_scarecrow':u'FT_CHERRY',      # Пик Админа
                
u'isle_elephant':u'FT_CHERRY',        # Ужасный
                
u'isle_emerald':u'FT_CHERRY',     # Город Призрак
                
u'isle_monster':u'FT_CHERRY',        # Чудовища
                
u'isle_halloween':u'FT_CHERRY',       # Лысая гора
                
u'isle_light':u'FT_CHERRY_WHITE',    # Вишневый 
                #
                ###############     Платные     ###############
                #
                
u'isle_01':u'FT_CHERRY',          # Секретный
                
u'isle_small':u'FT_CHERRY',          # Маленькой ёлочки
                
u'isle_star':u'FT_CHERRY',            # Звездный
                
u'isle_large':u'FT_CHERRY',       # Большой ёлки
                
u'isle_moon':u'FT_CHERRY',        # Лунный
                
u'isle_giant':u'FT_CHERRY',       # Гигантов
                
u'isle_xxl':u'FT_CHERRY',         # Огромной ёлки
                
u'isle_desert':u'FT_CHERRY',       # Необитаемый
                ################ Подземелья ###########
                #u'un_01':u'UN_FERN',       #Подножье
                #u'un_02':u'UN_FERN',      #Пещеры зу
                #u'un_05':u'UN_FERN',       #Нижнее Днище
                #u'un_07':u'UN_FERN',       #Хрустальный
                #u'un_09':u'UN_FERN',       #Склад хакера
                
}

        
current_loc self._get_game_state().get_location_id()
        if 
not current_loc in plant_tree:
            
#logger.info(u"Пропускаем "+current_loc)
            
return 1
        need 
plant_tree [current_loc]
          
        
need self._get_item_reader().get(need)
        
space_crd self.space(current_locneed)
        if 
space_crd == []: return 1
        
        build_cost 
self._get_item_reader().get(need.id).buyCoins
        
        next_id 
max([_i.maxGameObjectId for _i in self._get_game_state().get_state().locationInfos] +[_m.id for _m in self._get_game_location().get_game_objects()]) + 
                
        num 
0
        buy 
= []        
        if 
space_crd:
            for 
k in space_crd:
                if 
len(k) == 5:
                    
int(k[:3])
                    
int(k[3:])
                
elif len(k) == 4:
                    if 
current_loc == u'main' and int(k[:2])<13:
                        
int(k[:3])
                        
int(k[3:])
                    else:                           
                        
int(k[:2])
                        
int(k[2:])
                
elif len(k) == 2:
                    
int(k[:1])
                    
int(k[1:])
                else:
                    
#if k[0] == '8' or k[0] == '9':
                    
if current_loc != u'main' and (k[0] == '8' or k[0] == '9'): 
                        
int(k[:1])
                        
int(k[1:])
                    else:
                        
int(k[:2])
                        
int(k[2:])
                    
                if 
self._get_game_state().get_state().gameMoney min_money:
                    
num += 1                
                    buy_event 
= {"x":x,"y":y,"action":"buy","itemId":need.id,"type":"item","objId":next_id}                    
                    
buy.append(buy_event)
                    
#self._get_events_sender().send_game_events([buy])
                    
self._get_game_state().get_state().gameMoney -= build_cost
                    
#logger.info(u''+str(num)+u" Сажаем "+need.id+u" на X: "+str(x)+u", Y: "+str(y))
                    
self._get_game_state().get_state().gameObjects.append(dict2obj({u'rotate'u'0L'u'fruitingCount'u'25L'u'fertilized'Falseu'item'u'@'+need.idu'jobFinishTime'u'79200000'u'jobStartTime'u'0'u'y'str(y), u'x'str(x), u'type'u'fruitTree'u'id'next_id}))
                    
next_id += 1                     
        
if num 0
            
self._get_events_sender().send_game_events(buy)
            
logger.info(u'Посадили %d %s' %(num,need.id))                     
                    


    
def space(selflocationneed):
        for 
rect in list(need.rects):
            if 
rect.rectW and rect.rectH 0:
                
need.int(rect.rectW)
                
need.int(rect.rectH)
                
        
crdbad_crd self.get_coords(location)
        
obj_cache = {}
        
space_crd = []
            
        
"""
        file = open('space.txt', 'a')
        logger.info(u'Объект crd:')
        logger.info(str(obj2dict(crd)).encode('utf-8'))
        logger.info('  ')
        file.write(u'Объект crd: \n'.encode('utf-8'))
        file.write(str(obj2dict(crd))+'\n'.encode('utf-8'))
        file.write(u' \n')
        file.write(u'Начальные bad_crd: \n'.encode('utf-8'))
        file.write(str(obj2dict(bad_crd))+'\n'.encode('utf-8'))
        file.write(u' \n')        
        """

        
#перебор объектов на острове
        
objects self._get_game_location().get_game_objects()
        for 
object in list(objects):
            if 
not hasattr(object'x') or not hasattr(object'item'):
                continue
            
object.x
            y 
object.y

            
if not object.item in obj_cache:
                
object_item self._get_item_reader().get(object.item)
                
obj_cache[object.item] = object_item
            
else:
                
object_item obj_cache[object.item]
                
            
sms u'Занято '+object_item.name+str(x)+' '+str(y)+u' размеры: '+str(object_item.rects)+'\n'
            
#file.write(sms.encode('utf-8'))

            
for rect in list(object_item.rects):
                
                
rect.rectH
                
if rect.rectX 0:
                    
int(x) + rect.rectX
                    w 
rect.rectW + (rect.rectX*-1)
                else:
                    
rect.rectW rect.rectX
                
if rect.rectY 0:
                    
int(y) + rect.rectY
                    h 
rect.rectH + (rect.rectY*-1)
                else:
                    
rect.rectH rect.rectY
                                     
                
for ix in range(w):
                    for 
iy in range(h):
                        
str(int(x) + ix)+''+str(int(y) + iy)
                        if 
not k in bad_crd:
                            
bad_crd.append(k)
                            
"""
                            logger.info(u'Добавляем занятые координаты '+str(x)+' '+str(ix)+' '+str(y)+' '+str(iy)+' : '+k)
                            sms = u'Добавляем занятые координаты '+str(x)+' '+str(ix)+' '+str(y)+' '+str(iy)+' : '+k+'\n'
                            file.write(sms.encode('utf-8'))
                            """
        """                    
        #logger.info(str(obj2dict(bad_crd)).encode('utf-8'))
        file.write(u'Полные bad_crd: \n'.encode('utf-8'))
        file.write(str(obj2dict(bad_crd))+'\n'.encode('utf-8'))
        file.write(u' \n')
        """

        
crd['x2'] - crd['x1'] - need.2
        H 
crd['y2'] - crd['y1'] - need.2

        
for iw in range(W):
            
iw += crd['x1']
            for 
ih in range(H):
                
ih += crd['y1']
                if (
str(iw)+''+str(ih)) in bad_crd#занято
                    
continue
                
good 1
                add 
= []
                for 
ix in range(need.w):
                    for 
iy in range(need.h):
                        
str(iw+ix)+''+str(ih+iy)
                        if 
k in bad_crd#занято
                            
good 0
                            
break
                        else:
                            
add.append(k)
                    if 
good == 0:
                        break
                if 
good == 1:
                    
#logger.info(u'Свободные '+need.id+u' на X: '+str(iw)+u', Y: '+str(ih))
                    
space_crd.append(str(iw)+''+str(ih))
                    
bad_crd.extend(add)

        
"""
        logger.info('Свободные координаты установки:')
        logger.info(str(obj2dict(space_crd))+'\n'.encode('utf-8'))
        logger.info('  ')
        file.write(u'Свободные координаты установки: \n'.encode('utf-8'))
        file.write(str(obj2dict(space_crd))+'\n'.encode('utf-8'))
        file.write(u' \n')
        """
        
return space_crd
        
                       
    def get_coords
(selfostrov):
        
# Map isle_01   Веры, Мечты
        
if(ostrov in ['isle_dream''isle_faith']):
            
map = [ str(i)+''+str(j) for i in range(14,16) for j in range(14,16)]
            
add = [ str(i)+''+str(j) for i in range(12,14) for j in range(14,64)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(12,18) for j in range(74,76)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(40,82) for j in range(74,76)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(82,84) for j in range(72,76)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(82,84) for j in range(14,22)]
            
map.extend(add)                                     
            return {
'x1':12'x2':83'y1':14'y2':75}, map
         
        
# Map world   Домашний
        
if(ostrov in ['main']):
            
map = [ str(i)+''+str(j) for i in range(48,62) for j in range(12,48)]
            
add = [ str(i)+''+str(j) for i in range(54,60) for j in range(48,100)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(62,112) for j in range(30,48)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(14,62) for j in range(0,12)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(112,128) for j in range(30,112)]
            
map.extend(add)             
            return {
'x1':14'x2':127'y1':0'y2':99}, map                       

        
# Map isle_02   Альфа, Омега, Пик Админа, Ужасный, Чудовища, Майя, звёздный, гигантов 
        
if(ostrov in ['isle_alpha''isle_omega''isle_scarecrow''isle_elephant''isle_monster''isle_02''isle_star''isle_giant']):
            
map = [ str(i)+''+str(j) for i in range(10,12) for j in range(10,12)]
            
add = [ str(i)+''+str(j) for i in range(10,12) for j in range(42,44)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(42,44) for j in range(42,44)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(42,44) for j in range(10,12)]
            
map.extend(add)            
            return {
'x1':10'x2':43'y1':10'y2':43}, map                         
                        
        
# Map isle_03   Любви, X, Песочный, Необитаемый 
        
if(ostrov in ['isle_03''isle_x''isle_sand''isle_desert']):
            
map = []
            return {
'x1':16'x2':65'y1':14'y2':71}, map                                 
        
        
# Map isle_04   Надежды, Страшный
        
if(ostrov in ['isle_hope''isle_scary']):
            
map = [ str(i)+''+str(j) for i in range(12,14) for j in range(12,14)]
            
add = [ str(i)+''+str(j) for i in range(46,50) for j in range(12,14)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(48,50) for j in range(34,42)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(48,50) for j in range(72,74)]
            
map.extend(add)   
            
add = [ str(i)+''+str(j) for i in range(12,20) for j in range(72,74)]
            
map.extend(add)   
            return {
'x1':12'x2':49'y1':12'y2':73}, map 
             
        
# Map isle_05   Город-призрак, Секретный 
        
if(ostrov in ['isle_emerald''isle_01']):
            
map = [ str(i)+''+str(j) for i in range(16,20) for j in range(12,16)]
            
add = [ str(i)+''+str(j) for i in range(70,72) for j in range(30,38)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(70,72) for j in range(70,72)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(16,18) for j in range(64,72)]
            
map.extend(add)   
            return {
'x1':16'x2':71'y1':12'y2':71}, map                         

        
# Map isle_snow1   Дремучий, Мобильный, Маленькой ёлочки, Огромной ёлки
        
if(ostrov in ['isle_wild''isle_mobile''isle_small''isle_xxl']):
            
map = [ str(i)+''+str(j) for i in range(8,12) for j in range(6,8)]
            
add = [ str(i)+''+str(j) for i in range(8,10) for j in range(8,10)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(42,46) for j in range(6,8)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(44,46) for j in range(8,10)]
            
map.extend(add)   
            
add = [ str(i)+''+str(j) for i in range(44,46) for j in range(42,46)]
            
map.extend(add)   
            
add = [ str(i)+''+str(j) for i in range(42,44) for j in range(44,46)]
            
map.extend(add)   
            
add = [ str(i)+''+str(j) for i in range(8,10) for j in range(44,46)]
            
map.extend(add)   
            return {
'x1':8'x2':45'y1':6'y2':45}, map 
               
        
# Map isle_snow2   Полярной ночи, НЛО, Лысая гора, Большой ёлки, Лунный, Вишнёвый
        
if(ostrov in ['isle_polar''isle_ufo''isle_halloween''isle_large''isle_moon''isle_light']):
            
map = [ str(i)+''+str(j) for i in range(8,12) for j in range(6,10)]
            
add = [ str(i)+''+str(j) for i in range(8,10) for j in range(44,46)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(42,46) for j in range(44,46)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(44,46) for j in range(42,44)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(42,46) for j in range(6,8)]
            
map.extend(add)
            
add = [ str(i)+''+str(j) for i in range(44,46) for j in range(8,10)]
            
map.extend(add)             
            return {
'x1':8'x2':45'y1':6'y2':45}, map
            
                       
# Map underground_02   Склад Хакера , Подножье, Нижнее Днище, Хрустальный
        
if(ostrov in ['un_01''un_02''un_05''un_07''un_09']): 
            
map = []          
            return {
'x1':14'x2':53'y1':16'y2':73}, map 

Последний раз редактировалось Shurup240; 11.01.2015 в 02:38.
  Ответить с цитированием
Старый 11.01.2015, 02:42   #3823
 Разведчик
Аватар для megabyte0
 
megabyte0 никому не известный тип
Регистрация: 29.07.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 8 раз(а) в 5 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Скорее несогласование того, что я понимаю под rects и того, что понимают разрабы. У меня с моим использованием rects[obj.rotate] всё работает на ура. А здесь как-то хитрее сделано, for rect in rects и т д.

Кто-нибудь подскажет, как должно быть? Ну или хотя бы на чём вылетает, на каком item
Нужно, видимо, чтобы 31й бит считался знаковым.
Код:
rects={s:tuple((-(2**32) if ord(data[end+4*i+1])&0x80 else 0)+sum(ord(data[end+4*i+1+(3-j)])<<(j*8) for j in xrange(4)) for i in xrange(4)) for (s,beg,end) in beg_end_table}
вместо аналогичной строки выше, хотя есть стандратные средства.

Последний раз редактировалось megabyte0; 11.01.2015 в 04:35.
  Ответить с цитированием
Старый 11.01.2015, 11:58   #3824
 Разведчик
Аватар для GirlKris
 
GirlKris никому не известный тип
Регистрация: 17.02.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 3 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от Shurup240Посмотреть сообщение
Спасибо=)) Влючил посадку
Снова ошибка

Ошибка говорит, что у range() переполнение. Нельзя генерировать список длиной более (2**32)/2(да и миллиард не получится). Нужно искать причину, почему h имеет такое большое значение.
  Ответить с цитированием
Старый 11.01.2015, 13:54   #3825
 Разведчик
Аватар для megabyte0
 
megabyte0 никому не известный тип
Регистрация: 29.07.2014
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 8 раз(а) в 5 сообщениях
 
По умолчанию Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]

Цитата:
Сообщение от GirlKrisПосмотреть сообщение
Нужно искать причину, почему h имеет такое большое значение.

Найдена причина -- число беззнаковым считалось при обработке. Поправил. Вообще можно заменить на struct.unpack_from(">iiii" , да и строчка покороче и более читаемой будет

Последний раз редактировалось megabyte0; 11.01.2015 в 14:24.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Программа] Zombot (Клиент для игры Зомби ферма) AnonProger Баги игр ВКонтакте 189 26.08.2014 15:50
[Статья] Небольшие секреты игры зомби ферма haussuper Баги игр ВКонтакте 11 26.01.2013 11:54
[Информация] Зомби Ферма dekirillov Баги игр ВКонтакте 40 22.10.2011 18:25

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 07:36.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net