Todos sabemos que o sistema de recursos, é um NPC parado dando itens. Mas quem programou originalmente deixou a base com infinitas possibilidades. Uma delas é essa: Cada acerto no recurso, vai ter "X %" de fazer quem está minerando o recurso, de ganhar o item, e vai ser opcional deixar o recurso com HP (igual a engine base) ou deixar o recurso Imortal.
Vamos lá, primeiro vamos fazer a parte do cliente, portanto abra seu "client.vbp" , e na "FrmEditor_Resource" , na parte física, crie:
1x Label, Caption: Holding Items
1x ListBox, Name: lstItems
1x ComboBox, Name: cmbItems / Text: No Itens
1x CommandButton, Name: cmdAddItem / Caption: Add
1x TextBox, Name : txtAmount / Text: 1
1x Label, Caption: Amount
1x TextBox, Name: txtDrop / Text: 0
1x Label, Caption: Drop Percent
1x CheckBox, Name: chkImmortal / Caption: Is Immortal
Ficará mais ou menos a exemplo assim:
Agora, dê dois cliques no "cmdAddItem" e adicione isso:
Agora, dê dois cliques no "txtAmount" e adicione isso:
Agora dê dois cliques no "txtDrop" e adicione isso:
Ainda no editor, dê dois cliques no "chkImmortal" e adicione isso:
Agora, em "ModGameEditors" , na "Public Sub ResourceEditorInit()" , procure por isso:
E abaixo disto, adicione isso:
Agora em "ModTypes", declare um TIPO: procure por "Private Type ResourceRec" , e mais abaixo, antes do primeiro "End Type", adicione isso:
Agora, em "ModConstants" , no final adicione isso:
E a parte do "Client~Side" finalizou!
Agora vamos so "Server~Side"!
Abra seu "server.vbp" e em "ModTypes", declare um TIPO: procure por "Private Type ResourceRec" , e mais abaixo, antes do primeiro "End Type", adicione isso:
Agora, em "ModPlayer" , na "Sub CheckResource" , procure por isso bem no início:
E substitua por isso:
Ainda em "ModPlayer" , na "Sub CheckResource" , procure por isso:
E abaixo disto, adicione isso:
Ainda em "ModPlayer" , na "Sub CheckResource" , procure por isso:
E abaixo disto, adicione isso:
Agora, em "ModConstants" , no final adicione isso:
E pronto!
Agora temos recursos com opções imortais e com drop de recursos diretamente na mochila e sem precisar que o recurso morra pra isso, um sistema melhorado de recursos.
Qualquer erro, entrem em contato.
Vamos lá, primeiro vamos fazer a parte do cliente, portanto abra seu "client.vbp" , e na "FrmEditor_Resource" , na parte física, crie:
1x Label, Caption: Holding Items
1x ListBox, Name: lstItems
1x ComboBox, Name: cmbItems / Text: No Itens
1x CommandButton, Name: cmdAddItem / Caption: Add
1x TextBox, Name : txtAmount / Text: 1
1x Label, Caption: Amount
1x TextBox, Name: txtDrop / Text: 0
1x Label, Caption: Drop Percent
1x CheckBox, Name: chkImmortal / Caption: Is Immortal
Ficará mais ou menos a exemplo assim:
Agora, dê dois cliques no "cmdAddItem" e adicione isso:
- Spoiler:
- Dim tmpString() As String
Dim itemnum As Long
Dim X As Long, tmpIndex As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
' exit out if needed
If Not cmbItems.ListCount > 0 Then Exit Sub
If Not lstItems.ListCount > 0 Then Exit Sub
' set the combo box properly
tmpString = Split(cmbItems.List(cmbItems.ListIndex))
' make sure it's not a clear
If Not cmbItems.List(cmbItems.ListIndex) = "No Items" Then
Resource(EditorIndex).HoldingItem(lstItems.ListIndex + 1) = cmbItems.ListIndex
Resource(EditorIndex).HoldingItemAmount(lstItems.ListIndex + 1) = txtAmount.text
Resource(EditorIndex).HoldingItemDropRate(lstItems.ListIndex + 1) = txtDrop.text
Else
Resource(EditorIndex).HoldingItem(lstItems.ListIndex + 1) = 0
Resource(EditorIndex).HoldingItemAmount(lstItems.ListIndex + 1) = 0
Resource(EditorIndex).HoldingItemDropRate(lstItems.ListIndex + 1) = 0
End If
' re-load the list
tmpIndex = lstItems.ListIndex
lstItems.Clear
For X = 1 To MAX_RESOURCE_HOLDING_ITEMS
If Resource(EditorIndex).HoldingItem(X) > 0 Then
lstItems.AddItem X & ": " & Resource(EditorIndex).HoldingItemAmount(X) & "x " & Trim$(Item(Resource(EditorIndex).HoldingItem(X)).Name) & " :" & Resource(EditorIndex).HoldingItemDropRate(X) & "%"
Else
lstItems.AddItem X & ": No Items"
End If
Next
lstItems.ListIndex = tmpIndex
' Error handler
Exit Sub
errorhandler:
HandleError "cmbAddItem_Click", "frmEditor_Resource", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
Agora, dê dois cliques no "txtAmount" e adicione isso:
- Spoiler:
- If Not Len(txtAmount.text) > 0 Then Exit Sub
If Not IsNumeric(txtAmount.text) Then Exit Sub
Agora dê dois cliques no "txtDrop" e adicione isso:
- Spoiler:
- If Not Len(txtDrop.text) >= 0 Then Exit Sub
If Not IsNumeric(txtDrop.text) Then Exit Sub
Ainda no editor, dê dois cliques no "chkImmortal" e adicione isso:
- Spoiler:
- Resource(EditorIndex).IsImmortal = chkImmortal.Value
Agora, em "ModGameEditors" , na "Public Sub ResourceEditorInit()" , procure por isso:
- Spoiler:
- ' find the sound we have set
If .cmbSound.ListCount >= 0 Then
For i = 0 To .cmbSound.ListCount
If .cmbSound.List(i) = Trim$(Resource(EditorIndex).sound) Then
.cmbSound.ListIndex = i
SoundSet = True
End If
Next
If Not SoundSet Or .cmbSound.ListIndex = -1 Then .cmbSound.ListIndex = 0
End If
E abaixo disto, adicione isso:
- Spoiler:
- ' Holding Items
.cmbItems.Clear
.cmbItems.AddItem "No Items"
If .cmbItems.ListCount >= 0 Then
For i = 1 To MAX_ITEMS
.cmbItems.AddItem (Trim$(Item(i).Name))
Next
End If
' cache list
.lstItems.Clear
For i = 1 To MAX_RESOURCE_HOLDING_ITEMS
If Resource(EditorIndex).HoldingItem(i) > 0 Then
.lstItems.AddItem i & ": " & Resource(EditorIndex).HoldingItemAmount(i) & "x " & Trim$(Item(Resource(EditorIndex).HoldingItem(i)).Name) & " :" & Resource(EditorIndex).HoldingItemDropRate(i) & "%"
Else
.lstItems.AddItem i & ": " & "No Items"
End If
Next
.lstItems.ListIndex = 0
.chkImmortal.Value = Resource(EditorIndex).IsImmortal
Agora em "ModTypes", declare um TIPO: procure por "Private Type ResourceRec" , e mais abaixo, antes do primeiro "End Type", adicione isso:
- Spoiler:
- HoldingItem(1 To MAX_RESOURCE_HOLDING_ITEMS) As Long
HoldingItemAmount(1 To MAX_RESOURCE_HOLDING_ITEMS) As Long
HoldingItemDropRate(1 To MAX_RESOURCE_HOLDING_ITEMS) As Double
IsImmortal As Byte
Agora, em "ModConstants" , no final adicione isso:
- Spoiler:
- Public Const MAX_RESOURCE_HOLDING_ITEMS As Long = 10
E a parte do "Client~Side" finalizou!
Agora vamos so "Server~Side"!
Abra seu "server.vbp" e em "ModTypes", declare um TIPO: procure por "Private Type ResourceRec" , e mais abaixo, antes do primeiro "End Type", adicione isso:
- Spoiler:
- HoldingItem(1 To MAX_RESOURCE_HOLDING_ITEMS) As Long
HoldingItemAmount(1 To MAX_RESOURCE_HOLDING_ITEMS) As Long
HoldingItemDropRate(1 To MAX_RESOURCE_HOLDING_ITEMS) As Double
IsImmortal As Byte
Agora, em "ModPlayer" , na "Sub CheckResource" , procure por isso bem no início:
- Spoiler:
- Dim i As Long
E substitua por isso:
- Spoiler:
- Dim i As Long, d As Long, n As Long
Ainda em "ModPlayer" , na "Sub CheckResource" , procure por isso:
- Spoiler:
- ' inv space?
If Resource(Resource_index).ItemReward > 0 Then
If FindOpenInvSlot(index, Resource(Resource_index).ItemReward) = 0 Then
PlayerMsg index, "Não tem espaço na mochila.", BrightRed
Exit Sub
End If
End If
E abaixo disto, adicione isso:
- Spoiler:
- 'Give Item
For d = 1 To MAX_RESOURCE_HOLDING_ITEMS
If Resource(Resource_index).HoldingItem(d) > 0 Then
If FindOpenInvSlot(index, Resource(Resource_index).HoldingItem(d)) = 0 Then
PlayerMsg index, "Não tem espaço na mochila.", BrightRed
'Reset Attack timer
TempPlayer(index).AttackTimer = GetTickCount
Exit Sub
Else
i = Resource(Resource_index).HoldingItemDropRate(d)
n = Rnd * 100 + 1
If n <= i Then
Call GiveInvItem(index, Resource(Resource_index).HoldingItem(d), Resource(Resource_index).HoldingItemAmount(d))
End If
End If
End If
Next
Ainda em "ModPlayer" , na "Sub CheckResource" , procure por isso:
- Spoiler:
- Damage = Item(CurEquipment).Data2
E abaixo disto, adicione isso:
- Spoiler:
- 'Check for resource immortality
If Resource(Resource_index).IsImmortal = 1 Then
SendActionMsg MapNum, "!!!", White, 1, (rX * 32), (rY * 32)
'Reset Attack timer
TempPlayer(index).AttackTimer = GetTickCount
Exit Sub
End If
Agora, em "ModConstants" , no final adicione isso:
- Spoiler:
- Public Const MAX_RESOURCE_HOLDING_ITEMS As Long = 10
E pronto!
Agora temos recursos com opções imortais e com drop de recursos diretamente na mochila e sem precisar que o recurso morra pra isso, um sistema melhorado de recursos.
Qualquer erro, entrem em contato.
~Créditos~
Kotol