Skip to content
0374flopPublic

About

npm пакет для работы с DDNet ботами `npm i ddbot.js-0374`

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

221 Commits

Folders and files

Repository files navigation

ddbot.js

Библиотека которая оборачивает teeworlds(npm i teeworlds) в более удобный (Для меня лично как минимум.) формат.

0374flop MIT


начало

установка

npm i ddbot.js-0374

импорт

import * as ddbot from 'ddbot.js-0374';
const ddbot = require('ddbot.js-0374');

простейший пример

import * as ddbot from '../lib/index.js';

const bot = new ddbot.Bot(/* identity, options, custom teeworlds */);
// if no identity is provided, it will be default 'nameless tee' with default skin

bot.on('connect', () => {
    console.log('Connected to server!');
});

bot.on('disconnect', () => {
    console.log('Disconnected from server!');
});

(async () => {
    await bot.connect('45.141.57.22', 8303, 20000); // IP, port, timeout (IP is of ddnet server)
    bot.bot_client?.game.Say('DDNet!'); // from teeworlds
    setTimeout(async () => {
        await bot.disconnect();
        process.exit(0);
    }, 5000); // 5 sec
    process.on('SIGINT', async () => { // on Ctrl+C
        await bot.disconnect();
        process.exit(0);
    });
})();

Документация

Bot

const bot = new ddbot.Bot(identity?, options?, customTeeworlds?);

методы

bot.connect(addr, port?, timeout?) - подключится к серверу. возвращает Promise<ConnectionInfo>.

bot.disconnect() - отключится от сервера. возвращает Promise<ConnectionInfo | null>.

bot.send_input(input) - отправить инпут (движение, прицел, и тд).

bot.change_identity(identity) - сменить скин/имя/клан и тд.

bot.destroy() - полностью уничтожить бота, очищает все listeners.

геттеры

bot.bot_client - оригинальный клиент teeworlds. может быть null если не подключен. (Proxie)

bot.bot_identity - текущий identity бота.

bot.OwnID - clientId бота на сервере. undefined если не подключен.

события

connect - подключился. (info: ConnectionInfo)

disconnect - отключился. (reason: string | null, info: ConnectionInfo)

error - когда у бота ошибка (...args: any[]), (Почти не изпользуеться)

...остальные события проксируються из teeworlds


Модули

Модули это отдельные куски функционала которые можно подключить к боту.

const chat = new ddbot.StandardModules.Chat(bot); // bot уже должен быть инициализирован! (не обязательно подключен)
chat.start();

Chat

Слушает message, и дедублирует сообщения. (из-за udp, они дублируються чтобы оно дошло, ведь там нет гарантии доставки.)

const chat = new ddbot.StandardModules.Chat(bot);
chat.start(interval?, cooldown?);

interval - как часто чиститься кеш дубликатов (ms, default: 1000) cooldown - минимальная задержка между исходящими сообщениями (ms, default: 1000)

chat.send(text, team?, priority?) - добавить сообщение в очередь на отправку.

события:

anychat - любое сообщение (msg, author, text, team, client_id)

chat - сообщение от игрока (msg, author, text, team, client_id)

systemchat - системное сообщение (msg, text)

queued - сообщение добавлено в очередь ({ text, team, queueSize })

sent - сообщение отправлено ({ text, team, queueSize })


PlayerList

Просто сканирует всех игроков от client_id = 0, до 64. (Зделано чтобы быстро получить весь список игроков и для отслеживания заходов/выходов игроков.)

const playerlist = new ddbot.StandardModules.PlayerList(bot);
playerlist.start(maxclients?);
interface PlayerData {
	client_id: number;
	clientInfo: Types.SnapshotItemTypes.ClientInfo;
	playerInfo: Types.SnapshotItemTypes.PlayerInfo;
	character: Types.SnapshotItemTypes.Character | null;
	DDNetCharacter: Types.SnapshotItemTypes.DDNetCharacter | null;
}

maxclients - максимальное количество игроков (default: 64)

playerlist.list - список всех игроков [client_id, PlayerData][]

playerlist.getPlayer(client_id) - получить игрока по id. PlayerData | null

playerlist.getPlayerCount() - количество игроков онлайн

события:

player_joined - игрок зашел ({ client_id, name, playerData })

player_left - игрок вышел ({ client_id, name, playerData })


Reconnect

Автоматически переподключает бота при дисконнекте. Умно считает задержку в зависимости от причины. (причины добыты експерементально с оф севреров)

const reconnect = new ddbot.StandardModules.Reconnect(bot);
reconnect.start(maxAttempts?, randomDelay?);

maxAttempts - максимальное количество попыток реконнекта (-1 для бесконечного, default: -1) randomDelay - добавлять рандомную задержку к базовой (default: true)

события:

reconnecting - начинает переподключаться ({ attempt, delay, reason, ConnectionInfo })

reconnected - успешно переподключился ({ addr, port })

reconnect_failed - не смог переподключиться (reason)


Snap

Слушает snapshot события и даёт удобные события поверх них. (зделаны не все)

const snap = new ddbot.StandardModules.Snap(bot);
snap.start();

snap.isFrozen - заморожен ли бот прямо сейчас

Snap.angleshot(character) - статичный метод, возвращает вектор прицела персонажа { x, y } | null

события:

hammerhitme - кто-то ударил молотком по боту (или просто рядом, и пощитало не правильно) (hit, client_id)

fire - кто-то выстрелил рядом (sound, client_id)

frozen - бот заморозился

unfrozen - бот разморозился


BaseModule

Базовый класс для своих модулей.

import { BaseModule } from 'ddbot.js-0374';

class MyModule extends BaseModule {
    constructor(bot) {
        super(bot, { moduleName: 'MyModule' });
    }

    _start() {
        this.bot.on('connect', () => {
            console.log('connected!');
        });
    }

    _stop() {
        // cleanup
    }
}

const myModule = new MyModule(bot);
myModule.start();

moduleName - имя модуля (для ошибок) offonDisconnect - автоматически вызывать destroy() при дисконнекте (default: true)

module.start(...args) - запустить модуль, вызывает _start(...args)

module.stop() - остановить модуль, вызывает _stop()

module.destroy() - полностью уничтожить модуль, очищает все listeners

module.isRunning - запущен ли модуль


DDUtils

DDUtils.DefaultIdentity(name?) - возвращает дефолтный identity Identity, если имени нет, то 'nameless tee'

DDUtils.reconstructPlayerInput(char, ddnetChar?, tick?) - реконструирует инпут игрока из snapshot. NOT FULL. Types.SnapshotItemTypes.PlayerInput

About

npm пакет для работы с DDNet ботами `npm i ddbot.js-0374`

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages