Os Melhores
Conteúdo popular
Mostrando conteúdo com a maior reputação em 09/03/25 in todas as áreas
-
Coisas importantes na source Pode ser compilado para sistemas 32 ou 64 bits você vai ter que fazer ajustes no makefile e resolver os problemas que aparecerem. PACKAGE’S LIST : ( Estou usando o Ubuntu-20.04 (source 152), os nomes dos packages ou comandos podem mudar de acordo com a Distro que você está usando ). Os pacotes são os mesmo usados para rodar o servidor, adicionando somente alguns para fins de compilação. sudo apt-get install build-essential sudo apt-get install gcc-multilib sudo apt-get install g++-multilib sudo apt-get install dos2unix sudo apt-get install default-jdk sudo apt-get install libxml-dom-perl sudo apt-get install libxml2-dev sudo apt-get install libpcre3-dev sudo apt-get install libssl-dev sudo apt-get install libcrypto++-dev sudo apt-get install ant sudo apt-get install libsaxonhe-java sudo apt-get install libxslt1-dev sudo apt-get install libreadline-dev sudo apt-get install python sudo dpkg --add-architecture i386 sudo apt-get install libssl1.0-dev:i386 download the “libssl1.0.0_1” package wget [Conteúdo Oculto] sudo dpkg -i *.deb sudo apt-get update sudo apt-get upgrade apt --fix-broken install sudo apt-get install zlib1g:i386 sudo apt-get install libncurses5:i386 sudo apt-get install libssl-dev:i386 sudo apt-get install libxml2:i386 sudo apt-get install libpcre3-dev:i386 sudo apt-get install libxml2-dev:i386 sudo apt-get install libc6:i386 sudo apt-get install libstdc++6:i386 sudo apt-get update sudo apt-get upgrade Primeiro de tudo converter os arquivos para UNIX : pwsource/ = ./fixsrc.sh ( essa é minha pasta raiz “pwsource” você deve colacar o script dentro da sua pasta raiz ) #!/bin/bash find . -name "*.h" -exec dos2unix {} \; find . -name "*.hpp" -exec dos2unix {} \; find . -name "*.hxx" -exec dos2unix {} \; find . -name "*.cpp" -exec dos2unix {} \; find . -name "*.cxx" -exec dos2unix {} \; find . -name "Makefile" -exec dos2unix {} \; chmod -R 0755 . ; chmod -R 0755 * chown -R root:root ; chown -R root:root * share : pasta e arquivos = common , io , mk, perf, rpc, rpcgen, storage criar um link dinâmico para a pasta “cnet” ou copiar diretamente os arquivos. cnet : gfaction/operations/ = ./opgen.pl opgen.xml ( cria arquivos protocol’s) cnet/ = ./rpcgen rpcalls.xml ( cria arquivos protocol’s ) gamed/ = cria static lib libgsPro2.a gdbclient/ = cria static lib libdbCli.a logclient/ = cria static lib liblogCli.a io/ = cria static lib libgsio.a storage/ = cria static lib libdb.a ( necessário instalar o Berkeley DB 4.2 ( por algum motivo as pessoas não usam essa static lib para compilar a gs, outros jogos da Wanmei usam isso quando compila a gs. ) ) gacd/ = cria gacd gamedbd/ = cria gamedbd gauthd/ = cria gauthd substitui a authd feita em java . gdeliveryd/ = cria gdeliveryd gfaction/ = cria gfaction glinkd/ = cria glinkd logservice/ = cria logservice uniquenamed/ = cria uniquenamed gacdclient/ = ???? gclient/ = ???? cskill : skill/ = cria static lib libskill.a gen/ = ant compile cria skilleditor ( alterar a versão do java no “build.xml” para sua versão instalada) gen/ = ant -buildfile build.xml cria gen.jar ( skilleditor e gen.jar trabalham juntos , em teoria conecta num banco de dados) gen/ = java -jar gen.jar ( executa o programa ) Obs. : Existe uma relação desse programa com o rpcalls.xml , existe uma função no xmlcoder.pl para verificar a versão do rpcalls.xml ele tenta acessar o bando de dados. iolib : copiar as statics libs ( arquivos *.a ) da pasta “cnet” para a “iolib”. cgame: libcommon/ = cria static lib libcommon. a ( não é necessário copiar para “iolib”) cgame/ = cria gs e a dynamic lib libtask.so Extra: Não tem uma utilidade real, porém o arquivo “rpcalls.xsl” serve para gerar uma versão do “rpcalls.xml” em “.html” Gera um HTML com link para os arquivos. cnet/ = java -jar /usr/share/java/Saxon-HE.jar -s:rpcalls.xml -xsl:rpcalls.xsl -o:nome.html cria nome.html (“nome” é o nome do arquivo html, você pode usar qualquer um) OBS. : A pasta “share” existem muitos programas em java, porém não são necessários para compilar a source mas devem ter alguma utilidade, não me aprofundei mais fiquem a vontade para descobrir suas funcionalidades.1 ponto
-
Para isso, precisamos de um IDA e de qualquer editor hexadecimal (010 editor, por exemplo). Importante: O valor da variável responsável pelo número de moedas está definido como int32 (o número máximo é 2.147.483.647). Nas capturas de tela, os valores já foram alterados para o número máximo de moedas de 2.100.000.000. Comece alterando os valores no GS. Procure (usando o IDA) valores semelhantes nas seguintes funções (nas capturas de tela, eles já foram alterados para os novos valores): A pesquisa encontrará 2 funções gplayer_imp::gplayer_imp(void). Você precisará alterá-las exatamente na ordem em que estão no IDA. 1. Primeiro, alteramos o valor na primeira função gplayer_imp::gplayer_imp(void). Usando o editor hexadecimal, percorra o endereço desse valor e altere-o em int32 de 200.000.000 (C2 EB 0B em hexadecimal) para o valor desejado. [Conteúdo Oculto] Algo assim (novamente, na captura de tela, já foi alterado para 2100000000): [Conteúdo Oculto] 2. Em seguida, encontre e altere o valor na segunda função de forma semelhante gplayer_imp::gplayer_imp(void) [Conteúdo Oculto] 3. Em seguida, localize a função team_control_member::PickupTeamMoney. Haverá dois valores. Altere ambos. [Conteúdo Oculto] 4. Em seguida, vem a função team_control_leader::PickupTeamMoney. Ela é semelhante à função anterior. 2 valores - altere ambos. [Conteúdo Oculto] 5. Por fim, localize a função GNET::Handle_AuctionOpen. Encontre o valor como na captura de tela. Altere-o no hexadecimal. [Conteúdo Oculto] Depois disso, você precisará alterar os valores em elementclient.exe, gamedbd e gdeliveryd. Nesses arquivos, basta usar o editor hexadecimal para localizar todos os valores int32 == 200000000 e substituí-los pelo valor necessário (no 010, isso pode ser feito, por exemplo, por meio do Replace All ou manualmente). creditos: [Conteúdo Oculto]1 ponto
-
1 ponto
-
Olá a todos, estou buscando trazer tutoriais de coisas mais complexas, para que desenvolvedores que estão começando a pouco tempo, possa crescer ainda mais seu conhecimento. Vim trazer algo que poucos tem conhecimento e também tiveram curiosidade de saber, sobre mapas e sobre fixação de mapas. Quando eu construi o New History em 2018, eu customizei ele ao máximo e com isso eu aprendi bastante a trabalhar com mapas e me foi despertado muita curiosidade sobre. Hoje trabalhando com as novas versões, eu tive que adicionar na minha build mais de 25 mapas e vim ensinar vocês como adicionar novos mapas no servidor da forma correta (gs.conf). Lembrando, que todo o sistema de exportação e downgrade não precisa ser ensinado, pois há uma ferramenta perfeita para esse trabalho do Steve Langley (Skype: narrowengineer), o AngelicaMapEditor. Só deixando um adendo, a ferramenta não gera npcgen.data, path.sev e arquivos de configuração dos mapas (Sem esses, os mapas não ligam), então recomendo antes de tudo, clonar um existente (Limpo) e adicionar os novos arquivos exportados. Agora vamos para o que interessa! Vou usar como exemplo o mapa:a101 (is101). Você precisará abrir o arquivo instance.txt (element/configs.pck/instance.txt) e gs.conf (PWServer/gamed/gs.conf) Estando com os dois abertos, você irá pesquisar no instance.txt: "a101" Estará mais ou menos assim: ////////////////////////////////////////////////////////////// "北陆-蜃渊雪国遗址" { 91 "a101" // path "loading/a101" // loading background 2,2 // row, column 0 "r0_0-c1_1-l0.cfg" {} 0 } ////////////////////////////////////////////////////////////// Somente disso que precisaremos. Informações que iremos precisar para o servidor: 91 = ID do mapa (tag) “a101” = nome do mapa 2,2 = Row / Colum Sempre bom lembrar que esses valores podem alterar dependendo de qual mapa você irá utilizar, então não se apegue a isso. Agora vamos para o gs.conf Ensinamento básico, se você reparar: São 2 tipos de mapas: world_servers e instance_servers. O que você precisa definir primeiro é isso, se será um mapa aberto (world_servers), ou se será uma dungeon ( quando desmonta o grupo todo mundo é expulso e ela reseta) instance_servers. Bem, escolhendo isso, você irá definir como vamos solicitar esse mapa depois do último mapa definido em world_servers ou instance_servers, ficando assim: world_servers = gs01;/*imagine vários mapas definidos*/;is101; Então você percebeu que vamos chamar nosso mapa de is101, mas você pode colocar qualquer nome (nessa etapa e nas demais definições), exemplos: zd411, ab587, z57… Como você é inteligente e já percebeu, eu defini meu mapa como um mapa aberto, ou seja, um world_server. Agora você vai terminar de configurar seu mapa, no final do arquivo gs.conf. Estarei explicando logo após o código. ;----------------------------------------------------------------------------------------------------- [World_is101] ;-------- Se o seu mapa é um world_servers World_Nome, caso contrário Instance_Nome ----- index = 126 tag = 91 base_path = a101/ limit = allow-root; grid = {80,80,25,-1000.0,-1000.0} base_region = {-1024.0,-1024.0} , {1024,1024.0} local_region = {-1024.0,-1024.0} , {1024,1024.0} cid = 0,2,13 [Terrain_is101] ;-------- Mude o Nome ----- szMapPath = map nAreaWidth = 512 nAreaHeight = 512 nNumAreas = 4 ;----- Normalmente é uma soma de Cols + Rows (Salvo exceções) nNumCols = 2 ;----- Numero de Columns no instance.txt nNumRows = 2 ;----- Numero de Rows no instance.txt vGridSize = 2.0f vHeightMin = 0.0f vHeightMax = 800.0f [MsgReceiverTCP_is101] ;-------- Mude o Nome ----- type = tcp listen_addr = INSTANCE101:12009 ;-------- Caso seja localhost, declare, mas lembre sempre de alterar a porta por exemplo 12010,12011.. ----- so_sndbuf = 16384 so_rcvbuf = 16384 tcp_nodelay = 1 listen_backlog = 10 [MsgReceiverUNIX_is101] ;-------- Mude o Nome ----- type = unix listen_addr = /tmp/gssock_is101 ;-------- Mude o Nome ----- so_sndbuf = 16384 so_rcvbuf = 16384 listen_backlog = 10 ;----------------------------------------------------------------------------------------------------- Bem, essa é a configuração do mapa a101. Tudo dependerá do tamanho do row e da column que pegamos na instance.txt Primeiro de tudo, você terá que adicionar um Index, lembrando, esse valor não pode ser igual outro mapa existente (dará conflito e os dois serão desligados), então use um valor depois do último mapa configurado, lembre-se também, que esse valor não pode passar de 128 (na 1.5.5), caso contrário, os monstros e npcs afundam no mapa. ( Usei 126). você terá que adicionar o id (Tag) para o ID do mapa no instance.txt, se o ID tiver errado (diferente do client), você toma disconnect ao tentar acessar o mapa. ( Usei 91). base_path é o caminho onde está o seu mapa, nesse caso, você altera apenas o nome ( Usei a101/ ). limit são variáveis de liberações do mapa, segue os exemplos em um fórum externo: [Conteúdo Oculto] Grid ( Como definir o valor ): O valor de Grid dependerá do seu Row / Column. Exemplos: Se o mapa for 2 / 2: 80,80,25,-1000,-1000 Se o mapa for 3 / 3 120,120,25,-1500,-1500 Se o mapa for 4 / 4: 160,160,25,-2000.-2000 Os exemplos acima são bem explicativos, caso não entendeu, basicamente: Você vai multiplicar o valor de grid x 25, ele dará o resultado total, ou seja: 80 x 25 = 2000. 2000 / 2 = 1000, então nesse caso: -1000, -1000. 120 x 25 = 3000. 3000 / 2 = 1500, então nesse caso: -1500, -1500. Assim por diante. base_region e local_region, você consegue esse valor através do AngelicaMapEditor. Os demais valores importantes de serem configurados eu deixei comentário no exemplo acima. Em caso de dúvidas fique à vontade em perguntar.1 ponto
-
#!/bin/bash # Define as variaveis de cores RED='\e[91m' GREEN='\e[92m' YELLOW='\e[93m' RESET='\e[0m' # Atualiza o sistema echo -e "${YELLOW}Atualizando o sistema...${RESET}" sudo apt-get update -y >/dev/null 2>&1 echo -e "${GREEN}Sistema atualizado.${RESET}" # Verifica se o sistema está executando Ubuntu 20.04 if [ "$(lsb_release -rs)" != "20.04" ]; then echo -e "${RED}Este script so pode ser executado no Ubuntu 20.04.${RESET}" exit 1 fi # Função para verificar se um pacote está instalado package_installed() { dpkg -s "$1" >/dev/null 2>&1 && return 0 || return 1 } # Função para instalar um pacote install_package() { if dpkg --print-architecture | grep -q "i386"; then PACKAGE="$1:i386" else PACKAGE="$1" fi if package_installed "$PACKAGE"; then echo -e "${GREEN}O pacote $PACKAGE ja esta instalado.${RESET}" else echo -e "${YELLOW}Instalando o pacote $PACKAGE...${RESET}" if sudo apt-get install -y "$PACKAGE" >/dev/null 2>&1; then echo -e "${GREEN}O pacote $PACKAGE foi instalado com sucesso.${RESET}" else echo -e "${RED}Falha ao instalar o pacote $PACKAGE.${RESET}" exit 1 fi fi } # Função para configurar mariadb e criar um novo usuario configure_mariadb() { echo -e "${YELLOW}Configurando MariaDB...${RESET}" # Gera uma senha aleatoria PASSWORD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo '') # Executa comandos SQL sudo mysql -u root <<-EOF >/dev/null 2>&1 CREATE USER 'admin'@'%' IDENTIFIED BY '$PASSWORD'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%'; FLUSH PRIVILEGES; EOF echo -e "${GREEN}Usuario 'admin' criado.${RESET}" # Salva o usuario e senha em um arquivo na pasta raiz do linux echo "Usuario: admin" | sudo tee /root/mariadb_admin_credentials.txt >/dev/null 2>&1 echo "Senha: $PASSWORD" | sudo tee -a /root/mariadb_admin_credentials.txt >/dev/null 2>&1 echo -e "${GREEN}O usuario e a senha foram salvos em /root/mariadb_admin_credentials.txt.${RESET}" # Configura mariadb para permitir conexoes remotas echo "bind-address = 0.0.0.0" | sudo tee -a /etc/mysql/mariadb.conf.d/50-server.cnf >/dev/null 2>&1 sudo service mariadb restart echo -e "${GREEN}MariaDB configurado para permitir conexoes remotas.${RESET}" } # Lista de pacotes a serem instalados system_tools=("htop" "curl" "wget" "ipset" "net-tools" "tzdata" "ntpdate") development=("make" "gcc" "g++" "libssl-dev" "libcrypto++-dev" "libpcre3" "libpcre3-dev" "libtesseract-dev" "libx11-dev" "gcc-multilib" "libc6-dev" "build-essential" "gcc-multilib" "g++-multilib" "libtemplate-plugin-xml-perl" "libxml2-dev" "libxml2") java_mono=("openjdk-11-jre" "mono-complete") archive_tools=("p7zip-full") libraries=("libpcap-dev") database=("mariadb-server" "mariadb-client") php_apache=("apache2" "php7.4" "php-cli" "php-common" "php-curl" "php-gd" "php-mbstring" "php-mysql" "php-xml" "php-xmlrpc" "php-soap" "php-intl" "php-zip" "php-bcmath" "php-json" "php-tidy") # Instala ferramentas do sistema for package in "${system_tools[@]}"; do install_package "$package" done # Instala ferramentas de desenvolvimento for package in "${development[@]}"; do install_package "$package" done # Instala Java e Mono for package in "${java_mono[@]}"; do install_package "$package" done # Instala ferramentas de arquivo for package in "${archive_tools[@]}"; do install_package "$package" done # Instala bibliotecas for package in "${libraries[@]}"; do install_package "$package" done # Instala banco de dados for package in "${database[@]}"; do install_package "$package" done # Instala PHP e Apache for package in "${php_apache[@]}"; do install_package "$package" done # Configura MariaDB e cria um novo usuario configure_mariadb service apache2 restart echo -e "${GREEN}Instalacao concluida!${RESET}" install-ubuntu20.04.sh1 ponto
-
Esse vídeo vai lhe ensina como configurar uma maquina linux debian 12 VPS OU DEDICADO para criar um servidor private de perfect world, o passo a passo. DOWNLOAD DO SCRIPT: Clique Aqui COMO CONFIGURAR UMA VPS / DEDICADO NO DEBIAN 12 PASSO A PASSO PARA INSTALAÇÃO E PERFECT WORLD1 ponto