O loʻo matou tusia le faʻatusatusaga mo Dota 2014

Talofa tagata uma.

O lenei tautotogo na ou tau atu ai i se poloketi lea na aʻoaʻoina ai e tama le faʻaogaina o le Dota 2 server version 2014 ma, e tusa ai, taʻalo i luga. O au o se tagata fiafia tele i lenei taaloga, ma e le mafai ona ou misia lenei avanoa tulaga ese e faatofu ai aʻu i loʻu laitiiti.

Sa ou lupe loloto, ma na tupu na ou tusia se Discord bot lea e nafa ma toetoe lava o galuega uma e le o lagolagoina i le lomiga tuai o le taaloga, e pei o le matchmaking.
A'o le'i faia uma fa'afouga fa'atasi ma le bot, na faia ma le lima le lobby. Na matou aoina tali e 10 i se feʻau ma faʻapipiʻi lima se server, pe faʻafeiloaʻi se lobby i le lotoifale.

O loʻo matou tusia le faʻatusatusaga mo Dota 2014

O loʻu natura o se tagata fai polokalame e le mafai ona tatalia le tele o galuega tusilima, ma i le po na ou tusia ai le ata sili ona faigofie o le bot, lea e otometi lava ona siitia le server pe a 10 tagata.

Na vave ona ou filifili e tusi i nodejs, aua ou te le fiafia tele i le Python, ma ou te lagona le sili atu le toʻa i lenei siosiomaga.

O loʻu aafiaga muamua lea i le tusiaina o se bot mo Discord, ae na foliga mai e matua faigofie lava. O le npm module discord.js aloaia e maua ai se fesoʻotaʻiga faigofie mo le galue i feʻau, aoina o tali, ma isi.

Fa'asalaga: O fa'ata'ita'iga fa'ailoga uma e "i le taimi nei", o lona uiga ua latou uia le tele o fa'asologa o le toe tusitusi i le po.

O le faʻavae o le faʻatusatusaina o se "queue" lea e tuʻu ai tagata taʻalo e fia taʻalo i totonu ma aveese pe a latou le manaʻo pe maua se taʻaloga.

O le uiga lea o le uiga o se "tagata taalo". I le taimi muamua sa na o se tagata faʻaoga id i Discord, ae o loʻo i ai fuafuaga e faʻalauiloa / suʻe mo taʻaloga mai le saite, ae muamua mea muamua.

export enum Realm {
  DISCORD,
  EXTERNAL,
}

export default class QueuePlayer {
  constructor(public readonly realm: Realm, public readonly id: string) {}

  public is(qp: QueuePlayer): boolean {
    return this.realm === qp.realm && this.id === qp.id;
  }

  static Discord(id: string) {
    return new QueuePlayer(Realm.DISCORD, id);
  }

  static External(id: string) {
    return new QueuePlayer(Realm.EXTERNAL, id);
  }
}

Ma o le laina fa'aoga lenei. O iinei, nai lo le "tagata taaalo," o se faʻamatalaga i le tulaga o se "vaega" e faʻaaogaina. Mo se tagata taalo e toatasi, o le vaega e aofia ai ia lava, ma mo tagata taaalo i se vaega, i le faasologa, o tagata taaalo uma i le vaega.

export default interface IQueue extends EventEmitter {
  inQueue: QueuePlayer[]
  put(uid: Party): boolean;
  remove(uid: Party): boolean;
  removeAll(ids: Party[]): void;

  mode: MatchmakingMode
  roomSize: number;
  clear(): void
}

Na ou filifili e faʻaoga mea na tutupu e fesuiai faʻamatalaga. Na fetaui mo mataupu - i luga o le mea na tupu "se taaloga mo le 10 tagata na maua", e mafai ona e auina atu le feʻau talafeagai i le au taʻaalo i feʻau tumaoti, ma faʻatino le faʻavae pisinisi pisinisi - faʻalauiloa se galuega e siaki le saunia, saunia le lobby. mo le tatalaina, ma isi.

Mo IOC ou te faʻaaogaina InversifyJS. Ua ou maua se aafiaga manaia i le galue ai i lenei faletusi. vave ma faigofie!

E tele a matou laina i luga o la matou 'auʻaunaga - ua matou faʻaopoopoina le 1x1, masani / faʻatatau, ma se lua o aga masani. O le mea lea, o loʻo i ai se Singleton RoomService o loʻo taoto i le va o le tagata faʻaoga ma le suʻega taʻaloga.

constructor(
    @inject(GameServers) private gameServers: GameServers,
    @inject(MatchStatsService) private stats: MatchStatsService,
    @inject(PartyService) private partyService: PartyService
  ) {
    super();
    this.initQueue(MatchmakingMode.RANKED);
    this.initQueue(MatchmakingMode.UNRANKED);
    this.initQueue(MatchmakingMode.SOLOMID);
    this.initQueue(MatchmakingMode.DIRETIDE);
    this.initQueue(MatchmakingMode.GREEVILING);
    this.partyService.addListener(
      "party-update",
      (event: PartyUpdatedEvent) => {
        this.queues.forEach((q) => {
          if (has(q.queue, (t) => t.is(event.party))) {
            // if queue has this party, we re-add party
            this.leaveQueue(event.qp, q.mode)
            this.enterQueue(event.qp, q.mode)
          }
        });
      }
    );

    this.partyService.addListener(
      "party-removed",
      (event: PartyUpdatedEvent) => {
        this.queues.forEach((q) => {
          if (has(q.queue, (t) => t.is(event.party))) {
            // if queue has this party, we re-add party
            q.remove(event.party)
          }
        });
      }
    );
  }

(Fa'ailoga saimini e tu'u mai ai se manatu po'o a foliga o fa'agasologa)

O iinei ou te amataina ai le laina mo taʻaloga taʻaloga taʻitasi, ma faʻalogo foi mo suiga i "vaega" ina ia mafai ai ona fetuunai laina ma aloese mai nisi o feeseeseaiga.

O lea, ua lelei, na ou faʻaofiina fasi code e leai se mea e faʻatatau i le autu, ma o lea tatou te agai saʻo atu i le faʻatusa.

Seʻi o tatou iloiloina le tulaga:

1) E manaʻo le tagata faʻaoga e taʻalo.

2) Ina ia amata le sailiga, na te faʻaaogaina Gateway=Discord, o lona uiga, tuʻuina se tali i le feʻau:

O loʻo matou tusia le faʻatusatusaga mo Dota 2014

3) O lenei faitotoa e alu i RoomService ma fai mai "O se tagata faʻaoga mai feeseeseaiga e manaʻo e ulufale i le laina, faiga: taʻaloga e le faʻamaonia."

4) RoomService talia le talosaga a le faitotoa ma tulei le tagata faʻaoga (sili atu saʻo, le vaega faʻaoga) i le laina manaʻomia.

5) E siaki le laina i taimi uma e lava tagata taaalo e taaalo ai. Afai e mafai, faʻaalia se mea na tupu:

private onRoomFound(players: Party[]) {
    this.emit("room-found", {
      players,
    });
  }

6) RoomService e manino lava e faʻalogo fiafia i laina uma i le faʻatalitali atu i lenei mea. Matou te mauaina se lisi o tagata taaalo e fai ma faʻaoga, fausia se "potu" mai ia i latou, ma, ioe, tuʻuina atu se mea na tupu:

queue.addListener("room-found", (event: RoomFoundEvent) => {
      console.log(
        `Room found mode: [${mode}]. Time to get free room for these guys`
      );
      const room = this.getFreeRoom(mode);
      room.fill(event.players);

      this.onRoomFormed(room);
    });

7) O lea na matou oʻo ai i le pule "sili ona maualuga" - o le vasega Bot. I se tulaga lautele, na te feagai ma le fesoʻotaʻiga i le va o faitotoʻa (e le mafai ona ou malamalama i le manaia o foliga i le gagana Rusia) ma le pisinisi faʻatatau o le fetaui. O lo'o fa'alogoina e le bot le mea na tupu ma fa'atonu le DiscordGateway e lafo se siaki sauni i tagata uma.

O loʻo matou tusia le faʻatusatusaga mo Dota 2014

8) Afai e teena e se tasi pe le taliaina le taaloga i totonu ole 3 minute, ona matou le toe faafoi atu lea i le laina. Matou te toe faafoi tagata uma i le laina ma faatali seia toe 10 tagata. Afai ua talia uma e le au taaalo le taaloga, ona amata lea o le vaega manaia.

Fa'atonuga fa'aumau

O a matou ta'aloga o lo'o talimalo ile VDS ma le Windows server 2012. Mai lenei mea e mafai ona tatou faia ni fa'ai'uga:

  1. E leai se ta'avale i luga, lea na lavea ai lo'u fatu
  2. Matou te sefe i le lisi

O le galuega o le faʻatinoina o se faʻagasologa ile VDS mai le VPS ile Linux. Sa ou tusia se server faigofie i Flask. Ioe, ou te le fiafia i le Python, ae o le a se mea e mafai ona e faia? E sili atu le vave ma sili atu ona faigofie le tusiaina o lenei server i luga.

E fa'atino galuega e 3:

  1. Amataina se 'auʻaunaga ma se faʻatulagaga - filifilia o se faʻafanua, numera o tagata taʻalo e amata le taʻaloga, ma se seti o plugins. O le a ou le tusi e uiga i plugins i le taimi nei - o se tala ese lena i lita o kofe i le po fefiloi ma loimata ma lauulu masaesae.
  2. Taofi/toe fa'afouina le 'au'aunaga i le tulaga o feso'ota'iga le manuia, lea e na'o le lima lava e mafai ona matou taulimaina.

E faigofie mea uma iinei, faʻataʻitaʻiga code e le talafeagai. 100 laina tusitusiga

O lea la, ina ua faʻapotopoto tagata 10 ma talia le taʻaloga, na faʻalauiloa le server ma sa naunau tagata uma e taʻalo, o se fesoʻotaʻiga e faʻafesoʻotaʻi i le taʻaloga na lafoina i feʻau tumaoti.

O loʻo matou tusia le faʻatusatusaga mo Dota 2014

I le kilikiina o le soʻotaga, e fesoʻotaʻi le tagata taʻalo i le taʻaloga taʻaloga, ona oʻo lea. A maeʻa le ~ 25 minute, faʻamalo le "potu" ma tagata taʻalo.

Ou te faatoese atu muamua mo le le mautonu o le tusiga, ou te leʻi tusia iinei mo se taimi umi, ma e tele naua code e faʻamaonia ai vaega taua. Noodles, i se faapuupuuga.

Afai ou te vaʻaia le fiafia i le autu, o le ai ai se vaega lona lua - o le a aofia ai loʻu faʻamaʻi faʻatasi ma plugins mo srcds (Source dedicated server), ma, masalo, o se faiga faʻavae ma mini-dotabuff, o se nofoaga ma fuainumera taʻaloga.

O nisi so'oga:

  1. La matou 'upega tafaʻilagi (faʻamaumauga, taʻiala, laʻititi laʻititi itulau ma le tagata e sii maia)
  2. 'au'aunaga fa'a'ese'ese

puna: www.habr.com

Faaopoopo i ai se faamatalaga