00:22 <+bridge> [ddnet] do we have a set data structure in base? 01:01 < ddnet-commits> [ddnet] Learath2 opened pull request #1337: Ignore DNSBL on "empty" servers. (master...dd_pr_dnsblempty) https://git.io/fxsNp 07:17 <+bridge> [ddnet] @n000b the error message should be improved. I think most players' "you're on the dnsbl list" actually means "the server hasn't received an dnsbl answer yet" 07:17 <+bridge> [ddnet] @n000b the error message should be improved. I think most players' "you're on the dnsbl list" actually means "the server hasn't received a dnsbl answer yet" 09:46 <+bridge> [ddnet] lmao 11:19 <+bridge> [ddnet] im going to guess never based on how ping works but would be cool if there was an actual patch for this 11:19 <+bridge> [ddnet] https://cdn.discordapp.com/attachments/293493549758939136/498786476545277972/Screen_Shot_2018-10-08_at_2.02.13_AM_2.png 11:21 <+bridge> [ddnet] Well, we could change how ping works 11:22 <+bridge> [ddnet] wouldnt it require people to use a new client 11:49 <+bridge> [ddnet] @deen i fucking needed to change the whole configuration of my router to have like max 80ms in GER 12:14 <+bridge> [ddnet] @Cellegen ok, so? 12:14 <+bridge> [ddnet] hmmm 12:14 <+bridge> [ddnet] but you see 12:15 <+bridge> [ddnet] am i wrong that changing how ping is reportd would also require the client to be changed 12:15 <+bridge> [ddnet] i cant manage to bring myself less than 80ms ;-; 12:15 <+bridge> [ddnet] @onby I'd be interested if there is a way to do it without client changes 12:16 <+bridge> [ddnet] well the way i do pingfake is by changing the ackgametick thats sent along with inputs 12:16 <+bridge> [ddnet] doesn't that have adverse side effects? 12:16 <+bridge> [ddnet] like potential packet loss 12:16 <+bridge> [ddnet] im not sure how a server would be able to tell whether a player actually takes a long time to acknowledge the inputs or is faking 12:16 <+bridge> [ddnet] mm 12:16 <+bridge> [ddnet] it might make it a little laggier but not really i think 12:18 <+bridge> [ddnet] it isnt precise afaik u can only get precision of Β±1 tick so ~20ms? 12:19 <+bridge> [ddnet] if ur ping goes "below 0" it causes problems 12:19 <+bridge> [ddnet] yeah, feels so 12:19 <+bridge> [ddnet] everyone has 8, 24-28, 40-48 ping etc 12:20 <+bridge> [ddnet] yeah so given this im not sure if theres any way to detect fakeping without making everyone use an updated client unlss im missing something 12:42 <+bridge> [ddnet] if ackgametick is based on the real game tick it would be probably impossible to fix without changing the client, but if it is based on the last packet received by the server, it might be possible to do something about it 14:56 <+bridge> [ddnet] why is the spoof protection on password protected servers turned off? 15:01 <@deen> doesn't work I think 15:01 <+bridge> [ddnet] ok just tried it, your right ^^ 15:11 <+bridge> [ddnet] maybe somebody else could have a look at this and state his opinion https://github.com/ddnet/ddnet/pull/1320 15:47 <+bridge> [ddnet] Yeah need a tiebreaker on that one πŸ˜ƒ 15:56 < ddnet-commits> [ddnet] Learath2 closed pull request #1301: Continue work on Docker (master...dd_pr_dockerstuff) https://git.io/fAH6c 16:52 <+bridge> [ddnet] @Dev im on ddnet++ (based on 9.0.2) linux server. my score (finishtime) is only getting displayed after i renamed, how can i fix it so its like on ddnet or kog where the time is there on client connect? i already had a look into the code but didnt find why it shouldnt be working. 16:56 <+bridge> [ddnet] I have no idea. it could be a billion things. What is a ddnet++ and why do you need it? 16:56 <+bridge> [ddnet] https://github.com/ChillerDragon/DDNetPP 16:58 <+bridge> [ddnet] Oh, hadn't seen this yet. I'd suggest upgrading the ddnet version but I doubt that's an option after this many patches. Soooo just debug it? πŸ˜› 16:59 <+bridge> [ddnet] I'd start from looking at how the client decides when to display a time. 16:59 <+bridge> [ddnet] good point 17:02 <+bridge> [ddnet] @Learath2 could you help me a bit? 17:02 <+bridge> [ddnet] tomorrow maybe, kinda busy today 17:02 <+bridge> [ddnet] mh 17:44 < ddnet-commits> [ddnet] Learath2 opened pull request #1340: Editor fixes (master...dd_pr_editorsearch) https://git.io/fxZJM 18:22 <+bridge> [ddnet] @heinrich5991 are you the one with AppVeyor access? If so when you have a moment can you rebuild my PR and/or set-up access so all members can rebuild 18:22 <+bridge> [ddnet] ? 18:22 <+bridge> [ddnet] I think for some reason, both deen and I have an appveyor build 18:22 <+bridge> [ddnet] let's see if it's mine that's failing 18:23 <+bridge> [ddnet] wait, it's travis that's failing 18:24 <+bridge> [ddnet] appveyor was also failing but it suddenly succeeded 18:24 <+bridge> [ddnet] well, then it's the race condition between deen's and my appveyor 18:24 <+bridge> [ddnet] whoever finishes last sets the status, I think 18:24 <+bridge> [ddnet] which is nice, because a failing build probably finishes first πŸ˜„ 18:32 <+bridge> [ddnet] @Learath2 maybe you remember the drop weapon code from me (press f3 to drop the current weapon). Is it possible to remove that weapon if its falling into a shield? 18:33 <+bridge> [ddnet] I mean I cant get it to work :D 18:33 <+bridge> [ddnet] I don't remember your code, does it spawn a CPickup? 18:33 <+bridge> [ddnet] it spawns a CWeapon, made by me 18:34 <+bridge> [ddnet] https://github.com/ChillerDragon/DDNetPP/blob/master/src/game/server/entities/weapon.cpp 18:36 <+bridge> [ddnet] should be possible huh? 18:37 <+bridge> [ddnet] It is possible but I must say that looks very, uuhhm dirty 18:37 <+bridge> [ddnet] ik :D 18:39 <+bridge> [ddnet] You just need to check that like IsCharacterNear() 18:39 <+bridge> [ddnet] ye 18:39 <+bridge> [ddnet] but how xd 18:39 <+bridge> [ddnet] i couldnt do it for shields :( 18:39 <+bridge> [ddnet] You look for nearby `ENTTYPE_PICKUPS` and check that their type is `POWERUP_ARMOR` 18:40 <+bridge> [ddnet] how do i check the type of it? 18:40 <+bridge> [ddnet] ah 18:40 <+bridge> [ddnet] nvm xD 18:41 <+bridge> [ddnet] what do i have to use for the MAX size? 18:41 <+bridge> [ddnet] Who/what is a max size? 18:41 <+bridge> [ddnet] ? 18:41 <+bridge> [ddnet] MAX_CLIENTS? 18:41 <+bridge> [ddnet] I mean does it even matter? Think about it 18:41 <+bridge> [ddnet] no 18:42 <+bridge> [ddnet] You just need one armor to make it disappear 18:42 <+bridge> [ddnet] ye 18:42 <+bridge> [ddnet] So i'd just look for 1 πŸ˜› 18:42 <+bridge> [ddnet] oo 18:44 <+bridge> [ddnet] I'd add a new function to `CPickup` `int Type();` that returns `m_Type` rather then making `m_Type` public btw 18:45 <+bridge> [ddnet] Ye 18:45 <+bridge> [ddnet] you mean like for example GetActiveWeapon from Character? 18:46 <+bridge> [ddnet] Yes, but you need to stop thinking this way 18:46 <+bridge> [ddnet] It's a very simple thing I said, just trust your instincts instead of trying to make it "like" something 18:46 <+bridge> [ddnet] Okay :) 19:30 <+bridge> [ddnet] @Learath2 19:30 <+bridge> [ddnet] ``` 19:30 <+bridge> [ddnet] CPickup *apEnt[1]; 19:30 <+bridge> [ddnet] int Num = GameWorld()->FindEntities(m_Pos, 20.0f, (CEntity**)apEnt, 1, CGameWorld::ENTTYPE_PICKUP); 19:30 <+bridge> [ddnet] 19:30 <+bridge> [ddnet] for (int i = 0; i < Num; i++) 19:30 <+bridge> [ddnet] { 19:30 <+bridge> [ddnet] CPickup *pShield = apEnt[i]; 19:30 <+bridge> [ddnet] 19:30 <+bridge> [ddnet] if (pShield->GetType() == POWERUP_ARMOR) 19:30 <+bridge> [ddnet] { 19:31 <+bridge> [ddnet] return true; 19:31 <+bridge> [ddnet] } 19:31 <+bridge> [ddnet] } 19:31 <+bridge> [ddnet] ``` 19:31 <+bridge> [ddnet] 19:31 <+bridge> [ddnet] this is not working, but if i make it with a 2 its working 19:31 <+bridge> [ddnet] i mean apEnt[2] and in FindEntities replace the 1 with a 2 19:38 <+bridge> [ddnet] what's the masterserver of ddnet? 19:40 <+bridge> [ddnet] ``` 19:40 <+bridge> [ddnet] bool CWeapon::IsShieldNear() 19:40 <+bridge> [ddnet] { 19:40 <+bridge> [ddnet] CPickup *apEnts[2]; 19:40 <+bridge> [ddnet] int Num = GameWorld()->FindEntities(m_Pos, 20.0f, (CEntity**)apEnts, 2, CGameWorld::ENTTYPE_PICKUP); 19:40 <+bridge> [ddnet] 19:40 <+bridge> [ddnet] for (int i = 0; i < Num; i++) 19:40 <+bridge> [ddnet] { 19:40 <+bridge> [ddnet] CPickup *pShield = apEnts[i]; 19:40 <+bridge> [ddnet] 19:40 <+bridge> [ddnet] if (pShield->GetType() == POWERUP_ARMOR) 19:40 <+bridge> [ddnet] { 19:40 <+bridge> [ddnet] return true; 19:40 <+bridge> [ddnet] } 19:40 <+bridge> [ddnet] } 19:40 <+bridge> [ddnet] 19:40 <+bridge> [ddnet] return false; 19:40 <+bridge> [ddnet] } 19:40 <+bridge> [ddnet] ``` 19:40 <+bridge> [ddnet] 19:40 <+bridge> [ddnet] @Learath2 this works, is it right? 19:45 <+bridge> [ddnet] @fokkonaut I'd do `CPickup *pEnt;` and pass `(CEntity **)&pEnt` instead 19:45 <+bridge> [ddnet] how to pass it? 19:45 <+bridge> [ddnet] and replace that 2 with a 1 obv 19:45 <+bridge> [ddnet] I told you how to pass it in that sentence 19:46 <+bridge> [ddnet] but it didnt work then 19:46 <+bridge> [ddnet] tryed that already 19:46 <+bridge> [ddnet] Are you sure? 19:46 <+bridge> [ddnet] let me see 19:48 <+bridge> [ddnet] Oh actually in this case you don't even need a pointer to the entity 19:49 <+bridge> [ddnet] Oh actually you do nvm 19:49 <+bridge> [ddnet] anyways πŸ˜„ 19:49 <+bridge> [ddnet] That should still work 19:49 <+bridge> [ddnet] cannot convert 'CPickup' to 'CPickup*' in initialization 19:49 <+bridge> [ddnet] CPickup *pShield = pEnt[i]; 19:49 <+bridge> [ddnet] Well DUH 19:49 <+bridge> [ddnet] xd 19:49 <+bridge> [ddnet] sory 19:49 <+bridge> [ddnet] xDD 19:50 <+bridge> [ddnet] im blind 19:50 <+bridge> [ddnet] Actually I'm stupid 19:50 <+bridge> [ddnet] You need more then 2 though 19:51 <+bridge> [ddnet] You need 9 to be sure 19:51 <+bridge> [ddnet] ? 19:52 <+bridge> [ddnet] With 2 if the weapon is falling between 2 hearts and has an armor below it, it is possible that the 2 hearts get found and the armor doesn't get found 19:52 <+bridge> [ddnet] ahh 19:52 <+bridge> [ddnet] So to be safe look for 9 pickups, one you could be on and 8 could be around you 19:52 <+bridge> [ddnet] ok^^ 19:53 <+bridge> [ddnet] thanks! πŸ˜ƒ 20:06 <+bridge> [ddnet] Uhm @heinrich5991 I think I broke something as I pushed right after you bors r+'d 20:07 <+bridge> [ddnet] oh, awesome, you also did that thing πŸ™‚ 20:08 <+bridge> [ddnet] Can you eye over it to make sure I didn't introduce any bugs 20:09 <+bridge> [ddnet] mhk 20:13 <+bridge> [ddnet] @Learath2 you changed behavior in https://github.com/ddnet/ddnet/pull/1337/files#diff-f60b98c9084662cc2855d8c1a78e458bR390, previously the port wasn't recorded. probably won't break anything. wanna change it to the old behavior or do you think it's ok? 20:13 <+bridge> [ddnet] also, that function used to *modify* the pointer that looks read-only… 20:14 <+bridge> [ddnet] good job, function 20:14 <+bridge> [ddnet] Yeah those functions look horrible 20:14 <+bridge> [ddnet] it takes a pResult it never uses aswell 20:14 <+bridge> [ddnet] VoteMute and Mute I mean 20:15 <+bridge> [ddnet] I'll restore the old behaviour just in case 20:16 <+bridge> [ddnet] maybe don't modify the pointer that's passed in 20:16 <+bridge> [ddnet] that sounds outright horrible 20:17 <+bridge> [ddnet] Would you prefer it like it is or if I reverted to the old behaviour? 20:18 <+bridge> [ddnet] I don't think it makes any difference though, as _noport is also used to check the ban itself 20:21 <+bridge> [ddnet] eh, I'll just clean up those functions and make sure 20:22 <+bridge> [ddnet] awesome 20:22 <+bridge> [ddnet] inb4 #1337 expands to refactor the whole ddnet code base 20:23 <+bridge> [ddnet] do stop though (with refactoring these functions) if it becomes too much work 20:30 <+bridge> [ddnet] @heinrich5991 not that bad apparently, cleaned it up and made sure the behaviour doesn't change 20:31 <+bridge> [ddnet] Also is bors k? πŸ˜„ 20:32 <+bridge> [ddnet] @Learath2 fixed the score on client enter thing myslef πŸ˜ƒ 20:32 <+bridge> [ddnet] \o/ 20:33 <+bridge> [ddnet] What was it? 20:33 <+bridge> [ddnet] just added this line `m_apPlayers[ClientID]->m_Score = (Score()->PlayerData(ClientID)->m_BestTime) ? Score()->PlayerData(ClientID)->m_BestTime : -9999;` from changeinfo to OnClientEnter() 20:55 <+bridge> [ddnet] Things not to do: stop gdb session while saving a .map file 21:00 <+bridge> [ddnet] wew.. 21:03 < ddnet-commits> [ddnet] bors[bot] closed pull request #1337: Ignore DNSBL on "empty" servers. (master...dd_pr_dnsblempty) https://git.io/fxsNp 21:13 <+bridge> [ddnet] @jxsl13 we use the regular TW master servers but ddnet.tw is one of them 21:13 <+bridge> [ddnet] 1337! 21:14 <+bridge> [ddnet] and @heinrich5991 still hasn't done http masters 😦 21:26 <+bridge> [ddnet] :feelsbadman: 21:27 <+bridge> [ddnet] @heinrich5991 extended map items work great πŸ˜ƒ 21:29 <+bridge> [ddnet] Nice job (iguess):feelsgoodman: 21:52 <+bridge> [ddnet] @heinrich5991 I can't really follow the map items thing, here to give me a hand? πŸ˜› 21:53 <+bridge> [ddnet] yes, I guess 21:56 <+bridge> [ddnet] So, what is an external item type and what is an internal item type? 21:57 <+bridge> [ddnet] ok, so we have item kinds and external item kinds 21:57 <+bridge> [ddnet] ok, so we have item kinds and extended item kinds 21:57 <+bridge> [ddnet] non-extended item kinds are referred to by a small integer, both in code and in the actual datafile 21:58 <+bridge> [ddnet] code is "external" (because it's the API the datafile exposes) and the actual file is "internal" (because only the datafile class has to concern itself with how it saves stuff in there= 21:58 <+bridge> [ddnet] code is "external" (because it's the API the datafile exposes) and the actual file is "internal" (because only the datafile class has to concern itself with how it saves stuff in there) 21:59 <+bridge> [ddnet] UUIDs also happen to be referred to by integers, although bigger ones, I think starting from 2**16 22:00 <+bridge> [ddnet] so when the datafile class gets a item kind > 2**16, it sees that it's an extended item kind that is associated with a UUID 22:01 <+bridge> [ddnet] it has to store that some way in the datafile, which only supports item kinds < 2**16, and certainly no UUIDs 22:02 <+bridge> [ddnet] so I reserve the item kind (2**16 - 1) to provide a mapping from internal item kind IDs (in the datafile) to external ones (referred to by UUIDs, to be translated to the corresponding integers by the datafile reader) 22:02 <+bridge> [ddnet] so when you read a item kind that's likely to be extended (>=2**15 I think) 22:03 <+bridge> [ddnet] so you use 2**16 - 1 like we used NETMSG_NULL for the protocol extension? 22:03 <+bridge> [ddnet] then you check whether we have an item with type ID 2**16-1, and the type ID you're looking for as item ID 22:03 <+bridge> [ddnet] yes 22:03 <+bridge> [ddnet] because 0 was already taken 22:04 <+bridge> [ddnet] well 22:04 <+bridge> [ddnet] no 22:04 <+bridge> [ddnet] type ID 2**16-1 only provides the mapping of internal (in the datafile) type IDs to UUIDs 22:05 <+bridge> [ddnet] i.e. if I add one item with extended type, it'll get type ID 2**16-2 22:05 <+bridge> [ddnet] next one will get 2**16-3 22:05 <+bridge> [ddnet] but to know what it's actually dealing with 2**16-2 doesn't map to a type, the reading code has to check the type map 22:06 <+bridge> [ddnet] sooo 2**16 - 1 actually is a type-map? 22:06 <+bridge> [ddnet] yes 22:08 <+bridge> [ddnet] I probably should have written all that into the commit message… 22:11 <+bridge> [ddnet] @Learath2 questions? 22:11 <+bridge> [ddnet] I'm trying to give it a re-read with my newly acquired knowledge πŸ™‚ 22:16 <+Learath2> heinrich5991: do asserts still kill the client/server in release builds? 22:16 <@heinrich5991> I fear they do not 22:16 <@heinrich5991> yup, they don't :( 22:17 <+Learath2> Well assert in `CDataFileWriter::GetExtendedItemTypeIndex` could allow an attqcker to craft a map that crashes the client. 22:17 <@heinrich5991> lol 22:17 <+Learath2> Not a particularly useful crash but still 22:18 <@heinrich5991> have you read the datafile code? :P 22:18 <@heinrich5991> it's full of crashes 22:18 <@heinrich5991> but you're right, I shouldn't make it worse 22:18 <@heinrich5991> Learath2: no, that's a datafile writer 22:18 <+Learath2> Oh yep mb 22:24 <+Learath2> I can't seem to read this at all :/ 22:30 <+Learath2> heinrich5991: did you have a document on datafiles and their structure? 22:30 <@heinrich5991> yes, but only little 22:30 <@heinrich5991> https://github.com/heinrich5991/libtw2/blob/baf355f8f07ce0b58818598930e769121fcaa3c1/doc/datafile.md 22:30 <+Learath2> Well an overview would be enough 22:31 <@heinrich5991> might very well be that this doesn't help 22:42 <+bridge> [ddnet] hm, blockers/stoppers don't work when flipped. Known bug? 22:48 <+bridge> [ddnet] hum. no, not known I think 22:48 <+bridge> [ddnet] they should stop in the direction you can see in the editor 22:49 <+bridge> [ddnet] known 22:51 <+bridge> [ddnet] πŸ˜— 23:06 <@heinrich5991> Learath2: updated the PR 23:08 <+Learath2> heinrich5991: how do datafiles handle endianness issues? do we save them all little endian and swap based on architecture? 23:09 <@heinrich5991> yes, something like that 23:09 <@heinrich5991> in the real world, the implementation for big endian is broken, and no one seems to have noticed in years 23:09 <+Learath2> :D 23:09 <+Learath2> Well not many big endian machines around 23:09 <@heinrich5991> but for the PR you just have to know that integers get saved correctly 23:10 <@heinrich5991> (because they work in other map items= 23:10 <@heinrich5991> and I serialize the UUIDs into integers, in a native-independent way 23:10 <@heinrich5991> *endian-independent 23:10 <@heinrich5991> so it doesn't matter how we save them, as long as integers work 23:11 <+Learath2> Great, I'm merging then 23:11 <+Learath2> than* 23:12 <+Learath2> heinrich5991: doesn't sizeof(CUuid) / 4 assume sizeof (int) == 4? 23:12 <+Learath2> Is that a fair assumption to make? 23:13 <+Learath2> I guess it is given sizeof (int) is guaranteed to be >= 4 23:14 <@heinrich5991> if it's not 4, the whole serialization code breaks 23:14 <@heinrich5991> like 23:14 <@heinrich5991> the datafile code 23:15 <@heinrich5991> hm 23:15 <@heinrich5991> if one were to refactor the datafile code, one would replace all ints with int32_ts 23:16 <@heinrich5991> (obvious spot for rust promotion) you know that in rust, you usually know the integer sizes you work with? :P 23:16 <@heinrich5991> hm 23:17 <+Learath2> One last thing before I r+, should you maybe test for the uuid being saved correctly aswell in your testcase? 23:20 <@heinrich5991> hm. I considered that private to the datafile classes 23:21 <@heinrich5991> should I add a test regardless? I don't really have the structures for that around, because they're in the .cpp file 23:22 <+Learath2> I guess it's not really mandatory under the assumptions that storing ints work and that sizeof(int) >= 4 23:23 <+Learath2> first one is true because, well things work :D and the second one is guaranteed by the standard so I guess we are golden :) 23:25 <@heinrich5991> do you feel that I'm being more strict with you on PRs than you are with me? 23:25 <@heinrich5991> because I currently have that feeling 23:27 <+bridge> [ddnet] Well with this one it's not really my area so I can't really be sure if the things I worry about are superficial or not 23:34 <+bridge> [ddnet] Also you've always been more strict then me anyways :D 23:34 <+bridge> [ddnet] good night