It is currently 18 Apr 2024, 13:06

All times are UTC + 2 hours [ DST ]




Post new topic Reply to topic  [ 5 posts ] 
Author Message
PostPosted: 01 Jan 2012, 16:39 
Offline
Начинающий игрок

Joined: 23 Dec 2011, 14:02
Posts: 43
Скрипт под стелс. Весь не тестировал. Для запуска нужен установленный интерпретатор питона (3.2 х86 тут вся инфа). Скрипт должен быть в файле с расширение .py.

Скрипт готов для использования в Yew. Единственное, что надо настроить - прописать id контейнеров для всякого хлама.
ResourcesContainer = 0x4004AACB; ItemsContainer = 0x4004AAC8; ToolsContainer = 0x4004AACE

Для работы в другом месте - надо настраивать ItemAnything, ItemVendor. Если в другом месте есть шахта, лучше убрать из скрипта вот эти строки
Code:
  #Поиск кочек в лесу.
  for i in [240, 241, 242, 243]:
    for t, x, y, z in GetLandTilesArray(GetX(Self()) - 75, GetY(Self()) - 75, GetX(Self()) + 75, GetY(Self()) + 75, WorldNum(), i):
      TilesCache.append((t, x, y, z, 'Ingots'))

и запускать стоя в шахте.

для первого старта без глюков, нужно закинуть в пак персонажа парочку тинкер тулс, две-три кирки и 2-3 топора. В дальнейшем инструменты чар будет делать сам.
ColorCanUse = ('Iron', 'Copper', 'Bronze', 'Standart', 'Willow', 'Cedar') - все цвета в этом списке будут использоваться для крафта. Остальное будет накапливаться в банке.

Скрипт качает крафта медленно и навар с продаж продукции минимален.
Code:
# -*- coding: cp1251 -*-
from datetime import datetime as dt
import time
import random
#Id контейнеров для ресурсов, предметов, которые не удалось продать, инструментов.
ResourcesContainer = 0x4004AACB; ItemsContainer = 0x4004AAC8; ToolsContainer = 0x4004AACE
#Цвета, из которых можно крафтить. Задержка на перемещение предметов.
ColorCanUse = ('Iron', 'Copper', 'Bronze', 'Standart', 'Willow', 'Cedar'); MoveDelay = 1100
#Id и координаты форжи, банкира, и гейт оф лайф.
ItemAnything = {'Forge': {'Serial': 0x40005E0C, 'X': 522, 'Y': 994}, 'Bank': {'Serial': 0x00086286, 'X': 549, 'Y': 991}, 'Gate of Life': {'Serial': 0x40005E1B, 'X': 535, 'Y': 991}}   
#Скилл и его значение, требуемое для крафта из какого-либо цвета. Название цвета, его значение в hex'e, и материал, к которому относится этот цвет. Кнопки в гампе крафта.
#Необходимое кол-во ресурсов, требуемое для крафта одной штуки какого-либо предмета. Контейнер, куда предмет складывается. Имя инструмента, который используется при крафте предмета.
#Тип предмета. Вендор, которому продавать предмет, его координаты, имя и id. Материал, который указывается таргетом при крафте предмета. Какое количество держать в банке. Скилл и предмет на выходе.
#Типы руды. Нужна ли форжа для крафта.
ItemColorSkill = {'Iron': {'Need': 20, 'Skill': ['Blacksmithing']}, 'Copper': {'Need': 50, 'Skill': ['Blacksmithing']}, 'Bronze': {'Need': 70, 'Skill': ['Blacksmithing']}, 'Steel': {'Need': 90, 'Skill': ['Blacksmithing']}, 'Black Steel': {'Need': 110, 'Skill': ['Blacksmithing']}, 'Standart': {'Need': 20, 'Skill': ['Bowcraft', 'Carpentry']}, 'Willow': {'Need': 50, 'Skill': ['Bowcraft', 'Carpentry']}, 'Cedar': {'Need': 70, 'Skill': ['Bowcraft', 'Carpentry']}, 'Walnut': {'Need': 90, 'Skill': ['Bowcraft', 'Carpentry']}, 'Oak': {'Need': 110, 'Skill': ['Bowcraft', 'Carpentry']}}
ItemColor = {'Iron': {'Color': 0x0000, 'Material': 'Ingots'}, 'Copper': {'Color': 0x0AB2, 'Material': 'Ingots'}, 'Bronze': {'Color': 0x0488, 'Material': 'Ingots'}, 'Steel': {'Color': 0x042C, 'Material': 'Ingots'}, 'Black Steel': {'Color': 0x0AA3, 'Material': 'Ingots'}, 'Standart': {'Color': 0x0000, 'Material': 'Logs'}, 'Willow': {'Color': 0x08F1, 'Material': 'Logs'}, 'Cedar': {'Color': 0x08A5, 'Material': 'Logs'}, 'Walnut': {'Color': 0x02F4, 'Material': 'Logs'}, 'Oak': {'Color': 0x0000, 'Material': 'Logs'}, 'any': {'Color': -1}}
ItemGumpButtons = {'Tinker Tools': {'Category': 1, 'Choice': 601}, 'Hatchet': {'Category': 1, 'Choice': 607}, 'Pickaxe': {'Category': 1, 'Choice': 608}, 'Saw': {'Category': 1, 'Choice': 605}, 'Smith Hammer': {'Category': 1, 'Choice': 602}, 'Bowcraft Dagger': {'Category': 1, 'Choice': 603}, 'Viking Sword': {'Category': 5, 'Choice': 603}, 'Club': {'Category': 1, 'Choice': 601}, 'Bow': {'Category': 3, 'Choice': 601}}
ItemPrice = {'Tinker Tools': {'Ingots': 25, 'Logs': 5}, 'Hatchet': {'Ingots': 20, 'Logs': 10}, 'Pickaxe': {'Ingots': 20, 'Logs': 10}, 'Saw': {'Ingots': 20, 'Logs': 0}, 'Smith Hammer': {'Ingots': 20, 'Logs': 0}, 'Bowcraft Dagger': {'Ingots': 12, 'Logs': 0}, 'Viking Sword': {'Ingots': 30, 'Logs': 0}, 'Club':  {'Ingots': 0, 'Logs': 20}, 'Bow':  {'Ingots': 0, 'Logs': 20}}
ItemContainer = {'Tinker Tools': ToolsContainer, 'Hatchet': ToolsContainer, 'Pickaxe': ToolsContainer, 'Logs': ResourcesContainer, 'Ingots': ResourcesContainer, 'Saw': ToolsContainer, 'Smith Hammer': ToolsContainer,'Bowcraft Dagger': ToolsContainer, 'Viking Sword': ItemsContainer, 'Club': ItemsContainer, 'Bow': ItemsContainer, 'Gold': ObjAtLayer(BankLayer())}
ItemTool = {'Tinker Tools': 'Tinker Tools', 'Hatchet': 'Tinker Tools', 'Pickaxe': 'Tinker Tools', 'Logs': 'Hatchet', 'Ingots': 'Pickaxe', 'Saw': 'Tinker Tools', 'Smith Hammer': 'Tinker Tools', 'Bowcraft Dagger': 'Tinker Tools', 'Viking Sword': 'Smith Hammer', 'Club': 'Saw', 'Bow': 'Bowcraft Dagger'}
ItemType = {'Tinker Tools': 0x1EBC, 'Hatchet': 0x0F43, 'Pickaxe': 0x0E85, 'Logs':  0x1BDD, 'Ingots': 0x1BEF, 'Saw': 0x1034, 'Smith Hammer': 0x13E3, 'Bowcraft Dagger': 0x0F51, 'Viking Sword': 0x13B9, 'Club': 0x13B3, 'Bow': 0x13B1, 'Gold': 0x0EED}
ItemVendor = {'Viking Sword': {'Name': 'Weaponsmith', 'Serial': 0x000880D3, 'X': 480, 'Y': 858}, 'Club': {'Name': 'Carpenter', 'Serial': 0x00086271, 'X': 563, 'Y': 1018}, 'Bow': {'Name': 'Bowyer', 'Serial': 0x00086292, 'X': 567, 'Y': 978}}
ItemMaterial = {'Tinker Tools': 'Ingots', 'Hatchet': 'Ingots', 'Pickaxe': 'Ingots', 'Saw': 'Ingots', 'Smith Hammer': 'Ingots', 'Bowcraft Dagger': 'Ingots', 'Viking Sword': 'Ingots', 'Club': 'Logs', 'Bow': 'Logs'}
ItemStore = {'Tinker Tools': 2, 'Hatchet': 7, 'Pickaxe': 7, 'Logs': 500, 'Ingots': 500, 'Saw': 4, 'Smith Hammer': 4, 'Bowcraft Dagger': 4}
ItemSkill = {'Blacksmithing': 'Viking Sword', 'Carpentry': 'Club', 'Bowcraft': 'Bow'}
OreType = (0x19B9, 0x19B8, 0x19BA, 0x19B7); ItemAnvilNeed = ('Viking Sword')
#Поиск всех тайлов, пригодных для добычи.
def FindResources():
  TilesCache = []
  global ResourceTiles
  #Поиск деревьев.
  for i in [3274, 3275, 3276, 3277, 3280, 3283, 3286, 3289, 3291, 3292, 3294, 3295, 3296, 3299, 3302, 3394, 3395, 3417, 3440, 3461, 4792, 4793, 4794, 4795]:
    for t, x, y, z in GetStaticTilesArray(GetX(Self()) - 75, GetY(Self()) - 75, GetX(Self()) + 75, GetY(Self()) + 75, WorldNum(), i):
      TilesCache.append((t, x, y, z, 'Logs'))
  #Поиск тайлов, образующих пол шахты.
  for i in range(1339, 1359):
    for t, x, y, z in GetStaticTilesArray(GetX(Self()) - 75, GetY(Self()) - 75, GetX(Self()) + 75, GetY(Self()) + 75, WorldNum(), i):
      TilesCache.append((t, x, y, z, 'Ingots'))
  #Поиск кочек в лесу.
  for i in [240, 241, 242, 243]:
    for t, x, y, z in GetLandTilesArray(GetX(Self()) - 75, GetY(Self()) - 75, GetX(Self()) + 75, GetY(Self()) + 75, WorldNum(), i):
      TilesCache.append((t, x, y, z, 'Ingots'))
  #Добавление к уже найденым тайлам. Не дублирует.
  ResourceTiles |= set(TilesCache)
#Разбивает маршрут на отрежки по 300 тайлов.
def FindRoute(x, y, prec):
  #Словарь, содержащий все возможные ответы функции CacDir().
  Direction = {'0': ('y'), '1': ('y', 'x'), '2': ('x'), '3': ('y', 'x'), '4': ('y'), '5': ('y', 'x'), '6': ('x'), '7': ('y', 'x'), '100': ()}
  #Начало отсчета - позиция персонажа.
  while not Connected():
    pass
  while Dist(GetX(Self()), GetY(Self()), x, y) > 50:
    nx, ny = GetX(Self()), GetY(Self())
    for i in range(199):
      while not Connected():
        pass
      #Разность координат. Вычисляется заного, при каждом шаге.
      dx, dy = (x - nx), (y - ny)
      #Приращение по координатам, если в словаре есть соответствующая запись.
      if 'y' in Direction[str(CalcDir(nx, ny, x, y))]:
        ny += Sign(dy)
      if 'x' in Direction[str(CalcDir(nx, ny, x, y))]:
        nx += Sign(dx)
    newMoveXY(nx, ny, 0, 50, 0)
  newMoveXY(x, y, 0, prec, 0)
#Поиск ближайшего, указанного ресурса. В параметр можно закинуть 'any', тогда будет искать любой ближайший тайл, пригодный для добычи.   
def FindNearestResource(Resource = 'all'):
  Distance = 100500
  #Перебор всех тайлов.
  for t, x, y, z, r in ResourceTiles:
    #Если ресурс указан.
    if Resource in ('Logs', 'Ingots') and r == Resource and Dist(GetX(Self()), GetY(Self()), x, y) < Distance:
      if not GetGlobal('stealth', str(x) + ',' + str(y)) or int(GetGlobal('stealth', str(x) + ',' + str(y))[:-4]) + 1200 <= time.time():
        Distance, Tile = (Dist(GetX(Self()), GetY(Self()), x, y)), (t, x, y, r)
    #Если указано 'any'.
    elif Resource == 'any' and Dist(GetX(Self()), GetY(Self()), x, y) < Distance:
      if not GetGlobal('stealth', str(x) + ',' + str(y)) or int(GetGlobal('stealth', str(x) + ',' + str(y))[:-4]) + 1200 <= time.time():
        Distance, Tile = (Dist(GetX(Self()), GetY(Self()), x, y)), (t, x, y, r)
  return Tile
#Поиск по типу и цвету в рюкзаке и руках персонажа. Вернёт суммарное кол-во найденного.
def myCount(Type, Color):
  ItemCount = 0
  #Поиск по слоям.
  for layer in RhandLayer(), LhandLayer():
    #Если в слое есть предмет и его тип == переданному в функцию, то...
    if ObjAtLayer(layer) != 0 and GetType(ObjAtLayer(layer)) == Type:
      #...если цвет, переданный в функцию == -1 (любой цвет), прибавляет к значению ItemCount + 1.
      if Color < 0:
        ItemCount += 1
      #Или если цвет указан, и цвет предмета в слое == переданному в функцию, тоже прибавляет.
      elif Color >= 0 and GetColor(ObjAtLayer(layer)) == Color:
        ItemCount += 1
  #Поиск в рюкзаке персонажа.
  FindTypeEx(Type, Color, Backpack(), False)
  return ItemCount + FindCount()
#Поиск по типу и цвету в рюкзаке и руках персонажа. Вернёт id найденного.
def myFindType(Type, Color):
  #Всё тоже самое, что и в myCount(), только вместо прибавлений, сразу возвращает id найденного.
  for layer in RhandLayer(), LhandLayer():
    if ObjAtLayer(layer) != 0 and GetType(ObjAtLayer(layer)) == Type:
      if Color < 0:
        return ObjAtLayer(layer)
      elif Color >= 0 and GetColor(ObjAtLayer(layer)) == Color:
        return ObjAtLayer(layer)
  return FindTypeEx(Type, Color, Backpack(), False)
#Рубилка-Копалка :Р. Самая обыная.
def GetResource(Tile = ()):
  msg_t, msg_e = 'put|loosen some rocks|fail|destroyed', 'There is no|far away|mining|so close|line of sight|t use|appears immune|nothing|reach this|far away|lumberjacking|decide'
  TileNum, x, y, Resource = Tile
  SetGlobal('stealth', str(x) + ',' + str(y), str(time.time()))
  while Dist(GetX(Self()), GetY(Self()), x, y) > 1:
    FindRoute(x, y, 1)
  FindResources()
  Now, TryCount = dt.now(), 0
  while InJournalBetweenTimes(msg_e, Now, dt.now()) < 0 and not Dead() and TryCount < 10 and myCount(ItemType[ItemTool[Resource]], ItemColor['Iron']['Color']) > 0 and Weight() < Str() * 3.5 -20:
    TryCount += 1
    if TargetPresent():
      CancelTarget()
    WaitTargetTile(TileNum, x, y, GetZ(Self()))
    UseType(ItemType[ItemTool[Resource]], -1)
    WaitJournalLine(dt.now(), msg_t + '|' + msg_e, 10000)
#Переплавка руды в слитки. Почему тут 5 типов я хз... Забыл...
def Smelt():
  for i in OreType:
    while Count(i) > 0:
      WaitTargetType(i)
      UseObject(ItemAnything['Forge']['Serial'])
      Wait(100)
#Открывает банк и все остальные контейнеры.
def OpenContainers():
  print('Иду к банку')
  #Подход к банкиру.
  FindRoute(ItemAnything['Bank']['X'], ItemAnything['Bank']['Y'], 1)
  FindRoute(GetX(ItemAnything['Bank']['Serial']), GetY(ItemAnything['Bank']['Serial']), 1)
  FindResources()
  #Сказать bank. Повторение строк нужно, иначе может зависнуть.
  UOSay('bank')
  Wait(500)
  while LastContainer() != ObjAtLayer(BankLayer()):
    UOSay('bank')
    Wait(500)
  #Открывание всего остального с проверкой на открытие. Важно: если контер будет пуст, то LastContainer() не обновится.
  for Container in (ToolsContainer, ResourcesContainer, ItemsContainer):
    while LastContainer() != Container:
      UseObject(Container)
      Wait(500)
#Разгрузка всего в банк. Распихивает по контейнерам, указанных в ItemContainer.
def Unload():
  print('Разгрузка')
  for Item in ItemType:
    while myCount(ItemType[Item], ItemColor['any']['Color']) > 0:
      MoveItem(myFindType(ItemType[Item], ItemColor['any']['Color']), 0, ItemContainer[Item], 0, 0, 0)
      Wait(MoveDelay)
#Дозагрузка. Добирает предметы в пак, по типу, цвету и кол-ву.
def Reload(Item = 'Tinker Tools', ColorName = 'Iron', CountNeed = 2):
  if CountNeed > 0:
    print('Беру из банка ' + str(CountNeed) + ' ' + Item + ' цвет ' + ColorName)
  while CountEx(ItemType[Item], ItemColor[ColorName]['Color'], Backpack()) < CountNeed and CountEx(ItemType[Item], ItemColor[ColorName]['Color'], ItemContainer[Item]) > 0 and Weight() < Str() * 3.5 - 20:
    MoveItem(FindTypeEx(ItemType[Item], ItemColor[ColorName]['Color'], ItemContainer[Item], False), CountNeed, Backpack(), 0, 0, 0)
    Wait(MoveDelay)
#Крафт. Чтобы все корректно крафтилось, надо отключить повторение крафта при неудачной попытке.
def Craft(Item = 'Tinker Tools', CountNeed = 1):
  print('Крафт ' + Item + ' количество ' + str(CountNeed))
  msg = 'destroyed|fail|put'
  #Подход к форже, если она нужна для крафта.
  if Item in ItemAnvilNeed:
    FindRoute(ItemAnything['Forge']['X'], ItemAnything['Forge']['Y'], 1)
    FindRoute(GetX(ItemAnything['Forge']['Serial']), GetY(ItemAnything['Forge']['Serial']), 1)
  ItemCount = Count(ItemType[Item])
  #Будет крафтить пока есть инструмент, необходимое кол-во ресурсов и пока не скрафтит сколько нужно. Или если чар не подохнет...
  while Count(ItemType[Item]) - ItemCount < CountNeed and ItemPrice[Item]['Logs'] <= Count(ItemType['Logs']) and ItemPrice[Item]['Ingots'] <= Count(ItemType['Ingots']) and myCount(ItemType[ItemTool[Item]], ItemColor['any']['Color']) > 0 and Weight() < Str() * 3.5 - 20:
    GumpsCount = GetGumpsCount()
    #Если стелс ждет ловушку на таргет, отменяет её.
    if TargetPresent():
      CancelTarget()
    #Ставит ловушку на таргет и использует инструмент.
    WaitTargetType(ItemType[ItemMaterial[Item]])
    UseType(ItemType[ItemTool[Item]], ItemColor['any']['Color'])
    #Будет ждать, пока не появится новый гамп, или если нет коннекта к серверу.
    Now = time.time()
    while not Connected():
      pass
    while GumpsCount == GetGumpsCount() and Now + 10 >= time.time():
      pass
    #Обработка гампа. Вбивается кол-во предметов (1), жмутся кнопки категории и выбора.
    NumGumpTextEntry(GetGumpsCount() - 1, 1, '1')
    NumGumpButton(GetGumpsCount() - 1, ItemGumpButtons[Item]['Category'])
    Wait(500)
    NumGumpButton(GetGumpsCount() - 1, ItemGumpButtons[Item]['Choice'])
    #Ждет 15 секунд, или появление в журнале сообщений о том, что крафт удался\не удался.
    WaitJournalLine(dt.now(), msg, 15000)
  #Если предмет есть в ItemVendor(), пойжет и продаст все =).
  if Item in ItemVendor and Count(ItemType[Item]) > 0:
    SellItem(Item)
#Продажа.
def SellItem(Item = 'Bow'):
  print('Продажа ' + Item)
  #Подход к вендору.
  FindRoute(ItemVendor[Item]['X'], ItemVendor[Item]['Y'], 1)
  FindRoute(GetX(ItemVendor[Item]['Serial']), GetY(ItemVendor[Item]['Serial']), 1)
  #Настройка всякой шляпы...
  SetAutoSellDelay(int(Count(ItemType[Item]) // 2.5))
  AutoSell(ItemType[Item], ItemColor['any']['Color'], Count(ItemType[Item]))
  #Скажет имя вендора и sell.
  UOSay(ItemVendor[Item]['Name'] + ' sell')
  Now = time.time()
  #Будет ждать, пока не продаст, или не пройдёт одна минута. Кол-во стопок предметов при таком раскладе не должно превышать 179.
  #Во время ожидания будет ползать за вендором.
  while Count(ItemType[Item]) > 0 and Now + 60 >= time.time():
    while GetDistance(ItemVendor[Item]['Serial']) > 1:
      FindRoute(GetX(ItemVendor[Item]['Serial']), GetY(ItemVendor[Item]['Serial']), 1)
    pass
#Мозги. Решают, что делать дальше.
def Check():
  global Stack
  #Подход к банку, открывание контейнеров, разгрузка.
  OpenContainers()
  Unload()
  Wantage = False
  #Первыми в стек попадают указания крафтить инструменты и добывать ресурсы. Приоритет у тинкер тулз, кирок и топоров.
  #После них идет добыча ресурсов, а потом все остальные инструменты.
  for Item in ('Saw', 'Smith Hammer', 'Bowcraft Dagger', 'Logs', 'Ingots', 'Hatchet', 'Pickaxe', 'Tinker Tools'):
    if CountEx(ItemType[Item], ItemColor['Iron']['Color'], ItemContainer[Item]) < ItemStore[Item]:
      #Запоминание, что чего-то не хватает.
      Wantage = True
      if Item not in ('Logs', 'Ingots') and CountEx(ItemType['Logs'], ItemColor['Standart']['Color'], ItemContainer['Logs']) >= ItemPrice[Item]['Logs'] and CountEx(ItemType['Ingots'], ItemColor['Iron']['Color'], ItemContainer['Ingots']) >= ItemPrice[Item]['Ingots']:
        Stack += [{'Craft': Item, 'Count': ItemStore[Item] - CountEx(ItemType[Item], ItemColor['any']['Color'], ItemContainer[Item]), 'Color': 'Iron'}]
      elif Item in ('Logs', 'Ingots') and CountEx(ItemType[ItemTool[Item]], ItemColor['any']['Color'], ItemContainer[ItemTool[Item]]) > 0:
        Stack += [{'GetResource': Item, 'Count': ItemStore[Item] - CountEx(ItemType[Item], ItemColor['Iron']['Color'], ItemContainer[Item])}]
  #Если всего хватает, то в стек попадают указания крафтить что-либо.
  #Тут идет проверка на цвет, значения скилла и прочая шляпа.
  if not Wantage:
    for Color in ItemColor:
      if Color != 'any':
        Skill = random.choice(ItemColorSkill[Color]['Skill'])
        if Color in ColorCanUse and GetSkillValue(Skill) >= ItemColorSkill[Color]['Need'] and CountEx(ItemType[ItemColor[Color]['Material']], ItemColor[Color]['Color'], ItemContainer[ItemColor[Color]['Material']]) >= ItemStore[ItemColor[Color]['Material']]:
          Stack += [{'Craft': ItemSkill[Skill], 'Color': Color, 'Count': int((Str() * 3.5 - Weight() - 20) // 30)}]
  #Последними в стэк попадают указания к продаже предметов. Попадают только если в банке их больше 20.
  #При крафте предметы сразу продаются, а если попытка была неудачной, разгрузит в банк.
  for Item in ItemVendor:
    if Item in ItemType and CountEx(ItemType[Item], ItemColor['any']['Color'], ItemContainer[Item]) > 20:
      Stack += [{'Sell': Item, 'Count': CountEx(ItemType[Item], ItemColor['any']['Color'], ItemContainer[Item])}]
#Подсчет обычных ресурсов в рюкзаке персонажа.
def ResourceCount(Item = 'Ingots'):
  ItemCount = 0
  if Item == 'Ingots':
    for Ore in OreType:
      ItemCount += CountEx(Ore, ItemColor['Iron']['Color'], Backpack())
    return ItemCount
  return CountEx(ItemType[Item], ItemColor['Standart']['Color'], Backpack())
#Всякая шляпа.
ResourceTiles = set(); SetMoveOpenDoor(True); Stack = []; FindResources(); StackCache = []
#Тело =). Делает то, что решат мозги =).
while True:
  #Если персонаж мёртвый - встать в гейт оф лайф.
  if Dead():
    for x, y in (ItemAnything['Gate of Life']['X'], ItemAnything['Gate of Life']['Y']), (GetX(ItemAnything['Gate of Life']['Serial']), GetY(ItemAnything['Gate of Life']['Serial'])):
      FindRoute(x, y, 0)
    Wait(1000)
  else:
    #Check() заводится только если стек пустой. Подход к банку и разгрузка выполняются перед началом любого действия.
    if Stack == []:
      Check()
    else:
      StackCache = Stack.pop()
      OpenContainers()
      Unload()
      #Если в стеке было указание добывать ресурсы.
      if 'GetResource' in StackCache:
        #Добор инструмента.
        for Resource in ('Logs', 'Ingots'):
          Reload(ItemTool[Resource], 'Iron', 2)
        print('Добыча ' + StackCache['GetResource'])
        #Добывать указанный в стеке ресурс, пока персонаж не наберёт максимальный вес, не закончатся инструменты, пока персонаж не умрет.
        while Weight() < Str() * 3.5 - 20 and myCount(ItemType[ItemTool[StackCache['GetResource']]], ItemColor['Iron']['Color']) > 0 and not Dead():
          if ResourceCount(StackCache['GetResource']) < StackCache['Count']:
            GetResource(FindNearestResource(StackCache['GetResource']))
          else:
            GetResource(FindNearestResource('any'))
        #Если в рюкзаке персонажа есть руда, подход к форже, переплавка.   
        if ResourceCount('Ingots'):
          while Dist(GetX(Self()), GetY(Self()), ItemAnything['Forge']['X'], ItemAnything['Forge']['Y']) > 10:
            FindRoute(ItemAnything['Forge']['X'], ItemAnything['Forge']['Y'], 1)
          FindRoute(GetX(ItemAnything['Forge']['Serial']), GetY(ItemAnything['Forge']['Serial']), 1)
          Smelt()
      #Если в стеке было указание крафтить.
      elif 'Craft' in StackCache:
        #Добор инструмента.
        Reload(ItemTool[StackCache['Craft']], 'Iron', 3)
        #Загрузка ресурсов в кол-ве ItemPrice[предмет][ресурс] * кол-во предметов, которое необходимо скрафтить.
        for Resource in ('Logs', 'Ingots'):
          Reload(Resource, StackCache['Color'], ItemPrice[StackCache['Craft']][Resource] * StackCache['Count'])
        Craft(StackCache['Craft'], StackCache['Count'])
      #Если в стеке было указание продавать.
      elif 'Sell' in StackCache:
        #Загрузка предметов из банка. Продажа.
        Reload(StackCache['Sell'], 'any', StackCache['Count'])
        SellItem(StackCache['Sell'])
#Кол-во строк сокращено в ущерб читаемости кода (кроме комментов).

Ещё раз напишу, что полностью не тестировался, вроде копает\рубит\крафтит\продает.
Если будут какие-нибудь глюки, то надо написать сюда, максимально подробно о проблемме.


Top
 Profile  
 
PostPosted: 01 Jan 2012, 16:44 
Offline
Начинающий игрок

Joined: 23 Dec 2011, 14:02
Posts: 43
Забыл написать =).
Три контейнера должны быть в банке. Они не должны быть пустыми, иначе стелс не определит их в ластконтейнере. Я положил бандажку в каждый.


Top
 Profile  
 
PostPosted: 02 Jan 2012, 14:22 
Offline
Игрок

Joined: 08 Dec 2011, 18:06
Posts: 67
Зери интрестинг . Без критики , "навар будет минимальным" это не то слово он будет мизерным , чтобы качать крафт советую делать одно дело , либо ток рубить либо ток копать.

Скрипт интересный но не юзабелиный. Так как в нём нету смысла , не на этом шарде где ирон и станд логи не востребованы.

Нужно что-то полезное ? переделай чтобы он искал файл,елем,дк и Айс,Мистериус. Копает Железо и Станд логи ток в том случае если инструментов не осталось.

З.Ы. Я без критики , скрипт написан интересно , но без толку.


Top
 Profile  
 
PostPosted: 02 Jan 2012, 14:52 
Online
Руководитель проекта
User avatar

Joined: 31 Jul 2008, 19:08
Posts: 37386
mindruv wrote:
переделай чтобы он искал файл,елем,дк и Айс,Мистериус.
Это запрещено правилами(4.1).


Top
 Profile  
 
PostPosted: 02 Jan 2012, 15:09 
Offline
Игрок

Joined: 08 Dec 2011, 18:06
Posts: 67
Wap wrote:
mindruv wrote:
переделай чтобы он искал файл,елем,дк и Айс,Мистериус.
Это запрещено правилами(4.1).



Упс.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 5 posts ] 

All times are UTC + 2 hours [ DST ]


Who is online

Users browsing this forum: No registered users and 175 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group