Como Funciona : Ao criar um novo char, você escolherá de qual vila quer ser. O nome da Vila aparecerá do lado do seu Nome no jogo e cada Vila terá um Lugar para Nascer Independente da classe Escolhida. ;)
[size=14pt]Client~Side[/size]
Crie uma pasta dentro da pasta GFX com o nome de Vilas. Nesta pasta, coloque as vilas que você quer, mas use sempre números (de 1 à quantidade que você vai usar e em .jpg). Usarei 10 no tutorial.
Na frmNewChar, crie uma PictureBox e mude seu nome para picVila. Agora, crie 2 CommandButton, um com o nome de cmdPVila e o outro com o nome de cmdNVila. Nos códigos da frmNewChar procure por:
Abaixo coloque:
Agora dê duplo clique no cmdPVila e coloque:
No cmdNVila coloque:
Agora, continuando na frmNewChar, crie uma textBox e mude o nome para txtVila e coloque Visible = False. Crie um Timer (o nome já ficará como Timer3) e mude o interval para 1. Dê duplo clique no Timer3 e adicione:
Lembrando que você muda o nome das Vilas exatamente ali em cima. E o V é o numero da Imagem dentro da Pasta Vilas. ;)
No evento Load da frmNewChar, coloque:
Procure por:
Mude para:
Na Sub HandleData, embaixo de:
Adicione:
Procure por:
Mude para:
Procure por:
Mude para:
Procure por:
Abaixo coloque:
Procure por:
Abaixo adicione:
Procure por:
Embaixo coloque:
Procure por:
Mude para:
No ModGameLogic Procure Por :
Mude a Sub Toda Para :
[size=14pt]Server~Side[/size]
Procure por:
Mude para:
Procure por:
Abaixo adicione:
Procure por:
Abaixo adicione:
Procure por:
Abaixo adicione:
Procure por:
Embaixo adiicone:
Procure por:
Abaixo adicione:
Procure por:
Abaixo adicione:
Procure por:
Adicione abaixo:
Procure por:
Abaixo adicione:
Procure por:
Mude para:
Procure por:
Mude para:
Procure por:
Abaixo adicione:
Procure por:
Você achará VÁRIAS, e em ambas, adicione abaixo:
No final da clscommands Adicione :
Agora Abra seu Principal.txt e procure Por :
Substitua Ela por :
Agora Para Finalizar, Vai na Pasta do Servidor e Procure um Arquivo .ini Com o Nome MOTD, Copie e Cole ele na Mesma Pasta e o Renomeie para : Vilas
Dê 2 cliques no Arquivo Vilas, Vai abrir em um Bloco de Notas.
Coloque isso :
Altere o Mapa e a Localização de acordo com onde você quiser que o membro da Vila nasça. ;)
Lembrando que caso você altere o Nome Das Vilas, você também terá que mudar neste Bloco de Notas [size=14pt]Exatamente[/size] como você colocou la no Cliente.
Ps : Este tutorial não foi testado, Qualquer Bug só reportar.
Créditos : Lenon - Tutorial
Guardian - Adaptações para torna-lo completo
[size=14pt]Client~Side[/size]
Crie uma pasta dentro da pasta GFX com o nome de Vilas. Nesta pasta, coloque as vilas que você quer, mas use sempre números (de 1 à quantidade que você vai usar e em .jpg). Usarei 10 no tutorial.
Na frmNewChar, crie uma PictureBox e mude seu nome para picVila. Agora, crie 2 CommandButton, um com o nome de cmdPVila e o outro com o nome de cmdNVila. Nos códigos da frmNewChar procure por:
Código:
Option Explicit
Public animi As Long
Abaixo coloque:
Código:
Public V As Long
Agora dê duplo clique no cmdPVila e coloque:
Código:
If V = 1 Then
V = 10
Else
V = V - 1
End If
picVila.Picture = LoadPicture(App.Path & "\GFX\Vilas\" & V & ".jpg")
No cmdNVila coloque:
Código:
If V = 10 Then
V = 1
Else
V = V + 1
End If
picVila.Picture = LoadPicture(App.Path & "\GFX\Vilas\" & V & ".jpg")
Agora, continuando na frmNewChar, crie uma textBox e mude o nome para txtVila e coloque Visible = False. Crie um Timer (o nome já ficará como Timer3) e mude o interval para 1. Dê duplo clique no Timer3 e adicione:
Código:
If V = 1 Then
txtVila.Text = "Folha"
ElseIf V = 2 Then
txtVila.Text = "Areia"
ElseIf V = 3 Then
txtVila.Text = "Névoa"
ElseIf V = 4 Then
txtVila.Text = "Nuvem"
ElseIf V = 5 Then
txtVila.Text = "Pedra"
ElseIf V = 6 Then
txtVila.Text = "Som"
ElseIf V = 7 Then
txtVila.Text = "Chuva"
ElseIf V = 8 Then
txtVila.Text = "Cachoeira"
ElseIf V = 9 Then
txtVila.Text = "Grama"
ElseIf V = 10 Then
txtVila.Text = "Akatsuki"
End If
Lembrando que você muda o nome das Vilas exatamente ali em cima. E o V é o numero da Imagem dentro da Pasta Vilas. ;)
No evento Load da frmNewChar, coloque:
Código:
V = 1
picVila.Picture = LoadPicture(App.Path & "\GUI\Vilas\" & V & ".jpg")
Procure por:
Código:
Case MENU_STATE_ADDCHAR
frmNewChar.Hide
If ConnectToServer = True Then
Call SetStatus("Conectado, enviando pedido de criação de personagem...")
If frmNewChar.optMale.Value = True Then
Call SendAddChar(frmNewChar.txtName, 0, frmNewChar.cmbClass.ListIndex + 1, frmChars.lstChars.ListIndex + 1)
Else
Call SendAddChar(frmNewChar.txtName, 1, frmNewChar.cmbClass.ListIndex + 1, frmChars.lstChars.ListIndex + 1)
End If
End If
Mude para:
Código:
Case MENU_STATE_ADDCHAR
frmNewChar.Hide
If ConnectToServer = True Then
Call SetStatus("Conectado, enviando pedido de criação de personagem...")
If frmNewChar.optMale.Value = True Then
Call SendAddChar(frmNewChar.txtName, 0, frmNewChar.cmbClass.ListIndex + 1, frmChars.lstChars.ListIndex + 1, frmNewChar.txtVila)
Else
Call SendAddChar(frmNewChar.txtName, 1, frmNewChar.cmbClass.ListIndex + 1, frmChars.lstChars.ListIndex + 1, frmNewChar.txtVila)
End If
End If
Na Sub HandleData, embaixo de:
Código:
Dim z As Long
Adicione:
Código:
Dim Vila As String
Procure por:
Código:
' ::::::::::::::::::::::::
' :: Player data packet ::
' ::::::::::::::::::::::::
If Parse(0) = "playerdata" Then
I = Val(Parse(1))
Call SetPlayerName(I, Parse(2))
Call SetPlayerSprite(I, Val(Parse(3)))
Call SetPlayerMap(I, Val(Parse(4)))
Call SetPlayerX(I, Val(Parse(5)))
Call SetPlayerY(I, Val(Parse(6)))
Call SetPlayerDir(I, Val(Parse(7)))
Call SetPlayerAccess(I, Val(Parse())
Call SetPlayerPK(I, Val(Parse(9)))
Call SetPlayerGuild(I, Parse(10))
Call SetPlayerGuildAccess(I, Val(Parse(11)))
Call SetPlayerClass(I, Val(Parse(13)))
' Make sure they aren't walking
Player(I).Moving = 0
Player(I).XOffset = 0
Player(I).YOffset = 0
' Check if the player is the client player, and if so reset Directions
If I = MyIndex Then
DirUp = False
DirDown = False
DirLeft = False
DirRight = False
End If
Exit Sub
End If
Mude para:
Código:
' ::::::::::::::::::::::::
' :: Player data packet ::
' ::::::::::::::::::::::::
If Parse(0) = "playerdata" Then
I = Val(Parse(1))
Call SetPlayerName(I, Parse(2))
Call SetPlayerSprite(I, Val(Parse(3)))
Call SetPlayerMap(I, Val(Parse(4)))
Call SetPlayerX(I, Val(Parse(5)))
Call SetPlayerY(I, Val(Parse(6)))
Call SetPlayerDir(I, Val(Parse(7)))
Call SetPlayerAccess(I, Val(Parse())
Call SetPlayerPK(I, Val(Parse(9)))
Call SetPlayerGuild(I, Parse(10))
Call SetPlayerGuildAccess(I, Val(Parse(11)))
Call SetPlayerVila(I, Parse(12))
Call SetPlayerClass(I, Val(Parse(13)))
' Make sure they aren't walking
Player(I).Moving = 0
Player(I).XOffset = 0
Player(I).YOffset = 0
' Check if the player is the client player, and if so reset Directions
If I = MyIndex Then
DirUp = False
DirDown = False
DirLeft = False
DirRight = False
End If
Exit Sub
End If
Procure por:
Código:
Sub SendAddChar(ByVal Name As String, ByVal Sex As Long, ByVal ClassNum As Long, ByVal Slot As Long)
Dim Packet As String
Packet = "addachara" & SEP_CHAR & Trim(Name) & SEP_CHAR & Sex & SEP_CHAR & ClassNum & SEP_CHAR & Slot & END_CHAR
Call SendData(Packet)
End Sub
Mude para:
Código:
Sub SendAddChar(ByVal Name As String, ByVal Sex As Long, ByVal ClassNum As Long, ByVal slot As Long, ByVal Vila As String)
Dim Packet As String
Packet = "addachara" & SEP_CHAR & Trim(Name) & SEP_CHAR & Sex & SEP_CHAR & ClassNum & SEP_CHAR & slot & SEP_CHAR & Vila & END_CHAR
Call SendData(Packet)
End Sub
Procure por:
Código:
Type PlayerRec
' General
Name As String * NAME_LENGTH
Guild As String
Guildaccess As Byte
Abaixo coloque:
Código:
Vila As String
Procure por:
Código:
Sub ClearPlayer(ByVal Index As Long)
Dim I As Long
Dim n As Long
Player(Index).Name = vbNullString
Player(Index).Guild = vbNullString
Player(Index).Guildaccess = 0
Abaixo adicione:
Código:
Player(Index).Vila = vbNullString
Procure por:
Código:
Sub SetPlayerName(ByVal Index As Long, ByVal Name As String)
Player(Index).Name = Name
End Sub
Embaixo coloque:
Código:
Function GetPlayerVila(ByVal Index As Long) As String
GetPlayerVila = Trim(Player(Index).Vila)
End Function
Sub SetPlayerVila(ByVal Index As Long, ByVal Vila As String)
Player(Index).Vila = Vila
End Sub
Procure por:
Código:
' :::::::::::::::::::::::::::
' :: All characters packet ::
' :::::::::::::::::::::::::::
If Parse(0) = "allchars" Then
n = 1
frmSendGetData.Hide
frmChars.Show , frmMainMenu
frmChars.lstChars.Clear
For I = 1 To MAX_CHARS
Name = Parse(n)
Msg = Parse(n + 1)
Level = Val(Parse(n + 2))
If Trim(Name) = vbNullString Then
frmChars.lstChars.AddItem "Lugar Livre"
Else
frmChars.lstChars.AddItem Name & ", level " & Level & " " & Msg
End If
n = n + 3
Next I
frmChars.lstChars.ListIndex = 0
Exit Sub
End If
Mude para:
Código:
' :::::::::::::::::::::::::::
' :: All characters packet ::
' :::::::::::::::::::::::::::
If Parse(0) = "allchars" Then
n = 1
frmSendGetData.Hide
frmChars.Show , frmMainMenu
frmChars.lstChars.Clear
For I = 1 To MAX_CHARS
Name = Parse(n)
Msg = Parse(n + 1)
Level = Val(Parse(n + 2))
Vila = Parse(n + 4)
If Trim(Name) = vbNullString Then
frmChars.lstChars.AddItem "Lugar Livre"
Else
frmChars.lstChars.AddItem Name & ", level " & Level & " " & Msg & ", " & Vila
End If
n = n + 5
Next I
frmChars.lstChars.ListIndex = 0
Exit Sub
End If
No ModGameLogic Procure Por :
Código:
Sub BltPlayerName(ByVal Index As Long)
Dim TextX As Long
Dim TextY As Long
Dim Color As Long
' Check access level
If GetPlayerPK(Index) = NO Then
Select Case GetPlayerAccess(Index)
Case 0
Color = QBColor(Brown)
Case 1
Color = QBColor(DarkGrey)
Case 2
Color = QBColor(Cyan)
Case 3
Color = QBColor(Blue)
Case 4
Color = QBColor(Pink)
End Select
Else
Color = QBColor(BrightRed)
End If
' Draw name
TextX = GetPlayerX(Index) * PIC_X + sx + Player(Index).XOffset + Int(PIC_X / 2) - ((Len(GetPlayerName(Index)) / 2) * 8)
TextY = GetPlayerY(Index) * PIC_Y + sx + Player(Index).YOffset - Int(PIC_Y / 2) - (SIZE_Y - PIC_Y)
Call DrawText(TexthDC, TextX - (NewPlayerX * PIC_X) - NewXOffset, TextY - (NewPlayerY * PIC_Y) - NewYOffset, GetPlayerName(Index), Color)
End Sub
Mude a Sub Toda Para :
Código:
Sub BltPlayerName(ByVal Index As Long)
Dim TextX As Long
Dim TextY As Long
Dim Color As Long
' Check access level
If GetPlayerPK(Index) = NO Then
Select Case GetPlayerAccess(Index)
Case 0
Color = QBColor(Brown)
Case 1
Color = QBColor(DarkGrey)
Case 2
Color = QBColor(Cyan)
Case 3
Color = QBColor(Blue)
Case 4
Color = QBColor(Pink)
End Select
Else
Color = QBColor(BrightRed)
End If
' Draw name
TextX = GetPlayerX(Index) * PIC_X + sx + Player(Index).XOffset + Int(PIC_X / 2) - ((Len(GetPlayerName(Index)) / 2) * 8)
TextY = GetPlayerY(Index) * PIC_Y + sx + Player(Index).YOffset - Int(PIC_Y / 2) - (SIZE_Y - PIC_Y)
Call DrawText(TexthDC, TextX - (NewPlayerX * PIC_X) - NewXOffset, TextY - (NewPlayerY * PIC_Y) - NewYOffset, GetPlayerName(Index) & " - Vila : " & GetPlayerVila(Index), Color)
End Sub
[size=14pt]Server~Side[/size]
Procure por:
Código:
Sub AddChar(ByVal Index As Long, _
ByVal Name As String, _
ByVal Sex As Byte, _
ByVal ClassNum As Byte, _
ByVal CharNum As Long)
Dim f As Long
If Trim$(Player(Index).Char(CharNum).Name) = vbNullString Then
Player(Index).CharNum = CharNum
Player(Index).Char(CharNum).Name = Name
Player(Index).Char(CharNum).Sex = Sex
Player(Index).Char(CharNum).Class = ClassNum
If Player(Index).Char(CharNum).Sex = SEX_MALE Then
Player(Index).Char(CharNum).Sprite = Class(ClassNum).MaleSprite
Else
Player(Index).Char(CharNum).Sprite = Class(ClassNum).FemaleSprite
End If
Player(Index).Char(CharNum).Level = 1
Player(Index).Char(CharNum).STR = Class(ClassNum).STR
Player(Index).Char(CharNum).DEF = Class(ClassNum).DEF
Player(Index).Char(CharNum).Speed = Class(ClassNum).Speed
Player(Index).Char(CharNum).Magi = Class(ClassNum).Magi
If Class(ClassNum).Map <= 0 Then Class(ClassNum).Map = 1
If Class(ClassNum).x < 0 Or Class(ClassNum).x > MAX_MAPX Then Class(ClassNum).x = Int(Class(ClassNum).x / 2)
If Class(ClassNum).y < 0 Or Class(ClassNum).y > MAX_MAPY Then Class(ClassNum).y = Int(Class(ClassNum).y / 2)
Player(Index).Char(CharNum).Map = Class(ClassNum).Map
Player(Index).Char(CharNum).x = Class(ClassNum).x
Player(Index).Char(CharNum).y = Class(ClassNum).y
Player(Index).Char(CharNum).HP = GetPlayerMaxHP(Index)
Player(Index).Char(CharNum).MP = GetPlayerMaxMP(Index)
Player(Index).Char(CharNum).SP = GetPlayerMaxSP(Index)
' Colocando nome no arquivo xD
f = FreeFile
Open App.Path & "\Contas\charlist.txt" For Append As #f
Print #f, Name
Close #f
Call SavePlayer(Index)
Exit Sub
End If
End Sub
Mude para:
Código:
Sub AddChar(ByVal Index As Long, _
ByVal Name As String, _
ByVal Sex As Byte, _
ByVal ClassNum As Byte, _
ByVal CharNum As Long, _
ByVal Vila As String)
Dim f As Long
If Trim$(Player(Index).Char(CharNum).Name) = vbNullString Then
Player(Index).CharNum = CharNum
Player(Index).Char(CharNum).Name = Name
Player(Index).Char(CharNum).Sex = Sex
Player(Index).Char(CharNum).Class = ClassNum
Player(Index).Char(CharNum).Vila = Vila
If Player(Index).Char(CharNum).Sex = SEX_MALE Then
Player(Index).Char(CharNum).Sprite = Class(ClassNum).MaleSprite
Else
Player(Index).Char(CharNum).Sprite = Class(ClassNum).FemaleSprite
End If
Player(Index).Char(CharNum).Level = 1
Player(Index).Char(CharNum).STR = Class(ClassNum).STR
Player(Index).Char(CharNum).DEF = Class(ClassNum).DEF
Player(Index).Char(CharNum).Speed = Class(ClassNum).Speed
Player(Index).Char(CharNum).Magi = Class(ClassNum).Magi
If Class(ClassNum).Map <= 0 Then Class(ClassNum).Map = 1
If Class(ClassNum).x < 0 Or Class(ClassNum).x > MAX_MAPX Then Class(ClassNum).x = Int(Class(ClassNum).x / 2)
If Class(ClassNum).y < 0 Or Class(ClassNum).y > MAX_MAPY Then Class(ClassNum).y = Int(Class(ClassNum).y / 2)
Player(Index).Char(CharNum).Map = GetVar(App.Path & "\Vilas.ini", GetPlayerVila(Index), "Map")
Player(Index).Char(CharNum).x = GetVar(App.Path & "\Vilas.ini", GetPlayerVila(Index), "X")
Player(Index).Char(CharNum).y = GetVar(App.Path & "\Vilas.ini", GetPlayerVila(Index), "Y")
Player(Index).Char(CharNum).HP = GetPlayerMaxHP(Index)
Player(Index).Char(CharNum).MP = GetPlayerMaxMP(Index)
Player(Index).Char(CharNum).SP = GetPlayerMaxSP(Index)
' Colocando nome no arquivo xD
f = FreeFile
Open App.Path & "\Contas\charlist.txt" For Append As #f
Print #f, Name
Close #f
Call SavePlayer(Index)
Exit Sub
End If
End Sub
Procure por:
Código:
Player(Index).Char(i).Class = Val(GetVar(FileName, "CHAR" & i, "Class")
Abaixo adicione:
Código:
Player(Index).Char(i).Vila = GetVar(FileName, "CHAR" & i, "Vila"
Procure por:
Código:
Call PutVar(FileName, "CHAR" & i, "Guildaccess", STR(Player(Index).Char(i).Guildaccess))
Abaixo adicione:
Código:
Call PutVar(FileName, "CHAR" & i, "Vila", Trim$(Player(Index).Char(i).Vila))
Procure por:
Código:
Type PlayerRec
' Geral
Name As String * NAME_LENGTH
Guild As String
Guildaccess As Byte
Abaixo adicione:
Código:
Vila As String
Procure por:
Código:
Player(Index).Char(CharNum).Guild = vbNullString
Embaixo adiicone:
Código:
Player(Index).Char(CharNum).Vila = vbNullString
Procure por:
Código:
Player(Index).Char(i).Guild = vbNullString
Abaixo adicione:
Código:
Player(Index).Char(i).Vila = vbNullString
Procure por:
Código:
Function GetPlayerExp(ByVal Index As Long) As Long
GetPlayerExp = Player(Index).Char(Player(Index).CharNum).Exp
End Function
Abaixo adicione:
Código:
Function GetPlayerVila(ByVal Index As Long) As String
GetPlayerVila = Trim$(Player(Index).Char(Player(Index).CharNum).Vila)
End Function
Procure por:
Código:
Sub SetPlayerExp(ByVal Index As Long, _
ByVal Exp As Long)
Player(Index).Char(Player(Index).CharNum).Exp = Exp
End Sub
Adicione abaixo:
Código:
Sub SetPlayerVila(ByVal Index As Long, _
ByVal Vila As String)
Player(Index).Char(Player(Index).CharNum).Vila = Vila
End Sub
Procure por:
Código:
Sub HandleData(ByVal Index As Long, ByVal Data As String)
Dim Parse() As String ' MODO DE SEGURANÇA -- "Descomente" para DESLIGÁ-LO, comente para LIGÁ-LO
Dim Name As String
Dim Password As String
Dim Sex As Long
Dim Class As Long
Dim CharNum As Long
Abaixo adicione:
Código:
Dim Vila As String
Procure por:
Código:
Case "addachara"
Name = Parse(1)
Sex = Val(Parse(2))
Class = Val(Parse(3))
CharNum = Val(Parse(4))
For i = 1 To Len(Name)
N = Asc(Mid$(Name, i, 1))
If (N >= 65 And N <= 90) Or (N >= 97 And N <= 122) Or (N = 95) Or (N = 32) Or (N >= 48 And N <= 57) Then
Else
Call PlainMsg(Index, "Nome Inválido! Use apenas letras, números e espaços.", 4)
Exit Sub
End If
Next
If CharNum < 1 Or CharNum > MAX_CHARS Then
Call HackingAttempt(Index, "CharNum Inválido")
Exit Sub
End If
If (Sex < SEX_MALE) Or (Sex > SEX_FEMALE) Then
Call HackingAttempt(Index, "Sexo Inválido")
Exit Sub
End If
If Class < 1 Or Class > Max_Classes Then
Call HackingAttempt(Index, "Classe Inválida")
Exit Sub
End If
If CharExist(Index, CharNum) Then
Call PlainMsg(Index, "O personagem já existe!", 4)
Exit Sub
End If
If FindChar(Name) Then
Call PlainMsg(Index, "Desculpe, mas este nome já está em uso!", 4)
Exit Sub
End If
Call AddChar(Index, Name, Sex, Class, CharNum)
Call SavePlayer(Index)
Call AddLog("O personagem " & Name & " foi adicionado na conta de " & GetPlayerLogin(Index) & ".", PLAYER_LOG)
Call SendChars(Index)
Call PlainMsg(Index, "O personagem foi criado!", 5)
Exit Sub
Mude para:
Código:
Case "addachara"
Name = Parse(1)
Sex = Val(Parse(2))
Class = Val(Parse(3))
CharNum = Val(Parse(4))
Vila = Parse(5)
For i = 1 To Len(Name)
N = Asc(Mid$(Name, i, 1))
If (N >= 65 And N <= 90) Or (N >= 97 And N <= 122) Or (N = 95) Or (N = 32) Or (N >= 48 And N <= 57) Then
Else
Call PlainMsg(Index, "Nome Inválido! Use apenas letras, números e espaços.", 4)
Exit Sub
End If
Next
If CharNum < 1 Or CharNum > MAX_CHARS Then
Call HackingAttempt(Index, "CharNum Inválido")
Exit Sub
End If
If (Sex < SEX_MALE) Or (Sex > SEX_FEMALE) Then
Call HackingAttempt(Index, "Sexo Inválido")
Exit Sub
End If
If Class < 1 Or Class > Max_Classes Then
Call HackingAttempt(Index, "Classe Inválida")
Exit Sub
End If
If CharExist(Index, CharNum) Then
Call PlainMsg(Index, "O personagem já existe!", 4)
Exit Sub
End If
If FindChar(Name) Then
Call PlainMsg(Index, "Desculpe, mas este nome já está em uso!", 4)
Exit Sub
End If
Call AddChar(Index, Name, Sex, Class, CharNum, Vila)
Call SavePlayer(Index)
Call AddLog("O personagem " & Name & " foi adicionado na conta de " & GetPlayerLogin(Index) & ".", PLAYER_LOG)
Call SendChars(Index)
Call PlainMsg(Index, "O personagem foi criado!", 5)
Exit Sub
Procure por:
Código:
Sub SendChars(ByVal Index As Long)
Dim Packet As String
Dim i As Long
Packet = "ALLCHARS" & SEP_CHAR
For i = 1 To MAX_CHARS
Packet = Packet & Trim$(Player(Index).Char(i).Name) & SEP_CHAR & Trim$(Class(Player(Index).Char(i).Class).Name) & SEP_CHAR & Player(Index).Char(i).Level & SEP_CHAR
Next
Packet = Packet & END_CHAR
Call SendDataTo(Index, Packet)
End Sub
Mude para:
Código:
Sub SendChars(ByVal Index As Long)
Dim Packet As String
Dim i As Long
Packet = "ALLCHARS" & SEP_CHAR
For i = 1 To MAX_CHARS
Packet = Packet & Trim$(Player(Index).Char(i).Name) & SEP_CHAR & Trim$(Class(Player(Index).Char(i).Class).Name) & SEP_CHAR & Player(Index).Char(i).Level & SEP_CHAR & Player(Index).Char(i).Sprite & SEP_CHAR & Trim$(Player(Index).Char(i).Vila) & SEP_CHAR
Next
Packet = Packet & END_CHAR
Call SendDataTo(Index, Packet)
End Sub
Procure por:
Código:
Packet = Packet & GetPlayerGuildAccess(i) & SEP_CHAR
Abaixo adicione:
Código:
Packet = Packet & GetPlayerVila(i) & SEP_CHAR
Procure por:
Código:
Packet = Packet & GetPlayerGuildAccess(Index) & SEP_CHAR
Você achará VÁRIAS, e em ambas, adicione abaixo:
Código:
Packet = Packet & GetPlayerVila(Index) & SEP_CHAR
No final da clscommands Adicione :
Código:
Function GetPlayerVila(ByVal Index As Long) As String
GetPlayerVila = Trim$(Player(Index).Char(Player(Index).CharNum).Vila)
End Function
Agora Abra seu Principal.txt e procure Por :
Código:
Sub OnDeath(index)
Dim mapnum
Dim x
Dim y
Dim i
i = GetPlayerClass(index)
mapnum = GetVar("Classes\Classe" & i & ".ini", "CLASS", "Map")
y = GetVar("Classes\Classe" & i & ".ini", "CLASS", "y")
x = GetVar("Classes\Classe" & i & ".ini", "CLASS", "x")
Call PlayerWarp(index, mapnum, x, y)
End Sub
Substitua Ela por :
Código:
Sub OnDeath(index)
Dim mapnum
Dim x
Dim y
mapnum = GetVar("Vilas.ini", GetPlayerVila(Index), "Map")
y = GetVar("Vilas.ini", GetPlayerVila(Index), "Y")
x = GetVar("Vilas.ini", GetPlayerVila(Index), "X")
Call PlayerWarp(index, mapnum, x, y)
End Sub
Agora Para Finalizar, Vai na Pasta do Servidor e Procure um Arquivo .ini Com o Nome MOTD, Copie e Cole ele na Mesma Pasta e o Renomeie para : Vilas
Dê 2 cliques no Arquivo Vilas, Vai abrir em um Bloco de Notas.
Coloque isso :
Código:
[Folha]
Map= 1
X= 1
Y= 1
[Areia]
Map= 1
X= 1
Y= 1
[Névoa]
Map= 1
X= 1
Y= 1
[Nuvem]
Map= 1
X= 1
Y= 1
[Pedra]
Map= 1
X= 1
Y= 1
[Som]
Map= 1
X= 1
Y= 1
[Chuva]
Map= 1
X= 1
Y= 1
[Cachoeira]
Map= 1
X= 1
Y= 1
[Grama]
Map= 1
X= 1
Y= 1
[Akatsuki]
Map= 1
X= 1
Y= 1
Altere o Mapa e a Localização de acordo com onde você quiser que o membro da Vila nasça. ;)
Lembrando que caso você altere o Nome Das Vilas, você também terá que mudar neste Bloco de Notas [size=14pt]Exatamente[/size] como você colocou la no Cliente.
Ps : Este tutorial não foi testado, Qualquer Bug só reportar.
Créditos : Lenon - Tutorial
Guardian - Adaptações para torna-lo completo