00:11 <+bridge_> so this can turn off solid ground? 00:11 <+bridge_> so this can turn off solid ground blocks? 00:12 <+bridge_> Yes 00:13 <+bridge_> nice 00:13 <+bridge_> why does it need to be a macro with line number in name 00:14 <+bridge_> cant it just be normal class constructor 00:15 <+bridge_> Yes it can, but I thought it was simpler than copying the same line everytime. The line number is to avoid warnings that would otherwise happen in laser.cpp, for recurring naming 00:16 <+bridge_> i would avoid macros and just use curly braces where needed 00:16 <+bridge_> I tried but the warning didn't seem to disappear 00:16 <+bridge_> ``` 00:16 <+bridge_> { 00:16 <+bridge_> ScopedSmth scope{a, b}; 00:16 <+bridge_> 00:16 <+bridge_> }``` 00:16 <+bridge_> weird 00:17 <+bridge_> Anyways this is just some kind of draft, I don't see this feature as worth it enough even though I was amazed when I saw a mod that also had visuals for this kind of stuff 00:18 <+bridge_> @kebscs if you want you can create a working feature with client support, but this is really nasty code to work with in the depths of this game 00:19 <+bridge_> i dont feel like new making prs with how the project is maintained 00:19 <+bridge_> but im compiling to check out your pr 00:20 <+bridge_> nothing changed? still slow? 00:21 <+bridge_> not just slow to merge, but i wouldnt want to go in detail 00:22 <+bridge_> ok, use client and server together 00:22 <+bridge_> the pr works, im surprised how little changes it took 🙂 00:23 <+bridge_> took thinking rather and taking care 00:23 <+bridge_> ofc no indicators, both game in editor but physics are fine 00:23 <+bridge_> tested teams? 00:24 <+bridge_> yea 00:24 <+bridge_> i was too, but by using these workarounds it reduced heavily 00:25 <+bridge_> you can hook tile, deactivate it and it stays hooked to it 00:25 <+bridge_> Yep, I was too lazy to fix this for now xd 00:26 <+bridge_> I focused on the core functionality because I knew all the places they connect to 00:28 <+bridge_> I think I will fix this, it's easy as the hookpos is saved and can be checked against the tile it is attached to 00:29 <+bridge_> In 2019 I tried to create fake prediction for backwards compatibility, but it is not good at all 00:31 <+bridge_> 2019 :kek: 00:31 <+bridge_> it did replace all `COL_SCOPED_TEAM_CONTEXT` to `CCollision::CTeamContext ScopedTeamContext` and it compiled no warnings 00:33 <+bridge_> Some compilers do 00:33 <+bridge_> what was the warning 00:33 <+bridge_> Using the same variable name again 00:34 <+bridge_> I think if some code like this ever gets merged it should stay a macro. That way it's clear it does some magic things and you have to be careful with it 00:34 <+bridge_> i dont like macros :p 00:34 <+bridge_> and i think theyre overused a bit in ddnet 00:35 <+bridge_> it keeps code flexible 00:36 <+bridge_> ddnet has to use them a lot, for debug or portability checks 00:37 <+bridge_> for compile time for different os ofc 00:37 <+bridge_> but stuff like MACRO_TUNING_PARAM 00:38 <+bridge_> where it has to be undefined to not break in multiple places 00:38 <+bridge_> xd 00:51 <+bridge_> @kebscs I'm thinking of sending you a repo of mine just to annoy you with macros 00:52 <+bridge_> :tear: 01:24 <+bridge_> Could a mod actually ban that range? 01:25 <+bridge_> Does vanilla ddnet have range bans? 01:25 <+bridge_> i havent tried... i dont see any reason why not 01:25 <+bridge_> yes 01:26 <+bridge_> ez dos 01:26 <+bridge_> Can't even join to unban it xd 01:27 <+bridge_> we can ban without joining 01:27 <+bridge_> infact i want to ban from the game because it means less steps for my scripts to break at 01:27 <+bridge_> i guess the banning bit is not the bit it breaks at 01:28 <+bridge_> I actually dont understand how bans get stored? How are they shared between servers? 01:28 <+bridge_> i dont think they are shared 01:28 <+bridge_> i dont think they are "shared" 01:28 <+bridge_> What? 01:28 <+bridge_> okay so on qxdfox, if you ban someone locally it gets pushed to all other servers by magic 01:28 <+bridge_> on ddnet a server will get all bans via econ on start 01:28 <+bridge_> then on a new ban (or any other command for that matter) will ghet rconed the new ban 01:29 <+bridge_> Interesting 01:29 <+bridge_> i would rather all bans are global and itacts like qxdfoxes 01:29 <+bridge_> I assume they have a db or api 01:29 <+bridge_> idk if this is leaking? 01:29 <+bridge_> err 01:30 <+bridge_> lol 01:30 <+bridge_> better safe than getting told of by melon 04:21 <+bridge_> Is there any server-side way to render only the nameplate? Without the tee? I remember having seen something like this at some server 04:48 <+bridge_> they just used an invisible skin 05:10 <+bridge_> 🤔 Invisible skin? 06:24 <+bridge_> a transparent skin 06:24 <+bridge_> i don't know what's confusing 07:47 <+bridge_> What function can I use to get information about a player ? For example, their client version and name. 07:56 <+bridge_> @bobik8912: Server()->ClientName(ClientId); 07:57 <+bridge_> Client version I do not know without looking it up .\_. 07:57 <+bridge_> :nouis: 07:57 <+bridge_> Should be in the CServer::ConStatus method search for that string in your code 07:58 <+bridge_> Have you tried searching for ddnetversion or ddnet\_version? 07:59 <+bridge_> no, I'll upload the project right now, I just don't know which function defines the client information 07:59 <+bridge_> You know how to search code already right? 07:59 <+bridge_> yoo chillerdragob 08:00 <+bridge_> did you sleep already 08:00 <+bridge_> Yes, I know 08:00 <+bridge_> Yo 08:01 <+bridge_> So when you search for clientversion or ddnetversion or ddnet\_version case insensitive what do you get? @bobik8912 08:01 <+bridge_> @teero777: it’s 8 am ofc I have proper sleep schedule. I will be soon clocking into my Teeworlds dev job 08:02 <+bridge_> Like, what do I want to do with ddnet_version? 08:02 <+bridge_> daydreams 08:02 <+bridge_> @bobik8912: which editor do you use? 08:02 <+bridge_> Put it in your search 08:02 <+bridge_> Which servers for text in all files 08:03 <+bridge_> Visual Studio \ Visual Studio code 08:03 <+bridge_> Which searches for text in all files 08:03 <+bridge_> ctrl+shift+f to search in vscode 08:03 <+bridge_> Put the ddnet version there and send a screenshot of what it shows 08:05 <+bridge_> why are you such a nice person chiller ☺️ 08:05 <+bridge_> I am not 08:05 <+bridge_> Did you sleep already @teero777 ? 08:06 <+bridge_> Sorry I didn’t follow u yesterday I was gaming this sic ckis map 08:06 <+bridge_> it’s 8 am ofc I have proper sleep schedule. I will be soon clocking into my Teeworlds dev job 08:06 <+bridge_> Troller 08:06 <+bridge_> I want to display the chat version of a person.:brownbear: 08:06 <+bridge_> Yes @bobik8912 08:06 <+bridge_> Did you do what I asked you to? 08:06 <+bridge_> we were testing some new mods on kog with avo and some people, was pretty fun 08:07 <+bridge_> Search in the code for the version. If you don’t find it send me a screenshot of your search attempt 08:07 <+bridge_> ok 08:08 <+bridge_> why are you teaching someone how to do basic computer things? you said you weren't nice chiller 08:08 <+bridge_> If he knows how to look things up be can be more efficient 08:09 <+bridge_> Also I didn’t know and I was stalling to look it up on the phone 08:09 <+bridge_> But I found it now I’m 10x ios developer 08:09 <+bridge_> @bobik8912: Ur slower on pc than me on phone :p pPlayer->GetClientVersion() 08:10 <+bridge_> If he knows how to look things up he can be more efficient 08:10 <+bridge_> I wanted to find a command in rcon that shows information about the client 08:10 <+bridge_> status 08:10 <+bridge_> Is that command 08:20 <+bridge_> can you port ddnet to ios 08:27 <+bridge_> how to display something in the chat? pSelf->SendChat(); 08:38 <+bridge_> ``` 08:38 <+bridge_> void CGameContext::ConInfoPlayer(IConsole::IResult *pResult, void *pUserData){ 08:38 <+bridge_> CGameContext *pSelf = (CGameContext *)pUserData; 08:38 <+bridge_> int ClientID = pResult->m_ClientId; 08:38 <+bridge_> CPlayer *pPlayer = pSelf->m_apPlayers[ClientID]; 08:38 <+bridge_> int verclient = pPlayer->GetClientVersion(); 08:38 <+bridge_> 08:38 <+bridge_> if(!CheckClientId(pResult->m_ClientId)) 08:38 <+bridge_> return; 08:38 <+bridge_> if(!CheckClientId(ClientID)) 08:38 <+bridge_> return; 08:38 <+bridge_> if(!pPlayer) 08:38 <+bridge_> return; 08:39 <+bridge_> 08:39 <+bridge_> char aBuf[256]; 08:39 <+bridge_> str_format(aBuf, sizeof(aBuf), "Информацию о клиенте : %s", verclient); 08:39 <+bridge_> 08:39 <+bridge_> pSelf->SendChat(-1, TEAM_ALL, pResult->GetString(0)); 08:39 <+bridge_> 08:39 <+bridge_> } 08:39 <+bridge_> ``` 08:40 <+bridge_> Oh chet, I'm blunt 08:43 <+bridge_> It doesn’t make much sense to check the pPlayer pointer to be valid after you already used it 08:43 <+bridge_> Also you probably want to pass aBuf instead of GetString to send chat 08:48 <+bridge_> yes 08:55 <+bridge_> ``` 08:55 <+bridge_> void CGameContext::ConInfoPlayer(IConsole::IResult *pResult, void *pUserData){ 08:55 <+bridge_> CGameContext *pSelf = (CGameContext *)pUserData; 08:55 <+bridge_> int ClientID = pResult->m_ClientId; 08:55 <+bridge_> CPlayer *pPlayer = pSelf->m_apPlayers[ClientID]; 08:55 <+bridge_> 08:55 <+bridge_> int verclient = pPlayer->GetClientVersion(); 08:55 <+bridge_> int Victim = pResult->GetVictim(); 08:55 <+bridge_> std::string NameClient = pSelf->Server()->ClientName(Victim); 08:55 <+bridge_> 08:55 <+bridge_> if(!CheckClientId(pResult->m_ClientId)) 08:55 <+bridge_> return; 08:55 <+bridge_> if(!CheckClientId(ClientID)) 08:55 <+bridge_> return; 08:55 <+bridge_> 08:55 <+bridge_> char aBuf[256]; 08:55 <+bridge_> str_format(aBuf, sizeof(aBuf), "Информацию о клиенте : %s", verclient, NameClient); 08:55 <+bridge_> 08:55 <+bridge_> pSelf->SendChat(-1, TEAM_ALL, aBuf); 08:55 <+bridge_> 08:55 <+bridge_> } 08:55 <+bridge_> ``` 10:23 <+ChillerDragon> its not a `std::string` it is a `const char *` 10:23 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462376960431755408/How-to-kidnapping-a-gamer-in-2026--1768728218703.jpg?ex=696df82d&is=696ca6ad&hm=495c290b57663b1d758b7704cdbfcf65509a57a50d9e9e4ca67cc8901601ab11& 10:24 <+ChillerDragon> your guard cases are still too low 10:24 <+ChillerDragon> also your guard is duplicated 10:24 <+ChillerDragon> there is no difference between `if(!CheckClientId(pResult->m_ClientId))` and `if(!CheckClientId(ClientID))` 10:25 <+ChillerDragon> and this check will never return false anyways because you crash before that 10:25 <+ChillerDragon> if you run that command from econ it will give you -1 for the ClientId and then either this line `CPlayer *pPlayer = pSelf->m_apPlayers[ClientID];` crashes or this 10:25 <+ChillerDragon> `int verclient = pPlayer->GetClientVersion();` 10:26 <+ChillerDragon> i assume you want to provide a client id to the command and get that clients version 10:26 <+ChillerDragon> but actually what you currently do is print the version of the admin that ran the command 10:27 <+ChillerDragon> `pResult->GetVictim()` is your argument `pResult->m_ClientId` is the person that executed the command and NOT the provided argument 10:31 <+ChillerDragon> place `#include 10:31 <+ChillerDragon> aiuhwdawd 10:31 <+ChillerDragon> irc paste 10:31 <+ChillerDragon> @heinrich5991 can u unmute irc pls 10:32 <+ChillerDragon> @bobik8912 place this at the top of your file `#include 10:32 <+ChillerDragon> adwiuhawdAWDUIH 10:32 <+ChillerDragon> WEECHAT IS SO BAD 10:32 <+ChillerDragon> and then do something like this https://paste.zillyhuhn.com/Rl 10:32 <+ChillerDragon> it sends the message to public chat for everyone visible is that what you wanted? 10:32 <+bridge_> ``` 10:32 <+bridge_> str_format(aBuf, sizeof(aBuf), "Информация о %s : %dv. ", verclient, NameClient.c_str()); 10:32 <+bridge_> ``` 10:33 <+ChillerDragon> yes c_str() works too 10:33 <+ChillerDragon> you know the `status` rcon command? 10:33 <+ChillerDragon> doesnt that do what you want already? 10:34 <+bridge_> wheres that 10:35 <+bridge_> wher 10:36 <+bridge_> looks like usa 10:36 <+bridge_> and I did that with the help of AI :kek: 10:36 <+bridge_> looks like not eu 10:36 <+bridge_> looks like not eu since i dont see eu plate 10:38 <+bridge_> I didn't understand it, so I decided to look for it in other teams, and it worked out somehow. 10:39 <+bridge_> yes, it's in Rcon, but I needed it in the chat 10:40 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462381200843870375/RACE_2026-01-18.mp4?ex=696dfc20&is=696caaa0&hm=030a4c74edd58e7123b4e217441ee669176214541c06ce7a611db0af7c7c613f& 10:44 <+ChillerDragon> @bobik8912 visible to everyone? 10:45 <+ChillerDragon> then the code i sent you could work 10:45 <+bridge_> Yes 10:45 <+ChillerDragon> ok nice 10:45 <+ChillerDragon> did you try my code? 10:47 <+ChillerDragon> :q 10:47 <+ChillerDragon> xd 10:48 <+bridge_> ``` 10:48 <+bridge_> void CGameContext::ConInfoPlayer(IConsole::IResult *pResult, void *pUserData){ 10:48 <+bridge_> CGameContext *pSelf = (CGameContext *)pUserData; 10:48 <+bridge_> int ClientID = pResult->m_ClientId; 10:48 <+bridge_> CPlayer *pPlayer = pSelf->m_apPlayers[ClientID]; 10:48 <+bridge_> 10:48 <+bridge_> int verclient = pPlayer->GetClientVersion(); 10:48 <+bridge_> int Victim = pResult->GetVictim(); 10:48 <+bridge_> std::string NameClient = pSelf->Server()->ClientName(Victim); 10:48 <+bridge_> 10:48 <+bridge_> if(!CheckClientId(pResult->m_ClientId)) 10:48 <+bridge_> return; 10:48 <+bridge_> if(!CheckClientId(ClientID)) 10:48 <+bridge_> return; 10:48 <+bridge_> 10:48 <+bridge_> char aBuf[256]; 10:48 <+bridge_> str_format(aBuf, sizeof(aBuf), "Информация о %s : %dv. ", verclient, NameClient.c_str()); 10:48 <+bridge_> 10:48 <+bridge_> pSelf->SendChat(-1, TEAM_ALL, aBuf); 10:48 <+bridge_> 10:48 <+bridge_> } 10:48 <+bridge_> ``` 10:48 <+bridge_> 10:48 <+bridge_> is it possible not to write? : 10:48 <+bridge_> ``` 10:48 <+bridge_> if(!CheckClientId(pResult->m_ClientId)) 10:48 <+bridge_> return; 10:48 <+bridge_> if(!CheckClientId(ClientID)) 10:48 <+bridge_> return; 10:49 <+bridge_> ``` 10:49 <+bridge_> I need to check the ID, but my server has shut down 10:59 <+ChillerDragon> u dont need to check the id if you dont use it 11:00 <+ChillerDragon> otherwise this command wont work from fifo or econ 11:00 <+ChillerDragon> you still sent your old code 11:00 <+ChillerDragon> have you tried the one i sent you? 11:11 <+bridge_> I figured it out, but there's another problem: it displays "Information about (invalid): 19060 v." 11:19 <+ChillerDragon> are you still using your own code? 11:19 <+ChillerDragon> dont pass the wrong client id to ClientName() and youll be fine 11:20 <+ChillerDragon> does someone know what this bs is? 11:20 <+ChillerDragon> https://zillyhuhn.com/cs/.e526d2d7-a286-4605-b2b5-9bc24d8d8d61.png 11:20 <+ChillerDragon> ./luluman.so: undefined symbol: lua_tointeger 11:20 <+ChillerDragon> i am expecting to find some lua_toiteger symbol in my liblua.a 11:20 <+ChillerDragon> seemingly there is only a lua_tointegerx and a luaV_tointeger 11:20 <+ChillerDragon> wtf is that "x" at the end of my symbol??? 11:23 <+ChillerDragon> i see lua 5.5 does this `#define lua_tointeger(L,i)lua_tointegerx(L,(i),NULL) 11:24 <+ChillerDragon> i wonder why i dont have the define then :thinking: 11:24 <+ChillerDragon> ah got it i forced the 5.1 header during compliation gg 11:28 <+bridge_> YAY LUA 11:50 <+bridge_> Using quiet dev chat as a rubber duck like a boss 12:02 <+ChillerDragon> yea gorp im currently trying to get a feel for the lua eco system :D 12:03 <+ChillerDragon> last time i managed to speedrun building actual tw protocol speaking code in 2 days taking all shortcuts i can 12:03 <+ChillerDragon> and now i spent the last 2 days only bullshiting not writing a single line of code only trying to understand how to install lua :D 12:04 <+ChillerDragon> trying to solve the "works on my machine" issue 12:04 <+bridge_> ``` 12:04 <+bridge_> if(m_Rainbow) 12:04 <+bridge_> { 12:04 <+bridge_> m_ShinyColor = (m_ShinyColor + 8) % (255 * 6); 12:04 <+bridge_> 12:04 <+bridge_> int mcolor = 0; 12:04 <+bridge_> int Phase = m_ShinyColor / 255; 12:04 <+bridge_> 12:04 <+bridge_> switch(Phase) 12:04 <+bridge_> { 12:04 <+bridge_> case 0: mcolor = 65280; break; 12:04 <+bridge_> case 1: mcolor = 5504768; break; 12:04 <+bridge_> case 2: mcolor = 11206400; break; 12:04 <+bridge_> } 12:04 <+bridge_> 12:05 <+bridge_> m_TeeInfos.m_UseCustomColor = true; 12:05 <+bridge_> m_TeeInfos.m_ColorBody = mcolor; 12:05 <+bridge_> } 12:05 <+bridge_> ``` 12:05 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462402302336827464/dwq.mp4?ex=696e0fc6&is=696cbe46&hm=917ea1156fc91fe5f946151e2788772a4d4bfe6bf7c6375ddf8bd34a627917e9& 12:05 <+bridge_> how to remove it so that the player is not gray 12:05 <+ChillerDragon> compiling lua from source is quiet pleasent given that it is a programming language. Compiling python and ruby is okay too but takes much longer. 12:06 <+ChillerDragon> @bobik8912 sorry i do not support reinventing the wheel :p if you want to learn something figure it out your self. If you just want rainbow to work use a working rainbow that already exists 12:06 <+bridge_> F-ddrace? 12:09 <+bridge_> we love lua 12:10 <+bridge_> @l._ouis if we do the 45° bind thing, I'd also like to see it as a spectator for example. This is yet another reason for the input extension 12:21 <+ChillerDragon> @bobik8912 yes for example 12:21 <+ChillerDragon> @bobik8912 or ddnet-insta or DDNet++ to plug my own projects hehe 12:51 <+bridge_> <*>Maciek<*> yo Chillerino, did you by any chance change my mod pass on chillerfng or did i got demoted to player 12:54 <+bridge_> Github L 12:54 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462414780517187679/Unbenannt.png?ex=696e1b66&is=696cc9e6&hm=02af5b8219164ce7e859e5bb27fbba2d26be754c4820a9dadf27ea17718164cb& 13:27 <+bridge_> I might be dumb. Could you elaborate? An empty skin field or 'invisible' will both render a player 13:27 <+bridge_> I might be dumb. Could you elaborate? An empty skin field or 'invisible' will both render a player as they are not valid skin 13:37 <+bridge_> <_qey> What is it that once in a while everyone’s ping goes up 10-20 ms? 13:37 <+bridge_> <_qey> Like a 1-tick lag. 13:48 <+bridge_> @happymaciek: idk who u are 13:48 <+bridge_> maciek a 13:48 <+bridge_> No still old pw 13:49 <+bridge_> Username is maciek and pw starts with B 13:49 <+bridge_> Maciek is a race pro, he is well known at unique 13:50 <+bridge_> The happy confused me 13:53 <+bridge_> can you tell me how the iteration over the snap objects works chillerdragon? 13:53 <+bridge_> does it iterate over all snap objects, or just the current delta? 13:58 <+bridge_> `CGameClient::OnNewSnapshot` iterates over all snap objects in the current snapshot 13:58 <+bridge_> okay this is very important, I thought it was just iterating over the newly fetched objects 14:03 <+bridge_> there even is a comment ` // go through all the items in the snapshot and gather the info we want` 14:03 <+bridge_> 14:03 <+bridge_> 🙈 14:13 <+bridge_> @robyt3 is there any good way to know, if #11483 is actually working for multiple maps? Even if the PR is working for a single map without issues, this doesn't mean it must work with multiple (which I know you plan as a followup) 14:13 <+bridge_> https://github.com/ddnet/ddnet/pull/11483 14:27 <+bridge_> if multiple maps is not supported yet does it matter? 14:27 <+bridge_> i see its moving everything to map object instead of using global editor so should be fine for both 14:28 <+bridge_> I am just careful - in theory it does not 14:28 <+bridge_> I found an issue with this PR anyway 14:30 <+bridge_> and now with 19.7 on the horizon is a good time to merge big PRs anyway, because we have a longer grace period in nightly 🙂 15:18 <+bridge_> Not really, you can hack it together relatively quickly just by changing `m_Map` to an array and adding a few buttons 15:29 <+ChillerDragon> @milkeeycat how do you rate my conventional commit msg? `refactor: replace hack with workaround` 15:29 <+ChillerDragon> branding is everything 15:29 <+bridge_> xd 15:35 <+bridge_> does the commit only change a code comment? :p 15:35 <+bridge_> you can see the action in spectate when their cursor snaps though 15:36 <+bridge_> Im not sure if showing the ghost cursor in spectator is really necessary, at least I wouldnt want to see it, since im not the one lining up the shot 15:41 <+bridge_> im issue farmer 16:07 <+bridge_> @patiga: -.- no 16:13 <+bridge_> is there any way to reset the saved serverlist pings within client 16:23 <+bridge_> Delete `ddnet-cache.sqlite3` in the config dir 16:43 <+bridge_> Robyt btw I am pretty sure I tested this on latest nightly - however I probably didn't run into the bug there, because I only added a single color envelope and you need to add multiple 😄 17:41 <+bridge_> chiller hi, where is the code for working with a database (SQL) in DDNet? I want to learn something new about it. 17:41 <+bridge_> casino in DDNet 🤑 18:01 <+bridge_> w 18:02 <+bridge_> Does DDNet have any rules for public servers in the master server? 18:02 <+bridge_> https://ddnet.org/rules/master/ 18:09 <+bridge_> Assa, you know how to use Tick()? I just don't know how to make a delay 18:10 <+bridge_> a friend told me **if(Server()->Tick() - m_SpawnTime < 25.0f)** 18:36 <+bridge_> @essigautomat help 18:43 <+bridge_> if Tick > Now + TickSpeed * NumSeconds 18:44 <+bridge_> TickSpeed is 30ms ? 18:44 <+bridge_> if you have Server()->Tick(), you should have Server()->TickSpeed() 18:44 <+bridge_> let's say the action should last for 20 seconds 18:45 <+bridge_> then tickspeed * 20 18:47 <+bridge_> if (Server()->Tick() - Server()->TickSpeed() < 20.0f) 18:48 <+bridge_> . 18:48 <+bridge_> if (Server()->Tick() + Server()->TickSpeed() < 20.0f) 18:49 <+bridge_> 18:49 <+bridge_> check this 18:49 <+bridge_> it adds 1s delay 18:51 <+bridge_> if (Server()->Tick() > Server()->TickSpeed() * 20.0f) 18:51 <+bridge_> I'm too dumb for that. 18:52 <+bridge_> . 18:58 <+bridge_> basically Tick is current time that is increasing. TickSpeed is how many ticks there are in 1 second. So if you add something to Now you basically say it will happen in some time from now. 18:58 <+bridge_> basically save monday as Now. and you compare: has current time passed monday + 2 days? 18:59 <+bridge_> basically save current day, saturday as Now. and you compare: has current time passed saturday + 2 days? 19:00 <+bridge_> well I don't understand, my friend showed me like this: 19:00 <+bridge_> ``` 19:01 <+bridge_> if(Server()->Tick() - m_SpawnTime < 25.0f) 19:01 <+bridge_> ``` 19:01 <+bridge_> and you showed me like this: 19:01 <+bridge_> ``` 19:01 <+bridge_> if Tick > Now + TickSpeed * NumSeconds 19:01 <+bridge_> ``` 19:01 <+bridge_> what is Now? 19:01 <+bridge_> I don't know much about DDNet functions :cammo: 19:03 <+bridge_> they do the same 19:04 <+bridge_> m_SpawnTime is probably just Server()->Tick() + TickSpeed * NumSeconds 19:04 <+bridge_> Now is the saved time, so you remember when you want to execute something 19:05 <+bridge_> well, let's say m_SpawnTime = 10; what should happen then? I just don't understand anything 19:07 <+bridge_> so in your example its, 18/01/2026 - 10 < 25 19:07 <+bridge_> ``` 19:07 <+bridge_> if (Server()->Tick() > Now + Server()->TickSpeed() * 20.0f) 19:07 <+bridge_> ``` 19:07 <+bridge_> Is it already built-in, or do I need to create it myself? 19:08 <+bridge_> Is "Now" already built-in, or do I need to create it myself? 19:09 <+bridge_> . 19:09 <+bridge_> float Now = Server()->Tick(); 19:09 <+bridge_> if (Server()->Tick() > Now + Server()->TickSpeed() * 20.0f) 19:09 <+bridge_> look up the PR ive sent 19:09 <+bridge_> <0xdeen> @gummibaer12345 Thanks! ^ 19:09 <+bridge_> yes but you need to save Now somewhere else 19:10 <+bridge_> or it will place Tick into it every time and do nothing 19:10 <+bridge_> you're checking `Server()->Tick() > Server()->Tick` 19:10 <+bridge_> (what kebs said, i'm slow) 19:10 <+bridge_> you're checking `Server()->Tick() > Server()->Tick + X * Y` -> it can never be true 19:12 <+bridge_> The two of you have me confused 19:13 <+bridge_> your too fast with thanking, as always^^ 19:13 <+bridge_> maybe there are some examples, it would make it much easier for me 19:14 <+bridge_> всем сап 19:14 <+bridge_> ive sent a link, look previous messages 19:14 <+bridge_> ты кажись топиком ошибся 19:15 <+bridge_> если я удалю дднет и заного скачаю то аккаунт схранится? 19:15 <+bridge_> всм 19:15 <+bridge_> пожалуйста, по возможности используйте английский язык или перейдите в раздел #off-topic 19:15 <+bridge_> please use english whenever possible, or go to #off-topic 19:15 <+bridge_> не ошибся 19:15 <+bridge_> I am Russian 19:15 <+bridge_> DDNet has no accounts - you can just take your name again after reinstalling, yes 19:16 <+bridge_> ``` 19:16 <+bridge_> 19:16 <+bridge_> if(Client()->State() != IClient::STATE_DEMOPLAYBACK) 19:16 <+bridge_> { 19:16 <+bridge_> if(m_pClient->m_Snap.m_pLocalCharacter) 19:16 <+bridge_> m_LastAliveTick = m_pClient->m_Snap.m_pLocalCharacter->m_Tick; 19:16 <+bridge_> } 19:16 <+bridge_> ``` 19:17 <+bridge_> В DDNet нету системы аккаунтов ты можношь с любого устройства зайти и поставить ник то данные у тебя сохраняться 19:17 <+bridge_> Thanks a lot 19:17 <+bridge_> спасибо) 19:18 <+bridge_> this saves the current tick, which you can reference later on 19:19 <+bridge_> now you could do something like 19:19 <+bridge_> ``` 19:19 <+bridge_> if(Server()->Tick() - m_LastAliveTick > Tick()->TickSpeed() * 300.0f) 19:19 <+bridge_> ``` 19:19 <+bridge_> to check if its been 300 seconds since that tick was saved 19:20 <+bridge_> now you could do something like 19:20 <+bridge_> ``` 19:20 <+bridge_> if(Server()->Tick() - m_LastAliveTick > Server()->TickSpeed() * 300.0f) 19:20 <+bridge_> ``` 19:20 <+bridge_> to check if its been 300 seconds since that tick was saved 19:25 <+bridge_> привет мелон 19:25 <+bridge_> почему то я удалил и скачал дднет и у меня ничего не сохранилось 19:25 <+bridge_> все друзья не созранились:( 19:26 <+bridge_> use english 19:26 <+bridge_> did you remove `%appdata%/DDNet` ? 19:26 <+bridge_> friends are saved in your config 19:27 <+bridge_> Where is the configuration? 19:27 <+bridge_> у тебя иммено клиент стим был или cactus tater 19:27 <+bridge_> in appdata/ddnet 19:27 <+bridge_> tater 19:27 <+bridge_> as melon said 19:28 <+bridge_> ты удалил татер и в нем были текстуры? 19:28 <+bridge_> у меня был оригинальный а я скачал татер 19:28 <+bridge_> а зачем ты тот удаляешь ? 19:28 <+bridge_> you have to delete the game, not the folder in appdata 19:29 <+bridge_> can we respect what i said 3 minutes ago please 19:29 <+bridge_> я хотел себе текстуры так как на телефоне они есть но у меня ошибка 19:29 <+bridge_> Так ты на телефоне? 19:29 <+bridge_> guys use english watafak 19:29 <+bridge_> $england 19:29 <+bridge_> $english 19:29 <+bridge_> Hi! Most of us communicate in English. If you’re having trouble with English, use to help you out. 19:30 <+bridge_> да 19:30 <+bridge_> @leaxfupxd @bobik8912 could i ask you two to do this in #questions or #general please? - this is non-development related and writing Russian makes it impossible for most of us to read. 19:30 <+bridge_> yes please 😡 19:30 <+bridge_> if you want to continue in russian, #off-topic is the preferred option 19:33 <+bridge_> я посмотрел в проводнике и там небыло друзей из дднета 19:37 <+bridge_> ``` 19:37 <+bridge_> if(m_Rainbow) 19:37 <+bridge_> { 19:37 <+bridge_> if(Server()->Tick() - m_LastRainbow > Server()->TickSpeed() * 0.3f) 19:37 <+bridge_> { 19:37 <+bridge_> m_LastRainbow = Server()->Tick(); 19:37 <+bridge_> m_ShinyColor = (m_ShinyColor + 1) % 6; 19:37 <+bridge_> } 19:37 <+bridge_> 19:37 <+bridge_> int mcolor = 0; 19:37 <+bridge_> switch(m_ShinyColor) 19:37 <+bridge_> { 19:37 <+bridge_> case 0: mcolor = 65280; break; 19:37 <+bridge_> case 1: mcolor = 5701376; break; 19:37 <+bridge_> case 2: mcolor = 10944256; break; 19:37 <+bridge_> 19:37 <+bridge_> } 19:37 <+bridge_> 19:37 <+bridge_> m_TeeInfos.m_UseCustomColor = true; 19:37 <+bridge_> m_TeeInfos.m_ColorBody = mcolor; 19:37 <+bridge_> } 19:37 <+bridge_> ``` 19:38 <+bridge_> you're missing cases 19:38 <+bridge_> but that looks okayish? 19:39 <+bridge_> ``` 19:39 <+bridge_> CPlayer::CPlayer(...) 19:39 <+bridge_> { 19:39 <+bridge_> m_LastRainbow = Server()->Tick(); 19:39 <+bridge_> } 19:39 <+bridge_> ``` 19:39 <+bridge_> I'm going to record a video right now 19:41 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462517215042605360/Tutorial_2026-01-2.mp4?ex=696e7acc&is=696d294c&hm=31c71693fb78d88c9a64fc959ac505d6f253503be698c72f945791c1d48848f5& 19:41 <+bridge_> well, everything is fine, but I don't know where to store mcolor or how to properly sort it 19:42 <+bridge_> Can I use an array and iterate through the index? 19:50 <+bridge_> Yes you can 21:28 <+bridge_> was there ever a reason why ddnet gods dont want to distinguish dummies from real people? 21:30 <+bridge_> They don't like it ¯⁠\⁠_⁠(⁠ツ⁠)⁠_⁠/⁠¯ 21:30 <+bridge_> They don't like it ¯⁠\⁠\_⁠(⁠ツ⁠)⁠_⁠/⁠¯ 21:32 <+bridge_> Can we merge #11641 since it's leading to skips that shouldn't be possible 21:32 <+bridge_> https://github.com/ddnet/ddnet/pull/11641 21:36 <+bridge_> Woah, Is the weapon rotation server side? :poggers2: 21:38 <+bridge_> yea i added it to ddnet like half a year ago 21:38 <+bridge_> you can try rotate weapons or pickups in editor 21:38 <+bridge_> wtf didnt know it was a thing 21:40 <+bridge_> im not sure if any map properly used it so far 21:50 <+bridge_> I wish we could angle them 21:54 <+bridge_> for what 21:54 <+bridge_> if pick up hitbox is that same 21:58 <+bridge_> visibility ig 22:29 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462559660358766672/1.jpg?ex=696ea254&is=696d50d4&hm=98143229346ffe503b9bf5b1e7f734fa75aa3841d7e23dd911d0720577589ac6& 22:29 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462559660639911959/2.jpg?ex=696ea254&is=696d50d4&hm=b4b4ccaf9728817471395cc3bfbf33c89f61269e0bb7429add36119e5f4cd629& 22:29 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462559660933648506/3.jpg?ex=696ea254&is=696d50d4&hm=1457405452579be70698e4d89a84d609e80687d15aab72c812d121f783c5539a& 22:29 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462559661214400605/4.jpg?ex=696ea254&is=696d50d4&hm=a9afbd1eb6ad60c5cdb6d8df5b448bc4cb1d38ad2dc62fe6bfe2fef894c488d7& 22:32 <+bridge_> server side shinigammis 22:33 <+bridge_> turret 22:34 <+bridge_> Mine's just this for now, I'll try and rotate them to the player when I have time 22:34 <+bridge_> https://cdn.discordapp.com/attachments/293493549758939136/1462560694355628063/image.png?ex=696ea34a&is=696d51ca&hm=4506cbb171739f26baab2a471b733f23a8b17b00d0b1ee6320b5d0b347c38271&