一键导入
amxx-modding-kit-api-waypoint-markers
Guide for Waypoint Markers API creating 3D waypoint sprites visible through walls with per-player visibility.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Guide for Waypoint Markers API creating 3D waypoint sprites visible through walls with per-player visibility.
用 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-waypoint-markers |
| description | Guide for Waypoint Markers API creating 3D waypoint sprites visible through walls with per-player visibility. |
3D waypoint sprites that project onto walls, scale with distance, and support per-player visibility.
For complete API documentation, see README.md.
new Float:vecOrigin[3] = {512.0, 256.0, 128.0};
new pMarker = WaypointMarker_Create(
"sprites/mymod/waypoint.spr", // Sprite path (must be precached)
vecOrigin, // World position
1.0, // Scale (default: 1.0)
Float:{64.0, 64.0} // Sprite size {width, height}
);
new pMarker = WaypointMarker_Create(
"sprites/mymod/objective.spr",
vecOrigin,
.flScale = 0.5,
.rgflSize = Float:{48.0, 48.0}
);
Markers are hidden by default. Show them for specific players:
// Show for specific player
WaypointMarker_SetVisible(pMarker, pPlayer, true);
// Hide for specific player
WaypointMarker_SetVisible(pMarker, pPlayer, false);
// Show for ALL players (pass 0)
WaypointMarker_SetVisible(pMarker, 0, true);
public WaypointMarker_OnCreated(const pMarker) {
// Marker was created
}
public WaypointMarker_OnDestroy(const pMarker) {
// Marker is about to be destroyed
}
new g_pObjectiveMarker;
public plugin_precache() {
precache_model("sprites/mymod/objective.spr");
}
public plugin_init() {
register_plugin("Objective Marker", "1.0", "Author");
}
SetObjective(const Float:vecOrigin[3]) {
// Remove old marker if exists
if (g_pObjectiveMarker) {
engfunc(EngFunc_RemoveEntity, g_pObjectiveMarker);
}
// Create new marker
g_pObjectiveMarker = WaypointMarker_Create(
"sprites/mymod/objective.spr",
vecOrigin,
.flScale = 0.5
);
// Show to all players
WaypointMarker_SetVisible(g_pObjectiveMarker, 0, true);
}
public client_putinserver(pPlayer) {
// Show objective to new player
if (g_pObjectiveMarker) {
WaypointMarker_SetVisible(g_pObjectiveMarker, pPlayer, true);
}
}
new g_pTeamMarkers[4]; // Per team
CreateTeamMarker(iTeam, const Float:vecOrigin[3]) {
g_pTeamMarkers[iTeam] = WaypointMarker_Create(
"sprites/mymod/team_marker.spr",
vecOrigin
);
// Show only to team members
for (new i = 1; i <= MaxClients; ++i) {
if (!is_user_connected(i)) continue;
if (get_user_team(i) == iTeam) {
WaypointMarker_SetVisible(g_pTeamMarkers[iTeam], i, true);
}
}
}
public client_putinserver(pPlayer) {
new iTeam = get_user_team(pPlayer);
if (g_pTeamMarkers[iTeam]) {
WaypointMarker_SetVisible(g_pTeamMarkers[iTeam], pPlayer, true);
}
}
new g_rgpPlayerMarkers[MAX_PLAYERS + 1];
public client_putinserver(pPlayer) {
// Create marker that follows player
new Float:vecOrigin[3];
pev(pPlayer, pev_origin, vecOrigin);
g_rgpPlayerMarkers[pPlayer] = WaypointMarker_Create(
"sprites/mymod/player_marker.spr",
vecOrigin,
.flScale = 0.3
);
}
public client_disconnected(pPlayer) {
if (g_rgpPlayerMarkers[pPlayer]) {
engfunc(EngFunc_RemoveEntity, g_rgpPlayerMarkers[pPlayer]);
g_rgpPlayerMarkers[pPlayer] = 0;
}
}
// Update marker position in Think/PreThink
UpdateMarkerPosition(pPlayer) {
if (!g_rgpPlayerMarkers[pPlayer]) return;
new Float:vecOrigin[3];
pev(pPlayer, pev_origin, vecOrigin);
vecOrigin[2] += 40.0; // Above head
engfunc(EngFunc_SetOrigin, g_rgpPlayerMarkers[pPlayer], vecOrigin);
}
plugin_precache