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