Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


+142
steven459
offzinho
xurana321
CaJú
riegel
Kernel
raycostabrito
MokirShabat
Ioriyagami190
kamus9629
Acalantus
bazante
emii41so
jonatas_cg
StormAD
-JohnLennon-
LeonM²
psousa
ElKhadafo
Gumg
Snoopy
marcoabruneriZ
faeltwister
ahiraa
Sonart
Naziozeno
Blue
guideath
CaioAnselmo
Biehnandikki
shoves123
ramoncs13
darkfoligno
rushmima
kike669165
Nextt
Tankevil
KauaiÉMeuNomeDeVerdade
diohellfire
AllyssonRpg
Otávio Grunje
onigoetia
takub088
Geynecmi
EduKrowlley
Gabas
Minos
godzilamaker
folignooo
SunsetHill
Allan443211
Pingo de Leite
ezzcardoso
aeFly
Maximus0037
Lixølas
sufaiterevo
wesleykk
tknooz
Adanrox
4l3ff
IsraTwerknov
DragonicK
zgrise
RD12
GuLabonia
saask
iGhoul
OFWGKTA
StellaS2
Brayan96
yuri.dante
PlayDev
eek
TheJhow
Rayner
Aldimun
Shiy
Edsephiroth
Valentine
Mazxz123
iCoke~
Caio Juan
Zetto
Daniel Carvalho
lupptyr
babugue
koezyrs
Makisso
Crunchbird
eluedes
Pain Correndo
renatokamus
Aither
makergame2000
PoxaFiih
afcbb123
GVS3281
Kenshiro
Flares
Satheios
dpsdenes
Pain
Ps+
kinhoccs
Lief
-Luther
Haseo
Kincy
Dexter
admbaiakme
Paulo Soreto
GallighanMaker
luutr
Azel
Honinbou
sklokize
HarturPl4ys
Trpino
Kuroshi
sam-rtp-rgss
Ruan
wclear
driko
Dreew00
LightOfNyx
jiraya
Takkun
iJackboy
Profane ~
moon.sarito1
Soubi92
DevWithCoffee
snaker15
Fabrizio
whitespirits
Conjurador
Readerusama
Komuro Takashi
Kies
Manticora
Dooolly
146 participantes

    VXA-OS - Crie seu MMO com RPG Maker

    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 ZgLkiRU
    Mensagens : 5336
    Créditos : 1163

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por Valentine Qui Mar 26, 2020 8:34 pm

    Otávio Grunje escreveu:
    Valentine escreveu:
    takub088 escreveu:
    Valentine escreveu:
    takub088 escreveu:textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 LHVDFxP

    Como posso editar o canal de bate-papo em tailandês? Obrigada
    Script Vocab.

    #textbox

    Não consigo digitar tailandês na caixa de texto.
    Só consigo digitar em inglês.

    UTF-8
    Você pode tentar usar isso:
    https://docs.microsoft.com/en-us/windows/win32/intl/input-method-manager

    Valentine, você está sugerindo para pessoas as (que provavelmente nunca programaram na vida) que elas implementem uma API no seu sistema?

    Eu não me surpreendo, pois não é a primeira vez que vejo você respondendo dúvidas ou pedidos com "aprenda a programar".
    Eu nunca respondi ninguém dizendo "aprenda a programar". Quando alguém pede um sistema, ou eu digo que farei futuramente, se tiver na minha lista, ou que não pretendo fazer, ou que é muito específico para um jogo (maioria dos pedidos). E mesmo que eu tivesse dito para alguém aprender a programar, não haveria nenhum problema, já que quem quer fazer um bom jogo tem que saber um pouco de tudo, inclusive no próprio Manual há um link de aulas de programação.
    tknooz
    tknooz
    Novato
    Novato


    Mensagens : 16
    Créditos : 0

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por tknooz Sáb Mar 28, 2020 6:55 pm

    Estou tendo esse problema ao tentar abrir o servidor!
    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Captur10
    Paulo Soreto
    Paulo Soreto
    Lenda
    Lenda


    Mensagens : 1980
    Créditos : 367

    Ficha do personagem
    Nível: 1
    Experiência:
    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Left_bar_bleue0/0textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty_bar_bleue  (0/0)
    Vida:
    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Left_bar_bleue30/30textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty_bar_bleue  (30/30)

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por Paulo Soreto Sáb Mar 28, 2020 8:17 pm

    Otávio Grunje escreveu:
    Valentine escreveu:
    takub088 escreveu:
    Valentine escreveu:
    takub088 escreveu:textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 LHVDFxP

    Como posso editar o canal de bate-papo em tailandês? Obrigada
    Script Vocab.

    #textbox

    Não consigo digitar tailandês na caixa de texto.
    Só consigo digitar em inglês.

    UTF-8
    Você pode tentar usar isso:
    https://docs.microsoft.com/en-us/windows/win32/intl/input-method-manager

    Valentine, você está sugerindo para pessoas as (que provavelmente nunca programaram na vida) que elas implementem uma API no seu sistema?

    Eu não me surpreendo, pois não é a primeira vez que vejo você respondendo dúvidas ou pedidos com "aprenda a programar".

    O VXA-OS é um projeto open source. Até pouco tempo atrás tínhamos problemas com o RPG Maker para trazer alguns caracteres da língua portuguesa pro jogo, já que o próprio RPG Maker NÃO TEM SUPORTE AO INPUT de nada exceto os controles padrões. Depois de muitas versões (Netplay Plus, Netplay Master, Netmaker...) chegamos ao ponto que estamos hoje. Eu preciso lembrar vocês que apesar do projeto ser de código aberto, somente o @Valentine está prestando manutenção, já que a comunidade não oferece conteúdo adicional (diferente da época do Netplay Master que Netplay Crystal, nostálgico).

    Agora você pensa, é mesmo culpa dele não ter suporte a tailandês ou chinês ou qualquer outro idioma que traga caracteres desconhecidos para o jogo? Sério? Já levou muito tempo pra termos suporte a nossa própria língua, imagina uma que nunca tivemos contato.

    Essas coisas não são tão simples de se fazer, e bem, o máximo que eu posso fazer é indicar a vocês que desejam suporte a línguas com sistema de escrita simbólico é procurar o @Dragonick e a engine dele, que certamente suporta esse tipo de coisa.


    Última edição por Paulo Soreto em Sáb Mar 28, 2020 8:27 pm, editado 1 vez(es)
    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 ZgLkiRU
    Mensagens : 5336
    Créditos : 1163

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por Valentine Sáb Mar 28, 2020 8:25 pm

    tknooz escreveu:Estou tendo esse problema ao tentar abrir o servidor!
    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Captur10
    Provavelmente você mexeu no def handle_login do arquivo handle_data.rb. Me passa esse script.
    Kies
    Kies
    Diva
    Diva


    Mensagens : 1154
    Créditos : 124

    Ficha do personagem
    Nível: 1
    Experiência:
    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Left_bar_bleue0/0textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty_bar_bleue  (0/0)
    Vida:
    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Left_bar_bleue30/30textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty_bar_bleue  (30/30)

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por Kies Sáb Mar 28, 2020 9:29 pm

    Valentine escreveu:
    Otávio Grunje escreveu:
    Valentine escreveu:
    takub088 escreveu:
    Valentine escreveu:
    takub088 escreveu:textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 LHVDFxP

    Como posso editar o canal de bate-papo em tailandês? Obrigada
    Script Vocab.

    #textbox

    Não consigo digitar tailandês na caixa de texto.
    Só consigo digitar em inglês.

    UTF-8
    Você pode tentar usar isso:
    https://docs.microsoft.com/en-us/windows/win32/intl/input-method-manager

    Valentine, você está sugerindo para pessoas as (que provavelmente nunca programaram na vida) que elas implementem uma API no seu sistema?

    Eu não me surpreendo, pois não é a primeira vez que vejo você respondendo dúvidas ou pedidos com "aprenda a programar".
    Eu nunca respondi ninguém dizendo "aprenda a programar". Quando alguém pede um sistema, ou eu digo que farei futuramente, se tiver na minha lista, ou que não pretendo fazer, ou que é muito específico para um jogo (maioria dos pedidos). E mesmo que eu tivesse dito para alguém aprender a programar, não haveria nenhum problema, já que quem quer fazer um bom jogo tem que saber um pouco de tudo, inclusive no próprio Manual há um link de aulas de programação.

    Ele como criador do projeto VXAOS pode falar oque quiser JÁ QUE! O PROJETO É 100% GRATUITO! E ELE NÃO GANHOU NADA PRA FAZER OQUE JA FEZ; ESTÁ ACHANDO RUIM? ESTUDA PROGRAMAÇAO!!!!!! E FAZ SUA ENGINE PORÉM POSTA PRA TODOS USAREM SEM GANHAR 1 REAL!
    tknooz
    tknooz
    Novato
    Novato


    Mensagens : 16
    Créditos : 0

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por tknooz Sáb Mar 28, 2020 11:15 pm

    Código:
    #==============================================================================
    # ** Handle_Data
    #------------------------------------------------------------------------------
    #  Este script recebe as mensagens do cliente.
    #------------------------------------------------------------------------------
    #  Autor: Valentine
    #==============================================================================

    module Handle_Data

    def handle_messages(client, buffer)
    begin
    header = buffer.read_byte
    if client.in_game?
    handle_messages_game(client, header, buffer)
    else
    handle_messages_menu(client, header, buffer)
    end
    rescue => e
    client.close_connection
    @log.add('Error', :red, "Erro: #{e}\n#{e.backtrace.join("\n")}")
    end
    end

    def handle_messages_menu(client, header, buffer)
    case header
    when Constants::PACKET_LOGIN
    handle_login(client, buffer)
    when Constants::PACKET_NEW_ACCOUNT
    handle_new_account(client, buffer)
    when Constants::PACKET_NEW_CHAR
    handle_new_character(client, buffer)
    when Constants::PACKET_REMOVE_CHAR
    handle_remove_character(client, buffer)
    when Constants::PACKET_USE_CHAR
    handle_use_character(client, buffer)
    end
    end

    def handle_messages_game(client, header, buffer)
    case header
    when Constants::PACKET_PLAYER_MOVE
    handle_player_movement(client, buffer)
    when Constants::PACKET_CHAT_MSG
    handle_chat_message(client, buffer)
    when Constants::PACKET_PLAYER_ATTACK
    handle_player_attack(client)
    when Constants::PACKET_USE_ITEM
    handle_use_item(client, buffer)
    when Constants::PACKET_USE_SKILL
    handle_use_skill(client, buffer)
    when Constants::PACKET_CHANGE_HOTBAR
    handle_change_hotbar(client, buffer)
    when Constants::PACKET_USE_HOTBAR
    handle_use_hotbar(client, buffer)
    when Constants::PACKET_TARGET
    handle_target(client, buffer)
    when Constants::PACKET_ADD_DROP
    handle_add_drop(client, buffer)
    when Constants::PACKET_REMOVE_DROP
    handle_remove_drop(client, buffer)
    when Constants::PACKET_PLAYER_PARAM
    handle_player_param(client, buffer)
    when Constants::PACKET_PLAYER_EQUIP
    handle_player_equip(client, buffer)
    when Constants::PACKET_OPEN_FRIENDS
    handle_open_friends(client)
    when Constants::PACKET_REMOVE_FRIEND
    handle_remove_friend(client, buffer)
    when Constants::PACKET_NEW_GUILD
    handle_new_guild(client, buffer)
    when Constants::PACKET_OPEN_GUILD
    handle_open_guild(client)
    when Constants::PACKET_GUILD_LEADER
    handle_guild_leader(client, buffer)
    when Constants::PACKET_GUILD_NOTICE
    handle_guild_notice(client, buffer)
    when Constants::PACKET_REMOVE_GUILD_MEMBER
    handle_remove_guild_member(client, buffer)
    when Constants::PACKET_LEAVE_GUILD
    handle_leave_guild(client)
    when Constants::PACKET_LEAVE_PARTY
    handle_leave_party(client)
    when Constants::PACKET_CHOICE
    handle_choice(client, buffer)
    when Constants::PACKET_BANK_ITEM
    handle_bank_item(client, buffer)
    when Constants::PACKET_BANK_GOLD
    handle_bank_gold(client, buffer)
    when Constants::PACKET_CLOSE_WINDOW
    handle_close_window(client)
    when Constants::PACKET_BUY_ITEM
    handle_buy_item(client, buffer)
    when Constants::PACKET_SELL_ITEM
    handle_sell_item(client, buffer)
    when Constants::PACKET_CHOICE_TELEPORT
    handle_choice_teleport(client, buffer)
    when Constants::PACKET_REQUEST
    handle_request(client, buffer)
    when Constants::PACKET_ACCEPT_REQUEST
    handle_accept_request(client)
    when Constants::PACKET_DECLINE_REQUEST
    handle_decline_request(client)
    when Constants::PACKET_TRADE_ITEM
    handle_trade_item(client, buffer)
    when Constants::PACKET_TRADE_GOLD
    handle_trade_gold(client, buffer)
    when Constants::PACKET_LOGOUT
    handle_logout(client)
    when Constants::PACKET_ADMIN_COMMAND
    handle_admin_command(client, buffer)
    end
    end

    def handle_login(client, buffer)
    # Altera a codificação padrão do nome de usuário recebido pela Socket do Ruby (ASCII-8BIT)
    #para UTF-8, evitando erro ao exibir a mensagem no console do Server.exe. Impede
    #que uma mesma conta seja utilizada mais de uma vez
    user = buffer.read_string.force_encoding('UTF-8').delete('[/\\\]')
    pass = buffer.read_string
    version = buffer.read_short
    if login_hacking_attempt?(client)
    client.close_connection
    return
    elsif version != Configs::GAME_VERSION
    send_failed_login(client, Constants::LOGIN_OLD_VERSION)
    # Fecha a conexão somente após a mensagem ser enviada
    client.close_connection_after_writing
    return
    elsif ip_blocked?(client.ip)
    send_failed_login(client, Constants::LOGIN_IP_BLOCKED)
    client.close_connection_after_writing
    return
    elsif !Database.account_exist?(user)
    send_failed_login(client, Constants::LOGIN_INVALD_USER)
    add_attempt(client)
    client.close_connection_after_writing
    return
    elsif banned?(user)
    send_failed_login(client, Constants::LOGIN_ACC_BANNED)
    client.close_connection_after_writing
    return
    elsif multi_accounts?(user)
    send_failed_login(client, Constants::LOGIN_MULTI_ACCOUNT)
    client.close_connection_after_writing
    return
    end
    account = Database.load_account(user)
    unless pass == account.pass
    send_failed_login(client, Constants::LOGIN_INVALID_PASS)
    add_attempt(client)
    client.close_connection_after_writing
    return
    end
    client.user = user
    client.pass = account.pass
    client.email = account.email
    client.group = account.group
    client.vip_time = account.vip_time
    client.actors = account.actors
    client.friends = account.friends
    client.handshake = true
    Database.load_bank(client)
    send_login(client)
    puts("#{user} logou com o IP #{client.ip}.")
    end

    def handle_new_account(client, buffer)
    # Altera a codificação padrão do nome de usuário recebido pela Socket do Ruby (ASCII-8BIT)
    #para UTF-8, evitando erro ao exibir a mensagem no console do Server.exe. Evita
    #mais de um cadastro com o mesmo usuário
    user = buffer.read_string.strip.force_encoding('UTF-8')
    pass = buffer.read_string
    email = buffer.read_string
    version = buffer.read_short
    if client.spawning?
    return
    elsif new_account_hacking_attempt?(client, user, pass, email)
    client.close_connection
    return
    elsif version != Configs::GAME_VERSION
    send_failed_login(client, Constants::LOGIN_OLD_VERSION)
    client.close_connection_after_writing
    return
    elsif ip_blocked?(client.ip)
    send_failed_login(client, Constants::LOGIN_IP_BLOCKED)
    client.close_connection_after_writing
    return
    elsif Database.account_exist?(user)
    send_new_account(client, Constants::REGISTER_ACC_EXIST)
    client.close_connection_after_writing
    return
    end
    client.antispam_time = Time.now + 0.5
    Database.create_account(user, pass, email)
    send_new_account(client, Constants::REGISTER_SUCCESSFUL)
    client.close_connection_after_writing
    puts("Conta #{user} criada.")
    end

    def handle_new_character(client, buffer)
    actor_id = buffer.read_byte
    name = adjust_name(buffer.read_string.strip)
    character_index = buffer.read_byte
    class_id = buffer.read_short
    sex = buffer.read_byte
    params = []
    8.times { params << buffer.read_byte }
    points = buffer.read_byte
    return if client.spawning?
    return unless client.logged?
    return if actor_id >= Configs::MAX_CHARS
    return if client.actors.has_key?(actor_id)
    return if name.size < Configs::MIN_CHARACTERS || name.size > Configs::MAX_CHARACTERS
    return if invalid_name?(name)
    return if illegal_name?(name) && client.standard?
    return if class_id < 1 || class_id > client.max_classes
    return if sex > Constants::SEX_FEMALE
    return if character_index >= $data_classes[class_id].graphics[sex].size
    return if params.inject(:+) + points > Configs::START_POINTS
    if Database.player_exist?(name)
    send_failed_create_character(client)
    return
    end
    client.antispam_time = Time.now + 0.5
    Database.create_player(client, actor_id, name, character_index, class_id, sex, params, points)
    Database.save_account(client)
    send_new_character(client, actor_id, client.actors[actor_id])
    end

    def handle_remove_character(client, buffer)
    actor_id = buffer.read_byte
    pass = buffer.read_string
    return unless client.actors.has_key?(actor_id)
    unless pass == client.pass
    send_failed_login(client, Constants::LOGIN_INVALID_PASS)
    return
    end
    Database.remove_player(client.actors[actor_id].name)
    if !client.actors[actor_id].guild.empty?
    if @guilds[client.actors[actor_id].guild].leader == client.actors[actor_id].name
    remove_guild(client.actors[actor_id].guild)
    else
    @guilds[client.actors[actor_id].guild].members.delete(client.actors[actor_id].name)
    save_guild(client.actors[actor_id].guild)
    end
    end
    client.actors.delete(actor_id)
    Database.save_account(client)
    send_remove_character(client, actor_id)
    end

    def handle_use_character(client, buffer)
    actor_id = buffer.read_byte
    return unless client.actors.has_key?(actor_id)
    # Define os dados
    client.load_data(actor_id)
    # Envia os dados para os jogadores que estão no mapa, exceto para o próprio
    #jogador que ainda não está conectado
    send_player_data(client, client.map_id)
    @maps[client.map_id].total_players += 1
    # Conecta ao jogo
    client.join_game(actor_id)
    #global_message("#{client.name} #{Entered}", Configs::ALERT_COLOR)
    send_use_character(client)
    send_global_switches(client)
    send_map_players(client)
    send_map_events(client)
    send_map_drops(client)
    send_motd(client)
    end

    def handle_player_movement(client, buffer)
    d = buffer.read_byte
    # Anti-speed hack
    #return if client.moving?
    return if d < Constants::DIR_DOWN_LEFT || d > Constants::DIR_UP_RIGHT
    client.stop_count = Time.now + 0.170
    #if d == Constants::DIR_DOWN_LEFT
    #client.move_diagonal(4, 2)
    #elsif d == Constants::DIR_DOWN_RIGHT
    #client.move_diagonal(6, 2)
    #elsif d == Constants::DIR_UP_LEFT
    #client.move_diagonal(4, 8)
    #elsif d == Constants::DIR_UP_RIGHT
    #client.move_diagonal(6, 8)
    #else
    client.move_straight(d)
    #end
    if client.move_succeed
    client.check_touch_event
    client.close_windows
    end
    end

    def handle_chat_message(client, buffer)
    message = buffer.read_string
    talk_type = buffer.read_byte
    name = buffer.read_string
    return if message.strip.empty?
    return if talk_type == Constants::CHAT_GLOBAL && client.global_chat_spawning? && message != '/who'
    return if client.spawning?
    return if client.muted?
    client.antispam_time = Time.now + 0.5
    if message == '/who'
    whos_online(client)
    return
    end
    message = "#{client.name}: #{chat_filter(message)}"
    case talk_type
    when Constants::CHAT_MAP
    map_message(client.map_id, message, client.id, !client.standard? ? 15 + client.group : Constants::CHAT_MAP)
    when Constants::CHAT_GLOBAL
    client.global_antispam_time = Time.now + Configs::GLOBAL_ANTISPAM_TIME
    global_message(message, !client.standard? ? 15 + client.group : Constants::CHAT_GLOBAL)
    when Constants::CHAT_PARTY
    party_message(client, message)
    when Constants::CHAT_GUILD
    guild_message(client, message)
    when Constants::CHAT_PRIVATE
    private_message(client, message, name)
    end
    end

    def handle_player_attack(client)
    return if client.attacking?
    if Configs::RANGE_WEAPONS.has_key?(client.weapon_id)
    client.attack_range
    elsif client.has_weapon?
    client.attack_normal
    end
    client.check_event_trigger_here([0])
    client.check_event_trigger_there([0])#([0, 1, 2])
    end

    def handle_use_item(client, buffer)
    item_id = buffer.read_short
    return if client.using_item?
    # Usa se o item existe, o jogador o tiver e for usável
    client.use_item($data_items[item_id])
    end

    def handle_use_skill(client, buffer)
    skill_id = buffer.read_short
    return if client.using_item?
    client.use_item($data_skills[skill_id])
    end

    def handle_change_hotbar(client, buffer)
    id = buffer.read_byte
    type = buffer.read_byte
    item_id = buffer.read_short
    return if id > Configs::MAX_HOTBAR
    client.change_hotbar(id, type, item_id)
    end

    def handle_use_hotbar(client, buffer)
    id = buffer.read_byte
    return unless client.hotbar[id]
    return if client.using_item?
    item_id = client.hotbar[id].item_id
    item = client.hotbar[id].type == Constants::HOTBAR_ITEM ? $data_items[item_id] : $data_skills[item_id]
    client.use_item(item)
    end

    def handle_target(client, buffer)
    type = buffer.read_byte
    target_id = buffer.read_short
    client.change_target(target_id, type)
    end

    def handle_add_drop(client, buffer)
    item_id = buffer.read_short
    kind = buffer.read_byte
    amount = buffer.read_short
    item = client.item_object(kind, item_id)
    # Impede que o item da troca, que não é removido do inventário, seja dropado
    return if client.in_trade?
    return if @maps[client.map_id].full_drops?
    return if amount < 1 || amount > client.item_number(item)
    return if item.soulbound?
    return if client.spawning?
    client.antispam_time = Time.now + 0.5
    client.lose_item(item, amount)
    @maps[client.map_id].add_drop(item_id, kind, amount, client.x, client.y)
    end

    def handle_remove_drop(client, buffer)
    drop_id = buffer.read_byte
    drop = @maps[client.map_id].drops[drop_id]
    return unless drop
    return unless client.pos?(drop.x, drop.y)
    #return unless client.in_range?(drop, 1)
    unless pick_up_drop?(drop, client)
    alert_message(client, Constants::ALERT_NOT_PICK_UP_DROP)
    return
    end
    item = client.item_object(drop.kind, drop.item_id)
    unless client.full_inventory?(item)
    client.gain_item(item, drop.amount, true, true)
    @maps[client.map_id].remove_drop(drop_id)
    end
    end

    def handle_player_param(client, buffer)
    param_id = buffer.read_byte
    return if client.points == 0
    client.points -= 1
    case param_id
    when Constants::PARAM_MAXHP, Constants::PARAM_MAXMP
    client.add_param(param_id, 10)
    when Constants::PARAM_ATK..Constants::PARAM_LUK
    client.add_param(param_id, 1)
    end
    end

    def handle_player_equip(client, buffer)
    slot_id = buffer.read_byte
    item_id = buffer.read_short
    return if client.spawning?
    client.antispam_time = Time.now + 0.5
    client.change_equip(slot_id, item_id)
    end

    def handle_open_friends(client)
    online_friends = client.friends.select { |name| find_player(name) }
    offline_friends = client.friends - online_friends
    client.friends = online_friends + offline_friends
    client.online_friends_size = online_friends.size
    send_open_friends(client, online_friends)
    end

    def handle_remove_friend(client, buffer)
    index = buffer.read_byte
    client.friends.delete_at(index)
    client.online_friends_size -= 1 if index <= client.online_friends_size - 1
    send_remove_friend(client, index)
    end

    def handle_new_guild(client, buffer)
    flag = []
    name = adjust_name(buffer.read_string.strip)
    64.times { flag << buffer.read_byte }
    return unless client.creating_guild?
    return if client.in_guild?
    return if name.size < Configs::MIN_CHARACTERS || name.size > Configs::MAX_CHARACTERS
    return if invalid_name?(name)
    create_guild(client, name, flag)
    end

    def handle_open_guild(client)
    return unless client.in_guild?
    open_guild(client)
    end

    def handle_guild_leader(client, buffer)
    name = buffer.read_string
    return unless client.in_guild? && client.guild_leader?
    change_guild_leader(client, name)
    end

    def handle_guild_notice(client, buffer)
    # Altera a codificação padrão da mensagem recebida pela Socket do Ruby (ASCII-8BIT) para UTF-8
    notice = buffer.read_string.force_encoding('UTF-8')
    return unless client.in_guild?
    return unless client.guild_leader?
    return if notice.strip.empty? || notice.size > 64
    return if client.spawning?
    client.antispam_time = Time.now + 0.5
    change_guild_notice(client, notice)
    end

    def handle_remove_guild_member(client, buffer)
    name = buffer.read_string
    return unless client.in_guild? && client.guild_leader?
    member = find_guild_member(@guilds[client.guild], name)
    remove_guild_member(client, member) if member && @guilds[client.guild].leader != member
    end

    def handle_leave_guild(client)
    return unless client.in_guild?
    if client.guild_leader?
    # Possibilita que a guilda seja deletada e que o texto da variável guild dos membros que
    #logaram posteriormente ao líder seja apagado, mesmo após a string guild do líder ficar vazia
    remove_guild(client.guild.clone)
    else
    client.leave_guild
    end
    end

    def handle_leave_party(client)
    # Sai do grupo se o jogador estiver em um
    client.leave_party
    end

    def handle_choice(client, buffer)
    index = buffer.read_byte
    return unless client.choosing?
    #command = client.choices[0]
    #param = command.parameters[0][index]
    #client.interpreter.setup(client, client.choices) if param
    end

    def handle_bank_item(client, buffer)
    item_id = buffer.read_short
    kind = buffer.read_byte
    amount = buffer.read_short
    item = client.item_object(kind, item_id)
    container = client.bank_item_container(kind)
    return unless client.in_bank?
    return unless container
    # Se o item que está sendo adicionado não existe ou a quantidade é maior que a do inventário
    return if amount > 0 && client.item_number(item) < amount
    return if amount < 0 && client.bank_item_number(container[item_id]) < amount.abs
    return if amount > 0 && client.full_bank?(container[item_id], kind)
    return if amount < 0 && client.full_inventory?(item)
    return if item.soulbound?
    client.gain_bank_item(item_id, kind, amount)
    client.lose_item(item, amount)
    end

    def handle_bank_gold(client, buffer)
    amount = buffer.read_int
    return unless client.in_bank?
    return if amount > 0 && client.gold < amount
    return if amount < 0 && client.bank_gold < amount.abs
    client.gain_bank_gold(amount)
    client.lose_gold(amount)
    end

    def handle_close_window(client)
    client.close_bank
    client.close_shop
    client.close_trade
    client.close_create_guild
    end

    def handle_buy_item(client, buffer)
    index = buffer.read_byte
    amount = buffer.read_short.abs
    return unless client.in_shop?
    return unless client.shop_goods[index]
    kind = client.shop_goods[index][0]
    item_id = client.shop_goods[index][1]
    item = client.item_object(kind + 1, item_id)
    price = client.shop_goods[index][2] == 0 ? item.price : client.shop_goods[index][3]
    if client.gold >= price * amount && (!client.full_inventory?(item) || amount < 0)
    client.gain_item(item, amount)
    client.lose_gold(price * amount, true)
    end
    end

    def handle_sell_item(client, buffer)
    item_id = buffer.read_short
    kind = buffer.read_byte
    amount = buffer.read_short.abs
    return unless client.in_shop?
    return if client.shop_goods[0][4]
    item = client.item_object(kind, item_id)
    if client.item_number(item) >= amount
    client.lose_item(item, amount)
    client.gain_gold(amount * item.price / 2, true)
    end
    end

    def handle_choice_teleport(client, buffer)
    index = buffer.read_byte
    return unless client.in_teleport?
    return unless Configs::TELEPORTS[client.teleport_id][index]
    return if Configs::TELEPORTS[client.teleport_id][index][3] > client.gold
    map_id, x, y, amount = Configs::TELEPORTS[client.teleport_id][index]
    client.transfer(map_id, x, y, Constants::DIR_DOWN)
    client.lose_gold(amount)
    end

    def handle_request(client, buffer)
    type = buffer.read_byte
    player_id = buffer.read_short
    return if client.spawning?
    client.antispam_time = Time.now + 0.5
    case type
    when Constants::REQUEST_TRADE
    return if requested_unavailable?(client, @clients[player_id])
    return if client.in_trade? || client.in_shop? || client.in_bank?
    if @clients[player_id].in_trade? || @clients[player_id].in_shop? || @clients[player_id].in_bank?
    alert_message(client, Constants::ALERT_BUSY)
    return
    end
    when Constants::REQUEST_FINISH_TRADE
    return unless client.in_trade?
    player_id = client.trade_player_id
    when Constants::REQUEST_PARTY
    return if requested_unavailable?(client, @clients[player_id])
    return if client.in_party? && @parties[client.party_id].size >= Configs::MAX_PARTY_MEMBERS
    if @clients[player_id].in_party?
    alert_message(client, Constants::ALERT_IN_PARTY)
    return
    end
    when Constants::REQUEST_FRIEND
    return if requested_unavailable?(client, @clients[player_id])
    return if client.friends.size >= Configs::MAX_FRIENDS
    return if client.friends.include?(@clients[player_id].name)
    when Constants::REQUEST_GUILD
    return if requested_unavailable?(client, @clients[player_id])
    return if !client.in_guild? || @clients[player_id].in_guild?
    if !client.guild_leader?
    alert_message(client, Constants::ALERT_NOT_GUILD_LEADER)
    return
    elsif @guilds[client.guild].members.size >= Configs::MAX_GUILD_MEMBERS
    alert_message(client, Constants::ALERT_FULL_GUILD)
    return
    end
    end
    @clients[player_id].request.id = client.id
    @clients[player_id].request.type = type
    send_request(@clients[player_id], type, client)
    end

    def handle_accept_request(client)
    case client.request.type
    when Constants::REQUEST_TRADE
    client.open_trade
    when Constants::REQUEST_FINISH_TRADE
    client.finish_trade
    when Constants::REQUEST_PARTY
    client.accept_party
    when Constants::REQUEST_FRIEND
    client.accept_friend
    when Constants::REQUEST_GUILD
    client.accept_guild
    end
    client.clear_request
    end

    def handle_decline_request(client)
    case client.request.type
    when Constants::REQUEST_TRADE, Constants::REQUEST_PARTY, Constants::REQUEST_FRIEND, Constants::REQUEST_GUILD
    alert_message(@clients[client.request.id], Constants::ALERT_REQUEST_DECLINED) if @clients[client.request.id]&.in_game?
    when Constants::REQUEST_FINISH_TRADE
    alert_message(@clients[client.request.id], Constants::ALERT_TRADE_DECLINED) if client.in_trade?
    end
    client.clear_request
    end

    def handle_trade_item(client, buffer)
    item_id = buffer.read_short
    kind = buffer.read_byte
    amount = buffer.read_short
    item = client.item_object(kind, item_id)
    container = client.trade_item_container(kind)
    return unless client.in_trade?
    return unless container
    # Se o item que está sendo adicionado não existe ou a quantidade é maior que a do inventário
    return if amount > 0 && client.item_number(item) < client.trade_item_number(container[item_id]) + amount
    return if amount < 0 && client.trade_item_number(container[item_id]) < amount
    return if amount > 0 && client.full_trade?(container[item_id])
    return if item.soulbound?
    # O item é removido da troca sem precisar verificar se o inventário está cheio, pois a
    #quantidade de itens do inventário não é verdadeiramente alterada na troca
    client.gain_trade_item(item_id, kind, amount)
    client.close_trade_request
    end

    def handle_trade_gold(client, buffer)
    amount = buffer.read_int
    return unless client.in_trade?
    return if amount > 0 && client.gold < client.trade_gold + amount
    return if amount < 0 && client.trade_gold < amount
    client.gain_trade_gold(amount)
    client.close_trade_request
    end

    def handle_logout(client)
    send_logout(client)
    client.leave_game
    end

    def handle_admin_command(client, buffer)
    command = buffer.read_byte
    # Altera a codificação padrão da mensagem recebida pela Socket do Ruby (ASCII-8BIT) para UTF-8
    str1 = buffer.read_string.force_encoding('UTF-8')
    str2 = buffer.read_int
    str3 = buffer.read_int
    str4 = buffer.read_short
    if client.admin?
    admin_commands(client, command, str1, str2, str3, str4)
    elsif client.monitor?
    monitor_commands(client, command, str1, str2, str3, str4)
    end
    end

    end

    Valentine escreveu:
    tknooz escreveu:Estou tendo esse problema ao tentar abrir o servidor!
    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Captur10
    Provavelmente você mexeu no def handle_login do arquivo handle_data.rb. Me passa esse script.
    tknooz
    tknooz
    Novato
    Novato


    Mensagens : 16
    Créditos : 0

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por tknooz Dom Mar 29, 2020 8:12 am

    Adanrox escreveu:Olá Valentine, apenas uma dica que passou despercebido por muito tempo e acredito que muitos irão gostar.

    Ataque básico: Atacar sem a permiçao de usar CTRL ou outra alternativa, na minha opinião a dinâmica de jogabilidade iria mudar um pouco sem o uso do botão de ataque, apenas atacar automaticamente ao selecionar o mobs que deseja, até mesmo interagir com npc usando apenas cliques com o mouse. Portanto assim trazendo uma boa expressão para uso do mouse.
    Sei que seu post não foi destinado a mim,mas a sua questão levantada, é possivel que vc mesmo possa fazer.
    No meu projeto de testes coloquei para andar no w,s,d e atacar e interagir com mouse não é nada complexo,basta alguns ajustes.
    tknooz
    tknooz
    Novato
    Novato


    Mensagens : 16
    Créditos : 0

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Erro ao criar novo equipamento e tentar equipar

    Mensagem por tknooz Dom Mar 29, 2020 11:48 am

    Venho novamente por meio deste relatar meu problema.
    No meu projeto,preciso que o heroi possa usar 15 slotes,porem o VXA-OS só disponibiliza 9 slotes.
    Os scripts responsaveis por mostrar a interface de equipamentos e items são os "[VS] Window _Equip"
    Código:
    #==============================================================================
    # ** Window_Equip
    #------------------------------------------------------------------------------
    #  Esta classe lida com a janela de equipamentos.
    #------------------------------------------------------------------------------
    #  Autor: Valentine
    #==============================================================================

    class Window_Equip < Window_Base
      
      def initialize
        # Quando a resolução é alterada, a coordenada x é
        #reajustada no adjust_windows_position da Scene_Map
        super(adjust_x, 165, 212, 170)
        #Altura = 165
        #tamanho-H = 212
        #Tamanho-V = 112
        self.visible = false
        self.closable = true
        self.title = Vocab::item
        create_desc
      end
      
      def adjust_x
        Graphics.width - 274
      end
      
      def col_max
        3
      end
      
      def slot_width
        29
      end
      
      def slot_height
        29
      end
      
      def show
        super
        $windows[:item].show
      end
      
      def hide
        super
        $windows[:item].hide
      end
      
      def x=(x)
        super
        $windows[:item].x = x
      end
      
      def y=(y)
        super
        $windows[:item].y = y + 111
      end
      
      def sufficient_level?
        result = true
        if $game_actors[1].level < $windows[:item].item.level
          $windows[:chat].write_message(Vocab::InsufficientLevel, Configs::ERROR_COLOR)
          result = false
        end
        result
      end
      
      def equip_vip?
        result = false
        if $windows[:item].item.vip? && !$network.vip?
          $windows[:chat].write_message(Vocab::EquipVIP, Configs::ERROR_COLOR)
          result = true
        end
        result
      end
      
      def equip_slots
        return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] if $game_actors[1].dual_wield?
        return [10, 2, 5, 4, 3, 11, 0, 14, 1, 14, 8, 6, 12, 13, 14]
      end
      
      def find_equip
        result = [nil, -1]
        equip_slots.each_with_index do |slot_id, i|
          x = i % col_max * slot_width + 62
          y = i / col_max * slot_height + 12
          if in_area?(x, y, slot_width, slot_height)
            result = [$game_actors[1].equips[slot_id], slot_id]
            break
          end
        end
        result
      end
      
      def refresh
        contents.clear
        bitmap = Cache.system('Equipments')
        contents.blt(50, 0, bitmap, bitmap.rect)
        equip_slots.each_with_index do |slot_id, i|
          equip = $game_actors[1].equips[slot_id]
          x = i % col_max * slot_width + 53
          y = i / col_max * slot_height + 3
          draw_icon(equip.icon_index, x, y) if equip
        end
      end
      
      def update
        super
        unequip_item
        update_drag
        update_drop
        update_desc
      end
      
      def unequip_item
        return unless Mouse.dbl_clk?(:L)
        equip = find_equip[0]
        $network.send_player_equip(0, equip.etype_id) if equip && !$game_party.full_inventory?(equip)
      end
      
      def update_drag
        return unless Mouse.press?(:L)
        return if $cursor.object
        return if $dragging_window
        equip = find_equip[0]
        $cursor.change_item(equip, Constants::MOUSE_EQUIP) if equip
      end
      
      def update_drop
        return if Mouse.press?(:L)
        return unless $cursor.object
        return unless $cursor.type == Constants::MOUSE_ITEM
        return unless $game_actors[1].equippable?($cursor.object)
        slot_id = find_equip[1]
        $network.send_player_equip($cursor.object.id, slot_id) if slot_id >= 0 && $cursor.object.etype_id == slot_id && sufficient_level? && !equip_vip?
      end
      
      def update_desc
        return if $dragging_window
        equip = find_equip[0]
        if equip && !$cursor.object
          show_desc(equip)
        else
          hide_desc
        end
      end
      
    end



     e
     "[VS] Window _Item"
    Código:
    #==============================================================================
    # ** Window_Item
    #------------------------------------------------------------------------------
    #  Esta classe lida com o inventário.
    #------------------------------------------------------------------------------
    #  Autor: Valentine
    #==============================================================================

    class Window_Item < Window_ItemList
      
      def initialize
        # Quando a resolução é alterada, a coordenada x é
        #reajustada no adjust_windows_position da Scene_Map
        super(adjust_x, 335, 212, 212)
        #Altura = 276
        #Tamanho-H = 212
        #Tamanho-V = 212
        self.visible = false
        self.windowskin = Cache.system('Window3')
        @dragable = false
        create_gold_bar
      end
      
      def adjust_x
        Graphics.width - 274
        #274
      end
      
      def gold
        $game_party.gold - $game_trade.my_gold
      end
      
      def enable?(item)
        $game_actors[1].usable?(item) || $game_actors[1].equippable?(item)
      end
      
      def usable?
        item.is_a?(RPG::Item) && $game_player.usable?(item)
      end
      
      def make_item_list
        @data = $game_party.all_items
      end
      
      def draw_item_number(rect, item)
        rect.y += 7
        draw_text(rect, $game_party.item_number(item) - $game_trade.my_item_number(item), 2)
      end
      
      def update
        super
        double_click
        drop_item
      end
      
      def double_click
        return unless Mouse.dbl_clk?(:L)
        return unless index >= 0
        if $windows[:shop].visible
          $windows[:shop].sell_item
        elsif $windows[:trade].visible
          $windows[:amount].show(Constants::AMOUNT_ADD_TRADE_ITEM, item)
        elsif $windows[:bank].visible
          $windows[:amount].show(Constants::AMOUNT_DEPOSIT_ITEM, item)
        elsif item.is_a?(RPG::EquipItem) && $windows[:equip].sufficient_level? && !$windows[:equip].equip_vip?
          $network.send_player_equip(item.id, item.etype_id)
        elsif item.is_a?(RPG::Item)
          use_item
        end
      end
      
      def use_item
        return if $game_player.item_attack_time > Time.now
        $game_player.item_attack_time = Time.now + Configs::COOLDOWN_SKILL_TIME
        $network.send_use_item(item.id) if usable?
      end
      
      def drop_item
        return unless Mouse.click?(:R)
        return unless index >= 0
        return if $windows[:trade].visible
        $windows[:amount].show(Constants::AMOUNT_DROP_ITEM, item)
      end
      
      def update_drag
        return unless Mouse.press?(:L)
        return if $cursor.object
        return if $dragging_window
        return unless index >= 0
        $cursor.change_item(item, Constants::MOUSE_ITEM)
      end
      
      def update_drop
        return if Mouse.press?(:L)
        return unless $cursor.object
        return unless in_area?
        case $cursor.type
        when Constants::MOUSE_EQUIP
          $network.send_player_equip(0, $cursor.object.etype_id) unless $game_party.full_inventory?($cursor.object)
        when Constants::MOUSE_SHOP
          $windows[:amount].show(Constants::AMOUNT_BUY_ITEM, $cursor.object, $windows[:shop].index)
        when Constants::MOUSE_TRADE
          $windows[:amount].show(Constants::AMOUNT_REMOVE_TRADE_ITEM, $cursor.object)
        when Constants::MOUSE_BANK
          $windows[:amount].show(Constants::AMOUNT_WITHDRAW_ITEM, $cursor.object)
        end
      end
      
    end



    Pelo que entendi,me corrijam se eu estiver falando besteira,basta cofigurar as coordenadas das janelas,tamanho,largura etc...
    Bem como cofigurar o Type das armaduras e acessórios nos slotes  do seu projeto.
    Sendo assim cada equipamento ao equipar ou desequipar,irá para seu respectivo slot ou para os itens de seu inventário.
    Nessa primeira imagem temos a tela de Equip cedida pelo projeto VXA-OS
    Spoiler:

    Nesta segunda imagem temos a primeira imagem modificada por mim para testes no meu projeto.
    Spoiler:

    Nesta terceira imagem podemos ver depois das configurações como fica os equipamentos.
    Em seu devidos slots.
    Spoiler:
    Como podem perceber,até então não há nehum erro.
    Eu posso equipar e desequipar os itens normalmente sem nehum bug.
    "OBS" Não posso clicar em nenhum local da janela que não seja na coordenada onde se encontra o item.
    Caso eu clique na janela o adjuste faz isso.
    Spoiler:

    Outro problema que eu encontrei foi o seeguinte.
    Mesmo eu criando no banco de dados um novo item e definindo seu type,não consigo equipar o item criado.
    Spoiler:
    Caso eu tente equipar o item criado,ocorre esses erros.
    Spoiler:
    Na outra vez que vim com este meu problema aqui no forum,meu tópico estava bem bagunçado, peço desculpas por isso.
    Mas acredito que dessa vez tenha ficado claro o que eu tentei dizer na outra vez.
    Espero que possam me ajudar com este problema.
    Desde já agradeço a atenção.
    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 ZgLkiRU
    Mensagens : 5336
    Créditos : 1163

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por Valentine Dom Mar 29, 2020 3:15 pm

    tknooz escreveu:Venho novamente por meio deste relatar meu problema.
    No meu projeto,preciso que o heroi possa usar 15 slotes,porem o VXA-OS só disponibiliza 9 slotes.
    Os scripts responsaveis por mostrar a interface de equipamentos e items são os "[VS] Window _Equip"
    Código:
    #==============================================================================
    # ** Window_Equip
    #------------------------------------------------------------------------------
    #  Esta classe lida com a janela de equipamentos.
    #------------------------------------------------------------------------------
    #  Autor: Valentine
    #==============================================================================

    class Window_Equip < Window_Base
      
      def initialize
        # Quando a resolução é alterada, a coordenada x é
        #reajustada no adjust_windows_position da Scene_Map
        super(adjust_x, 165, 212, 170)
        #Altura = 165
        #tamanho-H = 212
        #Tamanho-V = 112
        self.visible = false
        self.closable = true
        self.title = Vocab::item
        create_desc
      end
      
      def adjust_x
        Graphics.width - 274
      end
      
      def col_max
        3
      end
      
      def slot_width
        29
      end
      
      def slot_height
        29
      end
      
      def show
        super
        $windows[:item].show
      end
      
      def hide
        super
        $windows[:item].hide
      end
      
      def x=(x)
        super
        $windows[:item].x = x
      end
      
      def y=(y)
        super
        $windows[:item].y = y + 111
      end
      
      def sufficient_level?
        result = true
        if $game_actors[1].level < $windows[:item].item.level
          $windows[:chat].write_message(Vocab::InsufficientLevel, Configs::ERROR_COLOR)
          result = false
        end
        result
      end
      
      def equip_vip?
        result = false
        if $windows[:item].item.vip? && !$network.vip?
          $windows[:chat].write_message(Vocab::EquipVIP, Configs::ERROR_COLOR)
          result = true
        end
        result
      end
      
      def equip_slots
        return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] if $game_actors[1].dual_wield?
        return [10, 2, 5, 4, 3, 11, 0, 14, 1, 14, 8, 6, 12, 13, 14]
      end
      
      def find_equip
        result = [nil, -1]
        equip_slots.each_with_index do |slot_id, i|
          x = i % col_max * slot_width + 62
          y = i / col_max * slot_height + 12
          if in_area?(x, y, slot_width, slot_height)
            result = [$game_actors[1].equips[slot_id], slot_id]
            break
          end
        end
        result
      end
      
      def refresh
        contents.clear
        bitmap = Cache.system('Equipments')
        contents.blt(50, 0, bitmap, bitmap.rect)
        equip_slots.each_with_index do |slot_id, i|
          equip = $game_actors[1].equips[slot_id]
          x = i % col_max * slot_width + 53
          y = i / col_max * slot_height + 3
          draw_icon(equip.icon_index, x, y) if equip
        end
      end
      
      def update
        super
        unequip_item
        update_drag
        update_drop
        update_desc
      end
      
      def unequip_item
        return unless Mouse.dbl_clk?(:L)
        equip = find_equip[0]
        $network.send_player_equip(0, equip.etype_id) if equip && !$game_party.full_inventory?(equip)
      end
      
      def update_drag
        return unless Mouse.press?(:L)
        return if $cursor.object
        return if $dragging_window
        equip = find_equip[0]
        $cursor.change_item(equip, Constants::MOUSE_EQUIP) if equip
      end
      
      def update_drop
        return if Mouse.press?(:L)
        return unless $cursor.object
        return unless $cursor.type == Constants::MOUSE_ITEM
        return unless $game_actors[1].equippable?($cursor.object)
        slot_id = find_equip[1]
        $network.send_player_equip($cursor.object.id, slot_id) if slot_id >= 0 && $cursor.object.etype_id == slot_id && sufficient_level? && !equip_vip?
      end
      
      def update_desc
        return if $dragging_window
        equip = find_equip[0]
        if equip && !$cursor.object
          show_desc(equip)
        else
          hide_desc
        end
      end
      
    end



     e
     "[VS] Window _Item"
    Código:
    #==============================================================================
    # ** Window_Item
    #------------------------------------------------------------------------------
    #  Esta classe lida com o inventário.
    #------------------------------------------------------------------------------
    #  Autor: Valentine
    #==============================================================================

    class Window_Item < Window_ItemList
      
      def initialize
        # Quando a resolução é alterada, a coordenada x é
        #reajustada no adjust_windows_position da Scene_Map
        super(adjust_x, 335, 212, 212)
        #Altura = 276
        #Tamanho-H = 212
        #Tamanho-V = 212
        self.visible = false
        self.windowskin = Cache.system('Window3')
        @dragable = false
        create_gold_bar
      end
      
      def adjust_x
        Graphics.width - 274
        #274
      end
      
      def gold
        $game_party.gold - $game_trade.my_gold
      end
      
      def enable?(item)
        $game_actors[1].usable?(item) || $game_actors[1].equippable?(item)
      end
      
      def usable?
        item.is_a?(RPG::Item) && $game_player.usable?(item)
      end
      
      def make_item_list
        @data = $game_party.all_items
      end
      
      def draw_item_number(rect, item)
        rect.y += 7
        draw_text(rect, $game_party.item_number(item) - $game_trade.my_item_number(item), 2)
      end
      
      def update
        super
        double_click
        drop_item
      end
      
      def double_click
        return unless Mouse.dbl_clk?(:L)
        return unless index >= 0
        if $windows[:shop].visible
          $windows[:shop].sell_item
        elsif $windows[:trade].visible
          $windows[:amount].show(Constants::AMOUNT_ADD_TRADE_ITEM, item)
        elsif $windows[:bank].visible
          $windows[:amount].show(Constants::AMOUNT_DEPOSIT_ITEM, item)
        elsif item.is_a?(RPG::EquipItem) && $windows[:equip].sufficient_level? && !$windows[:equip].equip_vip?
          $network.send_player_equip(item.id, item.etype_id)
        elsif item.is_a?(RPG::Item)
          use_item
        end
      end
      
      def use_item
        return if $game_player.item_attack_time > Time.now
        $game_player.item_attack_time = Time.now + Configs::COOLDOWN_SKILL_TIME
        $network.send_use_item(item.id) if usable?
      end
      
      def drop_item
        return unless Mouse.click?(:R)
        return unless index >= 0
        return if $windows[:trade].visible
        $windows[:amount].show(Constants::AMOUNT_DROP_ITEM, item)
      end
      
      def update_drag
        return unless Mouse.press?(:L)
        return if $cursor.object
        return if $dragging_window
        return unless index >= 0
        $cursor.change_item(item, Constants::MOUSE_ITEM)
      end
      
      def update_drop
        return if Mouse.press?(:L)
        return unless $cursor.object
        return unless in_area?
        case $cursor.type
        when Constants::MOUSE_EQUIP
          $network.send_player_equip(0, $cursor.object.etype_id) unless $game_party.full_inventory?($cursor.object)
        when Constants::MOUSE_SHOP
          $windows[:amount].show(Constants::AMOUNT_BUY_ITEM, $cursor.object, $windows[:shop].index)
        when Constants::MOUSE_TRADE
          $windows[:amount].show(Constants::AMOUNT_REMOVE_TRADE_ITEM, $cursor.object)
        when Constants::MOUSE_BANK
          $windows[:amount].show(Constants::AMOUNT_WITHDRAW_ITEM, $cursor.object)
        end
      end
      
    end



    Pelo que entendi,me corrijam se eu estiver falando besteira,basta cofigurar as coordenadas das janelas,tamanho,largura etc...
    Bem como cofigurar o Type das armaduras e acessórios nos slotes  do seu projeto.
    Sendo assim cada equipamento ao equipar ou desequipar,irá para seu respectivo slot ou para os itens de seu inventário.
    Nessa primeira imagem temos a tela de Equip cedida pelo projeto VXA-OS
    Spoiler:

    Nesta segunda imagem temos a primeira imagem modificada por mim para testes no meu projeto.
    Spoiler:

    Nesta terceira imagem podemos ver depois das configurações como fica os equipamentos.
    Em seu devidos slots.
    Spoiler:
    Como podem perceber,até então não há nehum erro.
    Eu posso equipar e desequipar os itens normalmente sem nehum bug.
    "OBS" Não posso clicar em nenhum local da janela que não seja na coordenada onde se encontra o item.
    Caso eu clique na janela o adjuste faz isso.
    Spoiler:

    Outro problema que eu encontrei foi o seeguinte.
    Mesmo eu criando no banco de dados um novo item e definindo seu type,não consigo equipar o item criado.
    Spoiler:
    Caso eu tente equipar o item criado,ocorre esses erros.
    Spoiler:
    Na outra vez que vim com este meu problema aqui no forum,meu tópico estava bem bagunçado, peço desculpas por isso.
    Mas acredito que dessa vez tenha ficado claro o que eu tentei dizer na outra vez.
    Espero que possam me ajudar com este problema.
    Desde já agradeço a atenção.
    Você precisa mexer no def y do script [VS] Window_Equip para que a Window_Item fique um pouco mais embaixo, já que você está aumentando o tamanho da Window_Equip.

    Também é necessário mexer no servidor. Eu não lembro agora todos os lugares que você precisa modificar, mas pelo menos no arquivo database.rb (def self.create_player e def self.load_player) e game_client.rb vai ser necessário.
    tknooz
    tknooz
    Novato
    Novato


    Mensagens : 16
    Créditos : 0

    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por tknooz Dom Mar 29, 2020 3:38 pm

    Valentine escreveu:
    tknooz escreveu:Venho novamente por meio deste relatar meu problema.
    No meu projeto,preciso que o heroi possa usar 15 slotes,porem o VXA-OS só disponibiliza 9 slotes.
    Os scripts responsaveis por mostrar a interface de equipamentos e items são os "[VS] Window _Equip"
    Código:
    #==============================================================================
    # ** Window_Equip
    #------------------------------------------------------------------------------
    #  Esta classe lida com a janela de equipamentos.
    #------------------------------------------------------------------------------
    #  Autor: Valentine
    #==============================================================================

    class Window_Equip < Window_Base
      
      def initialize
        # Quando a resolução é alterada, a coordenada x é
        #reajustada no adjust_windows_position da Scene_Map
        super(adjust_x, 165, 212, 170)
        #Altura = 165
        #tamanho-H = 212
        #Tamanho-V = 112
        self.visible = false
        self.closable = true
        self.title = Vocab::item
        create_desc
      end
      
      def adjust_x
        Graphics.width - 274
      end
      
      def col_max
        3
      end
      
      def slot_width
        29
      end
      
      def slot_height
        29
      end
      
      def show
        super
        $windows[:item].show
      end
      
      def hide
        super
        $windows[:item].hide
      end
      
      def x=(x)
        super
        $windows[:item].x = x
      end
      
      def y=(y)
        super
        $windows[:item].y = y + 111
      end
      
      def sufficient_level?
        result = true
        if $game_actors[1].level < $windows[:item].item.level
          $windows[:chat].write_message(Vocab::InsufficientLevel, Configs::ERROR_COLOR)
          result = false
        end
        result
      end
      
      def equip_vip?
        result = false
        if $windows[:item].item.vip? && !$network.vip?
          $windows[:chat].write_message(Vocab::EquipVIP, Configs::ERROR_COLOR)
          result = true
        end
        result
      end
      
      def equip_slots
        return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] if $game_actors[1].dual_wield?
        return [10, 2, 5, 4, 3, 11, 0, 14, 1, 14, 8, 6, 12, 13, 14]
      end
      
      def find_equip
        result = [nil, -1]
        equip_slots.each_with_index do |slot_id, i|
          x = i % col_max * slot_width + 62
          y = i / col_max * slot_height + 12
          if in_area?(x, y, slot_width, slot_height)
            result = [$game_actors[1].equips[slot_id], slot_id]
            break
          end
        end
        result
      end
      
      def refresh
        contents.clear
        bitmap = Cache.system('Equipments')
        contents.blt(50, 0, bitmap, bitmap.rect)
        equip_slots.each_with_index do |slot_id, i|
          equip = $game_actors[1].equips[slot_id]
          x = i % col_max * slot_width + 53
          y = i / col_max * slot_height + 3
          draw_icon(equip.icon_index, x, y) if equip
        end
      end
      
      def update
        super
        unequip_item
        update_drag
        update_drop
        update_desc
      end
      
      def unequip_item
        return unless Mouse.dbl_clk?(:L)
        equip = find_equip[0]
        $network.send_player_equip(0, equip.etype_id) if equip && !$game_party.full_inventory?(equip)
      end
      
      def update_drag
        return unless Mouse.press?(:L)
        return if $cursor.object
        return if $dragging_window
        equip = find_equip[0]
        $cursor.change_item(equip, Constants::MOUSE_EQUIP) if equip
      end
      
      def update_drop
        return if Mouse.press?(:L)
        return unless $cursor.object
        return unless $cursor.type == Constants::MOUSE_ITEM
        return unless $game_actors[1].equippable?($cursor.object)
        slot_id = find_equip[1]
        $network.send_player_equip($cursor.object.id, slot_id) if slot_id >= 0 && $cursor.object.etype_id == slot_id && sufficient_level? && !equip_vip?
      end
      
      def update_desc
        return if $dragging_window
        equip = find_equip[0]
        if equip && !$cursor.object
          show_desc(equip)
        else
          hide_desc
        end
      end
      
    end



     e
     "[VS] Window _Item"
    Código:
    #==============================================================================
    # ** Window_Item
    #------------------------------------------------------------------------------
    #  Esta classe lida com o inventário.
    #------------------------------------------------------------------------------
    #  Autor: Valentine
    #==============================================================================

    class Window_Item < Window_ItemList
      
      def initialize
        # Quando a resolução é alterada, a coordenada x é
        #reajustada no adjust_windows_position da Scene_Map
        super(adjust_x, 335, 212, 212)
        #Altura = 276
        #Tamanho-H = 212
        #Tamanho-V = 212
        self.visible = false
        self.windowskin = Cache.system('Window3')
        @dragable = false
        create_gold_bar
      end
      
      def adjust_x
        Graphics.width - 274
        #274
      end
      
      def gold
        $game_party.gold - $game_trade.my_gold
      end
      
      def enable?(item)
        $game_actors[1].usable?(item) || $game_actors[1].equippable?(item)
      end
      
      def usable?
        item.is_a?(RPG::Item) && $game_player.usable?(item)
      end
      
      def make_item_list
        @data = $game_party.all_items
      end
      
      def draw_item_number(rect, item)
        rect.y += 7
        draw_text(rect, $game_party.item_number(item) - $game_trade.my_item_number(item), 2)
      end
      
      def update
        super
        double_click
        drop_item
      end
      
      def double_click
        return unless Mouse.dbl_clk?(:L)
        return unless index >= 0
        if $windows[:shop].visible
          $windows[:shop].sell_item
        elsif $windows[:trade].visible
          $windows[:amount].show(Constants::AMOUNT_ADD_TRADE_ITEM, item)
        elsif $windows[:bank].visible
          $windows[:amount].show(Constants::AMOUNT_DEPOSIT_ITEM, item)
        elsif item.is_a?(RPG::EquipItem) && $windows[:equip].sufficient_level? && !$windows[:equip].equip_vip?
          $network.send_player_equip(item.id, item.etype_id)
        elsif item.is_a?(RPG::Item)
          use_item
        end
      end
      
      def use_item
        return if $game_player.item_attack_time > Time.now
        $game_player.item_attack_time = Time.now + Configs::COOLDOWN_SKILL_TIME
        $network.send_use_item(item.id) if usable?
      end
      
      def drop_item
        return unless Mouse.click?(:R)
        return unless index >= 0
        return if $windows[:trade].visible
        $windows[:amount].show(Constants::AMOUNT_DROP_ITEM, item)
      end
      
      def update_drag
        return unless Mouse.press?(:L)
        return if $cursor.object
        return if $dragging_window
        return unless index >= 0
        $cursor.change_item(item, Constants::MOUSE_ITEM)
      end
      
      def update_drop
        return if Mouse.press?(:L)
        return unless $cursor.object
        return unless in_area?
        case $cursor.type
        when Constants::MOUSE_EQUIP
          $network.send_player_equip(0, $cursor.object.etype_id) unless $game_party.full_inventory?($cursor.object)
        when Constants::MOUSE_SHOP
          $windows[:amount].show(Constants::AMOUNT_BUY_ITEM, $cursor.object, $windows[:shop].index)
        when Constants::MOUSE_TRADE
          $windows[:amount].show(Constants::AMOUNT_REMOVE_TRADE_ITEM, $cursor.object)
        when Constants::MOUSE_BANK
          $windows[:amount].show(Constants::AMOUNT_WITHDRAW_ITEM, $cursor.object)
        end
      end
      
    end



    Pelo que entendi,me corrijam se eu estiver falando besteira,basta cofigurar as coordenadas das janelas,tamanho,largura etc...
    Bem como cofigurar o Type das armaduras e acessórios nos slotes  do seu projeto.
    Sendo assim cada equipamento ao equipar ou desequipar,irá para seu respectivo slot ou para os itens de seu inventário.
    Nessa primeira imagem temos a tela de Equip cedida pelo projeto VXA-OS
    Spoiler:

    Nesta segunda imagem temos a primeira imagem modificada por mim para testes no meu projeto.
    Spoiler:

    Nesta terceira imagem podemos ver depois das configurações como fica os equipamentos.
    Em seu devidos slots.
    Spoiler:
    Como podem perceber,até então não há nehum erro.
    Eu posso equipar e desequipar os itens normalmente sem nehum bug.
    "OBS" Não posso clicar em nenhum local da janela que não seja na coordenada onde se encontra o item.
    Caso eu clique na janela o adjuste faz isso.
    Spoiler:

    Outro problema que eu encontrei foi o seeguinte.
    Mesmo eu criando no banco de dados um novo item e definindo seu type,não consigo equipar o item criado.
    Spoiler:
    Caso eu tente equipar o item criado,ocorre esses erros.
    Spoiler:
    Na outra vez que vim com este meu problema aqui no forum,meu tópico estava bem bagunçado, peço desculpas por isso.
    Mas acredito que dessa vez tenha ficado claro o que eu tentei dizer na outra vez.
    Espero que possam me ajudar com este problema.
    Desde já agradeço a atenção.
    Você precisa mexer no def y do script [VS] Window_Equip para que a Window_Item fique um pouco mais embaixo, já que você está aumentando o tamanho da Window_Equip.

    Também é necessário mexer no servidor. Eu não lembro agora todos os lugares que você precisa modificar, mas pelo menos no arquivo database.rb (def self.create_player e def self.load_player) e game_client.rb vai ser necessário.
    Obrigado pela resposta.
    Irei dar uma olhada nos scripts citados.
    Qualquer problema ou erro que ocorrer voltarei aqui.

    Conteúdo patrocinado


    textBox - VXA-OS - Crie seu MMO com RPG Maker - Página 53 Empty Re: VXA-OS - Crie seu MMO com RPG Maker

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Sex Abr 19, 2024 3:37 am