рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдореМрдЬреВрджрд╛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдПрдХреАрдХрд░рдг рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╕рддрдд рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗрд╡рд▓ рдХреБрдЫ рдХрдорд╛рдВрдб рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдкрд╛рд╕ рдЕрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЯреАрдорд╕рд┐рдЯреА - рдЯреАрдорд╕рд┐рдЯреА рдирд┐рд░реАрдХреНрд╖рдг рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ - рд╕реА, рд╕реА++, рд╕реА# рдФрд░ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ, рдЬрд┐рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдВрдбреЛрдЬрд╝, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рди рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рддрд░рдг рд╕реЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рд╕реАрдПрд▓ рдореЙрдирд┐рдЯрд░ - рдПрдХ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рд▓реЙрдиреНрдЪ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдиреВрдкрд┐рдВрдЧ рдореЛрдб рдореЗрдВ, рд╕рд░реНрд╡рд░ рд╕рднреА рд╕рдорд░реНрдерд┐рдд рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд░рди рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ C/C++ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд▓реЙрдЧ рдХрдирд╡рд░реНрдЯрд░ - рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ред

рдЕрдзреНрдпрдпрдирд╛рдзреАрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА

рдЖрдЗрдП рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЖрдЬрд╝рдорд╛рдПрдБ - рдЖрдЗрдП OpenRCT2 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред

рдУрдкрдирдЖрд░рд╕реАрдЯреА2 - рдЧреЗрдо рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 (рдЖрд░рд╕реАрдЯреА2) рдХрд╛ рдПрдХ рдЦреБрд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЗрд╕реЗ рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдмрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдирд╛ред рдЧреЗрдордкреНрд▓реЗ рдПрдХ рдордиреЛрд░рдВрдЬрди рдкрд╛рд░реНрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдШреВрдорддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд╡рд╛рд░реА, рджреБрдХрд╛рдиреЗрдВ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдореЗрд╣рдорд╛рдиреЛрдВ рдХреЛ рдЦреБрд╢ рд░рдЦрддреЗ рд╣реБрдП рд▓рд╛рдн рдХрдорд╛рдиреЗ рдФрд░ рдкрд╛рд░реНрдХ рдХреА рдЕрдЪреНрдЫреА рдкреНрд░рддрд┐рд╖реНрдард╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред OpenRCT2 рдЖрдкрдХреЛ рдкрд░рд┐рджреГрд╢реНрдп рдФрд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рджреЛрдиреЛрдВ рдореЗрдВ рдЦреЗрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдордп рдХреЗ рднреАрддрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рддрд┐рдмрдВрдз рдпрд╛ рд╡рд┐рддреНрдд рдХреЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдкрд╛рд░реНрдХ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕рдорд╛рдпреЛрдЬрди

рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рдВрднрд╡рддрдГ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдФрд░ рдЙрд╕ рдХреНрд╖рдг рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ рдЬрдм рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЯреАрдорд╕рд┐рдЯреА рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: {рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ} (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:9090) рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░рд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪреБрдиреЗрдВ рдФрд░ рдлрд╝реАрд▓реНрдб рднрд░реЗрдВред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдмрдирд╛рдПрдВ, рд╣рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд╛рд▓реА рдПрдХ рд╡рд┐рдВрдбреЛ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЖрдЗрдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдмрд┐рд▓реНрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдВ.

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ рдФрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдмрдирд╛рдПрдВ. рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдЬреЛ рдЖрдкрд╕реЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреА рд╣реИред рдЪреВрдБрдХрд┐ рд╕реНрд░реЛрдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕реНрдерд┐рдд рд╣реИрдВ, рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рд╕реНрдХрд┐рдк.

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЖрдЗрдП рдЕрд╕реЗрдВрдмрд▓реА рдЪрд░рдг рдЬреЛрдбрд╝реЗрдВ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ: рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдкреНрд╕ -> рдмрд┐рд▓реНрдб рд╕реНрдЯреЗрдк рдЬреЛрдбрд╝реЗрдВ.

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдпрд╣рд╛рдВ рд╣рдо рдЪреБрдирддреЗ рд╣реИрдВ:

  • рдзрд╛рд╡рдХ рдкреНрд░рдХрд╛рд░ -> рдХрдорд╛рдВрдб рд▓рд╛рдЗрди
  • рдЪрд▓рд╛рдПрдБ -> рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рдЪреВрдВрдХрд┐ рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХ рдХрджрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рд╣рдо рдмрд╛рдж рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдгреЛрдВ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдХрд░рдиреЗ, рдЙрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ, рд░рд┐рдкреЛрд░реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрд╕реЗ рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдЧреНрдпрд╛рд░рд╣ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд▓рдЧрддреА рд╣реИрдВред

рдЖрдЦрд┐рд░реА рдЪреАрдЬрд╝ рдЬреЛ рд╣рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ: рдкреИрд░рд╛рдореАрдЯрд░ -> рдирдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рддреАрди рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЖрдкрдХреЛ рдмрд╕ рдмрдЯрди рджрдмрд╛рдирд╛ рд╣реИ рд░рди рдКрдкрд░реА рджрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ. рдЬрдмрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

рд╕реАрдзреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдирд╡реАрдирддрдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЪреЙрдХрд▓реЗрдЯреА рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЬреЛ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реВрдк рд╣реИ рд▓реЗрдЦ:

choco install pvs-studio -y

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдЗрдП CLMonitor рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рдЯреНрд░реИрдХрд┐рдВрдЧ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред

%CLmon% monitor тАУ-attach

рдлрд┐рд░ рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдПрдВрдЧреЗ MSB рдпрд╣ MSBuild рдХреЗ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкрде рд╣реИ рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдмрдирд╛рдирд╛ рд╣реИ

%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable

рдЖрдЗрдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рджрд░реНрдЬ рдХрд░реЗрдВ:

%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%

рдирд┐рд░реНрдорд╛рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдкреВрд░реНрд╡-рд╕рдВрд╕рд╛рдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CLMonitor рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБ:

%CLmon% analyze -l "c:ptest.plog"

рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рддрд░рдг рд╕реЗ рджреВрд╕рд░реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред PlogConverter рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдк рд╕реЗ TeamCity-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЗрд╕реЗ рд╕реАрдзреЗ рдмрд┐рд▓реНрдб рд╡рд┐рдВрдбреЛ рдореЗрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗред

%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"

рдЕрдВрддрд┐рдо рдЪрд░рдг рд╕реНрд╡рд░реВрдкрд┐рдд рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ stdout, рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЯреАрдорд╕рд┐рдЯреА рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

type "C:tempptest.plog_TeamCity.txt"

рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб:

choco install pvs-studio -y
%CLmon% monitor --attach
set platform=x64
%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable
%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%
%CLmon% analyze -l "c:ptest.plog"
%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"
type "C:tempptest.plog_TeamCity.txt"

рдЗрд╕ рдмреАрдЪ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рдВрдпреЛрдЬрди рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЯреИрдм рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ ╨╕ ╤Г╨▒╨╡╨┤╨╕╤В╤М╤Б╤П ╨▓ ╤В╨╛╨╝.

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЕрдм рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рдХреБрд▓ рдирд┐рд░реАрдХреНрд╖рдгрд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдВ:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдирдВрдмрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╡рд╛рд▓рд╛ рдПрдХ рдирдпрд╛ рдЯреИрдм рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдирдВрдмрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рднреА рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рджреВрд░рд╕реНрде рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рдВрднрд╡ рд╣реИ рд╕реЛрд░реНрд╕рдЯреНрд░реАрд░реВрдЯ рдорд╛рд░реНрдХрд░. рдЬреЛ рдХреЛрдИ рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЗрд╕ рддрд░реАрдХреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдкреНрд░рд▓реЗрдЦрди.

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдирд╛

рдЕрдм рдЬрдм рд╣рдордиреЗ рдмрд┐рд▓реНрдб рдХрд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдЬрд┐рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдо рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ рдорд┐рд▓реА рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рдЪреЗрддрд╛рд╡рдиреА N1

V773 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-401] рдЕрдкрд╡рд╛рдж рдХреЛ 'рдкрд░рд┐рдгрд╛рдо' рд╕реВрдЪрдХ рдЬрд╛рд░реА рдХрд┐рдП рдмрд┐рдирд╛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╕рдВрднрд╡ рд╣реИ. libopenrct2 рдСрдмреНрдЬреЗрдХреНрдЯрдлреИрдХреНрдЯрд░реА.рд╕реАрдкреАрдкреА 443

Object* CreateObjectFromJson(....)
{
  Object* result = nullptr;
  ....
  result = CreateObject(entry);
  ....
  if (readContext.WasError())
  {
    throw std::runtime_error("Object has errors");
  }
  ....
}

Object* CreateObject(const rct_object_entry& entry)
{
  Object* result;
  switch (entry.GetType())
  {
    case OBJECT_TYPE_RIDE:
      result = new RideObject(entry);
      break;
    case OBJECT_TYPE_SMALL_SCENERY:
      result = new SmallSceneryObject(entry);
      break;
    case OBJECT_TYPE_LARGE_SCENERY:
      result = new LargeSceneryObject(entry);
      break;
    ....
    default:
      throw std::runtime_error("Invalid object type");
  }
  return result;
}

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдореЗрдореЛрд░реА рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЦреА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ, рдЬрдм рдХреЛрдИ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореЗрдореЛрд░реА рд╕рд╛рдлрд╝ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЪреЗрддрд╛рд╡рдиреА N2

V501 '|' рдХреЗ рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ '(1ULL << WIDX_MONTH_BOX)' рд╣реИрдВред рдСрдкрд░реЗрдЯрд░ред libopenrct2ui Cheats.cpp 487

static uint64_t window_cheats_page_enabled_widgets[] = 
{
  MAIN_CHEAT_ENABLED_WIDGETS |
  (1ULL << WIDX_NO_MONEY) |
  (1ULL << WIDX_ADD_SET_MONEY_GROUP) |
  (1ULL << WIDX_MONEY_SPINNER) |
  (1ULL << WIDX_MONEY_SPINNER_INCREMENT) |
  (1ULL << WIDX_MONEY_SPINNER_DECREMENT) |
  (1ULL << WIDX_ADD_MONEY) |
  (1ULL << WIDX_SET_MONEY) |
  (1ULL << WIDX_CLEAR_LOAN) |
  (1ULL << WIDX_DATE_SET) |
  (1ULL << WIDX_MONTH_BOX) |  // <=
  (1ULL << WIDX_MONTH_UP) |
  (1ULL << WIDX_MONTH_DOWN) |
  (1ULL << WIDX_YEAR_BOX) |
  (1ULL << WIDX_YEAR_UP) |
  (1ULL << WIDX_YEAR_DOWN) |
  (1ULL << WIDX_DAY_BOX) |
  (1ULL << WIDX_DAY_UP) |
  (1ULL << WIDX_DAY_DOWN) |
  (1ULL << WIDX_MONTH_BOX) |  // <=
  (1ULL << WIDX_DATE_GROUP) |
  (1ULL << WIDX_DATE_RESET),
  ....
};

рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рд╣реА рд▓реЛрдЧ рдЗрд╕ рд╕рд╛рд╡рдзрд╛рдиреА рдкрд░реАрдХреНрд╖рд╛ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдЙрджрд╛рд╣рд░рдг рдареАрдХ рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ N3

V703 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ 'RCT12BannerElement' рдореЗрдВ 'рдЭрдВрдбреЗ' рдлрд╝реАрд▓реНрдб рдмреЗрд╕ рдХреНрд▓рд╛рд╕ 'RCT12TileElementBase' рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: RCT12.h:570, RCT12.h:259ред libopenrct2 RCT12.h 570

struct RCT12SpriteBase
{
  ....
  uint8_t flags;
  ....
};
struct rct1_peep : RCT12SpriteBase
{
  ....
  uint8_t flags;
  ....
};

рдмреЗрд╢рдХ, рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдФрд░ рдбрд┐рд╕реЗрдВрдбреЗрдВрдЯ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рддрдХрдиреАрдХ рд╕реНрд╡рдпрдВ рдорд╛рдирддреА рд╣реИ рдХрд┐ рдореВрд▓ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░ рдЪрд╛рдЗрд▓реНрдб рд╡рд░реНрдЧ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред рд╡рд╛рд░рд┐рд╕ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реЗ рдЦреЗрддреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдХреЗ, рд╣рдо рднреНрд░рдо рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЪреЗрддрд╛рд╡рдиреА N4

V793 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ 'imageDirection/8' рдХрдерди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╢рд░реНрдд рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕ рдмрдпрд╛рди рдХреА рддреБрд▓рдирд╛ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рд╕реЗ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдереА. libopenrct2 рдСрдмреНрдЬрд░реНрд╡реЗрд╢рдирдЯреЙрд╡рд░.cpp 38

void vehicle_visual_observation_tower(...., int32_t imageDirection, ....)
{
  if ((imageDirection / 8) && (imageDirection / 8) != 3)
  {
    ....
  }
  ....
}

рдЖрдУ рд╣рдо рдЗрд╕реЗ рдирдЬрд╝рджреАрдХ рд╕реЗ рджреЗрдЦреЗрдВред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЫрд╡рд┐рджрд┐рд╢рд╛/8 рдпрджрд┐ рдЧрд▓рдд рд╣реЛрдЧрд╛ рдЫрд╡рд┐рджрд┐рд╢рд╛ -7 рд╕реЗ 7 рдХреЗ рдмреАрдЪ рд╣реИред рджреВрд╕рд░рд╛ рднрд╛рдЧ: (рдЗрдореЗрдЬрдбрд╛рдпрд░реЗрдХреНрд╢рди/8) !=3 рдЪреЗрдХреЛрдВ рдЫрд╡рд┐рджрд┐рд╢рд╛ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП: рдХреНрд░рдорд╢рдГ -31 рд╕реЗ -24 рдФрд░ 24 рд╕реЗ 31 рддрдХред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдФрд░, рднрд▓реЗ рд╣реА рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рди рд╣реЛ, рдореИрдВ рдЗрди рд╢рд░реНрддреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЗрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝реЗрдВрдЧреЗ рдФрд░ рдЙрд╕рдХрд╛ рд░рдЦрд░рдЦрд╛рд╡ рдХрд░реЗрдВрдЧреЗред

рдЪреЗрддрд╛рд╡рдиреА N5

V587 рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдЕрдЬреАрдм рдХреНрд░рдо: рдП = рдмреА; рдмреА = рдП; рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬрд╛рдБрдЪреЗрдВ: 1115, 1118. libopenrct2ui MouseInput.cpp 1118

void process_mouse_over(....)
{
  ....
  switch (window->widgets[widgetId].type)
  {
    case WWT_VIEWPORT:
      ebx = 0;
      edi = cursorId;                                 // <=
      // Window event WE_UNKNOWN_0E was called here,
      // but no windows actually implemented a handler and
      // it's not known what it was for
      cursorId = edi;                                 // <=
      if ((ebx & 0xFF) != 0)
      {
        set_cursor(cursorId);
        return;
      }
      break;
      ....
  }
  ....
}

рдпрд╣ рдХреЛрдб рдЦрдВрдб рд╕рдВрднрд╡рддрдГ рд╡рд┐рд╕рдВрдХрд▓рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдлрд┐рд░, рдЫреЛрдбрд╝реА рдЧрдИ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЧреИрд░-рдХрд╛рд░реНрдпрд╢реАрд▓ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрднреА рднреА рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдмрд╛рдХреА рд╣реИрдВ рдХрд░реНрд╕рд░рдЖрдИрдбреА, рдЬрд┐рд╕рдХрд╛ рднреА рдХреЛрдИ рдЦрд╛рд╕ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдЪреЗрддрд╛рд╡рдиреА N6

V1004 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] 'рдкреНрд▓реЗрдпрд░' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 2085, 2094. libopenrct2 Network.cpp 2094

void Network::ProcessPlayerList()
{
  ....
  auto* player = GetPlayerByID(pendingPlayer.Id);
  if (player == nullptr)
  {
    // Add new player.
    player = AddPlayer("", "");
    if (player)                                          // <=
    {
      *player = pendingPlayer;
       if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
       {
         _serverConnection->Player = player;
       }
    }
    newPlayers.push_back(player->Id);                    // <=
  }
  ....
}

рдЗрд╕ рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ; рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕реЗ рддреАрд╕рд░реА рдмрд╛рд░ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП, рдпрд╛ рдЗрд╕реЗ рд╕рд╢рд░реНрдд рдХрдерди рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдореИрдВ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╕реБрдЭрд╛рдКрдВрдЧрд╛:

void Network::ProcessPlayerList()
{
  ....
  auto* player = GetPlayerByID(pendingPlayer.Id);
  if (player == nullptr)
  {
    // Add new player.
    player = AddPlayer("", "");
    if (player)
    {
      *player = pendingPlayer;
      if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
      {
        _serverConnection->Player = player;
      }
      newPlayers.push_back(player->Id);
    }
  }
  ....
}

рдЪреЗрддрд╛рд╡рдиреА N7

V547 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-570] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'name == nullptr' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддреА рд╣реИред libopenrct2 ServerList.cpp 102

std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
  auto name = json_object_get(server, "name");
  .....
  if (name == nullptr || version == nullptr)
  {
    ....
  }
  else
  {
    ....
    entry.name = (name == nullptr ? "" : json_string_value(name));
    ....
  }
  ....
}

рдЖрдк рдПрдХ рд╣реА рдЭрдЯрдХреЗ рдореЗрдВ рдХреЛрдб рдХреА рдХрдард┐рди-рд╕реЗ-рдкрдврд╝рдиреЗ рд╡рд╛рд▓реА рдкрдВрдХреНрддрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдБрдЪ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ nullptr. рдореИрдВ рдХреЛрдб рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ:

std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
  auto name = json_object_get(server, "name");
  .....
  if (name == nullptr || version == nullptr)
  {
    name = ""
    ....
  }
  else
  {
    ....
    entry.name = json_string_value(name);
    ....
  }
  ....
}

рдЪреЗрддрд╛рд╡рдиреА N8

V1048 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-1164] 'ColumnHeaderPressedCurrentState' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╕рдорд╛рди рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред libopenrct2ui CustomListView.cpp 510

void CustomListView::MouseUp(....)
{
  ....
  if (!ColumnHeaderPressedCurrentState)
  {
    ColumnHeaderPressed = std::nullopt;
    ColumnHeaderPressedCurrentState = false;
    Invalidate();
  }
}

рдХреЛрдб рдХрд╛рдлреА рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ. рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдХрдВрдбреАрд╢рди рдореЗрдВ рдпрд╛ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рдЯрд╛рдЗрдкреЛ рддреНрд░реБрдЯрд┐ рдереА рдХреЙрд▓рдорд╣реЗрдбрд░рдкреНрд░реЗрд╕реНрдбрдХрд░рдВрдЯрд╕реНрдЯреЗрдЯ рдЕрд░реНрде рдЕрд╕рддреНрдп.

рдЙрддреНрдкрд╛рджрди

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рдХреЛ рдЖрдкрдХреЗ рдЯреАрдорд╕рд┐рдЯреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд╕рдХреЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рд▓рд╛рдЧрдд рдЕрднреА рднреА рдХрдо рд╣реЛрдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЦрддреНрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖реА рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╡реНрд▓рд╛рджрд┐рд╕реНрд▓рд╛рд╡ рд╕реНрдЯреЛрд▓рд╛рд░реЛрд╡ред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рд╕рддрдд рдПрдХреАрдХрд░рдг: рдЯреАрдорд╕рд┐рдЯреАред рдУрдкрди рд░реЛрд▓рд░рдХреЛрд╕реНрдЯрд░ рдЯрд╛рдЗрдХреВрди 2 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ