exec myfolder/somesubfolder/config.cfg
because there is no way to list files from the console or even better auto complete paths.
It should autocomplete all active storage locations. This feature will leak the file structure but exec
already leaks most file contents so thats not much worse from a security perspective i guess.terminate called after throwing an instance of 'std::bad_function_call'
what(): bad_function_call
#define TRY_CALLBACK(a, b, c) { dbg_assert(bool(b), a " callback has no candidate."); b c; }
...
TRY_CALLBACK("Operation failed", fnOperationFailedCallback, (LOAD_ERROR_DIRECTORY_UNREADABLE, &it))
// instead of fnOperationFailedCallback(LOADLOAD_ERROR_DIRECTORY_UNREADABLE, &it);
so i could handle this error without catching an exceptionconst char *GetPath(int Type, const char *pDir, char *pBuffer, unsigned BufferSize)
in CStorage is not a part of the interface (edited)std::string
is okay if the alternative would be to malloc
/free
some buffer anywayv
prefix for std::vector
and not for other collections like std::set
a
(edited)a
for normal arrays and std::array
and v
for std::vector
, we don't use prefixes for other iterable collections like std::set
and std::list
a
ONLY for T[]
arrays and v
ONLY for std::vector
specifically is weirdtemplate <typename T>
void doStuff(const std::initializer_list<T> &args) {
for(const auto &it : args) {
// stuff
}
}
doStuff<int>({1, 5, 2, 7, 12});
std::vector
would be better here because you can just create a vector from an initializer list IIRCDDNet "connect ger.ddnet.tw"
npm i teeworlds
. There are no other projects in the npm registry using teeworlds.std::span
will replace all brace params so in C++26 explicit initializer_list constructors might become obsolete version: '3'
services:
db:
container_name: db
image: mariadb
restart: always
volumes:
- /opt/volumes/bombay/mariadb:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: pw
MYSQL_USER: tw
MYSQL_PASSWORD: pw
MYSQL_DATABASE: bw
networks:
- bombay
v3royal:
container_name: v3royal
depends_on:
- db
image: bombay:latest
restart: always
volumes:
- /opt/volumes/bombay/v3royal/data:/blockworlds/data
networks:
- bombay
ports:
- 149.202.19.227:8404:8404/udp
phpmyadmin:
container_name: phpmyadmin
image: phpmyadmin
restart: always
networks:
- traefik
- bombay
labels:
traefik.enable: true
traefik.http.routers.phpmyadmin.entrypoints: websecure
traefik.http.routers.phpmyadmin.rule: Host(`url`)
traefik.http.services.phpmyadmin.loadbalancer.server.port: 80
environment:
- PMA_ARBITRARY=1
networks:
bombay:
external: true
name: bombay
traefik:
external: true
name: traefik
but here's an example tw_srv:
container_name: tw_srv
image: bombay:latest
restart: always
environment:
TW_sv_name: "This is a test server"
...
=
and +=
yaml
yaml:
- sucks
- so bad
fn no() -> i8 {}
for(auto &pLayer : m_vpLayers)
{
if(pLayer->m_Visible)
{
if(pLayer->m_Type == LAYERTYPE_TILES)
{
CLayerTiles *pTiles = static_cast<CLayerTiles *>(pLayer);
if(pTiles->m_Game || pTiles->m_Front || pTiles->m_Tele || pTiles->m_Speedup || pTiles->m_Tune || pTiles->m_Switch)
continue;
}
if(m_pMap->m_pEditor->m_ShowDetail || !(pLayer->m_Flags & LAYERFLAG_DETAIL))
pLayer->Render();
}
}
for(auto &pLayer : m_vpLayers)
{
if(pLayer->m_Visible && pLayer->m_Type == LAYERTYPE_TILES && pLayer != m_pMap->m_pGameLayer && pLayer != m_pMap->m_pFrontLayer && pLayer != m_pMap->m_pTeleLayer && pLayer != m_pMap->m_pSpeedupLayer && pLayer != m_pMap->m_pSwitchLayer && pLayer != m_pMap->m_pTuneLayer)
{
CLayerTiles *pTiles = static_cast<CLayerTiles *>(pLayer);
if(pTiles->m_Game || pTiles->m_Front || pTiles->m_Tele || pTiles->m_Speedup || pTiles->m_Tune || pTiles->m_Switch)
{
pLayer->Render();
}
}
}
at CLayerGroup::Render() on game/editor/editor.cpp(pLayer->m_Visible && pLayer->m_Type == LAYERTYPE_TILES)
and then (pLayer != m_pMap->m_pGameLayer && pLayer != m_pMap->m_pFrontLayer && pLayer != m_pMap->m_pTeleLayer && pLayer != m_pMap->m_pSpeedupLayer && pLayer != m_pMap->m_pSwitchLayer && pLayer != m_pMap->m_pTuneLayer)
under the same if?(pLayer != m_pMap->m_pGameLayer && pLayer != m_pMap->m_pFrontLayer && pLayer != m_pMap->m_pTeleLayer && pLayer != m_pMap->m_pSpeedupLayer && pLayer != m_pMap->m_pSwitchLayer && pLayer != m_pMap->m_pTuneLayer)
evaluates to trueCLayerGroup::Render()
should I merge those to for loops into one?pLayer->Render()
works?(pLayer != m_pMap->m_pGameLayer && pLayer != m_pMap->m_pFrontLayer && pLayer != m_pMap->m_pTeleLayer && pLayer != m_pMap->m_pSpeedupLayer && pLayer != m_pMap->m_pSwitchLayer && pLayer != m_pMap->m_pTuneLayer)
evaluates to true CLayerGroup::Render()
should I merge those to for loops into one? UIElement.Rect(0)->m_Y != pRect->h
, so any UI rect using m_HintCanChangePositionOrSize
would be updated every frame (although, no UI element currently uses this hint).
Additionally, checks for changed rounding size and corners are added so UI elements are updated when those are changed.