![](/zhyk/misc/sp.gif) |
Zombot (Клиент для игры Зомби ферма) [Обсуждение] - Свободное обсуждение - Ваши идеи, вопросы и ответы на тему браузерных игр и социальных сетей |
10.03.2014, 23:18
|
#1291
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 11.01.2014
![](/zhyk/misc/messages.png) Сообщений: 0
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
что за прикол с посадкой деревьев??)))
розы/лилии уже не моде?
просветите)
|
|
|
11.03.2014, 00:08
|
#1292
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 19.07.2012
![](/zhyk/misc/messages.png) Сообщений: 13
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 1
Поблагодарили 4 раз(а) в 4 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
11.03.2014, 09:22
|
#1293
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 03.12.2010
![](/zhyk/misc/messages.png) Сообщений: 22
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
11.03.2014, 09:23
|
#1294
|
|
|
|
Пехотинец
|
![](/zhyk/misc/regist.png) Регистрация: 01.08.2012
![](/zhyk/misc/messages.png) Сообщений: 95
![](/zhyk/misc/reput.png) Популярность: 255
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
![](/zhyk/misc/quotes/quot-top-left.gif) |
Цитата: |
![](/zhyk/misc/quotes/quot-top-right.gif) |
|
|
|
|
|
|
|
|
что за прикол с посадкой деревьев??)))
розы/лилии уже не моде?
просветите)
|
|
![](/zhyk/misc/quotes/quot-bot-left.gif) |
|
![](/zhyk/misc/quotes/quot-bot-right.gif) |
|
Просто интересно.
+ в фоне подсаживает взорвавшиеся, с ботом о них уже забываешь.
Параллельно решается задача поиска свободного места для выставления. Чтобы не забивать координаты вручную.
|
|
|
11.03.2014, 10:07
|
#1295
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 03.12.2010
![](/zhyk/misc/messages.png) Сообщений: 22
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
GirlKris, спасибо! С большими деревьями тоже всё ок - пустых краёв не остаётся!
|
|
|
11.03.2014, 10:15
|
#1296
|
|
|
|
Пехотинец
|
![](/zhyk/misc/regist.png) Регистрация: 01.08.2012
![](/zhyk/misc/messages.png) Сообщений: 95
![](/zhyk/misc/reput.png) Популярность: 255
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
11.03.2014, 10:49
|
#1297
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 20.04.2012
![](/zhyk/misc/messages.png) Сообщений: 4
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 5 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
![](/zhyk/misc/quotes/quot-top-left.gif) |
Цитата: |
![](/zhyk/misc/quotes/quot-top-right.gif) |
|
|
|
|
|
|
|
|
PHP код:
next_id = 0
for object in self._get_game_location().get_game_objects():
if object.id > next_id: next_id = object.id
next_id += 1
И что? Опять берете максимальный id объектов с текущего острова, а не всех объектов игрока. В случае дубляжа имеем геморрой и головную боль. Я же давал нормальный код получения максимального id из ВСЕХ объектов. Да, немногим дольше определяет, зато исключает проблемы. Учишь, учишь - одни двойки.
Добавлено через 30 минут
Вместо этого куска кода ставьте такой вот красивый строчка
PHP код:
next_id = max([_i.maxGameObjectId for _i in self._get_game_state().get_state().locationInfos]) + 1
и
|
|
![](/zhyk/misc/quotes/quot-bot-left.gif) |
|
![](/zhyk/misc/quotes/quot-bot-right.gif) |
|
Если нужен уникальный ID объекта по всем островам, то код предложенный Темным Драконом будет неверным. Так как в locationInfos нет текущего острова, с которого грузится бот. Там лишь легкая статистика по всем другим островам, кроме текущего. И чтобы получить уникальный ID нужно совмещать код по поиску максимального ID на острове с тем что предложил Темный Дракон )
Всем Спасибо )))))
|
|
|
11.03.2014, 11:01
|
#1298
|
|
|
|
Пехотинец
|
![](/zhyk/misc/regist.png) Регистрация: 01.08.2012
![](/zhyk/misc/messages.png) Сообщений: 95
![](/zhyk/misc/reput.png) Популярность: 255
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
![](/zhyk/misc/quotes/quot-top-left.gif) |
Цитата: |
![](/zhyk/misc/quotes/quot-top-right.gif) |
|
|
|
|
|
|
|
|
Если нужен уникальный ID объекта по всем островам, то код предложенный Темным Драконом будет неверным. Так как в locationInfos нет текущего острова, с которого грузится бот. Там лишь легкая статистика по всем другим островам, кроме текущего. И чтобы получить уникальный ID нужно совмещать код по поиску максимального ID на острове с тем что предложил Темный Дракон )
Всем Спасибо )))))
|
|
![](/zhyk/misc/quotes/quot-bot-left.gif) |
|
![](/zhyk/misc/quotes/quot-bot-right.gif) |
|
Вот так будет правильно? Или есть ещё подводные камни?
PHP код:
next_id = max([_i.maxGameObjectId for _i in self._get_game_state().get_state().locationInfos]) + 1
for object in self._get_game_location().get_game_objects():
if object.id > next_id: next_id = object.id
next_id += 1
|
|
|
11.03.2014, 11:04
|
#1299
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 30.08.2013
![](/zhyk/misc/messages.png) Сообщений: 0
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 0
Поблагодарили 26 раз(а) в 21 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
![](/zhyk/misc/quotes/quot-top-left.gif) |
Цитата: |
![](/zhyk/misc/quotes/quot-top-right.gif) |
|
|
|
|
|
|
|
|
Если нужен уникальный ID объекта по всем островам, то код предложенный Темным Драконом будет неверным. Так как в locationInfos нет текущего острова, с которого грузится бот. Там лишь легкая статистика по всем другим островам, кроме текущего. И чтобы получить уникальный ID нужно совмещать код по поиску максимального ID на острове с тем что предложил Темный Дракон )
Всем Спасибо )))))
|
|
![](/zhyk/misc/quotes/quot-bot-left.gif) |
|
![](/zhyk/misc/quotes/quot-bot-right.gif) |
|
Спасибо за внимательность и замечание. Ошибочно считал, что тут стата по всем островам идет. Ну коли такая петрушка, тогда исправляем код.
PHP код:
objId = 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()]) + 1
|
|
|
11.03.2014, 11:16
|
#1300
|
|
|
|
Пехотинец
|
![](/zhyk/misc/regist.png) Регистрация: 01.08.2012
![](/zhyk/misc/messages.png) Сообщений: 95
![](/zhyk/misc/reput.png) Популярность: 255
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
В этом варианте он точно не сложит два id?
|
|
|
11.03.2014, 11:21
|
#1301
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 30.08.2013
![](/zhyk/misc/messages.png) Сообщений: 0
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 0
Поблагодарили 26 раз(а) в 21 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
11.03.2014, 11:51
|
#1302
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 03.12.2010
![](/zhyk/misc/messages.png) Сообщений: 22
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 3 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
![](/zhyk/misc/quotes/quot-top-left.gif) |
Цитата: |
![](/zhyk/misc/quotes/quot-top-right.gif) |
|
|
|
|
|
|
|
|
Немного позже я выкладывал правленый файл.
|
|
![](/zhyk/misc/quotes/quot-bot-left.gif) |
|
![](/zhyk/misc/quotes/quot-bot-right.gif) |
|
В нём тоже:
Код:
for _i in range(max_need_clevhell-clevhell):
self.create_items(obj_id_2, "3")
3 - это хеллии
Вот мой исправленный и дополненный краской, клеем и трансформаторами вариант:
Код:
# coding=utf-8
import logging
from math import ceil
from game_state.game_types import GameBuilding
from game_actors_and_handlers.base import BaseActor
from game_state.game_event import dict2obj, obj2dict
logger = logging.getLogger(__name__)
class GameBrains(BaseActor):
#функция создания чего-либо
def create_items (self, _obj_id,_item_id):
create_items_event = {"type": "item",
"action": "craft",
"objId": _obj_id,
"itemId":_item_id}
self._get_events_sender().send_game_events([create_items_event])
def perform_action(self):
_loc = self._get_game_state().get_game_loc().get_location_id()
if not _loc == u'main': # на каком острове всё находится
return 1
brains_const = 15 # Указываем нужное постоянное количество без имеющихся у игрока бесплатных
want_helly = 100 # Сколько хотим свободных хеллий после всех операций
want_kley = 100 # Клея
want_trans = 100 # Трансформаторов
want_yekraska= 100# Краски жёлтой
min_money = 1000000 # оставляем денег
max_need_helly = max_need_garliclily = 2 * brains_const + want_helly + want_kley*2 + want_trans + want_yekraska # Максимально необходимое кол-во хеллии и чесночных лилий
max_need_love = 10 * brains_const # Максимально необходимое кол-во любви
max_need_clevhell = 4 * max_need_garliclily # Максимально необходимое кол-во клеверхелла
max_need_clever = int(ceil(max_need_clevhell/20)*20) # Максимально необходимое кол-во клевера
max_need_squashhell = int(ceil(max_need_clevhell/10)*10) # Максимально необходимое кол-во тыквахелла
max_need_garlic = max_need_lily = int(ceil(max_need_garliclily/40)*40) # Максимально необходимое кол-во лилий и чеснока
max_need_trans = want_kley + want_trans
max_need_yekraska = want_kley + want_yekraska
max_need_kley = want_kley
obj_id_ostankino = obj_id_korabl = obj_id_elka = obj_id_pirmida = obj_id_bashnya = '' # Переменные для ID останкино и корабля
helly = love = clevhell = garliclily = clever = squashhell = garlic = lily = kley = trans = yekraska = steklo = 0
#получаем id останкино и летучего корабля
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)
if building_item.name == u'Останкино за монеты': # или if building_item.id == 'B_OSTANKINO'
obj_id_ostankino = building.id
if building_item.name == u'Летучий корабль': # или if building_item.id == 'D_SHIP'
obj_id_korabl = building.id
if building_item.id == 'B_NYTREE':
obj_id_elka = building.id
if building_item.id == 'B_PYRAMID':
obj_id_pirmida = building.id
if building_item.id == 'B_PISA':
obj_id_bashnya = building.id
st_items = self._get_game_state().get_state().storageItems
#with open('storage2.txt', 'w') as f:
# f.write(str(obj2dict(st_items)).encode('utf-8'))
for _item in list(st_items):
if hasattr(_item, 'item'):
#it_name = self._get_item_reader().get(_item.item)
#print 'it ', _item.item, ' name ', it_name.name
# Определяем на складе количество:
if _item.item == ('@R_12'): helly = _item.count # Хеллия
if _item.item == ('@CR_31'): love = _item.count # Любовь
if _item.item == ('@R_02'): clevhell = _item.count # Клеверхелл
if _item.item == ('@R_09'): garliclily = _item.count # Чесночная лилия
if _item.item == ('@S_14'): squashhell = _item.count # Тыквахелл
if _item.item == ('@S_03'): clever = _item.count # Клевер
if _item.item == ('@S_15'): lily = _item.count # Лилия
if _item.item == ('@S_08'): garlic = _item.count # Чеснок
if _item.item == ('@CR_25'): steklo = _item.count # Стекло
if _item.item == ('@CR_17'): kley = _item.count # Супер-клей
if _item.item == ('@CR_23'): trans = _item.count # Трансформатор
if _item.item == ('@CR_10'): yekraska = _item.count # Жёлтая краска
if helly < max_need_helly:
if(obj_id_korabl == ''):
logger.info(u'Не хватает хеллий, сварите еще %d шт.',max_need_helly-helly)
return
else:
if clevhell < max_need_clevhell:
if clever < max_need_clever:
logger.info(u'Не хватает клевера, посадите еще %d шт.',max_need_clever-clever)
return
elif squashhell < max_need_squashhell:
logger.info(u'Не хватает тыквахелла, посадите еще %d шт.',max_need_squashhell-squashhell)
return
for i in range(int(ceil((max_need_clevhell-clevhell)/10))):
self.create_items(obj_id_korabl, "1")
if i > 0:
logger.info(u'Создали %d клеверхелла', i)
if garliclily < max_need_garliclily:
if garlic < max_need_garlic:
logger.info(u'Не хватает чеснока, посадите еще %d шт.',max_need_garlic-garlic)
return
elif lily < max_need_lily:
logger.info(u'Не хватает лилий, посадите еще %d шт.',max_need_lily-lily)
return
else:
for i in range(int(ceil((max_need_garliclily-garliclily)/10))):
f.create_items(obj_id_korabl, "2")
if i > 0:
logger.info(u'Создали %d чесночных лилий', i)
for i in range(max_need_helly - helly):
self.create_items(obj_id_korabl, "3")
if i > 0:
logger.info(u'Создали %d хеллий', i)
if yekraska < max_need_yekraska:
if(obj_id_pirmida != ''):
if (self._get_game_state().get_state().gameMoney - ((max_need_yekraska - yekraska) * 1000)) < min_money:
print u'Не хватает денег'
return
else:
for i in range(max_need_yekraska - yekraska):
self.create_items(obj_id_pirmida, "1")
if i > 0:
logger.info(u'Создали %d жёлтой краски', i)
if trans < max_need_trans:
if(obj_id_bashnya != ''):
if (max_need_trans - trans) > steklo:
print u'Не хватает стекла'
return
else:
for i in range(max_need_trans - trans):
self.create_items(obj_id_bashnya, "1")
if i > 0:
logger.info(u'Создали %d трансформаторов', i)
if kley < max_need_kley:
if(obj_id_elka != ''):
if 0:
return
else:
for i in range(max_need_kley - kley):
self.create_items(obj_id_elka, "1")
if i > 0:
logger.info(u'Создали %d клея', i)
if love < max_need_love :
logger.info(u'Не хватает любви для создания мозгов, накопайте еще %d шт.',max_need_love-love)
return
brains_buy = self._get_game_state().get_state().buyedBrains # Кол-во активаций мозгов (не самих мозгов)
brains_curr = 0 # Счетчик кол-ва текущих мозгов
x=0 # Счетчик кол-ва мозгов с истечением времени < 5 мин.
if len(brains_buy)<>0:
for buyed_brain in brains_buy:
hf = buyed_brain.count
brains_curr += hf
m = ((int(buyed_brain.endTime)/1000)/60)-((((int(buyed_brain.endTime)/1000)/60)/60)*60)
h = ((int(buyed_brain.endTime)/1000)/60)/60
if h==0 and m<=6:
x+=hf
# Разница между необходимыми и текущими мозгами.
brains_lacks = 0
if brains_curr < brains_const:
brains_lacks = brains_const - brains_curr
brains_lx = x + brains_lacks
# Определяем предположительное необходимое ко-во мозгов.
brains_need = brains_curr - brains_lx
# Если меньше нужного постоянного, то создаем недостающие.
if brains_need < brains_const:
_i=0
for _i in range(brains_lx):
self.create_items(obj_id_ostankino, "1")
brains_buy.append(dict2obj({u'count': 1L, u'endTime': u'86400000'})) #Добавляем фейк в список купленных мозгов для увеличения счетчика
logger.info (u'Создано мозгов - %d шт.', brains_lx)
Последний раз редактировалось lokanaft; 11.03.2014 в 11:56.
|
|
|
11.03.2014, 12:03
|
#1303
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 20.04.2012
![](/zhyk/misc/messages.png) Сообщений: 4
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 5 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
Да, такой код будет работать верно. Но... все же, если вы ставите ботом объекты на локацию, которые не собираетесь переносить на другие острова(например, деревья), то вполне достаточно, чтобы ID устанавливаемого объекта был уникальным в пределах локации. И не вижу смысла искать уникальный ID по всей ферме!
|
|
|
11.03.2014, 12:15
|
#1304
|
|
|
|
Разведчик
|
![](/zhyk/misc/regist.png) Регистрация: 30.08.2013
![](/zhyk/misc/messages.png) Сообщений: 0
![](/zhyk/misc/reput.png) Популярность: 10
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 0
Поблагодарили 26 раз(а) в 21 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
![](/zhyk/misc/quotes/quot-top-left.gif) |
Цитата: |
![](/zhyk/misc/quotes/quot-top-right.gif) |
|
|
|
|
|
|
|
|
Да, такой код будет работать верно. Но... все же, если вы ставите ботом объекты на локацию, которые не собираетесь переносить на другие острова(например, деревья), то вполне достаточно, чтобы ID устанавливаемого объекта был уникальным в пределах локации. И не вижу смысла искать уникальный ID по всей ферме!
|
|
![](/zhyk/misc/quotes/quot-bot-left.gif) |
|
![](/zhyk/misc/quotes/quot-bot-right.gif) |
|
Я в своих экспериментах дважды сталкивался с проблемой неуникальности id, поэтому для себя решил делать так. И потом, с уникальностью айди есть порядок, нету вероятности огрести проблем, если будут внесены какие-либо кардинальные изменения со стороны разработчиков; <режим паранойи ON> хрен докажешь, что садилось ботом <режим паранойи OFF>
При желании можно привести еще доводов, но основное изложил.
|
|
|
Пользователь сказал cпасибо:
|
|
11.03.2014, 12:16
|
#1305
|
|
|
|
Пехотинец
|
![](/zhyk/misc/regist.png) Регистрация: 01.08.2012
![](/zhyk/misc/messages.png) Сообщений: 95
![](/zhyk/misc/reput.png) Популярность: 255
![](/zhyk/misc/thnx.png) Сказал(а) спасибо: 28
Поблагодарили 54 раз(а) в 38 сообщениях
|
Re: Zombot (Клиент для игры Зомби ферма) [Обсуждение]
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 04:06.
|
![](/zhyk/misc/sp.gif) |