一键导入
amxx-modding-kit-api-player-camera
Helps with Player Camera API usage for controlling custom camera views with positioning, targeting, and smooth movement.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Helps with Player Camera API usage for controlling custom camera views with positioning, targeting, and smooth movement.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Guide for implementing custom weapons using OOP-style patterns in AMX Mod X. Use when creating new weapons or extending existing ones with the Custom Weapons API.
This skill is describing how to use AMXX Modding Kit for AMX Mod X plugin development.
Helps with AMX Mod X (Pawn) coding conventions and best practices.
Best practices for organizing large AMX Mod X projects with multiple plugins sharing entities, weapons, events, and other definitions. Use when creating mod-scale projects that need consistent namespace patterns and shared constants.
Guide for Assets API usage managing models, sounds, and resources from JSON configuration files.
Guide for implementing custom entities using OOP-style patterns in AMX Mod X. Use when creating projectiles, pickups, NPCs, or any custom game entity with the Custom Entities API.
| name | amxx-modding-kit-api-player-camera |
| description | Helps with Player Camera API usage for controlling custom camera views with positioning, targeting, and smooth movement. |
api_player_camera)The Player Camera API provides powerful camera manipulation for implementing third-person views, spectator modes, cinematic cameras, and dynamic camera effects.
Reference: See README.md for complete documentation and examples.
This API allows you to:
// Enable custom camera for player
PlayerCamera_Activate(pPlayer);
// Disable custom camera
PlayerCamera_Deactivate(pPlayer);
// Check if camera is active
if (PlayerCamera_IsActive(pPlayer)) {
// Camera is enabled
}
// Set offset from player
new Float:vecOffset[3] = {0.0, 0.0, 50.0}; // Above player
PlayerCamera_SetOffset(pPlayer, vecOffset);
// Set camera angles
new Float:vecAngles[3] = {15.0, 0.0, 0.0}; // Looking down
PlayerCamera_SetAngles(pPlayer, vecAngles);
// Set distance from player
PlayerCamera_SetDistance(pPlayer, 100.0);
new Float:vecCameraOrigin[3];
PlayerCamera_GetOrigin(pPlayer, vecCameraOrigin);
Restrict camera movement on specific axes:
// Lock pitch and roll, allow yaw rotation
PlayerCamera_SetAxisLock(pPlayer, true, false, true);
Parameters: bLockPitch, bLockYaw, bLockRoll
Focus camera on specific entity:
// Camera follows target entity
PlayerCamera_SetTargetEntity(pPlayer, pTargetEntity);
Adjust camera update frequency:
// Update every 0.1 seconds (balance performance vs smoothness)
PlayerCamera_SetThinkDelay(pPlayer, 0.1);
Control camera movement smoothness:
// 0.0 = no movement, 0.5 = smooth, 1.0 = instant
PlayerCamera_SetDamping(pPlayer, 0.5);
ActivateThirdPersonCamera(const pPlayer) {
PlayerCamera_Activate(pPlayer);
// Position behind and above player
new Float:vecOffset[3] = {0.0, -50.0, 30.0};
PlayerCamera_SetOffset(pPlayer, vecOffset);
// Look slightly down
new Float:vecAngles[3] = {10.0, 0.0, 0.0};
PlayerCamera_SetAngles(pPlayer, vecAngles);
PlayerCamera_SetDistance(pPlayer, 150.0);
PlayerCamera_SetDamping(pPlayer, 0.7);
}
public plugin_init() {
register_clcmd("say /camera", "Command_ToggleCamera");
}
public Command_ToggleCamera(const pPlayer) {
if (PlayerCamera_IsActive(pPlayer)) {
PlayerCamera_Deactivate(pPlayer);
client_print(pPlayer, print_chat, "Camera deactivated");
} else {
PlayerCamera_Activate(pPlayer);
PlayerCamera_SetDistance(pPlayer, 100.0);
client_print(pPlayer, print_chat, "Camera activated");
}
return PLUGIN_HANDLED;
}
SpectatePlayer(const pSpectator, const pTarget) {
if (!is_user_alive(pTarget)) return;
PlayerCamera_Activate(pSpectator);
PlayerCamera_SetTargetEntity(pSpectator, pTarget);
PlayerCamera_SetDistance(pSpectator, 150.0);
PlayerCamera_SetDamping(pSpectator, 0.5);
client_print(pSpectator, print_chat, "Spectating player");
}
ActivateFixedCamera(const pPlayer) {
PlayerCamera_Activate(pPlayer);
// Lock all axes for completely fixed view
PlayerCamera_SetAxisLock(pPlayer, true, true, true);
// Set specific viewing angle
new Float:vecAngles[3] = {45.0, 0.0, 0.0};
PlayerCamera_SetAngles(pPlayer, vecAngles);
PlayerCamera_SetDistance(pPlayer, 200.0);
}
ActivateCinematicCamera(const pPlayer, const Float:vecTarget[3]) {
PlayerCamera_Activate(pPlayer);
// Smooth movement for cinematic feel
PlayerCamera_SetDamping(pPlayer, 0.3);
PlayerCamera_SetThinkDelay(pPlayer, 0.05);
// High angle view
new Float:vecOffset[3] = {0.0, 0.0, 100.0};
PlayerCamera_SetOffset(pPlayer, vecOffset);
}
React to camera state changes:
// Called when camera is about to activate (can block by returning PLUGIN_HANDLED)
public PlayerCamera_OnActivate(const pPlayer) {
// Can block activation
}
// Called after camera is activated
public PlayerCamera_OnActivated(const pPlayer) {
client_print(pPlayer, print_chat, "Camera enabled");
}
// Called when camera is about to deactivate (can block by returning PLUGIN_HANDLED)
public PlayerCamera_OnDeactivate(const pPlayer) {
// Can block deactivation
}
// Called after camera is deactivated
public PlayerCamera_OnDeactivated(const pPlayer) {
client_print(pPlayer, print_chat, "Camera disabled");
}
public HamHook_Player_TakeDamage(pPlayer, pInflictor, pAttacker, Float:flDamage, iDamageBits) {
// Disable camera when taking damage
if (PlayerCamera_IsActive(pPlayer)) {
PlayerCamera_Deactivate(pPlayer);
}
return HAM_IGNORED;
}
public client_death(pPlayer) {
if (PlayerCamera_IsActive(pPlayer)) {
PlayerCamera_Deactivate(pPlayer);
}
}