{"id":500030,"date":"2026-10-23T17:46:54","date_gmt":"2026-10-23T14:46:54","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=500030"},"modified":"2026-10-23T17:46:54","modified_gmt":"2026-10-23T14:46:54","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=500030","title":{"rendered":"Senpy \u0438\u043b\u0438 \u0437\u0430\u0447\u0435\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u043e\u0432\u0435\u043b\u043b\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043b\u0438\u043d\u0442\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432 Ren\u2019Py \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430?"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041a\u0430\u043a \u044f \u043f\u043e\u043b\u0435\u0437 \u0444\u0438\u043a\u0441\u0438\u0442\u044c \u0440\u0443\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043c\u043e\u0434\u0430 \u043a DDLC, \u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0434\u043b\u044f Ren\u2019Py \u0441\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 Ruff \u0441\u043e \u0441\u0442\u0430\u0442\u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439, \u0440\u0430\u0437\u0432\u0438\u043b\u043e\u043a \u0438 LSP.<\/p>\n<h3>\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0447\u0443\u0436\u0438\u0445 \u0431\u0430\u0433\u043e\u0432<\/h3>\n<p>\u041d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u044d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0451\u043d\u043d\u043e: \u044f \u0441\u0435\u043b \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u0440\u0438\u0432\u0443\u0449\u0438\u0439 \u0440\u0443\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0430 DDLC Blue Skies. \u041c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0442\u0430\u043c \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0431\u044b\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0430\u0442\u0442\u0440\u0430\u043a\u0446\u0438\u043e\u043d\u043e\u043c, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u0441\u043a\u0440\u044b\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u0445\u0443\u0436\u0435: \u043f\u043e\u043c\u0438\u043c\u043e \u043a\u0440\u0438\u0432\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0442\u043e\u043d\u043d\u0430\u043c\u0438 \u0432\u044b\u0433\u0440\u0435\u0431\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0430\u0433\u0443\u043b\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u044f\u043d\u0443\u043b\u0438\u0441\u044c \u0435\u0449\u0451 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u044c \u0440\u0430\u0437 \u043a\u043e\u0432\u044b\u0440\u044f\u043b\u0438 \u043c\u043e\u0434\u044b \u043d\u0430 Ren\u2019Py \u0438\u043b\u0438 \u043f\u0438\u043b\u0438\u043b\u0438 \u0441\u0432\u043e\u044e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u043e\u0432\u0435\u043b\u043b\u0443, \u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u043d\u0430\u0435\u0442\u0435 \u044d\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0443: \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0447\u0438\u0441\u0442\u0435\u043d\u044c\u043a\u043e, \u0438\u0433\u0440\u0430 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442, \u043f\u0430\u0440\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0440\u0443\u0442\u043e\u0432 \u043f\u0440\u043e\u043a\u043b\u0438\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u0430&#8230; \u0430 \u0433\u0434\u0435-\u0442\u043e \u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u043e\u043c \u0447\u0430\u0441\u0443 \u0438\u0433\u0440\u044b \u0432 \u0433\u043b\u0443\u0445\u043e\u0439 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 \u043b\u0435\u0436\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 \u043f\u043e\u043c\u0438\u043d\u0435 \u043d\u0435\u0442, \u043f\u0440\u044b\u0436\u043e\u043a \u0432 \u043d\u0438\u043a\u0443\u0434\u0430 \u0438\u043b\u0438 \u043a\u0440\u0438\u0432\u043e\u0439 \u044d\u043a\u0440\u0430\u043d, \u0440\u043e\u043d\u044f\u044e\u0449\u0438\u0439 \u0438\u0433\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0440\u0435\u0448\u0438\u043b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043f\u0430\u0440\u0443 \u043a\u0430\u0434\u0440\u043e\u0432 \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043b\u043e\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0432 Ren&#8217;Py \u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u0438 \u0447\u0430\u0441\u0430\u043c\u0438 \u0434\u043e\u043b\u0433\u043e \u0438 \u043c\u0443\u0442\u043e\u0440\u043d\u043e \u0442\u044b\u043a\u0430\u0442\u044c \u043f\u043e \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0430\u043c, \u043d\u0430\u0434\u0435\u044f\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043a\u0440\u0438\u0432\u043e\u0439 \u0440\u0443\u0442 \u043f\u043e\u043f\u0430\u0434\u0451\u0442\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0437\u0430. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432 \u043d\u043e\u0432\u0435\u043b\u043b\u0435 \u043f\u043e\u0434 20\u201330 \u0447\u0430\u0441\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438, \u0440\u0443\u0447\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043f\u0430\u0442\u0447\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u044b\u0442\u043a\u0443.<\/p>\n<p>\u0412 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 Python-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u044b\u043a \u043a \u0448\u0443\u0441\u0442\u0440\u043e\u043c\u0443 \u043b\u0438\u043d\u0442\u0435\u0440\u0443 Ruff: \u043e\u043d \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0431\u044c\u0451\u0442 \u043f\u043e \u0440\u0443\u043a\u0430\u043c \u0437\u0430 \u043a\u0440\u0438\u0432\u043e\u0439 \u043a\u043e\u0434 \u043f\u0440\u044f\u043c\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0430. \u0417\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0440\u043e\u0432\u043d\u043e \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u043b\u044f Ren\u2019Py. \u041f\u043e\u0448\u0451\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0442\u0443\u043b\u0437\u044b \u2014 \u0438 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u043f\u0443\u0441\u0442\u043e\u0442\u0443. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u0430\u043c\u0438, \u043d\u043e \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0442\u0435\u043a\u0441\u0442\u0430: \u0441\u043b\u0435\u0434\u044f\u0442, \u0447\u0442\u043e\u0431\u044b \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u044f \u0441\u0442\u043e\u044f\u043b\u0438 \u0433\u0434\u0435 \u043d\u0430\u0434\u043e, \u043d\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u043b\u0435\u043f\u044b \u043a \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 Ren&#8217;Py \u2014 \u043a \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u043c\u0435\u043d\u044e, \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0435 rollback, \u0443\u0442\u0435\u0447\u043a\u0430\u043c \u0432 \u044d\u043a\u0440\u0430\u043d\u0430\u0445 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 RPA-\u0430\u0440\u0445\u0438\u0432\u043e\u0432.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u043f\u0441\u0438\u0445\u0430\u043d\u0443\u043b \u0438 \u0441\u0435\u043b \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u043d\u0430\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u2014 <strong>Senpy<\/strong> (semantic + renpy, \u043d\u0443 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u043e\u0442\u0441\u044b\u043b\u043a\u0430 \u043a senpai).<\/p>\n<p>\u0414\u0430, \u043f\u043e \u0444\u0430\u043d\u0443 \u044f \u0437\u0430\u0448\u0438\u043b \u0442\u0443\u0434\u0430 \u0440\u0435\u0436\u0438\u043c &#8212;tsundere, \u0433\u0434\u0435 \u043b\u0438\u043d\u0442\u0435\u0440 \u043a\u0440\u043e\u0435\u0442 \u0442\u0435\u0431\u044f \u043e\u0442\u0431\u043e\u0440\u043d\u044b\u043c\u0438 \u0444\u0440\u0430\u0437\u0430\u043c\u0438 \u0437\u043b\u043e\u0439 \u0430\u043d\u0438\u043c\u0435-\u0434\u0435\u0432\u043e\u0447\u043a\u0438 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0437\u0430\u0431\u044b\u043b \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0434\u0435\u0444\u043e\u043b\u0442\u044b \u0438\u043b\u0438 \u0441\u043b\u043e\u043c\u0430\u043b \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u043e\u0442\u043a\u0430\u0442\u0430. \u041d\u043e \u043f\u043e\u0434 \u044d\u0442\u043e\u0439 \u0448\u0443\u0442\u043a\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u0437\u0440\u043e\u0441\u043b\u0430\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0444\u0430\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u0441\u044f\u043a\u0438 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0433\u0440\u0430 \u0443\u043b\u0435\u0442\u0438\u0442 \u0432 \u0440\u0435\u043b\u0438\u0437 \u0438 \u043a\u0440\u0430\u0448\u043d\u0435\u0442\u0441\u044f \u0443 \u0436\u0438\u0432\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430.<\/p>\n<h3>\u0427\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u043c\u0435\u0435\u0442 \u043b\u043e\u0432\u0438\u0442\u044c Senpy?<\/h3>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, Senpy \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e, \u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a: \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430 \u043b\u0435\u0442\u0443, \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f Pygame \u0438 \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0436\u0434\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0433\u0440\u044b.<\/p>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0441 \u043f\u0430\u0440\u043e\u0439 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043e\u043a, \u043e\u043d \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u043a\u0443\u0445\u043d\u044e Ren&#8217;Py. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u043d\u0451\u043c 33 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0438 \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043e\u043d\u0438 \u043f\u043e \u0442\u0435\u043c \u043c\u0435\u0441\u0442\u0430\u043c, \u0433\u0434\u0435 \u0430\u0432\u0442\u043e\u0440\u044b \u043d\u043e\u0432\u0435\u043b\u043b \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u0440\u0435\u043b\u044f\u044e\u0442 \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439 (RPY1xx)<\/strong> \u2014 \u043b\u043e\u0432\u0438\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0435\u0437 \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u0432, \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u043a\u0440\u0438\u0432\u043e\u0439 \u0440\u0430\u043d\u0434\u043e\u043c, \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0439 \u043e\u0442\u043a\u0430\u0442 \u043d\u0430\u0437\u0430\u0434. <\/p>\n<\/li>\n<li>\n<p><strong>\u042d\u043a\u0440\u0430\u043d\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (RPY2xx)<\/strong> \u2014 \u043f\u0440\u0435\u0434\u0438\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0443\u0442\u0430\u0446\u0438\u0438, \u043a\u043d\u043e\u043f\u043a\u0438-\u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0438 \u0431\u0435\u0437 action \u0438 \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0435 \u0446\u0438\u043a\u043b\u044b, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435 UI \u0432 \u0441\u043b\u0430\u0439\u0434-\u0448\u043e\u0443. <\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u0438\u0430\u043b\u043e\u0433\u0438 \u0438 \u043f\u043e\u0442\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (RPY3xx)<\/strong> \u2014 \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u0442\u0435\u0433\u0438 {b}, \u043f\u0440\u044b\u0436\u043a\u0438 \u043d\u0430 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043a\u0438 \u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u044b \u0441\u044e\u0436\u0435\u0442\u0430 \u0432 \u0447\u0443\u0436\u0438\u0435 \u0441\u0446\u0435\u043d\u044b. <\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u044e\u0436\u0435\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0438 \u0432 \u043c\u0435\u043d\u044e (RPY4xx)<\/strong> \u2014 \u0437\u0430\u0431\u044b\u0442\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u0432 \u0432\u044b\u0431\u043e\u0440\u0430\u0445, \u043f\u0443\u0441\u0442\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 menu \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f. <\/p>\n<\/li>\n<li>\n<p><strong>\u0410\u0441\u0441\u0435\u0442\u044b \u0438 \u043c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b\u044b (RPY5xx)<\/strong> \u2014 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0432 \u0441\u043f\u0440\u0430\u0439\u0442\u0430\u0445, \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u0430\u044f \u043c\u0443\u0437\u044b\u043a\u0430 \u0438 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u044c .rpa \u0430\u0440\u0445\u0438\u0432\u043e\u0432. <\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f (RPY6xx)<\/strong> \u2014 \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 game\/tl\/, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u043b\u043e\u043c\u0430\u043b \u0442\u0435\u0433 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438 \u0438\u0433\u0440\u0430 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442 \u0441 KeyError. <\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0443\u0445\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0437 \u0434\u043e\u043a\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043a\u0443\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u0436\u0438\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u0433\u0434\u0435 \u0430\u0432\u0442\u043e\u0440\u044b \u043d\u043e\u0432\u0435\u043b\u043b \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0430\u043c\u0438 \u0441\u0435\u0431\u0435 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u044b.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u0451\u0440\u0433\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 renpy lint?<\/h3>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u043b\u044e\u0431\u043e\u0433\u043e, \u043a\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439: \u00ab\u0417\u0430\u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u0435\u0441\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u0434\u0432\u0438\u0436\u043a\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 renpy.exe &lt;\u043f\u0443\u0442\u044c&gt; lint?\u00bb<\/p>\n<p>\u041d\u043e \u0435\u0441\u043b\u0438 \u043a\u043e\u043f\u043d\u0443\u0442\u044c, \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043b\u0438\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0433\u0440\u0443\u0441\u0442\u043d\u043e:<\/p>\n<ol>\n<li>\n<p><strong>\u041e\u043d \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439.<\/strong> \u041a\u043e\u043c\u0430\u043d\u0434\u0430 lint \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0434\u0432\u0438\u0436\u043e\u043a: \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043a\u0440\u044b\u0442\u043e\u0435 \u043e\u043a\u043d\u043e Pygame, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 init python \u0431\u043b\u043e\u043a\u0438 \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0442\u0438\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c. \u041d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 70 000 \u0441\u0442\u0440\u043e\u043a \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u0438\u0441\u0438\u0442 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e 30\u201340. \u041f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043a Language Server \u0432 VS Code, \u0447\u0442\u043e\u0431\u044b \u043e\u0448\u0438\u0431\u043a\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0437\u0430 15 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u044f\u043c\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u2014 \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u043d \u0441\u043b\u0435\u043f \u043a \u043b\u043e\u0433\u0438\u043a\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439.<\/strong> \u0414\u043b\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043b\u0438\u043d\u0442\u0435\u0440\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043b\u0435\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 $ money = 10 \u2014 \u044d\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 Python. \u0414\u0432\u0438\u0436\u043e\u043a \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u0442\u0443\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0435 \u0435\u0451 \u043d\u0435\u0442. \u0410 \u0432\u043e\u0442 \u0442\u043e, \u0447\u0442\u043e \u0443 \u0438\u0433\u0440\u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0434\u0435\u043b\u044e \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0430\u043b\u044f\u0442\u0441\u044f \u0441\u0435\u0439\u0432\u044b, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u0413\u043e\u043d\u044f\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 lint \u0432 GitHub Actions<\/strong><em> \u2014 <\/em>\u044d\u0442\u043e \u043e\u0432\u0435\u0440\u0445\u0435\u0434: \u0432\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u0449\u0438\u0442\u044c \u0432 CI \u043c\u043d\u043e\u0433\u043e\u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u0441\u0430\u043c\u043e\u0433\u043e Ren&#8217;Py \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c headless-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0434\u0438 \u043f\u0430\u0440\u044b \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.<\/p>\n<\/li>\n<\/ol>\n<h4>\u0410 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 Tree-sitter \u0438\u043b\u0438 ANTLR?<\/h4>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0440\u0435\u0437\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0430\u0442\u0451\u0440\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430: \u00ab\u041e\u043a\u0435\u0439, \u043f\u0438\u0448\u0435\u0448\u044c \u0441\u0442\u0430\u0442\u0430\u043d\u0430\u0437 \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0432\u0437\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a \u0442\u0438\u043f\u0430 ANTLR, Lark \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b Tree-sitter?\u00bb<\/p>\n<p>\u041e\u0442\u0432\u0435\u0447\u0430\u044e: \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a \u0441 \u0434\u0432\u0438\u0436\u043a\u043e\u043c, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a Python-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0447\u0451\u0442\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0432\u0435\u0440\u0445\u0435\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0441\u044f. \u0413\u0438\u0431\u0440\u0438\u0434 &#171;\u0441\u0442\u0435\u0439\u0442-\u043c\u0430\u0448\u0438\u043d\u0430 + ast.parse&#187; \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0437\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 99% \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u0431\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0438-\u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432.<\/p>\n<p>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u0432\u0438\u0436\u043a\u0430 \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u043c \u043b\u0435\u043a\u0441\u0435\u0440\u043e\u043c, \u0437\u0430\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043b\u043e\u0433\u0438\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0431\u0435\u0437\u0443\u043c\u043d\u044b\u0439 \u0433\u0438\u0431\u0440\u0438\u0434 \u0438\u0437 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0438\u0442\u043e\u043d\u0430, \u0432\u043a\u0440\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u0441\u0442\u0440\u043e\u043a. \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 \u0447\u0435\u0441\u0442\u043d\u0443\u044e EBNF-\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0430\u0434\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u0433\u043e\u0441\u0442\u0440\u043e\u0439: \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043c\u0435\u0441\u044f\u0446\u0430\u043c\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0430 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 \u043c\u0430\u0436\u043e\u0440\u043d\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 Ren&#8217;Py \u0432\u0441\u0451 \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043f\u0440\u0430\u0433\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0439 \u0433\u0438\u0431\u0440\u0438\u0434:<\/p>\n<ul>\n<li>\n<p><strong>\u0414\u043b\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/strong> (\u0434\u0438\u0430\u043b\u043e\u0433\u0438, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b, \u044d\u043a\u0440\u0430\u043d\u044b) \u2014 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u0430\u044f \u0441\u0442\u0435\u0439\u0442-\u043c\u0430\u0448\u0438\u043d\u0430 \u043a\u0430\u0432\u044b\u0447\u0435\u043a, \u0441\u043a\u043b\u0435\u0439\u043a\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0438. <\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u0433\u0434\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f Python<\/strong> (\u0432\u0441\u0451, \u0447\u0442\u043e \u0438\u0434\u0451\u0442 \u043f\u043e\u0441\u043b\u0435 $, \u0443\u0441\u043b\u043e\u0432\u0438\u044f if\/elif \u0438 \u0431\u043b\u043e\u043a\u0438 python:) \u2014 \u043d\u0430\u0442\u0440\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c ast.parse. <\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0434\u0430\u043b\u043e \u0441\u0443\u043c\u0430\u0441\u0448\u0435\u0434\u0448\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c: Senpy \u043d\u0435 \u0441\u0442\u0440\u043e\u0438\u0442 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u044b\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043d\u043e \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0443\u0437\u043b\u044b.<\/p>\n<hr\/>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434?<\/h3>\n<p>\u0412 Ren\u2019Py \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u043e\u0432\u0435\u043b\u043b\u044b \u0436\u0438\u0432\u0443\u0442 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u043e\u0439 \u043e\u0431\u0449\u0435\u0439 \u043f\u043e\u043c\u043e\u0439\u043a\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d (store). \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0443 label scene_2 \u0438\u043b\u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0432 chapter_1.rpy, \u0430 \u043f\u0440\u044b\u0433\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0451 \u0438\u0437 script.rpy.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443, \u043b\u0438\u043d\u0442\u0435\u0440 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0439\u0434\u0451\u0442 \u0441 \u0443\u043c\u0430: \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0440\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440 \u0435\u0449\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0434\u043e\u0448\u0451\u043b.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0442\u0440\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0434\u0432\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0430:<\/p>\n<ol>\n<li>\n<p><strong>\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 (\u0441\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432):<\/strong> Senpy \u043f\u0440\u043e\u043b\u0435\u0442\u0430\u0435\u0442 \u043f\u043e \u0432\u0441\u0435\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438: \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043a\u0438, \u044d\u043a\u0440\u0430\u043d\u044b, default, define, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, layeredimage \u0438 \u0430\u0443\u0434\u0438\u043e\u0430\u043b\u0438\u0430\u0441\u044b. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 (\u043f\u0440\u043e\u0433\u043e\u043d \u043f\u0440\u0430\u0432\u0438\u043b):<\/strong> \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0434\u0451\u0442 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0437\u0430\u043d\u043e\u0432\u043e, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u0437\u043d\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044f jump chapter_two, \u043e\u043d \u0443\u0436\u0435 \u043d\u0435 \u0433\u0430\u0434\u0430\u0435\u0442, \u0430 \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u0442, \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u0430\u044f \u043c\u0435\u0442\u043a\u0430 \u0445\u043e\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<h4>\u0421\u0442\u0435\u043a \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (ScopeStack)<\/h4>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043a\u043e\u0443\u043f\u0430, \u0432 \u043d\u043e\u0432\u0435\u043b\u043b\u0435 \u0435\u0441\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b: \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u0446\u0438\u043a\u043b\u0430\u0445 for \u0432\u043d\u0443\u0442\u0440\u0438 UI, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u0435\u0442\u043e\u043a. \u0415\u0441\u043b\u0438 \u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043e\u0431\u0449\u0443\u044e \u043a\u0443\u0447\u0443, \u043d\u0430\u0447\u043d\u0443\u0442\u0441\u044f \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u043a\u0430\u0448\u0443, \u043c\u044b \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0438 ScopeStack \u2014 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0435\u043a \u0441\u043a\u043e\u0443\u043f\u043e\u0432 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 Mypy:<\/p>\n<pre><code class=\"python\">class ScopeStack:    def __init__(self, builtins: set[str]):        global_scope = Scope(ScopeType.GLOBAL, \"global\", -1)        global_scope.symbols.update(builtins)        self.scopes: list[Scope] = [global_scope]    def add_symbol(self, var: str, is_constant: bool = False,                   is_global: bool = False) -&gt; None:        target = self.global_scope if is_global else self.current        target.symbols.add(var)        if is_constant:            target.constants.add(var)    def is_declared(self, var: str) -&gt; bool:        return any(var in scope.symbols for scope in reversed(self.scopes))    def is_constant(self, var: str) -&gt; bool:        return any(var in scope.constants for scope in reversed(self.scopes))<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u0445:<br \/> \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 screen shop(page_idx): \u2014 \u043f\u0443\u0448\u0438\u043c \u043d\u043e\u0432\u044b\u0439 SCREEN-\u0441\u043a\u043e\u0443\u043f \u0441 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0430 \u0438 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0442\u0443\u0434\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 page_idx. \u041e\u0442\u0441\u0442\u0443\u043f \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c 0 \u2014 \u0441\u0442\u0435\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0434\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043a\u043e\u0443\u043f\u0430 \u0447\u0435\u0440\u0435\u0437 pop_to_indent.<\/p>\n<p>\u0410 reversed(self.scopes) \u0438\u0449\u0435\u0442 \u0438\u043c\u0435\u043d\u0430 \u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u044d\u043a\u0440\u0430\u043d\u0430\/\u0446\u0438\u043a\u043b\u0430, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e \u2014 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 store.<\/p>\n<hr\/>\n<h3>\u0413\u0434\u0435 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 Python AST<\/h3>\n<p>\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 Ren&#8217;Py, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0445 \u0432\u0441\u0442\u0430\u0432\u043e\u043a, \u043e\u043d\u0438 \u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f \u043e\u0431 \u043a\u043e\u043b\u0435\u043d\u043e.<\/p>\n<p>\u0411\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0432 Ren&#8217;Py \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 define, \u0438 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u2014 \u044d\u0442\u043e \u043d\u0430\u0433\u043b\u0443\u0445\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u043e\u0442\u043a\u0430\u0442\u0430 \u043d\u0430\u0437\u0430\u0434 (Rollback). \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u0438\u0448\u0435\u0442 $ MAX_HP += 10, \u043b\u0438\u043d\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u0430\u0442\u044c \u043b\u0435\u0449\u0430 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 RPY105.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u044d\u0442\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u043e\u0439: \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b, \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043d\u0435 \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445 \u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043b\u044e\u0441, \u0438 \u043e\u0442\u0441\u0435\u043a\u0430\u0442\u044c \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u0427\u0435\u0440\u0435\u0437 ast.parse \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0438 \u0431\u0435\u0437\u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u2014 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0443\u0437\u0435\u043b AugAssign (\u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435):<\/p>\n<pre><code class=\"python\">elif isinstance(node, ast.AugAssign) and isinstance(node.target, ast.Name):    var_name = node.target.id    # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 ScopeStack, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0438\u0437 define    if var_name in self.analyzer.defined_constants:        # \u0418\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 Character(...) \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432 define        if var_name not in self.analyzer.declared_characters:            self.analyzer._add_diagnostic(                Diagnostic(                    file_path=file_path,                    line_number=real_line,                    line_content=raw_l.strip(),                    code=\"RPY105\",                    message=(                        f\"Constant '{var_name}' was declared with 'define', \"                        \"but modified via '+='. Use 'default' for mutable variables.\"                    ),                    col=start_c,                    end_col=end_c,                ),                noqa_map,            )<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0433\u0430\u0434\u0430\u043d\u0438\u044f \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u043c\u044b \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u043c: \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f +=, \u0435\u0451 \u0446\u0435\u043b\u044c \u2014 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0441\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0451 \u0438\u043c\u044f \u0441 \u0431\u0430\u0437\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043e\u0435\u0434\u0438\u043d\u043e, \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u044f\u043c\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u043e:<\/p>\n<pre><code class=\"markdown\">flowchart TD    A[\u0421\u043a\u0440\u0438\u043f\u0442\u044b .rpy \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b] --&gt; B[\u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0438 .rpa]    B --&gt; C[\u041f\u0440\u043e\u0445\u043e\u0434 1: \u0441\u0431\u043e\u0440 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432]    C --&gt; D[\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439 \u0438 \u0441\u043a\u043e\u0443\u043f\u043e\u0432]    D --&gt; E[\u041f\u0440\u043e\u0445\u043e\u0434 2: \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0447\u0435\u043a\u0435\u0440\u043e\u0432]    E --&gt; F[\u0410\u043d\u0430\u043b\u0438\u0437 \u0440\u0430\u0437\u0432\u0438\u043b\u043e\u043a menu \u0438 \u0433\u0440\u0430\u0444\u0430 \u0441\u0446\u0435\u043d]    F --&gt; G[\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 tl\/]    G --&gt; H[\u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0438]    H --&gt; I[\u0412\u044b\u0432\u043e\u0434: CLI \/ JSON \/ LSP \u0432 VS Code]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u0441\u0442\u0440\u043e \u0448\u0435\u0440\u0441\u0442\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0430\u0440\u0445\u0438\u0432\u044b, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0431\u0449\u0443\u044e \u0431\u0430\u0437\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0430 \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u043e\u043c \u043d\u0430\u0442\u0440\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0430 \u0444\u0430\u0439\u043b\u044b \u043f\u0430\u0447\u043a\u0443 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u043a\u0435\u0440\u043e\u0432.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/0d\/fc\/88\/0dfc88bcba01df523a1ace6d01a1c4dd.png\" width=\"955\" height=\"879\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/0d\/fc\/88\/0dfc88bcba01df523a1ace6d01a1c4dd.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/0d\/fc\/88\/0dfc88bcba01df523a1ace6d01a1c4dd.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<hr\/>\n<h3>\u0413\u0440\u0430\u0431\u043b\u0438 \u2116 1. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f-\u043f\u0440\u0438\u0437\u0440\u0430\u043a \u0438 \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f (RPY104)<\/h3>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u043b\u044b\u0439 \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0431\u0430\u0433\u043e\u0432 \u0432 Ren&#8217;Py \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043d\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043d \u043a \u043a\u0440\u0438\u0432\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435.<\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043f\u0438\u0448\u0443\u0442 \u043d\u043e\u0432\u0438\u0447\u043a\u0438:<\/p>\n<pre><code class=\"python\">label buy_item:    $ money = 100    $ money -= 25    \"\u0412\u044b \u043a\u0443\u043f\u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442.\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0440\u043e\u043a\u043b\u0438\u043a\u0438\u0432\u0430\u0435\u043c \u0441\u0446\u0435\u043d\u0443 \u2014 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e! \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0431\u0430\u043b\u0430\u043d\u0441 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041d\u043e \u0432 Ren&#8217;Py \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: <strong>\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0436\u0438\u0442\u044c \u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f\u0445, \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0440\u0445\u043d\u0435\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 default<\/strong>:<\/p>\n<pre><code class=\"python\">default money = 100label buy_item:    $ money -= 25    \"\u0412\u044b \u043a\u0443\u043f\u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442.\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>\u0412 \u0447\u0451\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430?<\/strong><br \/>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u043b\u0435\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 $ money = 100, \u2014 \u0431\u043e\u043c\u0431\u0430 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0414\u0430, \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043f\u0430\u0442\u0447 \u0441 \u043d\u043e\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u043e\u0439, \u0441\u0442\u0430\u0440\u044b\u0435 \u0441\u0435\u0439\u0432\u044b \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438 \u0438\u0433\u0440\u0430 \u0432\u044b\u043b\u0435\u0442\u0438\u0442 \u0441 NameError. \u0410 \u0435\u0441\u043b\u0438 \u0438\u0433\u0440\u043e\u043a \u0441\u0434\u0435\u043b\u0430\u0435\u0442 Rollback \u043d\u0430\u0437\u0430\u0434 \u0434\u0430\u043b\u044c\u0448\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0435\u0451 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f. default \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u0434\u0432\u0438\u0436\u043a\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0435\u0439\u0432\u0430  <\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u043e <strong>RPY104<\/strong> \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435-\u043f\u0440\u0438\u0437\u0440\u0430\u043a\u0438 \u0438 \u0441\u0440\u0430\u0437\u0443 \u043e\u0440\u0451\u0442 \u043e\u0448\u0438\u0431\u043a\u043e\u0439: \u00ab\u0422\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043d\u0430 \u043b\u0435\u0442\u0443, \u0432\u044b\u043d\u0435\u0441\u0438 \u0435\u0451 \u0432 default, \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u0445\u043e\u0440\u043e\u043d\u0438\u0448\u044c \u0441\u0435\u0439\u0432\u044b \u0438\u0433\u0440\u043e\u043a\u043e\u0432\u00bb.<\/p>\n<p>\u041f\u043e\u0434 \u044d\u0442\u0443 \u0436\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442 \u0446\u0435\u043b\u0430\u044f \u043f\u0430\u0447\u043a\u0430 \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0433\u0440\u0430\u0431\u0435\u043b\u044c:<\/p>\n<ul>\n<li>\n<p><strong>RPY102<\/strong> \u2014 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c $ score += 10 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u0433\u0434\u0435-\u0442\u043e \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430. \u0412 \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u044d\u0442\u043e \u0447\u0438\u0441\u0442\u044b\u0439 NameError. <\/p>\n<\/li>\n<li>\n<p><strong>RPY103<\/strong> \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 if has_key: \u043f\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. <\/p>\n<\/li>\n<li>\n<p><strong>RPY105<\/strong> \u2014 \u043c\u0443\u0442\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438\u0437 define. \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0438\u0433\u0440\u044b \u0434\u043b\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 (\u0448\u0440\u0438\u0444\u0442\u044b, \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0438, \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438). \u0415\u0441\u043b\u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043d\u0430 \u0445\u043e\u0434\u0443, \u0434\u0432\u0438\u0436\u043e\u043a \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u043e\u0442\u043a\u0430\u0442 \u043d\u0430\u0437\u0430\u0434. <\/p>\n<\/li>\n<li>\n<p><strong>RPY106<\/strong> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e import random \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432 set(). Ren&#8217;Py \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0435\u0442\u043e\u0432 \u043f\u0440\u0438 \u043e\u0442\u043a\u0430\u0442\u0435 \u043d\u0430\u0437\u0430\u0434 \u2014 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 [] \u0438\u043b\u0438 renpy.revertable_set(), \u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u043d\u0434\u043e\u043c\u0430 \u2014 renpy.random. <\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u0432\u0435\u0449\u0438 \u043b\u043e\u0432\u044f\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0431\u043e\u0440 Python AST: \u043c\u044b \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u0442\u0435\u043a\u0441\u0442, \u0430 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u0438 \u0442\u0438\u043f\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<hr\/>\n<h4>\u041b\u0435\u0447\u0438\u043c \u0441\u0442\u0430\u0440\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b: \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 default \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0435<\/h4>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0442\u0440\u0430\u0432\u0438\u043b \u043b\u0438\u043d\u0442\u0435\u0440 \u043d\u0430 \u0441\u0442\u0430\u0440\u044b\u0435 \u043c\u043e\u0434\u044b, \u0442\u0430\u043c \u0432\u044b\u043b\u0435\u0437\u043b\u043e \u0448\u0442\u0443\u043a 80 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 RPY104. \u0412\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u0438\u0434\u0435\u0442\u044c \u0438 \u0432\u044b\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0441\u0442\u0440\u043e\u043a default var = &#8230; \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u2014 \u0437\u0430\u043d\u044f\u0442\u0438\u0435 \u0434\u043b\u044f \u043c\u0430\u0437\u043e\u0445\u0438\u0441\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043b \u0444\u043b\u0430\u0433 <strong>&#8212;generate-defaults<\/strong>.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e: \u043b\u0438\u043d\u0442\u0435\u0440 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0435\u0437 \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u0432, \u043b\u0435\u0437\u0435\u0442 \u0432 AST-\u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0438\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f (\u0447\u0438\u0441\u043b\u0430 \u0441\u0432\u043e\u0434\u0438\u0442 \u043a 0, \u0441\u0442\u0440\u043e\u043a\u0438 \u043a &#171;&#187;, \u0441\u043f\u0438\u0441\u043a\u0438 \u043a [], \u0441\u043b\u043e\u0432\u0430\u0440\u0438 \u043a {}) \u0438 \u0441\u0430\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b senpy_defaults.rpy:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/73\/3c\/14\/733c140bb90c894f2e4a896a0f161c76.png\" width=\"717\" height=\"309\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/73\/3c\/14\/733c140bb90c894f2e4a896a0f161c76.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/73\/3c\/14\/733c140bb90c894f2e4a896a0f161c76.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/09\/85\/8f\/09858f201bd0875cfcde390f007c4f49.png\" width=\"685\" height=\"876\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/09\/85\/8f\/09858f201bd0875cfcde390f007c4f49.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/09\/85\/8f\/09858f201bd0875cfcde390f007c4f49.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u0430\u044f \u043f\u0443\u043b\u044f: \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0441\u044e\u0436\u0435\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 100, \u0430 \u043d\u0435 0, \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f. \u041d\u043e \u043a\u0430\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u043a\u043e\u0440\u043e\u0439 \u043f\u043e\u043c\u043e\u0449\u0438, \u0447\u0442\u043e\u0431\u044b \u0437\u0430 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u043e\u0436\u0438\u0432\u0438\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439 \u2014 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0442\u043e\u043d\u043d\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<h3>\u041b\u043e\u0432\u0443\u0448\u043a\u0430 \u2116 2. \u042d\u043a\u0440\u0430\u043d\u044b (Screen Language) \u0438 \u043c\u0438\u043d\u044b \u043f\u0440\u0435\u0434\u0438\u043a\u0448\u0435\u043d\u0430<\/h3>\n<p>\u042d\u043a\u0440\u0430\u043d\u044b \u0432 Ren&#8217;Py \u2014 \u044d\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0438\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0440\u0438\u0448\u0451\u043b \u0438\u0437 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0432\u0435\u0431\u0430 \u0438\u043b\u0438 GUI-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u043a\u043e\u0434 \u044d\u043a\u0440\u0430\u043d\u0430, \u0432\u0438\u0434\u0438\u0448\u044c \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0438 \u0434\u0443\u043c\u0430\u0435\u0448\u044c: \u00ab\u041d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043c\u0435\u043d\u044e\u0448\u043a\u0438\u00bb.<\/p>\n<p>\u0418 \u043f\u0438\u0448\u0435\u0448\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0435:<\/p>\n<pre><code class=\"python\">screen shop():    $ player_gold -= 10    text \"\u041a\u0443\u043f\u0438\u0442\u044c \u0437\u0435\u043b\u044c\u0435\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0410 \u043f\u043e\u0442\u043e\u043c \u043d\u0430 \u0442\u0435\u0441\u0442\u0430\u0445 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0438\u0433\u0440\u043e\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u043b \u043c\u0430\u0433\u0430\u0437\u0438\u043d, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0436\u0430\u043b, \u0430 \u0443 \u043d\u0435\u0433\u043e \u0443\u0436\u0435 \u0441\u043f\u0438\u0441\u0430\u043b\u043e\u0441\u044c 40 \u043c\u043e\u043d\u0435\u0442. \u041e\u0442\u043a\u0443\u0434\u0430?!<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u043a\u0440\u0430\u043d\u044b \u0432 Ren&#8217;Py <strong>\u0440\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0438 \u043f\u0440\u0435\u0434\u0438\u043a\u0442\u0438\u0432\u043d\u044b\u0435<\/strong>. \u0414\u0432\u0438\u0436\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0432 \u0444\u043e\u043d\u043e\u0432\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u044d\u043a\u0440\u0430\u043d (predict screen), \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u0435\u0449\u0451 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0433\u0440\u043e\u043a \u0438\u0445 \u0443\u0432\u0438\u0434\u0438\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0445\u043d\u0443\u043b\u0438 \u043f\u0440\u044f\u043c\u0443\u044e \u043c\u0443\u0442\u0430\u0446\u0438\u044e \u0441\u0442\u0435\u0439\u0442\u0430 ($ player_gold -= 10) \u043f\u0440\u044f\u043c\u043e \u0432 \u0442\u0435\u043b\u043e \u044d\u043a\u0440\u0430\u043d\u0430, \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u043d\u0435 \u043f\u043e \u043a\u043b\u0438\u043a\u0443, \u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u0435\u0434\u0438\u043a\u0448\u0435\u043d\u0430 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438 UI \u0434\u0432\u0438\u0436\u043a\u043e\u043c. \u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u044d\u043a\u0440\u0430\u043d\u0430\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0442\u0440\u043e\u0433\u0438\u0435 Action (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, SetVariable), \u043d\u043e \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c \u0434\u0432\u0438\u0436\u043e\u043a \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442.<\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u043e <strong>RPY201<\/strong> \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442 \u0437\u0430 \u043b\u044e\u0431\u044b\u0435 \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u0442\u0435\u043b\u0435 \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<p>\u0417\u0430\u043e\u0434\u043d\u043e \u0447\u0435\u043a\u0435\u0440 \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u043b\u043e\u0432\u0438\u0442 \u0435\u0449\u0451 \u043f\u0430\u0447\u043a\u0443 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439 \u0434\u0438\u0447\u0438:<\/p>\n<ul>\n<li>\n<p><strong>RPY206<\/strong> \u2014 \u043f\u0440\u044f\u043c\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u0432 \u044d\u043a\u0448\u0435\u043d\u0435: action heal_player(). \u0418\u0437-\u0437\u0430 \u0441\u043a\u043e\u0431\u043e\u043a Python \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>\u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u044d\u043a\u0440\u0430\u043d\u0430<\/strong>, \u0430 \u043d\u0435 \u043f\u043e \u043a\u043b\u0438\u043a\u0443! \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u0451\u0440\u0442\u043a\u0443: action Function(heal_player). <\/p>\n<\/li>\n<li>\n<p><strong>RPY203<\/strong> \u2014 \u043a\u043d\u043e\u043f\u043a\u0438-\u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0438 (textbutton \/ imagebutton \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 action). \u0412 \u0438\u0433\u0440\u0435 \u043e\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u0438\u0433\u0440\u043e\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u044b\u043a\u0430\u0435\u0442 \u0432 \u043f\u0443\u0441\u0442\u043e\u0442\u0443. <\/p>\n<\/li>\n<li>\n<p><strong>RPY205<\/strong> \u2014 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b for\/while \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043a\u0440\u0430\u043d\u0430. \u041e\u043d\u0438 \u0432 \u043d\u043e\u043b\u044c \u043b\u043e\u043c\u0430\u044e\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 Ren&#8217;Py \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442 UI \u0432 \u0442\u043e\u0440\u043c\u043e\u0437\u044f\u0449\u0435\u0435 \u0441\u043b\u0430\u0439\u0434-\u0448\u043e\u0443 (\u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432 \u044d\u043a\u0440\u0430\u043d\u0430\u0445 \u0435\u0441\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u043d\u044b\u0439 for item in items:). <\/p>\n<\/li>\n<li>\n<p><strong>RPY204<\/strong> \u2014 \u0432\u044b\u0437\u043e\u0432 \u044d\u043a\u0440\u0430\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. <\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h3>\u0421\u044e\u0436\u0435\u0442\u043d\u0430\u044f \u0434\u044b\u0440\u0430 \u2116 3 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0428\u0440\u0451\u0434\u0438\u043d\u0433\u0435\u0440\u0430 \u0432 \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0430\u0445 menu: (RPY401)<\/h3>\n<p>\u0421\u044e\u0436\u0435\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0438 \u2014 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0440\u0443\u0447\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0430\u0434\u0438\u0442\u0441\u044f \u0432 \u043b\u0443\u0436\u0443.<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0430:<\/p>\n<pre><code class=\"python\">label dungeon:    menu:        \"\u0412\u0437\u044f\u0442\u044c \u0444\u043e\u043d\u0430\u0440\u044c\":            $ has_torch = True            \"\u0412\u044b \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043b\u0438 \u0444\u043e\u043d\u0430\u0440\u044c.\"        \"\u0418\u0434\u0442\u0438 \u0432 \u0442\u0435\u043c\u043d\u043e\u0442\u0435\":            \"\u0412\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0440\u0438\u0441\u043a\u043d\u0443\u0442\u044c.\"    # ... \u0421\u043f\u0443\u0441\u0442\u044f 2000 \u0441\u0442\u0440\u043e\u043a \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432:    if has_torch:        \"\u0424\u043e\u043d\u0430\u0440\u044c \u0440\u0430\u0437\u0433\u043e\u043d\u044f\u0435\u0442 \u0442\u044c\u043c\u0443.\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0430\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 (\u043e\u043d \u0436\u0435 \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b!). \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0447\u0430\u0441\u044b.<\/p>\n<p>\u0418\u0433\u0440\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0435\u043b\u0438\u0437. \u0418\u0433\u0440\u043e\u043a \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u00ab\u0418\u0434\u0442\u0438 \u0432 \u0442\u0435\u043c\u043d\u043e\u0442\u0435\u00bb, \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430 \u0447\u0430\u0441\u0430 \u0438\u0433\u0440\u044b \u2014 \u0438 \u0438\u0433\u0440\u0430 \u043d\u0430\u0447\u0438\u0441\u0442\u043e \u043a\u0440\u0430\u0448\u0438\u0442\u0441\u044f \u0441 NameError: name &#8216;has_torch&#8217; is not defined. \u0418\u0433\u0440\u043e\u043a \u043b\u043e\u0432\u0438\u0442 \u0440\u0435\u0439\u0434\u0436-\u043a\u0432\u0438\u0442 \u0438 \u0438\u0434\u0451\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0433\u043d\u0435\u0432\u043d\u044b\u0439 \u043e\u0442\u0437\u044b\u0432 \u0432 Steam.<\/p>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u043e <strong>RPY401<\/strong> \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u044e \u0432 \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0430\u0445: \u043b\u0438\u043d\u0442\u0435\u0440 \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u043a\u0430\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 menu:. \u0415\u0441\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0432\u044b\u0431\u043e\u0440\u0435 \u0444\u043b\u0430\u0433 \u0434\u0430\u043b\u0438, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0431\u044b\u043b\u0438, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0435\u0442 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e default \u2014 Senpy \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0442\u043a\u043d\u0451\u0442 \u043f\u0430\u043b\u044c\u0446\u0435\u043c \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0432\u0435\u0442\u043a\u0443 \u0432\u044b\u0431\u043e\u0440\u0430, \u0433\u0434\u0435 \u0432\u044b \u0437\u0430\u0431\u044b\u043b\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<p>\u0420\u044f\u0434\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0435\u0449\u0451 \u0434\u0432\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u0430:<\/p>\n<ul>\n<li>\n<p><strong>RPY402<\/strong> \u2014 \u043f\u0443\u0441\u0442\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u043c\u0435\u043d\u044e, \u0433\u0434\u0435 \u0437\u0430\u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0438\u043b\u0438 \u043f\u0440\u044b\u0436\u043e\u043a (\u0432 \u0438\u0433\u0440\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u0443\u043d\u043a\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0441\u0445\u043b\u043e\u043f\u043d\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435). <\/p>\n<\/li>\n<li>\n<p><strong>RPY403<\/strong> \u2014 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u0431\u0440\u0435\u0434\u043e\u0432\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u0440\u043e\u0434\u0435 if False: \u0438\u043b\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u044f \u0442\u0438\u043f\u0430 if has_key and not has_key:. <\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h3>\u0421\u044e\u0436\u0435\u0442 \u043a\u0430\u043a \u0433\u0440\u0430\u0444 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432: \u043b\u043e\u0432\u0438\u043c \u0443\u0442\u0435\u0447\u043a\u0438 \u0441\u0446\u0435\u043d (RPY3xx)<\/h3>\n<p>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u043e\u0432\u0435\u043b\u043b\u044b \u043d\u0435\u043b\u044c\u0437\u044f \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437 \u2014 \u044d\u0442\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0438\u0437 \u043c\u0435\u0442\u043e\u043a (label), \u043f\u0440\u044b\u0436\u043a\u043e\u0432 (jump), \u0432\u044b\u0437\u043e\u0432\u043e\u0432 (call) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u0432 (return).<\/p>\n<p>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043d\u0430 \u0441\u043e\u0442\u043d\u0438 \u0442\u044b\u0441\u044f\u0447 \u0441\u043b\u043e\u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0441\u0442\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0442\u0435\u0440\u044f\u044e\u0442 \u043a\u043e\u043d\u0446\u044b \u0432\u0435\u0442\u043e\u043a. Senpy \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 \u0441\u0432\u044f\u0437\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0438 \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043a\u043e\u0441\u044f\u043a\u0438:<\/p>\n<ol>\n<li>\n<p><strong>RPY308 (Fallthrough \/ \u041f\u0440\u043e\u0432\u0430\u043b \u0441\u0446\u0435\u043d\u044b)<\/strong> \u2014 \u043a\u043e\u0433\u0434\u0430 \u0441\u0446\u0435\u043d\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c, \u0430 \u0430\u0432\u0442\u043e\u0440 \u0437\u0430\u0431\u044b\u043b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0446\u0435 jump \u0438\u043b\u0438 return. \u0412 Ren&#8217;Py \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f, \u0430 \u0442\u0443\u043f\u043e \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u043e \u0444\u0430\u0439\u043b\u0443 \u043c\u0435\u0442\u043a\u0443 \u2014 \u0433\u0435\u0440\u043e\u0439 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0447\u0443\u0436\u0443\u044e \u0441\u0446\u0435\u043d\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>RPY306 (Call \u0431\u0435\u0437 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430)<\/strong> \u2014 \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u043c\u0435\u0442\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 call, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043d\u0435\u0451 \u043d\u0435\u0442 return. \u0421\u0442\u0435\u043a \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0430\u0435\u0442, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043d\u0430\u0437\u0430\u0434 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>RPY302<\/strong> \u2014 \u043f\u0440\u044b\u0436\u043e\u043a \u043f\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0435 \u043d\u0430 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043c\u0435\u0442\u043a\u0443 (\u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b \u043d\u0430 \u0440\u0435\u043b\u0438\u0437\u0435 \u043b\u0438\u043d\u0442\u0435\u0440 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435: did you mean &#8216;chapter_2&#8217;?).<\/p>\n<\/li>\n<li>\n<p><strong>RPY303<\/strong> \u2014 \u043c\u0451\u0440\u0442\u0432\u044b\u0435 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f (\u043c\u0435\u0442\u043a\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u0433\u0434\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432).<\/p>\n<\/li>\n<\/ol>\n<h2>\u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0441\u044e\u0436\u0435\u0442\u0430 \u043f\u0440\u044f\u043c\u043e \u0432\u00a0VS Code <\/h2>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 \u0432 Markdown \u0447\u0435\u0440\u0435\u0437 \u0444\u043b\u0430\u0433 <code>--graph-file story.md<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0432\u044c\u044e\u0432\u0435\u0440\u0430\u0445. \u041d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438 \u043a\u043e\u0434\u043e\u043c \u2014 \u0442\u0430\u043a \u0441\u0435\u0431\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0433\u0440\u0430\u0444\u0430 \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f VS Code \u0447\u0435\u0440\u0435\u0437 Webview:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/18\/7a\/cc\/187accc421584594daffd39502ec58b2.gif\" width=\"1792\" height=\"952\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/18\/7a\/cc\/187accc421584594daffd39502ec58b2.gif 780w,&#10;       https:\/\/habrastorage.org\/extt\/18\/7a\/cc\/187accc421584594daffd39502ec58b2.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0430\u0436\u0438\u043c\u0430\u0435\u043c <code>Ctrl+Shift+P<\/code> \u2794 \u00abSenpy: Show Story Graph\u00bb \u2014 \u0438 \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0432\u0441\u0435\u0439 \u043d\u043e\u0432\u0435\u043b\u043b\u044b, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432 \u043d\u0435\u0439 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430.<\/p>\n<p>\u0427\u0442\u043e \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u0445\u043e\u043b\u0441\u0442:<\/p>\n<ol>\n<li>\n<p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043f\u0430\u043d\u043e\u0440\u0430\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435:<\/strong> \u043a\u043e\u043b\u0451\u0441\u0438\u043a\u043e\u043c \u043c\u044b\u0448\u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0442\u0430\u0442\u044c \u043f\u043e \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u043c \u043f\u043e\u043b\u043e\u0442\u043d\u0430\u043c \u0441 \u0441\u043e\u0442\u043d\u044f\u043c\u0438 \u0440\u0430\u0437\u0432\u0438\u043b\u043e\u043a \u0438 \u0432\u0435\u0442\u043e\u043a.  <\/p>\n<\/li>\n<li>\n<p><strong>\u0426\u0432\u0435\u0442\u043e\u0432\u0430\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c:<\/strong> \u043b\u0438\u043d\u0442\u0435\u0440 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043a\u0440\u0430\u0441\u0438\u0442 \u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0443\u0437\u043b\u044b: <strong>\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0435 \u0443\u0437\u043b\u044b<\/strong> \u2014 \u0441\u0446\u0435\u043d\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u0431\u0435\u0437 <code>return<\/code> \u0438\u043b\u0438 <code>jump<\/code>, \u0441\u044e\u0436\u0435\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0446\u0435\u043d\u0443 (Fallthrough); <strong>\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0443\u0437\u043b\u044b<\/strong> \u2014 \u043f\u0440\u044b\u0436\u043a\u0438 \u0432 \u043f\u0443\u0441\u0442\u043e\u0442\u0443 \u043d\u0430 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043b\u0438\u043a \u0441 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u044b\u0436\u043a\u043e\u043c \u0432 \u043a\u043e\u0434:<\/strong> \u0443\u0437\u043b\u044b \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043b\u0438\u043a\u0430\u0431\u0435\u043b\u044c\u043d\u044b! \u041a\u043b\u0438\u043a\u0430\u0435\u0448\u044c \u043f\u043e \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0448\u043a\u0435 \u0441\u044e\u0436\u0435\u0442\u0430 \u2014 \u0438 VS Code \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u043c \u043e\u043a\u043d\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u043a\u0443\u0440\u0441\u043e\u0440 \u0440\u043e\u0432\u043d\u043e \u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043c\u0435\u0442\u043a\u0438. \u0410 \u0435\u0441\u043b\u0438 \u043a\u043b\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u043e <strong>\u043a\u0440\u0430\u0441\u043d\u043e\u043c\u0443 \u0431\u0438\u0442\u043e\u043c\u0443 \u0443\u0437\u043b\u0443<\/strong> \u2014 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u0431\u044f \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u043c <code>jump<\/code>, \u0433\u0434\u0435 \u0431\u044b\u043b\u0430 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430.  <\/p>\n<\/li>\n<\/ol>\n<h3>\u0410\u0441\u0441\u0435\u0442\u044b: \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0438\u0434\u0435\u0430\u043b\u0435\u043d, \u043d\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0438\u0441\u043f\u0430\u0440\u0438\u043b\u0430\u0441\u044c (RPY5xx)<\/h3>\n<p>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432 Ren&#8217;Py \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043b\u0438\u0437\u0430\u043d \u0434\u043e \u0431\u043b\u0435\u0441\u043a\u0430, \u043d\u043e \u0438\u0433\u0440\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u044b\u043b\u0435\u0442\u0438\u0442, \u0435\u0441\u043b\u0438 \u0432\u044b \u043e\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0438\u0441\u044c \u0432 \u0438\u043c\u0435\u043d\u0438 \u0430\u0443\u0434\u0438\u043e\u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u044d\u043c\u043e\u0446\u0438\u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430.<\/p>\n<p>Senpy \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u0434, \u043e\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: \u0448\u0435\u0440\u0441\u0442\u0438\u0442 \u043f\u0430\u043f\u043a\u0438 images\/, audio\/, \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0445 \u0441\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u043c:<\/p>\n<ul>\n<li>\n<p><strong>RPY501<\/strong> \u2014 \u043c\u0443\u0437\u044b\u043a\u0430 \u0438\u043b\u0438 \u0437\u0432\u0443\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 (\u0438\u0433\u0440\u0430 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442 \u0441\u0446\u0435\u043d\u0443 \u0433\u0440\u043e\u0431\u043e\u0432\u043e\u0439 \u0442\u0438\u0448\u0438\u043d\u043e\u0439 \u0438\u043b\u0438 \u043a\u0440\u0430\u0448\u043d\u0435\u0442\u0441\u044f). <\/p>\n<\/li>\n<li>\n<p><strong>RPY502<\/strong> \u2014 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432 \u0441\u043f\u0440\u0430\u0439\u0442\u0435 \u0438\u043b\u0438 \u043f\u043e\u0437\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 (show sayori 99z_pose). \u041f\u0440\u0438\u0447\u0451\u043c \u043b\u0438\u043d\u0442\u0435\u0440 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442 \u00ab\u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e\u00bb, \u0430 \u0437\u0430\u0431\u043e\u0442\u043b\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0447\u0451\u0442\u043a\u0438\u0439 \u043f\u043e\u0438\u0441\u043a: did you mean &#8216;1a&#8217;? <\/p>\n<\/li>\n<li>\n<p><strong>RPY503<\/strong> \u2014 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043c\u0443\u0441\u043e\u0440 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0438\u043b\u0438 \u0442\u0440\u0435\u043a \u043b\u0435\u0436\u0430\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435, \u043d\u043e \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u0414\u043b\u044f \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0433\u043e \u0431\u0438\u043b\u0434\u0430 \u0432 Steam \u044d\u0442\u043e \u0447\u0438\u0441\u0442\u044b\u0439 \u043c\u0451\u0440\u0442\u0432\u044b\u0439 \u0433\u0440\u0443\u0437, \u0440\u0430\u0437\u0434\u0443\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0433\u0440\u044b. <\/p>\n<\/li>\n<li>\n<p><strong>RPY504<\/strong> \u2014 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 image. <\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h4>\u0410\u0440\u0445\u0438\u0432\u044b .rpa \u0438 \u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u0439\u043c\u0430\u0442\u044c RCE \u0447\u0435\u0440\u0435\u0437 \u0447\u0443\u0436\u043e\u0439 Pickle<\/h4>\n<p>\u0410 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u0438 \u0447\u0443\u0436\u043e\u0439 \u043c\u043e\u0434 \u0438\u043b\u0438 \u0438\u0433\u0440\u0443, \u0433\u0434\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 .rpy \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435, \u0430 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0440\u0445\u0438\u0432\u044b .rpa \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 .rpyc?<\/p>\n<p>\u0421 \u0430\u0440\u0445\u0438\u0432\u0430\u043c\u0438 .rpa \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u0430\u044f \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430\u044f \u0437\u0430\u0441\u0430\u0434\u0430: <strong>\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 RPA \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u043c pickle<\/strong>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0447\u0443\u0436\u0438\u0445 \u043c\u043e\u0434\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0438\u0432\u043d\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0435 pickle.loads() \u043d\u0430 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u043e\u043c \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0444\u0430\u0439\u043b\u0435 \u2014 \u0432\u044b \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (RCE) \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u0417\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c \u0432 \u0438\u043d\u0434\u0435\u043a\u0441 \u0430\u0440\u0445\u0438\u0432\u0430 \u0448\u0435\u043b\u043b\u043a\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 <strong>reduce<\/strong>.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 rpa.py \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u0432\u0443\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e \u0437\u0430\u0449\u0438\u0442\u0443:<\/p>\n<ol>\n<li>\n<p><strong>\u0410\u043d\u0430\u043b\u0438\u0437 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u043f\u0438\u043a\u043b\u0430:<\/strong> \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0431\u0430\u0439\u0442 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 pickletools.genops(). \u0415\u0441\u043b\u0438 \u0442\u0430\u043c \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0445\u043e\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u043f\u043a\u043e\u0434, \u0432\u044b\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0431\u0435\u043b\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 (\u0447\u0438\u0441\u043b\u0430, \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u043f\u0438\u0441\u043a\u0438, \u0441\u043b\u043e\u0432\u0430\u0440\u0438) \u2014 \u0444\u0430\u0439\u043b \u0441\u0440\u0430\u0437\u0443 \u043b\u0435\u0442\u0438\u0442 \u0432 \u0431\u0430\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Unpickler:<\/strong> \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 find_class() \u0438 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043b\u044e\u0431\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<\/li>\n<\/ol>\n<p>\u0410 \u0434\u043b\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0445 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 .rpyc \u043b\u0438\u043d\u0442\u0435\u0440 \u0443\u043c\u0435\u0435\u0442 \u043d\u0430 \u043b\u0435\u0442\u0443 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0443, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c unrpyc \u0441 \u0433\u0438\u0442\u0445\u0430\u0431\u0430 \u0438 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432 \u0444\u043e\u043d\u0435. \u0412\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0440\u0430\u0441\u043a\u043e\u0432\u044b\u0440\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/5b\/5d\/0a\/5b5d0af92cbb37db5d8ffbacda2a9518.png\" width=\"717\" height=\"311\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/5b\/5d\/0a\/5b5d0af92cbb37db5d8ffbacda2a9518.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/5b\/5d\/0a\/5b5d0af92cbb37db5d8ffbacda2a9518.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<hr\/>\n<h3>\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0438 \u043b\u043e\u043c\u0430\u044e\u0442 \u0438\u0433\u0440\u044b (RPY6xx)<\/h3>\n<p>\u0421 \u044d\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 Senpy, \u043a\u043e\u0433\u0434\u0430 \u044f \u043a\u043e\u0432\u044b\u0440\u044f\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434 DDLC Blue Skies.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0438 \u043d\u043e\u0432\u0435\u043b\u043b \u2014 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0444\u0438\u043b\u043e\u043b\u043e\u0433\u0438, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b. \u041e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432 game\/tl\/&lt;\u044f\u0437\u044b\u043a&gt;\/ \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044f\u0442 \u0431\u043b\u043e\u043a\u0438 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432:<\/p>\n<pre><code class=\"python\">translate russian strings:    old \"Hello, [player_name]! Are you ready?\"    new \"\u041f\u0440\u0438\u0432\u0435\u0442, [player]! \u0422\u044b \u0433\u043e\u0442\u043e\u0432?\"  # \u041e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439!<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0435 \u0434\u0432\u0438\u0436\u043e\u043a \u0436\u0434\u0451\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e player_name, \u0430 \u0432 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043e\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0441\u044f \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b player.<\/p>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u0438\u0433\u0440\u0430 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e, \u0430 \u0440\u0443\u0441\u0441\u043a\u0430\u044f \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u043e\u0432\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0435 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442 \u0441 \u0444\u0430\u0442\u0430\u043b\u044c\u043d\u044b\u043c KeyError. \u041d\u0430\u0439\u0442\u0438 \u0442\u0430\u043a\u0443\u044e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043d\u0430 50 000 \u0441\u0442\u0440\u043e\u043a \u2014 \u0430\u0434\u0441\u043a\u0438\u0439 \u0442\u0440\u0443\u0434.<\/p>\n<p>Senpy \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0444\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c (\u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f old\/new, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430 \u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0440\u043e\u0434\u0435 voice \u0438\u043b\u0438 with) \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0447\u0435\u0440\u0435\u0437 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 Counter:<\/p>\n<ul>\n<li>\n<p><strong>RPY601<\/strong> \u2014 \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041b\u0438\u043d\u0442\u0435\u0440 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0430\u0441\u0442 \u0442\u043e\u0447\u043d\u044b\u0439 \u0434\u0438\u0444: Variable mismatch in translation (lost: [player_name]; typo\/extra: [player]). Will crash with KeyError! <\/p>\n<\/li>\n<li>\n<p><strong>RPY602<\/strong> \u2014 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u0433\u0438 \u0441\u0442\u0438\u043b\u0435\u0439. \u0415\u0441\u043b\u0438 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0435 \u0431\u044b\u043b\u043e {b}\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!{\/b}, \u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0437\u0430\u0431\u044b\u043b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0442\u0435\u0433 {b}, \u0432\u0435\u0441\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u043d\u043e\u0432\u0435\u043b\u043b\u044b \u043f\u043e\u043f\u043b\u044b\u0432\u0451\u0442 \u0436\u0438\u0440\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c. <\/p>\n<\/li>\n<li>\n<p><strong>RPY603<\/strong> \u2014 \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 (new &#171;&#187;). \u0418\u0433\u0440\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0443\u0432\u0438\u0434\u0438\u0442 \u043d\u0435\u043c\u043e\u0439 \u043f\u0443\u0441\u0442\u043e\u0439 \u044d\u043a\u0440\u0430\u043d.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u043e\u0434\u0438\u043d \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0439 \u0444\u0430\u0439\u043b: \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u043d\u0430 \u0447\u0435\u043a\u0435\u0440\u044b<\/h3>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043a\u0430\u043a \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435: \u043e\u0434\u0438\u043d \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0439 \u0446\u0438\u043a\u043b while \u043d\u0430 400 \u0441\u0442\u0440\u043e\u043a \u0432 analyzer.py, \u043a\u0443\u0447\u0430 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u0430 \u0441 \u0442\u0435\u043c, \u0433\u0434\u0435 \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u2014 \u0432 \u044d\u043a\u0440\u0430\u043d\u0435, \u0432 \u043c\u0435\u0442\u043a\u0435 \u0438\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0431\u044b\u043b\u043e \u043c\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0440\u0430\u0437\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u044f\u0434\u0440\u043e \u0438 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0438 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 <strong>Checker Pipeline<\/strong>.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0430\u044f:<\/p>\n<ul>\n<li>\n<p><strong>ScopeStack<\/strong> \u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u0435\u043a \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (Global, Screen, Label, Block) \u0438 \u0440\u0443\u043b\u0438\u0442 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c\u0438. <\/p>\n<\/li>\n<li>\n<p>\u0421\u0430\u043c analyzer.py \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u043d\u0430 ~70 \u0441\u0442\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442 \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u043a\u0435\u0440\u044b: <\/p>\n<ul>\n<li>\n<p><strong>FormattingChecker<\/strong> \u2014 \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438, \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u0438\u0437 \u0432\u043e\u0440\u0434\u0430 \u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 API (LiveComposite, ui.*). <\/p>\n<\/li>\n<li>\n<p><strong>ScreenChecker<\/strong> \u2014 \u0432\u0441\u0451, \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f UI, \u0431\u0438\u0442\u044b\u0445 \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u0441\u043a\u043e\u0431\u043e\u043a \u0432 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u044d\u043a\u0448\u0435\u043d\u043e\u0432. <\/p>\n<\/li>\n<li>\n<p><strong>AssetChecker<\/strong> \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0443\u0442\u0435\u0439 \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c, \u0437\u0432\u0443\u043a\u0430\u043c \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0432 layeredimage. <\/p>\n<\/li>\n<li>\n<p><strong>DialogueChecker<\/strong> \u2014 \u043f\u0440\u044b\u0436\u043a\u0438, \u043f\u0440\u043e\u0432\u0430\u043b\u044b \u0432 \u043c\u0435\u0442\u043a\u0438 \u0438 \u043d\u0435\u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0445. <\/p>\n<\/li>\n<li>\n<p><strong>StateChecker<\/strong> \u2014 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0435 \u0431\u043b\u043e\u043a\u0438, \u0443\u0441\u043b\u043e\u0432\u0438\u044f if\/elif \u0438 \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0438 \u0432 \u043c\u0435\u043d\u044e. <\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043b\u0430\u0441\u0441\u0435: \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0434\u043b\u044f \u044d\u043a\u0440\u0430\u043d\u043e\u0432 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u0438\u0441\u0430\u043b \u043c\u0435\u0442\u043e\u0434 \u0432 ScreenChecker, \u043d\u0435 \u0431\u043e\u044f\u0441\u044c \u0441\u043b\u043e\u043c\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432.<\/p>\n<hr\/>\n<h3>\u0418\u0437 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440: \u043f\u0438\u043b\u0438\u043c \u0441\u0432\u043e\u0439 Language Server (LSP)<\/h3>\n<p>CLI-\u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u2014 \u044d\u0442\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u043e \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432 GitHub Actions \u043f\u0435\u0440\u0435\u0434 \u0440\u0435\u043b\u0438\u0437\u043e\u043c. \u041d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0438\u0437\u043d\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u0432\u0431\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443. \u041e\u0448\u0438\u0431\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0432\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u043b \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 LSP-\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 pygls.<\/p>\n<p>\u041f\u0438\u0441\u0430\u0442\u044c \u0442\u044f\u0436\u0451\u043b\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0430 JavaScript\/TypeScript \u043f\u043e\u0434 VS Code \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u2014 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043d\u0430 JS \u0431\u044b\u043b\u043e \u0431\u044b \u0431\u0435\u0437\u0443\u043c\u0438\u0435\u043c. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f VS Code \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u043c: \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u043e\u043d\u043a\u0430\u044f \u043e\u0431\u0451\u0440\u0442\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 Senpy \u0432 \u0444\u043e\u043d\u0435 \u0438 \u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0438\u043c \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 JSON-RPC.<\/p>\n<p>\u0422\u0443\u0442 \u0432\u0441\u043a\u0440\u044b\u043b\u0441\u044f \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0439 \u043a\u0430\u043c\u0435\u043d\u044c: <strong>\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 UTF-16<\/strong>.<br \/> \u0412 VS Code \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438\u0437\u043c\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0432 16-\u0431\u0438\u0442\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 UTF-16. \u0415\u0441\u043b\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u043e\u0432\u0435\u043b\u043b\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u044d\u043c\u043e\u0434\u0437\u0438, \u044f\u043f\u043e\u043d\u0441\u043a\u0438\u0435 \u0438\u0435\u0440\u043e\u0433\u043b\u0438\u0444\u044b \u0438\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438, \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 len() \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0431\u0435\u0437\u0431\u043e\u0436\u043d\u043e \u0432\u0440\u0430\u0442\u044c, \u0438 \u043a\u0440\u0430\u0441\u043d\u0430\u044f \u0432\u043e\u043b\u043d\u0438\u0441\u0442\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u0441\u044a\u0435\u0437\u0436\u0430\u0435\u0442 \u043c\u0438\u043c\u043e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0441\u0447\u0451\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439 get_utf16_range, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c-\u0432-\u043f\u0438\u043a\u0441\u0435\u043b\u044c.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0435 \u043b\u0430\u0433\u0430\u043b \u043f\u0440\u0438 \u043d\u0430\u0431\u043e\u0440\u0435 \u0442\u0435\u043a\u0441\u0442\u0430, \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0441\u0438\u0442 debounce-\u0442\u0430\u0439\u043c\u0435\u0440 \u043d\u0430 150 \u043c\u0441: \u043b\u0438\u043d\u0442\u0435\u0440 \u043d\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0430\u0436\u0430\u0442\u0443\u044e \u043a\u043b\u0430\u0432\u0438\u0448\u0443, \u0430 \u0431\u0435\u0440\u0451\u0442 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443. \u041d\u0430 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u0443\u0445\u043e\u0434\u0438\u0442 <strong>10\u201315 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434<\/strong>:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/ae\/03\/48\/ae03487d7ba49144dc05671157dbe56e.png\" alt=\"\u0412\u0441\u044f \u0441\u0443\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u0442\u0443\u043b\u0442\u0438\u043f\u0435: Senpy \u0432\u0438\u0434\u0438\u0442 \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u0433 {b} \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0444\u0438\u043a\u0441 \u043f\u043e Ctrl+., \u043f\u043e\u043a\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u043c \u0441\u0435\u0440\u044c\u0451\u0437\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u0433 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 (character) b\" title=\"\u0412\u0441\u044f \u0441\u0443\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u0442\u0443\u043b\u0442\u0438\u043f\u0435: Senpy \u0432\u0438\u0434\u0438\u0442 \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u0433 {b} \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0444\u0438\u043a\u0441 \u043f\u043e Ctrl+., \u043f\u043e\u043a\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u043c \u0441\u0435\u0440\u044c\u0451\u0437\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u0433 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 (character) b\" width=\"1186\" height=\"159\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/ae\/03\/48\/ae03487d7ba49144dc05671157dbe56e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/ae\/03\/48\/ae03487d7ba49144dc05671157dbe56e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0412\u0441\u044f \u0441\u0443\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u0442\u0443\u043b\u0442\u0438\u043f\u0435: Senpy \u0432\u0438\u0434\u0438\u0442 \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u0433 {b} \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0444\u0438\u043a\u0441 \u043f\u043e Ctrl+., \u043f\u043e\u043a\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u043c \u0441\u0435\u0440\u044c\u0451\u0437\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u0433 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 (character) b<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0440\u043a\u0435\u0442\u043f\u043b\u0435\u0439\u0441 Microsoft \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u2014 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 Azure \u0443 \u043c\u0435\u043b\u043a\u043e\u043c\u044f\u0433\u043a\u0438\u0445 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u0440\u043a \u0441 \u043a\u043e\u043d\u044f\u043c\u0438 \u0438 \u0431\u044e\u0440\u043e\u043a\u0440\u0430\u0442\u0438\u0435\u0439. \u0413\u043e\u0442\u043e\u0432\u044b\u0439 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 .vsix \u043b\u0435\u0436\u0438\u0442 \u0432 \u0440\u0435\u043b\u0438\u0437\u0430\u0445 \u043d\u0430 GitHub: \u0441\u043a\u0430\u0447\u0430\u043b, \u043d\u0430\u0436\u0430\u043b \u0432 VS Code \u00abInstall from VSIX\u00bb \u2014 \u0438 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438.<\/p>\n<hr\/>\n<h3>\u0410\u0432\u0442\u043e\u0444\u0438\u043a\u0441 \u043f\u043e Ctrl+. \u0438 \u0440\u0435\u0436\u0438\u043c \u0426\u0443\u043d\u0434\u0435\u0440\u0435<\/h3>\n<p>\u0427\u0430\u0441\u0442\u044c \u0442\u0443\u043f\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a Senpy \u0443\u043c\u0435\u0435\u0442 \u0447\u0438\u043d\u0438\u0442\u044c \u0441\u0430\u043c \u2014 \u0445\u043e\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0444\u043b\u0430\u0433 &#8212;fix \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u0445\u043e\u0442\u044c \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e Ctrl+. \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435:<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u0430\u0431\u044b \u0432 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u0445 \u043d\u0430 4 \u043f\u0440\u043e\u0431\u0435\u043b\u0430 (RPY001); <\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0447\u0438\u0449\u0430\u0435\u0442 \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0438\u0435 \u00ab\u0443\u043c\u043d\u044b\u0435\u00bb \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u201c \u201d \u00ab \u00bb \u0438\u0437 \u043a\u043e\u0434\u0430 (RPY002); <\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0442\u0435\u0433\u0438 \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0430\u0445 \u0432\u0440\u043e\u0434\u0435 {\/b} \u0438\u043b\u0438 {\/color} \u043f\u0440\u044f\u043c\u043e \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043a\u0430\u0432\u044b\u0447\u043a\u043e\u0439 (RPY301); <\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u043d\u044f\u0435\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0440\u043e\u0434\u0435 LiveComposite \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 Composite (RPY107). <\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e \u043b\u0435\u0437\u0442\u044c \u0432 \u0441\u044e\u0436\u0435\u0442\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0430\u0432\u0442\u043e\u0444\u0438\u043a\u0441\u043e\u043c \u044f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0435 \u0441\u0442\u0430\u043b. \u041b\u0438\u043d\u0442\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0431\u044b\u0442\u0430 \u0432 \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0435 \u043c\u0435\u043d\u044e, \u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u0437\u0430 \u0430\u0432\u0442\u043e\u0440\u0430, \u043a\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0435\u0439 \u0434\u0430\u0442\u044c \u043f\u043e \u0441\u044e\u0436\u0435\u0442\u0443 \u2014 \u044d\u0442\u043e \u0432\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u0441\u0451 \u043f\u043e\u043b\u043e\u043c\u0430\u0442\u044c.<\/p>\n<p>\u0410 \u0432\u0438\u0448\u0435\u043d\u043a\u0430 \u043d\u0430 \u0442\u043e\u0440\u0442\u0435 \u2014 \u0444\u043b\u0430\u0433 <strong>&#8212;tsundere<\/strong>.<\/p>\n<p>\u042f \u0437\u0430\u0448\u0438\u043b \u0435\u0433\u043e \u0447\u0438\u0441\u0442\u043e \u043f\u043e \u0444\u0430\u043d\u0443, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u043d\u044b\u043b\u044b\u0435 \u043b\u043e\u0433\u0438 \u043b\u0438\u043d\u0442\u0435\u0440\u0430. \u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u0443\u0445\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0437\u043b\u043e\u0439 \u0430\u043d\u0438\u043c\u0435-\u0434\u0435\u0432\u043e\u0447\u043a\u0438:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/90\/1e\/6b\/901e6b1a846dd5d1314a4694e4b98b2a.png\" width=\"959\" height=\"781\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/90\/1e\/6b\/901e6b1a846dd5d1314a4694e4b98b2a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/90\/1e\/6b\/901e6b1a846dd5d1314a4694e4b98b2a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/ef\/49\/79\/ef4979739028ad00858fc93bc62d2e43.png\" width=\"925\" height=\"384\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/ef\/49\/79\/ef4979739028ad00858fc93bc62d2e43.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/ef\/49\/79\/ef4979739028ad00858fc93bc62d2e43.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043b\u0438\u043d\u0442\u0435\u0440 \u043e\u0440\u0451\u0442 \u043d\u0430 \u0442\u0435\u0431\u044f \u0437\u0430 \u043a\u043e\u0441\u044f\u043a\u0438 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u0444\u0438\u043a\u0441\u0438\u0442\u044c \u0438\u0445 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u043a-\u0442\u043e \u0432\u0435\u0441\u0435\u043b\u0435\u0435.<\/p>\n<hr\/>\n<h3>\u0427\u0442\u043e \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438?<\/h3>\n<p>\u0412\u0435\u0441\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 DDLC Blue Skies \u043d\u0430 <strong>77 000 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430<\/strong> Senpy \u043f\u0435\u0440\u0435\u043b\u043e\u043f\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0430 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u043c \u0441\u0442\u0430\u0440\u0442\u0435 \u0437\u0430 <strong>~3.5\u20133.9 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/strong>.<\/p>\n<p>\u0421\u0435\u043a\u0440\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u043c\u044b \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c Pygame, \u043d\u0435 \u0433\u0440\u0443\u0437\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u043d\u0435 \u0433\u043e\u043d\u044f\u0435\u043c \u0442\u044f\u0436\u0435\u043b\u044b\u0435 \u043f\u0430\u0440\u0441\u0435\u0440-\u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u044b. \u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u0442\u0435\u0439\u0442-\u043c\u0430\u0448\u0438\u043d\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u0442 80% \u043b\u0438\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 AST \u0442\u043e\u0447\u0435\u0447\u043d\u043e \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043d\u0443\u0436\u043d\u044b\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c.<\/p>\n<h3>\u041b\u043e\u0436\u043a\u0430 \u0434\u0451\u0433\u0442\u044f: \u0433\u0434\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0431\u0435\u0441\u0441\u0438\u043b\u0435\u043d<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043b\u043b\u044e\u0437\u0438\u0439: Senpy \u2014 \u044d\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0447\u0435\u043a\u0435\u0440, \u0430 \u043d\u0435 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442 \u0441 \u0445\u0440\u0443\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0448\u0430\u0440\u043e\u043c. \u0423 \u0441\u0442\u0430\u0442\u0430\u043d\u0430\u0437\u0430 \u0432 \u0442\u0430\u043a\u043e\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0434\u0432\u0438\u0436\u043a\u0435, \u043a\u0430\u043a Ren&#8217;Py, \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b:<\/p>\n<ol>\n<li>\n<p><strong>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435.<\/strong> \u0415\u0441\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e renpy.jump(&#171;scene_&#187; + str(chapter_id)) \u0438\u043b\u0438 \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0433\u0440\u044b \u2014 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0432 \u043c\u0438\u0440\u0435 \u043d\u0435 \u0443\u0433\u0430\u0434\u0430\u0435\u0442, \u043a\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0442\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u041d\u0430 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043a\u0438 \u043b\u0438\u043d\u0442\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0440\u0443\u0433\u043d\u0443\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043d\u0430 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 (RPY303), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0445 \u0441\u0442\u043e\u0438\u0442 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u0430\u0440\u043d\u0438\u043d\u0433 \u2014 \u0431\u0430\u0433.<\/strong> \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434 \u043f\u043e\u0432\u0435\u0440\u0445 \u0447\u0443\u0436\u043e\u0439 \u0438\u0433\u0440\u044b, \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u043e\u0432\u0435\u043b\u043b\u044b \u2014 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u043b\u0438\u043d\u0442\u0435\u0440 \u043d\u0435 \u0441\u043f\u0430\u043c\u0438\u043b, \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u043f\u0440\u0430\u0432\u0438\u043b \u043b\u0435\u0433\u043a\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0444\u0438\u0433 senpy.toml \u0438\u043b\u0438 \u0442\u043e\u0447\u0435\u0447\u043d\u043e \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 # noqa: RPY504.<\/p>\n<\/li>\n<li>\n<p><strong>\u0425\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u043d \u043d\u0435 \u043e\u0446\u0435\u043d\u0438\u0442.<\/strong> \u041b\u0438\u043d\u0442\u0435\u0440 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0441\u044e\u0436\u0435\u0442, \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u0438\u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0434\u0440\u0430\u043c\u0430. \u041e\u043d \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e: \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0435 \u0438\u0441\u043f\u0430\u0440\u044f\u043b\u0438\u0441\u044c, \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u043d\u0435 \u043b\u043e\u043c\u0430\u043b\u0438 \u043f\u0430\u0440\u0441\u0435\u0440, \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u043b\u0438\u0441\u044c, \u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0438\u0441\u044c \u0432 \u0442\u044b\u043a\u0432\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0443\u0437\u0435\u0439\u043d\u044b\u0435 \u044d\u043a\u0441\u043f\u043e\u043d\u0430\u0442\u044b \u0432\u0440\u0435\u043c\u0451\u043d \u0440\u0430\u043d\u043d\u0435\u0433\u043e Ren&#8217;Py 6.<\/strong><br \/> \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Senpy \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435, \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0443 \u043d\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ast.parse \u0438\u0437 Python 3.<br \/> \u0421 \u0438\u0433\u0440\u0430\u043c\u0438 \u043d\u0430 <strong>Ren\u2019Py 8<\/strong> (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0432\u0435\u0436\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0433\u0434\u0435 \u0432\u0441\u0451 \u0434\u043e \u0431\u0430\u0439\u0442\u0430 \u0437\u0430\u0448\u0438\u0442\u043e \u0432 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u044b\u0439 .rpa) \u0438 \u043f\u043e\u0437\u0434\u043d\u0438\u043c\u0438 \u043d\u0430 <strong>Ren\u2019Py 7 \/ 6.99<\/strong> \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u2014 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u00ab\u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u041b\u0435\u0442\u0430\u00bb \u0438 \u043c\u043e\u043d\u0441\u0442\u0440\u0443\u043e\u0437\u043d\u044b\u0439 DDLC Blue Skies \u043b\u0438\u043d\u0442\u0435\u0440 \u043f\u0440\u043e\u0433\u043b\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u043d\u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0435\u0432\u043d\u0435\u043c \u043c\u0430\u043c\u043e\u043d\u0442\u0435 \u0432\u0440\u043e\u0434\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 Katawa Shoujo (\u044d\u043f\u043e\u0445\u0438 Ren&#8217;Py 6.12) \u043b\u0438\u043d\u0442\u0435\u0440 \u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f. \u0418 \u0434\u0435\u043b\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432 \u0434\u0440\u0435\u043c\u0443\u0447\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445 Python 2.7 \u0432\u0440\u043e\u0434\u0435 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 except Exception, e:. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0431\u0435\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u041a\u0430\u0442\u0430\u0432\u0435 \u043f\u043e\u0437\u044b, \u044d\u043c\u043e\u0446\u0438\u0438 \u0438 \u043a\u0443\u0447\u0430 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0435 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0434\u0432\u0438\u0436\u043a\u0430. \u0414\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u042f \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0443, \u043d\u043e \u043f\u043e\u043d\u044f\u043b: \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u044d\u0442\u043e \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0430\u043c\u0443 \u0438\u0433\u0440\u0443. \u041d\u043e \u0442\u043e\u0433\u0434\u0430 \u0442\u0443\u0442 \u0438 Senpy \u0443\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>\u0414\u0430 \u0438 \u0442\u044f\u043d\u0443\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043b\u0435\u0433\u0430\u0441\u0438 \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u0446\u0435\u043b\u0438 \u043d\u0435 \u0441\u0442\u043e\u044f\u043b\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u043e\u043b\u043e\u0442\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0434\u043b\u044f Senpy \u2014 \u044d\u0442\u043e <strong>Ren&#8217;Py 6.99, 7 \u0438 8<\/strong>. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445, \u043d\u043e \u043a\u0430\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443. \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u2014 \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c, \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<\/li>\n<\/ol>\n<p>Senpy \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0440\u0443\u0447\u043d\u043e\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043d\u043e \u043e\u043d \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432 \u0441\u0430\u043c\u0443\u044e \u0442\u0443\u043f\u0443\u044e \u0438 \u0432\u044b\u043c\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0440\u0443\u0442\u0438\u043d\u0443 \u2014 \u043e\u0442\u043b\u043e\u0432 \u0442\u0443\u043f\u044b\u0445 \u043a\u0440\u0430\u0448\u0435\u0439 \u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a.<\/p>\n<hr\/>\n<h3>\u041a\u0430\u043a \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/h3>\n<p>\u042f\u0434\u0440\u043e \u043b\u0438\u043d\u0442\u0435\u0440\u0430 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e Python-\u043f\u0430\u043a\u0435\u0442\u0430. \u0418\u043c\u044f senpy \u043d\u0430 PyPI, \u0443\u0432\u044b, \u0443\u0436\u0435  \u0437\u0430\u043d\u044f\u0442\u043e \u0434\u0440\u0435\u0432\u043d\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u043a\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u0432\u043d\u043e \u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u043a\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>senpy-linter<\/strong>, \u043d\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a:<\/p>\n<pre><code class=\"bash\">pip install senpy-linter<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>(\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0438\u043c\u044f senpy \u043d\u0430 PyPI \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043d\u044f\u0442\u043e \u0447\u0443\u0436\u043e\u0439 \u0434\u0440\u0435\u0432\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0430\u0432\u0438\u043c \u0438\u043c\u0435\u043d\u043d\u043e senpy-linter, \u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0451 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 senpy).<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u043b\u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434, \u043d\u0430\u0442\u0440\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 game:<\/p>\n<pre><code class=\"bash\">senpy \"\u043f\u0443\u0442\u044c\/\u043a\/\u043f\u0440\u043e\u0435\u043a\u0442\u0443\/game\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 cmd \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 \/game \u043d\u0443\u0436\u043d\u043e\u0439 \u0438\u0433\u0440\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0448\u0435\u043c senpy<\/p>\n<h4>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438:<\/h4>\n<ul>\n<li>\n<p><strong>&#8212;fix<\/strong> \u2014 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0431\u044b\u0442\u044b\u0435 \u0442\u0435\u0433\u0438 {b}&#8230;{\/b}, \u0432\u044b\u0447\u0438\u0449\u0430\u0435\u0442 \u043a\u0440\u0438\u0432\u044b\u0435 \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0441\u043a\u0438\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u0430\u0431\u044b \u043d\u0430 4 \u043f\u0440\u043e\u0431\u0435\u043b\u0430. <\/p>\n<\/li>\n<li>\n<p><strong>&#8212;generate-defaults<\/strong> \u2014 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043b\u0435\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 $, \u0438 \u0441\u0430\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b senpy_defaults.rpy, \u0441\u043f\u0430\u0441\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0445 \u0441\u0435\u0439\u0432\u043e\u0432. <\/p>\n<\/li>\n<li>\n<p><strong>&#8212;graph-file story.md<\/strong> \u2014 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u0446\u0435\u043d\u0430\u043c\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Mermaid. <\/p>\n<\/li>\n<li>\n<p><strong>&#8212;errors-only<\/strong> \u2014 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u0441\u044f\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0443\u0440\u043e\u043d\u044f\u0442 \u0438\u0433\u0440\u0443. <\/p>\n<\/li>\n<li>\n<p><strong>&#8212;ignore RPY104 RPY303<\/strong> \u2014 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u043c\u043e\u0434\u0430. <\/p>\n<\/li>\n<li>\n<p><strong>&#8212;tsundere<\/strong> \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u0437\u043b\u043e\u0439 \u0430\u043d\u0438\u043c\u0435-\u0434\u0435\u0432\u043e\u0447\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f. <\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0432 VS Code \u2014 \u0437\u0430\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d .vsix \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0444\u0438\u0447\u0430\u043c\u0438 LSP \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 <a href=\"https:\/\/github.com\/Xilleet\/senpy\/releases\" rel=\"noopener nofollow\"><strong>Releases \u043d\u0430 GitHub<\/strong><\/a>.<\/p>\n<p><strong>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e \u0432\u0441\u0435\u043c 33 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u0438 \u0431\u0430\u0433-\u0442\u0440\u0435\u043a\u0435\u0440:<\/strong><br \/> \ud83d\udc49 <a href=\"https:\/\/github.com\/Xilleet\/senpy\" rel=\"noopener nofollow\"><strong>https:\/\/github.com\/Xilleet\/senpy<\/strong><\/a><\/p>\n<hr\/>\n<h3>\u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435<\/h3>\n<p>\u0412\u0441\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c \u0441 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0447\u0443\u0436\u043e\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0438 \u043d\u0435 \u0441\u043e\u0439\u0442\u0438 \u0441 \u0443\u043c\u0430 \u043e\u0442 \u0440\u0443\u0447\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432, \u0430 \u0432\u044b\u043b\u0438\u043b\u043e\u0441\u044c \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0430 Ren&#8217;Py \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0438\u0448\u043a\u0430 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0438 \u043d\u0435 \u0432 \u0446\u0443\u043d\u0434\u0435\u0440\u0435-\u0440\u0443\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0445. \u041a\u0430\u0439\u0444 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u043e\u0438\u0448\u044c\u0441\u044f \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435: \u0442\u0435\u0431\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0447\u0430\u0441\u0430\u043c\u0438 \u043f\u0440\u043e\u043a\u043b\u0438\u043a\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0443 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0433\u043b\u0443\u043f\u0430\u044f \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0442\u0440\u0451\u0445\u043c\u0435\u0441\u044f\u0447\u043d\u043e\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u0432 \u0437\u0430\u0431\u044b\u0442\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u0435\u0442 \u0438\u0433\u0440\u043e\u043a\u0443 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0442\u0438\u0442\u0440\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u0441\u0432\u043e\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u043e\u0432\u0435\u043b\u043b\u044b \u0438\u043b\u0438 \u043f\u0438\u043b\u0438\u0442\u0435 \u043c\u043e\u0434\u044b \u043d\u0430 Ren&#8217;Py \u2014 \u043f\u0440\u043e\u0433\u043e\u043d\u0438\u0442\u0435 Senpy \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u0442\u043a\u043d\u0451\u0442\u0435\u0441\u044c \u043d\u0430 \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0438\u043d\u0442\u0435\u0440 \u043d\u0435 \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u043b, \u0438\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u2014 \u0432\u0435\u043b\u043a\u0430\u043c \u0432 Issues \u043d\u0430 \u0413\u0438\u0442\u0445\u0430\u0431\u0435 \u0438\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u0442\u0443\u0442 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1098624\/\">https:\/\/habr.com\/ru\/articles\/1098624\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u0430\u043a \u044f \u043f\u043e\u043b\u0435\u0437 \u0444\u0438\u043a\u0441\u0438\u0442\u044c \u0440\u0443\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043c\u043e\u0434\u0430 \u043a DDLC, \u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0434\u043b\u044f Ren\u2019Py \u0441\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 Ruff \u0441\u043e \u0441\u0442\u0430\u0442\u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439, \u0440\u0430\u0437\u0432\u0438\u043b\u043e\u043a \u0438 LSP.\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0447\u0443\u0436\u0438\u0445 \u0431\u0430\u0433\u043e\u0432\u041d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u044d\u0442\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0451\u043d\u043d\u043e: \u044f \u0441\u0435\u043b \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u0440\u0438\u0432\u0443\u0449\u0438\u0439 \u0440\u0443\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0430 DDLC Blue Skies. \u041c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0442\u0430\u043c \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0431\u044b\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0430\u0442\u0442\u0440\u0430\u043a\u0446\u0438\u043e\u043d\u043e\u043c, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u0441\u043a\u0440\u044b\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u0445\u0443\u0436\u0435: \u043f\u043e\u043c\u0438\u043c\u043e \u043a\u0440\u0438\u0432\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0442\u043e\u043d\u043d\u0430\u043c\u0438 \u0432\u044b\u0433\u0440\u0435\u0431\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0430\u0433\u0443\u043b\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u044f\u043d\u0443\u043b\u0438\u0441\u044c \u0435\u0449\u0451 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430.\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u044c \u0440\u0430\u0437 \u043a\u043e\u0432\u044b\u0440\u044f\u043b\u0438 \u043c\u043e\u0434\u044b \u043d\u0430 Ren\u2019Py \u0438\u043b\u0438 \u043f\u0438\u043b\u0438\u043b\u0438 \u0441\u0432\u043e\u044e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u043e\u0432\u0435\u043b\u043b\u0443, \u0442\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u043d\u0430\u0435\u0442\u0435 \u044d\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0443: \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0447\u0438\u0441\u0442\u0435\u043d\u044c\u043a\u043e, \u0438\u0433\u0440\u0430 \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442, \u043f\u0430\u0440\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0440\u0443\u0442\u043e\u0432 \u043f\u0440\u043e\u043a\u043b\u0438\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u0430&#8230; \u0430 \u0433\u0434\u0435-\u0442\u043e \u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u043e\u043c \u0447\u0430\u0441\u0443 \u0438\u0433\u0440\u044b \u0432 \u0433\u043b\u0443\u0445\u043e\u0439 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 \u043b\u0435\u0436\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 \u043f\u043e\u043c\u0438\u043d\u0435 \u043d\u0435\u0442, \u043f\u0440\u044b\u0436\u043e\u043a \u0432 \u043d\u0438\u043a\u0443\u0434\u0430 \u0438\u043b\u0438 \u043a\u0440\u0438\u0432\u043e\u0439 \u044d\u043a\u0440\u0430\u043d, \u0440\u043e\u043d\u044f\u044e\u0449\u0438\u0439 \u0438\u0433\u0440\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0440\u0435\u0448\u0438\u043b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043f\u0430\u0440\u0443 \u043a\u0430\u0434\u0440\u043e\u0432 \u0440\u0430\u043d\u044c\u0448\u0435.\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043b\u043e\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0432 Ren&#8217;Py \u2014 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u0438 \u0447\u0430\u0441\u0430\u043c\u0438 \u0434\u043e\u043b\u0433\u043e \u0438 \u043c\u0443\u0442\u043e\u0440\u043d\u043e \u0442\u044b\u043a\u0430\u0442\u044c \u043f\u043e \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0430\u043c, \u043d\u0430\u0434\u0435\u044f\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043a\u0440\u0438\u0432\u043e\u0439 \u0440\u0443\u0442 \u043f\u043e\u043f\u0430\u0434\u0451\u0442\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0437\u0430. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432 \u043d\u043e\u0432\u0435\u043b\u043b\u0435 \u043f\u043e\u0434 20\u201330 \u0447\u0430\u0441\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438, \u0440\u0443\u0447\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043f\u0430\u0442\u0447\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u044b\u0442\u043a\u0443.\u0412 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 Python-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u044b\u043a \u043a \u0448\u0443\u0441\u0442\u0440\u043e\u043c\u0443 \u043b\u0438\u043d\u0442\u0435\u0440\u0443 Ruff: \u043e\u043d \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0431\u044c\u0451\u0442 \u043f\u043e \u0440\u0443\u043a\u0430\u043c \u0437\u0430 \u043a\u0440\u0438\u0432\u043e\u0439 \u043a\u043e\u0434 \u043f\u0440\u044f\u043c\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0430. \u0417\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0440\u043e\u0432\u043d\u043e \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u043b\u044f Ren\u2019Py. \u041f\u043e\u0448\u0451\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0442\u0443\u043b\u0437\u044b \u2014 \u0438 \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u043f\u0443\u0441\u0442\u043e\u0442\u0443. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u0430\u043c\u0438, \u043d\u043e \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0442\u0435\u043a\u0441\u0442\u0430: \u0441\u043b\u0435\u0434\u044f\u0442, \u0447\u0442\u043e\u0431\u044b \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u044f \u0441\u0442\u043e\u044f\u043b\u0438 \u0433\u0434\u0435 \u043d\u0430\u0434\u043e, \u043d\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u043b\u0435\u043f\u044b \u043a \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 Ren&#8217;Py \u2014 \u043a \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u043c\u0435\u043d\u044e, \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0435 rollback, \u0443\u0442\u0435\u0447\u043a\u0430\u043c \u0432 \u044d\u043a\u0440\u0430\u043d\u0430\u0445 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 RPA-\u0430\u0440\u0445\u0438\u0432\u043e\u0432.\u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u043f\u0441\u0438\u0445\u0430\u043d\u0443\u043b \u0438 \u0441\u0435\u043b \u043d\u0430 \u043a\u043e\u043b\u0435\u043d\u043a\u0435 \u043d\u0430\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u2014 Senpy (semantic + renpy, \u043d\u0443 \u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u043e\u0442\u0441\u044b\u043b\u043a\u0430 \u043a senpai).\u0414\u0430, \u043f\u043e \u0444\u0430\u043d\u0443 \u044f \u0437\u0430\u0448\u0438\u043b \u0442\u0443\u0434\u0430 \u0440\u0435\u0436\u0438\u043c &#8212;tsundere, \u0433\u0434\u0435 \u043b\u0438\u043d\u0442\u0435\u0440 \u043a\u0440\u043e\u0435\u0442 \u0442\u0435\u0431\u044f \u043e\u0442\u0431\u043e\u0440\u043d\u044b\u043c\u0438 \u0444\u0440\u0430\u0437\u0430\u043c\u0438 \u0437\u043b\u043e\u0439 \u0430\u043d\u0438\u043c\u0435-\u0434\u0435\u0432\u043e\u0447\u043a\u0438 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0442\u044b \u0437\u0430\u0431\u044b\u043b \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0434\u0435\u0444\u043e\u043b\u0442\u044b \u0438\u043b\u0438 \u0441\u043b\u043e\u043c\u0430\u043b \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u043e\u0442\u043a\u0430\u0442\u0430. \u041d\u043e \u043f\u043e\u0434 \u044d\u0442\u043e\u0439 \u0448\u0443\u0442\u043a\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u0437\u0440\u043e\u0441\u043b\u0430\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0444\u0430\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u0441\u044f\u043a\u0438 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0433\u0440\u0430 \u0443\u043b\u0435\u0442\u0438\u0442 \u0432 \u0440\u0435\u043b\u0438\u0437 \u0438 \u043a\u0440\u0430\u0448\u043d\u0435\u0442\u0441\u044f \u0443 \u0436\u0438\u0432\u043e\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430.\u0427\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u043c\u0435\u0435\u0442 \u043b\u043e\u0432\u0438\u0442\u044c Senpy?\u041f\u043e \u0441\u0443\u0442\u0438, Senpy \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e, \u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a: \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430 \u043b\u0435\u0442\u0443, \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f Pygame \u0438 \u043d\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0436\u0434\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0433\u0440\u044b.\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0441 \u043f\u0430\u0440\u043e\u0439 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043e\u043a, \u043e\u043d \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u043a\u0443\u0445\u043d\u044e Ren&#8217;Py. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u043d\u0451\u043c 33 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0438 \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043e\u043d\u0438 \u043f\u043e \u0442\u0435\u043c \u043c\u0435\u0441\u0442\u0430\u043c, \u0433\u0434\u0435 \u0430\u0432\u0442\u043e\u0440\u044b \u043d\u043e\u0432\u0435\u043b\u043b \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u0440\u0435\u043b\u044f\u044e\u0442 \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443:\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439 (RPY1xx) \u2014 \u043b\u043e\u0432\u0438\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0435\u0437 \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u0432, \u043c\u0443\u0442\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u043a\u0440\u0438\u0432\u043e\u0439 \u0440\u0430\u043d\u0434\u043e\u043c, \u043b\u043e\u043c\u0430\u044e\u0449\u0438\u0439 \u043e\u0442\u043a\u0430\u0442 \u043d\u0430\u0437\u0430\u0434. \u042d\u043a\u0440\u0430\u043d\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (RPY2xx) \u2014 \u043f\u0440\u0435\u0434\u0438\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0443\u0442\u0430\u0446\u0438\u0438, \u043a\u043d\u043e\u043f\u043a\u0438-\u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0438 \u0431\u0435\u0437 action \u0438 \u0442\u044f\u0436\u0451\u043b\u044b\u0435 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0435 \u0446\u0438\u043a\u043b\u044b, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0435 UI \u0432 \u0441\u043b\u0430\u0439\u0434-\u0448\u043e\u0443. \u0414\u0438\u0430\u043b\u043e\u0433\u0438 \u0438 \u043f\u043e\u0442\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (RPY3xx) \u2014 \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u0442\u0435\u0433\u0438 {b}, \u043f\u0440\u044b\u0436\u043a\u0438 \u043d\u0430 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043a\u0438 \u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0430\u043b\u044b \u0441\u044e\u0436\u0435\u0442\u0430 \u0432 \u0447\u0443\u0436\u0438\u0435 \u0441\u0446\u0435\u043d\u044b. \u0421\u044e\u0436\u0435\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0432\u0438\u043b\u043a\u0438 \u0432 \u043c\u0435\u043d\u044e (RPY4xx) \u2014 \u0437\u0430\u0431\u044b\u0442\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 \u0432 \u0432\u044b\u0431\u043e\u0440\u0430\u0445, \u043f\u0443\u0441\u0442\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 menu \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f. \u0410\u0441\u0441\u0435\u0442\u044b \u0438 \u043c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b\u044b (RPY5xx) \u2014 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438 \u0432 \u0441\u043f\u0440\u0430\u0439\u0442\u0430\u0445, \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u0430\u044f \u043c\u0443\u0437\u044b\u043a\u0430 \u0438 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u044c .rpa \u0430\u0440\u0445\u0438\u0432\u043e\u0432. \u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f (RPY6xx) \u2014 \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 game\/tl\/, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u043b\u043e\u043c\u0430\u043b \u0442\u0435\u0433 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438 \u0438\u0433\u0440\u0430 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442 \u0441 KeyError. \u0421\u0443\u0445\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0437 \u0434\u043e\u043a\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043a\u0443\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043a\u0430\u0436\u0443 \u043d\u0430 \u0436\u0438\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u0433\u0434\u0435 \u0430\u0432\u0442\u043e\u0440\u044b \u043d\u043e\u0432\u0435\u043b\u043b \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0430\u043c\u0438 \u0441\u0435\u0431\u0435 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u044b.\u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u0451\u0440\u0433\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 renpy lint?\u041f\u0435\u0440\u0432\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u043b\u044e\u0431\u043e\u0433\u043e, \u043a\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439: \u00ab\u0417\u0430\u0447\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434, \u0435\u0441\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u0434\u0432\u0438\u0436\u043a\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 renpy.exe &lt;\u043f\u0443\u0442\u044c&gt; lint?\u00bb\u041d\u043e \u0435\u0441\u043b\u0438 \u043a\u043e\u043f\u043d\u0443\u0442\u044c, \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043b\u0438\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0433\u0440\u0443\u0441\u0442\u043d\u043e:\u041e\u043d \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 lint \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0434\u0432\u0438\u0436\u043e\u043a: \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043a\u0440\u044b\u0442\u043e\u0435 \u043e\u043a\u043d\u043e Pygame, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 init python \u0431\u043b\u043e\u043a\u0438 \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0442\u0438\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c. \u041d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 70 000 \u0441\u0442\u0440\u043e\u043a \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u0438\u0441\u0438\u0442 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e 30\u201340. \u041f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043a Language Server \u0432 VS Code, \u0447\u0442\u043e\u0431\u044b \u043e\u0448\u0438\u0431\u043a\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0437\u0430 15 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u044f\u043c\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u2014 \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435.\u041e\u043d \u0441\u043b\u0435\u043f \u043a \u043b\u043e\u0433\u0438\u043a\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043b\u0438\u043d\u0442\u0435\u0440\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043b\u0435\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 $ money = 10 \u2014 \u044d\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 Python. \u0414\u0432\u0438\u0436\u043e\u043a \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u0442\u0443\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0435 \u0435\u0451 \u043d\u0435\u0442. \u0410 \u0432\u043e\u0442 \u0442\u043e, \u0447\u0442\u043e \u0443 \u0438\u0433\u0440\u043e\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0434\u0435\u043b\u044e \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0430\u043b\u044f\u0442\u0441\u044f \u0441\u0435\u0439\u0432\u044b, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0435\u0442.\u0413\u043e\u043d\u044f\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 lint \u0432 GitHub Actions \u2014 \u044d\u0442\u043e \u043e\u0432\u0435\u0440\u0445\u0435\u0434: \u0432\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u0449\u0438\u0442\u044c \u0432 CI \u043c\u043d\u043e\u0433\u043e\u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u0441\u0430\u043c\u043e\u0433\u043e Ren&#8217;Py \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c headless-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0434\u0438 \u043f\u0430\u0440\u044b \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.\u0410 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 Tree-sitter \u0438\u043b\u0438 ANTLR?\u0412\u0442\u043e\u0440\u043e\u0439 \u0440\u0435\u0437\u043e\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0430\u0442\u0451\u0440\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430: \u00ab\u041e\u043a\u0435\u0439, \u043f\u0438\u0448\u0435\u0448\u044c \u0441\u0442\u0430\u0442\u0430\u043d\u0430\u0437 \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0432\u0437\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a \u0442\u0438\u043f\u0430 ANTLR, Lark \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b Tree-sitter?\u00bb\u041e\u0442\u0432\u0435\u0447\u0430\u044e: \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a \u0441 \u0434\u0432\u0438\u0436\u043a\u043e\u043c, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a Python-\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0447\u0451\u0442\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0432\u0435\u0440\u0445\u0435\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0441\u044f. \u0413\u0438\u0431\u0440\u0438\u0434 &#171;\u0441\u0442\u0435\u0439\u0442-\u043c\u0430\u0448\u0438\u043d\u0430 + ast.parse&#187; \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0437\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 99% \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u0431\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u0438-\u0431\u0438\u043d\u0434\u0438\u043d\u0433\u043e\u0432.\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u0432\u0438\u0436\u043a\u0430 \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u043c \u043b\u0435\u043a\u0441\u0435\u0440\u043e\u043c, \u0437\u0430\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043b\u043e\u0433\u0438\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0431\u0435\u0437\u0443\u043c\u043d\u044b\u0439 \u0433\u0438\u0431\u0440\u0438\u0434 \u0438\u0437 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0438\u0442\u043e\u043d\u0430, \u0432\u043a\u0440\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u0441\u0442\u0440\u043e\u043a. \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 \u0447\u0435\u0441\u0442\u043d\u0443\u044e EBNF-\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0430\u0434\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u0433\u043e\u0441\u0442\u0440\u043e\u0439: \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043c\u0435\u0441\u044f\u0446\u0430\u043c\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0430 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 \u043c\u0430\u0436\u043e\u0440\u043d\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 Ren&#8217;Py \u0432\u0441\u0451 \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f.\u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043f\u0440\u0430\u0433\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0439 \u0433\u0438\u0431\u0440\u0438\u0434:\u0414\u043b\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 (\u0434\u0438\u0430\u043b\u043e\u0433\u0438, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b, \u044d\u043a\u0440\u0430\u043d\u044b) \u2014 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u0430\u044f \u0441\u0442\u0435\u0439\u0442-\u043c\u0430\u0448\u0438\u043d\u0430 \u043a\u0430\u0432\u044b\u0447\u0435\u043a, \u0441\u043a\u043b\u0435\u0439\u043a\u0430 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u043f\u0440\u043e\u0444\u0438\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0438. \u0414\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u0433\u0434\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f Python (\u0432\u0441\u0451, \u0447\u0442\u043e \u0438\u0434\u0451\u0442 \u043f\u043e\u0441\u043b\u0435 $, \u0443\u0441\u043b\u043e\u0432\u0438\u044f if\/elif \u0438 \u0431\u043b\u043e\u043a\u0438 python:) \u2014 \u043d\u0430\u0442\u0440\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c ast.parse. \u042d\u0442\u043e \u0434\u0430\u043b\u043e \u0441\u0443\u043c\u0430\u0441\u0448\u0435\u0434\u0448\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c: Senpy \u043d\u0435 \u0441\u0442\u0440\u043e\u0438\u0442 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u044b\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043d\u043e \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u043e\u0434 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u0443\u0437\u043b\u044b.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434?\u0412 Ren\u2019Py \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u043e\u0432\u0435\u043b\u043b\u044b \u0436\u0438\u0432\u0443\u0442 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u043e\u0439 \u043e\u0431\u0449\u0435\u0439 \u043f\u043e\u043c\u043e\u0439\u043a\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d (store). \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0443 label scene_2 \u0438\u043b\u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0432 chapter_1.rpy, \u0430 \u043f\u0440\u044b\u0433\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0451 \u0438\u0437 script.rpy.\u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443, \u043b\u0438\u043d\u0442\u0435\u0440 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0439\u0434\u0451\u0442 \u0441 \u0443\u043c\u0430: \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043e\u0440\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440 \u0435\u0449\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0434\u043e\u0448\u0451\u043b.\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0442\u0440\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0434\u0432\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0430:\u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 (\u0441\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432): Senpy \u043f\u0440\u043e\u043b\u0435\u0442\u0430\u0435\u0442 \u043f\u043e \u0432\u0441\u0435\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438: \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043a\u0438, \u044d\u043a\u0440\u0430\u043d\u044b, default, define, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, layeredimage \u0438 \u0430\u0443\u0434\u0438\u043e\u0430\u043b\u0438\u0430\u0441\u044b. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439.\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 (\u043f\u0440\u043e\u0433\u043e\u043d \u043f\u0440\u0430\u0432\u0438\u043b): \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u0434\u0451\u0442 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0437\u0430\u043d\u043e\u0432\u043e, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u0437\u043d\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044f jump chapter_two, \u043e\u043d \u0443\u0436\u0435 \u043d\u0435 \u0433\u0430\u0434\u0430\u0435\u0442, \u0430 \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u0442, \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u0430\u044f \u043c\u0435\u0442\u043a\u0430 \u0445\u043e\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f.\u0421\u0442\u0435\u043a \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (ScopeStack)\u041f\u043e\u043c\u0438\u043c\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043a\u043e\u0443\u043f\u0430, \u0432 \u043d\u043e\u0432\u0435\u043b\u043b\u0435 \u0435\u0441\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u044b: \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u044d\u043a\u0440\u0430\u043d\u043e\u0432, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u0446\u0438\u043a\u043b\u0430\u0445 for \u0432\u043d\u0443\u0442\u0440\u0438 UI, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u0435\u0442\u043e\u043a. \u0415\u0441\u043b\u0438 \u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043e\u0431\u0449\u0443\u044e \u043a\u0443\u0447\u0443, \u043d\u0430\u0447\u043d\u0443\u0442\u0441\u044f \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f.\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u043a\u0430\u0448\u0443, \u043c\u044b \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0438 ScopeStack \u2014 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0435\u043a \u0441\u043a\u043e\u0443\u043f\u043e\u0432 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 Mypy:class ScopeStack:    def __init__(self, builtins: set[str]):        global_scope = Scope(ScopeType.GLOBAL, &#171;global&#187;, -1)        global_scope.symbols.update(builtins)        self.scopes: list[Scope] = [global_scope]    def add_symbol(self, var: str, is_constant: bool = False,                   is_global: bool = False) -&gt; None:        target = self.global_scope if is_global else self.current        target.symbols.add(var)        if is_constant:            target.constants.add(var)    def is_declared(self, var: str) -&gt; bool:        return any(var in scope.symbols for scope in reversed(self.scopes))    def is_constant(self, var: str) -&gt; bool:        return any(var in scope.constants for scope in reversed(self.scopes))\u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u0445: \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 screen shop(page_idx): \u2014 \u043f\u0443\u0448\u0438\u043c \u043d\u043e\u0432\u044b\u0439 SCREEN-\u0441\u043a\u043e\u0443\u043f \u0441 \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0430 \u0438 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u043c \u0442\u0443\u0434\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 page_idx. \u041e\u0442\u0441\u0442\u0443\u043f \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c 0 \u2014 \u0441\u0442\u0435\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0434\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043a\u043e\u0443\u043f\u0430 \u0447\u0435\u0440\u0435\u0437 pop_to_indent.\u0410 reversed(self.scopes) \u0438\u0449\u0435\u0442 \u0438\u043c\u0435\u043d\u0430 \u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u044d\u043a\u0440\u0430\u043d\u0430\/\u0446\u0438\u043a\u043b\u0430, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e \u2014 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 store.\u0413\u0434\u0435 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 Python AST\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 Ren&#8217;Py, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0445 \u0432\u0441\u0442\u0430\u0432\u043e\u043a, \u043e\u043d\u0438 \u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f \u043e\u0431 \u043a\u043e\u043b\u0435\u043d\u043e.\u0411\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0432 Ren&#8217;Py \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 define, \u0438 \u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u2014 \u044d\u0442\u043e \u043d\u0430\u0433\u043b\u0443\u0445\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u043e\u0442\u043a\u0430\u0442\u0430 \u043d\u0430\u0437\u0430\u0434 (Rollback). \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u0438\u0448\u0435\u0442 $ MAX_HP += 10, \u043b\u0438\u043d\u0442\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u0430\u0442\u044c \u043b\u0435\u0449\u0430 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 RPY105.\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u044d\u0442\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u043e\u0439: \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b, \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043d\u0435 \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445 \u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043b\u044e\u0441, \u0438 \u043e\u0442\u0441\u0435\u043a\u0430\u0442\u044c \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u0427\u0435\u0440\u0435\u0437 ast.parse \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0438 \u0431\u0435\u0437\u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u2014 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0443\u0437\u0435\u043b AugAssign (\u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435):elif isinstance(node, ast.AugAssign) and isinstance(node.target, ast.Name):    var_name = node.target.id    # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 ScopeStack, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0438\u0437 define    if var_name in self.analyzer.defined_constants:        # \u0418\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 Character(&#8230;) \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432 define        if var_name not in self.analyzer.declared_characters:            self.analyzer._add_diagnostic(                Diagnostic(                    file_path=file_path,                    line_number=real_line,                    line_content=raw_l.strip(),                    code=&#187;RPY105&#8243;,                    message=(                        f&#187;Constant &#8216;{var_name}&#8217; was declared with &#8216;define&#8217;, &#187;                    &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-500030","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=500030"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500030\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=500030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=500030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=500030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}