В python'е есть mutable и immutable типы данных. Ключом (в dict'е или set'е или еще где нибудь) могут быть только immutable.nah nah wrote:Что значит такая вот ошибка?
TypeError: unhashable type: 'dict'
Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Не заводится.
Re: Не заводится.
Re: Не заводится.
Спасибо. Нашёл в чем проблемма print'ом. У меня есть привычка переписывать функции на новый лад, а пребросить параметры в вызове этих функций, я зыбываю.
Re: Не заводится.
Ещё вопрос, надеюсь я не надоел
Что будет, если в newMoveXY забросить координаты с большим удалением от чара, чем рекомендовано(300 кажется
).

Что будет, если в newMoveXY забросить координаты с большим удалением от чара, чем рекомендовано(300 кажется

Re: Не заводится.
Вернет False и никуда не пойдет. Ну и вообще во всех случаях когда не удается достичь указной точки вернет False. True вернет если дошел куда надо.
300 это не рекомендованное расстояние, а максимальное, если оно будет хоть на 1 тайл дальше, стелс и не подумает искать путь. Ну и 300 тайлов - это не общая длинна пути (она может быть до 1000 тайлов) а максимальное расстояние между исходной и конечной точками по x или y.
300 это не рекомендованное расстояние, а максимальное, если оно будет хоть на 1 тайл дальше, стелс и не подумает искать путь. Ну и 300 тайлов - это не общая длинна пути (она может быть до 1000 тайлов) а максимальное расстояние между исходной и конечной точками по x или y.
Re: Не заводится.
Значит попробую придумать какую-нить разбивалку пути. Если у чара скилл мининг 25.5, GetSkillValue вернёт 255 или 25.5?
И вот на такую штуку
Выдает пустые строки. Где я ошибся? 
И вот на такую штуку
Code: Select all
for i in range(10):
SetGlobal('stelth', str(i) + ',' + str(i), str(time.time()))
Wait(1000)
for i in range(10):
print(GetGlobal('stelth', str(i) + ',' + str(i)))
print(GetGlobal('stelth', str(11) + ',' + str(11)))

Re: Не заводится.
тут
nah nah wrote: SetGlobal('stelth', str(i) + ',' + str(i), str(time.time()))
Re: Не заводится.
Бывает... Ещё раз спасибо
Re: Не заводится.
Иногда вот такая штука, начинает глючить.
Как результат, чар скажет банк, находясь далеко от банкира. Наверное что-то с определение координат банкира. Иногда работает, когда банкир близко.
Проверил. GetX и GetY возвращают 0. Может специфика шарда?
Code: Select all
while GetDistance(Banker) > 1:
newMoveXY(GetX(Banker), GetY(Banker), 0, 1, 1)
UOSay('bank')
Проверил. GetX и GetY возвращают 0. Может специфика шарда?
Re: Не заводится.
Code: Select all
def SignIt(val):
if val < 0:
return -1
elif val > 0:
return 1
elif val == 0:
return 0
#Разбивает путь на отрезки по 300 каждый, подход до 50 тайлов, а то мало ли точка в реке окажется...
def FindDir(x, y):
nx = GetX(Self())
ny = GetY(Self())
while Dist(GetX(Self()), GetY(Self()), x, y) > 300:
for i in range(300):
dx = nx - x
dy = ny - y
if CalcDir(GetX(Self()), GetY(Self()), x, y) == 0:
ny += SingIt(dy)
elif CalcDir(GetX(Self()), GetY(Self()), x, y) == 1:
nx += SignIt(dx)
ny += SignIt(dy)
elif CalcDir(GetX(Self()), GetY(Self()), x, y) == 2:
nx += SignIt(dx)
elif CalcDir(GetX(Self()), GetY(Self()), x, y) == 3:
nx += SignIt(dx)
ny += SignIt(dy)
elif CalcDir(GetX(Self()), GetY(Self()), x, y) == 4:
ny += SingIt(dy)
elif CalcDir(GetX(Self()), GetY(Self()), x, y) == 5:
nx += SignIt(dx)
ny += SignIt(dy)
elif CalcDir(GetX(Self()), GetY(Self()), x, y) == 6:
nx += SignIt(dx)
elif CalcDir(GetX(Self()), GetY(Self()), x, y) == 7:
nx += SignIt(dx)
ny += SignIt(dy)
print(nx,ny)
newMoveXY(nx, ny, 0, 50, 1)
newMoveXY(x, y, 0, 1, 1)
Re: Не заводится.
SignIt vs SingIt, петь стелс еще не умеет 

Новый стелс лежит тут. Стелс это произведение искусства! 

Re: Не заводится.
Итак... Вот оно чудо, из-за которого я так вам надоедал.
Скажите что лучше чеклаг или вэйтконекшен? Куда их воткнуть? А если подскажете, как сократить кол-во строк не в ущерб полезности, я от вас навсегда отстану =) 'Tinker Tools', 'Type' 0x1BEF, 'Club', Color, Backpack()) )
while InJournalBetweenTimes('destroyed', Now, dt, ItemContainer'Y'
Code: Select all
from datetime import datetime as dt
import time
import random
#ID контейнера с ресурсам, инструментами и того, куда будет сбрасывать вещички, которые не удалось продать, а так же ID банкира и форжи.
ResourcesContainer = 0x4003951F; ItemsContainer = 0x40069428; ToolsContainer = 0x40039778; Forge = 0x40005E0C
#Цвета, из которых можно крафтить. Остальное накопанное будет накапливаться. Задержка на перемещение предметов.
ColorCanUse = ('Iron', 'Standart'); MoveDelay = 1100
#Кнопки в гампе, кол-во ресурсов, куда складывать, типы цвета, имена и прочее.
ItemToolType = {'Tinker Tools': {'Name': 'Tinker Tools', 'Type': 0x1EBC}, 'Hatchet': {'Name': 'Tinker Tools', 'Type': 0x1EBC}, 'Pickaxe': {'Name': 'Tinker Tools', 'Type': 0x1EBC}, 'Logs': {'Name': 'Hatchet', 'Type': 0x0F43}, 'Ingots': {'Name': 'Pickaxe', 'Type': 0x0E85}, 'Saw': {'Name': 'Tinker Tools', 'Type': 0x1EBC}, 'Smith Hammer': {'Name': 'Tinker Tools', 'Type': 0x1EBC}, 'Bowcraft Dagger': {'Name': 'Tinker Tools', 'Type': 0x1EBC}, 'Viking Sword': {'Name': 'Smith Hammer', 'Type': 0x13E3}, 'Club': {'Name': 'Saw', 'Type': 0x1034}, 'Bow': {'Name': 'Bowcraft Dagger', 'Type': 0x0F51}}
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())}
ItemVendor = {'Viking Sword': {'Name': 'Weaponsmith', 'Serial': 0x000880D3, 'X': 480, 'Y': 852}, 'Club': {'Name': 'Carpenter', 'Serial': 0x00086271, 'X': 564, 'Y': 1013}, 'Bow': {'Name': 'Bowyer', 'Serial': 0x00086292, 'X': 567, 'Y': 970}, 'Gold': {'Name': 'Banker', 'Serial': 0x00086286, 'X': 554, 'Y': 992}, 'Forge': {'X': 522, 'Y': 994}}
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}
ItemColor = {'Ingots': {'Iron': 0x0000, 'Copper': 0x0AB2, 'Bronze': 0x0488, 'Steel': 0x042C, 'Black Steel': 0x0AA3}, 'Logs': {'Standart': 0x0000, 'Willow': 0x08F1, 'Cedar': 0x08A5, 'Walnut': 0x02F4, 'Oak': 0x0000}, 'any': -1}
ItemMaterialType = {'Tinker Tools': 0x1BEF, 'Hatchet': 0x1BEF, 'Pickaxe': 0x1BEF, 'Saw': 0x1BEF, 'Smith Hammer': 0x1BEF, 'Bowcraft Dagger': 0x1BEF, 'Viking Sword': 0x1BEF, 'Club': 0x1BDD, 'Bow': 0x1BDD}
ItemColorSkill = {'Iron': 20, 'Copper': 50, 'Bronze': 70, 'Steel': 90, 'Black Steel': 110, 'Standart': 20, 'Willow': 50, 'Cedar': 70, 'Walnut': 90, 'Oak': 110}
ItemStore = {'Tinker Tools': 2, 'Hatchet': 7, 'Pickaxe': 7, 'Logs': 1000, 'Ingots': 1000, 'Saw': 4, 'Smith Hammer': 4, 'Bowcraft Dagger': 4}
ItemSkill = {'Blacksmithing': 'Viking Sword','Carpentry': 'Club','Bowcraft': 'Bow'}
ItemAnvilNeed = {'Viking Sword': 1}
ResourceTiles = set(); Stack = []
#Заполняет ResourceTiles тайлами, с которых рубится и копается (номер, х, у, z, ресурс).
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()) - 50, GetY(Self()) - 50, GetX(Self()) + 50, GetY(Self()) + 50, WorldNum(), i):
TilesCache.append((t, x, y, z, 'Logs'))
for i in range(1339, 1359):
for t, x, y, z in GetStaticTilesArray(GetX(Self()) - 50, GetY(Self()) - 50, GetX(Self()) + 50, GetY(Self()) + 50, 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()) - 50, GetY(Self()) - 50, GetX(Self()) + 50, GetY(Self()) + 50, WorldNum(), i):
TilesCache.append((t, x, y, z, 'Ingots'))
ResourceTiles |= set(TilesCache)
#Возвращает 1, если число положительное, 0, если == 0, -1, если отрицательное.
def SignIt(val):
if val < 0:
return -1
elif val > 0:
return 1
elif val == 0:
return 0
#Разбивает путь на отрезки по 300 каждый, подход до 50 тайлов, а то мало ли точка в реке окажется...
def FindDir(x, y):
nx = GetX(Self())
ny = GetY(Self())
while Dist(nx, ny, x, y) > 300:
for i in range(300):
dx = nx - x
dy = ny - y
if CalcDir(nx, ny, x, y) == 0:
ny += SignIt(dy)
elif CalcDir(nx, ny, x, y) == 1:
nx += SignIt(dx)
ny += SignIt(dy)
elif CalcDir(nx, ny, x, y) == 2:
nx += SignIt(dx)
elif CalcDir(nx, ny, x, y) == 3:
nx += SignIt(dx)
ny += SignIt(dy)
elif CalcDir(nx, ny, x, y) == 4:
ny += SingIt(dy)
elif CalcDir(nx, ny, x, y) == 5:
nx += SignIt(dx)
ny += SignIt(dy)
elif CalcDir(nx, ny, x, y) == 6:
nx += SignIt(dx)
elif CalcDir(nx, ny, x, y) == 7:
nx += SignIt(dx)
ny += SignIt(dy)
newMoveXY(nx, ny, 0, 50, 0)
newMoveXY(x, y, 0, 1, 0)
#Находит близжайший к чару тайл. В параметре указывается имя ресурса ('Logs', 'Ingots', 'all'(не используется, но работает)).
#Елси тайл был вырублен\выкопан менее чем 20 мин назад, пропустит.
def FindNearestResource(Resource = 'all'):
Distance = 100500
for t, x, y, z, r in ResourceTiles:
if Resource in ('Logs', 'Ingots') 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)
elif 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
#Рубилка-копалка =). Рубит\копает до полного истощения тайла или 10 раз.
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'
t, x, y, r = Tile
SetGlobal('stealth', str(x) + ',' + str(y), str(time.time()))
while Dist(GetX(Self()), GetY(Self()), x, y) > 1:
FindDir(x, y)
FindResources()
Now = dt.now()
TryCount = 0
while InJournalBetweenTimes(msg_e, Now, dt.now()) < 0 and not Dead() and TryCount < 10 and Count(ItemToolType[r]['Type']) > 0:
TryCount += 1
if TargetPresent():
CancelTarget()
WaitTargetTile(t, x, y, GetZ(Self()))
UseType(ItemToolType[r]['Type'], -1)
WaitJournalLine(dt.now(), msg_t + '|' + msg_e, 15000)
#Переплавляет руду и мечи в слитки.
def Smelt():
for i in [0x19B9, 0x19B8, 0x19BA, 0x19B7, 0x13B9]:
while Count(i) > 0:
WaitTargetType(i)
UseObject(Forge)
Wait(300)
#Подходит к банку и открывает все контейнеры. Контейнеры не должны буть пустыми. Баг?
def OpenContainers():
while Dist(GetX(Self()), GetY(Self()), ItemVendor['Gold']['X'], ItemVendor['Gold']['Y']) > 10:
FindDir(ItemVendor['Gold']['X'], ItemVendor['Gold']['Y'])
while GetDistance(ItemVendor['Gold']['Serial']) > 1:
FindDir(GetX(ItemVendor['Gold']['Serial']), GetY(ItemVendor['Gold']['Serial']))
UOSay('bank')
Wait(500)
while LastContainer() != ObjAtLayer(BankLayer()):
UOSay('bank')
Wait(500)
for i in (ToolsContainer, ResourcesContainer, ItemsContainer):
while LastContainer() != i:
UseObject(i)
Wait(500)
#Полностью разгружает чара в банк. Расбрасывает по контейнерам.
def Unload():
for i in (RhandLayer(), LhandLayer()):
if i > 0:
unequip(i)
Wait(MoveDelay)
for Item in ItemType:
while Count(ItemType[Item]):
MoveItems(Backpack(), ItemType[Item], -1, ItemContainer[Item], 0, 0, 0, MoveDelay)
#Перемещает предметы из банка в пак. Параметры (имя предмета, имя цвета, кол-во)
def Reload(Item = 'Tinker Tools', ColorNeed = 'Iron', CountNeed = 2):
#Этот гемор нужен, чтобы не добавлять новый список {цвет: материал}.
if ColorNeed != 'any':
for Material in ('Logs', 'Ingots'):
for ColorName in ItemColor[Material]:
if ColorNeed == ColorName:
Color = ItemColor[Material][ColorName]
else:
Color = -1
while CountEx(ItemType[Item], Color, Backpack()) < CountNeed and CountEx(ItemType[Item], Color, ItemContainer[Item]) != 0 and Weight() < Str() * 3.5 - 50:
MoveItem(FindTypeEx(ItemType[Item], Color, ItemContainer[Item], False), CountNeed, Backpack(), 0, 0, 0)
Wait(MoveDelay)
#Крафтит. Параметры (имя предмета, имя цвета, кол-во).
def Craft(Item = 'Tinker Tools', ItemCount = 1):
msg = 'destroyed'
#Подход к наковальне, если она нужна для крафта.
if Item in ItemAnvilNeed:
while Dist(GetX(Self()), GetY(Self()), ItemVendor['Forge']['X'], ItemVendor['Forge']['Y']) > 10:
FindDir(ItemVendor['Forge']['X'], ItemVendor['Forge']['Y'])
while GetDistance(Forge) > 1:
FindDir(GetX(Forge), GetY(Forge))
GumpsCount = GetGumpsCount()
ItemsCount = Count(ItemType[Item])
WaitTargetType(ItemMaterialType[Item])
UseType(ItemToolType[Item]['Type'], -1)
Now = dt.now()
while GumpsCount == GetGumpsCount():
pass
NumGumpTextEntry(GetGumpsCount() - 1, 1, str(ItemCount))
NumGumpButton(GetGumpsCount() - 1, ItemGumpButtons[Item]['Category'])
Wait(2000)
NumGumpButton(GetGumpsCount() - 1, ItemGumpButtons[Item]['Choice'])
while InJournalBetweenTimes('destroyed', Now, dt.now()) < 0 and ItemsCount + ItemCount > Count(ItemType[Item]) and Count(ItemType['Logs']) >= ItemPrice[Item]['Logs'] and Count(ItemType['Ingots']) >= ItemPrice[Item]['Ingots'] and Count(ItemToolType[Item]['Type']) > 0 and not Dead():
pass
#Переплавка обратно в слитка (если нужна наковальня для крафта...)
while Item in ItemAnvilNeed and Count(ItemType[Item]) > 0 and not Dead():
Smelt()
if Count(ItemType[Item]) and Item in ItemVendor:
SellItems(Item)
#Продаёт предметы вендорам. Параметр всего один - имя предмета.
def SellItems(Item = 'Bow'):
print('SellItems')
while Dist(GetX(Self()), GetY(Self()), ItemVendor[Item]['X'], ItemVendor[Item]['Y']) > 10:
FindDir(ItemVendor[Item]['X'], ItemVendor[Item]['Y'])
while GetDistance(ItemVendor[Item]['Serial']) > 1:
FindDir(GetX(ItemVendor[Item]['Serial']), GetY(ItemVendor[Item]['Serial']))
SetAutoSellDelay(Count(ItemType[Item]) // 2)
AutoSell(ItemType[Item], -1, Count(ItemType[Item]))
UOSay(ItemVendor[Item]['Name'] + ' sell')
Now = time.time()
while Count(ItemType[Item]) > 0 and Now + 60 >= time.time():
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['Ingots']['Iron'], ItemContainer[Item]) < ItemStore[Item]:
Wantage = True
if Item not in ('Logs', 'Ingots') and CountEx(ItemType['Logs'], ItemColor['Logs']['Standart'], ItemContainer['Logs']) >= ItemPrice[Item]['Logs'] and CountEx(ItemType['Ingots'], ItemColor['Ingots']['Iron'], ItemContainer['Ingots']) >= ItemPrice[Item]['Ingots']:
Stack += [{'Craft': Item, 'Count' : ItemStore[Item] - CountEx(ItemType[Item], -1, ItemContainer[Item]), 'Color': 'Iron'}]
else:
Stack += [{'GetResource': Item, 'Count': ItemStore[Item] - CountEx(ItemType[Item], ItemColor['Ingots']['Iron'], ItemContainer[Item])}]
#Если инструментов и ремурсов в банке достаточно - крафт.
if not Wantage:
for Material in ('Logs', 'Ingots'):
for ColorName in ItemColor[Material]:
if ColorName in ColorCanUse and CountEx(ItemType[Material], ItemColor[Material][ColorName], ItemContainer[Material]) >= Str() * 3.5 - 10:
if Material == 'Logs':
Skill = random.choice(['Carpentry', 'Bowcraft'])
else:
Skill = 'Blacksmithing'
if GetSkillValue(Skill) >= ItemColorSkill[ColorName]:
Stack += [{'Craft': ItemSkill[Skill], 'Count': int(((Str() * 3.5 - 50) // 30)), 'Color': ColorName}]
#Подсчёт продукции.
for Item in ('Bow', 'Viking Sword', 'Club'):
if CountEx(ItemType[Item], -1, ItemContainer[Item]) > 20:
Stack += [{'Sell': Item, 'Count': CountEx(ItemType[Item], -1, ItemContainer[Item])}]
#Всякая шляпа.
SetMoveOpenDoor(True)
FindResources()
StackCache = []
while Dist(GetX(Self()), GetY(Self()), ItemVendor['Forge']['X'], ItemVendor['Forge']['Y']) > 10:
FindDir(ItemVendor['Forge']['X'], ItemVendor['Forge']['Y'])
while GetDistance(Forge) > 1:
FindDir(GetX(Forge), GetY(Forge))
Smelt()
#Принцип работы скрипта - делать то, что записано в стеке.
while True:
#Процедура Check() заносит в стек указания к следующим действиям, запускается только если стэк пуст.
if Stack == []:
Check()
else:
StackCache = Stack.pop()
#Перед каждым действием выполняется полная разгрузка в банк. Зато строк меньше =).
OpenContainers()
Unload()
#Если в стеке указание добывать ресурсы, то доберёт и пойдёт рубить\копать. В функцию поиска близжайшего к чару тайла с ресурсом можно закинуть 'all',
#и тогда она будет искать все ресурсы, что она и делает, елси требуемое количество требуемого ресурса уже добыто. Остальное тут: запуск Craft(), Sell() и ресалка.
if 'GetResource' in StackCache:
Reload(Item = ItemToolType['Logs']['Name'])
Reload(Item = ItemToolType['Ingots']['Name'])
while Weight() < Str() * 3.5 - 50 and Count(ItemToolType[StackCache['GetResource']]['Type']) > 0 and not Dead():
if CountEx(ItemType[StackCache['GetResource']], ItemColor['Ingots']['Iron'], Backpack()) <= StackCache['Count']:
GetResource(FindNearestResource(StackCache['GetResource']))
else:
GetResource(FindNearestResource('all'))
while Dist(GetX(Self()), GetY(Self()), ItemVendor['Forge']['X'], ItemVendor['Forge']['Y']) > 10:
FindDir(ItemVendor['Forge']['X'], ItemVendor['Forge']['Y'])
while GetDistance(Forge) > 1:
FindDir(GetX(Forge), GetY(Forge))
Smelt()
elif 'Craft' in StackCache:
Reload(ItemToolType[StackCache['Craft']]['Name'], 'Iron', 2)
for i in ('Logs', 'Ingots'):
Reload(i, StackCache['Color'], ItemPrice[StackCache['Craft']][i] * StackCache['Count'])
Craft(StackCache['Craft'], StackCache['Count'])
elif 'Sell' in StackCache:
Reload(StackCache['Sell'], 'any', StackCache['Count'])
SellItems(StackCache['Sell'])
if Dead():
Wait(10 * 60 * 1000)
while Dead():
FindDir(GetX(id_GateOfLife), GetY(id_GateOfLife))
while InJournalBetweenTimes('destroyed', Now, dt, ItemContainer'Y'
Last edited by nah nah on 27.12.2011 6:43, edited 2 times in total.
Re: Не заводится.
А CountEx считает то, что в слое, если указать на чара?
Re: Не заводится.
GetX, GetY вернут 0, если "Banker" находится далеко и стелс его "не видит", и GetDistance(Banker) в таком случае вернет -1. Таким образом цикл
не выполнится вообще ни разу, и чар никуда не ходя скажет "bank"
чеклаг и вейтконнекшн это разные вещи.
Чеклаг надо выткать там, где нужно следующее действие выполнить после того как сработает предыдущие. Например после открытия конта, юза инструмента и тп.
После того как отработал вейтконнешн, можно считать что чар гарантированно онлайн.
И не стоит гнаться за меньшим количеством строк. Читаемость и понятность важнее.
Code: Select all
while GetDistance(Banker) > 1:
newMoveXY(GetX(Banker), GetY(Banker), 0, 1, 1)
Должен.А CountEx считает то, что в слое, если указать на чара?
чеклаг и вейтконнекшн это разные вещи.
Чеклаг надо выткать там, где нужно следующее действие выполнить после того как сработает предыдущие. Например после открытия конта, юза инструмента и тп.
После того как отработал вейтконнешн, можно считать что чар гарантированно онлайн.
И не стоит гнаться за меньшим количеством строк. Читаемость и понятность важнее.
Re: Не заводится.
Code: Select all
while GetDistance(Banker) > 1:
newMoveXY(GetX(Banker), GetY(Banker), 0, 1, 1)
Code: Select all
while GetDistance(Banker) > 1 do
newMoveXY(GetX(Banker), GetY(Banker), true, 1, true);
My name is Игорёшка
Пишу скрипты за еду

Пишу скрипты за еду

Re: Не заводится.
потому что это питон)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".