Informacion de gracias

Show post that are related to the Thank-O-Matic. It will show the messages where you become a Thank You from an other users.


Messages - xampoulis

@firemarcos me podrías explicar cómo editar el main ? Todo enciende bien , tuve un problema con el joinserver pero probé con unas obdc que venían en unos files mu emu s6 y inicio todo correctamente.
El problema es que no pasa de el antihack porque supuestamente no hay conexión con el servidor pero tengo todo correctamente configurado, puertos y firewall desactivado porque ya he probado otros files pero no se si estoy configurando mal los archivos del main.
Empezando que los files vienen con un data para el cliente y supongo que debo agregarlo al cliente y de resto lo configure como se configura el main de cualquier otro cliente mu emu, me podrían explicar paso a paso de cómo configurar el main por si depronto estoy haciendo algo incorrectamente.  Please !!
Gracias


Gracias:

//ChangeLog MuEmu by louis
//Muserver Season 4,6,8

JANUARY 2017
- Add CustomMove
- Add Rei do MU Event
- Fix CustomJewel in Main
- Active MHP

FEBRUARY 2017
- Add HpBonus System
- Add Kill Message System
- Add MessageBox Yes/No on Close Gameserver
- Add MasterSkillTree Reset
- Fix Duel DC (s8)
- Fix Pentagram jewel(remove before put in ware) (s8)

MARCH 2017
- Fix Duel Trade (s8)
- Add Main Memory reduction
- Add Guard CustomMessage
- Add Colunn Score_semanal in RankingDevilSquare
- Add Colunn Score_semanal in RankingBloodCastle
- Add Colunn Score_semanal in RankingChaos Castle
- Add Colunn Score_semanal in RankingIllusionTemple
- Add Colunn WinScore_semanal in RankingDuel
- Add in DataServer update semanal colls

APRIL 2017
- Add BotBuffer System
- Add SD/HD bar in Character (S4/S6)
- Add Command Clear Inventory
- Active Encrypt in Client/Server.
- Fix Friend Message Title Inject (DataServer)

MAY 2017
- Add OpenWare Command
- Add SetVip Command
- Add Marry System
- Change HP/SD Bar Interface
- Fix BotBuffer Power
- Fix Store Dupe
- Fix Duel MinLevel

JUNE 2017
- Add Reload Command
- Add Reward Command
- Add ChangeClass Command
- Add OnlineLottery Event
- Add Disconnect User in GameServer Menu
- Add Start OnlineLoterry GameServer Menu
- Add OffStore and OffAttack count in GameServer Title Bar

JULY 2017 UPDATE 2
- Add Itens Level +15 (Season 4)
- Add Info Command
- Add Change Name Command
- Add BanAcc Command
- Add BanChar Command
- Add DynamicEffect in Main (S4/S6/S8)
- Add Max Use Time in Attack command
- Add Option to disable Online User/GM Message
- Add Event Hide and Seek
- Add Event Run and Catch
- Add option to disable exp message on kill mob
- Change MaxCustom Wings to 100
- Fix Money remove when use ResetTable system.
- Fix Socket jewel aplly in no socket item
- Fix CustomEffect problems in Main.dll
- Fix remove BC,DS,IT invite
- Fix Skill elf on /attack
- Fix Clear Effects on change class
- Fix /store bless Crash (Season 6)
- Add Custom Summon on Kill Mob
- Evento Veloz
- /openevent /join
- Disable/Enable Skill Effect (Ex:Cyclone)
- Add Custom exp on Offattack and Autoreset

AUGUST 2017 UPDATE 3
- Add MakeSet Command
- Add Drop Command
- Option to Remove Offstore/offattack in OnlineLottery
- Jewel of socket Aply in pentagram (Season8)
- ADD gift command
- Add Custom Quest System
- Add Russian Roulette Event
- Add Max Use Time in Store command
- New King of Mu Event
- Add Reward Coins in BC,DS,CC
- add /toprr /topmr etc
- Somente gm fazer o casamento
- Disable Wing Mix Class

SEPTEMBER 2017 UPDATE 4
- Remove Class in Main (RF,SU,DL)
- Custom Auto Quiz Event
- Need ticket to change name Option (S6/S8)
- Custom WingMix (Chaos Mix)
- Custom Death Message
- Custom Npc Collector (trade items per Coins)
- Readd point command
- Advanced Make itens (/make, /drop, /makeset)
- Custom Rank User System (S4,S6)
- Disable HP Bar of Monster or User Option
- Updated JoinServer to fix dupes
- Allow Pk enter in events (BC,CC,DS)



Credits
MuEmu
louis
X-team
Tengo la fuente louis update 4 :) Lo donaré al foro free ;)

Gracias:

GameServer


#define  MAX_CUSTOM_WING 100

Procurar no Item.cpp

Citar
__declspec(naked) void WingMakePreviewCharSet() // OK
{
   static DWORD WingMakePreviewCharSetAddress1 = 0x004F71DE;
   static DWORD WingMakePreviewCharSetAddress2 = 0x004F717D;

   _asm
   {
      Mov Ecx,Dword Ptr Ss:[Ebp+0x0C]
      Movzx Edx,Byte Ptr Ds:[Ecx+0x10]
      Sar Edx,0x01
      And Edx,0xFF
      Test Edx,Edx
      Je EXIT
      Mov Eax,Dword Ptr Ss:[Ebp+0x0C]
      Movzx Ecx,Byte Ptr Ds:[Eax+0x10]
      Sar Ecx,0x01
      And Ecx,0xFF
      Sub Ecx,0x01
      Push Ecx
      Lea Ecx,gCustomWing
      Call [CCustomWing::CheckCustomWing]
      Test Eax,Eax
      Je EXIT
      Mov Edx,Dword Ptr Ss:[Ebp+0x0C]
      Movzx Eax,Byte Ptr Ds:[Edx+0x10]
      Sar Eax,0x01
      And Eax,0xFF
      Sub Eax,0x01
      Push Eax
      Lea Ecx,gCustomWing
      Call [CCustomWing::GetCustomWingItem]
      Add Eax,ITEM_BASE_MODEL
      Mov Ecx,Dword Ptr Ss:[Ebp-0x08]
      Mov Word Ptr Ds:[Ecx+0x1C0],Ax
      Jmp [WingMakePreviewCharSetAddress1]
      EXIT:
      Mov Eax,Dword Ptr Ss:[Ebp-0x04]
      And Eax,0xFF
      Jmp [WingMakePreviewCharSetAddress2]
   }
}





CustomWing.h


Code: [Select]
// CustomWing.h: interface for the CCustomWing class.
//
//////////////////////////////////////////////////////////////////////

#pragma once

[URL=http://perfectzone.com.br/usertag.php?do=list&action=hash&hash=define]#define[/URL]  MAX_CUSTOM_WING 100

struct CUSTOM_WING_INFO
{
int Index;
int ItemIndex;
int DefenseConstA;
int IncDamageConstA;
int IncDamageConstB;
int DecDamageConstA;
int DecDamageConstB;
int OptionIndex1;
int OptionValue1;
int OptionIndex2;
int OptionValue2;
int OptionIndex3;
int OptionValue3;
int NewOptionIndex1;
int NewOptionValue1;
int NewOptionIndex2;
int NewOptionValue2;
int NewOptionIndex3;
int NewOptionValue3;
int NewOptionIndex4;
int NewOptionValue4;
int ModelType;
char ModelName[32];
};

class CCustomWing
{
public:
CCustomWing();
virtual ~CCustomWing();
void Init();
void Load(char* path);
void SetInfo(CUSTOM_WING_INFO info);
CUSTOM_WING_INFO* GetInfo(int index);
CUSTOM_WING_INFO* GetInfoByItem(int ItemIndex);
bool CheckCustomWing(int index);
bool CheckCustomWingByItem(int ItemIndex);
int GetCustomWingIndex(int ItemIndex);
int GetCustomWingDefense(int ItemIndex,int ItemLevel);
int GetCustomWingIncDamage(int ItemIndex,int ItemLevel);
int GetCustomWingDecDamage(int ItemIndex,int ItemLevel);
int GetCustomWingOptionIndex(int ItemIndex,int OptionNumber);
int GetCustomWingOptionValue(int ItemIndex,int OptionNumber);
int GetCustomWingNewOptionIndex(int ItemIndex,int OptionNumber);
int GetCustomWingNewOptionValue(int ItemIndex,int OptionNumber);
public:
CUSTOM_WING_INFO m_CustomWingInfo[MAX_CUSTOM_WING];
};

extern CCustomWing gCustomWing;

CustomWing.cpp

Code: [Select]
// CustomWing.cpp: implementation of the CCustomWing class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CustomWing.h"
#include "MemScript.h"
#include "Util.h"

CCustomWing gCustomWing;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCustomWing::CCustomWing() // OK
{
this->Init();
}

CCustomWing::~CCustomWing() // OK
{

}

void CCustomWing::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_WING;n++)
{
this->m_CustomWingInfo[n].Index = -1;
}
}

void CCustomWing::Load(char* path) // OK
{
CMemScript* lpMemScript = new CMemScript;

if(lpMemScript == 0)
{
ErrorMessageBox(MEM_SCRIPT_ALLOC_ERROR,path);
return;
}

if(lpMemScript->SetBuffer(path) == 0)
{
ErrorMessageBox(lpMemScript->GetLastError());
delete lpMemScript;
return;
}

this->Init();

try
{
while(true)
{
if(lpMemScript->GetToken() == TOKEN_END)
{
break;
}

if(strcmp("end",lpMemScript->GetString()) == 0)
{
break;
}

CUSTOM_WING_INFO info;

memset(&info,0,sizeof(info));

info.Index = lpMemScript->GetNumber();

info.ItemIndex = lpMemScript->GetAsNumber();

info.DefenseConstA = lpMemScript->GetAsNumber();

info.IncDamageConstA = lpMemScript->GetAsNumber();

info.IncDamageConstB = lpMemScript->GetAsNumber();

info.DecDamageConstA = lpMemScript->GetAsNumber();

info.DecDamageConstB = lpMemScript->GetAsNumber();

info.OptionIndex1 = lpMemScript->GetAsNumber();

info.OptionValue1 = lpMemScript->GetAsNumber();

info.OptionIndex2 = lpMemScript->GetAsNumber();

info.OptionValue2 = lpMemScript->GetAsNumber();

info.OptionIndex3 = lpMemScript->GetAsNumber();

info.OptionValue3 = lpMemScript->GetAsNumber();

info.NewOptionIndex1 = lpMemScript->GetAsNumber();

info.NewOptionValue1 = lpMemScript->GetAsNumber();

info.NewOptionIndex2 = lpMemScript->GetAsNumber();

info.NewOptionValue2 = lpMemScript->GetAsNumber();

info.NewOptionIndex3 = lpMemScript->GetAsNumber();

info.NewOptionValue3 = lpMemScript->GetAsNumber();

info.NewOptionIndex4 = lpMemScript->GetAsNumber();

info.NewOptionValue4 = lpMemScript->GetAsNumber();

info.ModelType = lpMemScript->GetAsNumber();

strcpy_s(info.ModelName,lpMemScript->GetAsString());

this->SetInfo(info);
}
}
catch(...)
{
ErrorMessageBox(lpMemScript->GetLastError());
}

delete lpMemScript;
}

void CCustomWing::SetInfo(CUSTOM_WING_INFO info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_WING)
{
return;
}

this->m_CustomWingInfo[info.Index] = info;
}

CUSTOM_WING_INFO* CCustomWing::GetInfo(int index) // OK
{
if(index < 0 || index >= MAX_CUSTOM_WING)
{
return 0;
}

if(this->m_CustomWingInfo[index].Index != index)
{
return 0;
}

return &this->m_CustomWingInfo[index];
}

CUSTOM_WING_INFO* CCustomWing::GetInfoByItem(int ItemIndex) // OK
{
for(int n=0;n < MAX_CUSTOM_WING;n++)
{
CUSTOM_WING_INFO* lpInfo = this->GetInfo(n);

if(lpInfo == 0)
{
continue;
}

if(lpInfo->ItemIndex == ItemIndex)
{
return lpInfo;
}
}

return 0;
}

bool CCustomWing::CheckCustomWing(int index) // OK
{
if(this->GetInfo(index) != 0)
{
return 1;
}

return 0;
}

bool CCustomWing::CheckCustomWingByItem(int ItemIndex) // OK
{
if(this->GetInfoByItem(ItemIndex) != 0)
{
return 1;
}

return 0;
}

int CCustomWing::GetCustomWingIndex(int ItemIndex) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

return lpInfo->Index;
}

int CCustomWing::GetCustomWingDefense(int ItemIndex,int ItemLevel) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

return (lpInfo->DefenseConstA*ItemLevel);
}

int CCustomWing::GetCustomWingIncDamage(int ItemIndex,int ItemLevel) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 100;
}

return (lpInfo->IncDamageConstA+(ItemLevel*lpInfo->IncDamageConstB));
}

int CCustomWing::GetCustomWingDecDamage(int ItemIndex,int ItemLevel) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 100;
}

return (lpInfo->DecDamageConstA-(ItemLevel*lpInfo->DecDamageConstB));
}

int CCustomWing::GetCustomWingOptionIndex(int ItemIndex,int OptionNumber) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

switch(OptionNumber)
{
case 0:
return lpInfo->OptionIndex1;
case 1:
return lpInfo->OptionIndex2;
case 2:
return lpInfo->OptionIndex3;
}

return 0;
}

int CCustomWing::GetCustomWingOptionValue(int ItemIndex,int OptionNumber) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

switch(OptionNumber)
{
case 0:
return lpInfo->OptionValue1;
case 1:
return lpInfo->OptionValue2;
case 2:
return lpInfo->OptionValue3;
}

return 0;
}

int CCustomWing::GetCustomWingNewOptionIndex(int ItemIndex,int OptionNumber) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

switch(OptionNumber)
{
case 0:
return lpInfo->NewOptionIndex1;
case 1:
return lpInfo->NewOptionIndex2;
case 2:
return lpInfo->NewOptionIndex3;
case 3:
return lpInfo->NewOptionIndex4;
}

return 0;
}

int CCustomWing::GetCustomWingNewOptionValue(int ItemIndex,int OptionNumber) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

switch(OptionNumber)
{
case 0:
return lpInfo->NewOptionValue1;
case 1:
return lpInfo->NewOptionValue2;
case 2:
return lpInfo->NewOptionValue3;
case 3:
return lpInfo->NewOptionValue4;
}

return 0;
}


Main

CustomWing.cpp

Code: [Select]
// CustomWing.cpp: implementation of the CCustomWing class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CustomWing.h"

CCustomWing gCustomWing;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCustomWing::CCustomWing() // OK
{
this->Init();
}

CCustomWing::~CCustomWing() // OK
{

}

void CCustomWing::Init() // OK
{
for(int n=0;n < MAX_CUSTOM_WING;n++)
{
this->m_CustomWingInfo[n].Index = -1;
}
}

void CCustomWing::Load(CUSTOM_WING_INFO* info) // OK
{
for(int n=0;n < MAX_CUSTOM_WING;n++)
{
this->SetInfo(info[n]);
}
}

void CCustomWing::SetInfo(CUSTOM_WING_INFO info) // OK
{
if(info.Index < 0 || info.Index >= MAX_CUSTOM_WING)
{
return;
}

this->m_CustomWingInfo[info.Index] = info;
}

CUSTOM_WING_INFO* CCustomWing::GetInfo(int index) // OK
{
if(index < 0 || index >= MAX_CUSTOM_WING)
{
return 0;
}

if(this->m_CustomWingInfo[index].Index != index)
{
return 0;
}

return &this->m_CustomWingInfo[index];
}

CUSTOM_WING_INFO* CCustomWing::GetInfoByItem(int ItemIndex) // OK
{
for(int n=0;n < MAX_CUSTOM_WING;n++)
{
CUSTOM_WING_INFO* lpInfo = this->GetInfo(n);

if(lpInfo == 0)
{
continue;
}

if(lpInfo->ItemIndex == ItemIndex)
{
return lpInfo;
}
}

return 0;
}

BOOL CCustomWing::CheckCustomWing(int index) // OK
{
if(this->GetInfo(index) != 0)
{
return 1;
}

return 0;
}

BOOL CCustomWing::CheckCustomWingByItem(int ItemIndex) // OK
{
if(this->GetInfoByItem(ItemIndex) != 0)
{
return 1;
}

return 0;
}

BOOL CCustomWing::CheckCustomWingByModelType(int ItemIndex,int ModelType) // OK
{
for(int n=0;n < MAX_CUSTOM_WING;n++)
{
CUSTOM_WING_INFO* lpInfo = this->GetInfo(n);

if(lpInfo == 0)
{
continue;
}

if(lpInfo->ItemIndex == ItemIndex && lpInfo->ModelType == ModelType)
{
return 1;
}
}

return 0;
}

int CCustomWing::GetCustomWingItem(int index) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfo(index);

if(lpInfo == 0)
{
return 0;
}

return lpInfo->ItemIndex;
}

int CCustomWing::GetCustomWingIndex(int ItemIndex) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

return lpInfo->Index;
}

int CCustomWing::GetCustomWingDefense(int ItemIndex,int ItemLevel) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

return (lpInfo->DefenseConstA*ItemLevel);
}

int CCustomWing::GetCustomWingIncDamage(int ItemIndex,int ItemLevel) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

return ((lpInfo->IncDamageConstA+(ItemLevel*lpInfo->IncDamageConstB))-100);
}

int CCustomWing::GetCustomWingDecDamage(int ItemIndex,int ItemLevel) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

return (100-(lpInfo->DecDamageConstA-(ItemLevel*lpInfo->DecDamageConstB)));
}

int CCustomWing::GetCustomWingOptionIndex(int ItemIndex,int OptionNumber) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

switch(OptionNumber)
{
case 0:
return lpInfo->OptionIndex1;
case 1:
return lpInfo->OptionIndex2;
case 2:
return lpInfo->OptionIndex3;
}

return 0;
}

int CCustomWing::GetCustomWingOptionValue(int ItemIndex,int OptionNumber) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

switch(OptionNumber)
{
case 0:
return lpInfo->OptionValue1;
case 1:
return lpInfo->OptionValue2;
case 2:
return lpInfo->OptionValue3;
}

return 0;
}

int CCustomWing::GetCustomWingNewOptionIndex(int ItemIndex,int OptionNumber) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

switch(OptionNumber)
{
case 0:
return lpInfo->NewOptionIndex1;
case 1:
return lpInfo->NewOptionIndex2;
case 2:
return lpInfo->NewOptionIndex3;
case 3:
return lpInfo->NewOptionIndex4;
}

return 0;
}

int CCustomWing::GetCustomWingNewOptionValue(int ItemIndex,int OptionNumber) // OK
{
CUSTOM_WING_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if(lpInfo == 0)
{
return 0;
}

switch(OptionNumber)
{
case 0:
return lpInfo->NewOptionValue1;
case 1:
return lpInfo->NewOptionValue2;
case 2:
return lpInfo->NewOptionValue3;
case 3:
return lpInfo->NewOptionValue4;
}

return 0;
}

CustomWing.h

Code: [Select]
// CustomWing.h: interface for the CCustomWing class.
//
//////////////////////////////////////////////////////////////////////

#pragma once

struct CUSTOM_WING_INFO
{
int Index;
int ItemIndex;
int DefenseConstA;
int IncDamageConstA;
int IncDamageConstB;
int DecDamageConstA;
int DecDamageConstB;
int OptionIndex1;
int OptionValue1;
int OptionIndex2;
int OptionValue2;
int OptionIndex3;
int OptionValue3;
int NewOptionIndex1;
int NewOptionValue1;
int NewOptionIndex2;
int NewOptionValue2;
int NewOptionIndex3;
int NewOptionValue3;
int NewOptionIndex4;
int NewOptionValue4;
int ModelType;
char ModelName[32];
};

class CCustomWing
{
public:
CCustomWing();
virtual ~CCustomWing();
void Init();
void Load(CUSTOM_WING_INFO* info);
void SetInfo(CUSTOM_WING_INFO info);
CUSTOM_WING_INFO* GetInfo(int index);
CUSTOM_WING_INFO* GetInfoByItem(int ItemIndex);
BOOL CheckCustomWing(int index);
BOOL CheckCustomWingByItem(int ItemIndex);
BOOL CheckCustomWingByModelType(int ItemIndex,int ModelType);
int GetCustomWingItem(int index);
int GetCustomWingIndex(int ItemIndex);
int GetCustomWingDefense(int ItemIndex,int ItemLevel);
int GetCustomWingIncDamage(int ItemIndex,int ItemLevel);
int GetCustomWingDecDamage(int ItemIndex,int ItemLevel);
int GetCustomWingOptionIndex(int ItemIndex,int OptionNumber);
int GetCustomWingOptionValue(int ItemIndex,int OptionNumber);
int GetCustomWingNewOptionIndex(int ItemIndex,int OptionNumber);
int GetCustomWingNewOptionValue(int ItemIndex,int OptionNumber);
public:
CUSTOM_WING_INFO m_CustomWingInfo[MAX_CUSTOM_WING];
};

extern CCustomWing gCustomWing;

Credits
Louis

Gracias:

Una consulta, los comandos /addstr..... y demas, como los hago funcionar... ya que lo probe y no puedo .... :(

Commnad + Messaser English version

http://www.mediafire.com/file/t14bn8g0o8m2lrm/MuServer_Commnad_Message.rar

Gracias:

Quiero actualizar, no sé si hay algún error no funcionan si puedes mirar

1.Comando Top
2.Event
Evento Roleta Russa (Novo)   
Evento Pega Pega             
Evento Esconde Esconde   
3.Custom Npc Colecionador

Gracias:

on: January 22, 2018, 08:50:55 AM 7 MuOnline / Season6 / Re: XEMU 203

GS+ GSCS Virus!!!

Gracias:

on: January 16, 2018, 06:21:39 PM 8 MuOnline / Temas solucionados / Re: ayuda a instalar dmn webshop 1.6

Video tutorial Install

Gracias:

Paginas: [1]