-
Content Count
231 -
Joined
-
Last visited
-
Days Won
9
Reputation Activity
-
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
-
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
-
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.
-
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
-
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
-
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
-
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
-
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
-
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.
-
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.
-
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.
-
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)
-
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
-
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
-
Owsap got a reaction from DemonZ in Jogo de Cartas Okey
...
Download
MEGA
Sendspace
VirusTotal
VirusTotal
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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: