Hey there!
I recently returned to GW and looked into getting some of the bots I used back in the day to work again. Most of it is easy to update, but somehow I can't seem to get the salvaging function back to work (used it as part of vaettir and moss farmer among others). Identifying items in bags works great but I will get a fatal GW crash whenever it starts trying to salvage with the normal salvage kit. Perhaps someone with deeper knowledge could take a look and give me a hint. :)
Salvaging Procedure:
Code:
Func _EVT_SF_SalvageAll() ;->Verwertet alles im Inventar wieder
Local $lBags
Local $lSlots
Local $lItem
$EVT_STATUS = "Start Salvaging everything"
For $lBags = 1 To 4
For $lSlots = 1 To DllStructGetData(GetBag($lBags), 'slots')
$lItem = GetItemBySlot($lBags, $lSlots)
If Not _EVT_KF_CanSalvage($lItem) Then
ContinueLoop
EndIf
If Not _EVT_SF_SalvageIt($lItem) Then
Return False
EndIf
Next
Next
Return True
EndFunc ;==>_EVT_SF_SalvageAll
Func _EVT_SF_SalvageIt($aItem) ;->Verwertet angegebenes Item Struct wieder
Local $lR
Local $lModelID
Local $lSlot
Local $lBag
Local $lDingTimer
Local $lIdent
If _EVT_KF_CheckDead() Then
Return $RETURN_ERROR_DIED
EndIf
If _EVT_SF_CountFreeBagSlots() = 0 Then
$EVT_STATUS_FREESPACE = False
Return $RETURN_ERROR_FAILEDTOSALVAGE
EndIf
If _EVT_SF_CountSalvageKit() = 0 Then
$EVT_STATUS_SALVKIT = False
Return $RETURN_ERROR_FAILEDTOSALVAGE
EndIf
If _EVT_SF_CountIDKit() = 0 Then
$EVT_STATUS_IDENKIT = False
Return $RETURN_ERROR_FAILEDTOSALVAGE
EndIf
$lModelID = DllStructGetData($aItem, 'ID')
$aItem = _NF_GETITEM($lModelID)
$lSlot = DllStructGetData($aItem, 'Slot') + 1
$lBag = _NF_FindBag($lModelID, $lSlot)
$aItem = GetItemBySlot($lBag, $lSlot)
IdentifyItem($aItem)
IdentifyBag($lBag)
$dingTimer = TimerInit()
Do
Sleep(GetPing() + 10)
$aItem = GetItemBySlot($lBag, $lSlot)
$lIdent = GetIsIDed($aItem)
;~ _StatusMsg($ident)
Until $lIdent = True Or TimerDiff($dingTimer) > 60000
If TimerDiff($dingTimer) > 60000 Then
Return False
EndIf
If $EVT_STATUS_SALVKIT Then
$aItem = GetItemBySlot($lBag, $lSlot)
$r = GetRarity($aItem)
_StartNormSalvage($aItem)
If $r = $EVT_RARITY_Purple Or $r = $EVT_RARITY_Gold Then
Sleep(GetPing() + Random(150, 250))
If _EVT_KF_CheckDead() Then
If Not GetIsDead(-2) Then
_EVT_NF_SENDKEY("{Enter}")
DropItem(GetItemBySlot($lBag, $lSlot))
Return False
EndIf
Else
_EVT_NF_SENDKEY('{ENTER}')
EndIf
EndIf
If _EVT_KF_CheckDead() Then
Return False
EndIf
$lDingTimer = TimerInit()
Do
If Not Sleep(10) Then
Return False
EndIf
$aItem = GetItemBySlot($lBag, $lSlot)
$exitst = DllStructGetData($aItem, 'Type')
Until $exitst = 0 Or $exitst = 11 Or TimerDiff($lDingTimer) > 60000
If _EVT_KF_CheckDead() Then
Return False
EndIf
If Not Sleep(Random(50, 70)) Then
Return False
EndIf
Return True
EndIf
Return True
EndFunc ;==>_EVT_SF_SalvageIt
StartNormSalvage Function:
Code:
;~ Description: Starts a salvaging session of an item with a normal salvage kit
Func _StartNormSalvage($aItem)
Local $lOffset[4] = [0, 0x18, 0x2C, 0x690]
Local $lSalvageSessionID = MemoryReadPtr($mBasePointer, $lOffset)
If IsDllStruct($aItem) = 0 Then
Local $lItemID = $aItem
Else
Local $lItemID = DllStructGetData($aItem, 'ID')
EndIf
Local $lSalvageKit = _FindNormSalvageKit()
If $lSalvageKit = 0 Then Return
DllStructSetData($mSalvage, 2, $lItemID)
DllStructSetData($mSalvage, 3, $lSalvageKit)
DllStructSetData($mSalvage, 4, $lSalvageSessionID[1])
Enqueue($mSalvagePtr, 16)
EndFunc ;==>_StartNormSalvage
I obviously updated the GWA2 with everything regarding salvaging as mentioned in here:
[Only registered and activated users can see links. Click Here To Register...]
I'm greatful for any help! :)