Lumberjacking

Skripty týkající se tohoto externího programu

Moderátor: Caleb

Odpovědět
Sir Arthorius
Walking Scribbler
Walking Scribbler
Příspěvky: 39
Registrován: 11 úno 2010 17:03
Kontaktovat uživatele:

Lumberjacking

Příspěvek od Sir Arthorius »

Nejsem žadnej vědator ale rad bych se zeptal jestli se bude dělat a nebo ma někdo makro na lumber nevim jak předělat a nebo přidat makro z joka ostatně bych byl rad za samostatny makro na fenu než něco tahat z joka abych si tpak cely rozhasil.Když sem tu už viděl mininf a fishing tak by mě zajimalo jak je to s Lumberjackingem.
Leinad
Walking Scribbler
Walking Scribbler
Příspěvky: 47
Registrován: 24 říj 2009 21:04
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Leinad »

Zdravim,

je vo fene nejakym sposobom mozne vyhladavat Tile(stromy, kamene...) v okoli postavy? Snazim sa vyrobit lumber skript ktory bude sekat vzdy do najblizsieho stromu, ale FindType mi Tile nenajde a k inemu sposobu vyhladavania v okoli postavy som sa nedopatral. Pripadne, neviete kde sa vo fene pridavaju objekty do World.Ground property? Dik.
Pain, DoHR
Uživatelský avatar
Smoce
Paper Elemental
Paper Elemental
Příspěvky: 349
Registrován: 12 úno 2009 21:53
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Smoce »

Leinad píše:Zdravim,

je vo fene nejakym sposobom mozne vyhladavat Tile(stromy, kamene...) v okoli postavy? Snazim sa vyrobit lumber skript ktory bude sekat vzdy do najblizsieho stromu, ale FindType mi Tile nenajde a k inemu sposobu vyhladavania v okoli postavy som sa nedopatral. Pripadne, neviete kde sa vo fene pridavaju objekty do World.Ground property? Dik.
Jde..

ale nejsnažší metoda na udělání, je přes waittile a davat si do podminky stromky, ktere jsi už sekal, a tak vždy pujde k dalsimu ..
Leinad
Walking Scribbler
Walking Scribbler
Příspěvky: 47
Registrován: 24 říj 2009 21:04
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Leinad »

Smoce píše: Jde..
ale nejsnažší metoda na udělání, je přes waittile a davat si do podminky stromky, ktere jsi už sekal, a tak vždy pujde k dalsimu ..
uz som to vyriesil inak, ale aj tak dik za odpoved : )
Pain, DoHR
Uživatelský avatar
Smoce
Paper Elemental
Paper Elemental
Příspěvky: 349
Registrován: 12 úno 2009 21:53
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Smoce »

Leinad píše:
Smoce píše: Jde..
ale nejsnažší metoda na udělání, je přes waittile a davat si do podminky stromky, ktere jsi už sekal, a tak vždy pujde k dalsimu ..
uz som to vyriesil inak, ale aj tak dik za odpoved : )

J je to lehký, někde jsme měl celé makro napsané , ale nemůžu ho najít :D a dalších xxx maker :D ...
Mianek
Book Snake
Book Snake
Příspěvky: 135
Registrován: 08 zář 2006 22:31
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Mianek »

Mohl bych poprosit nejakeho dobrodince o zverejneni fena script na lumber? Pokud tedy je, diky

Edit 24.6.: uz je to mesic, nechce se mi verit ze by nikdo nemel script na lumber :(
Tak jinak, mohl by se na to nejaky scripter vrhnout? Pokud ten script bude samocinny, vysekavat strom od stromu, sbirat special drevo, ostatni vyhazovat, jsem ochotny se po domluve nejak odmenit
Legie (navzdy!!)
Oproman
Inkless
Inkless
Příspěvky: 28
Registrován: 08 led 2008 16:54
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Oproman »

Pracuje na tom někdo? myslím, že by to hodně hráčů ocenilo. Díky
Uživatelský avatar
Smoce
Paper Elemental
Paper Elemental
Příspěvky: 349
Registrován: 12 úno 2009 21:53
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Smoce »

Mianek píše:Mohl bych poprosit nejakeho dobrodince o zverejneni fena script na lumber? Pokud tedy je, diky

Edit 24.6.: uz je to mesic, nechce se mi verit ze by nikdo nemel script na lumber :(
Tak jinak, mohl by se na to nejaky scripter vrhnout? Pokud ten script bude samocinny, vysekavat strom od stromu, sbirat special drevo, ostatni vyhazovat, jsem ochotny se po domluve nejak odmenit

Lumber má každý lepší scripter, není to takovej velkej problém i přes to, že Phoenix neumí v základu hledat static podle ushort stromu ..

A kdyby byli všechny scripty zveřejněné , kdo by s toho pak něco měl ;-)
Mianek
Book Snake
Book Snake
Příspěvky: 135
Registrován: 08 zář 2006 22:31
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Mianek »

Ok, rozumim. Tak pokud bude nekdo tak laskav a podeli se se mnou o script na lumber a ja se odmenim, samozrejme ze po domluve s autorem scriptu ho nebudu dal sirit, kdyz uz ho budu muset zaplatit (nemyslim tim real :mrgreen: ) nejde mi o nic jineho nez si domaxnout si crafta nez to tu zavrou :lol:
Legie (navzdy!!)
Uživatelský avatar
Leny-m
Book Snake
Book Snake
Příspěvky: 123
Registrován: 12 říj 2006 22:18
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Leny-m »

Teda nevim, jak jste to resili vy panove, ale ja spokojeny nejsem, protoze jsem neprisel na zpusob, ktery by byl univerzalni. Pouze napevno dokazi vytezit urcitou oblast (a to jeste nemam poradne dokonceny blindfolded pathfinding)...

Zarazi me, ze jsem nenasel nic na zjisteni staticGraphic krome maker.

Pro ty, kteri tapou, velice rad poskytnu informace o tom, jak jsem postupoval. Zacal jsem nahravat makro a obesel jsem stromy, ktere chci posekat a na kazdy z nich jsem dal ,info. V logu makra se uklada pozice (x,y,z) a staticGraphic (to jsem nikde jinde nez v makrech nenasel) a pak jsem si napsal skript, ktery pres WaitTargetTile(x,y,z,staticGraphic) seka stromy, pomoci Track (konkretni implementace se da najit v kopani mapek na smoceho webu) ukazuje, kam se pokousi dojit dal a pomoci skriptu na chozeni, ktery jeste nemam osetreny na kvalitni vyhybani se prekazek, se snazi na danou pozici dojit. Takze dokazi vytezit jen pevne dany set stromu a jakmile narazim na slozitejsi prekazku, jsem v... xD

Je pravda, ze Phoenix vidim prakticky poprve, ale jak lepe poresit Lumberjacking nevidim. Sofistikovanejsi dotazy klidne do PM/ICQ. Skript nema smysl poskytovat (neprisel jsem na zpusob, jak tezit obecne, pouze v pevne dane lokalite), jeho jadro jsem tady popsal.
Ocroc

Re: Lumberjacking

Příspěvek od Ocroc »

ad. Leny-m
Obchazeni se by se dalo vyřešit jako to mám u miningu - minpohyb(). http://www.darkparadise.cz/Forum/viewto ... =67&t=4057

Tady máte můj, ale už si nepamatuju jestli vůbec funguje a nebo jestli je jen rozdělaný, ale třeba někomu něco píchne :p

Kód: Vybrat vše

using System;
using System.Collections.Generic;
using System.Text;
using Phoenix;
using Phoenix.WorldData;
using System.Linq;
using System.Windows.Forms;
using System.Threading;

namespace Phoenix.Scripts {
    public class Lumber {
        public Lumber() {
            treeGraphics = new List<Graphic>() { 
                0x0cca, 0x0ccb, 0x0ccc, 0x0ccd, 0x0cd0, 0x0cd3, 0x0cd6, 0x0cd8, 0x0cda, 0x0cdd, 0x0ce0, 0x0ce3, 0x0d01
            };
        }

        private List<Graphic> treeGraphics;

        private bool MoveToTile( StaticItem tree ) {
            UO.PrintInformation( "Moving to " + tree.X + "," + tree.Y + "," + tree.Z );

            Func<bool> isInRange = new Func<bool>( () => {
                return Math.Max( Math.Abs( World.Player.X - tree.X ), Math.Abs( World.Player.Y - tree.Y ) ) <= 2;
            } );

            while ( !isInRange() ) {
                while ( !isInRange() && World.Player.X > tree.X && World.Player.Y > tree.Y && MakeStep( 7 ) )
                    ;

                while ( !isInRange() && World.Player.X < tree.X && World.Player.Y < tree.Y && MakeStep( 3 ) )
                    ;

                while ( !isInRange() && World.Player.X > tree.X && World.Player.Y < tree.Y && MakeStep( 5 ) )
                    ;

                while ( !isInRange() && World.Player.X < tree.X && World.Player.Y > tree.Y && MakeStep( 1 ) )
                    ;

                while ( !isInRange() && World.Player.X > tree.X && MakeStep( 6 ) )
                    ;

                while ( !isInRange() && World.Player.X < tree.X && MakeStep( 2 ) )
                    ;

                while ( !isInRange() && World.Player.Y > tree.Y && MakeStep( ( byte )0 ) )
                    ;

                while ( !isInRange() && World.Player.Y < tree.Y && MakeStep( 4 ) )
                    ;
            }

            return true;
        }

        private void HarvestTile( StaticItem tree ) {
            UO.PrintInformation( "Harvesting at " + tree.X + "," + tree.Y + "," + tree.Z );

            do {
                UOItem hatchet = World.Player.Layers[ Layer.LeftHand ];
                if ( hatchet.Graphic != 0x0F43 )
                    hatchet = World.Player.Backpack.AllItems.Where( i => i.Graphic == 0x0f43 ).FirstOrDefault();
                if ( hatchet == null )
                    throw new ScriptErrorException( "Hatchet not found" );

                Journal.Clear();
                UO.WaitTargetTile( tree.X, tree.Y, tree.Z, tree.Graphic );
                hatchet.Use();
                Journal.WaitForText( "There are no logs left here to chop.", "You hack at the tree for a while, but fail to produce any useable wood.", "You put the log" );
                UO.Wait( 500 );
            } while ( !Journal.Contains( "There are no logs left here to chop." ) );
        }

        [Executable( "lumber" ), BlockMultipleExecutions( "lumber" )]
        public void Start() {
            Start( 10 );
        }
        [Executable( "lumber" ), BlockMultipleExecutions( "lumber" )]
        public void Start(int radius) {
            using ( Map map = new Map() ) {
                IEnumerable<StaticItem> trees = map.GetStaticItems( World.Player.X - radius, World.Player.Y - radius, World.Player.X + radius, World.Player.Y + radius, i => treeGraphics.Contains( i.Graphic ) ).OrderBy( i => Math.Max( Math.Abs( World.Player.X - i.X ), Math.Abs( World.Player.Y - i.Y ) ) );

                while ( trees.Count() > 0 ) {
                    StaticItem tree = trees.FirstOrDefault();

                    if ( MoveToTile( tree ) )
                        HarvestTile( tree );

                    UO.PrintInformation( "Remaining " + trees.Count() + " trees" );

                    trees = trees.Skip( 1 ).OrderBy( i => Math.Max( Math.Abs( World.Player.X - i.X ), Math.Abs( World.Player.Y - i.Y ) ) );
                }
            }

            UO.PrintInformation( "Lumber finished" );
        }

        #region Movement

        private MessageCallback RegisterMessageCallback( bool client, MessageCallback callback, params byte[] opcodes ) {
            foreach ( byte opcode in opcodes )
                if ( client )
                    Core.RegisterClientMessageCallback( opcode, callback );
                else
                    Core.RegisterServerMessageCallback( opcode, callback );

            return callback;
        }
        
        private bool MakeStep( byte direction ) {
            return MakeStep( direction, 0 );
        }
        private bool MakeStep( byte direction, int depth ) {
            if ( depth >= 8 )
                return false;

            while ( !Step( direction ) )
                MakeStep( ( byte )( ( direction + 1 ) % 8 ), ++depth );

            return true;
        }

        public bool Step( byte direction ) {
            Keys[] directions = { 
                    Keys.PageUp,   // 0
                    Keys.Right,    // 1
                    Keys.PageDown, // 2
                    Keys.Down,     // 3
                    Keys.End,      // 4
                    Keys.Left,     // 5
                    Keys.Home,     // 6
                    Keys.Up,       // 7
                };

            Keys key = directions[ direction ];
            return ( World.Player.Direction != direction ? Step( key ) : true ) && Step( key );
        }

        public bool Step( Keys key ) {
            bool result = false;

            using ( ManualResetEvent handled = new ManualResetEvent( false ) ) {
                using ( ManualResetEvent requested = new ManualResetEvent( false ) ) {
                    MessageCallback requestedCallback = RegisterMessageCallback( true, ( d, p ) => {
                        requested.Set();
                        handled.WaitOne( 500 );
                        return p;
                    }, 0x02 );
                    try {
                        UO.Press( key );

                        if ( !requested.WaitOne( 500 ) )
                            return false;
                    }
                    finally {
                        handled.Set();
                        Core.UnregisterClientMessageCallback( 0x02, requestedCallback );
                    }
                }

                handled.Reset();

                using ( ManualResetEvent responded = new ManualResetEvent( false ) ) {
                    MessageCallback respondedCallback = RegisterMessageCallback( false, ( d, p ) => {
                        result = d[ 0 ] == 0x22;
                        responded.Set();
                        handled.WaitOne( 500 );
                        return p;
                    }, 0x21, 0x22 );
                    try {
                        if ( !responded.WaitOne( 40000 ) ) {
                            UO.PrintWarning( "Walk response timeout" );
                            return false;
                        }
                    }
                    finally {
                        handled.Set();
                        Core.UnregisterServerMessageCallback( 0x21, respondedCallback );
                        Core.UnregisterServerMessageCallback( 0x22, respondedCallback );
                    }
                }

            }

            UO.Wait( 400 );
            return result;
        }

        #endregion
    }
}
Uživatelský avatar
Leny-m
Book Snake
Book Snake
Příspěvky: 123
Registrován: 12 říj 2006 22:18
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Leny-m »

- grafika statiku opravdu zjistit jde
- pathfinding jde take krasne vyuzit

Z informaci, ktere jsem nasbiral tady na foru a trochu od strejdy G, se mi podarilo dat dohromady obecneho lumberjacka, ktery je schopny tezit libovolne stromy v Yewu (sekam tam, tak jsem grafiky jinych stromu nesbiral). Staci mit ulozene typy stromu, ktere se tam vyskytuji a skript uz skenuje sve okoli a hleda stromy, po vysekani je jednoduse pridava do ignore listu a jede dal. Nejede v mrizce, pouze "first come, first chop", scan je ve ctverci a roste, pokud nic nevrati. Semtam to odtahne domu na dalsi zpracovani.

Takze opravdu to napsat jde a je to pomerne jednoduche. Nicmene musim rict, ze bez Cardy bych to nezvladl. Vubec jsem nemel ani poneti, co vsechno je mozne a informace a kod, ktery poskytl povazuji za zlato :) Jeste jednou diky.
Severka
Pencil Master
Pencil Master
Příspěvky: 417
Registrován: 05 kvě 2009 12:44
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Severka »

Len maly dotaz, co mi chyba (Ocroc script), ked to prudi s tymto?

error CS0246: The type or namespace name 'StaticItem' could not be found (are you missing a using directive or an assembly reference?)

asi nevie co je to StaticItem, hroza toto :)
Uživatelský avatar
Raziel
Undead Scriber
Undead Scriber
Příspěvky: 650
Registrován: 07 zář 2006 19:12
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Raziel »

Severka píše:Len maly dotaz, co mi chyba (Ocroc script), ked to prudi s tymto?

error CS0246: The type or namespace name 'StaticItem' could not be found (are you missing a using directive or an assembly reference?)

asi nevie co je to StaticItem, hroza toto :)
taky jsem se na to chtěl podívat a píše mi to stejnou chybu že to nezná staticitem, nevím odkud se to vzalo protože v dokumentaci k phoenixu tam taková třída není ... ani třída map která static itemy načítá. tak asi stará dokumentace jenom bych taky rád věděl co s tím :-)
Uživatelský avatar
Ján Páleš
Book Snake
Book Snake
Příspěvky: 92
Registrován: 16 zář 2013 18:38
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Ján Páleš »

k tomuto vlastne vznikla odpoveď? ja som tiež po použití tohto skriptu dostal chybovú hlášku "Název typu nebo oboru názvu StaticItem nebyl nalezen (pravděpodobně ste neuvedli direktivu using nebo odkaz na sestavení), a to rovno 2x.

predpokladám, že to je 2x lebo odkazuje na 2 miesta v skripte.

skúsil som odstrániť "StaticItem", čo vyústilo do inej chyby (už nepamätám akej) a pridať do daného riadku "using", čo vyústilo do asi 10 chýb. :-D
moja armáda núbov zahŕňa - Ecki (vamp), Joneleth (necro), Nubik Obycajny (loladin), Astar (cleric), Katrina (craft), Silverblade (craft), Beregond (warr), Elliara (mage), Asminia (ranger). because I can... ICQ = 261129403, email = eckister@gmail.com
Polarka
Book Snake
Book Snake
Příspěvky: 103
Registrován: 05 kvě 2013 10:53
Kontaktovat uživatele:

Re: Lumberjacking

Příspěvek od Polarka »

Nie, tento skript nefunguje :) Ani Boh nevie co chcel StaticItemom basnik povedat... Ono su hraci, co maju tento skript funkcny, tak skus posliedit a potom to skusit cez PM zohnat... GOOD LUCK! :D
Firest
Misspelling Chicken
Misspelling Chicken
Příspěvky: 1
Registrován: 22 led 2014 11:18

Re: Lumberjacking

Příspěvek od Firest »

Zdravím, chtěl bych poprosit o funkční skript na lumber, miningu je všude dost, ale použitelný lumber jsem zatím nenašel a nebo je chráněn heslem.
jestli by mi někdo pomohl a podělil se se mnou, bohužel na skriptovaní nemam vlohy :(
Odpovědět