Repository navigation
Conversation
…ut the file was missing. Fix duplicate Pets_* phrases and mislabeled language keys in BHOP_TIME, Defuser and EquipmentsMenu.
…min, as in 3.1-dev. Features_TurnOffAll now skips non-VIP clients instead of touching a null status map.
…dVIPGroup is now deprecated) and VIP_CORE_INTERFACE 310, as in 3.1-dev. Forwards are now created before configs are read so the new forward can fire on plugin start.
…, as in 3.1-dev. Groups are reset on config reload, so modules should re-add them in VIP_OnConfigsLoaded.
…e_id, VIP_Set/GetClientStorageValue natives and VIP_OnClientStorageLoaded forward. Unlike 3.1-dev, storage waits for the database and a valid Steam account, writes only when changed, and uses portable single-quoted SQL.
…fs cookies (USE_CLIENTPREFS 0, as in 3.1-dev), migrating existing cookie values on first load. The status-store wait timer now reloads features once when ready instead of on every tick, and gives up after 60s.
…rule in AGENTS.md.
… or ends with ';'. The loop now stops on the last part even if it is empty after trimming.
…ing another one from the DB list. Picking from the DB list now clears the stale target userid, and deletion looks the target up online by account id either way.
…ed is -1 (never delete). The check now matches the one used on connect.
…hich leaked feature maps and fired load forwards and feature toggles twice. OnReadyToStart now only loads storage and leaves the VIP check to UTIL_ReloadVIPPlayers; Clients_CreateClientVIPSettings frees old maps in case of overlapping reloads.
… now escaped via Database.Format. Names containing a quote no longer break the query either.
…e style. Formatting only, no behavior change.
…taining '%' (e.g. player names): already formatted text is now passed through "%s" instead of being used as a format string.
…in leaves before the query finishes. Also free the DataPack when the row to remove is already gone.
…dmin -1, which the include documents as "plugin". Any negative iAdmin is now treated as REASON_PLUGIN.
…ld group is now read before it is overwritten.
… to the menu they came from instead of the SourceMod top menu (an error if adminmenu is not loaded). Also fix the missing phrase shown when the target left.
Fix critical bugs from code review
…tatus store (cookies / storage) was not ready yet. Features are now loaded once, after the store is ready or the 60s wait runs out.
Brace single-statement bodies
Fix serious bugs from code review
…nClientLoaded never firing for an invalid group or a database error. A status-store wait timer left over from a previous load no longer loads features a second time.
…g VIP for that session. They are loaded as non-VIP without querying account 0, then checked again from OnClientAuthorized (moved to Clients.sp, it also retries storage).
…atures off, which left module effects active. All in-game VIP removals now go through Clients_RemoveVIPStatus (features off, then reset); disconnect still only resets.
…unloaded or reloaded. OnPluginEnd now saves every changed client synchronously, since async queries may never run at that point.
…nclude with fewer params, which left the feature half-registered. The optional default status and cookie flag are now read only when passed, before anything is registered.
…ys) or an unknown time mode, which wrote garbage expiry dates. UTIL_TimeToSeconds now returns -1 on overflow, and sm_addvip validates the converted duration and the resulting expiry.
…the value "0" via VIP_GiveClientFeature. It now returns the stored value, not whether the key exists.
…, because the last-use time was never stored. It now uses engine time, which unlike game time does not restart on map change.
…age (Plugin_Stop/Plugin_Handled) in VIP_OnShowClientInfo. With Plugin_Changed the module's edited copy is now actually shown instead of the config.
…TD panel. A scheme is now only added when the URL has none.
… leaking on unregister.
…ID_PENDING, truncated input) into garbage account ids used by sm_addvip, sm_delvip and the admin search. The STEAM_X:Y:Z format is now validated, otherwise 0 is returned.
…d to the database. It now returns null in that case, as documented in the include.
…e loaded before Steam authorized them, so an already loaded player is never loaded twice.
…r a result that does not fit into an int.
…st practices for code comments: explain why, not what, and comment only what a reader would trip over.
Fix medium/minor bugs from code review
…with a new SHOW_MORE phrase (en/ru/ua). Also translate the remaining Russian comments in List.sp.
…, vip_core.inc docs and the changelog to English. Other languages now live only in translation files and per-language config values; AGENTS.md states the rule.
…te them to English and link them from the README.
English-only code and docs; guides moved to docs/
… notes, and the changelog is kept in GitHub Releases.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 3.1.0 R.
New (ported from 3.1-dev)
vip_storagetable,sm_vip_storage_id,VIP_SetClientStorageValue/VIP_GetClientStorageValue,VIP_OnClientStorageLoadedvip_storageinstead of clientprefs cookies (USE_CLIENTPREFS 0); existing cookie values are migrated on first loadVIP_AddGroup/VIP_RemoveGroup(in-memory groups),VIP_IsGroupExists(VIP_IsValidVIPGroupis deprecated),VIP_OnConfigsLoaded,VIP_CORE_INTERFACE 310vip_modules.phrases.txtadded (the core already loaded it)Fixes
sm_vip_menu_commandsis empty or ends with;sm_vip_delete_expired -1VIP_OnVIPClientLoadedand feature toggles firing twice while the status store was loading%(player names) breaking chat messages,VIP_LogMessageand logsiAdmin -1("plugin") throwing inVIP_GiveClientVIP/VIP_RemoveClientVIP2VIP_OnClientLoadednot firing for an invalid group or a DB error; client reset wiping spawn/chat flagsOnPluginEnd)VIP_RegisterFeaturebreaking modules built against an older includesm_addvipint overflow on large durations; malformedSTEAM_ids acceptedVIP_GetClientFeatureBoolignoring the value, cookie leak onVIP_UnregisterFeature,VIP_GetDatabasethrowing before connectPlugin_Changedignored,https://URLs brokenOther
docs/AGENTS.mdupdates.mdremoved: the changelog lives in GitHub Releases (3.0 DEV history moved into the 3.0 R notes)Builds clean on SM 1.10–1.13.
🤖 Generated with Claude Code