02:28 <+bridge_> Someone told me they have lag in newer versions, I don't have any solution for them 02:28 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1287187497268412506/image.png?ex=696ac3c6&is=69697246&hm=ee6116268f91eb4c12339048746724e937c3e2e36f3414b34f0b1d2a75056c16& 04:55 <+bridge_> @blaiszephyr were u the one developing some ddnet client launcher? 04:55 <+bridge_> i think he wanted to do but never did 04:55 <+bridge_> there is twlauncher tho https://github.com/noxygalaxy/TWLauncher 04:56 <+bridge_> hmmmm 04:56 <+bridge_> oh he also made 04:56 <+bridge_> https://github.com/BlaiZephyr/ddlauncher 04:56 <+bridge_> i dont like the visuals of that 04:57 <+bridge_> fork it and make it look ur way 04:57 <+bridge_> ye im just hating for no reason :D but it looks nice. if it supports installation from within app that's really nice 04:58 <+bridge_> ye im just hating for no reason :D but it seems nice otherwise. if it supports installation from within app that's really nice 05:16 <+bridge_> noxy one is the only one i knew 05:31 <+bridge_> I wanted to but then we got a binary launcher instead :nouis: 06:10 <+bridge_> i do think we should have weapon shields for hammer, but at that point it should be for all weapons. some parts use telegun or jetpack and you may as well let them control that too 06:10 <+bridge_> otherwise its like one more change that is possibly not the last in the series of change xd 06:11 <+bridge_> also i think it would be nice to walk around without weapons ^^ 07:36 <+bridge_> My launcher is not only non-functional afair, it's also only for official ddnet versions from ddnet.org :WICKED: 07:36 <+bridge_> 07:36 <+bridge_> I wanted to make one for ddnet-rs but then Justin just made an auto updater and agreed on not caring for Backwards compat 07:37 <+bridge_> My launcher is not only non-functional afair, it's also only for official ddnet versions from ddnet.org :WICKED: 07:37 <+bridge_> 07:37 <+bridge_> I wanted to make one for ddnet-rs but then jupstar made an auto updater and agreed on not caring for Backwards compat 09:26 <+bridge_> IResult and IConsole::IResult in the same place, looks terrible 09:26 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1461637624816209970/image.png?ex=696b479d&is=6969f61d&hm=fae0ec699631f2ceb9330213f7f711d600f6c62d1a1e4758de83a04e6d345427& 10:39 <+ChillerDragon> omg doxygen is such high maintenance i hate it 10:39 <+ChillerDragon> it keeps breaking my CI 10:40 <+ChillerDragon> now idk how to even fix it. I generated the signature in the header with a macro and now doxygen dies when it sees the implementation in the cpp file 10:40 <+ChillerDragon> such L tool 10:40 <+ChillerDragon> if you cant read c++ dont die because of it wtf 11:56 <+bridge_> @chillerdragon can you take a look at #11628 ? We need it for 19.7 11:56 <+bridge_> https://github.com/ddnet/ddnet/pull/11628 11:58 <+ChillerDragon> it is on my todo just not with too high of a prio sorry 11:58 <+bridge_> if you prefer, we can also merge it without you taking a look at it, ChillerDragon 11:59 <+bridge_> (already got reviewed by @robyt3 and me) 12:03 <+bridge_> @heinrich5991: did you actually test it? 12:04 <+bridge_> I mean sure we can just send another pr to fix it haha I don’t want to hold it back I might need a few days to find energy to fully review this 12:04 <+bridge_> I haven't tested it. I saw the code and it looked good, and I saw that @essigautomat tested it 12:05 <+bridge_> That didn’t workout so well last time did it? 12:05 <+bridge_> btw I would love to share that I need things in my forks and that’s why I send prs to ddnet. If people tell me they need something for their projects that is a real motivator for me to help them out. But for you it seems to have the opposite effect. So I rather not mention it. 12:05 <+bridge_> This time it looks conceptually much better, which you don't know because you didn't saw it to be fair 12:06 <+bridge_> @heinrich5991: you can’t expect me to be transparent if it is a disadvantage for me 12:07 <+bridge_> please just give us your motiviation for stuff, this might also hint at problems in ddnet and we are not opposed to mods (like we don't forbid them) 12:13 <+bridge_> @essigautomat: nah that is not true. Heinrich wants to hear only about DDNet as soon as I mention my fork he blocks it 12:13 <+bridge_> chillerdragon: how are we supposed to trust you if you say you're going to lie (by omission) to us? 12:13 <+bridge_> chillerdragon: how are we supposed to trust you if you say you're going to lie (even if by omission) to us? 12:14 <+bridge_> I find this formulated way to broad, can you give me an example? 12:14 <+bridge_> :brownbear: 12:14 <+bridge_> vpn 때문에 차단당했다고 하는데 어떻게 해결해야 하나요? 저는 vpn을 사용하고 있지 않아요....ㅠㅠ 12:15 <+bridge_> mhm, yes 12:15 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1461680232296878223/image.png?ex=696b6f4c&is=696a1dcc&hm=4d7c72f57a43eed2f1316aef3dedbff27302a89a3ff8cd759516830b2c5e265e& 12:15 <+bridge_> Write a ticket and write in english 12:15 <+bridge_> https://discord.com/channels/252358080522747904/1124657351442579486 12:16 <+bridge_> > I've been told I'm blocked because of a VPN. How should I resolve this? I'm not using a VPN... 12:16 <+bridge_> @heinrich5991: how should I trust you when you work against not for me 12:16 <+bridge_> I'm being open about my intentions and motivations 12:16 <+bridge_> This is not a „we“ problem. I only have this issue with you personally @heinrich5991 12:17 <+bridge_> 🙁 12:18 <+bridge_> it becomes a "we" problem (how can ddnet trust you) if you don't state your intentions 12:20 <+bridge_> @heinrich5991: I have 5m go call xmpp 12:20 <+bridge_> <0xdeen> send me a dm with your public ipv4 address please 12:21 <+bridge_> Intentions don’t matter. Outcomes do 12:21 <+bridge_> I contribute to ddnet what I think is good for ddnet 12:21 <+bridge_> I don’t mention that it also helps my project because you are on a personal vendetta against it 12:22 <+bridge_> Version pinning is good! If there was no drama this would be a non brainer of my merge. You only proof my point 12:26 <+bridge_> we should also adress the outdated doxygen file - but I don't think this needs to be part of this PR necessarily 12:29 <+bridge_> W call 12:31 <+bridge_> chillerdragon wants to state his intentions more clearly again, I want to double-reflect in the future whether I don't like the PR for its changes wrt. ddnet only (and not its relation with mods) 13:32 <+bridge_> I want to create a /color command that changes the player's skin color to a random color. Where should I start? 13:40 <+bridge_> rcon command? 13:42 <+bridge_> <01000111g> You could probably achieve this with Chai scripts in TClient 13:42 <+bridge_> <01000111g> but otherwise the first step would be to find the cl_player_color implementation, copy it and put in rng 13:43 <+bridge_> i think he means server sided 13:45 <+bridge_> chat 13:46 <+bridge_> I want the color to change randomly after typing a command in the chat 13:51 <+ChillerDragon> @bobik8912 here is the code and a preview video of exactly that https://github.com/ddnet/ddnet/pull/10787#issuecomment-3240029837 13:51 <+ChillerDragon> okay exactly is a bit bold 13:51 <+ChillerDragon> its not random :/ 13:52 <+bridge_> doesnt have math.random sadly 13:52 <+ChillerDragon> and its legacy 0.6 only 13:52 <+ChillerDragon> just replace all 0 with random_below(255) 13:58 <+ChillerDragon> something like this 13:58 <+ChillerDragon> `pPlayer->m_TeeInfos.m_ColorBody = ColorHSLA(secure_rand_below(255), secure_rand_below(255), secure_rand_below(255)).Pack();` 13:58 <+ChillerDragon> untested code btw 13:58 <+ChillerDragon> might actually work 0.7 too forgot how the trans layer works 13:59 <+ChillerDragon> @bobik8912 do you already know how to compile ddnet? 13:59 <+bridge_> yes 13:59 <+bridge_> I just started learning C++ and the DDNet framework. 14:02 <+bridge_> Are you talking about ConColor? 14:02 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1461707120566210795/conor.png?ex=696b8856&is=696a36d6&hm=c9a0bd91f4d2540916ce5aedd2455bedf18a1dfbe92b4ba28bd28a55610e07ab& 14:02 <+ChillerDragon> where is that screenshot from? 14:02 <+bridge_> I'll try it now 14:02 <+ChillerDragon> you clicked my link and applied the diff? 14:03 <+ChillerDragon> its in multiple files. Do you understand how to read the diff? 14:03 <+bridge_> Код Visual studio 14:03 <+ChillerDragon> yes looks good so far 14:03 <+ChillerDragon> just swap out the place where it sets m_ColorBody with the line i sent earlier which uses secure_rand_below to make it actually random 14:07 <+bridge_> ``` 14:07 <+bridge_> Console()->Register("color", "s[color]", CFGFLAG_CHAT | CFGFLAG_SERVER, ConColor, this, ""); 14:07 <+bridge_> ``` 14:07 <+bridge_> 14:07 <+bridge_> should I remove the s[color] ? 14:11 <+bridge_> shouldn't it be c[color] now? 14:12 <+bridge_> I want it to be random, even if I leave and write /color red in the chat, the color doesn't change 14:13 <+bridge_> then make it random in ConColor? 14:13 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1461710041970118696/conor.png?ex=696b8b0f&is=696a398f&hm=8d7fb30e07ac3a844d4a6a9ad12b8a5e17ee858beeb89636c84b22197563d1c7& 14:14 <+bridge_> please post code as code ._. 14:14 <+bridge_> frame it with ``` 14:14 <+bridge_> otherwise we can't copy-paste or search it 14:15 <+bridge_> https://support.discord.com/hc/en-us/articles/210298617-Markdown-Text-101-Chat-Formatting-Bold-Italic-Underline#h_01GY0DAKGXDEHE263BCAYEGFJA 14:15 <+bridge_> first thing I see, it should be 256 because it is **below** 14:16 <+bridge_> Should I return "s[color]" or not? 14:18 <+bridge_> then I think you need to convert the value in a float between 0.0f and 1.0f, then i'd set WithAlpha(1.0f), then I don't know if changing the TeeInfos on server side is enough - I remember in 0.7 we had a special netmessage for skin changes 14:23 <+bridge_> just generate a random number between 0 and 0xffffff 14:24 <+bridge_> <_qey> Fuck, I missed a beef between Heinrich and ChillerDragon. Anyways, now I’m afraid to PR anything if even ChillerDragon gets… “hate”? 14:25 <+bridge_> <_qey> I thought you said you don’t know programming. 14:25 <+bridge_> dw tmr will be more prbl 😄 14:27 <+bridge_> :justatest: 14:27 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1461713444418883665/image.png?ex=696b8e3a&is=696a3cba&hm=1575706517d946d976e5194e0125056a064990e88c1689f16640b993b479722b& 14:28 <+bridge_> i know a little here and there 14:28 <+bridge_> <_qey> So glad I moved away from Windows. 14:29 <+bridge_> <_qey> So it’s fair to say then, that it’s just laziness of yours? I mean writing code for FoxNet. 14:29 <+bridge_> Im self-taught 14:30 <+bridge_> and ive also never seen much more than ddnet 14:30 <+bridge_> thats what i mean 14:30 <+bridge_> <_qey> Every good programmer is. 14:30 <+bridge_> id say im a special case xD 14:30 <+bridge_> <_qey> Good programmers come from passion, not 5 years of uni or some other shithole. 14:31 <+bridge_> well i literally started by changing random numbers in the client and seeing what happens 14:32 <+bridge_> i had no clue what anything means and i still dont really 14:32 <+bridge_> <_qey> That’s how it starts. 14:32 <+bridge_> <_qey> That’s the best start you could have. 14:32 <+bridge_> <_qey> You have potential through passion. 14:32 <+bridge_> and chatgpt bandaid 14:33 <+bridge_> <_qey> Can it maintain DDNet? 14:33 <+bridge_> in some cases probably 14:33 <+bridge_> but not really 14:34 <+bridge_> but i refrain from using it since i wanna understand whats going on 14:37 <+bridge_> <_qey> I believe in you. I’ll visit FoxNet in a month to see the changes you’ve done. 14:38 <+bridge_> havent been working on it :p 14:38 <+bridge_> no motivation right now 14:38 <+bridge_> <_qey> I’ll pay you 1 euro. 14:38 <+bridge_> xD 14:38 <+bridge_> im good 14:38 <+bridge_> <_qey> Okay, 2. 14:38 <+bridge_> <_qey> How old is FoxNet? 14:39 <+bridge_> like a year 14:39 <+bridge_> there is an old version which is private now 14:39 <+bridge_> rewrote everything a few months ago 14:39 <+bridge_> <_qey> 150 players right now, nice. You should monetize it. 14:40 <+bridge_> money! 14:40 <+bridge_> <_qey> I figured, it’s a real player count, since gores don’t usually require you to play with a dummy. Unlike my shitty block servers where everyone is playing with one. 14:40 <+bridge_> <_qey> So my player count is probably 30-40% inflated. 14:41 <+bridge_> <_qey> Moneee, yes. The ultimate goal of this life is mone. 14:41 <+bridge_> there are about 10 dummies yeah 14:42 <+bridge_> I mean i probably could start selling ingame currency or sum 14:43 <+bridge_> but im too lazy to like do allat 14:43 <+bridge_> <_qey> Added duels today. Will I get banned from DDNet if I make mone duels? 14:43 <+bridge_> good question 14:43 <+bridge_> <_qey> Like two players dueling for mone between each other. 14:47 <+bridge_> you can have passion and go to uni 14:49 <+bridge_> <_qey> I didn’t say you can’t. I said only going to uni alone doesn’t get you to the perfection you can become with passion. 14:50 <+bridge_> ``` 14:50 <+bridge_> void CGameContext::ConColor(IConsole::IResult *pResult, void *pUserData) 14:50 <+bridge_> { 14:50 <+bridge_> CGameContext *pSelf = (CGameContext *)pUserData; 14:51 <+bridge_> if(!CheckClientId(pResult->m_ClientId)) 14:51 <+bridge_> return; 14:51 <+bridge_> CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientId]; 14:51 <+bridge_> if(!pPlayer) 14:51 <+bridge_> return; 14:51 <+bridge_> 14:51 <+bridge_> pPlayer->m_TeeInfos.m_ColorBody = pResult->GetColor(0, 0.0f).Pack(false); 14:51 <+bridge_> } 14:51 <+bridge_> ``` 14:51 <+bridge_> ``` 14:51 <+bridge_> Console()->Register("color", "s[color]", CFGFLAG_CHAT | CFGFLAG_SERVER, ConColor, this, ""); 14:51 <+bridge_> ``` 14:51 <+bridge_> ``` 14:51 <+bridge_> static void ConList(IConsole::IResult *pResult, void *pUserData); 14:51 <+bridge_> ``` 14:51 <+bridge_> 14:51 <+bridge_> the code doesn't want to work :pepeW: 14:51 <+bridge_> what exactly are you trying to do agaiN? 14:52 <+bridge_> https://github.com/ddnet/ddnet/pull/10787 14:52 <+bridge_> that doesnt really 14:52 <+bridge_> what 14:52 <+bridge_> im confused 14:54 <+bridge_> then I wanted to make a random color, but I couldn't, so I just changed the colors with the command /color red\blue\green... 14:55 <+bridge_> <_qey> What are you trying to achieve? 14:55 <+bridge_> I want to study the DDNet structure. 14:56 <+bridge_> <_qey> Am I prohibited to speak any language other than English in here? 14:56 <+bridge_> @bobik8912: if you just write „doesn’t work“ nobody can help you 14:56 <+bridge_> What is the error what did you try? 14:56 <+bridge_> It you publish your full code I can have a look 14:56 <+bridge_> If you publish your full code I can have a look 14:56 <+bridge_> the command works for me btw 14:56 <+bridge_> xD 14:56 <+bridge_> i copied your code 14:57 <+bridge_> <_qey> The good old “works on my end”, lol. 14:57 <+bridge_> also idk why `static void ConList(IConsole::IResult *pResult, void *pUserData);` is here 14:57 <+bridge_> ConList? 14:57 <+bridge_> I got mixed up 14:57 <+bridge_> static void ConColor(IConsole::IResult *pResult, void *pUserData); 14:58 <+bridge_> it's just highlighted in vsc, and I copied it. 14:58 <+bridge_> doing `color 6532627`sets my color to some green tone 14:58 <+bridge_> doing `color 6532627`sets my color to some green tone 14:59 <+bridge_> ``` 14:59 <+bridge_> static void ConColor(IConsole::IResult *pResult, void *pUserData); 14:59 <+bridge_> ``` 15:00 <+bridge_> does the command even appear in rcon on your end 15:01 <+bridge_> <_qey> I wonder if he’s using F1 or F2. 15:01 <+bridge_> probably /color 15:01 <+bridge_> but that also works for me 15:01 <+bridge_> <_qey> An easy mistake if you’re just getting into it. 15:02 <+bridge_> @bobik8912 do you have custom colors enabled? 15:03 <+bridge_> :poggers2: 15:03 <+bridge_> no way 15:03 <+bridge_> xDDD 15:03 <+bridge_> :justatest: 15:03 <+bridge_> because it also worked on my end, i wanted to know why it wouldnt apply XD 15:03 <+bridge_> I thought it would work without 15:04 <+bridge_> nöp 15:04 <+bridge_> ` 15:04 <+bridge_> pPlayer->m_TeeInfos.m_UseCustomColor = true;` then 15:04 <+bridge_> ^ 15:04 <+bridge_> `pPlayer->m_TeeInfos.m_UseCustomColor = true;` then 15:04 <+bridge_> holy discord formatting 15:04 <+bridge_> real 15:05 <+bridge_> „Works on my skin“ 15:06 <+bridge_> Sorry for providing you with a racist code snippet 15:07 <+bridge_> Is there a way to make it repeat itself multiple times? 15:08 <+bridge_> repeat itself? 15:08 <+bridge_> repeat itself 15:08 <+bridge_> why would it repeat itself 15:08 <+bridge_> youre inputing the coclor 15:08 <+bridge_> or do you want everyone to have a random color every tick 15:09 <+bridge_> Is bro building rainbow? 15:09 <+bridge_> Just buy DDNet-insta pro license 15:09 <+bridge_> And use rainbow command 🌈 15:09 <+bridge_> It actually works 15:10 <+bridge_> Even in 0.7 15:10 <+bridge_> Not like L kog rainbow impl which is 0.6 only 15:10 <+bridge_> ``` 15:10 <+bridge_> for (int i = 1; i <= 300; i++){ 15:10 <+bridge_> pPlayer->m_TeeInfos.m_ColorBody = pResult->GetColor(i, 0.0f).Pack(false); 15:10 <+bridge_> } 15:10 <+bridge_> ``` 15:10 <+bridge_> That's what I mean. 15:10 <+bridge_> you wont see 99% of the colors 15:11 <+bridge_> and 15:11 <+bridge_> but.. i.. äh.. huuh 15:11 <+bridge_> youre getting a result of nothing 15:11 <+bridge_> Only the last set color is shown 15:11 <+bridge_> i'll steal chillers money and give you the rainbow code 1 sec 15:11 <+bridge_> If you want an animation do it on tick 15:12 <+bridge_> I know, I just don't know how to solve this problem. 15:12 <+bridge_> you gotta tell us what exactly your goal is xD 15:12 <+bridge_> but im guessing rainbow so just wait for melon 15:13 <+bridge_> anything that is supposed to be applied continuously(?) for a player, do it in `CPlayer::Tick()` 15:13 <+bridge_> I want to slow down this action so that I can see the colors 15:14 <+bridge_> copy your current command and have it set a var like `m_Rainbow` or something, and call it within CPlayer::Tick() with a simple if 15:14 <+bridge_> 15:14 <+bridge_> i.e 15:15 <+bridge_> ```cpp 15:15 <+bridge_> if(m_Rainbow) 15:15 <+bridge_> { 15:15 <+bridge_> m_ShinyColor = (m_ShinyColor + 4) % (255 * 6); 15:15 <+bridge_> ... rest of the code to apply it 15:15 <+bridge_> }; 15:15 <+bridge_> ``` 15:15 <+bridge_> copy your current command and have it set a var like `m_Rainbow` or something, and trigger(?) it within CPlayer::Tick() with a simple if 15:15 <+bridge_> 15:15 <+bridge_> i.e 15:15 <+bridge_> ```cpp 15:15 <+bridge_> if(m_Rainbow) 15:15 <+bridge_> { 15:15 <+bridge_> m_ShinyColor = (m_ShinyColor + 4) % (255 * 6); 15:15 <+bridge_> ... rest of the code to apply it 15:15 <+bridge_> }; 15:15 <+bridge_> ``` 15:16 <+bridge_> I mean to use CPlayer::Tick() 15:16 <+bridge_> the for loop will complete execution before the next tick arrives, so you're setting the color 300 times in a fraction of a second within the same tick. U can imagine the server code only stepping in time every time Tick() is called, everything else essentially happens instantaneously (including a 300 iteration for loop) 15:17 <+bridge_> I want to use Tick( ) but I don't know how 15:17 <+bridge_> He told you how 15:17 <+bridge_> melons code updates the color every tick by adding a value to the current color, which is what u have to do. You have to incrementally update the current color value every tick, not iterate over every color value every tick. 15:17 <+bridge_> @bobik8912: you know that rainbow is a solved problem right? You can just use existing mods 15:18 <+bridge_> people like to learn chiller :p 15:18 <+bridge_> thats also why i didnt just give him a diff 15:18 <+bridge_> i'm fancy like dat 15:18 <+bridge_> They can learn building new stuff too 15:18 <+bridge_> reinventing the wheel is fun 😬 15:20 <+bridge_> Thats bs 15:20 <+bridge_> The people that show up here always reinvent the wheel of things that are not in ddnet 15:20 <+bridge_> I would respect it if it was things that are in ddnet 15:20 <+bridge_> rainbow could be in ddnet 15:20 <+bridge_> But if you add something you need that someone else added before I call bs on the learning argument 15:20 <+bridge_> :bb_eating: 15:20 <+bridge_> Well it’s not 15:21 <+bridge_> add it 15:21 <+bridge_> It won’t be merged also not my point 15:21 <+bridge_> My point is if rainbow was in ddnet he would not be posting this question here right now 15:21 <+bridge_> @chillerdragon can you check the scoreboard thing again? Thank you for providing a server I can test this on 15:24 <+bridge_> On the bike right now 15:25 <+bridge_> Then you need to level up your bike skills /s :kek: 15:26 <+bridge_> reminder that chiller wrote code reviews while waiting for the traffic lights. 15:26 <+bridge_> I know that 15:26 <+bridge_> Maybe I wrote the one or other review drunk in a pause of a music jam 15:26 <+bridge_> you'll never find out 15:31 <+bridge_> i'm 90% sure you said that after a review of yours 🐴 15:33 <+bridge_> Imagine reviewing sober 15:39 <+bridge_> I have a spree of PRs that only exist to make chiller happy 15:41 <+bridge_> > Very good idea to do such thing. You are a great developer! 15:41 <+bridge_> You sound so sarcastic 😢 15:44 <+ChillerDragon> that spree was caused by you breaking everything 15:44 <+bridge_> <_qey> Is it a per-tick change in their implementation? My user base has asked for a rainbow for a year now. 15:45 <+bridge_> <_qey> I thought it’s something cool, not just a skin color change. 15:45 <+bridge_> <_qey> People ask for things I don’t understand and they won’t explain. 15:46 <+bridge_> <_qey> Is it a per-tick change in their implementation? My player base has asked for a rainbow for a year now. 15:47 <+bridge_> I am just breaking unknown edge cases - as always 15:55 <+bridge_> https://github.com/ddnet/ddnet/pull/11628#issuecomment-3760357040 15:55 <+bridge_> 15:55 <+bridge_> One of the listed mods must have been broken before ... what is this, what am I supposed to do about this, should I also expect a map time, if the send map time is > 0 without the server sending any time indication? 15:56 <+bridge_> Oh Wait, it shows **your own** score 15:57 <+bridge_> What is this ;_; 16:09 <+bridge_> I checked if I should do ` if(GameClient()->m_ReceivedDDNetPlayerFinishTimes || TimeScore || Race7 || GameClient()->m_MapBestTimeSeconds > 0)` but the server doesn't even send a best time 16:12 <+ChillerDragon> bro is responding to 10hour outdated comment 16:12 <+bridge_> bro needs time to test things properly 16:12 <+bridge_> bro is not a speed wizard, I am a slow wizard burning everyone with fireballs 16:12 <+ChillerDragon> pls dont change the code again ull invalidate all reviews xd 16:13 <+ChillerDragon> everything is fucked 16:13 <+ChillerDragon> but at least i can not proof it 16:13 <+bridge_> it was fucked before tbh 🙈 16:13 <+bridge_> maintainer btw 16:13 <+ChillerDragon> it was 16:13 <+bridge_> the fact that we have now 2 legacy messages for this ... which I need to account for 16:13 <+bridge_> and mods send whatever 16:14 <+bridge_> and the ddnet client needs to show the correct thing ;_; thing is really fucked 16:15 <+ChillerDragon> only way to unfuck things would be if ppl would have listend to what i said in https://github.com/ddnet/ddnet/issues/8923 and put me in charge of those decisions to not break everything by everyone doing a different approach for mods and prediction and shits 16:15 <+ChillerDragon> but i gave up 16:15 <+ChillerDragon> all is fucked 16:16 <+ChillerDragon> its now just a matter of fighting sympthoms 16:16 <+ChillerDragon> we are all doomed 16:16 <+ChillerDragon> time to boot gores client and farm points 16:16 <+bridge_> my really first implementation had a flag for this, but I think other maintainers don't want new gameflags if not really unavoidable 16:16 <+ChillerDragon> if you ask me 16:16 <+ChillerDragon> as i already said 16:16 <+ChillerDragon> EVERYTHING EVERYTHING SHOULD BE FULLL FULL VANILLA TEEWORLDS 100% 16:17 <+ChillerDragon> unless 16:17 <+ChillerDragon> a very specific flag says otherwise 16:17 <+ChillerDragon> that would be soo clear and so flexible 16:17 <+ChillerDragon> it would be actually good 16:17 <+ChillerDragon> but hey what do i know 16:17 <+ChillerDragon> bye 16:18 <+bridge_> as everything that is in a broken weird state - it grew historically into it without directed design decisions 16:18 <+bridge_> and you know full well that it is unfixable now, because of all the legacy servers and mods 16:19 <+bridge_> <_qey> Start over. 16:20 <+bridge_> <_qey> Usually happens to my projects that grow to a Frankenstein’s monster over 100 iterations of adding functionality. 16:20 <+bridge_> <_qey> It becomes easier to rewrite everything. 16:20 <+bridge_> yes, step one: REIMPLEMENT ALL OF THE MODS AVAILABLE IN DDNET AND TEEWORLDS 16:21 <+bridge_> <_qey> Glad you feel me. 16:22 <+bridge_> @chillerdragon I'd be really glad if you pressed merge after you already tested everything 16:22 <+ChillerDragon> yes yes my bad i fucked up big time 16:22 <+ChillerDragon> i merged while searching for my keys 16:23 <+ChillerDragon> got too hyped about the concept forgot to think about the code :D 16:23 <+bridge_> as long as you don't miss your yubikey :justatest: 16:23 <+ChillerDragon> kebso saved the day again 16:23 <+ChillerDragon> when do we make kebs maintainer he is better reviewer than me anyways 16:23 <+bridge_> kebab 16:24 <+ChillerDragon> i am a bit mad because i actually had a different implementation for this pr in my head and still got no warning signs from yours being different xd 16:24 <+ChillerDragon> @Assa but that also means you didnt test it :p 16:25 <+bridge_> what did I not test? 16:25 <+ChillerDragon> the pr with the bool 16:25 <+ChillerDragon> i guess would need a custom server to catch it 16:25 <+bridge_> I actually did, what breaks with it? I have seen kebs comment but it doesn't make sense 16:25 <+ChillerDragon> you set a bool in the loop 16:26 <+bridge_> yes 16:26 <+ChillerDragon> so only the last iteration counts 16:26 <+ChillerDragon> you want any_of 16:26 <+bridge_> and? 16:26 <+bridge_> no 16:26 <+ChillerDragon> no? 16:26 <+ChillerDragon> well i see 16:26 <+bridge_> Because UNSET is UNSET and NOT_FINISHED is NOT_FINISHED 16:26 <+bridge_> ❤️ 16:26 <+ChillerDragon> so you dont care if the server placed it at least once 16:27 <+ChillerDragon> you expect the server to consistently place it on all snap items 16:27 <+ChillerDragon> wait lemme take a closer look 16:27 <+bridge_> in my understanding, the server either never uses UNSET or always uses it 16:27 <+bridge_> in my understanding, the server either never uses UNSET or always uses it for every item 16:27 <+ChillerDragon> i see 16:28 <+ChillerDragon> well heuristic is fucked either way 16:28 <+bridge_> I tested it ingame, works on unique, works on older ddnet servers as well 16:28 <+ChillerDragon> but in my head i thought you meant as soon as the server sets it at least for one player it should kick in 16:28 <+ChillerDragon> the variable is called `m_ReceivedDDNetPlayerFinishTimes` and it could be `false` even if it received finish times 16:28 <+ChillerDragon> that is misleading to me 16:29 <+ChillerDragon> u know what i mean? 16:29 <+bridge_> Yes but I'd expect a server to send the finish times for all players, and not a subset of them 16:29 <+ChillerDragon> yes i understand that too 16:29 <+ChillerDragon> but dont do it :p 16:30 <+ChillerDragon> its not okay to have a misleading variable name caused by something that is not under your control 16:30 <+bridge_> <_qey> Can I get one PR approved, so I can call myself a DDNet developer? 16:31 <+ChillerDragon> yes 16:32 <+bridge_> @chillerdragon so you'd prefer, that I have a buffer bool, that I set to false before the loop, check if any finish times are set, and then update the value of this variable? 16:32 <+bridge_> yes just implement accounts 16:33 <+bridge_> what loop are you even talking about 16:35 <+bridge_> watch me break the scoreboard even more, by allowing score/time indidivually for players ;_; 16:40 <+ChillerDragon> snap item loop 16:41 <+ChillerDragon> it was individual already 16:41 <+ChillerDragon> you just made it dependent on the last player in the snap 16:41 <+bridge_> no it was never individual 16:41 <+ChillerDragon> which is giga random 16:42 <+ChillerDragon> if it wasnt individual before it isnt now either xd 16:42 <+ChillerDragon> thats what i mean 16:43 <+bridge_> how would you "undo" this variable then? 16:43 <+ChillerDragon> by not setting it to true in the loop 16:43 <+bridge_> when would you set it to true and when to false? 16:43 <+ChillerDragon> idk 16:43 <+ChillerDragon> its your variable 16:43 <+bridge_> should I iterate over all active clients and check if it's unset? 16:43 <+ChillerDragon> it should be true if a ddnet player finish was received 16:44 <+ChillerDragon> @Assa i guess so 16:44 <+ChillerDragon> sounds better to me than to only check the last player 16:44 <+ChillerDragon> dont u agree? 16:44 <+bridge_> I assume :/ 16:44 <+ChillerDragon> yay 16:49 <+bridge_> ``` 16:50 <+bridge_> // check if we received all finish times 16:50 <+bridge_> bool ReceivedAllFinishTimes = true; 16:50 <+bridge_> for(int i = 0; i < MAX_CLIENTS; ++i) 16:50 <+bridge_> { 16:50 <+bridge_> if(m_aClients[i].m_Active && m_aClients[i].m_FinishTimeSeconds == FinishTime::UNSET) 16:50 <+bridge_> { 16:50 <+bridge_> ReceivedAllFinishTimes = false; 16:50 <+bridge_> break; 16:50 <+bridge_> } 16:50 <+bridge_> } 16:50 <+bridge_> m_ReceivedDDNetPlayerFinishTimes = ReceivedAllFinishTimes; 16:50 <+bridge_> ``` 16:50 <+bridge_> 16:50 <+bridge_> @chillerdragon you like dis? 16:51 <+ChillerDragon> i think so 16:51 <+ChillerDragon> i wouldnt have done a new loop tbh 16:51 <+ChillerDragon> is this a new loop i cant tell? 16:52 <+ChillerDragon> i mean i can also pr and u merge if u want 16:52 <+bridge_> yes, we have multiple loops over all clients in the new snapshot function 16:52 <+bridge_> it btw has the same outcome on the server, you set one player to UNSET and all clients switch representation 16:53 <+bridge_> however you need to make sure to SET all times, for it to switch back, which wasn't the case before 16:53 <+ChillerDragon> i would set it here https://github.com/ddnet/ddnet/blob/9f6a695f1383cc7b0bc39e9b4b195b615950c353/src/game/client/gameclient.cpp#L1682 16:53 <+ChillerDragon> and then in the loop with an if statement 16:54 <+bridge_> I wouldn't do that, because you don't necessarily get a ddnet player snap 16:55 <+bridge_> ``` 16:55 <+bridge_> void CGameContext::ConSolo(IConsole::IResult *pResult, void *pUserData) 16:55 <+bridge_> { 16:55 <+bridge_> CGameContext *pSelf = (CGameContext *)pUserData; 16:55 <+bridge_> if(!CheckClientId(pResult->m_ClientId)) 16:55 <+bridge_> return; 16:55 <+bridge_> CCharacter *pChr = pSelf->GetPlayerChar(pResult->m_ClientId); 16:55 <+bridge_> if(pChr) 16:55 <+bridge_> pChr->SetSolo(true); 16:55 <+bridge_> } 16:55 <+bridge_> ``` 16:55 <+bridge_> 16:55 <+bridge_> in theory, how can you use a command without practice (/practice ) 16:56 <+bridge_> But I saw everything 16:57 <+bridge_> remove the practice flag 16:57 <+bridge_> when the command gets added 17:01 <+bridge_> also it wouldn't enforce integrity over all snaps, in theory the server can split up snaps 17:07 <+bridge_> ``` 17:07 <+bridge_> void CGameContext::ConPracticeToggleInvincible(IConsole::IResult *pResult, void *pUserData) 17:07 <+bridge_> { 17:07 <+bridge_> CGameContext *pSelf = (CGameContext *)pUserData; 17:07 <+bridge_> if(pSelf->GetPracticeCharacter(pResult)) 17:07 <+bridge_> ConToggleInvincible(pResult, pUserData); 17:07 <+bridge_> } 17:07 <+bridge_> ``` 17:07 <+bridge_> here's a check on /practice :nouis: 17:11 <+bridge_> it work 17:12 <+bridge_> But now you can't jump. 17:12 <+bridge_> what 17:12 <+bridge_> xD 17:13 <+bridge_> I removed the ```if(pSelf->GetPracticeCharacter(pResult))``` check 17:13 <+bridge_> and it can't jump anymore, maybe it's related to the infinite jump? 17:14 <+bridge_> 😭 17:15 <+bridge_> https://github.com/ddnet/ddnet/blob/9f6a695f1383cc7b0bc39e9b4b195b615950c353/src/game/server/gamecontext.cpp#L4037C63-L4037C79 17:15 <+bridge_> `CMDFLAG_PRACTICE` 17:15 <+bridge_> Invincible 17:15 <+bridge_> 17:15 <+bridge_> https://github.com/ddnet/ddnet/blob/9f6a695f1383cc7b0bc39e9b4b195b615950c353/src/game/server/gamecontext.cpp#L4076 17:16 <+bridge_> ``` 17:16 <+bridge_> Console()->Register("invincible", "?i['0'|'1']", CFGFLAG_SERVER | CMDFLAG_TEST, ConToggleInvincible, this, "Toggles invincible mode"); 17:16 <+bridge_> ``` 17:16 <+bridge_> hmm 17:17 <+bridge_> Also delete `CMDFLAG_TEST' 17:17 <+bridge_> Also delete `CMDFLAG_TEST` 17:17 <+bridge_> I must have copied something wrong. 17:17 <+bridge_> If I'm not mistaken 17:18 <+bridge_> but there are two repetitions of the same command 17:18 <+bridge_> Console()->Register("invincible", "?i['0'|'1']", CFGFLAG_CHAT | CFGFLAG_SERVER, ConPracticeToggleInvincible, this, "Toggles invincible mode"); 17:18 <+bridge_> 17:18 <+bridge_> Console()->Register("invincible", "?i['0'|'1']", CFGFLAG_SERVER | CMDFLAG_TEST, ConToggleInvincible, this, "Toggles invincible mode"); 17:19 <+bridge_> :nouis: 17:24 <+bridge_> this is not my problem in the code, I tested the command on "Tutorial" and there is a 1 jump instead of a 2 jump at the beginning 17:25 <+bridge_> I don't quite understand how to use Tick() 17:34 <+ChillerDragon> @Assa but if u dont get a ddnet player snap it should be unset and not whatever it was before right? thats what this is all about 17:37 <+bridge_> invincible doesnt give inf jump 17:38 <+bridge_> i mean it does but its a practice inf jump, not tied to invincible 17:38 <+bridge_> I've already figured out what the mistake is. 17:40 <+bridge_> ``` 17:40 <+bridge_> void CGameContext::ConToggleInvincible(IConsole::IResult *pResult, void *pUserData) 17:40 <+bridge_> { 17:40 <+bridge_> CGameContext *pSelf = (CGameContext *)pUserData; 17:40 <+bridge_> if(!CheckClientId(pResult->m_ClientId)) 17:40 <+bridge_> return; 17:40 <+bridge_> CCharacter *pChr = pSelf->GetPlayerChar(pResult->m_ClientId); 17:41 <+bridge_> if(pChr) 17:41 <+bridge_> pChr->SetInvincible(pResult->NumArguments() == 0 ? !pChr->Core()->m_Invincible : pResult->GetInteger(0)); 17:41 <+bridge_> 17:41 <+bridge_> } 17:41 <+bridge_> ``` 17:41 <+bridge_> ``` 17:41 <+bridge_> void CGameContext::ConPracticeToggleInvincible(IConsole::IResult *pResult, void *pUserData) 17:41 <+bridge_> { 17:41 <+bridge_> CGameContext *pSelf = (CGameContext *)pUserData; 17:41 <+bridge_> 17:41 <+bridge_> ConToggleInvincible(pResult, pUserData); 17:41 <+bridge_> } 17:41 <+bridge_> ``` 17:41 <+bridge_> which function should I choose? I want to check if the Invincible command is enabled or disabled 17:46 <+bridge_> check? 17:46 <+bridge_> m_Core.m_Invincible to check if player is invincible 17:46 <+bridge_> but command? 17:47 <+bridge_> yes, if a person has "Invincible", then give them a weapon, for example 18:26 <+bridge_> add it to the command 18:26 <+bridge_> pchr->giveweapon or smth 18:26 <+bridge_> ``` 18:26 <+bridge_> void CGameContext::ConPracticeToggleInvincible(IConsole::IResult *pResult, void *pUserData) 18:26 <+bridge_> { 18:26 <+bridge_> CGameContext *pSelf = (CGameContext *)pUserData; 18:26 <+bridge_> ConToggleInvincible(pResult, pUserData); 18:26 <+bridge_> 18:26 <+bridge_> CPlayer *pPlayer = pSelf->m_apPlayers[pResult->m_ClientId]; 18:26 <+bridge_> CCharacter *pChr = pSelf->GetPlayerChar(pResult->m_ClientId); 18:27 <+bridge_> if(!pChr) 18:27 <+bridge_> return; 18:27 <+bridge_> if(!pPlayer) 18:27 <+bridge_> return; 18:27 <+bridge_> pPlayer->m_TeeInfos.m_UseCustomColor = true; 18:27 <+bridge_> if(pChr->Core()->m_Invincible){ 18:27 <+bridge_> pPlayer->m_TeeInfos.m_ColorBody = pResult->GetColor(4000, 0.0f).Pack(false); 18:27 <+bridge_> } 18:27 <+bridge_> else{ 18:27 <+bridge_> pPlayer->m_TeeInfos.m_ColorBody = pResult->GetColor(0, 0.0f).Pack(false); 18:27 <+bridge_> } 18:27 <+bridge_> } 18:27 <+bridge_> ``` 18:27 <+bridge_> it works! 18:28 <+bridge_> although it does not return the previous color to the player. 19:17 <+bridge_> <_qey> Is chat fixed in size on different displays? 19:31 <+bridge_> You can resize chat size in settings 20:32 <+bridge_> was there a regression in dummy prediction? 20:32 <+bridge_> also switch prediction 20:33 <+bridge_> cl_dummy_copy_moves is beyond borked 20:34 <+bridge_> confirmed 19.6 is broken as well 20:35 <+bridge_> we had switch prediction? 20:35 <+bridge_> p sure at one point we did 20:35 <+bridge_> actually maybe I do remember that 20:36 <+bridge_> falling with dummy copy 20:36 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1461806225267097681/image.png?ex=696be4a3&is=696a9323&hm=5af733172a4dd6592c2922431bdf0e012bc0a801ed5840423e726a4e0abd6c9b& 20:36 <+bridge_> on 200 ping 20:36 <+bridge_> I think thats intended behavior 20:36 <+bridge_> no, dummy copy was predicted before 20:36 <+bridge_> Ah, hmm 20:37 <+bridge_> Yeah it should be predicted 20:38 <+bridge_> if you play on the map Machine with 200 ping 20:38 <+bridge_> get ready for a terrible time 20:39 <+bridge_> you have to jump onto doors a whole cycle before they appear XD 20:43 <+bridge_> also collision tune is unpredicted, that's another issue but separate 20:47 <+bridge_> or wait, all tunezones now? 20:47 <+bridge_> wtf is going on 20:47 <+ChillerDragon> @avolicious does the antibot on kog ban? The player called "I'm" was banned mid run for botting thats quite intense no mod admitted doing it 20:47 <+ChillerDragon> `2026-01-16 20:38:01 I chat/server: *** 'I'm' has left the game (You have been banned for 259200 minutes (Botting))` 20:47 <+bridge_> if im in a tunezone prediction is disabled 20:47 <+ChillerDragon> i know this guy since years if he is really botting i would like to know 20:47 <+ChillerDragon> who banned him? 21:46 <+bridge_> > no i havent played since december 21:46 <+bridge_> > thats not me 21:46 <+bridge_> > who tf fakin me 21:46 <+bridge_> > tell chiller to trust his best homie more 21:46 <+bridge_> chillerdragon: 21:46 <+bridge_> :kek: 21:48 <+bridge_> kog mods never hold back, ive also had a run that was 2 or 3 parts from finish and they banned our last guy cuz he sad some bad words in chat 21:48 <+bridge_> (they banned him a minute after he wrote it) 21:48 <+bridge_> kog mods never hold back, ive also had a run that was 2 or 3 parts from finish and they banned our last guy cuz he said some bad words in chat 21:49 <+bridge_> even after spamming the chat for 2 minutes no mod admitted to it either 21:56 <+bridge_> they wont tell someone i know from canada why they're banned even tho it was vpn and he doesn't use one 21:56 <+bridge_> just "we cannot tell u why you are banned" 21:56 <+bridge_> so helpful 22:07 <+ChillerDragon> @swarfey oh interesting. I should have known instantly because he was not annoying af fuck. He didnt block me or spammed me in chat. I just never thought of anyone faking him xd 22:48 <+bridge_> @chillerdragon I also call the hookline a stupid horrible horre dous hack and it was Spaghetti code and I hate it - yet I am still supporting it and write fixes. 22:48 <+bridge_> 22:48 <+bridge_> Same for the representation change, did you miss that I updated the PR for mod support and wrote another one for the new message? 22:50 <+ChillerDragon> i didnt miss it thats good thanks 22:51 <+ChillerDragon> its just that two maintainers hinted that they might have a problem with a totally standard and essential thing mods do 22:51 <+ChillerDragon> which is big panic for me 22:51 <+ChillerDragon> next we have a heinrich pr which removes the timescore flag 22:55 <+bridge_> ?! This is just pointless shooting against Heinrich 22:57 <+bridge_> I think you have a strong case here and we can merge the current version, which allows for the dynamic change 22:59 <+bridge_> No this is a legimate fear after the reset file incident 22:59 <+bridge_> If he thinks that it’s not a normal thing to do he could remove it just to cleanup ddnet 23:45 <+bridge_> "af fuck" is gramatically wrong, you either write "af" or "as fuck" not both man learn the slang old man (ily) 23:49 <+bridge_> hi, how does SetSuper() mark ERaceState::CHEATED?