Advertisement
Guest User

Untitled

a guest
Jun 16th, 2010
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 45.11 KB | None | 0 0
  1. /*  Copyright © 2006, Space Headed Productions
  2.  
  3.     SHP Tools is free software; you can redistribute it and/or
  4.     modify it under the terms of the GNU General Public License
  5.     as published by the Free Software Foundation.
  6.  
  7.     This program is distributed in the hope that it will be useful,
  8.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.     GNU General Public License for more details.
  11.  
  12.     You should have received a copy of the GNU General Public License
  13.     along with SHP Tools; if not, write to the Free Software
  14.     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  15. */
  16.  
  17. #include <amxmodx>
  18. #include <amxmisc>
  19. #include <fakemeta>
  20. #include <hlsdk_const>
  21.  
  22. new const PLUGIN[] = "SHP Tools"
  23. new const VERSION[] = "1.0"
  24. new const AUTHOR[] = "Space Headed"
  25.  
  26. #define HOOK_NONE               0
  27. #define HOOK_SPAWN              (1<<0)
  28. #define HOOK_THINK              (1<<1)
  29. #define HOOK_USE                (1<<2)
  30. #define HOOK_TOUCH              (1<<3)
  31. #define HOOK_BLOCKED            (1<<4)
  32. #define HOOK_KEYVALUE           (1<<5)
  33. #define HOOK_SETABSBOX          (1<<6)
  34. #define HOOK_ALERT              (1<<7)
  35. #define HOOK_CREATENAMEDENTITY  (1<<8)
  36. #define HOOK_CREATEENTITY       (1<<9)
  37. #define HOOK_REMOVEENTITY       (1<<10)
  38. #define HOOK_SETMODEL           (1<<11)
  39. #define HOOK_SETKEYVALUE            (1<<12)
  40. #define HOOK_SETCLIENTKEYVALUE  (1<<13)
  41. #define HOOK_EMITSOUND          (1<<14)
  42. #define HOOK_EMITAMBIENTSOUND       (1<<15)
  43. #define HOOK_ALLOCSTRING            (1<<16)
  44. #define HOOK_SETVIEW            (1<<17)
  45.  
  46. new cvar_api
  47. new cvar_msg
  48. new cvar_log
  49.  
  50. new bool:hook_this_message
  51. new logfile[128]
  52. new Tracer[33]
  53. new Float:TracerTime[33]
  54. new beam_texture
  55.  
  56. public plugin_precache()
  57. {
  58.     cvar_api = register_cvar("hook_api", "", FCVAR_EXTDLL)
  59.     cvar_msg = register_cvar("hook_msg", "", FCVAR_EXTDLL)
  60.     cvar_log = register_cvar("logfile", "0", FCVAR_EXTDLL)
  61.     beam_texture = precache_model("sprites/lgtning.spr")
  62.  
  63.     new mapname[32]
  64.     get_mapname(mapname, 31)
  65.     UTIL_ServerConsole_Printf("-------- %s Loaded --------", PLUGIN)
  66.  
  67.     register_forward(FM_Spawn, "Spawn")
  68.     register_forward(FM_Think, "Think")
  69.     register_forward(FM_Use, "Use", 1)
  70.     register_forward(FM_Touch, "Touch")
  71.     register_forward(FM_Blocked, "Blocked")
  72.     register_forward(FM_KeyValue, "KeyValue")
  73.     register_forward(FM_SetAbsBox, "SetAbsBox")
  74.    
  75.     register_forward(FM_AlertMessage, "AlertMessage")
  76.     register_forward(FM_MessageBegin, "MessageBegin")
  77.     register_forward(FM_MessageEnd, "MessageEnd")
  78.     register_forward(FM_WriteByte, "WriteByte")
  79.     register_forward(FM_WriteChar, "WriteChar")
  80.     register_forward(FM_WriteShort, "WriteShort")
  81.     register_forward(FM_WriteLong, "WriteLong")
  82.     register_forward(FM_WriteAngle, "WriteAngle")
  83.     register_forward(FM_WriteCoord, "WriteCoord")
  84.     register_forward(FM_WriteString, "WriteString")
  85.     register_forward(FM_WriteEntity, "WriteEntity")
  86.  
  87.     register_forward(FM_CreateNamedEntity, "CreateNamedEntity", 1)
  88.     register_forward(FM_CreateEntity, "CreateEntity", 1)
  89.     register_forward(FM_RemoveEntity, "RemoveEntity")
  90.     register_forward(FM_SetModel, "SetModel")
  91.     register_forward(FM_SetKeyValue, "SetKeyValue")
  92.     register_forward(FM_SetClientKeyValue, "SetClientKeyValue")
  93.  
  94.     register_forward(FM_EmitSound, "EmitSound")
  95.     register_forward(FM_EmitAmbientSound, "EmitAmbientSound")
  96.  
  97.     register_forward(FM_SetView, "SetView")
  98.  
  99.     register_forward(FM_AllocString, "AllocString", 1)
  100.  
  101.     register_forward(FM_TraceLine, "TraceLine_Post", 1)
  102. }
  103.  
  104. public plugin_init()
  105. {
  106.     register_plugin(PLUGIN, VERSION, AUTHOR)
  107.     register_clcmd("drawent", "ClientCommand_DrawEnt", ADMIN_RCON, "- draws a box around an entity")
  108.     register_clcmd("traceent", "ClientCommand_EntTracer", ADMIN_RCON, "- traces what entity your viewing")
  109.     register_srvcmd("listapi", "ServerCommand_ListApi")
  110.     register_srvcmd("printapi", "ServerCommand_PrintApi")
  111.     register_srvcmd("listent", "ServerCommand_ListEnt")
  112.     register_srvcmd("printent", "ServerCommand_PrintEnt")
  113.     register_srvcmd("listmsg", "ServerCommand_ListMsg")
  114.     register_srvcmd("printmsg", "ServerCommand_PrintMsg")
  115.     register_srvcmd("printlog", "ServerCommand_PrintLog")
  116. }
  117.  
  118. public plugin_pause()
  119. {
  120.     UTIL_ServerConsole_Printf("-------- %s Paused --------", PLUGIN)
  121. }
  122.  
  123. public plugin_unpause()
  124. {
  125.     UTIL_ServerConsole_Printf("-------- %s Unpaused --------", PLUGIN)
  126. }
  127.  
  128. // Api Hooks
  129. public TraceLine_Post(Float:v1[3], Float:v2[3], noMonsters, pEnt)
  130. {
  131.     if(is_user_connected(pEnt))
  132.     {
  133.         static Float:g_time
  134.         global_get(glb_time, g_time)
  135.         if(Tracer[pEnt] && g_time > TracerTime[pEnt])
  136.         {
  137.             TracerTime[pEnt] = g_time + 1.0
  138.  
  139.             static entity
  140.             entity = get_tr(TR_pHit)
  141.             if(pev_valid(entity))
  142.             {
  143.                 static classname[32]
  144.                 pev(entity, pev_classname, classname, 31)
  145.                 client_print(pEnt, print_chat, "Entity Index: %i", entity)
  146.                 client_print(pEnt, print_chat, "Classname: %s", classname)
  147.                 client_print(pEnt, print_chat, " ")
  148.             }
  149.         }
  150.     }
  151. }
  152.  
  153. public Spawn(id)
  154. {
  155.     if(pev_valid(id))
  156.     {
  157.         if(UTIL_ReadCvar(cvar_api, HOOK_SPAWN))
  158.         {
  159.             static classname[32]
  160.             pev(id, pev_classname, classname, 31)
  161.  
  162.             static netname[32]
  163.             pev(id, pev_netname, netname, 31)
  164.             UTIL_ServerConsole_Printf("Entity %d (^"%s^") SPAWNS", id, (netname[0] != 0) ? netname : classname)
  165.         }
  166.     }
  167. }
  168.  
  169. public Think(id)
  170. {
  171.     if(pev_valid(id))
  172.     {
  173.         if(UTIL_ReadCvar(cvar_api, HOOK_THINK))
  174.         {
  175.             static classname[32]
  176.             pev(id, pev_classname, classname, 31)
  177.  
  178.             static netname[32]
  179.             pev(id, pev_netname, netname, 31)
  180.             UTIL_ServerConsole_Printf("Entity %d (^"%s^") THINKS", id, (netname[0] != 0) ? netname : classname)
  181.         }
  182.     }
  183. }
  184.  
  185. public Use(pUsed, pOther)
  186. {
  187.     if(pev_valid(pUsed) && pev_valid(pOther))
  188.     {
  189.         if(UTIL_ReadCvar(cvar_api, HOOK_USE))
  190.         {
  191.             static classname1[32], classname2[32]
  192.             pev(pUsed, pev_classname, classname1, 31)
  193.             pev(pOther, pev_classname, classname2, 31)
  194.  
  195.             static netname1[32], netname2[32]
  196.             pev(pUsed, pev_netname, netname1, 31)
  197.             pev(pOther, pev_netname, netname2, 31)
  198.             UTIL_ServerConsole_Printf("Entity %d (^"%s^") USES Entity %d (^"%s^")", pUsed, (netname1[0] != 0) ? netname1 : classname1, pOther, (netname2[0] != 0) ? netname2 : classname2)
  199.         }
  200.     }
  201. }
  202.  
  203. public Touch(pTouched, pOther)
  204. {
  205.     if(pev_valid(pTouched) && pev_valid(pOther))
  206.     {
  207.         if(UTIL_ReadCvar(cvar_api, HOOK_TOUCH))
  208.         {
  209.             static classname1[32], classname2[32]
  210.             pev(pTouched, pev_classname, classname1, 31)
  211.             pev(pOther, pev_classname, classname2, 31)
  212.  
  213.             static netname1[32], netname2[32]
  214.             pev(pTouched, pev_netname, netname1, 31)
  215.             pev(pOther, pev_netname, netname2, 31)
  216.             UTIL_ServerConsole_Printf("Entity %d (^"%s^") TOUCHES Entity %d (^"%s^")", pTouched, (netname1[0] != 0) ? netname1 : classname1, pOther, (netname2[0] != 0) ? netname2 : classname2)
  217.         }
  218.     }
  219. }
  220.  
  221. public Blocked(pBlocked, pOther)
  222. {
  223.     if(pev_valid(pBlocked) && pev_valid(pOther))
  224.     {
  225.         if(UTIL_ReadCvar(cvar_api, HOOK_BLOCKED))
  226.         {
  227.             static classname1[32], classname2[32]
  228.             pev(pBlocked, pev_classname, classname1, 31)
  229.             pev(pOther, pev_classname, classname2, 31)
  230.  
  231.             static netname1[32], netname2[32]
  232.             pev(pBlocked, pev_netname, netname1, 31)
  233.             pev(pOther, pev_netname, netname2, 31)
  234.             UTIL_ServerConsole_Printf("Entity %d (^"%s^") BLOCKS Entity %d (^"%s^")", pBlocked, (netname1[0] != 0) ? netname1 : classname1, pOther, (netname2[0] != 0) ? netname2 : classname2)
  235.         }
  236.     }
  237. }
  238.  
  239. public KeyValue(pKeyvalue, kvd_handle)
  240. {
  241.     if(pev_valid(pKeyvalue))
  242.     {
  243.         if(UTIL_ReadCvar(cvar_api, HOOK_KEYVALUE))
  244.         {
  245.             static classname[32]
  246.             pev(pKeyvalue, pev_classname, classname, 31)
  247.  
  248.             static netname[32]
  249.             pev(pKeyvalue, pev_netname, netname, 31)
  250.  
  251.             static szClassName[32], szKeyName[32], szValue[32]
  252.             get_kvd(kvd_handle, KV_ClassName, szClassName, 31)
  253.             get_kvd(kvd_handle, KV_KeyName, szKeyName, 31)
  254.             get_kvd(kvd_handle, KV_Value, szValue, 31)
  255.        
  256.             UTIL_ServerConsole_Printf("Entity %d (^"%s^") SETS KEY ^"%s^" TO VALUE ^"%s^" FOR Classname ^"%s^"", pKeyvalue, (netname[0] != 0) ? netname : classname, szKeyName, szValue, szClassName)
  257.         }
  258.     }
  259. }
  260.  
  261. public SetAbsBox(id)
  262. {
  263.     if(pev_valid(id))
  264.     {
  265.         if(UTIL_ReadCvar(cvar_api, HOOK_SETABSBOX))
  266.         {
  267.             static classname[32]
  268.             pev(id, pev_classname, classname, 31)
  269.  
  270.             static netname[32]
  271.             pev(id, pev_netname, netname, 31)
  272.             UTIL_ServerConsole_Printf("Entity %d (^"%s^") SETS OBJECT COLLISION BOX", id, (netname[0] != 0) ? netname : classname)
  273.         }
  274.     }
  275. }
  276.  
  277. // Engine Hooks
  278. public AlertMessage(atype, const fmt[])
  279. {
  280.     if(UTIL_ReadCvar(cvar_api, HOOK_ALERT))
  281.     {
  282.         static buffer[1024]
  283.         formatex(buffer, 1023, fmt)
  284.         buffer[strlen(buffer)-1] = 0
  285.         UTIL_ServerConsole_Printf("ALERT MESSAGE (%s): %s", UTIL_atype(atype), buffer)
  286.     }
  287. }
  288.  
  289. public CreateNamedEntity( iClassname )
  290. {
  291.     if(UTIL_ReadCvar(cvar_api, HOOK_CREATENAMEDENTITY))
  292.     {
  293.         UTIL_ServerConsole_Printf("CreateNamedEntity %d (%s)", get_orig_retval(), UTIL_getclassname(iClassname))
  294.     }
  295. }
  296.  
  297. public EmitAmbientSound(iEnt, Float:flPos[3], const szSample[], Float:flVolume, Float:flAttn, iFlags, iPitch)
  298. {
  299.     if(UTIL_ReadCvar(cvar_api, HOOK_EMITAMBIENTSOUND))
  300.     {
  301.         new szClassName[32]
  302.         if( iEnt )
  303.         {
  304.             pev(iEnt, pev_classname, szClassName, charsmax(szClassName))
  305.         }
  306.         UTIL_ServerConsole_Printf("EmitAmbientSound, %d (%s), {%.2f,%.2f,%.2f}, %s, %.2f, %.2f, %d, %d",
  307.             iEnt, szClassName, flPos[0], flPos[1], flPos[2], szSample, flVolume, flAttn, iFlags, iPitch)
  308.     }
  309. }
  310.  
  311. public EmitSound(iEnt, iChannel, const szSample[], Float:flVolume, Float:flAttn, iFlags, iPitch)
  312. {
  313.     if(UTIL_ReadCvar(cvar_api, HOOK_EMITSOUND))
  314.     {
  315.         new szClassName[32]
  316.         pev(iEnt, pev_classname, szClassName, charsmax(szClassName))
  317.  
  318.         UTIL_ServerConsole_Printf("EmitSound, %d (%s), %d, %s, %.2f, %.2f, %d, %d",
  319.             iEnt, szClassName, iChannel, szSample, flVolume, flAttn, iFlags, iPitch)
  320.     }
  321. }
  322.  
  323. //  EngFunc_SetView,                    // void )           (const edict_t *pClient, const edict_t *pViewent);
  324.  
  325. public SetView(id, iViewEnt)
  326. {
  327.     if(UTIL_ReadCvar(cvar_api, HOOK_SETVIEW))
  328.     {
  329.         UTIL_ServerConsole_Printf("SetView, %d, %d", id, iViewEnt)
  330.     }
  331. }
  332.  
  333. public CreateEntity( )
  334. {
  335.     if(UTIL_ReadCvar(cvar_api, HOOK_CREATEENTITY))
  336.     {
  337.         UTIL_ServerConsole_Printf("CreateEntity %d", get_orig_retval())
  338.     }
  339. }
  340.  
  341. public RemoveEntity( iEnt )
  342. {
  343.     if(UTIL_ReadCvar(cvar_api, HOOK_REMOVEENTITY))
  344.     {
  345.         static szClassname[32]
  346.         pev(iEnt, pev_classname, szClassname, charsmax(szClassname))
  347.         UTIL_ServerConsole_Printf("RemoveEntity %d (%s)", iEnt, szClassname)
  348.     }
  349. }
  350.  
  351. public SetModel( iEnt, const szModel[] )
  352. {
  353.     if(UTIL_ReadCvar(cvar_api, HOOK_SETMODEL))
  354.     {
  355.         static szClassname[32]
  356.         pev(iEnt, pev_classname, szClassname, charsmax(szClassname))
  357.         UTIL_ServerConsole_Printf("SetModel ^"%s^" on entity %d (%s)", szModel, iEnt, szClassname)
  358.     }
  359. }
  360.  
  361. public SetKeyValue(const szInfoBuffer[], const szKey[], const szValue[])
  362. {
  363.     if(UTIL_ReadCvar(cvar_api, HOOK_SETKEYVALUE))
  364.     {
  365.         UTIL_ServerConsole_Printf("SetKeyValue ^"%s^" ^"%s^" ^"%s^"", szInfoBuffer, szKey, szValue)
  366.     }
  367. }
  368.  
  369. public SetClientKeyValue(const id, const szInfoBuffer[], const szKey[], const szValue[])
  370. {
  371.     if(UTIL_ReadCvar(cvar_api, HOOK_SETCLIENTKEYVALUE))
  372.     {
  373.         UTIL_ServerConsole_Printf("SetClientKeyValue PlayerID:%d ^"%s^" ^"%s^" ^"%s^"", id, szKey, szValue, szInfoBuffer)
  374.     }
  375. }
  376.  
  377. public MessageBegin(msg_dest, msg_type, Float:pOrigin[3], ed)
  378. {
  379.     static cmessage[128]
  380.     get_pcvar_string(cvar_msg, cmessage, 127)
  381.  
  382.     if(cmessage[0] != 0)
  383.     {
  384.         static msg1[16], msg2[16], msg3[16], msg4[16], msg5[16]
  385.         parse(cmessage, msg1, 15, msg2, 15, msg3, 15, msg4, 15, msg5, 15)
  386.  
  387.         static bmessage[16]
  388.         get_user_msgname(msg_type, bmessage, 15)
  389.  
  390.         if(equali(msg1, "All") || equali(msg1, bmessage) || equali(msg2, bmessage) || equali(msg3, bmessage) || equali(msg4, bmessage) || equali(msg5, bmessage))
  391.         {
  392.             static msgdest[32]
  393.             if(msg_dest == MSG_BROADCAST) msgdest = "MSG_BROADCAST"
  394.             else if(msg_dest == MSG_ONE) msgdest = "MSG_ONE"
  395.             else if(msg_dest == MSG_ALL) msgdest = "MSG_ALL"
  396.             else if(msg_dest == MSG_INIT) msgdest = "MSG_INIT"
  397.             else if(msg_dest == MSG_PVS) msgdest = "MSG_PVS"
  398.             else if(msg_dest == MSG_PAS) msgdest = "MSG_PAS"
  399.             else if(msg_dest == MSG_PVS_R) msgdest = "MSG_PVS_R"
  400.             else if(msg_dest == MSG_PAS_R) msgdest = "MSG_PAS_R"
  401.             else if(msg_dest == MSG_ONE_UNRELIABLE) msgdest = "MSG_ONE_UNRELIABLE"
  402.             else if(msg_dest == MSG_SPEC) msgdest = "MSG_SPEC"
  403.             else msgdest = "UNKNOWN"
  404.            
  405.             UTIL_ServerConsole_Printf("message_begin(%s, get_user_msgid(^"%s^"), {%i,%i,%i}, %i)", msgdest, bmessage, floatround(pOrigin[0]), floatround(pOrigin[1]), floatround(pOrigin[2]), ed)
  406.             hook_this_message = true
  407.         }
  408.     }
  409. }
  410.  
  411. public MessageEnd()
  412. {
  413.     if(hook_this_message) UTIL_ServerConsole_Printf("message_end()")
  414.     hook_this_message = false
  415. }
  416.  
  417. public WriteByte(iValue)
  418. {
  419.     if(hook_this_message) UTIL_ServerConsole_Printf("write_byte(%d)", iValue)
  420. }
  421.  
  422. public WriteChar(iValue)
  423. {
  424.     if(hook_this_message) UTIL_ServerConsole_Printf("write_char(%d)", iValue)
  425. }
  426.  
  427. public WriteShort(iValue)
  428. {
  429.     if(hook_this_message) UTIL_ServerConsole_Printf("write_short(%d)", iValue)
  430. }
  431.  
  432. public WriteLong(iValue)
  433. {
  434.     if(hook_this_message) UTIL_ServerConsole_Printf("write_long(%d)", iValue)
  435. }
  436.  
  437. public WriteAngle(Float:flValue)
  438. {
  439.     if(hook_this_message) UTIL_ServerConsole_Printf("write_angle(%.2f)", flValue)
  440. }
  441.  
  442. public WriteCoord(Float:flValue)
  443. {
  444.     if(hook_this_message) UTIL_ServerConsole_Printf("write_coord(%.2f)", flValue)
  445. }
  446.  
  447. public WriteString(szValue[])
  448. {
  449.     if(hook_this_message) UTIL_ServerConsole_Printf("write_string(^"%s^")", szValue)
  450. }
  451.  
  452. public WriteEntity(iValue)
  453. {
  454.     if(hook_this_message) UTIL_ServerConsole_Printf("write_entity(%d)", iValue)
  455. }
  456.  
  457. public AllocString(const szString[])
  458. {
  459.     if(UTIL_ReadCvar(cvar_api, HOOK_ALLOCSTRING))
  460.     {
  461.         UTIL_ServerConsole_Printf("AllocString ^"%s^" -> %d", szString, get_orig_retval())
  462.     }
  463. }
  464.  
  465.  
  466. // Commands
  467. public ClientCommand_EntTracer(id, level, cid)
  468. {
  469.     if(!cmd_access(id, level, cid, 2)) return PLUGIN_CONTINUE
  470.    
  471.     new temp[8]
  472.     read_argv(1, temp, 7)
  473.     new cmd = str_to_num(temp)
  474.    
  475.     if(cmd == 1 && Tracer[id] == 0)
  476.     {
  477.         Tracer[id] = 1
  478.         client_print(id, print_chat, "Entity Tracer Enabled: Go look at something")
  479.     }
  480.     else if(cmd == 0 && Tracer[id] == 1)
  481.     {
  482.         Tracer[id] = 0
  483.         client_print(id, print_chat, "Entity Tracer Disabled")
  484.     }
  485.     return PLUGIN_HANDLED
  486. }
  487.  
  488. public ClientCommand_DrawEnt(id, level, cid)
  489. {
  490.     if(!cmd_access(id, level, cid, 2)) return PLUGIN_CONTINUE
  491.    
  492.     new temp[8]
  493.     read_argv(1, temp, 7)
  494.     new ent = str_to_num(temp)
  495.  
  496.     if(pev_valid(ent))
  497.     {
  498.         new Float:absmin[3], Float:absmax[3], Float:size[3]
  499.         pev(ent, pev_absmin, absmin)
  500.         pev(ent, pev_absmax, absmax)
  501.         size[0] = absmax[0] - absmin[0]
  502.         size[1] = absmax[1] - absmin[1]
  503.         size[2] = absmax[2] - absmin[2]
  504.    
  505.         UTIL_DrawBeam(id, absmin[0], absmin[1], absmin[2], absmin[0] + size[0], absmin[1], absmin[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  506.         UTIL_DrawBeam(id, absmin[0], absmin[1], absmin[2], absmin[0], absmin[1] + size[1], absmin[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  507.         UTIL_DrawBeam(id, absmin[0], absmin[1], absmin[2], absmin[0], absmin[1], absmin[2] + size[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  508.         UTIL_DrawBeam(id, absmin[0] + size[0], absmin[1] + size[1], absmin[2] + size[2], absmin[0], absmin[1] + size[1], absmin[2] + size[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  509.         UTIL_DrawBeam(id, absmin[0] + size[0], absmin[1] + size[1], absmin[2] + size[2], absmin[0] + size[0], absmin[1], absmin[2] + size[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  510.         UTIL_DrawBeam(id, absmin[0] + size[0], absmin[1] + size[1], absmin[2] + size[2], absmin[0] + size[0], absmin[1] + size[1], absmin[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  511.         UTIL_DrawBeam(id, absmin[0] + size[0], absmin[1], absmin[2], absmin[0] + size[0], absmin[1] + size[1], absmin[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  512.         UTIL_DrawBeam(id, absmin[0] + size[0], absmin[1], absmin[2], absmin[0] + size[0], absmin[1], absmin[2] + size[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  513.         UTIL_DrawBeam(id, absmin[0], absmin[1] + size[1], absmin[2], absmin[0] + size[0], absmin[1] + size[1], absmin[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  514.         UTIL_DrawBeam(id, absmin[0], absmin[1] + size[1], absmin[2], absmin[0], absmin[1] + size[1], absmin[2] + size[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  515.         UTIL_DrawBeam(id, absmin[0], absmin[1], absmin[2] + size[2], absmin[0] + size[0], absmin[1], absmin[2] + size[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  516.         UTIL_DrawBeam(id, absmin[0], absmin[1], absmin[2] + size[2], absmin[0], absmin[1] + size[1], absmin[2] + size[2], 2000, 10, 0, 0, 255, 0, 255, 0)
  517.     }
  518.     return PLUGIN_HANDLED
  519. }
  520.  
  521. public ServerCommand_ListApi()
  522. {
  523.     server_print("Available APIs...")
  524.     server_print("none (Flag: ^"^")")
  525.     server_print("pfnSpawn (Flag: ^"a^")")
  526.     server_print("pfnThink (Flag: ^"b^")")
  527.     server_print("pfnUse (Flag: ^"c^")")
  528.     server_print("pfnTouch (Flag: ^"d^")")
  529.     server_print("pfnBlocked (Flag: ^"e^")")
  530.     server_print("pfnKeyValue (Flag: ^"f^")")
  531.     server_print("pfnSetAbsBox (Flag: ^"g^")")
  532.     server_print("pfnAlertMessage (Flag: ^"h^")")
  533.     server_print("pfnCreateNamedEntity (Flag: ^"i^")")
  534.     server_print("pfnCreateEntity (Flag: ^"j^")")
  535.     server_print("pfnRemoveEntity (Flag: ^"k^")")
  536.     server_print("pfnSetModel (Flag: ^"l^")")
  537.     server_print("pfnSetKeyValue (Flag: ^"m^")")
  538.     server_print("pfnSetClientKeyValue (Flag: ^"n^")")
  539.     server_print("pfnEmitSound (Flag: ^"o^")")
  540.     server_print("pfnEmitAmbientSound (Flag: ^"p^")")
  541.     server_print("pfnAllocString (Flag: ^"q^")")
  542.     server_print("pfnSetView (Flag: ^"r^")")
  543.     server_print("^nUsage: hook_api ^"afh^"")
  544. }
  545.  
  546. public ServerCommand_PrintApi()
  547. {
  548.     new flags[31]
  549.     get_pcvar_string(cvar_api, flags, 31)
  550.  
  551.     new hooks[128], len
  552.     if(read_flags(flags) == HOOK_NONE) len += formatex(hooks[len], 128-len, "HOOK_NONE | ")
  553.     if(read_flags(flags) & HOOK_SPAWN) len += formatex(hooks[len], 128-len, "HOOK_SPAWN | ")
  554.     if(read_flags(flags) & HOOK_THINK) len += formatex(hooks[len], 128-len, "HOOK_THINK | ")
  555.     if(read_flags(flags) & HOOK_USE) len += formatex(hooks[len], 128-len, "HOOK_USE | ")
  556.     if(read_flags(flags) & HOOK_TOUCH) len += formatex(hooks[len], 128-len, "HOOK_TOUCH | ")
  557.     if(read_flags(flags) & HOOK_BLOCKED) len += formatex(hooks[len], 128-len, "HOOK_BLOCKED | ")
  558.     if(read_flags(flags) & HOOK_KEYVALUE) len += formatex(hooks[len], 128-len, "HOOK_KEYVALUE | ")
  559.     if(read_flags(flags) & HOOK_SETABSBOX) len += formatex(hooks[len], 128-len, "HOOK_SETABSBOX | ")
  560.     if(read_flags(flags) & HOOK_ALERT) len += formatex(hooks[len], 128-len, "HOOK_ALERT | ")
  561.     hooks[strlen(hooks)-3] = 0
  562.     server_print("Currently Hooking: ^"%s^" (%s)", flags, hooks)
  563. }
  564.  
  565. public ServerCommand_ListEnt()
  566. {
  567.     UTIL_ServerConsole_Printf("Printing out ALL entities in game...")
  568.     UTIL_ServerConsole_Printf("index CLASSNAME [^"netname^"] (model): absmin (x, y, z); size (x, y, z);")
  569.    
  570.     new maxentities = global_get(glb_maxEntities)
  571.     new bool:is_player, classname[32], index
  572.     for(index = 0; index < maxentities; ++index)
  573.     {
  574.         if(!pev_valid(index)) continue
  575.         is_player = false
  576.         pev(index, pev_classname, classname, 31)
  577.        
  578.         new netname[32], model[64], Float:absmin[3], Float:size[3]
  579.         pev(index, pev_netname, netname, 31)
  580.         pev(index, pev_model, model, 63)
  581.         pev(index, pev_absmin, absmin)
  582.         pev(index, pev_size, size)
  583.         if(equal(classname, "player")) is_player = true
  584.  
  585.         if(is_player) server_print("%d %s ^"%s^" (%s): min (%.0f, %.0f, %.0f); siz (%.0f, %.0f, %.0f);", index, classname, netname, model, absmin[0], absmin[1], absmin[2], size[0], size[1], size[2])
  586.         else server_print("%d %s (%s): min (%.0f, %.0f, %.0f); siz (%.0f, %.0f, %.0f);", index, classname, model, absmin[0], absmin[1], absmin[2], size[0], size[1], size[2])
  587.     }
  588.     server_print("End of list - %d entities found.", maxentities)
  589. }
  590.  
  591. public ServerCommand_PrintEnt()
  592. {
  593.     new arg0[128], arg1[128]
  594.     read_argv(0, arg0, 127)
  595.     read_argv(1, arg1, 127)
  596.     if(arg1[0] == 0)
  597.     {
  598.         server_print("Usage: ^"%s INDEX_OF_ENTITY^"", arg0)
  599.         return
  600.     }
  601.     new index = str_to_num(arg1)
  602.     if(index != 0 && !pev_valid(index))
  603.     {
  604.         server_print("%s: entity #%d is unregistered", arg0, index)
  605.         return 
  606.     }
  607.     new temp[128], temp2[128], temp3, Float:fValue, Float:vValue[3], Float:vValue2[3]
  608.     server_print("Printing out entity #%d variable information...", index)
  609.     server_print("(variable name = value (meaning))")
  610.     pev(index, pev_classname, temp3, temp, 127)
  611.     server_print("pev_classname = %d (^"%s^")", temp3, temp)
  612.     pev(index, pev_globalname,  temp3, temp, 127)
  613.     server_print("pev_globalname = %d (^"%s^")", temp3, temp)
  614.     pev(index, pev_origin, vValue)
  615.     server_print("pev_origin = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  616.     pev(index, pev_oldorigin, vValue)
  617.     server_print("pev_oldorigin = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  618.     pev(index, pev_velocity , vValue)
  619.     vValue2 = vValue; vValue2[2] = 0.0
  620.     server_print("pev_velocity = Vector (%.1f, %.1f, %.1f) - Length %.3f - Length2D %.3f", vValue[0], vValue[1], vValue[2], vector_length(vValue), vector_length(vValue2))
  621.     pev(index, pev_basevelocity, vValue)
  622.     vValue2 = vValue; vValue2[2] = 0.0
  623.     server_print("pev_basevelocity = Vector (%.1f, %.1f, %.1f) - Length %.3f - Length2D %.3f", vValue[0], vValue[1], vValue[2], vector_length(vValue), vector_length(vValue2))
  624.     pev(index, pev_clbasevelocity, vValue)
  625.     vValue2 = vValue; vValue2[2] = 0.0
  626.     server_print("pev_clbasevelocity = Vector (%.1f, %.1f, %.1f) - Length %.3f - Length2D %.3f", vValue[0], vValue[1], vValue[2], vector_length(vValue), vector_length(vValue2))
  627.     pev(index, pev_movedir, vValue)
  628.     server_print("pev_movedir = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  629.     pev(index, pev_angles, vValue)
  630.     server_print("pev_angles = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  631.     pev(index, pev_avelocity, vValue)
  632.     vValue2 = vValue; vValue2[2] = 0.0
  633.     server_print("pev_avelocity = Vector (%.1f, %.1f, %.1f) - Length %.3f - Length2D %.3f", vValue[0], vValue[1], vValue[2], vector_length(vValue), vector_length(vValue2))
  634.     pev(index, pev_punchangle, vValue)
  635.     server_print("pev_punchangle = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  636.     pev(index, pev_v_angle, vValue)
  637.     server_print("pev_v_angle = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  638.     pev(index, pev_endpos, vValue)
  639.     server_print("pev_endpos = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  640.     pev(index, pev_startpos, vValue)
  641.     server_print("pev_startpos = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  642.     pev(index, pev_impacttime, fValue)
  643.     server_print("pev_impacttime = %.3f", fValue)
  644.     pev(index, pev_starttime, fValue)
  645.     server_print("pev_starttime = %.3f", fValue)
  646.     server_print("pev_fixangle = %d (%s)", pev(index, pev_fixangle), UTIL_fixangle(pev(index, pev_fixangle)))
  647.     pev(index, pev_idealpitch, fValue)
  648.     server_print("pev_idealpitch = %.3f", fValue)
  649.     pev(index, pev_pitch_speed, fValue)
  650.     server_print("pev_pitch_speed = %.3f", fValue)
  651.     pev(index, pev_ideal_yaw, fValue)
  652.     server_print("pev_ideal_yaw = %.3f", fValue)
  653.     pev(index, pev_yaw_speed, fValue)
  654.     server_print("pev_yaw_speed = %.3f", fValue)
  655.     server_print("pev_modelindex = %d", pev(index, pev_modelindex))
  656.     pev(index, pev_model, temp3, temp, 127)
  657.     server_print("pev_model = %d (^"%s^")", temp3, temp)
  658.     temp3 = pev(index, pev_viewmodel)
  659.     global_get(glb_pStringBase, temp3, temp, 127)
  660.     server_print("pev_viewmodel = %d (^"%s^")", temp3, temp)
  661.     temp3 = pev(index, pev_weaponmodel)
  662.     global_get(glb_pStringBase, temp3, temp, 127)
  663.     server_print("pev_weaponmodel = %d (^"%s^")", temp3, temp)
  664.     pev(index, pev_absmin, vValue)
  665.     server_print("pev_absmin = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  666.     pev(index, pev_absmax, vValue)
  667.     server_print("pev_absmax = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  668.     pev(index, pev_mins, vValue)
  669.     server_print("pev_mins = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  670.     pev(index, pev_maxs, vValue)
  671.     server_print("pev_maxs = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  672.     pev(index, pev_size, vValue)
  673.     server_print("pev_size = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  674.     pev(index, pev_ltime, fValue)
  675.     server_print("pev_ltime = %.3f (current time is %.3f)", fValue, get_gametime())
  676.     pev(index, pev_nextthink, fValue)
  677.     server_print("pev_nextthink = %.3f (current time is %.3f)", fValue, get_gametime())
  678.     server_print("pev_movetype = %d (%s)", pev(index, pev_movetype), UTIL_movetype(pev(index, pev_movetype)))
  679.     server_print("pev_solid = %d (%s)", pev(index, pev_solid), UTIL_solid(pev(index, pev_solid)))
  680.     temp3 = pev(index, pev_skin)
  681.     global_get(glb_pStringBase, temp3, temp, 127)
  682.     server_print("pev_skin = %d (^"%s^")", pev(index, pev_skin), temp)
  683.     temp3 = pev(index, pev_body)
  684.     global_get(glb_pStringBase, temp3, temp, 127)
  685.     server_print("pev_body = %d (^"%s^")", pev(index, pev_body), temp)
  686.     server_print("pev_effects = %d (%s)", pev(index, pev_effects), UTIL_effects(pev(index, pev_effects)))
  687.     pev(index, pev_gravity, fValue)
  688.     server_print("pev_gravity = %.3f (fraction /1 of normal)", fValue)
  689.     pev(index, pev_friction, fValue)
  690.     server_print("pev_friction = %.3f", fValue)
  691.     server_print("pev_light_level = %d", pev(index, pev_light_level))
  692.     temp3 = pev(index, pev_sequence)
  693.     global_get(glb_pStringBase, temp3, temp, 127)
  694.     server_print("pev_sequence = %d (^"%s^")", temp3, temp)
  695.     temp3 = pev(index, pev_gaitsequence, temp, 127)
  696.     global_get(glb_pStringBase, temp3, temp, 127)
  697.     server_print("pev_gaitsequence = %d (^"%s^")", temp3, temp)
  698.     pev(index, pev_frame, fValue)
  699.     server_print("pev_frame = %.3f (position /255 of total in sequence)", fValue)
  700.     pev(index, pev_animtime, fValue)
  701.     server_print("pev_animtime = %.3f (current time is %.3f)", fValue, get_gametime())
  702.     pev(index, pev_framerate, fValue)
  703.     server_print("pev_framerate = %.3f (times normal speed)", fValue)
  704.     server_print("pev_controller = {%d, %d, %d, %d}", pev(index, pev_controller_0), pev(index, pev_controller_1), pev(index, pev_controller_2), pev(index, pev_controller_3))
  705.     server_print("pev_blending = {%d, %d}", pev(index, pev_blending_0), pev(index, pev_blending_1))
  706.     pev(index, pev_scale, fValue)
  707.     server_print("pev_scale = %.3f", fValue)
  708.     server_print("pev_rendermode = %d (%s)", pev(index, pev_rendermode), UTIL_rendermode(pev(index, pev_rendermode)))
  709.     pev(index, pev_renderamt, fValue)
  710.     server_print("pev_renderamt = %.3f", fValue)
  711.     pev(index, pev_rendercolor, vValue)
  712.     server_print("pev_rendercolor = Vector (%.1f, %.1f, %.1f) (RGB)", vValue[0], vValue[1], vValue[2])
  713.     server_print("pev_renderfx = %d (%s)", pev(index, pev_renderfx), UTIL_renderfx(pev(index, pev_renderfx)))
  714.     pev(index, pev_health, fValue)
  715.     server_print("pev_health = %.3f", fValue)
  716.     pev(index, pev_frags, fValue)
  717.     server_print("pev_frags = %.3f", fValue)
  718.     temp = "00000000000000000000000000000000"
  719.     temp3 = pev(index, pev_weapons)
  720.     for(new i = 1; i <= 32; i++) if(temp3 & (1<<i)) temp[i-1] = '1'
  721.     server_print("pev_weapons = %u (%s)", temp3, temp)
  722.     pev(index, pev_takedamage, fValue)
  723.     server_print("pev_takedamage = %.1f (%s)", fValue, UTIL_takedamage(floatround(fValue)))
  724.     server_print("pev_deadflag = %d (%s)", pev(index, pev_deadflag), UTIL_deadflag(pev(index, pev_deadflag)))
  725.     pev(index, pev_view_ofs, vValue)
  726.     server_print("pev_view_ofs = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  727.     server_print("pev_button = %d (%s)", pev(index, pev_button), UTIL_buttons(pev(index, pev_button)))
  728.     server_print("pev_impulse = %d", pev(index, pev_impulse))
  729.     if(pev_valid(pev(index, pev_chain)))
  730.     {
  731.         pev(pev(index, pev_chain), pev_classname, temp2, 127)
  732.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_chain), temp2)
  733.     }
  734.     else temp = "NULL"
  735.     server_print("pev_chain = %s", temp)
  736.     if(pev_valid(pev(index, pev_dmg_inflictor)))
  737.     {
  738.         pev(pev(index, pev_dmg_inflictor), pev_classname, temp2, 127)
  739.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_dmg_inflictor), temp2)
  740.     }
  741.     else temp = "NULL"
  742.     server_print("pev_dmg_inflictor = %s", temp)
  743.     if(pev_valid(pev(index, pev_enemy)))
  744.     {
  745.         pev(pev(index, pev_enemy), pev_classname, temp2, 127)
  746.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_enemy), temp2)
  747.     }
  748.     else temp = "NULL"
  749.     server_print("pev_enemy = %s", temp)
  750.     if(pev_valid(pev(index, pev_aiment)))
  751.     {
  752.         pev(pev(index, pev_aiment), pev_classname, temp2, 127)
  753.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_aiment), temp2)
  754.     }
  755.     else temp = "NULL"
  756.     server_print("pev_aiment = %s", temp)
  757.     if(pev_valid(pev(index, pev_owner)))
  758.     {
  759.         pev(pev(index, pev_owner), pev_classname, temp2, 127)
  760.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_owner), temp2)
  761.     }
  762.     else temp = "NULL"
  763.     server_print("pev_owner = %s", temp)
  764.     if(pev_valid(pev(index, pev_owner)))
  765.     {
  766.         pev(pev(index, pev_groundentity), pev_classname, temp2, 127)
  767.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_groundentity), temp2)
  768.     }
  769.     else temp = "NULL"
  770.     server_print("pev_groundentity = %s", temp)
  771.     temp = "00000000000000000000000000000000"
  772.     temp3 = pev(index, pev_spawnflags)
  773.     for(new i = 0; i < 32; i++) if(temp3 & (1<<i)) temp[i] = '1'
  774.     server_print("pev_spawnflags = %u (%s)", temp3, temp)
  775.     server_print("pev_flags = %d (%s)", pev(index, pev_flags), UTIL_flags(pev(index, pev_flags)))
  776.     server_print("pev_colormap = %d (0x%d)", pev(index, pev_colormap), pev(index, pev_colormap))
  777.     server_print("pev_team = %d", pev(index, pev_team))
  778.     pev(index, pev_max_health, fValue)
  779.     server_print("pev_max_health = %.3f", fValue)
  780.     pev(index, pev_teleport_time, fValue)
  781.     server_print("pev_teleport_time = %.3f", fValue)
  782.     pev(index, pev_armortype, fValue)
  783.     server_print("pev_armortype = %.3f", fValue)
  784.     pev(index, pev_armorvalue, fValue)
  785.     server_print("pev_armorvalue = %.3f", fValue)
  786.     server_print("pev_waterlevel = %d (%s)", pev(index, pev_waterlevel), UTIL_waterlevel(pev(index, pev_waterlevel)))
  787.     server_print("pev_watertype = %d", pev(index, pev_watertype))
  788.     pev(index, pev_target, temp3, temp, 127)
  789.     server_print("pev_target = %d (^"%s^")", temp3, temp)
  790.     pev(index, pev_targetname, temp3, temp, 127)
  791.     server_print("pev_targetname = %d (^"%s^")", temp3, temp)
  792.     pev(index, pev_netname, temp3, temp, 127)
  793.     server_print("pev_netname = %d (^"%s^")", temp3, temp)
  794.     pev(index, pev_message, temp3, temp, 127)
  795.     server_print("pev_message = %d (^"%s^")", temp3, temp)
  796.     pev(index, pev_dmg_take, fValue)
  797.     server_print("pev_dmg_take = %.3f", fValue)
  798.     pev(index, pev_dmg_save, fValue)
  799.     server_print("pev_dmg_save = %.3f", fValue)
  800.     pev(index, pev_dmg, fValue)
  801.     server_print("pev_dmg = %.3f", fValue)
  802.     pev(index, pev_dmgtime, fValue)
  803.     server_print("pev_dmgtime = %.3f (current time is %.3f)", fValue, get_gametime())
  804.     pev(index, pev_noise, temp3, temp, 127)
  805.     server_print("pev_noise = %d (^"%s^")", temp3, temp)
  806.     pev(index, pev_noise1, temp3, temp, 127)
  807.     server_print("pev_noise1 = %d (^"%s^")", temp3, temp)
  808.     pev(index, pev_noise2, temp3, temp, 127)
  809.     server_print("pev_noise2 = %d (^"%s^")", temp3, temp)
  810.     pev(index, pev_noise3, temp3, temp, 127)
  811.     server_print("pev_noise3 = %d (^"%s^")", temp3, temp)
  812.     pev(index, pev_speed, fValue)
  813.     server_print("pev_speed = %.3f", fValue)
  814.     pev(index, pev_air_finished, fValue)
  815.     server_print("pev_air_finished = %.3f", fValue)
  816.     pev(index, pev_pain_finished, fValue)
  817.     server_print("pev_pain_finished = %.3f", fValue)
  818.     pev(index, pev_radsuit_finished, fValue)
  819.     server_print("pev_radsuit_finished = %.3f", fValue)
  820.     if(pev_valid(pev(index, pev_pContainingEntity)))
  821.     {
  822.         pev(pev(index, pev_pContainingEntity), pev_classname, temp2, 127)
  823.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_pContainingEntity), temp2)
  824.     }
  825.     else temp = "NULL"
  826.     server_print("pev_pContainingEntity = %s", temp)
  827.     server_print("pev_playerclass = %d", pev(index, pev_playerclass))
  828.     pev(index, pev_maxspeed, fValue)
  829.     server_print("pev_maxspeed = %.3f", fValue)
  830.     pev(index, pev_fov, fValue)
  831.     server_print("pev_fov = %.3f", fValue)
  832.     server_print("pev_weaponanim = %d", pev(index, pev_weaponanim))
  833.     server_print("pev_pushmsec = %d", pev(index, pev_pushmsec))
  834.     server_print("pev_bInDuck = %d (%s)", pev(index, pev_bInDuck), (pev(index, pev_bInDuck) > 0 ? "TRUE" : "FALSE"))
  835.     server_print("pev_flTimeStepSound = %d (current time is %.3f)", pev(index, pev_flTimeStepSound), get_gametime())
  836.     server_print("pev_flSwimTime = %d (current time is %.3f)", pev(index, pev_flSwimTime), get_gametime())
  837.     server_print("pev_flDuckTime = %d (current time is %.3f)", pev(index, pev_flDuckTime), get_gametime())
  838.     server_print("pev_iStepLeft = %d", pev(index, pev_iStepLeft))
  839.     pev(index, pev_flFallVelocity, fValue)
  840.     server_print("pev_flFallVelocity = %.3f", fValue)
  841.     server_print("pev_gamestate = %d", pev(index, pev_gamestate))
  842.     server_print("pev_oldbuttons = %d (%s)", pev(index, pev_oldbuttons), UTIL_buttons(pev(index, pev_oldbuttons)))
  843.     server_print("pev_groupinfo = %d", pev(index, pev_groupinfo))
  844.     server_print("pev_iuser1 = %d", pev(index, pev_iuser1))
  845.     server_print("pev_iuser2 = %d", pev(index, pev_iuser2))
  846.     server_print("pev_iuser3 = %d", pev(index, pev_iuser3))
  847.     server_print("pev_iuser4 = %d", pev(index, pev_iuser4))
  848.     pev(index, pev_fuser1, fValue)
  849.     server_print("pev_fuser1 = %.3f", fValue)
  850.     pev(index, pev_fuser2, fValue)
  851.     server_print("pev_fuser2 = %.3f", fValue)
  852.     pev(index, pev_fuser3, fValue)
  853.     server_print("pev_fuser3 = %.3f", fValue)
  854.     pev(index, pev_fuser4, fValue)
  855.     server_print("pev_fuser4 = %.3f", fValue)
  856.     pev(index, pev_vuser1, vValue)
  857.     server_print("pev_vuser1 = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  858.     pev(index, pev_vuser2, vValue)
  859.     server_print("pev_vuser2 = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  860.     pev(index, pev_vuser3, vValue)
  861.     server_print("pev_vuser3 = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  862.     pev(index, pev_vuser4, vValue)
  863.     server_print("pev_vuser4 = Vector (%.1f, %.1f, %.1f)", vValue[0], vValue[1], vValue[2])
  864.     if(pev_valid(pev(index, pev_euser1)))
  865.     {
  866.         pev(pev(index, pev_euser1), pev_classname, temp2, 127)
  867.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_euser1), temp2)
  868.     }
  869.     else temp = "NULL"
  870.     server_print("pev_euser1 = %s", temp)
  871.     if(pev_valid(pev(index, pev_euser2)))
  872.     {
  873.         pev(pev(index, pev_euser2), pev_classname, temp2, 127)
  874.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_euser2), temp2)
  875.     }
  876.     else temp = "NULL"
  877.     server_print("pev_euser2 = %s", temp)
  878.     if(pev_valid(pev(index, pev_euser3)))
  879.     {
  880.         pev(pev(index, pev_euser3), pev_classname, temp2, 127)
  881.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_euser3), temp2)
  882.     }
  883.     else temp = "NULL"
  884.     server_print("pev_euser3 = %s", temp)
  885.     if(pev_valid(pev(index, pev_euser4)))
  886.     {
  887.         pev(pev(index, pev_euser4), pev_classname, temp2, 127)
  888.         formatex(temp, 127, "Entity #%d (^"%s^")", pev(index, pev_euser4), temp2)
  889.     }
  890.     else temp = "NULL"
  891.     server_print("pev_euser4 = %s", temp)
  892.     server_print("End of dump.")
  893. }
  894.  
  895. public ServerCommand_ListMsg()
  896. {
  897.     server_print("Available Messages...")
  898.     new msg[64]
  899.     for(new i = 0; i < 256; ++i)
  900.     {
  901.         msg[0] = 0
  902.         get_user_msgname(i, msg, 63)
  903.         if(msg[0] != 0) server_print(msg)
  904.     }
  905.     server_print("^nUsage: hook_msg ^"tempentity? ResetHUD SendAudio^"")
  906. }
  907.  
  908. public ServerCommand_PrintMsg()
  909. {
  910.     new string[128]
  911.     get_pcvar_string(cvar_msg, string, 127)
  912.     new msg1[16], msg2[16], msg3[16], msg4[16], msg5[16], i
  913.     parse(string, msg1, 15, msg2, 15, msg3, 15, msg4, 15, msg5, 15)
  914.     if(msg1[0] != 0)
  915.     {
  916.         i++
  917.         formatex(msg1[strlen(msg1)], 16-strlen(msg1), " | ")
  918.     }
  919.     if(msg2[0] != 0)
  920.     {
  921.         i++
  922.         formatex(msg2[strlen(msg2)], 16-strlen(msg2), " | ")
  923.     }
  924.     if(msg3[0] != 0)
  925.     {
  926.         i++
  927.         formatex(msg3[strlen(msg3)], 16-strlen(msg3), " | ")
  928.     }
  929.     if(msg4[0] != 0)
  930.     {
  931.         i++
  932.         formatex(msg4[strlen(msg4)], 16-strlen(msg4), " | ")
  933.     }
  934.     if(msg5[0] != 0)
  935.     {
  936.         i++
  937.         formatex(msg5[strlen(msg5)], 16-strlen(msg5), " | ")
  938.     }
  939.     if(i == 0) formatex(string, 127, "Currently Hooking: NO MESSAGES")
  940.     else
  941.     {
  942.         formatex(string, 127, "Currently Hooking: %i/5 MESSAGES (%s%s%s%s%s)", i, msg1, msg2, msg3, msg4, msg5)
  943.         string[strlen(string)-3] = 0
  944.         string[strlen(string)-1] = ')'
  945.     }
  946.     server_print(string)
  947. }
  948.  
  949. public ServerCommand_PrintLog()
  950. {
  951.     server_print("Currently Logging: %s (^"%s^")", (get_pcvar_num(cvar_log) != 0) ? "ENABLED" : "DISABLED", (logfile[0] != 0) ? logfile : "NONE")
  952. }
  953.  
  954. // Utils
  955. UTIL_ReadCvar(pCvar, flag)
  956. {
  957.     new flags[31]
  958.     get_pcvar_string(pCvar, flags, 31)
  959.  
  960.     if(read_flags(flags) & flag) return 1
  961.     return 0
  962. }
  963.  
  964. UTIL_ServerConsole_Printf(const fmt[], {Float,_}:...)
  965. {
  966.     static string[512]
  967.     vformat(string, 511, fmt, 2)
  968.     server_print(string)
  969.  
  970.     if(get_pcvar_num(cvar_log))
  971.     {
  972.         static basedir[64], date[16], time[16], fp
  973.         get_basedir(basedir, 63)
  974.         get_time("%H:%M:%S", time, 15)
  975.  
  976.         if(logfile[0] == 0)
  977.         {
  978.             get_time("%m%d", date, 15)
  979.             formatex(logfile, 127, "%s/logs/shptools_%s.log", basedir, date)
  980.         }
  981.  
  982.         get_time("%m/%d/%Y", date, 15)
  983.         fp = fopen(logfile, "a")
  984.         fprintf(fp, "L %s - %s: %s^n", date, time, string)
  985.         fclose(fp)
  986.     }
  987. }
  988.  
  989. UTIL_getclassname( iClass )
  990. {
  991.     new szClassName[33]
  992.     global_get(glb_pStringBase, iClass, szClassName, charsmax(szClassName))
  993.     return szClassName
  994. }
  995.  
  996. UTIL_atype(atype)
  997. {
  998.     static str[16]
  999.     switch(atype)
  1000.     {
  1001.         case 0: str = "at_notice"
  1002.         case 1: str = "at_console"
  1003.         case 2: str = "at_aiconsole"
  1004.         case 3: str = "at_warning"
  1005.         case 4: str = "at_error"
  1006.         case 5: str = "at_logged"
  1007.         default: str = "???"
  1008.     }
  1009.     return str
  1010. }
  1011.  
  1012. UTIL_fixangle(fixangle)
  1013. {
  1014.     new str[32]
  1015.     switch(fixangle)
  1016.     {
  1017.         case 0: str = "nothing"
  1018.         case 1: str = "force view angles"
  1019.         case 2: str = "add velocity"
  1020.         default: str = "???"
  1021.     }
  1022.     return str
  1023. }
  1024.  
  1025. UTIL_movetype(movetype)
  1026. {
  1027.     new str[32]
  1028.     switch(movetype)
  1029.     {
  1030.         case 0: str = "MOVETYPE_NONE"
  1031.         case 3: str = "MOVETYPE_WALK"
  1032.         case 4: str = "MOVETYPE_STEP"
  1033.         case 5: str = "MOVETYPE_FLY"
  1034.         case 6: str = "MOVETYPE_TOSS"
  1035.         case 7: str = "MOVETYPE_PUSH"
  1036.         case 8: str = "MOVETYPE_NOCLIP"
  1037.         case 9: str = "MOVETYPE_FLYMISSILE"
  1038.         case 10: str = "MOVETYPE_BOUNCE"
  1039.         case 11: str = "MOVETYPE_BOUNCEMISSILE"
  1040.         case 12: str = "MOVETYPE_FOLLOW"
  1041.         case 13: str = "MOVETYPE_PUSHSTEP"
  1042.         default: str = "???"
  1043.     }
  1044.     return str
  1045. }
  1046.  
  1047. UTIL_solid(solid)
  1048. {
  1049.     new str[16]
  1050.     switch(solid)
  1051.     {
  1052.         case 0: str = "SOLID_NOT"
  1053.         case 1: str = "SOLID_TRIGGER"
  1054.         case 2: str = "SOLID_BBOX"
  1055.         case 3: str = "SOLID_SLIDEBOX"
  1056.         case 4: str = "SOLID_BSP"
  1057.         default: str = "???"
  1058.     }
  1059.     return str
  1060. }
  1061.  
  1062. UTIL_effects(effects)
  1063. {
  1064.     new str[128], len
  1065.     if(effects & EF_BRIGHTFIELD) len += formatex(str[len], 128-len, "EF_BRIGHTFIELD | ")
  1066.     if(effects & EF_MUZZLEFLASH) len += formatex(str[len], 128-len, "EF_MUZZLEFLASH | ")
  1067.     if(effects & EF_BRIGHTLIGHT) len += formatex(str[len], 128-len, "EF_BRIGHTLIGHT | ")
  1068.     if(effects & EF_DIMLIGHT) len += formatex(str[len], 128-len, "EF_DIMLIGHT | ")
  1069.     if(effects & EF_INVLIGHT) len += formatex(str[len], 128-len, "EF_INVLIGHT | ")
  1070.     if(effects & EF_NOINTERP) len += formatex(str[len], 128-len, "EF_NOINTERP | ")
  1071.     if(effects & EF_LIGHT) len += formatex(str[len], 128-len, "EF_LIGHT | ")
  1072.     if(effects & EF_NODRAW) len += formatex(str[len], 128-len, "EF_NODRAW | ")
  1073.     if(strlen(str) > 2) str[strlen(str)-3] = 0
  1074.     return str
  1075. }
  1076.  
  1077. UTIL_rendermode(rendermode)
  1078. {
  1079.     new str[32]
  1080.     switch(rendermode)
  1081.     {
  1082.         case 0: str = "kRenderNormal"
  1083.         case 1: str = "kRenderTransColor"
  1084.         case 2: str = "kRenderTransTexture"
  1085.         case 3: str = "kRenderGlow"
  1086.         case 4: str = "kRenderTransAlpha"
  1087.         case 5: str = "kRenderTransAdd"
  1088.         default: str = "???"
  1089.     }
  1090.     return str
  1091. }
  1092.  
  1093. UTIL_renderfx(renderfx)
  1094. {
  1095.     new str[32]
  1096.     switch(renderfx)
  1097.     {
  1098.         case 0: str = "kRenderFxNone"
  1099.         case 1: str = "kRenderFxPulseSlow"
  1100.         case 2: str = "kRenderFxPulseFast"
  1101.         case 3: str = "kRenderFxPulseSlowWide"
  1102.         case 4: str = "kRenderFxPulseFastWide"
  1103.         case 5: str = "kRenderFxFadeSlow"
  1104.         case 6: str = "kRenderFxFadeFast"
  1105.         case 7: str = "kRenderFxSolidSlow"
  1106.         case 8: str = "kRenderFxSolidFast"
  1107.         case 9: str = "kRenderFxStrobeSlow"
  1108.         case 10: str = "kRenderFxStrobeFast"
  1109.         case 11: str = "kRenderFxStrobeFaster"
  1110.         case 12: str = "kRenderFxFlickerSlow"
  1111.         case 13: str = "kRenderFxFlickerFast"
  1112.         case 14: str = "kRenderFxNoDissipation"
  1113.         case 15: str = "kRenderFxDistort"
  1114.         case 16: str = "kRenderFxHologram"
  1115.         case 17: str = "kRenderFxDeadPlayer"
  1116.         case 18: str = "kRenderFxExplode"
  1117.         case 19: str = "kRenderFxGlowShell"
  1118.         case 20: str = "kRenderFxClampMinScale"
  1119.         default: str = "???"
  1120.     }
  1121.     return str
  1122. }
  1123.  
  1124. UTIL_takedamage(takedamage)
  1125. {
  1126.     new str[16]
  1127.     switch(takedamage)
  1128.     {
  1129.         case 0: str = "DAMAGE_NO"
  1130.         case 1: str = "DAMAGE_YES"
  1131.         case 2: str = "DAMAGE_AIM"
  1132.         default: str = "???"
  1133.     }
  1134.     return str
  1135. }
  1136.  
  1137. UTIL_deadflag(deadflag)
  1138. {
  1139.     new str[32]
  1140.     switch(deadflag)
  1141.     {
  1142.         case 0: str = "DEAD_NO"
  1143.         case 1: str = "DEAD_DYING"
  1144.         case 2: str = "DEAD_DEAD"
  1145.         case 3: str = "DEAD_RESPAWNABLE"
  1146.         case 4: str = "DEAD_DISCARDBODY"
  1147.         case 5: str = "???"
  1148.     }
  1149.     return str
  1150. }
  1151.  
  1152. UTIL_flags(flags)
  1153. {
  1154.     new str[128], len
  1155.     if(flags & FL_FLY) len += formatex(str[len], 128-len, "FL_FLY | ")
  1156.     if(flags & FL_SWIM) len += formatex(str[len], 128-len, "FL_SWIM | ")
  1157.     if(flags & FL_CONVEYOR) len += formatex(str[len], 128-len, "FL_CONVEYOR | ")
  1158.     if(flags & FL_CLIENT) len += formatex(str[len], 128-len, "FL_CLIENT | ")
  1159.     if(flags & FL_INWATER) len += formatex(str[len], 128-len, "FL_INWATER | ")
  1160.     if(flags & FL_MONSTER) len += formatex(str[len], 128-len, "FL_MONSTER | ")
  1161.     if(flags & FL_GODMODE) len += formatex(str[len], 128-len, "FL_GODMODE | ")
  1162.     if(flags & FL_NOTARGET) len += formatex(str[len], 128-len, "FL_NOTARGET | ")
  1163.     if(flags & FL_SKIPLOCALHOST) len += formatex(str[len], 128-len, "FL_SKIPLOCALHOST | ")
  1164.     if(flags & FL_ONGROUND) len += formatex(str[len], 128-len, "FL_ONGROUND | ")
  1165.     if(flags & FL_PARTIALGROUND) len += formatex(str[len], 128-len, "FL_PARTIALGROUND | ")
  1166.     if(flags & FL_WATERJUMP) len += formatex(str[len], 128-len, "FL_WATERJUMP | ")
  1167.     if(flags & FL_FROZEN) len += formatex(str[len], 128-len, "FL_FROZEN | ")
  1168.     if(flags & FL_FAKECLIENT) len += formatex(str[len], 128-len, "FL_FAKECLIENT | ")
  1169.     if(flags & FL_DUCKING) len += formatex(str[len], 128-len, "FL_DUCKING | ")
  1170.     if(flags & FL_FLOAT) len += formatex(str[len], 128-len, "FL_FLOAT | ")
  1171.     if(flags & FL_GRAPHED) len += formatex(str[len], 128-len, "FL_GRAPHED | ")
  1172.     if(flags & FL_IMMUNE_WATER) len += formatex(str[len], 128-len, "FL_IMMUNE_WATER | ")
  1173.     if(flags & FL_IMMUNE_SLIME) len += formatex(str[len], 128-len, "FL_IMMUNE_SLIME | ")
  1174.     if(flags & FL_IMMUNE_LAVA) len += formatex(str[len], 128-len, "FL_IMMUNE_LAVA | ")
  1175.     if(flags & FL_PROXY) len += formatex(str[len], 128-len, "FL_PROXY | ")
  1176.     if(flags & FL_ALWAYSTHINK) len += formatex(str[len], 128-len, "FL_ALWAYSTHINK | ")
  1177.     if(flags & FL_BASEVELOCITY) len += formatex(str[len], 128-len, "FL_BASEVELOCITY | ")
  1178.     if(flags & FL_MONSTERCLIP) len += formatex(str[len], 128-len, "FL_MONSTERCLIP | ")
  1179.     if(flags & FL_ONTRAIN) len += formatex(str[len], 128-len, "FL_ONTRAIN | ")
  1180.     if(flags & FL_WORLDBRUSH) len += formatex(str[len], 128-len, "FL_WORLDBRUSH | ")
  1181.     if(flags & FL_SPECTATOR) len += formatex(str[len], 128-len, "FL_SPECTATOR | ")
  1182.     if(flags & (1<<27)) len += formatex(str[len], 128-len, "UNKNOWN (1<<27) | ")
  1183.     if(flags & (1<<28)) len += formatex(str[len], 128-len, "UNKNOWN (1<<28) | ")
  1184.     if(flags & FL_CUSTOMENTITY) len += formatex(str[len], 128-len, "FL_CUSTOMENTITY | ")
  1185.     if(flags & FL_KILLME) len += formatex(str[len], 128-len, "FL_KILLME | ")
  1186.     if(flags & FL_DORMANT) len += formatex(str[len], 128-len, "FL_DORMANT | ")
  1187.     if(strlen(str) > 2) str[strlen(str)-3] = 0
  1188.     return str
  1189. }
  1190.  
  1191. UTIL_waterlevel(waterlevel)
  1192. {
  1193.     new str[32]
  1194.     switch(waterlevel)
  1195.     {
  1196.         case 0: str = "not in water"
  1197.         case 2: str = "walking in water"
  1198.         case 3: str = "swimming in water"
  1199.         default: str = "???"
  1200.     }
  1201.     return str
  1202. }
  1203.  
  1204. UTIL_buttons(button)
  1205. {
  1206.     new str[128], len
  1207.     if(button & IN_ATTACK) len += formatex(str[len], 128-len, "IN_ATTACK | ")
  1208.     if(button & IN_JUMP) len += formatex(str[len], 128-len, "IN_JUMP | ")
  1209.     if(button & IN_DUCK) len += formatex(str[len], 128-len, "IN_DUCK | ")
  1210.     if(button & IN_FORWARD) len += formatex(str[len], 128-len, "IN_FORWARD | ")
  1211.     if(button & IN_BACK) len += formatex(str[len], 128-len, "IN_BACK | ")
  1212.     if(button & IN_USE) len += formatex(str[len], 128-len, "IN_USE | ")
  1213.     if(button & IN_CANCEL) len += formatex(str[len], 128-len, "IN_CANCEL | ")
  1214.     if(button & IN_LEFT) len += formatex(str[len], 128-len, "IN_LEFT | ")
  1215.     if(button & IN_RIGHT) len += formatex(str[len], 128-len, "IN_RIGHT | ")
  1216.     if(button & IN_MOVELEFT) len += formatex(str[len], 128-len, "IN_MOVELEFT | ")
  1217.     if(button & IN_MOVERIGHT) len += formatex(str[len], 128-len, "IN_MOVERIGHT | ")
  1218.     if(button & IN_ATTACK2) len += formatex(str[len], 128-len, "IN_ATTACK2 | ")
  1219.     if(button & IN_RUN) len += formatex(str[len], 128-len, "IN_RUN | ")
  1220.     if(button & IN_RELOAD) len += formatex(str[len], 128-len, "IN_RELOAD | ")
  1221.     if(button & IN_ALT1) len += formatex(str[len], 128-len, "IN_ALT1 | ")
  1222.     if(button & IN_SCORE) len += formatex(str[len], 128-len, "IN_SCORE | ")
  1223.     if(strlen(str) > 2) str[strlen(str)-3] = 0
  1224.     return str
  1225. }
  1226.  
  1227. UTIL_DrawBeam(id, Float:start0, Float:start1, Float:start2, Float:end0, Float:end1, Float:end2, life, width, noise, red, green, blue, brightness, speed)
  1228. {
  1229.     message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0,0,0}, id)
  1230.     write_byte(TE_BEAMPOINTS)
  1231.     write_coord(floatround(start0))
  1232.     write_coord(floatround(start1))
  1233.     write_coord(floatround(start2))
  1234.     write_coord(floatround(end0))
  1235.     write_coord(floatround(end1))
  1236.     write_coord(floatround(end2))
  1237.     write_short(beam_texture)
  1238.     write_byte(1) // framestart
  1239.     write_byte(10) // framerate
  1240.     write_byte(life) // life in 0.1's
  1241.     write_byte(width) // width
  1242.     write_byte(noise) // noise
  1243.     write_byte(red) // r, g, b
  1244.     write_byte(green) // r, g, b
  1245.     write_byte(blue) // r, g, b
  1246.     write_byte(brightness) // brightness
  1247.     write_byte(speed) // speed
  1248.     message_end()
  1249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement