Jump to content

Kronixer™

Miembro
  • Contador contenido

    117
  • Ingreso

  • Última visita

  • Días ganados

    26

Actividad de reputación

  1. Gracias
    Kronixer™ reacted to caanmasu in FILES MULTILENGUAGE DND PRECARGADOS VDI   
  2. Gracias
    Kronixer™ reacted to Break in ¿Ataques a servidores de Metin2?   
    Hola Zoneros,
    Ayer me comento un viejo amigo, que podía hacer para sentirse más seguro a la hora de abrir un servidor. La verdad que la mejor manera de aprender es con la experiencia, pero entiendo que mucho de vosotros, no quiere pasar por el mal rato de que le tumben la página web o que le acosen porque le hayan pillado los datos etc.
    A continuación voy a dar unos tips a la hora de abrir el servidor.
     
    Tip 0: Dominio
     
    Cuando compréis un dominio, por favor mirar que vuestros datos no sean públicos, que tengáis protección de datos, sino con cualquier plataforma de whois, se pueden ver vuestros datos personales, donde vivís, vuestro número de teléfono etc. El mejor sitio, donde los datos no son almacenados, y webzen no puede hacer mucho con vosotros es
    Debes iniciar sesión para ver el contenido del enlace en esta publicación., comprar un dominio .to, lo recomiendo, aunque sea más caro.  
    Tip 1: ¿Qué vps/dedicado compro?
     
    Lo que os recomiendo para cualquier infraestructura, es estar en OVH, ya que permiten muchísimas configuraciones beneficiosas para nuestro servidor.
    Cualquier servidor de aquí: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. son aconsejables, la marca blanca de OVH conocida como soyoustart, no la recomiendo ya que no tiene para configurar un firewall personalizado para nuestro servidor. Una vez que elijamos nuestro servidor, lo que tenemos que instalar es PROXMOX, para hacer diferentes máquinas virtuales en nuestro propio dedicado, aquí deberemos de instalar 3 vps. Un vps para el servidor del metin2, otro para el hosting web y otro para el hosting patcher.
     
    Tip 2: ¿Es aconsejable tener las tres cosas en el mismo dedicado? 
     
    Si os digo la verdad, la web y el vps del metin, si es aconsejable ya que va a cargar más rápido con el servidor con las sentencias SQL y va ser más optima, nuestro hosting web, tiene que estar con las DNS de cloudflare.

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. ¿Por que usar cloudflare? 
    OVH, tiene una exceleten protección para los ataques pero no todo es un camino de rosas, por ejemplo los ataques de 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. , OVH le cuesta mucho detectar estos ataques y cuando lo detecta ya tenemos nuestra página web offline, por lo que una correcta configuración de Cloudflare, nos protegerá del ataque layer 7, de muchas maneras configurando el firewall de CloudFlare o haciéndolo más rudo poniendo captcha a la hora de conectar con nuestro sitio web. La mayor parte de la comunidad de metin2 utiliza la famosa web de ionut Debes iniciar sesión para ver el contenido del enlace en esta publicación. , hay un problema y es que cada vez que un usuario entra al ranking hace un SELECT, una petición directa a la mysql, imaginaros 300-500 bots haciendo F5 al ranking, ¿Qué pasaría? pues para eso usamos CloudFlare, para mitigar el ataque, y no nos provoque una saturación la base de datos de nuestro servidor de Metin2. Pequeño inciso CloudFlare, también nos ayuda a ocultar la dirección ip de nuestro hosting, esto también es vital.
     
    Tip 3: ¿Actualizador en otro hosting, que no sea en la web?
     
    Pues si amigos, debemos de instalar un tercer VPS para tener nuestro actualizador ya que cualquier persona, puede ver de donde se descarga las actualizaciones, es decir con dale actualizar nuestro cliente, se puede ver de donde se esta realizando la descarga, sería de tontos poner nuestro actualizador en el mismo hosting que la web, porque estaríamos dando la ip de nuestro hosting. Y es mejor mitigar un ataque donde solo tenemos nuestro actualizador, que tener la página web offline etc.
     
    Tip 4: ¿Por estar en OVH mi vps de metin2, estoy fuera de que me tumben?
     
    Realmente no, he visto gente que realiza ataques a los puertos de metin2, falseando paquetes, ya que el metin los tiene que procesar y alfinal termina en .core, esto por desgracia, OVH no lo para, tenemos que ser nosotros mismos con el código fuente del juego en fixearlo, creo recordar que en metin2dev, ya han publicado algo sobre ello.
    Por otro lado, existe los famosos ataques de Cheper, que son de DDos puro, lo hace de tal manera que ovh, no lo detecta como ataque, ya será por una gran magnitud de la botnet y limitando las peticiones por cada bot, que hace indetectable a ovh. Para ello, recomiendo utilizar el pf, en
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. publicaron un firewall y comentan como utilizarlo, sinceramente mejor que nada es. Pero no parara al cheper, recomiendo editar el firewall, y en caso de ataque, cerrar la lista de acceso a jugadores, es decir que solo puedan conectar con el vps, los jugadores nuestros que sabemos su dirección ip en nuestra tabla player, y para los nuevos con logear en la página web o hacer un catpcha se añada la ip a nuestro firewall y ya permita el acceso. Esto último lo puse aprueba en dos servidores y es eficaz.  
    Además que es obligatorio, de configurar nuestro firewall en OVH, que es independiente a nuestro firewall interno del vps, poniendo los puertos de nuestro metin2, sino no hará mucho el firewall externo.  
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    No he querido entrar mucho en detalle por pereza, pero si alguien necesita ayuda o requiere servicios de administración me puede comentar, animo a que preguntéis y os respondo encantado.
    ¡Un saludo y que no os tumbe!
     
     
     
     
     
     
  3. Caca
    Kronixer™ got a reaction from Tiago Nesh in HEMERA2 - Serverfiles Multi Lang   
    Bueno chicos por ahí navegando encontré esto por si alguien lo quiere


    Detalles:
    -Se abrió en 2019 como si
    -Ni siquiera marty v10 no se limpia como se limpia este sv y es de 2019
    -EREN3 (TODOS LOS 3) se construyeron en este servidor. MySQL con 800-1400 jugadores no supera el 10% en eren3 donde es la sopa de sistemas, luego esto.
    -Multilang está hecho por exygo, no creo que haya multilang más completo que este, al menos en la red
    -0 encabezados de paquetes desconocidos
    -0 fallas
    -atención EJECUTAR EN MYSQL5.6
    - PROTO SQL
    -python 2.7 estático
    -la mayoria de las protecciones anti-hack estan aqui y de momento bloquean absolutamente cualquier funcion de los hacks actuales, al menos m2bob y lalaker sus funciones no funcionan desde entonces


    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     
  4. Me Gusta
    Kronixer™ reacted to 𝗔𝗿𝗲𝘀 in Gran Aporte "SISTEMA SHINING COMPLETO"   
    Buenas noches zoneros y zoneras:
     
    En esta ocasion os traigo el sistema Shining completo y reparado para alas y skin de armas ya que veo que no esta publico en ningun foro. 
    Bueno los archivos que vamos a precisar son los siguientes:
     
    Parte del Src Client o Binario como lo conozcan:
    De la carpeta UserInterface:
    -.PythonAplication.cpp
    -.Locale_inc.h
    -.Instancebase.h
    -.Instancebase.cpp
    De la carpeta GameLib:
    -.ItemData.h
    -.ItemData.cpp
    -.ItemManager.cpp
    -.ItemManager.h
     
    Bueno sabiendo ya todo lo que vamos a precisar vamos con la guia
    UserInterface/PythonApplication.cpp Buscamos esta linea: snprintf(szSkillDescFileName, sizeof(szSkillDescFileName), "%s/skilldesc.txt", localePath); Damos un enter y pegamos la siguiente: #ifdef ENABLE_SHINING_SYSTEM snprintf(szShiningTable, sizeof(szShiningTable), "%s/shiningtable.txt", localePath); #endif Buscamos esta linea: char szItemDesc[256]; Damos un enter y pegamos la siguiente: #ifdef ENABLE_SHINING_SYSTEM char szShiningTable[256]; #endif Buscamos esta linea: if (!rkSkillMgr.RegisterSkillTable("data/common/skilltable.txt")) { TraceError("Error while loading skilltable.txt."); return false; } Damos un enter y pegamos la siguiente: #ifdef ENABLE_SHINING_SYSTEM if (!rkItemMgr.LoadShiningTable(szShiningTable)) { Tracenf("LoadLocaleData - LoadShiningTable(%s) Error", szShiningTable); } #endif  
    UserInterface/Locale_inc.h Aca agregaremos el siguiente define: #define ENABLE_SHINING_SYSTEM UserInterface/InstanceBase.h Aca buscamos la siguiente linea: DWORD m_armorRefineEffect; Pulsamos un enter y agregamos la siguiente linea: #ifdef ENABLE_SHINING_SYSTEM //2-Dimensions for Left & Right sided effects DWORD m_weaponShiningEffects[2][CItemData::ITEM_SHINING_MAX_COUNT]; DWORD m_armorShiningEffects[CItemData::ITEM_SHINING_MAX_COUNT]; DWORD m_acceShiningEffects[CItemData::ITEM_SHINING_MAX_COUNT]; #endif Aca quiero aclarar una cosa: Si en vuestro sistema de estolas de envez de llevar acce lleva sash cambian la linea anterior por esta: #ifdef ENABLE_SHINING_SYSTEM //2-Dimensions for Left & Right sided effects DWORD m_weaponShiningEffects[2][CItemData::ITEM_SHINING_MAX_COUNT]; DWORD m_armorShiningEffects[CItemData::ITEM_SHINING_MAX_COUNT]; DWORD m_sashShiningEffects[CItemData::ITEM_SHINING_MAX_COUNT]; #endif Ahora buscamos la siguiente linea: UINT __GetRefinedEffect(CItemData* pItem); Pulsamos un enter y agregamos la siguiente: #ifdef ENABLE_SHINING_SYSTEM void __GetShiningEffect(CItemData* pItem); void __ClearWeaponShiningEffect(bool detaching = true); void __ClearArmorShiningEffect(bool detaching = true); void __ClearAcceShiningEffect(bool detaching = true); void __AttachAcceShiningEffect(int effectIndex, const char* effectFileName, const char* boneName = "Bip01 Spine2"); void __AttachWeaponShiningEffect(int effectIndex, const char* effectFileName, const char* boneName = "Bip01"); void __AttachArmorShiningEffect(int effectIndex, const char* effectFileName, const char* boneName = "Bip01"); #endif Aca quiero explicar 1 cosa: Aca es lo mismo que en la anterior linea, si ustedes de envez de usar acce usan sash remplazan la linea por esta: #ifdef ENABLE_SHINING_SYSTEM void __GetShiningEffect(CItemData* pItem); void __ClearWeaponShiningEffect(bool detaching = true); void __ClearArmorShiningEffect(bool detaching = true); void __ClearSashShiningEffect(bool detaching = true); void __AttachSashShiningEffect(int effectIndex, const char* effectFileName, const char* boneName = "Bip01 Spine2"); void __AttachWeaponShiningEffect(int effectIndex, const char* effectFileName, const char* boneName = "Bip01"); void __AttachArmorShiningEffect(int effectIndex, const char* effectFileName, const char* boneName = "Bip01"); #endif UserInterface/InstanceBase.cpp Buscamos la siguiente funcion void CInstanceBase::SetArmor(DWORD dwArmor) { ... } Y dentro de esta funcion buscamos lo siguiente __GetRefinedEffect(pItemData); Pulsamos un enter y agregamos la siguiente linea: #ifdef ENABLE_SHINING_SYSTEM __GetShiningEffect(pItemData); #endif Quedando asi: __GetRefinedEffect(pItemData); #ifdef ENABLE_SHINING_SYSTEM __GetShiningEffect(pItemData); #endif Ahora dentro de la misma funcion buscamos la siguiente linea: __ClearArmorRefineEffect(); Pulsamos un enter y agregamos lo siguiente: #ifdef ENABLE_SHINING_SYSTEM __ClearArmorShiningEffect(); #endif UserInterface/InstanceBase.cpp Aca buscamos la siguiente funcion: void CInstanceBase::SetAcce "Recuerden que si su sistema de estolas no es acce lo cambian por Sash" { .... } Dentro de esta funcion buscamos lo siguiente: ClearAcceEffect(); Pulsamos un enter y agregamos la siguiente linea: #ifdef ENABLE_SHINING_SYSTEM __ClearAcceShiningEffect(); #endif Luego dentro de la misma funcion mas abajo buscamos lo siguiente: CItemManager::Instance().GetItemDataPointer(dwAcce, &pItemData); "Si no usan acce lo cambian por sash" Pulsamos enter y mas abajo pegamos lo siguiente: #ifdef ENABLE_SHINING_SYSTEM if (pItemData) __GetShiningEffect(pItemData); #endif Quedando asi: CItemManager::Instance().GetItemDataPointer(dwAcce, &pItemData); #ifdef ENABLE_SHINING_SYSTEM if (pItemData) __GetShiningEffect(pItemData); #endif m_GraphicThingInstance.AttachAcce(pItemData, fSpecular); UserInterface/InstanceBase.cpp "Ahora atentos en la siguiente funcion ya que si no lo hacen bien no funcionara en las armas ni en las skin" Buscamos la siguiente funcion: bool CInstanceBase::SetWeapon(DWORD eWeapon) { ... } Dentro de esta funcion buscamos la siguiente linea: __GetRefinedEffect(pItemData); Pulsamos un enter y agregamos lo siguiente: #ifdef ENABLE_SHINING_SYSTEM __GetShiningEffect(pItemData); #endif Ahora buscamos la siguiente linea: __ClearWeaponRefineEffect(); Pulsamos un enter y agregamos lo siguiente: #ifdef ENABLE_SHINING_SYSTEM __ClearWeaponShiningEffect(); #endif "AHORA MUY ATENTOS AL CODIGO QUE PONDRE EN PANTALLA DEBERAN DE HACERLO TAL CUAL LO DEJO ACA" "CON LOS CORCHETES TAL CUAL ESTAN EN LA FUNCION" MI CODIGO CItemData * pItemData; if (CItemManager::Instance().GetItemDataPointer(eWeapon, &pItemData)) { ---------------------------ESTOS CORCHETES DEBERAN DE AGREGARLOS TAL CUAL PUSE ACA __GetRefinedEffect(pItemData); #ifdef ENABLE_SHINING_SYSTEM __GetShiningEffect(pItemData); #endif } ---------------------------ESTOS CORCHETES DEBERAN DE AGREGARLOS TAL CUAL PUSE ACA else { ---------------------------ESTOS CORCHETES DEBERAN DE AGREGARLOS TAL CUAL PUSE ACA __ClearWeaponRefineEffect(); #ifdef ENABLE_SHINING_SYSTEM __ClearWeaponShiningEffect(); #endif } ---------------------------ESTOS CORCHETES DEBERAN DE AGREGARLOS TAL CUAL PUSE ACA return true; } UserInterface/Instancebase.cpp Ahora buscamos esta funcion void CInstanceBase::__Initialize() { ..... } Y dentro de ella vamos a buscar la siguiente linea: m_armorRefineEffect = 0; Pulsamos enter y agregamos la siguiente linea: #ifdef ENABLE_SHINING_SYSTEM __ClearWeaponShiningEffect(false); #endif UserInterface/InstanceBase.cpp Ahora agregamos todo este bloque completo al final del archivo #ifdef ENABLE_SHINING_SYSTEM void CInstanceBase::__GetShiningEffect(CItemData* pItem) { bool removeRefineEffect = true; CItemData::TItemShiningTable shiningTable = pItem->GetItemShiningTable(); if (pItem->GetType() == CItemData::ITEM_TYPE_WEAPON) { __ClearWeaponShiningEffect(); if (removeRefineEffect) { bool bRemove = false; for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) if (strcmp(shiningTable.szShinings[i], "")) bRemove = true; if (bRemove) __ClearWeaponRefineEffect(); } for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (strcmp(shiningTable.szShinings[i], "")) { #ifdef ENABLE_WOLFMAN_CHARACTER bool twoSidedWeapon = pItem->GetSubType() == CItemData::WEAPON_DAGGER || pItem->GetSubType() == CItemData::WEAPON_CLAW || (IsMountingHorse() && pItem->GetSubType() == CItemData::WEAPON_FAN); #else bool twoSidedWeapon = pItem->GetSubType() == CItemData::WEAPON_DAGGER || (IsMountingHorse() && pItem->GetSubType() == CItemData::WEAPON_FAN); #endif if (twoSidedWeapon) { __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON_LEFT"); } if (pItem->GetSubType() == CItemData::WEAPON_BOW) __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON_LEFT"); else __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON"); } } } #ifdef ENABLE_COSTUME_SYSTEM else if (pItem->GetType() == CItemData::ITEM_TYPE_COSTUME) { #ifdef ENABLE_ACCE_SYSTEM if (pItem->GetSubType() == CItemData::COSTUME_ACCE) { for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (strcmp(shiningTable.szShinings[i], "")) { __AttachAcceShiningEffect(i, shiningTable.szShinings[i], "Bip01 Spine2"); } } } #endif else if (pItem->GetSubType() == CItemData::COSTUME_BODY) { if (removeRefineEffect) { __ClearArmorRefineEffect(); } for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (strcmp(shiningTable.szShinings[i], "")) { __AttachArmorShiningEffect(i, shiningTable.szShinings[i]); } } } #ifdef ENABLE_WEAPON_COSTUME_SYSTEM else if (pItem->GetSubType() == CItemData::COSTUME_WEAPON) { __ClearWeaponShiningEffect(); if (removeRefineEffect) { __ClearWeaponRefineEffect(); } for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (strcmp(shiningTable.szShinings[i], "")) { bool twoSidedWeapon = pItem->GetValue(3) == CItemData::WEAPON_DAGGER || (IsMountingHorse() && pItem->GetValue(3) == CItemData::WEAPON_FAN); if (twoSidedWeapon) { __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON_LEFT"); } if (pItem->GetValue(3) == CItemData::WEAPON_BOW) __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON_LEFT"); else __AttachWeaponShiningEffect(i, shiningTable.szShinings[i], "PART_WEAPON"); } } } #endif } #endif else { if (removeRefineEffect) { __ClearArmorRefineEffect(); } for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (strcmp(shiningTable.szShinings[i], "")) { __AttachArmorShiningEffect(i, shiningTable.szShinings[i]); } } } } //Attaching the shining effect. //BoneName can be "PART_WEAPON" or "PART_WEAPON_LEFT" to get the attaching bone name dynamically. //If boneName is not given "Bip01" is used as boneName. void CInstanceBase::__AttachWeaponShiningEffect(int effectIndex, const char* effectFileName, const char* boneName) { if (IsAffect(AFFECT_INVISIBILITY)) { return; } if (effectIndex >= CItemData::ITEM_SHINING_MAX_COUNT) { return; } CEffectManager::Instance().RegisterEffect(effectFileName, false, false); if (!strcmp(boneName, "PART_WEAPON")) { const char* c_szRightBoneName; m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON, &c_szRightBoneName); if (c_szRightBoneName == NULL) return; if (strcmp(c_szRightBoneName, "")) { m_weaponShiningEffects[0][effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, c_szRightBoneName, effectFileName); } } else if (!strcmp(boneName, "PART_WEAPON_LEFT")) { const char* c_szLeftBoneName; m_GraphicThingInstance.GetAttachingBoneName(CRaceData::PART_WEAPON_LEFT, &c_szLeftBoneName); if (c_szLeftBoneName == NULL) return; if (strcmp(c_szLeftBoneName, "")) { m_weaponShiningEffects[1][effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, c_szLeftBoneName, effectFileName); } } else { Tracef("Invalid partname for getting attaching bone name. %s - %s", effectFileName, boneName); } } //Attaching the armor shining effect. //If boneName is not given "Bip01" is used as boneName. void CInstanceBase::__AttachArmorShiningEffect(int effectIndex, const char* effectFileName, const char* boneName) { if (IsAffect(AFFECT_INVISIBILITY)) { return; } if (effectIndex >= CItemData::ITEM_SHINING_MAX_COUNT) { return; } if (!strcmp(boneName, "")) { Tracef("Empty bone name for attaching armor shining. Effect Index: %i, EffectFileName: %s", effectIndex, effectFileName); return; } CEffectManager::Instance().RegisterEffect(effectFileName, false, false); m_armorShiningEffects[effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, boneName, effectFileName); } //Clears all weapon shining effects. Left & Right if set. void CInstanceBase::__ClearWeaponShiningEffect(bool detaching) { for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (m_weaponShiningEffects[0][i]) { if (detaching) { __DetachEffect(m_weaponShiningEffects[0][i]); } m_weaponShiningEffects[0][i] = 0; } if (m_weaponShiningEffects[1][i]) { if (detaching) { __DetachEffect(m_weaponShiningEffects[1][i]); } m_weaponShiningEffects[1][i] = 0; } } } //Clears all armor shining effects. void CInstanceBase::__ClearArmorShiningEffect(bool detaching) { if (detaching) { for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (m_armorShiningEffects[i]) { __DetachEffect(m_armorShiningEffects[i]); } } } memset(&m_armorShiningEffects, 0, sizeof(m_armorShiningEffects)); } #endif #ifdef ENABLE_SHINING_SYSTEM #ifdef ENABLE_ACCE_SYSTEM void CInstanceBase::__AttachAcceShiningEffect(int effectIndex, const char* effectFileName, const char* boneName) { if (IsAffect(AFFECT_INVISIBILITY)) { return; } if (effectIndex >= CItemData::ITEM_SHINING_MAX_COUNT) { return; } if (!strcmp(boneName, "")) { Tracef("Empty bone name for attaching armor shining. Effect Index: %i, EffectFileName: %s", effectIndex, effectFileName); return; } CEffectManager::Instance().RegisterEffect(effectFileName, false, false); m_acceShiningEffects[effectIndex] = m_GraphicThingInstance.AttachEffectByName(0, boneName, effectFileName); } #ifdef ENABLE_ACCE_SYSTEM void CInstanceBase::__ClearAcceShiningEffect(bool detaching) { for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (detaching) { __DetachEffect(m_acceShiningEffects[i]); } m_acceShiningEffects[i] = 0; } } #endif #endif #endif UserInterface/InstanceBase.cpp "Ahora os voy a explicar algo" En el caso de que vuestro sistema de estolas no lleve el define acce, deberan de cambiar el codigo del sistema en las partes que llevan acce por sash "Por ejemplo en el bloque que agregan en InstanceBase.cpp" Ese lleva ACCE como Define, ustedes deberan de agregar el define de su sistema de estolas GameLib/ItemManager.h Aca buscan la siguiente linea: bool LoadItemTable(const char* c_szFileName); Pulsan enter y agregan lo siguiente: #ifdef ENABLE_SHINING_SYSTEM bool LoadShiningTable(const char* c_szFileName); #endif GameLib/ItemManager.cpp Ahora buscan la siguiente funcion bool CItemManager::LoadItemTable(const char* c_szFileName) { ... } Y debajo de la funcion completa pulsan enter y agregan el siguiente bloque #ifdef ENABLE_SHINING_SYSTEM bool CItemManager::LoadShiningTable(const char* szShiningTable) { CMappedFile File; LPCVOID pData; if (!CEterPackManager::Instance().Get(File, szShiningTable, &pData)) return false; CMemoryTextFileLoader textFileLoader; textFileLoader.Bind(File.Size(), pData); CTokenVector TokenVector; for (DWORD i = 0; i < textFileLoader.GetLineCount(); ++i) { if (!textFileLoader.SplitLine(i, &TokenVector, "\t")) continue; if (TokenVector.size() > (1 + CItemData::ITEM_SHINING_MAX_COUNT)) { TraceError("CItemManager::LoadShiningTable(%s) - LoadShiningTable in %d\n - RowSize: %d MaxRowSize: %d", szShiningTable, i, TokenVector.size(), CItemData::ITEM_SHINING_MAX_COUNT); } const std::string & c_rstrID = TokenVector[0]; DWORD dwItemVNum = atoi(c_rstrID.c_str()); CItemData * pItemData = MakeItemData(dwItemVNum); if (pItemData) { for (BYTE i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (i < (TokenVector.size()-1)) { const std::string & c_rstrEffectPath = TokenVector[i + 1]; pItemData->SetItemShiningTableData(i, c_rstrEffectPath.c_str()); } else { pItemData->SetItemShiningTableData(i, ""); } } } } return true; } #endif GameLib/ItemData.h Buscan la siguiente linea: ITEM_SOCKET_MAX_NUM = 3, Pulsan un enter y agregan la siguiente debajo #ifdef ENABLE_SHINING_SYSTEM ITEM_SHINING_MAX_COUNT = 3, #endif Ahora buscan la siguiente linea: void SetItemTableData(TItemTable * pItemTable); Pulsan enter y debajo agregan la siguiente: #ifdef ENABLE_SHINING_SYSTEM typedef struct SItemShiningTable { char szShinings[ITEM_SHINING_MAX_COUNT][256]; public: //Checking if any shining is set for this item. bool Any() const { for (int i = 0; i < CItemData::ITEM_SHINING_MAX_COUNT; i++) { if (strcmp(szShinings[i], "")) { return true; } } return false; } } TItemShiningTable; void SetItemShiningTableData(BYTE bIndex, const char* szEffectname); CItemData::TItemShiningTable GetItemShiningTable() { return m_ItemShiningTable; } #endif Ahora buscan la siguiente linea: TItemTable m_ItemTable; Pulsan enter y debajo pegan la siguiente: #ifdef ENABLE_SHINING_SYSTEM TItemShiningTable m_ItemShiningTable; #endif GameLib/ItemData.cpp Ahora buscan la siguiente funcion: BOOL CItemData::IsEquipment() const { .... } Debajo de la funcion agregan lo siguiente: #ifdef ENABLE_SHINING_SYSTEM void CItemData::SetItemShiningTableData(BYTE bIndex, const char* szEffectname) { sprintf(m_ItemShiningTable.szShinings[bIndex], szEffectname); } #endif Ahora buscan la siguiente funcion: void CItemData::Clear() { ..... } Dentro de esa misma funcion buscan la siguiente linea: memset(&m_ItemTable, 0, sizeof(m_ItemTable)); Pulsan un enter y agregan la siguiente linea: #ifdef ENABLE_SHINING_SYSTEM memset(&m_ItemShiningTable, 0, sizeof(m_ItemShiningTable)); #endif  
    Parte del cliente Va a su locale y agregan el archivo que os dejare debajo "Como funciona el sistema y que hago para implementar un arma, ala o efecto de armadura" Bueno para implementar todo el mundo ya conoce como se implementa una arma o estola. Agregan la parte de la db luego item_list.txt, item_proto "Pero aca si usan arma 3D en el archivo haran lo siguiente" 61202 "D:/ymir work/effect/plechito/weapons/dark_cult_set/bell_glow.mse" El 61202 es el vnum del arma, armadura o ala que llevara el efecto Y al lado va la ruta del mse "Asegurese que el efecto esta completo Y ya eso es todo  
    Y eso seria todo
     
    Adjunto foto de como funciona el sistema correctamente
     

     
    Si lo hacen tal cual le explique en la guia el sistema le funcionara correctamente. 
     
    Adjunte foto cuando metan el sistema, no cuesta nada.
     
    Archivo parte del cliente

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  5. Me Gusta
    Kronixer™ reacted to ChuchoGamer in Cliente Unpack Metin2Essential Descompilado   
    Muy buenas tardes les comparto este cliente para que saquen recursos del server  espero que les gusten 

    Link de Descarga

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    Contraseña del rar: chuchogamer01
    Fuente: Turkmmo
     
    Discord mio por si borran el post :Revengador2#1005
  6. Me Gusta
    Kronixer™ reacted to ChuchoGamer in Set Horus Animados   
    Buenas tardes aqui les comparto este set que se ve buenisimo 
    link del video del set

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Link de Descarga

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. Fuente: turkmmo
  7. Me Gusta
    Kronixer™ got a reaction from Frezi Op in Sistema de información de mazmorras [DUNGEON INFO]   
    Vi que este un post de este sistema pero no tenia link ahi lo dejo
     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  8. Me Gusta
    Kronixer™ got a reaction from luis nuñez in HEMERA2 - Serverfiles Multi Lang   
    Bueno chicos por ahí navegando encontré esto por si alguien lo quiere


    Detalles:
    -Se abrió en 2019 como si
    -Ni siquiera marty v10 no se limpia como se limpia este sv y es de 2019
    -EREN3 (TODOS LOS 3) se construyeron en este servidor. MySQL con 800-1400 jugadores no supera el 10% en eren3 donde es la sopa de sistemas, luego esto.
    -Multilang está hecho por exygo, no creo que haya multilang más completo que este, al menos en la red
    -0 encabezados de paquetes desconocidos
    -0 fallas
    -atención EJECUTAR EN MYSQL5.6
    - PROTO SQL
    -python 2.7 estático
    -la mayoria de las protecciones anti-hack estan aqui y de momento bloquean absolutamente cualquier funcion de los hacks actuales, al menos m2bob y lalaker sus funciones no funcionan desde entonces


    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     
  9. Me Gusta
    Kronixer™ got a reaction from alejankof in Server Files 1 - 120 internacional   
    DESCARGA: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    FreeBSD recomendado: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    User: root
    Pass: dev
  10. Me Gusta
    Kronixer™ got a reaction from Maurice Pollähne in Inventario Special   
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
  11. Triste
    Kronixer™ got a reaction from Gökhan Çetin in OWSAP 4.9 - Files+Source+Fix LICENSE   
    Navegando por un foro turco pues encontré esto ☺️

    Los archivos de Owsap 4.9 + OwsapLicense Fix

    install Archive + fix para licencia incluida
    SERVER FILES : 

    Todos los idiomas están incluidos +

    1.Bug Search Itemsearch not Searching the item * Fix Game.py

    + Game.py is in el paquete copia y pega el game.py en la raíz
    * Compila la búsqueda
     
    ACTUALIZACIÓN

    INCLUYE: FIX / PATCHES V5 POR 500 € INCLUYE NUEVOS ICONOS Y CORRECCIONES DE ERRORES EN MAPAS

    V5 : Debes iniciar sesión para ver el contenido del enlace en esta publicación.

    Locale_inhc.h 
     
     

  12. Me Gusta
    Kronixer™ got a reaction from Marcos Pinheiro in Archivos Curse Of the Serpent Queen   
    Hola amigos de zone 
    Contenido:

    root-meta, dumped binary, locales whit protos
    New monsters, maps, daungeon, armors 2021 easter costumes and mount
    the package contains the separated folders (m00xxx) and the unpacked files together in one folder
     

  13. Me Gusta
    Kronixer™ got a reaction from JohnTonS in Server Files 1 - 120 internacional   
    DESCARGA: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    FreeBSD recomendado: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    User: root
    Pass: dev
  14. Gracias
    Kronixer™ got a reaction from ferhatcnrr in Server Files 1 - 120 internacional   
    DESCARGA: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    FreeBSD recomendado: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    User: root
    Pass: dev
  15. Me Gusta
    Kronixer™ got a reaction from GM Thor in [SOLICITUD SISTEMA]   
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

    Algo así es lo que estas buscando?
  16. Me Gusta
    Kronixer™ got a reaction from Savio Neves in OWSAP 4.9 - Files+Source+Fix LICENSE   
    Navegando por un foro turco pues encontré esto ☺️

    Los archivos de Owsap 4.9 + OwsapLicense Fix

    install Archive + fix para licencia incluida
    SERVER FILES : 

    Todos los idiomas están incluidos +

    1.Bug Search Itemsearch not Searching the item * Fix Game.py

    + Game.py is in el paquete copia y pega el game.py en la raíz
    * Compila la búsqueda
     
    ACTUALIZACIÓN

    INCLUYE: FIX / PATCHES V5 POR 500 € INCLUYE NUEVOS ICONOS Y CORRECCIONES DE ERRORES EN MAPAS

    V5 : Debes iniciar sesión para ver el contenido del enlace en esta publicación.

    Locale_inhc.h 
     
     

  17. Me Gusta
    Kronixer™ got a reaction from ferhatcnrr in HEMERA2 - Serverfiles Multi Lang   
    Bueno chicos por ahí navegando encontré esto por si alguien lo quiere


    Detalles:
    -Se abrió en 2019 como si
    -Ni siquiera marty v10 no se limpia como se limpia este sv y es de 2019
    -EREN3 (TODOS LOS 3) se construyeron en este servidor. MySQL con 800-1400 jugadores no supera el 10% en eren3 donde es la sopa de sistemas, luego esto.
    -Multilang está hecho por exygo, no creo que haya multilang más completo que este, al menos en la red
    -0 encabezados de paquetes desconocidos
    -0 fallas
    -atención EJECUTAR EN MYSQL5.6
    - PROTO SQL
    -python 2.7 estático
    -la mayoria de las protecciones anti-hack estan aqui y de momento bloquean absolutamente cualquier funcion de los hacks actuales, al menos m2bob y lalaker sus funciones no funcionan desde entonces


    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     
  18. Me Gusta
    Kronixer™ got a reaction from Emir Sanchez in Server Files 1 - 120 internacional   
    DESCARGA: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    FreeBSD recomendado: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    User: root
    Pass: dev
  19. Me Gusta
    Kronixer™ got a reaction from Emir Sanchez in HEMERA2 - Serverfiles Multi Lang   
    Bueno chicos por ahí navegando encontré esto por si alguien lo quiere


    Detalles:
    -Se abrió en 2019 como si
    -Ni siquiera marty v10 no se limpia como se limpia este sv y es de 2019
    -EREN3 (TODOS LOS 3) se construyeron en este servidor. MySQL con 800-1400 jugadores no supera el 10% en eren3 donde es la sopa de sistemas, luego esto.
    -Multilang está hecho por exygo, no creo que haya multilang más completo que este, al menos en la red
    -0 encabezados de paquetes desconocidos
    -0 fallas
    -atención EJECUTAR EN MYSQL5.6
    - PROTO SQL
    -python 2.7 estático
    -la mayoria de las protecciones anti-hack estan aqui y de momento bloquean absolutamente cualquier funcion de los hacks actuales, al menos m2bob y lalaker sus funciones no funcionan desde entonces


    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     
  20. Me Gusta
    Kronixer™ got a reaction from Ahmed Hosny in PACHI y Tunga ServerFiles   
    FOTO::
    DESCARGA :
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Si tiene problemas con Github ----
    Descarga alternativa Se incluyen todas las actualizaciones hasta el 12.04.2021. La publicación no está incluida.

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación. FreeBSD
    [Información del archivo]
    Versión FreeBSD: 11.3
    Versión SQL: MariaDB 10.3

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    DumpProto

    Debes iniciar sesión para ver el contenido del enlace en esta publicación. INFORMACION
    VISUAL STUDIO 2019

    Compilation Engine: gmake
    Build Tool: clang-devel (llvm-devel)

    [Información de cuenta]
    ID: pachi
    Contraseña: 12345
    PIN: 1234

    [Información de Navicat]
    MariaDB
    ID: root
    Contraseña: contraseña Puede especificar sus
    Creditos:
    Productores de archivos: Debes iniciar sesión para ver el contenido del enlace en esta publicación. , Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    For;

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  21. Me Gusta
    Kronixer™ got a reaction from Kenshi Torres in ServerFiles ZetaMetin2 V3 MartySama 4.9 [Árabe]   
    Hola, Amigos de Zone Navegando en foros turcos encontré estos SF capas  y alguien los quiera usar o  para sacarle cosas.
    estos archivos estaban a la venta, pero estoy publicando de forma gratuita,
    estos archivos de servidor se vendieron por 170 $, pero publico gratis
    locale_inc.h
    Imágenes

     
    Game&MySQL : 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Server Source : Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Zeta Client : Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    Source Client : Debes iniciar sesión para ver el contenido del enlace en esta publicación.
       
    Creditos : A su respectivo dueño
    Fuente: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
  22. Me Gusta
    Kronixer™ got a reaction from macmatta21 in [C++]Specular Color System   
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
     
     
  23. Me Gusta
    Kronixer™ got a reaction from Edwin Mejia in OWSAP 4.9 - Files+Source+Fix LICENSE   
    Navegando por un foro turco pues encontré esto ☺️

    Los archivos de Owsap 4.9 + OwsapLicense Fix

    install Archive + fix para licencia incluida
    SERVER FILES : 

    Todos los idiomas están incluidos +

    1.Bug Search Itemsearch not Searching the item * Fix Game.py

    + Game.py is in el paquete copia y pega el game.py en la raíz
    * Compila la búsqueda
     
    ACTUALIZACIÓN

    INCLUYE: FIX / PATCHES V5 POR 500 € INCLUYE NUEVOS ICONOS Y CORRECCIONES DE ERRORES EN MAPAS

    V5 : Debes iniciar sesión para ver el contenido del enlace en esta publicación.

    Locale_inhc.h 
     
     

  24. Me Gusta
    Kronixer™ got a reaction from MATT in Server Files 1 - 120 internacional   
    DESCARGA: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  
    FreeBSD recomendado: 
    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    User: root
    Pass: dev
  25. Me Gusta
    Kronixer™ got a reaction from igoriap in HEMERA2 - Serverfiles Multi Lang   
    Bueno chicos por ahí navegando encontré esto por si alguien lo quiere


    Detalles:
    -Se abrió en 2019 como si
    -Ni siquiera marty v10 no se limpia como se limpia este sv y es de 2019
    -EREN3 (TODOS LOS 3) se construyeron en este servidor. MySQL con 800-1400 jugadores no supera el 10% en eren3 donde es la sopa de sistemas, luego esto.
    -Multilang está hecho por exygo, no creo que haya multilang más completo que este, al menos en la red
    -0 encabezados de paquetes desconocidos
    -0 fallas
    -atención EJECUTAR EN MYSQL5.6
    - PROTO SQL
    -python 2.7 estático
    -la mayoria de las protecciones anti-hack estan aqui y de momento bloquean absolutamente cualquier funcion de los hacks actuales, al menos m2bob y lalaker sus funciones no funcionan desde entonces


    Debes iniciar sesión para ver el contenido del enlace en esta publicación.  

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     
×
×
  • Crear nuevo...