Code:
#include <amxmodx>
#include <colorchat>
#include <engine>
#define PLUGIN "Camera + Laser"
#define VERSION "1.2"
#define AUTHOR "NapoleoN# + Toster v2.1"
#define MAX_TEAMS 4
new sprite
new numwpns
new weapons[32]
new ls_enabled
new ls_line
new ls_pvis
new ls_wpns
new ls_rgb
new numteams
new rgb[3][MAX_TEAMS]
new const szCommands[][] = {
"say /cam",
"say /camera",
"say_team /cam",
"say_team /camera"
}
new const szCameraViews[][] = {
"Normal",
"3RD Camera",
"Up Left",
"Top Down"
}
new const szCameraIntegers[] = {
0,
1,
2,
3
}
new pCvarPrefix
new pCvarPlugin
new szPrefix[33]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary("camera.txt")
for(new i; i < sizeof(szCommands); i++) {
register_clcmd(szCommands[i], "CmdCameraMenu")
}
register_clcmd("say", "CmdHandleSay")
register_clcmd("say_team", "CmdHandleSay")
pCvarPrefix = register_cvar("cam_prefix", "AMXX")
pCvarPlugin = register_cvar("cam_enabled", "1")
ls_enabled = register_cvar("ls_enabled", "1")
ls_line = register_cvar("ls_line", "1")
ls_pvis = register_cvar("ls_pvis", "1")
ls_wpns = register_cvar("ls_wpns", "0;4;6;9;25;29;")
ls_rgb = register_cvar("ls_rgb", "255 0 0;")
register_clcmd("ls_refresh", "getcvars", ADMIN_KICK)
register_clcmd("ls_getteam", "getteam", ADMIN_KICK)
register_clcmd("ls_getwpn", "getwpn", ADMIN_KICK)
getcvars()
}
public plugin_precache()
{
precache_model("models/rpgrocket.mdl")
sprite = precache_model("sprites/white.spr")
}
public CmdCameraMenu(id) {
if(!is_user_alive(id)) {
get_pcvar_string(pCvarPrefix, szPrefix, charsmax(szPrefix))
ColorChat(id, GREEN, "[%s]^1 You need to be alive to use this command.", szPrefix)
return PLUGIN_HANDLED
}
if(!get_pcvar_num(pCvarPlugin)) {
return PLUGIN_HANDLED
}
new szTemp[30]
formatex(szTemp, charsmax(szTemp), "%L", LANG_PLAYER, "CAMERA_MENU_TITLE")
new menu = menu_create(szTemp, "CmdCamHandler")
for(new i; i < sizeof(szCameraViews); i++) {
menu_additem(menu, szCameraViews[i])
}
menu_display(id, menu)
return PLUGIN_HANDLED
}
public CmdCamHandler(id, menu, item) {
if(!is_user_alive(id) || !get_pcvar_num(pCvarPlugin) || item == MENU_EXIT) { // Could both be changed while menu is already open.
return PLUGIN_HANDLED
}
new szName[32]; get_user_name(id, szName, charsmax(szName))
get_pcvar_string(pCvarPrefix, szPrefix, charsmax(szPrefix))
set_view(id, szCameraIntegers[item])
// ColorChat(0, GREEN, "[%s]^3 %s^1 has set his/her cam to^4 %s.", szPrefix, szName, szCameraViews[item])
ColorChat(0, GREEN, "[%s]^3 %s^1 %L^4 %s.", szPrefix, szName, LANG_PLAYER, "CAMERA_MSG", szCameraViews[item])
return PLUGIN_HANDLED
}
public CmdHandleSay(id) {
new argv[10]; read_argv(1, argv, charsmax(argv))
if(equal(argv, "/normal")) {
set_view(id, szCameraIntegers[0])
new szName[32]; get_user_name(id, szName, charsmax(szName))
get_pcvar_string(pCvarPrefix, szPrefix, charsmax(szPrefix))
ColorChat(0, GREEN, "[%s]^3 %s^1 %L^4 %s.", szPrefix, szName, LANG_PLAYER, "CAMERA_MSG", szCameraViews[0])
}
if(equal(argv, "/3rd")) {
set_view(id, szCameraIntegers[1])
new szName[32]; get_user_name(id, szName, charsmax(szName))
get_pcvar_string(pCvarPrefix, szPrefix, charsmax(szPrefix))
ColorChat(0, GREEN, "[%s]^3 %s^1 %L^4 %s.", szPrefix, szName, LANG_PLAYER, "CAMERA_MSG", szCameraViews[1])
}
if(equal(argv, "/upleft")) {
set_view(id, szCameraIntegers[2])
new szName[32]; get_user_name(id, szName, charsmax(szName))
get_pcvar_string(pCvarPrefix, szPrefix, charsmax(szPrefix))
ColorChat(0, GREEN, "[%s]^3 %s^1 %L^4 %s.", szPrefix, szName, LANG_PLAYER, "CAMERA_MSG", szCameraViews[2])
}
if(equal(argv, "/topdown")) {
set_view(id, szCameraIntegers[3])
new szName[32]; get_user_name(id, szName, charsmax(szName))
get_pcvar_string(pCvarPrefix, szPrefix, charsmax(szPrefix))
ColorChat(0, GREEN, "[%s]^3 %s^1 %L^4 %s.", szPrefix, szName, LANG_PLAYER, "CAMERA_MSG", szCameraViews[3])
}
}
public getwpn(id)
{
new clip, ammo
new w = get_user_weapon(id, clip, ammo)
console_print(id, "[ls] Your current weapon's id: %d", w)
return PLUGIN_HANDLED
}
public getteam(id)
{
new t = get_user_team(id)
console_print(id, "[ls] Your current team's id: %d", t)
return PLUGIN_HANDLED
}
public getcvars()
{
getwpns()
getrgb()
return PLUGIN_HANDLED
}
public getrgb()
{
new txt[MAX_TEAMS * 16]
new team[MAX_TEAMS][16]
new tmp[4]
get_pcvar_string(ls_rgb, txt, 64)
add(txt, 64, " ")
for(numteams = 0; contain(txt, ";")!=-1; numteams++)
{
strtok(txt, team[numteams], 16, txt, MAX_TEAMS * 16, ';')
for(new i=0; i<2; i++)
{
strtok(team[numteams], tmp, 4, team[numteams], 16, ' ')
rgb[i][numteams] = str_to_num(tmp)
}
trim(team[numteams])
rgb[2][numteams] = str_to_num(team[numteams])
trim(txt)
}
}
public getwpns()
{
new txt[64]
new wpns[3]
get_pcvar_string(ls_wpns, txt, 64)
add(txt, 64, " ")
for(numwpns = 0; contain(txt, ";")!=-1; numwpns++)
{
strtok(txt, wpns, 3, txt, 64, ';')
weapons[numwpns] = str_to_num(wpns)
}
}
public client_PreThink(id)
{
if(!is_user_alive(id)||get_pcvar_num(ls_enabled)!=1) return PLUGIN_HANDLED
new clip, ammo
new w = get_user_weapon(id, clip, ammo)
for(new i=0; i<numwpns; i++) if(w == weapons[i]) return PLUGIN_HANDLED
new e[3]
new t = get_user_team(id)
get_user_origin(id, e, 3)
if(get_pcvar_num(ls_pvis) == 0)message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
else message_begin( MSG_ONE_UNRELIABLE,SVC_TEMPENTITY, _, id)
if(get_pcvar_num(ls_line) != 0)
{
write_byte (TE_BEAMENTPOINT)
write_short(id | 0x1000)
write_coord (e[0])
write_coord (e[1])
write_coord (e[2])
}
else
{
write_byte (0)
write_coord (e[0] + 1)
write_coord (e[1] + 1)
write_coord (e[2] + 1)
write_coord (e[0] - 1)
write_coord (e[1] - 1)
write_coord (e[2] - 1)
}
write_short(sprite)
write_byte (0)
write_byte (10)
write_byte (1)
write_byte (5)
write_byte (0)
if(numteams>=t)
{
write_byte (rgb[0][t-1])
write_byte (rgb[1][t-1])
write_byte (rgb[2][t-1])
}
else
{
write_byte (rgb[0][0])
write_byte (rgb[1][0])
write_byte (rgb[2][0])
}
write_byte (255)
write_byte (10)
message_end()
return PLUGIN_HANDLED
}