parent
5ad9a57ada
commit
fa7a46205d
File diff suppressed because it is too large
Load Diff
@ -1,433 +1,433 @@
|
||||
-- written by Syphox
|
||||
local M = {}
|
||||
|
||||
function M.exist()
|
||||
return true
|
||||
end
|
||||
|
||||
local bit32 = {}
|
||||
local logic_and = {
|
||||
[0] = { [0] = 0, 0, 0, 0},
|
||||
[1] = { [0] = 0, 1, 0, 1},
|
||||
[2] = { [0] = 0, 0, 2, 2},
|
||||
[3] = { [0] = 0, 1, 2, 3},
|
||||
}
|
||||
|
||||
local function checkint32( name, argidx, x, level )
|
||||
local n = tonumber( x )
|
||||
if not n then
|
||||
error( string.format(
|
||||
"bad argument #%d to '%s' (number expected, got %s)",
|
||||
argidx, name, type( x )
|
||||
), level + 1 )
|
||||
end
|
||||
return math.floor( n ) % 0x100000000
|
||||
end
|
||||
|
||||
local function comb( name, args, nargs, s, t )
|
||||
for i = 1, nargs do
|
||||
args[i] = checkint32( name, i, args[i], 3 )
|
||||
end
|
||||
local pow = 1
|
||||
local ret = 0
|
||||
for b = 0, 31, 2 do
|
||||
local c = s
|
||||
for i = 1, nargs do
|
||||
c = t[c][args[i] % 4]
|
||||
args[i] = math.floor( args[i] / 4 )
|
||||
end
|
||||
ret = ret + c * pow
|
||||
pow = pow * 4
|
||||
end
|
||||
return ret
|
||||
end
|
||||
function bit32.btest( ... )
|
||||
return comb( 'btest', { ... }, select( '#', ... ), 3, logic_and ) ~= 0
|
||||
end
|
||||
|
||||
|
||||
local function targetIsInSameTeam()
|
||||
if(getDbProp('UI:VARIABLES:IS_TEAM_PRESENT')~=0)then
|
||||
for i=0,7 do
|
||||
local groupEntityUID = getDbProp('SERVER:GROUP:' .. tostring(i) ..':UID')
|
||||
if(groupEntityUID == getDbProp('UI:VARIABLES:TARGET:UID'))then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local function targetIsInSameGuild()
|
||||
if(getDbProp('SERVER:GUILD:NAME')~=0)then
|
||||
local nbMember = getNbGuildMembers();
|
||||
for i=0,(nbMember-1) do
|
||||
if(getGuildMemberName(i) == getTargetName())then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local function targetIsInSameLeague()
|
||||
local targetLeague = getDbProp('SERVER:Entities:E' .. getTargetSlot() .. ':P25')
|
||||
local playerLeague = getDbProp('SERVER:Entities:E0:P25')
|
||||
if(targetLeague == playerLeague and playerLeague ~= 0)then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- no way found yet
|
||||
local function targetIsInSameOpFight()
|
||||
|
||||
end
|
||||
|
||||
-- 1=duel, 2=unk, 3=arena, 4=unk, 5=gvg (pr), 6=unk, 7=tagged(mara), 8=unk, 9=tp safezone, 10=safe zone related
|
||||
function M.checkPvPMode()
|
||||
local targetProp = getDbProp('SERVER:Entities:E' .. getTargetSlot() .. ':P23')
|
||||
local playerProp = getDbProp('SERVER:Entities:E0:P23')
|
||||
local pvp_mode = {1,3,5,7}
|
||||
for i=1,8 do
|
||||
if(bit32.btest(targetProp, 2^(i-1)) and bit32.btest(playerProp, 2^(i-1)))then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function M.PvPLogo()
|
||||
local targetProp = getDbProp('SERVER:Entities:E' .. getTargetSlot() .. ':P23')
|
||||
for i=1,8 do
|
||||
if(bit32.btest(targetProp, 2^(i-1)))then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function M.isEnemy()
|
||||
if(isTargetPlayer() and M.checkPvPMode())then
|
||||
if(targetIsInSameGuild())then
|
||||
return false
|
||||
end
|
||||
if(targetIsInSameTeam())then
|
||||
return false
|
||||
end
|
||||
if(targetIsInSameLeague())then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function TJauge(val)
|
||||
local jvalue = getDbProp("UI:VARIABLES:BARS:TARGET:" .. val) / 1.27
|
||||
if(jvalue < 0)then
|
||||
jvalue = 0
|
||||
end
|
||||
setDbProp("UI:VARIABLES:BARS:TARGET:" .. val .. "_PERCENT", math.floor(jvalue))
|
||||
end
|
||||
|
||||
function M.UpdateJauge()
|
||||
local bars = {"HP", "SAP", "STA"}
|
||||
for k,v in pairs(bars) do
|
||||
TJauge(v)
|
||||
end
|
||||
end
|
||||
|
||||
function M.teamInvite(uiID)
|
||||
runAH(nil, 'talk', 'mode=0|text=/invite '.. getUI('ui:interface:' .. uiID).title)
|
||||
end
|
||||
|
||||
function M.updateFLinvB(uiID)
|
||||
if(uiID==nil)then
|
||||
return
|
||||
end
|
||||
local tUI = getUI('ui:interface:' .. uiID .. ':header_closed:invite_button')
|
||||
if(getUI('ui:interface:' .. uiID .. ':header_closed:online').texture ~= 'w_online.tga')then
|
||||
if(tUI.texture == 'invt.tga')then
|
||||
tUI.texture = ''
|
||||
end
|
||||
else
|
||||
if(tUI.texture == '')then
|
||||
tUI.texture = 'invt.tga'
|
||||
tUI.x = -52
|
||||
tUI.y = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.invToGuild(ply)
|
||||
ply = getUI('ui:interface:add_guild'):find('edit_text').hardtext:split(">")[2]
|
||||
if(ply ~= '')then
|
||||
runAH(nil, 'talk', 'mode=0|text=/guildinvite ' .. ply)
|
||||
end
|
||||
runAH(nil, 'leave_modal', '')
|
||||
end
|
||||
|
||||
function M.teamInviteFromGuild(uiID)
|
||||
runAH(nil, 'talk', 'mode=0|text=/invite ' .. getGuildMemberName(tonumber(uiID:split(":m")[2])))
|
||||
end
|
||||
|
||||
local tGuild = 'ui:interface:guild:content:tab_guild:list_member:guild_members'
|
||||
function M.updateGLinvB()
|
||||
if(getUI('ui:interface:guild').active)then
|
||||
-- if get #id from member template, it creates too many instances and game will crash. bad coded from ryzom dev
|
||||
for v = 0, (getNbGuildMembers()-1) do
|
||||
local uiTexture = getUI(tGuild .. ":" .. tGuild .. ":m" .. v .. ':online')
|
||||
local tUI = getUI(tGuild .. ":" .. tGuild .. ":m" .. v .. ':invite_button')
|
||||
if(getUI("ui:interface:player").title ~= getUI(tGuild .. ":" .. tGuild .. ":m" .. v .. ":name").hardtext)then
|
||||
if(uiTexture.texture ~= 'w_online.tga')then
|
||||
if(tUI.texture == 'invt.tga')then
|
||||
tUI.texture = ''
|
||||
end
|
||||
else
|
||||
if(tUI.texture == '')then
|
||||
tUI.texture = 'invt.tga'
|
||||
tUI.x = -22
|
||||
tUI.y = 0
|
||||
end
|
||||
end
|
||||
else
|
||||
-- fix the invite button in guild tab, because it sometimes disappear
|
||||
-- the button appear for the player with higher grade than member
|
||||
local invB = getUI('ui:interface:guild:content:tab_guild_i:invite')
|
||||
if(getGuildMemberGrade(v) ~= 'Member')then
|
||||
if(invB.active == false)then
|
||||
invB.active = true
|
||||
end
|
||||
else
|
||||
invB.active = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.updateMemberCount()
|
||||
-- fix the new guild tab
|
||||
local mcount = getUI('ui:interface:guild:content:tab_guild_i:member_count')
|
||||
if(getUI('ui:interface:guild').active)then
|
||||
if(tonumber(mcount.hardtext) ~= getNbGuildMembers())then
|
||||
mcount.hardtext = getNbGuildMembers()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.updateFPS()
|
||||
local fpsUI = getUI('ui:interface:compass:frame:fps')
|
||||
if(fpsUI==nil)then return end;
|
||||
local fps = getDbProp('UI:VARIABLES:FPS')
|
||||
fpsUI.hardtext = fps;
|
||||
local colRGB = '255 81 81 255'
|
||||
if(fps >= 30)then
|
||||
colRGB = '155 255 81 255'
|
||||
elseif(fps >= 20)then
|
||||
colRGB = '249 255 81 255'
|
||||
end
|
||||
fpsUI.color = colRGB
|
||||
end
|
||||
|
||||
function string:split(Pattern)
|
||||
local Results = {}
|
||||
local Start = 1
|
||||
local SplitStart, SplitEnd = string.find(self, Pattern, Start)
|
||||
while(SplitStart)do
|
||||
table.insert(Results, string.sub(self, Start, SplitStart-1))
|
||||
Start = SplitEnd+1
|
||||
SplitStart, SplitEnd = string.find(self, Pattern, Start)
|
||||
end
|
||||
table.insert(Results, string.sub(self, Start))
|
||||
return Results
|
||||
end
|
||||
|
||||
function M.sysinfo(txt, mtd)
|
||||
if(mtd==nil)then mtd='SYS' end;
|
||||
displaySystemInfo(ucstring(tostring(txt)), mtd);
|
||||
end
|
||||
|
||||
function M.showTargetPercent()
|
||||
local targetUI = getUI('ui:interface:target')
|
||||
local playerUI = getUI('ui:interface:player')
|
||||
local contentUI = targetUI:find("content")
|
||||
local clawImg = targetUI:find("slot_claw")
|
||||
local targetTitle = targetUI:find("target_title")
|
||||
local playerTitle = playerUI:find("player_title")
|
||||
local wgTargetConside = targetUI:find("conside")
|
||||
local wgTargetLevel = targetUI:find("target_level")
|
||||
targetTitle.color = "255 255 255 255"
|
||||
playerTitle.color = targetTitle.color
|
||||
|
||||
if (isTargetUser() or
|
||||
(isTargetPlayer() and
|
||||
not M.isEnemy()))then
|
||||
wgTargetConside.active = false
|
||||
contentUI.h = 55
|
||||
contentUI.y = -24
|
||||
clawImg.active = false
|
||||
else
|
||||
if(not isTargetPlayer() and
|
||||
not M.checkPvPMode() and
|
||||
getTargetLevel() > 0)then
|
||||
if(clawImg.texture ~= "claw.tga")then
|
||||
clawImg.texture = "claw.tga"
|
||||
clawImg.x = 7
|
||||
clawImg.y = -6
|
||||
end
|
||||
end
|
||||
if(targetUI.title == "")then
|
||||
wgTargetConside.active = false
|
||||
clawImg.active = false
|
||||
end
|
||||
contentUI.h = 18
|
||||
contentUI.y = -26
|
||||
end
|
||||
|
||||
if(getTargetLevelForce() > 0 and
|
||||
not isTargetPlayer())then
|
||||
if(getTargetLevel() > 0)then
|
||||
--fix campfire, do not show claw
|
||||
if(tostring(getTargetSheet())~="object_campfire_28_b.creature")then
|
||||
wgTargetConside.active = true
|
||||
clawImg.active = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if(getTargetLevel() <= 0 or isTargetNPC())then
|
||||
wgTargetConside.active = false
|
||||
wgTargetLevel.active = false
|
||||
wgTargetLevel.hardtext = ""
|
||||
clawImg.active = false
|
||||
wgTargetConside.texture = "blank_n.tga"
|
||||
end
|
||||
|
||||
if((isTargetUser() or isTargetPlayer()) and M.PvPLogo())then
|
||||
if(clawImg.texture ~= "pvp.tga")then
|
||||
clawImg.texture = "pvp.tga"
|
||||
clawImg.x = 0
|
||||
clawImg.y = 5
|
||||
end
|
||||
clawImg.active = true
|
||||
wgTargetConside.active = false
|
||||
end
|
||||
end
|
||||
|
||||
function M.newConsider()
|
||||
local targetWindow = getUI("ui:interface:target")
|
||||
local clawImg = targetWindow:find("slot_claw")
|
||||
local targetTitle = targetWindow:find("target_title")
|
||||
local wgTargetLevel = targetWindow:find("target_level")
|
||||
local wgTargetConside = targetWindow:find("conside")
|
||||
local wgImpossible = targetWindow:find("impossible")
|
||||
local wgSlotRing = targetWindow:find("slot_ring")
|
||||
local wgToolTip = targetWindow:find("target_tooltip")
|
||||
local pvpMode = false
|
||||
|
||||
local maxDiffLevel = 10
|
||||
if not pvpMode then
|
||||
for gm = 0, 7 do
|
||||
if getDbProp("SERVER:GROUP:" .. tostring(gm) .. ":PRESENT") ~= 0 then
|
||||
maxDiffLevel = maxDiffLevel + 10
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local impossible = (getTargetLevel() - getPlayerLevel() > maxDiffLevel)
|
||||
|
||||
wgSlotRing.active = false
|
||||
wgTargetConside.active = false
|
||||
wgImpossible.active = false
|
||||
wgTargetConside.texture = "blank_n.tga"
|
||||
|
||||
if impossible then
|
||||
-- targeted object is too hard too beat, display a skull
|
||||
wgTargetLevel.active = false
|
||||
wgTargetConside.active = false
|
||||
wgImpossible.texture = "skull_imp.tga"
|
||||
clawImg.active = false
|
||||
wgImpossible.active = true
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
--wgImpossible.color = "255 50 50 255"
|
||||
wgTargetLevel.hardtext = ""
|
||||
else
|
||||
--fix campfire, do not show, claw, lvl and consider
|
||||
if(tostring(getTargetSheet())=="object_campfire_28_b.creature")then
|
||||
wgTargetConside.active = false
|
||||
wgTargetLevel.active = false
|
||||
wgTargetLevel.hardtext = ""
|
||||
clawImg.active = false
|
||||
wgTargetConside.texture = "blank_n.tga"
|
||||
return
|
||||
end
|
||||
-- player can see the level of the targeted creature, but not from NPC's
|
||||
if(not isTargetNPC())then
|
||||
wgTargetLevel.active = true
|
||||
wgTargetConside.active = true
|
||||
wgImpossible.active = false
|
||||
wgImpossible.texture = "blank_n.tga"
|
||||
|
||||
wgTargetLevel.hardtext = tostring(getTargetLevel())
|
||||
wgTargetLevel.color = "255 255 255 255"
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
end
|
||||
|
||||
local image={ 'b1', 'b2', 'b3', 'b4', 'b5', 'g1', 'g2', 'g3', 'g4', 'g5', 'ge1', 'ge2', 'ge3', 'ge4', 'ge5', 'r1', 'r2', 'r3', 'r4', 'r5', 'l1', 'l2', 'l3', 'l4', 'l5', 'l5', 'l5' }
|
||||
|
||||
if(getTargetLevel()<10)then
|
||||
wgTargetConside.texture = 'consider_gr.tga'
|
||||
end
|
||||
|
||||
for k,v in pairs(image) do
|
||||
if(getTargetLevel()>=tonumber(k .. 0))then
|
||||
wgTargetConside.texture = 'consider_' .. v .. '.tga'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- based on the 'level force', set a colored ring around the level
|
||||
local levelForce = getTargetLevelForce()
|
||||
|
||||
wgImpossible.active = true
|
||||
if levelForce < 6 then
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderTargetLevel")
|
||||
elseif levelForce == 6 then
|
||||
-- Named creature
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
--wgImpossible.color = "191 225 254 255"
|
||||
wgImpossible.texture = "skull_imp.tga"
|
||||
wgImpossible.active = true
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderNamedOrMiniBoss")
|
||||
wgTargetLevel.hardtext = ""
|
||||
elseif levelForce == 7 then
|
||||
-- Boss
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
--wgImpossible.color = "222 191 254 255"
|
||||
wgImpossible.texture = "skull_imp.tga"
|
||||
wgImpossible.active = true
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderNamedOrMiniBoss")
|
||||
wgTargetLevel.hardtext = ""
|
||||
elseif levelForce == 8 then
|
||||
-- Mini-Boss
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
--wgImpossible.color = "254 191 191 255"
|
||||
wgImpossible.texture = "skull_imp.tga"
|
||||
wgImpossible.active = true
|
||||
wgTargetLevel.hardtext = ""
|
||||
wgTargetConside.active = false
|
||||
if isTargetNPC() then
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderBossNpc")
|
||||
else
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderBoss")
|
||||
end
|
||||
end
|
||||
|
||||
if impossible then
|
||||
wgToolTip.tooltip = concatUCString(wgToolTip.tooltip, ucstring("\n"), i18n.get("uittConsiderUnknownLevel"))
|
||||
end
|
||||
end
|
||||
|
||||
-- written by Syphox
|
||||
local M = {}
|
||||
|
||||
function M.exist()
|
||||
return true
|
||||
end
|
||||
|
||||
local bit32 = {}
|
||||
local logic_and = {
|
||||
[0] = { [0] = 0, 0, 0, 0},
|
||||
[1] = { [0] = 0, 1, 0, 1},
|
||||
[2] = { [0] = 0, 0, 2, 2},
|
||||
[3] = { [0] = 0, 1, 2, 3},
|
||||
}
|
||||
|
||||
local function checkint32( name, argidx, x, level )
|
||||
local n = tonumber( x )
|
||||
if not n then
|
||||
error( string.format(
|
||||
"bad argument #%d to '%s' (number expected, got %s)",
|
||||
argidx, name, type( x )
|
||||
), level + 1 )
|
||||
end
|
||||
return math.floor( n ) % 0x100000000
|
||||
end
|
||||
|
||||
local function comb( name, args, nargs, s, t )
|
||||
for i = 1, nargs do
|
||||
args[i] = checkint32( name, i, args[i], 3 )
|
||||
end
|
||||
local pow = 1
|
||||
local ret = 0
|
||||
for b = 0, 31, 2 do
|
||||
local c = s
|
||||
for i = 1, nargs do
|
||||
c = t[c][args[i] % 4]
|
||||
args[i] = math.floor( args[i] / 4 )
|
||||
end
|
||||
ret = ret + c * pow
|
||||
pow = pow * 4
|
||||
end
|
||||
return ret
|
||||
end
|
||||
function bit32.btest( ... )
|
||||
return comb( 'btest', { ... }, select( '#', ... ), 3, logic_and ) ~= 0
|
||||
end
|
||||
|
||||
|
||||
local function targetIsInSameTeam()
|
||||
if(getDbProp('UI:VARIABLES:IS_TEAM_PRESENT')~=0)then
|
||||
for i=0,7 do
|
||||
local groupEntityUID = getDbProp('SERVER:GROUP:' .. tostring(i) ..':UID')
|
||||
if(groupEntityUID == getDbProp('UI:VARIABLES:TARGET:UID'))then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local function targetIsInSameGuild()
|
||||
if(getDbProp('SERVER:GUILD:NAME')~=0)then
|
||||
local nbMember = getNbGuildMembers();
|
||||
for i=0,(nbMember-1) do
|
||||
if(getGuildMemberName(i) == getTargetName())then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local function targetIsInSameLeague()
|
||||
local targetLeague = getDbProp('SERVER:Entities:E' .. getTargetSlot() .. ':P25')
|
||||
local playerLeague = getDbProp('SERVER:Entities:E0:P25')
|
||||
if(targetLeague == playerLeague and playerLeague ~= 0)then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- no way found yet
|
||||
local function targetIsInSameOpFight()
|
||||
|
||||
end
|
||||
|
||||
-- 1=duel, 2=unk, 3=arena, 4=unk, 5=gvg (pr), 6=unk, 7=tagged(mara), 8=unk, 9=tp safezone, 10=safe zone related
|
||||
function M.checkPvPMode()
|
||||
local targetProp = getDbProp('SERVER:Entities:E' .. getTargetSlot() .. ':P23')
|
||||
local playerProp = getDbProp('SERVER:Entities:E0:P23')
|
||||
local pvp_mode = {1,3,5,7}
|
||||
for i=1,8 do
|
||||
if(bit32.btest(targetProp, 2^(i-1)) and bit32.btest(playerProp, 2^(i-1)))then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function M.PvPLogo()
|
||||
local targetProp = getDbProp('SERVER:Entities:E' .. getTargetSlot() .. ':P23')
|
||||
for i=1,8 do
|
||||
if(bit32.btest(targetProp, 2^(i-1)))then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function M.isEnemy()
|
||||
if(isTargetPlayer() and M.checkPvPMode())then
|
||||
if(targetIsInSameGuild())then
|
||||
return false
|
||||
end
|
||||
if(targetIsInSameTeam())then
|
||||
return false
|
||||
end
|
||||
if(targetIsInSameLeague())then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function TJauge(val)
|
||||
local jvalue = getDbProp("UI:VARIABLES:BARS:TARGET:" .. val) / 1.27
|
||||
if(jvalue < 0)then
|
||||
jvalue = 0
|
||||
end
|
||||
setDbProp("UI:VARIABLES:BARS:TARGET:" .. val .. "_PERCENT", math.floor(jvalue))
|
||||
end
|
||||
|
||||
function M.UpdateJauge()
|
||||
local bars = {"HP", "SAP", "STA"}
|
||||
for k,v in pairs(bars) do
|
||||
TJauge(v)
|
||||
end
|
||||
end
|
||||
|
||||
function M.teamInvite(uiID)
|
||||
runAH(nil, 'talk', 'mode=0|text=/invite '.. getUI('ui:interface:' .. uiID).title)
|
||||
end
|
||||
|
||||
function M.updateFLinvB(uiID)
|
||||
if(uiID==nil)then
|
||||
return
|
||||
end
|
||||
local tUI = getUI('ui:interface:' .. uiID .. ':header_closed:invite_button')
|
||||
if(getUI('ui:interface:' .. uiID .. ':header_closed:online').texture ~= 'w_online.tga')then
|
||||
if(tUI.texture == 'invt.tga')then
|
||||
tUI.texture = ''
|
||||
end
|
||||
else
|
||||
if(tUI.texture == '')then
|
||||
tUI.texture = 'invt.tga'
|
||||
tUI.x = -52
|
||||
tUI.y = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.invToGuild(ply)
|
||||
ply = getUI('ui:interface:add_guild'):find('edit_text').hardtext:split(">")[2]
|
||||
if(ply ~= '')then
|
||||
runAH(nil, 'talk', 'mode=0|text=/guildinvite ' .. ply)
|
||||
end
|
||||
runAH(nil, 'leave_modal', '')
|
||||
end
|
||||
|
||||
function M.teamInviteFromGuild(uiID)
|
||||
runAH(nil, 'talk', 'mode=0|text=/invite ' .. getGuildMemberName(tonumber(uiID:split(":m")[2])))
|
||||
end
|
||||
|
||||
local tGuild = 'ui:interface:guild:content:tab_guild:list_member:guild_members'
|
||||
function M.updateGLinvB()
|
||||
if(getUI('ui:interface:guild').active)then
|
||||
-- if get #id from member template, it creates too many instances and game will crash. bad coded from ryzom dev
|
||||
for v = 0, (getNbGuildMembers()-1) do
|
||||
local uiTexture = getUI(tGuild .. ":" .. tGuild .. ":m" .. v .. ':online')
|
||||
local tUI = getUI(tGuild .. ":" .. tGuild .. ":m" .. v .. ':invite_button')
|
||||
if(getUI("ui:interface:player").title ~= getUI(tGuild .. ":" .. tGuild .. ":m" .. v .. ":name").hardtext)then
|
||||
if(uiTexture.texture ~= 'w_online.tga')then
|
||||
if(tUI.texture == 'invt.tga')then
|
||||
tUI.texture = ''
|
||||
end
|
||||
else
|
||||
if(tUI.texture == '')then
|
||||
tUI.texture = 'invt.tga'
|
||||
tUI.x = -22
|
||||
tUI.y = 0
|
||||
end
|
||||
end
|
||||
else
|
||||
-- fix the invite button in guild tab, because it sometimes disappear
|
||||
-- the button appear for the player with higher grade than member
|
||||
local invB = getUI('ui:interface:guild:content:tab_guild_i:invite')
|
||||
if(getGuildMemberGrade(v) ~= 'Member')then
|
||||
if(invB.active == false)then
|
||||
invB.active = true
|
||||
end
|
||||
else
|
||||
invB.active = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.updateMemberCount()
|
||||
-- fix the new guild tab
|
||||
local mcount = getUI('ui:interface:guild:content:tab_guild_i:member_count')
|
||||
if(getUI('ui:interface:guild').active)then
|
||||
if(tonumber(mcount.hardtext) ~= getNbGuildMembers())then
|
||||
mcount.hardtext = getNbGuildMembers()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function M.updateFPS()
|
||||
local fpsUI = getUI('ui:interface:compass:frame:fps')
|
||||
if(fpsUI==nil)then return end;
|
||||
local fps = getDbProp('UI:VARIABLES:FPS')
|
||||
fpsUI.hardtext = fps;
|
||||
local colRGB = '255 81 81 255'
|
||||
if(fps >= 30)then
|
||||
colRGB = '155 255 81 255'
|
||||
elseif(fps >= 20)then
|
||||
colRGB = '249 255 81 255'
|
||||
end
|
||||
fpsUI.color = colRGB
|
||||
end
|
||||
|
||||
function string:split(Pattern)
|
||||
local Results = {}
|
||||
local Start = 1
|
||||
local SplitStart, SplitEnd = string.find(self, Pattern, Start)
|
||||
while(SplitStart)do
|
||||
table.insert(Results, string.sub(self, Start, SplitStart-1))
|
||||
Start = SplitEnd+1
|
||||
SplitStart, SplitEnd = string.find(self, Pattern, Start)
|
||||
end
|
||||
table.insert(Results, string.sub(self, Start))
|
||||
return Results
|
||||
end
|
||||
|
||||
function M.sysinfo(txt, mtd)
|
||||
if(mtd==nil)then mtd='SYS' end;
|
||||
displaySystemInfo(ucstring(tostring(txt)), mtd);
|
||||
end
|
||||
|
||||
function M.showTargetPercent()
|
||||
local targetUI = getUI('ui:interface:target')
|
||||
local playerUI = getUI('ui:interface:player')
|
||||
local contentUI = targetUI:find("content")
|
||||
local clawImg = targetUI:find("slot_claw")
|
||||
local targetTitle = targetUI:find("target_title")
|
||||
local playerTitle = playerUI:find("player_title")
|
||||
local wgTargetConside = targetUI:find("conside")
|
||||
local wgTargetLevel = targetUI:find("target_level")
|
||||
targetTitle.color = "255 255 255 255"
|
||||
playerTitle.color = targetTitle.color
|
||||
|
||||
if (isTargetUser() or
|
||||
(isTargetPlayer() and
|
||||
not M.isEnemy()))then
|
||||
wgTargetConside.active = false
|
||||
contentUI.h = 55
|
||||
contentUI.y = -24
|
||||
clawImg.active = false
|
||||
else
|
||||
if(not isTargetPlayer() and
|
||||
not M.checkPvPMode() and
|
||||
getTargetLevel() > 0)then
|
||||
if(clawImg.texture ~= "claw.tga")then
|
||||
clawImg.texture = "claw.tga"
|
||||
clawImg.x = 7
|
||||
clawImg.y = -6
|
||||
end
|
||||
end
|
||||
if(targetUI.title == "")then
|
||||
wgTargetConside.active = false
|
||||
clawImg.active = false
|
||||
end
|
||||
contentUI.h = 18
|
||||
contentUI.y = -26
|
||||
end
|
||||
|
||||
if(getTargetLevelForce() > 0 and
|
||||
not isTargetPlayer())then
|
||||
if(getTargetLevel() > 0)then
|
||||
--fix campfire, do not show claw
|
||||
if(tostring(getTargetSheet())~="object_campfire_28_b.creature")then
|
||||
wgTargetConside.active = true
|
||||
clawImg.active = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if(getTargetLevel() <= 0 or isTargetNPC())then
|
||||
wgTargetConside.active = false
|
||||
wgTargetLevel.active = false
|
||||
wgTargetLevel.hardtext = ""
|
||||
clawImg.active = false
|
||||
wgTargetConside.texture = "blank_n.tga"
|
||||
end
|
||||
|
||||
if((isTargetUser() or isTargetPlayer()) and M.PvPLogo())then
|
||||
if(clawImg.texture ~= "pvp.tga")then
|
||||
clawImg.texture = "pvp.tga"
|
||||
clawImg.x = 0
|
||||
clawImg.y = 5
|
||||
end
|
||||
clawImg.active = true
|
||||
wgTargetConside.active = false
|
||||
end
|
||||
end
|
||||
|
||||
function M.newConsider()
|
||||
local targetWindow = getUI("ui:interface:target")
|
||||
local clawImg = targetWindow:find("slot_claw")
|
||||
local targetTitle = targetWindow:find("target_title")
|
||||
local wgTargetLevel = targetWindow:find("target_level")
|
||||
local wgTargetConside = targetWindow:find("conside")
|
||||
local wgImpossible = targetWindow:find("impossible")
|
||||
local wgSlotRing = targetWindow:find("slot_ring")
|
||||
local wgToolTip = targetWindow:find("target_tooltip")
|
||||
local pvpMode = false
|
||||
|
||||
local maxDiffLevel = 10
|
||||
if not pvpMode then
|
||||
for gm = 0, 7 do
|
||||
if getDbProp("SERVER:GROUP:" .. tostring(gm) .. ":PRESENT") ~= 0 then
|
||||
maxDiffLevel = maxDiffLevel + 10
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local impossible = (getTargetLevel() - getPlayerLevel() > maxDiffLevel)
|
||||
|
||||
wgSlotRing.active = false
|
||||
wgTargetConside.active = false
|
||||
wgImpossible.active = false
|
||||
wgTargetConside.texture = "blank_n.tga"
|
||||
|
||||
if impossible then
|
||||
-- targeted object is too hard too beat, display a skull
|
||||
wgTargetLevel.active = false
|
||||
wgTargetConside.active = false
|
||||
wgImpossible.texture = "skull_imp.tga"
|
||||
clawImg.active = false
|
||||
wgImpossible.active = true
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
--wgImpossible.color = "255 50 50 255"
|
||||
wgTargetLevel.hardtext = ""
|
||||
else
|
||||
--fix campfire, do not show, claw, lvl and consider
|
||||
if(tostring(getTargetSheet())=="object_campfire_28_b.creature")then
|
||||
wgTargetConside.active = false
|
||||
wgTargetLevel.active = false
|
||||
wgTargetLevel.hardtext = ""
|
||||
clawImg.active = false
|
||||
wgTargetConside.texture = "blank_n.tga"
|
||||
return
|
||||
end
|
||||
-- player can see the level of the targeted creature, but not from NPC's
|
||||
if(not isTargetNPC())then
|
||||
wgTargetLevel.active = true
|
||||
wgTargetConside.active = true
|
||||
wgImpossible.active = false
|
||||
wgImpossible.texture = "blank_n.tga"
|
||||
|
||||
wgTargetLevel.hardtext = tostring(getTargetLevel())
|
||||
wgTargetLevel.color = "255 255 255 255"
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
end
|
||||
|
||||
local image={ 'b1', 'b2', 'b3', 'b4', 'b5', 'g1', 'g2', 'g3', 'g4', 'g5', 'ge1', 'ge2', 'ge3', 'ge4', 'ge5', 'r1', 'r2', 'r3', 'r4', 'r5', 'l1', 'l2', 'l3', 'l4', 'l5', 'l5', 'l5' }
|
||||
|
||||
if(getTargetLevel()<10)then
|
||||
wgTargetConside.texture = 'consider_gr.tga'
|
||||
end
|
||||
|
||||
for k,v in pairs(image) do
|
||||
if(getTargetLevel()>=tonumber(k .. 0))then
|
||||
wgTargetConside.texture = 'consider_' .. v .. '.tga'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- based on the 'level force', set a colored ring around the level
|
||||
local levelForce = getTargetLevelForce()
|
||||
|
||||
wgImpossible.active = true
|
||||
if levelForce < 6 then
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderTargetLevel")
|
||||
elseif levelForce == 6 then
|
||||
-- Named creature
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
--wgImpossible.color = "191 225 254 255"
|
||||
wgImpossible.texture = "skull_imp.tga"
|
||||
wgImpossible.active = true
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderNamedOrMiniBoss")
|
||||
wgTargetLevel.hardtext = ""
|
||||
elseif levelForce == 7 then
|
||||
-- Boss
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
--wgImpossible.color = "222 191 254 255"
|
||||
wgImpossible.texture = "skull_imp.tga"
|
||||
wgImpossible.active = true
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderNamedOrMiniBoss")
|
||||
wgTargetLevel.hardtext = ""
|
||||
elseif levelForce == 8 then
|
||||
-- Mini-Boss
|
||||
wgImpossible.color = "255 255 255 255"
|
||||
--wgImpossible.color = "254 191 191 255"
|
||||
wgImpossible.texture = "skull_imp.tga"
|
||||
wgImpossible.active = true
|
||||
wgTargetLevel.hardtext = ""
|
||||
wgTargetConside.active = false
|
||||
if isTargetNPC() then
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderBossNpc")
|
||||
else
|
||||
wgToolTip.tooltip = i18n.get("uittConsiderBoss")
|
||||
end
|
||||
end
|
||||
|
||||
if impossible then
|
||||
wgToolTip.tooltip = concatUCString(wgToolTip.tooltip, ucstring("\n"), i18n.get("uittConsiderUnknownLevel"))
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
Loading…
Reference in New Issue