mirror of
https://github.com/celisej567/source-sdk-2013.git
synced 2026-09-11 20:11:33 +03:00
vscript changes:
c_baseentity.h c_baseentity.cpp - Renamed GetLeftVector to GetRightVector - Renamed GetTeamNumber to GetTeam baseentity.h baseentity.cpp - Renamed GetLeftVector to GetRightVector - Renamed Get/SetRender functions (GetAlpha -> GetRenderAlpha) - Fixed CBaseEntity::GetScriptId - Added hook CBaseEntity::UpdateOnRemove - Added CBaseEntity::GetOrCreatePrivateScriptScope - Added CBaseEntity::GetDebugName - Added CBaseEntity::GetGravity - Added CBaseEntity::SetGravity - Added CBaseEntity::GetFriction - Added CBaseEntity::SetFriction - Added CBaseEntity::GetMass - Added CBaseEntity::SetMass - Added CBaseEntity::SetName (SetNameAsCStr) - Added CBaseEntity::SetParent (ScriptSetParent) - Added CBaseEntity::SetThink (ScriptSetThink) - Added CBaseEntity::StopThink (ScriptStopThink) - Added CBaseEntity::SetThinkFunction (ScriptSetThinkFunction) - Added CBaseEntity::StopThinkFunction (ScriptStopThinkFunction) - Added CBaseEntity::ApplyAbsVelocityImpulse - Added CBaseEntity::ApplyLocalAngularVelocityImpulse player.h player.cpp - Renamed GetPlayerUserId to GetUserID - Added CBasePlayer::GetFOV - Added CBasePlayer::GetFOVOwner (ScriptGetFOVOwner) - Added CBasePlayer::SetFOV (ScriptSetFOV) vscript_consts_shared.cpp -Added RAD2DEG, DEG2RAD, MAX_COORD_FLOAT, MAX_TRACE_LENGTH vscript_funcs_shared.cpp - Renamed IsClientScript,IsServerScript to IsClient,IsServer - Added IsDedicatedServer - Added NPrint (Con_NPrintf) - Removed DebugDrawBoxDirection (debugoverlay.BoxDirection) - Removed DebugDrawText (debugoverlay.Text) vscript_server.cpp - Added CDebugOverlayScriptHelper (debugoverlay) - Added CEntities::GetLocalPlayer - Added DispatchParticleEffect (ScriptDispatchParticleEffect) - Removed DebugDrawBox (debugoverlay.Box) - Removed DebugDrawLine (debugoverlay.Line) vscript_squirrel.cpp - Changed stub error messages for consistency and clarity - Changed errorfunc output to Warning instead of Msg - Added Msg, Warning - Added clamp, min, max, RemapVal, RemapValClamped - Added sqstdtime.h - Added clock, time, date
This commit is contained in:
88
sp/src/vscript/squirrel/include/sqstdtime.h
Normal file
88
sp/src/vscript/squirrel/include/sqstdtime.h
Normal file
@@ -0,0 +1,88 @@
|
||||
//-----------------------------------------------------------------------
|
||||
// see copyright notice in squirrel.h
|
||||
//
|
||||
// Purpose : Squirrel time library cropped out from
|
||||
// the system library as a safe include.
|
||||
//
|
||||
//-----------------------------------------------------------------------
|
||||
|
||||
#include "squirrel.h"
|
||||
#include "time.h"
|
||||
|
||||
static SQInteger _system_clock(HSQUIRRELVM v)
|
||||
{
|
||||
sq_pushfloat(v, ((SQFloat)clock()) / (SQFloat)CLOCKS_PER_SEC);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static SQInteger _system_time(HSQUIRRELVM v)
|
||||
{
|
||||
SQInteger t = (SQInteger)time(NULL);
|
||||
sq_pushinteger(v, t);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void _set_integer_slot(HSQUIRRELVM v, const SQChar *name, SQInteger val)
|
||||
{
|
||||
sq_pushstring(v, name, -1);
|
||||
sq_pushinteger(v, val);
|
||||
sq_rawset(v, -3);
|
||||
}
|
||||
|
||||
static SQInteger _system_date(HSQUIRRELVM v)
|
||||
{
|
||||
time_t t;
|
||||
SQInteger it;
|
||||
SQInteger format = 'l';
|
||||
if (sq_gettop(v) > 1) {
|
||||
sq_getinteger(v, 2, &it);
|
||||
t = it;
|
||||
if (sq_gettop(v) > 2) {
|
||||
sq_getinteger(v, 3, (SQInteger*)&format);
|
||||
}
|
||||
}
|
||||
else {
|
||||
time(&t);
|
||||
}
|
||||
tm *date;
|
||||
if (format == 'u')
|
||||
date = gmtime(&t);
|
||||
else
|
||||
date = localtime(&t);
|
||||
if (!date)
|
||||
return sq_throwerror(v, _SC("crt api failure"));
|
||||
sq_newtable(v);
|
||||
_set_integer_slot(v, _SC("sec"), date->tm_sec);
|
||||
_set_integer_slot(v, _SC("min"), date->tm_min);
|
||||
_set_integer_slot(v, _SC("hour"), date->tm_hour);
|
||||
_set_integer_slot(v, _SC("day"), date->tm_mday);
|
||||
_set_integer_slot(v, _SC("month"), date->tm_mon);
|
||||
_set_integer_slot(v, _SC("year"), date->tm_year + 1900);
|
||||
_set_integer_slot(v, _SC("wday"), date->tm_wday);
|
||||
_set_integer_slot(v, _SC("yday"), date->tm_yday);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_system_##name,nparams,pmask}
|
||||
static const SQRegFunction timelib_funcs[] = {
|
||||
_DECL_FUNC(clock, 0, NULL),
|
||||
_DECL_FUNC(time, 1, NULL),
|
||||
_DECL_FUNC(date, -1, _SC(".nn")),
|
||||
{ NULL, (SQFUNCTION)0, 0, NULL }
|
||||
};
|
||||
#undef _DECL_FUNC
|
||||
|
||||
SQInteger sqstd_register_timelib(HSQUIRRELVM v)
|
||||
{
|
||||
SQInteger i = 0;
|
||||
while (timelib_funcs[i].name != 0)
|
||||
{
|
||||
sq_pushstring(v, timelib_funcs[i].name, -1);
|
||||
sq_newclosure(v, timelib_funcs[i].f, 0);
|
||||
sq_setparamscheck(v, timelib_funcs[i].nparamscheck, timelib_funcs[i].typemask);
|
||||
sq_setnativeclosurename(v, -1, timelib_funcs[i].name);
|
||||
sq_newslot(v, -3, SQFalse);
|
||||
i++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "sqstdaux.h"
|
||||
//#include "sqstdblob.h"
|
||||
//#include "sqstdsystem.h"
|
||||
#include "sqstdtime.h"
|
||||
//#include "sqstdio.h"
|
||||
#include "sqstdmath.h"
|
||||
#include "sqstdstring.h"
|
||||
@@ -263,7 +264,7 @@ namespace SQVector
|
||||
|
||||
if (key[0] < 'x' || key['0'] > 'z' || key[1] != '\0')
|
||||
{
|
||||
return sqstd_throwerrorf(vm, "Unexpected key %s", key);
|
||||
return sqstd_throwerrorf(vm, "the index '%.50s' does not exist", key);
|
||||
}
|
||||
|
||||
Vector* v = nullptr;
|
||||
@@ -289,7 +290,7 @@ namespace SQVector
|
||||
|
||||
if (key[0] < 'x' || key['0'] > 'z' || key[1] != '\0')
|
||||
{
|
||||
return sqstd_throwerrorf(vm, "Unexpected key %s", key);
|
||||
return sqstd_throwerrorf(vm, "the index '%.50s' does not exist", key);
|
||||
}
|
||||
|
||||
Vector* v = nullptr;
|
||||
@@ -1024,7 +1025,7 @@ SQInteger function_stub(HSQUIRRELVM vm)
|
||||
{
|
||||
HSQOBJECT val;
|
||||
if (SQ_FAILED(sq_getstackobj(vm, i + 2, &val)))
|
||||
return sq_throwerror(vm, "Expected string");
|
||||
return sq_throwerror(vm, "Expected handle");
|
||||
|
||||
if (sq_isnull(val))
|
||||
{
|
||||
@@ -1054,7 +1055,7 @@ SQInteger function_stub(HSQUIRRELVM vm)
|
||||
|
||||
if (!self)
|
||||
{
|
||||
return sq_throwerror(vm, "Can't be used on a null instance");
|
||||
return sq_throwerror(vm, "Accessed null instance");
|
||||
}
|
||||
|
||||
instance = ((ClassInstanceData*)self)->instance;
|
||||
@@ -1112,7 +1113,6 @@ SQInteger constructor_stub(HSQUIRRELVM vm)
|
||||
return sqstd_throwerrorf(vm, "Unable to construct instances of %s", pClassDesc->m_pszScriptName);
|
||||
}
|
||||
|
||||
|
||||
SquirrelVM* pSquirrelVM = (SquirrelVM*)sq_getforeignptr(vm);
|
||||
assert(pSquirrelVM);
|
||||
|
||||
@@ -1191,7 +1191,7 @@ SQInteger get_stub(HSQUIRRELVM vm)
|
||||
}
|
||||
else
|
||||
{
|
||||
return sqstd_throwerrorf(vm, "Unexpected key %s", key);
|
||||
return sqstd_throwerrorf(vm, "the index '%.50s' does not exist", key);
|
||||
}
|
||||
|
||||
return 1;
|
||||
@@ -1223,7 +1223,7 @@ SQInteger set_stub(HSQUIRRELVM vm)
|
||||
else
|
||||
{
|
||||
sq_pop(vm, 1);
|
||||
return sqstd_throwerrorf(vm, "Unexpected key %s", key);
|
||||
return sqstd_throwerrorf(vm, "the index '%.50s' does not exist", key);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -1251,7 +1251,7 @@ SQInteger add_stub(HSQUIRRELVM vm)
|
||||
}
|
||||
|
||||
sq_pop(vm, 1);
|
||||
return sqstd_throwerrorf(vm, "Unexpected _add");
|
||||
return sqstd_throwerrorf(vm, "invalid arith op +");
|
||||
}
|
||||
|
||||
SQInteger sub_stub(HSQUIRRELVM vm)
|
||||
@@ -1276,7 +1276,7 @@ SQInteger sub_stub(HSQUIRRELVM vm)
|
||||
}
|
||||
|
||||
sq_pop(vm, 1);
|
||||
return sqstd_throwerrorf(vm, "Unexpected _sub");
|
||||
return sqstd_throwerrorf(vm, "invalid arith op -");
|
||||
}
|
||||
|
||||
SQInteger mul_stub(HSQUIRRELVM vm)
|
||||
@@ -1301,7 +1301,7 @@ SQInteger mul_stub(HSQUIRRELVM vm)
|
||||
}
|
||||
|
||||
sq_pop(vm, 1);
|
||||
return sqstd_throwerrorf(vm, "Unexpected _mul");
|
||||
return sqstd_throwerrorf(vm, "invalid arith op *");
|
||||
}
|
||||
|
||||
SQInteger div_stub(HSQUIRRELVM vm)
|
||||
@@ -1326,7 +1326,7 @@ SQInteger div_stub(HSQUIRRELVM vm)
|
||||
}
|
||||
|
||||
sq_pop(vm, 1);
|
||||
return sqstd_throwerrorf(vm, "Unexpected _div");
|
||||
return sqstd_throwerrorf(vm, "invalid arith op /");
|
||||
}
|
||||
|
||||
SQInteger IsValid_stub(HSQUIRRELVM vm)
|
||||
@@ -1374,12 +1374,11 @@ void printfunc(HSQUIRRELVM SQ_UNUSED_ARG(v), const SQChar* format, ...)
|
||||
|
||||
void errorfunc(HSQUIRRELVM SQ_UNUSED_ARG(v), const SQChar* format, ...)
|
||||
{
|
||||
// NOTE: This is only separate from printfunc to make it easier to add breakpoints
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
char buffer[256];
|
||||
vsprintf(buffer, format, args);
|
||||
Msg("%s", buffer);
|
||||
Warning("%s", buffer);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
@@ -1558,6 +1557,9 @@ bool SquirrelVM::Init()
|
||||
//sqstd_register_iolib(vm_);
|
||||
//sqstd_register_systemlib(vm_);
|
||||
|
||||
// There is no vulnerability in getting time.
|
||||
sqstd_register_timelib(vm_);
|
||||
|
||||
|
||||
sqstd_seterrorhandlers(vm_);
|
||||
|
||||
@@ -1570,9 +1572,9 @@ bool SquirrelVM::Init()
|
||||
constructor(pattern)
|
||||
{
|
||||
base.constructor(pattern);
|
||||
pattern_ = pattern;
|
||||
this.pattern_ = pattern;
|
||||
}
|
||||
pattern_="";
|
||||
pattern_ = "";
|
||||
}
|
||||
)script") == SCRIPT_ERROR)
|
||||
{
|
||||
@@ -1593,14 +1595,66 @@ bool SquirrelVM::Init()
|
||||
|
||||
if (Run(
|
||||
R"script(
|
||||
Msg <- print;
|
||||
Warning <- error;
|
||||
|
||||
// LocalTime from Source 2
|
||||
// function LocalTime()
|
||||
// {
|
||||
// local date = ::date();
|
||||
// return {
|
||||
// Hours = date.hour,
|
||||
// Minutes = date.min,
|
||||
// Seconds = date.sec
|
||||
// }
|
||||
// }
|
||||
|
||||
function clamp(val,min,max)
|
||||
{
|
||||
if ( max < min )
|
||||
return max;
|
||||
else if( val < min )
|
||||
return min;
|
||||
else if( val > max )
|
||||
return max;
|
||||
else
|
||||
return val;
|
||||
}
|
||||
|
||||
function max(a,b)
|
||||
{
|
||||
return a > b ? a : b;
|
||||
}
|
||||
|
||||
function min(a,b)
|
||||
{
|
||||
return a < b ? a : b;
|
||||
}
|
||||
|
||||
function RemapVal(val, A, B, C, D)
|
||||
{
|
||||
if ( A == B )
|
||||
return val >= B ? D : C;
|
||||
return C + (D - C) * (val - A) / (B - A);
|
||||
}
|
||||
|
||||
function RemapValClamped(val, A, B, C, D)
|
||||
{
|
||||
if ( A == B )
|
||||
return val >= B ? D : C;
|
||||
local cVal = (val - A) / (B - A);
|
||||
cVal = ::clamp( cVal, 0.0, 1.0 );
|
||||
return C + (D - C) * cVal;
|
||||
}
|
||||
|
||||
function printl( text )
|
||||
{
|
||||
return print(text + "\n");
|
||||
return ::print(text + "\n");
|
||||
}
|
||||
|
||||
class CSimpleCallChainer
|
||||
{
|
||||
function constructor(prefixString, scopeForThis, exactMatch)
|
||||
constructor(prefixString, scopeForThis, exactMatch)
|
||||
{
|
||||
prefix = prefixString;
|
||||
scope = scopeForThis;
|
||||
@@ -1610,7 +1664,7 @@ bool SquirrelVM::Init()
|
||||
|
||||
function PostScriptExecute()
|
||||
{
|
||||
local func = null;
|
||||
local func;
|
||||
try {
|
||||
func = scope[prefix];
|
||||
} catch(e) {
|
||||
@@ -1628,9 +1682,10 @@ bool SquirrelVM::Init()
|
||||
func.pcall(scope);
|
||||
}
|
||||
}
|
||||
|
||||
prefix = null;
|
||||
scope= null;
|
||||
chain = [];
|
||||
scope = null;
|
||||
chain = null;
|
||||
}
|
||||
|
||||
DocumentedFuncs <- {}
|
||||
@@ -1698,7 +1753,7 @@ bool SquirrelVM::Init()
|
||||
{
|
||||
// Is an aliased function
|
||||
print("Signature: function " + name + "(");
|
||||
foreach(k,v in this[name].getinfos()["parameters"])
|
||||
foreach(k,v in this[name].getinfos().parameters)
|
||||
{
|
||||
if (k == 0 && v == "this") continue;
|
||||
if (k > 1) print(", ");
|
||||
@@ -1732,7 +1787,7 @@ bool SquirrelVM::Init()
|
||||
{
|
||||
// Is an aliased function
|
||||
print("Signature: function " + name + "(");
|
||||
foreach(k,v in this[name].getinfos()["parameters"])
|
||||
foreach(k,v in this[name].getinfos().parameters)
|
||||
{
|
||||
if (k == 0 && v == "this") continue;
|
||||
if (k > 1) print(", ");
|
||||
|
||||
Reference in New Issue
Block a user