skamonkey@3743: /**
skamonkey@3743: * vim: set ts=4 :
skamonkey@3743: * =============================================================================
skamonkey@3743: * SourceMod
skamonkey@3743: * Copyright (C) 2013 AlliedModders LLC. All rights reserved.
skamonkey@3743: * =============================================================================
skamonkey@3743: *
skamonkey@3743: * This program is free software; you can redistribute it and/or modify it under
skamonkey@3743: * the terms of the GNU General Public License, version 3.0, as published by the
skamonkey@3743: * Free Software Foundation.
skamonkey@3743: *
skamonkey@3743: * This program is distributed in the hope that it will be useful, but WITHOUT
skamonkey@3743: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
skamonkey@3743: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
skamonkey@3743: * details.
skamonkey@3743: *
skamonkey@3743: * You should have received a copy of the GNU General Public License along with
skamonkey@3743: * this program. If not, see .
skamonkey@3743: *
skamonkey@3743: * As a special exception, AlliedModders LLC gives you permission to link the
skamonkey@3743: * code of this program (as well as its derivative works) to "Half-Life 2," the
skamonkey@3743: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
skamonkey@3743: * by the Valve Corporation. You must obey the GNU General Public License in
skamonkey@3743: * all respects for all other code used. Additionally, AlliedModders LLC grants
skamonkey@3743: * this exception to all derivative works. AlliedModders LLC defines further
skamonkey@3743: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
skamonkey@3743: * or .
skamonkey@3743: *
skamonkey@3743: * Version: $Id$
skamonkey@3743: */
skamonkey@3743:
skamonkey@3743: #include "UserMessages.h"
skamonkey@3743:
skamonkey@3743: #ifdef USE_PROTOBUF_USERMESSAGES
skamonkey@3743:
skamonkey@3743: #include "HandleSys.h"
skamonkey@3743: #include "UserMessagePBHelpers.h"
skamonkey@3743: #include "smn_usermsgs.h"
skamonkey@3743:
skamonkey@3743: // Assumes pbuf message handle is param 1, gets message as msg
skamonkey@3743: #define GET_MSG_FROM_HANDLE_OR_ERR() \
skamonkey@3743: Handle_t hndl = static_cast(params[1]); \
skamonkey@3743: HandleError herr; \
skamonkey@3743: HandleSecurity sec; \
skamonkey@3743: SMProtobufMessage *msg; \
skamonkey@3743: \
skamonkey@3743: sec.pOwner = NULL; \
skamonkey@3743: sec.pIdentity = g_pCoreIdent; \
skamonkey@3743: \
skamonkey@3743: if ((herr=g_HandleSys.ReadHandle(hndl, g_ProtobufType, &sec, (void **)&msg)) \
skamonkey@3743: != HandleError_None) \
skamonkey@3743: { \
skamonkey@3743: return pCtx->ThrowNativeError("Invalid protobuf message handle %x (error %d)", hndl, herr); \
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: // Assumes message field name is param 2, gets as strField
skamonkey@3743: #define GET_FIELD_NAME_OR_ERR() \
skamonkey@3743: int err; \
skamonkey@3743: char *strField; \
skamonkey@3743: if ((err=pCtx->LocalToString(params[2], &strField)) != SP_ERROR_NONE) \
skamonkey@3743: { \
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL); \
skamonkey@3743: return 0; \
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadInt(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: int ret;
skamonkey@3743: if (!msg->GetInt32OrUnsigned(strField, &ret))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return ret;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: float ret;
skamonkey@3743: if (!msg->GetFloatOrDouble(strField, &ret))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return sp_ftoc(ret);
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: bool ret;
skamonkey@3743: if (!msg->GetBool(strField, &ret))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return ret ? 1 : 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: char *buf;
skamonkey@3743: pCtx->LocalToPhysAddr(params[3], (cell_t **)&buf);
skamonkey@3743:
skamonkey@3743: if (!msg->GetString(strField, buf, params[4]))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *out;
skamonkey@3743: pCtx->LocalToPhysAddr(params[3], &out);
skamonkey@3743:
skamonkey@3743: Color clr;
skamonkey@3743: if (!msg->GetColor(strField, &clr))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: out[0] = clr.r();
skamonkey@3743: out[1] = clr.g();
skamonkey@3743: out[2] = clr.b();
skamonkey@3743: out[3] = clr.a();
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *out;
skamonkey@3743: pCtx->LocalToPhysAddr(params[3], &out);
skamonkey@3743:
skamonkey@3743: QAngle ang;
skamonkey@3743: if (!msg->GetQAngle(strField, &ang))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: out[0] = sp_ftoc(ang.x);
skamonkey@3743: out[1] = sp_ftoc(ang.y);
skamonkey@3743: out[2] = sp_ftoc(ang.z);
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *out;
skamonkey@3743: pCtx->LocalToPhysAddr(params[3], &out);
skamonkey@3743:
skamonkey@3743: Vector vec;
skamonkey@3743: if (!msg->GetVector(strField, &vec))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: out[0] = sp_ftoc(vec.x);
skamonkey@3743: out[1] = sp_ftoc(vec.y);
skamonkey@3743: out[2] = sp_ftoc(vec.z);
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *out;
skamonkey@3743: pCtx->LocalToPhysAddr(params[3], &out);
skamonkey@3743:
skamonkey@3743: Vector2D vec;
skamonkey@3743: if (!msg->GetVector2D(strField, &vec))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: out[0] = sp_ftoc(vec.x);
skamonkey@3743: out[1] = sp_ftoc(vec.y);
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbGetRepeatedFieldCount(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: int cnt = msg->GetRepeatedFieldCount(strField);
skamonkey@3743: if (cnt == -1)
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return cnt;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadRepeatedInt(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: int ret;
skamonkey@3743: if (!msg->GetRepeatedInt32OrUnsigned(strField, params[3], &ret))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return ret;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadRepeatedFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: float ret;
skamonkey@3743: if (!msg->GetRepeatedFloatOrDouble(strField, params[3], &ret))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return sp_ftoc(ret);
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadRepeatedBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: bool ret;
skamonkey@3743: if (!msg->GetRepeatedBool(strField, params[3], &ret))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return ret ? 1 : 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadRepeatedString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: char *buf;
skamonkey@3743: pCtx->LocalToPhysAddr(params[4], (cell_t **)&buf);
skamonkey@3743:
skamonkey@3743: if (!msg->GetRepeatedString(strField, params[3], buf, params[5]))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadRepeatedColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *out;
skamonkey@3743: pCtx->LocalToPhysAddr(params[4], &out);
skamonkey@3743:
skamonkey@3743: Color clr;
skamonkey@3743: if (!msg->GetRepeatedColor(strField, params[3], &clr))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: out[0] = clr.r();
skamonkey@3743: out[1] = clr.g();
skamonkey@3743: out[2] = clr.b();
skamonkey@3743: out[3] = clr.a();
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadRepeatedAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *out;
skamonkey@3743: pCtx->LocalToPhysAddr(params[4], &out);
skamonkey@3743:
skamonkey@3743: QAngle ang;
skamonkey@3743: if (!msg->GetRepeatedQAngle(strField, params[3], &ang))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: out[0] = sp_ftoc(ang.x);
skamonkey@3743: out[1] = sp_ftoc(ang.y);
skamonkey@3743: out[2] = sp_ftoc(ang.z);
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadRepeatedVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *out;
skamonkey@3743: pCtx->LocalToPhysAddr(params[4], &out);
skamonkey@3743:
skamonkey@3743: Vector vec;
skamonkey@3743: if (!msg->GetRepeatedVector(strField, params[3], &vec))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: out[0] = sp_ftoc(vec.x);
skamonkey@3743: out[1] = sp_ftoc(vec.y);
skamonkey@3743: out[2] = sp_ftoc(vec.z);
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadRepeatedVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *out;
skamonkey@3743: pCtx->LocalToPhysAddr(params[4], &out);
skamonkey@3743:
skamonkey@3743: Vector2D vec;
skamonkey@3743: if (!msg->GetRepeatedVector2D(strField, params[3], &vec))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: out[0] = sp_ftoc(vec.x);
skamonkey@3743: out[1] = sp_ftoc(vec.y);
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbSetInt(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: if (!msg->SetInt32OrUnsigned(strField, params[3]))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbSetFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: if (!msg->SetFloatOrDouble(strField, sp_ctof(params[3])))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbSetBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: bool value = (params[3] == 0 ? false : true);
skamonkey@3743: if (!msg->SetBool(strField, value))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbSetString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: char *strValue;
skamonkey@3743: if ((err=pCtx->LocalToString(params[3], &strValue)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: if (!msg->SetString(strField, strValue))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbSetColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *clrParams;
skamonkey@3743: if ((err=pCtx->LocalToPhysAddr(params[3], &clrParams)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: Color clr(
skamonkey@3743: clrParams[0],
skamonkey@3743: clrParams[1],
skamonkey@3743: clrParams[2],
skamonkey@3743: clrParams[3]);
skamonkey@3743:
skamonkey@3743: if (!msg->SetColor(strField, clr))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbSetAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *angParams;
skamonkey@3743: if ((err=pCtx->LocalToPhysAddr(params[3], &angParams)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: QAngle ang(
skamonkey@3743: sp_ctof(angParams[0]),
skamonkey@3743: sp_ctof(angParams[1]),
skamonkey@3743: sp_ctof(angParams[2]));
skamonkey@3743:
skamonkey@3743: if (!msg->SetQAngle(strField, ang))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbSetVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *vecParams;
skamonkey@3743: if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: Vector vec(
skamonkey@3743: sp_ctof(vecParams[0]),
skamonkey@3743: sp_ctof(vecParams[1]),
skamonkey@3743: sp_ctof(vecParams[2]));
skamonkey@3743:
skamonkey@3743: if (!msg->SetVector(strField, vec))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbSetVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *vecParams;
skamonkey@3743: if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: Vector2D vec(
skamonkey@3743: sp_ctof(vecParams[0]),
skamonkey@3743: sp_ctof(vecParams[1]));
skamonkey@3743:
skamonkey@3743: if (!msg->SetVector2D(strField, vec))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbAddInt(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: if (!msg->AddInt32OrUnsigned(strField, params[3]))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbAddFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: if (!msg->AddFloatOrDouble(strField, sp_ctof(params[3])))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbAddBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: bool value = (params[3] == 0 ? false : true);
skamonkey@3743: if (!msg->AddBool(strField, value))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbAddString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: char *strValue;
skamonkey@3743: if ((err=pCtx->LocalToString(params[3], &strValue)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: if (!msg->AddString(strField, strValue))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbAddColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *clrParams;
skamonkey@3743: if ((err=pCtx->LocalToPhysAddr(params[3], &clrParams)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: Color clr(
skamonkey@3743: clrParams[0],
skamonkey@3743: clrParams[1],
skamonkey@3743: clrParams[2],
skamonkey@3743: clrParams[3]);
skamonkey@3743:
skamonkey@3743: if (!msg->AddColor(strField, clr))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbAddAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *angParams;
skamonkey@3743: if ((err=pCtx->LocalToPhysAddr(params[3], &angParams)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: QAngle ang(
skamonkey@3743: sp_ctof(angParams[0]),
skamonkey@3743: sp_ctof(angParams[1]),
skamonkey@3743: sp_ctof(angParams[2]));
skamonkey@3743:
skamonkey@3743: if (!msg->AddQAngle(strField, ang))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbAddVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *vecParams;
skamonkey@3743: if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: Vector vec(
skamonkey@3743: sp_ctof(vecParams[0]),
skamonkey@3743: sp_ctof(vecParams[1]),
skamonkey@3743: sp_ctof(vecParams[2]));
skamonkey@3743:
skamonkey@3743: if (!msg->AddVector(strField, vec))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbAddVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: cell_t *vecParams;
skamonkey@3743: if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743: {
skamonkey@3743: pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743: return 0;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: Vector2D vec(
skamonkey@3743: sp_ctof(vecParams[0]),
skamonkey@3743: sp_ctof(vecParams[1]));
skamonkey@3743:
skamonkey@3743: if (!msg->AddVector2D(strField, vec))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: return 1;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadMessage(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: protobuf::Message *innerMsg;
skamonkey@3743: if (!msg->GetMessage(strField, &innerMsg))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: Handle_t outHndl = g_HandleSys.CreateHandle(g_ProtobufType, new SMProtobufMessage(innerMsg), NULL, g_pCoreIdent, NULL);
skamonkey@3743: msg->AddChildHandle(outHndl);
skamonkey@3743:
skamonkey@3743: return outHndl;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbReadRepeatedMessage(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: const protobuf::Message *innerMsg;
skamonkey@3743: if (!msg->GetRepeatedMessage(strField, params[3], &innerMsg))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: Handle_t outHndl = g_HandleSys.CreateHandle(g_ProtobufType, new SMProtobufMessage(const_cast(innerMsg)), NULL, g_pCoreIdent, NULL);
skamonkey@3743: msg->AddChildHandle(outHndl);
skamonkey@3743:
skamonkey@3743: return outHndl;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: static cell_t smn_PbAddMessage(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743: {
skamonkey@3743: GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743: GET_FIELD_NAME_OR_ERR();
skamonkey@3743:
skamonkey@3743: protobuf::Message *innerMsg;
skamonkey@3743: if (!msg->AddMessage(strField, &innerMsg))
skamonkey@3743: {
skamonkey@3747: return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: Handle_t outHndl = g_HandleSys.CreateHandle(g_ProtobufType, new SMProtobufMessage(innerMsg), NULL, g_pCoreIdent, NULL);
skamonkey@3743: msg->AddChildHandle(outHndl);
skamonkey@3743:
skamonkey@3743: return outHndl;
skamonkey@3743: }
skamonkey@3743:
skamonkey@3743: REGISTER_NATIVES(protobufnatives)
skamonkey@3743: {
skamonkey@3743: {"PbReadInt", smn_PbReadInt},
skamonkey@3743: {"PbReadFloat", smn_PbReadFloat},
skamonkey@3743: {"PbReadBool", smn_PbReadBool},
skamonkey@3743: {"PbReadString", smn_PbReadString},
skamonkey@3743: {"PbReadColor", smn_PbReadColor},
skamonkey@3743: {"PbReadAngle", smn_PbReadAngle},
skamonkey@3743: {"PbReadVector", smn_PbReadVector},
skamonkey@3743: {"PbReadVector2D", smn_PbReadVector2D},
skamonkey@3743: {"PbGetRepeatedFieldCount", smn_PbGetRepeatedFieldCount},
skamonkey@3743: {"PbReadRepeatedInt", smn_PbReadRepeatedInt},
skamonkey@3743: {"PbReadRepeatedFloat", smn_PbReadRepeatedFloat},
skamonkey@3743: {"PbReadRepeatedBool", smn_PbReadRepeatedBool},
skamonkey@3743: {"PbReadRepeatedString", smn_PbReadRepeatedString},
skamonkey@3743: {"PbReadRepeatedColor", smn_PbReadRepeatedColor},
skamonkey@3743: {"PbReadRepeatedAngle", smn_PbReadRepeatedAngle},
skamonkey@3743: {"PbReadRepeatedVector", smn_PbReadRepeatedVector},
skamonkey@3743: {"PbReadRepeatedVector2D", smn_PbReadRepeatedVector2D},
skamonkey@3743: {"PbSetInt", smn_PbSetInt},
skamonkey@3743: {"PbSetFloat", smn_PbSetFloat},
skamonkey@3743: {"PbSetBool", smn_PbSetBool},
skamonkey@3743: {"PbSetString", smn_PbSetString},
skamonkey@3743: {"PbSetColor", smn_PbSetColor},
skamonkey@3743: {"PbSetAngle", smn_PbSetAngle},
skamonkey@3743: {"PbSetVector", smn_PbSetVector},
skamonkey@3743: {"PbSetVector2D", smn_PbSetVector2D},
skamonkey@3743: {"PbAddInt", smn_PbAddInt},
skamonkey@3743: {"PbAddFloat", smn_PbAddFloat},
skamonkey@3743: {"PbAddBool", smn_PbAddBool},
skamonkey@3743: {"PbAddString", smn_PbAddString},
skamonkey@3743: {"PbAddColor", smn_PbAddColor},
skamonkey@3743: {"PbAddAngle", smn_PbAddAngle},
skamonkey@3743: {"PbAddVector", smn_PbAddVector},
skamonkey@3743: {"PbAddVector2D", smn_PbAddVector2D},
skamonkey@3743: {"PbReadMessage", smn_PbReadMessage},
skamonkey@3743: {"PbReadRepeatedMessage", smn_PbReadRepeatedMessage},
skamonkey@3743: {"PbAddMessage", smn_PbAddMessage},
skamonkey@3743: {NULL, NULL}
skamonkey@3743: };
skamonkey@3743:
skamonkey@3743: /*
skamonkey@3743: @@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@ @@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@ @@@@@@@@@@@@@
skamonkey@3743: @@@@@@ @@@@@@@@@@@@@@@
skamonkey@3743: 0000 @@@@@@@@@@@@@@@@@@@@@
skamonkey@3743: 000000000 @@@@@@@@@@@@@@@@@@@
skamonkey@3743: 0000000000000000000 @@@@@@@@@@@@@@@
skamonkey@3743: 00000000000000000000 @@@@@@@@@@@@@@@
skamonkey@3743: 000000000 @@@@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@ @@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@ @@@@@@@
skamonkey@3743: @@@ @@@@ @@@ @@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@ @@@@@@@@ @@ @@@@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@@@ @@@@ @@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@ @@@@ @@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@ @@@ @@@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@ @@@@@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@ @@@@@ @@@@@@
skamonkey@3743: @@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@ @@ @@@@@ @@@@@@@@
skamonkey@3743: @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@ @@@@ @@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@ @@@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @ @@@@@
skamonkey@3743: @@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@ @@@@ ////
skamonkey@3743: //////////// @@@@@@@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@@@ @@ @@@@@@@@@ @@@@ //// ////////////
skamonkey@3743: ///////////////// /// @@@@@ @@@@ @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@ @@@@ ///// /////// /////////
skamonkey@3743: ///////////////////// ///// @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@ @@@@@@@ @ @@@@ ////// /////// ///////////////
skamonkey@3743: ///////////////////////// /////// @@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@ @@@@ ////// //////// ////////////////////
skamonkey@3743: //////////////////////////// ////////// @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@ @@@ ////// ////////// ////////////////////////
skamonkey@3743: //////////////////// ////////// /////////// @@@@@@@@@@@@@@@@@ @@@@@@@@ @@@ @@@@@@ ////// //////////// //////////////////////////
skamonkey@3743: //////////////////// //////////// /////////// @@@@@@@@@@@@@@@@ @@@@ ///////////////////// /////////////////////////////
skamonkey@3743: ///////////////////// ////////////// ////// @@@@@@@@@ ///////////////////////////////////////////////////////////
skamonkey@3743: //////////////////// ///////////////////////////////////// ///////////////////////////////////////////////////////////////////////
skamonkey@3743: ///////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
skamonkey@3743: ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
skamonkey@3743: //////////////////////////////////////////////////////////////////////////////////////////////////////////////
skamonkey@3743: /////////////////////////////////////////////////////////////////////////////////////////
skamonkey@3743: //////////////////////////////////////////////////////////
skamonkey@3743: */
skamonkey@3743: #endif // USE_PROTOBUF_USERMESSAGES