|
You last visited: Today at 18:42
Advertisement
PWI Eclipse changes
Discussion on PWI Eclipse changes within the PW Hacks, Bots, Cheats, Exploits forum part of the Perfect World category.
03/01/2016, 19:16
|
#211
|
elite*gold: 0
Join Date: Dec 2009
Posts: 70
Received Thanks: 15
|
you can just check for the value that changes in the different options like "login, player select etc." through that just send an "ESC" when the server select is there. Thats how i do it.
Gotta check later what address i use
I check the loginstate with this function:
Func CheckLoginState($pid)
;~ $pid = ProcessExists('elementclient.exe')
$GAME_PROCESS = _MemoryOpen($pid)
$LoginAdress = 0xDC2D00
$POINTER_BASE = _MemoryRead($LoginAdress, $GAME_PROCESS)
$HexVar = Hex($POINTER_BASE, 4)
_MemoryClose($pid)
Return Dec($HexVar)
EndFunc ;==>CheckLoginState
If the return equals "9348" then you're at the server select 
Then you can just easily send "ESC"
|
|
|
03/01/2016, 21:34
|
#212
|
elite*gold: 0
Join Date: Jun 2008
Posts: 37
Received Thanks: 21
|
thanks
nice would be a solution over the start commands, but I find nothing about it.
if you logged via arc, the login data transferred automatically, I would be interested also how it works, maybe the same way.
|
|
|
03/02/2016, 23:24
|
#213
|
elite*gold: 0
Join Date: Dec 2009
Posts: 70
Received Thanks: 15
|
I cant help you with the start commands tho :/ but yeah it could be that arc is doing it the same way. Would be cool to skip the whole login process and simplify it.
|
|
|
03/03/2016, 07:35
|
#214
|
elite*gold: 0
Join Date: Jul 2011
Posts: 145
Received Thanks: 97
|
Arc is probably using those "token" fields to pass along a temporary login token.
Although maybe it's not so temporary? You can see what arguments were used to launch an exe with "Sysinternals Process Explorer".
It would be really nice to skip the login stuff as right now I'm checking screen pixels and it breaks if i ever resize the window or change my texture depth.
|
|
|
05/12/2016, 10:50
|
#215
|
elite*gold: 0
Join Date: Nov 2013
Posts: 32
Received Thanks: 1
|
#include <NomadMemory.au3>
#include <Array.au3>
Dim $GAME_EXE = "elementclient.exe"
Dim $GAME_PID = ProcessExists($GAME_EXE)
Dim $GAME_PROCESS = _MemoryOpen($GAME_PID)
Dim $ADDRESS_BASE = 0xD22C74
Dim $LIST_DIG[2] = ['Nectar', 'Ageratum']
While 1
AutoFarm()
; Insert some auto pots here
; Insert some memory reducers here
Sleep(250)
WEnd
Func AutoFarm()
For $i = 0 To UBound($LIST_DIG) - 1
DigItem($LIST_DIG[$i])
Next
EndFunc
Func DigItem($STRING)
$ARRAY = ItemsArray()
$index = _ArraySearch($ARRAY, $STRING, 0, 0, 0, 1)
If $index <> -1 Then
$ITEM_SN = $ARRAY[$index][0]
GatherItem($ITEM_SN, 1)
Do
; Insert some traveled distance check or stuck check here
; Insert some auto pots here
; Insert some memory reducers here
Sleep(250)
Until ActionFlag() = 0
Sleep(250)
GatherItem($ITEM_SN, 1)
Do
; Insert some traveled distance check or stuck check here
; Insert some auto pots here
; Insert some memory reducers here
Sleep(250)
Until ActionFlag() = 0
EndIf
EndFunc
Func ActionFlag()
$POINTER_BASE = _MemoryRead(_MemoryRead($ADDRESS_BASE, $GAME_PROCESS) + 0x1C, $GAME_PROCESS)
$POINTER_CHAR = _MemoryRead($POINTER_BASE + 0x28, $GAME_PROCESS)
$POINTER_ACTION = _MemoryRead($POINTER_CHAR + 0x13EC, $GAME_PROCESS)
Return _MemoryRead($POINTER_ACTION + 0x24, $GAME_PROCESS)
EndFunc
Func ItemsArray()
$POINTER_BASE = _MemoryRead(_MemoryRead($ADDRESS_BASE, $GAME_PROCESS) + 0x1C, $GAME_PROCESS)
$SORTEDLIST = _MemoryRead($POINTER_BASE + 0x14, $GAME_PROCESS)
$ITEMBASE = _MemoryRead($SORTEDLIST + 0x24, $GAME_PROCESS)
$ITEMCOUNT = _MemoryRead($ITEMBASE + 0x14, $GAME_PROCESS)
If $ITEMCOUNT = 0 Then Return
$ITEMLIST = _MemoryRead($ITEMBASE + 0x1C, $GAME_PROCESS)
Dim $ARRAY[1][7], $COUNTER=0
For $i = 0 To 768
$ITEM = _MemoryRead(_MemoryRead($ITEMLIST + $i*4, $GAME_PROCESS) + 0x4 , $GAME_PROCESS)
If $ITEM <> 0 Then
ReDim $ARRAY[$COUNTER+1][8]
$ARRAY[$COUNTER][0] = _MemoryRead($ITEM + 0x110, $GAME_PROCESS)
$ARRAY[$COUNTER][1] = _MemoryRead($ITEM + 0x114, $GAME_PROCESS)
$ARRAY[$COUNTER][2] = _MemoryRead(_MemoryRead($ITEM + 0x168, $GAME_PROCESS), $GAME_PROCESS, 'wchar[100]')
$ARRAY[$COUNTER][3] = _MemoryRead($ITEM + 0x150, $GAME_PROCESS)
$ARRAY[$COUNTER][4] = _MemoryRead($ITEM + 0x3C, $GAME_PROCESS, 'float') ;X Coord in Map
$ARRAY[$COUNTER][5] = _MemoryRead($ITEM + 0x44, $GAME_PROCESS, 'float') ;y Coord in Map
$ARRAY[$COUNTER][6] = _MemoryRead($ITEM + 0x40, $GAME_PROCESS, 'float') ;Z Coord or Vertical Altitude
$COUNTER += 1
EndIf
Next
Return $ARRAY
EndFunc
Func InjectCode($OPcode)
;Declare local variables
;Open process for given processId
$processHandle = $GAME_PROCESS[1]
;Allocate memory for the OpCode and retrieve address for this
$functionAddress = DllCall('kernel32.dll', 'int', 'VirtualAllocEx', 'int', $processHandle, 'ptr', 0, 'int', 100, 'int', 0x1000, 'int', 0x40)
;Construct the OpCode for calling the function
;Put the OpCode into a struct for later memory writing
$vBuffer = DllStructCreate('byte[' & StringLen($OPcode) / 2 & ']')
For $loop = 1 To DllStructGetSize($vBuffer)
DllStructSetData($vBuffer, 1, Dec(StringMid($OPcode, ($loop - 1) * 2 + 1, 2)), $loop)
Next
;Write the OpCode to previously allocated memory
DllCall('kernel32.dll', 'int', 'WriteProcessMemory', 'int', $processHandle, 'int', $functionAddress[0], 'int', DllStructGetPtr($vBuffer), 'int', DllStructGetSize($vBuffer), 'int', 0)
;Create a remote thread in order to run the OpCode
$hRemoteThread = DllCall('kernel32.dll', 'int', 'CreateRemoteThread', 'int', $processHandle, 'int', 0, 'int', 0, 'int', $functionAddress[0], 'ptr', 0, 'int', 0, 'int', 0)
;Wait for the remote thread to finish
Do
$result = DllCall('kernel32.dll', 'int', 'WaitForSingleObject', 'int', $hRemoteThread[0], 'int', 50)
Until $result[0] <> 258
;Close the handle to the previously created remote thread
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $hRemoteThread[0])
;Free the previously allocated memory
DllCall('kernel32.dll', 'ptr', 'VirtualFreeEx', 'hwnd', $processHandle, 'int', $functionAddress[0], 'int', 0, 'int', 0x8000)
Return True
EndFunc
Func GatherItem($ITEM_UNIQUE_ID, $ACTION_TYPE=0)
;Construct the OpCode for calling the 'GatherItem' function
$OPcode = "60" ;60 PUSHAD
$OPcode &= "B9" & _Hex($ADDRESS_BASE) ;B9 00000000 MOV ECX,#Baseadr
$OPcode &= "8B09" ;8B09 MOV ECX,DWORD PTR DS:[ECX]
$OPcode &= "8B491C" ;8B49 1C MOV ECX,DWORD PTR DS:[ECX+1C]
$OPcode &= "8B4928" ;8B49 28 MOV ECX,DWORD PTR DS:[ECX+28]
$OPcode &= "68" & _Hex($ACTION_TYPE) ;68 00000000 PUSH $ACTION_TYPE 0=Pick 1=Dig
$OPcode &= "68" & _Hex($ITEM_UNIQUE_ID) ;68 00000000 PUSH $ITEM_UNIQUE_ID
$OPcode &= "BB" & _Hex($ADDRESS_GATHER) ;BB 00000000 MOV EBX, $ADDRESS_GATHER
$OPcode &= "FFD3" ;FFD3 CALL EBX
$OPcode &= "61" ;61 POPAD
$OPcode &= "C3" ;C3 RETN
InjectCode($OPcode)
EndFunc
Func _Hex($Value, $size=8, $type="int")
Local $tmp1, $tmp2, $i
If($type = "int") Then
$tmp1 = StringRight("000000000" & Hex($Value), $size)
ElseIf($type = "float") Then
$tmp1 = StringRight("000000000" & _FloatToHex($Value), $size)
EndIf
For $i = 0 To StringLen($tmp1) / 2 - 1
$tmp2 = $tmp2 & StringMid($tmp1, StringLen($tmp1) - 1 - 2 * $i, 2)
Next
Return $tmp2
EndFunc
Func _FloatToHex($floatval)
$sF = DllStructCreate("float")
$sB = DllStructCreate("ptr", DllStructGetPtr($sF))
If $floatval = "" Then Exit
DllStructSetData($sF, 1, $floatval)
$return=DllStructGetData($sB, 1)
Return $return
EndFunc
learning step by step i try to learn, it work but can someone help how to write radius func, i try to look propeth but i thing to advanced for me
Func FindHerbsResources()
Sleep(10)
BuildItemArray()
;_ArrayDisplay($itemarray)
Local $array[1][8], $arraysize, $pointer, $item_base, $counter, $counterherbs, $counterresources, $templasttarx[3], $templasttary[3], $templasttarz[3]
$tempitemarray = $itemarray
If IniRead($SOFTWARE_CONFIG, $CFG_LOOT_ROOT_KEY, $CFG_LOOTHERBS_FLAG_KEY, "0") = 1 Or IniRead($SOFTWARE_CONFIG, $CFG_LOOT_ROOT_KEY, $CFG_LOOTRESOURCES_FLAG_KEY, "0") = 1 Then
If GUICtrlRead($LABEL_GENERAL_STATUS) <> "Action: Finding Gatherables" Then
GUICtrlSetData($LABEL_GENERAL_STATUS, "Action: Finding Gatherables")
EndIf
For $h = 0 to Ubound($tempitemarray) - 1
$gathertarget = 0
If IniRead($SOFTWARE_CONFIG, $CFG_LOOT_ROOT_KEY, $CFG_LOOTHERBS_FLAG_KEY, "0") = 1 Then
For $i = 0 To UBound($HERBS) - 1
If $tempitemarray[$h][2] = $HERBS[$i] And $LASTGATHERED <> $tempitemarray[$h][0] Then
$gathertarget = $tempitemarray[$h][0]
$gathertargetname = $HERBS[$i]
$gathertargetdis = $tempitemarray[$h][6]
$gathertargethomedis = $tempitemarray[$h][7]
$templasttarx[2] = $tempitemarray[$h][3]
$templasttarx[1] = Round(($tempitemarray[$h][3] + 4000) / 10, 2)
$templasttary[2] = $tempitemarray[$h][4]
$templasttary[1] = Round(($tempitemarray[$h][4] + 5500) / 10, 2)
$templasttarz[2] = $tempitemarray[$h][5]
$templasttarz[1] = Round(($tempitemarray[$h][5]) / 10, 2)
ExitLoop
EndIf
Next
EndIf
If IniRead($SOFTWARE_CONFIG, $CFG_LOOT_ROOT_KEY, $CFG_LOOTRESOURCES_FLAG_KEY, "0") = 1 Then
For $i = 0 To UBound($RESOURCES) - 1
If $tempitemarray[$h][2] = $RESOURCES[$i] And $LASTGATHERED <> $tempitemarray[$h][0] Then
$gathertarget = $tempitemarray[$h][0]
$gathertargetname = $RESOURCES[$i]
$gathertargetdis = $tempitemarray[$h][6]
$gathertargethomedis = $tempitemarray[$h][7]
$templasttarx[2] = $tempitemarray[$h][3]
$templasttarx[1] = Round(($tempitemarray[$h][3] + 4000) / 10, 2)
$templasttary[2] = $tempitemarray[$h][4]
$templasttary[1] = Round(($tempitemarray[$h][4] + 5500) / 10, 2)
$templasttarz[2] = $tempitemarray[$h][5]
$templasttarz[1] = Round(($tempitemarray[$h][5]) / 10, 2)
ExitLoop
EndIf
Next
EndIf
If $gathertarget <> 0 And $LASTGATHERED <> $gathertarget Then
If $gathertargetdis < IniRead($SOFTWARE_CONFIG, $CFG_EXTRAS_ROOT_KEY, $CFG_EXTRAS_ATTACKRAD_KEY, "0") And $gathertargethomedis < IniRead($SOFTWARE_CONFIG, $CFG_EXTRAS_ROOT_KEY, $CFG_EXTRAS_ATTACKRAD_KEY, "0") Then
GUICtrlSetData($LABEL_GENERAL_STATUS, "Action: Collecting Gatherable")
AddHistory("Gathering " & $gathertargetname)
$MOVEING = 1
GrabHerbResource($gathertarget)
$GATHERING = 0
;return Main()
ExitLoop
EndIf
EndIf
Next
EndIf
$GATHERING = 0
Return $array
EndFunc
so i hope some can help write radius func for complete 1st spoiler so i can learn more
|
|
|
06/15/2016, 10:37
|
#216
|
elite*gold: 0
Join Date: Nov 2013
Posts: 32
Received Thanks: 1
|
Quote:
Originally Posted by Stark77
btw this is the updated accept invite. LeaderID is the playerID of the party leader that sent the invite. PlayerPID is the process ID of the client that want to accept the invite.
acceptPartyInvite(LeaderId,PlayerPID=0)
{
packet := ""
revHex(revLeaderId, LeaderId)
InvitePointer := ReadMemoryUint(0xD2D3A0, PlayerPID)
InviteCounter := ReadMemoryUint(InvitePointer + 0x14, PlayerPID)
revHex(revInviteCounter, InviteCounter)
packet = %packet%1C00%revLeaderId%%revInviteCounter%
packetSize := 0xA
packetSizeStr := "0A"
sendPacket(packet, packetSizeStr, packetsize, PlayerPID)
}
|
hi can someone help how to use this code i know this is ahk but can i just use in auto it like in
Func abc()
acceptPartyInvite
EndFunc
|
|
|
06/16/2016, 13:20
|
#217
|
elite*gold: 0
Join Date: Jun 2008
Posts: 37
Received Thanks: 21
|
Func acceptPartyInvite you can find here:
Quote:
Originally Posted by Interest07
As per Smurfin's request:
reposting of what I posted in the Prophet's bot thread.
some example of functions you could use with sending packets (AutoIt code, see link below for C#):
PHP Code:
;////Code for sending packets.
#include <GUIButton.au3>
#include <GUIToolbar.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <NomadMemory.au3>
#include <Array.au3>
Global $kernel32 = DllOpen('kernel32.dll')
Global $pid = ProcessExists('elementclient.exe')
global $realBaseAddress = 0x0098657C
global $sendPacketFunction = 0x005BD7B0
;//Deselect target (example usage of sendPacket)
sendDeselectPacket($pid)
DllClose($kernel32)
Func logOut($toAccount, $pid)
;//Sends a packet to log the character from the server
;//If toAccount=1, it logs to character select
;//If toAccount=0, it exits completely
local $packet, $packetSize
$packet = '0100'
$packet &= _hex($toAccount)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func selectTarget($targetId, $pid)
;//Select the NPC/Mob/Player denoted by targetId
local $packet, $packetSize
$packet = '0200'
$packet &= _hex($targetId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func regularAttack($afterSkill, $pid)
;//Start with regular attacks. $afterskill is 1 if you
;//start attacking after using a skill.
local $packet, $packetSize
$packet = '0300'
$packet &= _hex($afterSkill, 2)
$packetSize = 3
sendPacket($packet, $packetSize, $pid)
EndFunc
Func rezToTown($pid)
;//Respawn in town after death
local $packet, $packetSize
$packet = '0400'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func rezWithScroll($pid)
;//Respawn in the place you died, costs a rez scroll
local $packet, $packetSize
$packet = '0500'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func pickUpItem($uniqueItemId, $itemTypeId, $pid)
;//Picks up an item. uniqueItemId is the unique id belonging
;//to the individual item on the ground. itemTypeId is the id for
;//the type of item it is. This would be the same as the last
;//part in the url on pwdatabase. example:
;//http://www.pwdatabase.com/pwi/items/3044
;//the itemTypeId for gold is 3044.
local $packet, $packetSize
$packet = '0600'
$packet &= _hex($uniqueItemId)
$packet &= _hex($itemTypeId)
$packetSize = 10
sendPacket($packet, $packetSize, $pid)
EndFunc
Func deselectTarget($pid)
;//Deselects the currently selected target
local $packet, $packetSize
$packet = '0800'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func updateInvPosition($invPosition, $pid)
;//This packet is sent whenever you pick up HH/TT items
;//Unsure as to why. Also happens when you find a
;//quest item or equipment.
local $packet, $packetSize
$packet = '0900'
$packet &= _hex($invPosition, 2)
$packetSize = 3
sendPacket($packet, $packetSize, $pid)
EndFunc
Func swapItemInInv($invIndex1, $invIndex2, $pid)
;//Swaps the items in the two given inventory locations
;//The index for a standard unexpanded inventory runs from
;//0, top left, to 31, bottom right
local $packet, $packetSize
$packet = '0C00'
$packet &= _hex($invIndex1, 2)
$packet &= _hex($invIndex2, 2)
$packetSize = 4
sendPacket($packet, $packetSize, $pid)
EndFunc
Func splitStackItemInInv($invIndexSource, $invIndexDestination, $amount, $pid)
;//Splits a stack in your inventory located at invIndexSource
;//Take off $amouunt from the stack and place them at invIndexDestination
;//The index for a standard unexpanded inventory runs from
;//0, top left, to 31, bottom right
local $packet, $packetSize
$packet = '0D00'
$packet &= _hex($invIndexSource, 2)
$packet &= _hex($invIndexDestination, 2)
$packet &= _hex($amount, 4)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func dropItemOnFloor($invIndexSource, $amount, $pid)
;//Drops the stack located at invIndexSource in your inventory
;//onto the floor.
;//The index for a standard unexpanded inventory runs from
;//0, top left, to 31, bottom right
local $packet, $packetSize
$packet = '0E00'
$packet &= _hex($invIndexSource, 2)
$packet &= _hex($amount, 4)
$packetSize = 5
sendPacket($packet, $packetSize, $pid)
EndFunc
Func swapEquip($equipIndex1, $equipIndex2, $pid)
;//Swaps the items in the two given equipment locations
;//The index for equipment runs from
;//0, weapon, to 24, speaker?. This also includes fashion
;//Obviously there aren't a lot of equipment types you can swap
;//besides rings.
local $packet, $packetSize
$packet = '1000'
$packet &= _hex($equipIndex1, 2)
$packet &= _hex($equipIndex2, 2)
$packetSize = 4
sendPacket($packet, $packetSize, $pid)
EndFunc
Func swapEquipWithInv($invIndex, $equipIndex, $pid)
;//Swaps the items in the invIndex location with the
;//item in the equipment location
;//The index for equipment runs from
;//0, weapon, to 24, speaker?. This also includes fashion
;//The index for a standard unexpanded inventory runs from
;//0, top left, to 31, bottom right
local $packet, $packetSize
$packet = '1100'
$packet &= _hex($invIndex, 2)
$packet &= _hex($equipIndex, 2)
$packetSize = 4
sendPacket($packet, $packetSize, $pid)
EndFunc
Func dropGold($amount, $pid)
;//Drops $amount of gold to floor
local $packet, $packetSize
$packet = '1400'
$packet &= _hex($amount)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func updateStats($pid)
;//Is sent whenever a new item is equipped or stat
;//screen is opened or you level up.
local $packet, $packetSize
$packet = '1500'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func increaseStatsBy($con, $int, $str, $agi, $pid)
;//Use this after level up to increase your stats.
local $packet, $packetSize
$packet = '1600'
$packet &= _hex($con)
$packet &= _hex($int)
$packet &= _hex($str)
$packet &= _hex($agi)
$packetSize = 18
sendPacket($packet, $packetSize, $pid)
EndFunc
Func inviteParty($playerId, $pid)
;//Invite playerId to your party.
local $packet, $packetSize
$packet = '1B00'
$packet &= _hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func acceptPartyInvite($playerId, $partyInviteCounter, $pid)
;//Accept an invite from playerId. partyInviteCounter is a counter that
;//is kept based on the amount of party invites you've had. See post
;//on how to find that value.
local $packet, $packetSize
$packet = '1C00'
$packet &= _hex($playerId)
$packet &= _hex($partyInviteCounter)
$packetSize = 10
sendPacket($packet, $packetSize, $pid)
EndFunc
Func refusePartyInvite($playerId, $pid)
;//Refuses a party invite from playerId
local $packet, $packetSize
$packet = '1D00'
$packet &= _hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func leaveParty($pid)
;//Leave your current party
local $packet, $packetSize
$packet = '1E00'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func evictFromParty($playerId, $pid)
;//Evicts playerId from party
local $packet, $packetSize
$packet = '1F00'
$packet &= _hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func startNpcDialogue($npcId, $pid)
;//Opens up an NPC's main menu. Is necessary before
;//accepting/handing in quests, buy/sell/repair
local $packet, $packetSize
$packet = '2300'
$packet &= _hex($npcId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func useItem($index, $itemTypeId, $pid, $equip=0)
;//uses the item located at index. By default inventory index
;//is used. If equip=1, then equipment index is used. This
;//is necessary when toggling fly mode, as your fly gear
;//is then used.
;//itemTypeId is the id for
;//the type of item it is. This would be the same as the last
;//part in the url on pwdatabase. example:
;//http://www.pwdatabase.com/pwi/items/3044
;//the itemTypeId for gold is 3044.
local $packet, $packetSize
$packet = '2800'
$packet &= _hex($equip, 2)
$packet &= '01'
$packet &= _hex($index, 2)
$packet &= '00'
$packet &= _hex($itemTypeId)
$packetSize = 10
sendPacket($packet, $packetSize, $pid)
EndFunc
Func useSkill($skillId, $targetId, $pid)
;//uses the specified skill on the target. Pass your own
;//Id if you wish to use buffs. When teleporting targetId
;//is the targeted city.
local $packet, $packetSize
$packet = '2900'
$packet &= _hex($skillId)
$packet &= '0001'
$packet &= _hex($targetId)
$packetSize = 12
sendPacket($packet, $packetSize, $pid)
EndFunc
Func cancelAction($pid)
;//Cancels for example your current skillCast
local $packet, $packetSize
$packet = '2A00'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func startMeditating($pid)
;//Starts meditating for faster HP/MP regen
local $packet, $packetSize
$packet = '2E00'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func stopMeditating($pid)
;//Stop meditating for faster HP/MP regen
local $packet, $packetSize
$packet = '2F00'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func useEmotion($emoteIndex, $pid)
;//uses the emotion located at index emoteIndex 0 to 26
local $packet, $packetSize
$packet = '3000'
$packet &= _hex($emoteIndex, 4)
$packetSize = 4
sendPacket($packet, $packetSize, $pid)
EndFunc
Func beIntimate($pid)
;//Uses the kissing / intimate emote when cuddling.
local $packet, $packetSize
$packet = '3000'
$packet &= '1D00'
$packetSize = 4
sendPacket($packet, $packetSize, $pid)
EndFunc
Func swapItemInBank($bankIndex1, $bankIndex2, $pid)
;//swaps the location of two stacks in bank. bankIndex runs
;//from 0, topleft, to 15, bottomright, in a standard non
;//upgraded bank.
local $packet, $packetSize
$packet = '3800'
$packet &= '03'
$packet &= _hex($bankIndex1, 2)
$packet &= _hex($bankIndex2, 2)
$packetSize = 5
sendPacket($packet, $packetSize, $pid)
EndFunc
Func splitStackItemInBank($bankIndexSource, $bankIndexDestination, $amount, $pid)
;//Splits a stack in your bank located at bankIndexSource
;//Take off $amouunt from the stack and place them at bankIndexDestination
;//The index for a standard unexpanded bank runs from
;//0, top left, to 15, bottom right
local $packet, $packetSize
$packet = '3900'
$packet &= '03'
$packet &= _hex($bankIndexSource, 2)
$packet &= _hex($bankIndexDestination, 2)
$packet &= _hex($amount, 4)
$packetSize = 7
sendPacket($packet, $packetSize, $pid)
EndFunc
Func swapItemBankAndInv($bankIndex, $invIndex, $pid)
;//Swaps a stack in your bank located at bankIndex
;//with one in your inventory located at invIndex
local $packet, $packetSize
$packet = '3A00'
$packet &= '03'
$packet &= _hex($bankIndex, 2)
$packet &= _hex($invIndex, 2)
$packetSize = 5
sendPacket($packet, $packetSize, $pid)
EndFunc
Func splitStackItemInBankToInv($bankIndexSource, $invIndexDestination, $amount, $pid)
;//Splits a stack in your bank located at bankIndexSource
;//Take off $amouunt from the stack and place them at invIndexDestination
local $packet, $packetSize
$packet = '3B00'
$packet &= '03'
$packet &= _hex($bankIndexSource, 2)
$packet &= _hex($invIndexDestination, 2)
$packet &= _hex($amount, 4)
$packetSize = 7
sendPacket($packet, $packetSize, $pid)
EndFunc
Func splitStackItemInInvToBank($invIndexSource, $bankIndexDestination, $amount, $pid)
;//Splits a stack in your inventory located at invIndexSource
;//Take off $amouunt from the stack and place them at bankIndexDestination
local $packet, $packetSize
$packet = '3C00'
$packet &= '03'
$packet &= _hex($invIndexSource, 2)
$packet &= _hex($bankIndexDestination, 2)
$packet &= _hex($amount, 4)
$packetSize = 7
sendPacket($packet, $packetSize, $pid)
EndFunc
Func setPartySearchSettings($recruit, $jobId, $lvl, $slogan, $pid)
;//Changes party searching settings.
;//recruit=1 means recruiting party
;//recruit=0 means searching for party
;//jobId=0 & lvl=0 & no slogan -> slogan=0x0
;//jobId<>0 & lvl<>0 & no slogan -> slogan=0x40
;//jobId=0 & lvl=0 & slogan -> slogan=0x80
;//jobId<>0 & lvl<> 0 & slogan -> slogan=0xC0
local $packet, $packetSize
$packet = '3F00'
$packet &= _hex($jobId, 2)
$packet &= _hex($lvl, 2)
$packet &= _hex($recruit, 2)
$packet &= _hex($slogan, 2)
$packet &= '00000000'
$packetSize = 10
sendPacket($packet, $packetSize, $pid)
EndFunc
Func shiftPartyCaptain($playerId, $pid)
;//Shifts party captain position to playerId
local $packet, $packetSize
$packet = '4800'
$packet &= _hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func useSkillWithoutCastTime($skillId, $targetId, $pid)
;//uses the specified skill on the target. This function is used
;// instead of the regular skill use one for skills such as
;// change to fox/tiger form or the speed buff skills. Pass your own
;//Id if you wish to use buffs.
local $packet, $packetSize
$packet = '5000'
$packet &= _hex($skillId)
$packet &= '0001'
$packet &= _hex($targetId)
$packetSize = 12
sendPacket($packet, $packetSize, $pid)
EndFunc
Func initiateSettingUpCatShop($pid)
;//Starts setting up cat shop. This function is needed
;//before setting up the catshop.
local $packet, $packetSize
$packet = '5400'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func toggleFashionDisplay($pid)
;//Switches between fashion and regular appearance.
local $packet, $packetSize
$packet = '5500'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func acceptRez($pid)
;//Accept rez by a priest.
local $packet, $packetSize
$packet = '5700'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func increaseFlySpeed($start, $pid)
;//If start=1, start faster flying.
;//If start=0, stop faster flying
local $packet, $packetSize
$packet = '5A00'
$packet &= _hex($start)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func askMaleToCarry($playerId, $pid)
;//WHen female use this to ask a male playerId to carry you
local $packet, $packetSize
$packet = '5E00'
$packet &= _hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func askFemaleToBeCarried($playerId, $pid)
;//WHen female use this to ask a female playerId to be carried
local $packet, $packetSize
$packet = '5F00'
$packet &= _hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func acceptRequestByFemaleToBeCarried($playerId, $pid)
;//When female asks you to carry her use this to accept
local $packet, $packetSize
$packet = '6000'
$packet &= _hex($playerId)
$packet &= '00000000'
$packetSize = 10
sendPacket($packet, $packetSize, $pid)
EndFunc
Func acceptRequestByMaleToCarryYou($playerId, $pid)
;//When male asks you if you want to be carried, use this to accept.
local $packet, $packetSize
$packet = '6100'
$packet &= _hex($playerId)
$packet &= '00000000'
$packetSize = 10
sendPacket($packet, $packetSize, $pid)
EndFunc
Func releaseCarryMode($pid)
;//Stop carrying / being carried
local $packet, $packetSize
$packet = '6200'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func summonPet($petIndex, $pid)
;//summons pet at index petIndex. petIndex runs from
;//0 to 9, depending on how many slots you have unlocked
local $packet, $packetSize
$packet = '6400'
$packet &= _hex($petIndex)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func recallPet($pid)
;//recalls your currently summoned pet
local $packet, $packetSize
$packet = '6500'
$packetSize = 2
sendPacket($packet, $packetSize, $pid)
EndFunc
Func setPetMode($petMode, $pid)
;//Sets the pet to the specified mode:
;//petMode=0 -> defensive
;//petMode=1 -> attack
;//petMode=2 -> manual
local $packet, $packetSize
$packet = '6700'
$packet &= '00000000'
$packet &= '03000000'
$packet &= _hex($petMode)
$packetSize = 14
sendPacket($packet, $packetSize, $pid)
EndFunc
Func setPetFollow($pid)
;//Pet follows the owner
local $packet, $packetSize
$packet = '6700'
$packet &= '00000000'
$packet &= '02000000'
$packet &= '00000000'
$packetSize = 14
sendPacket($packet, $packetSize, $pid)
EndFunc
Func setPetStop($pid)
;//Pet stops doing whatever it was doing
local $packet, $packetSize
$packet = '6700'
$packet &= '00000000'
$packet &= '02000000'
$packet &= '01000000'
$packetSize = 14
sendPacket($packet, $packetSize, $pid)
EndFunc
Func setPetAttack($targetId, $pid)
;//Sets pet to do standard attacks on the target.
local $packet, $packetSize
$packet = '6700'
$packet &= _hex($targetId)
$packet &= '01'
$packet &= '00000000'
$packetSize = 11
sendPacket($packet, $packetSize, $pid)
EndFunc
Func setPetUseSkill($targetId, $skillId, $pid)
;//Uses skillId on the targetId. Walks up to target if out of range.
local $packet, $packetSize
$packet = '6700'
$packet &= _hex($targetId)
$packet &= '04000000'
$packet &= _hex($skillId)
$packet &= '00'
$packetSize = 15
sendPacket($packet, $packetSize, $pid)
EndFunc
Func setPetStandardSkill($skillId, $pid)
;//Sets skillId to be the skill the pet uses whenever
;//it is cooled down
local $packet, $packetSize
$packet = '6700'
$packet &= '00000000'
$packet &= '05000000'
$packet &= _hex($skillId)
$packetSize = 14
sendPacket($packet, $packetSize, $pid)
EndFunc
Func useGenieSkill($skillId,$targetId, $pid)
;//Uses skillId on the target
local $packet, $packetSize
$packet = '7400'
$packet &= _hex($skillId, 4)
$packet &= '0001'
$packet &= _hex($targetId)
$packetSize = 10
sendPacket($packet, $packetSize, $pid)
EndFunc
Func feedEquippedGenie($invIndex, $amount, $pid)
;//Feeds the equipped genie the amount indicated from
;//inv index
local $packet, $packetSize
$packet = '7500'
$packet &= _hex($invIndex, 2)
$packet &= _hex($amount)
$packetSize = 7
sendPacket($packet, $packetSize, $pid)
EndFunc
Func acceptQuest($questId, $pid)
;//Accept a new quest
local $packet, $packetSize
$packet = '2500'
$packet &= '07000000'
$packet &= '04000000'
$packet &= _hex($questId)
$packetSize = 14
sendPacket($packet, $packetSize, $pid)
EndFunc
Func handInQuest($questId,$optionIndex, $pid)
;//Hand in quest, select reward optionIndex,
;//which runs from 0 for first option, to more.
local $packet, $packetSize
$packet = '2500'
$packet &= '06000000'
$packet &= '08000000'
$packet &= _hex($questId)
$packet &= _hex($optionIndex)
$packetSize = 18
sendPacket($packet, $packetSize, $pid)
EndFunc
Func sellItem($itemTypeId,$invIndex,$amount, $pid)
;//Sell $amount of items of type itemTypeId, located at invIndex
;//This function could be expanded to include selling multiple items
;//simultaneously. This would require setting nBytes equal to
;//4 + 12 * nDifferent items. Add the extra items on the same way
;//as the first item.
local $packet, $packetSize
$packet = '2500'
$packet &= '02000000'
$packet &= '10000000' ;//nBytes following
$packet &= '01000000' ;//nDifferent items being sold
$packet &= _hex($itemTypeId)
$packet &= _hex($invIndex)
$packet &= _hex($amount)
$packetSize = 26
sendPacket($packet, $packetSize, $pid)
EndFunc
Func buyItem($itemTypeId,$shopIndex,$amount, $pid)
;//Buy $amount of items of type itemTypeId, located at shopIndex
;//shopIndex is calculated as follows:
;//Each tab in the shop has 32 available spaces, index of each space
;//starts at 0, index of each tab starts at 0. $shopIndex would then be
;//shopIndex = tabIndex * 32 + spaceIndex
;//This function could be expanded to include buying multiple items
;//simultaneously. This would require setting nBytes equal to
;//8 + 12 * nDifferent items. Add the extra items on the same way
;//as the first item.
local $packet, $packetSize
$packet = '2500'
$packet &= '01000000'
$packet &= '14000000' ;//nBytes following
$packet &= '00000000'
$packet &= '01000000' ;//nDifferent items being bought
$packet &= _hex($itemTypeId)
$packet &= _hex($shopIndex)
$packet &= _hex($amount)
$packetSize = 30
sendPacket($packet, $packetSize, $pid)
EndFunc
Func repairAll($pid)
;//Repair all items
local $packet, $packetSize
$packet = '2500'
$packet &= '03000000'
$packet &= '06000000'
$packet &= 'FFFFFFFF'
$packet &= '0000'
$packetSize = 16
sendPacket($packet, $packetSize, $pid)
EndFunc
Func repairItem($itemTypeId, $isEquipped, $locationIndex, $pid)
;//repairs the item of type itemTypeId at locationIndex, if
;//isEquipped=1, location refers to equipment. If isEquipped=0,
;//location refers to inventory.
local $packet, $packetSize
$packet = '2500'
$packet &= '03000000'
$packet &= '06000000'
$packet &= _hex($itemTypeId)
$packet &= _hex($isEquipped, 2)
$packet &= _hex($locationIndex, 2)
$packetSize = 16
sendPacket($packet, $packetSize, $pid)
EndFunc
Func upgradeSkill($skillId, $pid)
;//Upgrades the requested skill by one level
local $packet, $packetSize
$packet = '2500'
$packet &= '09000000'
$packet &= '04000000'
$packet &= _hex($skillId)
$packetSize = 14
sendPacket($packet, $packetSize, $pid)
EndFunc
Func sendPacket($packet, $packetSize, $pid)
;//Declare local variables
Local $pRemoteThread, $vBuffer, $loop, $result, $OPcode, $processHandle, $packetAddress
;//Open process for given processId
$processHandle = memopen($pid)
;//Allocate memory for the OpCode and retrieve address for this
$functionAddress = DllCall($kernel32, 'int', 'VirtualAllocEx', 'int', $processHandle, 'ptr', 0, 'int', 0x46, 'int', 0x1000, 'int', 0x40)
;//Allocate memory for the packet to be sent and retrieve the address for this
$packetAddress = DllCall($kernel32, 'int', 'VirtualAllocEx', 'int', $processHandle, 'ptr', 0, 'int', $packetSize, 'int', 0x1000, 'int', 0x40)
;//Construct the OpCode for calling the 'SendPacket' function
$OPcode &= '60' ;//PUSHAD
$OPcode &= 'B8'&_hex($sendPacketFunction) ;//MOV EAX, sendPacketAddress
$OPcode &= '8B0D'&_hex($realBaseAddress) ;//MOV ECX, DWORD PTR [revBaseAddress]
$OPcode &= '8B4920' ;//MOV ECX, DWORD PTR [ECX+20]
$OPcode &= 'BF'&_hex($packetAddress[0]) ;//MOV EDI, packetAddress //src pointer
$OPcode &= '6A'&_hex($packetSize,2) ;//PUSH packetSize //size
$OPcode &= '57' ;//PUSH EDI
$OPcode &= 'FFD0' ;//CALL EAX
$OPcode &= '61' ;//POPAD
$OPcode &= 'C3' ;//RET
;//Put the OpCode into a struct for later memory writing
$vBuffer = DllStructCreate('byte[' & StringLen($OPcode) / 2 & ']')
For $loop = 1 To DllStructGetSize($vBuffer)
DllStructSetData($vBuffer, 1, Dec(StringMid($OPcode, ($loop - 1) * 2 + 1, 2)), $loop)
Next
;//Write the OpCode to previously allocated memory
DllCall($kernel32, 'int', 'WriteProcessMemory', 'int', $processHandle, 'int', $functionAddress[0], 'int', DllStructGetPtr($vBuffer), 'int', DllStructGetSize($vBuffer), 'int', 0)
;//Put the packet into a struct for later memory writing
$vBuffer = DllStructCreate('byte[' & StringLen($packet) / 2 & ']')
For $loop = 1 To DllStructGetSize($vBuffer)
DllStructSetData($vBuffer, 1, Dec(StringMid($packet, ($loop - 1) * 2 + 1, 2)), $loop)
Next
;//Write the packet to previously allocated memory
DllCall($kernel32, 'int', 'WriteProcessMemory', 'int', $processHandle, 'int', $packetAddress[0], 'int', DllStructGetPtr($vBuffer), 'int', DllStructGetSize($vBuffer), 'int', 0)
;//Create a remote thread in order to run the OpCode
$hRemoteThread = DllCall($kernel32, 'int', 'CreateRemoteThread', 'int', $processHandle, 'int', 0, 'int', 0, 'int', $functionAddress[0], 'ptr', 0, 'int', 0, 'int', 0)
;//Wait for the remote thread to finish
Do
$result = DllCall('kernel32.dll', 'int', 'WaitForSingleObject', 'int', $hRemoteThread[0], 'int', 50)
Until $result[0] <> 258
;//Close the handle to the previously created remote thread
DllCall($kernel32, 'int', 'CloseHandle', 'int', $hRemoteThread[0])
;//Free the previously allocated memory
DllCall($kernel32, 'ptr', 'VirtualFreeEx', 'hwnd', $processHandle, 'int', $functionAddress[0], 'int', 0, 'int', 0x8000)
DllCall($kernel32, 'ptr', 'VirtualFreeEx', 'hwnd', $processHandle, 'int', $packetAddress[0], 'int', 0, 'int', 0x8000)
;//Close the Process
memclose($processHandle)
Return True
EndFunc
Func memopen($pid)
Local $mid = DllCall($kernel32, 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', 1, 'int', $pid)
Return $mid[0]
EndFunc
Func memclose($mid)
DllCall($kernel32, 'int', 'CloseHandle', 'int', $mid)
EndFunc
Func _hex($Value, $size=8)
Local $tmp1, $tmp2, $i
$tmp1 = StringRight("000000000" & Hex($Value),$size)
For $i = 0 To StringLen($tmp1) / 2 - 1
$tmp2 = $tmp2 & StringMid($tmp1, StringLen($tmp1) - 1 - 2 * $i, 2)
Next
Return $tmp2
EndFunc
The following regular expression should get you the base address for the partyInvCounter
PHP Code:
$search = StringRegExp($data,
'8B87(.{8})' & _ ;//mov eax, dword_A62C28[edi]
'8B.{6}' & _ ;//mov ecx, [esp+60h+var_40]
'03C6' & _ ;//add eax, esi
'8B50.{2}' & _ ;//mov edx, [eax+0Ch]
'2BCA' & _ ;//sub ecx, edx
'8B50.{2}' & _ ;//mov edx, [eax+8]
'3BCA',2) ;//call dword ptr [edx+1Ch]
ConsoleWrite('invCounterBase=0x'&hex(dec(rev($search[1]))+0x20)&@CRLF)
The value you are looking for in the accept party invite is then:
PHP Code:
$partyInviteCounter = readMemory(invCounterBase+0x14)
Find skillIds here:
If you need to find the address for the sendPacket function you can use the offset retriever included in this
some stuff on sending movement packets
For an example of code in C# look
In some cases it might be preferable to use actionStructs instead of packets,  's the example code in C# you could use.
|
|
|
|
06/19/2016, 09:28
|
#218
|
elite*gold: 0
Join Date: Nov 2013
Posts: 32
Received Thanks: 1
|
yes i got the code from that link buat i still got error
Quote:
HotKeySet("{Home}", "test1") ; <<< run from this
Func test1()
inviteParty1(-edit-) ; party member
sleep(3000)
acceptPartyInvite2(-edit-) ; leader id
EndFunc
Func inviteParty1($playerId)
$playerId = $playerId
$GAME_TITLE = "Perfect World 1"
$pid = WinGetProcess($GAME_TITLE)
inviteParty($playerId, $pid)
EndFunc
Func acceptPartyInvite2($playerId)
$playerId = $playerId
$GAME_TITLE = "Perfect World 2"
$pid = WinGetProcess($GAME_TITLE)
$invCounterBase = 0x00d616c8 ; <<< still don't how to find | my $ADDRESS_BASE = 0xd56b8c
$partyInviteCounter = memread(memread($invCounterBase)+0x14)
acceptPartyInvite($playerId, $partyInviteCounter, $pid)
EndFunc
Func inviteParty($playerId, $pid)
;//Invite playerId to your party.
local $packet, $packetSize
$packet = '1B00'
$packet &= _hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc
Func acceptPartyInvite($playerId, $partyInviteCounter, $pid)
;//Accept an invite from playerId. partyInviteCounter is a counter that
;//is kept based on the amount of party invites you've had. See post
;//on how to find that value.
local $packet, $packetSize
$packet = '1C00'
$packet &= _hex($partyInviteCounter)
$packet &= _hex($playerId)
$packetSize = 10
sendPacket($packet, $packetSize, $pid)
EndFunc
|
|
|
|
06/19/2016, 14:07
|
#219
|
elite*gold: 0
Join Date: Dec 2009
Posts: 70
Received Thanks: 15
|
DurianMontong keep in mind that you're sharing your playerID here on the forum. If i would be you, i would remove them.
The current partyinv_Adress is 0xE67C80
To accept a partyinvite you need the leaderID and the playerPID of the player like this: acceptPartyInvite($LeaderId, $partyInviteCounter, $Playerpid)
To invite someone you need the playerID of who you invite and the leaderPID because he does the action like this: inviteParty($playerId, $LeaderPid)
Here are the functions:
$GAME_PROCESS = _MemoryOpen($client)
$partyInvitePointer = _MemoryRead($PARTYINV_ADDRESS, $GAME_PROCESS)
$partyInviteCounter = _MemoryRead($partyInvitePointer + 0x14, $GAME_PROCESS)
acceptPartyInvite($playerIdLead, $partyInviteCounter, $client)
Func acceptPartyInvite($LeaderId, $partyInviteCounter, $pid)
;//Accept an invite from playerId. partyInviteCounter is a counter that
;//is kept based on the amount of party invites you've had. See post
;//on how to find that value.
Local $packet, $packetSize
$packet = '1C00'
$packet &= _RevHex($LeaderId)
$packet &= _RevHex($partyInviteCounter)
$packetSize = 0xA
sendPacket($packet, $packetSize, $pid)
EndFunc ;==>acceptPartyInvite
Func inviteParty($playerId, $pid)
;//Invite playerId to your party.
Local $packet, $packetSize
$packet = '1B00'
$packet &= _Hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc ;==>inviteParty
|
|
|
06/19/2016, 23:24
|
#220
|
elite*gold: 0
Join Date: Nov 2013
Posts: 32
Received Thanks: 1
|
still cannot accept invite from leader
Func Go1()
invitePartyPID(12xxxx72) ; <<< memberID this work
sleep(5000)
$GAME_TITLE = "2"
$pid = WinGetProcess($GAME_TITLE)
acceptPartyInvitePID(14xxxx52, $pid) ; < leaderID <<< this is not work
EndFunc
Func acceptPartyInvitePID($playerIdLead, $pid)
$GAME_TITLE = "2"
$pid = WinGetProcess($GAME_TITLE)
$GAME_PROCESS = _MemoryOpen($pid)
$partyInvitePointer = _MemoryRead($PARTYINV_ADDRESS, $GAME_PROCESS)
$partyInviteCounter = _MemoryRead($partyInvitePointer + 0x14, $GAME_PROCESS)
acceptPartyInvite($playerIdLead, $partyInviteCounter, $pid)
EndFunc
Func invitePartyPID($playerId)
$GAME_TITLE = "1"
$pid = WinGetProcess($GAME_TITLE)
inviteParty($playerId, $pid)
EndFunc
Func acceptPartyInvite($LeaderId, $partyInviteCounter, $pid)
;//Accept an invite from playerId. partyInviteCounter is a counter that
;//is kept based on the amount of party invites you've had. See post
;//on how to find that value.
Local $packet, $packetSize
$packet = '1C00'
$packet &= _RevHex($LeaderId)
$packet &= _RevHex($partyInviteCounter)
$packetSize = 0xA
sendPacket($packet, $packetSize, $pid)
EndFunc ;==>acceptPartyInvite
Func inviteParty($playerId, $pid)
;//Invite playerId to your party.
Local $packet, $packetSize
$packet = '1B00'
$packet &= _Hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc ;==>inviteParty
Func _RevHex($floatval) ; <<< is this true or wrong function
$sF = DllStructCreate("float")
$sB = DllStructCreate("ptr", DllStructGetPtr($sF))
If $floatval = "" Then Exit
DllStructSetData($sF, 1, $floatval)
$return=DllStructGetData($sB, 1)
Return $return
EndFunc
|
|
|
06/21/2016, 00:54
|
#221
|
elite*gold: 0
Join Date: Dec 2009
Posts: 70
Received Thanks: 15
|
Quote:
Originally Posted by DurianMontong
still cannot accept invite from leader
Func Go1()
invitePartyPID(12xxxx72) ; <<< memberID this work
sleep(5000)
$GAME_TITLE = "2"
$pid = WinGetProcess($GAME_TITLE)
acceptPartyInvitePID(14xxxx52, $pid) ; < leaderID <<< this is not work
EndFunc
Func acceptPartyInvitePID($playerIdLead, $pid)
$GAME_TITLE = "2"
$pid = WinGetProcess($GAME_TITLE)
$GAME_PROCESS = _MemoryOpen($pid)
$partyInvitePointer = _MemoryRead($PARTYINV_ADDRESS, $GAME_PROCESS)
$partyInviteCounter = _MemoryRead($partyInvitePointer + 0x14, $GAME_PROCESS)
acceptPartyInvite($playerIdLead, $partyInviteCounter, $pid)
EndFunc
Func invitePartyPID($playerId)
$GAME_TITLE = "1"
$pid = WinGetProcess($GAME_TITLE)
inviteParty($playerId, $pid)
EndFunc
Func acceptPartyInvite($LeaderId, $partyInviteCounter, $pid)
;//Accept an invite from playerId. partyInviteCounter is a counter that
;//is kept based on the amount of party invites you've had. See post
;//on how to find that value.
Local $packet, $packetSize
$packet = '1C00'
$packet &= _RevHex($LeaderId)
$packet &= _RevHex($partyInviteCounter)
$packetSize = 0xA
sendPacket($packet, $packetSize, $pid)
EndFunc ;==>acceptPartyInvite
Func inviteParty($playerId, $pid)
;//Invite playerId to your party.
Local $packet, $packetSize
$packet = '1B00'
$packet &= _Hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc ;==>inviteParty
Func _RevHex($floatval) ; <<< is this true or wrong function
$sF = DllStructCreate("float")
$sB = DllStructCreate("ptr", DllStructGetPtr($sF))
If $floatval = "" Then Exit
DllStructSetData($sF, 1, $floatval)
$return=DllStructGetData($sB, 1)
Return $return
EndFunc
|
This is the way how i do it(to invite all clients on the computer):
Func InvBuffers($LeaderPID)
$client = 0
$LIST = ProcessList("elementclient.exe")
$ADDRESS_BASE = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "ADDRESS_BASE", "")
$PlayerOffSet = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "PlayerOffSet", "")
$PlayerIdOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "PlayerIdOffset", "")
$PARTYINV_ADDRESS = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "PARTYINV_ADDRESS", "")
$pid = $LeaderPID
$hprocess = _MemoryOpen($pid)
$POINTER_BASE = _MemoryRead(_MemoryRead($ADDRESS_BASE, $hprocess) + 0x1C, $hprocess)
$POINTER_CHAR = _MemoryRead($POINTER_BASE + $PlayerOffSet, $hprocess)
$playerIdLead = _MemoryRead($POINTER_CHAR + $PlayerIdOffset, $hprocess)
_MemoryClose($pid)
$Done_Count = 0
While $Done_Count <> 2
$ProcessCount = 0
While $ProcessCount <> $LIST[0][0]
$ProcessCount = $ProcessCount + 1
$client = $LIST[$ProcessCount][1]
If $client <> $pid Then
If $Done_Count = 0 Then
$hprocess = _MemoryOpen($client)
$POINTER_BASE = _MemoryRead(_MemoryRead($ADDRESS_BASE, $hprocess) + 0x1C, $hprocess)
$POINTER_CHAR = _MemoryRead($POINTER_BASE + $PlayerOffSet, $hprocess)
$playerId = _MemoryRead($POINTER_CHAR + $PlayerIdOffset, $hprocess)
inviteParty($playerId, $pid)
_MemoryClose($client)
EndIf
If $Done_Count = 1 Then
$GAME_PROCESS = _MemoryOpen($client)
$partyInvitePointer = _MemoryRead($PARTYINV_ADDRESS, $GAME_PROCESS)
$partyInviteCounter = _MemoryRead($partyInvitePointer + 0x14, $GAME_PROCESS)
acceptPartyInvite($playerIdLead, $partyInviteCounter, $client)
_MemoryClose($client)
EndIf
EndIf
WEnd
$Done_Count = $Done_Count + 1
Sleep(1000)
WEnd
EndFunc ;==>InvBuffers
Func inviteParty($playerId, $pid)
;//Invite playerId to your party.
Local $packet, $packetSize
$packet = '1B00'
$packet &= _Hex($playerId)
$packetSize = 6
sendPacket($packet, $packetSize, $pid)
EndFunc ;==>inviteParty
Func _Hex($VALUE, $SIZE = 8, $TYPE = "int")
Local $tmp1, $tmp2, $i
If ($TYPE = "int") Then
$tmp1 = StringRight("000000000" & Hex($VALUE), $SIZE)
ElseIf ($TYPE = "float") Then
$tmp1 = StringRight("000000000" & _FloatToHex($VALUE), $SIZE)
EndIf
For $i = 0 To StringLen($tmp1) / 2 - 1
$tmp2 = $tmp2 & StringMid($tmp1, StringLen($tmp1) - 1 - 2 * $i, 2)
Next
Return $tmp2
EndFunc ;==>_Hex
Func acceptPartyInvite($playerId, $partyInviteCounter, $pid)
;//Accept an invite from playerId. partyInviteCounter is a counter that
;//is kept based on the amount of party invites you've had. See post
;//on how to find that value.
Local $packet, $packetSize
$packet = '1C00'
$packet &= _RevHex($playerId)
$packet &= _RevHex($partyInviteCounter)
$packetSize = 0xA
sendPacket($packet, $packetSize, $pid)
EndFunc ;==>acceptPartyInvite
Func _RevHex($VALUE, $SIZE = 8, $TYPE = "int")
Local $TEMP1, $TEMP2
If ($TYPE = "int") Then
$TEMP1 = StringRight("000000000" & Hex($VALUE), $SIZE)
ElseIf ($TYPE = "float") Then
$TEMP1 = StringRight("000000000" & _FloatToHex($VALUE), $SIZE)
EndIf
For $i = 0 To StringLen($TEMP1) / 2 - 1
$TEMP2 &= StringMid($TEMP1, StringLen($TEMP1) - 1 - 2 * $i, 2)
Next
Return $TEMP2
EndFunc ;==>_RevHex
Func _FloatToHex($floatval)
$sF = DllStructCreate("float")
$sB = DllStructCreate("ptr", DllStructGetPtr($sF))
If $floatval = "" Then Exit
DllStructSetData($sF, 1, $floatval)
$return = DllStructGetData($sB, 1)
Return $return
EndFunc ;==>_FloatToHex
Hope that i didn't miss anything, else let me know. You just have to build it together and get the Leaderpid when calling
Here are the current offsets(pick what you need):
ADDRESS_BASE=0xE5B2A4
ADDRESS_SENDPACKET=0x81F130
ADDRESS_AUTOPATH=0x4592F0
ADDRESS_ACTION1=0x004C8480
ADDRESS_ACTION2=0x004CE970
ADDRESS_ACTION3=0x004C8A70
ADDRESS_GATHER=0x4BDE00
ADDRESS_CASTSKILL=0x4B5E70
PARTYINV_ADDRESS=0xE67C80
ADDRESS_INSTANCE_BASE=0xE5BA4C
OFFSET_ACTIONBASE=0x1500
PlayerOffSet=0x34
PlayerIdOffset=0x4B8
PlayerParty_Offset=0x7CC
PartyCount_Offset=0x18
InventorySizeOffset=0x14
InventoryListOffset=0x10A0
PlayerNpcWindow=0xEAE
QuestList_Offset=0x1508
PlayerTransportMode_Offset=0x708
bufflist=0x390
buffcount=0x398
PlayerSkill_Offset=0x152C
SkillID_Offset=8
SkillCurCooldown_Offset=16
SkillID_Offset=8
SkillLVL_Offset=12
SkillCurCooldown_Offset=16
SkillCD_Offset=20
NpcLVLOffset=0x120
NpcHPOffset=0x154
NpcHPmaxOffset=0x184
NpcSpecialOffset=0x244
PlayerTarget_Offset=0x5A4
LoginAdress=0xDC2D00
XposOffset=0x3C
YposOffset=0x44
ZposOffset=0x40
NpcHPOffset=0x128
NpcHPmaxOffset=0x17C
NpcListOffset=0x20
NpcCounterOffset=0x18
sortedNpcListOffset=0x5C
NpcUIDOffset=0x114
NpcX=0x3C
NpcY=0x44
NpcZ=0x40
NpcNameOffset=0x25C
NpcIDOffset=0x118
XposOffset=0x3C
YposOffset=0x44
ZposOffset=0x40
PlayerHPOffset=0x4CC
PlayerHPmaxOffset=0x520
HealPercentage=90
MpPercentage=30
PlayerMPOffset=0x4D0
PlayerMPmaxOffset=0x524
PlayerFlyerOffset=0x5E0
UnfreezeOffset=0x4EC
PartyCount_Offset=0x18
NpcUIDOffset=0x114
PlayerNameOffset=0x6FC
PlayerTarget_Offset=0x5A4
ADDRESS_PlayerLVL=0xE7DE48
CoinOffset=0x5A8
PlayerFlyerOffset=0x5E0
PlayerGenie_Offset=0x408
GenieEnergy_Offset=0xAC
PlayerClass_Offset=0x700
|
|
|
06/21/2016, 03:23
|
#222
|
elite*gold: 0
Join Date: Nov 2013
Posts: 32
Received Thanks: 1
|
sasukezero do you have func() to open npc dialog but auto fill uniqueID in some dungeon like inside nirvana, npc always reset uniqueID if we reEnter dungeon
and if you please share func() buy item from catshop
|
|
|
06/21/2016, 05:46
|
#223
|
elite*gold: 0
Join Date: Jul 2011
Posts: 145
Received Thanks: 97
|
Quote:
Originally Posted by DurianMontong
sasukezero do you have func() to open npc dialog but auto fill uniqueID in some dungeon like inside nirvana, npc always reset uniqueID if we reEnter dungeon
and if you please share func() buy item from catshop
|
The way you do that is to scan through the NPC array which is in a section of memory for various lists. The NPC array contains both mobs and friendly NPCs.
Here's what mine looks like though it can be modified to suit your needs
Code:
Func NPCArray()
$POINTER_BASE = _MemoryRead(_MemoryRead($ADDRESS_BASE, $GAME_PROCESS) + 0x1C, $GAME_PROCESS)
$SORTEDLIST = _MemoryRead($POINTER_BASE + 0x1C, $GAME_PROCESS)
$NPCBASE = _MemoryRead($SORTEDLIST + $NpcListOffset, $GAME_PROCESS)
$NPCCOUNT = _MemoryRead($NPCBASE + $NpcCounterOffset, $GAME_PROCESS)
If $NPCCOUNT = 0 Then Return
$NPCLIST = _MemoryRead($NPCBASE + $sortedNpcListOffset, $GAME_PROCESS)
Dim $ARRAY[$NPCCOUNT][10]
For $i = 0 To $NPCCOUNT - 1
$NPC = _MemoryRead($NPCLIST + $i*4, $GAME_PROCESS)
If ($NPC <> 0 And _MemoryRead($NPC + $NpcUIDOffset, $GAME_PROCESS)) Then
$ARRAY[$i][0] = _MemoryRead($NPC + $NpcUIDOffset, $GAME_PROCESS) ;UID, target for skills etc
$ARRAY[$i][1] = _MemoryRead($NPC + $NpcIDOffset, $GAME_PROCESS) ;ID, like pwdb
$ARRAY[$i][2] = _MemoryRead(_MemoryRead($NPC + $NpcNameOffset, $GAME_PROCESS), $GAME_PROCESS, 'wchar[100]') ;name
$ARRAY[$i][3] = _MemoryRead($NPC + $NpcStatusOffset, $GAME_PROCESS) ;status (is it dead?)
if $ARRAY[$i][2] == "" then $ARRAY[$i][2] = "NoName " & $ARRAY[$i][1]
$ARRAY[$i][4] = _MemoryRead($NPC + $NpcX, $GAME_PROCESS, 'float') ;X Coord in Map
$ARRAY[$i][5] = _MemoryRead($NPC + $NpcY, $GAME_PROCESS, 'float') ;y Coord in Map
$ARRAY[$i][6] = _MemoryRead($NPC + $NpcZ, $GAME_PROCESS, 'float') ;Z Coord or Vertical Altitude
$ARRAY[$i][7] = _MemoryRead($NPC + $NpcHPOffset, $GAME_PROCESS) ;HP, is 0 if unselected
$ARRAY[$i][8] = _MemoryRead($NPC + $NpcHPmaxOffset, $GAME_PROCESS) ;Max HP
$ARRAY[$i][9] = _MemoryRead($NPC + 0x2DC, $GAME_PROCESS) ;attack animation?
EndIf
Next
;_ArrayDisplay($ARRAY)
Return $ARRAY
EndFunc
You'd want to make a function that looks through that array for NPCs with a particular NPC id in [1] and return the unique id [0]. You could also search by the name in [2]. I have a lot of specialized functions for searching this array to find NPCs that are closest to the player or NPCs closest to certain positions or NPCs that are optimal target choices for AOEs, stuff like that.
|
|
|
06/21/2016, 12:11
|
#224
|
elite*gold: 0
Join Date: Nov 2013
Posts: 32
Received Thanks: 1
|
Quote:
Originally Posted by jasty
The way you do that is to scan through the NPC array which is in a section of memory for various lists. The NPC array contains both mobs and friendly NPCs.
Here's what mine looks like though it can be modified to suit your needs
Code:
Func NPCArray()
$POINTER_BASE = _MemoryRead(_MemoryRead($ADDRESS_BASE, $GAME_PROCESS) + 0x1C, $GAME_PROCESS)
$SORTEDLIST = _MemoryRead($POINTER_BASE + 0x1C, $GAME_PROCESS)
$NPCBASE = _MemoryRead($SORTEDLIST + $NpcListOffset, $GAME_PROCESS)
$NPCCOUNT = _MemoryRead($NPCBASE + $NpcCounterOffset, $GAME_PROCESS)
If $NPCCOUNT = 0 Then Return
$NPCLIST = _MemoryRead($NPCBASE + $sortedNpcListOffset, $GAME_PROCESS)
Dim $ARRAY[$NPCCOUNT][10]
For $i = 0 To $NPCCOUNT - 1
$NPC = _MemoryRead($NPCLIST + $i*4, $GAME_PROCESS)
If ($NPC <> 0 And _MemoryRead($NPC + $NpcUIDOffset, $GAME_PROCESS)) Then
$ARRAY[$i][0] = _MemoryRead($NPC + $NpcUIDOffset, $GAME_PROCESS) ;UID, target for skills etc
$ARRAY[$i][1] = _MemoryRead($NPC + $NpcIDOffset, $GAME_PROCESS) ;ID, like pwdb
$ARRAY[$i][2] = _MemoryRead(_MemoryRead($NPC + $NpcNameOffset, $GAME_PROCESS), $GAME_PROCESS, 'wchar[100]') ;name
$ARRAY[$i][3] = _MemoryRead($NPC + $NpcStatusOffset, $GAME_PROCESS) ;status (is it dead?)
if $ARRAY[$i][2] == "" then $ARRAY[$i][2] = "NoName " & $ARRAY[$i][1]
$ARRAY[$i][4] = _MemoryRead($NPC + $NpcX, $GAME_PROCESS, 'float') ;X Coord in Map
$ARRAY[$i][5] = _MemoryRead($NPC + $NpcY, $GAME_PROCESS, 'float') ;y Coord in Map
$ARRAY[$i][6] = _MemoryRead($NPC + $NpcZ, $GAME_PROCESS, 'float') ;Z Coord or Vertical Altitude
$ARRAY[$i][7] = _MemoryRead($NPC + $NpcHPOffset, $GAME_PROCESS) ;HP, is 0 if unselected
$ARRAY[$i][8] = _MemoryRead($NPC + $NpcHPmaxOffset, $GAME_PROCESS) ;Max HP
$ARRAY[$i][9] = _MemoryRead($NPC + 0x2DC, $GAME_PROCESS) ;attack animation?
EndIf
Next
;_ArrayDisplay($ARRAY)
Return $ARRAY
EndFunc
You'd want to make a function that looks through that array for NPCs with a particular NPC id in [1] and return the unique id [0]. You could also search by the name in [2]. I have a lot of specialized functions for searching this array to find NPCs that are closest to the player or NPCs closest to certain positions or NPCs that are optimal target choices for AOEs, stuff like that.
|
i am still  could you give me example to use it 1 or 2 npc
like
Func Try1()
startNpcDialogue($ARRAY, $pid)
EndFunc
|
|
|
06/21/2016, 14:25
|
#225
|
elite*gold: 0
Join Date: Dec 2009
Posts: 70
Received Thanks: 15
|
Quote:
Originally Posted by DurianMontong
i am still  could you give me example to use it 1 or 2 npc
like
Func Try1()
startNpcDialogue($ARRAY, $pid)
EndFunc
|
It seems like, that you need to learn some basic understanding of programming languages and their syntax. That is something you have to learn yourself and we cannot teach you. The array itself has multiple information that it carries. What you need is one npc of the whole array list of npcs and then the UID which is saved first and in the first column.
So first of all you need to get the npc you want from the whole list like this here:
Func NPCArrayFilter($Filter, $pid)
$ADDRESS_BASE = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "ADDRESS_BASE", "")
$NpcListOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcListOffset", "")
$NpcCounterOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcCounterOffset", "")
$sortedNpcListOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "sortedNpcListOffset", "")
$NpcUIDOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcUIDOffset", "")
$NpcX = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcX", "")
$NpcY = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcY", "")
$NpcZ = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcZ", "")
$NpcNameOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcNameOffset", "")
$NpcHPOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcHPOffset", "")
$NpcHPmaxOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcHPmaxOffset", "")
$NpcIDOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "NpcIDOffset", "")
$SORTEDLISTOffset = IniRead(@ScriptDir & "\IniLogs\Offsets.ini", "Offsets", "SORTEDLISTOffset", "")
$GAME_PROCESS = _MemoryOpen($pid)
$POINTER_BASE = _MemoryRead(_MemoryRead($ADDRESS_BASE, $GAME_PROCESS) + 0x1C, $GAME_PROCESS)
$SORTEDLIST = _MemoryRead($POINTER_BASE + $SORTEDLISTOffset, $GAME_PROCESS)
$NPCBASE = _MemoryRead($SORTEDLIST + $NpcListOffset, $GAME_PROCESS)
$NPCCOUNT = _MemoryRead($NPCBASE + $NpcCounterOffset, $GAME_PROCESS)
$NPCLIST = _MemoryRead($NPCBASE + $sortedNpcListOffset, $GAME_PROCESS)
If $NPCCOUNT = 0 Then Return
Dim $array[$NPCCOUNT][11]
For $i = 0 To $NPCCOUNT - 1
$NPC = _MemoryRead($NPCLIST + $i * 4, $GAME_PROCESS)
If ($NPC <> 0 And _MemoryRead($NPC + $NpcUIDOffset, $GAME_PROCESS)) Then
$array[$i][0] = _MemoryRead($NPC + $NpcUIDOffset, $GAME_PROCESS) ; unique ID
$array[$i][1] = _MemoryRead($NPC + $NpcIDOffset, $GAME_PROCESS) ; ID0
$array[$i][2] = _MemoryRead(_MemoryRead($NPC + $NpcNameOffset, $GAME_PROCESS), $GAME_PROCESS, 'wchar[100]')
$array[$i][4] = _MemoryRead($NPC + $NpcX, $GAME_PROCESS, 'float') ;X Coord in Map
$array[$i][5] = _MemoryRead($NPC + $NpcY, $GAME_PROCESS, 'float') ;y Coord in Map
$array[$i][6] = _MemoryRead($NPC + $NpcZ, $GAME_PROCESS, 'float') ;Z Coord or Vertical Altitude
$array[$i][7] = _MemoryRead($NPC + $NpcHPOffset, $GAME_PROCESS) ; HP
$array[$i][8] = _MemoryRead($NPC + $NpcHPmaxOffset, $GAME_PROCESS) ; Max HP
EndIf
Next
For $i = ($NPCCOUNT - 1) To 0 Step -1
If StringInStr($array[$i][2], $Filter) = 0 Then
_ArrayDelete($array, $i)
EndIf
Next
Return $array
EndFunc ;==>NPCArrayFilter
To work with it you just have to use it like this:
$NPCFilter = "SOME NPC YOU HAVE TO SET"
$array = NPCArrayFilter($NPCFilter, $pid)
$NPCFilteredUID = $array[0][0]
startNpcDialogue($NPCFilteredUID, $pid)
|
|
|
 |
|
Similar Threads
|
WTS 4 lvl 50 -Red eclipse
04/27/2013 - Star Wars: The Old Republic Trading - 1 Replies
================High-End Account================
Hi there
I want to sell my High-end SWTOR account wich is based on the server " The Red-eclipse "
I am a Hard-core gamer and always want the best gear for my characters, this is no diferant with this account. I am a well known and respected player on this server ( the char names are in good standing :). How ever i dont have the time to play anymore wich ofcourse breaks my heart but my career comes first.
Here by i am offering my...
|
Fly For Eclipse !!
07/18/2011 - Flyff Private Server - 5 Replies
Kann es sein das der Server oft abkackt?:D
und wenn ja wie lange bleibt er dann off??
|
Eclipse Flyff
07/12/2011 - Flyff Trading - 2 Replies
Hey, hat jemand Interesse an mehrere Imba Eclipse Flyff Chars?
http://www7.pic-upload.de/thumb/01.06.11/y9n1bcfi twcx.png
Hab noch viele Rare Item's wo du locker 500b zusammen bekommst
hab noch mehrere Imba chars.
Interesse? dann schreib hier :>
|
My Eclipse to your Demon.
04/04/2011 - Flyff Trading - 0 Replies
Hi dears..
I'm Trading all my itens and money on Eclipse flyff to itens or money on demon flyff.
On Eclipse,I have Many Solar Weapon's,Cs Sets,Bike,Pets
and so much money.
If you are interested,add me on msn.
[email protected]
:mofo:
|
C++ in Eclipse
02/01/2010 - C/C++ - 2 Replies
Huhu,
kann mir mal bitte jemand helfen. Ich habe im Internet ein Tutorial befolgt um C++/C auf Eclipse zu programmieren. Ich habe alles befolgt wies sein sollte, laut Tutorial. Wenn ich nun build mache, dann kommt folgendes:
Habe die Eclipse CDT und MinGW installiert.
Habe danach auch ein wenig gegoogelt und nichts hilfreiches gefunden. Ich vermute, dass ich irgendwo noch einen Pfad verändern muss, aber ich weiß nicht wo.
|
All times are GMT +1. The time now is 18:43.
|
|