Witam
Przerobiłem super vipa którego kiedyś K!113r napisał, chciałem dograć kamerę dla CT do wyboru ale wyskakuje jeden error i nie wiem jak sobie z nim poradzić
Kamera wzięta stąd:
http://amxx.pl/topic...rki-by-j-river/
Nazwa: Nicolas Eye - Mozesz podlozyc kamere
Oto .sma sVIPa
/*
Changelog:
19.02.2012r. 1.0 beta
13.03.2012r. 1.1 beta - dodanie możliwości zapisu wybranej opcji (nvault) i upiększenie menu
*/
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <engine>
#include <colorchat>
#include <nvault>
#include <fakemeta_util>
#define PLUGIN "Vip JailBreak"
#define VERSION "1.1"
#define AUTHOR "KreC!K"
#define ZADANIE_WSKRZES 6240
#define VIPS
#define GRAWITACJA 0.5
#define FLAGA ADMIN_LEVEL_F
//#define ZAPIS
#define MAX 32 //Max number of valid player entities
#pragma tabsize 0
#if defined VIPS
new maxplayers
#endif
#if defined ZAPIS
new vault
#endif
new wybor_gracza[33]
new freeze[33]
new zamrozenie[33]
new morfina[33]
new niewidzialnosc[33]
new odbicie[33];
new wartosc_odbicia[33];
new radar[33];
new player_b_eye[33] = 0 //Ability to place camera
new sprite_line = 0
new g_msg_screenfade;
new g_msgHostageAdd, g_msgHostageDel;
enum { Brak = 0, Grawitacja, Morfina, Zamrozenie, Duszek, Gumowy, Radar, Kamera }
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /svip_menu", "menu_cmd")
#if defined VIPS
maxplayers = get_maxplayers()
register_clcmd("say /vips", "print_vips", 0);
register_clcmd("say /vipy", "print_vips", 0);
register_clcmd("say /vipinfo", "MOTD")
#endif
RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1)
RegisterHam(Ham_TakeDamage, "player", "TakeDamage", 1)
RegisterHam(Ham_Killed, "player", "Killed", 1);
register_event("Damage", "Damage", "b", "2!=0");
register_think("PlayerCamera","Think_PlayerCamera");
g_msg_screenfade = get_user_msgid("ScreenFade");
g_msgHostageAdd = get_user_msgid("HostagePos");
g_msgHostageDel = get_user_msgid("HostageK");
set_task (2.0,"radar_scan",_,_,_,"b");
#if defined ZAPIS
vault=nvault_open("Menu")
if (vault == INVALID_HANDLE)
set_fail_state( "Nie moge otworzyc pliku :/");
#endif
}
#if defined ZAPIS
public client_connect(id)
{
load_wybor(id)
}
#endif
public menu_cmd(id)
{
if(get_user_flags(id) & ADMIN_LEVEL_F)
{
if(cs_get_user_team(id) == CS_TEAM_T)
{
new tytul[128], name[32], wybor[128]
if(wybor_gracza[id] == Brak)
format(wybor, 127, "\ybrak.")
if(wybor_gracza[id] == Grawitacja)
format(wybor, 127, "\ygrawitacja.")
if(wybor_gracza[id] == Duszek)
format(wybor, 127, "\yniewidzialnosc.")
if(wybor_gracza[id] == Gumowy)
format(wybor, 127, "\ygumowy pancerz.")
get_user_name(id, name, 31)
format(tytul, 127, "\y%s, \rwitaj w menu do zarzadzania Vip'em\d by KreC!K^n\wTwoja aktualnie uzyta opcja to: %s", name, wybor)
new menu = menu_create(tytul, "menu_tt")
menu_additem(menu, "Grawitacja") // item = 0
menu_additem(menu, "Widzialnosc [10/255] gdy sie nie ruszasz") // item = 1
menu_additem(menu, "Gumowy Pancerz [1/2] na odbicie pocisku") // item = 2
#if defined ZAPIS
menu_additem(menu, "\rZapisz swoja wybrana opcje\d(bedzie ona wczytana przy kazdym polaczeniu z serwerem [mozna zmienic])")
#endif
menu_display(id, menu, 0)
}
else if(cs_get_user_team(id) == CS_TEAM_CT)
{
new tytul[128], name[32], wybor[128]
if(wybor_gracza[id] == Brak)
format(wybor, 127, "\ybrak.")
if(wybor_gracza[id] == Grawitacja)
format(wybor, 127, "\ygrawitacja.")
if(wybor_gracza[id] == Morfina)
format(wybor, 127, "\ymorfina.")
if(wybor_gracza[id] == Zamrozenie)
format(wybor, 127, "\yzamrozenie.")
if(wybor_gracza[id] == Radar)
format(wybor, 127, "\yradar.")
if(wybor_gracza[id] == Kamera)
format(wybor, 127, "\ykamera.")
get_user_name(id, name, 31)
format(tytul, 127, "\y%s, \rwitaj w menu do zarzadzania Vip'em\d by KreC!K^n\wTwoja aktualnie uzyta opcja to: %s", name, wybor)
new menu = menu_create(tytul, "menu_ct")
menu_additem(menu, "Grawitacja") // item = 0
menu_additem(menu, "Morfina [1/2]") // item = 1
menu_additem(menu, "Zamrozenie [1/2]") // item = 2
menu_additem(menu, "Radar [na nozu]") // item = 3
menu_additem(menu, "Kamera [E]") // item = 4
#if defined ZAPIS
menu_additem(menu, "\rZapisz swoja wybrana opcje\d(bedzie ona wczytana przy kazdym polaczeniu z serwerem [mozna zmienic])")
#endif
menu_display(id, menu, 0)
}
}
else
client_print(id, print_chat, "[Vip] Nie masz dostepu do tej uslugi.")
return 0
}
public menu_tt(id, menu, item)
{
switch(item)
{
case 0:{
wybor_gracza[id] = Grawitacja
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wybrales ^x04grawitacje^x01. Opcja ta bedzie dostepna w ^x03nastepnej rundzie.")
}
case 1:{
wybor_gracza[id] = Duszek
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wybrales ^x04 duszka, nie ruszaj sie by utrzymac niska widzialnosc!^x01. Opcja ta bedzie dostepna w ^x03nastepnej rundzie.")
}
case 2:{
wybor_gracza[id] = Gumowy
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wybrales ^x04gumowy pancerz 1/5 na odbicie pocisku^x01. Opcja ta bedzie dostepna w ^x03nastepnej rundzie.")
}
#if defined ZAPIS
case 3:{
save_wybor(id)
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wlasnie zapisano ^x04Twoj ^x03wybor.")
}
#endif
}
}
public menu_ct(id, menu, item)
{
switch(item)
{
case 0:{
wybor_gracza[id] = Grawitacja
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wybrales ^x04grawitacje^x01. Opcja ta bedzie dostepna w ^x03nastepnej rundzie.")
}
case 1:{
wybor_gracza[id] = Morfina
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wybrales ^x04morfine^x01. Opcja ta bedzie dostepna w ^x03nastepnej rundzie.")
}
case 2:{
wybor_gracza[id] = Zamrozenie
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wybrales ^x04zamrozenie^x01. Opcja ta bedzie dostepna w ^x03nastepnej rundzie.")
}
case 3:{
wybor_gracza[id] = Radar
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wybrales ^x04radar, trzymaj noz zeby namierzyc wieznia^x01. Opcja ta bedzie dostepna w ^x03nastepnej rundzie.")
}
case 4:{
wybor_gracza[id] = Kamera
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wybrales ^x04kamere, stawiasz na (E) i potem widok kamera/normal na (E)^x01. Opcja ta bedzie dostepna w ^x03nastepnej rundzie.")
}
#if defined ZAPIS
case 5:{
save_wybor(id)
ColorChat(id, BLUE, "^x04[^x03Vip^x04] ^x01Wlasnie zapisano ^x04Twoj ^x03wybor.")
}
#endif
}
}
public Odrodzenie(id)
{
if(wybor_gracza[id] == Grawitacja && (get_user_flags(id) & ADMIN_LEVEL_F))
set_user_gravity(id, GRAWITACJA)
if(is_user_alive(id))
set_user_rendering(id, kRenderFxNone, 0,0,0, kRenderTransAlpha, 999)
if(wybor_gracza[id] == Zamrozenie && cs_get_user_team(id) == CS_TEAM_CT && (get_user_flags(id) & ADMIN_LEVEL_F))
set_user_rendering(id, kRenderFxNone, 0,0,0, kRenderTransAlpha, 999)
if(wybor_gracza[id] == Morfina && cs_get_user_team(id) == CS_TEAM_CT && (get_user_flags(id) & ADMIN_LEVEL_F))
if(wybor_gracza[id] == Duszek && cs_get_user_team(id) == CS_TEAM_T && (get_user_flags(id) & ADMIN_LEVEL_F))
if(wybor_gracza[id] == Gumowy && cs_get_user_team(id) == CS_TEAM_T && (get_user_flags(id) & ADMIN_LEVEL_F))
wartosc_odbicia[id] = 2;
if(wybor_gracza[id] == Radar && cs_get_user_team(id) == CS_TEAM_CT && (get_user_flags(id) & ADMIN_LEVEL_F))
set_task (2.0,"radar_scan",_,_,_,"b");
if(wybor_gracza[id] == Kamera && cs_get_user_team(id) == CS_TEAM_CT && (get_user_flags(id) & ADMIN_LEVEL_F))
//////////////do freeza
if(wybor_gracza[id] == Zamrozenie && (get_user_flags(id) & ADMIN_LEVEL_F))
freeze[id] = 1
if(wybor_gracza[id] != Zamrozenie)
freeze[id] = 0
////////////// i koniec
//////////////do morfiny
if(wybor_gracza[id] == Morfina && (get_user_flags(id) & ADMIN_LEVEL_F))
morfina[id] = 1
if(wybor_gracza[id] != Morfina)
morfina[id] = 0
////////////// i koniec
//////////////do duszka
if(wybor_gracza[id] == Duszek && (get_user_flags(id) & ADMIN_LEVEL_F))
niewidzialnosc[id] = 1
if(wybor_gracza[id] != Duszek)
niewidzialnosc[id] = 0
////////////// i koniec
//////////////do gumowego pancerza
if(wybor_gracza[id] == Gumowy && (get_user_flags(id) & ADMIN_LEVEL_F))
odbicie[id] = 1
if(wybor_gracza[id] != Gumowy)
odbicie[id] = 0
////////////// i koniec
//////////////do radaru
if(wybor_gracza[id] == Radar && (get_user_flags(id) & ADMIN_LEVEL_F))
radar[id] = 1
if(wybor_gracza[id] != Radar)
radar[id] = 0
////////////// i koniec
//////////////do kamery
if(wybor_gracza[id] == Kamera && (get_user_flags(id) & ADMIN_LEVEL_F))
player_b_eye[id] = 1
if(wybor_gracza[id] != Kamera)
player_b_eye[id] = 0
////////////// i koniec
}
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
new liczba = random_num(1, 2)
if(!is_user_connected(idattacker))
return HAM_IGNORED;
if(!freeze[idattacker])
return HAM_IGNORED;
if(freeze[idattacker] && damage>0 && !zamrozenie[this] && liczba==2){
fm_set_rendering(this, kRenderFxGlowShell, 0,0,255, kRenderGlow, 255)
zamrozenie[this] = true
set_pev(this, pev_flags, FL_FROZEN)
set_task(5.0, "Odmroz", this)
}
if(zamrozenie[this])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public Odmroz(id)
{
set_pev(id, pev_flags, FL_CLIENT)
fm_set_rendering(id, kRenderFxGlowShell, 0,0,0, kRenderGlow, 255)
zamrozenie[id] = false
}
#if defined VIPS
public print_vips(user)
{
new adminnames[33][32]
new message[256]
new id, count, x, len
for(id = 1 ; id <= maxplayers ; id++)
if(is_user_connected(id))
if(get_user_flags(id) & FLAGA)
get_user_name(id, adminnames[count++], 31)
len = format(message, 255, "^x04 S-VIPY ONLINE: ")
if(count > 0) {
for(x = 0 ; x < count ; x++) {
len += format(message[len], 255-len, "%s%s ", adminnames[x], x < (count-1) ? ", ":"")
if(len > 96 ) {
ColorChat(user, GREEN, "%s", message);
len = format(message, 255, "^x04 ")
}
}
ColorChat(user, GREEN, "%s", message);
}
else {
len += format(message[len], 255-len, "Brak Vipow ONLINE")
ColorChat(user, GREEN, "%s", message);
}
}
#endif
public MOTD( id,level,cid ) {
if ( !cmd_access(id,level,cid,1) )
return PLUGIN_CONTINUE
show_motd( id,"vip.txt","Informacje VIP." );
return PLUGIN_CONTINUE
}
public client_disconnect(id){
wybor_gracza[id] = Brak
}
#if defined ZAPIS
public plugin_end()
nvault_close(vault)
public load_wybor(id)
{
new name[35]
get_user_name(id,name,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-wybor",name)
format(vaultdata,255,"%d",wybor_gracza[id])
nvault_get(vault,vaultkey,vaultdata,255)
new wybortemp[33]
parse(vaultdata,wybortemp, 32)
wybor_gracza[id]=str_to_num(wybortemp)
return PLUGIN_CONTINUE
}
public save_wybor(id){
new name[35]
get_user_name(id,name,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-wybor",name)
format(vaultdata,255,"%d", wybor_gracza[id])
nvault_set(vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
#endif
public Killed(id)
{
if(morfina[id] && random_num(1,2) == 1)
set_task(0.1, "Wskrzes", id+ZADANIE_WSKRZES);
}
public Wskrzes(id)
ExecuteHamB(Ham_CS_RoundRespawn, id-ZADANIE_WSKRZES);
public client_PreThink ( id )
{
new button2 = get_user_button(id);
//USE Button actives forward\backward\left\right
if (niewidzialnosc[id] && get_entity_flags(id) & FL_ONGROUND && (!(button2 & (IN_FORWARD+IN_BACK+IN_MOVELEFT+IN_MOVERIGHT)) && is_user_alive(id)))
{
set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 20);
}
else set_rendering(id,kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 255);
///////////////////////////////////////////////////
return PLUGIN_CONTINUE
}
public Damage(id)
{
new idattacker = get_user_attacker(id);
if(!is_user_connected(idattacker) || get_user_team(id) == get_user_team(idattacker))
return PLUGIN_CONTINUE;
if(odbicie[idattacker] && random_num(1, wartosc_odbicia[idattacker]) == 1)
Display_Fade(id, 1<<14, 1<<14 ,1<<16, 0, 255, 0, 230);
return PLUGIN_CONTINUE;
}
stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)
{
message_begin( MSG_ONE, g_msg_screenfade,{0,0,0},id );
write_short( duration );
write_short( holdtime );
write_short( fadetype );
write_byte ( red );
write_byte ( green );
write_byte ( blue );
write_byte ( alpha );
message_end();
}
public radar_scan(id)
{
new PlayerCoords[3];
for (new id=1; id<=32; id++)
{
if((!is_user_alive(id))||(!radar[id])) continue;
for (new i=1;i<=32;i++)
{
if(!is_user_alive(i) || get_user_team(i) == get_user_team(id)) continue;
if(get_user_weapon(id) == CSW_KNIFE)
get_user_origin(i, PlayerCoords)
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id)
write_byte(id)
write_byte(i)
write_coord(PlayerCoords[0])
write_coord(PlayerCoords[1])
write_coord(PlayerCoords[2])
message_end()
message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id)
write_byte(i)
message_end()
}
}
}
public plugin_precache()
{
precache_model("models/rpgrocket.mdl")
sprite_line = precache_model("sprites/dot.spr")
}
public client_PreThink ( id )
{
//USE Button actives USEMAGIC
if (pev(id,pev_button) & IN_USE )
Use_Spell(id)
return PLUGIN_CONTINUE
}
public Use_Spell(id)
{
if (player_b_eye[id] != 0) item_eye(id)
return PLUGIN_HANDLED
}
public item_eye(id)
{
if (player_b_eye[id] == -1)
{
//place camera
new Float:playerOrigin[3]
entity_get_vector(id,EV_VEC_origin,playerOrigin)
new ent = create_entity("info_target")
entity_set_string(ent, EV_SZ_classname, "PlayerCamera")
entity_set_int(ent, EV_INT_movetype, MOVETYPE_NOCLIP)
entity_set_int(ent, EV_INT_solid, SOLID_NOT)
entity_set_edict(ent, EV_ENT_owner, id)
entity_set_model(ent, "models/rpgrocket.mdl") //Just something
entity_set_origin(ent,playerOrigin)
entity_set_int(ent,EV_INT_iuser1,0) //Viewing through this camera
set_rendering (ent,kRenderFxNone, 0,0,0, kRenderTransTexture,0)
entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)
player_b_eye[id] = ent
}
else
{
//view through camera or stop viewing
new ent = player_b_eye[id]
if (!is_valid_ent(ent))
{
attach_view(id,id)
return PLUGIN_HANDLED
}
new viewing = entity_get_int(ent,EV_INT_iuser1)
if (viewing)
{
entity_set_int(ent,EV_INT_iuser1,0)
attach_view(id,id)
}
else
{
entity_set_int(ent,EV_INT_iuser1,1)
attach_view(id,ent)
}
}
return PLUGIN_HANDLED
}
/* ==================================================================================================== */
//Called when PlayerCamera thinks
public Think_PlayerCamera(ent)
{
new id = entity_get_edict(ent,EV_ENT_owner)
//Check if player is still having the item and is still online
if (!is_valid_ent(id) || player_b_eye[id] == 0 || !is_user_connected(id))
{
//remove entity
if (is_valid_ent(id) && is_user_connected(id)) attach_view(id,id)
remove_entity(ent)
}
else
{
//Dont use cpu when not alive anyway or not viewing
if (!is_user_alive(id))
{
entity_set_float(ent,EV_FL_nextthink,halflife_time() + 3.0)
return PLUGIN_HANDLED
}
if (!entity_get_int(ent,EV_INT_iuser1))
{
entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.5)
return PLUGIN_HANDLED
}
entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)
//Find nearest player to camera
new Float:pOrigin[3],Float:plOrigin[3],Float:ret[3]
entity_get_vector(ent,EV_VEC_origin,plOrigin)
new Float:distrec = 2000.0, winent = -1
for (new i=0; i<MAX; i++)
{
if (is_user_connected(i) && is_user_alive(i))
{
entity_get_vector(i,EV_VEC_origin,pOrigin)
pOrigin[2]+=10.0
if (trace_line ( 0, plOrigin, pOrigin, ret ) == i && vector_distance(pOrigin,plOrigin) < distrec)
{
winent = i
distrec = vector_distance(pOrigin,plOrigin)
}
}
}
//Traceline and updown is still revresed
if (winent > -1)
{
new Float:toplayer[3], Float:ideal[3],Float:pOrigin[3]
entity_get_vector(winent,EV_VEC_origin,pOrigin)
pOrigin[2]+=10.0
toplayer[0] = pOrigin[0]-plOrigin[0]
toplayer[1] = pOrigin[1]-plOrigin[1]
toplayer[2] = pOrigin[2]-plOrigin[2]
vector_to_angle ( toplayer, ideal )
ideal[0] = ideal[0]*-1
entity_set_vector(ent,EV_VEC_angles,ideal)
}
}
return PLUGIN_CONTINUE
}
public Create_Line(id,origin1[3],origin2[3],bool:draw)
{
if (draw)
{
message_begin(MSG_ONE,SVC_TEMPENTITY,{0,0,0},id)
write_byte(0)
write_coord(origin1[0]) // starting pos
write_coord(origin1[1])
write_coord(origin1[2])
write_coord(origin2[0]) // ending pos
write_coord(origin2[1])
write_coord(origin2[2])
write_short(sprite_line) // sprite index
write_byte(1) // starting frame
write_byte(5) // frame rate
write_byte(2) // life
write_byte(3) // line width
write_byte(0) // noise
write_byte(255) // RED
write_byte(50) // GREEN
write_byte(50) // BLUE
write_byte(155) // brightness
write_byte(5) // scroll speed
message_end()
}
new Float:ret[3],Float:fOrigin1[3],Float:fOrigin2[3]
//So we dont hit ourself
origin1[2]+=50
IVecFVec(origin1,fOrigin1)
IVecFVec(origin2,fOrigin2)
new hit = trace_line ( 0, fOrigin1, fOrigin2, ret )
return hit
}
A oto error:
Welcome to the AMX Mod X 1.8.1-300 Compiler. Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team svip.sma(494) : error 021: symbol already defined: "client_PreThink" 1 Error. Could not locate output file svip.amxx (compile failed).
Oczywiście dla osoby której uda się to naprawić + ![]()
Proszę o pomoc i
Z góry dziękuje


Dodatki SourceMod







vippp.amxx






