Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o tema • Voltar para a ficha do tema
[Prof~] Sistema de Reputação
+2
Takabe
Profane ~
6 participantes
Página 1 de 1
[Prof~] Sistema de Reputação
Oin turu baum?
Venho trazer um sistemazinho simples.
O que se tem de entender dele é que ele não necessariamente é um Sistema de Reputação, mas sim uma Base Geral de se ter Valores Salvos e de se Enviar tais valores pela comunicação Server <> Cliente.
Esse Pedido foi feito pelo Yashi (Allan) via PM, e aqui estou disponibilizando.
Vai servir como uma Leve Aula para os que ainda não tem conhecimento de como enviar valores, fazer atualização dos mesmos e salva-los.
Qual a Lógica por trás?
Bem, teremos de abrir uma memoria no NPC, onde ela armazenará o valor de "Reputação".
Quando este NPC for derrotado o Player ganhará esse valor de Reputação.
Logo o Player também precisará de uma memoria para salvar este valor de reputação que vamos usar.
Ficha Tecnina
Dificuldade: Fácil
Compatibilidade: Qualquer EO/CS
Necessário:
- Visual Basic 6
- Após o Termino apagar NPC's e Player's nas pastas do Servidor. (Evitar Probleminhas ;3)
Engine Já Modificada: Download (Menos de 2mb)
(Baixe caso queria apenas Ripar o Sistema de Engine - Ou o ver funcionando.)
(Caso queira Ripar, procurar por tudo que tenha "Reputation" ou "Reputação".)
Ao Sistema
[ Parte 1 - Criando as Memórias ]
Vamos estar Indo aos Types para poder adicionar a Variável Type que irá armazenar o Valor que desejamos criar.
No Cliente e no Servidor, procure por:
- Código:
Private Type PlayerRec
Dentro dele, antes do End Type, adicione:
- Código:
Reputation As Long
Colocamos um valor Long na Memória já que em geral esses jogos vão trabalhar na casa de milhões mais..
Com isso a memoria no Player já vai estar lá.
Vamos tratar dos Npc's.
Procure por:
- Código:
Private Type NpcRec
Dentro dele e antes do End Type, adicione:
- Código:
Reputation As Long
O Npc irá armazenar o Valor de reputação a qual ele dará ao morrer.
[ Parte 2 - Preparando o NPC ]
No Cliente,
Acesse a FrmEditor_NPC e prepare os componentes a qual irão nos ajudar na edição do Npc.
Poderá ficar mais o menos assim:
Componentes Principais ai são:
- Label (Sem nome necessário, apenas para ficar indicado que é ali que fica a reputação.)
- textBox (Name = txtReputation)
Apague todo o conteúdo da propriedade "Text" do textBox (txtReputation), deixando ele Limpo.
Dê 2 click's sobre o txtReputation e vamos aos seus códigos:
- Código:
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If Not Len(txtReputation.text) > 0 Then Exit Sub
If IsNumeric(txtReputation.text) Then Npc(EditorIndex).Reputation = Val(txtReputation.text)
' Error handler
Exit Sub
errorhandler:
HandleError "txtReputation_Change", "frmEditor_NPC", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
Adicionado isso a parte interna do txtReputation, vamos agora garantir que ao Npc ser carregado no Editor, ele carregue também o valor de reputação atual do Npc.
Procure por:
- Código:
Public Sub NpcEditorInit()
Esta sub processa cada carregamento de NPC no Editor. É muito importante que ao fazer componentes novos que usem memória, seja adicionado o carregamento do mesmo no Editor usando essa Sub.
Dentro dela e abaixo de :
- Código:
With frmEditor_NPC
Adicione:
- Código:
.txtReputation.text = Npc(EditorIndex).Reputation
Dessa forma, toda vez que acessar o Editor de Npc's, será posto o valor de Reputação do NPC no TextBox de Reputação.
[ Parte 3 - Packets e Trocas ]
Nessa parte faremos o Pacote que irá transitar a reputação de forma principal. Ele será pequeno já que toda vez que um NPC com Reputação morrer ele será enviado ao Jogador atualizando assim o valor de Reputação do Jogador.
Ainda no cliente procure por:
- Código:
SMSG_COUNT
Acima dele adicione:
- Código:
SPlayerReputation
Estamos aumentando o Limite de Pacotes conhecidos pelo Cliente.
Faremos o mesmo no Servidor.
No servidor procure por:
- Código:
SMSG_COUNT
Acima dele adicione:
- Código:
SPlayerReputation
#É Extremamente Importante que essa parte do modEnumerations esteja de acordo e igual Cliente e Servidor. O Mesmo Numero de Pacotes e de preferencia o Mesmo Nome! Caso contrário você vai começar a ter dores de cabeça >
Tendo isso, quando chamarmos pela Call SendReputation(?), ela pegará o valor de memoria "Reputation" do jogador Alvo e tentará enviar para o Cliente.
Dentro dele, depois de todos os :
Você adiciona:
Não é estritamente necessário que você adicione isso em um "Padrão". Como assim? A ordem ali dentro não é importante, é mais organização. Já que se adicionou um novo pacote, ele "teria" de ficar no final.
Pronto, dessa forma o Servidor já sabe enviar o valor ao Cliente, o Cliente já recebe o Pacote e também já faz a leitura guardando o valor recebido dentro da Memória que criamos para ele.
No Servidor, vamos procurar pela SUB que processa a morte do NPC.
Procure por:
Dentro dela, procure por isso aqui...
Esta parte acima determina e faz o começo da limpeza do NPC, mas queremos que antes dele ser "limpo" entregue a nós a reputação num é mermu?
Então, acima disso adicione:
Em outras palavras o código analisa se o Npc tem reputação para ser entregue, caso tenha, ele adiciona a reputação a memoria do Player, e logo em seguida pede para enviar o Pacote de atualização de Reputação ao Cliente do Player.
De forma simples apenas para mostrar a reputação na tela, eu criei uma Label no FrmMain.
Name da Label: (lblReputation)
Agora procure pelo nosso pacote que recebe a Reputação do Servidor...
Ainda no Cliente procure por:
Abaixo dele adicione:
Dessa forma, toda vez que o Pacote chegar, ele irá atualizar a Propriedade Caption da Label que criamos para mostrar a Reputação.
Esse detalhe se trata de uma atualização vital que se segue pelo cliente<>Server.
É o Nosso PlayerData() que envia muitas vezes boa parte de todas as memorias do Player.
Vamos por nossa memoria de Reputação para ser atualizada também via ele, porque caso contrario.. Ao Você logar no jogo, o Player só receberia a Reputação de 2 Jeitos:
[ 1 ] Caso esteja no PlayerData()
[ 2 ] Caso envie a Reputação via JoinGame()
Como eu estou fazendo esse sistema visando que vocês aprendam e assim modifiquem essa "logica" e memorias para serem usadas de outras maneiras e com outros nomes /o/ para outras diversas finalidades então vou ensinar a mover isso pelo PlayerData(), o que para a Situação Atual seria melhor ser enviada pelo JoinGame (Assim que o Player Logar).
Mas não chega a ser um problema.
Vamos lá.
No Servidor, procure por:
Fique bem atento a isso, entenda que os Buffer's empacotam os valores em ORDEM , no caso Listagem! E o Cliente precisa desempacotar na mesma ORDEM de listagem. Caso contrário você ter dor de cabecinha bb ><
Uma maneira fácil de por é, procure um Buffer de preferencia sem estar dentro de um For/Next
Ex:
Esse Buffer empacota o valor de PK do Player.
Abaixo adicione:
Dentro dela, LEMBRANDO QUE A ESTRUTURA TEM DE SER DESEMPACOTADA EM ORDEM QUE FOI EMPACOTADA!
Abaixo dele, adicionaremos:
Pronto! Agora, o Cliente desempacota com tranquilidade e na ordem correta.
Abaixo disso adicione:
Agora a Label que criamos lá no FrmMain será atualizada assim que o Player Receber a PlayerData também /o/
Vá ao final do modServerTCP (Modulo que é responsável por armazenar os Envios de Pacotes para o Cliente.)
No Final dele adicione:
- Código:
Sub SendReputationTo(ByVal index As Long)
Dim Buffer As clsBuffer, i As Long, partyNum As Long
Set Buffer = New clsBuffer
Buffer.WriteLong SPlayerReputation
Buffer.WriteLong Player(index).Reputation
SendDataTo index, Buffer.ToArray()
Set Buffer = Nothing
End Sub
Tendo isso, quando chamarmos pela Call SendReputation(?), ela pegará o valor de memoria "Reputation" do jogador Alvo e tentará enviar para o Cliente.
Agora vamos fazer o cliente receber.
Voltando ao Cliente, vá ao modHandleData (Modulo responsável por receber os Pacotes que vem do Servidor para o Cliente.)
Procure por:
- Código:
Public Sub InitMessages()
Dentro dele, depois de todos os :
- Código:
HandleDataSub(
Você adiciona:
- Código:
HandleDataSub(SPlayerReputation) = GetAddress(AddressOf HandlePlayerReputation)
Não é estritamente necessário que você adicione isso em um "Padrão". Como assim? A ordem ali dentro não é importante, é mais organização. Já que se adicionou um novo pacote, ele "teria" de ficar no final.
Agora que o Cliente já tem conhecimento do que fazer com o Pacote que criamos, vamos fazer ele ler o pacote.
O Pacote ao chegar será enviado para a "HandlePlayerReputation", sendo assim no final da ModHandleData, coloque:
- Código:
Private Sub HandlePlayerReputation(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim Buffer As clsBuffer, i As Long
Dim Reputation As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
Set Buffer = New clsBuffer
Buffer.WriteBytes Data()
Reputation = Buffer.ReadLong
If Index = MyIndex Then
Player(MyIndex).Reputation = Reputation
End If
' Error handler
Exit Sub
errorhandler:
HandleError "HandlePlayerReputation", "modHandleData", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Pronto, dessa forma o Servidor já sabe enviar o valor ao Cliente, o Cliente já recebe o Pacote e também já faz a leitura guardando o valor recebido dentro da Memória que criamos para ele.
[ Parte 4 - Fazendo o NPC dar Reputação ao ser Abatido ]
No Servidor, vamos procurar pela SUB que processa a morte do NPC.
Procure por:
- Código:
Public Sub PlayerAttackNpc(ByVal attacker As Long
Dentro dela, procure por isso aqui...
- Código:
' Now set HP to 0 so we know to actually kill them in the server loop (this prevents subscript out of range)
MapNpc(mapNum).Npc(mapNpcNum).Num = 0
MapNpc(mapNum).Npc(mapNpcNum).SpawnWait = GetTickCount
MapNpc(mapNum).Npc(mapNpcNum).Vital(Vitals.HP) = 0
Esta parte acima determina e faz o começo da limpeza do NPC, mas queremos que antes dele ser "limpo" entregue a nós a reputação num é mermu?
Então, acima disso adicione:
- Código:
'Get Reputation
If Npc(npcNum).Reputation > 0 Then
Player(attacker).Reputation = Player(attacker).Reputation + Npc(npcNum).Reputation 'Add Reputação
SendReputationTo attacker 'Envia ao Player que Matou
End If
Em outras palavras o código analisa se o Npc tem reputação para ser entregue, caso tenha, ele adiciona a reputação a memoria do Player, e logo em seguida pede para enviar o Pacote de atualização de Reputação ao Cliente do Player.
[ Parte 5 *-* - Mostrando a Reputação no Cliente ]
De forma simples apenas para mostrar a reputação na tela, eu criei uma Label no FrmMain.
Name da Label: (lblReputation)
Agora procure pelo nosso pacote que recebe a Reputação do Servidor...
Ainda no Cliente procure por:
- Código:
Private Sub HandlePlayerReputation(B
Dentro dessa Sub procure por:
- Código:
Player(MyIndex).Reputation = Reputation
Abaixo dele adicione:
- Código:
frmMain.lblReputation.Caption = "Reputação: " & Reputation
Dessa forma, toda vez que o Pacote chegar, ele irá atualizar a Propriedade Caption da Label que criamos para mostrar a Reputação.
Até aqui o sistema está basicamente terminado, faltando apenas mais um detalhe!
[ Parte Ultima - Detalhe! ]
Esse detalhe se trata de uma atualização vital que se segue pelo cliente<>Server.
É o Nosso PlayerData() que envia muitas vezes boa parte de todas as memorias do Player.
Vamos por nossa memoria de Reputação para ser atualizada também via ele, porque caso contrario.. Ao Você logar no jogo, o Player só receberia a Reputação de 2 Jeitos:
[ 1 ] Caso esteja no PlayerData()
[ 2 ] Caso envie a Reputação via JoinGame()
Como eu estou fazendo esse sistema visando que vocês aprendam e assim modifiquem essa "logica" e memorias para serem usadas de outras maneiras e com outros nomes /o/ para outras diversas finalidades então vou ensinar a mover isso pelo PlayerData(), o que para a Situação Atual seria melhor ser enviada pelo JoinGame (Assim que o Player Logar).
Mas não chega a ser um problema.
Vamos lá.
No Servidor, procure por:
- Código:
Function PlayerData(ByVal index As Long) As Byte()
Fique bem atento a isso, entenda que os Buffer's empacotam os valores em ORDEM , no caso Listagem! E o Cliente precisa desempacotar na mesma ORDEM de listagem. Caso contrário você ter dor de cabecinha bb ><
Uma maneira fácil de por é, procure um Buffer de preferencia sem estar dentro de um For/Next
Ex:
- Código:
Buffer.WriteLong GetPlayerPK(index)
Esse Buffer empacota o valor de PK do Player.
Abaixo adicione:
- Código:
Buffer.WriteLong Player(index).Reputation
Agora o PlayerData() vai estar enviando o Reputation do Player.
Vamos ao Cliente,
Iremos agora procurar a Leitura do Pacote do PlayerData() que se chama HandlePlayerData()
Procure por:
- Código:
Private Sub HandlePlayerData(ByVal Index As Long,
Dentro dela, LEMBRANDO QUE A ESTRUTURA TEM DE SER DESEMPACOTADA EM ORDEM QUE FOI EMPACOTADA!
Como botamos o Buffer do Reputation para ser Empacotado embaixo do Buffer de PK, então procuremos pelo de PK Primeiro:
- Código:
Call SetPlayerPK(i, Buffer.ReadLong)
Abaixo dele, adicionaremos:
- Código:
Player(i).Reputation = Buffer.ReadLong
Pronto! Agora, o Cliente desempacota com tranquilidade e na ordem correta.
Caso você ponha em ordem errada, o Valor vai ser Atribuído a outra MEMORIA, e assim Você pode imaginar sua Reputação sendo colocada no HP, ou em diversos outros locais dependendo da ordem de desempacotamento /o/ ~ É uma reação em cadeia que iria lhe dar dores de cabeça não só a você... pq provavelmente iria vir aqui trazer o problema < 3
Para Finalizar...
Ainda na HandlePlayerData, procure por isso aqui:
- Código:
' Check if the player is the client player
If i = MyIndex Then
Abaixo disso adicione:
- Código:
'Refresh Reputation Label
frmMain.lblReputation.Caption = "Reputation: " & Player(MyIndex).Reputation
Agora a Label que criamos lá no FrmMain será atualizada assim que o Player Receber a PlayerData também /o/
FIM * o *
Espero que tenham gostado e que com isso possam pensar em diversas outras memórias,valores e possíveis customizações para a falência de vocês!
Att amores < 3
_________________
"Mistress of shattered hopes and forever broken dreams"
Profane ~- Colaborador
- Mensagens : 818
Créditos : 130
Re: [Prof~] Sistema de Reputação
U.u Maravilhoso minha fadinha rsrs
Takabe- Novato
- Mensagens : 22
Créditos : 6
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: [Prof~] Sistema de Reputação
como faria pra usar essa reputação pra compra algo ou ter ela como restrição tipo pra itens ou personagens?
_________________
vem sempre aqui?
Re: [Prof~] Sistema de Reputação
Mizuki escreveu:como faria pra usar essa reputação pra compra algo ou ter ela como restrição tipo pra itens ou personagens?
Sobre comprar algo tu poderia fazer com que:
A cada x de reputação ele ganhasse uma moeda especifica no jogo.
Sobre restrição... bom neh não creio que seja algo muito útil.
Profane seria interessante dar uma luz sobre rank de reputação ai sim seria maneiro.
Kies- Diva
- Mensagens : 1155
Créditos : 124
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: [Prof~] Sistema de Reputação
como poderia usar esse sistema para colocar titulos ao lado do nome utilizando esse sistema? tipo:
enquanto o player tiver entre 0 e 100, ele possuir o titulo (Noob) ao lado do nome, ai de 101 a 1000 possuir o titulo (killer) etc.
seria possivel?
desculpar reviver o tópico, mas esse sistema é top
enquanto o player tiver entre 0 e 100, ele possuir o titulo (Noob) ao lado do nome, ai de 101 a 1000 possuir o titulo (killer) etc.
seria possivel?
desculpar reviver o tópico, mas esse sistema é top
Hayashi- Iniciante
- Mensagens : 33
Créditos : 1
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Nando Moura gosta desta mensagem
Re: [Prof~] Sistema de Reputação
(Estou sem VB aqui e se eu passar aqui depois posso adornar caso não consigam fazer.)
No...
Você teria de procurar pela Sub responsável pela renderização do Nome do Player.
Em geral: BltPlayerName ou DrawPlayerName
O sistema trabalha no cliente envolta da variavel Player().reputation
Ela é a responsável por armazenar a quantidade/valor da Reputação.
Na Sub, teria de ser adicionado um Select Case; Exemplo.
Se não me engano deixei isso antes da Ultima linha e poderia começar as edições. Em casa eu poderia editar como disse para ficar melhor, estou no trabson.
Bjus.
No...
- Código:
modText
Você teria de procurar pela Sub responsável pela renderização do Nome do Player.
Em geral: BltPlayerName ou DrawPlayerName
O sistema trabalha no cliente envolta da variavel Player().reputation
Ela é a responsável por armazenar a quantidade/valor da Reputação.
Na Sub, teria de ser adicionado um Select Case; Exemplo.
- Código:
Select Case Player(Index).Reputation
Case 100 to 200: Text = "Consagrado" & Text
End Select
Se não me engano deixei isso antes da Ultima linha e poderia começar as edições. Em casa eu poderia editar como disse para ficar melhor, estou no trabson.
Bjus.
_________________
"Mistress of shattered hopes and forever broken dreams"
Profane ~- Colaborador
- Mensagens : 818
Créditos : 130
Re: [Prof~] Sistema de Reputação
não consegui, tá dando erro no text
Hayashi- Iniciante
- Mensagens : 33
Créditos : 1
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: [Prof~] Sistema de Reputação
Hayashi escreveu:não consegui, tá dando erro no text
Meu patrãooo me ajude...
Vou dar o Exemplo na EO 2.0, baixei aqui para mandar.
Essa aqui é a SUB na EO 2.0 - Em Estado Original.
- Código:
Public Sub DrawPlayerName(ByVal Index As Long)
Dim TextX As Long
Dim TextY As Long
Dim color As Long
Dim Name As String
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
' Check access level
If GetPlayerPK(Index) = NO Then
Select Case GetPlayerAccess(Index)
Case 0
color = RGB(255, 96, 0)
Case 1
color = QBColor(DarkGrey)
Case 2
color = QBColor(Cyan)
Case 3
color = QBColor(BrightGreen)
Case 4
color = QBColor(Yellow)
End Select
Else
color = QBColor(BrightRed)
End If
Name = Trim$(Player(Index).Name)
' calc pos
TextX = ConvertMapX(GetPlayerX(Index) * PIC_X) + Player(Index).XOffset + (PIC_X \ 2) - getWidth(TexthDC, (Trim$(Name)))
If GetPlayerSprite(Index) < 1 Or GetPlayerSprite(Index) > NumCharacters Then
TextY = ConvertMapY(GetPlayerY(Index) * PIC_Y) + Player(Index).YOffset - 16
Else
' Determine location for text
TextY = ConvertMapY(GetPlayerY(Index) * PIC_Y) + Player(Index).YOffset - (DDSD_Character(GetPlayerSprite(Index)).lHeight / 4) + 16
End If
' Draw name
Call DrawText(TexthDC, TextX, TextY, Name, color)
' Error handler
Exit Sub
errorhandler:
HandleError "DrawPlayerName", "modText", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Agora vou editar com o Exemplo.
- Código:
Public Sub DrawPlayerName(ByVal Index As Long)
Dim TextX As Long
Dim TextY As Long
Dim color As Long
Dim Name As String
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
' Check access level
If GetPlayerPK(Index) = NO Then
Select Case GetPlayerAccess(Index)
Case 0
color = RGB(255, 96, 0)
Case 1
color = QBColor(DarkGrey)
Case 2
color = QBColor(Cyan)
Case 3
color = QBColor(BrightGreen)
Case 4
color = QBColor(Yellow)
End Select
Else
color = QBColor(BrightRed)
End If
Name = Trim$(Player(Index).Name)
' Reputação Aplicando Valor Antes ou Depois do nome do Player.
Select Case Player(Index).Reputation
Case 0 To 100 ' ANtes do Nome do Player
Name = "Safadinho " & Name
Case 101 To 200 ' Antes do Nome do Player
Name = "Delicioso " & Name
Case 201 To 300 ' Depois do Nome do Player
Name = Name & " do Bju na Boka"
End Select
' calc pos
TextX = ConvertMapX(GetPlayerX(Index) * PIC_X) + Player(Index).XOffset + (PIC_X \ 2) - getWidth(TexthDC, (Trim$(Name)))
If GetPlayerSprite(Index) < 1 Or GetPlayerSprite(Index) > NumCharacters Then
TextY = ConvertMapY(GetPlayerY(Index) * PIC_Y) + Player(Index).YOffset - 16
Else
' Determine location for text
TextY = ConvertMapY(GetPlayerY(Index) * PIC_Y) + Player(Index).YOffset - (DDSD_Character(GetPlayerSprite(Index)).lHeight / 4) + 16
End If
' Draw name
Call DrawText(TexthDC, TextX, TextY, Name, color)
' Error handler
Exit Sub
errorhandler:
HandleError "DrawPlayerName", "modText", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Lembrando que repassei o olho rapidinho pelo sistema e o foco dele é ser leve para "mySelf" apenas, no caso apenas eu recebo meu valor e é isso, logo não teriamos atualizado o valor de Reputation de outros jogadores, que agora é algo que precisamos.
Ja... que o mesmo influenciaria no Nome do Jogador que é algo que em padrão é visto a todos.
Então você precisaria ir no Cliente e Servidor adicionar umas linhas...
Tem de ser adicionada uma Linha pra Reputation ser atualizada com algo, eu no momento escolhi a PlayerData() já que seria mais rápido pra solucionar a questão.
No Cliente...
Procura por
- Código:
Private Sub HandlePlayerData(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Na linha abaixo de...
- Código:
Call SetPlayerPK(i, Buffer.ReadLong)
Adiciona...
- Código:
Player(i).Reputation = Buffer.ReadLong
Agora para o Server ~
Procura por...
- Código:
Function PlayerData(ByVal index As Long) As Byte()
Abaixo de...
- Código:
Buffer.WriteLong GetPlayerPK(index)
Você adiciona...
- Código:
Buffer.WriteLong Player(Index).Reputation
E estaria pronto, se fizer tudo direitinho.
_________________
"Mistress of shattered hopes and forever broken dreams"
Profane ~- Colaborador
- Mensagens : 818
Créditos : 130
Hayashi gosta desta mensagem
GalaxyHells- Ocasional
- Mensagens : 196
Créditos : 22
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Tópicos semelhantes
» [Prof ~] Sistema de Transformação
» [Prof ~] Sistema de Herói (Guardião)
» [Prof ~] NPC Evolve
» [Prof ~] Add-On - Transformação por Foto
» [Prof~] Spawn de Item direto na Bolsa
» [Prof ~] Sistema de Herói (Guardião)
» [Prof ~] NPC Evolve
» [Prof ~] Add-On - Transformação por Foto
» [Prof~] Spawn de Item direto na Bolsa
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos