283 lines
7.8 KiB
Lua
283 lines
7.8 KiB
Lua
combatControlsButton = nil
|
|
combatControlsWindow = nil
|
|
fightOffensiveBox = nil
|
|
fightBalancedBox = nil
|
|
fightDefensiveBox = nil
|
|
chaseModeButton = nil
|
|
safeFightButton = nil
|
|
whiteDoveBox = nil
|
|
whiteHandBox = nil
|
|
yellowHandBox = nil
|
|
redFistBox = nil
|
|
mountButton = nil
|
|
pvpModesPanel = nil
|
|
fightModeRadioGroup = nil
|
|
pvpModeRadioGroup = nil
|
|
|
|
function init()
|
|
combatControlsButton = modules.client_topmenu.addRightGameToggleButton('combatControlsButton', tr('Combat Controls'), '/images/topbuttons/combatcontrols', toggle)
|
|
combatControlsButton:setOn(true)
|
|
combatControlsWindow = g_ui.loadUI('combatcontrols', modules.game_interface.getRightPanel())
|
|
combatControlsWindow:disableResize()
|
|
|
|
fightOffensiveBox = combatControlsWindow:recursiveGetChildById('fightOffensiveBox')
|
|
fightBalancedBox = combatControlsWindow:recursiveGetChildById('fightBalancedBox')
|
|
fightDefensiveBox = combatControlsWindow:recursiveGetChildById('fightDefensiveBox')
|
|
|
|
chaseModeButton = combatControlsWindow:recursiveGetChildById('chaseModeBox')
|
|
safeFightButton = combatControlsWindow:recursiveGetChildById('safeFightBox')
|
|
|
|
mountButton = combatControlsWindow:recursiveGetChildById('mountButton')
|
|
mountButton.onClick = onMountButtonClick
|
|
|
|
pvpModesPanel = combatControlsWindow:recursiveGetChildById('pvpModesPanel')
|
|
|
|
whiteDoveBox = combatControlsWindow:recursiveGetChildById('whiteDoveBox')
|
|
whiteHandBox = combatControlsWindow:recursiveGetChildById('whiteHandBox')
|
|
yellowHandBox = combatControlsWindow:recursiveGetChildById('yellowHandBox')
|
|
redFistBox = combatControlsWindow:recursiveGetChildById('redFistBox')
|
|
|
|
fightModeRadioGroup = UIRadioGroup.create()
|
|
fightModeRadioGroup:addWidget(fightOffensiveBox)
|
|
fightModeRadioGroup:addWidget(fightBalancedBox)
|
|
fightModeRadioGroup:addWidget(fightDefensiveBox)
|
|
|
|
pvpModeRadioGroup = UIRadioGroup.create()
|
|
pvpModeRadioGroup:addWidget(whiteDoveBox)
|
|
pvpModeRadioGroup:addWidget(whiteHandBox)
|
|
pvpModeRadioGroup:addWidget(yellowHandBox)
|
|
pvpModeRadioGroup:addWidget(redFistBox)
|
|
|
|
connect(fightModeRadioGroup, { onSelectionChange = onSetFightMode })
|
|
connect(pvpModeRadioGroup, { onSelectionChange = onSetPVPMode })
|
|
connect(chaseModeButton, { onCheckChange = onSetChaseMode })
|
|
connect(safeFightButton, { onCheckChange = onSetSafeFight })
|
|
connect(g_game, {
|
|
onGameStart = online,
|
|
onGameEnd = offline,
|
|
onFightModeChange = update,
|
|
onChaseModeChange = update,
|
|
onSafeFightChange = update,
|
|
onPVPModeChange = update,
|
|
onWalk = check,
|
|
onAutoWalk = check
|
|
})
|
|
|
|
connect(LocalPlayer, { onOutfitChange = onOutfitChange })
|
|
|
|
if g_game.isOnline() then
|
|
online()
|
|
end
|
|
|
|
combatControlsWindow:setup()
|
|
end
|
|
|
|
function terminate()
|
|
if g_game.isOnline() then
|
|
offline()
|
|
end
|
|
|
|
fightModeRadioGroup:destroy()
|
|
pvpModeRadioGroup:destroy()
|
|
combatControlsWindow:destroy()
|
|
combatControlsButton:destroy()
|
|
|
|
disconnect(g_game, {
|
|
onGameStart = online,
|
|
onGameEnd = offline,
|
|
onFightModeChange = update,
|
|
onChaseModeChange = update,
|
|
onSafeFightChange = update,
|
|
onPVPModeChange = update,
|
|
onWalk = check,
|
|
onAutoWalk = check
|
|
})
|
|
|
|
disconnect(LocalPlayer, { onOutfitChange = onOutfitChange })
|
|
end
|
|
|
|
function update()
|
|
local fightMode = g_game.getFightMode()
|
|
if fightMode == FightOffensive then
|
|
fightModeRadioGroup:selectWidget(fightOffensiveBox)
|
|
elseif fightMode == FightBalanced then
|
|
fightModeRadioGroup:selectWidget(fightBalancedBox)
|
|
else
|
|
fightModeRadioGroup:selectWidget(fightDefensiveBox)
|
|
end
|
|
|
|
local chaseMode = g_game.getChaseMode()
|
|
chaseModeButton:setChecked(chaseMode == ChaseOpponent)
|
|
|
|
local safeFight = g_game.isSafeFight()
|
|
safeFightButton:setChecked(not safeFight)
|
|
|
|
if g_game.getFeature(GamePVPMode) then
|
|
local pvpMode = g_game.getPVPMode()
|
|
local pvpWidget = getPVPBoxByMode(pvpMode)
|
|
if pvpWidget then
|
|
pvpModeRadioGroup:selectWidget(pvpWidget)
|
|
end
|
|
end
|
|
end
|
|
|
|
function check()
|
|
if modules.client_options.getOption('autoChaseOverride') then
|
|
if g_game.isAttacking() and g_game.getChaseMode() == ChaseOpponent then
|
|
g_game.setChaseMode(DontChase)
|
|
end
|
|
end
|
|
end
|
|
|
|
function online()
|
|
local player = g_game.getLocalPlayer()
|
|
if player then
|
|
local char = g_game.getCharacterName()
|
|
|
|
local lastCombatControls = g_settings:getNode('LastCombatControls')
|
|
|
|
if not table.empty(lastCombatControls) then
|
|
if lastCombatControls[char] then
|
|
g_game.setFightMode(lastCombatControls[char].fightMode)
|
|
g_game.setChaseMode(lastCombatControls[char].chaseMode)
|
|
g_game.setSafeFight(lastCombatControls[char].safeFight)
|
|
if lastCombatControls[char].pvpMode then
|
|
g_game.setPVPMode(lastCombatControls[char].pvpMode)
|
|
end
|
|
end
|
|
end
|
|
|
|
if g_game.getFeature(GamePlayerMounts) then
|
|
mountButton:setVisible(true)
|
|
mountButton:setChecked(player:isMounted())
|
|
else
|
|
mountButton:setVisible(false)
|
|
end
|
|
|
|
if g_game.getFeature(GamePVPMode) then
|
|
pvpModesPanel:setVisible(true)
|
|
combatControlsWindow:setHeight(combatControlsWindow.extendedControlsHeight)
|
|
else
|
|
pvpModesPanel:setVisible(false)
|
|
combatControlsWindow:setHeight(combatControlsWindow.simpleControlsHeight)
|
|
end
|
|
end
|
|
|
|
update()
|
|
end
|
|
|
|
function offline()
|
|
local lastCombatControls = g_settings:getNode('LastCombatControls')
|
|
if not lastCombatControls then
|
|
lastCombatControls = {}
|
|
end
|
|
|
|
local player = g_game.getLocalPlayer()
|
|
if player then
|
|
local char = g_game.getCharacterName()
|
|
lastCombatControls[char] = {
|
|
fightMode = g_game.getFightMode(),
|
|
chaseMode = g_game.getChaseMode(),
|
|
safeFight = g_game.isSafeFight()
|
|
}
|
|
|
|
if g_game.getFeature(GamePVPMode) then
|
|
lastCombatControls[char].pvpMode = g_game.getPVPMode()
|
|
end
|
|
|
|
-- save last combat control settings
|
|
g_settings:setNode('LastCombatControls', lastCombatControls)
|
|
end
|
|
end
|
|
|
|
function toggle()
|
|
if combatControlsButton:isOn() then
|
|
combatControlsWindow:close()
|
|
combatControlsButton:setOn(false)
|
|
else
|
|
combatControlsWindow:open()
|
|
combatControlsButton:setOn(true)
|
|
end
|
|
end
|
|
|
|
function onSetFightMode(self, selectedFightButton)
|
|
if selectedFightButton == nil then return end
|
|
local buttonId = selectedFightButton:getId()
|
|
local fightMode
|
|
if buttonId == 'fightOffensiveBox' then
|
|
fightMode = FightOffensive
|
|
elseif buttonId == 'fightBalancedBox' then
|
|
fightMode = FightBalanced
|
|
else
|
|
fightMode = FightDefensive
|
|
end
|
|
g_game.setFightMode(fightMode)
|
|
end
|
|
|
|
function onSetChaseMode(self, checked)
|
|
local chaseMode
|
|
if checked then
|
|
chaseMode = ChaseOpponent
|
|
else
|
|
chaseMode = DontChase
|
|
end
|
|
g_game.setChaseMode(chaseMode)
|
|
end
|
|
|
|
function onSetSafeFight(self, checked)
|
|
g_game.setSafeFight(not checked)
|
|
end
|
|
|
|
function onSetPVPMode(self, selectedPVPButton)
|
|
if selectedPVPButton == nil then
|
|
return
|
|
end
|
|
|
|
local buttonId = selectedPVPButton:getId()
|
|
local pvpMode = PVPWhiteDove
|
|
if buttonId == 'whiteDoveBox' then
|
|
pvpMode = PVPWhiteDove
|
|
elseif buttonId == 'whiteHandBox' then
|
|
pvpMode = PVPWhiteHand
|
|
elseif buttonId == 'yellowHandBox' then
|
|
pvpMode = PVPYellowHand
|
|
elseif buttonId == 'redFistBox' then
|
|
pvpMode = PVPRedFist
|
|
end
|
|
|
|
g_game.setPVPMode(pvpMode)
|
|
end
|
|
|
|
function onMiniWindowClose()
|
|
combatControlsButton:setOn(false)
|
|
end
|
|
|
|
function onMountButtonClick(self, mousePos)
|
|
local player = g_game.getLocalPlayer()
|
|
if player then
|
|
player:toggleMount()
|
|
end
|
|
end
|
|
|
|
function onOutfitChange(localPlayer, outfit, oldOutfit)
|
|
if outfit.mount == oldOutfit.mount then
|
|
return
|
|
end
|
|
|
|
mountButton:setChecked(outfit.mount ~= nil and outfit.mount > 0)
|
|
end
|
|
|
|
function getPVPBoxByMode(mode)
|
|
local widget = nil
|
|
if mode == PVPWhiteDove then
|
|
widget = whiteDoveBox
|
|
elseif mode == PVPWhiteHand then
|
|
widget = whiteHandBox
|
|
elseif mode == PVPYellowHand then
|
|
widget = yellowHandBox
|
|
elseif mode == PVPRedFist then
|
|
widget = redFistBox
|
|
end
|
|
return widget
|
|
end
|