Tiri kunyora matchmaking yeDota 2014

Mhoroi munhu wese.

Chirimo ichi ndakasangana nepurojekiti umo vakomana vakadzidza kumhanya iyo Dota 2 server vhezheni 2014 uye, zvinoenderana, tamba pairi. Ndiri mutsigiri mukuru wemutambo uyu, uye handina kukwanisa kusiya uyu mukana wakasiyana wekunyura muhudiki hwangu.

Ini ndinonyura zvakadzika, uye zvakaitika kuti ndakanyora Discord bot iyo inokonzeresa kunenge kuita kwese kusingatsigirwe mushanduro yekare yemutambo, kureva matchmaking.
Pamberi pezvinhu zvese zvitsva ne bot, imba yekutandarira yakagadzirwa nemaoko. Isu takaunganidza gumi maitiro kune meseji uye nemaoko takaunganidza sevha, kana kubata nzvimbo yekutandarira.

Tiri kunyora matchmaking yeDota 2014

Chimiro changu semugadziri wepurogiramu hachikwanisi kumira basa rakawanda remaoko, uye nehusiku humwe ndakanyora shanduro yakapfava yebhoti, iyo yakasimudza sevha pakange paine vanhu gumi.

Ndakabva ndasarudza kunyora mu nodejs, nokuti ini handidi Python, uye ndinonzwa ndakasununguka munzvimbo ino.

Ichi ndicho chiitiko changu chekutanga kunyora bot yeDiscord, asi zvakazove nyore. Iyo yepamutemo npm module discord.js inopa yakanakira interface yekushanda nemameseji, kuunganidza maitiro, nezvimwe.

Disclaimer: Mienzaniso yese yekodhi ndeye "ikozvino", zvichireva kuti vakapfuura nekudzokorora kwakati wandei kwekunyorazve husiku.

Hwaro hwekuita matchmaking ndeye "mutsara" umo vatambi vanoda kutamba vanoiswa mukati uye vanobviswa pavanenge vasingade kana kuwana mutambo.

Izvi ndizvo zvinotaridzika se "mutambi". Pakutanga yaingova id mushandisi muDiscord, asi pane zvirongwa zvekutanga / kutsvaga mitambo kubva pane saiti, asi zvinhu zvekutanga kutanga.

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

Uye heino iyo queue interface. Pano, panzvimbo ye "vatambi," chidimbu muchimiro che "boka" chinoshandiswa. Kumutambi mumwe chete, boka rinomuumba iye, uye kune vatambi vari muboka, zvichiteerana, vevatambi vese vari muboka.

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
}

Ndakasarudza kushandisa zviitiko kuchinjana mamiriro. Yakanga yakakodzera kumatare - pachiitiko "mutambo wevanhu gumi wakawanikwa", unogona kutumira meseji inodiwa kune vatambi mumeseji yakavanzika, uye kuita iyo yakakosha bhizinesi logic - tanga basa rekutarisa kugadzirira, kugadzirira imba yekutandarira. kuvhura, zvichingodaro.

Kune IOC ini ndinoshandisa InversifyJS. Ndine chiitiko chinofadza kushanda neraibhurari iyi. Fast uye nyore!

Tine mitsetse yakati wandei pane yedu server - takawedzera 1x1, yakajairika/yakayerwa, uye akati wandei etsika modhi. Naizvozvo, pane singleton RoomService iri pakati pemushandisi nekutsvaga kwemutambo.

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

(Code noodles kupa pfungwa yekuti maitiro acho anotaridzika sei)

Pano ini ndinotangisa mutsara weimwe neimwe yeanoitwa mutambo modhi, uye zvakare teerera kune shanduko mu "mapoka" kuitira kugadzirisa mitsetse uye kudzivirira kumwe kupokana.

Saka, waita zvakanaka, ndakaisa zvidimbu zvekodhi zvisina chekuita nemusoro wenyaya, uye ikozvino ngatienderere mberi takananga kukugadzira match.

Ngatitarisei nyaya yacho:

1) Mushandisi anoda kutamba.

2) Kuti atange kutsvaga, anoshandisa Gateway=Discord, kureva kuti, anoisa maitiro kune meseji:

Tiri kunyora matchmaking yeDota 2014

3) Iri gedhi rinoenda kuRoomService uye rinoti "Mushandisi kubva ku discord anoda kupinda mumutsara, modhi: mutambo usina kuverengerwa."

4) RoomService inogamuchira chikumbiro chegedhi uye inosundira mushandisi (kunyanya, boka revashandisi) mumutsetse unodiwa.

5) Mutsetse unotarisa pese painenge paine vatambi vakakwana vekutamba. Kana zvichibvira, buritsa chiitiko:

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

6) RoomService zviri pachena kuti iri kuteerera nemufaro kumutsara wega wega mukushushikana kutarisira chiitiko ichi. Isu tinogashira runyorwa rwevatambi sekuisa, gadzira chaiyo "kamuri" kubva kwavari, uye, hongu, buritsa chiitiko:

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) Saka takasvika kune "yepamusoro" chiremera - kirasi Bot. Kazhinji, anobata nekubatana pakati pemagedhi (ini handigoni kunzwisisa kuti inosekesa sei inotaridzika muRussia) uye bhizinesi logic ye matchmaking. Iyo bot inonzwa chiitiko uye inoraira DiscordGateway kutumira cheki yekugadzirira kune vese vashandisi.

Tiri kunyora matchmaking yeDota 2014

8) Kana mumwe munhu akaramba kana kusabvuma mutambo mukati me3 maminetsi, saka isu HATIVAdzosera kumutsetse. Isu tinodzosera vamwe vese kumutsara uye tinomirira kusvika pava nevanhu gumi zvakare. Kana vatambi vese vakagamuchira mutambo, ipapo chikamu chinonakidza chinotanga.

Dedicated server configuration

Mitambo yedu inotambirwa paVDS neWindows server 2012. Kubva pane izvi tinogona kutora mhedziso dzakawanda:

  1. Hapana docker pairi, zvakandibaya pamoyo
  2. Tinochengeta nerendi

Basa nderekumhanyisa maitiro paVDS kubva kuVPS paLinux. Ndakanyora sevha iri nyore muFlask. Hongu, ini handifarire Python, asi chii chaungaite?Inokurumidza uye nyore kunyora iyi sevha pairi.

Inoita 3 mabasa:

  1. Kutanga sevha ine gadziriso - kusarudza mepu, nhamba yevatambi vekutanga mutambo, uye seti yemaplugins. Ini handisi kuzonyora nezve plugins izvozvi - iyo inyaya yakasiyana ine malita ekofi usiku yakasanganiswa nemisodzi nevhudzi rakabvaruka.
  2. Kumisa / kutangazve sevha kana paine kusabudirira kubatana, izvo isu tinogona chete kubata nemaoko.

Zvese zviri nyore pano, mienzaniso yekodhi haina kana yakakodzera. 100 mutsetse script

Saka, vanhu gumi pavakaungana uye vakagamuchira mutambo, sevha yakatangwa uye munhu wese aive nechido chekutamba, chinongedzo chekubatanidza kumutambo chakatumirwa mune zvakavanzika meseji.

Tiri kunyora matchmaking yeDota 2014

Nekudzvanya pane chinongedzo, mutambi anobatanidza kune server yemutambo, uye ndizvozvo. Mushure memaminetsi makumi maviri nemashanu, iyo chaiyo "kamuri" ine vatambi inobviswa.

Ndinokumbira ruregerero pachine nguva nekuda kwekusagadzikana kwechinyorwa, handina kunyora pano kwenguva yakareba, uye kune kodhi yakawandisa yekusimbisa zvikamu zvakakosha. Noodles, muchidimbu.

Kana ndikaona kufarira musoro wenyaya, pachava nechikamu chechipiri - chichava nekurwadziswa kwangu nemapulagi e srcds (Source yakatsaurirwa server), uye, pamwe, rating system uye mini-dotabuff, saiti ine nhamba dzemutambo.

Mamwe ma link:

  1. Webhusaiti yedu (nhamba, bhodhi rekutungamira, diki peji rekumhara uye kurodha mutengi)
  2. Discord server

Source: www.habr.com

Voeg