Witam mam problem z pluginem Linka dla CT. Otóż chciałem aby ta linka była dostępna dla flagi "q" (ADMIN_LEVEL_E), oraz tylko w CT. Problem jest taki, że tej linki może używać każda osoba. Czy mógłby ktoś powiedzieć co tutaj jest nie tak?
P.S. Osoba bez flagi "q" która używa tej linki, co chwile "buguje" sie w ścianie i nie może sie ruszyć, nie wiem co tu jest nie tak
/************************************************************************************************** **** CVARS (FEATURES) **** sv_adminhook = Turn Plugin On/off **** ADMIN COMMANDS **** ADMIN_LEVEL_A (flag="m") Granting Hook/Rope = amx_granthook <authid, nick, @team, @all or #userid> <on/off> ADMIN_LEVEL_E (flag="q") || Granted by admin Ninja Rope by Spacedude (slightly modified) & Hook thingy Attaching Rope = +rope Deattaching Rope = -rope Attaching Hook = +hook Deattaching Hook = -hook **************************************************************************************************/ #define USING_AMX 0 // 1 = Using AMX \ 0 = Useing AMXX #if USING_AMX #include <amxmod> #include <amxmisc> #include <VexdUM> #include <fun> #include <ColorChat> new gModName[32] = "AMX" #else #include <amxmodx> #include <amxmisc> #include <fun> #include <engine> #include <ColorChat> new gModName[32] = "AMXX" #endif #define TE_BEAMENTPOINT 1 #define TE_KILLBEAM 99 #define DELTA_T 0.1 // seconds #define BEAMLIFE 100 // deciseconds #define MOVEACCELERATION 150 // units per second^2 #define REELSPEED 300 // units per second /* Hook Stuff */ new gHookLocation[33][3] new gHookLenght[33] new bool:gIsHooked[33] new gAllowedHook[33] new Float:gBeamIsCreated[33] new global_gravity new beam /************************************************************************************************************************/ public plugin_init() //Called on plugin start { // Plugin Info register_plugin("Admin Hook","1.0","AssKicR") //CVARS register_cvar("sv_adminhook", "1" ) //ADMIN CMDS register_concmd("amx_granthook","AdminGrantHook",ADMIN_LEVEL_E,"<authid, nick, @team, @all or #userid> <on/off>") //USER COMMANDS register_clcmd("+rope", "hook_on",ADMIN_LEVEL_E) register_clcmd("-rope", "hook_off",ADMIN_LEVEL_E) register_clcmd("+hook", "hook_on",ADMIN_LEVEL_E) register_clcmd("-hook", "hook_off",ADMIN_LEVEL_E) //HOOKED EVENTS register_event("ResetHUD", "ResetHUD", "b") } /************************************************************************************************************************/ public plugin_precache() { beam = precache_model("sprites/zbeam4.spr") precache_sound("weapons/xbow_hit2.wav") } /*************************************************************************************************************************/ /************************************************** USP/SCOUT REMOVE *****************************************************/ /*************************************************************************************************************************/ /*************************************************************************************************************************/ /**************************************************** HOOKED EVENTS ******************************************************/ /*************************************************************************************************************************/ public ResetHUD(id) { //Check if he is hooked to something if (gIsHooked[id]) RopeRelease(id) } /************************************************************************************************************************/ stock kz_velocity_set(id,vel[3]) { //Set Their Velocity to 0 so that they they fall straight down from new Float:Ivel[3] Ivel[0]=float(vel[0]) Ivel[1]=float(vel[1]) Ivel[2]=float(vel[2]) entity_set_vector(id, EV_VEC_velocity, Ivel) } stock kz_velocity_get(id,vel[3]) { //Set Their Velocity to 0 so that they they fall straight down from new Float:Ivel[3] entity_get_vector(id, EV_VEC_velocity, Ivel) vel[0]=floatround(Ivel[0]) vel[1]=floatround(Ivel[1]) vel[2]=floatround(Ivel[2]) } /************************************************************************************************************************/ /**************************************************** ADMIN COMMANDS ****************************************************/ /************************************************************************************************************************/ public AdminGrantHook(id,level,cid) { if ( !cmd_access(id,level,cid,1) ) return PLUGIN_HANDLED new arg1[32],arg2[32] read_argv(1,arg1,31) read_argv(2,arg2,31) new onoff = str_to_num(arg2) if ( equali(arg1,"@all") ) { new plist[32],pnum get_players(plist,pnum,"a") if (pnum==0) { console_print(id,"[%s] There are no clients",gModName) return PLUGIN_HANDLED } for (new i=0; i<pnum; i++) { gAllowedHook[plist[i]]=onoff if (gIsHooked[plist[i]]==true && onoff==0) { RopeRelease(plist[i]) } } console_print(id,"[%s] %s all players access to hook/rope",gModName,onoff ? "Gave":"Removed") } else if ( arg1[0]=='@' ) { new plist[32],pnum get_players(plist,pnum,"ae",arg1[1]) if ( pnum==0 ) { console_print(id,"[%s] No clients in such team",gModName) return PLUGIN_HANDLED } for (new i=0; i<pnum; i++) { gAllowedHook[plist[i]]=onoff if (gIsHooked[plist[i]]==true && onoff==0) { RopeRelease(plist[i]) } } console_print(id,"[%s] %s all %ss access to hook/rope",onoff ? "Gave":"Removed",arg1[1]) } else { new pName[32] new player = cmd_target(id,arg1,6) if (!player) return PLUGIN_HANDLED gAllowedHook[player]=onoff if (gAllowedHook[player]==0 && onoff==0) { RopeRelease(player) } get_user_name(player,pName,31) console_print(id,"[%s] %s ^"%s^" access to hook/rope",onoff ? "Gave":"Removed",pName) } return PLUGIN_HANDLED } /************************************************************************************************************************/ /****************************************************** NINJAROPE *******************************************************/ /************************************************************************************************************************/ public ropetask(parm[]) { new id = parm[0] new user_origin[3], user_look[3], user_direction[3], move_direction[3] new A[3], D[3], buttonadjust[3] new acceleration, velocity_towards_A, desired_velocity_towards_A new velocity[3], null[3] if (!is_user_alive(id)) { RopeRelease(id) return } if (gBeamIsCreated[id] + BEAMLIFE/10 <= get_gametime()) { beamentpoint(id) } null[0] = 0 null[1] = 0 null[2] = 0 get_user_origin(id, user_origin) get_user_origin(id, user_look,2) kz_velocity_get(id, velocity) buttonadjust[0]=0 buttonadjust[1]=0 if (get_user_button(id)&IN_FORWARD) buttonadjust[0]+=1 if (get_user_button(id)&IN_BACK) buttonadjust[0]-=1 if (get_user_button(id)&IN_MOVERIGHT) buttonadjust[1]+=1 if (get_user_button(id)&IN_MOVELEFT) buttonadjust[1]-=1 if (get_user_button(id)&IN_JUMP) buttonadjust[2]+=1 if (get_user_button(id)&IN_DUCK) buttonadjust[2]-=1 if (buttonadjust[0] || buttonadjust[1]) { user_direction[0] = user_look[0] - user_origin[0] user_direction[1] = user_look[1] - user_origin[1] move_direction[0] = buttonadjust[0]*user_direction[0] + user_direction[1]*buttonadjust[1] move_direction[1] = buttonadjust[0]*user_direction[1] - user_direction[0]*buttonadjust[1] move_direction[2] = 0 velocity[0] += floatround(move_direction[0] * MOVEACCELERATION * DELTA_T / get_distance(null,move_direction)) velocity[1] += floatround(move_direction[1] * MOVEACCELERATION * DELTA_T / get_distance(null,move_direction)) } if (buttonadjust[2]) gHookLenght[id] -= floatround(buttonadjust[2] * REELSPEED * DELTA_T) if (gHookLenght[id] < 100) gHookLenght[id] = 100 A[0] = gHookLocation[id][0] - user_origin[0] A[1] = gHookLocation[id][1] - user_origin[1] A[2] = gHookLocation[id][2] - user_origin[2] D[0] = A[0]*A[2] / get_distance(null,A) D[1] = A[1]*A[2] / get_distance(null,A) D[2] = -(A[1]*A[1] + A[0]*A[0]) / get_distance(null,A) acceleration = - global_gravity * D[2] / get_distance(null,D) velocity_towards_A = (velocity[0] * A[0] + velocity[1] * A[1] + velocity[2] * A[2]) / get_distance(null,A) desired_velocity_towards_A = (get_distance(user_origin,gHookLocation[id]) - gHookLenght[id] /*- 10*/) * 4 if (get_distance(null,D)>10) { velocity[0] += floatround((acceleration * DELTA_T * D[0]) / get_distance(null,D)) velocity[1] += floatround((acceleration * DELTA_T * D[1]) / get_distance(null,D)) velocity[2] += floatround((acceleration * DELTA_T * D[2]) / get_distance(null,D)) } velocity[0] += ((desired_velocity_towards_A - velocity_towards_A) * A[0]) / get_distance(null,A) velocity[1] += ((desired_velocity_towards_A - velocity_towards_A) * A[1]) / get_distance(null,A) velocity[2] += ((desired_velocity_towards_A - velocity_towards_A) * A[2]) / get_distance(null,A) kz_velocity_set(id, velocity) } public hooktask(parm[]) { new id = parm[0] new velocity[3] if ( !gIsHooked[id] ) return new user_origin[3],oldvelocity[3] parm[0] = id if (!is_user_alive(id)) { RopeRelease(id) return } if (gBeamIsCreated[id] + BEAMLIFE/10 <= get_gametime()) { beamentpoint(id) } get_user_origin(id, user_origin) kz_velocity_get(id, oldvelocity) new distance=get_distance( gHookLocation[id], user_origin ) if ( distance > 10 ) { velocity[0] = floatround( (gHookLocation[id][0] - user_origin[0]) * ( 2.0 * REELSPEED / distance ) ) velocity[1] = floatround( (gHookLocation[id][1] - user_origin[1]) * ( 2.0 * REELSPEED / distance ) ) velocity[2] = floatround( (gHookLocation[id][2] - user_origin[2]) * ( 2.0 * REELSPEED / distance ) ) } else { velocity[0]=0 velocity[1]=0 velocity[2]=0 } kz_velocity_set(id, velocity) } public hook_on(id) { if (get_cvar_num("sv_adminhook")==1) { if (gAllowedHook[id] || (get_user_team(id)==2 )) { if (!gIsHooked[id] && is_user_alive(id)) { new cmd[32] read_argv(0,cmd,31) if(equal(cmd,"+rope")) RopeAttach(id,0) if(equal(cmd,"+hook")) RopeAttach(id,1) } }else{ ColorChat(id, GREEN, "[JailBreak]^x01 Linka dostepna tylko dla CT") return 1 } }else{ ColorChat(id, GREEN, "[JailBreak]^x01 Linka jest aktualnie wylaczona") } return 1 } public hook_off(id) { if (gAllowedHook[id] || (get_user_flags(id)&ADMIN_LEVEL_E)) { if (gIsHooked[id]) { RopeRelease(id) } }else{ ColorChat(id, GREEN, "[JailBreak]^x01 Linka niedostepna. Kup juz teraz: ^x03/sklepsms") return 1 } return PLUGIN_HANDLED } public RopeAttach(id,hook) { new parm[1], user_origin[3] parm[0] = id gIsHooked[id] = true get_user_origin(id,user_origin) get_user_origin(id,gHookLocation[id], 3) gHookLenght[id] = get_distance(gHookLocation[id],user_origin) global_gravity = get_cvar_num("sv_gravity") set_user_gravity(id,0.001) beamentpoint(id) emit_sound(id, CHAN_STATIC, "weapons/xbow_hit2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) if (hook) set_task(DELTA_T, "hooktask", 200+id, parm, 1, "b") else set_task(DELTA_T, "ropetask", 200+id, parm, 1, "b") } public RopeRelease(id) { gIsHooked[id] = false killbeam(id) set_user_gravity(id) remove_task(200+id) } public beamentpoint(id) { message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) write_byte( TE_BEAMENTPOINT ) write_short( id ) write_coord( gHookLocation[id][0] ) write_coord( gHookLocation[id][1] ) write_coord( gHookLocation[id][2] ) write_short( beam ) // sprite index write_byte( 0 ) // start frame write_byte( 0 ) // framerate write_byte( BEAMLIFE ) // life write_byte( 10 ) // width write_byte( 0 ) // noise if (get_user_team(id)==1) // Terrorist { write_byte( 255 ) // r, g, b write_byte( 0 ) // r, g, b write_byte( 0 ) // r, g, b } else // Counter-Terrorist { write_byte( 0 ) // r, g, b write_byte( 0 ) // r, g, b write_byte( 255 ) // r, g, b } write_byte( 150 ) // brightness write_byte( 0 ) // speed message_end( ) gBeamIsCreated[id] = get_gametime() } public killbeam(id) { message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) write_byte( TE_KILLBEAM ) write_short( id ) message_end() } /************************************************************************************************************************/ /******************************************************* FORWARDS *******************************************************/ /************************************************************************************************************************/ public client_disconnect(id) { gAllowedHook[id]=0 } /************************************************************************************************************************/ /************************************************** AMXX -> AMX funcs ***************************************************/ /************************************************************************************************************************/ #if USING_AMX stock get_user_button(id) return entity_get_int(id, EV_INT_button) #endif