From 2b6995b7e3ffeab9cf4e3a5b28d4a4e5833e61cc Mon Sep 17 00:00:00 2001 From: Calvin Balke Date: Tue, 20 Jan 2015 17:31:51 -0800 Subject: [PATCH] SimSet and SimGroup support Added SimSet and SimGroup recursive move test code. --- Mod Sources/TSExtension/TSExtension.suo | Bin 32768 -> 32768 bytes .../TSExtension/TSExtension.vcxproj | 2 + .../TSExtension/TSExtension.vcxproj.filters | 6 +++ .../TSExtension/include/DXAPI/DXAPI.h | 1 + .../TSExtension/include/DXAPI/SimGroup.h | 14 ++++++ .../TSExtension/include/DXAPI/SimObject.h | 3 +- .../TSExtension/include/DXConCmds.h | 2 +- .../TSExtension/source/DXAPI/SimGroup.cpp | 27 +++++++++++ .../TSExtension/source/DXAPI/SimObject.cpp | 20 +++++++- .../TSExtension/source/DXConCmds.cpp | 44 ++++++++++++++---- .../TSExtension/source/dllmain.cpp | 1 + 11 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 Mod Sources/TSExtension/TSExtension/include/DXAPI/SimGroup.h create mode 100644 Mod Sources/TSExtension/TSExtension/source/DXAPI/SimGroup.cpp diff --git a/Mod Sources/TSExtension/TSExtension.suo b/Mod Sources/TSExtension/TSExtension.suo index 4f15ff230aa271b52b57d1aa9d6658b617393ed0..3c74cbef25807ff41900cd526b9e51c9129332e3 100644 GIT binary patch delta 152 zcmZo@U}|V!+K|J-RvizWCd4^$zKBeCm&`pWW4|scr>{((2JE(7c6J5Fxh~GXY-dp9;QjrX6(rfi3~Xm t$&;<48U>}+mW5bfSh~?`0{f~dlJoA1PZo4F+!X4<$fA#|wIr-Z69A@lFaZDn delta 146 zcmZo@U}|V!+K|J-Hes7y;B%ABMJ#>H0_OI%ytSeaeOJ0mCiqzRrc7?+HrVXI(cv*! z!Cqmq0SnLMF9H6XjJgaA4EjJkS;19<^#YJ_XL4nr*W|-2hMT_x@-Q)Oo6H!oSyYc9 sgMlryLwsJT>Cam`XHJ;?Xzl}n$%3xtn?hX}S@gjAA*OCF3G2}W0EPH3J^%m! diff --git a/Mod Sources/TSExtension/TSExtension/TSExtension.vcxproj b/Mod Sources/TSExtension/TSExtension/TSExtension.vcxproj index 4490b1d..a015b0d 100644 --- a/Mod Sources/TSExtension/TSExtension/TSExtension.vcxproj +++ b/Mod Sources/TSExtension/TSExtension/TSExtension.vcxproj @@ -25,6 +25,7 @@ + @@ -48,6 +49,7 @@ + diff --git a/Mod Sources/TSExtension/TSExtension/TSExtension.vcxproj.filters b/Mod Sources/TSExtension/TSExtension/TSExtension.vcxproj.filters index 174d477..f827172 100644 --- a/Mod Sources/TSExtension/TSExtension/TSExtension.vcxproj.filters +++ b/Mod Sources/TSExtension/TSExtension/TSExtension.vcxproj.filters @@ -87,6 +87,9 @@ Source Files\DXAPI + + Source Files\DXAPI + @@ -146,5 +149,8 @@ Header Files\DXAPI + + Header Files\DXAPI + \ No newline at end of file diff --git a/Mod Sources/TSExtension/TSExtension/include/DXAPI/DXAPI.h b/Mod Sources/TSExtension/TSExtension/include/DXAPI/DXAPI.h index 0f059a7..07c7e3e 100644 --- a/Mod Sources/TSExtension/TSExtension/include/DXAPI/DXAPI.h +++ b/Mod Sources/TSExtension/TSExtension/include/DXAPI/DXAPI.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include diff --git a/Mod Sources/TSExtension/TSExtension/include/DXAPI/SimGroup.h b/Mod Sources/TSExtension/TSExtension/include/DXAPI/SimGroup.h new file mode 100644 index 0000000..6fc9cfd --- /dev/null +++ b/Mod Sources/TSExtension/TSExtension/include/DXAPI/SimGroup.h @@ -0,0 +1,14 @@ +#pragma once +#include +namespace DX +{ + class SimGroup : public SimObject + { + public: + SimGroup(unsigned int obj); + unsigned int &count; + unsigned int *simobjptr; + unsigned int SimGroup::getObject(unsigned int idx); + unsigned int SimGroup::getCount(void); + }; +}; \ No newline at end of file diff --git a/Mod Sources/TSExtension/TSExtension/include/DXAPI/SimObject.h b/Mod Sources/TSExtension/TSExtension/include/DXAPI/SimObject.h index 9f1a02b..457c606 100644 --- a/Mod Sources/TSExtension/TSExtension/include/DXAPI/SimObject.h +++ b/Mod Sources/TSExtension/TSExtension/include/DXAPI/SimObject.h @@ -8,8 +8,9 @@ namespace DX SimObject(unsigned int obj); void deleteObject(void); + const char *SimObject::getClassName(); const char *CallMethod(const char *name, unsigned int argc, ...); - + const unsigned int &type; const unsigned int &identifier; const unsigned int base_pointer_value; }; diff --git a/Mod Sources/TSExtension/TSExtension/include/DXConCmds.h b/Mod Sources/TSExtension/TSExtension/include/DXConCmds.h index e3cdd05..101b5cb 100644 --- a/Mod Sources/TSExtension/TSExtension/include/DXConCmds.h +++ b/Mod Sources/TSExtension/TSExtension/include/DXConCmds.h @@ -13,7 +13,7 @@ #pragma once #include - +bool conSetMPS(Linker::SimObject *obj, S32 argc, const char *argv[]) ; void serverProcessReplacement(unsigned int timeDelta) ; const char* conGetPosition(Linker::SimObject * obj, S32 argc, const char *argv[]); const char* congetServPAddr(Linker::SimObject *obj, S32 argc, const char *argv[]); diff --git a/Mod Sources/TSExtension/TSExtension/source/DXAPI/SimGroup.cpp b/Mod Sources/TSExtension/TSExtension/source/DXAPI/SimGroup.cpp new file mode 100644 index 0000000..d8ba946 --- /dev/null +++ b/Mod Sources/TSExtension/TSExtension/source/DXAPI/SimGroup.cpp @@ -0,0 +1,27 @@ +#include +#include +#include + +#include + +namespace DX +{ + + SimGroup::SimGroup(unsigned int obj) : count(*(unsigned int*)(obj+0x30)), simobjptr((unsigned int*)*(unsigned int*)(obj+0x38)), + SimObject(obj) + { + + + } + unsigned int SimGroup::getObject(unsigned int idx) { + if (idxcount) { + return simobjptr[idx]; + } else { + return 0; + } + } + unsigned int SimGroup::getCount(void) { + return this->count; + } + +}; \ No newline at end of file diff --git a/Mod Sources/TSExtension/TSExtension/source/DXAPI/SimObject.cpp b/Mod Sources/TSExtension/TSExtension/source/DXAPI/SimObject.cpp index ab5e7ec..2260bce 100644 --- a/Mod Sources/TSExtension/TSExtension/source/DXAPI/SimObject.cpp +++ b/Mod Sources/TSExtension/TSExtension/source/DXAPI/SimObject.cpp @@ -6,11 +6,27 @@ namespace DX { - SimObject::SimObject(unsigned int obj) : identifier(*(unsigned int*)(obj + 32)), + SimObject::SimObject(unsigned int obj) : identifier(*(unsigned int*)(obj + 32)), type(*(unsigned int*)(obj+0x28)), base_pointer_value(obj) { } - + const char *SimObject::getClassName(){ + unsigned int bpv=this->base_pointer_value; + unsigned int cnptr=0; + unsigned int bpv2=(*(unsigned int*)bpv); + __asm { + mov ecx,bpv2 + mov eax,[ecx] + call eax + mov eax,[eax+0x1C] + mov cnptr,eax + }; + if (cnptr) { + return (char *) cnptr; + } else { + return ""; + } + } void SimObject::deleteObject(void) { void *pointer = (void*)this->base_pointer_value; diff --git a/Mod Sources/TSExtension/TSExtension/source/DXConCmds.cpp b/Mod Sources/TSExtension/TSExtension/source/DXConCmds.cpp index ab8c98a..bed704e 100644 --- a/Mod Sources/TSExtension/TSExtension/source/DXConCmds.cpp +++ b/Mod Sources/TSExtension/TSExtension/source/DXConCmds.cpp @@ -6,22 +6,42 @@ #include #include static float counter=0; +static float mps=0.0; +void moveRecursive(unsigned int simgroup,float xoff){ + + unsigned int mainsim=(unsigned int)simgroup; + if (mainsim) { + DX::SimObject sim1=DX::SimObject(mainsim); + if (strcmp((sim1.getClassName()),"SimGroup")==0) { + DX::SimGroup sim2 = DX::SimGroup(mainsim); + for (unsigned int x=0; x=(30*180)){ - counter=0; - } - counter+=1.0; + if (Sim::findObjectc("Team1")) { + basex+=counter; + DX::SceneObject sobj = DX::SceneObject((unsigned int)Sim::findObjectc("Team1")); + moveRecursive((unsigned int)Sim::findObjectc("Team1"),(mps*((float)((timeDelta)*0.001)))); } __asm { @@ -62,6 +82,10 @@ const char* congetServPAddr(Linker::SimObject *obj, S32 argc, const char *argv[] test2[8]=0; return test2; } +bool conSetMPS(Linker::SimObject *obj, S32 argc, const char *argv[]) { + mps=atof(argv[1]); + return false; +} const char *conGetAddress(Linker::SimObject *obj, S32 argc, const char *argv[]) { // Hmm... diff --git a/Mod Sources/TSExtension/TSExtension/source/dllmain.cpp b/Mod Sources/TSExtension/TSExtension/source/dllmain.cpp index bb6139c..9a4a53f 100644 --- a/Mod Sources/TSExtension/TSExtension/source/dllmain.cpp +++ b/Mod Sources/TSExtension/TSExtension/source/dllmain.cpp @@ -43,6 +43,7 @@ extern "C" Con::addMethodS("GrenadeProjectile", "getvelocity", &conGrenadeProjectileGetVelocity,"Gets the velocity of the GrenadeProjectile", 2, 2); Con::addMethodB("Projectile", "makeNerf", &conProjectileMakeNerf,"Makes the Projectile deal no damage", 2, 2); Con::addMethodS("SceneObject", "getPositionTest", &conGetPosition,"Gets the Rotation by alternate means as a test", 2, 2); + Con::addMethodB(NULL,"setMPS",&conSetMPS,"sets meters per second for turret", 2, 2); // TCPObject #ifdef ENABLE_TCPOBJECT Con::addMethodS("TCPObject", "connect", &conTCPObjectConnect, "Connects to a remote server", 3, 3);