Witam! Mam prośbę o małą przeróbkę BSHelper'a
W tej chwili przy wejściu na serwer automatycznie włączają się sprite'y, a to przeszkadza i chciałbym, żeby się nie włączały. Przy dłuższym przysiedzeniu mógłbym sam to ogarnąć, ale jestem na razie zajęty, więc proszę o to Was ![]()
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <xs>
#include <csx>
#include <colorchat>
#define PLUGIN "Bombsite Helper"
#define AUTHOR "kiki - hlmod.hu"
#define VERSION "1.3"
#define BOMBSITES 5 //Max Bombsites (Do not change)
new Float:g_locations[BOMBSITES][3]
new const g_sprite1[] = "sprites/bombsite/bomba.spr";
new const g_sprite2[] = "sprites/laserbeam.spr"
new g_line, g_iconid, g_maxplayers, g_bombsitenum, g_hostagepos, g_hostagek, g_bombplanted, g_userteam;
new r,g,b, helpt, type;
new bool:is_help_sprite[33], bool:is_help_line[33], bool:is_help_radar[33];
public client_putinserver(id)
{
set_task(15.0, "adv", id)
}
public adv(id)
{
ColorChat(id, TEAM_COLOR, "[BSHELPER]^x01 Nie wiesz gdzie znajduja sie BSy? Wpisz^x04 /bs^x01, aby wlaczyc asyste!")
}
public plugin_init()
{
new ent = -1;
while ((ent = find_ent_by_class(ent, "func_bomb_target")))
{
g_bombsitenum++
}
while ((ent = find_ent_by_class(ent, "info_bomb_target")) )
{
g_bombsitenum++
}
if(g_bombsitenum <= 0)
{
register_plugin(PLUGIN, "No Bomb map", AUTHOR)
pause("a")
return
}
register_plugin(PLUGIN, VERSION, AUTHOR)
find_bomb_targets(g_locations);
register_clcmd("say /bs", "bsh_menu");
register_clcmd("say_team /bs", "bsh_menu");
r = register_cvar("bsh_line_red", "0");
g = register_cvar("bsh_line_green", "255");
b = register_cvar("bsh_line_blue", "0");
helpt = register_cvar("amx_bsh", "a");
g_hostagepos = get_user_msgid("HostagePos")
g_hostagek = get_user_msgid("HostageK")
g_maxplayers = get_maxplayers()
register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
register_forward(FM_PlayerPreThink,"PreThink");
set_task(2.3,"radar",_,_,_,"b")
set_task(0.1,"task",_,_,_,"b")
new args[4];
get_pcvar_string(helpt, args, 3)
type = read_flags(args)
}
public client_connect(id)
{
if(type & (1<<0))
is_help_sprite[id] = true;
else
is_help_sprite[id] = false;
if(type & (1<<1))
is_help_line[id] = true;
else
is_help_line[id] = false;
if(type & (1<<2))
is_help_radar[id] = true;
else
is_help_radar[id] = false;
}
public plugin_precache()
{
g_iconid = precache_model(g_sprite1)
g_line = precache_model(g_sprite2);
}
public event_new_round()
{
g_bombplanted = false
}
public bomb_planted(planter)
{
g_bombplanted = true
}
public task()
{
new Players[32]
new playerCount, i, player
get_players(Players, playerCount, "ach")
for (i=0; i<playerCount; i++)
{
player = Players[i]
if(is_help_line[player])
{
new orig[3];
get_user_origin(player, orig, 0)
for(new i = 0; i < g_bombsitenum; i++)
{
make_line(player,orig,g_locations[i],55)
}
}
}
}
public PreThink(id)
{
if(is_help_sprite[id])
{
for(new i = 0; i < g_bombsitenum; i++)
{
create_icon_origin(id, g_locations[i], g_iconid)
}
}
}
public radar()
{
for (new id=1;id<=g_maxplayers;id++)
{
if (is_user_alive(id) && (is_help_radar[id]))
{
g_userteam = get_user_team(id)
if(g_userteam==2 || (g_userteam==1 && !g_bombplanted))
{
for(new i=0;i<g_bombsitenum;i++)
{
message_begin(MSG_ONE_UNRELIABLE, g_hostagepos, {0,0,0}, id)
write_byte(id)
write_byte(i+20)
write_coord(floatround(g_locations[i][0]))
write_coord(floatround(g_locations[i][1]))
write_coord(floatround(g_locations[i][2]))
message_end()
message_begin(MSG_ONE_UNRELIABLE, g_hostagek, {0,0,0}, id)
write_byte(i+20)
message_end()
}
}
}
}
}
public bsh_menu(id)
{
if(is_user_connected(id))
{
new szov[192];
new menu = menu_create("\rWybierz rodzaj asysty:", "bsh_handler");
formatex(szov,charsmax(szov), "\wSprite'y %s", is_help_sprite[id] ? "\yWlaczone":"\rWylaczone");
menu_additem(menu, szov, "1");
formatex(szov,charsmax(szov), "\wLinie %s", is_help_line[id] ? "\yWlaczone":"\rWylaczone");
menu_additem(menu, szov, "2");
formatex(szov,charsmax(szov), "\wRadar %s", is_help_radar[id] ? "\yWlaczone":"\rWylaczone");
menu_additem(menu, szov, "3");
menu_display(id, menu, 0);
}
}
public bsh_handler(id,menu,item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
is_help_sprite[id] = !is_help_sprite[id];
}
case 2:
{
is_help_line[id] = !is_help_line[id];
}
case 3:
{
is_help_radar[id] = !is_help_radar[id];
}
}
menu_destroy(menu);
bsh_menu(id);
return PLUGIN_HANDLED;
}
public make_line(id,start[3],Float:end[3],brightness){
message_begin(MSG_ONE_UNRELIABLE ,SVC_TEMPENTITY,{0,0,0},id) //message begin
write_byte(0)
write_coord(start[0]) // start position
write_coord(start[1])
write_coord(start[2])
write_coord(floatround(end[0])) // end position
write_coord(floatround(end[1]))
write_coord(floatround(end[2]))
write_short(g_line) // sprite index
write_byte(3) // starting frame
write_byte(0) // frame rate in 0.1's
write_byte(1) // life in 0.1's
write_byte(10) // line width in 0.1's
write_byte(0) // noise amplitude in 0.01's
write_byte(get_pcvar_num(r))
write_byte(get_pcvar_num(g))
write_byte(get_pcvar_num(b))
write_byte(brightness) // brightness)
write_byte(0) // scroll speed in 0.1's
message_end()
}
find_bomb_targets(Float:locations[BOMBSITES][3]) {
new ent, i;
while ( i < g_bombsitenum && (ent = find_ent_by_class(ent,"func_bomb_target") ) || i < g_bombsitenum && (ent = find_ent_by_class(ent,"info_bomb_target") ) ) {
get_brush_entity_origin(ent, locations[i]);
i++;
}
}
create_icon_origin(id, Float:origin[3], sprite)
{
new Float:fMyOrigin[3]
entity_get_vector(id, EV_VEC_origin, fMyOrigin)
new Float:fTargetOrigin[3]
fTargetOrigin = origin
fTargetOrigin[2] += 40.0
if (!is_in_viewcone(id, fTargetOrigin)) return;
new Float:fMiddle[3], Float:fHitPoint[3]
xs_vec_sub(fTargetOrigin, fMyOrigin, fMiddle)
trace_line(-1, fMyOrigin, fTargetOrigin, fHitPoint)
new Float:fWallOffset[3], Float:fDistanceToWall
fDistanceToWall = vector_distance(fMyOrigin, fHitPoint) - 10.0
normalize(fMiddle, fWallOffset, fDistanceToWall)
new Float:fSpriteOffset[3]
xs_vec_add(fWallOffset, fMyOrigin, fSpriteOffset)
new Float:fScale
fScale = 0.01 * fDistanceToWall
new scale = floatround(fScale)
te_sprite(id, fSpriteOffset, sprite, scale, 255)
}
te_sprite(id, Float:origin[3], sprite, scale, brightness) // By sontung0
{
message_begin(MSG_ONE, SVC_TEMPENTITY, _, id)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
write_short(sprite)
write_byte(scale)
write_byte(brightness)
message_end()
}
normalize(Float:fIn[3], Float:fOut[3], Float:fMul) // By sontung0
{
new Float:fLen = xs_vec_len(fIn)
xs_vec_copy(fIn, fOut)
fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
}
Jedyne co tu zrobiłem to spolszczenie, zmianę komendy /bsh na /bs oraz colorchat zamiast client_print, czyli najprostsze z możliwych ![]()
Pozdrawiam ![]()


Dodatki SourceMod












