core/smn_protobuf.cpp
author Ruben Gonzalez <drifter01620@gmail.com>
Thu Feb 13 12:12:36 2014 -0500 (2014-02-13)
changeset 4251 9290c598d3cb
parent 3898 6b8333229344
child 4293 f61ae385f12e
permissions -rw-r--r--
Update CSSDM gdc patch bytes (NPOTB)
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@3896
    73
		if (!msg->GetInt32OrUnsignedOrEnum(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@3896
    80
		if (!msg->GetRepeatedInt32OrUnsignedOrEnum(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_PbSetInt(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@3814
   316
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   317
	if (index < 0)
skamonkey@3743
   318
	{
skamonkey@3896
   319
		if (!msg->SetInt32OrUnsignedOrEnum(strField, params[3]))
skamonkey@3814
   320
		{
skamonkey@3814
   321
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   322
		}
skamonkey@3814
   323
	}
skamonkey@3814
   324
	else
skamonkey@3814
   325
	{
skamonkey@3896
   326
		if (!msg->SetRepeatedInt32OrUnsignedOrEnum(strField, index, params[3]))
skamonkey@3814
   327
		{
skamonkey@3814
   328
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   329
		}
skamonkey@3743
   330
	}
skamonkey@3743
   331
skamonkey@3743
   332
	return 1;
skamonkey@3743
   333
}
skamonkey@3743
   334
skamonkey@3743
   335
static cell_t smn_PbSetFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   336
{
skamonkey@3743
   337
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   338
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   339
skamonkey@3814
   340
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   341
	if (index < 0)
skamonkey@3743
   342
	{
skamonkey@3814
   343
		if (!msg->SetFloatOrDouble(strField, sp_ctof(params[3])))
skamonkey@3814
   344
		{
skamonkey@3814
   345
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   346
		}
skamonkey@3814
   347
	}
skamonkey@3814
   348
	else
skamonkey@3814
   349
	{
skamonkey@3814
   350
		if (!msg->SetRepeatedFloatOrDouble(strField, index, sp_ctof(params[3])))
skamonkey@3814
   351
		{
skamonkey@3814
   352
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   353
		}
skamonkey@3743
   354
	}
skamonkey@3743
   355
skamonkey@3743
   356
	return 1;
skamonkey@3743
   357
}
skamonkey@3743
   358
skamonkey@3743
   359
static cell_t smn_PbSetBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   360
{
skamonkey@3743
   361
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   362
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   363
skamonkey@3743
   364
	bool value = (params[3] == 0 ? false : true);
skamonkey@3814
   365
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   366
	if (index < 0)
skamonkey@3743
   367
	{
skamonkey@3814
   368
		if (!msg->SetBool(strField, value))
skamonkey@3814
   369
		{
skamonkey@3814
   370
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   371
		}
skamonkey@3814
   372
	}
skamonkey@3814
   373
	else
skamonkey@3814
   374
	{
skamonkey@3814
   375
		if (!msg->SetRepeatedBool(strField, index, value))
skamonkey@3814
   376
		{
skamonkey@3814
   377
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   378
		}
skamonkey@3743
   379
	}
skamonkey@3743
   380
skamonkey@3743
   381
	return 1;
skamonkey@3743
   382
}
skamonkey@3743
   383
skamonkey@3743
   384
static cell_t smn_PbSetString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   385
{
skamonkey@3743
   386
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   387
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   388
skamonkey@3743
   389
	char *strValue;
skamonkey@3743
   390
	if ((err=pCtx->LocalToString(params[3], &strValue)) != SP_ERROR_NONE)
skamonkey@3743
   391
	{
skamonkey@3743
   392
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   393
		return 0;
skamonkey@3743
   394
	}
skamonkey@3743
   395
skamonkey@3814
   396
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   397
	if (index < 0)
skamonkey@3743
   398
	{
skamonkey@3814
   399
		if (!msg->SetString(strField, strValue))
skamonkey@3814
   400
		{
skamonkey@3814
   401
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   402
		}
skamonkey@3814
   403
	}
skamonkey@3814
   404
	else
skamonkey@3814
   405
	{
skamonkey@3814
   406
		if (!msg->SetRepeatedString(strField, index, strValue))
skamonkey@3814
   407
		{
skamonkey@3814
   408
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   409
		}
skamonkey@3743
   410
	}
skamonkey@3743
   411
skamonkey@3743
   412
	return 1;
skamonkey@3743
   413
}
skamonkey@3743
   414
skamonkey@3743
   415
static cell_t smn_PbSetColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   416
{
skamonkey@3743
   417
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   418
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   419
skamonkey@3743
   420
	cell_t *clrParams;
skamonkey@3743
   421
	if ((err=pCtx->LocalToPhysAddr(params[3], &clrParams)) != SP_ERROR_NONE)
skamonkey@3743
   422
	{
skamonkey@3743
   423
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   424
		return 0;
skamonkey@3743
   425
	}
skamonkey@3743
   426
skamonkey@3743
   427
	Color clr(
skamonkey@3743
   428
		clrParams[0],
skamonkey@3743
   429
		clrParams[1],
skamonkey@3743
   430
		clrParams[2],
skamonkey@3743
   431
		clrParams[3]);
skamonkey@3743
   432
skamonkey@3814
   433
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   434
	if (index < 0)
skamonkey@3743
   435
	{
skamonkey@3814
   436
		if (!msg->SetColor(strField, clr))
skamonkey@3814
   437
		{
skamonkey@3814
   438
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   439
		}
skamonkey@3814
   440
	}
skamonkey@3814
   441
	else
skamonkey@3814
   442
	{
skamonkey@3814
   443
		if (!msg->SetRepeatedColor(strField, index, clr))
skamonkey@3814
   444
		{
skamonkey@3814
   445
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   446
		}
skamonkey@3743
   447
	}
skamonkey@3743
   448
skamonkey@3743
   449
	return 1;
skamonkey@3743
   450
}
skamonkey@3743
   451
skamonkey@3743
   452
static cell_t smn_PbSetAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   453
{
skamonkey@3743
   454
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   455
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   456
skamonkey@3743
   457
	cell_t *angParams;
skamonkey@3743
   458
	if ((err=pCtx->LocalToPhysAddr(params[3], &angParams)) != SP_ERROR_NONE)
skamonkey@3743
   459
	{
skamonkey@3743
   460
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   461
		return 0;
skamonkey@3743
   462
	}
skamonkey@3743
   463
skamonkey@3743
   464
	QAngle ang(
skamonkey@3743
   465
		sp_ctof(angParams[0]),
skamonkey@3743
   466
		sp_ctof(angParams[1]),
skamonkey@3743
   467
		sp_ctof(angParams[2]));
skamonkey@3743
   468
skamonkey@3814
   469
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   470
	if (index < 0)
skamonkey@3743
   471
	{
skamonkey@3814
   472
		if (!msg->SetQAngle(strField, ang))
skamonkey@3814
   473
		{
skamonkey@3814
   474
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   475
		}
skamonkey@3814
   476
	}
skamonkey@3814
   477
	else
skamonkey@3814
   478
	{
skamonkey@3814
   479
		if (!msg->SetRepeatedQAngle(strField, index, ang))
skamonkey@3814
   480
		{
skamonkey@3814
   481
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   482
		}
skamonkey@3743
   483
	}
skamonkey@3743
   484
skamonkey@3743
   485
	return 1;
skamonkey@3743
   486
}
skamonkey@3743
   487
skamonkey@3743
   488
static cell_t smn_PbSetVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   489
{
skamonkey@3743
   490
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   491
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   492
skamonkey@3743
   493
	cell_t *vecParams;
skamonkey@3743
   494
	if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743
   495
	{
skamonkey@3743
   496
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   497
		return 0;
skamonkey@3743
   498
	}
skamonkey@3743
   499
skamonkey@3743
   500
	Vector vec(
skamonkey@3743
   501
		sp_ctof(vecParams[0]),
skamonkey@3743
   502
		sp_ctof(vecParams[1]),
skamonkey@3743
   503
		sp_ctof(vecParams[2]));
skamonkey@3743
   504
skamonkey@3814
   505
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   506
	if (index < 0)
skamonkey@3743
   507
	{
skamonkey@3814
   508
		if (!msg->SetVector(strField, vec))
skamonkey@3814
   509
		{
skamonkey@3814
   510
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   511
		}
skamonkey@3814
   512
	}
skamonkey@3814
   513
	else
skamonkey@3814
   514
	{
skamonkey@3814
   515
		if (!msg->SetRepeatedVector(strField, index, vec))
skamonkey@3814
   516
		{
skamonkey@3814
   517
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   518
		}
skamonkey@3743
   519
	}
skamonkey@3743
   520
skamonkey@3743
   521
	return 1;
skamonkey@3743
   522
}
skamonkey@3743
   523
skamonkey@3743
   524
static cell_t smn_PbSetVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   525
{
skamonkey@3743
   526
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   527
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   528
skamonkey@3743
   529
	cell_t *vecParams;
skamonkey@3743
   530
	if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743
   531
	{
skamonkey@3743
   532
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   533
		return 0;
skamonkey@3743
   534
	}
skamonkey@3743
   535
skamonkey@3743
   536
	Vector2D vec(
skamonkey@3743
   537
		sp_ctof(vecParams[0]),
skamonkey@3743
   538
		sp_ctof(vecParams[1]));
skamonkey@3743
   539
skamonkey@3814
   540
	int index = params[0] >= 4 ? params[4] : -1;
skamonkey@3814
   541
	if (index < 0)
skamonkey@3743
   542
	{
skamonkey@3814
   543
		if (!msg->SetVector2D(strField, vec))
skamonkey@3814
   544
		{
skamonkey@3814
   545
			return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   546
		}
skamonkey@3814
   547
	}
skamonkey@3814
   548
	else
skamonkey@3814
   549
	{
skamonkey@3814
   550
		if (!msg->SetRepeatedVector2D(strField, index, vec))
skamonkey@3814
   551
		{
skamonkey@3814
   552
			return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, index, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3814
   553
		}
skamonkey@3743
   554
	}
skamonkey@3743
   555
skamonkey@3743
   556
	return 1;
skamonkey@3743
   557
}
skamonkey@3743
   558
skamonkey@3743
   559
static cell_t smn_PbAddInt(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   560
{
skamonkey@3743
   561
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   562
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   563
skamonkey@3896
   564
	if (!msg->AddInt32OrUnsignedOrEnum(strField, params[3]))
skamonkey@3743
   565
	{
skamonkey@3747
   566
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   567
	}
skamonkey@3743
   568
skamonkey@3743
   569
	return 1;
skamonkey@3743
   570
}
skamonkey@3743
   571
skamonkey@3743
   572
static cell_t smn_PbAddFloat(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   573
{
skamonkey@3743
   574
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   575
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   576
skamonkey@3743
   577
	if (!msg->AddFloatOrDouble(strField, sp_ctof(params[3])))
skamonkey@3743
   578
	{
skamonkey@3747
   579
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   580
	}
skamonkey@3743
   581
skamonkey@3743
   582
	return 1;
skamonkey@3743
   583
}
skamonkey@3743
   584
skamonkey@3743
   585
static cell_t smn_PbAddBool(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   586
{
skamonkey@3743
   587
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   588
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   589
skamonkey@3743
   590
	bool value = (params[3] == 0 ? false : true);
skamonkey@3743
   591
	if (!msg->AddBool(strField, value))
skamonkey@3743
   592
	{
skamonkey@3747
   593
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   594
	}
skamonkey@3743
   595
skamonkey@3743
   596
	return 1;
skamonkey@3743
   597
}
skamonkey@3743
   598
skamonkey@3743
   599
static cell_t smn_PbAddString(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   600
{
skamonkey@3743
   601
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   602
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   603
skamonkey@3743
   604
	char *strValue;
skamonkey@3743
   605
	if ((err=pCtx->LocalToString(params[3], &strValue)) != SP_ERROR_NONE)
skamonkey@3743
   606
	{
skamonkey@3743
   607
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   608
		return 0;
skamonkey@3743
   609
	}
skamonkey@3743
   610
skamonkey@3743
   611
	if (!msg->AddString(strField, strValue))
skamonkey@3743
   612
	{
skamonkey@3747
   613
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   614
	}
skamonkey@3743
   615
skamonkey@3743
   616
	return 1;
skamonkey@3743
   617
}
skamonkey@3743
   618
skamonkey@3743
   619
static cell_t smn_PbAddColor(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   620
{
skamonkey@3743
   621
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   622
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   623
skamonkey@3743
   624
	cell_t *clrParams;
skamonkey@3743
   625
	if ((err=pCtx->LocalToPhysAddr(params[3], &clrParams)) != SP_ERROR_NONE)
skamonkey@3743
   626
	{
skamonkey@3743
   627
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   628
		return 0;
skamonkey@3743
   629
	}
skamonkey@3743
   630
skamonkey@3743
   631
	Color clr(
skamonkey@3743
   632
		clrParams[0],
skamonkey@3743
   633
		clrParams[1],
skamonkey@3743
   634
		clrParams[2],
skamonkey@3743
   635
		clrParams[3]);
skamonkey@3743
   636
skamonkey@3743
   637
	if (!msg->AddColor(strField, clr))
skamonkey@3743
   638
	{
skamonkey@3747
   639
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   640
	}
skamonkey@3743
   641
skamonkey@3743
   642
	return 1;
skamonkey@3743
   643
}
skamonkey@3743
   644
skamonkey@3743
   645
static cell_t smn_PbAddAngle(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   646
{
skamonkey@3743
   647
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   648
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   649
skamonkey@3743
   650
	cell_t *angParams;
skamonkey@3743
   651
	if ((err=pCtx->LocalToPhysAddr(params[3], &angParams)) != SP_ERROR_NONE)
skamonkey@3743
   652
	{
skamonkey@3743
   653
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   654
		return 0;
skamonkey@3743
   655
	}
skamonkey@3743
   656
skamonkey@3743
   657
	QAngle ang(
skamonkey@3743
   658
		sp_ctof(angParams[0]),
skamonkey@3743
   659
		sp_ctof(angParams[1]),
skamonkey@3743
   660
		sp_ctof(angParams[2]));
skamonkey@3743
   661
skamonkey@3743
   662
	if (!msg->AddQAngle(strField, ang))
skamonkey@3743
   663
	{
skamonkey@3747
   664
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   665
	}
skamonkey@3743
   666
skamonkey@3743
   667
	return 1;
skamonkey@3743
   668
}
skamonkey@3743
   669
skamonkey@3743
   670
static cell_t smn_PbAddVector(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   671
{
skamonkey@3743
   672
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   673
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   674
skamonkey@3743
   675
	cell_t *vecParams;
skamonkey@3743
   676
	if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743
   677
	{
skamonkey@3743
   678
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   679
		return 0;
skamonkey@3743
   680
	}
skamonkey@3743
   681
skamonkey@3743
   682
	Vector vec(
skamonkey@3743
   683
		sp_ctof(vecParams[0]),
skamonkey@3743
   684
		sp_ctof(vecParams[1]),
skamonkey@3743
   685
		sp_ctof(vecParams[2]));
skamonkey@3743
   686
skamonkey@3743
   687
	if (!msg->AddVector(strField, vec))
skamonkey@3743
   688
	{
skamonkey@3747
   689
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   690
	}
skamonkey@3743
   691
skamonkey@3743
   692
	return 1;
skamonkey@3743
   693
}
skamonkey@3743
   694
skamonkey@3743
   695
static cell_t smn_PbAddVector2D(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   696
{
skamonkey@3743
   697
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   698
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   699
skamonkey@3743
   700
	cell_t *vecParams;
skamonkey@3743
   701
	if ((err=pCtx->LocalToPhysAddr(params[3], &vecParams)) != SP_ERROR_NONE)
skamonkey@3743
   702
	{
skamonkey@3743
   703
		pCtx->ThrowNativeErrorEx(err, NULL);
skamonkey@3743
   704
		return 0;
skamonkey@3743
   705
	}
skamonkey@3743
   706
skamonkey@3743
   707
	Vector2D vec(
skamonkey@3743
   708
		sp_ctof(vecParams[0]),
skamonkey@3743
   709
		sp_ctof(vecParams[1]));
skamonkey@3743
   710
skamonkey@3743
   711
	if (!msg->AddVector2D(strField, vec))
skamonkey@3743
   712
	{
skamonkey@3747
   713
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   714
	}
skamonkey@3743
   715
skamonkey@3743
   716
	return 1;
skamonkey@3743
   717
}
skamonkey@3743
   718
skamonkey@3743
   719
static cell_t smn_PbReadMessage(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   720
{
skamonkey@3743
   721
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   722
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   723
skamonkey@3743
   724
	protobuf::Message *innerMsg;
skamonkey@3743
   725
	if (!msg->GetMessage(strField, &innerMsg))
skamonkey@3743
   726
	{
skamonkey@3747
   727
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   728
	}
skamonkey@3743
   729
dvander@3872
   730
	Handle_t outHndl = handlesys->CreateHandle(g_ProtobufType, new SMProtobufMessage(innerMsg), NULL, g_pCoreIdent, NULL);
skamonkey@3743
   731
	msg->AddChildHandle(outHndl);
skamonkey@3743
   732
skamonkey@3743
   733
	return outHndl;
skamonkey@3743
   734
}
skamonkey@3743
   735
skamonkey@3743
   736
static cell_t smn_PbReadRepeatedMessage(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   737
{
skamonkey@3743
   738
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   739
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   740
skamonkey@3743
   741
	const protobuf::Message *innerMsg;
skamonkey@3743
   742
	if (!msg->GetRepeatedMessage(strField, params[3], &innerMsg))
skamonkey@3743
   743
	{
skamonkey@3747
   744
		return pCtx->ThrowNativeError("Invalid field \"%s\"[%d] for message \"%s\"", strField, params[3], msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   745
	}
skamonkey@3743
   746
dvander@3872
   747
	Handle_t outHndl = handlesys->CreateHandle(g_ProtobufType, new SMProtobufMessage(const_cast<protobuf::Message *>(innerMsg)), NULL, g_pCoreIdent, NULL);
skamonkey@3743
   748
	msg->AddChildHandle(outHndl);
skamonkey@3743
   749
skamonkey@3743
   750
	return outHndl;
skamonkey@3743
   751
}
skamonkey@3743
   752
skamonkey@3743
   753
static cell_t smn_PbAddMessage(IPluginContext *pCtx, const cell_t *params)
skamonkey@3743
   754
{
skamonkey@3743
   755
	GET_MSG_FROM_HANDLE_OR_ERR();
skamonkey@3743
   756
	GET_FIELD_NAME_OR_ERR();
skamonkey@3743
   757
skamonkey@3743
   758
	protobuf::Message *innerMsg;
skamonkey@3743
   759
	if (!msg->AddMessage(strField, &innerMsg))
skamonkey@3743
   760
	{
skamonkey@3747
   761
		return pCtx->ThrowNativeError("Invalid field \"%s\" for message \"%s\"", strField, msg->GetProtobufMessage()->GetTypeName().c_str());
skamonkey@3743
   762
	}
skamonkey@3743
   763
dvander@3872
   764
	Handle_t outHndl = handlesys->CreateHandle(g_ProtobufType, new SMProtobufMessage(innerMsg), NULL, g_pCoreIdent, NULL);
skamonkey@3743
   765
	msg->AddChildHandle(outHndl);
skamonkey@3743
   766
skamonkey@3743
   767
	return outHndl;
skamonkey@3743
   768
}
skamonkey@3743
   769
skamonkey@3743
   770
REGISTER_NATIVES(protobufnatives)
skamonkey@3743
   771
{
skamonkey@3743
   772
	{"PbReadInt",					smn_PbReadInt},
skamonkey@3743
   773
	{"PbReadFloat",					smn_PbReadFloat},
skamonkey@3743
   774
	{"PbReadBool",					smn_PbReadBool},
skamonkey@3743
   775
	{"PbReadString",				smn_PbReadString},
skamonkey@3743
   776
	{"PbReadColor",					smn_PbReadColor},
skamonkey@3743
   777
	{"PbReadAngle",					smn_PbReadAngle},
skamonkey@3743
   778
	{"PbReadVector",				smn_PbReadVector},
skamonkey@3743
   779
	{"PbReadVector2D",				smn_PbReadVector2D},
skamonkey@3743
   780
	{"PbGetRepeatedFieldCount",		smn_PbGetRepeatedFieldCount},
skamonkey@3743
   781
	{"PbSetInt",					smn_PbSetInt},
skamonkey@3743
   782
	{"PbSetFloat",					smn_PbSetFloat},
skamonkey@3743
   783
	{"PbSetBool",					smn_PbSetBool},
skamonkey@3743
   784
	{"PbSetString",					smn_PbSetString},
skamonkey@3743
   785
	{"PbSetColor",					smn_PbSetColor},
skamonkey@3743
   786
	{"PbSetAngle",					smn_PbSetAngle},
skamonkey@3743
   787
	{"PbSetVector",					smn_PbSetVector},
skamonkey@3743
   788
	{"PbSetVector2D",				smn_PbSetVector2D},
skamonkey@3743
   789
	{"PbAddInt",					smn_PbAddInt},
skamonkey@3743
   790
	{"PbAddFloat",					smn_PbAddFloat},
skamonkey@3743
   791
	{"PbAddBool",					smn_PbAddBool},
skamonkey@3743
   792
	{"PbAddString",					smn_PbAddString},
skamonkey@3743
   793
	{"PbAddColor",					smn_PbAddColor},
skamonkey@3743
   794
	{"PbAddAngle",					smn_PbAddAngle},
skamonkey@3743
   795
	{"PbAddVector",					smn_PbAddVector},
skamonkey@3743
   796
	{"PbAddVector2D",				smn_PbAddVector2D},
skamonkey@3743
   797
	{"PbReadMessage",				smn_PbReadMessage},
skamonkey@3743
   798
	{"PbReadRepeatedMessage",		smn_PbReadRepeatedMessage},
skamonkey@3743
   799
	{"PbAddMessage",				smn_PbAddMessage},
skamonkey@3743
   800
	{NULL,							NULL}
skamonkey@3743
   801
};
skamonkey@3743
   802
skamonkey@3743
   803
/*
skamonkey@3743
   804
                                       @@@@@@@@@@@@@ 
skamonkey@3743
   805
                                     @@@@@@@@@@@@@@@@@@
skamonkey@3743
   806
                                     @@@@@@@@@@@@@@@@@@@@@      
skamonkey@3743
   807
                                    @@@@@@@@@@@@@@@@@@@@@@@@               
skamonkey@3743
   808
                                   @@@@@@@@    @@@@@@@@@@@@@
skamonkey@3743
   809
                                   @@@@@@@@    @@@@@@@@@@@@@          
skamonkey@3743
   810
                                      @@@@@@  @@@@@@@@@@@@@@@             
skamonkey@3743
   811
                                 0000   @@@@@@@@@@@@@@@@@@@@@                
skamonkey@3743
   812
                              000000000   @@@@@@@@@@@@@@@@@@@           
skamonkey@3743
   813
                       0000000000000000000   @@@@@@@@@@@@@@@          
skamonkey@3743
   814
                       00000000000000000000  @@@@@@@@@@@@@@@            
skamonkey@3743
   815
                            000000000       @@@@@@@@@@@@@@@           
skamonkey@3743
   816
                                         @@@@@@@@@@@@@@@@@               
skamonkey@3743
   817
                                        @@@@@@@@@@@@@@@@@@      
skamonkey@3743
   818
                                       @@@@@@@@@@@@@@@@@@       
skamonkey@3743
   819
                                       @@@@@@@@@@@@@@@@@@                                                                @@@@
skamonkey@3743
   820
                                      @@@@@@@@@@@@@@@@@@@                                                             @@@@@@@  
skamonkey@3743
   821
                                     @@@   @@@@    @@@                                                             @@@@@@@@@@     
skamonkey@3743
   822
                                    @@@@@@@@@@@@@@@@@@@@@@@@@@                                                 @@@@@@@@@@  @@@@@    
skamonkey@3743
   823
                                   @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@   @@@@@@@@                                @@  @@@@@@@@@@@@@@@ 
skamonkey@3743
   824
                                  @@@@@@@@@@@@@@@@@@@@@@@@@@ @@   @@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@@@@@@  @@  @@@@@@@@@        
skamonkey@3743
   825
                                  @@@@@@@@@@@@@@@@@@@@@@@ @@@@   @@@@@@@@@@@@@@@@  @@@@@@@@@@@@@@@@@@@@@@@@@  @@  @@@@@@@@@@@@@
skamonkey@3743
   826
                                  @@@@@@@@@@@@@@@@@@@@@ @@@@    @@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@@@@@@@  @@@  @@@@@@@@@@@@     
skamonkey@3743
   827
                                 @@@@@@@@@@@@@@@@@@@@ @@@@@@   @@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@@   @@@@  @@@@@@@@@@@     
skamonkey@3743
   828
                                 @@@@@@@@@@@@@@@@@  @@@@@@    @@@@@@@@@@@@@@@@@@@  @@@@@@@@@@@@@@@@@@@      @@@@@ @@@@@@      
skamonkey@3743
   829
                                 @@@@@@@@@       @@@@@@@@@   @@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@     @@  @@@@@ @@@@@@@@   
skamonkey@3743
   830
                                           @@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@   @@@@@@  @@@@  @@@@@@  
skamonkey@3743
   831
                                  @@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@@@@@@  @@@@@@         @@@@@@  @@@@@@
skamonkey@3743
   832
                                 @@@@@@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@@@@@@@              @@@@@@@@   @@@@
skamonkey@3743
   833
                                  @@@@@@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@       @@@@@@@@@@@@@@  @  @@@@@  
skamonkey@3743
   834
                                   @@@@@@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@    @@@@@  @@@@    ////
skamonkey@3743
   835
                     ////////////   @@@@@@@@@@@ @@@@@@       @@@@@@@@@@@@@@@@@@@@  @@      @@@@@@@@@  @@@@    //// //////////// 
skamonkey@3743
   836
              ///////////////// ///    @@@@@          @@@@    @@@@@@@@@@@@@@@@@@@   @@@@@@@@@@@@@     @@@@   ///// ///////  /////////    
skamonkey@3743
   837
        /////////////////////  /////         @@@@@@@@@@@@@@   @@@@@@@@@@@@@@@@@@@   @@@@@@@      @  @@@@    ////// ///////  ///////////////
skamonkey@3743
   838
    ///////////////////////// ///////    @@@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@@@@           @@@@@   @@@@    //////  ////////  //////////////////// 
skamonkey@3743
   839
 ////////////////////////////  //////////   @@@@@@@@@@@@@@@@@@    @@@@@@@@@@@@   @@@@@@@@@     @@@      //////  ////////// ////////////////////////
skamonkey@3743
   840
//////////////////// //////////  ///////////   @@@@@@@@@@@@@@@@@     @@@@@@@@   @@@      @@@@@@      ////// ////////////  //////////////////////////
skamonkey@3743
   841
//////////////////// ////////////   ///////////   @@@@@@@@@@@@@@@@               @@@@            /////////////////////  /////////////////////////////
skamonkey@3743
   842
/////////////////////  //////////////       //////              @@@@@@@@@                ///////////////////////////////////////////////////////////
skamonkey@3743
   843
   ////////////////////    /////////////////////////////////////          ///////////////////////////////////////////////////////////////////////
skamonkey@3743
   844
       /////////////////////     ////////////////////////////////////////////////////////////////////////////////////////////////////////////  
skamonkey@3743
   845
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
skamonkey@3743
   846
                   //////////////////////////////////////////////////////////////////////////////////////////////////////////////   
skamonkey@3743
   847
                             ///////////////////////////////////////////////////////////////////////////////////////// 
skamonkey@3743
   848
                                             //////////////////////////////////////////////////////////
skamonkey@3743
   849
*/