{"id":35004028,"url":"https://github.com/criskkky/sws2-thirdperson","last_synced_at":"2026-02-13T05:14:37.854Z","repository":{"id":330646771,"uuid":"1122811968","full_name":"criskkky/sws2-thirdperson","owner":"criskkky","description":"CS2 Plugin built with SwiftlyS2 API","archived":false,"fork":false,"pushed_at":"2025-12-27T00:39:12.000Z","size":4761,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-28T14:12:50.366Z","etag":null,"topics":["cs2","cs2-plugin","swiftly-solution"],"latest_commit_sha":null,"homepage":"https://forum.swiftlys2.net/t/thirdperson-smooth-transitions-and-collision-detection/101/1","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/criskkky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-25T15:07:12.000Z","updated_at":"2025-12-27T18:01:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/criskkky/sws2-thirdperson","commit_stats":null,"previous_names":["criskkky/sws2-thirdperson"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/criskkky/sws2-thirdperson","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criskkky%2Fsws2-thirdperson","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criskkky%2Fsws2-thirdperson/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criskkky%2Fsws2-thirdperson/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criskkky%2Fsws2-thirdperson/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/criskkky","download_url":"https://codeload.github.com/criskkky/sws2-thirdperson/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criskkky%2Fsws2-thirdperson/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28400397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cs2","cs2-plugin","swiftly-solution"],"created_at":"2025-12-27T04:26:19.122Z","updated_at":"2026-01-13T21:58:38.833Z","avatar_url":"https://github.com/criskkky.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# [SwiftlyS2] ThirdPerson\n\n[![GitHub Release](https://img.shields.io/github/v/release/criskkky/sws2-thirdperson?color=FFFFFF\u0026style=flat-square)](https://github.com/criskkky/sws2-thirdperson/releases/latest)\n[![GitHub Issues](https://img.shields.io/github/issues/criskkky/sws2-thirdperson?color=FF0000\u0026style=flat-square)](https://github.com/criskkky/sws2-thirdperson/issues)\n[![GitHub Downloads](https://img.shields.io/github/downloads/criskkky/sws2-thirdperson/total?color=blue\u0026style=flat-square)](https://github.com/criskkky/sws2-thirdperson/releases)\n[![GitHub Stars](https://img.shields.io/github/stars/criskkky/sws2-thirdperson?style=social)](https://github.com/criskkky/sws2-thirdperson/stargazers)\u003cbr/\u003e\n  \u003csub\u003eMade with ❤️ by \u003ca href=\"https://github.com/criskkky\" rel=\"noopener noreferrer\" target=\"_blank\"\u003ecriskkky\u003c/a\u003e\u003c/sub\u003e\n  \u003cbr/\u003e\n\u003c/div\u003e\n\n## Overview\n\n\u003e [!WARNING]\n\u003e **ACK**: Due to engine limitations (I guess), certain attack actions (shooting or knifing) may be performed from the camera view instead of the player's actual position. Address this problem by switching between available damage modes in the configuration.\n\nThirdPerson is a plugin for SwiftlyS2 that provides third-person camera functionality for Counter-Strike 2. It allows players to switch between first-person and third-person views with customizable camera settings, damage blocking options, and smooth camera movement. The plugin includes permission-based access controls and supports both instant and smooth camera transitions.\n\n## Download Shortcuts\n\u003cul\u003e\n  \u003cli\u003e\n    \u003ccode\u003e📦\u003c/code\u003e\n    \u003cstrong\u003e\u0026nbspDownload Latest Plugin Version\u003c/strong\u003e ⇢\n    \u003ca href=\"https://github.com/criskkky/sws2-thirdperson/releases/latest\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eClick Here\u003c/a\u003e\n  \u003c/li\u003e\n  \u003cli\u003e\n    \u003ccode\u003e⚙️\u003c/code\u003e\n    \u003cstrong\u003e\u0026nbspDownload Latest SwiftlyS2 Version\u003c/strong\u003e ⇢\n    \u003ca href=\"https://github.com/swiftly-solution/swiftlys2/releases/latest\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eClick Here\u003c/a\u003e\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n## Features\n- **Third-Person Toggle**: Players can toggle third-person view on/off using configurable commands.\n- **Dual Camera Modes**: Support for both instant camera positioning and smooth interpolated movement.\n- **Configurable Damage Blocking**: Choose between blocking damage from behind (\"back\") or disabling all damage (\"none\") in third-person mode.\n- **Permission-Based Access**: Control who can use third-person functionality with customizable permissions.\n- **Customizable Camera Settings**: Adjust camera distance, height, and smoothing parameters.\n- **Real-time Updates**: Camera positions update smoothly every server tick.\n- **Multi-language Support**: Some translations included.\n\n## Screenshots\n\n![Screenshot 1](assets/Screenshot_1.png)\n\n## Plugin Setup\n\u003e [!WARNING]\n\u003e Make sure you **have installed SwiftlyS2 Framework** before proceeding.\n\n1. Download and extract the latest plugin version into your `swiftlys2/plugins` folder.\n2. Perform an initial run in order to allow file generation.\n3. Generated file will be located at: `swiftlys2/configs/plugins/ThirdPerson/config.jsonc`\n4. Edit the configuration file as needed.\n5. Configure permissions in your server's `permissions.jsonc` file.\n6. Enjoy!\n\n## Configuration Guide\n\n| Option | Type | Example | Description |\n|--------|------|---------|-------------|\n| CustomTPCommand | string | `\"tp\"` | Custom command to toggle third-person view. Default: `\"tp\"`. |\n| Permission | string | `\"thirdperson.use\"` | Permission required to use third-person functionality. Leave empty to allow all players. |\n| DamageMode | string | `\"back\"` | Damage blocking mode: `\"back\"` (block damage dealt from behind your character) or `\"none\"` (block all damage). |\n| ThirdPersonDistance | float | `100.0` | Distance of the third-person camera from the player. |\n| ThirdPersonHeight | float | `20.0` | Height offset of the third-person camera. |\n| SmoothCameraEnabled | boolean | `true` | Enable smooth camera movement interpolation. |\n| SmoothCameraSpeed | float | `5.0` | Speed of smooth camera movement (higher = faster). |\n| EnableKnifeWarnings | boolean | `true` | Enable warnings when players try to knife attack in third-person view. |\n\n## Permissions\n\nThirdPerson uses permission-based access control:\n\n- If `Permission` is empty, all players can use third-person functionality.\n- If `Permission` is set, only players with that permission will be able to toggle third-person view.\n\nFor more details on configuring permissions, see the [SwiftlyS2 permissions documentation](https://swiftlys2.net/docs/development/permissions/#configuration) and make sure to update your server's `permissions.jsonc` file.\n\n## Backend Logic (How It Works)\n1. When a player uses the third-person command, the plugin creates a camera entity positioned behind the player.\n2. Camera positioning uses raycasting to avoid clipping through walls and provides collision detection.\n3. Damage blocking is implemented through entity damage hooks, preventing damage based on the configured mode.\n4. Smooth camera movement uses linear interpolation for fluid transitions between positions.\n5. The plugin hooks into game events (round start, player death, disconnect) for intelligent resource cleanup.\n6. Permission checks ensure only authorized players can access third-person functionality.\n\n## Support and Feedback\nFeel free to [open an issue](https://github.com/criskkky/sws2-thirdperson/issues/new/choose) for any bugs or feature requests. If it's all working fine, consider starring the repository to show your support!\n\n## Contribution Guidelines\nContributions are welcome only if they align with the plugin's purpose. For major changes, please open an issue first to discuss what you would like to change.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcriskkky%2Fsws2-thirdperson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcriskkky%2Fsws2-thirdperson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcriskkky%2Fsws2-thirdperson/lists"}