On 19.11.2012 11:36, Michael T. Pope wrote:
> On Sun, 18 Nov 2012 02:32:10 PM Michael Vehrs wrote:
>    
>> As it turns out, csDisposeSettlement doesn't produce ideal results,
>> either, as you can easily check with the included patch.
>>      
> Alas no.  I am blocked by the crash below which is unrelated to the patch.
> However I am not particularly surprised that csDisposeSettlement is
> misbehaving.  I will look into it.  The crash occurs as follows:
> 1. Start freecol, select map editor.
> 2. Import a recent game
> 3. Try to add a settlement to a free (non-owned) tile adjacent to the border
>     of a radius-1 Apache settlement
>    

Well, you can always create a new empty map, and add and remove a few 
settlements. csDisposeSettlement isn't really misbehaving, but its 
approach differs from what I would expect to see in the map editor. 
Anyway, I'll have a look at the crash as soon as I have time.

> =>
> java.util.logging.LogManager$RootLogger log
>       WARNING: Uncaught exception from thread: Thread[AWT-EventQueue-0,6,main]
>       Mon Nov 19 09:07:37 CST 2012
>       Thread ID: 15
>       Stack trace:
> java.lang.IllegalArgumentException: Trying to retrieve AbstractOption with ID
> 'model.option.landPriceFactor' returned 'null'.
>       at
> net.sf.freecol.common.model.Specification.getOption(Specification.java:658)
>       at
> net.sf.freecol.common.model.Specification.getInteger(Specification.java:823)
>       at net.sf.freecol.common.model.Player.getLandPrice(Player.java:1581)
>       at
> net.sf.freecol.common.model.Player.canClaimForSettlementReason(Player.java:1266)
>       at
> net.sf.freecol.common.model.Player.canClaimForSettlement(Player.java:1247)
>       at 
> net.sf.freecol.common.model.Player.getClaimableTiles(Player.java:1397)
>       at
> net.sf.freecol.common.model.Settlement.placeSettlement(Settlement.java:223)
>       at
> net.sf.freecol.client.gui.panel.MapEditorTransformPanel$SettlementTransform.transform(MapEditorTransformPanel.java:391)
>       at
> net.sf.freecol.client.control.MapEditorController.transform(MapEditorController.java:144)
>       at
> net.sf.freecol.client.gui.CanvasMapEditorMouseListener.mouseReleased(CanvasMapEditorMouseListener.java:226)
>       at java.awt.Component.processMouseEvent(Component.java:6505)
>       at javax.swing.JComponent.processMouseEvent(JComponent.java:3312)
>       at java.awt.Component.processEvent(Component.java:6270)
>       at java.awt.Container.processEvent(Container.java:2229)
>       at java.awt.Component.dispatchEventImpl(Component.java:4861)
>       at java.awt.Container.dispatchEventImpl(Container.java:2287)
>       at java.awt.Component.dispatchEvent(Component.java:4687)
>       at 
> java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
>       at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
>       at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
>       at java.awt.Container.dispatchEventImpl(Container.java:2273)
>       at java.awt.Window.dispatchEventImpl(Window.java:2713)
>       at java.awt.Component.dispatchEvent(Component.java:4687)
>       at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
>       at java.awt.EventQueue.access$000(EventQueue.java:101)
>       at java.awt.EventQueue$3.run(EventQueue.java:666)
>       at java.awt.EventQueue$3.run(EventQueue.java:664)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at
> java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
>       at
> java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
>       at java.awt.EventQueue$4.run(EventQueue.java:680)
>       at java.awt.EventQueue$4.run(EventQueue.java:678)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at
> java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
>       at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
>       at
> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
>       at
> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
>       at
> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
>       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
>       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
>       at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
>
>    
>> As far as the
>> map editor is concerned, I think placing two settlements with
>> overlapping territories and then removing one of them, should restore
>> the original territory of the remaining settlement.
>>      
> Mostly agree.  The map editor only deals with the tiles within the immediate
> radius of each settlement.  These certainly should recover cleanly.  However
> in general, settlements can acquire tiles beyond the immediate radius.  These
> are more problematic, and indeed are usually the ones where there might be
> multiple claimants, and are thus responsible for the general hairiness of the
> settlement disposal code.
>
> Hopefully I can fix csDisposeSettlement quick, and thus the patch should be
> good.  However if you want to do something simpler for the map editor that
> just handles the radius-enclosed tiles, that would work too.
>
> Cheers,
> Mike Pope
>    

I'll think about a solution for the map editor only.


Regards

Michael



------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Freecol-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freecol-developers

Reply via email to