Witam.
Posiadam perk, który nas teleportuje.
/* Plugin generated by AMXX-Studio */
#include <amxmisc>
#include <codmod>
#include <engine>
#include <fakemeta>
#include <xs>
#define CS_PLAYER_HEIGHT 72.0
new const perk_name[] = "Magiczny Noz";
new const perk_desc[] = "Twoj noz pozwala ci teleportowac sie raz na 3 sekundy";
new bool:ma_perk[33];
new player_b_blink[33];
public plugin_init()
{
register_plugin(perk_name, "1.0", "I3ombel");
cod_register_perk(perk_name, perk_desc)
register_event("ResetHUD", "ResetHUD", "abe");
}
public cod_perk_enabled(id)
{
ma_perk[id] = true;
player_b_blink[id] = floatround(halflife_time())
}
public cod_perk_disabled(id)
{
ma_perk[id] = false;
}
public client_PreThink(id)
{
if(!is_user_alive(id))
{
return PLUGIN_CONTINUE;
}
if( get_user_button(id) & IN_ATTACK2 && !(get_user_oldbutton(id) & IN_ATTACK2) && ma_perk[id])
{
if (get_user_weapon(id) == CSW_KNIFE)
{
if (halflife_time()-player_b_blink[id] <= 6.0) return PLUGIN_HANDLED
player_b_blink[id] = floatround(halflife_time())
UTIL_Teleport(id,300+1800)
}
}
return PLUGIN_CONTINUE;
}
public UTIL_Teleport(id,distance)
{
Set_Origin_Forward(id,distance)
new origin[3]
get_user_origin(id,origin)
message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
write_byte(TE_PARTICLEBURST )
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_short(20)
write_byte(1)
write_byte(4)
message_end()
}
stock Set_Origin_Forward(id, distance)
{
new Float:origin[3]
new Float:angles[3]
new Float:teleport[3]
new Float:heightplus = 10.0
new Float:playerheight = 64.0
new bool:recalculate = false
new bool:foundheight = false
pev(id,pev_origin,origin)
pev(id,pev_angles,angles)
teleport[0] = origin[0] + distance * floatcos(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[1] = origin[1] + distance * floatsin(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[2] = origin[2]+heightplus
while (!Can_Trace_Line_Origin(origin,teleport) || Is_Point_Stuck(teleport,48.0))
{
if (distance < 10)
break;
for (new i=1; i < playerheight+20.0; i++)
{
teleport[2]+=i
if (Can_Trace_Line_Origin(origin,teleport) && !Is_Point_Stuck(teleport,48.0))
{
foundheight = true
heightplus += i
break
}
teleport[2]-=i
}
if (foundheight)
break
recalculate = true
distance-=10
teleport[0] = origin[0] + (distance+32) * floatcos(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[1] = origin[1] + (distance+32) * floatsin(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[2] = origin[2]+heightplus
}
if (!recalculate)
{
set_pev(id,pev_origin,teleport)
return PLUGIN_CONTINUE
}
teleport[0] = origin[0] + distance * floatcos(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[1] = origin[1] + distance * floatsin(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[2] = origin[2]+heightplus
set_pev(id,pev_origin,teleport)
return PLUGIN_CONTINUE
}
stock bool:Can_Trace_Line_Origin(Float:origin1[3], Float:origin2[3])
{
new Float:Origin_Return[3]
new Float:temp1[3]
new Float:temp2[3]
temp1[0] = origin1[0]
temp1[1] = origin1[1]
temp1[2] = origin1[2]-30
temp2[0] = origin2[0]
temp2[1] = origin2[1]
temp2[2] = origin2[2]-30
trace_line(-1, temp1, temp2, Origin_Return)
if (get_distance_f(Origin_Return,temp2) < 1.0)
return true
return false
}
stock bool:Is_Point_Stuck(Float:Origin[3], Float:hullsize)
{
new Float:temp[3]
new Float:iterator = hullsize/3
temp[2] = Origin[2]
for (new Float:i=Origin[0]-hullsize; i < Origin[0]+hullsize; i+=iterator)
{
for (new Float:j=Origin[1]-hullsize; j < Origin[1]+hullsize; j+=iterator)
{
for (new Float:k=Origin[2]-CS_PLAYER_HEIGHT; k < Origin[2]+CS_PLAYER_HEIGHT; k+=6)
{
temp[0] = i
temp[1] = j
temp[2] = k
if (point_contents(temp) != -1)
return true
}
}
}
return false
}
- 300m + (15 * Inteligencja)
- 3 sek
Użytkownik I3ombel edytował ten post 11.02.2016 20:14


Dodatki SourceMod












