[Python]Metin Finder by Eigenartig

09/04/2013 21:34 Eigenartig#31
Quote:
Originally Posted by oyuncu123987 View Post
I'm not very familiar with gamehacking but here is my servers mob proto (The part that includes metins)

Code:
	<Mob vnum="8001" name="???" gb2312name="Üzüntü Metini" type="2" rank="5" battle_type="3" level="5" event_type="0" mob_color="0" />
	<Mob vnum="8002" name="???" gb2312name="Dövüş Metini" type="2" rank="5" battle_type="3" level="10" event_type="0" mob_color="0" />
	<Mob vnum="8003" name="???" gb2312name="Savaş Metini" type="2" rank="5" battle_type="3" level="15" event_type="0" mob_color="0" />
	<Mob vnum="8004" name="???" gb2312name="Hırs Metini" type="2" rank="5" battle_type="3" level="20" event_type="0" mob_color="0" />
	<Mob vnum="8005" name="???" gb2312name="Siyah Metin" type="2" rank="5" battle_type="3" level="25" event_type="0" mob_color="0" />
	<Mob vnum="8006" name="???" gb2312name="Karanlık Metin" type="2" rank="5" battle_type="3" level="30" event_type="0" mob_color="0" />
	<Mob vnum="8007" name="???" gb2312name="Kıskançlık Metini" type="2" rank="5" battle_type="3" level="35" event_type="0" mob_color="0" />
	<Mob vnum="8008" name="???" gb2312name="Ruh Metini" type="2" rank="5" battle_type="3" level="40" event_type="0" mob_color="0" />
	<Mob vnum="8009" name="???" gb2312name="Gölge Metini" type="2" rank="5" battle_type="3" level="45" event_type="0" mob_color="0" />
	<Mob vnum="8010" name="???" gb2312name="Dayanıklılık Metini" type="2" rank="5" battle_type="3" level="50" event_type="0" mob_color="0" />
	<Mob vnum="8011" name="???" gb2312name="Şeytan Metini" type="2" rank="5" battle_type="3" level="55" event_type="0" mob_color="0" />
	<Mob vnum="8012" name="???" gb2312name="Lanet Metini" type="2" rank="5" battle_type="3" level="60" event_type="0" mob_color="0" />
	<Mob vnum="8013" name="???" gb2312name="Ölüm Metini" type="2" rank="5" battle_type="3" level="65" event_type="0" mob_color="0" />
	<Mob vnum="8014" name="???" gb2312name="Katil Metini" type="2" rank="5" battle_type="3" level="70" event_type="0" mob_color="0" />
	<Mob vnum="8015" name="???" gb2312name="Dayanıklılık Metini" type="2" rank="5" battle_type="3" level="50" event_type="0" mob_color="0" />
	<Mob vnum="8016" name="???" gb2312name="Şeytan Metini" type="2" rank="5" battle_type="3" level="55" event_type="0" mob_color="0" />
	<Mob vnum="8017" name="???" gb2312name="Lanet Metini" type="2" rank="5" battle_type="3" level="60" event_type="0" mob_color="0" />
	<Mob vnum="8018" name="???" gb2312name="Ölüm Metini" type="2" rank="5" battle_type="3" level="65" event_type="0" mob_color="0" />
	<Mob vnum="8019" name="???" gb2312name="Katil Metini" type="2" rank="5" battle_type="3" level="70" event_type="0" mob_color="0" />
	<Mob vnum="8020" name="???" gb2312name="Shinsoo Kayası" type="2" rank="5" battle_type="3" level="1" event_type="0" mob_color="0" />
	<Mob vnum="8021" name="???" gb2312name="Jinno Kayası" type="2" rank="5" battle_type="3" level="1" event_type="0" mob_color="0" />
	<Mob vnum="8022" name="???" gb2312name="Chunjo Kayası" type="2" rank="5" battle_type="3" level="1" event_type="0" mob_color="0" />
	<Mob vnum="8023" name="???" gb2312name="İmparatorluk Kayası" type="2" rank="5" battle_type="3" level="1" event_type="0" mob_color="0" />
	<Mob vnum="8024" name="???" gb2312name="Metin Pung-Ma" type="2" rank="5" battle_type="3" level="75" event_type="0" mob_color="16764879" />
	<Mob vnum="8025" name="???" gb2312name="Metin Ma-An" type="2" rank="5" battle_type="3" level="80" event_type="0" mob_color="16764879" />
	<Mob vnum="8026" name="???" gb2312name="Metin Tu-Young" type="2" rank="5" battle_type="3" level="85" event_type="0" mob_color="16764879" />
	<Mob vnum="8027" name="???" gb2312name="Metin Jeon-Un" type="2" rank="5" battle_type="3" level="90" event_type="0" mob_color="16764879" />
	<Mob vnum="8031" name="????" gb2312name="Dağ Metini" type="2" rank="5" battle_type="0" level="60" event_type="0" mob_color="16764879" />
	<Mob vnum="8032" name="????" gb2312name="İntikam Metini" type="2" rank="5" battle_type="0" level="60" event_type="0" mob_color="16764879" />
	<Mob vnum="8033" name="????" gb2312name="Kimsesizlik Metini" type="2" rank="5" battle_type="0" level="60" event_type="0" mob_color="16764879" />
	<Mob vnum="8034" name="????" gb2312name="Kibir Metini" type="2" rank="5" battle_type="0" level="60" event_type="0" mob_color="16764879" />
	<Mob vnum="8035" name="???" gb2312name="Kurtuluşun Metin'i" type="2" rank="5" battle_type="0" level="60" event_type="0" mob_color="16764879" />
	<Mob vnum="8036" name="?????" gb2312name="Hainliğin Metin'i" type="2" rank="5" battle_type="0" level="80" event_type="0" mob_color="16764879" />
	<Mob vnum="8037" name="?????" gb2312name="Mutsuzluğun Metin'i" type="2" rank="5" battle_type="0" level="60" event_type="0" mob_color="16764879" />
	<Mob vnum="8038" name="??????" gb2312name="Misilleme Metin'i" type="2" rank="5" battle_type="0" level="85" event_type="0" mob_color="16764879" />
	<Mob vnum="8039" name="??????" gb2312name="Gururun Metin'i" type="2" rank="5" battle_type="0" level="60" event_type="0" mob_color="16764879" />
Is it related? I got everything except root so if you have a chance to fix it, I can send you any data you need.
this is meaningless vid and vnum are different things xD
09/04/2013 22:17 oyuncu123987#32
Quote:
Originally Posted by Eigenartig View Post
this is meaningless vid and vnum are different things xD
How can i find them? I have everything except root.epk/.eix.
09/07/2013 02:58 Eigenartig#33
Quote:
Originally Posted by oyuncu123987 View Post
How can i find them? I have everything except root.epk/.eix.
file is the source of the problem. i'll change range through 3.000.000 or more...
09/10/2013 04:46 xike20#34
Hi Eigenartig.
Can you provide some "command" like "/Refresh" then we can use this Finder in our python script.
09/10/2013 06:09 Eigenartig#35
i changed range 600.000 to 2.000.000 ...

idk if vids in your server bigger than this :D
09/10/2013 11:05 oyuncu123987#36
[Only registered and activated users can see links. Click Here To Register...]

nope. Still nothing.
03/08/2014 12:40 easybreezy#37
How to open it ?
03/10/2014 11:35 LadySamia#38
kann mir das mal jemand auf Deutsch alles übersetzten? Ambesten per PN ^^ ?
Funktioniert das ding? Gibt es bessere??
lg
03/13/2014 12:03 CrhinoZ#39
Not work for Metin2 CZ...
Please update it. (y) ;-)
03/15/2014 17:44 riti69#40
Update plz
03/17/2014 12:17 berkankuran#41
thanks but i cant download why :S
03/17/2014 14:12 fox834#42
Range or it's globally?(I mean the metins on map)
08/20/2018 12:05 madagascar007#43
Here's the source code of metinfinder.pyc for those who wonder how it's made.

Code:
import ui
import chr
import chat
import player
import math
import app
import dbg

class MetinFinder(ui.ScriptWindow):
    Gui = []
    MetinList = []
    
    def __init__(self):
        self.Gui = []
        ui.ScriptWindow.__init__(self)
        self.AddGui()
        dbg.LogBox('Created by Eigenartig in 2013', 'Information')

    
    def __del__(self):
        self.Gui[0].Hide()
        ui.ScriptWindow.__del__(self)

    
    def AddGui(self):
        Gui = [
            [
                [
                    ui.ThinBoard,
                    ''],
                [
                    275,
                    320],
                [
                    0,
                    0],
                [
                    [
                        'SetCenterPosition',
                        [
                            '']]],
                [
                    'movable',
                    'float']],
            [
                [
                    ui.Button,
                    0],
                [
                    0,
                    0],
                [
                    243,
                    18],
                [
                    [
                        'SetUpVisual',
                        [
                            'd:/ymir work/ui/public/close_button_01.sub']],
                    [
                        'SetOverVisual',
                        [
                            'd:/ymir work/ui/public/close_button_02.sub']],
                    [
                        'SetDownVisual',
                        [
                            'd:/ymir work/ui/public/close_button_03.sub']],
                    [
                        'SetToolTipText',
                        [
                            'Close',
                            0,
                            -23]],
                    [
                        'SetEvent',
                        [
                            lambda : self.__del__()]]],
                []],
            [
                [
                    ui.SlotBar,
                    0],
                [
                    250,
                    225],
                [
                    10,
                    35 + 20],
                [],
                []],
            [
                [
                    ui.ListBoxEx,
                    0],
                [
                    0,
                    0],
                [
                    17,
                    50 + 20],
                [
                    [
                        'SetViewItemCount',
                        [
                            10]]],
                []],
            [
                [
                    ui.ScrollBar,
                    0],
                [
                    0,
                    0],
                [
                    240,
                    40 + 20],
                [
                    [
                        'SetScrollBarSize',
                        [
                            220]]],
                []],
            [
                [
                    ui.TextLine,
                    0],
                [
                    0,
                    0],
                [
                    70,
                    20],
                [
                    [
                        'SetDefaultFontName',
                        [
                            '']],
                    [
                        'SetText',
                        [
                            'Metin Finder by Eigenartig']],
                    [
                        'SetFontColor',
                        [
                            0.40000000000000002,
                            0.90000000000000002,
                            1.0]]],
                []],
            [
                [
                    ui.TextLine,
                    0],
                [
                    0,
                    0],
                [
                    17,
                    57],
                [
                    [
                        'SetDefaultFontName',
                        [
                            '']],
                    [
                        'SetText',
                        [
                            'VID:\t\t\t\tName:\t\t\t\tCoordinates:']],
                    [
                        'SetFontColor',
                        [
                            0.20000000000000001,
                            0.80000000000000004,
                            1.0]]],
                []],
            [
                [
                    ui.Button,
                    0],
                [
                    0,
                    0],
                [
                    40,
                    290],
                [
                    [
                        'SetUpVisual',
                        [
                            'd:/ymir work/ui/public/Large_button_01.sub']],
                    [
                        'SetOverVisual',
                        [
                            'd:/ymir work/ui/public/Large_button_02.sub']],
                    [
                        'SetDownVisual',
                        [
                            'd:/ymir work/ui/public/Large_button_03.sub']],
                    [
                        'SetText',
                        [
                            'Walk']],
                    [
                        'SetEvent',
                        [
                            lambda : self.YouwantaMetinHuh(0)]]],
                []],
            [
                [
                    ui.Button,
                    0],
                [
                    0,
                    0],
                [
                    135,
                    290],
                [
                    [
                        'SetUpVisual',
                        [
                            'd:/ymir work/ui/public/Large_button_01.sub']],
                    [
                        'SetOverVisual',
                        [
                            'd:/ymir work/ui/public/Large_button_02.sub']],
                    [
                        'SetDownVisual',
                        [
                            'd:/ymir work/ui/public/Large_button_03.sub']],
                    [
                        'SetText',
                        [
                            'Teleport']],
                    [
                        'SetEvent',
                        [
                            lambda : self.YouwantaMetinHuh(1)]]],
                []],
            [
                [
                    ui.Button,
                    0],
                [
                    0,
                    0],
                [
                    218,
                    16],
                [
                    [
                        'SetUpVisual',
                        [
                            'd:/ymir work/ui/game/guild/refresh_button_01.sub']],
                    [
                        'SetOverVisual',
                        [
                            'd:/ymir work/ui/game/guild/refresh_button_02.sub']],
                    [
                        'SetDownVisual',
                        [
                            'd:/ymir work/ui/game/guild/refresh_button_03.sub']],
                    [
                        'SetToolTipText',
                        [
                            'Refresh',
                            0,
                            -23]],
                    [
                        'SetEvent',
                        [
                            lambda : self.UpdateFileList()]]],
                []]]
        GuiParser(Gui, self.Gui)
        self.Gui[3].SetScrollBar(self.Gui[4])
        self.UpdateFileList()

    
    def UpdateFileList(self):
        
        try:
            aa = len(self.MetinList)
            for x in xrange(aa):
                del self.MetinList[0]
        except:
            pass

        self.Gui[3].RemoveAllItems()
        continue
        metinlist = []
        for i in metinlist:
            (x, y, z) = chr.GetPixelPosition(i)
            name = chr.GetNameByVID(i)
            self.Gui[3].AppendItem(Item('%s\t\t %s\t\t(%s, %s)' % (i, name, int(x) / 100, int(y) / 100)))
            metin_dict = {
                'VID': i,
                'NAME': name,
                'COORDX': x,
                'COORDY': y }
            self.MetinList.append(metin_dict)
        

    
    def YouwantaMetinHuh(self, type):
        ItemIndex = self.Gui[3].GetSelectedItem()
        if ItemIndex:
            pass
        1
        chat.AppendChat(chat.CHAT_TYPE_INFO, "You didn't choose anything!")
        return None
        SelectedItem = ItemIndex.GetText().split('\t\t ')
        for i in self.MetinList:
            vid = i['VID']
            if vid == int(SelectedItem[0]):
                if type == 0:
                    self.Walk(i['COORDX'], i['COORDY'])
                elif type == 1:
                    self.Teleport(i['COORDX'], i['COORDY'])
                
            
        

    
    def Walk(self, x, y):
        myVid = player.GetMainCharacterIndex()
        (myx, myy, myz) = player.GetMainCharacterPosition()
        distance = 135
        if myx < x:
            self.aimx = int(x) - distance
        else:
            self.aimx = int(x) + distance
        if myy < y:
            self.aimy = int(y) - distance
        else:
            self.aimy = int(y) + distance
        chr.MoveToDestPosition(int(myVid), int(self.aimx), int(self.aimy))

    
    def Teleport(self, aimx, aimy):
        (TmpX, TmpY, Count) = GetTmpTeleport(aimx, aimy)
        TmpCount = 0
        while TmpCount < Count:
            (TmpX, TmpY, Crap) = GetTmpTeleport(aimx, aimy)
            chr.SetPixelPosition(int(TmpX), int(TmpY))
            TmpCount += 1
            self.Debug()
        chr.SetPixelPosition(int(aimx), int(aimy))
        self.Debug()

    
    def Debug(self):
        player.SetSingleDIKKeyState(app.DIK_UP, TRUE)
        player.SetSingleDIKKeyState(app.DIK_UP, FALSE)



def GetTmpTeleport(DestX, DestY):
    (PlayerX, PlayerY, PlayerZ) = player.GetMainCharacterPosition()
    DifX = DestX - PlayerX
    DifY = DestY - PlayerY
    Vektor = DivideToFloat(2000, math.sqrt(DifX ** 2 + DifY ** 2))
    TempX = PlayerX + Vektor * DifX
    TempY = PlayerY + Vektor * DifY
    Count = DivideToFloat(DestX - PlayerX, Vektor * DifX)
    return (TempX, TempY, Count)


def DivideToFloat(x, y):
    
    try:
        return x * y ** -1
    except:
        return 0



def GuiParser(guiobjects, list):
    for object in guiobjects:
        Object = object[0][0]()
        if object[0][1] != '':
            Object.SetParent(list[object[0][1]])
        
        if object[1][0] + object[1][1] != 0:
            Object.SetSize(object[1][0], object[1][1])
        
        if object[2][0] + object[2][1] != 0:
            Object.SetPosition(object[2][0], object[2][1])
        
        for command in object[3]:
            cmd = command[0]
            attr = getattr(Object, cmd)
            if callable(attr):
                argument = command[1]
                lenght = len(argument)
                if lenght == 1:
                    if argument[0] == '':
                        attr()
                    else:
                        attr(argument[0])
                elif lenght == 2:
                    attr(argument[0], argument[1])
                elif lenght == 3:
                    attr(argument[0], argument[1], argument[2])
                elif lenght == 4:
                    attr(argument[0], argument[1], argument[2], argument[3])
                
            
        
        for flag in object[4]:
            Object.AddFlag(str(flag))
        
        Object.Show()
        list.append(Object)
    


class Item(ui.ListBoxEx.Item):
    
    def __init__(self, fileName):
        ui.ListBoxEx.Item.__init__(self)
        self.canLoad = 0
        self.text = fileName
        self.textLine = self._Item__CreateTextLine(fileName)

    
    def __del__(self):
        ui.ListBoxEx.Item.__del__(self)

    
    def GetText(self):
        return self.text

    
    def SetSize(self, width, height):
        ui.ListBoxEx.Item.SetSize(self, 6 * len(self.textLine.GetText()) + 4, height)

    
    def _Item__CreateTextLine(self, fileName):
        textLine = ui.TextLine()
        textLine.SetParent(self)
        textLine.SetPosition(0, 0)
        textLine.SetText(fileName)
        textLine.Show()
        return textLine


MetinFinder().Show()
01/10/2019 01:13 MasterZin#44
There is something about a "continue" argument not being properly added. Any idea? PS: Yea, I know this is a couple of years old, but people still play on pservers.

Code:
    def UpdateFileList(self):
        
        try:
            aa = len(self.MetinList)
            for x in xrange(aa):
                del self.MetinList[0]
        except:
            pass

        self.Gui[3].RemoveAllItems()
        continue
        metinlist = []
        for i in metinlist:
            (x, y, z) = chr.GetPixelPosition(i)
            name = chr.GetNameByVID(i)
            self.Gui[3].AppendItem(Item('%s\t\t %s\t\t(%s, %s)' % (i, name, int(x) / 100, int(y) / 100)))
            metin_dict = {
                'VID': i,
                'NAME': name,
                'COORDX': x,
                'COORDY': y }
            self.MetinList.append(metin_dict)
03/26/2020 15:46 TheCat111#45
step by step how do i instal this hack ?