āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻšāĻ˛ āĻāĻāĻŋ āĻ¸āĻŋāĻāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻā§āĻāĻ°āĻŖāĨ¤ āĻāĻŦāĻ āĻ¯āĻĻāĻŋāĻ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻāĻāĻžāĻ¨āĻž āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻĨā§āĻā§ PVS-Studio āĻĒā§āĻ°ā§āĻā§āĻā§āĻā§āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻāĻŽāĻžāĻ¨ā§āĻĄā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻŽāĻ°āĻž āĻāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋāĻā§ āĻāĻ°āĻ āĻŦā§āĻļāĻŋ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻāĻ°ā§ āĻāĻ˛ā§āĻāĻŋāĨ¤ āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻāĻ¤ā§ āĻāĻāĻ¨ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻāĻāĻĒā§āĻāĻā§ āĻāĻŋāĻŽāĻ¸āĻŋāĻāĻŋ - āĻāĻŋāĻŽāĻ¸āĻŋāĻāĻŋ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻĒā§āĻ°āĻāĻžāĻ°ā§āĻ° āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻĻā§āĻāĻž āĻ¯āĻžāĻ āĻāĻāĻž āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§āĨ¤
āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¤āĻĨā§āĻ¯
āĻāĻŦā§āĻˇāĻŖāĻž āĻ āĻ§ā§āĻ¨ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¤āĻĨā§āĻ¯
āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖā§ āĻāĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻžāĻāĻŋ āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ - āĻāĻ¸ā§āĻ¨ OpenRCT2 āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŋāĨ¤
āĻ¸āĻŽāĻ¨ā§āĻŦāĻ¯āĻŧ
āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻžāĻāĻāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻŦ āĻāĻŦāĻ āĻāĻŽāĻžāĻ° āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ°ā§ āĻāĻŋāĻŽāĻ¸āĻŋāĻāĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻāĻžāĻ˛ā§ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻŽā§āĻšā§āĻ°ā§āĻ¤ āĻĨā§āĻā§ āĻļā§āĻ°ā§ āĻāĻ°āĻŦāĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¯ā§āĻ¤ā§ āĻšāĻŦā§: localhost:{port specified while installation process} (āĻāĻŽāĻžāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, localhost:9090) āĻāĻŦāĻ āĻ āĻ¨ā§āĻŽā§āĻĻāĻ¨ā§āĻ° āĻĄā§āĻāĻž āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻĒā§āĻ°āĻŦā§āĻļ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ āĻā§āĻ¯āĻ°ā§āĻĨāĻ¨āĻž āĻāĻžāĻ¨āĻžāĻ¨ā§ āĻšāĻŦā§:
Create Project āĻŦāĻžāĻāĻ¨ā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻ° āĻĒāĻ°ā§, āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻŖ āĻāĻ°ā§āĻ¨āĨ¤
āĻŦā§āĻ¤āĻžāĻŽ āĻāĻŋāĻĒāĻžāĻ¨ā§āĻ° āĻĒāĻ° āĻ¸ā§āĻˇā§āĻāĻŋ, āĻāĻŽāĻ°āĻž āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻāĻ¨ā§āĻĄā§ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸ā§āĻŦāĻžāĻāĻ¤ āĻāĻžāĻ¨āĻžāĻ¨ā§ āĻšāĻ¯āĻŧāĨ¤
āĻāĻ° āĻā§āĻ˛āĻŋāĻ āĻāĻ°āĻž āĻ¯āĻžāĻ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨.
āĻā§āĻˇā§āĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻŖ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§āĻ¨ āĻ¸ā§āĻˇā§āĻāĻŋ. āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻāĻāĻ¨ā§āĻĄā§ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻŦāĻ˛āĻā§āĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻ¤ā§āĻ¸ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤, āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§āĻ¨ āĻ˛āĻžāĻĢāĻžāĻ˛āĻžāĻĢāĻŋ āĻāĻ°āĻž.
āĻ
āĻŦāĻļā§āĻˇā§, āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸ā§āĻāĻŋāĻāĻ¸ā§ āĻāĻ˛ā§ āĻ¯āĻžāĻāĨ¤
āĻāĻ¸ā§āĻ¨ āĻ¸āĻŽāĻžāĻŦā§āĻļā§āĻ° āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻā§āĻ˛āĻŋ āĻ¯ā§āĻ āĻāĻ°āĻŋ, āĻāĻāĻŋ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§āĻ¨: āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻā§āĻĒ -> āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻā§āĻĒ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨.
āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻŋ:
- āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻžāĻāĻĒ -> āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨
- āĻāĻžāĻ˛āĻžāĻ¨ -> āĻāĻžāĻ¸ā§āĻāĻŽ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ
āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¸āĻāĻāĻ˛āĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŦ, āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ āĻ§āĻžāĻĒ āĻšāĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤, āĻ¤āĻžāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°āĻāĻŋ āĻĒā§āĻ°āĻŖ āĻāĻ°ā§āĻ¨ āĻāĻžāĻ¸ā§āĻāĻŽ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ:
āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§ āĻĒā§āĻĨāĻ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻā§āĻ˛āĻŋ āĻĻā§āĻāĻŦāĨ¤ āĻāĻāĻŋ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻ¯ā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ˛ā§āĻĄ āĻāĻ°āĻž, āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻž, āĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻž, āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻĻāĻ¨āĻāĻŋ āĻāĻāĻāĻĒā§āĻ āĻāĻ°āĻž āĻāĻŦāĻ āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻĄā§āĻ° āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻžāĻ°ā§ āĻ˛āĻžāĻāĻ¨ āĻ˛āĻžāĻā§āĨ¤
āĻļā§āĻˇ āĻāĻŋāĻ¨āĻŋāĻ¸āĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋ āĻ¸ā§āĻ āĻāĻ°ā§āĻ¨, āĻ¯āĻž āĻāĻŽāĻŋ āĻ¤āĻžāĻĻā§āĻ° āĻĒāĻ āĻ¨āĻ¯ā§āĻā§āĻ¯āĻ¤āĻž āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°āĻžāĻ° āĻāĻŋāĻā§ āĻāĻĒāĻžāĻ¯āĻŧ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°ā§āĻāĻŋāĨ¤ āĻāĻāĻŋ āĻāĻ°āĻ¤ā§, āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻ: āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ -> āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨:
āĻāĻĒāĻ¨āĻžāĻā§ āĻ¯āĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¤āĻž āĻšāĻ˛ āĻŦā§āĻ¤āĻžāĻŽ āĻāĻŋāĻĒā§āĻ¨ āĻāĻžāĻ˛āĻžāĻ¨ āĻāĻĒāĻ°ā§āĻ° āĻĄāĻžāĻ¨ āĻā§āĻŖāĻžāĻ¯āĻŧāĨ¤ āĻ¯āĻāĻ¨ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻā§āĻā§, āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻŦāĻ˛āĻŦāĨ¤
āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻ°ā§āĻŦāĻļā§āĻˇ PVS-Studio āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž Chocolatey āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋāĨ¤ āĻ¯āĻžāĻ°āĻž āĻāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻāĻžāĻ¨āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻāĻā§
choco install pvs-studio -y
āĻāĻ° āĻĒāĻ°ā§, āĻāĻ¸ā§āĻ¨ CLMonitor āĻĒā§āĻ°āĻā§āĻā§āĻ āĻŦāĻŋāĻ˛ā§āĻĄ āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻāĻžāĻ˛ā§ āĻāĻ°āĻŋāĨ¤
%CLmon% monitor â-attach
āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŽāĻāĻ¸āĻŦāĻŋ MSBuild āĻāĻ° āĻ¯ā§ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻāĻŋ āĻāĻŽāĻžāĻā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¤āĻžāĻ° āĻĒāĻĨ
%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable
āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ˛āĻāĻāĻ¨ āĻāĻŦāĻ āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ āĻā§ āĻ˛āĻŋāĻā§āĻ¨:
%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%
āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§, āĻĒā§āĻ°āĻŋāĻĒā§āĻ°āĻ¸ā§āĻ¸ āĻāĻ°āĻž āĻĢāĻžāĻāĻ˛ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻžāĻ° CLMonitor āĻāĻžāĻ˛āĻžāĻ¨:
%CLmon% analyze -l "c:ptest.plog"
āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĄāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻŦāĻŋāĻāĻļāĻ¨ āĻĨā§āĻā§ āĻ āĻ¨ā§āĻ¯ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤ PlogConverter āĻāĻāĻāĻŋ āĻ°āĻŋāĻĒā§āĻ°ā§āĻāĻā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ TeamCity-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°ā§āĨ¤ āĻāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻāĻ¨ā§āĻĄā§āĻ¤ā§ āĻĻā§āĻāĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻŦāĨ¤
%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"
āĻļā§āĻˇ āĻ§āĻžāĻĒā§ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ āĻāĻ°āĻž āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ stdout, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻāĻŋ āĻāĻŋāĻŽāĻ¸āĻŋāĻāĻŋ āĻĒāĻžāĻ°ā§āĻ¸āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻžāĻāĻžāĻ āĻāĻ°āĻž āĻšāĻŦā§ā§ˇ
type "C:tempptest.plog_TeamCity.txt"
āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻā§āĻĄ:
choco install pvs-studio -y
%CLmon% monitor --attach
set platform=x64
%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable
%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%
%CLmon% analyze -l "c:ptest.plog"
%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"
type "C:tempptest.plog_TeamCity.txt"
āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§, āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧā§āĻā§, āĻāĻŽāĻ°āĻž āĻā§āĻ¯āĻžāĻŦā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻāĻŦāĻ āĻāĻāĻž āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§āĻ¨āĨ¤
āĻāĻāĻ¨ āĻā§āĻ˛āĻŋāĻ āĻāĻ°āĻž āĻ¯āĻžāĻ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻŽā§āĻāĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĻā§āĻāĻ¤ā§ āĻ¯ā§āĻ¤ā§:
āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻžāĻā§āĻ˛āĻŋ āĻĄāĻžāĻ¯āĻŧāĻžāĻāĻ¨āĻ¸ā§āĻāĻŋāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¸āĻāĻā§āĻ¯āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻā§āĻˇā§āĻ ā§āĻŦāĻĻā§āĻ§ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§ˇ āĻā§āĻĄāĻāĻŋ āĻ¨ā§āĻāĻŋāĻā§āĻ āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž āĻ¸āĻš āĻ˛āĻžāĻāĻ¨ āĻ¨āĻŽā§āĻŦāĻ°ā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻĒāĻ°ā§āĻ° āĻĄāĻžāĻ¨āĻĻāĻŋāĻā§ āĻā§āĻŖāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻļā§āĻ¨ āĻāĻŋāĻšā§āĻ¨ā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°āĻ˛ā§ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻ¸āĻš āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻā§āĻ¯āĻžāĻŦ āĻā§āĻ˛āĻŦā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž āĻ¸āĻš āĻ˛āĻžāĻāĻ¨ āĻ¨āĻŽā§āĻŦāĻ°ā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§ āĻā§āĻĄāĻāĻŋ āĻ¨ā§āĻāĻŋāĻā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĻā§āĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ° āĻĨā§āĻā§ āĻ¨ā§āĻāĻŋāĻā§āĻļāĻ¨ āĻ¸āĻŽā§āĻāĻŦ SourceTreeRoot āĻāĻŋāĻšā§āĻ¨āĻŋāĻ¤āĻāĻžāĻ°ā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻ
āĻĒāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§ āĻāĻā§āĻ°āĻšā§ āĻ¯ā§ āĻā§āĻ āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻŦāĻŋāĻāĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¨āĻŋāĻā§āĻā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĻā§āĻāĻž
āĻāĻāĻ¨ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻ˛ā§āĻĄāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻŦāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻļā§āĻˇ āĻāĻ°ā§āĻāĻŋ, āĻāĻ¸ā§āĻ¨ āĻāĻŽāĻ°āĻž āĻ¯ā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻĻā§āĻāĻāĻŋ āĻ¤āĻžāĻ¤ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻāĻŋāĻā§ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž āĻĻā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻāĨ¤
āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž N1
Object* CreateObjectFromJson(....)
{
Object* result = nullptr;
....
result = CreateObject(entry);
....
if (readContext.WasError())
{
throw std::runtime_error("Object has errors");
}
....
}
Object* CreateObject(const rct_object_entry& entry)
{
Object* result;
switch (entry.GetType())
{
case OBJECT_TYPE_RIDE:
result = new RideObject(entry);
break;
case OBJECT_TYPE_SMALL_SCENERY:
result = new SmallSceneryObject(entry);
break;
case OBJECT_TYPE_LARGE_SCENERY:
result = new LargeSceneryObject(entry);
break;
....
default:
throw std::runtime_error("Invalid object type");
}
return result;
}
āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻā§āĻ¨ āĻ¯āĻž āĻāĻ¤āĻŋāĻļā§āĻ˛āĻāĻžāĻŦā§ āĻŽā§āĻŽāĻ°āĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻ āĻŦāĻā§āĻā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨, āĻ¯āĻāĻ¨ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻāĻā§, āĻŽā§āĻŽāĻ°āĻŋ āĻ¸āĻžāĻĢ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž, āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻŽā§āĻŽāĻ°āĻŋ āĻ˛āĻŋāĻ āĻāĻā§āĨ¤
āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž N2
static uint64_t window_cheats_page_enabled_widgets[] =
{
MAIN_CHEAT_ENABLED_WIDGETS |
(1ULL << WIDX_NO_MONEY) |
(1ULL << WIDX_ADD_SET_MONEY_GROUP) |
(1ULL << WIDX_MONEY_SPINNER) |
(1ULL << WIDX_MONEY_SPINNER_INCREMENT) |
(1ULL << WIDX_MONEY_SPINNER_DECREMENT) |
(1ULL << WIDX_ADD_MONEY) |
(1ULL << WIDX_SET_MONEY) |
(1ULL << WIDX_CLEAR_LOAN) |
(1ULL << WIDX_DATE_SET) |
(1ULL << WIDX_MONTH_BOX) | // <=
(1ULL << WIDX_MONTH_UP) |
(1ULL << WIDX_MONTH_DOWN) |
(1ULL << WIDX_YEAR_BOX) |
(1ULL << WIDX_YEAR_UP) |
(1ULL << WIDX_YEAR_DOWN) |
(1ULL << WIDX_DAY_BOX) |
(1ULL << WIDX_DAY_UP) |
(1ULL << WIDX_DAY_DOWN) |
(1ULL << WIDX_MONTH_BOX) | // <=
(1ULL << WIDX_DATE_GROUP) |
(1ULL << WIDX_DATE_RESET),
....
};
āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻžāĻĄāĻŧāĻž āĻā§āĻŦ āĻāĻŽ āĻ˛ā§āĻāĻ āĻāĻ āĻŽāĻ¨ā§āĻ¯ā§āĻā§āĻ¤āĻžāĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ¯āĻŧ āĻāĻ¤ā§āĻ¤ā§āĻ°ā§āĻŖ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻ āĻāĻĒāĻŋ-āĻĒā§āĻ¸ā§āĻ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻ āĻŦāĻŋāĻāĻ˛ āĻāĻ āĻāĻžāĻ°āĻŖā§ āĻāĻžāĻ˛.
āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž N3
struct RCT12SpriteBase
{
....
uint8_t flags;
....
};
struct rct1_peep : RCT12SpriteBase
{
....
uint8_t flags;
....
};
āĻ āĻŦāĻļā§āĻ¯āĻ, āĻŦā§āĻ¸ āĻā§āĻ˛āĻžāĻ¸ āĻāĻŦāĻ āĻĄāĻŋāĻ¸ā§āĻ¨ā§āĻĄā§āĻ¯āĻžāĻ¨ā§āĻā§ āĻāĻāĻ āĻ¨āĻžāĻŽā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋ āĻ¨āĻŋāĻā§āĻ āĻ āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ°ā§ āĻ¯ā§ āĻ āĻāĻŋāĻāĻžāĻŦāĻ āĻļā§āĻ°ā§āĻŖā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻļāĻŋāĻļā§ āĻļā§āĻ°ā§āĻŖāĻŋāĻ¤ā§ āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ°ā§ āĻāĻāĻ āĻ¨āĻžāĻŽā§ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻā§āĻˇāĻŖāĻž āĻāĻ°ā§ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻā§āĻ°āĻžāĻ¨ā§āĻ¤āĻŋ āĻ¸ā§āĻˇā§āĻāĻŋ āĻāĻ°āĻŋāĨ¤
āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž N4
void vehicle_visual_observation_tower(...., int32_t imageDirection, ....)
{
if ((imageDirection / 8) && (imageDirection / 8) != 3)
{
....
}
....
}
āĻāĻ° āĻāĻāĻāĻŋ āĻāĻ¨āĻŋāĻˇā§āĻ āĻāĻāĻžāĻā§āĻˇāĻĒāĻžāĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻ. āĻ āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋ imageDirection/8 āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻšāĻŦā§ āĻ¯āĻĻāĻŋ āĻāĻŽā§āĻ āĻĄāĻŋāĻ°ā§āĻāĻļāĻ¨ -7 āĻĨā§āĻā§ 7 āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻ āĻāĻļ: (imageDirection/8) != 3 āĻā§āĻ āĻāĻŽā§āĻ āĻĄāĻŋāĻ°ā§āĻāĻļāĻ¨ āĻ¸ā§āĻŽāĻžāĻ° āĻŦāĻžāĻāĻ°ā§ āĻĨāĻžāĻāĻžāĻ° āĻāĻ¨ā§āĻ¯: āĻ¯āĻĨāĻžāĻā§āĻ°āĻŽā§ -31 āĻĨā§āĻā§ -24 āĻāĻŦāĻ 24 āĻĨā§āĻā§ 31 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤āĨ¤ āĻāĻāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĒāĻ°āĻŋāĻ¸āĻ°ā§ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻāĻā§āĻ¯āĻžāĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻŦā§āĻļ āĻ āĻĻā§āĻā§āĻ¤ āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§ āĻāĻŦāĻ āĻā§āĻĄā§āĻ° āĻāĻ āĻ āĻāĻļā§ āĻā§āĻ¨āĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¨āĻž āĻĨāĻžāĻāĻ˛ā§āĻ, āĻāĻŽāĻŋ āĻāĻ āĻļāĻ°ā§āĻ¤āĻā§āĻ˛āĻŋāĻā§ āĻāĻ°āĻ āĻ¸ā§āĻĒāĻˇā§āĻ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ˛ā§āĻāĻžāĻ° āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻŦā§ˇ āĻ¯āĻžāĻ°āĻž āĻāĻ āĻā§āĻĄāĻāĻŋ āĻĒāĻĄāĻŧāĻŦā§ āĻāĻŦāĻ āĻŦāĻāĻžāĻ¯āĻŧ āĻ°āĻžāĻāĻŦā§ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻā§āĻŦāĻ¨āĻā§ āĻ āĻ¨ā§āĻ āĻ¸āĻšāĻ āĻāĻ°ā§ āĻ¤ā§āĻ˛āĻŦā§āĨ¤
āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž N5
void process_mouse_over(....)
{
....
switch (window->widgets[widgetId].type)
{
case WWT_VIEWPORT:
ebx = 0;
edi = cursorId; // <=
// Window event WE_UNKNOWN_0E was called here,
// but no windows actually implemented a handler and
// it's not known what it was for
cursorId = edi; // <=
if ((ebx & 0xFF) != 0)
{
set_cursor(cursorId);
return;
}
break;
....
}
....
}
āĻāĻ āĻā§āĻĄ āĻāĻŖā§āĻĄāĻāĻŋ āĻ¸āĻŽā§āĻāĻŦāĻ¤ decompilation āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°, āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻŦāĻžāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻŋāĻāĻžāĻ°, āĻ¨āĻ¨-āĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋāĻ āĻā§āĻĄ āĻ āĻāĻļ āĻ¸āĻ°āĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻā§. āĻ¤āĻŦā§ āĻāĻāĻ¨āĻ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨ āĻŦāĻžāĻāĻŋ āĻāĻā§ cursorId, āĻ¯āĻž āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻ āĻ°ā§āĻĨāĻŦā§āĻ§ āĻāĻ°ā§ āĻ¨āĻžāĨ¤
āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž N6
void Network::ProcessPlayerList()
{
....
auto* player = GetPlayerByID(pendingPlayer.Id);
if (player == nullptr)
{
// Add new player.
player = AddPlayer("", "");
if (player) // <=
{
*player = pendingPlayer;
if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
{
_serverConnection->Player = player;
}
}
newPlayers.push_back(player->Id); // <=
}
....
}
āĻāĻ āĻā§āĻĄāĻāĻŋ āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻž āĻŦā§āĻļ āĻ¸āĻšāĻ; āĻāĻĒāĻ¨āĻžāĻā§ āĻā§āĻŦāĻ˛ āĻāĻāĻŋ āĻ¤ā§āĻ¤ā§āĻ¯āĻŧāĻŦāĻžāĻ° āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻā§āĻ˛ā§āĻ¯āĻŧāĻžāĻĄāĻŧ āĻāĻāĻāĻŋ āĻ¨āĻžāĻ˛ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻžāĻ°ā§, āĻ āĻĨāĻŦāĻž āĻļāĻ°ā§āĻ¤āĻ¸āĻžāĻĒā§āĻā§āĻˇ āĻŦāĻŋāĻŦā§āĻ¤āĻŋāĻ° āĻŽā§āĻ˛ āĻ āĻāĻļā§ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻŽāĻŋ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻŦ:
void Network::ProcessPlayerList()
{
....
auto* player = GetPlayerByID(pendingPlayer.Id);
if (player == nullptr)
{
// Add new player.
player = AddPlayer("", "");
if (player)
{
*player = pendingPlayer;
if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
{
_serverConnection->Player = player;
}
newPlayers.push_back(player->Id);
}
}
....
}
āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž N7
std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
auto name = json_object_get(server, "name");
.....
if (name == nullptr || version == nullptr)
{
....
}
else
{
....
entry.name = (name == nullptr ? "" : json_string_value(name));
....
}
....
}
āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻāĻžāĻāĻā§āĻ¨āĻŋāĻ¤ā§ āĻā§āĻĄā§āĻ° āĻāĻāĻāĻŋ āĻāĻ āĻŋāĻ¨-āĻĒāĻ āĻ¨āĻ¯ā§āĻā§āĻ¯ āĻ˛āĻžāĻāĻ¨ āĻĨā§āĻā§ āĻĒāĻ°āĻŋāĻ¤ā§āĻ°āĻžāĻŖ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ āĻāĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ nullptr. āĻāĻŽāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻā§āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ:
std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
auto name = json_object_get(server, "name");
.....
if (name == nullptr || version == nullptr)
{
name = ""
....
}
else
{
....
entry.name = json_string_value(name);
....
}
....
}
āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž N8
void CustomListView::MouseUp(....)
{
....
if (!ColumnHeaderPressedCurrentState)
{
ColumnHeaderPressed = std::nullopt;
ColumnHeaderPressedCurrentState = false;
Invalidate();
}
}
āĻā§āĻĄāĻāĻŋ āĻŦā§āĻļ āĻ āĻĻā§āĻā§āĻ¤ āĻĻā§āĻāĻžāĻā§āĻā§āĨ¤ āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻāĻŋāĻā§ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻž āĻļāĻ°ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻžāĻāĻĒā§ āĻāĻŋāĻ˛ ColumnHeaderPressedCurrentState āĻ āĻ°ā§āĻĨ āĻŽāĻŋāĻĨā§āĻ¯āĻž.
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻā§āĻāĻŋ, āĻāĻĒāĻ¨āĻžāĻ° āĻāĻŋāĻŽāĻ¸āĻŋāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§ āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻāĻā§ āĻāĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻŦā§āĻļ āĻ¸āĻšāĻāĨ¤ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻžāĻāĻ˛ āĻ˛āĻŋāĻāĻ¤ā§ āĻ¯āĻĨā§āĻˇā§āĻāĨ¤ āĻā§āĻĄ āĻā§āĻ āĻāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸āĻŽāĻžāĻŦā§āĻļā§āĻ° āĻĒāĻ°ā§ āĻ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋ āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻžāĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻŦā§, āĻ¯āĻž āĻāĻāĻŋāĻ˛āĻ¤āĻž āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻāĻ°āĻ āĻāĻāĻ¨āĻ āĻāĻŽ āĻšāĻ˛ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĻā§āĻ° āĻāĻ°āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻŦā§āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻāĻ°ā§āĻāĻŋ āĻāĻžāĻˇāĻžāĻāĻžāĻˇā§ āĻĻāĻ°ā§āĻļāĻāĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻŦā§ āĻ
āĻ¨ā§āĻā§āĻ°āĻš āĻāĻ°ā§ āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻ˛āĻŋāĻā§āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨: āĻā§āĻ˛āĻžāĻĻāĻŋāĻ¸ā§āĻ˛āĻžāĻ āĻ¸ā§āĻā§āĻ˛āĻŋāĻ¯āĻŧāĻžāĻ°āĻāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com