Suporte ao desenvolvimento de jogos


3 resultados encontrados para O

LeonM²

LM² - Input Action - Qui Out 22, 2020 9:32 pm

LM² - Input Action
Uma edição simples que permite separar interação com eventos do botão de ataque.


Como instalar:
Cliente:
Para instalar é bem simples, insira no módulo [VS] Configs no cliente o seguinte código.
Código:
 # Tecla de Ação
  ACTION_KEY = :LETTER_E #LM² - Input Action
  ACTION_TIME = 0.5


De preferencia abaixo de: 

 # Tecla de ataque
 ATTACK_KEY = :CTRL

Vá para o script [VS] Enums, abaixo de:
NET_SWITCHES

Insira:
Código:
PLAYER_ACTION

Vá para o script [VS] Send_Data, abaixo de:
 def send_player_attack
   return unless @socket
   buffer = Buffer_Writer.new
   buffer.write_byte(Enums::Packet::PLAYER_ATTACK)
   @socket.send(buffer.to_s)
 end

Insira:
Código:
 #LM² - Input Action
  def send_player_action
    return unless @socket
    buffer = Buffer_Writer.new
    buffer.write_byte(Enums::Packet::PLAYER_ACTION)
    @socket.send(buffer.to_s)
  end

Vá para o script [VS] Game_Player, abaixo de:

select_nearest_enemy if Input.trigger?(Configs::SELECT_ENEMY_KEY)

Coloque:
Código:
$network.send_player_action if Input.press?(Configs::ACTION_KEY) && !$game_map.interpreter.running? && !$typing #LM² - Input Action

Vá para o script [VS] Window_Message, troque:
@show_fast = true if Input.trigger?(Configs::ATTACK_KEY)

Por:
Código:
@show_fast = true if Input.trigger?(Configs::ACTION_KEY) #LM² - Input Action

Vá até o script [VS] Sprite_Character, procure por def create_tip, troque a linha:

tip = "#{Vocab::Press} #{Configs::ATTACK_KEY.to_s.gsub('LETTER_', '').capitalize}"


Por:

Código:
tip = "#{Vocab::Press} #{Configs::ACTION_KEY.to_s.gsub('LETTER_', '').capitalize}" #LM² - Input Action


Servidor:
Para instalar é bem simples, vá ao script handle_data.rb. Abaixo de:
   when Enums::Packet::PLAYER_ATTACK
     handle_player_attack(client)

Insira:
Código:
   when Enums::Packet::PLAYER_ACTION #LM² - Input Action
      handle_player_action(client) #LM² - Input Action

Ainda nesse mesmo script, troque:
 def handle_player_attack(client)
   return if client.attacking?
   if client.using_range_weapon?
     client.attack_range
   elsif client.using_normal_weapon?
     client.attack_normal
   end
   # Interage com evento embaixo e em frente independentemente de
   #o jogador ter atacado algum inimigo
   if client.movable?
     client.check_event_trigger_here([0])
     client.check_event_trigger_there([0, 1, 2])
   end
 end

Por:
Código:
 def handle_player_attack(client)
    return if client.attacking?
    if client.using_range_weapon?
      client.attack_range
    elsif client.using_normal_weapon?
      client.attack_normal
    end
  end
  #LM² - Input Action
  def handle_player_action(client)
    return if client.interacting?
    # Interage com evento embaixo e em frente independentemente de
    #o jogador ter atacado algum inimigo
    if client.movable?
      client.check_event_trigger_here([0])
      client.check_event_trigger_there([0, 1, 2])
    end
    client.interaction_time = Time.now + Configs::ACTION_TIME
  end

Vá ao script game_client.rb, abaixo de: 
attr_accessor :guild

Coloque:
Código:
  attr_accessor :interaction_time #LM² - Input Action

Ainda nesse mesmo script, abaixo de:
def attacking?
   @weapon_attack_time > Time.now
end

Coloque 
Código:
  #LM² - Input Action
  def interacting?
    @interaction_time > Time.now
  end

Vá em game_account.rb, abaixo de:
@weapon_attack_time = Time.now

Coloque:
Código:
@interaction_time = Time.now #LM² - Input Action

Log:
22/10/2020 - Tópico Criado
19/11/2020 - Adicionado Cooldown para evitar spam.
05/04/2021 - Atualizado uma falha que poderia levar a bugs
Agradecimentos:

Valentine pelo VXA-OS.
LeonM² por fazer essa modificação.

Qualquer erro ou duvida, comentar no tópico ou deixar no server do VXA-OS.

Zerinho

Fantasy Online (Alpha) - Dom Out 07, 2018 11:36 am

Angel criei na sessão certa dessa vez Angel

Acompanhem as atualizações na página! Obrigado.

Download: https://drive.google.com/file/d/1pqphPxYQg08P8WpyPtt7yRh7JWjPKlHr/view?fbclid=IwAR3m1pHq3ivAcWTwVLZUreDXJmJAHtrtyjBVC_OHx3Uhx8tuqo6rjXinIKI

Página do Facebook: https://www.facebook.com/fantasyonlinemmo/
Discord: https://discord.gg/NAEXaFf

###O JOGO PRECISA DO NETFRAMEWORK 4 PRA RODAR NO SEU PC: https://www.microsoft.com/pt-br/download/details.aspx?id=17851###


Sobre o Jogo:


PvE em certas áreas, PvP em outras.

Estou colocando um Alpha online a partir do meu próprio PC até arrumar dinheiro pro Servidor. Essas contas
apenas serão resetadas se houver algum bug muito gigante no sistema. Se não, seguirão para o Beta. 


Status do Servidor (Alpha): Online

Engine usada: Intersect 

Classes Disponíveis:

• Guerreiro
• Mago
• Arqueiro
• Lanceiro
• Clérigo
• Necromante
• Viking
• Ladino

Tópicos com a tag o em Aldeia RPG UxbWC9A
Tópicos com a tag o em Aldeia RPG 4I1XzCa
Tópicos com a tag o em Aldeia RPG QF1L0Pv
Tópicos com a tag o em Aldeia RPG WNfdnYE

[Ajuda] - sistema de trasnformação por spell - Dom Abr 23, 2017 10:41 pm

Mr.Fenrir escreveu:esse aqui \/
Transformação por spell


Bem fácil entender o que ocorre.

#Entendendo o Sistema:
O Sistema aplica a adição direta no RawStat (Atributo Cru) isso para não ter muito trabalho de edição, o que é digamos meio errado, mas não vamos por esse ponto. 

A Cada segundo ele verifica se o jogador ainda tem a transformação, caso o tempo tenha acabado ele chama a Sub para Remover o Valor dado no RawStat do Player.

#O que acontece?
Acontece que o jogo salva as contas a cada X segundos, ele acaba salvando o Player 1/2/3.... como tendo o Atributo RawStat Acima do Normal.. no caso RawStat Verdadeiro + Transformação.

Quando você taca o foda-se e fecha o Servidor no X [ Fechar ], ele interrompe todos os Sockets e fim. 

Logo não ocorre a verificação de que ocorre normalmente de segundo a Segundo, que verifica o tempo da transformação do Player, e normalmente retiraria o Valor da Transformação do rawStat, fazendo o player ficar normal.

O Player Ficou salvo como tendo um RawStat + Transformação, e não ouve a Interrupção Natural do sistema que o deixaria com os Stats Normal e Naturais.

#Como resolvo isso minha donzela perfeita?
Ah, infinitas formas amoreco;

A forma mais fácil e bruta seria essa aqui:

No Servidor / ModTypes -> Procure por : "PlayerRec"

Dentro dele, no final, adicione:
Código:
Dim inTrans as Byte            'Se conter valor então o player está transformado
Dim inTransNum as Long          'Armazena o valor da Transformação


Sim, vamos trabalhar com byte ou long, mesmo sendo uma Boolean, Byte e Long são mais estáveis.

Colocando isso ali, vamos procurar por:

Código:
Sub JoinGame(ByVal Index As Long)


Essa Sub recebe os valores do player e faz a load dele, e coloca ele parcialmente em jogo.
É ela que a gente quer, e ela que vamos trabalhar.

Em qualquer lugar dela, que não seja no começo, mas de preferencia do Meio para o Fim,
ou depois disso aqui:
Código:
    ' Send the flag so they know they can start doing stuff
    SendInGame Index


Adicione isso aqui:
Código:
'Verificar se o Player ainda está transformado
If Player(Index).inTrans > 0 then      'Verifica se realmente tem valor de trans
  if Player(Index).inTransNum > 0 then 'Verifica se a Trans é um valor de Spell Real
    'Se chegou aqui é porque ta transformado e temos armazenada qual é a transformacao.
      Call AcabarTrans_InJoinGame(Index)
  end if
end if


Em seu ModPlayer, no final dele, cole essa sub que está abaixo.
Código:
Public Sub AcabarTrans_inJoinGame(ByVal index As Long)
Dim TransNum as Long
   If index < 1 Or index > MAX_PLAYERS Then Exit Sub
   
   'Já verificamos mas vamos verificar novamente porque somos assim, blindão pra não deixar nada quebrar o joguinho <3
   If Player(Index).inTrans > 0 then      'Verifica se realmente tem valor de trans
      if Player(Index).inTransNum > 0 then 'Verifica se a Trans é um valor de Spell Real
         
         TransNum = Player(index).inTransNum   'facilitando e ocupando menos espaço
   
         Call SetPlayerStat(index, Stats.Strength, GetPlayerRawStat(index, Stats.Strength) - Spell(TransNum).Força)
         Call SetPlayerStat(index, Stats.Endurance, GetPlayerRawStat(index, Stats.Endurance) - Spell(TransNum).Defesa)
         Call SetPlayerStat(index, Stats.Agility, GetPlayerRawStat(index, Stats.Agility) - Spell(TransNum).Agilidade)
         Call SetPlayerStat(index, Stats.Willpower, GetPlayerRawStat(index, Stats.Willpower) - Spell(TransNum).Willpower)
         Call SetPlayerStat(index, Stats.Intelligence, GetPlayerRawStat(index, Stats.Intelligence) - Spell(TransNum).Inteligencia)
         SendAnimation GetPlayerMap(index), Spell(index).Anima, 0, 0, TARGET_TYPE_PLAYER, index
         Call PlayerMsg(index, "Ao voltar a este mundo, você sente que seu poder retorna ao normal...", DarkGrey)
         TempPlayer(index).Trans = 0
         Player(Index).IntransNum = 0       'Limpa os valores
         Player(Index).Intrans = 0      
         SendPlayerData index
         SavePlayer index
         SendStats index
      End if
   End if
   
   
End Sub


Agora, vamos ao seu Sub CastSpell, nele você deve ter adicionado os valores da transformação; Na sub CastSpell procure por : 
Código:
'Transformaçao
      With Spell(SpellNum)
        If .Type = SPELL_TYPE_TRANS Then
            Call SetPlayerSprite(index, Spell(index).Trans)


Isso ai, nessa área onde criou isso ai ;c você abaixo dessa call adicione:

Código:

'Modificação de Proteção
Player(Index).Intrans = 1   'torna real a transformação para proteção ao logar
Player(Index).IntransNum = SpellNum  'armazena qual foi a transformação que gerou atributos


Dessa forma tem defesa agora.

# O que foi feito? 
O Sistema estava criado com o intuito de você sempre fechar o servidor depois que todos os players possíveis estiverem deslogados e que não ocorra nenhuma falha possivel que faça o servidor cair, ou você fechar.

Isso é devido a ingenuidade do criador. 
Você sem um conversor de contas terá de apagar todas as contas para que essa modificação funcione perfeitamente, isso levando em consideração que suas contas sejam salvas de da forma de Compress File, onde fica .dat ou .bin o arquivo, vulgo Lowload

Eu notei uma falha maior no sistema ;c em 1 regiãozinha, apenas de ler ele, mas se você diz que ele funciona e transforma perfeito, verifica se quando o tempo da transformação acabar, ele retira os Stats com Perfeição, na minha leitura de run mental, eu diria que não ;c

A Minha Deusa, linda, benevolente e perfeita, funcionou sim, retira os stats com perfeição. Certo agora faça o teste criando uma Spell lá pelo ID 30 ~ 40 ~, ou qualque rnumero que não seja os primeiros. 

Ai você ve se vai funcionar ou não, qualquer coisa me informe. Que analisamos < 3

Bjus de Luz Escura.

Com amor, sua mais linda fadinha.


Ir para o topo

Data/hora atual: Sex Abr 19, 2024 1:31 pm