Jump to content
  • 0

Ayuda con Botón Actualizar Coins


xLordneji

Pregunta

Hola buenas tardes, hace unos días implementé el slot de coins en inventario de SeMa y quise colocar el botón de "Refrescar Coins"

Para esto lo que hice fue sacar la función del botón que utiliza al ItemShop de Shang, pero resulta que a la hora de darle click al botón se actualizan son los de la itemshop, así:

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

 

 

La función usada ha sido esta:

	def __OnClickUpdateCoins(self):
		constInfo.ItemShop['QCMD'] = 'UPDATE_COINS#'
		event.QuestButtonClick(constInfo.ItemShop['QID'])

Alguno me podría por favor ayudar a colocar la función correcta para que cuando le de en el botón "Refresh" se actualicen los del inventario.

 

 

Enlace para comentar
Compartir en otros sitios

3 respuestas a esta pregunta

Mensajes recomendados

  • 0
hace 1 hora, xLordneji dijo:

Hola buenas tardes, hace unos días implementé el slot de coins en inventario de SeMa y quise colocar el botón de "Refrescar Coins"

Para esto lo que hice fue sacar la función del botón que utiliza al ItemShop de Shang, pero resulta que a la hora de darle click al botón se actualizan son los de la itemshop, así:

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

 

La función usada ha sido esta:


	def __OnClickUpdateCoins(self):
		constInfo.ItemShop['QCMD'] = 'UPDATE_COINS#'
		event.QuestButtonClick(constInfo.ItemShop['QID'])

 

 

Estás usando la misma función ItemShop  constInfo.ItemShop['QID']  que esta es la que sirve para que se abra la shop, no se si funcionará pero prueba esto:

 

game.py busca: "mall"            : self.__InGameShop_Show,  y debajo pon: 

Quote

"BINARY_Update_Coins"    : self.Binary_Update_Coins,

después busca : def __PlayMusic(self, flag, filename): y debajo de toda la función pega :

Quote

    def Binary_Update_Coins(self,coins):
        import constInfo
        constInfo.mds = int(coins)

si está función no te va prueba esta:

Quote

def Binary_Update_Coins(self,coins):
    self.wndMds.SetText(str(coins))

en constinfo.py pones en cualquier lado : (esto si es el de sema como dices ya lo tienes)

Quote

mds = 0

luego en uiinventory.py buscas: def __LoadWindow(self) y pegas:  

Quote

self.refreshCoinstButton = self.GetChild2("RefreshCoinstButton")

  donde los demás selfs   

después buscas # MallButton y pones :          

Quote

 if self.refreshCoinstButton:
            self.refreshCoinstButton.SetEvent(ui.__mem_func__(self.ClickRefreshCoinstButton))

    

después buscas : def ClickOfflineShopButton y añades arriba:     

Quote

# Refresh Coinst Button
     def ClickRefreshCoinstButton(self):
         print "click_refresh_coinst_button"
         net.SendChatPacket("/update_coins")    

Como ves va por source, si no tienes el sistema puedes copiar cualquier otro que use un comando y pones que el servidor lea el /update_coins 

ahora vamos a input_login.cpp y añades:

Quote

static void _send_coins(LPCHARACTER ch)
{
    if (ch)
    {
        SQLMsg * pMsg = DBManager::instance().DirectQuery("select coins from account%s WHERE id = %u", get_table_postfix(), ch->GetAID());
        if (pMsg->Get()->uiNumRows > 0)
        {
            MYSQL_ROW  row = mysql_fetch_row(pMsg->Get()->pSQLResult);
            ch->ChatPacket(CHAT_TYPE_COMMAND, "BINARY_Update_Coins %s", row[0]);
            delete pMsg;
        }
    }
}

ahora buscamos: _send_bonus_info(ch); y debajo ponemos:

Quote

_send_coins(ch);


En source game abres cmd_general.cpp y buscas: ACMD(do_click_mall) y debajo pones:

Quote

ACMD(do_update_coins)
{
    if (!ch)
        return;

    int iPulse = thecore_pulse();
    
    if (iPulse - ch->GetUpdateCoinstTime() < PASSES_PER_SEC(25))
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("No puedes refrescar las monedas dragón hasta que pasen 25 segundos."));
        return;
    }

    std::auto_ptr<SQLMsg> pMsg(DBManager::Instance().DirectQuery("select coins from account.account WHERE id = %u",ch->GetAID()));
    if (pMsg->Get()->uiNumRows == 0)
        return;

    MYSQL_ROW  row = mysql_fetch_row(pMsg->Get()->pSQLResult);
    ch->ChatPacket(CHAT_TYPE_COMMAND, "BINARY_Update_Coins %s", row[0]);
    ch->SetUpdateCoinstTime();
}

ahora en cmd.cpp buscas: ACMD(do_add_socket);  y abajo pones:

Quote

ACMD(do_update_coins);

Ahora buscas: { "\n",        NULL,  arriba de este pones:

Quote

{ "update_coins",do_update_coins, POS_DEAD, GM_PLAYER },

Ahora en char.h buscamos : public:
        bool        DragonSoul_RefineWindow_Open(LPENTITY pEntity); y debajo de toda la función añadimos:

Quote

    public:
        int m_iUpdateCoinstTime;
        int GetUpdateCoinstTime() { return m_iUpdateCoinstTime; }
        void SetUpdateCoinstTime() { m_iUpdateCoinstTime = thecore_pulse(); }    

ahora en char.cpp buscamos :             std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT coins FROM account.account WHERE id = %u", GetAID()));

la función es así o la tendrás parecida :

Quote

        if (g_wCoinsForUnlimited > 0 && bTime == 4)
        {
            std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT coins FROM account.account WHERE id = %u", GetAID()));
            if (pMsg->Get()->uiNumRows == 0) return;
            MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);
            long lCoins = 0;
            str_to_number(lCoins, row[0]);

            if (lCoins < static_cast<long>(g_wCoinsForUnlimited))
            {
                ChatPacket(CHAT_TYPE_INFO, "No puede abrir una Tienda Offline. Usted necesita %d monedas para abrir una Tienda Offline!", g_wCoinsForUnlimited);
                return;

Pues después de: ChatPacket(CHAT_TYPE_INFO, "No puede abrir una Tienda Offline. Usted necesita %d monedas para abrir una Tienda Offline!", g_wCoinsForUnlimited);
                return;
            }

tienes que poner esto:

Quote

            DBManager::instance().DirectQuery("UPDATE account.account SET coins = coins - %d where id = %u", g_wCoinsForUnlimited, GetAID());                
            ChatPacket(CHAT_TYPE_COMMAND, "BINARY_Update_Coins %ld", lCoins - g_wCoinsForUnlimited);
        }
    }


y con esto debería irte al compilar el game, si te da algún error comentamelo seguramente me he dejado algo 🙂 no soy experto así que si hay algún experto en el tema que le aconseje mejor que yo, solo te faltaría poner el comando ese que te he dicho de /udapte_coins para que funcione con tu función, o hacerlo como te lo he dejado yo suerte.

Enlace para comentar
Compartir en otros sitios

  • 0

Hola

Debes iniciar sesión para ver el contenido del enlace en esta publicación.
, muchas gracias por el comentario, verás tengo un pequeño problema a la hora de agregar el 

            DBManager::instance().DirectQuery("UPDATE account.account SET coins = coins - %d where id = %u", g_wCoinsForUnlimited, GetAID());                
            ChatPacket(CHAT_TYPE_COMMAND, "BINARY_Update_Coins %ld", lCoins - g_wCoinsForUnlimited);
        }
    }

ya que no uso la offline shop de tu función, entonces me he bloqueado allí, no se como ponerla independientemente, tu sabrías?

Enlace para comentar
Compartir en otros sitios

  • 0
hace 15 horas, xLordneji dijo:

Hola

Debes iniciar sesión para ver el contenido del enlace en esta publicación.
, muchas gracias por el comentario, verás tengo un pequeño problema a la hora de agregar el 


            DBManager::instance().DirectQuery("UPDATE account.account SET coins = coins - %d where id = %u", g_wCoinsForUnlimited, GetAID());                
            ChatPacket(CHAT_TYPE_COMMAND, "BINARY_Update_Coins %ld", lCoins - g_wCoinsForUnlimited);
        }
    }

ya que no uso la offline shop de tu función, entonces me he bloqueado allí, no se como ponerla independientemente, tu sabrías?

Hola de nada 🙂 , prueba buscando : if (GetGold() < static_cast<int>(g_dwNeedMoney)) y añade la función abajo :

Quote


                }

                DBManager::instance().DirectQuery("UPDATE account.account SET coins = coins - %d where id = %u", g_wCoinsForUnlimited, GetAID());                
                ChatPacket(CHAT_TYPE_COMMAND, "BINARY_Update_Coins %ld", lCoins - g_wCoinsForUnlimited);
            }
        }

 

Enlace para comentar
Compartir en otros sitios

Unirse a la conversación

Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.

Guest
Responder esta pregunta...

×   Has pegado contenido con formato .   Eliminar formato

  Only 75 emoji are allowed.

×   Tu enlace se ha incorporado automáticamente.   Mostrar un enlace en su lugar

×   Se ha restaurado el contenido anterior. .   Borrar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recientemente navegando por este tema   0 miembros

    • No hay usuarios registrados visitando esta página.
×
×
  • Crear nuevo...