Jump to content
  • 0

Ayuda con Botón Actualizar Coins


xLordneji

Question

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.

 

 

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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.

Link to comment
Share on other sites

  • 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?

Link to comment
Share on other sites

  • 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);
            }
        }

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...