core/smn_protobuf.cpp
author Nicholas Hastings <skamonkey@gmail.com>
Mon Apr 15 07:22:23 2013 -0400 (2013-04-15)
changeset 3895 dc3a6be3a306
parent 3893 87d9d7c50f73
child 3896 cb7537c1da4d
permissions -rw-r--r--
Fixed build.
skamonkey@3743
     1
/**
skamonkey@3743
     2
 * vim: set ts=4 :
skamonkey@3743
     3
 * =============================================================================
skamonkey@3743
     4
 * SourceMod
skamonkey@3743
     5
 * Copyright (C) 2013 AlliedModders LLC.  All rights reserved.
skamonkey@3743
     6
 * =============================================================================
skamonkey@3743
     7
 *
skamonkey@3743
     8
 * This program is free software; you can redistribute it and/or modify it under
skamonkey@3743
     9
 * the terms of the GNU General Public License, version 3.0, as published by the
skamonkey@3743
    10
 * Free Software Foundation.
skamonkey@3743
    11
 * 
skamonkey@3743
    12
 * This program is distributed in the hope that it will be useful, but WITHOUT
skamonkey@3743
    13
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
skamonkey@3743
    14
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
skamonkey@3743
    15
 * details.
skamonkey@3743
    16
 *
skamonkey@3743
    17
 * You should have received a copy of the GNU General Public License along with
skamonkey@3743
    18
 * this program.  If not, see <http://www.gnu.org/licenses/>.
skamonkey@3743
    19
 *
skamonkey@3743
    20
 * As a special exception, AlliedModders LLC gives you permission to link the
skamonkey@3743
    21
 * code of this program (as well as its derivative works) to "Half-Life 2," the
skamonkey@3743
    22
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
skamonkey@3743
    23
 * by the Valve Corporation.  You must obey the GNU General Public License in
skamonkey@3743
    24
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
skamonkey@3743
    25
 * this exception to all derivative works.  AlliedModders LLC defines further
skamonkey@3743
    26
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
skamonkey@3743
    27
 * or <http://www.sourcemod.net/license.php>.
skamonkey@3743
    28
 *
skamonkey@3743
    29
 * Version: $Id$
skamonkey@3743
    30
 */
skamonkey@3743
    31
dvander@3875
    32
#include "logic_bridge.h"
skamonkey@3895
    33
#include "UserMessages.h"
skamonkey@3743
    34
#include "UserMessagePBHelpers.h"
skamonkey@3743
    35
#include "smn_usermsgs.h"
skamonkey@3743
    36
skamonkey@3743
    37
// Assumes pbuf message handle is param 1, gets message as msg
skamonkey@3743
    38
#define GET_MSG_FROM_HANDLE_OR_ERR()                  \
skamonkey@3743
    39
	Handle_t hndl = static_cast<Handle_t>(params[1]); \
skamonkey@3743
    40
	HandleError herr;                                 \
skamonkey@3743
    41
	HandleSecurity sec;                               \
skamonkey@3743
    42
	SMProtobufMessage *msg;                           \
skamonkey@3743
    43
	                                                  \
skamonkey@3743
    44
	sec.pOwner = NULL;                                \
skamonkey@3743
    45
	sec.pIdentity = g_pCoreIdent;                     \
skamonkey@3743
    46
	                                                  \
dvander@3872
    47
	if ((herr=handlesys->ReadHandle(hndl, g_ProtobufType, &sec, (void **)&msg)) \
skamonkey@3743
    48
		!= HandleError_None)                          \
skamonkey@3743
    49
	{                                                 \
skamonkey@3743
    50
		return pCtx->ThrowNativeError("Invalid protobuf message handle %x (error %d)", hndl, herr); \
skamonkey@3743
    51
	}
skamonkey@3743
    52
skamonkey@3743
    53
// Assumes message field name is param 2, gets as strField
skamonkey@3743
    54
#define GET_FIELD_NAME_OR_ERR()                                           \
skamonkey@3743
    55
	int err;                                                              \
skamonkey@3743
    56
	char *strField;                                                       \
skamonkey@3743
    57
	if ((err=pCtx->LocalToString(params[2], &strField)) != SP_ERROR_NONE) \
skamonkey@3743
    58
	{                                                                     \
skamonkey@3743
    59
		pCtx->ThrowNativeErrorEx(err, NULL);                              \
skamonkey@3743
    60
		return 0;                                                         \
skamonkey@3743
    61
	}
skamonkey@3743
    62
skamonkey@3743
    63
static cell_t smn_PbReadInt(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
    64
{
skamonkey@3743
    65
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
    66
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
    67
skamonkey@3743
    68
	int ret;
skamonkey@3813
    69
skamonkey@3813
    70
	int index = params[0] >= 3 ? params[3] : -1;
skamonkey@3813
    71
	if (index < 0)
skamonkey@3743
    72
	{
skamonkey@3813
    73
		if (!msg->GetInt32OrUnsigned(strField, &ret))
skamonkey@3813
    74
		{
skamonkey@3813
    75
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
    76
		}
skamonkey@3813
    77
	}
skamonkey@3813
    78
	else
skamonkey@3813
    79
	{
skamonkey@3813
    80
		if (!msg->GetRepeatedInt32OrUnsigned(strField, index, &ret))
skamonkey@3813
    81
		{
skamonkey@3813
    82
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
    83
		}
skamonkey@3743
    84
	}
skamonkey@3743
    85
skamonkey@3743
    86
	return ret;
skamonkey@3743
    87
}
skamonkey@3743
    88
skamonkey@3743
    89
static cell_t smn_PbReadFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
    90
{
skamonkey@3743
    91
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
    92
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
    93
skamonkey@3743
    94
	float ret;
skamonkey@3813
    95
skamonkey@3813
    96
	int index = params[0] >= 3 ? params[3] : -1;
skamonkey@3813
    97
	if (index < 0)
skamonkey@3743
    98
	{
skamonkey@3813
    99
		if (!msg->GetFloatOrDouble(strField, &ret))
skamonkey@3813
   100
		{
skamonkey@3813
   101
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   102
		}
skamonkey@3813
   103
	}
skamonkey@3813
   104
	else
skamonkey@3813
   105
	{
skamonkey@3813
   106
		if (!msg->GetRepeatedFloatOrDouble(strField, index, &ret))
skamonkey@3813
   107
		{
skamonkey@3813
   108
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   109
		}
skamonkey@3743
   110
	}
skamonkey@3743
   111
skamonkey@3743
   112
	return sp_ftoc(ret);
skamonkey@3743
   113
}
skamonkey@3743
   114
skamonkey@3743
   115
static cell_t smn_PbReadBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   116
{
skamonkey@3743
   117
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   118
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   119
skamonkey@3743
   120
	bool ret;
skamonkey@3813
   121
skamonkey@3813
   122
	int index = params[0] >= 3 ? params[3] : -1;
skamonkey@3813
   123
	if (index < 0)
skamonkey@3743
   124
	{
skamonkey@3813
   125
		if (!msg->GetBool(strField, &ret))
skamonkey@3813
   126
		{
skamonkey@3813
   127
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   128
		}
skamonkey@3813
   129
	}
skamonkey@3813
   130
	else
skamonkey@3813
   131
	{
skamonkey@3813
   132
		if (!msg->GetRepeatedBool(strField, index, &ret))
skamonkey@3813
   133
		{
skamonkey@3813
   134
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   135
		} 
skamonkey@3743
   136
	}
skamonkey@3743
   137
skamonkey@3743
   138
	return ret ? 1 : 0;
skamonkey@3743
   139
}
skamonkey@3743
   140
skamonkey@3743
   141
static cell_t smn_PbReadString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   142
{
skamonkey@3743
   143
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   144
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   145
skamonkey@3743
   146
	char *buf;
skamonkey@3743
   147
	pCtx->LocalToPhysAddr(params[3], (cell_t **)&buf);
skamonkey@3743
   148
skamonkey@3813
   149
	int index = params[0] >= 5 ? params[5] : -1;
skamonkey@3813
   150
skamonkey@3813
   151
	if (index < 0)
skamonkey@3743
   152
	{
skamonkey@3813
   153
		if (!msg->GetString(strField, buf, params[4]))
skamonkey@3813
   154
		{
skamonkey@3813
   155
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   156
		}
skamonkey@3813
   157
	}
skamonkey@3813
   158
	else
skamonkey@3813
   159
	{
skamonkey@3813
   160
		if (!msg->GetRepeatedString(strField, index, buf, params[4]))
skamonkey@3813
   161
		{
skamonkey@3813
   162
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   163
		}
skamonkey@3743
   164
	}
skamonkey@3743
   165
skamonkey@3743
   166
	return 1;
skamonkey@3743
   167
}
skamonkey@3743
   168
skamonkey@3743
   169
static cell_t smn_PbReadColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   170
{
skamonkey@3743
   171
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   172
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   173
skamonkey@3743
   174
	cell_t *out;
skamonkey@3743
   175
	pCtx->LocalToPhysAddr(params[3], &out);
skamonkey@3743
   176
skamonkey@3743
   177
	Color clr;
skamonkey@3813
   178
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3813
   179
	if (index < 0)
skamonkey@3743
   180
	{
skamonkey@3813
   181
		if (!msg->GetColor(strField, &clr))
skamonkey@3813
   182
		{
skamonkey@3813
   183
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   184
		}
skamonkey@3813
   185
	}
skamonkey@3813
   186
	else
skamonkey@3813
   187
	{
skamonkey@3813
   188
		if (!msg->GetRepeatedColor(strField, index, &clr))
skamonkey@3813
   189
		{
skamonkey@3813
   190
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   191
		}
skamonkey@3743
   192
	}
skamonkey@3743
   193
skamonkey@3743
   194
	out[0] = clr.r();
skamonkey@3743
   195
	out[1] = clr.g();
skamonkey@3743
   196
	out[2] = clr.b();
skamonkey@3743
   197
	out[3] = clr.a();
skamonkey@3743
   198
skamonkey@3743
   199
	return 1;
skamonkey@3743
   200
}
skamonkey@3743
   201
skamonkey@3743
   202
static cell_t smn_PbReadAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   203
{
skamonkey@3743
   204
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   205
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   206
skamonkey@3743
   207
	cell_t *out;
skamonkey@3743
   208
	pCtx->LocalToPhysAddr(params[3], &out);
skamonkey@3743
   209
skamonkey@3743
   210
	QAngle ang;
skamonkey@3813
   211
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3813
   212
	if (index < 0)
skamonkey@3743
   213
	{
skamonkey@3813
   214
		if (!msg->GetQAngle(strField, &ang))
skamonkey@3813
   215
		{
skamonkey@3813
   216
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   217
		}
skamonkey@3813
   218
	}
skamonkey@3813
   219
	else
skamonkey@3813
   220
	{
skamonkey@3813
   221
		if (!msg->GetRepeatedQAngle(strField, index, &ang))
skamonkey@3813
   222
		{
skamonkey@3813
   223
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   224
		}
skamonkey@3743
   225
	}
skamonkey@3743
   226
skamonkey@3743
   227
	out[0] = sp_ftoc(ang.x);
skamonkey@3743
   228
	out[1] = sp_ftoc(ang.y);
skamonkey@3743
   229
	out[2] = sp_ftoc(ang.z);
skamonkey@3743
   230
skamonkey@3743
   231
	return 1;
skamonkey@3743
   232
}
skamonkey@3743
   233
skamonkey@3743
   234
static cell_t smn_PbReadVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   235
{
skamonkey@3743
   236
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   237
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   238
skamonkey@3743
   239
	cell_t *out;
skamonkey@3743
   240
	pCtx->LocalToPhysAddr(params[3], &out);
skamonkey@3743
   241
skamonkey@3743
   242
	Vector vec;
skamonkey@3813
   243
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3813
   244
	if (index < 0)
skamonkey@3743
   245
	{
skamonkey@3813
   246
		if (!msg->GetVector(strField, &vec))
skamonkey@3813
   247
		{
skamonkey@3813
   248
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   249
		}
skamonkey@3813
   250
	}
skamonkey@3813
   251
	else
skamonkey@3813
   252
	{
skamonkey@3813
   253
		if (!msg->GetRepeatedVector(strField, index, &vec))
skamonkey@3813
   254
		{
skamonkey@3813
   255
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   256
		}
skamonkey@3743
   257
	}
skamonkey@3743
   258
skamonkey@3743
   259
	out[0] = sp_ftoc(vec.x);
skamonkey@3743
   260
	out[1] = sp_ftoc(vec.y);
skamonkey@3743
   261
	out[2] = sp_ftoc(vec.z);
skamonkey@3743
   262
skamonkey@3743
   263
	return 1;
skamonkey@3743
   264
}
skamonkey@3743
   265
skamonkey@3743
   266
static cell_t smn_PbReadVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   267
{
skamonkey@3743
   268
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   269
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   270
skamonkey@3743
   271
	cell_t *out;
skamonkey@3743
   272
	pCtx->LocalToPhysAddr(params[3], &out);
skamonkey@3743
   273
skamonkey@3743
   274
	Vector2D vec;
skamonkey@3813
   275
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3813
   276
	if (index < 0)
skamonkey@3743
   277
	{
skamonkey@3813
   278
		if (!msg->GetVector2D(strField, &vec))
skamonkey@3813
   279
		{
skamonkey@3813
   280
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   281
		}
skamonkey@3813
   282
	}
skamonkey@3813
   283
	else
skamonkey@3813
   284
	{
skamonkey@3813
   285
		if (!msg->GetRepeatedVector2D(strField, index, &vec))
skamonkey@3813
   286
		{
skamonkey@3813
   287
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3813
   288
		}
skamonkey@3743
   289
	}
skamonkey@3743
   290
skamonkey@3743
   291
	out[0] = sp_ftoc(vec.x);
skamonkey@3743
   292
	out[1] = sp_ftoc(vec.y);
skamonkey@3743
   293
skamonkey@3743
   294
	return 1;
skamonkey@3743
   295
}
skamonkey@3743
   296
skamonkey@3743
   297
static cell_t smn_PbGetRepeatedFieldCount(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   298
{
skamonkey@3743
   299
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   300
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   301
skamonkey@3743
   302
	int cnt = msg->GetRepeatedFieldCount(strField);
skamonkey@3743
   303
	if (cnt == -1)
skamonkey@3743
   304
	{
skamonkey@3747
   305
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   306
	}
skamonkey@3743
   307
skamonkey@3743
   308
	return cnt;
skamonkey@3743
   309
}
skamonkey@3743
   310
skamonkey@3743
   311
static cell_t smn_PbReadRepeatedInt(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   312
{
skamonkey@3743
   313
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   314
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   315
skamonkey@3743
   316
	int ret;
skamonkey@3743
   317
	if (!msg->GetRepeatedInt32OrUnsigned(strField, params[3], &ret))
skamonkey@3743
   318
	{
skamonkey@3747
   319
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   320
	}
skamonkey@3743
   321
skamonkey@3743
   322
	return ret;
skamonkey@3743
   323
}
skamonkey@3743
   324
skamonkey@3743
   325
static cell_t smn_PbReadRepeatedFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   326
{
skamonkey@3743
   327
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   328
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   329
skamonkey@3743
   330
	float ret;
skamonkey@3743
   331
	if (!msg->GetRepeatedFloatOrDouble(strField, params[3], &ret))
skamonkey@3743
   332
	{
skamonkey@3747
   333
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   334
	}
skamonkey@3743
   335
skamonkey@3743
   336
	return sp_ftoc(ret);
skamonkey@3743
   337
}
skamonkey@3743
   338
skamonkey@3743
   339
static cell_t smn_PbReadRepeatedBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   340
{
skamonkey@3743
   341
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   342
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   343
skamonkey@3743
   344
	bool ret;
skamonkey@3743
   345
	if (!msg->GetRepeatedBool(strField, params[3], &ret))
skamonkey@3743
   346
	{
skamonkey@3747
   347
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   348
	}
skamonkey@3743
   349
skamonkey@3743
   350
	return ret ? 1 : 0;
skamonkey@3743
   351
}
skamonkey@3743
   352
skamonkey@3743
   353
static cell_t smn_PbReadRepeatedString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   354
{
skamonkey@3743
   355
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   356
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   357
skamonkey@3743
   358
	char *buf;
skamonkey@3743
   359
	pCtx->LocalToPhysAddr(params[4], (cell_t **)&buf);
skamonkey@3743
   360
skamonkey@3743
   361
	if (!msg->GetRepeatedString(strField, params[3], buf, params[5]))
skamonkey@3743
   362
	{
skamonkey@3747
   363
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   364
	}
skamonkey@3743
   365
skamonkey@3743
   366
	return 1;
skamonkey@3743
   367
}
skamonkey@3743
   368
skamonkey@3743
   369
static cell_t smn_PbReadRepeatedColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   370
{
skamonkey@3743
   371
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   372
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   373
skamonkey@3743
   374
	cell_t *out;
skamonkey@3743
   375
	pCtx->LocalToPhysAddr(params[4], &out);
skamonkey@3743
   376
skamonkey@3743
   377
	Color clr;
skamonkey@3743
   378
	if (!msg->GetRepeatedColor(strField, params[3], &clr))
skamonkey@3743
   379
	{
skamonkey@3747
   380
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   381
	}
skamonkey@3743
   382
skamonkey@3743
   383
	out[0] = clr.r();
skamonkey@3743
   384
	out[1] = clr.g();
skamonkey@3743
   385
	out[2] = clr.b();
skamonkey@3743
   386
	out[3] = clr.a();
skamonkey@3743
   387
skamonkey@3743
   388
	return 1;
skamonkey@3743
   389
}
skamonkey@3743
   390
skamonkey@3743
   391
static cell_t smn_PbReadRepeatedAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   392
{
skamonkey@3743
   393
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   394
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   395
skamonkey@3743
   396
	cell_t *out;
skamonkey@3743
   397
	pCtx->LocalToPhysAddr(params[4], &out);
skamonkey@3743
   398
skamonkey@3743
   399
	QAngle ang;
skamonkey@3743
   400
	if (!msg->GetRepeatedQAngle(strField, params[3], &ang))
skamonkey@3743
   401
	{
skamonkey@3747
   402
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   403
	}
skamonkey@3743
   404
skamonkey@3743
   405
	out[0] = sp_ftoc(ang.x);
skamonkey@3743
   406
	out[1] = sp_ftoc(ang.y);
skamonkey@3743
   407
	out[2] = sp_ftoc(ang.z);
skamonkey@3743
   408
skamonkey@3743
   409
	return 1;
skamonkey@3743
   410
}
skamonkey@3743
   411
skamonkey@3743
   412
static cell_t smn_PbReadRepeatedVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   413
{
skamonkey@3743
   414
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   415
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   416
skamonkey@3743
   417
	cell_t *out;
skamonkey@3743
   418
	pCtx->LocalToPhysAddr(params[4], &out);
skamonkey@3743
   419
skamonkey@3743
   420
	Vector vec;
skamonkey@3743
   421
	if (!msg->GetRepeatedVector(strField, params[3], &vec))
skamonkey@3743
   422
	{
skamonkey@3747
   423
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   424
	}
skamonkey@3743
   425
skamonkey@3743
   426
	out[0] = sp_ftoc(vec.x);
skamonkey@3743
   427
	out[1] = sp_ftoc(vec.y);
skamonkey@3743
   428
	out[2] = sp_ftoc(vec.z);
skamonkey@3743
   429
skamonkey@3743
   430
	return 1;
skamonkey@3743
   431
}
skamonkey@3743
   432
skamonkey@3743
   433
static cell_t smn_PbReadRepeatedVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   434
{
skamonkey@3743
   435
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   436
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   437
skamonkey@3743
   438
	cell_t *out;
skamonkey@3743
   439
	pCtx->LocalToPhysAddr(params[4], &out);
skamonkey@3743
   440
skamonkey@3743
   441
	Vector2D vec;
skamonkey@3743
   442
	if (!msg->GetRepeatedVector2D(strField, params[3], &vec))
skamonkey@3743
   443
	{
skamonkey@3747
   444
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   445
	}
skamonkey@3743
   446
skamonkey@3743
   447
	out[0] = sp_ftoc(vec.x);
skamonkey@3743
   448
	out[1] = sp_ftoc(vec.y);
skamonkey@3743
   449
skamonkey@3743
   450
	return 1;
skamonkey@3743
   451
}
skamonkey@3743
   452
skamonkey@3743
   453
static cell_t smn_PbSetInt(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   454
{
skamonkey@3743
   455
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   456
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   457
skamonkey@3814
   458
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   459
	if (index < 0)
skamonkey@3743
   460
	{
skamonkey@3814
   461
		if (!msg->SetInt32OrUnsigned(strField, params[3]))
skamonkey@3814
   462
		{
skamonkey@3814
   463
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   464
		}
skamonkey@3814
   465
	}
skamonkey@3814
   466
	else
skamonkey@3814
   467
	{
skamonkey@3814
   468
		if (!msg->SetRepeatedInt32OrUnsigned(strField, index, params[3]))
skamonkey@3814
   469
		{
skamonkey@3814
   470
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   471
		}
skamonkey@3743
   472
	}
skamonkey@3743
   473
skamonkey@3743
   474
	return 1;
skamonkey@3743
   475
}
skamonkey@3743
   476
skamonkey@3743
   477
static cell_t smn_PbSetFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   478
{
skamonkey@3743
   479
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   480
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   481
skamonkey@3814
   482
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   483
	if (index < 0)
skamonkey@3743
   484
	{
skamonkey@3814
   485
		if (!msg->SetFloatOrDouble(strField, sp_ctof(params[3])))
skamonkey@3814
   486
		{
skamonkey@3814
   487
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   488
		}
skamonkey@3814
   489
	}
skamonkey@3814
   490
	else
skamonkey@3814
   491
	{
skamonkey@3814
   492
		if (!msg->SetRepeatedFloatOrDouble(strField, index, sp_ctof(params[3])))
skamonkey@3814
   493
		{
skamonkey@3814
   494
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   495
		}
skamonkey@3743
   496
	}
skamonkey@3743
   497
skamonkey@3743
   498
	return 1;
skamonkey@3743
   499
}
skamonkey@3743
   500
skamonkey@3743
   501
static cell_t smn_PbSetBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   502
{
skamonkey@3743
   503
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   504
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   505
skamonkey@3743
   506
	bool value = (params[3] == 0 ? false : true);
skamonkey@3814
   507
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   508
	if (index < 0)
skamonkey@3743
   509
	{
skamonkey@3814
   510
		if (!msg->SetBool(strField, value))
skamonkey@3814
   511
		{
skamonkey@3814
   512
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   513
		}
skamonkey@3814
   514
	}
skamonkey@3814
   515
	else
skamonkey@3814
   516
	{
skamonkey@3814
   517
		if (!msg->SetRepeatedBool(strField, index, value))
skamonkey@3814
   518
		{
skamonkey@3814
   519
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   520
		}
skamonkey@3743
   521
	}
skamonkey@3743
   522
skamonkey@3743
   523
	return 1;
skamonkey@3743
   524
}
skamonkey@3743
   525
skamonkey@3743
   526
static cell_t smn_PbSetString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   527
{
skamonkey@3743
   528
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   529
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   530
skamonkey@3743
   531
	char *strValue;
skamonkey@3743
   532
	if ((err=pCtx->LocalToString(params[3], &strValue)) != SP_ERROR_NONE)
skamonkey@3743
   533
	{
skamonkey@3743
   534
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   535
		return 0;
skamonkey@3743
   536
	}
skamonkey@3743
   537
skamonkey@3814
   538
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   539
	if (index < 0)
skamonkey@3743
   540
	{
skamonkey@3814
   541
		if (!msg->SetString(strField, strValue))
skamonkey@3814
   542
		{
skamonkey@3814
   543
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   544
		}
skamonkey@3814
   545
	}
skamonkey@3814
   546
	else
skamonkey@3814
   547
	{
skamonkey@3814
   548
		if (!msg->SetRepeatedString(strField, index, strValue))
skamonkey@3814
   549
		{
skamonkey@3814
   550
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   551
		}
skamonkey@3743
   552
	}
skamonkey@3743
   553
skamonkey@3743
   554
	return 1;
skamonkey@3743
   555
}
skamonkey@3743
   556
skamonkey@3743
   557
static cell_t smn_PbSetColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   558
{
skamonkey@3743
   559
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   560
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   561
skamonkey@3743
   562
	cell_t *clrParams;
skamonkey@3743
   563
	if ((err=pCtx->LocalToPhysAddr(params[3], &clrParams)) != SP_ERROR_NONE)
skamonkey@3743
   564
	{
skamonkey@3743
   565
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   566
		return 0;
skamonkey@3743
   567
	}
skamonkey@3743
   568
skamonkey@3743
   569
	Color clr(
skamonkey@3743
   570
		clrParams[0],
skamonkey@3743
   571
		clrParams[1],
skamonkey@3743
   572
		clrParams[2],
skamonkey@3743
   573
		clrParams[3]);
skamonkey@3743
   574
skamonkey@3814
   575
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   576
	if (index < 0)
skamonkey@3743
   577
	{
skamonkey@3814
   578
		if (!msg->SetColor(strField, clr))
skamonkey@3814
   579
		{
skamonkey@3814
   580
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   581
		}
skamonkey@3814
   582
	}
skamonkey@3814
   583
	else
skamonkey@3814
   584
	{
skamonkey@3814
   585
		if (!msg->SetRepeatedColor(strField, index, clr))
skamonkey@3814
   586
		{
skamonkey@3814
   587
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   588
		}
skamonkey@3743
   589
	}
skamonkey@3743
   590
skamonkey@3743
   591
	return 1;
skamonkey@3743
   592
}
skamonkey@3743
   593
skamonkey@3743
   594
static cell_t smn_PbSetAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   595
{
skamonkey@3743
   596
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   597
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   598
skamonkey@3743
   599
	cell_t *angParams;
skamonkey@3743
   600
	if ((err=pCtx->LocalToPhysAddr(params[3], &angParams)) != SP_ERROR_NONE)
skamonkey@3743
   601
	{
skamonkey@3743
   602
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   603
		return 0;
skamonkey@3743
   604
	}
skamonkey@3743
   605
skamonkey@3743
   606
	QAngle ang(
skamonkey@3743
   607
		sp_ctof(angParams[0]),
skamonkey@3743
   608
		sp_ctof(angParams[1]),
skamonkey@3743
   609
		sp_ctof(angParams[2]));
skamonkey@3743
   610
skamonkey@3814
   611
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   612
	if (index < 0)
skamonkey@3743
   613
	{
skamonkey@3814
   614
		if (!msg->SetQAngle(strField, ang))
skamonkey@3814
   615
		{
skamonkey@3814
   616
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   617
		}
skamonkey@3814
   618
	}
skamonkey@3814
   619
	else
skamonkey@3814
   620
	{
skamonkey@3814
   621
		if (!msg->SetRepeatedQAngle(strField, index, ang))
skamonkey@3814
   622
		{
skamonkey@3814
   623
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   624
		}
skamonkey@3743
   625
	}
skamonkey@3743
   626
skamonkey@3743
   627
	return 1;
skamonkey@3743
   628
}
skamonkey@3743
   629
skamonkey@3743
   630
static cell_t smn_PbSetVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   631
{
skamonkey@3743
   632
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   633
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   634
skamonkey@3743
   635
	cell_t *vecParams;
skamonkey@3743
   636
	if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743
   637
	{
skamonkey@3743
   638
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   639
		return 0;
skamonkey@3743
   640
	}
skamonkey@3743
   641
skamonkey@3743
   642
	Vector vec(
skamonkey@3743
   643
		sp_ctof(vecParams[0]),
skamonkey@3743
   644
		sp_ctof(vecParams[1]),
skamonkey@3743
   645
		sp_ctof(vecParams[2]));
skamonkey@3743
   646
skamonkey@3814
   647
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   648
	if (index < 0)
skamonkey@3743
   649
	{
skamonkey@3814
   650
		if (!msg->SetVector(strField, vec))
skamonkey@3814
   651
		{
skamonkey@3814
   652
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   653
		}
skamonkey@3814
   654
	}
skamonkey@3814
   655
	else
skamonkey@3814
   656
	{
skamonkey@3814
   657
		if (!msg->SetRepeatedVector(strField, index, vec))
skamonkey@3814
   658
		{
skamonkey@3814
   659
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   660
		}
skamonkey@3743
   661
	}
skamonkey@3743
   662
skamonkey@3743
   663
	return 1;
skamonkey@3743
   664
}
skamonkey@3743
   665
skamonkey@3743
   666
static cell_t smn_PbSetVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   667
{
skamonkey@3743
   668
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   669
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   670
skamonkey@3743
   671
	cell_t *vecParams;
skamonkey@3743
   672
	if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743
   673
	{
skamonkey@3743
   674
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   675
		return 0;
skamonkey@3743
   676
	}
skamonkey@3743
   677
skamonkey@3743
   678
	Vector2D vec(
skamonkey@3743
   679
		sp_ctof(vecParams[0]),
skamonkey@3743
   680
		sp_ctof(vecParams[1]));
skamonkey@3743
   681
skamonkey@3814
   682
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   683
	if (index < 0)
skamonkey@3743
   684
	{
skamonkey@3814
   685
		if (!msg->SetVector2D(strField, vec))
skamonkey@3814
   686
		{
skamonkey@3814
   687
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   688
		}
skamonkey@3814
   689
	}
skamonkey@3814
   690
	else
skamonkey@3814
   691
	{
skamonkey@3814
   692
		if (!msg->SetRepeatedVector2D(strField, index, vec))
skamonkey@3814
   693
		{
skamonkey@3814
   694
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   695
		}
skamonkey@3743
   696
	}
skamonkey@3743
   697
skamonkey@3743
   698
	return 1;
skamonkey@3743
   699
}
skamonkey@3743
   700
skamonkey@3743
   701
static cell_t smn_PbAddInt(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   702
{
skamonkey@3743
   703
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   704
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   705
skamonkey@3743
   706
	if (!msg->AddInt32OrUnsigned(strField, params[3]))
skamonkey@3743
   707
	{
skamonkey@3747
   708
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   709
	}
skamonkey@3743
   710
skamonkey@3743
   711
	return 1;
skamonkey@3743
   712
}
skamonkey@3743
   713
skamonkey@3743
   714
static cell_t smn_PbAddFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   715
{
skamonkey@3743
   716
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   717
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   718
skamonkey@3743
   719
	if (!msg->AddFloatOrDouble(strField, sp_ctof(params[3])))
skamonkey@3743
   720
	{
skamonkey@3747
   721
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   722
	}
skamonkey@3743
   723
skamonkey@3743
   724
	return 1;
skamonkey@3743
   725
}
skamonkey@3743
   726
skamonkey@3743
   727
static cell_t smn_PbAddBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   728
{
skamonkey@3743
   729
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   730
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   731
skamonkey@3743
   732
	bool value = (params[3] == 0 ? false : true);
skamonkey@3743
   733
	if (!msg->AddBool(strField, value))
skamonkey@3743
   734
	{
skamonkey@3747
   735
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   736
	}
skamonkey@3743
   737
skamonkey@3743
   738
	return 1;
skamonkey@3743
   739
}
skamonkey@3743
   740
skamonkey@3743
   741
static cell_t smn_PbAddString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   742
{
skamonkey@3743
   743
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   744
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   745
skamonkey@3743
   746
	char *strValue;
skamonkey@3743
   747
	if ((err=pCtx->LocalToString(params[3], &strValue)) != SP_ERROR_NONE)
skamonkey@3743
   748
	{
skamonkey@3743
   749
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   750
		return 0;
skamonkey@3743
   751
	}
skamonkey@3743
   752
skamonkey@3743
   753
	if (!msg->AddString(strField, strValue))
skamonkey@3743
   754
	{
skamonkey@3747
   755
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   756
	}
skamonkey@3743
   757
skamonkey@3743
   758
	return 1;
skamonkey@3743
   759
}
skamonkey@3743
   760
skamonkey@3743
   761
static cell_t smn_PbAddColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   762
{
skamonkey@3743
   763
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   764
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   765
skamonkey@3743
   766
	cell_t *clrParams;
skamonkey@3743
   767
	if ((err=pCtx->LocalToPhysAddr(params[3], &clrParams)) != SP_ERROR_NONE)
skamonkey@3743
   768
	{
skamonkey@3743
   769
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   770
		return 0;
skamonkey@3743
   771
	}
skamonkey@3743
   772
skamonkey@3743
   773
	Color clr(
skamonkey@3743
   774
		clrParams[0],
skamonkey@3743
   775
		clrParams[1],
skamonkey@3743
   776
		clrParams[2],
skamonkey@3743
   777
		clrParams[3]);
skamonkey@3743
   778
skamonkey@3743
   779
	if (!msg->AddColor(strField, clr))
skamonkey@3743
   780
	{
skamonkey@3747
   781
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   782
	}
skamonkey@3743
   783
skamonkey@3743
   784
	return 1;
skamonkey@3743
   785
}
skamonkey@3743
   786
skamonkey@3743
   787
static cell_t smn_PbAddAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   788
{
skamonkey@3743
   789
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   790
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   791
skamonkey@3743
   792
	cell_t *angParams;
skamonkey@3743
   793
	if ((err=pCtx->LocalToPhysAddr(params[3], &angParams)) != SP_ERROR_NONE)
skamonkey@3743
   794
	{
skamonkey@3743
   795
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   796
		return 0;
skamonkey@3743
   797
	}
skamonkey@3743
   798
skamonkey@3743
   799
	QAngle ang(
skamonkey@3743
   800
		sp_ctof(angParams[0]),
skamonkey@3743
   801
		sp_ctof(angParams[1]),
skamonkey@3743
   802
		sp_ctof(angParams[2]));
skamonkey@3743
   803
skamonkey@3743
   804
	if (!msg->AddQAngle(strField, ang))
skamonkey@3743
   805
	{
skamonkey@3747
   806
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   807
	}
skamonkey@3743
   808
skamonkey@3743
   809
	return 1;
skamonkey@3743
   810
}
skamonkey@3743
   811
skamonkey@3743
   812
static cell_t smn_PbAddVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   813
{
skamonkey@3743
   814
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   815
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   816
skamonkey@3743
   817
	cell_t *vecParams;
skamonkey@3743
   818
	if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743
   819
	{
skamonkey@3743
   820
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   821
		return 0;
skamonkey@3743
   822
	}
skamonkey@3743
   823
skamonkey@3743
   824
	Vector vec(
skamonkey@3743
   825
		sp_ctof(vecParams[0]),
skamonkey@3743
   826
		sp_ctof(vecParams[1]),
skamonkey@3743
   827
		sp_ctof(vecParams[2]));
skamonkey@3743
   828
skamonkey@3743
   829
	if (!msg->AddVector(strField, vec))
skamonkey@3743
   830
	{
skamonkey@3747
   831
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   832
	}
skamonkey@3743
   833
skamonkey@3743
   834
	return 1;
skamonkey@3743
   835
}
skamonkey@3743
   836
skamonkey@3743
   837
static cell_t smn_PbAddVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   838
{
skamonkey@3743
   839
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   840
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   841
skamonkey@3743
   842
	cell_t *vecParams;
skamonkey@3743
   843
	if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743
   844
	{
skamonkey@3743
   845
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   846
		return 0;
skamonkey@3743
   847
	}
skamonkey@3743
   848
skamonkey@3743
   849
	Vector2D vec(
skamonkey@3743
   850
		sp_ctof(vecParams[0]),
skamonkey@3743
   851
		sp_ctof(vecParams[1]));
skamonkey@3743
   852
skamonkey@3743
   853
	if (!msg->AddVector2D(strField, vec))
skamonkey@3743
   854
	{
skamonkey@3747
   855
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   856
	}
skamonkey@3743
   857
skamonkey@3743
   858
	return 1;
skamonkey@3743
   859
}
skamonkey@3743
   860
skamonkey@3743
   861
static cell_t smn_PbReadMessage(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   862
{
skamonkey@3743
   863
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   864
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   865
skamonkey@3743
   866
	protobuf::Message *innerMsg;
skamonkey@3743
   867
	if (!msg->GetMessage(strField, &innerMsg))
skamonkey@3743
   868
	{
skamonkey@3747
   869
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   870
	}
skamonkey@3743
   871
dvander@3872
   872
	Handle_t outHndl = handlesys->CreateHandle(g_ProtobufType, new SMProtobufMessage(innerMsg), NULL, g_pCoreIdent, NULL);
skamonkey@3743
   873
	msg->AddChildHandle(outHndl);
skamonkey@3743
   874
skamonkey@3743
   875
	return outHndl;
skamonkey@3743
   876
}
skamonkey@3743
   877
skamonkey@3743
   878
static cell_t smn_PbReadRepeatedMessage(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   879
{
skamonkey@3743
   880
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   881
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   882
skamonkey@3743
   883
	const protobuf::Message *innerMsg;
skamonkey@3743
   884
	if (!msg->GetRepeatedMessage(strField, params[3], &innerMsg))
skamonkey@3743
   885
	{
skamonkey@3747
   886
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   887
	}
skamonkey@3743
   888
dvander@3872
   889
	Handle_t outHndl = handlesys->CreateHandle(g_ProtobufType, new SMProtobufMessage(const_cast<protobuf::Message *>(innerMsg)), NULL, g_pCoreIdent, NULL);
skamonkey@3743
   890
	msg->AddChildHandle(outHndl);
skamonkey@3743
   891
skamonkey@3743
   892
	return outHndl;
skamonkey@3743
   893
}
skamonkey@3743
   894
skamonkey@3743
   895
static cell_t smn_PbAddMessage(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   896
{
skamonkey@3743
   897
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   898
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   899
skamonkey@3743
   900
	protobuf::Message *innerMsg;
skamonkey@3743
   901
	if (!msg->AddMessage(strField, &innerMsg))
skamonkey@3743
   902
	{
skamonkey@3747
   903
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   904
	}
skamonkey@3743
   905
dvander@3872
   906
	Handle_t outHndl = handlesys->CreateHandle(g_ProtobufType, new SMProtobufMessage(innerMsg), NULL, g_pCoreIdent, NULL);
skamonkey@3743
   907
	msg->AddChildHandle(outHndl);
skamonkey@3743
   908
skamonkey@3743
   909
	return outHndl;
skamonkey@3743
   910
}
skamonkey@3743
   911
skamonkey@3743
   912
REGISTER_NATIVES(protobufnatives)
skamonkey@3743
   913
{
skamonkey@3743
   914
	{"PbReadInt",					smn_PbReadInt},
skamonkey@3743
   915
	{"PbReadFloat",					smn_PbReadFloat},
skamonkey@3743
   916
	{"PbReadBool",					smn_PbReadBool},
skamonkey@3743
   917
	{"PbReadString",				smn_PbReadString},
skamonkey@3743
   918
	{"PbReadColor",					smn_PbReadColor},
skamonkey@3743
   919
	{"PbReadAngle",					smn_PbReadAngle},
skamonkey@3743
   920
	{"PbReadVector",				smn_PbReadVector},
skamonkey@3743
   921
	{"PbReadVector2D",				smn_PbReadVector2D},
skamonkey@3743
   922
	{"PbGetRepeatedFieldCount",		smn_PbGetRepeatedFieldCount},
skamonkey@3743
   923
	{"PbReadRepeatedInt",			smn_PbReadRepeatedInt},
skamonkey@3743
   924
	{"PbReadRepeatedFloat",			smn_PbReadRepeatedFloat},
skamonkey@3743
   925
	{"PbReadRepeatedBool",			smn_PbReadRepeatedBool},
skamonkey@3743
   926
	{"PbReadRepeatedString",		smn_PbReadRepeatedString},
skamonkey@3743
   927
	{"PbReadRepeatedColor",			smn_PbReadRepeatedColor},
skamonkey@3743
   928
	{"PbReadRepeatedAngle",			smn_PbReadRepeatedAngle},
skamonkey@3743
   929
	{"PbReadRepeatedVector",		smn_PbReadRepeatedVector},
skamonkey@3743
   930
	{"PbReadRepeatedVector2D",		smn_PbReadRepeatedVector2D},
skamonkey@3743
   931
	{"PbSetInt",					smn_PbSetInt},
skamonkey@3743
   932
	{"PbSetFloat",					smn_PbSetFloat},
skamonkey@3743
   933
	{"PbSetBool",					smn_PbSetBool},
skamonkey@3743
   934
	{"PbSetString",					smn_PbSetString},
skamonkey@3743
   935
	{"PbSetColor",					smn_PbSetColor},
skamonkey@3743
   936
	{"PbSetAngle",					smn_PbSetAngle},
skamonkey@3743
   937
	{"PbSetVector",					smn_PbSetVector},
skamonkey@3743
   938
	{"PbSetVector2D",				smn_PbSetVector2D},
skamonkey@3743
   939
	{"PbAddInt",					smn_PbAddInt},
skamonkey@3743
   940
	{"PbAddFloat",					smn_PbAddFloat},
skamonkey@3743
   941
	{"PbAddBool",					smn_PbAddBool},
skamonkey@3743
   942
	{"PbAddString",					smn_PbAddString},
skamonkey@3743
   943
	{"PbAddColor",					smn_PbAddColor},
skamonkey@3743
   944
	{"PbAddAngle",					smn_PbAddAngle},
skamonkey@3743
   945
	{"PbAddVector",					smn_PbAddVector},
skamonkey@3743
   946
	{"PbAddVector2D",				smn_PbAddVector2D},
skamonkey@3743
   947
	{"PbReadMessage",				smn_PbReadMessage},
skamonkey@3743
   948
	{"PbReadRepeatedMessage",		smn_PbReadRepeatedMessage},
skamonkey@3743
   949
	{"PbAddMessage",				smn_PbAddMessage},
skamonkey@3743
   950
	{NULL,							NULL}
skamonkey@3743
   951
};
skamonkey@3743
   952
skamonkey@3743
   953
/*
skamonkey@3743
   954
                                       @@@@@@@@@@@@@ 
skamonkey@3743
   955
                                     @@@@@@@@@@@@@@@@@@
skamonkey@3743
   956
                                     @@@@@@@@@@@@@@@@@@@@@      
skamonkey@3743
   957
                                    @@@@@@@@@@@@@@@@@@@@@@@@               
skamonkey@3743
   958
                                   @@@@@@@@    @@@@@@@@@@@@@
skamonkey@3743
   959
                                   @@@@@@@@    @@@@@@@@@@@@@          
skamonkey@3743
   960
                                      @@@@@@  @@@@@@@@@@@@@@@             
skamonkey@3743
   961
                                 0000   @@@@@@@@@@@@@@@@@@@@@                
skamonkey@3743
   962
                              000000000   @@@@@@@@@@@@@@@@@@@           
skamonkey@3743
   963
                       0000000000000000000   @@@@@@@@@@@@@@@          
skamonkey@3743
   964
                       00000000000000000000  @@@@@@@@@@@@@@@            
skamonkey@3743
   965
                            000000000       @@@@@@@@@@@@@@@           
skamonkey@3743
   966
                                         @@@@@@@@@@@@@@@@@               
skamonkey@3743
   967
                                        @@@@@@@@@@@@@@@@@@      
skamonkey@3743
   968
                                       @@@@@@@@@@@@@@@@@@       
skamonkey@3743
   969
                                       @@@@@@@@@@@@@@@@@@                                                                @@@@
skamonkey@3743
   970
                                      @@@@@@@@@@@@@@@@@@@                                                             @@@@@@@  
skamonkey@3743
   971
                                     @@@   @@@@    @@@                                                             @@@@@@@@@@     
skamonkey@3743
   972
                                    @@@@@@@@@@@@@@@@@@@@@@@@@@                                                 @@@@@@@@@@  @@@@@    
skamonkey@3743
   973
                                   @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@   @@@@@@@@                                @@  @@@@@@@@@@@@@@@ 
skamonkey@3743
   974
                                  @@@@@@@@@@@@@@@@@@@@@@@@@@ @@   @@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@@@@@@  @@  @@@@@@@@@        
skamonkey@3743
   975
                                  @@@@@@@@@@@@@@@@@@@@@@@ @@@@   @@@@@@@@@@@@@@@@  @@@@@@@@@@@@@@@@@@@@@@@@@  @@  @@@@@@@@@@@@@
skamonkey@3743
   976
                                  @@@@@@@@@@@@@@@@@@@@@ @@@@    @@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@@@@@@@  @@@  @@@@@@@@@@@@     
skamonkey@3743
   977
                                 @@@@@@@@@@@@@@@@@@@@ @@@@@@   @@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@@   @@@@  @@@@@@@@@@@     
skamonkey@3743
   978
                                 @@@@@@@@@@@@@@@@@  @@@@@@    @@@@@@@@@@@@@@@@@@@  @@@@@@@@@@@@@@@@@@@      @@@@@ @@@@@@      
skamonkey@3743
   979
                                 @@@@@@@@@       @@@@@@@@@   @@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@     @@  @@@@@ @@@@@@@@   
skamonkey@3743
   980
                                           @@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@   @@@@@@  @@@@  @@@@@@  
skamonkey@3743
   981
                                  @@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@@@@@@  @@@@@@         @@@@@@  @@@@@@
skamonkey@3743
   982
                                 @@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@@@@@@              @@@@@@@@   @@@@
skamonkey@3743
   983
                                  @@@@@@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@       @@@@@@@@@@@@@@  @  @@@@@  
skamonkey@3743
   984
                                   @@@@@@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@    @@@@@  @@@@    ////
skamonkey@3743
   985
                     ////////////   @@@@@@@@@@@ @@@@@@       @@@@@@@@@@@@@@@@@@@@  @@      @@@@@@@@@  @@@@    //// //////////// 
skamonkey@3743
   986
              ///////////////// ///    @@@@@          @@@@    @@@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@     @@@@   ///// ///////  /////////    
skamonkey@3743
   987
        /////////////////////  /////         @@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@   @@@@@@@      @  @@@@    ////// ///////  ///////////////
skamonkey@3743
   988
    ///////////////////////// ///////    @@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@           @@@@@   @@@@    //////  ////////  //////////////////// 
skamonkey@3743
   989
 ////////////////////////////  //////////   @@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@   @@@@@@@@@     @@@      //////  ////////// ////////////////////////
skamonkey@3743
   990
//////////////////// //////////  ///////////   @@@@@@@@@@@@@@@@@     @@@@@@@@   @@@      @@@@@@      ////// ////////////  //////////////////////////
skamonkey@3743
   991
//////////////////// ////////////   ///////////   @@@@@@@@@@@@@@@@               @@@@            /////////////////////  /////////////////////////////
skamonkey@3743
   992
/////////////////////  //////////////       //////              @@@@@@@@@                ///////////////////////////////////////////////////////////
skamonkey@3743
   993
   ////////////////////    /////////////////////////////////////          ///////////////////////////////////////////////////////////////////////
skamonkey@3743
   994
       /////////////////////     ////////////////////////////////////////////////////////////////////////////////////////////////////////////  
skamonkey@3743
   995
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
skamonkey@3743
   996
                   //////////////////////////////////////////////////////////////////////////////////////////////////////////////   
skamonkey@3743
   997
                             ///////////////////////////////////////////////////////////////////////////////////////// 
skamonkey@3743
   998
                                             //////////////////////////////////////////////////////////
skamonkey@3743
   999
*/