--- Log opened Sun Jul 15 00:00:35 2018 20180715 00:09:24<+discordbot1> If I wanted to reset an AI to default from previous changes, how would I do that? Earlier on in the scenario, I changed the AI's goal. Upon the triggering of an event, I want the AI to return to the default. But, I'm not sure what to do. I think I need to use a [modify_side] tag, and an [ai] tag within it 20180715 00:10:09< mattsc> [modify_ai] and delete the goal 20180715 00:11:52<+discordbot1> [modify_ai] [filter] side=2 [/filter] [/modify_ai]like so? 20180715 00:12:35< mattsc> You should not just make up syntaxt but look it up on the wiki … 20180715 00:12:48< mattsc> https://wiki.wesnoth.org/Modifying_AI_Components#The_.5Bmodify_ai.5D_Tag 20180715 00:13:17<+discordbot1> oh no, you're right. I clicked on the wrong thing. I was looking at the filter page 20180715 00:14:39< mattsc> okay :) (I didn’t mean that aggressively, by the way) 20180715 00:15:05<+discordbot1> No it's fine. I wasn't trying to be lazy, I was looking at modify_unit right under it by mistake 20180715 00:15:17<+discordbot1> But yeah, my mistake and thanks 20180715 00:15:42< mattsc> No worries. 20180715 00:16:33< mattsc> By the way, to figure out if an AI modification works, a good test case is it to put it into a moveto event, and check with :inspect whether the AI configuration is different before and after 20180715 00:17:12< mattsc> … because it is sometimes hard to tell from just watching what the AI does whether it took effect or not 20180715 00:18:01< mattsc> (nefore and after moving the unit that triggers the event, I mean) 20180715 00:21:52<+discordbot1> Will do. I'd prefer to know before I play test it a bunch of times if it's working or not! 20180715 00:23:08<+discordbot1> If the goal had the name of target_location, would this be appropriate? [modify_ai] side=2 action=delete path=goaltarget_location 20180715 00:41:44< mattsc> Should be goal[target_location], I think 20180715 00:42:52< mattsc> But it you just have a single goal, goal[1] or goal[*] should also work 20180715 00:44:30< mattsc> Oh, ‘target_location’, as in the name (or type) of the goal? No, that does not work. I first thought you meant that as a place_holder. You need to give them an id, if you want to delete them selectively. 20180715 00:48:39< mattsc> So for that, you want to add the goal using [modify 20180715 00:49:00< mattsc> _ai] also, with action=add and path=goal[whatever_id] 20180715 00:49:19< mattsc> And then you remove it later using the same. except action=delete 20180715 01:10:27-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has quit [Remote host closed the connection] 20180715 01:10:33-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has joined #wesnoth-umc-dev 20180715 01:17:24<+discordbot1> Ah you answered all my questions! Thank you 😃 20180715 02:49:57-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has quit [Remote host closed the connection] 20180715 02:50:03-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has joined #wesnoth-umc-dev 20180715 05:53:48-!- hk238 [~kvirc@unaffiliated/hk238] has joined #wesnoth-umc-dev 20180715 05:55:03< hk238> hi 20180715 05:57:50< hk238> gotta try and make this random faction thing now :d 20180715 06:14:03< hk238> so wesnoth.game_config.era returns stuff about the era how do I access it's contents? I'm trying to look at what the console says after typing that but it seems a little strange 20180715 06:22:50<+discordbot1> it's a table 20180715 06:24:24< hk238> okay like an array? or like with keys? 20180715 06:25:15<+discordbot1> latter presumably 20180715 06:25:29<+discordbot1> contents should match an [era] tag 20180715 06:25:38<+discordbot1> or rather, the [era] tag of the current era 20180715 06:28:01< hk238> hm 20180715 06:31:05< hk238> I'm havint trouble with this, do the tags get transformed into keys? 20180715 06:31:43<+discordbot1> i dont know 20180715 06:31:45< hk238> like I'm typing into console "wesnoth.game_config.era" then it seems it's first indexed numerically like "wesnoth.game_config.era[1]" returns random side or stuff about that, then 2 is loyalists but 20180715 06:31:48< hk238> okay 20180715 06:32:46<+discordbot1> Try next(wesnoth.game_config.era) 20180715 06:32:57<+discordbot1> It gives you the first key in the table. 20180715 06:34:32< hk238> hmm this is weird 20180715 06:35:10< hk238> does it return the contents as strings? 20180715 06:35:47<+discordbot1> next() does not perform any conversion. 20180715 06:36:22< hk238> ah m 20180715 06:36:46< hk238> ok so basically wesnoth.game_config.era returns an array with randomside, loyalists, some other faction.. etc 20180715 06:36:53< hk238> but they're also arrays 20180715 06:37:21< hk238> but it's kind of weird era[2][1] is basically [2] for loyalists.. and then [1] is just a string "multiplayer_side" 20180715 06:37:45< hk238> but then  [2][2] is a table with keys apparently and I guess that's what I need for this random thing 20180715 06:39:06< hk238> okay so I found the contents the recruits seem to be a comma-separated string 20180715 06:39:45< hk238> so basically what is it that I need to do... yeah I need get that list into a table or array format 20180715 06:40:07<+discordbot1> there's utils.split for that 20180715 06:40:07< hk238> is there some lua method for this? splitting a string by determinign a delimiter? 20180715 06:40:16< hk238> oh thanks :D 20180715 06:47:55< hk238> hmm how can I check if a key exists without causing an error? 20180715 06:48:41<+discordbot1> == nil 20180715 06:48:48<+discordbot1> or != rather 20180715 06:49:02<+discordbot1> ~= 20180715 06:49:06<+discordbot1> ah right 20180715 06:49:06<+discordbot1> yes 20180715 06:49:08<+discordbot1> sorry 20180715 06:49:46<+discordbot1> More specifically, t[key] ~= nil 20180715 06:49:58<+discordbot1> not t.key? 20180715 06:50:23<+discordbot1> You can use t.key if the key is a string and you know it ahead of time. 20180715 06:50:34<+discordbot1> ah 20180715 06:51:38< hk238> ahh this is complicated 20180715 06:52:14< hk238> okay well let's see 20180715 06:55:18< hk238> oh well it wasn't that complicated 20180715 06:55:18< hk238> :D 20180715 06:56:13< hk238> https://pastebin.com/fyQuR3Wv 20180715 06:56:17< hk238> does this seem correct to you? 20180715 06:56:44< hk238> it's missing a parens at lesat 20180715 06:57:26<+discordbot1> Other than that, it looks correct. 20180715 06:57:46< hk238> okay cool 20180715 07:01:09< hk238> does utils.split default to comma? 20180715 07:02:11< hk238> also is this the correct way access utils: local utils = wesnoth.require("wml-utils") 20180715 07:03:35< hk238> hmm well if that works then I think I have the recruits split into an array 20180715 07:04:32<+discordbot1> utils.split() always splits by commas. 20180715 07:05:10<+discordbot1> And yes, your way to access the utils table is correct. 20180715 07:06:31< hk238> awesome 20180715 07:06:52< hk238> now I have some trouble deciding how to get this random logic going. I got basically a random number assigned for each player with no mirror 20180715 07:07:23< hk238> but what's effective way to pick a random index while making sure not picking the same index twice? This seems a pretty universal logic problem and not specific to even lua 20180715 07:07:24< hk238> :D 20180715 07:08:16<+discordbot1> Instead of trying not to pick the same index twice, one way to do it is to simply remove every element you pick from the table. 20180715 07:08:47< hk238> yeah that would work I guess 20180715 07:08:52< hk238> how do I remove elements from lua tables? 20180715 07:09:18< hk238> so that indices still stay in order and the length of the array changes accordingly? Instead of having some empty indices in between? 20180715 07:09:21<+discordbot1> table.remove() 20180715 07:09:22<+discordbot1> http://www.lua.org/manual/5.3/manual.html#6.6 20180715 07:35:37< hk238> had to take a shower and also making pancakes 20180715 07:36:10< hk238> I think there's also a general solution to this don't pick same number twice problem in the realm of modular arithmetic, but it seems like one of those cannon and mosquito things :D 20180715 07:41:47< hk238> how do I merge an array into a comma-separated list? like how do I concatenate two strings? 20180715 07:42:35<+discordbot1> table.concat() 20180715 07:42:36<+discordbot1> http://www.lua.org/manual/5.3/manual.html#6.6 20180715 07:42:50<+discordbot1> Please look at the Lua function reference instead of asking us for everything. 20180715 07:43:20<+discordbot1> or just google 20180715 07:43:25< hk238> sorry :D 20180715 07:43:39<+discordbot1> (yes, I know this is rich coming from me xD ) 20180715 07:44:03< hk238> :D 20180715 07:47:02< hk238> what do you think for a random faction composed of 3 different factions which would seem like a nice number of units from each faction? I was thinking maybe 5,2,1 or 4,3,2 20180715 07:47:19< hk238> I'd like to take 2 units from the 3rd faction just to increase the total number of combinations 20180715 07:47:49< hk238> but then it's like the secondary and thertiary factions are very close to each other if they're 3 and 2, same goes for the argument with 4 from 1st faction and 3 from second faction 20180715 07:48:14< hk238> but then if I take 5,3,2 it's already 9 units and it's quite large for a faction... so 5,2,1? I don't know 20180715 07:48:29< hk238> 5,3,1? 20180715 07:48:51< hk238> it's also 9 units :d troublesome 20180715 07:50:21< hk238> 5 is too many it's almost all the units.. 4,2,1 I guess it is that's 7 units it seems reasonable 20180715 07:51:05< hk238> there's clearly a primary faction, the one with 4, and the difference between 2 and 1 units is big enough, unfortunately it doesn't maximize the number of combinations very well 20180715 07:51:15< hk238> but I think it's enough now if I only got this code done 20180715 07:51:15< hk238> :D 20180715 07:51:46< hk238> there's also another problem I can't check easily if the units are level 0 with them being in stringformat.. I guess level 0 units are an option then 20180715 07:52:08< hk238> Although for just default I guess I could copypaste the recruit lists .. I don't know 20180715 07:53:54< hk238> hmm arrays starting at 1 makes using this modular arithmetic thing a little complicated 20180715 07:55:40< hk238> on the plus side cant get 0 when multiplying the indices :d 20180715 08:10:52< hk238> okay I decided to use the shuffling option for picking units from a chosen faction 20180715 08:11:21< hk238> I'm still having slight trouble choosing the factions I want the primary factions not to be mirror but the secondary and thertiary factions can be th esame as the some of the opponent's factions 20180715 08:11:59< hk238> with that particular condition I can't just the shuffle option for generating all the faction choices as that would kind of have a combination reducing effect 20180715 08:18:52< hk238> oh well I'll skip the 3rd faction for this version and juts go two factions then once I get it working I*ll figure out how to add the 3rd faction 20180715 08:24:28< hk238> okay assuming there isn't 15 bugs in this code, i basically got the string of recruits 20180715 08:24:39< hk238> now how do I replace the recruitment pool of a side with the new recruits? 20180715 08:26:21< hk238> chances that this works on first go are pretty close to 0% from past experience :D 20180715 08:29:27< hk238> looking at ravana's hide faction choice code I think there's a WML command modify_side which is pretty straightforward.. How do I call that from lua code though? 20180715 08:30:34< hk238> like I have this lua variable that supposedly has the recruits and I need to use the [modify_side] wml tag with side number and then the variable.. side numbers are 1,3 and so that's not a problem 20180715 08:34:22<+discordbot1> You can call wesnoth.wml_actions.modify_side() 20180715 08:35:22< hk238> okay thanks 20180715 08:38:27< hk238> yay it's done. Now to face the endless supply of syntax errors 20180715 08:39:31< hk238> starting out well thistime I get an error before even getting to local game 20180715 08:39:33< hk238> :D 20180715 08:40:40< hk238> can you put a [lua] tag inside an [event] tag? I don't understand this error :D 20180715 08:43:27<+discordbot1> Yes, you can run arbitrary Lua code in an event handler. 20180715 08:44:50< hk238> yeah sorry I forgot the code = << , part before wesnoth.dofile 20180715 08:45:22< hk238> first error seems easy.. file not found for dofile 20180715 08:45:22< hk238> :D 20180715 08:45:38< hk238> we're almost actual dealing with the code already 20180715 08:47:15< hk238> unexpected symbol near "if" let's see :D 20180715 08:47:58< hk238> if value[2] ~= nil and if value[2].recruit ~= nil then 20180715 08:48:07< hk238> this line says unexpected symbol 20180715 08:48:15< hk238> is "and if" proper structure? 20180715 08:48:24<+discordbot1> Ah. You dont need the second if. 20180715 08:48:34< hk238> okay thanks 20180715 08:50:15< hk238> next error was a typo that's acceptable :D 20180715 08:51:41< hk238> next one was misremembering variable name.. factions_and_recruits became factions_and_units somewhere along the way 8) 20180715 08:52:35< hk238> attempt to index a function value now this is getting more severe 20180715 08:55:33< hk238> any ideas? :D https://pastebin.com/C6Jh3NXm 20180715 08:58:19<+discordbot1> Is that the function where the error occurs? 20180715 08:58:38<+discordbot1> The only tables youre trying to index are helper and table. 20180715 08:58:50<+discordbot1> It would suggest that one of them is a function instead. 20180715 08:59:21< hk238> hm I'm definitely doing something wrong here 20180715 09:00:04< hk238> so it's basically expecting an array of the form that utils.split puts the recruit list into.. basically array[1] = "spearman" array[2] is bowman and so forth 20180715 09:00:43< hk238> so I'm creating another array which has just the same number of indices as that table, of the type arr[1] = 1, etc 20180715 09:00:47< hk238> then shuffling them 20180715 09:00:59< hk238> so you have array[1] = 6 perhaps 20180715 09:01:07< hk238> and thne the for_each_index doesn't make sense anymore 20180715 09:01:08< hk238> :D 20180715 09:01:26< hk238> it should be t[value] instead I think 20180715 09:01:51< hk238> otherwise it's just putting the numbers into the response 20180715 09:02:14< hk238> like 6,2,3 and then giving that to th econcat 20180715 09:02:18< hk238> I'm trying to index helper? 20180715 09:02:29< hk238> that would be the problem in addition to this t[value] thing 20180715 09:02:58<+discordbot1> helper is usually a table in Wesnoth UMC code. 20180715 09:03:06< hk238> where am I indexign helper? I'm trying to call helper's function shuffle 20180715 09:03:10<+discordbot1> So developers are supposed to index it. 20180715 09:03:29<+discordbot1> It is exactly where you are trying to index it. 20180715 09:04:01< hk238> okay so how do I access the shuffle thing properly? like I want shuffle the array with numbers 20180715 09:04:11<+discordbot1> When you call helper.shuffle(), you fetch the value of the helper table associated with the key "shuffle", then call it. 20180715 09:04:31< hk238> yeah 20180715 09:04:31<+discordbot1> It is the proper way to access it. 20180715 09:04:51< hk238> so I don't understand.. how am I trying to index it? :D 20180715 09:05:22<+discordbot1> When you write a.b anywhere in Lua code, you index table a with key "b". 20180715 09:06:04< hk238> :d 20180715 09:06:31< hk238> I don't understand this now :D 20180715 09:07:58<+discordbot1> I think youre missing that calling functions in tables is exactly the same thing as indexing a table, then calling the value as a function. 20180715 09:08:24<+discordbot1> local shuf = helper.shuffle 20180715 09:08:29<+discordbot1> shuf(t) 20180715 09:08:53<+discordbot1> Thats an alternative way to shuffle things. Store the function in a variable, then call it through the variable. 20180715 09:42:13< hk238> :d 20180715 09:42:28< hk238> Okay I'll try that althoug this seems really weird 20180715 09:43:05<+discordbot1> The code I posted should just give exactly the same error. After all, it does the same thing. 20180715 09:43:47< hk238> yeah that's what it does 20180715 09:44:02< hk238> I still don't see what the problem here is 20180715 09:44:10< hk238> it must be something particular to lua that I'm not understanding 20180715 09:44:17< hk238> ? :D 20180715 09:44:29<+discordbot1> I think you do not import helper in the right way. 20180715 09:44:40<+discordbot1> Somehow you have made it a function instead of a table. 20180715 09:45:03< hk238> "local helper = wesnoth.require("lua/helper.lua")" 20180715 09:45:28< hk238> does that seem right? I just took it from Rav's blind faction picker so I assumed it's right 20180715 09:47:25<+discordbot1> AFAIK, it should be just local helper = wesnoth.require "helper" 20180715 09:47:49< hk238> with no parentheses or anything? 20180715 09:48:21< hk238> well let's try that and see what happens 20180715 09:49:10< hk238> same error 20180715 09:49:18< hk238> although it gives this in function map now that I look atit more carefully 20180715 09:49:33< hk238> and map occurs before I even get to the shuffler 20180715 09:49:43< hk238> so I guess that means t is not actually a table 20180715 09:49:44<+discordbot1> In Lua, parentheses are optional in function calls if the function has only one parameter and you are passing a string or table literal. 20180715 09:49:55< hk238> oh cool 20180715 09:50:13< hk238> so I'm probably calling the function with something other than what I think I'm calling it with 20180715 09:50:38<+discordbot1> It is the practice in Wesnoth mainline Lua code to omit parentheses in wesnoth.require() calls, but you can use them if you want. 20180715 09:51:30< hk238> yeah 20180715 09:51:31< hk238> hmm 20180715 09:51:45< hk238> but anyway I think the problem is not with the helper but actually with the other option, the table that is 20180715 09:52:12< hk238> hmm 20180715 09:52:13< hk238> :D 20180715 09:52:32< hk238> I have to go out for a bit 20180715 09:52:46< hk238> like 15 minutes , still going to try and get this done today 20180715 09:52:52< hk238> I've been very tired the entire day 20180715 10:11:01< hk238> alright :d 20180715 10:12:31< hk238> okay I think I'm just calling the function with a string instead of table 20180715 10:12:53< hk238> no that's not right 20180715 10:12:58< hk238> let's print what it is :D 20180715 10:13:49< hk238> it's not what it's supposed to be at least so that's probably the problem 20180715 10:17:35< hk238> okay so that's the source of the problem for some reason the table contains functions instead of strings 20180715 10:17:47< hk238> does utils.split return an array? 20180715 10:18:37<+discordbot1> No, it returns an iterator. 20180715 10:22:11< hk238> okay so I guess that's problem then 20180715 10:22:20< hk238> how do I convert it into an array? 20180715 10:23:48< hk238> hmm let's see 20180715 10:26:12<+discordbot1> https://gist.github.com/jyrkive/963db99f94297857dea7af9e692b361f 20180715 10:32:54< hk238> yes sorry I actually achieved that part just now :D 20180715 10:33:11< hk238> but all that brings us is the next error! :D 20180715 10:33:24< hk238> attempt to index a nil value 20180715 10:34:48< hk238> btw here's the whole thing with the generic functions from earlier murky weathercast 20180715 10:34:55< hk238> since Im just pasting these little chunks around 20180715 10:35:20< hk238> https://pastebin.com/6nVxMGwk 20180715 10:35:48< hk238> the relevant stuff is a fter 197 20180715 10:36:07< hk238> the current error is attempt to index nil value from line 226 20180715 10:36:43< hk238> I guess for starters I should print the shuffler thing 20180715 10:37:28<+discordbot1> Sounds like t is nil. 20180715 10:38:25< hk238> great 20180715 10:38:26< hk238> :D 20180715 10:39:26< hk238> however I printed the contents of the array and they were units or at least appeared like that on the console 20180715 10:40:42< hk238> ahh it's amazing I'm having so much trouble with this although it's quite simple 20180715 10:42:29< hk238> structurally this code is atrocious :D 20180715 10:43:08<+discordbot1> It feels overengineered, with too much use of functional programming. 20180715 10:43:17<+discordbot1> Espoecially for an inexperienced programmer. 20180715 10:43:33<+discordbot1> ¨Especially 20180715 10:43:49< hk238> I don't think that's the problem on the contrary it's probably that I'm not using any concepts from functional programming with this random thing 20180715 10:44:08< hk238> the properly packaged stuff were from the earlier project I just copy pasted them here 20180715 10:44:29< hk238> : ) 20180715 10:45:15< hk238> so you're basically saying that just by looking at the top part of the pastebin 20180715 10:45:50<+discordbot1> Nah, there are also other things. 20180715 10:46:00<+discordbot1> Such as for_each_index(). 20180715 10:46:18<+discordbot1> I have mentioned before that its essentially just alternative syntax for a regular loop. 20180715 10:46:31< hk238> yeah that's exactly the point, loops are pretty bad structures 20180715 10:46:48< hk238> but I guess you're still sticking to them 20180715 10:46:49< hk238> :D 20180715 10:47:21<+discordbot1> for_each_index() doesnt accomplish anything. The only thing it does is being harder to understand, due to not following Lua idioms. 20180715 10:47:38<+discordbot1> It is a loop that just does not look like a loop. 20180715 10:49:23< hk238> when I first started programmign I did lose forloops for everything, and double forloops too 20180715 10:49:41< hk238> but since then with some tutoring from other programmers I was taught it's not a good way of doing things 20180715 10:49:52< hk238> and I can see that myself, I do agree that in the case of for_each_index the benefit is marginal 20180715 10:50:02<+discordbot1> It is indeed not a good idea to use for loops for everything. 20180715 10:50:04< hk238> besides not a very functional function to begin with, doesnt return a value 20180715 10:50:34< hk238> but that's also another good reason to make it a function, so you know that this is where all kinds of bad stuff happens, like a for loop 20180715 10:50:44< hk238> but anyway let's not argue :D 20180715 10:50:45<+discordbot1> Just last Friday I told a coworker to use LINQ .Where() function to filter a C# array instead of a foreach loop. 20180715 10:50:56<+discordbot1> You are just using FP too much. 20180715 10:51:09< hk238> that's not the problem 20180715 10:51:18< hk238> In fact to be precise I could analyze what the actual problem is 20180715 10:51:30< hk238> but I don't really have any strong desire for that 20180715 10:51:52< hk238> the actual problem is that I have these weird structure of statements following one another and I've not packed the rest of stuff properly into functions 20180715 10:52:19< hk238> I should probably make a separate function that handles the datastructure of the type that contains the factions and units 20180715 10:52:42< hk238> and then it would more clearcut where my troubles with the wesnoth interface begin and where my mistakes with lua begin 20180715 10:53:05< hk238> but instead I'm just being a little lazy and trying to get things done quickly, but then keep stumbling into these problems like utils returning an iterator 20180715 10:53:11< hk238> :D 20180715 10:53:58< hk238> so well anyway thanks for all the help if you want to insist that for loops are a good way of doing things, my opinion is they're not, we can disagree on that and move on 20180715 10:55:38<+discordbot1> For loops are a good way to do things that FP constructs cannot do. 20180715 10:55:57<+discordbot1> for_each_index() is not an FP construct. It is just a disguised loop. 20180715 10:56:29< hk238> you're right it's not a proper function that way, it's exactly why I think it's not very good 20180715 10:56:44< hk238> but it's still far better than for loop 20180715 10:57:22< hk238> of course logically a program that uses for loops and iterators and generators and so on can be equivalent to one that does the same thing but instead the iterating and generating and repeating happens with function calls 20180715 10:57:28<+discordbot1> Nah. A disguised loop is harder to understand than a regular loop, and not better in any way. 20180715 10:57:52< hk238> I think it's much better, we can disagree on that 20180715 10:58:08<+discordbot1> The point of FP is that it avoids you from having to write the same algorithm such as "count all objects which satisfy a condition" over and over again. 20180715 10:58:24< hk238> that's far from being the only point of FP 20180715 10:58:32<+discordbot1> for_each_index() is not an algorithm. The only thing it does is looping. 20180715 10:58:33< Ravana_> it is disguised loop in Lua, but doing it is normal in javascript (.each()) 20180715 10:58:50< hk238> well if you want to discuss that point 20180715 10:59:12<+discordbot1> Well, at least I use for..of for JavaScript loops. 20180715 10:59:23<+discordbot1> (And FP functions when they fit, of course.) 20180715 10:59:39< hk238> I don't think for loops are any better in javascript than they're in lua 20180715 11:00:04< hk238> but if we want to discuss the purpose of functional programming 20180715 11:00:13< hk238> over what, object oriented programming? 20180715 11:00:21< hk238> over for loops? 20180715 11:00:24< hk238> :D 20180715 11:00:32<+discordbot1> Over structured programming, in this case. 20180715 11:00:43< hk238> over structured is definitely not the problem here 20180715 11:00:53<+discordbot1> And like I have been saying, I use both FP and SP depending on situation. 20180715 11:01:08< hk238> in fact I know my problems start on line X and end 30 lines later, and there's only 1 function inbetween, and the problem is not even inside the function, it's in these other random lines 20180715 11:01:18<+discordbot1> FP when it can solve the problem. And SP when FP cannot do it. 20180715 11:01:31<+discordbot1> (Instead of attempting to disguise the SP solution as FP.) 20180715 11:02:03< hk238> you're basically grasping on this single case of for_each_index and you're trying to say it's a worse structure than a for loop 20180715 11:02:31< hk238> and I think it's obvious that this is erroneous, but perhaps it does require some actual argumentation 20180715 11:02:45<+discordbot1> It is a worse structure. It does not have any advantages, and it is harder to understand. 20180715 11:02:56< hk238> for_each_index at least even in the name carries an important meaning, it does something for each index of an array 20180715 11:03:14< hk238> and more importantly it calls a function and gives function arguments that are the index and the value 20180715 11:03:25<+discordbot1> And? In a regular for loop, it is obvious for any Lua programmer that it loops over the array. 20180715 11:03:28< hk238> of course i suppose I should actually write some checks 20180715 11:03:30<+discordbot1> It is more clear that way. 20180715 11:03:38< hk238> like is this actually an array, is that actually a function 20180715 11:04:08< hk238> but it's still not an FP function, it doesn't actually do anything with the return value 20180715 11:04:19<+discordbot1> Calling a function instead of writing the code inline is not an advantage if you pass an anonymous function. 20180715 11:04:23< hk238> it's expecting some non-functional modification of state taking place 20180715 11:04:36<+discordbot1> You are still writing the code inline, you have just added a useless function call in between. 20180715 11:04:50< hk238> it's not really a useless call it is improving the structure 20180715 11:05:01-!- zookeeper [~lmsnie@wesnoth/developer/zookeeper] has joined #wesnoth-umc-dev 20180715 11:05:34<+discordbot1> (Note that if it is a named function, then you indeed improve the situation with a for_each_index() function by avoiding duplication. That is the reason why most programming languages offer such a functyion in their standard library.) 20180715 11:05:36< hk238> I do agree that in this particular case the benefit is very marginal, but it's hard to see how you can't see that it's much clearer 20180715 11:05:57<+discordbot1> (A rule of thumb: never call a for_each_index() equivalent with an anonymous function.) 20180715 11:06:11< hk238> I don't think that's the only reason 20180715 11:06:34< hk238> and in the end you can implement everything for loops 20180715 11:06:39< hk238> and goto statements 20180715 11:06:48< hk238> you can probably do functional programming in Qbasic if you really want to 20180715 11:06:55< hk238> just that somewhere it starts getting less effective 20180715 11:07:07< hk238> and if you pick the very marginal case of this for_each_index, which isn't even a proper function 20180715 11:07:13< hk238> that's pretty much the best case you can make 20180715 11:07:20< hk238> and even that case is from my perspective failing 20180715 11:07:42<+discordbot1> Simply use the most obvuious way to write loops in the language. 20180715 11:07:53<+discordbot1> It is the way everyone can intuitively understand. 20180715 11:08:35< hk238> however you have a point in that it does introduce a new function for someone else to look at, where as by default they're already familiar with the language basics, so people would know what a for loop is 20180715 11:09:27< hk238> other than that I think it's also about the attitude of wanting to do things properly 20180715 11:09:54< hk238> but I think we should stop this arguement I just want to get this random faction thing done :D 20180715 11:10:03<+discordbot1> You are not "doing things properly" if you hide loops into a pseudo-functional function. 20180715 11:10:43< hk238> I find it much better than using the actual loop 20180715 11:10:57< hk238> or at least a little bit better 20180715 11:11:45< hk238> anycase it's blatantly obvious the problem is not using concepts of functional programming, especially when I know the problem in the current code isn't even that part of the thing, but rather, exactly outside that part 20180715 11:11:48< hk238> :D 20180715 11:15:10< hk238> anyway I don't want to argue... gonna try and finish this thing now :O 20180715 11:20:59< hk238> you've been very helpful and knowledgeable thanks for that :o 20180715 11:25:14< hk238> speaking of which what do think of the identity function, that is function identity (arguments) return arguments end , but I don't know how to make it return all of the arguments, so juts for a single parameter? 20180715 11:25:27< hk238> like function (x) return x end? 20180715 11:30:11< Ravana_> I think you do not need it, but it is possible to do - google if you really want it 20180715 11:30:39< hk238> :D 20180715 11:31:10< hk238> hmm :o 20180715 11:33:12< hk238> alright I have pin-pointed the problem it's helper.shuffle 20180715 11:33:22< hk238> what does that do exactly? is there documentation? I'll try googling 20180715 11:34:26< hk238> oh the docs even say it's not MP safe :D but that's precisely why I was using it, I thought it is 20180715 11:34:46< hk238> no sorry it also says in new version it is synced 20180715 11:35:48< hk238> however this is where the problem happens I have something that works, I give it to the helper.shuffle it comes back and it doesn't work anymore, so it seems it's not preserving the array as an array or something. Does it return some kind of iterator again? 20180715 11:36:53< Ravana_> inspect it when in doubt 20180715 11:37:16< hk238> oh right I just read the crucial line from the documentation 20180715 11:37:27< hk238> helper.shuffle doesn't return anything it mutates the original thing 20180715 11:37:47< hk238> okay sorry for assuming it would return a new array in a FP spirit :D 20180715 11:38:13< hk238> instead it's doign inplace mutation, it must be my FP-brainwashed head that's the problem /sarcasm 20180715 11:38:14< hk238> :D 20180715 11:39:09< hk238> it's just extremely ironic that this code fails at exactly the location where a non-FP principle is taking place 20180715 11:39:20< hk238> coz a functional programmer would make helper.shuffle return a new array 20180715 11:39:22< hk238> :D 20180715 11:40:07< hk238> but it says it there in the documenation right on the first line it's my fault for not getting what it says 20180715 11:47:22< hk238> however the problem has been fixed 20180715 11:47:23< hk238> https://pastebin.com/uHiwWe2P 20180715 11:47:23< hk238> :D 20180715 11:49:45< hk238> wow no errors it might actually work 20180715 11:50:21< hk238> with only the exception that it's not working, just not producing errors. Hardly an improvement :D 20180715 11:52:18< hk238> okay the randomizer is working but now the assignment is not working 20180715 11:52:26< hk238> wesnoth.wml_actions.modify_side({side=1}, {recruit=side_one_recruits}) 20180715 11:53:00< hk238> does that look like a syntactically correct expression? also that's in a scenario config file in lua tags and dofile, inside preload event 20180715 11:53:18< hk238> this could be lots of fun if it ends up working 20180715 11:53:46< Ravana_> wml tags only use first argument 20180715 11:54:04< hk238> um what does that mean? :o 20180715 11:54:13< Ravana_> you give 2 arguments to it 20180715 11:54:17< hk238> I should have a wrapping table? 20180715 11:54:36< hk238> like ({{side=1},{recruit=side_one_recruits}}) ? 20180715 11:54:40< Ravana_> wml tags take one wml table as argument 20180715 11:54:55< Ravana_> what you just posted is not valid wml table 20180715 11:55:03< hk238> hmm darn 20180715 11:55:49< hk238> :o 20180715 11:55:59< Ravana_> since you only want keys, what you want looks like normal table 20180715 11:56:27< hk238> oh you mean like {side=1, recruit=side_one_recruits} ? 20180715 11:56:31< Ravana_> yes 20180715 11:56:46< hk238> okay sorry and thanks it should work after this I believe 20180715 11:57:51< hk238> it works it's amazing :D 20180715 12:07:04< hk238> hmm however there are OoS errors now 20180715 12:07:24< hk238> is helper.shuffle really MP safe? :o 20180715 12:11:34< hk238> ohh disappointing how to figure out where the problem is.. could it be wesnoth.dofile? Or maybe it is helper.shuffle? It's hard to think which could it be.. 20180715 12:12:03<+discordbot1> You can try disabling or bypassing some of the code. 20180715 12:12:56< hk238> that seems like a good idea.. just insert some pre-determined set of recruits and see if it's the dofile maybe :o 20180715 12:13:41< hk238> what about utils.split 20180715 12:13:44< hk238> is that MP safe? 20180715 12:14:08< hk238> it seems like the most suspicious candidate given it returns an iterator and everything 20180715 12:14:33<+discordbot1> It is MP safe. It always returns the results in the same order. 20180715 12:14:41< hk238> okay 20180715 12:14:57< hk238> hmm how about wesnoth.game_config.era does that return the list recruits always in the same order? 20180715 12:15:18< hk238> I guess that's easy to test 20180715 12:20:17< hk238> they seem to be in the same order 20180715 12:21:07< hk238> I think the only remaining candidates are helper.shuffle and wesnoth.dofile 20180715 12:21:18< hk238> what about table.concat? 20180715 12:21:29< hk238> would seem like it has to do it in order silly to ask 20180715 12:21:30< hk238> :D 20180715 12:23:03< hk238> or maybe it's somehow the fact that I wrapped the helper.shuffle in that ironic function 20180715 12:23:12< hk238> could strip that for starters 20180715 12:23:42<+discordbot1> Just do higher-level testing for now. 20180715 12:23:48<+discordbot1> Disable shuffling completely. 20180715 12:24:03<+discordbot1> Even if it doesn't stop the OOS error, keep it disabled. 20180715 12:24:38<+discordbot1> You'll eventually be down to a very small amount of still-enabled code, and you'll know for certain that the problem is somewhere in there. 20180715 12:25:18< hk238> yeah there's also the possibility this is again an artefact of the require_scenario tag not workign properly 20180715 12:25:31< hk238> just dawned upon me that talos may not have updated his addon 20180715 12:28:16< hk238> im not sure but it's probably a good idea to check that first 20180715 12:44:50< hk238> okay i just modified the sides to have spearman and grunt as recruits and no randomization taking place 20180715 12:44:54< hk238> and there was no OoS 20180715 12:45:02< hk238> so it's definitely in the process of picking the units and not in the dofile 20180715 12:45:13< hk238> I think it's probably helper.shuffle that's somehow causing this 20180715 12:45:35<+discordbot1> Try it with shuffling disabled but everything else enabled. 20180715 12:47:28< hk238> right that seems like a good idea 20180715 12:48:05< hk238> also extremely simple to test since it only requires adding the comment on one line 20180715 12:48:05< hk238> :D 20180715 12:52:56< hk238> okay it's not the helper.shuffle 20180715 12:53:42< hk238> utils.split? 20180715 12:53:42< hk238> :D 20180715 12:54:10< hk238> it might be im iterating wrong over the results of utils.split 20180715 12:54:28< hk238> but there's also another problem since this time I got just 4 unit sinstead of 6 but that's probably not the source of this oos error 20180715 12:55:24< hk238> https://pastebin.com/d9vMJxSg 20180715 12:55:36< hk238> does it look it might be this iteration that causes the oos? 20180715 12:55:54<+discordbot1> No, it doesn't. 20180715 12:56:07< hk238> I'm baffled :D 20180715 12:56:09<+discordbot1> It's the correct way to loop over the results. 20180715 12:56:51< hk238> I believe you, but I'm running out of ideas what could cause the oos 20180715 12:57:09<+discordbot1> Again, you can test by disabling parts of your code. 20180715 12:57:13< hk238> table.concat? 20180715 12:57:14< hk238> :D 20180715 12:57:24<+discordbot1> You can even binary search where the problem originates. 20180715 13:00:05< hk238> how would I do that ? :o 20180715 13:00:22<+discordbot1> Disable half of the code. 20180715 13:00:40<+discordbot1> After testing, you know know which half of it causes the OOS. 20180715 13:00:54<+discordbot1> Disable half of that half, and retest. 20180715 13:01:19<+discordbot1> At one point you'll be down to one line. At that point you can split it into multiple lines. 20180715 13:01:35<+discordbot1> After that, you can go inside a function and disable half of it. 20180715 13:02:08<+discordbot1> In the end, you'll be down to an extremely small chunk of code. 20180715 13:04:31< hk238> yeah that seems like a possible approach 20180715 13:05:11< hk238> what about wesnoth.game_config.era , does it return a table that is sorted in lua terms? 20180715 13:05:21< hk238> it accessible by numeric indices at least 20180715 13:05:37<+discordbot1> I don't know if it's sorted. 20180715 13:06:06<+discordbot1> To test, you can create your own custom unit list and use it instead of the real wesnoth.game_config.era. 20180715 13:06:29< hk238> yeah that's a lot of typing though 20180715 13:06:57< hk238> is it possible to join your own game on the multiplayer server with two clients? that would make life easier :D 20180715 13:07:18<+discordbot1> Yes, it's possible. 20180715 13:07:28<+discordbot1> But I think you need multiple forum accounts for that. 20180715 13:07:54< hk238> oh 20180715 13:16:24< hk238> ahh I'm tired 20180715 13:17:21< hk238> I'll try sorting the thing returned by wesnoth gameconifg 20180715 13:17:29< hk238> maybe that's what it is :D 20180715 13:21:23< hk238> okay table.sort doesn't work because the values are tables 20180715 13:21:31< hk238> it definitely sounds like this might have something to do with the problem 20180715 13:21:50< hk238> hm 20180715 13:22:22< hk238> so I can't sort the stuff extracted either, because it's also a table of tables, well arrays 20180715 13:22:33< hk238> unless I'll make a sorting function for that 20180715 13:22:47< hk238> this has all the signs of the disease so it probably is the problem 20180715 13:22:47< hk238> :D 20180715 13:23:09< Ravana_> you can use name with different capitalization 20180715 13:23:12<+discordbot1> It would probably be less effort to just create a small mock table in place of wesnoth.game_config.era. 20180715 13:23:21< hk238> name with different capitalization? what does that mean? 20180715 13:23:31<+discordbot1> Remember, at this point you're merely checking whether its order is the same for all players. 20180715 13:23:51< hk238> yeah you're right I should just do that.. 20180715 13:23:52< Ravana_> a and A are different clients that use same forum account 20180715 13:24:07< hk238> oh rav that's interesting 20180715 13:24:27< hk238> I'll do the mocktable version although It does seem highly likely that this has to be the source of the error :D 20180715 13:24:34< Ravana_> wesnoth.game_config.era is wml table, it does not make sense to sort it 20180715 13:24:36< hk238> but maybe it's not 20180715 13:25:01< hk238> hm 20180715 13:25:25< hk238> what are your thoughts on that, rav? :D 20180715 13:25:52< hk238> if it was iterated over would it cause oos? 20180715 13:26:00< hk238> I'll make the mock table to make some progress.. 20180715 13:26:08< Ravana_> it does not make sense to iterate over wml table 20180715 13:26:37< Ravana_> you request key and subtags by name 20180715 13:30:18< hk238> it accessible by numeric indices 20180715 13:30:39< hk238> for an example wesnoth.game_config.era[2][2].recruit is the list of loyalist recruits 20180715 13:31:07< Ravana_> yes, that is how wml table is defined 20180715 13:31:29< hk238> so since it has numeric indices, it has an order, thus you can iterate it in order 20180715 13:31:31< Ravana_> but you are not supposed to rely on its internal ordering 20180715 13:31:31< hk238> ? 20180715 13:31:44< hk238> okay so this definitely is the source of the problem then? :D 20180715 13:32:02< hk238> might as well write the list of recruits manually and go with that 20180715 13:32:13< Ravana_> I don't think it is, but better to use normal way to get wml child 20180715 13:34:16< hk238> D: 20180715 13:36:17< hk238> it's getting difficult to see what else could be the problem 20180715 13:37:12< hk238> you joined and left! 20180715 13:37:15<+discordbot1> Again, you can check by replacing wesnoth.game_config.era with a mock table. 20180715 13:37:24< Ravana_> bug of wesnoth 20180715 13:37:35< Ravana_> pressing esc means ok with 1.14 20180715 13:37:45< hk238> jyrkive that's exactly what I did and waiting for someoen to join 20180715 13:38:44< hk238> ravana can i make you a player to test if there's oos? 20180715 13:38:55< Ravana_> yes 20180715 13:38:58< hk238> okay thanks 20180715 13:39:47< hk238> ahhh.. there was oos despite the mock table 20180715 13:39:52< hk238> at least ti's not game_config.era 20180715 13:40:01< hk238> I'm still suspicious of this utils.split though 20180715 13:40:14< hk238> running out of places it can be 20180715 13:40:36< Ravana_> that message suggests you use illegal do_command 20180715 13:40:54<+discordbot1> Again. You can binary search for the cause. 20180715 13:40:54< hk238> huh? 20180715 13:40:59< hk238> do_command? 20180715 13:41:16< hk238> " for chunk in utils.split(str) do" 20180715 13:41:17< hk238> here? 20180715 13:41:37< Ravana_> 20180715 16:39:07 error replay: cannot recruit unit: None of your leaders are able to recruit that unit. 20180715 13:42:17< hk238> um 20180715 13:42:34< hk238> perhaps there's a inconsistency with what the leaders can recruit and modify_side ? 20180715 13:42:46< hk238> although that's not it 20180715 13:42:55< hk238> because I already tested it with manually assigning the recruits 20180715 13:42:59< hk238> and that worked 20180715 13:43:06< hk238> so all I got is utils.split 20180715 13:43:57<+discordbot1> I assume utils.split(wesnoth.game_config.era) is not all the code you have? 20180715 13:44:14< hk238> yeah 20180715 13:44:18<+discordbot1> You need to be suspicious of everything you haven't cleared of suspicion by testing. 20180715 13:44:27< hk238> you're right 20180715 13:45:40< hk238> I'm tired 20180715 13:46:05< hk238> it's hard to test while waiting for someone to join oo 20180715 13:46:29< hk238> I think I'll just manually write the default recruit lists 20180715 13:46:40< hk238> and use a different kind of table 20180715 13:46:56< hk238> also that gets rid of the split command 20180715 13:50:32< hk238> on the plus side can also insert some new units here from mainline 20180715 13:50:43< hk238> on the downside it doesnt work with other eras then 20180715 14:12:41< hk238> how can I make sure a manually written table is in order? 20180715 14:12:55< hk238> it can't be sorted due to being a table of tables, or array of arrays 20180715 14:13:12<+discordbot1> Just use numeric indices. 20180715 14:13:28<+discordbot1> A manually written table with numeric indices is always in the order you write. 20180715 14:14:10< hk238> right okay let's do that 20180715 14:16:31< hk238> except writing all of these with numeric indices takes forever 20180715 14:16:46<+discordbot1> You don't need to write the indices explicitly. 20180715 14:16:50< hk238> but on the other hand I can use sort on these subtables 20180715 14:16:58< hk238> But that's what I'm doing out of desperation 20180715 14:17:22<+discordbot1> local fruits = {"apple," "banana", "pear"} 20180715 14:17:30<+discordbot1> The above table has numeric indices. 20180715 14:17:52< hk238> https://pastebin.com/F3Cc4cCJ 20180715 14:18:00< hk238> this should be oos proof right 20180715 14:18:01< hk238> :D 20180715 14:18:25<+discordbot1> Yes, it is. 20180715 14:18:38<+discordbot1> And you don't even need to call table.sort() for the child tables. 20180715 14:18:53< hk238> call me paranoid but I running out of things that can be out of sync 20180715 14:18:54< hk238> 8) 20180715 14:19:13<+discordbot1> Again, just binary search where the OOS occurs. 20180715 14:19:59< hk238> I'm trying :D 20180715 14:20:16< hk238> well not the binary search method but I don tknow how to disable half of this and there isnt much left to disable anyway 20180715 14:22:11< hk238> so 20180715 14:22:19< hk238> I don't have a clue the only place remaining is this 20180715 14:22:48< hk238> https://pastebin.com/d3Udv0zV 20180715 14:23:02< hk238> but seeing how it onl yuses wesnoth.random it shouldn't be out of sync 20180715 14:23:10<+discordbot1> Post all the code you currently run. 20180715 14:23:19< hk238> :D 20180715 14:23:48< hk238> https://pastebin.com/fA3b4jpA 20180715 14:25:18< Ravana_> you might call that file from unsynced event 20180715 14:26:16< hk238> great 20180715 14:26:22< hk238> preload? 20180715 14:26:25< hk238> :D 20180715 14:26:41< hk238> is preload an unsynced event? 20180715 14:26:48<+discordbot1> You can try modifying choose_n_units_from_array() to test. 20180715 14:27:01<+discordbot1> Try replacing it with a function that returns a hardcoded table. 20180715 14:27:05< Ravana_> yes 20180715 14:27:11< hk238> okay so that's what it is then 20180715 14:27:12<+discordbot1> Or t unmodified. 20180715 14:27:25< hk238> wesnoth.rando mis not synced because the event that fires this thing is not synced 20180715 14:27:31< hk238> so the code is fine it's just in the wrong place 20180715 14:27:59< hk238> so the source of the oos is actually different numbers from wesnoth.random 20180715 14:28:11< hk238> but that's because it's from unsynced event 20180715 14:28:30< hk238> so.. how do I fix this? :O 20180715 14:29:08< hk238> change the event somehow 20180715 14:29:08< hk238> :D 20180715 14:29:09< Ravana_> evaluate wesnoth.random in synced event 20180715 14:29:27< hk238> I pretty much narrowed it down to the part that has wesnoth.random stuff 20180715 14:29:30<+discordbot1> prestart is a synced event. 20180715 14:29:33<+discordbot1> See https://wiki.wesnoth.org/EventWML#Multiplayer_safety 20180715 14:29:34< hk238> the onyl way this makes sense is this unsynced event 20180715 14:30:09< hk238> yeah 20180715 14:30:18< hk238> so I change the preload to prestart? 20180715 14:30:33<+discordbot1> Yes. It should do the trick. 20180715 14:30:54< Ravana_> with side effect of disabling saves 20180715 14:31:01< hk238> ahh okay basically I spent the entire day finding a bug from code that didn't have one 20180715 14:31:04< hk238> brilliant 20180715 14:31:05< hk238> xd 20180715 14:31:35< hk238> well it did have lots of bugs but most of the time was spent with something else 20180715 14:31:46< hk238> the preload event wasn't written by me it's in the original scenario 20180715 14:31:57< hk238> it just wasn't doing anything important I didn't realize it could be of suspect 20180715 14:32:27< Ravana_> preload is to set up environment 20180715 14:32:40< Ravana_> it may not affect gamestate 20180715 14:33:24< hk238> yeah sorry 20180715 14:33:28< hk238> what a huge waste of time :D 20180715 14:33:34< hk238> it's already 5:30 pm 20180715 14:33:46< hk238> welll it wanst waste but 20180715 14:33:50< hk238> still 20180715 14:33:53< hk238> I learned something new 20180715 14:37:59<+discordbot1> Isn't programming always about such things? 20180715 14:40:01< hk238> btw it works now 20180715 14:40:03< hk238> :D 20180715 15:34:39<+discordbot1> If I wanted the objective to be survive 24 turns, would I make an event with the name of turn 25 or turn 24? 20180715 15:38:38<+discordbot1> oh there's a turn end event 20180715 15:46:27<+discordbot1> Hey question 20180715 15:48:06<+discordbot1> If I do an event which contains [message] role=Refugee message= _ "We can't abandon our home! [/message] And the roll is as stated below [role] role=Refugee [filter] id=Squid [/filter] [filter_second] type=Thug, Poacher, Thief, Bandit [/filter_second] [/role] Will it make Squid say it before the generic units? 20180715 15:56:03<+discordbot1> What is [filter_second] filtering for? I think it is not available in turn end events 20180715 15:57:30<+discordbot1> in an attack related event, [filter] would filter for one unit, while [filter_second] filters the second unit involved 20180715 16:01:03<+discordbot1> Here is an example from mainline. the inex first listed for type have priority https://github.com/wesnoth/wesnoth/blob/1.14/data/campaigns/Descent_Into_Darkness/utils/macros.cfg#L24-L67 20180715 16:05:31<+discordbot1> thanks for responding Sevu 20180715 16:15:55<+discordbot1> you're welcome 20180715 16:21:07<+discordbot1> [if] [have_unit] side=1 id=Squid [/have_unit] [then] [message] speaker=Squid message= _ "We can't abandon our home! [/message] [/then] [else] [message] role=Refugee 20180715 16:21:07<+discordbot1> message= _ "We can't abandon our home! [/message] [/else] [/if] 20180715 16:21:20<+discordbot1> Haha cancer putting that in Discord 20180715 17:37:08<+discordbot1> The moveto event doesn't account for location travelled to get to a spot, only the final spot. Is there an event which accounts for the travel coordinates? 20180715 17:38:43<+discordbot1> there's a move_over or some similar event 20180715 17:38:48<+discordbot1> forget the exact name 20180715 17:39:15<+discordbot1> https://wiki.wesnoth.org/EventWML#enter_hex 20180715 17:39:20<+discordbot1> enter_hex/exit_hex 20180715 17:39:48<+discordbot1> Ah, thanks. I was looking for an event with "move" in the name 20180715 18:08:57-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has quit [Remote host closed the connection] 20180715 18:09:03-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has joined #wesnoth-umc-dev 20180715 18:20:21-!- hk238 [~kvirc@unaffiliated/hk238] has quit [Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/] 20180715 20:10:21-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has quit [Remote host closed the connection] 20180715 20:10:27-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has joined #wesnoth-umc-dev 20180715 20:12:39-!- mattsc [~mattsc@wesnoth/developer/mattsc] has quit [Quit: So long and thanks for all the fish.] 20180715 20:36:44-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has quit [Remote host closed the connection] 20180715 20:36:50-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has joined #wesnoth-umc-dev 20180715 20:47:22-!- Jordys [~Jordys@160.154.136.152] has joined #wesnoth-umc-dev 20180715 21:01:31-!- Jordys [~Jordys@160.154.136.152] has quit [Quit: Surfing on clouds to the exit gate] 20180715 21:12:27-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has quit [Remote host closed the connection] 20180715 21:12:33-!- janebot [~Gambot@unaffiliated/gambit/bot/gambot] has joined #wesnoth-umc-dev 20180715 21:43:38<+discordbot1> Do I have to recall my leader each scenario? 20180715 21:45:48<+discordbot1> Transitioning from my first scenario to my second, my leader doesn't spawn. 20180715 21:46:27<+discordbot1> [side] side=1 id=Gandfal message= _ "Gandfal" controller=human team_name=Blackhand description=Blackhand x,y=29,1 [/side] 20180715 21:49:19-!- zookeeper [~lmsnie@wesnoth/developer/zookeeper] has quit [Ping timeout: 260 seconds] --- Log closed Mon Jul 16 00:00:36 2018