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.
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.
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.
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.
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
;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])
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.
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
Func regularAttack($afterSkill, $pid)
;//Start with regular attacks. $afterskill is 1 if you
;//start attacking after using a skill.
local $packet, $packetSize
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.
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
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
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
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
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
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
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
Func startNpcDialogue($npcId, $pid)
;//Opens up an NPC's main menu. Is necessary before
;//accepting/handing in quests, buy/sell/repair
local $packet, $packetSize
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
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
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
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
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
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
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
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
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
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
Func handInQuest($questId,$optionIndex, $pid)
;//Hand in quest, select reward optionIndex,
;//which runs from 0 for first option, to more.
local $packet, $packetSize
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
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
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)
;//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])
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
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)
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
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
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
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
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
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
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.
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
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
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:
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.