Reply to thread

So figured out hud elements for ghosts PC steam version. Since game is dead and no one got money for a gsc injector, use this thread to make host mod menu. The way the game sets text is different from other COD's and to bypass a G_LocalizedStringIndex Patch everytime you print text, I decided to use G_FindConfigstringIndex instead. First to get hudelems to work on PC it seems not sure though

Menu Base Made With This : Release - [PC/Steam] Ghosts Menu Base

[SPOILER="Hud Elements For Ghosts Steam"]




[CODE=cpp]

/*

EXAMPLE


game_hudelem_s * Shader = AddShader(client,"white", 100, 100, 1000, 1000, 0, 0, 0, 180);

game_hudelem_s * Text = setText(client, "HHHHHHHHHHHHHHHHHHHHHHH",1,4,100,100,255,255,255,255);


*/

typedef unsigned char byte;

typedef unsigned int uint;


union color_s

{

    struct

{

    byte r, g, b, a;

};


uint rgba;

};


struct hudelem_s

{

    int type;

    float x;

    float y;

    float z;

    int targetEntNum;

    float fontScale;

    float fromFontScale;

    float fontScaleStartTime;

    float fontScaleTime;

    int font;

    int alignOrg;

    int alignScreen;

    color_s color;

    color_s fromColor;

    int fadeStartTime;

    int fadeTime;

    int label;

    int width;

    int height;

    int materialIndex;

    int fromWidth;

    int fromHeight;

    int scaleStartTime;

    int scaleTime;

    float fromX;

    float fromY;

    int fromAlignOrg;

    int fromAlignScreen;

    int moveStartTime;

    int moveTime;

    int time;

    int duration;

    float value;

    int text;

    float sort;

    color_s glowColor;

    int fxBirthTime;

    int fxLetterTime;

    int fxDecayStartTime;

    int fxDecayDuration;

    int soundID;

    int flags;

};


struct game_hudelem_s

{

    hudelem_s elem;

    int clientNum;

    int team;

    int archived;

    int currentShowInKillcam;

};


int(*G_MaterialIndex)(const char* shader) = (int(*)(const char*))0x140162320;


int(*G_FindConfigstringIndex)(const char* name, int start, int max, int create, const char* error) = (int(*)(const char*, int, int, int, const char*))0x140161F90;


game_hudelem_s*(*HudElem_Alloc)(int client, int team) = (game_hudelem_s*(*)(int, int))0x1403997E0;


game_hudelem_s* setText(int client, char* Text, int font, float fontScale, float x, float y, byte r, byte g, byte b, byte a)

{

    game_hudelem_s* Element = HudElem_Alloc(client,0);

    Element->elem.type = 0x1;

    Element->elem.alignOrg = 0;

    Element->elem.alignScreen = 0;

    Element->elem.font = font;

    Element->elem.fontScale = fontScale;

    Element->elem.x = x;

    Element->elem.y = y;

    Element->elem.color.r = r;

    Element->elem.color.g = g;

    Element->elem.color.b = b;

    Element->elem.color.a = a;

    Element->elem.sort = 1;

    Element->elem.text = G_FindConfigstringIndex(Text, 0x21D, 0x1FF, 1, "error");

    return Element;

}


game_hudelem_s* AddShader(int client,char* Shader, float x, float y, int width, int height, byte r, byte g, byte b, byte a)

{

    game_hudelem_s* element = HudElem_Alloc(client, 0);

    element->elem.type = 0x04;

    element->elem.materialIndex = G_MaterialIndex(Shader);

    element->elem.x = x;

    element->elem.y = y;

    element->elem.width = width;

    element->elem.height = height;

    element->elem.alignOrg = 0;

    element->elem.alignScreen = 0;

    element->elem.sort = 0;

    element->elem.color.r = r;

    element->elem.color.g = g;

    element->elem.color.b = b;

    element->elem.color.a = a;

    return element;

}


void ChangeGlow(game_hudelem_s* element, byte r, byte g, byte b, byte a)

{

    element->elem.glowColor.r = r;

    element->elem.glowColor.g = g;

    element->elem.glowColor.b = b;

    element->elem.glowColor.a = a;

}


void ChangeColor(game_hudelem_s* element, byte r, byte g, byte b, byte a)

{

    element->elem.color.r = r;

    element->elem.color.g = g;

    element->elem.color.b = b;

    element->elem.color.a = a;

}


void FreeHudElement(game_hudelem_s* element)

{

    ZeroMemory(element, 0xB8);

}


void ChangeFontScale(game_hudelem_s* element, float Scale)

{

    element->elem.fontScale = Scale;

}


void ChangeText(game_hudelem_s* element, const char* Text)

{

    element->elem.text = G_FindConfigstringIndex(Text, 0x21D, 0x1FF, 1, "error");

}


void ChangeMaterial(game_hudelem_s* element, const char* material)

{

    element->elem.materialIndex = G_MaterialIndex(material);

}


void MoveXY(game_hudelem_s* element, float x, float y)

{

    element->elem.x = x;

    element->elem.y = y;

}[/CODE]

[/SPOILER]


[SPOILER="Some Functions"]

[SPOILER="RPC"]

[CODE=cpp]typedef unsigned __int64 QWORD;

template<typename function_type, typename... Parameters>

function_type RPC(QWORD function_address, Parameters... args)

{

    function_type(*placeholder)(Parameters...) = (function_type(*)(Parameters...))function_address;

    return placeholder(args...);

}[/CODE]

[/SPOILER]

[CODE=cpp]void VM_Notify(unsigned int notifyListOwnerId, unsigned int stringValue, void *top) 0x14043D9B0


const char * SL_ConvertToString(unsigned int stringValue)

{

    return RPC<const char *>(0x1404317F0, stringValue);

}


unsigned int Scr_GetSelf(unsigned int threadID)

{

    return RPC<unsigned int>(0x140436F10, threadID);

}


void Scr_ConstructMessageString(int firstParmIndex, int lastParmIndex, const char *errorContext, char *string, unsigned int stringLimit)

{

    RPC<void>(0x1403CD810, firstParmIndex, lastParmIndex, errorContext, string, stringLimit);

}


void SV_SetConfigString(int ConfigString, const char * b)

{

    RPC<void>(0x140477200, ConfigString, b);

}


void Scr_SetNumParam(int A){

    write_process<int>(0x144D4B0B8 + 4, A);

}


void Scr_ClearOutParams(){

    RPC<void>(0x140438600);

}


void Scr_AddString(const char * value){

    RPC<void>(0x1404381D0, value);

}


void PlayerCMD_giveWeapon(unsigned int Player, const char * Weapon)

{

    Scr_AddString(Weapon);

    Scr_SetNumParam(1);

    RPC<void>(0x1403891F0, Player);

    Scr_ClearOutParams();

}

[/CODE]

[/SPOILER]

[ATTACH=full]4570[/ATTACH]



Top