Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: Source of fix for Fire SLash skill being affected by Twisting SLash (Main 1.04E)  (Visto 2738 veces)

Hiếu Đại Ca and 1 Guest are viewing this topic.

Offline NghienMU Posteado: January 31, 2024, 11:28:56 PM | Modificado: June 11, 2024, 10:06:48 PM by NghienMU

  • 0 puntos por ventas
  • *
  • Rank: Heroe
  • Posts: 170
  • Gracias recibida: 41
  • vn
Most current Main mu from 0.97 to S6 have this bug. This is source to fix this bug on main 1.04e. To fix on other mains you need to change the corresponding offsets of that main. Hopefully someone can supplement other mains.

IncreaseEffects.cpp:

Code: [Select]
#include "stdafx.h"
#include "IncreaseEffects.h"
#include "Util.h"

cIncreaseEffects IncreaseEffects;

cIncreaseEffects::cIncreaseEffects()
{
for (int i = 0; i < MAX_JOINTS; i++)
{
this->Joints[i].Live = 0;
}

this->Hook();
}

cIncreaseEffects::~cIncreaseEffects()
{

}

DWORD cIncreaseEffects::GetAddressJoints()
{
return (DWORD)&IncreaseEffects.Joints;
}

void cIncreaseEffects::Hook()
{
DWORD AddressJoints = this->GetAddressJoints();

SetDword(0x005F308B + 2, AddressJoints);
SetDword(0x006F80FF + 2, AddressJoints);
SetDword(0x0072D1E2 + 2, AddressJoints);
SetDword(0x00735E8E + 2, AddressJoints);
SetDword(0x00735F3A + 2, AddressJoints);
SetDword(0x00735F9A + 2, AddressJoints);
SetDword(0x00747D2A + 2, AddressJoints);
SetDword(0x00747D91 + 2, AddressJoints);

SetDword(0x00747D18 + 3, MAX_JOINTS);
SetDword(0x0072D1CC + 3, MAX_JOINTS);
SetDword(0x00735F88 + 3, MAX_JOINTS);
SetDword(0x00735F28 + 3, MAX_JOINTS);
SetDword(0x00735E78 + 3, MAX_JOINTS);
SetDword(0x005F3079 + 3, MAX_JOINTS);
}


IncreaseEffects.h:

Code: [Select]
#pragma once
#include "Object.h"
#include "ObjectInfo.h"

#define MAX_JOINTS 5000

struct JOINT
{
bool Live;
int Type;
int TexType;
int SubType;
BYTE RenderType;
BYTE RenderFace;
float Scale;
vec3_t Position;
vec3_t StartPosition;
vec3_t Angle;
vec3_t HeadAngle;
vec3_t Light;
OBJECT *Target;
vec3_t TargetPosition;
BYTE byOnlyOneRender;
int NumTails;
int MaxTails;
vec3_t Tails[50][4];
int LifeTime;
bool Collision;
float Velocity;
vec3_t Direction;
__int16 PKKey;
WORD Skill;
BYTE Weapon;
int MultiUse;
bool bTileMapping;
BYTE m_byReverseUV;
bool m_bCreateTails;
int TargetIndex[5];
BYTE m_bySkillSerialNum;
int m_iChaIndex;
__int16 m_sTargetIndex;
};

class cIncreaseEffects
{
public:
cIncreaseEffects();
~cIncreaseEffects();

void Hook();
DWORD GetAddressJoints();
JOINT Joints[MAX_JOINTS];
private:

};

extern cIncreaseEffects IncreaseEffects;


Video bug:

Gracias:


Offline lkt22 #1 Posteado: February 01, 2024, 12:02:39 AM

  • 0 puntos por ventas
  • *
  • Rank: Experto
  • Posts: 152
  • Gracias recibida: 68
  • br

Offline redf0x #2 Posteado: February 01, 2024, 03:52:58 AM

  • 0 puntos por ventas
  • *
  • Rank: Avanzado
  • Posts: 133
  • Gracias recibida: 1494
  • vn
i have fix on gs side work for all muemu :D
mydiscord redf0x4705

http://muredteam.com/
redf0x#4705 My discord

Gracias:


Offline Van_Bom #3 Posteado: May 19, 2024, 10:21:18 PM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 47
  • Gracias recibida: 12
  • vn
That fix don't work, don't use it  ( to Viet Nam cái mã nguồn trên up là bị thiếu và lỗi tùm lum anh em sài cách fix sau đây dễ và ngon hơn )
in source main of EMU

STEP 1: in file Protocol.cpp  go to void GCCharacterInfoRecv(PMSG_CHARACTER_INFO_RECV* lpMsg) // OK
we see
   switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:// Neu day la MG da duoc Fix lai trong ham void User::Refresh()   User.cpp
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }
we delete it or change to
   /*switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:// Neu day la MG da duoc Fix lai trong ham void User::Refresh()   User.cpp
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }*/

STEP 2: go to User.cpp we see void User::Refresh()
we see
   if (gObjUser.GetActiveSkill() == 261 || gObjUser.GetActiveSkill() == 552 || gObjUser.GetActiveSkill() == 555)
   {
         //lpPlayer->AttackSpeed = (WORD)10;
         //lpPlayer->MagicSpeed = (WORD)10;
      //SetOp((LPVOID)0x007801AC, (LPVOID)lpPlayer->AttackSpeed, ASM::CALL);
      SetDouble(&pFrameSpeed1, 0.0004000);
      SetDouble(&pFrameSpeed2, 0.0002000);
   }
   else
   {
      SetDouble(&pFrameSpeed1, 0.0040000);
      SetDouble(&pFrameSpeed2, 0.0020000);
            
   }
/////////  we add code herre ////////////

and we add
   switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:
         if (gObjUser.GetActiveSkill() == 55)// 55 chem lua 56 la vay kiem run
         {
            SetByte(0x00556C38,((gProtect.m_MainInfo.MGMaxAttackSpeed>=0xFFFF)?0x11:0x0F));
         }
         else
         {
            SetByte(0x00556C38,((gProtect.m_MainInfo.MGMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         }
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }

Gracias:


Offline nhantac #4 Posteado: May 20, 2024, 02:45:29 AM

  • 0 puntos por ventas
  • *
  • Rank: Usuario activo
  • Posts: 62
  • Gracias recibida: 76
  • vn
That fix don't work, don't use it  ( to Viet Nam cái mã nguồn trên up là bị thiếu và lỗi tùm lum anh em sài cách fix sau đây dễ và ngon hơn )
in source main of EMU

STEP 1: in file Protocol.cpp  go to void GCCharacterInfoRecv(PMSG_CHARACTER_INFO_RECV* lpMsg) // OK
we see
   switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:// Neu day la MG da duoc Fix lai trong ham void User::Refresh()   User.cpp
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }
we delete it or change to
   /*switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:// Neu day la MG da duoc Fix lai trong ham void User::Refresh()   User.cpp
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }*/

STEP 2: go to User.cpp we see void User::Refresh()
we see
   if (gObjUser.GetActiveSkill() == 261 || gObjUser.GetActiveSkill() == 552 || gObjUser.GetActiveSkill() == 555)
   {
         //lpPlayer->AttackSpeed = (WORD)10;
         //lpPlayer->MagicSpeed = (WORD)10;
      //SetOp((LPVOID)0x007801AC, (LPVOID)lpPlayer->AttackSpeed, ASM::CALL);
      SetDouble(&pFrameSpeed1, 0.0004000);
      SetDouble(&pFrameSpeed2, 0.0002000);
   }
   else
   {
      SetDouble(&pFrameSpeed1, 0.0040000);
      SetDouble(&pFrameSpeed2, 0.0020000);
            
   }
/////////  we add code herre ////////////

and we add
   switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:
         if (gObjUser.GetActiveSkill() == 55)// 55 chem lua 56 la vay kiem run
         {
            SetByte(0x00556C38,((gProtect.m_MainInfo.MGMaxAttackSpeed>=0xFFFF)?0x11:0x0F));
         }
         else
         {
            SetByte(0x00556C38,((gProtect.m_MainInfo.MGMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         }
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }
chưa test nhưng cám ơn người a e.

Gracias:


Offline Van_Bom #5 Posteado: May 20, 2024, 09:48:44 PM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 47
  • Gracias recibida: 12
  • vn

Offline lkt22 #6 Posteado: May 20, 2024, 11:08:30 PM

  • 0 puntos por ventas
  • *
  • Rank: Experto
  • Posts: 152
  • Gracias recibida: 68
  • br
user with Luis EMU SS6 Update 15

@Van_Bom can u make a video showing it ?
or would it be too much to ask ? ty anyways


Offline Van_Bom #7 Posteado: May 21, 2024, 12:43:33 AM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 47
  • Gracias recibida: 12
  • vn

@Van_Bom can u make a video showing it ?
or would it be too much to ask ? ty anyways
[/quote]

this is bug and fix in video you can see that


Offline lkt22 #8 Posteado: May 21, 2024, 01:41:54 AM | Modificado: May 21, 2024, 02:16:04 AM by lkt22

  • 0 puntos por ventas
  • *
  • Rank: Experto
  • Posts: 152
  • Gracias recibida: 68
  • br

Offline Van_Bom #9 Posteado: May 21, 2024, 01:44:24 AM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 47
  • Gracias recibida: 12
  • vn
STEP 1: in file Protocol.cpp  go to void GCCharacterInfoRecv(PMSG_CHARACTER_INFO_RECV* lpMsg) // OK
we see
   switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:// Neu day la MG da duoc Fix lai trong ham void User::Refresh()   User.cpp
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }
we delete it or change to
   /*switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:// Neu day la MG da duoc Fix lai trong ham void User::Refresh()   User.cpp
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }*/

STEP 2: go to User.cpp we see void User::Refresh()
we see
   if (gObjUser.GetActiveSkill() == 261 || gObjUser.GetActiveSkill() == 552 || gObjUser.GetActiveSkill() == 555)
   {
         //lpPlayer->AttackSpeed = (WORD)10;
         //lpPlayer->MagicSpeed = (WORD)10;
      //SetOp((LPVOID)0x007801AC, (LPVOID)lpPlayer->AttackSpeed, ASM::CALL);
      SetDouble(&pFrameSpeed1, 0.0004000);
      SetDouble(&pFrameSpeed2, 0.0002000);
   }
   else
   {
      SetDouble(&pFrameSpeed1, 0.0040000);
      SetDouble(&pFrameSpeed2, 0.0020000);
           
   }
/////////  we add code herre ////////////

and we add
   switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:
         if (gObjUser.GetActiveSkill() == 55)// 55 chem lua 56 la vay kiem run
         {
            SetByte(0x00556C38,((gProtect.m_MainInfo.MGMaxAttackSpeed>=0xFFFF)?0x11:0x0F));
         }
         else
         {
            SetByte(0x00556C38,((gProtect.m_MainInfo.MGMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         }
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }

you can test with Louis EMU SS6 Update 15


Offline louis #10 Posteado: May 28, 2024, 10:30:25 AM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • C++ Coder
  • +11 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 848
  • Gracias recibida: 37440
  • br
First thanks for the fix, you increased the max effects to 5000, maybe can cause lags, but i will try.

another way to fix:

Update 36 is ready!!!

Offline lkt22 #11 Posteado: May 28, 2024, 11:21:55 AM

  • 0 puntos por ventas
  • *
  • Rank: Experto
  • Posts: 152
  • Gracias recibida: 68
  • br
First thanks for the fix, you increased the max effects to 5000, maybe can cause lags, but i will try.

another way to fix:

funcionou pra você, @louis ?


Offline louis #12 Posteado: May 28, 2024, 02:19:29 PM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • C++ Coder
  • +11 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 848
  • Gracias recibida: 37440
  • br
First thanks for the fix, you increased the max effects to 5000, maybe can cause lags, but i will try.

another way to fix:

funcionou pra você, @louis ?

Sim, está funcionando, já estou testando o desempenho, mas está ok até agora.

Update 36 is ready!!!

Offline lkt22 #13 Posteado: May 28, 2024, 03:46:46 PM

  • 0 puntos por ventas
  • *
  • Rank: Experto
  • Posts: 152
  • Gracias recibida: 68
  • br
First thanks for the fix, you increased the max effects to 5000, maybe can cause lags, but i will try.

another way to fix:

funcionou pra você, @louis ?

Sim, está funcionando, já estou testando o desempenho, mas está ok até agora.

pode mandar como definiu essa "ChangeAddress" ?


Offline louis #14 Posteado: May 28, 2024, 05:50:25 PM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • C++ Coder
  • +11 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 848
  • Gracias recibida: 37440
  • br
First thanks for the fix, you increased the max effects to 5000, maybe can cause lags, but i will try.

another way to fix:

funcionou pra você, @louis ?

Sim, está funcionando, já estou testando o desempenho, mas está ok até agora.

pode mandar como definiu essa "ChangeAddress" ?

No util.cpp

void ChangeAddress(DWORD Addr, DWORD AddrNew)
{
   DWORD OldProtect;
   VirtualProtect((LPVOID)Addr, 4, PAGE_EXECUTE_READWRITE, &OldProtect);

   __asm {
      MOV EAX, Addr;
      MOV EDX, AddrNew;
      MOV DWORD PTR DS:[EAX], EDX;
   }
   VirtualProtect((LPVOID)Addr, 4, OldProtect, &OldProtect);
}

Update 36 is ready!!!

Gracias:


Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
8 Replies
2866 Views
Last post October 03, 2018, 08:26:26 AM
by Cloud
4 Replies
2839 Views
Last post August 21, 2022, 07:21:15 PM
by visionmu
9 Replies
1675 Views
Last post June 24, 2021, 02:34:52 PM
by JavixFer
1 Replies
2409 Views
Last post November 12, 2022, 08:31:27 PM
by c4nhsatcodong
12 Replies
1957 Views
Last post May 21, 2023, 11:36:40 PM
by sanlp