try this...
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <basebuilder>
#define PLUGIN "[BB] Block Rotation"
#define VERSION "1.0"
#define AUTHOR "Natsheh"
#define ROTATION_SOUND "sound/fvox/beep.wav"
#define ROTATION_DELAY 0.75
new Float:rotation_delay[33];
public plugin_precache() precache_generic(ROTATION_SOUND);
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
new const rotation_cmds[][] = { "radio1","radio2","radio3" };
for(new i; i < sizeof rotation_cmds; i++) register_clcmd(rotation_cmds[i], "clcmd_radio", _, "Rotate block!");
register_impulse(100, "hook_flashlight");
}
public hook_flashlight(id)
{
new block;
if(!(block = bb_get_user_block(id))) return ;
bb_drop_user_block(id)
engfunc(EngFunc_SetOrigin, block, Float:{0.0,0.0,0.0});
}
public clcmd_radio(id)
{
new block;
if(!(block = bb_get_user_block(id))) return 0;
new Float:gtime = get_gametime();
if( rotation_delay[id] > gtime ) return 1;
new sCmd[8], Float:fAngles[3], Float:fOrigin[3];
read_argv(0, sCmd, charsmax(sCmd))
pev(block, pev_angles, fAngles)
//pev(block, pev_origin, fOrigin);
//client_print(id, print_chat, "PRE (X) %.2f (Y) %.2f (Z) %.2f", fOrigin[0], fOrigin[1], fOrigin[2]);
switch( sCmd[5] )
{
case '1': { client_print(id, print_center, "Rotating the Block around the X Axis!"); fAngles[0] += 90.0; }
case '2': { client_print(id, print_center, "Rotating the Block around the Y Axis!"); fAngles[1] += 90.0; }
case '3': { client_print(id, print_center, "Rotating the Block around the Z Axis!"); fAngles[2] += 90.0; }
default: return 0;
}
SetEntityAngles(block, fAngles, id)
//pev(block, pev_origin, fOrigin);
//client_print(id, print_chat, "POST (X) %.2f (Y) %.2f (Z) %.2f", fOrigin[0], fOrigin[1], fOrigin[2]);
client_cmd(id, "spk ^"%s^"", ROTATION_SOUND)
rotation_delay[id] = gtime + ROTATION_DELAY;
return 1;
}
SetEntityAngles(ent, Float:angles[3], id) {
new Float:origin[3];
origin = GetEntityOrigin(ent);
for(new i; i < 3; i++)
{
if (angles[i] >= 180.0) {
angles[i] -= 360.0;
}
}
bb_drop_user_block(id)
set_pev(ent, pev_angles, angles);
set_pev(ent, pev_origin, Float:{0.0, 0.0, 0.0});
new Float:newOrigin[3];
newOrigin = GetEntityOrigin(ent);
origin[0] -= newOrigin[0];
origin[1] -= newOrigin[1];
origin[2] -= newOrigin[2];
engfunc(EngFunc_SetOrigin, ent, origin);
bb_set_user_block(id, ent);
}
Float:GetEntityOrigin(ent) {
new Float:origin[3];
pev(ent, pev_origin, origin);
new Float:center[3];
{
new Float:mins[3], Float:maxs[3];
pev(ent, pev_mins, mins);
pev(ent, pev_maxs, maxs);
center[0] = (mins[0] + maxs[0])/2;
center[1] = (mins[1] + maxs[1])/2;
center[2] = (mins[2] + maxs[2])/2;
}
new Float:rotatedCenter[3];
{
new Float:angles[3];
pev(ent, pev_angles, angles);
engfunc(EngFunc_MakeVectors, angles);
new Float:fwd[3], Float:left[3], Float:up[3];
global_get(glb_v_forward, fwd);
{
new Float:right[3];
global_get(glb_v_right, right);
left[0] = -right[0];
left[1] = -right[1];
left[2] = -right[2];
}
global_get(glb_v_up, up);
// rotatedCenter = fwd*center.x + left*center.y + up*center.z
rotatedCenter[0] = -fwd[0]*center[0] + left[0]*center[1] + -up[0]*center[2];
rotatedCenter[1] = -fwd[1]*center[0] + left[1]*center[1] + -up[1]*center[2];
rotatedCenter[2] = -fwd[2]*center[0] + left[2]*center[1] + -up[2]*center[2];
}
origin[0] += rotatedCenter[0];
origin[1] += rotatedCenter[1];
origin[2] += rotatedCenter[2];
return origin;
}