Raised This Month: $51 Target: $400
 12% 

Ninja Rope for Counter-Strike Source


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
xaznikuhx
Junior Member
Join Date: Dec 2005
Old 12-09-2007 , 10:15   Ninja Rope for Counter-Strike Source
Reply With Quote #1

I was hoping someone could figure out a way to make a ninja rope mod for css.

ninja rope allows players to shoot up in the sky(or ground) and hold jump to climb and crouch to go down the rope. Ninja rope allows you to swing in whichever direction as you please.

Someone please recreate or convert this plugin, i've tried to give it a shot but i got lost, i didnt know what to do.


Code:
/* AMX Mod script.
*
*  Ninja Rope
*  by SpaceDude
*  email: [email protected]
*  MSN: [email protected]
*  ICQ: 1615758
*  IRC: Quakenet, nickname: "SpaceDude"
*
*  Description:
*
*  Formely known as Grappling Hook, i changed the name to Ninja Rope to avoid confusion
*  with the hook metamod plugin. Also the plugin now acts in exactly the same way as the
*  ninja rope from the game worms. Its based on real world physics, modelled as a point
*  mass on the end of a rod.
*
*  In order to use this plugin you will need the latest xtrafun module which can be found here:
*
*  http://amxmod.net/forums/viewtopic.php?t=10714
*
*  Server Side Cvars:
*
*    sv_ninjarope - enable/disable the plugin, default is 1
*
*  Client Side Commands:
*
*    +rope - bind a key to +rope like this: bind <key> +rope, once you have done that
*            look in the direction where you want to fire the hook and press the button.
*            You can shorten the rope by holding down the jump key, and make it longer
*            by holding the crouch key. Also you can move around with the regular move
*            keys (+forward, +back, +moveleft, +moveright) to release the rope just let
*            go of the button.
*
*    rope_toggle - has the same effect as +rope, except that you press it once to fire
*                  it and once again to release.
*
*  Revision History:
*
*   v1.1 - Changed name from Grappling Hook to Ninja Rope
*        - Added more control to the rope while swinging
*
*   v1.0 - Initial Release
*/

#include <amxmod>
#include <Xtrafun_to_Vexd>

#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 200			// units per second

new hooklocation[33][3]
new hooklength[33]
new bool:hooked[33]
new Float:beamcreated[33]

new global_gravity
new beam

public hooktask(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))
	{
		release(id)
		return
	}

	if (beamcreated[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)
	get_user_velocity(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])
	{
		hooklength[id] -= floatround(buttonadjust[2] * REELSPEED * DELTA_T)
	}
	if (hooklength[id] < 100)
	{
		(hooklength[id]) = 100
	}

	A[0] = hooklocation[id][0] - user_origin[0]
	A[1] = hooklocation[id][1] - user_origin[1]
	A[2] = hooklocation[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,hooklocation[id]) - hooklength[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)

	set_user_velocity(id, velocity)
}

public hook_on(id)
{
	if (get_cvar_num("sv_ninjarope") && !hooked[id] && is_user_alive(id))
	{
		attach(id)
	}
	return PLUGIN_HANDLED
}

public hook_off(id)
{
	if (get_cvar_num("sv_ninjarope") && hooked[id])
	{
		release(id)
	}
	return PLUGIN_HANDLED
}

public rope_toggle(id)
{
	if (get_cvar_num("sv_ninjarope") && !hooked[id] && is_user_alive(id))
	{
		attach(id)
	}
	else if (get_cvar_num("sv_ninjarope") && hooked[id])
	{
		release(id)
	}
	return PLUGIN_HANDLED
}

public attach(id)
{
	new parm[1], user_origin[3]
	parm[0] = id
	hooked[id] = true
	get_user_origin(id, user_origin)
	get_user_origin(id, hooklocation[id], 3)
	hooklength[id] = get_distance(hooklocation[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)
	set_task(DELTA_T, "hooktask", 200+id, parm, 1, "b")
}

public release(id)
{
	hooked[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( hooklocation[id][0] )
	write_coord( hooklocation[id][1] )
	write_coord( hooklocation[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( )
	beamcreated[id] = get_gametime()
}

public killbeam(id)
{
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
	write_byte( TE_KILLBEAM )
	write_short( id )
	message_end()
}

public new_round(id)
{
	if (hooked[id])
	{
		release(id)
	}
	return PLUGIN_CONTINUE
}

public plugin_precache()
{
	beam = precache_model("sprites/zbeam4.spr")
	precache_sound("weapons/xbow_hit2.wav")
	return PLUGIN_CONTINUE
}

public plugin_init()
{
	register_plugin("Ninja Rope", "1.0", "SpaceDude")
	register_cvar("sv_ninjarope","1")
	register_clcmd("rope_toggle", "rope_toggle")
	register_clcmd("+rope", "hook_on")
	register_clcmd("-rope", "hook_off")
	register_event("ResetHUD", "new_round", "b")
	return PLUGIN_CONTINUE
}
xaznikuhx is offline
TFN|Nick
Senior Member
Join Date: Sep 2007
Old 12-09-2007 , 17:26   Re: Ninja Rope for Counter-Strike Source
Reply With Quote #2

its not exactly the same but this plugin: http://forums.alliedmods.net/showthread.php?t=57807 seems to be similar.
TFN|Nick is offline
Send a message via MSN to TFN|Nick
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 10:43.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode