Re ntse re ngola matchmaking bakeng sa Dota 2014

Lumela.

Selemong sena ke ile ka kopana le morero oo bashanyana ba ithutileng ho tsamaisa mofuta oa seva oa Dota 2 2014, 'me, ka hona, ba bapala ho oona. Ke morati e moholo oa papali ena, 'me ke ne ke sitoa ho tlohela monyetla ona o ikhethang oa ho ikakhela ka setotsoana bongoaneng ba ka.

Ke leeba ka botebo haholo, 'me ho ile ha etsahala hore ke ngole Discord bot e ikarabellang bakeng sa hoo e batlang e le ts'ebetso eohle e sa tšehetsoeng mofuteng oa khale oa papali, e leng matchmaking.
Pele ho tsohle tse ncha ka bot, sebaka sa ho amohela baeti se entsoe ka letsoho. Re bokelletse maikutlo a 10 ho molaetsa mme ra kopanya li-server ka letsoho, kapa ra ba le sebaka sa sebaka sa ho amohela baeti.

Re ntse re ngola matchmaking bakeng sa Dota 2014

Sebopeho sa ka joaloka moqapi ha se khone ho mamella mosebetsi o mongata oa matsoho, 'me ka bosiu bo le bong ke ile ka rala mofuta o bonolo ka ho fetisisa oa bot, o ileng oa phahamisa seva ka bohona ha ho ne ho e-na le batho ba 10.

Hang-hang ke ile ka etsa qeto ea ho ngola ka li-nodejs, hobane ha ke rate Python, 'me ke ikutloa ke phutholohile haholoanyane tikolohong ena.

Ena ke boiphihlelo ba ka ba pele ba ho ngola bot bakeng sa Discord, empa ho bile bonolo haholo. Npm module discord.js e fana ka sebopeho se bonolo sa ho sebetsa ka melaetsa, ho bokella maikutlo, joalo-joalo.

Boitlhotlhollo: Mehlala eohle ea khoutu ke ea "joale", ho bolelang hore ba fetile makhetlong a 'maloa a ho ngola bocha bosiu.

Motheo oa ho bapala lipapali ke "fola" eo libapali tse batlang ho bapala li kenngoa ho eona le ho tlosoa ha li sa batle kapa li fumana papali.

Sena ke seo moelelo oa "sebapali" o shebahalang ka sona. Qalong e ne e le id ea mosebelisi ho Discord, empa ho na le merero ea ho qala / ho batla lipapali sebakeng sa marang-rang, empa lintho tsa pele pele.

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);
  }
}

Mme mona ke sebopeho sa queue. Mona, ho e-na le "libapali," ho sebelisoa tlhaloso ka mokhoa oa "sehlopha". Bakeng sa sebapali se le seng, sehlopha se na le eena, le bakeng sa libapali tsa sehlopha, ka ho latellana, sa libapali tsohle tsa sehlopha.

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
}

Ke nkile qeto ea ho sebelisa liketsahalo ho fapanyetsana maemo. E ne e loketse linyeoe - ketsahalong eo "papali ea batho ba 10 e fumanoeng", o ka romella libapali melaetsa ea poraefete molaetsa o hlokahalang, 'me u etse mabaka a mantlha a khoebo - qala mosebetsi oa ho lekola ho itokisetsa, ho lokisa sebaka sa ho amohela baeti. bakeng sa ho qala, joalo-joalo.

Bakeng sa IOC ke sebelisa InversifyJS. Ke na le boiphihlelo bo monate ha ke sebetsa le laeborari ena. Ka potlako le ka bonolo!

Re na le mela e mengata ho seva sa rona - re kentse 1x1, e tloaelehileng / e lekantsoe, le mekhoa e 'maloa ea tloaelo. Ka hona, ho na le singleton RoomService e teng pakeng tsa mosebelisi le patlo ea papali.

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)
          }
        });
      }
    );
  }

(Li-noodle tsa khoutu ho fana ka maikutlo a hore na lits'ebetso li batla li shebahala joang)

Mona ke qala mokoloko bakeng sa mekhoa e 'ngoe le e' ngoe ea papali e kentsoeng tšebetsong, hape ke mamela liphetoho tsa "lihlopha" e le ho lokisa mela le ho qoba likhohlano tse ling.

Kahoo, hantle, ke kentse likotoana tsa khoutu tse sa amaneng le sehlooho, 'me joale ha re feteleng ka kotloloho ho ho etsa matchmaking.

Ha re nahane ka taba ena:

1) Mosebelisi o batla ho bapala.

2) Bakeng sa ho qala patlo, o sebelisa Gateway=Discord, ke hore, o beha karabelo molaetseng:

Re ntse re ngola matchmaking bakeng sa Dota 2014

3) Tsela ena e ea ho RoomService mme e re "Mosebelisi ea tsoang ho discord o batla ho kena moleng, mokhoa: papali e sa lekanngoeng."

4) RoomService e amohela kopo ea heke mme e sutumelletsa mosebelisi (ka nepo, sehlopha sa basebelisi) moleng o lakatsehang.

5) Lethathamo le hlahloba nako le nako ha ho na le libapali tse lekaneng ho bapala. Haeba ho khonahala, hlahisa ketsahalo:

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

6) Ho hlakile hore RoomService e mamela ka thabo mokoloko o mong le o mong ka tebello e tšoenyehileng ea ketsahalo ena. Re fumana lethathamo la libapali e le ho kenya letsoho, re theha "kamore" ea sebele ho bona, 'me, ehlile, re fana ka ketsahalo:

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) Kahoo re ile ra fihla ho bolaoli bo "phahameng" - sehlopha Bot. Ka kakaretso, o sebetsana le kamano pakeng tsa liheke (ha ke utloisise hore na e shebahala e qabola joang ka Serussia) le mohopolo oa khoebo oa ho bapala. Bot e utloa ketsahalo eo mme e laela DiscordGateway ho romella tlhahlobo ea ho itokisetsa ho basebelisi bohle.

Re ntse re ngola matchmaking bakeng sa Dota 2014

8) Haeba motho e mong a hana kapa a sa amohele papali nakong ea metsotso e 3, HA RE ba khutlisetse moleng. Re khutlisetsa ba bang moleng ebe re ema ho fihlela ho na le batho ba 10 hape. Haeba libapali tsohle li amohetse papali, joale karolo e khahlisang e qala.

Tlhophiso e khethehileng ea seva

Lipapali tsa rona li tšoaroa ho VDS ka Windows server 2012. Ho sena re ka fihlela liqeto tse 'maloa:

  1. Ha ho na docker ho eona, e ileng ea nkotla pelong
  2. Re boloka ka rente

Mosebetsi ke ho tsamaisa ts'ebetso ho VDS ho tsoa VPS ho Linux. Ke ngotse seva e bonolo ho Flask. E, ha ke rate Python, empa u ka etsa'ng?Ho potlakile ebile ho bonolo ho ngola seva sena ho eona.

E etsa mesebetsi e 3:

  1. Ho qala seva ka tlhophiso - ho khetha 'mapa, palo ea libapali ho qala papali, le sehlopha sa li-plugins. Ha ke na ho ngola ka li-plugins hona joale - ke pale e fapaneng le lilithara tsa kofi bosiu tse kopantsoeng le meokho le moriri o tabohileng.
  2. Ho emisa / ho qala seva hape haeba likhokahano li sa atlehe, tseo re ka li sebetsanang feela ka letsoho.

Ntho e 'ngoe le e' ngoe e bonolo mona, mehlala ea khoutu ha e tšoanelehe le ho feta. 100 line script

Kahoo, ha batho ba 10 ba bokana 'me ba amohela papali, seva se ile sa qalisoa 'me bohle ba ne ba labalabela ho bapala, sehokelo sa ho hokela papali se rometsoe ka melaetsa ea lekunutu.

Re ntse re ngola matchmaking bakeng sa Dota 2014

Ka ho tobetsa sehokelo, sebapali se hokela ho seva sa papali, ebe ke sona seo. Kamora ~ metsotso e 25, "kamore" e nang le libapali e ea hlakoloa.

Ke kōpa tšoarelo esale pele bakeng sa bothata ba sehlooho sena, ha ke e-s'o ngole mona ka nako e telele, 'me ho na le khoutu e ngata haholo ho totobatsa likarolo tsa bohlokoa. Li-noodle, ka bokhutšoanyane.

Haeba ke bona thahasello sehloohong, ho tla ba le karolo ea bobeli - e tla ba le tlhokofatso ea ka ka li-plugins bakeng sa srcds (Mohloli o inehetseng seva), 'me, mohlomong, tsamaiso ea litekanyetso le mini-dotabuff, sebaka se nang le lipalo-palo tsa papali.

Lihokelo tse ling:

  1. Webosaete ea rona (lipalo, boardboard, leqephe le lenyane la ho fihla le khoaso ea bareki)
  2. Seva ea discord

Source: www.habr.com

Eketsa ka tlhaloso