Guía: Sistema de Intercambio de Items por Gold (NPC Gowther) - Source Mu - Mu Server Files
 

Guía: Sistema de Intercambio de Items por Gold (NPC Gowther)

Publicado por Dakosmu, Feb 20, 2026, 02:58 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Dakosmu

Guía: Sistema de Intercambio de Items por Gold (NPC Gowther)

Descripción:
Con este código podrás implementar un NPC que solicita una cantidad específica de ítems (en este caso 30 Stones) y, a cambio, otorga una recompensa de 10 Golds directamente en la base de datos de la cuenta, anunciando el éxito por todo el servidor.



Paso 1: Configuración del Archivo de Cabecera (.h)

Primero debemos declarar la función en nuestro archivo Gowther.h. Abre tu proyecto en Visual Studio 2022 y asegúrate de tener este contenido:

#ifndef GOWTHER_H
#define GOWTHER_H

#pragma once

void Gowther(OBJECTSTRUCT * lpObj, OBJECTSTRUCT * lpNpc);

#endif

Paso 2: Implementación del Código (.cpp)

Ahora, en tu archivo Gowther.cpp, pegaremos la lógica que procesa el intercambio. Este código verifica el inventario, conecta con la DB y borra los ítems.

#include "StdAfx.h"
#include "Gowther.h"

// Función de intercambio de NPC
void Gowther (OBJECTSTRUCT * lpObj, OBJECTSTRUCT * lpNpc)
{
// ID del Item (Sección 14, ID 21) - Comúnmente la Rena o Stone
INT Stone_ID = ITEMGET(14, 21);

// 1. Verificación: ¿Tiene el usuario 30 o más Stones?
if (func.GetInventoryItemCount(lpObj->m_Index, Stone_ID, 1) < 30)
{
    ChatNpc(lpNpc, "¡Necesitas tener 30 Stones!", lpObj->m_Index);
    return;
}
else
{
    // 2. Recompensa: Actualizar la tabla MEMB_INFO en SQL
    // Nota: Asegúrate de que tu columna se llame 'Gold'
    MYSQL->Exec("UPDATE MuOnline.dbo.MEMB_INFO SET Gold = Gold + 10 WHERE memb___id = '%s'", lpObj->AccountID);

    // 3. Anuncios Globales
    func.AllServerAnnounce("%s cambió sus Stones con éxito!", lpObj->Name);
    func.AllServerAnnounce("%s recibió 10 Golds de recompensa!", lpObj->Name);

    // 4. Consumo: Eliminar las 30 unidades del inventario
    func.gObjDeleteItemsCount(lpObj->m_Index, Stone_ID, 1, 30);
}
}

Paso 3: Detalles Técnicos y Requisitos

Para que este código funcione correctamente en tu compilación, ten en cuenta lo siguiente:

  • Base de Datos: El código asume que tienes una columna llamada Gold en la tabla MEMB_INFO.
  • Item ID: El ITEMGET(14, 21) debe coincidir con el ítem que configuraste en tu Item.txt.
  • Estructura: Asegúrate de que las funciones ChatNpc y AllServerAnnounce estén definidas en tus librerías de funciones globales.

Créditos y Descargas

Regístrate para ver el enlace

Espero que esta guía les sea de gran utilidad para sus servidores. ¡Cualquier duda dejen su comentario!
Bon Dia

🡱 🡳
Real Time Web Analytics