Mário. Posted March 15, 2018 at 10:29 PM Share Posted March 15, 2018 at 10:29 PM (O título está inglês para chamar mais atenção) Ontem vi-me a falar sozinho na shoutbox e hoje cheguei a seguinte conclusão. Ultimamente tenho andado um pouco viciado em PHP & HTML e graças a isso, decidi meter na cabeça criar um sistema completo de multilinguagens em: Site; Client; Serverside. No site está otimizado e bem estruturado mas no client e no serverside não estão bem exatamente da forma como eu quero e daí pedir-vos sugestões. Esta é a forma como eu tenho feito: PHP: $details = ip_details($real_ip); $country = $details->country; $current_country = array( 'PT' => 'pt', 'BR' => 'pt', 'ES' => 'es', 'DE' => 'ge', 'GB' => 'en', 'US' => 'en', 'RO' => 'ro', 'TR' => 'tr', // Ficará para depois ); Python: # Add after: if app.ENABLE_LSM2_MULTI_LANGUAGE: self.text = ConnectingDialog() self.text.SetText(localeInfo.CLIENT_RESTART) self.text.Close() # This was made in order to make some changes/upgrades in the system. You can simple edit if you want. self.flag = { 'LANG' : ( "pt", "en", "ro", "es", "de", "tr", ) } # This means: # pt: 0 # en: 1 # ... self.exe = "metin2client.exe" # Change the name for your metin2client.exe # If you use .bin, just change it to the directory of the patcher (ex: patcher.exe) # Search for: def __ExitGame(self): app.Exit() # Add after: if app.ENABLE_LSM2_MULTI_LANGUAGE: # I made this way because of the timer (It's kinda of stupid but I will change it on the next update) # Probably this is not the best code, but it works - not really an expert in python Tenho feito de forma a ser por tutorial pois estou a pensar em lançar o mesmo quando acabar. Um print de como está no login: O pedido agora é: Como devo de fazer o sistema? Por identificação de IP ou por algo como mudança de linguagem presente por quest (sou bastante fã de LUA rs)? Pedi já opiniões externas e debateram-se dizendo que se for IP acabará por a desvantagem de (por exemplo) ser impossível um português morar no estrangeiro e querer jogar na língua materna e é por essa razão que estou mais inclinado para fazer por quest (a minha ideia seria criar uma função como ch->GetLang que pudesse indicar a que linguagem ele tem de forma a poder ser mudado o locale_string/translate.lua/oxquiz.lua/. Obrigado desde já pela atenção 1 Link to comment Share on other sites More sharing options...
AprendizM2 Posted March 15, 2018 at 10:33 PM Share Posted March 15, 2018 at 10:33 PM Acredito que por quest seria a melhor opção mario bom projeto up Link to comment Share on other sites More sharing options...
[Admin] tierrilopes Posted March 15, 2018 at 10:33 PM Share Posted March 15, 2018 at 10:33 PM Faz ambas. Detecta o IP do pc, atribui essa linguagem como a linguagem default. No entanto, a pessoa continua a ter disponível a quest para mudar a linguagem para a que quiser, fazendo override à default. Link to comment Share on other sites More sharing options...
WLN Posted March 15, 2018 at 10:49 PM Share Posted March 15, 2018 at 10:49 PM primeiramente, concordo com o tierri em usar ambas, (só minha opinião mas faz assim, primeiro login ele identifica por ip, mas dando a opção após o login para alterar para algum outro idioma) só minha opinião nada a se considerar muito Link to comment Share on other sites More sharing options...
trample Posted March 15, 2018 at 11:12 PM Share Posted March 15, 2018 at 11:12 PM a melhor opçao ate agora encontrada neste caso foi criar uma db na acout fazendo a mudança com o clik na flag porem me acausou muitas dores de cabeça , realmente , apos analizar a rubinum varias e varias vezes ocasialmente me espertou interesse mas é um trabalho muito grande para isso, o geito é comprar o systema do vegas ou esperar cair na net ele completo . e se algem tiver interece em desemvolver algo estou a disposiçao em ajudar pois é um dos sistemas que eu mais quiz até hoje eu tenho um client com o sistema do rubinum mais eu nao recomendo pois esta faltando umas coisas . Link to comment Share on other sites More sharing options...
Parad0x0 Posted March 16, 2018 at 09:03 AM Share Posted March 16, 2018 at 09:03 AM 9 hours ago, trample said: a melhor opçao ate agora encontrada neste caso foi criar uma db na acout fazendo a mudança com o clik na flag porem me acausou muitas dores de cabeça , realmente , apos analizar a rubinum varias e varias vezes ocasialmente me espertou interesse mas é um trabalho muito grande para isso, o geito é comprar o systema do vegas ou esperar cair na net ele completo . e se algem tiver interece em desemvolver algo estou a disposiçao em ajudar pois é um dos sistemas que eu mais quiz até hoje eu tenho um client com o sistema do rubinum mais eu nao recomendo pois esta faltando umas coisas . Isto é Metin2 e um sistema relativamente fácil de se fazer com os devidos conhecimentos, não faz sentido comprar a ninguém. Respondendo ao tópico, concordo com a resposta do Tierri. Link to comment Share on other sites More sharing options...
Marco Posted March 16, 2018 at 10:28 AM Share Posted March 16, 2018 at 10:28 AM Eu tenho umas svfiles de canto que estava a fazer com o kemazi, no entanto ele depois desapareceu, nós estávamos a fazer apenas por quest e na parte do client, não tem nada relacionado com o ip, caso queiras poderei ajudar Link to comment Share on other sites More sharing options...
LuizFernando Posted March 16, 2018 at 02:02 PM Share Posted March 16, 2018 at 02:02 PM Marco se precisa de ajuda na tradução me avise, única forma que tenho como ajudar kkkkkk Link to comment Share on other sites More sharing options...
trample Posted March 16, 2018 at 10:52 PM Share Posted March 16, 2018 at 10:52 PM se é realmente facil , por que nao essiste na internet outro sistema ? apesar que o sistema pode sim ser feito , porem precisa de pessoas no projeto deste sistema Com conhecimentos AB e Phyton , mas acho dificil , pois estava a procurar algem com conhecimentos em phyton para ajudar-me e ate agora nada . Link to comment Share on other sites More sharing options...
[Admin] tierrilopes Posted March 16, 2018 at 11:12 PM Share Posted March 16, 2018 at 11:12 PM Vou fazer offtopic só para dizer que Vegas não é developer nenhum especial. Tem muita mania, mas é bastante bom a copiar coisas já existentes. Basta ver o código que ele faz. Existem inúmeros sistemas multi-lingua, sendo que o primeiro a ir para a net foi derivado da leak do wom2. Acho que cada um deve fazer as coisas por ele próprio, pois assim é que sistemas seguros são feitos. Link to comment Share on other sites More sharing options...
Parad0x0 Posted March 17, 2018 at 01:13 AM Share Posted March 17, 2018 at 01:13 AM (edited) 2 hours ago, trample said: se é realmente facil , por que nao essiste na internet outro sistema ? apesar que o sistema pode sim ser feito , porem precisa de pessoas no projeto deste sistema Com conhecimentos AB e Phyton , mas acho dificil , pois estava a procurar algem com conhecimentos em phyton para ajudar-me e ate agora nada . Procurar uma pessoa para te ajudar em python, e encontrar pessoas que percebam de python são duas coisas totalmente diferente. Existem por aí sistemas multi-linguas, mas o metin2 é um jogo a morrer em jogadores e devs. São poucos os que ocupam o seu tempo a desenvolver novos sistemas etc... 2 hours ago, Tierri Lopes said: Vou fazer offtopic só para dizer que Vegas não é developer nenhum especial. Tem muita mania, mas é bastante bom a copiar coisas já existentes. Basta ver o código que ele faz. Existem inúmeros sistemas multi-lingua, sendo que o primeiro a ir para a net foi derivado da leak do wom2. Acho que cada um deve fazer as coisas por ele próprio, pois assim é que sistemas seguros são feitos. Não o conheço pessoalmente, mas já vi códigos dele e não são nada do outro mundo. Muitos dos sistemas são coisas fáceis de se fazer com um nível intermédio de conhecimentos. Edited March 17, 2018 at 01:13 AM by Logic Link to comment Share on other sites More sharing options...
trample Posted March 17, 2018 at 02:43 PM Share Posted March 17, 2018 at 02:43 PM Citar Existem por aí sistemas multi-linguas, mas o metin2 é um jogo a morrer em jogadores e devs. São poucos os que ocupam o seu tempo a desenvolver novos sistemas etc... Concordo . eu nao percebo muito em phyton se fosse Ab ate iria numa boa , estou trabalhando num projeto a meses solo eu ja implementei tanta coisa e deixei tanta coisa de lado por chegar na area de phyton e nao conseguir resolver :/ Link to comment Share on other sites More sharing options...
Mário. Posted March 17, 2018 at 05:13 PM Author Share Posted March 17, 2018 at 05:13 PM O problema é que o VegaS é "internacionalmente" conhecido e interpretam-no como o único capaz de fazer estes tipos de sistemas. Vejo mesmo pessoas que chegam a dizer "nada é igual se fosse o vegas a fazer" o que respeito mas há que ter bom senso para saber que ele não é o único com competências. Longe de mim comparar-me com ele, até porque há sistemas que ele criou e que eu implementei, mas chega de dar dickriding nele. Continuando com o tópico, utilizei um pouco de tudo o que disseram: Criei uma aba na tabela account onde estará a linguagem definida (ideia dada pelo @trample): Por default, todas as contas virão em inglês, sendo que assim que entrarem poderão escolher a linguagem. As quests poderão ser facilmente modificadas pelo translate.lua (ideia dada pelo @AprendizM2): snprintf(translateFileName, sizeof(translateFileName), "%s/translate_%s.lua", LocaleService_GetBasePath().c_str(), Language_GetBasePath().c_str()); Invés de fazer do_file na questlib, preferi fazer pela source criando um diretório para as linguagens: Language_GetBasePath Com novas funções como pc.get_lang() que busca qual é a linguagem que temos inserido na base de dados, poderemos utilizar algo como isto: quest language begin state start begin when login begin syschat(system[pc.get_lang].testing) end end end system = {} system["pt"].testing = "Olá" system["en"].testing = "Hi" Esta forma de fazer é bastante simples e penso que deva de estar público em algum lugar. Estou a trabalhar para deteção de IP utilizando o GeoLite2++ (ideia dada pelo @Tierri Lopes) void CInputLogin::LoginByKey(LPDESC d, const char * data) { TPacketCGLogin2 * pinfo = (TPacketCGLogin2 *) data; char login[LOGIN_MAX_LEN + 1]; trim_and_lower(pinfo->login, login, sizeof(login)); GeoLite2PP:DB db("/opt/stuff/GeoLite2-City.mmdb") std:string ip = db.get_field(d->GetHostName(), GeoLite2PP::VCStr {"country", "names", "geral"}); sys_log(0, "Country: %s", ip); // Just a test to see the output const char * country = { "Portugal", "England", "Romenia", "Spanish", "Turkey", "Germany" }; ... } Ainda não está concluído, é apenas para terem uma ideia de como será feito a deteção (podem utilizar que não me importo). Estou a pensar em como devo de fazer a identificação para o locale_string.txt, penso que serei capaz de remodelar por completo a forma como ela é estruturada e ser chamada como um ficheiro de lua (exemplo): %s ±ºÁÖ Èĺ¸¿¡¼ »èÁ¦ÇÏ¿´½À´Ï´Ù = "%s foi excluido como Candidato da Monarquia." Link to comment Share on other sites More sharing options...
trample Posted March 17, 2018 at 05:30 PM Share Posted March 17, 2018 at 05:30 PM Marcos chegou ao ponto onde eu quis debater > Perto de onde voce esta eu parei Aonde voce relacionou quest com Multlocale é um problema . Pensa comigo , na DB essiste uma aba Dizendo o nome da pasta que ela acessa para obter os recursos na inicializaçao do sever . eu tive a ideia de criar outras pastas exemplo : polones , turk , pt, porem vai ter diversas pastas na inicializaçao do sever . a intençao é fazer em que cada accout com o tipo de linguagem acessa a esta pasta . assim nao essistirar multlocale para mim era a forma correta . gostei muito de ver voce empenhado nisso , eu tbn fiquei bucado de tempo me matando aqui , eu resolvi optar pelo sistema do vegas , nao pq ele e pika , e pelo conteudo que ele tem nas maos eu queria poder enxergar oque ele fez corretamente . Link to comment Share on other sites More sharing options...
Mário. Posted March 17, 2018 at 10:08 PM Author Share Posted March 17, 2018 at 10:08 PM 4 horas atrás, trample disse: Marcos chegou ao ponto onde eu quis debater > Perto de onde voce esta eu parei Aonde voce relacionou quest com Multlocale é um problema . Pensa comigo , na DB essiste uma aba Dizendo o nome da pasta que ela acessa para obter os recursos na inicializaçao do sever . eu tive a ideia de criar outras pastas exemplo : polones , turk , pt, porem vai ter diversas pastas na inicializaçao do sever . a intençao é fazer em que cada accout com o tipo de linguagem acessa a esta pasta . assim nao essistirar multlocale para mim era a forma correta . gostei muito de ver voce empenhado nisso , eu tbn fiquei bucado de tempo me matando aqui , eu resolvi optar pelo sistema do vegas , nao pq ele e pika , e pelo conteudo que ele tem nas maos eu queria poder enxergar oque ele fez corretamente . Mário* Na verdade não há nenhum problema que tenha a ver com traduções de quest, pela forma que fiz (ou mesmo fazendo do_file pela questlib) não teria qualquer problema no que toca a isso, a aba que te referes é do common.locale mas não é necessário mudar de forma alguma porque poderás meter todas dentro da pasta /portugal (ou o nome qualquer que tenhas) e meteres de forma a que o jogador vá buscar certo .txt, tal como fiz com o mob_names: Português: Inglês: Link to comment Share on other sites More sharing options...
AprendizM2 Posted March 17, 2018 at 10:12 PM Share Posted March 17, 2018 at 10:12 PM 3 minutes ago, Mário. said: Mário* Na verdade não há nenhum problema que tenha a ver com traduções de quest, pela forma que fiz (ou mesmo fazendo do_file pela questlib) não teria qualquer problema no que toca a isso, a aba que te referes é do common.locale mas não é necessário mudar de forma alguma porque poderás meter todas dentro da pasta /portugal (ou o nome qualquer que tenhas) e meteres de forma a que o jogador vá buscar certo .txt, tal como fiz com o mob_names: Português: Inglês: Tá ficando bom ! Hehe Mario esse sistema será disponibilizado aos membros ou será vendido ? se precisar de algo estou a disposicao Link to comment Share on other sites More sharing options...
Mário. Posted March 17, 2018 at 10:23 PM Author Share Posted March 17, 2018 at 10:23 PM 9 minutos atrás, AprendizM2 disse: Tá ficando bom ! Hehe Mario esse sistema será disponibilizado aos membros ou será vendido ? se precisar de algo estou a disposicao Estou a pensar em publicar mas não posso garantir. Link to comment Share on other sites More sharing options...
trample Posted March 17, 2018 at 10:43 PM Share Posted March 17, 2018 at 10:43 PM A diferença é entre um click sem a quest ingame o usuario nao precisa logar e selecionar a quest para que a opçao venha a escolha na accout Link to comment Share on other sites More sharing options...
LuizFernando Posted March 18, 2018 at 12:06 AM Share Posted March 18, 2018 at 12:06 AM Bom trabalho Mario, está ficando realmente magnifico Link to comment Share on other sites More sharing options...
Sil3nce Posted March 19, 2018 at 08:02 PM Share Posted March 19, 2018 at 08:02 PM Read from different locale_string can be doing without problem, also read item name when you pickup can be read from locale proto instead of DB... I tried to add client part for flag and this is a problem for me. Anyway...is not best solution use IP for determine language because IP sometime can be different...but nice work Link to comment Share on other sites More sharing options...
PACI Posted March 21, 2018 at 04:33 PM Share Posted March 21, 2018 at 04:33 PM Default: Inglês. Selecionar no login (guardar no locale.cfg) - lembrar de dar reload aos modulos locale quando selecionado um novo idioma - e no handshake enviar o idioma escolhido para o servidor atualizar os dados do user (assim como o novo idioma). Podes adicionar também o item_names.txt do servidor no client, e fazer com que este o carregue no momento em que os outros locale/*.txt são carregados (deste modo podes continuar a utilizar a função item.GetItemName() sem grandes alterações no python). In-game podes optar por meter opção no Game Options, enviar um packet a pedir a mudança. Pela parte do servidor, ler vários locale_strings diferentes; e a parte quest, tbh não causa problemas nenhuns. Este foi o planeamento e métodos que utilizei para desenvolver este sistema. Link to comment Share on other sites More sharing options...
Mário. Posted March 21, 2018 at 08:08 PM Author Share Posted March 21, 2018 at 08:08 PM 3 horas atrás, PACI disse: Default: Inglês. Selecionar no login (guardar no locale.cfg) - lembrar de dar reload aos modulos locale quando selecionado um novo idioma - e no handshake enviar o idioma escolhido para o servidor atualizar os dados do user (assim como o novo idioma). Podes adicionar também o item_names.txt do servidor no client, e fazer com que este o carregue no momento em que os outros locale/*.txt são carregados (deste modo podes continuar a utilizar a função item.GetItemName() sem grandes alterações no python). In-game podes optar por meter opção no Game Options, enviar um packet a pedir a mudança. Pela parte do servidor, ler vários locale_strings diferentes; e a parte quest, tbh não causa problemas nenhuns. Este foi o planeamento e métodos que utilizei para desenvolver este sistema. O default encontra-se em inglês de momento. De momento utilizo a opção de reiniciar o cliente por motivos de estética até conseguir ter um código perfeitamente aceitável. - Utilizo somente alguns ficheiros para a parte /locale/country sendo que o resto fica no default que é o pt. A ideia do item_names e de meter nas opções é muito bem vinda mesmo, é algo que irei adaptar para o sistema. O locale_string foi totalmente complicado para mim mas deixo já um obrigado ao @Sil3nce por me ter salvado. Tens razão, a parte da quest não causa problemas nenhuns e torna-se super acessível para futuros usos. Link to comment Share on other sites More sharing options...
trample Posted March 22, 2018 at 01:04 AM Share Posted March 22, 2018 at 01:04 AM basic Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now