faluco@505: /** dvander@600: * vim: set ts=4 : dvander@600: * =============================================================== dvander@600: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@600: * =============================================================== dvander@600: * dvander@600: * This file is not open source and may not be copied without explicit dvander@600: * written permission of AlliedModders LLC. This file may not be redistributed dvander@600: * in whole or significant part. dvander@600: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@600: * dvander@600: * Version: $Id$ dvander@600: */ faluco@505: ds@511: #include "sourcemod.h" ds@511: #include "HandleSys.h" faluco@505: #include faluco@505: #include faluco@505: faluco@505: static cell_t smn_BfWriteBool(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteOneBit(params[2]); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteByte(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteByte(params[2]); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteChar(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteChar(params[2]); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteShort(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteShort(params[2]); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteWord(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteWord(params[2]); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteNum(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteLong(static_cast(params[2])); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteFloat(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteFloat(sp_ctof(params[2])); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteString(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: int err; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: char *str; faluco@505: if ((err=pCtx->LocalToString(params[2], &str)) != SP_ERROR_NONE) faluco@505: { faluco@505: pCtx->ThrowNativeErrorEx(err, NULL); faluco@505: return 0; faluco@505: } faluco@505: faluco@505: pBitBuf->WriteString(str); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteEntity(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteShort(params[2]); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteAngle(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteBitAngle(sp_ctof(params[2]), params[3]); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteCoord(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: pBitBuf->WriteBitCoord(sp_ctof(params[2])); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteVecCoord(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: cell_t *pVec; faluco@505: pCtx->LocalToPhysAddr(params[2], &pVec); faluco@505: Vector vec(sp_ctof(pVec[0]), sp_ctof(pVec[1]), sp_ctof(pVec[2])); faluco@505: pBitBuf->WriteBitVec3Coord(vec); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteVecNormal(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: cell_t *pVec; faluco@505: pCtx->LocalToPhysAddr(params[2], &pVec); faluco@505: Vector vec(sp_ctof(pVec[0]), sp_ctof(pVec[1]), sp_ctof(pVec[2])); faluco@505: pBitBuf->WriteBitVec3Normal(vec); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@505: static cell_t smn_BfWriteAngles(IPluginContext *pCtx, const cell_t *params) faluco@505: { faluco@505: Handle_t hndl = static_cast(params[1]); faluco@505: HandleError herr; faluco@505: HandleSecurity sec; faluco@505: bf_write *pBitBuf; faluco@505: faluco@505: sec.pOwner = NULL; faluco@505: sec.pIdentity = g_pCoreIdent; faluco@505: faluco@505: if ((herr=g_HandleSys.ReadHandle(hndl, g_WrBitBufType, &sec, (void **)&pBitBuf)) faluco@505: != HandleError_None) faluco@505: { faluco@505: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@505: } faluco@505: faluco@505: cell_t *pAng; faluco@505: pCtx->LocalToPhysAddr(params[2], &pAng); faluco@505: QAngle ang(sp_ctof(pAng[0]), sp_ctof(pAng[1]), sp_ctof(pAng[2])); faluco@505: pBitBuf->WriteBitAngles(ang); faluco@505: faluco@505: return 1; faluco@505: } faluco@505: faluco@598: static cell_t smn_BfReadBool(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return pBitBuf->ReadOneBit() ? 1 : 0; faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadByte(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return pBitBuf->ReadByte(); faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadChar(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return pBitBuf->ReadChar(); faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadShort(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return pBitBuf->ReadShort(); faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadWord(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return pBitBuf->ReadWord(); faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadNum(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return static_cast(pBitBuf->ReadLong()); faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadFloat(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return sp_ftoc(pBitBuf->ReadFloat()); faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadString(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: char *buf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: pCtx->LocalToPhysAddr(params[2], (cell_t **)&buf); faluco@598: if (!pBitBuf->ReadString(buf, params[3], params[4] ? true : false)) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Destination string buffer is too short, try increasing its size"); faluco@598: } faluco@598: faluco@598: return 1; faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadEntity(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return pBitBuf->ReadShort(); faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadAngle(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return sp_ftoc(pBitBuf->ReadBitAngle(params[2])); faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadCoord(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: return sp_ftoc(pBitBuf->ReadBitCoord()); faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadVecCoord(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: cell_t *pVec; faluco@598: pCtx->LocalToPhysAddr(params[2], &pVec); faluco@598: faluco@598: Vector vec; faluco@598: pBitBuf->ReadBitVec3Coord(vec); faluco@598: faluco@598: pVec[0] = sp_ftoc(vec.x); faluco@598: pVec[1] = sp_ftoc(vec.y); faluco@598: pVec[2] = sp_ftoc(vec.z); faluco@598: faluco@598: return 1; faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadVecNormal(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: cell_t *pVec; faluco@598: pCtx->LocalToPhysAddr(params[2], &pVec); faluco@598: faluco@598: Vector vec; faluco@598: pBitBuf->ReadBitVec3Normal(vec); faluco@598: faluco@598: pVec[0] = sp_ftoc(vec.x); faluco@598: pVec[1] = sp_ftoc(vec.y); faluco@598: pVec[2] = sp_ftoc(vec.z); faluco@598: faluco@598: return 1; faluco@598: } faluco@598: faluco@598: static cell_t smn_BfReadAngles(IPluginContext *pCtx, const cell_t *params) faluco@598: { faluco@598: Handle_t hndl = static_cast(params[1]); faluco@598: HandleError herr; faluco@598: HandleSecurity sec; faluco@598: bf_read *pBitBuf; faluco@598: faluco@598: sec.pOwner = NULL; faluco@598: sec.pIdentity = g_pCoreIdent; faluco@598: faluco@598: if ((herr=g_HandleSys.ReadHandle(hndl, g_RdBitBufType, &sec, (void **)&pBitBuf)) faluco@598: != HandleError_None) faluco@598: { faluco@598: return pCtx->ThrowNativeError("Invalid bit buffer handle %x (error %d)", hndl, herr); faluco@598: } faluco@598: faluco@598: cell_t *pAng; faluco@598: pCtx->LocalToPhysAddr(params[2], &pAng); faluco@598: faluco@598: QAngle ang; faluco@598: pBitBuf->ReadBitAngles(ang); faluco@598: faluco@598: pAng[0] = sp_ftoc(ang.x); faluco@598: pAng[1] = sp_ftoc(ang.y); faluco@598: pAng[2] = sp_ftoc(ang.z); faluco@598: faluco@598: return 1; faluco@598: } faluco@598: faluco@598: REGISTER_NATIVES(bitbufnatives) faluco@505: { faluco@505: {"BfWriteBool", smn_BfWriteBool}, faluco@505: {"BfWriteByte", smn_BfWriteByte}, faluco@505: {"BfWriteChar", smn_BfWriteChar}, faluco@505: {"BfWriteShort", smn_BfWriteShort}, faluco@505: {"BfWriteWord", smn_BfWriteWord}, faluco@505: {"BfWriteNum", smn_BfWriteNum}, faluco@505: {"BfWriteFloat", smn_BfWriteFloat}, faluco@505: {"BfWriteString", smn_BfWriteString}, faluco@505: {"BfWriteEntity", smn_BfWriteEntity}, faluco@505: {"BfWriteAngle", smn_BfWriteAngle}, faluco@505: {"BfWriteCoord", smn_BfWriteCoord}, faluco@505: {"BfWriteVecCoord", smn_BfWriteVecCoord}, faluco@505: {"BfWriteVecNormal", smn_BfWriteVecNormal}, faluco@505: {"BfWriteAngles", smn_BfWriteAngles}, faluco@598: {"BfReadBool", smn_BfReadBool}, faluco@598: {"BfReadByte", smn_BfReadByte}, faluco@598: {"BfReadChar", smn_BfReadChar}, faluco@598: {"BfReadShort", smn_BfReadShort}, faluco@598: {"BfReadWord", smn_BfReadWord}, faluco@598: {"BfReadNum", smn_BfReadNum}, faluco@598: {"BfReadFloat", smn_BfReadFloat}, faluco@598: {"BfReadString", smn_BfReadString}, faluco@598: {"BfReadEntity", smn_BfReadEntity}, faluco@598: {"BfReadAngle", smn_BfReadAngle}, faluco@598: {"BfReadCoord", smn_BfReadCoord}, faluco@598: {"BfReadVecCoord", smn_BfReadVecCoord}, faluco@598: {"BfReadVecNormal", smn_BfReadVecNormal}, faluco@598: {"BfReadAngles", smn_BfReadAngles}, faluco@505: {NULL, NULL} faluco@505: };