hide_auth_status ?i[hide]
to hide auth status to other players. The auth status is still shown for authed players. It can be used like this: rcon_auth 1;rcon "hide_auth_status 1"
to log in "silently"
A player could still find out if someone is authed or not by trying to kick them which would yield the error You can't kick authorized players
. Not sure if that's a problem though.
Closes #9492
This server uses an experimental translation from Teeworlds 0.7 to 0.6. Please report bugs on ddnet.org/discord
broadcast for 0.7 clients. The translation layer has been in use for years now and should be considered stable.
Closes #9611
~/.local/share/ddnet/maps/
/map
. That command requires you to also have the map in your database. Use change_map test
in rcon instead.m_IsInFreeze
from that PR. Closes #9578
https://github.com/user-attachments/assets/81e32231-2ecd-4bd6-bffd-9395e8b02f48
/map
. That command requires you to also have the map in your database. Use change_map test
in rcon instead. tokio
dependency for mastersrv
due to an error while building on Windows (error[E0793]: reference to packed field is unaligned
).
Closes #9539
mod foo {
pub fn main() -> i32 {
for (let mut n: i64 = 1; n <= undefined_var; n = n + 1) {
return 0;
}
}
}
(edited)mod foo {
struct Owo {
field: i32
}
pub fn main() -> i32 {
let owo: Owo = Owo {
field: 11,
};
let a: &Owo = &owo;
let b: &i32 = a as &i32;
return *b;
}
}
I would call it a feature in my languint8_t*
and int32_t*
even though they are both of type pointer?mod foo {
pub fn main() -> i32 {
for (let mut n: i64 = 1; n <= undefined_var; n = n + 1) {
return 0;
}
}
}
(edited)SomeClass *pIdk = pSomeParentClass
mod foo {
pub fn main() -> i32 {
for (let mut n: i64 = 1; n <= undefined_var; n = n + 1) {
return 0;
}
}
}
(edited) #[intrinsic = "sizeof"]
fn sizeof<T>() -> u64;
SomeClass *pIdk = pSomeParentClass
src
directory instead of creating a new one. Explicitly exclude ubuntu-22.04
instead of only building on latest
as requested in #9696
sudo pacman -S --needed base-devel cmake curl ffmpeg freetype2 git glew glslang gmock libnotify libpng opusfile python rust sdl2 spirv-tools sqlite vulkan-headers vulkan-icd-loader wavpack x264
sudo pacman -S --needed base-devel cmake curl ffmpeg freetype2 git glew glslang gmock libnotify libpng opusfile python rust sdl2 spirv-tools sqlite vulkan-headers vulkan-icd-loader wavpack x264
BUILD_TESTING
is not an option afaikcmake -Bbuild -DCMAKE_TOOLCHAIN_FILE=cmake/toolchains/mingw64.toolchain
build
dir and try again just to be sure it's not smth else-DDOWNLOAD_GTEST=ON
also won't work?mod vec {
extern fn malloc(size: u64) -> *mut u8;
extern fn realloc(ptr: *mut u8, size: u64) -> *mut u8;
struct Vec<T> {
ptr: *mut T,
len: u64,
cap: u64,
// needed cuz missing sizeof instrinsic
type_size: u64,
}
impl<T> Vec<T> {
pub fn new(&mut self, value: T) -> Vec<T> {
let vec: Vec<T> = Vec::<T> {
ptr: malloc(type_size * 32) as *mut T,
len: 0,
cap: 32,
type_size: type_size,
};
return vec;
}
}
fn main() -> i32 {
let type_size: u64 = 4;
let mut vec: Vec<i32> = Vec::<i32>::new(type_size);
return 0;
}
}
@Ryozuki how should this code work? 0_omod vec {
extern fn malloc(size: u64) -> *mut u8;
extern fn realloc(ptr: *mut u8, size: u64) -> *mut u8;
#[intrinsic = "sizeof"]
fn sizeof<T>() -> u64;
struct Vec<T> {
ptr: *mut T,
len: u64,
cap: u64,
}
impl<T> Vec<T> {
pub fn new(type_size: u64) -> Vec<T> {
let vec: Vec<T> = Vec::<T> {
ptr: malloc(sizeof::<T>() * 32) as *mut T,
len: 0,
cap: 32,
};
return vec;
}
pub fn push(&mut self, value: T) {
let type_size: u64 = sizeof::<T>();
if self.len <= self.cap {
let new_cap: u64 = self.cap * 2;
self.ptr = realloc(self.ptr as *mut u8, type_size * new_cap) as *mut T;
self.cap = new_cap;
}
let target_ptr: *mut T = (self.ptr + (self.len * type_size)) as *mut T;
*target_ptr = value;
self.len = self.len + 1;
}
pub fn get(&self, at: u64) -> &T {
// todo: bounds check
let target_ptr: *mut T = (self.ptr + (at * sizeof::<T>())) as *mut T;
return target_ptr as &T;
}
}
fn main() -> i32 {
let type_size: u64 = 4;
let mut vec: Vec<i32> = Vec::<i32>#new(type_size);
vec.push(2);
vec.push(3);
vec.push(4);
vec.push(5);
let pushed: &i32 = vec.get(2);
return *pushed;
}
}
@MilkeeyCatmod vec {
extern fn malloc(size: u64) -> *mut u8;
extern fn realloc(ptr: *mut u8, size: u64) -> *mut u8;
#[intrinsic = "sizeof"]
fn sizeof<T>() -> u64;
struct Vec<T> {
ptr: *mut T,
len: u64,
cap: u64,
}
impl<T> Vec<T> {
pub fn new(type_size: u64) -> Vec<T> {
let vec: Vec<T> = Vec::<T> {
ptr: malloc(sizeof::<T>() * 32) as *mut T,
len: 0,
cap: 32,
};
return vec;
}
pub fn push(&mut self, value: T) {
let type_size: u64 = sizeof::<T>();
if self.len <= self.cap {
let new_cap: u64 = self.cap * 2;
self.ptr = realloc(self.ptr as *mut u8, type_size * new_cap) as *mut T;
self.cap = new_cap;
}
let target_ptr: *mut T = (self.ptr + (self.len * type_size)) as *mut T;
*target_ptr = value;
self.len = self.len + 1;
}
pub fn get(&self, at: u64) -> &T {
// todo: bounds check
let target_ptr: *mut T = (self.ptr + (at * sizeof::<T>())) as *mut T;
return target_ptr as &T;
}
}
fn main() -> i32 {
let type_size: u64 = 4;
let mut vec: Vec<i32> = Vec::<i32>#new(type_size);
vec.push(2);
vec.push(3);
vec.push(4);
vec.push(5);
let pushed: &i32 = vec.get(2);
return *pushed;
}
}
@MilkeeyCat type_size
in new
fn Enum, structs instead of classes
Ad-hoc polymorphism via traits
Parametric polymorphism via generics
Expressions and statements rather than only expressions as in many functional languages
Built-in dependency manager
Built-in linter and formatter
Built-in testing tooling
Good compilation error messages
Inmutability by default, optional mutability
Linear type system rather than affine type system
No lifetimes
Simpler borrow checker
Concurrency model. We provide a default runtime with green threads. There is no support for low-level primitives like atomics, mutex and OS threads.
There is no Sync and Send traits. This implies that mutability can only happen inside the same process.
No relationsihp between modules and files
No circular dependencies in modules
No macros
At the beginning we won't support local type inference at function level. We might add it in the future.
Financials decimal type and bigint type as part of the standard library
Safe FFI
Perfect replayability to be able to easily reproduce Heisenbugs
We want to try to have bit-for-bit deterministic/reproducible builds from the beginning. This will be difficult to have but we will do our best.
this is the goal listtrait Foo { fn foo(); }
impl Foo for X { ... }
impl Foo for Y { ... }
polymorphic
i think it's some rocket sciencepolymorphic
i think it's some rocket science int64_t main() {
int64_t a = 1 + 2;
int64_t b = 3 + 4;
return b - a;
}
.section .text
.global main
main:
.L0:
mov r15, 1
add r15, 2
mov r14, 3
add r14, 4
mov rax, r14
sub rax, r15
ret
int64_t main() {
int64_t a = 1 + 2;
int64_t b = 3 + 4;
return b - a;
}
.section .text
.global main
main:
.L0:
mov r15, 1
add r15, 2
mov r14, 3
add r14, 4
mov rax, r14
sub rax, r15
ret
int64_t main() {
int64_t a = 1 + 2;
int64_t b = 3 + 4;
return b - a;
}
.section .text
.global main
main:
.L0:
mov r15, 1
add r15, 2
mov r14, 3
add r14, 4
mov rax, r14
sub rax, r15
ret
CSkinDescriptor
class to describe the information related to the skin textures of a CTeeRenderInfo
so the skin textures can be refreshed independently from the other attributes. Add CManagedTeeRenderInfo
class as wrapper for a CTeeRenderInfo
and a corresponding CSkinDescriptor
. Instances of CManagedTeeRenderInfo
are managed as std::shared_ptr
s by the gameclient. This allows skin textures of all `CManagedTeeRenderInf...