Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: OpenEUO Craft and BOD Filling script

OpenEUO Craft and BOD Filling script 20 Март 2015 07:43 #26103

  • Manticorr
  • Manticorr аватар
  • Не в сети
  • Неизвестный
  • Сообщений: 23
  • Репутация: 0
Захотелось написать простенький скрипт для крафта и заполнения булок.
Был пьян. Поэтому не обижайтесь.

Для начала, помимо OpenEUO, советую поставить Modded OpenEUO Interface (GUI) by EN. Version 11d:
http://www.easyuo.com/forum/viewtopic.php?f=38&t=46408

Использованные материалы

1) Взял замечательный скрипт поиска предметов и их представления в стандартизированном виде от Kal In Ex
Оригинал можно взять отсюда: http://www.easyuo.com/forum/viewtopic.php?t=43949
Пришлось оверрайдить функцию GetBODInfo, чтобы информация о булках работала на данном шарде. Конкретно, дописал в конец файла это:
-- overrided GetBODInfo
IMT.__index = function(table,key)
	if key == "Name" or key == "Details" then
		local Name,Details = UO.Property(table.ID)
		rawset(table,"Name",string.match(Name,"[%s%d]*(.+)"))
		rawset(table,"Details",Details)
	end
	if key == "Property" then
		local Property = GetItemData(table.Details)
		Property.Name = table.Name
		rawset(table,"Property",Property)
	end
	if key == "BODInfo" then
		rawset(table,"BODInfo",GetBODInfo(table.Details,table.Col))
	end
	return rawget(table,key)
end
local patternPhrases = {
      Size = "Bulk Order",
      Amount = "Amount To Make",
      Quality = "All Items Must Be Exceptional",
      Material = "All Items Must Be Made With",
      MaterialType = "With .* Ingots",
      Name = ".*:",
      Digits = "[%w%s]+: (%d+)"
}
local function parseBODInfoString(BODInfo, string)
      if string.match(string,patternPhrases.Size) ~= nil then
         BODInfo.Size = string.sub(string,1,5) 
      elseif string.match(string,patternPhrases.Amount) ~= nil then 
         BODInfo.Amount = tonumber(string.match(string,patternPhrases.Digits))
      elseif string.match(string,patternPhrases.Quality) ~= nil then
         BODInfo.Quality = "exceptional"
      elseif string.match(string,patternPhrases.Material) ~= nil then 
         BODInfo.Material = string.sub(string.match(string,patternPhrases.MaterialType),6,-8)
      else
          local indx = table.getn(BODInfo.Items)+1
          BODInfo.Items[indx] = {}                                                                          
          BODInfo.Items[indx].Name = string.lower(string.sub(string.match(string,patternPhrases.Name),1,-2))
          BODInfo.Items[indx].Done = tonumber(string.match(string,patternPhrases.Digits))
      end
      return BODInfo
end
local BSmithBodCol = 1102
local TailorBODCol = 1155
GetBODInfo = function(Details,Color)
        local DefaultMaterialType
        if Color == BSmithBodCol then
           DefaultMaterialType = 'Iron'
        elseif Color == TailorBODCol then 
           DefaultMaterialType = 'Leather'      
        end
        
	if type(Details) == "number" then
		local Name
		Name,Details = UO.Property(Details)
		if Name ~= "A Bulk Order Deed" or string.len(Details) == 0 then
			print("GetBODInfo - error item ID:"..ID.." is not a BOD")
			return nil
		end
	end
	local GetLine = string.gfind(Details,"([^%c]+)%c*")
	GetLine() -- Blessed
	GetLine() -- Weight: 1 Stone
	local RetVal = {
              Size = "Small",
              Quality = "normal", -- optional
              Material = DefaultMaterialType, -- optional
              Amount = 0,
              Items = {}
        }
        local BODInfoString = GetLine()
        while BODInfoString ~= nil do 
            RetVal = parseBODInfoString(RetVal, BODInfoString)
            BODInfoString = GetLine() 
        end 
	return RetVal
end
Благодаря этому костылю информация о булке BODInfo возвращается в виде:
Size,Quality,Material,Amount,Items
где Items = {{Name,Done},{Name,Done},{Name,Done},...}

2) Отличная приспособлена для чтения текста из гампов от того же Kal In Ex
Оригинал туда: http://www.easyuo.com/forum/viewtopic.php?t=43234
Ничего не менял.

Установка

Распаковываем архив в директорию, где установлена OpenEUO, в папку scripts

Инструкция

Создаём свой скрипт и подключаем ту дрянь, что я написал
dofile('modules/modCraft.lua')

Теперь можно можно использовать.

Скрафтить предмет
local Item = {
      itemName = "dagger", // название предмета в нижнем регистре
      categoryName = "Bladed", // категория, как она написана в гампе инструмента
      amount = 3, // сколько надо сделать
      Material = "Dull Copper", // название материала ("Iron","Copper","Gold", "Leather"...)
      Quality = "normal" // "normal" или "exceptional"
}
Craft.make(Item,toolType,toolColor)
toolType - тип инструмента, которым будете пользоваться
toolColor - цвет инструмента. По дефолту 0. Если знаете цвета рунических инструментов, подставляйте. Мне лень искать было.

Найти первый подходящий по параметрам BOD в инвентаре
BOD = Craft.findBOD(size,material,quality,amount,itemsNames,strictAmount,completed)
size - "Small" , "Large"
material - название материала кэмел кейсом (Каждое новое слово с заглавной буквы)
quality - "normal" или "exceptional"
amount - кол-во предметов в BOD
itemsNames - массив с именами предметов в нижнем регистре
strictAmount - как учитывать количество требуемых в BOD изделий. true - точное совпадение, false - больше или равное количество
completed - true - искать выполненный BOD, false - любой

Заполнить BOD
Craft.fillBOD(BOD)
этой функции надо отдавать на вход BOD в формате, возвращаемом функциями Craft.findBOD (или ScanItems из файла FindItems.lua с моим костылём)

Примеры

Скрафтить 3 Dull Copper даггера обычного качества и запихать их в маленький BOD
dofile('modules/modCraft.lua')

Types = {
      Tool     = {
               SmithsHammer = 5091,
               Tongs = 4027,
      },
}

local Item = {
      itemName = "dagger",
      categoryName = "Bladed",
      amount = 3,
      Material = "Dull Copper",
      Quality = "normal"
}

Craft.make(Item,Types.Tool.SmithsHammer)
wait(1000)
Craft.fillBOD(Craft.findBOD("Small","Dull Copper","normal",10,{Item.itemName}))

Заполнить большой BOD мелкими. Разумеется, всё это должно быть в инвентаре.
Craft.fillBOD(Craft.findBOD("Large","Iron","normal",10,{"ringmail gloves","ringmail tunic","ringmail sleeves","ringmail leggings"},true))


Вложенный файл:

Имя файла: 5046.zip
Размер файла:10 KB
Последнее редактирование: 29 Июль 2019 17:27 от Old Man.
Администратор запретил публиковать записи гостям.

Re: OpenEUO Craft and BOD Filling script 20 Март 2015 20:02 #26134

  • Allice [FreeZzy]
  • Allice [FreeZzy] аватар
  • Не в сети
  • Пророк
  • United Pirates Guild
  • Сообщений: 3282
  • Спасибо получено: 53
  • Репутация: -11
Очень полезный скрипт. И ресурсы на которые в посте ссылаются - тоже полезно просмотреть.
Но смотришь и на скрипты на изи и на ескрипт/питон/луа и офигеваешь. Тоже самое под питоном занимает в 4 раза меньше кода.
Эта игра ну никак не загнётся... Уходят старые, недовольные, игроки - приходят новые - новые стареют, начинают брюзжать и уходят. И снова на их место приходят новые...
Администратор запретил публиковать записи гостям.

OpenEUO Craft and BOD Filling script 27 Июль 2019 21:44 #47212

  • Manticorr
  • Manticorr аватар
  • Не в сети
  • Неизвестный
  • Сообщений: 23
  • Репутация: 0
Чорт. Вложение не находится.

А я хотел достать, переписать на другие утилиты.

Мб, осталось у кого?
Последнее редактирование: 27 Июль 2019 22:04 от Manticorr.
Администратор запретил публиковать записи гостям.

OpenEUO Craft and BOD Filling script 29 Июль 2019 17:26 #47215

  • Old Man
  • Old Man аватар
  • Не в сети
  • Администрация
  • Сообщений: 3507+
  • Сообщений: 1160
  • Спасибо получено: 281
  • Репутация: 39
Manticorr пишет:
Чорт. Вложение не находится.

А я хотел достать, переписать на другие утилиты.

Мб, осталось у кого?

Элитная команда спасения снова с вами (с)
Прикрепил в аттач.

Вложенный файл:

Имя файла: 5046.zip
Размер файла:10 KB


UPD: в первом посте тоже заменил на рабочий
По поводу ошибок и неточностей пишите только на саппорт, не в лс или мессенджеры, не на форум или в дискорд. Не создавали тикета - не сообщали об ошибке.
Последнее редактирование: 29 Июль 2019 17:27 от Old Man.
Администратор запретил публиковать записи гостям.
Спасибо сказали: Manticorr
Russian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish

Вы не авторизованы.