рдЖрдореНрд╣реА Dota 2014 рд╕рд╛рдареА рдореЕрдЪрдореЗрдХрд┐рдВрдЧ рд▓рд┐рд╣рд┐рдд рдЖрд╣реЛрдд

рдирдорд╕реНрдХрд╛рд░.

рдпрд╛ рд╡рд╕рдВрдд рдЛрддреВрдордзреНрдпреЗ рдорд▓рд╛ рдПрдХ рдкреНрд░рдХрд▓реНрдк рдЖрд▓рд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдореБрд▓рд╛рдВрдиреА рдбреЛрдЯрд╛ 2 рд╕рд░реНрд╡реНрд╣рд░ рдЖрд╡реГрддреНрддреА 2014 рдХрд╢реА рдЪрд╛рд▓рд╡рд╛рдпрдЪреА рдЖрдгрд┐ рддреНрдпрд╛рдиреБрд╕рд╛рд░, рддреНрдпрд╛рд╡рд░ рдЦреЗрд│рдгреЗ рд╢рд┐рдХрд▓реЗ. рдореА рдпрд╛ рдЦреЗрд│рд╛рдЪрд╛ рдЦреВрдк рдореЛрдард╛ рдЪрд╛рд╣рддрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдореА рдорд╛рдЭреНрдпрд╛ рдмрд╛рд▓рдкрдгрд╛рдд рд╕реНрд╡рддрдГрд▓рд╛ рд╡рд┐рд╕рд░реНрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╣реА рдЕрдиреЛрдЦреА рд╕рдВрдзреА рд╕реЛрдбреВ рд╢рдХрд▓реЛ рдирд╛рд╣реА.

рдореА рдЦреВрдк рдЦреЛрд▓рд╡рд░ рдбреЛрд╡реНрд╣ рдХреЗрд▓реЗ рдЖрдгрд┐ рдЕрд╕реЗ рдШрдбрд▓реЗ рдХреА рдореА рдПрдХ рдбрд┐рд╕реНрдХреЙрд░реНрдб рдмреЙрдЯ рд▓рд┐рд╣рд┐рд▓рд╛ рдЬреЛ рдЧреЗрдордЪреНрдпрд╛ рдЬреБрдиреНрдпрд╛ рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ рд╕рдорд░реНрдерд┐рдд рдирд╕рд▓реЗрд▓реНрдпрд╛ рдЬрд╡рд│рдЬрд╡рд│ рд╕рд░реНрд╡ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗ рдореЕрдЪрдореЗрдХрд┐рдВрдЧ.
рдмреЙрдЯрд╕рд╣ рд╕рд░реНрд╡ рдирд╡рдХрд▓реНрдкрдирд╛ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рд▓реЙрдмреА рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рддрдпрд╛рд░ рдХреЗрд▓реА рдЧреЗрд▓реА. рдЖрдореНрд╣реА рд╕рдВрджреЗрд╢рд╛рд╡рд░ 10 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЧреЛрд│рд╛ рдХреЗрд▓реНрдпрд╛ рдЖрдгрд┐ рдореЕрдиреНрдпреБрдЕрд▓реА рд╕рд░реНрд╡реНрд╣рд░ рдПрдХрддреНрд░ рдХреЗрд▓рд╛, рдХрд┐рдВрд╡рд╛ рд╕реНрдерд╛рдирд┐рдХ рд▓реЙрдмреА рд╣реЛрд╕реНрдЯ рдХреЗрд▓реА.

рдЖрдореНрд╣реА Dota 2014 рд╕рд╛рдареА рдореЕрдЪрдореЗрдХрд┐рдВрдЧ рд▓рд┐рд╣рд┐рдд рдЖрд╣реЛрдд

рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореНрд╣рдгреВрди рдорд╛рдЭрд╛ рд╕реНрд╡рднрд╛рд╡ рдЗрддрдХрд╛ рдореЕрдиреНрдпреБрдЕрд▓ рдХрд╛рдо рд╕рд╣рди рдХрд░реВ рд╢рдХрд▓рд╛ рдирд╛рд╣реА рдЖрдгрд┐ рд░рд╛рддреНрд░рднрд░ рдореА рдмреЙрдЯрдЪреА рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреА рдЖрд╡реГрддреНрддреА рд░реЗрдЦрд╛рдЯрд▓реА, рдЬреНрдпрд╛рдиреЗ 10 рд▓реЛрдХ рдЕрд╕рддрд╛рдирд╛ рд╕рд░реНрд╡реНрд╣рд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╡рд╛рдврд╡рд▓рд╛.

рдореА рддрд╛рдмрдбрддреЛрдм рдиреЛрдбрдЬрдордзреНрдпреЗ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛, рдХрд╛рд░рдг рдорд▓рд╛ рдкрд╛рдпрдерди рдЦрд░реЛрдЦрд░ рдЖрд╡рдбрдд рдирд╛рд╣реА рдЖрдгрд┐ рдорд▓рд╛ рдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдЕрдзрд┐рдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╡рд╛рдЯрддреЗ.

Discord рд╕рд╛рдареА рдмреЙрдЯ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рд╣рд╛ рдорд╛рдЭрд╛ рдкрд╣рд┐рд▓рд╛ рдЕрдиреБрднрд╡ рдЖрд╣реЗ, рдкрдг рддреЛ рдЕрдЧрджреА рд╕реЛрдкрд╛ рд╣реЛрддрд╛. рдЕрдзрд┐рдХреГрдд npm рдореЙрдбреНрдпреВрд▓ discord.js рд╕рдВрджреЗрд╢рд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЧреЛрд│рд╛ рдХрд░рдгреЗ рдЗрддреНрдпрд╛рджреАрд╕рд╛рдареА рд╕реЛрдпреАрд╕реНрдХрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ.

рдЕрд╕реНрд╡реАрдХрд░рдг: рд╕рд░реНрд╡ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЗ "рд╡рд░реНрддрдорд╛рди" рдЖрд╣реЗрдд, рдпрд╛рдЪрд╛ рдЕрд░реНрде рддреЗ рд░рд╛рддреНрд░реА рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдВрдордзреВрди рдЧреЗрд▓реЗ рдЖрд╣реЗрдд.

рдореЕрдЪрдореЗрдХрд┐рдВрдЧрдЪрд╛ рдЖрдзрд╛рд░ рд╣рд╛ рдПрдХ "рд░рд╛рдВрдЧ" рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЬреНрдпрд╛ рдЦреЗрд│рд╛рдбреВрдВрдирд╛ рдЦреЗрд│рд╛рдпрдЪреЗ рдЖрд╣реЗ рддреНрдпрд╛рдВрдирд╛ рдареЗрд╡рд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдЦреЗрд│ рдирдХреЛ рдЕрд╕рддрд╛рдирд╛ рдХрд┐рдВрд╡рд╛ рд╢реЛрдзреВрди рдХрд╛рдврд▓рд╛ рдЬрд╛рддреЛ.

"рдЦреЗрд│рд╛рдбреВ" рдЪреЗ рд╕рд╛рд░ рдЕрд╕реЗ рджрд┐рд╕рддреЗ. рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рддреЛ Discord рдордзреНрдпреЗ рдлрдХреНрдд рдПрдХ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрдпрдбреА рд╣реЛрддрд╛, рдкрд░рдВрддреБ рд╕рд╛рдЗрдЯрд╡рд░реВрди рдЧреЗрдо рд▓реЙрдиреНрдЪ/рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдкреНрд░рдердо рдЧреЛрд╖реНрдЯреА.

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

рдЖрдгрд┐ рдпреЗрдереЗ рд░рд╛рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрд╣реЗ. рдпреЗрдереЗ, "рдЦреЗрд│рд╛рдбреВ" рдРрд╡рдЬреА, "рдЧрдЯ" рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ. рдПрдХрд╛ рдЦреЗрд│рд╛рдбреВрд╕рд╛рдареА, рдЧрдЯрд╛рдд рд╕реНрд╡рдд:рдЪрд╛ рдЖрдгрд┐ рдЧрдЯрд╛рддреАрд▓ рдЦреЗрд│рд╛рдбреВрдВрд╕рд╛рдареА рдЕрдиреБрдХреНрд░рдореЗ, рдЧрдЯрд╛рддреАрд▓ рд╕рд░реНрд╡ рдЦреЗрд│рд╛рдбреВрдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрддреЛ.

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
}

рдореА рдкреНрд░рд╕рдВрдЧрд╛рдВрдЪреА рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреЗ рдард░рд╡рд▓реЗ. рд╣реЗ рдкреНрд░рдХрд░рдгрд╛рдВрд╕рд╛рдареА рдпреЛрдЧреНрдп рд╣реЛрддреЗ - "10 рд▓реЛрдХрд╛рдВрд╕рд╛рдареА рдПрдХ рдЧреЗрдо рд╕рд╛рдкрдбрд▓рд╛" рдЗрд╡реНрд╣реЗрдВрдЯрд╡рд░, рдЖрдкрдг рдЦрд╛рдЬрдЧреА рд╕рдВрджреЗрд╢рд╛рдВрдордзреНрдпреЗ рдЦреЗрд│рд╛рдбреВрдВрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдореВрд▓рднреВрдд рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХ рдкреВрд░реНрдг рдХрд░реВ рд╢рдХрддрд╛ - рддрдпрд╛рд░реА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА, рд▓реЙрдмреА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд░реНрдп рд╕реБрд░реВ рдХрд░рд╛. рдкреНрд░рдХреНрд╖реЗрдкрдгрд╛рд╕рд╛рдареА, рдЗ.

IOC рд╕рд╛рдареА рдореА InversifyJS рд╡рд╛рдкрд░рддреЛ. рдорд▓рд╛ рдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реАрдд рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдирдВрджрджрд╛рдпреА рдЕрдиреБрднрд╡ рдЖрд╣реЗ. рдЬрд▓рдж рдЖрдгрд┐ рд╕реЛрдкреЗ!

рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЕрдиреЗрдХ рд░рд╛рдВрдЧрд╛ рдЖрд╣реЗрдд - рдЖрдореНрд╣реА 1x1, рд╕рд╛рдорд╛рдиреНрдп/рд░реЗрдЯ рдХреЗрд▓реЗрд▓реЗ рдЖрдгрд┐ рдХрд╛рд╣реА рд╕рд╛рдиреБрдХреВрд▓ рдореЛрдб рдЬреЛрдбрд▓реЗ рдЖрд╣реЗрдд. рдореНрд╣рдгреВрди, рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд░реВрдо рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЖрд╣реЗ рдЬреА рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрдгрд┐ рдЧреЗрдо рд╢реЛрдз рдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рдЖрд╣реЗ.

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

(рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рдХрд╢рд╛ рджрд┐рд╕рддрд╛рдд рдпрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб рдиреВрдбрд▓реНрд╕)

рдпреЗрдереЗ рдореА рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗрд▓реНрдпрд╛ рдЧреЗрдо рдореЛрдбрд╕рд╛рдареА рд░рд╛рдВрдЧ рд╕реБрд░реВ рдХрд░рддреЛ рдЖрдгрд┐ рд░рд╛рдВрдЧ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдХрд╛рд╣реА рд╕рдВрдШрд░реНрд╖ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА "рдЧрдЯ" рдордзреАрд▓ рдмрджрд▓ рджреЗрдЦреАрд▓ рдРрдХрддреЛ.

рддрд░, рдЪрд╛рдВрдЧрд▓реЗ рдХреЗрд▓реЗ, рдореА рдХреЛрдбрдЪреЗ рддреБрдХрдбреЗ рдШрд╛рддрд▓реЗ рдЬреНрдпрд╛рдВрдЪрд╛ рд╡рд┐рд╖рдпрд╛рд╢реА рдХрд╛рд╣реАрд╣реА рд╕рдВрдмрдВрдз рдирд╛рд╣реА рдЖрдгрд┐ рдЖрддрд╛ рдереЗрдЯ рдореЕрдЪрдореЗрдХрд┐рдВрдЧрдХрдбреЗ рдЬрд╛рдКрдпрд╛.

рдЪрд▓рд╛ рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдпрд╛:

1) рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдЦреЗрд│рд╛рдпрдЪреЗ рдЖрд╣реЗ.

реи) рд╢реЛрдз рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреЛ Gateway=Discord рд╡рд╛рдкрд░рддреЛ, рдореНрд╣рдгрдЬреЗрдЪ рд╕рдВрджреЗрд╢рд╛рд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЛ:

рдЖрдореНрд╣реА Dota 2014 рд╕рд╛рдареА рдореЕрдЪрдореЗрдХрд┐рдВрдЧ рд▓рд┐рд╣рд┐рдд рдЖрд╣реЛрдд

3) рд╣рд╛ рдЧреЗрдЯрд╡реЗ рд░реВрдорд╕рд░реНрд╡реНрд╣рд┐рд╕рд╡рд░ рдЬрд╛рддреЛ рдЖрдгрд┐ рдореНрд╣рдгрддреЛ тАЬрд╡рд┐рд╡рд╛рджрд╛рддреАрд▓ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рд░рд╛рдВрдЧреЗрдд рдкреНрд░рд╡реЗрд╢ рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ, рдореЛрдб: рдЕрдирд░реЗрдЯ рдХреЗрд▓реЗрд▓рд╛ рдЧреЗрдо.тАЭ

4) рд░реВрдорд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЧреЗрдЯрд╡реЗрдЪреА рд╡рд┐рдирдВрддреА рд╕реНрд╡реАрдХрд╛рд░рддреЗ рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ (рдЕрдзрд┐рдХ рддрдВрддреЛрддрдВрдд, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЧрдЯ) рдЗрдЪреНрдЫрд┐рдд рд░рд╛рдВрдЧреЗрдд рдврдХрд▓рддреЗ.

5) рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдЦреЗрд│рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрд░реЗрд╕реЗ рдЦреЗрд│рд╛рдбреВ рдЖрд╣реЗрдд рдХреА рдирд╛рд╣реА рд╣реЗ рд░рд╛рдВрдЧ рддрдкрд╛рд╕рддреЗ. рд╢рдХреНрдп рдЕрд╕рд▓реНрдпрд╛рд╕, рдЗрд╡реНрд╣реЗрдВрдЯ рд╕реЛрдбрд╛:

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

6) рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╛рдЪреНрдпрд╛ рдЙрддреНрдХрдВрдард╛рдкреВрд░реНрдг рдЕрдкреЗрдХреНрд╖реЗрдиреЗ рд░реВрдорд╕рд░реНрд╡реНрд╣рд┐рд╕ рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдВрдЧреЗрдд рдЖрдирдВрджрд╛рдиреЗ рдРрдХрдд рдЖрд╣реЗ. рдЖрдореНрд╣рд╛рд▓рд╛ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдЦреЗрд│рд╛рдбреВрдВрдЪреА рдпрд╛рджреА рдорд┐рд│рддреЗ, рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреВрди рдПрдХ рдЖрднрд╛рд╕реА тАЬрдЦреЛрд▓реАтАЭ рддрдпрд╛рд░ рд╣реЛрддреЗ рдЖрдгрд┐ рдЕрд░реНрдерд╛рддрдЪ, рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬрд╛рд░реА рдХрд░рддреЛ:

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) рдореНрд╣рдгреВрди рдЖрдореНрд╣реА "рд╕рд░реНрд╡реЛрдЪреНрдЪ" рдЕрдзрд┐рдХрд╛рд░реА - рд╡рд░реНрдЧрд╛рдХрдбреЗ рдкреЛрд╣реЛрдЪрд▓реЛ рдмреЙрдЯ. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рддреЛ рдЧреЗрдЯрд╡реЗ (рд░рд╢рд┐рдпрди рднрд╛рд╖реЗрдд рддреЗ рдХрд┐рддреА рдордЬреЗрджрд╛рд░ рджрд┐рд╕рддреЗ рд╣реЗ рдорд▓рд╛ рд╕рдордЬреВ рд╢рдХрдд рдирд╛рд╣реА) рдЖрдгрд┐ рдореЕрдЪрдореЗрдХрд┐рдВрдЧрдЪреЗ рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХ рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдХрдиреЗрдХреНрд╢рдирд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ. рдмреЙрдЯ рдЗрд╡реНрд╣реЗрдВрдЯ рдРрдХрддреЛ рдЖрдгрд┐ рдбрд┐рд╕реНрдХреЙрд░реНрдбрдЧреЗрдЯрд╡реЗрд▓рд╛ рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рддрддреНрдкрд░рддрд╛ рддрдкрд╛рд╕рдгреА рдкрд╛рдард╡рдгреНрдпрд╛рдЪреЗ рдЖрджреЗрд╢ рджреЗрддреЛ.

рдЖрдореНрд╣реА Dota 2014 рд╕рд╛рдареА рдореЕрдЪрдореЗрдХрд┐рдВрдЧ рд▓рд┐рд╣рд┐рдд рдЖрд╣реЛрдд

8) рдЬрд░ рдХреЛрдгреА 3 рдорд┐рдирд┐рдЯрд╛рдВрдЪреНрдпрд╛ рдЖрдд рдЦреЗрд│ рдирд╛рдХрд╛рд░рд▓рд╛ рдХрд┐рдВрд╡рд╛ рд╕реНрд╡реАрдХрд╛рд░рд▓рд╛ рдирд╛рд╣реА рддрд░ рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рд░рд╛рдВрдЧреЗрдд рдкрд░рдд рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рдЖрдореНрд╣реА рдЗрддрд░ рд╕рд░реНрд╡рд╛рдВрдирд╛ рд░рд╛рдВрдЧреЗрдд рдкрд░рдд рдХрд░рддреЛ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ 10 рд▓реЛрдХ рд╣реЛрдИрдкрд░реНрдпрдВрдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЛ. рдЬрд░ рд╕рд░реНрд╡ рдЦреЗрд│рд╛рдбреВрдВрдиреА рдЦреЗрд│ рд╕реНрд╡реАрдХрд╛рд░рд▓рд╛ рдЕрд╕реЗрд▓ рддрд░ рдордиреЛрд░рдВрдЬрдХ рднрд╛рдЧ рд╕реБрд░реВ рд╣реЛрддреЛ.

рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡реНрд╣рд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди

рдЖрдордЪреЗ рдЧреЗрдо Windows рд╕рд░реНрд╡реНрд╣рд░ 2012 рд╕рд╣ VDS рд╡рд░ рд╣реЛрд╕реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗрдд. рдпрд╛рд╡рд░реВрди рдЖрдкрдг рдЕрдиреЗрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдвреВ рд╢рдХрддреЛ:

  1. рддреНрдпрд╛рд╡рд░ рдПрдХрд╣реА рдбреЙрдХрд░ рдирд╛рд╣реА, рдЬреЛ рдорд╛рдЭреНрдпрд╛ рд╣реГрджрдпрд╛рд╡рд░ рдЖрджрд│рд▓рд╛
  2. рдЖрдореНрд╣реА рднрд╛рдбреНрдпрд╛рдд рдмрдЪрдд рдХрд░рддреЛ

Linux рд╡рд░ VPS рд╡рд░реВрди VDS рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд▓рд╡рдгреЗ рд╣реЗ рдХрд╛рд░реНрдп рдЖрд╣реЗ. рдореА рдлреНрд▓рд╛рд╕реНрдХрдордзреНрдпреЗ рдПрдХ рд╕рд╛рдзрд╛ рд╕рд░реНрд╡реНрд╣рд░ рд▓рд┐рд╣рд┐рд▓рд╛. рд╣реЛрдп, рдорд▓рд╛ рдкрд╛рдпрдерди рдЖрд╡рдбрдд рдирд╛рд╣реА, рдкрдг рддреБрдореНрд╣реА рдХрд╛рдп рдХрд░реВ рд╢рдХрддрд╛? рд╣рд╛ рд╕рд░реНрд╡реНрд╣рд░ рддреНрдпрд╛рд╡рд░ рд▓рд┐рд╣рд┐рдгреЗ рдЬрд▓рдж рдЖрдгрд┐ рд╕реЛрдкреЗ рдЖрд╣реЗ.

рд╣реЗ 3 рдХрд╛рд░реНрдпреЗ рдХрд░рддреЗ:

  1. рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╣ рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рдХрд░рдгреЗ - рдирдХрд╛рд╢рд╛ рдирд┐рд╡рдбрдгреЗ, рдЧреЗрдо рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЦреЗрд│рд╛рдбреВрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЖрдгрд┐ рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╕рдВрдЪ. рдореА рдЖрддрд╛ рдкреНрд▓рдЧрдЗрдиреНрд╕рдмрджреНрджрд▓ рд▓рд┐рд╣рд┐рдгрд╛рд░ рдирд╛рд╣реА - рд░рд╛рддреНрд░реА рдЕрд╢реНрд░реВ рдЖрдгрд┐ рдлрд╛рдЯрд▓реЗрд▓реНрдпрд╛ рдХреЗрд╕рд╛рдВрдиреА рдорд┐рд╕рд│рд▓реЗрд▓реА рдХреЙрдлреАрдЪреА рд╣реА рдПрдХ рд╡реЗрдЧрд│реА рдХрдерд╛ рдЖрд╣реЗ.
  2. рдЕрдпрд╢рд╕реНрд╡реА рдХрдиреЗрдХреНрд╢рдирдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рд╕рд░реНрд╡реНрд╣рд░ рдерд╛рдВрдмрд╡рдгреЗ/рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреЗ, рдЬреЗ рдЖрдореНрд╣реА рдлрдХреНрдд рдореЕрдиреНрдпреБрдЕрд▓реА рд╣рд╛рддрд╛рд│реВ рд╢рдХрддреЛ.

рдпреЗрдереЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЖрд╣реЗ, рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЗ рджреЗрдЦреАрд▓ рдпреЛрдЧреНрдп рдирд╛рд╣реАрдд. 100 рдУрд│реАрдВрдЪреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдореНрд╣рдгреВрди, рдЬреЗрд╡реНрд╣рд╛ 10 рд▓реЛрдХрд╛рдВрдиреА рдПрдХрддреНрд░ рдпреЗрдКрди рдЧреЗрдо рд╕реНрд╡реАрдХрд╛рд░рд▓рд╛, рддреЗрд╡реНрд╣рд╛ рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рдЭрд╛рд▓рд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрдЬрдг рдЦреЗрд│рдгреНрдпрд╛рд╕рд╛рдареА рдЙрддреНрд╕реБрдХ рд╣реЛрддрд╛, рдЦрд╛рдЬрдЧреА рд╕рдВрджреЗрд╢рд╛рдВрдордзреНрдпреЗ рдЧреЗрдорд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд▓рд┐рдВрдХ рдкрд╛рдард╡рд┐рд▓реА рдЧреЗрд▓реА.

рдЖрдореНрд╣реА Dota 2014 рд╕рд╛рдареА рдореЕрдЪрдореЗрдХрд┐рдВрдЧ рд▓рд┐рд╣рд┐рдд рдЖрд╣реЛрдд

рджреБрд╡реНрдпрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░реВрди, рдЦреЗрд│рд╛рдбреВ рдЧреЗрдо рд╕рд░реНрд╡реНрд╣рд░рд╢реА рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЛ рдЖрдгрд┐ рдордЧ рддреЗрдЪ. ~25 рдорд┐рдирд┐рдЯрд╛рдВрдирдВрддрд░, рдЦреЗрд│рд╛рдбреВрдВрд╕рд╣ рдЖрднрд╛рд╕реА тАЬрдЦреЛрд▓реАтАЭ рд╕рд╛рдл рдХреЗрд▓реА рдЬрд╛рддреЗ.

рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рдЕрд╕реНрддрд╛рд╡реНрдпрд╕реНрддрдкрдгрд╛рдмрджреНрджрд▓ рдореА рдЖрдЧрд╛рдК рдорд╛рдлреА рдорд╛рдЧрддреЛ, рдореА рдпреЗрдереЗ рдмрд░реЗрдЪ рджрд┐рд╡рд╕ рд▓рд┐рд╣рд┐рд▓реЗ рдирд╛рд╣реА рдЖрдгрд┐ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рд╡рд┐рднрд╛рдЧ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЦреВрдк рдХреЛрдб рдЖрд╣реЗ. рдиреВрдбрд▓реНрд╕, рдереЛрдбрдХреНрдпрд╛рдд.

рдЬрд░ рдорд▓рд╛ рд╡рд┐рд╖рдпрд╛рдд рд╕реНрд╡рд╛рд░рд╕реНрдп рджрд┐рд╕рд▓реЗ, рддрд░ рджреБрд╕рд░рд╛ рднрд╛рдЧ рдЕрд╕реЗрд▓ - рддреНрдпрд╛рдд srcds (рд╕реНрд░реЛрдд рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡реНрд╣рд░) рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирд╕рд╣ рдорд╛рдЭрд╛ рддреНрд░рд╛рд╕ рдЖрдгрд┐ рдХрджрд╛рдЪрд┐рдд, рд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЖрдгрд┐ рдорд┐рдиреА-рдбреЛрдЯрд╛рдмрдл, рдЧреЗрдо рдЖрдХрдбреЗрд╡рд╛рд░реАрд╕рд╣ рд╕рд╛рдЗрдЯ рдЕрд╕реЗрд▓.

рдХрд╛рд╣реА рд▓рд┐рдВрдХреНрд╕:

  1. рдЖрдордЪреА рд╡реЗрдмрд╕рд╛рдЗрдЯ (рдЖрдХрдбреЗрд╡рд╛рд░реА, рд▓реАрдбрд░рдмреЛрд░реНрдб, рд▓рд╣рд╛рди рд▓рдБрдбрд┐рдВрдЧ рдкреГрд╖реНрда рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб)
  2. рдбрд┐рд╕реНрдХреЙрд░реНрдб рд╕рд░реНрд╡реНрд╣рд░

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛