khanat-code-old/code/ryzom/client/data/gamedev/syui_v3/interaction.lua

633 lines
17 KiB
Lua

-- In this file we define functions that serves for interaction windows
------------------------------------------------------------------------------------------------------------
-- create the game namespace without reseting if already created in an other file.
if (game==nil) then
game= {};
end
------------------------------------------------------------------------------------------------------------
-- called when server send an invitaion we receive a text id containing the string to display (invitor name)
function game:onTeamInvation(textID)
local ui = getUI('ui:interface:join_team_proposal');
ui.content.inside.invitor_name.textid = textID;
ui.active = true;
setTopWindow(ui);
ui:center();
ui:blink(2);
end
------------------------------------------------------------------------------------------------------------
--
function game:teamInvitationAccept()
local ui = getUI('ui:interface:join_team_proposal');
ui.active = false;
sendMsgToServer('TEAM:JOIN');
end
------------------------------------------------------------------------------------------------------------
--
function game:teamInvitationRefuse()
local ui = getUI('ui:interface:join_team_proposal');
ui.active = false;
sendMsgToServer('TEAM:JOIN_PROPOSAL_DECLINE');
end
------------------------------------------------------------------------------------------------------------
--
function game:switchChatTab(dbEntry)
local db= 'UI:SAVE:ISENABLED:' .. dbEntry;
local val= getDbProp(db);
-- switch value
if(val==0) then
setDbProp(db, 1);
else
setDbProp(db, 0);
end
end
------------------------------------------------------------------------------------------------------------
--
function game:updateEmoteMenu(prop, tooltip, tooltip_pushed, name, param)
for i=0,9 do
-- Get key shortcut
local text = i18n.get('uiTalkMemMsg0' .. i);
local key = runExpr( "getKey('talk_message','0" .. i .. "',1)" );
if (key ~= nil and key ~= '') then
key = ' @{T25}@{2F2F}(' .. key .. ')';
text = concatUCString(text, key);
end
-- if we don't do the full getUI, it doesn't work (don't understand why)
local uiQC= getUI("ui:interface:user_chat_emote_menu:quick_chat:" .. "qc" .. i);
uiQC.uc_hardtext_format= text;
end
end
------------------------------------------------------------------------------------------------------------
--
if (ui_free_chat_h == nil) then
ui_free_chat_h = {}
end
if (ui_free_chat_w == nil) then
ui_free_chat_w = {}
end
------------------------------------------------------------------------------------------------------------
--
function game:closeTellHeader(uiID)
local ui = getUI('ui:interface:' .. uiID);
-- save size
ui_free_chat_h[uiID] = ui.h;
ui_free_chat_w[uiID] = ui.w;
-- reduce window size
ui.pop_min_h = 32;
ui.h = 0;
ui.w = 216;
end
------------------------------------------------------------------------------------------------------------
--
function game:openTellHeader(uiID)
local ui = getUI('ui:interface:' .. uiID);
ui.pop_min_h = 96;
-- set size from saved values
if (ui_free_chat_h[uiID] ~= nil) then
ui.h = ui_free_chat_h[uiID];
end
if (ui_free_chat_w[uiID] ~= nil) then
ui.w = ui_free_chat_w[uiID];
end
-- set Header Color to normal values (when a tell is closed and the telled player say someone, header change to "UI:SAVE:WIN:COLORS:INFOS")
ui:setHeaderColor('UI:SAVE:WIN:COLORS:COM');
end
--/////////////////////////
--// TARGET WINDOW SETUP //
--/////////////////////////
-- local functions for tests
local function levelToForceRegion(level)
if level < 20 then
return 1
elseif level >= 250 then
return 6
else
return math.floor(level / 50) + 2
end
end
local function levelToLevelForce(level)
return math.floor(math.fmod(level, 50) * 5 / 50) + 1
end
-- tmp var for tests in local mode
local twPlayerLevel = 10
local twTargetLevel = 19
local twTargetForceRegion = levelToForceRegion(twTargetLevel)
local twTargetLevelForce = levelToLevelForce(twTargetLevel)
local twTargetPlayer = false
local twPlayerInPVPMode = false
local twTargetInPVPMode = false
-----------------------------------
local function twGetPlayerLevel()
if config.Local == 1 then
return twPlayerLevel
else
return getPlayerLevel()
end
end
-----------------------------------
local function twGetTargetLevel()
if config.Local == 1 then
return twTargetLevel
else
return getTargetLevel()
end
end
-----------------------------------
local function twGetTargetForceRegion()
if config.Local == 1 then
return twTargetForceRegion
else
return getTargetForceRegion()
end
end
-----------------------------------
local function twGetTargetLevelForce()
if config.Local == 1 then
return twTargetLevelForce
else
return getTargetLevelForce()
end
end
-----------------------------------
local function twIsTargetPlayer()
if config.Local == 1 then
return twTargetPlayer
else
return isTargetPlayer()
end
end
-----------------------------------
local function twIsPlayerInPVPMode()
if config.Local == 1 then
return twPlayerInPVPMode
else
return isPlayerInPVPMode()
end
end
-----------------------------------
local function twIsTargetInPVPMode()
if config.Local == 1 then
return twTargetInPVPMode
else
return isTargetInPVPMode()
end
end
----------------------
-- MISC local tests function
-- no selection
function twTest0()
twTargetLevel = -1
twTargetPlayer = false
game:updateTargetConsiderUI()
end
-- selection, not impossible
function twTest1()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 15
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = levelToLevelForce(twTargetLevel)
game:updateTargetConsiderUI()
end
-- selection, not impossible (limit)
function twTest2()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 20
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = levelToLevelForce(twTargetLevel)
game:updateTargetConsiderUI()
end
-- selection, impossible
function twTest3()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 21
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = levelToLevelForce(twTargetLevel)
game:updateTargetConsiderUI()
end
------ NAMED
------
-- selection, not impossible, named
function twTest4()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 15
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = 6
game:updateTargetConsiderUI()
end
-- selection, not impossible (limit), named
function twTest5()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 20
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = 6
game:updateTargetConsiderUI()
end
-- selection, impossible, named
function twTest6()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 21
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = 6
game:updateTargetConsiderUI()
end
------ BOSS
------
-- selection, not impossible, boss
function twTest7()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 15
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = 7
game:updateTargetConsiderUI()
end
-- selection, not impossible (limit), boss
function twTest8()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 20
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = 7
game:updateTargetConsiderUI()
end
-- selection, impossible, boss
function twTest9()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 21
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = 7
game:updateTargetConsiderUI()
end
------ MINI-BOSS
------
-- selection, not impossible, boss
function twTest10()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 15
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = 8
game:updateTargetConsiderUI()
end
-- selection, not impossible (limit), boss
function twTest11()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 20
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = 8
game:updateTargetConsiderUI()
end
-- selection, impossible, boss
function twTest12()
twTargetPlayer = false
twPlayerLevel = 10
twTargetLevel = 21
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = 8
game:updateTargetConsiderUI()
end
------ PLAYER SELECTION
------ 2 players, no pvp
function twTest13()
twTargetPlayer = true
twPlayerInPVPMode = false
twTargetInPVPMode = false
twPlayerLevel = 10
twTargetLevel = 15
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = levelToLevelForce(twTargetLevel)
game:updateTargetConsiderUI()
end
function twTest14()
twTargetPlayer = true
twPlayerInPVPMode = true
twTargetInPVPMode = true
twPlayerLevel = 10
twTargetLevel = 15
twTargetForceRegion = levelToForceRegion(twTargetLevel)
twTargetLevelForce = levelToLevelForce(twTargetLevel)
game:updateTargetConsiderUI()
end
------ 2 players, pvp
-- groups
function twGroup(groupSize)
for gm = 0, 7 do
if gm < groupSize then
setDbProp("SERVER:GROUP:" .. tostring(gm) .. ":PRESENT", 1)
else
setDbProp("SERVER:GROUP:" .. tostring(gm) .. ":PRESENT", 0)
end
end
end
------------------------------------------------------------------------------------------------------------
--
function game:closeWebIGBrowserHeader()
local ui = getUI('ui:interface:webig');
-- save size
ui_webig_browser_h = ui.h;
ui_webig_browser_w = ui.w;
-- reduce window size
ui.pop_min_h = 32;
ui.h = 0;
ui.w = 150;
end
------------------------------------------------------------------------------------------------------------
--
function game:openWebIGBrowserHeader()
local ui = getUI('ui:interface:webig');
ui.pop_min_h = 96;
-- set size from saved values
if (ui_webig_browser_h ~= nil) then
ui.h = ui_webig_browser_h;
end
if (ui_webig_browser_w ~= nil) then
ui.w = ui_webig_browser_w;
end
end
------------------------------------------------------------------------------------------------------------
--
------------------------------------------------------------------------------------------------------------
--#############################
--###### Syphox's modlib ######
--#############################
if (package_path_native == nil) then
package_path_native = package.path;
package.path = package.path .. ';./user/syui/?.lua';
end
function isModuleAvailable(name)
if(package.loaded[name])then
return true
else
for _, searcher in ipairs(package.searchers or package.loaders) do
local loader = searcher(name)
if(type(loader) == 'function')then
package.preload[name] = loader
return true
end
end
return false
end
end
if(isModuleAvailable("syui"))then
sy_ui = require("syui")
end
function game:showTargetPercent()
if(not sy_ui.exist())then return end
sy_ui.UpdateJauge()
sy_ui.showTargetPercent()
end
function game:newConsider()
if(not sy_ui.exist())then return end
sy_ui.newConsider()
end
function game:updateFPS()
if(not sy_ui.exist())then return end
sy_ui.updateFPS()
end
function game:sysinfo(txt, mtd)
if(not sy_ui.exist())then return end
sy_ui.sysinfo(txt, mtd)
end
function game:updateMemberCount()
if(not sy_ui.exist())then return end
sy_ui.updateMemberCount()
end
function game:updateGLinvB()
if(not sy_ui.exist())then return end
sy_ui.updateGLinvB()
end
function game:teamInviteFromGuild(uiID)
if(not sy_ui.exist())then return end
sy_ui.teamInviteFromGuild(uiID)
end
function game:invToGuild(ply)
if(not sy_ui.exist())then return end
sy_ui.invToGuild(ply)
end
function game:updateFLinvB(uiID)
if(not sy_ui.exist())then return end
sy_ui.updateFLinvB(uiID)
end
function game:teamInvite(uiID)
if(not sy_ui.exist())then return end
sy_ui.teamInvite(uiID)
end
--#############################
--######## modlib end #########
--#############################
------------------------------------------------------------------------------------------------------------
-- This function is called when a new target is selected, it should update the 'consider' widget
-- Level of the creature
-- Is its level known (not too high ...)
-- Boss/Mini-bosses/Names colored ring
function game:updateTargetConsiderUI()
--debugInfo("Updating consider widget")
local targetWindow = getUI("ui:interface:target")
--
local wgTargetSlotForce = targetWindow:find("slot_force")
local wgTargetLevel = targetWindow:find("target_level")
local wgImpossible = targetWindow:find("impossible")
local wgSlotRing = targetWindow:find("slot_ring")
local wgToolTip = targetWindow:find("target_tooltip")
local wgPvPTag = targetWindow:find("pvp_tags")
local wgHeader = targetWindow:find("header_opened")
wgTargetSlotForce.active = true
wgImpossible.active = true
-- no selection ?
if twGetTargetLevel() == -1 then
wgTargetSlotForce.active = false
wgTargetLevel.active = false
wgImpossible.active = false
wgSlotRing.active = false
if (isTargetUser() and twIsPlayerInPVPMode()) then
wgToolTip.tooltip = ""
wgPvPTag.active = true
wgHeader.h = 56;
else
wgPvPTag.active = false
wgHeader.h = 34;
wgToolTip.tooltip = i18n.get("uittConsiderTargetNoSelection")
end
return
end
local pvpMode = false
wgPvPTag.active = false
wgHeader.h = 34;
-- if the selection is a player, then both the local & targeted player must be in PVP mode for the level to be displayed
if (twIsTargetPlayer()) then
-- don't display anything ...
wgTargetSlotForce.active = false
wgTargetLevel.active = false
wgImpossible.active = false
wgSlotRing.active = false
wgToolTip.tooltip = ""
if twIsTargetInPVPMode() then
debugInfo("target in pvp")
wgPvPTag.active = true
wgHeader.h = 34; -- 56
end
return
end
-- load default code if syphox.lua is not available
if(not sy_ui.exist())then
-- depending on the number of people in the group, set the max diff for visibility between player level
-- & creature level (x 10 per member)
local maxDiffLevel = 10
if not pvpMode then
-- exception there : when "pvping", don't relate the levelof the target to the level of the group, but to thelocal
-- player only
for gm = 0, 7 do
if getDbProp("SERVER:GROUP:" .. tostring(gm) .. ":PRESENT") ~= 0 then
maxDiffLevel = maxDiffLevel + 10
end
end
end
debugInfo("Max diff level= " .. tostring(maxDiffLevel))
local impossible = (twGetTargetLevel() - twGetPlayerLevel() > maxDiffLevel)
wgSlotRing.active = false
if impossible then
-- targeted object is too hard too beat, display a skull
wgTargetLevel.active = false
wgTargetLevelText.active = wgTargetLevel.active
wgTargetLevelText.hardtext = ""
wgImpossible.y = -5
wgImpossible.color = "255 50 50 255"
else
-- player can see the level of the targeted creature
wgTargetLevel.active = true
wgTargetLevelText.active = wgTargetLevel.active
wgImpossible.y = 6
wgTargetLevel.hardtext = tostring(twGetTargetLevel())
wgImpossible.color = "255 255 255 255"
wgTargetLevel.color = getDefine("region_force_" .. tostring(levelToForceRegion(twGetTargetLevel())))
wgTargetLevelText.color = wgTargetLevel.color
wgTargetLevelText.hardtext = "LVL"
end
-- based on the 'level force', set a colored ring around the level
local levelForce = twGetTargetLevelForce()
wgTargetSlotForce.color = getDefine("region_force_" .. tostring(levelToForceRegion(twGetTargetLevel())))
wgImpossible.texture = getDefine("force_level_" .. tostring(levelForce))
wgImpossible.active = true
if levelForce < 6 then
wgToolTip.tooltip = i18n.get("uittConsiderTargetLevel")
elseif levelForce == 6 then
-- Named creature
wgImpossible.color = "117 132 126 255"
wgSlotRing.color = "117 132 126 255"
wgTargetSlotForce.color = "117 132 126 255"
wgSlotRing.texture = "consider_ring.tga"
wgToolTip.tooltip = i18n.get("uittConsiderNamedOrMiniBoss")
elseif levelForce == 7 then
-- Boss
wgImpossible.color = "156 98 65 255"
wgSlotRing.color = "156 98 65 255"
wgTargetSlotForce.color = "156 98 65 255"
wgSlotRing.texture = "consider_ring.tga"
wgToolTip.tooltip = i18n.get("uittConsiderNamedOrMiniBoss")
elseif levelForce == 8 then
-- Mini-Boss
wgImpossible.color = "213 212 9 255"
wgSlotRing.texture = "consider_ring.tga"
wgSlotRing.color = "213 212 9 255"
if isTargetNPC() then
wgTargetSlotForce.color = "255 255 255 255"
wgToolTip.tooltip = i18n.get("uittConsiderBossNpc")
else
wgTargetSlotForce.color = "213 212 9 255"
wgToolTip.tooltip = i18n.get("uittConsiderBoss")
end
end
if impossible then
wgToolTip.tooltip = concatUCString(wgToolTip.tooltip, ucstring("\n"), i18n.get("uittConsiderUnknownLevel"))
end
else
game:newConsider()
end
end