Fixed #178, and some others:

* Fixed a small issue in the ignore module (also please remember to use 2 spaces for tabulation and not tabs)
* Changed the order of count window buttons
* Added new player functions.
This commit is contained in:
BeniS 2013-01-11 06:25:32 +13:00
parent d70b835464
commit 00a574fe10
7 changed files with 123 additions and 51 deletions

View File

@ -37,7 +37,6 @@ function init()
mouseWidget.cancelNextRelease = false
battleWindow:setContentMinimumHeight(80)
--battleWindow:setContentMaximumHeight(384)
connect(Creature, {
onSkullChange = updateCreatureSkull,
@ -199,6 +198,7 @@ end
function addCreature(creature)
local creatureId = creature:getId()
local battleButton = battleButtonsByCreaturesList[creatureId]
if not battleButton then
battleButton = g_ui.createWidget('BattleButton', battlePanel)
battleButton:setup(creature)
@ -251,9 +251,9 @@ function removeAllCreatures()
end
function removeCreature(creature)
if hasCreature(creature) then
local creatureId = creature:getId()
if battleButtonsByCreaturesList[creatureId] ~= nil then
if lastBattleButtonSwitched == battleButtonsByCreaturesList[creatureId] then
lastBattleButtonSwitched = nil
end

View File

@ -56,7 +56,6 @@ MiniWindow
anchors.horizontalCenter: parent.horizontalCenter
height: 20
width: 120
// width*count + spacing*(count-1)
layout:
type: horizontalBox
spacing: 5

View File

@ -611,11 +611,14 @@ function onTalk(name, level, mode, message, channelId, creaturePos)
if ignoreNpcMessages and mode == MessageModes.NpcFrom then return end
speaktype = SpeakTypes[mode]
if ((mode == MessageModes.Yell and isIgnoringYelling()) or
(speaktype.private and isIgnoringPrivate()) or
(isIgnored(name) or isIgnored(name:lower()))) and
name ~= g_game.getLocalPlayer():getName() then
if name ~= g_game.getLocalPlayer():getName() then
if mode == MessageModes.Yell and isIgnoringYelling() then
return
elseif speaktype.private and isIgnoringPrivate() and mode ~= MessageModes.NpcFrom then
return
elseif isIgnored(name) or isIgnored(name:lower()) then
return
end
end
if (mode == MessageModes.Say or mode == MessageModes.Whisper or mode == MessageModes.Yell or

View File

@ -31,8 +31,8 @@ CountWindow < MainWindow
focusable: false
Button
id: buttonOk
!text: tr('Ok')
id: buttonCancel
!text: tr('Cancel')
height: 20
anchors.left: countScrollBar.horizontalCenter
anchors.right: countScrollBar.right
@ -41,8 +41,8 @@ CountWindow < MainWindow
focusable: false
Button
id: buttonCancel
!text: tr('Cancel')
id: buttonOk
!text: tr('Ok')
height: 20
anchors.right: countScrollBar.horizontalCenter
anchors.left: countScrollBar.left

View File

@ -75,6 +75,19 @@ function terminate()
minimapWindow:destroy()
end
function onFlagMousePress(widget, mousePosition, mouseButton)
if mouseButton == MouseRightButton then
local menu = g_ui.createWidget('PopupMenu')
menu:addOption(tr('Delete mark'), function()
widget:destroy()
end)
menu:display(mousePosition)
elseif mouseButton == MouseLeftButton then
minimapAutoWalk(widget.position)
end
return true
end
function destroyFlagWindow()
if flagWindow then
flagWindow:destroy()
@ -82,27 +95,6 @@ function destroyFlagWindow()
end
end
function createThingMenu(widget, menuPosition, button)
if not g_game.isOnline() then return end
if button ~= MouseRightButton then return end
local menu = g_ui.createWidget('PopupMenu')
if widget == minimapWidget then
menu:addOption(tr('Create mark'), function()
local position = minimapWidget:getPosition(menuPosition)
if position then
showFlagDialog(position)
end
end)
else
menu:addOption(tr('Delete mark'), function()
widget:destroy()
end)
end
menu:display(menuPosition)
end
function showFlagDialog(position)
if flagWindow then return end
if not position then return end
@ -126,14 +118,15 @@ function showFlagDialog(position)
flagRadioGroup:selectWidget(flagCheckbox[1])
cancelButton.onClick = function()
flagRadioGroup:destroy()
flagRadioGroup = nil
destroyFlagWindow()
end
okButton.onClick = function()
addMapFlag(position, flagRadioGroup:getSelectedWidget().icon, description:getText())
flagRadioGroup:destroy()
flagRadioGroup = nil
destroyFlagWindow()
end
end
@ -206,7 +199,7 @@ function addMapFlag(pos, icon, message, flagId, version)
flagWidget.id = flagId
flagWidget.version = version
updateMapFlag(flagId)
flagWidget.onMousePress = createThingMenu
flagWidget.onMousePress = onFlagMousePress
end
function getMapArea()
@ -358,6 +351,16 @@ function minimapFloorDown(floors)
end
end
function minimapAutoWalk(pos)
local player = g_game.getLocalPlayer()
if not player:autoWalk(pos) then
modules.game_textmessage.displayStatusMessage(tr('There is no way.'))
return false
else
return true
end
end
function onButtonClick(id)
if id == "zoomIn" then
miniMapZoomIn(20)
@ -374,21 +377,24 @@ end
function onMinimapMouseRelease(self, mousePosition, mouseButton)
-- Mapmark menu
createThingMenu(self, mousePosition, mouseButton)
local pos = self:getPosition(mousePosition)
if mouseButton == MouseRightButton then
local menu = g_ui.createWidget('PopupMenu')
menu:addOption(tr('Create mark'), function()
local pos = self:getPosition(mousePosition)
if pos then
showFlagDialog(pos)
end
end)
menu:display(mousePosition)
end
if navigating then
navigating = false
return
end
local pos = self:getPosition(mousePosition)
if pos and mouseButton == MouseLeftButton and self:isPressed() then
local player = g_game.getLocalPlayer()
if not player:autoWalk(pos) then
modules.game_textmessage.displayStatusMessage(tr('There is no way.'))
return false
else
return true
end
minimapAutoWalk(pos)
end
return false
end

View File

@ -98,3 +98,67 @@ function Player:dismount()
g_game.mount(false)
end
end
function Player:getItem(itemid)
for i=InventorySlotFirst,InventorySlotLast do
local item = self:getInventoryItem(i)
if item and item:getId() == itemid then
return item
end
end
for i, container in pairs(g_game.getContainers()) do
for j, item in pairs(container:getItems()) do
if item:getId() == itemid then
item.container = container
return item
end
end
end
return items
end
function Player:getItems(itemid)
local items = {}
for i=InventorySlotFirst,InventorySlotLast do
local item = self:getInventoryItem(i)
if item and item:getId() == itemid then
table.insert(items, item)
end
end
for i, container in pairs(g_game.getContainers()) do
for j, item in pairs(container:getItems()) do
if item:getId() == itemid then
item.container = container
table.insert(items, item)
end
end
end
return items
end
function Player:getItemsCount(itemid)
local items, count = self:getItems(itemid), 0
for i=1,#items do
count = count + items[i]:getCount()
end
return count
end
function Player:hasState(_state, states)
if not states then
states = self:getStates()
end
for i = 1, 32 do
local pow = math.pow(2, i-1)
if pow > states then break end
local states = bit32.band(states, pow)
if states == _state then
return true
end
end
return false
end

View File

@ -600,7 +600,7 @@ std::tuple<std::vector<Otc::Direction>, Otc::PathFindResult> Map::findPath(const
but it is breaking normal path finding.
*/
if(!(flags & Otc::PathFindAllowNullTiles) && !tile)
walkFactor = 1.0f;
walkFactor = 2.0f;
if(tile) {
if(!(flags & Otc::PathFindAllowCreatures) && tile->hasCreature())
continue;