I've done a bit of refactoring today in this branch: https://code.launchpad.net/~widelands-dev/widelands/bug-1348795
Check out the new ProductionSite::out_of_resources function - when that function sends a message to the player would be the point where the AI should do something about the building. I don't know how the AI API works, but I guess you would either access the message or set a flag in the production site for the I to read. Message sender at the moment is "produce" or "mine". I don't really know what the sender is for, so if it doesn't break anything, feel free to change the sender as needed. 29/07/2014 11:19, sgrìobh Tibor Bamhor: > This is probably good idea, but how to implement it? > > In current AI I found following piece of code: > > > // Subscribe to NoteFieldPossession. > field_possession_subscriber_ = > Notifications::subscribe<NoteFieldPossession>([this](const > NoteFieldPossession& note) { > if (note.player != player_) { > return; > } > if (note.ownership == NoteFieldPossession::Ownership::GAINED) { > unusable_fields.push_back(note.fc); > } > }); > > Can somebody direct me further? > > Thanks > > Tibor > > > 2014-07-29 12:02 GMT+02:00 Fòram na Gàidhlig <f...@foramnagaidhlig.net > <mailto:f...@foramnagaidhlig.net>>: > > You could check for the code where production programs (for mines) and > production sites (for other sites) send "Out of Resources" messages. The > production program has a handle on the production site, so both of these > could set a flag in the production site that the AI could check for, or > whenever the player gets a notification message the AI gest a message as > well. This way, the calculation of the check if a site is out of > resources remains with the production and worker programs. > > > > 29/07/2014 08:52, sgrìobh Tibor Bamhor: > > SirVer, > > > > > > I tried, spend some time, but all those namespaces, classes, virtual > > functions are too complicated to me. I even failed to identify a place > > (source file) where such function would logically belong. > > > > > > :( > > > > > > > > 2014-07-25 22:58 GMT+02:00 Holger Rapp <holgerr...@gmx.net > <mailto:holgerr...@gmx.net> > > <mailto:holgerr...@gmx.net <mailto:holgerr...@gmx.net>>>: > > > > Hooray \o/ !!! > > > > On 25.07.2014, at 22:23, Tibor Bamhor <tibor...@gmail.com > <mailto:tibor...@gmail.com> > > <mailto:tibor...@gmail.com <mailto:tibor...@gmail.com>>> wrote: > > > >> I will look at it...and do what I can.. > >> > >> > >> 2014-07-25 22:08 GMT+02:00 Holger Rapp <holgerr...@gmx.net > <mailto:holgerr...@gmx.net> > >> <mailto:holgerr...@gmx.net <mailto:holgerr...@gmx.net>>>: > >> > >> Which just strengthens my argument, right? The code there is > >> already copy and pasted and if anything changes you have to > >> change it twice. With your change we need to change it three > >> times. > >> > >> You are a good programmer and can do it. If you do not do it > >> you accrue technical debt that others have to suffer under > >> later on. > >> > >> > >> On 25.07.2014, at 21:52, Tibor Bamhor <tibor...@gmail.com > <mailto:tibor...@gmail.com> > >> <mailto:tibor...@gmail.com <mailto:tibor...@gmail.com>>> > wrote: > >> > >>> similar procedure is used twice in > production_program.cc, but > >>> both istances adds some own woodo-magic I dont fully > >>> understand and dont need. So there is no > count-resources-only > >>> algorithm used there so for me it is hard to integrate. > Maybe > >>> for more skilled programmer it would be doable... > >>> > >>> > >>> 2014-07-25 21:35 GMT+02:00 Holger Rapp > <holgerr...@gmx.net <mailto:holgerr...@gmx.net> > >>> <mailto:holgerr...@gmx.net <mailto:holgerr...@gmx.net>>>: > >>> > >>> > >>> On 25.07.2014, at 21:31, Tibor Bamhor > <tibor...@gmail.com <mailto:tibor...@gmail.com> > >>> <mailto:tibor...@gmail.com > <mailto:tibor...@gmail.com>>> wrote: > >>> > >>>> Hi, > >>>> > >>>> In the meantime I looked into particular cc file (I > dont > >>>> remember which one) and in AI I implemented basically > >>>> the same procedure - AI counts current and starting > >>>> amount of resources within radius around a mine and > >>>> calculate the % of exhaustion. > >>> > >>> That is really bad. We already have enough copy & pasted > >>> code in Widelands. Please do not add to this. Pull the > >>> common function into a new common header and use it from > >>> the AI and the old code, please. > >>> > >>>> Seems it works fine. > >>>> > >>>> Also it would be usefull if AI could query&modify > ware's > >>>> target quantities. So far there are no ready-for-AI > >>>> functions for this it seems. I am considering to write > >>>> them, but perhaps some more skillfull programmer could > >>>> do the job. > >>>> > >>>> To be consistent with similar functions used by AI, new > >>>> functions could be: > >>>> int send_player_get_ware_target(ware) > >>>> bool send_player_set_ware_target(ware, int) > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> 2014-07-25 21:01 GMT+02:00 Holger Rapp > >>>> <holgerr...@gmx.net <mailto:holgerr...@gmx.net> > <mailto:holgerr...@gmx.net <mailto:holgerr...@gmx.net>>>: > >>>> > >>>> > >>>> On 25.07.2014, at 00:04, Tibor Bamhor > >>>> <tibor...@gmail.com <mailto:tibor...@gmail.com> > <mailto:tibor...@gmail.com <mailto:tibor...@gmail.com>>> wrote: > >>>> > >>>>> well, after some investigation in code it seems > >>>>> that mine is able to mine some % of resources > >>>>> within some radius. Obviously it does not mine > >>>>> resources evenly across fields, so to check one > >>>>> (even central) field is not enough. > >>>> > >>>> You could randomize the field that resources are > >>>> taken from, so that this happens evenly. > >>>> > >>>>> > >>>>> Also it seems that there is no avaiable > function to > >>>>> query if mineable resources are mined or not yet. > >>>>> Of course, the mine sends a message ("cant > find any > >>>>> more resources") but I am not sure if AI can > easily > >>>>> read them. It would help much… > >>>> > >>>> So there must be a method in the mine that does it > >>>> already. You can pull it out and make it available > >>>> for the AI to use. Something like void > >>>> percentage_of_coal_available(field, radius, > >>>> coal_resource_index, > >>>> & total_pieces_of_coal_at_start, > >>>> &total_pieces_of_coal_now); > >>>> > >>>>> > >>>>> > >>>>> > >>>>> ---------- Forwarded message ---------- > >>>>> From: *Tibor Bamhor* <tibor...@gmail.com > <mailto:tibor...@gmail.com> > >>>>> <mailto:tibor...@gmail.com > <mailto:tibor...@gmail.com>>> > >>>>> Date: 2014-07-24 23:05 GMT+02:00 > >>>>> Subject: can find any more resources > >>>>> To: widelands-dev@lists.launchpad.net > <mailto:widelands-dev@lists.launchpad.net> > >>>>> <mailto:widelands-dev@lists.launchpad.net > <mailto:widelands-dev@lists.launchpad.net>> > >>>>> > >>>>> > >>>>> Hi, > >>>>> > >>>>> Please explain to me: > >>>>> > >>>>> I am watching a game (testing AI), there is a mine > >>>>> that shows "can't find any more resources", > >>>>> performance % is 0, it is full of food, yet when I > >>>>> click on it and click DBG it shows coal: 19/20. > >>>>> This is coal mine (the first/lowest level of > mine). > >>>>> > >>>>> Now for AI it is quite relevant question - AI test > >>>>> remaining resource on the field and if 0, the mine > >>>>> is to be dismounted. But if mine is not able to > >>>>> mine all resources on a field, then things are > >>>>> getting more complicated. > >>>>> > >>>>> Now I noticed that mines have aihint like > >>>>> mines_percent=30. Does it mean that this mine can > >>>>> mine only 30% of initial amount 20? 30% of 20 is 6 > >>>>> so the mine should stuck on remaining resources > >>>>> 14/20, or not? > >>>>> > >>>>> Waiting for explanation, thanks! > >>>>> > >>>>> Tibor > >>>>> > >>>>> > >>>>> _______________________________________________ > >>>>> Mailing list: https://launchpad.net/~widelands-dev > >>>>> Post to : > widelands-dev@lists.launchpad.net > <mailto:widelands-dev@lists.launchpad.net> > >>>>> <mailto:widelands-dev@lists.launchpad.net > <mailto:widelands-dev@lists.launchpad.net>> > >>>>> Unsubscribe : https://launchpad.net/~widelands-dev > >>>>> More help : https://help.launchpad.net/ListHelp > >>>> > >>>> > >>>> _______________________________________________ > >>>> Mailing list: https://launchpad.net/~widelands-dev > >>>> Post to : widelands-dev@lists.launchpad.net > <mailto:widelands-dev@lists.launchpad.net> > >>>> <mailto:widelands-dev@lists.launchpad.net > <mailto:widelands-dev@lists.launchpad.net>> > >>>> Unsubscribe : https://launchpad.net/~widelands-dev > >>>> More help : https://help.launchpad.net/ListHelp > >>> > >>> > >> > >> > > > > > > > > > > _______________________________________________ > > Mailing list: https://launchpad.net/~widelands-dev > > Post to : widelands-dev@lists.launchpad.net > <mailto:widelands-dev@lists.launchpad.net> > > Unsubscribe : https://launchpad.net/~widelands-dev > > More help : https://help.launchpad.net/ListHelp > > > > > > > > No virus found in this message. > > Checked by AVG - www.avg.com <http://www.avg.com> <http://www.avg.com> > > Version: 2014.0.4716 / Virus Database: 3986/7937 - Release Date: > 07/28/14 > > > > _______________________________________________ > Mailing list: https://launchpad.net/~widelands-dev > Post to : widelands-dev@lists.launchpad.net > <mailto:widelands-dev@lists.launchpad.net> > Unsubscribe : https://launchpad.net/~widelands-dev > More help : https://help.launchpad.net/ListHelp > > > No virus found in this message. > Checked by AVG - www.avg.com <http://www.avg.com> > Version: 2014.0.4716 / Virus Database: 3986/7942 - Release Date: 07/29/14 > _______________________________________________ Mailing list: https://launchpad.net/~widelands-dev Post to : widelands-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~widelands-dev More help : https://help.launchpad.net/ListHelp