LM² - Party 1.0:
Fiz este sistema a pedidos na fábrica, e para retirar mais um trabalho das costas do Val, ele possui menu de interação para membros da Party, e EXP Share.
Já aviso que o sistema não está em sua versão final, ainda falta alguns detalhes que eu gostaria de adicionar, como mudar a cor do nome para os membros da mesma party, chat exclusivo para party, e para quem usa meu minimapa, alterar a cor dos membros da party, não fiz isto ainda, mas farei quando estiver com mais disposição
Screen:
Fiz este sistema a pedidos na fábrica, e para retirar mais um trabalho das costas do Val, ele possui menu de interação para membros da Party, e EXP Share.
Já aviso que o sistema não está em sua versão final, ainda falta alguns detalhes que eu gostaria de adicionar, como mudar a cor do nome para os membros da mesma party, chat exclusivo para party, e para quem usa meu minimapa, alterar a cor dos membros da party, não fiz isto ainda, mas farei quando estiver com mais disposição
Screen:
- Screen:
Clique aqui para acessar o álbum de imagens
Tutorial Básico:
Coloque as imagens do link abaixo na pasta Pictures
Agora iremos para o Servidor, está é a parte mais complexa do tutorial.
Pronto, agora seu script está instalado, para convidar o jogador para um grupo basta usar o menu de interação.
O próprio sistema de party possui um menu de interação, no qual o jogador pode mandar pm e trade para os membros da party, e o líder da party, o primeiro a convidar alguem, possui a interação de retirar jogador da party, se o lider se retirar da party ela desbanda, e o jogador possui o poder de se retirar da party.
Configurações:
Dentro do arquivo Settings do server, você pode configurar o máximo de membros, e a porcentagem de compartilhamento de EXP, no caso por padrão está configurado para cada membro receber 50% da EXP real de um mob.
O número máximo de membros deve ser o mesmo no Settings do Servidor e no módulo do Script do Cliente.
Links:
Imagens
Creditos:
A mim por criar, ao Soreto pela ajuda com o estudo do Servidor e Lua, ao Valentine por auxilio.
Qualquer erro deverá ser reportado. Qualquer duvida leiam minha assinatura.
Coloque as imagens do link abaixo na pasta Pictures
- Cliente:
- Tutorial Cliente:
Primeiramente insiram um novo script com o código rmxp do link abaixo.
Código RMXP
Agora vem a parte complexa.
Vão no script [NM] Network, abaixo de:
- Código:
PACKET_ADMIN_COMMAND = '<39>'
Coloque:
- Código:
PACKET_PARTY_MEMBER = '<52>'
PACKET_PARTY_INFO = '<53>'
Vão no script [NM] Wnidow_Choice, adicionem no def yes acima do end acima de on_close:
- Código:
when 2 # LM² - Party
$network.party_member(1,"#{@index}")
No mesmo script acima de on_close do def no:
- Código:
$network.party_member(2, "#{@index}") if @type == 2
Vá ao script [NM] Window_Interaction, troque o 71 de super(0, 0, 91, 71) por 92 e abaixo de @trade_button adicione:
- Código:
@party_button = Button.new(self, 16, 63, LMM_Party::PARTY, 59) { call_party}
No mesmo script antes do ultimo end adicione:
- Código:
def call_party
if $party_manager.members.size == (LMM_Party::MAX_MEMBERS - 1)
$windows[:chat].write(LMM_Party::FULL, 5)
on_close
return
elsif $party_manager.members.has_key?(@index.to_s)
$windows[:chat].write("#{$party_manager.members[@index.to_s].name} "+LMM_Party::ALREADY, 5)
on_close
return
end
$network.party_member(0,"#{@index};#{$game_party.actors[0].name}")
on_close
end
Procure por:
- Código:
$game_trade = Game_Trade.new
Abaixo Adicione
- Código:
$party_manager = Party_Manager.new
Vá no script [NM] Scene_Map, no def update_windows antes do end, adicione:
- Código:
$party_manager.update
Procure por:
- Código:
when PACKET_ADMIN_COMMAND; handle_admin_command(data)
Abaixo adicione
- Código:
when PACKET_PARTY_MEMBER; handle_party_member(data)
when PACKET_PARTY_INFO; handle_party_info(data)
Agora iremos para o Servidor, está é a parte mais complexa do tutorial.
- Servidor:
- Tutorial Servidor :
Primeiramente copie o código lua do link Código Lua, com o código copiado, abra o arquivo handledata.lua da pasta Scripts, e adicione esse código no final, com esse arquivo aberto, abaixo de:
- Código:
elseif header == PACKETVARIABLE then self:handlevariable(index, player, data)
Adicione:
- Código:
elseif header == PACKETPARTYMEMBER then self:handlepartymember(index, player, data)
Abra o arquivo constants.lua e e adicione no final:
- Código:
PACKETPARTYMEMBER = '<52>'
PACKETPARTYINFO = '<53>'
Vá no arquivo event.lua e procure por:
- Código:
Server.players[self.target]:gainexp(Server.enemies[self.enemyid].exp)
Retire este código e no lugar dele adicione:
- Código:
if #Server.players[self.target].pmembers ~= 0 then
local exp = Server.enemies[self.enemyid].exp * PXPSHARE / 100
exp = math.floor(exp)
if exp < 1 then exp = 1 end
for i = 1, #Server.players[self.target].pmembers do
local k = Server.players[self.target].pmembers[i]
Server.players[k]:gainexp(exp)
end
Server.players[self.target]:gainexp(exp)
else
Server.players[self.target]:gainexp(Server.enemies[self.enemyid].exp)
end
Abra o arquivo tcpserver, e antes de:
- Código:
self.players[index] = nil
Adicione antes:
- Código:
if #self.players[index].pmembers ~= 0 then
if self.players[index].pleaderid == index then
for i = 1, #self.players[index].pmembers do
local k = self.players[index].pmembers[i]
local tempdata = StringBuilder()
tempdata:write(4)
tempdata:write(self.players[index].name)
self.players[k].pmembers = {}
self.players[k].pleaderid = 0
self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))
end
self.players[index].pmembers = {}
self.players[index].pleaderid = 0
else
for i = 1, #self.players[index].pmembers do
local k = self.players[index].pmembers[i]
table.remove(self.players[k].pmembers,removevalue(self.players[k].pmembers,index))
if #self.players[k].pmembers == 0 then
self.players[k].pleaderid = 0
self.players[k].pmembers = {}
end
local tempdata = StringBuilder()
tempdata:write(3)
tempdata:write(2)
tempdata:write(index)
tempdata:write(self.players[index].name)
self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))
end
end
end
Abra o arquivo player.lua, procure por:
- Código:
self.mytradearmors = {}
Abaixo coloque:
- Código:
self.pleaderid = 0
self.pmembers = {}
No mesmo arquivo procure por:
- Código:
Server:sendtoplayer(self.index, PACKETACTOREXP, exp)
Acima adicione:
- Código:
if #self.pmembers ~= 0 then
for i = 1, #self.pmembers do
local k = self.pmembers[i]
local tempdata = StringBuilder()
tempdata:write(0)
tempdata:write(self.index)
tempdata:write(self.level)
tempdata:write(self.maxhp)
tempdata:write(self.maxsp)
Server:sendtoplayer(k, PACKETPARTYINFO, tempdata:tostring(';'))
end
end
No mesmo arquivo procure por:
- Código:
Server:sendactorvitals(self)
Abaixo adicione
- Código:
if #self.pmembers ~= 0 then
for i = 1, #self.pmembers do
local k = self.pmembers[i]
local tempdata = StringBuilder()
tempdata:write(1)
tempdata:write(self.index)
tempdata:write(self.hp)
tempdata:write(self.sp)
Server:sendtoplayer(k, PACKETPARTYINFO, tempdata:tostring(';'))
end
end
Abra o arquivo Settings.txt, no final dele adicione
- Código:
-- LM² - Party
MAXPARTYMEMBERS = 5
PXPSHARE = 50
Pronto, agora seu script está instalado, para convidar o jogador para um grupo basta usar o menu de interação.
O próprio sistema de party possui um menu de interação, no qual o jogador pode mandar pm e trade para os membros da party, e o líder da party, o primeiro a convidar alguem, possui a interação de retirar jogador da party, se o lider se retirar da party ela desbanda, e o jogador possui o poder de se retirar da party.
Configurações:
Dentro do arquivo Settings do server, você pode configurar o máximo de membros, e a porcentagem de compartilhamento de EXP, no caso por padrão está configurado para cada membro receber 50% da EXP real de um mob.
O número máximo de membros deve ser o mesmo no Settings do Servidor e no módulo do Script do Cliente.
Links:
Imagens
Creditos:
A mim por criar, ao Soreto pela ajuda com o estudo do Servidor e Lua, ao Valentine por auxilio.
Qualquer erro deverá ser reportado. Qualquer duvida leiam minha assinatura.
Última edição por LeonMM em Dom Set 03, 2017 11:57 pm, editado 3 vez(es)