{"action":"created","issue":{"url":"https://api.github.com/repos/crosire/scripthookvdotnet/issues/449","repository_url":"https://api.github.com/repos/crosire/scripthookvdotnet","labels_url":"https://api.github.com/repos/crosire/scripthookvdotnet/issues/449/labels{/name}","comments_url":"https://api.github.com/repos/crosire/scripthookvdotnet/issues/449/comments","events_url":"https://api.github.com/repos/crosire/scripthookvdotnet/issues/449/events","html_url":"https://github.com/crosire/scripthookvdotnet/issues/449","id":144470750,"number":449,"title":"Ideas for V3.0","user":{"login":"Fireboyd78","id":2906983,"avatar_url":"https://avatars.githubusercontent.com/u/2906983?v=3","gravatar_id":"","url":"https://api.github.com/users/Fireboyd78","html_url":"https://github.com/Fireboyd78","followers_url":"https://api.github.com/users/Fireboyd78/followers","following_url":"https://api.github.com/users/Fireboyd78/following{/other_user}","gists_url":"https://api.github.com/users/Fireboyd78/gists{/gist_id}","starred_url":"https://api.github.com/users/Fireboyd78/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Fireboyd78/subscriptions","organizations_url":"https://api.github.com/users/Fireboyd78/orgs","repos_url":"https://api.github.com/users/Fireboyd78/repos","events_url":"https://api.github.com/users/Fireboyd78/events{/privacy}","received_events_url":"https://api.github.com/users/Fireboyd78/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/crosire/scripthookvdotnet/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/crosire/scripthookvdotnet/milestones/3","html_url":"https://github.com/crosire/scripthookvdotnet/milestones/3.0","labels_url":"https://api.github.com/repos/crosire/scripthookvdotnet/milestones/3/labels","id":1669795,"number":3,"title":"3.0","description":"","creator":{"login":"JohnnyCrazy","id":3109892,"avatar_url":"https://avatars.githubusercontent.com/u/3109892?v=3","gravatar_id":"","url":"https://api.github.com/users/JohnnyCrazy","html_url":"https://github.com/JohnnyCrazy","followers_url":"https://api.github.com/users/JohnnyCrazy/followers","following_url":"https://api.github.com/users/JohnnyCrazy/following{/other_user}","gists_url":"https://api.github.com/users/JohnnyCrazy/gists{/gist_id}","starred_url":"https://api.github.com/users/JohnnyCrazy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JohnnyCrazy/subscriptions","organizations_url":"https://api.github.com/users/JohnnyCrazy/orgs","repos_url":"https://api.github.com/users/JohnnyCrazy/repos","events_url":"https://api.github.com/users/JohnnyCrazy/events{/privacy}","received_events_url":"https://api.github.com/users/JohnnyCrazy/received_events","type":"User","site_admin":false},"open_issues":4,"closed_issues":0,"state":"open","created_at":"2016-03-28T18:52:06Z","updated_at":"2016-04-10T00:27:10Z","due_on":null,"closed_at":null},"comments":21,"created_at":"2016-03-30T05:48:53Z","updated_at":"2016-05-01T08:28:46Z","closed_at":null,"body":"Since we're already at V2.7.x, it's probably a good idea to start planning for V3.0. This will be a major version, so we should throw backwards compatibility straight out of the window and take the opportunity to remove all obsolete methods/properties and rename ones that might have a strange name or not accurately reflect their purpose.\r\n\r\nMore ideas will be added periodically, so feel free to leave your own idea/feedback below.\r\n\r\n# Native hashes\r\nOne of the biggest changes will definitely be the native hashes. There's a lot of duplicates or ones with bad names from months and months ago. Since there's literally thousands of hashes, I suggest splitting NativeHashes.hpp into separate files like so:\r\n\r\n`[core]\\hashes\\[category].hpp` -- partial `Native::Hash` enum definitions\r\n`[core]\\NativeHashes.hpp` -- includes all partial definitions from `NativeHashes` folder\r\n\r\nThere will be multiple files containing native hashes, but they will still be all in one enum.\r\n\r\n# Attributes\r\n\r\n## ScriptHookVersionAttribute\r\nAlso new for 3.0 should be the ability for developers to implement a `ScriptHookVersion` attribute that allows user to define a Minimum and a Maximum supported version of ScriptHookV.NET. There's actually a built-in class called `System.Version` that can be used to process these values. The attribute constructor should support all of the `System.Version` constructors. The `Revision` part of the Version should be ignored.\r\n\r\nThis attribute should only be applicable to the assembly of the script, and accessed when the script is first loaded. Any scripts that are not safely compatible should be unloaded and a message printed to the log file.\r\n\r\n# Classes\r\n\r\n## Checkpoint\r\nImplement a checkpoint class (#155)\r\n\r\n## ParticleFX\r\nImplement a ParticleFX (_PTFX_) class (#57)\r\n\r\n# Source code\r\n\r\n## XML Documentation\r\nWe should start getting into the habit of adding XML documentation to methods/properties/enums so developers don't have to try and guess what something does."},"comment":{"url":"https://api.github.com/repos/crosire/scripthookvdotnet/issues/comments/216025372","html_url":"https://github.com/crosire/scripthookvdotnet/issues/449#issuecomment-216025372","issue_url":"https://api.github.com/repos/crosire/scripthookvdotnet/issues/449","id":216025372,"user":{"login":"Daniel15","id":91933,"avatar_url":"https://avatars.githubusercontent.com/u/91933?v=3","gravatar_id":"","url":"https://api.github.com/users/Daniel15","html_url":"https://github.com/Daniel15","followers_url":"https://api.github.com/users/Daniel15/followers","following_url":"https://api.github.com/users/Daniel15/following{/other_user}","gists_url":"https://api.github.com/users/Daniel15/gists{/gist_id}","starred_url":"https://api.github.com/users/Daniel15/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Daniel15/subscriptions","organizations_url":"https://api.github.com/users/Daniel15/orgs","repos_url":"https://api.github.com/users/Daniel15/repos","events_url":"https://api.github.com/users/Daniel15/events{/privacy}","received_events_url":"https://api.github.com/users/Daniel15/received_events","type":"User","site_admin":false},"created_at":"2016-05-01T08:28:46Z","updated_at":"2016-05-01T08:28:46Z","body":"> We should start getting into the habit of adding XML documentation to methods/properties/enums so developers don't have to try and guess what something does.\r\n\r\nOnce you're at a point where all public methods are documented (even with stubs inserted via something like GhostDoc), there's lint rules you can use to ensure that the public API remains fully documented. I'm pretty sure StyleCop has a rule for it.\r\n\r\n> A property cannot be a property if you can only assign to it, lol.\r\n\r\nSet-only properties are still useful for object initializer syntax."}}