VXA-OS - Crie seu MMO com RPG Maker - Página 53 Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

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

VXA-OS - Crie seu MMO com RPG Maker

+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

Página 53 de 75 Anterior  1 ... 28 ... 52, 53, 54 ... 64 ... 75  Seguinte

Ir para baixo

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: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.
Valentine
Valentine
Administrador
Administrador

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

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

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!
VXA-OS - Crie seu MMO com RPG Maker - Página 53 Captur10
tknooz
tknooz
Novato
Novato

Mensagens : 16
Créditos : 0

Ir para o topo Ir para baixo

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: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)
Paulo Soreto
Paulo Soreto
Lenda
Lenda

Mensagens : 1980
Créditos : 367

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

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

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!
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.
Valentine
Valentine
Administrador
Administrador

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

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

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: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!
Kies
Kies
Diva
Diva

Mensagens : 1154
Créditos : 124

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

Ir para o topo Ir para baixo

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!
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

Ir para o topo Ir para baixo

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

Ir para o topo Ir para baixo

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.
tknooz
tknooz
Novato
Novato

Mensagens : 16
Créditos : 0

Ir para o topo Ir para baixo

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.
Valentine
Valentine
Administrador
Administrador

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

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

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.
tknooz
tknooz
Novato
Novato

Mensagens : 16
Créditos : 0

Ir para o topo Ir para baixo

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


Conteúdo patrocinado


Ir para o topo Ir para baixo

Página 53 de 75 Anterior  1 ... 28 ... 52, 53, 54 ... 64 ... 75  Seguinte

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos