Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

как получить инфу про ДО шмотки одетые на перса


testerov
 Share

Recommended Posts

как узнать что у человека за ДО шмот (например при осмотре)

unit.GetEquipmentItemIds( unitId, slotType ) возвращает только основной эквип (+ всякое ненужное про руны и пр)

Link to comment
Share on other sites

Описание функции слабо прочитать?

Quote:
slotType: number (enum ITEM_CONT_...) - тип контейнера

..

ITEM_CONT_...

Тип контейнера с предметами, которые можно использовать (операции с рунами/разборка/очищение и др.).

Перечисление определено в коде, значения:

ITEM_CONT_DEPOSITE - банковская ячейка

ITEM_CONT_EQUIPMENT - одежда и руны

ITEM_CONT_EQUIPMENT_RITUAL - одежда ("драконий облик")

ITEM_CONT_INVENTORY - сумка

ITEM_CONT_INVENTORY_OVERFLOW - переполненная сумка

Link to comment
Share on other sites

Этого недостаточно чтобы "узнать что у человека за ДО шмот"?

Узнать какой хлам лежит в своей сумке, в своем банке можно другими функциями

ЗЫ. В документации дофигища устаревших функций-ивентов-перечислений.

А зечем ее чистить?

Link to comment
Share on other sites

Запуск инспекции при смене цели

Code:

function OnEventAvatarTargetChanged( pars )

--- новую цель берем

local aimId = unit.GetTarget(Me)

if aimId then

W("Stats_pan"):Show( true )

else

W("Stats_pan"):Show( false )

return

end

if pars.reason == CHANGE_TARGET_DEAD_TARGET then

return

end

local uSts, uInfo

uInfo = EN [aimId]  or FR [aimId] 

if not uInfo then return end

if uInfo.isPlayer and getPS("InspectStats") ~= OFF then

if aimId ~= Me  then

else

onEvent.EVENT_INSPECT_STARTED( { id = Me } )

end

uSts = tryToInspect( FromWS(object.GetName(aimId)), aimId )

end

myTargKillsShow( uInfo )

myTargStatsShow( uSts )

end

Запуск инспекции при наведении мышки на панельку

Code:
OnReactionElemOver = function( pars )

local key = pars.widget:GetName()

---LogToChat(" left_click "..key)

local plateType = string.sub(key,1,2)

if getPS(plateType,"ToolTip") == OFF then return end

--- тут обязательно такой лист должен быть! if not List [plateType]  then return end

local num = tonumber(string.sub(key,3,4))

if not num then return end

local unitInfo = List [plateType] [num] .Unit

if not unitInfo then LogToChat("unitId empty, please reload addon",nil,true); return end

if not unitInfo.isPlayer == true then return end

local unitId = unitInfo.id

if not unitId then return end

if pars.active then

if getVersionAO() > 2 and getPS("InspectStats") ~= OFF then

-- тут версия выше АТОЛЛ - может инспектировать любого игрока

tryToInspect( unitInfo.name, unitId )

end

toolTip.prepare( pars.widget, unitInfo, nil, { innCount = getPS(plateType,"TTStatsCount") } )

toolTip.Show( true )

else

toolTip.Show( false )

end

end

Link to comment
Share on other sites

Code:

---------------------------------------------------------------------------------
local function  calcStats(Sts)
---- для каждого слота одежки
local cnt, stsAll, rstAll, armAll, stsSum, rstSum, armSum, runeAtt, runeDef = 0, 0, 0, 0, 0, 0, 0, 0, 0
---local myDress = unit.GetEquipmentItemIds( Me, ITEM_CONT_EQUIPMENT )
local mySts, mySts1, val, itemId, myInfo
---exObj("Sts", Sts)
---LogInfo("calcStats")
local stsInn = {}
for slot, v in Sts do
if type(slot) == "number" then
cnt = cnt + 1
itemId = unit.GetEquipmentItemId( Me, slot, ITEM_CONT_EQUIPMENT )
if v.rune then
--- тут руна 28-29-30 слоты - атака, защита
---myInfo = avatar.GetItemInfo( itemId )
---exObj("myRune:"..slot, myInfo.runeInfo)
---LogToChat(slot..":"..v.rune.runeLevel)
if slot <31 then
--- это атакующие
runeAtt = runeAtt + v.rune.runeLevel
else
runeDef = runeDef + v.rune.runeLevel
end
else
--- тут обычная шмотка
mySts = itemId and avatar.GetItemBonus( itemId )
--innateStats.8.sysName="ENUM_IS_Intuition"
--innateStats.1.base=10
--innateStats.1.effective=10
--misc.armorBonus=95
--misc.spellPower
--resistances.1.sysName="ENUM_EDIVINE"
--resistances.0.base=15
--resistances.0.effective=15
--- по всем характеристикам одежки
mySts1 = mySts and mySts.innateStats
val = 0
for i, vv in v.innateStats do
stsSum = stsSum + vv.base
val = val + vv.base - (mySts1 and mySts1  .base or 0)
local indx = i + 1 --- 0й индекс не сортируется
if not stsInn [indx]  then stsInn [indx]  = { name = string.sub (vv.sysName, 9), val = 0 } end
stsInn [indx] .val = stsInn [indx] .val + vv.base
end
stsAll = stsAll + val
val = 0
mySts1 = mySts and mySts.resistances
for i, vv in v.resistances do
rstSum = rstSum + vv.base
val = val + vv.base - (mySts1 and mySts1  .base or 0)
end
rstAll = rstAll + val

---LogInfo(slot," targ:",v.misc.armor,"|",v.misc.armorBonus," my:",mySts.misc.armor,"|",mySts.misc.armorBonus)
armSum = armSum + v.misc.armor
armAll = armAll + v.misc.armor - (mySts and mySts.misc.armor or 0)
end
else
--- тут поля timer
end
end
if cnt > 0 then
stsAll = math.floor(stsAll/cnt)
rstAll = math.floor(rstAll/cnt)
armAll = math.floor(armAll/cnt)
table.sort( stsInn, function( a, B) return a.val > b.val end )
end
---if runeAtt > 0 then runeAtt = math.round(runeAtt * 3.333 ) end
---if runeDef > 0 then runeAtt = math.round(runeAtt * 3.333 ) end
return stsAll, rstAll, armAll, stsSum, rstSum, armSum, runeAtt, runeDef, stsInn
end

local tryToInspectON
----"EVENT_INSPECT_STARTED"] = function(pars)
--- тут надо пока в цели юнит содрать с него всю инфо по одетости и запонмить ее
local function Inspect(unitId, dressed)
local dress = dressed or {}

-- [[ -- пашет! - драконий облик:
for slot, id in unit.GetEquipmentItemIds(unitId,ITEM_CONT_EQUIPMENT_RITUAL  ) do
--- ITEM_CONT_INVENTORY - не пашет
LogInfo( slot, ":", id)
end
--] ]

local info
for slot, id in unit.GetEquipmentItemIds(unitId,ITEM_CONT_EQUIPMENT) do
info =  avatar.GetItemInfo( id )
---exObj("info",info)
if info and info.runeInfo then
--- это руна - она без бонусов
---exObj("bonus",avatar.GetItemBonus(id))
dress [slot]  = { rune = info.runeInfo }
---elseif info and FromWS(info.name) then
-- [[elseif info.sysClassName="Shield" then
dress[slot]  = avatar.GetItemBonus(id)
dress [slot]  = --]]
else
---exObj("info",info)
dress [slot]  = avatar.GetItemBonus(id)
end
end

if tryToInspectON then
--- если это аддон инициировал то закончим
avatar.EndInspect()
tryToInspectON = nil
end
---avatar.UnselectTarget()
---exObj("dress", dress)
return dress

end

onEvent.EVENT_INSPECT_STARTED = function( pars )
local id = pars.id or avatar.GetInspectInfo().playerId
if id and object.IsExist(id) then
local name = FromWS( object.GetName(id) )
local uSts = { info = Inspect(id, unitStats [id] ) }
unitStats [ name ]  = uSts
uSts.timer = getPS("InspectStatsTimer") or 3
uSts.sts, uSts.rst, uSts.arm, uSts.stsSum, uSts.rstSum, uSts.armSum, uSts.runeAtt, uSts.runeDef, uSts.innate = calcStats(unitStats [name] .info)
--- инспекция тех кто далеко - своих согрупников!
if not (EN [id]  or FR [id] ) then onSpawned( { unitId = id } ) end
---LogToChat( name .. " - "..uSts.sts ..":".. uSts.rst.. " ="..uSts.arm )
myTargStatsShow( uSts )
myTargKillsShow( EN [id]  or FR [id]  )
--exObj("EN",EN [id]  or FR [id] )
--exObj("inf",getAllInfo( id ) )

if toolTip.unitInfo and id == toolTip.unitInfo.id and toolTip.wt:IsVisible() then
toolTip.prepare()
else
local fade = getPS("myTargTTFade")
if fade and fade>0 then 
toolTip.prepare( getWTMyTargStats(), EN [id]  or FR [id] , getPS("myTargTTShift") or { dx =50, dy = 30 }, { innCount = 0 } )
toolTip.Show( true )
toolTip.Fade( fade*1000, false )
end
end

for pType, elems in List do
for i, elem in elems do
if elem.Unit and elem.Unit.id == id then
elemStatsShow(elem, pType) --- в случае если поменялись - обновим
end
end
end

end

end

function tryToInspect(name, id)
local uSts = unitStats [name] 
if uSts then return uSts end --- не каждый раз смотреть а раз в минуту примерно
tryToInspectON = true
if getVersionAO() <= 2 then avatar.StartInspect()
elseif object.IsExist(id) then avatar.StartInspect(id) -- в версии с Атолла можно всех персонажей смотреть без взятия в цель
else
tryToInspectON = nil
end
end
Link to comment
Share on other sites

о!! а тут у меня закомментирован ДО! так как он тогда был выключен

а сейчас то он всегда включен. так что для его включения пишем так:

Code:

local function getDress01(itemId)

local info = avatar.GetItemInfo( itemId )

local dressInfo

if info and info.runeInfo then

--- это руна - она без бонусов

dressInfo = { rune = info.runeInfo }

else

dressInfo = avatar.GetItemBonus(itemId)

end

return dressInfo

end

local tryToInspectON

--- тут надо пока в цели юнит содрать с него всю инфо по одетости и запонмить ее

local function Inspect(unitId, dressed)

local dress = dressed or {}

local info

-- драконий облик:

for slot, id in unit.GetEquipmentItemIds(unitId,ITEM_CONT_EQUIPMENT_RITUAL  ) do

dress [slot]  = getDress01( id )

end

for slot, id in unit.GetEquipmentItemIds(unitId,ITEM_CONT_EQUIPMENT) do

dress [slot]  = getDress01( id )

end

if tryToInspectON then

--- если это аддон инициировал то закончим

avatar.EndInspect()

tryToInspectON = nil

end

return dress

end

Link to comment
Share on other sites

Да ты чо??

Человек захотел узнать "как получить инфу про ДО шмотки одетые на перса" (типа пробовал.... "Ну нипанимаю я!"(С))

И получил(надо не надо) портянки полезных функций на все случаи жизни с не менее полезными комментариями (на будущее, а вдруг он еще чо-нибудь спросить захочет)

Я бы так не смог

Link to comment
Share on other sites

да еще тут надо слоты новые - так как они затирают данные - тоесть массив сделать так:

Code:
local dress = {  [ITEM_CONT_EQUIPMENT_RITUAL]  = {},  [ITEM_CONT_EQUIPMENT] ={} }

for slot, id in unit.GetEquipmentItemIds(unitId,ITEM_CONT_EQUIPMENT_RITUAL  ) do

dress  [ITEM_CONT_EQUIPMENT_RITUAL] [slot]   = getDress01( id )

end

for slot, id in unit.GetEquipmentItemIds(unitId,ITEM_CONT_EQUIPMENT) do

dress  [ITEM_CONT_EQUIPMENT] [slot]   = getDress01( id )

end

Link to comment
Share on other sites

сухой остаток:

Code:

local function getDress01(itemId)

local info = avatar.GetItemInfo( itemId )

local dressInfo

if info and info.runeInfo then

--- это руна - она без бонусов

dressInfo = { rune = info.runeInfo }

else

dressInfo = avatar.GetItemBonus(itemId)

end

return dressInfo

end

........................

local dress = {   [ITEM_CONT_EQUIPMENT_RITUAL]   = {},   [ITEM_CONT_EQUIPMENT]  ={} }

for slot, id in unit.GetEquipmentItemIds(unitId,ITEM_CONT_EQUIPMENT_RITUAL  ) do

dress   [ITEM_CONT_EQUIPMENT_RITUAL]   [slot]    = getDress01( id )

end

for slot, id in unit.GetEquipmentItemIds(unitId,ITEM_CONT_EQUIPMENT) do

dress   [ITEM_CONT_EQUIPMENT]   [slot]    = getDress01( id )

end

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use