Basicamente a Engine limpa, o sistema de grupo não permite que envie exp para jogadores fora do mapa, certo.
No entanto, continua dividindo a exp pela quantidade de membros e desperdiçando a exp.
O sistema de grupo deixa de ser vantagem, e vira desvantagem.
Sem mais delongas, vamos ao tutorial.
É bem simples, abra seu 'server.vbp' , e procure pela "Public Sub Party_ShareExp" , e substitua ela toda por essa:
E pronto! Até onde testei, sem bugs, mas qualquer um encontrado, manda ai que corrijo!
- As mesmas: Exp = Exp / quantidade de membros do grupo;
- Se está no mesmo mapa, Exp = Exp / membros do grupo no mesmo mapa;
- Jogador está em grupo, mas nenhum membro está no mapa, Exp = 100% pro jogador que matou.
Exemplo:
NPC = 100 EXP , Mapa = 1
- Membro "A" e "B" do grupo no MAPA 1 com NPC morto por algum dos dois = 50 EXP pra cada;
- Membro "A" no MAPA 1 e membro "B" no mapa 2 , membro "A" mata o NPC = 100 EXP membro A e 0 EXP para membro "B".
No entanto, continua dividindo a exp pela quantidade de membros e desperdiçando a exp.
O sistema de grupo deixa de ser vantagem, e vira desvantagem.
Sem mais delongas, vamos ao tutorial.
É bem simples, abra seu 'server.vbp' , e procure pela "Public Sub Party_ShareExp" , e substitua ela toda por essa:
- Spoiler:
- Public Sub Party_ShareExp(ByVal partyNum As Long, ByVal Exp As Long, ByVal index As Long)
Dim expShare As Long, leftOver As Long, i As Long, tmpIndex As Long
Dim SameMap As Long
' check if it's worth sharing
If Not Exp >= Party(partyNum).MemberCount Then
' no party - keep exp for self
GivePlayerEXP index, Exp
Exit Sub
End If
SameMap = 0
For i = 1 To Party(partyNum).MemberCount
tmpIndex = Party(partyNum).Member(i)
' Same Map?
If tmpIndex > 0 And GetPlayerMap(tmpIndex) = GetPlayerMap(index) Then
' playing?
If IsConnected(tmpIndex) And IsPlaying(tmpIndex) Then
' find out the equal share
SameMap = SameMap + 1
End If
End If
Next
If SameMap <= 0 Then SameMap = 1
' find out the equal share
expShare = Exp \ SameMap
leftOver = Exp Mod Party(partyNum).MemberCount
' loop through and give everyone exp
For i = 1 To MAX_PARTY_MEMBERS
tmpIndex = Party(partyNum).Member(i)
' existing member?Kn
If tmpIndex > 0 Then
' Member on same map, can share
If GetPlayerMap(tmpIndex) = GetPlayerMap(index) Then
' playing?
If IsConnected(tmpIndex) And IsPlaying(tmpIndex) Then
' give them their share
GivePlayerEXP tmpIndex, expShare
End If
End If
End If
Next
' give the remainder to a random member
tmpIndex = Party(partyNum).Member(RAND(1, Party(partyNum).MemberCount))
' give the exp
GivePlayerEXP tmpIndex, leftOver
End Sub
E pronto! Até onde testei, sem bugs, mas qualquer um encontrado, manda ai que corrijo!
Regras:
- As mesmas: Exp = Exp / quantidade de membros do grupo;
- Se está no mesmo mapa, Exp = Exp / membros do grupo no mesmo mapa;
- Jogador está em grupo, mas nenhum membro está no mapa, Exp = 100% pro jogador que matou.
Exemplo:
NPC = 100 EXP , Mapa = 1
- Membro "A" e "B" do grupo no MAPA 1 com NPC morto por algum dos dois = 50 EXP pra cada;
- Membro "A" no MAPA 1 e membro "B" no mapa 2 , membro "A" mata o NPC = 100 EXP membro A e 0 EXP para membro "B".
~Créditos~
Kotol