01:45 < bridge> is toggle quads a keybind? 01:46 < bridge> is toggle quads a keybind by default? 01:46 < bridge> if so, i think it shouldn't be 07:38 < bridge> maybe stop using json? 07:39 < bridge> REAL 07:40 < bridge> just pack everything together with fixed width attributes... well being fixed with and strings being null terminated, players can be double null terminated and eof doesnt need to be marked 07:40 < bridge> just pack everything together with fixed width attributes... well being fixed with and strings being null terminated, players can be double null terminated and eof doesnt need to be marked 07:41 < bridge> all json messages start with [ or {, so you know a msg isnt if it starts with 2 (for version 2 eg) 07:41 < bridge> Wouldn't that break stuff? What if you want to add another field? 07:41 < bridge> ad it to the end 07:41 < bridge> or increment the version number 07:41 < bridge> and/or increment the version number 07:42 < bridge> just pack everything together with fixed width attributes... well being fixed with and strings being null terminated, players can be single null terminated (again) and eof doesnt need to be marked 07:42 < bridge> i mean if you know the number of attributes you dont need to double null terminate players 07:42 < bridge> but doing that might allow you to omit information for saving space if it it not used 07:42 < bridge> i mean if you know the number of attributes you dont need to null terminate players 07:43 < bridge> that is you stick the least common information 07:43 < bridge> that being skin colors and clan i guess 07:44 < bridge> and the first attribute is the name which is the most important 07:46 < bridge> I guess all the identifiers are gone if you just use the order of fields 07:49 < bridge> Next problem is how do you support all old clients? 07:49 < bridge> you dont 07:49 < bridge> you can always send json 07:49 < bridge> you can always still send json 07:50 < bridge> wdym 07:50 < bridge> you check if the client would support new formatting, if it does send it, if it doesnt send json 07:50 < bridge> So the client send the stuff in binary and the mastersrv converts it into json or what? 07:51 < bridge> the mastersrv presumably has to put the data in the json into its own internal structure 07:51 < bridge> which is then converted back to json with the rest of the srvs it needs to send 07:51 < bridge> headache kind of problem 07:51 < bridge> the client can even be told to ask a different endpoint 07:52 < bridge> `https://master1.ddnet.org/ddnet/15/servers.bin` 07:53 < bridge> and when u recieve a msg from a server you just look at the first byte if its [ or { you interpret as json 07:53 < bridge> if you see a 0x2 you try the new format 07:53 < bridge> otherwise its invalid 07:54 < bridge> yea that would work 07:54 < bridge> you avoid new versions because that means more code but if you do need them 07:54 < bridge> 0x3 and servers.bin3 is always available 08:18 < bridge> why is sixup called such instead of from/to 7 or 07 09:06 < bridge> because sixup sux up 09:08 < bridge> argh 09:09 < bridge> ```cpp 09:09 < bridge> struct CNetObj_ClientInfo 09:09 < bridge> { 09:09 < bridge> static constexpr int ms_MsgId = NETOBJTYPE_CLIENTINFO; 09:09 < bridge> int m_Name0; 09:09 < bridge> int m_Name1; 09:09 < bridge> int m_Name2; 09:09 < bridge> int m_Name3; 09:09 < bridge> int m_Clan0; 09:09 < bridge> int m_Clan1; 09:09 < bridge> int m_Clan2; 09:09 < bridge> int m_Country; 09:09 < bridge> int m_Skin0; 09:09 < bridge> int m_Skin1; 09:09 < bridge> int m_Skin2; 09:09 < bridge> int m_Skin3; 09:09 < bridge> int m_Skin4; 09:09 < bridge> int m_Skin5; 09:09 < bridge> int m_UseCustomColor; 09:09 < bridge> int m_ColorBody; 09:09 < bridge> int m_ColorFeet; 09:09 < bridge> }; 09:09 < bridge> ``` 09:10 < bridge> this makes mse sad 09:10 < bridge> also doesnt allow 0.7 skins to be sent /: 09:25 < bridge> but there are two protocols, you are probably looking into 0.6 one 09:26 < bridge> a 0.6 client will never get 0.7 messages 09:26 < bridge> and im not sure if it will accept them 09:26 < bridge> a 0.6 client will never get 0.7 messages from a 0.6 server 09:27 < bridge> or if it should 09:28 < bridge> you can try to make it though 09:29 < bridge> i guess its less code to make the ddnet server send a 0.7 msg and have the 0.6 client translate it 09:29 < bridge> 0.7 packets are processed way different then 0.6 packets, but ig you can keep mixed protocol 09:29 < bridge> it would be a hell though 09:29 < bridge> throw 0.7 in the bin, steal all the wanted features and replace the steam page x-x 09:30 < bridge> problemo solved! 09:30 < bridge> we got em, another 07 hater :p 09:30 < bridge> i dont not like 0.7 i just think ddnet is better 09:31 < bridge> minus the fact ddnet put all its snotty ddnet all over every part of the codebase making it hard to make mods 09:31 < bridge> but 0.6 server still exists 09:31 < bridge> 0.6 server will feel different 09:31 < bridge> also dummies are buggy on pure 0.6 09:31 < bridge> sixup goes hard 09:32 < bridge> yeah but modding ddnet is hard 09:32 < bridge> and most mods dont need or even restrict dummy usage 09:33 < bridge> not really hard, but it takes way longer to get what you need in comparison with clean 0.6/0.7 09:33 < bridge> hard ~= annoying 09:33 < bridge> but 0.6 server code is even worse for me 09:33 < bridge> annoying ~= hard 09:34 < bridge> use that word instead then xd 09:35 < bridge> mb 09:56 < bridge> is the json uncompressed? 09:56 < bridge> 32k for 128 players seem like low 09:56 < bridge> 32k for 128 players seem low 09:57 < bridge> 32k for 128 players seem high 10:12 < bridge> tis json afterall 10:32 < bridge> <0xfaulty> Currently only 16k 10:32 < bridge> But is it compressed 10:33 < bridge> It's like a 4x difference 10:34 < bridge> <0xfaulty> Not sure about 4x, but yes it's good 10:35 < bridge> <0xfaulty> U could check my calculations in issue, I measured for compressed also 10:35 < bridge> <0xfaulty> I think depending on data 11:10 < bridge> weird stuff happening on our servers: 11:10 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308736233270411284/Screenshot_20241120-111002.png?ex=673f0719&is=673db599&hm=1351db532e41f0559140dd0d28e74769ea9eadb8f00a21063c996218acc28c24& 11:11 < bridge> maybe someone knows who or what that is 11:15 < bridge> he spammed kog a few months ago too 11:16 < bridge> i think there is a ip blacklist flying around somewhere 11:16 < bridge> maybe heinrich can help 11:28 < bridge> spambot 11:28 < bridge> did not join the server, does it spam in the chat :0? 11:50 < girixione> hi? 11:50 < bridge> hi 11:50 < girixione> plz help me 11:51 < bridge> after you learn rust properly 11:51 < girixione> i write cmake and my git write me, bash: cmake command no found 11:52 < girixione> i'm create build and cd build 11:52 < girixione> or which program should I use for the dfng build? 11:58 < bridge> When a player joins the team, it is not possible to ban them if you are not in the team. 11:58 < bridge> 11:58 < bridge> Could you add the option for silent voting? 10 players must vote for a particular person in the team to allow voting to kick a player from the server. 11:58 < bridge> Or something working on a similar principle, 11:58 < bridge> players in the team are untouchable, they can write whatever they want in the chat, tag as much as they want, and a player who is not in the team cannot do anything about it. (can mute it but that is not the solution to the problem ) 11:58 < bridge> 11:58 < bridge> Do you have any plans to allow something to be done about such players? 11:58 < bridge> I am using a translator to communicate with you. I hope everything is clear and understandable. 11:59 < bridge> I presume this is after a previous discussion. But imagine if you weren't willing to help anyone unless they learnt rust. 11:59 < bridge> Random: "hey can you lend me a hand with this box" 11:59 < bridge> You: "Only if you learn rust" 11:59 < bridge> xD 12:02 < bridge> no i was just joking xd 12:02 < bridge> u need to install cmake 12:02 < bridge> thats what " cmake command no found" means 12:04 < bridge> ye 12:05 < bridge> mute is the solution, what else you need? this guy can't harm your run or whatever 12:08 < bridge> One player on the server is harming everyone else. If there are 63 players on the server and one is causing harm, should the remaining 62 people block this player every time, or is it better to get rid of them once and for all 12:11 < bridge> One player on the server is harming everyone else. If there are 63 players on the server and one is causing harm, should the remaining 62 people block this player every time, or is it better to get rid of them once and for all 12:11 < bridge> but mute is the solution and is not x_x 12:12 < bridge> look, first of all, you can already kick radom person from your team, so, they can be banned right after. second, what if person wants to play solo on this map (linear as example), another bad guys will be able to ban em? its strange. third, if you will vote one person, all other players should action too if they are really annoyed, so, there's no difference between muting them or banning, its optional 12:14 < bridge> ban is for gameplay part, mute is for chat 12:14 < bridge> girixione check out the building instructions from https://github.com/ddnet/ddnet 12:15 < bridge> https://github.com/ddnet/ddnet?tab=readme-ov-file#dependencies-on-linux--macos 12:15 < bridge> girixione check out the build instructions from https://github.com/ddnet/ddnet 13:02 < girixione> teero777, which program should I use for the dfng build? 13:05 < bridge> https://github.com/Inateblig/dfng 13:05 < bridge> ? 13:07 < bridge> I would use a "compiler" to answer your question ๐Ÿค” 13:11 < girixione> plz send link 13:11 < bridge> read the readme to learn howt o compile stuff 13:11 < bridge> any problems should/can be solved with google/chatgpt 13:12 < bridge> oh yeah, just copy and enter everything that chatgpt outputs into a terminal 13:12 < bridge> i wish i couldve learnt stuff that easily 13:12 < bridge> i mean i do now 13:12 < bridge> but scowering the web looking for things you cant phrase properly 13:12 < bridge> so nice 13:12 < bridge> "back in my day" 13:12 < bridge> C++ is much easier, when chatgpt can explain your errors and suggest changes 13:13 < bridge> for the errors ive had with chatpgt it can explain things fine... it cant fix them 13:13 < bridge> for the errors ive had with cpp, chatpgt it can explain things fine... it cant fix them 13:13 < bridge> for the errors ive had with cpp (speicifically with ddnet lmao), chatpgt it can explain things fine... it cant fix them 13:13 < bridge> for the errors ive had with cpp (speicifically with ddnet lmao), chatpgt it can explain things fine... it cant fix them (and its changes are often useless) 13:14 < girixione> you are not developing well, I asked you for a link to the compiler, and you rub chatgpt into me 13:14 < bridge> look at that monstrosity which chatgpt made for me and actually works: 13:14 < bridge> ``` 13:14 < bridge> std::thread spawn(sockpp::tcp_socket sock) { 13:14 < bridge> // Move 'sock' into the lambda to avoid copying 13:14 < bridge> return std::thread([this, sock = std::move(sock)]() mutable { 13:14 < bridge> this->listen_network_tcp(std::move(sock)); 13:14 < bridge> }); 13:14 < bridge> } 13:14 < bridge> ``` 13:14 < bridge> yeah idk what that does 13:14 < bridge> clueless (no front) 13:15 < bridge> the only reference to `struct CNetObj_ClientInfo` is generated, where... do i look to find... that? 13:15 < bridge> to actually help you: are you on windows or linux? Depending on that you have to do different steps 13:15 < bridge> well first rub yourself in the readme because you havent read it obviously 13:15 < bridge> in the python files which generate them (really!) 13:15 < bridge> oh of course 13:16 < bridge> sigh 13:16 < bridge> where would i put things like it (new struct called CNetObj_ClientInfo7)? 13:16 < bridge> if i dont want them to be generated for no reason because i know the everything about it at compile time 13:16 < bridge> in another python file, maybe, I really really hate the generated netcode 13:16 < bridge> yeah but i dont need it to be generated 13:17 < bridge> why is... it generated? 13:17 < bridge> all this stuff looks pretty known at compile time 13:17 < bridge> all this stuff looks pretty known before compile time 13:17 < bridge> generate the original files, and then copy the generated cpp code, but if you use CMakeLists you have to adjust that 13:17 < bridge> i just want a new struct x-x 13:17 < bridge> and for it to fit in with the rest of the code 13:20 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308768927119314974/remix-dbf19c63-9058-4492-8d8f-97db3f88ce95.png?ex=673f258b&is=673dd40b&hm=7526316d7d3bb598bae0cef6e87dc2966c1f6f15696b085a799cbdf946fda105& 13:20 < bridge> my Cat learning asm 13:20 < bridge> not enough pain and suffering 13:20 < bridge> for learning asm 13:21 < bridge> if someone else was tryign to teahc you asm, then yeah youd fall asleep 13:21 < bridge> https://github.com/ddnet/ddnet/blob/6f3cb5eeaad847a38809aa4a6de6afbe9f1c07b8/datasrc/seven/network.py#L341 13:21 < bridge> no dont make me do it 13:21 < bridge> i dont want to touch the python files 13:22 < bridge> also its supposed to be 0.6 like message 13:22 < bridge> i want to allow 0.7 player infos in snap so i can send 0.7 skins 13:22 < bridge> my bad: 13:24 < bridge> hmm shouldn't you them make 0.6 players send/convert 0.7 skins? Because 0.7 clients can already understand 0.7 skins, also there is a network message in teeworlds 0.7 to send skins 13:25 < bridge> i dont think i can use the 0.7 code beacuse its part of the 0.7 snap 13:25 < bridge> as in just call a function and be done 13:25 < bridge> you should be able to send 0.7 netmessages to 0.7 clients? 13:26 < bridge> no no 13:26 < bridge> maybe this is not known in the ddnet seven netcode 13:26 < bridge> i think ure misunderstanding what i wana do 13:26 < bridge> 0.7 skin support for 0.7 clients is functional already 13:26 < bridge> i want the (ddnet) server to be able to also send 0.7 skins to ddnet clients and fro the client to accept them 13:28 < ChillerDragon> girixione: may i ask why you try to build dfng? 13:28 < bridge> does ddnet fully respect the 0.6 netcode or does ddnet have extra netcode compared to 0.6? 13:28 < bridge> extra 13:28 < ws-client> it has extensions but is compatible 13:29 < bridge> do u see reactions mr chiller 13:29 < bridge> do u see reactions mr dragon 13:29 < ws-client> no 13:29 < bridge> what are u even using? 13:29 < ws-client> using to chat? 13:29 < bridge> yeah 13:29 < ws-client> irc kinda 13:29 < ws-client> https://chat.zillyhuhn.com/ 13:30 < bridge> whats a signin token? 13:30 < ws-client> nimrocks 13:30 < bridge> signup token 13:31 < ws-client> hello 13:31 < ws-client> you only get 13:31 < ws-client> #developer and #off-topic? 13:31 < bridge> now I understand more what you are trying to do and why you use clientInfo, because it contains the skin info. You want to send your own ddnet-clientinfo to ddnet clients then, right? 13:31 < ws-client> no #off-topic 13:31 < ws-client> only #developer has a irc bridge 13:31 < ws-client> oh okay 13:32 < ws-client> why? do you use this 13:32 < bridge> and the "ddnet-clientinfo" contains 0.7 skininfo 13:32 < ws-client> well im not calling it ddnet-clientinfo because its not ddnet specific 13:32 < ws-client> im calling it clientinfo7 because it is just what 0.7 uses 13:32 < ws-client> and on the client side there will be an option to accept 0.7 skins (which on by default and also used as the way to tell if a client can accept them) as well as an option to send 0.7 skins 13:33 < ws-client> why am i poo brown 13:33 < ws-client> @SollyBunny i usually use weechat on my vps but currently my ping is too high to use ssh 13:33 < ws-client> i think your icon color is determined by the first letter of your name if i remember correctly 13:34 < ws-client> /: 13:34 < ws-client> weechat on a vps also with a bot to sync to this chat? 13:34 < bridge> you should be able to know before sending if a client can accept them by checking the ddnet-version or if it's a teeworlds 0.7 client 13:34 < ws-client> weechat to use irc directly i just run it 24/7 to have a chat backlog 13:35 < ws-client> @Assa the server already knows if a client is 0.7. And i want to have the option to disable 0.7 skins anyway so why not use it as a feature flag 13:35 < ws-client> there is a bridge from irc to this discord channel but its not operated by me but by the ddnet team 13:35 < ws-client> weechat is an irc client? 13:35 < ws-client> yes 13:35 < ws-client> why... weechat? 13:35 < ws-client> not to be confused with wechat 13:35 < ws-client> oh 13:36 < ws-client> that makes more sense 13:38 < ws-client> @chillerdragon did you make this? 13:38 < ws-client> yea 13:38 < ws-client> with the help of jupstar and milkeeycat https://github.com/discord-irc/ 13:38 < ws-client> do you plan to make it less rusty? 13:39 < ws-client> i dont think so 13:39 < ws-client> whats rusty? 13:39 < ws-client> no reactions or emojis, no pfp, everything appears as 1 msg on discord, no line wrap, the autocomplete of said emojis is underneath the chat, no @ completion 13:40 < ws-client> cough 13:40 < ws-client> i have @ completion do you have the plugins on? 13:40 < ws-client> i mean its enough to just talk to people 13:40 < ws-client> https://zillyhuhn.com/cs/.1732106433.png 13:41 < ws-client> it is irc under the hood. there are no multi line messages in irc or reactions. 13:41 < ws-client> my lines are wrapping 13:41 < ws-client> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 13:41 < ws-client> irc also has no profile pictures 13:41 < ws-client> cant paste images 13:41 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308774303759597641/image.png?ex=673f2a8d&is=673dd90d&hm=e61cecd867b8b2620fbcce948b4d92da5e1a825cd613c0b1cf6eeb059722d13d& 13:41 < ws-client> irc also has no images 13:42 < ws-client> you can paste image urls 13:42 < ws-client> you can not see images because they are not bridged 13:42 < ws-client> but an irc client can embed images 13:42 < ws-client> you can not see reactions because they are not bridged 13:42 < ws-client> and have reactions sent as just messages and interpreted by the client 13:42 < ws-client> yes thats something the bridge could do 13:43 < ws-client> milkeeycat actually built that 13:43 < ws-client> but ddnet staff would have to deploy it i can not do it 13:43 < ws-client> are there not common standards for these things in irc? 13:43 < ws-client> there are 13:43 < ws-client> and they do not contain much additional bloat on top of what a chat needs which is sending and receiving text messages 13:44 < ws-client> what does that mean 13:44 < ws-client> having everything encoded as just text messages is not bloat i guess? 13:44 < ws-client> that for me everything works totally fine. One thing that is annoying is that discord started to block outside access for attachments so I can not see images anymore. 13:44 < ws-client> raelly?? 13:44 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308775070449008682/image.png?ex=673f2b44&is=673dd9c4&hm=a0e9e8b632a1b51e1e10d37f95f1ec543d7cb0b69f1cf70bf89bec12f9b03ca6& 13:45 < ws-client> i can still see them 13:45 < ws-client> from a different ip 13:45 < ws-client> well ive probably logged into discord on that ip tbf 13:45 < ws-client> https://zillyhuhn.com/cs/.1732106732.png 13:45 < ws-client> yea you are logged in try incognito 13:46 < ws-client> i was in incognito 13:46 < ws-client> thats odd maybe its cached or discord ip whitelists idk 13:46 < ws-client> but i can no longer see images 13:46 < ws-client> ): 13:46 < ws-client> have the bot yoink em? 13:46 < ws-client> thats happening for matrix 13:47 < ws-client> but not for irc 13:47 < ws-client> sadge 13:48 < ws-client> i cant find a set of standard extentions to irc for pfps, reactions, file uploads etc 13:49 < ws-client> it would be nice if everyone could agree to such standards if (or when) they exist and then everything is irc 13:49 < ws-client> would be a dream 13:50 < ws-client> anyway back to rummaging around in ddnet src 13:50 < ws-client> "for fun" they said 13:53 < bridge> struct CNetObj_ClientInfo7 13:53 < bridge> { 13:53 < bridge> static constexpr int ms_MsgId = NETOBJTYPE_CLIENTINFO7; 13:53 < bridge> char m_Name[MAX_NAME_LENGTH]; 13:53 < bridge> char m_Clan[MAX_CLAN_LENGTH]; 13:53 < bridge> int m_Country; 13:53 < bridge> char m_SkinParts[protocol7::NUM_SKINPARTS][protocol7::MAX_SKIN_ARRAY_SIZE]; 13:53 < bridge> int m_ColorVars[protocol7::NUM_SKINPARTS]; 13:53 < bridge> }; 13:53 < bridge> NetObject("ClientInfo", [ 13:54 < bridge> # 4*4 = 16 characters 13:54 < bridge> NetIntAny("m_Name0"), NetIntAny("m_Name1"), NetIntAny("m_Name2"), 13:54 < bridge> NetIntAny("m_Name3"), 13:54 < bridge> 13:54 < bridge> # 4*3 = 12 characters 13:54 < bridge> NetIntAny("m_Clan0"), NetIntAny("m_Clan1"), NetIntAny("m_Clan2"), 13:54 < bridge> 13:54 < bridge> NetIntAny("m_Country"), 13:54 < bridge> 13:54 < bridge> # 4*6 = 24 characters 13:54 < bridge> NetIntAny("m_Skin0"), NetIntAny("m_Skin1"), NetIntAny("m_Skin2"), 13:54 < bridge> NetIntAny("m_Skin3"), NetIntAny("m_Skin4"), NetIntAny("m_Skin5"), 13:54 < bridge> 13:54 < bridge> NetIntRange("m_UseCustomColor", 0, 1), 13:54 < bridge> 13:54 < bridge> NetIntAny("m_ColorBody"), 13:54 < bridge> NetIntAny("m_ColorFeet"), 13:54 < bridge> ]), 13:54 < bridge> 13:54 < bridge> bro really just use c please 13:56 < bridge> how do you even come to the solution that ah yes make a python script 13:56 < bridge> made for the utterly deranged, they have played us for fools 14:06 < bridge> in CTeeRenderInfo why is it `CSixup m_aSixup[NUM_DUMMIES];` 14:06 < bridge> shouldnt there be a seperate renderinfo for each dummy 14:06 < bridge> since they are seperate players 14:06 < bridge> and clients 14:07 < bridge> ): 14:27 < ws-client> @SollyBunny in 0.6 the client can always get the most recent render info for the current dummy from the snap. In 0.7 it comes from game messages that are only sent on change so the client has to store it for main and dummy. 14:27 < bridge> the snap only sends if its changed right? 14:28 < bridge> also doesnt make sense still 14:28 < ws-client> it technically only sends changes over the wire but thats abstracted away in the code. 14:28 < bridge> the dummies are seperate clients always 14:28 < ws-client> you can think of the server and client always holding the full up to date state. 14:29 < bridge> i dont see why the dummy state needs to be stored in the main client? 14:29 < bridge> why not store it in the dummy client (slot) 14:29 < ws-client> i am not sure what you mean by that 14:29 < bridge> there is a crenderinfo object for every client 14:30 < bridge> so why does the state of dummy have to be stored in the main clients slot instead of the dummy clients slot 14:30 < ws-client> by every client you mean MAX_CLIENTS or NUM_DUMMIES? 14:30 < bridge> max_clients 14:31 < ws-client> yea so in 0.6 you can hold only the current info for all and get it from the snap on dummy change 14:31 < bridge> ??? 14:31 < ws-client> in 0.7 you have to store the render info on skin change and then store it for dummy and main 14:31 < bridge> wha 14:32 < bridge> are dummy and main not seperate clients if 0.7 has a dummy through some client 14:32 < bridge> and if so how? 14:33 < ws-client> it is not fully separate lots of things are still shared 14:33 < bridge> im so confused 14:33 < bridge> what is shared 14:33 < bridge> and why 14:34 < ws-client> in the end you only have one viewport 14:34 < bridge> yeah but its 2 seperate connections? 14:34 < ws-client> you have one hud, one scoreboard see one set of tees with their render info 14:34 < ws-client> yes two network connections 14:34 < bridge> you render the data in clients[cons[current_dummy]] 14:34 < bridge> ? 14:35 < bridge> and why arent skins stored in their respective slots 14:35 < ws-client> because the code is not structured that way i guess historically 14:36 < bridge> but this was added only for 0.7 compatbility 14:36 < bridge> which doesnt even have dummies most of the time 14:36 < ws-client> there used to be only one connection and then another one was added on the network level leaving all the rendering as is just updating the currently used render info based on the snapshot of the active dummy 14:36 < ws-client> as i said in 0.7 you can not get the render info from the snapshot so it has to be stored 14:37 < bridge> yeah you can store it in the slot 14:37 < bridge> that is there 14:37 < ws-client> which slot 14:37 < bridge> clients[your id].renderinfo 14:37 < ws-client> can you link me the code? 14:38 < bridge> ``` 14:38 < bridge> CClientData *pClient = &m_aClients[ClientId]; 14:38 < bridge> pClient->m_aSkinName[0] 14:38 < bridge> ``` 14:38 < ws-client> thats not really a link but sure 14:38 < ws-client> but thats not the dummy thats other players 14:38 < bridge> that just stores the skin name im trying to find where the renderinfo is 14:38 < bridge> clientid would be the udmmies client id 14:39 < bridge> if the snapshot was for the dummy? 14:39 < ws-client> but wait 14:39 < ws-client> m_aClients is a list of all clients 14:39 < ws-client> and the dummy needs a full list of all skins separate from the main tee 14:39 < ws-client> if you index m_aClients[dummy] you can only store one skin there 14:40 < bridge> where is the render info for every other client 14:41 < bridge> why are there 4 seperate places for skin storage? 14:42 < bridge> clients[id].m_aSkin... 14:42 < bridge> skins 14:42 < bridge> skins7 14:42 < bridge> renderinfo which stores both skins and skins7 data 14:42 < bridge> ๐Ÿ˜ข 14:43 < bridge> GameClient()???::m_SkinInfo and 14:43 < bridge> clients[id].m_aSkin... 14:43 < bridge> skins 14:43 < bridge> skins7 14:43 < bridge> renderinfo which stores both skins and skins7 data 14:46 < bridge> GameClient()???::m_SkinInfo and GameClient()???::m_RenderInfo (why there cant be 1 im not sure) (which stores 0.6 skin and two 0.7 skins, why 0.6 doesnt need 2 skins still dont get) 14:47 < bridge> clients[id].m_aSkinName and other stuff (stores 0.6 skins only) 14:47 < bridge> clients[id].m_renderinfo (previously stated) 14:47 < bridge> skins / skins7 stores data about all skins thats fine 14:47 < bridge> @jupeyy_keks check it out 14:47 < bridge> my pr 14:47 < bridge> the gcc equivalent would be https://gcc.gnu.org/wiki/Graphite 14:47 < bridge> why not just always use clients[id].m_renderinfo and get rid of the dummy slot in renderinfo for some reason 14:50 < bridge> also skins7 stores statically (inconsistent with everything else) skin variables? and names? i just 14:50 < bridge> am so confused 14:52 < ws-client> what are you even trying to do solly 14:52 < bridge> stuff with skins 14:52 < ws-client> what stuff 14:52 < bridge> but its all over the place 14:52 < bridge> make ddnet send 0.7 skins 14:53 < ws-client> it already sends them 14:53 < bridge> as 0.7 messages? 14:53 < ws-client> yes 14:53 < bridge> to ddnet clients 14:53 < ws-client> to ddnet clients connected via 0.7 yes 14:54 < bridge> is there any disadvantage to ddnet clients connecting as 0.7 14:54 < bridge> apart from no one does it meaning only people on 0.7 would be able to see my skin 14:55 < ws-client> yes it potentially contains more bugs because it is less tested. It also requires more ressources because everything goes through an additional translation layer. 14:55 < ws-client> yes 0.7 skins are visibile in 0.7 and 0.6 skins are visible in 0.6 14:55 < bridge> also adding 0.7+udp:// to every server i join is weird 14:55 < ws-client> yes it is 14:56 < bridge> i want ddnet clients to be able to recieve 0.7 skins 14:56 < ws-client> they are able 14:56 < bridge> from ddnet servers 14:56 < bridge> and render them 14:56 < ws-client> they are able 14:56 < bridge> how 14:56 < bridge> without going thru translation layers 14:56 < ws-client> oh without 14:56 < ws-client> from 0.6? 14:56 < bridge> from ddnet 0.6 14:56 < ws-client> i dont think this is a good idea 14:57 < bridge> why 14:57 < ws-client> are you planning to send a pullrequest with that? 14:57 < bridge> why not 14:57 < ws-client> this will most likely be rejected 14:57 < bridge> its backporting a feature? 14:57 < bridge> and one i really like 15:10 < bridge> Ok but it sounds giga jank 15:10 < bridge> it wouldnt be if there wasnt so much code for what i thought was pretty simple 15:13 < bridge> heinrich made a comment on my pr about why to add it 15:13 < bridge> but im lazy to argue so ill just let the pr die 15:14 < bridge> ): 15:16 < bridge> since it probably will be unuseud (unless for distrubution or something) and is unportable (that is other cmake projects wont support this but using the args that heinrich said is) its not worth it to add 15:22 < bridge> https://youtube.com/watch?v=r3fNk3ewT44 15:23 < bridge> huhhh? 15:23 < bridge> just force them to not be evil, idc if theyre a monopoly 15:23 < bridge> Yes please US Justice department. Have a W for once 15:23 < bridge> Please let this happen ๐Ÿ™ 15:24 < bridge> it will probably be more inconvenient for the average user than do anything to stop the monopoly in everything else they have 15:25 < bridge> But with an even more pro-business administration coming in, in all likelihood they will just delay this decision, then it'll get dismissed when Trump destroys the Justice Department 15:25 < bridge> They'll have slightly less control over standards which is good 15:25 < bridge> It'll probably change nothing for the average user. They will still go to `chrome.com` to get their `chrome browser` 15:26 < bridge> is this just the browser they are breaking off? 15:26 < bridge> i guess 15:26 < bridge> ): 15:26 < bridge> That's what they are pushing for, I'd break it up even more, but this is also a good win 15:27 < bridge> i dont think just the browser will be much of an inconvience 15:27 < bridge> except syncing 15:27 < bridge> but an extention can replace all the functionality easily 15:27 < bridge> and local storage is good enough for most people 15:27 < bridge> Idk who has the money to buy chrome though, I imagine it would be worth an INSANE amount 15:27 < bridge> microsoft has 15:27 < bridge> i dont want any company to buy chrome 15:28 < bridge> i dotn use chrome so 15:28 < bridge> I think typing "chrome browser" into the search field seems even more likely 15:28 < bridge> firefox ftw 15:28 < bridge> Microsoft probably can't buy it as they would have their own antitrust issues 15:28 < bridge> can we buy chrome 15:28 < bridge> but i wanna get into zen 15:28 < bridge> https://zen-browser.app/ 15:28 < bridge> can they just give me chrome? I promise I'll run it well 15:28 < bridge> wdym get into. i thought you just download and use it 15:28 < bridge> ๐Ÿ‡จ๐Ÿ‡ณ 15:28 < bridge> make chrome a for profit 15:28 < bridge> now this they would definitely not allow ๐Ÿ˜„ 15:28 < bridge> i mean not be lazy and port all my stuff there 15:28 < bridge> make it feel the pain firefox has fealt 15:29 < bridge> make chrome a non profit 15:29 < bridge> :justatest: 15:29 < bridge> isn't it just a firefox that just opens firefox profiles 15:29 < bridge> Imagine forcing google to sell chrome and the most used browser on earth ends up being bought by Tencent 15:29 < bridge> ungoogled chromium ftw 15:29 < bridge> 15:29 < bridge> idk why more people dont use it 15:29 < bridge> tencent already have a browser 15:30 < bridge> Honestly, I have negative respect for Google. I'd rather premier Xi watch my porn with me 15:30 < bridge> Chromium != Chrome, chromium is FOSS 15:30 < bridge> But people use it as a synonym often 15:30 < bridge> yeah but chromium is still owned by google 15:30 < bridge> "FOSS" 15:30 < bridge> tencent's browser already has like 50% market share in china 15:30 < bridge> and changes to chrome alot of the time buble up from chromium 15:30 < bridge> if u care about foss u use firefox or derivatives 15:30 < bridge> Ran by and gatekept by google chronies, FOSS momenyt 15:30 < bridge> Ran by and gatekept by google chronies, FOSS moment 15:31 < bridge> which is still chromium i guess 15:31 < bridge> chrome power is not the software itself, is that by being used by a lot they have a rly STRONG force to commit web standards their way benefitting them 15:31 < bridge> I maintain my position that every Google executive needs the Hui Ka Yan treatment 15:31 < bridge> but funny enough the second place in china is a 360 browser which is IE 15:31 < bridge> fucking version 3 of 15:32 < bridge> but funny enough the second place in china is a 360 browser which is using IE' kernel running on windows 7 and below 15:32 < bridge> You know what would have been cool? If the chinese monopoly browser was firefox based 15:32 < bridge> Make your way into Tencent and commit a rewrite of their browser based on Firefox 15:32 < bridge> imagine cool stuff is cool 15:33 < bridge> tencent has in-house browser engine called X5 which seems to be mobile only 15:33 < bridge> :pepeW: 15:34 < bridge> We should write our own browser engine 15:34 < bridge> ddweb 15:34 < bridge> i should find a way to make money 15:35 < bridge> http4 will be with tw huffman + tw integer compression ๐Ÿ˜Ž 15:36 < bridge> :justatest: 15:36 < bridge> isn't tw integer just varint 15:37 < bridge> <_voxeldoesart> i wonder if this is also chromium 15:37 < bridge> no its firefox 15:37 < bridge> thats literally just firefox 15:37 < bridge> yup, but it is used to compress everything in teeworlds, some stuff even twice ^^ 15:37 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308803414876225556/image.png?ex=673f45aa&is=673df42a&hm=256b8ee642104176abe2ed3fbe218246994f5458605833559b15c8df45354fad& 15:37 < bridge> well not literally, it has lot of neat features 15:37 < bridge> it is actually a real fork 15:37 < bridge> with features 15:37 < bridge> not just brand xd 15:37 < bridge> well ye, but it also has mozilla services 15:38 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308803539539070986/image.png?ex=673f45c8&is=673df448&hm=d4ed43513265803f8221b672664f3c7844de00dc49833877992e60266f6f531f& 15:38 < bridge> firefox sync 15:38 < bridge> i see that as a pro 15:38 < bridge> not saying it is a con 15:38 < bridge> but i just use it like firefox 15:38 < bridge> :justatest: 15:38 < bridge> i think it has tw quirks 15:38 < bridge> makes almost no difference to mn 15:39 < bridge> makes almost no difference to me apart from looking like arc 15:39 < bridge> <_voxeldoesart> teeworlds integer 15:39 < bridge> https://ddnet.org/docs/libtw2/int/ 15:40 < bridge> > NOTE: The reference implementation has no problem with accepting an overlong representation. The reference implementation also interprets the padding as part of the number, which leads to weird results. It should always be zeroed. 15:40 < bridge> varint is the correct category of algorithm https://en.wikipedia.org/wiki/Variable-length_quantity 15:40 < bridge> xd 15:40 < bridge> https://github.com/FirstGearGames/FishNet/pull/21 15:43 < bridge> All I read was XXXXDDDD 15:44 < bridge> XXXXDDDD 15:46 < bridge> ChillerDragon 15:47 < bridge> RandomNet 15:47 < bridge> 15:47 < bridge> Every minute the players change their parameters: speed, hook, jump power, character size, etc. Everything is random 15:47 < bridge> Is it possible to implement this? 15:50 < bridge> yes 15:50 < bridge> but WHY 15:50 < bridge> That just sounds like pain lol 15:56 < bridge> ddnet rougelike 15:56 < ws-client> @woidless i can't think of any clean way of messing with the character size. But changing tunes in a fixed interval is for sure possible. You can even do that right now with rcon. But I won't add anything to ddnet++ in that regard since i dislike messing with physics. 15:58 < bridge> Well, you don't need to add the size of the player 15:58 < ws-client> maybe i could add cronjobs for configs and then you can set it up @woidless would that be something you are interested in? You write a few autoexec.cfg files and the server runs them automatically 15:58 < bridge> You can just add so that I can insert the interval and the name of the tune, and the time after which it will change 15:59 < bridge> can you non pipe to ddnet server? 15:59 < bridge> can you not pipe to ddnet server? 15:59 < ws-client> you can 15:59 < bridge> thats an easy way to do it then 15:59 < bridge> cronjobs? 15:59 < ws-client> yes thats what i meant with "you can do it right now with rcon" but i am not sure of @woidless wants to setup an external script 16:00 < ws-client> i think having some kind of build in cronjobs in the server seems like a good idea 16:00 < ws-client> @woidless i can give you an interval and you do the rest ok? 16:00 < bridge> I still don't understand what cronjobs is. 16:01 < bridge> And what is meant by the rest? 16:01 < ws-client> it runs a rcon command in a time interval that you specify 16:01 < bridge> 16:01 < ws-client> you write the configs 16:01 < bridge> oyasumi 16:02 < bridge> hi chiller 16:02 < bridge> And how do I do that? 16:05 < ws-client> not sure yet how exactly i will think of something. maybe 16:06 < ws-client> until then you can already do it with rcon and if you really need to automate it today you can use econ or fifo for that 16:06 < bridge> I won 't be able to download it 16:06 < bridge> I'd rather wait for your answer. 16:09 < bridge> Make a python script which prints what you would put into rcon 16:09 < bridge> Then do "python mafile.py | ddnet serverโ€ 16:10 < bridge> Is it possible to send rcon commands in the server console? 16:10 < bridge> I think so 16:10 < bridge> And Mr dragon said so 16:11 < bridge> rcon commands = server console 16:11 < bridge> Then why can't I send commands in the console of the local server 16:11 < bridge> I have to enter the DDNet_Server application or 16:11 < bridge> I have to introduce the DDNet_Server or DDNetPP application 16:12 < bridge> $rtfm sv_input_fifo 16:14 < bridge> You simply pipe your commands into the fifo file, i.e. on linux you'd do `echo "tune gravity 0" > /path/to/your/file.fifo` in your terminal 16:15 < bridge> ั…ะผ 16:15 < bridge> hm 16:17 < bridge> To trigger random events, follow Solly's suggestion: create a script or cron job that pipes random tunes into the fifo files at random intervals 16:17 < bridge> I'd recommend also piping some broadcasts 16:17 < bridge> For a countdown 16:20 < bridge> https://blog.frost.kiwi/analytical-anti-aliasing/ 16:21 < bridge> Explain the meaning again 16:21 < bridge> What should I do, step by step if possible 16:22 < bridge> zzzz 16:22 < bridge> give me a list of tunes along with their ranges 16:23 < bridge> ``` 16:23 < bridge> sv_tune_1 3 5 16:23 < bridge> sv_tune_2 69 420 16:23 < bridge> ... 16:23 < bridge> ``` 16:23 < bridge> At which step are you stuck at exactly? The fifo thing? 16:24 < bridge> How does it work? 16:25 < bridge> So there's the same kind of command: ```tune tunes value``` 16:25 < bridge> From where sv 16:26 < bridge> jesus christ 16:27 < bridge> use `tunes` to list all tunes 16:27 < bridge> for each tune pick a acceptable minimum value and maximum value 16:28 < ws-client> @jxsl13 you requested a new release right? Here you go https://github.com/ddnet-insta/ddnet-insta/releases 16:28 < bridge> Ok wait 16:33 < bridge> oooh this is nice, I like it 16:36 < bridge> ```tune ground_control_speed 4.00 14.00 - Maximum running speed on the ground. (Higher values make the character move faster). 16:36 < bridge> tune ground_control_accel 0.50 4.00 - Acceleration on the ground. (Higher values make the character speed up faster). 16:36 < bridge> tune ground_friction 0.30 1.00 - Ground friction. (Higher values make the character stop faster). 16:36 < bridge> tune ground_jump_impulse 8.00 18.00 - Jump force from the ground. (Higher values make the character jump higher). 16:36 < bridge> tune air_jump_impulse 6.00 16.00 - Jump force in the air. (Applies to double jumps; higher values allow higher jumps). 16:36 < bridge> tune air_control_speed 2.00 9.00 - Maximum speed when moving in the air. (Higher values allow faster air movement). 16:36 < bridge> tune air_control_accel 0.50 3.00 - Acceleration in the air. (Higher values allow quicker changes in air movement). 16:36 < bridge> tune air_friction 0.70 1.10 - Air friction. (Higher values reduce the character's air speed more quickly). 16:36 < bridge> tune gravity 0.30 0.80 - Gravity strength. (Lower values make the character float longer; higher values make them fall faster). ``` 16:49 < bridge> ```py 16:49 < bridge> #!/bin/env python3 16:49 < bridge> 16:49 < bridge> from random import random 16:49 < bridge> from time import sleep 16:49 < bridge> 16:49 < bridge> MSGCOUNTDOWN = "%ss untill randomize" 16:49 < bridge> MSGRANDOMIZE = "tunes randomized" 16:49 < bridge> DELTA = 5 # seconds between each random 16:49 < bridge> FIFOPATH = "./fifo.fifo" 16:49 < bridge> TUNES = { 16:49 < bridge> ("ground_control_speed", 4.00, 14.00), # Maximum running speed on the ground. (Higher values make the character move faster). 16:49 < bridge> ("ground_control_accel", 0.50, 4.00), # Acceleration on the ground. (Higher values make the character speed up faster). 16:49 < bridge> ("ground_friction", 0.30, 1.00), # Ground friction. (Higher values make the character stop faster). 16:49 < bridge> ("ground_jump_impulse", 8.00, 18.00), # Jump force from the ground. (Higher values make the character jump higher). 16:49 < bridge> ("air_jump_impulse", 6.00, 16.00), # Jump force in the air. (Applies to double jumps; higher values allow higher jumps). 16:49 < bridge> ("air_control_speed", 2.00, 9.00), # Maximum speed when moving in the air. (Higher values allow faster air movement). 16:49 < bridge> ("air_control_accel", 0.50, 3.00), # Acceleration in the air. (Higher values allow quicker changes in air movement). 16:49 < bridge> ("air_friction", 0.70, 1.10), # Air friction. (Higher values reduce the character's air speed more quickly). 16:49 < bridge> ("gravity", 0.30, 0.80), # Gravity strength. (Lower values make the character float longer; higher values make them fall faster). 16:49 < bridge> } 16:49 < bridge> 16:49 < bridge> def write(s): 16:49 < bridge> with open(FIFOPATH, "w") as fifo: 16:50 < bridge> fifo.write(s) 16:50 < bridge> print(s) 16:50 < bridge> 16:50 < bridge> sleep(1) 16:50 < bridge> 16:50 < bridge> while True: 16:50 < bridge> out = "broadcast %s\n" % MSGRANDOMIZE 16:50 < bridge> in ur server autoexec set `sv_input_fifo` to the same path as `FIFOPATH` is in the python script 16:50 < bridge> run the server then the script 16:51 < bridge> By the way your air friction is weird, since values over 1.0 make you accelerate 16:51 < bridge> For fun 16:51 < bridge> And how is the script run by a command on a virtual machine? 16:52 < bridge> stick the file in there 16:52 < bridge> make it executable 16:52 < bridge> have python installed 16:52 < bridge> And random values will change every minute. 16:52 < bridge> ./thescript.py 16:52 < bridge> i hope you can figure out how to change that yourself 16:52 < bridge> its currently set to 5s 16:52 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308822357317517362/image.png?ex=673f574e&is=673e05ce&hm=1c2e6f9179c872c36d87247f4f969e1e888bb99fa61274595af1ea7bc8d61829& 16:53 < bridge> Do you need a screen to work around the clock? 16:53 < bridge> any method of keeping the process alive works 16:54 < bridge> that is using a screen (the gnu utility screen) 16:54 < bridge> or ctrl-z, bg, disown 16:55 < bridge> Should I throw the python script into the build directory? 16:55 < bridge> sure 16:55 < bridge> even easier is `./script.py & disown` 16:56 < bridge> oh yeah 16:56 < bridge> Now I will prepare a config for such a server 16:57 < bridge> :nobot: 17:01 < bridge> wasnt actually that bad 17:01 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308824478704472114/image.png?ex=673f5948&is=673e07c8&hm=9be78d0d3fb24ebfc65c9deb3c235427cb6f88bda1025f566b2adb1a03ab82e2& 17:01 < bridge> ok lol) 17:03 < bridge> So I started the server 17:03 < bridge> fancy 17:05 < bridge> So 17:05 < bridge> Now i launched python script? 17:05 < bridge> Need* 17:07 < bridge> @sollybunny 17:07 < bridge> root@GoodServers:~/DDNetPP/build# python3 random.py 17:07 < bridge> Traceback (most recent call last): 17:07 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:07 < bridge> from random import random 17:07 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:07 < bridge> from random import random 17:07 < bridge> ImportError: cannot import name 'random' from partially initialized module 'random' (most likely due to a circular import) (/root/DDNetPP/build/random.py) 17:08 < bridge> Error in sys.excepthook: 17:08 < bridge> Traceback (most recent call last): 17:08 < bridge> File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 72, in apport_excepthook 17:08 < bridge> from apport.fileutils import likely_packaged, get_recent_crashes 17:08 < bridge> File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in 17:08 < bridge> from apport.report import Report 17:08 < bridge> File "/usr/lib/python3/dist-packages/apport/report.py", line 12, in 17:08 < bridge> import subprocess, tempfile, os.path, re, pwd, grp, os, io 17:08 < bridge> File "/usr/lib/python3.10/tempfile.py", line 184, in 17:08 < bridge> from random import Random as _Random 17:08 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:08 < bridge> from random import random 17:08 < bridge> ImportError: cannot import name 'random' from partially initialized module 'random' (most likely due to a circular import) (/root/DDNetPP/build/random.py) 17:08 < bridge> 17:08 < bridge> Original exception was: 17:08 < bridge> Traceback (most recent call last): 17:08 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:08 < bridge> from random import random 17:08 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:08 < bridge> from random import random 17:08 < bridge> ImportError: cannot import name 'random' from partially initialized module 'random' (most likely due to a circular import) (/root/DDNetPP/build/random.py) 17:08 < bridge> root@GoodServers:~/DDNetPP/build# pyp 17:08 < bridge> -bash: pyp: command not found 17:08 < bridge> root@GoodServers:~/DDNetPP/build# pip 17:08 < bridge> '''root@GoodServers:~/DDNetPP/build# python3 random.py 17:08 < bridge> Traceback (most recent call last): 17:08 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:08 < bridge> from random import random 17:08 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:09 < bridge> from random import random 17:09 < bridge> ImportError: cannot import name 'random' from partially initialized module 'random' (most likely due to a circular import) (/root/DDNetPP/build/random.py) 17:09 < bridge> Error in sys.excepthook: 17:09 < bridge> Traceback (most recent call last): 17:09 < bridge> File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 72, in apport_excepthook 17:09 < bridge> from apport.fileutils import likely_packaged, get_recent_crashes 17:09 < bridge> File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in 17:09 < bridge> from apport.report import Report 17:09 < bridge> File "/usr/lib/python3/dist-packages/apport/report.py", line 12, in 17:09 < bridge> ``` 17:09 < bridge> 17:09 < bridge> root@GoodServers:~/DDNetPP/build# python3 random.py 17:09 < bridge> Traceback (most recent call last): 17:09 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:09 < bridge> from random import random 17:09 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:09 < bridge> from random import random 17:09 < bridge> ImportError: cannot import name 'random' from partially initialized module 'random' (most likely due to a circular import) (/root/DDNetPP/build/random.py) 17:09 < bridge> Error in sys.excepthook: 17:09 < bridge> Traceback (most recent call last): 17:09 < bridge> File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 72, in apport_excepthook 17:09 < bridge> from apport.fileutils import likely_packaged, get_recent_crashes 17:09 < bridge> File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in 17:09 < bridge> from apport.report import Report 17:09 < bridge> File "/usr/lib/python3/dist-packages/apport/report.py", line 12, in 17:09 < bridge> import subprocess, tempfile, os.path, re, pwd, grp, os, io 17:09 < bridge> File "/usr/lib/python3.10/tempfile.py", line 184, in 17:09 < bridge> from random import Random as _Random 17:10 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:10 < bridge> from random import random 17:10 < bridge> ImportError: cannot import name 'random' from partially initialized module 'random' (most likely due to a circular import) (/root/DDNetPP/build/random.py) 17:10 < bridge> 17:10 < bridge> Original exception was: 17:10 < bridge> Traceback (most recent call last): 17:10 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:10 < bridge> from random import random 17:10 < bridge> File "/root/DDNetPP/build/random.py", line 3, in 17:10 < bridge> bruh 17:10 < bridge> I fixed it 17:11 < bridge> and it works 17:11 < bridge> Thanks! 17:15 < bridge> your velocity gets multiplied by friction each tick vel *= 0.99 for example to mimic friction 17:16 < bridge> Yep I read the code to check :) 17:31 < bridge> any breaking config changes? 18:08 < bridge> hi devs 18:09 < bridge> vscode remote session going very hard right now 18:48 < bridge> @heinrich5991 if you have time could you see my latest comment in #9263 18:48 < bridge> https://github.com/ddnet/ddnet/pull/9263 18:56 < bridge> does anyone know if it's possible to access an econ port that's bound to localhost on the host from within a docker container? 19:00 < bridge> <0xdeen> host.docker.internal might work 19:01 < bridge> seemingly doesn't :/ 19:03 < bridge> <0xdeen> --network=host? 19:23 < bridge> maybe my econ port was not bound correctly... 19:24 < bridge> also trying that 19:47 < bridge> weirdly does not work 19:48 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308866558616928276/docker-compose.yaml?ex=673f8079&is=673e2ef9&hm=8ad2c79bb60b3db031e72a8942db55b9751a381614c05c14052da61e11a3d648& 19:52 < bridge> hm, maybe rootless docker is to blame 19:54 < bridge> `Host network (docker run --net=host) is also namespaced inside RootlessKit.` 20:05 < bridge> <_voxeldoesart> isnt the afk command literally the sit command i tried to add in 20:05 < bridge> <_voxeldoesart> :monkaStop: 20:41 < bridge> i havent seen anyone use it, theres not a setting for making your dummy use it, and its hard to tell if someone is sitting 20:42 < bridge> chat commands are finicky in that they are readily dropped so doing it inside of your dummy swap script doesn't work very well 20:47 < bridge> https://github.com/ddnet/ddnet/pull/9248 20:47 < bridge> sitting here approved ): 21:07 < bridge> many other prs too 21:23 < bridge> https://trynova.dev/ 21:26 < bridge> oh no 21:26 < bridge> its all rusty 21:26 < bridge> another day another js engine 21:26 < bridge> why no being merged 21:26 < bridge> this one isnt just a v8 wrapper tho 21:27 < bridge> *vaow* 21:29 < bridge> so is boa and spidermonke 21:30 < bridge> and at least 5 others 21:30 < bridge> :deadge: 21:30 < bridge> javascript should die already 21:32 < bridge> spidermonkey is not v8? 21:33 < bridge> nor is boa 21:33 < bridge> no 21:33 < bridge> also called bun/deno/the other ones engines are a bit miphy because they dont implement js they implement all the stuff ontop of a barebones interpreter 21:33 < bridge> deno is node and node is v8 21:34 < bridge> bun is not v8 21:34 < bridge> yeah but they arent really engines 21:34 < bridge> no 21:34 < bridge> i agree 21:34 < bridge> but i dont think its right to call them engines 21:34 < bridge> or rather i dont think its right to call boa, spidermonkey and v8 in the same category as node, deno and bun 21:34 < bridge> bun team has implemented their engine from scratch 21:34 < bridge> based on jscore 21:35 < bridge> from scratch and based on jscore are mutually exclusive 21:35 < bridge> well 21:35 < bridge> ``` 21:35 < bridge> At its core is the Bun runtime, a fast JavaScript runtime designed as a drop-in replacement for Node.js. It's written in Zig and powered by JavaScriptCore under the hood, dramatically reducing startup times and memory usage 21:35 < bridge> ``` 21:35 < bridge> which is apples js enginew 21:35 < bridge> which is apples js engine 21:36 < bridge> idk, not enough mantainers that can do reviews? 21:36 < bridge> made for webkit 21:36 < bridge> but it got approved? 21:37 < bridge> bun is 20% cpp, the language of choice of jscore (opposed to bun being famously one of the few zig projects) 21:38 < bridge> i doubt its modifications but idk 21:38 < bridge> the spambot from today was seemingly coming from some google cloud ips, blocked the whole range. 21:39 < bridge> so the conclusion is javascript is a big mess 21:39 < bridge> this 21:41 < bridge> not really js itself 21:41 < bridge> the number of implementations and runtimes ontop of it and especially frameworks yes 21:41 < bridge> but same goes for most languages have really bad ecosystems 21:42 < bridge> null is not an object however typeof null == "object" 21:42 < bridge> :feelsbadman: 21:42 < bridge> those are edge cases you can not bump into by writing good code 21:42 < bridge> typeof shouldnt be used 21:43 < bridge> wym 21:43 < bridge> typeof shouldnt always be used 21:43 < bridge> typeof is a relic and shouldnt be used 21:43 < bridge> for determining types you should use something else 21:43 < bridge> as its unreliable at best 21:43 < bridge> how to validate unknown input then 21:44 < bridge> use functions other people have written and tested 21:44 < bridge> which under the hood use typeof 21:44 < bridge> yeah but you shouldnt use it yourself 21:44 < bridge> npm i is-string is-number is-null 21:45 < bridge> ``` 21:45 < bridge> var TYPES = { 21:45 < bridge> 'undefined' : 'undefined', 21:45 < bridge> 'number' : 'number', 21:45 < bridge> 'boolean' : 'boolean', 21:45 < bridge> 'string' : 'string', 21:45 < bridge> '[object Function]': 'function', 21:45 < bridge> '[object RegExp]' : 'regexp', 21:45 < bridge> '[object Array]' : 'array', 21:45 < bridge> '[object Date]' : 'date', 21:45 < bridge> '[object Error]' : 'error' 21:45 < bridge> }, 21:45 < bridge> TOSTRING = Object.prototype.toString; 21:45 < bridge> 21:45 < bridge> function type(o) { 21:45 < bridge> return TYPES[typeof o] || TYPES[TOSTRING.call(o)] || (o ? 'object' : 'null'); 21:45 < bridge> }; 21:45 < bridge> ``` 21:46 < bridge> theres alot of legacy in javascript which cant really be fixed because it still has to support everything 21:46 < bridge> types in JS are actually hideous 21:46 < bridge> which is why you shouldnt use the builtin typeof 21:46 < bridge> other than that its fine 21:46 < bridge> i do use it 21:46 < bridge> arrest me officer 21:46 < bridge> no 21:47 < bridge> :justatest: 21:47 < bridge> and for objects you can use instanceof 21:47 < bridge> and that solves all the janky type stuff in js 21:47 < bridge> (your gonna mention 2 == "2" arent you) 21:48 < bridge> (use ===) 21:48 < bridge> (oh what about 2 + "2") 21:48 < bridge> (dont add strings and numbers then) 21:48 < bridge> (yeah it doesnt give an error, too bad, cant be fixed ):) 21:48 < bridge> no I mean in general with the coercion and such, I should not be able to add a number and a string -- better yet, I should not be able to add a string and a string 21:48 < bridge> why not 21:48 < bridge> most high level languages very easily support string concatonation 21:49 < bridge> or are you saying it shouldnt be the same operator 21:49 < bridge> i can mention 10 other issues but im too eepy 21:49 < bridge> and there is no point of proving obvious 21:49 < bridge> it's okay if I have static typing 21:49 < bridge> yeah, lua is based and has a separate string concatenation operator 21:50 < bridge> theres a list somewhere and all of them can be solved by not being silly, which yeah i guess is a bad thing about js, but its also a bad thing abt the programmer 21:50 < bridge> most of the issues i have never faced 21:50 < bridge> as most of the time you always know the type of something 21:50 < bridge> even if it isnt static 21:51 < bridge> https://youtu.be/V3554BmwV1E 21:51 < bridge> fireship > bbc 21:51 < bridge> yes 21:51 < bridge> ok but what if I want to check for null oh wait I also have to check for undefined and maybe something else too 21:51 < bridge> i want him to stop posting about ai 21:51 < bridge> use el handy function that i gave you instead of typeof 21:51 < bridge> also you can just do var === null 21:51 < bridge> for null 21:52 < bridge> ok fine 21:52 < bridge> what I'm saying is that the language is cursed and I don't want to use it 21:52 < bridge> NaN is the one you should be scared about 21:52 < bridge> undefined == null btw 21:52 < bridge> undefined !== null 21:52 < bridge> I'm scared of all three :) 21:52 < bridge> dont use == ;----; 21:52 < bridge> typeof NaN == "number" 21:52 < bridge> it is 21:53 < bridge> NaN is a floating point number 21:53 < bridge> i use it for nulls sometimes 21:53 < bridge> use === 21:53 < bridge> nothing breaks 21:53 < bridge> no im good 21:53 < bridge> it works 21:53 < bridge> ;---; 21:54 < bridge> i dont like this feature even thoiugh theres a readily available and advertised drop in replacement which can be used 100% of the time, but i dont like this language because it has this feature 21:54 < bridge> "i dont like this feature even thoiugh theres a readily available and advertised drop in replacement which can be used 100% of the time, but i dont like this language because it has this feature" 21:54 < bridge> I just checked and I kinda love Lua even more now 21:54 < bridge> 0 is truthy but NaN is falsy 21:55 < bridge> yikes 21:55 < bridge> no i just dont write js anymore 21:55 < bridge> ok yeah I see how a truthy 0 is scary, but hey the world's easiest NaN check :) 21:55 < bridge> lua is perfect 21:55 < bridge> lua not using braces and then deciding to have non consistent brace alternatives is an instant killer for me 21:55 < bridge> then also to have most standard library features missing is just shooting themselves in the foot 21:56 < bridge> and then also having 5000 different implementations because of it 21:56 < bridge> lua is not perfect 21:56 < bridge> js > lua 21:56 < bridge> I think NaN is false by specification if you compare it to any value 21:56 < bridge> you need to use isNaN 21:56 < bridge> which is bad i agree 21:56 < bridge> with the haters 21:56 < bridge> I think the do ... end and then ... end give it that lovely oldschool charm 21:56 < bridge> === shouldve changed that but it didnt and idk why 21:57 < bridge> it makes me want to *do* myself in, so *then* i can reach the *end* of my life 21:57 < bridge> I can tell you guys didn't learn programming with BASIC 21:57 < bridge> basic is not a basic programming lanugae 21:57 < bridge> its a programming language with a basic implementation 21:58 < bridge> I should try using freebasic sometime 21:58 < bridge> seems potentially fun 21:58 < bridge> dont need too 21:58 < bridge> my old physics teacher made ai racing cars in freebasic 21:58 < bridge> dont need to 21:58 < bridge> \: 21:58 < bridge> \\: 21:58 < bridge> learn excel formulas 21:58 < bridge> they are the future 21:58 < bridge> I learned programming in Microsoft QBasic when I was 10 21:58 < bridge> epic 21:59 < bridge> it stopped being the future as soon as they dropped support in their online studio, made their online studio bad in every other regard, then pushed their online studio 21:59 < bridge> actually i dont know what the usage is for desktop 21:59 < bridge> people using excel for things more than just a oh i need to do this thing quick scared me 21:59 < bridge> And I learned to RTFM by using the manual built into the editor, you can just press F1 on like any keyword or built in function and it'll give you the help for that 22:00 < bridge> it doesnt show up in tooltip? 22:00 < bridge> making formulas which work is very satisfying because its very hit and miss x-x 22:00 < bridge> It's a text mode editor my dude 22:00 < bridge> ? 22:00 < bridge> with tooltips 22:00 < bridge> is there excel in terminal? 22:01 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1308900002428489889/image.png?ex=673f9f9e&is=673e4e1e&hm=5b7b9d04b9359d87f2776041ba28eb61adafca37836853a681d33270faa07f24& 22:01 < bridge> this is google sheets, i dont have quick access to microsoft shtuff 22:01 < bridge> also google sheets so much faster than microsoft stuff 22:01 < bridge> missing so many features but i never use them so 22:01 < bridge> No I was talking about the QBasic editor and manual 22:02 < bridge> oh oek 22:03 < bridge> oh wow I thought the editor was based on edit.exe but actually that's wrong, edit.exe is based on qbasic 22:03 < bridge> ๐Ÿ˜• 22:03 < bridge> this is an MS-DOS application to be clear 22:03 < bridge> windows specific technologies turn me off 22:03 < bridge> feels grimey 22:04 < bridge> sorry windows no offense 22:04 < bridge> pre-windows my dude 22:04 < bridge> MS-DOS is markedly less cringe than MS Windows 22:04 < bridge> ps: in a interest sort of way, i dont find sexual gratification in computer technologies 22:04 < bridge> still cringe tho 22:04 < bridge> better versions of DOS out there 22:05 < bridge> i use windows as a catch all for windows operating systems 22:05 < bridge> i use windows as a catch all for microsoft operating systems 22:05 < bridge> also msdos is cringe 22:06 < bridge> FreeDOS? Or maybe something more archaic, an MS-DOS competitor from back in the day? 22:06 < bridge> you gotta have a favourite DOS 22:06 < bridge> msdos used a bit of C, still mostly asm. but they knew that \ would mean forever escaping 12 times 22:06 < bridge> i dont have a favourate dos 22:07 < bridge> actually I don't have a favourite DOS... FreeDOS is probably the most based one but MS-DOS is the only one I'm familiar with 22:07 < bridge> i barely know how to navigate in windows cmd 22:07 < bridge> Hey me too, it's so different to the olden days 22:07 < bridge> i never used dos 22:07 < bridge> im small 22:07 < bridge> also I've forgotten a lot of things 22:07 < bridge> but whats with powershell, they had the opertunity to switch to a bash like and they didnt 22:08 < bridge> they went even worse 22:08 < bridge> I'm supposed to be too young to have used DOS but my first computer was very old 22:08 < bridge> ah yes lets make every command take 30s to run 22:08 < bridge> windows xp was my earliest version of windows 22:08 < bridge> PS is supposedly like better for scripts than bash, like, it's a better language 22:08 < bridge> *ghasp* 22:08 < bridge> but oh god the naming is disgusting 22:08 < bridge> yeah... but no its not 22:08 < bridge> and it's so Microsofty 22:08 < bridge> just puts me off 22:09 < bridge> Win98 SE ๐Ÿ˜Ž 22:09 < bridge> despite having been born in 1999 22:09 < bridge> wow u dont have to show off like that 22:09 < bridge> For a while my parents and some of their friends remarked that I was born too late 22:10 < bridge> because I really took to older computer stuff when I was a kid 22:11 < bridge> I still have some floppies and a machine with a floppy drive 22:13 < bridge> but I think I need an upgrade 22:13 < bridge> eventually I'll either get a proper old desktop computer or something of the like, that laptop isn't doing it for me 22:13 < bridge> i sorta went the same way, not because i like old hardware, but it was so much simpler 22:13 < bridge> and if an os can run on 100x less resources, then wtf is going on with this os 23:45 < bridge> @robyt3 Mhttps://github.com/ddnet/ddnet/pull/9248> 23:45 < bridge> why no being merged :D 23:45 < bridge> @robyt3 23:45 < bridge> why no being merged :D