Noticias:

SMF - Just Installed!

Menú principal

Source CHAT GPT IN GAME

Publicado por Dakosmu, Abr 19, 2024, 06:48 AM

Tema anterior - Siguiente tema

Dakosmu

Source CHAT GPT IN GAME



.cpp

#include "StdAfx.h"
#if(CHAT_GPT)
#include "CustomChatGPT.h"
#include "Interface.h"
#include "Util.h"
#include "CustomDrawWindow.h"
#include "Defines.h"


CustomChatGPT g_CustomChatGPT;


CustomChatGPT::CustomChatGPT(void)
{
}


CustomChatGPT::~CustomChatGPT(void)
{
}

errno_t thay(char *r, rsize_t m, char const *s, char const *u, char const *v)
{
   assert(r != NULL && s != NULL && u != NULL && v != NULL && 0   const rsize_t slen = strlen(s), ulen = strlen(u), vlen = strlen(v);
   if (ulen == 0) return -1;
   char const * const ymax = s + slen;
   for (;;)
   {
      char const *y = strstr(s, u);
      if (y == NULL){ y = ymax; }
      rsize_t xlen = y - s;
      if (memcpy_s(r, m, s, xlen)) return -1;
      r += xlen; m -= xlen;
      if (y == ymax){ *r = '\0'; return 0; }
      s = y + ulen;
      if (memcpy_s(r, m, v, vlen)) return -1;
      r += vlen; m -= vlen;
   }
}

//Hàm gọi lại cho curl_easy_setopt
size_t curl_callback(char* ptr, size_t size, size_t nmemb, void* userdata) {
   std::vector* response = reinterpret_cast*>(userdata);
   size_t num_bytes = size * nmemb;
   response->insert(response->end(), ptr, ptr + num_bytes);
   return num_bytes;
}



void CustomChatGPT::loadBind()
{
   gInterface.BindObject(eChatGPT_MAIN, 0x7A5A, 222, 110, -1, -1);
   gInterface.BindObject(eChatGPT_TITLE, 0x7A63, 230, 67, -1, -1);
   gInterface.BindObject(eChatGPT_FRAME, 0x7A58, 230, 15, -1, -1);
   gInterface.BindObject(eChatGPT_FOOTER, 0x7A59, 230, 50, -1, -1);
   gInterface.BindObject(eChatGPT_DIV, 0x7A62, 223, 21, -1, -1);
   gInterface.BindObject(eChatGPT_BOX, 0x7AA3, 170, 21, 220, 140);
   gInterface.BindObject(eChatGPT_OK, 0x7A5F, 62, 27, -1, -1);
   gInterface.BindObject(eChatGPT_CLOSE, 0x7A5F, 62, 27, -1, -1);
}

// ----------------------------------------------------------------------------------------------
void CustomChatGPT::DrawAnimatedGUI(short ObjectID, float PosX, float PosY)
{
   gInterface.Data[ObjectID].X      = PosX;
   gInterface.Data[ObjectID].Y      = PosY;
   gInterface.Data[ObjectID].MaxX   = PosX + gInterface.Data[ObjectID].Width;
   gInterface.Data[ObjectID].MaxY   = PosY + gInterface.Data[ObjectID].Height;
   // ----
   pDrawGUI(gInterface.Data[ObjectID].ModelID, PosX, PosY,
      gInterface.Data[ObjectID].Width, gInterface.Data[ObjectID].Height);
}
// ----------------------------------------------------------------------------------------------


void CustomChatGPT::DrawChatGPT()
{
   if( !gInterface.Data[eChatGPT_MAIN].OnShow )
   {
      //gInterface.Data[eChatGPT_MAIN].FirstLoad = false;
      return;
   }

   if(CheckGPTMain())
   {
      gInterface.CloseWindow(FriendList      );
      gInterface.CloseWindow(MoveList          );
      gInterface.CloseWindow(Party         );
      gInterface.CloseWindow(Quest         );
      gInterface.CloseWindow(NPC_Devin      );
      gInterface.CloseWindow(Guild         );
      gInterface.CloseWindow(Trade         );
      gInterface.CloseWindow(Warehouse      );
      gInterface.CloseWindow(ChaosBox          );
      gInterface.CloseWindow(CommandWindow   );
      gInterface.CloseWindow(PetInfo         );
      gInterface.CloseWindow(Shop             );
      gInterface.CloseWindow(Inventory      );
      gInterface.CloseWindow(Store         );
      gInterface.CloseWindow(OtherStore      );
      gInterface.CloseWindow(Character      );
      gInterface.CloseWindow(DevilSquare      );
      gInterface.CloseWindow(BloodCastle      );
      gInterface.CloseWindow(CreateGuild      );
      gInterface.CloseWindow(GuardNPC          );
      gInterface.CloseWindow(SeniorNPC      );
      gInterface.CloseWindow(GuardNPC2      );
      gInterface.CloseWindow(CastleGateSwitch );
      gInterface.CloseWindow(CatapultNPC      );
      gInterface.CloseWindow(CrywolfGate      );
      gInterface.CloseWindow(IllusionTemple   );
      gInterface.CloseWindow(HeroList          );
      gInterface.CloseWindow(ChatWindow      );
      gInterface.CloseWindow(FastMenu          );
      gInterface.CloseWindow(Options         );
      gInterface.CloseWindow(Help             );
      gInterface.CloseWindow(FastDial          );
      gInterface.CloseWindow(SkillTree      );
      gInterface.CloseWindow(GoldenArcher1   );
      gInterface.CloseWindow(GoldenArcher2   );
      gInterface.CloseWindow(LuckyCoin1      );
      gInterface.CloseWindow(LuckyCoin2      );
      gInterface.CloseWindow(NPC_Duel          );
      gInterface.CloseWindow(NPC_Titus      );
      gInterface.CloseWindow(CashShop          );
      gInterface.CloseWindow(Lugard         );
      gInterface.CloseWindow(QuestList1      );
      gInterface.CloseWindow(QuestList2      );
      gInterface.CloseWindow(Jerint         );
      gInterface.CloseWindow(FullMap         );
      gInterface.CloseWindow(NPC_Dialog      );
      gInterface.CloseWindow(GensInfo          );
      gInterface.CloseWindow(NPC_Julia      );
      gInterface.CloseWindow(NPC_ChaosMix       );
      gInterface.CloseWindow(ExpandInventory   );
      gInterface.CloseWindow(ExpandWarehouse   );
      gInterface.CloseWindow(MuHelper          );
   }

   if(gInterface.Data[eChatGPT_MAIN].OnShow == true)
   {
      gInterface.CheckWindow(ChatWindow);
      gInterface.CheckWindow(FriendList);   
      gInterface.CheckWindow(MoveList);     
      gInterface.CheckWindow(Party);     
      gInterface.CheckWindow(Quest);           
      gInterface.CheckWindow(Guild);                                       
      gInterface.CheckWindow(SkillTree);
   }

   pSetCursorFocus = true;

   DWORD ItemNameColor      = eWhite;
   float MainWidth         = 230.0;
   float MainHeight      = 130;
   float StartY         = 100.0;
   float StartX         = (MAX_WIN_WIDTH / 2) - (MainWidth / 2);
   float MainCenter      = StartX + (MainWidth / 3);
   float ButtonX         = MainCenter - (29.0 / 2);
   // ----
   this->DrawAnimatedGUI(eChatGPT_MAIN, StartX+4, StartY + 4);
   this->DrawAnimatedGUI(eChatGPT_TITLE, StartX, StartY);
   StartY = gInterface.DrawRepeatGUI(eChatGPT_FRAME, StartX, StartY + 67.0, 0);
   this->DrawAnimatedGUI(eChatGPT_FOOTER, StartX, StartY);
   // ----
   gInterface.DrawFormat(eGold, StartX + 10, 110, 210, 3, "CHAT AI");
   
   gInterface.DrawGUI(eChatGPT_BOX,230,140);
   if (gInterface.Data[eChatGPT_BOX].Attribute == 1)
   {
      DWORD Color = eGray100;
      gInterface.DrawColoredGUI(eChatGPT_BOX, gInterface.Data[eChatGPT_BOX].X + 10, gInterface.Data[eChatGPT_BOX].Y, Color);
   }
   gInterface.DrawFormat(eGold, StartX + 40, 144, 50, 3, "Nhập câu hỏi");

   gInterface.DrawFormat(eWhite, 280, 144, 150, 3, gInterface.Data[eChatGPT_BOX].StatValue);

   this->DrawAnimatedGUI(eChatGPT_OK, StartX+30, StartY /*- 5*/);
   gInterface.DrawFormat(eWhite, StartX + 35, StartY+5 + 5, 50, 3, "GỬI");

   if( gInterface.IsWorkZone(eChatGPT_OK) )
   {
      DWORD Color = eGray100;
      // ----
      if( gInterface.Data[eChatGPT_OK].OnClick )
      {
         Color = eGray150;
      }
      // ----
      gInterface.DrawColoredGUI(eChatGPT_OK, gInterface.Data[eChatGPT_OK].X, gInterface.Data[eChatGPT_OK].Y, Color);
   }
   // ----
   this->DrawAnimatedGUI(eChatGPT_CLOSE, StartX + 70 + 62, StartY /*- 5*/ );
   gInterface.DrawFormat(eWhite, StartX + 75 + 62, StartY+5 + 5, 50, 3, "HỦY");

   if( gInterface.IsWorkZone(eChatGPT_CLOSE) )
   {
      DWORD Color = eGray100;
      // ----
      if( gInterface.Data[eChatGPT_CLOSE].OnClick )
      {
         Color = eGray150;
      }
      // ----
      gInterface.DrawColoredGUI(eChatGPT_CLOSE, gInterface.Data[eChatGPT_CLOSE].X, gInterface.Data[eChatGPT_CLOSE].Y, Color);
   }
}

void CustomChatGPT::EventChatGPT_Main(DWORD Event)
{
   DWORD CurrentTick = GetTickCount();

   if( !gInterface.Data[eChatGPT_MAIN].OnShow )
   {
      return;
   }
   
   if (gInterface.IsWorkZone(eChatGPT_BOX))
   {
      DWORD Delay = (CurrentTick - gInterface.Data[eChatGPT_BOX].EventTick);
      // ----
      if (Event == WM_LBUTTONDOWN)
      {
         gInterface.Data[eChatGPT_BOX].OnClick = true;
         pSetCursorFocus = true;
         return;
      }
      // ----
      gInterface.Data[eChatGPT_BOX].OnClick = false;
      pSetCursorFocus = false;
      // ----
      if (Delay < 500)
      {
         return;
      }
      // ----
      gInterface.Data[eChatGPT_BOX].EventTick = GetTickCount();
      //Func
      gInterface.Data[eChatGPT_BOX].Attribute = 1;
   }

   if (gInterface.IsWorkZone(eChatGPT_OK))
   {
      DWORD Delay = (CurrentTick - gInterface.Data[eChatGPT_OK].EventTick);
      // ----
      if (Event == WM_LBUTTONDOWN)
      {
         gInterface.Data[eChatGPT_OK].OnClick = true;
         pSetCursorFocus = true;
         return;
      }
      // ----
      gInterface.Data[eChatGPT_OK].OnClick = false;
      pSetCursorFocus = false;
      // ----
      if (Delay < 500)
      {
         return;
      }
      // ----
      SendText(gInterface.Data[eChatGPT_BOX].StatValue);
      sprintf(g_CustomChatGPT.TextGet, "%s", gInterface.Data[eChatGPT_BOX].StatValue);
   }

   if (gInterface.IsWorkZone(eChatGPT_CLOSE))
   {
      DWORD Delay = (CurrentTick - gInterface.Data[eChatGPT_CLOSE].EventTick);
      // ----
      if (Event == WM_LBUTTONDOWN)
      {
         gInterface.Data[eChatGPT_CLOSE].OnClick = true;
         pSetCursorFocus = true;
         return;
      }
      // ----
      gInterface.Data[eChatGPT_CLOSE].OnClick = false;
      pSetCursorFocus = false;
      // ----
      if (Delay < 500)
      {
         return;
      }
      // ----
      gInterface.Data[eChatGPT_CLOSE].EventTick = GetTickCount();
      //Func
      gInterface.Data[eChatGPT_MAIN].Close();
      sprintf(gInterface.Data[eChatGPT_BOX].StatValue, "0");
   }
}
void CustomChatGPT::ControlTextBox(DWORD Event)
{

   if (gInterface.Data[eChatGPT_MAIN].OnShow)
   {
      char Value[20];
      int IsBackspace = false;
      int IsDelete = false;

      if (Event == VK_BACK)
      {
         IsBackspace = true;
      }
      else if (Event == VK_DELETE)
      {
         IsDelete = true;
      }
      else if ((Event >= 0x30 && Event <= 0x39) || (Event >= 0x60 && Event <= 0x69) || (Event >= 0x41 && Event <= 0x5A) || Event == 0x20)
      {
         int Symbol = GetSymbolFromVK(Event);
         if (Symbol == 0)
         {
            return;
         }
         char buff[10];
         sprintf(buff, "%c", Symbol);
         strcpy_s(Value, buff);
      }
      else
      {
         return;
      }

      int   ObjectID = eChatGPT_BOX;

         if (gInterface.Data[eChatGPT_BOX].Attribute == 1)
         {
            //SelectedIndex = i;
            if (IsBackspace == true)
            {
               gInterface.Data[ObjectID].StatValue[strlen(gInterface.Data[ObjectID].StatValue)-1]= '\0';

               if (strlen(gInterface.Data[ObjectID].StatValue) == 0)
               {
                  strcpy_s(gInterface.Data[ObjectID].StatValue, "0");
               }
               //break;
            }
            else if (IsDelete == true)
            {
               strcpy_s(gInterface.Data[ObjectID].StatValue, "0");
            }

            else
            {
               if (strlen(gInterface.Data[ObjectID].StatValue) < 18)
               {
                  if (!strcmp(gInterface.Data[ObjectID].StatValue, "0"))
                  {
                     strcpy_s(gInterface.Data[ObjectID].StatValue, Value);
                  }
                  else
                  {
                     strcat_s(gInterface.Data[ObjectID].StatValue, Value);
                  }   
               }         
            }
         }

      return;
   }

   return;
}


DWORD WINAPI curl_thread(LPVOID lpParam)
{
   CustomChatGPT* chatGPT = static_cast(lpParam);
   char Text3[1024];
   std::deque chat_messages;

   const rsize_t maxText = 512, maxWord = 64;
   char r[maxText], s[maxText], s1[maxWord], s2[maxWord];
   std::string api_key = "API_KEY";
   CURL* curl = curl_easy_init();

   if (curl) {
      curl_easy_setopt(curl, CURLOPT_URL, "https://api.openai.com/v1/chat/completions");
      curl_easy_setopt(curl, CURLOPT_POST, 1);
      std::string prompt(chatGPT->TextGet);
      std::string payload = "{\"model\": \"gpt-3.5-turbo\",\"messages\": [{\"role\": \"user\", \"content\": \"" + prompt + "\"""}]\}";
      curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload.c_str());
      struct curl_slist* headers = nullptr;
      headers = curl_slist_append(headers, ("Authorization: Bearer " + api_key).c_str());
      headers = curl_slist_append(headers, "Content-Type: application/json");
      curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
      std::vector response_data;
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_callback);
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_data);
      CURLcode res = curl_easy_perform(curl);
      if (res != CURLE_OK) {
         return 0;
      }
      curl_slist_free_all(headers);
      curl_easy_cleanup(curl);
      std::string response_string(response_data.begin(), response_data.end());

      size_t start_pos = response_string.find("\"message\":{") + 1;
      start_pos = response_string.find("\"content\":", start_pos) + 11;
      size_t end_pos = response_string.find("\"", start_pos);
      std::string generated_text = response_string.substr(start_pos, end_pos - start_pos);

      for (size_t i = 0; i < generated_text.length(); i += 125) {
         std::string line = generated_text.substr(i, 125);
         if (thay(r, maxText, line.c_str(), "AI", "AI đệ của anh GAMECUX") == 0) {
            sprintf(Text3, "%s", r);
            chat_messages.push_back("Hệ Thống: " + std::string(Text3));
         }
      }
   }
   curl_global_cleanup();

   while (!chat_messages.empty()) {
      AddChatMessage(2, chat_messages.front().c_str());
      chat_messages.pop_front();
   }
   sprintf(gInterface.Data[eChatGPT_BOX].StatValue, "");

   chatGPT->IsProcessing = false;
   return 0;
}

void CustomChatGPT::SendText(char* text)
{

   /*if (IsProcessing) {
      return;
   }

   IsProcessing = true;*/

   char Text3[1024];
   char Text4[1024];
   const rsize_t maxText = 512, maxWord = 64;
   char r[maxText], s[maxText], s1[maxWord], s2[maxWord];
   sprintf(Text4, "%s", text);
   std::string prompt(Text4);

   HANDLE thread = CreateThread(NULL, 0, curl_thread, (LPVOID)prompt.c_str(), 0, NULL);

   if (thread == NULL) {
      // Không tạo được thread, xử lý lỗi tại đây (nếu cần)
      IsProcessing = false;
      return;
   }

   // Đợi thread kết thúc
   //WaitForSingleObject(thread, INFINITE);
   CloseHandle(thread);
   sprintf(gInterface.Data[eChatGPT_BOX].StatValue, "");
}

#endif



.h

#pragma once
#if(CHAT_GPT)
#include "Interface.h"

class CustomChatGPT
{
public:
   CustomChatGPT(void);
   virtual ~CustomChatGPT(void);
   

   void   loadBind();
   static void LoadImgGCode();
   void DrawChatGPT();
   void DrawAnimatedGUI(short ObjectID, float PosX, float PosY);
   void EventChatGPT_Main(DWORD Event);
   void SwitchChatGPT(){ (gInterface.Data[eChatGPT_MAIN].OnShow == true) ? gInterface.Data[eChatGPT_MAIN].Close() : gInterface.Data[eChatGPT_MAIN].Open(); };

   void ShowGPTMain(){ gInterface.Data[eChatGPT_MAIN].OnShow = true;};
   bool CheckGPTMain() { return gInterface.Data[eChatGPT_MAIN].OnShow; };
   void CloseGPTMain() { gInterface.Data[eChatGPT_MAIN].OnShow = false;};

   void ControlTextBox(DWORD Event);
   void SendText(char * text);
   char TextGet[150];
   bool IsProcessing;
   
};
extern CustomChatGPT g_CustomChatGPT;
#endif



Creditos
showmax
Bon Dia

🡱 🡳