antiblock
Cyphriun

Owsap

Membro
  • Content Count

    231
  • Joined

  • Last visited

  • Days Won

    9

Reputation Activity

  1. Upvote
    Owsap got a reaction from arilu in Painel De Gm Avançado By Owsap   
    Olá comunidade!  
    Venho partilhar a minha quest que criei para o GM servindo de um painel com opções de GM.
    Eu já sei que existe vários paneis de gm por aí mas eu acho que a minha ainda poderá facilitar mais a vida dos gms.
     
    Como o título diz, o painel é avançado, quer dizer que a quest tem várias opções para o GM.
    Então quais opções tem este painel?
     
    Imagem:
     
    • Gerir Eventos
    - Podes gerir eventos através do painel do gm.
     
    • Dar bónus a qualquer reino
    - Podes dar um ou mais bónus a qualquer reino por um determinado tempo.
     
    • Cofre do GM
    - Itens de GM
    - Bónus de GM
    - Habilidades P.
     
    • Opções de GM
    - Desligar o Servidor
    - Mostrar uma mensagem de aviso de manutenção ao fazer login.
    - Bloquear/Desbloquear conta de um jogador
    - Bloquear/Desbloquear chat de um jogador
     
    • Outros
    - Tempo (Ajustar horas de amanhecer e anoitecer)
    - Teleportes (Básico)
     
    • Mais informções:
    - Idioma da quest: pt-PT
    - Várias vezes testada, 100% a funcionar
    - Manter o ficheiro ox_event.quest junto com o gm_panel.quest
    - Palavra secreta é pedida por motivos de segurança (Editar Linha 23)
     
    • Como instalar:
    1. Coloca o ficheiro GM no directório das quests e depois abre o ficheiro quest_list e adicionas as linhas:
    GM/gm_panel.quest
    GM/ox_event.quest
    2. Na maquina:
    cd (DirectórioDasQuests) && ./qc GM/gm_panel.quest
    cd (DirectórioDasQuests) && ./qc GM/ox_event.quest
    3. Se houver qualquer problema, na maquina:
    cd (DirectórioDasQuests) && sh make.sh
    4. Se houver problemas com permissão, na maquina:
    chmod -R 770 DirectórioDasQuests/GM
    5. Para quem não sabe onde fica o directório das quests:
    /usr/home/game/share/locale/germany/quest
     
    • Download:
    - https://mega.co.nz/#!3NoGlbgB!szqQgB6R2kPuTH2wri6mE6dRuodc2Q88Fun1EIlI8vM
    - https://dl.dropboxusercontent.com/u/104961902/metin2/GM.zip
     
    • VirusTotal:
    - https://www.virustotal.com/pt/file/bdd212f4adb43c4a82e0de1daafc4e58978fa66523bad88a07c821545716be19/analysis/1434206061/
     
    • CRÉDITOS:
    - A quest foi 100% criada por mim desde a linha 0 por isso se não for muito, deixem os meus créditos na quest para mostrar o respeito pelo meu trabalho.
    - O ficheiro ox_event.quest não foi criado por mim, apenas o editei para funcionar com a minha quest.
     
     
    Espero que gostem da quest e que facilita as vossas vidas 
  2. Haha
    Owsap got a reaction from .Rui in Overfall2 Full Pack   
    Imagens: https://imgur.com/a/4DLTdc6
     
    Link (MEGA) : https://mega.nz/file/HIhWFADJ#lXIzfDHcbiQll7OGVm0FolUNmSMlWndurv-YsT8natY
     
  3. Like
    Owsap got a reaction from @Metin2 in Licença no client 40k ?   
    Por padrão já existe uma função em que verifique a versão do cliente com a versão do servidor, funciona por tempo, ou seja, se a data de execução for maior que a data limite que está configurada no servidor, o jogador será desconectado do servidor. Agora fica como queres verificar esta "chave" ou data de limite da versão / "licença".
    /// 1. @ Server/Game/input_login.cpp // Procura if (g_bCheckClientVersion) { [ ... ] } // Altere tudo por (verificar por data limite) if (g_bCheckClientVersion) { sys_log(0, "VERSION CHECK %s %s", g_stClientVersion.c_str(), d->GetClientVersion()); if (!d->GetClientVersion()) { d->DelayedDisconnect(10); } else { if (d->GetClientVersion() >= g_stClientVersion) { ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ¶óÀ̾ðÆ® ¹öÀüÀÌ Æ²·Á ·Î±×¾Æ¿ô µË´Ï´Ù. Á¤»óÀûÀ¸·Î ÆÐÄ¡ ÈÄ Á¢¼ÓÇϼ¼¿ä.")); d->DelayedDisconnect(0); LogManager::instance().HackLog("VERSION_CONFLICT", ch); sys_log(0, "VERSION : WRONG VERSION USER : account:%s name:%s hostName:%s server_version:%s client_version:%s", d->GetAccountTable().login, ch->GetName(), d->GetHostName(), g_stClientVersion.c_str(), d->GetClientVersion()); } } } else { sys_log(0, "VERSION : NO CHECK"); } // Ou altere por (verificar um valor fixo) if (g_bCheckClientVersion) { sys_log(0, "VERSION CHECK %s %s", g_stClientVersion.c_str(), d->GetClientVersion()); if (!d->GetClientVersion()) { d->DelayedDisconnect(10); } else { if (0 != g_stClientVersion.compare(d->GetClientVersion())) { ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ¶óÀ̾ðÆ® ¹öÀüÀÌ Æ²·Á ·Î±×¾Æ¿ô µË´Ï´Ù. Á¤»óÀûÀ¸·Î ÆÐÄ¡ ÈÄ Á¢¼ÓÇϼ¼¿ä.")); d->DelayedDisconnect(0); LogManager::instance().HackLog("VERSION_CONFLICT", ch); sys_log(0, "VERSION : WRONG VERSION USER : account:%s name:%s hostName:%s server_version:%s client_version:%s", d->GetAccountTable().login, ch->GetName(), d->GetHostName(), g_stClientVersion.c_str(), d->GetClientVersion()); } } } else { sys_log(0, "VERSION : NO CHECK"); } Eis algumas coisas que tens que considerar também; no ficheiro Server/Game /config.cpp tens que ativar esta verificação e também tens que alterar a "chave" ou data limite da versão / "licença".
    /// 1. @ Server/Game/config.cpp // Procura e confirme, altere g_stClientVersion conforme as tuas preferências. bool g_bCheckClientVersion = true; // true = verificar | false = não verificar std::string g_stClientVersion = "1640998800"; // Sat Jan 01 2022 01:00:00 GMT+0000 Também podes criar um ficheiro "VERSION" junto a ficheiro "CONFIG" no diretório dos teus canais e adicionar o valor lá em vez de modificares o código fonte sempre que queres alterar a "chave" ou data limite da versão / "licença".
    Para isso também deves confirmar que essa função seja chamada.
    /// 1. @ Server/Game/config.cpp // Procura LoadValidCRCList(); LoadStateUserCount(); // Adiciona abaixo LoadClientVersion(); Finalmente na source do teu cliente terás que fazer algumas alterações também.
    /// 1. @ Client/UserInterface/PythonNetworkPhaseGame.cpp // Procura strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp) - 1); // # python time.time ¾ÕÀÚ¸® // Altere para (verificar por data limite) strncpy(kVersionPacket.timestamp, static_cast<std::time_t>(std::time(0)), sizeof(kVersionPacket.timestamp) - 1); // Ou altere para (verificar um valor fixo) strncpy(kVersionPacket.timestamp, "1234567890", sizeof(kVersionPacket.timestamp) - 1); O que deves saber sobre essas alterações.
    1. Nem todos os clientes em que toca o código fonte são iguais, por isso deves-te guiar pela semelhança do código.
    2. Este método apenas desconecta o jogador após entrar no jogo caso haja conflito entre a "chave" ou data limite da versão / "licença".
    3. Há melhores formas de verificares o que pretendes, este é apenas o mais semelhante à tua pergunta e o mais simples que já existe no código fonte.

    Cumprimentos, Owsap.
  4. Thanks
    Owsap got a reaction from VzOhMG in Criar botão e/ou dar função a ele   
    Aqui tens um exemplo, espero que te ajude.

    # # Title: Expanded Window # Date: 2021.03.16 # Author: Owsap import app import ui BUTTON_COUNT = 4 class TestWindow(ui.BoardWithTitleBar): def __init__(self): ui.BoardWithTitleBar.__init__(self) self.isLoaded = False self.btnExpanded = False self.btnList = [] if not self.isLoaded: self.__LoadBoard() def __del__(self): ui.BoardWithTitleBar.__del__(self) def __LoadBoard(self): self.SetSize(95, 210) self.SetCenterPosition() self.AddFlag('movable') self.SetTitleName("Test") self.SetCloseEvent(self.Close) textLineGuide = ui.TextLine() textLineGuide.SetParent(self) textLineGuide.SetPosition(45, 185) textLineGuide.SetText(".") textLineGuide.Show() self.textLineGuide = textLineGuide btnExpand = ui.Button() btnExpand.SetParent(self) btnExpand.SetUpVisual("d:/ymir work/ui/public/small_button_01.sub") btnExpand.SetOverVisual("d:/ymir work/ui/public/small_button_02.sub") btnExpand.SetDownVisual("d:/ymir work/ui/public/small_button_03.sub") btnExpand.SetText("+") btnExpand.SetPosition(25, 160) btnExpand.SetEvent(self.__OnClickExpand) btnExpand.Show() self.btnExpand = btnExpand (xLocal, yLocal) = self.btnExpand.GetLocalPosition() btnGroup = ui.Window() btnGroup.SetParent(self) btnGroup.SetPosition(xLocal, yLocal - 0 - (30 * BUTTON_COUNT)) btnGroup.SetSize(40, 30 * BUTTON_COUNT) btnGroup.Hide() self.btnGroup = btnGroup for btnIdx in xrange(BUTTON_COUNT): btn = ui.Button() btn.SetParent(self.btnGroup) btn.SetUpVisual("d:/ymir work/ui/public/small_button_01.sub") btn.SetOverVisual("d:/ymir work/ui/public/small_button_02.sub") btn.SetDownVisual("d:/ymir work/ui/public/small_button_03.sub") btn.SetText("{}".format(btnIdx)) btn.SetPosition(0, (30 * btnIdx)) btn.SetEvent(lambda arg = btnIdx: self.__OnClickExpandedBtn(arg)) btn.Show() self.btnList.append(btn) def __OnClickExpand(self): if not self.btnExpanded: self.btnExpanded = True self.btnGroup.Show() if self.btnExpand: self.btnExpand.SetText("-") else: self.btnExpanded = False self.btnGroup.Hide() if self.btnExpand: self.btnExpand.SetText("+") if self.textLineGuide: self.textLineGuide.SetText(".") def __OnClickExpandedBtn(self, arg): if self.textLineGuide: self.textLineGuide.SetText("{}".format(arg)) def Open(self): self.Show() def Close(self): self.Hide() def OnPressEscapeKey(self): self.Close() return True def OnPressExitKey(self): self.Close() return True  
  5. Haha
    Owsap got a reaction from .Rui in Overfall2 Full Pack   
    Imagens: https://imgur.com/a/4DLTdc6
     
    Link (MEGA) : https://mega.nz/file/HIhWFADJ#lXIzfDHcbiQll7OGVm0FolUNmSMlWndurv-YsT8natY
     
  6. Haha
    Owsap got a reaction from .Rui in Overfall2 Full Pack   
    Imagens: https://imgur.com/a/4DLTdc6
     
    Link (MEGA) : https://mega.nz/file/HIhWFADJ#lXIzfDHcbiQll7OGVm0FolUNmSMlWndurv-YsT8natY
     
  7. Haha
    Owsap got a reaction from .Rui in Overfall2 Full Pack   
    Imagens: https://imgur.com/a/4DLTdc6
     
    Link (MEGA) : https://mega.nz/file/HIhWFADJ#lXIzfDHcbiQll7OGVm0FolUNmSMlWndurv-YsT8natY
     
  8. Upvote
    Owsap got a reaction from arilu in Painel De Gm Avançado By Owsap   
    Olá comunidade!  
    Venho partilhar a minha quest que criei para o GM servindo de um painel com opções de GM.
    Eu já sei que existe vários paneis de gm por aí mas eu acho que a minha ainda poderá facilitar mais a vida dos gms.
     
    Como o título diz, o painel é avançado, quer dizer que a quest tem várias opções para o GM.
    Então quais opções tem este painel?
     
    Imagem:
     
    • Gerir Eventos
    - Podes gerir eventos através do painel do gm.
     
    • Dar bónus a qualquer reino
    - Podes dar um ou mais bónus a qualquer reino por um determinado tempo.
     
    • Cofre do GM
    - Itens de GM
    - Bónus de GM
    - Habilidades P.
     
    • Opções de GM
    - Desligar o Servidor
    - Mostrar uma mensagem de aviso de manutenção ao fazer login.
    - Bloquear/Desbloquear conta de um jogador
    - Bloquear/Desbloquear chat de um jogador
     
    • Outros
    - Tempo (Ajustar horas de amanhecer e anoitecer)
    - Teleportes (Básico)
     
    • Mais informções:
    - Idioma da quest: pt-PT
    - Várias vezes testada, 100% a funcionar
    - Manter o ficheiro ox_event.quest junto com o gm_panel.quest
    - Palavra secreta é pedida por motivos de segurança (Editar Linha 23)
     
    • Como instalar:
    1. Coloca o ficheiro GM no directório das quests e depois abre o ficheiro quest_list e adicionas as linhas:
    GM/gm_panel.quest
    GM/ox_event.quest
    2. Na maquina:
    cd (DirectórioDasQuests) && ./qc GM/gm_panel.quest
    cd (DirectórioDasQuests) && ./qc GM/ox_event.quest
    3. Se houver qualquer problema, na maquina:
    cd (DirectórioDasQuests) && sh make.sh
    4. Se houver problemas com permissão, na maquina:
    chmod -R 770 DirectórioDasQuests/GM
    5. Para quem não sabe onde fica o directório das quests:
    /usr/home/game/share/locale/germany/quest
     
    • Download:
    - https://mega.co.nz/#!3NoGlbgB!szqQgB6R2kPuTH2wri6mE6dRuodc2Q88Fun1EIlI8vM
    - https://dl.dropboxusercontent.com/u/104961902/metin2/GM.zip
     
    • VirusTotal:
    - https://www.virustotal.com/pt/file/bdd212f4adb43c4a82e0de1daafc4e58978fa66523bad88a07c821545716be19/analysis/1434206061/
     
    • CRÉDITOS:
    - A quest foi 100% criada por mim desde a linha 0 por isso se não for muito, deixem os meus créditos na quest para mostrar o respeito pelo meu trabalho.
    - O ficheiro ox_event.quest não foi criado por mim, apenas o editei para funcionar com a minha quest.
     
     
    Espero que gostem da quest e que facilita as vossas vidas 
  9. Upvote
    Owsap got a reaction from NewWars in [C++] EnableFlash & DisableFlash for Buttons   
    Antes de tudo, eu sei que isso é um pouco inútil, mas para ativar e desativar o efeito a piscar nos botões, decidi usar a função de flash padrão, porque não conhecia uma maneira mais fácil.
     
    Como um exemplo, aqui está uma demonstração do efeito do flash.

  10. Upvote
    Owsap got a reaction from NewWars in [C++] EnableFlash & DisableFlash for Buttons   
    Antes de tudo, eu sei que isso é um pouco inútil, mas para ativar e desativar o efeito a piscar nos botões, decidi usar a função de flash padrão, porque não conhecia uma maneira mais fácil.
     
    Como um exemplo, aqui está uma demonstração do efeito do flash.

  11. Upvote
    Owsap got a reaction from NewWars in [C++] EnableFlash & DisableFlash for Buttons   
    Antes de tudo, eu sei que isso é um pouco inútil, mas para ativar e desativar o efeito a piscar nos botões, decidi usar a função de flash padrão, porque não conhecia uma maneira mais fácil.
     
    Como um exemplo, aqui está uma demonstração do efeito do flash.

  12. Upvote
    Owsap got a reaction from Hellblazer in joias na arma   
    Em char_item.cpp
    // Procura em "case ITEM_METIN:" // ¼® È®·ü if (number(1, 100) <= 30) // Substitui por // ¼® È®·ü if (number(1, 100) <= 100)  
  13. Upvote
    Owsap got a reaction from 'ŞŦŘƗƗҜ€Ř' in [C++] Ocultar arma ao atuar emoções   
    Ocultar arma ao atuar emoções

    Repositório Git
    common/service.h
    game/char.cpp
    game/char.h
    game/cmd_emotion.cpp
     
  14. Upvote
    Owsap got a reaction from 'ŞŦŘƗƗҜ€Ř' in [C++] Ocultar arma ao atuar emoções   
    Ocultar arma ao atuar emoções

    Repositório Git
    common/service.h
    game/char.cpp
    game/char.h
    game/cmd_emotion.cpp
     
  15. Upvote
    Owsap got a reaction from DemonZ in Jogo de Cartas Okey   
    ...
     
    Download
    MEGA
    Sendspace
     
    VirusTotal
    VirusTotal
     
     
  16. Like
    Owsap got a reaction from Hellblazer in [Python] Correção de código de cor no quadro de avisos e de dicas   
    Correção de código de cor no quadro de avisos e de dicas
    (notice / big_notice)
     
    Antes:

    Depois:

    root/constInfo.py
    root/uiTip.py
     
  17. Like
    Owsap got a reaction from Hellblazer in [Python] Correção de código de cor no quadro de avisos e de dicas   
    Correção de código de cor no quadro de avisos e de dicas
    (notice / big_notice)
     
    Antes:

    Depois:

    root/constInfo.py
    root/uiTip.py
     
  18. Like
    Owsap got a reaction from Hellblazer in [Python] Correção de código de cor no quadro de avisos e de dicas   
    Correção de código de cor no quadro de avisos e de dicas
    (notice / big_notice)
     
    Antes:

    Depois:

    root/constInfo.py
    root/uiTip.py
     
  19. Like
    Owsap got a reaction from Hellblazer in [Python] Correção de código de cor no quadro de avisos e de dicas   
    Correção de código de cor no quadro de avisos e de dicas
    (notice / big_notice)
     
    Antes:

    Depois:

    root/constInfo.py
    root/uiTip.py
     
  20. Like
    Owsap got a reaction from Hellblazer in [Python] Correção de código de cor no quadro de avisos e de dicas   
    Correção de código de cor no quadro de avisos e de dicas
    (notice / big_notice)
     
    Antes:

    Depois:

    root/constInfo.py
    root/uiTip.py
     
  21. Like
    Owsap got a reaction from Hellblazer in [Python] Correção de código de cor no quadro de avisos e de dicas   
    Correção de código de cor no quadro de avisos e de dicas
    (notice / big_notice)
     
    Antes:

    Depois:

    root/constInfo.py
    root/uiTip.py
     
  22. Thanks
    Owsap got a reaction from Hellblazer in [C++] Comando de GM (/kill_all)   
    Comando de GM para derrotar todos os jogadores à sua volta.

    game/src/cmd.cpp
     
    game/src/cmd_gm.cpp
  23. Thanks
    Owsap got a reaction from Hellblazer in [C++] Comando de GM (/kill_all)   
    Comando de GM para derrotar todos os jogadores à sua volta.

    game/src/cmd.cpp
     
    game/src/cmd_gm.cpp
  24. Like
    Owsap got a reaction from DarkMaster in [Ajuda] Como Mudar O Npc De Lugar   
    Para poderes alterar a posição de qualquer NPC ou adicionar um novo, tens de fazer isso através de FTP.
    Se estiveres a utilizar o FileZilla, conecta ao teu servidor e depois encontra o directório dos mapas.
    Normalmente fica em /usr/home/game/share/locale/germany/map
     
    Depois de estares neste directório, encontras o mapa que queres alterar os NPC's, por exemplo, queres alterar a posição do NPC 9003 (Loja Geral) da primeira
    cidade do Reino Jinno. Entras na pasta metin2_map_c1.
     
    Antes de mais vou explicar como funciona as pastas das Vilas.
     
    metin2_map_a/b/c#
     
    a - Reino Shinsoo
    b - Reino Chunjo
    c - Reino Jinno
     
    a1 - Primeira Vila do Reino Shinsoo
    b1 - Primeira Vila do Reino Chunjo
    c1 - Primeira Vila do Reino Jinno
     
    a3 - Segunda Vila do Reino Shinsoo
    b3 - Segunda Vila do Reino Chunjo
    c3 - Segunda Vila do Reino Jinno
     
    Então, se entrares na pasta metin2_map_c1 estás na primeira vila do Reino Jinno.
     
    Agora para poderes alterar a posição do NPC abres o ficheiro npc.txt e este ficheiro está da seguinte forma:
    m   (x)    (y)    0    0   0   8   1m   100   1   (id)
     
    (x/y) = coordenadas
    x = posição na horizontal
    y = posição na vertical
    id = ID do NPC
     
    Se quiseres adicionar um outro NPC no mapa basta adicionares outra linha mudando as coordenadas e o ID do NPC.
    Exemplo:
    m    383    710    0    0    0    5    1m    100    1    9010
     
    Se usares este exemplo, depois no jogo poderás fazer o seguinte comando, /go 383, 710 e vais ser teleportado para
    a posição do NPC. Este exemplo está atrás da Loja Geral.
     
     
     
    Para alterar os itens da loja do NPC, tens de ir à base de dados do teu servidor.
    Abres o Navicat e vais à base de dados 'player' e depois abres a tabela 'shop_item'
     
    A estrutura da tabela é muito simples de compreender.
    shop_vnum | item_vnum | count
     
    shop_vnum = ID do NPC
    item_vnum = ID do item
    count = quantidade
     
    Por exemplo, queres alterar os itens do NPC 9003 (Loja Geral)
    Procuras no shop_vnum o ID 9003 e depois no item_vnum alteras para qualquer outro item e no count adicionas a quantidade.
     
    Se por acaso quiseres adicionar outro item a esse NPC basta adicionares mais uma row(linha).
     
     
     
    Espero que eu te ajudei com a tua dúvida e que ficou esclarecida. +1 :)
     
    Cumprimentos, OWSAP
  25. Upvote
    Owsap got a reaction from chupamos100 in Como Criar Um Set Pvp/pve   
    Olá comunidade, antes de mais, eu já sei que muitos de vocês já sabem muito sobre o Metin2 e podem pensar que este tópico seja inútil mas a verdade é que ainda há pessoas que não sabem evoluir uma classe ou fazer sets para PVP/PVE ou seja o que for. Embora que a WIKI do Metin2 ensina muita coisa, ela não ensina como criar sets PVP/PVE.
     
    Status da classe
    Todas as classes têm que ter obrigatoriamente a vitalidade no máximo e a seguir,

    Guerreiro:
    - Força
    - Destreza
    Ninja:
    - Destreza
    - Força
    Sura:
    - Inteligência
    - Força
    Xamã
    - Inteligência
    - Destreza

    PVP (WARS) *Set para todas as classes sem contar com o Lycan.

    A Espada/Adaga/Arco/Campainha/Leque deve ter:



    O Elmo deve ter:



    A Armadura deve ter:



    Os Sapatos/Botas devem ter:



    O Escudo deve ter:



    A Pulseira deve ter:



    Os Brincos devem ter:



    O Colar deve ter:



    Total de defesas e resistências nos extras:



    Total de resistências no 6/7:



    PVP (WARS)+Forte *Sem defesas contra Xamã

    A Espada/Adaga/Arco/Campainha/Leque deve ter:



    O Elmo deve ter:



    A Armadura deve ter:



    Os Sapatos/Botas devem ter:



    O Escudo deve ter:



    A Pulseira deve ter:



    Os Brincos devem ter:



    O Colar deve ter:



    Total de defesas e resistências nos extras:



    Total de resistências no 6/7:



    PVE/PVM

    Todos os extras com "OU #?" à frente significa outro "Forte contra".
    Esse "Forte contra" depende do servidor de Metin2.

    A Espada/Adaga/Arco/Campainha/Leque deve ter:



    O Elmo deve ter:



    A Armadura deve ter:



    Os Sapatos/Botas devem ter:



    O Escudo deve ter:



    A Pulseira deve ter:



    Os Brincos devem ter:



    O Colar deve ter: