vscript vgui - #169

Merged
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui
Oct 26, 2022
Merged

vscript vgui#169
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui

Conversation

@samisalreadytaken

@samisalreadytakensamisalreadytaken commented Dec 22, 2021

Copy link
Copy Markdown

This implementation is not final, but it is stable.

Example code and videos:

https://github.com/samisalreadytaken/vscripts/tree/master/mapbase
https://gist.github.com/samisalreadytaken/4847ede81a7222b66dc82eac8622904e

https://youtu.be/PrND1JsXduo
https://youtu.be/I4Y_kLR2CQ0
https://youtu.be/Oh5JpBHXWYM

Some notes:

  • Most #if 0'd blocks are either untested, or usefulness of them are uncertain.

  • Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

  • A future change to add is integration with C_VGuiScreen entity to display script panels. This would also be a simpler alternative to manual 3D world painting.

  • A TODO is a convenient method to control the visibility of existing HUD elements. The current hack is to use the hidehud convar which is manually reset on level shutdown. (See hud_override.nut)


PR Checklist

  • My PR follows all guidelines in the CONTRIBUTING.md file
  • My PR targets a develop branch OR targets another branch with a specific goal in mind

@z33kyz33ky left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are minor fomatting issues with inconsistent spacing around parenthesis in control-flow statements and function parameters. It's not really concerning, just pointing it out.
Missing spaces after SCRIPT_SINGLETON (BEGIN_SCRIPTDESC_ROOT_NAMED()) also caught my eye.

The name of _panel diverges from the more common style (m_pPanel), though it has precedent in the original VGUI code.
This and m_hScriptInstance have accessors and could become private; I think only ResolveChildren() would need to be modified, either by being friended or by becoming a static method of IScriptVGUIObject. Again, just pointing it out.

There are a couple of loops to search for matching panels in g_ScriptPanels. That could be refactored to a function.

There are two unrelated changes in sp/src/game/client/vscript_client.cpp which should get their own dedicated commit (replacement of loop with V_memset() and removal of a call to g_pScriptVM->ClearValue( m_ScriptScope, "entity" ) in CScriptMaterialProxy::OnBind()).

There are a couple of places where references to a static Vector is returned.
I'm not sure how the script FFI deals with these - if a script were to call it twice, would both variables in the script also refer to the same object? I.e. would something like this fail:

local top =ScreenToWorld(0.5, 0);
local bottom =ScreenToWorld(0.5, 1);
assert( top != bottom );

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken

Copy link
Copy Markdown
Author

_vpanel and m_hScriptInstance are also accessed from derived helper classes and from CScriptVGUI::Create(). There could be setter functions, but I don't think it really matters.

Returned Vectors to script functions are reallocated in the VM, returning static Vector is Valve's convention. Though testing local Vector return, it seems to work fine; perhaps it's a difference in the implementation, or I'm forgetting something.

I will push some changes later.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 7, 2022 22:17
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 4b4b0d3 to a6dba10CompareJanuary 15, 2022 15:57
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 2 times, most recently from 1a8806e to dd8314fCompareJanuary 29, 2022 19:12
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review January 29, 2022 19:27
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 31, 2022 18:25
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 09065cb to 368796aCompareFebruary 4, 2022 15:23
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 4, 2022 15:27
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 68c63d0 to 36dd406CompareFebruary 8, 2022 19:02
@samisalreadytaken
samisalreadytaken marked this pull request as draft February 11, 2022 17:58
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 13, 2022 16:47
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from bdd338f to 7cceb59CompareFebruary 18, 2022 23:46

@BlixibonBlixibon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's not any practical way for me to test everything this has, although I did try using the HUD replacement scripts from your repo and messed around with the save icon script you provided. I experienced an Overflowed reading usercmd data (check sending and receiving code for mismatches)! error from the fake Steam client, which I'm assuming isn't related to the VScript VGUI code itself, but I'm otherwise in agreement that this seems stable. Before I approve this, I'm requesting a change I had to make for it to compile on my machine.

I'm really blown away by the capabilities of this implementation. This has the potential to open custom VGUI creation to a much wider audience.


Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

The context of SetCallback is specific enough that I think the name works best as-is than it would as something more explicit.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam notifications & achievements code works fine, are you sure you've included it on both server and client, and there are no errors on server? That error happens when client sends a message and server doesn't receive it. I also updated that code for save/restore few days ago (and rebased because they're code for an unreleased WIP feature so I don't care about history), although unlikely, you might have used a broken version.

Additionally I removed WorldToScreen() for now because I'm not sure about its output parameter. I had initially chosen 0,1 indices for an array because arrays are the lightest containers in Squirrel, but it could use x,y as well. The HSCRIPT parameter memory leak is also unideal, people shouldn't really use it.

Not too worried about temporarily removing this because it's already possible to manually calculate this.

@Blixibon

Copy link
Copy Markdown
Member

Ah, I didn't realize it was meant to run on both the server and the client. I saw that the save icon script was client only and I didn't realize your other HUD scripts were meant to be shared. I'm surprised I missed that, but sorry for the confusion.

@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam scripts are only shared for the achievement manager (serverside control and verification), and the HUD scripts are shared to be able to get suit information because NetProps doesn't work.

@Blixibon
Blixibon merged commit 63a8882 into mapbase-source:developOct 26, 2022
VDeltaGabriel pushed a commit to Project-P2009/p2009_sdk that referenced this pull request Apr 27, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@samisalreadytaken@Blixibon@z33ky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

vscript vgui - #169

Merged
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui
Oct 26, 2022
Merged

vscript vgui#169
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui

Conversation

@samisalreadytaken

@samisalreadytakensamisalreadytaken commented Dec 22, 2021

Copy link
Copy Markdown

This implementation is not final, but it is stable.

Example code and videos:

https://github.com/samisalreadytaken/vscripts/tree/master/mapbase
https://gist.github.com/samisalreadytaken/4847ede81a7222b66dc82eac8622904e

https://youtu.be/PrND1JsXduo
https://youtu.be/I4Y_kLR2CQ0
https://youtu.be/Oh5JpBHXWYM

Some notes:

  • Most #if 0'd blocks are either untested, or usefulness of them are uncertain.

  • Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

  • A future change to add is integration with C_VGuiScreen entity to display script panels. This would also be a simpler alternative to manual 3D world painting.

  • A TODO is a convenient method to control the visibility of existing HUD elements. The current hack is to use the hidehud convar which is manually reset on level shutdown. (See hud_override.nut)


PR Checklist

  • My PR follows all guidelines in the CONTRIBUTING.md file
  • My PR targets a develop branch OR targets another branch with a specific goal in mind

@z33kyz33ky left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are minor fomatting issues with inconsistent spacing around parenthesis in control-flow statements and function parameters. It's not really concerning, just pointing it out.
Missing spaces after SCRIPT_SINGLETON (BEGIN_SCRIPTDESC_ROOT_NAMED()) also caught my eye.

The name of _panel diverges from the more common style (m_pPanel), though it has precedent in the original VGUI code.
This and m_hScriptInstance have accessors and could become private; I think only ResolveChildren() would need to be modified, either by being friended or by becoming a static method of IScriptVGUIObject. Again, just pointing it out.

There are a couple of loops to search for matching panels in g_ScriptPanels. That could be refactored to a function.

There are two unrelated changes in sp/src/game/client/vscript_client.cpp which should get their own dedicated commit (replacement of loop with V_memset() and removal of a call to g_pScriptVM->ClearValue( m_ScriptScope, "entity" ) in CScriptMaterialProxy::OnBind()).

There are a couple of places where references to a static Vector is returned.
I'm not sure how the script FFI deals with these - if a script were to call it twice, would both variables in the script also refer to the same object? I.e. would something like this fail:

local top =ScreenToWorld(0.5, 0);
local bottom =ScreenToWorld(0.5, 1);
assert( top != bottom );

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken

Copy link
Copy Markdown
Author

_vpanel and m_hScriptInstance are also accessed from derived helper classes and from CScriptVGUI::Create(). There could be setter functions, but I don't think it really matters.

Returned Vectors to script functions are reallocated in the VM, returning static Vector is Valve's convention. Though testing local Vector return, it seems to work fine; perhaps it's a difference in the implementation, or I'm forgetting something.

I will push some changes later.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 7, 2022 22:17
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 4b4b0d3 to a6dba10CompareJanuary 15, 2022 15:57
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 2 times, most recently from 1a8806e to dd8314fCompareJanuary 29, 2022 19:12
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review January 29, 2022 19:27
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 31, 2022 18:25
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 09065cb to 368796aCompareFebruary 4, 2022 15:23
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 4, 2022 15:27
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 68c63d0 to 36dd406CompareFebruary 8, 2022 19:02
@samisalreadytaken
samisalreadytaken marked this pull request as draft February 11, 2022 17:58
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 13, 2022 16:47
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from bdd338f to 7cceb59CompareFebruary 18, 2022 23:46

@BlixibonBlixibon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's not any practical way for me to test everything this has, although I did try using the HUD replacement scripts from your repo and messed around with the save icon script you provided. I experienced an Overflowed reading usercmd data (check sending and receiving code for mismatches)! error from the fake Steam client, which I'm assuming isn't related to the VScript VGUI code itself, but I'm otherwise in agreement that this seems stable. Before I approve this, I'm requesting a change I had to make for it to compile on my machine.

I'm really blown away by the capabilities of this implementation. This has the potential to open custom VGUI creation to a much wider audience.


Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

The context of SetCallback is specific enough that I think the name works best as-is than it would as something more explicit.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam notifications & achievements code works fine, are you sure you've included it on both server and client, and there are no errors on server? That error happens when client sends a message and server doesn't receive it. I also updated that code for save/restore few days ago (and rebased because they're code for an unreleased WIP feature so I don't care about history), although unlikely, you might have used a broken version.

Additionally I removed WorldToScreen() for now because I'm not sure about its output parameter. I had initially chosen 0,1 indices for an array because arrays are the lightest containers in Squirrel, but it could use x,y as well. The HSCRIPT parameter memory leak is also unideal, people shouldn't really use it.

Not too worried about temporarily removing this because it's already possible to manually calculate this.

@Blixibon

Copy link
Copy Markdown
Member

Ah, I didn't realize it was meant to run on both the server and the client. I saw that the save icon script was client only and I didn't realize your other HUD scripts were meant to be shared. I'm surprised I missed that, but sorry for the confusion.

@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam scripts are only shared for the achievement manager (serverside control and verification), and the HUD scripts are shared to be able to get suit information because NetProps doesn't work.

@Blixibon
Blixibon merged commit 63a8882 into mapbase-source:developOct 26, 2022
VDeltaGabriel pushed a commit to Project-P2009/p2009_sdk that referenced this pull request Apr 27, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@samisalreadytaken@Blixibon@z33ky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

vscript vgui - #169

Merged
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui
Oct 26, 2022
Merged

vscript vgui#169
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui

Conversation

@samisalreadytaken

@samisalreadytakensamisalreadytaken commented Dec 22, 2021

Copy link
Copy Markdown

This implementation is not final, but it is stable.

Example code and videos:

https://github.com/samisalreadytaken/vscripts/tree/master/mapbase
https://gist.github.com/samisalreadytaken/4847ede81a7222b66dc82eac8622904e

https://youtu.be/PrND1JsXduo
https://youtu.be/I4Y_kLR2CQ0
https://youtu.be/Oh5JpBHXWYM

Some notes:

  • Most #if 0'd blocks are either untested, or usefulness of them are uncertain.

  • Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

  • A future change to add is integration with C_VGuiScreen entity to display script panels. This would also be a simpler alternative to manual 3D world painting.

  • A TODO is a convenient method to control the visibility of existing HUD elements. The current hack is to use the hidehud convar which is manually reset on level shutdown. (See hud_override.nut)


PR Checklist

  • My PR follows all guidelines in the CONTRIBUTING.md file
  • My PR targets a develop branch OR targets another branch with a specific goal in mind

@z33kyz33ky left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are minor fomatting issues with inconsistent spacing around parenthesis in control-flow statements and function parameters. It's not really concerning, just pointing it out.
Missing spaces after SCRIPT_SINGLETON (BEGIN_SCRIPTDESC_ROOT_NAMED()) also caught my eye.

The name of _panel diverges from the more common style (m_pPanel), though it has precedent in the original VGUI code.
This and m_hScriptInstance have accessors and could become private; I think only ResolveChildren() would need to be modified, either by being friended or by becoming a static method of IScriptVGUIObject. Again, just pointing it out.

There are a couple of loops to search for matching panels in g_ScriptPanels. That could be refactored to a function.

There are two unrelated changes in sp/src/game/client/vscript_client.cpp which should get their own dedicated commit (replacement of loop with V_memset() and removal of a call to g_pScriptVM->ClearValue( m_ScriptScope, "entity" ) in CScriptMaterialProxy::OnBind()).

There are a couple of places where references to a static Vector is returned.
I'm not sure how the script FFI deals with these - if a script were to call it twice, would both variables in the script also refer to the same object? I.e. would something like this fail:

local top =ScreenToWorld(0.5, 0);
local bottom =ScreenToWorld(0.5, 1);
assert( top != bottom );

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken

Copy link
Copy Markdown
Author

_vpanel and m_hScriptInstance are also accessed from derived helper classes and from CScriptVGUI::Create(). There could be setter functions, but I don't think it really matters.

Returned Vectors to script functions are reallocated in the VM, returning static Vector is Valve's convention. Though testing local Vector return, it seems to work fine; perhaps it's a difference in the implementation, or I'm forgetting something.

I will push some changes later.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 7, 2022 22:17
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 4b4b0d3 to a6dba10CompareJanuary 15, 2022 15:57
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 2 times, most recently from 1a8806e to dd8314fCompareJanuary 29, 2022 19:12
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review January 29, 2022 19:27
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 31, 2022 18:25
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 09065cb to 368796aCompareFebruary 4, 2022 15:23
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 4, 2022 15:27
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 68c63d0 to 36dd406CompareFebruary 8, 2022 19:02
@samisalreadytaken
samisalreadytaken marked this pull request as draft February 11, 2022 17:58
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 13, 2022 16:47
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from bdd338f to 7cceb59CompareFebruary 18, 2022 23:46

@BlixibonBlixibon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's not any practical way for me to test everything this has, although I did try using the HUD replacement scripts from your repo and messed around with the save icon script you provided. I experienced an Overflowed reading usercmd data (check sending and receiving code for mismatches)! error from the fake Steam client, which I'm assuming isn't related to the VScript VGUI code itself, but I'm otherwise in agreement that this seems stable. Before I approve this, I'm requesting a change I had to make for it to compile on my machine.

I'm really blown away by the capabilities of this implementation. This has the potential to open custom VGUI creation to a much wider audience.


Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

The context of SetCallback is specific enough that I think the name works best as-is than it would as something more explicit.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam notifications & achievements code works fine, are you sure you've included it on both server and client, and there are no errors on server? That error happens when client sends a message and server doesn't receive it. I also updated that code for save/restore few days ago (and rebased because they're code for an unreleased WIP feature so I don't care about history), although unlikely, you might have used a broken version.

Additionally I removed WorldToScreen() for now because I'm not sure about its output parameter. I had initially chosen 0,1 indices for an array because arrays are the lightest containers in Squirrel, but it could use x,y as well. The HSCRIPT parameter memory leak is also unideal, people shouldn't really use it.

Not too worried about temporarily removing this because it's already possible to manually calculate this.

@Blixibon

Copy link
Copy Markdown
Member

Ah, I didn't realize it was meant to run on both the server and the client. I saw that the save icon script was client only and I didn't realize your other HUD scripts were meant to be shared. I'm surprised I missed that, but sorry for the confusion.

@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam scripts are only shared for the achievement manager (serverside control and verification), and the HUD scripts are shared to be able to get suit information because NetProps doesn't work.

@Blixibon
Blixibon merged commit 63a8882 into mapbase-source:developOct 26, 2022
VDeltaGabriel pushed a commit to Project-P2009/p2009_sdk that referenced this pull request Apr 27, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@samisalreadytaken@Blixibon@z33ky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

vscript vgui - #169

Merged
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui
Oct 26, 2022
Merged

vscript vgui#169
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui

Conversation

@samisalreadytaken

@samisalreadytakensamisalreadytaken commented Dec 22, 2021

Copy link
Copy Markdown

This implementation is not final, but it is stable.

Example code and videos:

https://github.com/samisalreadytaken/vscripts/tree/master/mapbase
https://gist.github.com/samisalreadytaken/4847ede81a7222b66dc82eac8622904e

https://youtu.be/PrND1JsXduo
https://youtu.be/I4Y_kLR2CQ0
https://youtu.be/Oh5JpBHXWYM

Some notes:

  • Most #if 0'd blocks are either untested, or usefulness of them are uncertain.

  • Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

  • A future change to add is integration with C_VGuiScreen entity to display script panels. This would also be a simpler alternative to manual 3D world painting.

  • A TODO is a convenient method to control the visibility of existing HUD elements. The current hack is to use the hidehud convar which is manually reset on level shutdown. (See hud_override.nut)


PR Checklist

  • My PR follows all guidelines in the CONTRIBUTING.md file
  • My PR targets a develop branch OR targets another branch with a specific goal in mind

@z33kyz33ky left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are minor fomatting issues with inconsistent spacing around parenthesis in control-flow statements and function parameters. It's not really concerning, just pointing it out.
Missing spaces after SCRIPT_SINGLETON (BEGIN_SCRIPTDESC_ROOT_NAMED()) also caught my eye.

The name of _panel diverges from the more common style (m_pPanel), though it has precedent in the original VGUI code.
This and m_hScriptInstance have accessors and could become private; I think only ResolveChildren() would need to be modified, either by being friended or by becoming a static method of IScriptVGUIObject. Again, just pointing it out.

There are a couple of loops to search for matching panels in g_ScriptPanels. That could be refactored to a function.

There are two unrelated changes in sp/src/game/client/vscript_client.cpp which should get their own dedicated commit (replacement of loop with V_memset() and removal of a call to g_pScriptVM->ClearValue( m_ScriptScope, "entity" ) in CScriptMaterialProxy::OnBind()).

There are a couple of places where references to a static Vector is returned.
I'm not sure how the script FFI deals with these - if a script were to call it twice, would both variables in the script also refer to the same object? I.e. would something like this fail:

local top =ScreenToWorld(0.5, 0);
local bottom =ScreenToWorld(0.5, 1);
assert( top != bottom );

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken

Copy link
Copy Markdown
Author

_vpanel and m_hScriptInstance are also accessed from derived helper classes and from CScriptVGUI::Create(). There could be setter functions, but I don't think it really matters.

Returned Vectors to script functions are reallocated in the VM, returning static Vector is Valve's convention. Though testing local Vector return, it seems to work fine; perhaps it's a difference in the implementation, or I'm forgetting something.

I will push some changes later.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 7, 2022 22:17
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 4b4b0d3 to a6dba10CompareJanuary 15, 2022 15:57
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 2 times, most recently from 1a8806e to dd8314fCompareJanuary 29, 2022 19:12
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review January 29, 2022 19:27
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 31, 2022 18:25
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 09065cb to 368796aCompareFebruary 4, 2022 15:23
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 4, 2022 15:27
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 68c63d0 to 36dd406CompareFebruary 8, 2022 19:02
@samisalreadytaken
samisalreadytaken marked this pull request as draft February 11, 2022 17:58
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 13, 2022 16:47
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from bdd338f to 7cceb59CompareFebruary 18, 2022 23:46

@BlixibonBlixibon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's not any practical way for me to test everything this has, although I did try using the HUD replacement scripts from your repo and messed around with the save icon script you provided. I experienced an Overflowed reading usercmd data (check sending and receiving code for mismatches)! error from the fake Steam client, which I'm assuming isn't related to the VScript VGUI code itself, but I'm otherwise in agreement that this seems stable. Before I approve this, I'm requesting a change I had to make for it to compile on my machine.

I'm really blown away by the capabilities of this implementation. This has the potential to open custom VGUI creation to a much wider audience.


Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

The context of SetCallback is specific enough that I think the name works best as-is than it would as something more explicit.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam notifications & achievements code works fine, are you sure you've included it on both server and client, and there are no errors on server? That error happens when client sends a message and server doesn't receive it. I also updated that code for save/restore few days ago (and rebased because they're code for an unreleased WIP feature so I don't care about history), although unlikely, you might have used a broken version.

Additionally I removed WorldToScreen() for now because I'm not sure about its output parameter. I had initially chosen 0,1 indices for an array because arrays are the lightest containers in Squirrel, but it could use x,y as well. The HSCRIPT parameter memory leak is also unideal, people shouldn't really use it.

Not too worried about temporarily removing this because it's already possible to manually calculate this.

@Blixibon

Copy link
Copy Markdown
Member

Ah, I didn't realize it was meant to run on both the server and the client. I saw that the save icon script was client only and I didn't realize your other HUD scripts were meant to be shared. I'm surprised I missed that, but sorry for the confusion.

@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam scripts are only shared for the achievement manager (serverside control and verification), and the HUD scripts are shared to be able to get suit information because NetProps doesn't work.

@Blixibon
Blixibon merged commit 63a8882 into mapbase-source:developOct 26, 2022
VDeltaGabriel pushed a commit to Project-P2009/p2009_sdk that referenced this pull request Apr 27, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@samisalreadytaken@Blixibon@z33ky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

vscript vgui - #169

Merged
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui
Oct 26, 2022
Merged

vscript vgui#169
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui

Conversation

@samisalreadytaken

@samisalreadytakensamisalreadytaken commented Dec 22, 2021

Copy link
Copy Markdown

This implementation is not final, but it is stable.

Example code and videos:

https://github.com/samisalreadytaken/vscripts/tree/master/mapbase
https://gist.github.com/samisalreadytaken/4847ede81a7222b66dc82eac8622904e

https://youtu.be/PrND1JsXduo
https://youtu.be/I4Y_kLR2CQ0
https://youtu.be/Oh5JpBHXWYM

Some notes:

  • Most #if 0'd blocks are either untested, or usefulness of them are uncertain.

  • Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

  • A future change to add is integration with C_VGuiScreen entity to display script panels. This would also be a simpler alternative to manual 3D world painting.

  • A TODO is a convenient method to control the visibility of existing HUD elements. The current hack is to use the hidehud convar which is manually reset on level shutdown. (See hud_override.nut)


PR Checklist

  • My PR follows all guidelines in the CONTRIBUTING.md file
  • My PR targets a develop branch OR targets another branch with a specific goal in mind

@z33kyz33ky left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are minor fomatting issues with inconsistent spacing around parenthesis in control-flow statements and function parameters. It's not really concerning, just pointing it out.
Missing spaces after SCRIPT_SINGLETON (BEGIN_SCRIPTDESC_ROOT_NAMED()) also caught my eye.

The name of _panel diverges from the more common style (m_pPanel), though it has precedent in the original VGUI code.
This and m_hScriptInstance have accessors and could become private; I think only ResolveChildren() would need to be modified, either by being friended or by becoming a static method of IScriptVGUIObject. Again, just pointing it out.

There are a couple of loops to search for matching panels in g_ScriptPanels. That could be refactored to a function.

There are two unrelated changes in sp/src/game/client/vscript_client.cpp which should get their own dedicated commit (replacement of loop with V_memset() and removal of a call to g_pScriptVM->ClearValue( m_ScriptScope, "entity" ) in CScriptMaterialProxy::OnBind()).

There are a couple of places where references to a static Vector is returned.
I'm not sure how the script FFI deals with these - if a script were to call it twice, would both variables in the script also refer to the same object? I.e. would something like this fail:

local top =ScreenToWorld(0.5, 0);
local bottom =ScreenToWorld(0.5, 1);
assert( top != bottom );

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken

Copy link
Copy Markdown
Author

_vpanel and m_hScriptInstance are also accessed from derived helper classes and from CScriptVGUI::Create(). There could be setter functions, but I don't think it really matters.

Returned Vectors to script functions are reallocated in the VM, returning static Vector is Valve's convention. Though testing local Vector return, it seems to work fine; perhaps it's a difference in the implementation, or I'm forgetting something.

I will push some changes later.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 7, 2022 22:17
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 4b4b0d3 to a6dba10CompareJanuary 15, 2022 15:57
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 2 times, most recently from 1a8806e to dd8314fCompareJanuary 29, 2022 19:12
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review January 29, 2022 19:27
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 31, 2022 18:25
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 09065cb to 368796aCompareFebruary 4, 2022 15:23
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 4, 2022 15:27
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 68c63d0 to 36dd406CompareFebruary 8, 2022 19:02
@samisalreadytaken
samisalreadytaken marked this pull request as draft February 11, 2022 17:58
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 13, 2022 16:47
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from bdd338f to 7cceb59CompareFebruary 18, 2022 23:46

@BlixibonBlixibon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's not any practical way for me to test everything this has, although I did try using the HUD replacement scripts from your repo and messed around with the save icon script you provided. I experienced an Overflowed reading usercmd data (check sending and receiving code for mismatches)! error from the fake Steam client, which I'm assuming isn't related to the VScript VGUI code itself, but I'm otherwise in agreement that this seems stable. Before I approve this, I'm requesting a change I had to make for it to compile on my machine.

I'm really blown away by the capabilities of this implementation. This has the potential to open custom VGUI creation to a much wider audience.


Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

The context of SetCallback is specific enough that I think the name works best as-is than it would as something more explicit.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam notifications & achievements code works fine, are you sure you've included it on both server and client, and there are no errors on server? That error happens when client sends a message and server doesn't receive it. I also updated that code for save/restore few days ago (and rebased because they're code for an unreleased WIP feature so I don't care about history), although unlikely, you might have used a broken version.

Additionally I removed WorldToScreen() for now because I'm not sure about its output parameter. I had initially chosen 0,1 indices for an array because arrays are the lightest containers in Squirrel, but it could use x,y as well. The HSCRIPT parameter memory leak is also unideal, people shouldn't really use it.

Not too worried about temporarily removing this because it's already possible to manually calculate this.

@Blixibon

Copy link
Copy Markdown
Member

Ah, I didn't realize it was meant to run on both the server and the client. I saw that the save icon script was client only and I didn't realize your other HUD scripts were meant to be shared. I'm surprised I missed that, but sorry for the confusion.

@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam scripts are only shared for the achievement manager (serverside control and verification), and the HUD scripts are shared to be able to get suit information because NetProps doesn't work.

@Blixibon
Blixibon merged commit 63a8882 into mapbase-source:developOct 26, 2022
VDeltaGabriel pushed a commit to Project-P2009/p2009_sdk that referenced this pull request Apr 27, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@samisalreadytaken@Blixibon@z33ky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

vscript vgui - #169

Merged
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui
Oct 26, 2022
Merged

vscript vgui#169
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui

Conversation

@samisalreadytaken

@samisalreadytakensamisalreadytaken commented Dec 22, 2021

Copy link
Copy Markdown

This implementation is not final, but it is stable.

Example code and videos:

https://github.com/samisalreadytaken/vscripts/tree/master/mapbase
https://gist.github.com/samisalreadytaken/4847ede81a7222b66dc82eac8622904e

https://youtu.be/PrND1JsXduo
https://youtu.be/I4Y_kLR2CQ0
https://youtu.be/Oh5JpBHXWYM

Some notes:

  • Most #if 0'd blocks are either untested, or usefulness of them are uncertain.

  • Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

  • A future change to add is integration with C_VGuiScreen entity to display script panels. This would also be a simpler alternative to manual 3D world painting.

  • A TODO is a convenient method to control the visibility of existing HUD elements. The current hack is to use the hidehud convar which is manually reset on level shutdown. (See hud_override.nut)


PR Checklist

  • My PR follows all guidelines in the CONTRIBUTING.md file
  • My PR targets a develop branch OR targets another branch with a specific goal in mind

@z33kyz33ky left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are minor fomatting issues with inconsistent spacing around parenthesis in control-flow statements and function parameters. It's not really concerning, just pointing it out.
Missing spaces after SCRIPT_SINGLETON (BEGIN_SCRIPTDESC_ROOT_NAMED()) also caught my eye.

The name of _panel diverges from the more common style (m_pPanel), though it has precedent in the original VGUI code.
This and m_hScriptInstance have accessors and could become private; I think only ResolveChildren() would need to be modified, either by being friended or by becoming a static method of IScriptVGUIObject. Again, just pointing it out.

There are a couple of loops to search for matching panels in g_ScriptPanels. That could be refactored to a function.

There are two unrelated changes in sp/src/game/client/vscript_client.cpp which should get their own dedicated commit (replacement of loop with V_memset() and removal of a call to g_pScriptVM->ClearValue( m_ScriptScope, "entity" ) in CScriptMaterialProxy::OnBind()).

There are a couple of places where references to a static Vector is returned.
I'm not sure how the script FFI deals with these - if a script were to call it twice, would both variables in the script also refer to the same object? I.e. would something like this fail:

local top =ScreenToWorld(0.5, 0);
local bottom =ScreenToWorld(0.5, 1);
assert( top != bottom );

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken

Copy link
Copy Markdown
Author

_vpanel and m_hScriptInstance are also accessed from derived helper classes and from CScriptVGUI::Create(). There could be setter functions, but I don't think it really matters.

Returned Vectors to script functions are reallocated in the VM, returning static Vector is Valve's convention. Though testing local Vector return, it seems to work fine; perhaps it's a difference in the implementation, or I'm forgetting something.

I will push some changes later.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 7, 2022 22:17
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 4b4b0d3 to a6dba10CompareJanuary 15, 2022 15:57
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 2 times, most recently from 1a8806e to dd8314fCompareJanuary 29, 2022 19:12
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review January 29, 2022 19:27
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 31, 2022 18:25
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 09065cb to 368796aCompareFebruary 4, 2022 15:23
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 4, 2022 15:27
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 68c63d0 to 36dd406CompareFebruary 8, 2022 19:02
@samisalreadytaken
samisalreadytaken marked this pull request as draft February 11, 2022 17:58
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 13, 2022 16:47
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from bdd338f to 7cceb59CompareFebruary 18, 2022 23:46

@BlixibonBlixibon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's not any practical way for me to test everything this has, although I did try using the HUD replacement scripts from your repo and messed around with the save icon script you provided. I experienced an Overflowed reading usercmd data (check sending and receiving code for mismatches)! error from the fake Steam client, which I'm assuming isn't related to the VScript VGUI code itself, but I'm otherwise in agreement that this seems stable. Before I approve this, I'm requesting a change I had to make for it to compile on my machine.

I'm really blown away by the capabilities of this implementation. This has the potential to open custom VGUI creation to a much wider audience.


Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

The context of SetCallback is specific enough that I think the name works best as-is than it would as something more explicit.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam notifications & achievements code works fine, are you sure you've included it on both server and client, and there are no errors on server? That error happens when client sends a message and server doesn't receive it. I also updated that code for save/restore few days ago (and rebased because they're code for an unreleased WIP feature so I don't care about history), although unlikely, you might have used a broken version.

Additionally I removed WorldToScreen() for now because I'm not sure about its output parameter. I had initially chosen 0,1 indices for an array because arrays are the lightest containers in Squirrel, but it could use x,y as well. The HSCRIPT parameter memory leak is also unideal, people shouldn't really use it.

Not too worried about temporarily removing this because it's already possible to manually calculate this.

@Blixibon

Copy link
Copy Markdown
Member

Ah, I didn't realize it was meant to run on both the server and the client. I saw that the save icon script was client only and I didn't realize your other HUD scripts were meant to be shared. I'm surprised I missed that, but sorry for the confusion.

@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam scripts are only shared for the achievement manager (serverside control and verification), and the HUD scripts are shared to be able to get suit information because NetProps doesn't work.

@Blixibon
Blixibon merged commit 63a8882 into mapbase-source:developOct 26, 2022
VDeltaGabriel pushed a commit to Project-P2009/p2009_sdk that referenced this pull request Apr 27, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@samisalreadytaken@Blixibon@z33ky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

vscript vgui - #169

Merged
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui
Oct 26, 2022
Merged

vscript vgui#169
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui

Conversation

@samisalreadytaken

@samisalreadytakensamisalreadytaken commented Dec 22, 2021

Copy link
Copy Markdown

This implementation is not final, but it is stable.

Example code and videos:

https://github.com/samisalreadytaken/vscripts/tree/master/mapbase
https://gist.github.com/samisalreadytaken/4847ede81a7222b66dc82eac8622904e

https://youtu.be/PrND1JsXduo
https://youtu.be/I4Y_kLR2CQ0
https://youtu.be/Oh5JpBHXWYM

Some notes:

  • Most #if 0'd blocks are either untested, or usefulness of them are uncertain.

  • Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

  • A future change to add is integration with C_VGuiScreen entity to display script panels. This would also be a simpler alternative to manual 3D world painting.

  • A TODO is a convenient method to control the visibility of existing HUD elements. The current hack is to use the hidehud convar which is manually reset on level shutdown. (See hud_override.nut)


PR Checklist

  • My PR follows all guidelines in the CONTRIBUTING.md file
  • My PR targets a develop branch OR targets another branch with a specific goal in mind

@z33kyz33ky left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are minor fomatting issues with inconsistent spacing around parenthesis in control-flow statements and function parameters. It's not really concerning, just pointing it out.
Missing spaces after SCRIPT_SINGLETON (BEGIN_SCRIPTDESC_ROOT_NAMED()) also caught my eye.

The name of _panel diverges from the more common style (m_pPanel), though it has precedent in the original VGUI code.
This and m_hScriptInstance have accessors and could become private; I think only ResolveChildren() would need to be modified, either by being friended or by becoming a static method of IScriptVGUIObject. Again, just pointing it out.

There are a couple of loops to search for matching panels in g_ScriptPanels. That could be refactored to a function.

There are two unrelated changes in sp/src/game/client/vscript_client.cpp which should get their own dedicated commit (replacement of loop with V_memset() and removal of a call to g_pScriptVM->ClearValue( m_ScriptScope, "entity" ) in CScriptMaterialProxy::OnBind()).

There are a couple of places where references to a static Vector is returned.
I'm not sure how the script FFI deals with these - if a script were to call it twice, would both variables in the script also refer to the same object? I.e. would something like this fail:

local top =ScreenToWorld(0.5, 0);
local bottom =ScreenToWorld(0.5, 1);
assert( top != bottom );

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken

Copy link
Copy Markdown
Author

_vpanel and m_hScriptInstance are also accessed from derived helper classes and from CScriptVGUI::Create(). There could be setter functions, but I don't think it really matters.

Returned Vectors to script functions are reallocated in the VM, returning static Vector is Valve's convention. Though testing local Vector return, it seems to work fine; perhaps it's a difference in the implementation, or I'm forgetting something.

I will push some changes later.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 7, 2022 22:17
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 4b4b0d3 to a6dba10CompareJanuary 15, 2022 15:57
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 2 times, most recently from 1a8806e to dd8314fCompareJanuary 29, 2022 19:12
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review January 29, 2022 19:27
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 31, 2022 18:25
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 09065cb to 368796aCompareFebruary 4, 2022 15:23
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 4, 2022 15:27
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 68c63d0 to 36dd406CompareFebruary 8, 2022 19:02
@samisalreadytaken
samisalreadytaken marked this pull request as draft February 11, 2022 17:58
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 13, 2022 16:47
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from bdd338f to 7cceb59CompareFebruary 18, 2022 23:46

@BlixibonBlixibon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's not any practical way for me to test everything this has, although I did try using the HUD replacement scripts from your repo and messed around with the save icon script you provided. I experienced an Overflowed reading usercmd data (check sending and receiving code for mismatches)! error from the fake Steam client, which I'm assuming isn't related to the VScript VGUI code itself, but I'm otherwise in agreement that this seems stable. Before I approve this, I'm requesting a change I had to make for it to compile on my machine.

I'm really blown away by the capabilities of this implementation. This has the potential to open custom VGUI creation to a much wider audience.


Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

The context of SetCallback is specific enough that I think the name works best as-is than it would as something more explicit.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam notifications & achievements code works fine, are you sure you've included it on both server and client, and there are no errors on server? That error happens when client sends a message and server doesn't receive it. I also updated that code for save/restore few days ago (and rebased because they're code for an unreleased WIP feature so I don't care about history), although unlikely, you might have used a broken version.

Additionally I removed WorldToScreen() for now because I'm not sure about its output parameter. I had initially chosen 0,1 indices for an array because arrays are the lightest containers in Squirrel, but it could use x,y as well. The HSCRIPT parameter memory leak is also unideal, people shouldn't really use it.

Not too worried about temporarily removing this because it's already possible to manually calculate this.

@Blixibon

Copy link
Copy Markdown
Member

Ah, I didn't realize it was meant to run on both the server and the client. I saw that the save icon script was client only and I didn't realize your other HUD scripts were meant to be shared. I'm surprised I missed that, but sorry for the confusion.

@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam scripts are only shared for the achievement manager (serverside control and verification), and the HUD scripts are shared to be able to get suit information because NetProps doesn't work.

@Blixibon
Blixibon merged commit 63a8882 into mapbase-source:developOct 26, 2022
VDeltaGabriel pushed a commit to Project-P2009/p2009_sdk that referenced this pull request Apr 27, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@samisalreadytaken@Blixibon@z33ky
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

vscript vgui - #169

Merged
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui
Oct 26, 2022
Merged

vscript vgui#169
Blixibon merged 1 commit into
mapbase-source:developfrom
samisalreadytaken:vscript_vgui

Conversation

@samisalreadytaken

@samisalreadytakensamisalreadytaken commented Dec 22, 2021

Copy link
Copy Markdown

This implementation is not final, but it is stable.

Example code and videos:

https://github.com/samisalreadytaken/vscripts/tree/master/mapbase
https://gist.github.com/samisalreadytaken/4847ede81a7222b66dc82eac8622904e

https://youtu.be/PrND1JsXduo
https://youtu.be/I4Y_kLR2CQ0
https://youtu.be/Oh5JpBHXWYM

Some notes:

  • Most #if 0'd blocks are either untested, or usefulness of them are uncertain.

  • Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

  • A future change to add is integration with C_VGuiScreen entity to display script panels. This would also be a simpler alternative to manual 3D world painting.

  • A TODO is a convenient method to control the visibility of existing HUD elements. The current hack is to use the hidehud convar which is manually reset on level shutdown. (See hud_override.nut)


PR Checklist

  • My PR follows all guidelines in the CONTRIBUTING.md file
  • My PR targets a develop branch OR targets another branch with a specific goal in mind

@z33kyz33ky left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are minor fomatting issues with inconsistent spacing around parenthesis in control-flow statements and function parameters. It's not really concerning, just pointing it out.
Missing spaces after SCRIPT_SINGLETON (BEGIN_SCRIPTDESC_ROOT_NAMED()) also caught my eye.

The name of _panel diverges from the more common style (m_pPanel), though it has precedent in the original VGUI code.
This and m_hScriptInstance have accessors and could become private; I think only ResolveChildren() would need to be modified, either by being friended or by becoming a static method of IScriptVGUIObject. Again, just pointing it out.

There are a couple of loops to search for matching panels in g_ScriptPanels. That could be refactored to a function.

There are two unrelated changes in sp/src/game/client/vscript_client.cpp which should get their own dedicated commit (replacement of loop with V_memset() and removal of a call to g_pScriptVM->ClearValue( m_ScriptScope, "entity" ) in CScriptMaterialProxy::OnBind()).

There are a couple of places where references to a static Vector is returned.
I'm not sure how the script FFI deals with these - if a script were to call it twice, would both variables in the script also refer to the same object? I.e. would something like this fail:

local top =ScreenToWorld(0.5, 0);
local bottom =ScreenToWorld(0.5, 1);
assert( top != bottom );

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken

Copy link
Copy Markdown
Author

_vpanel and m_hScriptInstance are also accessed from derived helper classes and from CScriptVGUI::Create(). There could be setter functions, but I don't think it really matters.

Returned Vectors to script functions are reallocated in the VM, returning static Vector is Valve's convention. Though testing local Vector return, it seems to work fine; perhaps it's a difference in the implementation, or I'm forgetting something.

I will push some changes later.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp Outdated
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 7, 2022 22:17
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 4b4b0d3 to a6dba10CompareJanuary 15, 2022 15:57
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 2 times, most recently from 1a8806e to dd8314fCompareJanuary 29, 2022 19:12
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review January 29, 2022 19:27
@samisalreadytaken
samisalreadytaken marked this pull request as draft January 31, 2022 18:25
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 09065cb to 368796aCompareFebruary 4, 2022 15:23
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 4, 2022 15:27
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from 68c63d0 to 36dd406CompareFebruary 8, 2022 19:02
@samisalreadytaken
samisalreadytaken marked this pull request as draft February 11, 2022 17:58
@samisalreadytaken
samisalreadytaken marked this pull request as ready for review February 13, 2022 16:47
@samisalreadytaken
samisalreadytakenforce-pushed the vscript_vgui branch 3 times, most recently from bdd338f to 7cceb59CompareFebruary 18, 2022 23:46

@BlixibonBlixibon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's not any practical way for me to test everything this has, although I did try using the HUD replacement scripts from your repo and messed around with the save icon script you provided. I experienced an Overflowed reading usercmd data (check sending and receiving code for mismatches)! error from the fake Steam client, which I'm assuming isn't related to the VScript VGUI code itself, but I'm otherwise in agreement that this seems stable. Before I approve this, I'm requesting a change I had to make for it to compile on my machine.

I'm really blown away by the capabilities of this implementation. This has the potential to open custom VGUI creation to a much wider audience.


Should the function to set overrides/callbacks be named SetCallback(), or something else? Panorama uses SetPanelEvent() for registering callbacks.

The context of SetCallback is specific enough that I think the name works best as-is than it would as something more explicit.

Comment threadsp/src/game/client/mapbase/vscript_vgui.cpp
@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam notifications & achievements code works fine, are you sure you've included it on both server and client, and there are no errors on server? That error happens when client sends a message and server doesn't receive it. I also updated that code for save/restore few days ago (and rebased because they're code for an unreleased WIP feature so I don't care about history), although unlikely, you might have used a broken version.

Additionally I removed WorldToScreen() for now because I'm not sure about its output parameter. I had initially chosen 0,1 indices for an array because arrays are the lightest containers in Squirrel, but it could use x,y as well. The HSCRIPT parameter memory leak is also unideal, people shouldn't really use it.

Not too worried about temporarily removing this because it's already possible to manually calculate this.

@Blixibon

Copy link
Copy Markdown
Member

Ah, I didn't realize it was meant to run on both the server and the client. I saw that the save icon script was client only and I didn't realize your other HUD scripts were meant to be shared. I'm surprised I missed that, but sorry for the confusion.

@samisalreadytaken

Copy link
Copy Markdown
Author

The Steam scripts are only shared for the achievement manager (serverside control and verification), and the HUD scripts are shared to be able to get suit information because NetProps doesn't work.

@Blixibon
Blixibon merged commit 63a8882 into mapbase-source:developOct 26, 2022
VDeltaGabriel pushed a commit to Project-P2009/p2009_sdk that referenced this pull request Apr 27, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@samisalreadytaken@Blixibon@z33ky