Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
자신만의 세계에서 라인에이지 II 크로니클 4를 즐기고 봇 동료·조정 가능한 비율·일정 관리, 무료 오픈소스 공개 알파
Return to Lineage II Chronicle 4 in your own living world. Bot companions, adjustable rates, your schedule. Free and open source. Public alpha.
게임JavaScript · CSSGitHub @pmbstyle온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Lineage II Chronicle 4 server emulator tuned for a solo MMO experience. Smart bots, aiming to a complete offline simulation.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Old-school Lineage 2 solo play, locally in a live world with over 1700 bot population.
L2Solo is a local-first Lineage II C4 server emulator, tuned for a solo MMO experiment: one real player, a live world, and bots with AI that makes the server feel alive. Nothing is auto-generated. Everything in the world is the result of a player's or a bot's actions.
Project status: PUBLIC ALPHA
🏗️ Work in progress. Playable.
💬 Discord Support, updates, and communication. Join the Discord to stay up to date with development.
⚔️ Game client Clean C4 client protocol 656
🧩 L2Solo client mod Optional but recommended for a better experience
💻 Simulation - everything that is happening in the game world besides player actions.
🧊 Cold bots - bots in the background, everywhere on the server where the player cannot see. Works like a less detailed simulation but keeps base bot abilities, stats, and goals, including cold bot parties, clans, etc. Bots become cold when goes out of the player's view range. Can communicate, including with the player (optional LLM integration). Uses much less compute.
🔥 Hot bots - bots that the player can see, or within maximum client view range. Any cold bot can become hot if the player is nearby. Highest detail level, uses much more compute for realistic movement, actions, etc.
🌳 Static bots - static traders in towns and crafting stations in Giran. Needed only for a specific function, no brain, no communication or goals.
See the full update log on our Discord server.
Server:
World:
Character:
.botparty / .bp to find bots and invite them to the partyMobs:
Bots:
You will need:
git clone https://github.com/pmbstyle/L2Solo.git
cd L2Solo
npm install
npm start
That command will start the L2Solo Launcher.
Press Start in the launcher to run the server.
Use Saved Games while the server is stopped to save a full copy of your world database. Enter a name or leave it blank for a generated one. Saves are stored in tmp/saves (or saves inside a custom runtime directory), with no limit on their number beyond available disk space. The list shows each save's name, date, time, and size in GB.
Load replaces the current database with the selected save and leaves the server stopped. Delete permanently removes that save. Both actions ask for confirmation. All saves are manual: loading never creates an automatic backup. Configuration files and launcher settings are not part of a save.
On the first server start, L2Solo checks data/Geodata. If the region files are missing, it downloads the verified C4 geodata pack from https://l2solo.com/files/geodata.zip and installs it before opening the game server. The archive is about 209 MiB and expands to about 900 MiB. You can prepare it without starting the server with:
npm run geodata
Custom mirrors and external geodata directories can be configured with L2NODE_GEODATA_URL, L2NODE_GEODATA_SHA256, and L2NODE_GEODATA_DIR.
Committed defaults live in config/default.ini.
Private local overrides go in ignored config/local.ini. This is where API keys and a machine-specific SQLite path belong.
Players' personal warehouses are shared by all characters on the same account.
On startup, existing player warehouse items move to account ownership, preserving
equipment enchantments and pet data. Bots retain their character warehouses.
Deleting a character leaves the account warehouse intact. The shared capacity is
300 item stacks or individual equipment rows for every player character, regardless
of race or Expand Storage skill. Override [GameServer] playerWarehouseSlots
(1..1000) to change it; restart to apply. Existing stock above a reduced limit
remains withdrawable, and deposits into existing stacks remain available.
Example:
[OpenRouter]
enabled = true
apiKey = <your-OpenRouter-key-here>
apiUrl = https://openrouter.ai/api/v1/chat/completions
model = openai/gpt-5.6-luna
partyRouterModel = openai/gpt-5.6-luna
# Leave empty if the selected model does not accept temperature.
temperature =
completionLimitParam = max_tokens
strictSchema = true
providerOrder = OpenAI
providerSort = price
allowFallbacks = false
requireParameters = true
debug = false
OpenRouter can also read the key/model from environment variables:
OPENROUTER_API_KEY=sk-or-v1-your-key-here npm start
The bot simulation can also use a local or remote provider that exposes the
OpenAI-compatible Chat Completions API. Use an [AI] section instead of
[OpenRouter] and provide the complete endpoint URL:
[AI]
enabled = true
apiUrl = http://127.0.0.1:1234/v1/chat/completions
apiKey = lm-studio
model = <model-id-from-the-provider>
partyRouterModel = <model-id-from-the-provider>
# Model-specific request parameters are configured explicitly.
# temperature = 0.35
# completionLimitParam = max_tokens
# strictSchema = false
# Optional for thinking models: off (default), low, medium, or high.
# reasoningEffort = off
For Ollama, use http://127.0.0.1:11434/v1/chat/completions and a pulled model
tag such as llama3.2. The API key can be empty for local providers; a value
like ollama or lm-studio is also accepted when the server expects an
OpenAI-compatible client key. Thinking is disabled by default for [AI],
which keeps the bounded bot response budget available for the required JSON;
set reasoningEffort to low, medium, or high when the selected model
benefits from explicit reasoning.
Clan chat uses the same model and partyRouterModel settings. Names, roles,
selected clanmates, and follow-up messages are routed first; ambiguous messages
use the routing model to choose one responder or ask for clarification. Both
active and background clan bots can reply in the clan channel. This path is
conversation-only, with no tools or game actions. The clan shares a bounded
in-memory conversation history, separate from party chat and private tells;
it expires after 30 minutes of inactivity and resets on server restart.
With inference configured, autonomous clans choose a persistent strategic objective using the leader's stored drive and seven personality traits, capable roster, available treasury and recent strategic outcomes. Supported objectives are clan progression (through the existing level-four trial), member equipment, a native raid upgrade, recruitment, a treasury reserve and a clan hall. Native planners still own routes, readiness, spending checks and execution. Strategic equipment planning replaces the additional per-item LLM selection.
[ClanSimulation] strategicManagementEnabled enables this layer by default;
llmGoalManagementEnabled controls its inference calls. An installation without
configured inference and without an existing strategy keeps its legacy lifecycle.
Setting strategicManagementEnabled = false restores that lifecycle explicitly.
Existing strategies continue deterministically during an inference outage.
Their next decision still discovers fresh native equipment plans, even with
inference disabled. Disabling inference retires pending strategic advice without
waiting for its response or applying it later.
A cheap review checks progress and significant changes; elapsed time alone does
not require an LLM call. Choices survive restarts, and ordinary loot, movement and
simulation revisions do not invalidate them. strategyMinHoldMs defaults to 30
minutes, strategyStallMs to six hours, and strategyRetryMs to five minutes.
Accepted equipment targets survive changed quotes, routes and personal gear
preferences. A missing tactical route must persist for the retry interval before
another strategic choice; gathering materials also refreshes the stall timer.
Clan crystal shortages enter the shared economy's native purchase, crystallization
and Luxury exchange chain, retaining the accepted equipment owner and reservations.
Completion, an unavailable route or a changed leader can trigger an earlier
review. Each clan has at most one model request in flight. The compact request
has an estimated input limit of 1800 tokens and a 128-token completion limit.
It skips the gateway's expanding schema-repair generation. Failed or stale responses use
validated deterministic choices with a persisted retry backoff.
The strategy directs discretionary clan purchases and prioritizes recruitment. Ordinary recruitment continues alongside every strategic objective and aims for the clan level's full member limit (10, 15, 20, 30, 40, 40 at levels 0–5). Candidate suitability and the configured population share limit still apply; selected raid and crafting recruits retain their reserved places. Existing raid/trial commitments and player orders retain priority; maintenance and personal bot lifecycles retain their native executors. Observer's clan detail shows the strategic objective, measurable progress, reason and cumulative reported token usage separately from the current operational task. A durable completed-upgrade counter carries progress across objectives and restores prior completions from the clan history when upgrading an existing world.
.admin - open the admin menu..sell - sell all unequipped non-Adena items for 50% item value..afksell - open the native private-sale window and leave a persistent AFK shop at the current peace-zone location..afkbuy - open the native private-purchase window and reserve its Adena budget in a persistent AFK shop..afkstop - close the active AFK shop remotely and return all remaining reserved items or Adena..bot / .b - open companion controls..botparty / .bp - search active bots to join the player party; distant companions catch up after joining..joinparty [name] - ask to take over the named bot's autonomous party, or the nearest eligible bot party when no name is given; if accepted, the player becomes leader and the bots resume their autonomous party after the player leaves..botfriends / .bf - friend list and const party management..botstatus / .bs - show a bot overview panel..botstatus <name> / .bs <name> - show detailed status for a specific bot..botpath / .bpath (optionally with <name>) - inspect bot movement, town-route waypoints, and geodata path diagnostics..trade or /trade - open the bot trade window with the targeted SimPlayer, useful as a fallback to the native client trade action..leave - dismiss all companion bots..kick <name> - dismiss one companion bot./invite while targeting a bot - recruit that bot as a companion./dismiss <name> and /leave also work through the party request path..go to start arena PvP.buff target a bot to ask for a paid buff serviceNearby bots also react to plain chat lines such as hi, follow, wait, hunt, heal, and buff.
This project is a heavily modified solo-MMO fork of the original NodeL2 Server Emulator.
L2Solo is licensed under the Apache 2.0 license.
Crafting with ❤️ by players for players 🤘