Stránka 1 z 1

Target

Napsal: 29 srp 2016 21:26
od Bobicek
Ahoj,
script na target :D

Mám ho, ale jediný problem který mám je, že když někoho targetnu a kouzlim, někdy se stane že když od něj odběhnu nebo je za stromem či jinde.
Tak se mě ten target jakoby vyruší a když chci kástit a už vidim NPC/hráče píše mě to nějakou hlášku že nevidí ten target nebo něco.

Je nějaký target který se JEDNOU targetne a už ho neztratí ani se nijak nepřeruší? Zatím pvp nehraji třeba časem, a jak tak premyšlím bylo by blbe po 2 kouzlech zase klikat na zalozku hrace.

Diky za odpovedi.

Re: Target

Napsal: 29 srp 2016 22:06
od krysakrys
Bobicek píše:Ahoj,
script na target :D

Mám ho, ale jediný problem který mám je, že když někoho targetnu a kouzlim, někdy se stane že když od něj odběhnu nebo je za stromem či jinde.
Tak se mě ten target jakoby vyruší a když chci kástit a už vidim NPC/hráče píše mě to nějakou hlášku že nevidí ten target nebo něco.

Je nějaký target který se JEDNOU targetne a už ho neztratí ani se nijak nepřeruší? Zatím pvp nehraji třeba časem, a jak tak premyšlím bylo by blbe po 2 kouzlech zase klikat na zalozku hrace.

Diky za odpovedi.
Ahoj, ve hre lasttarget. Ve phoenixu je to laststatus za kouzlem. Nevim na co jineho bys to mohl potrebovat.

Priklad hotkeye phoenixu:
cast "Lightning" laststatus

Re: Target

Napsal: 30 srp 2016 06:27
od Bobicek
Ahoj, diky zkusím to. Tím pádem script jako takový na TARGET neni potřeba? Stačí kdyžsi npc / hhráčeddámdo waru a castim na nej hotkeye s laststatusem na kkonci :)

Re: Target

Napsal: 30 srp 2016 07:19
od krysakrys
Bobicek píše:Ahoj, diky zkusím to. Tím pádem script jako takový na TARGET neni potřeba? Stačí kdyžsi npc / hhráčeddámdo waru a castim na nej hotkeye s laststatusem na kkonci :)
Hoj, nemas zac. Muzes skocit na smoce.net a vpravo je balicek se skriptama na dp a navod fenu. Kdyz nevim jak neco funguje, tak hned nad tim je vyhledavaci pole.

Prvni si ho zamer timhle. Zobrazuje to nejen status bar, ale i damage. Myslim, ze to funguje i automaticky po utoku (ale nemam to odzkousene, protoze za kouzelnika/nekra neutocite - byste si akorat fizzovali vlastni kouzla pak). Hotkey je:

exec statusbar

Kód: Vybrat vše

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Phoenix;
using System.Threading;
using System.Windows.Forms;
using Phoenix.Gui.Controls;
using Phoenix.Gui;
using Phoenix.Runtime;
using System.Reflection;
using System.Security.Permissions;
using Phoenix.WorldData;
using System.Runtime.InteropServices;
using System.Security;

namespace Scripts.Status
{
    public class StatusBar
    {
        /// <summary>
        /// Zapina/vypina pruhlednost zalozek.
        /// </summary>
        public const bool Transparent = true;

        private bool StatusExists(Serial id)
        {
            return WindowManager.GetDefaultManager().OwnedWindows.OfType<StatusForm>().Where(f => f.MobileId == id).Count() > 0;
        }

        [Executable("statusbar")]
        public void Show()
        {
            UO.Print("Select");
            Show(UIManager.TargetObject());
        }

        [Executable("statusbar")]
        public void Show(Serial id)
        {
            if (!id.IsValid)
                throw new ScriptErrorException("Invalid id.");

            // Kontrola, jestli tahle zalozka uz neexistuje
            if (StatusExists(id)) {
                UO.Print("StatusBar already exists.", "Scripts");
                return;
            }

            // Vytvor okno
            WindowManager.GetDefaultManager().CreateWindow(delegate()
            {
                var f = new StatusForm(id);
                f.Transparency = Transparent;

                return f;
            });
        }

        [Executable("statusall")]
        public void ShowAll()
        {
            foreach (var mob in World.Characters) {
                if (mob.Renamable || mob.Distance > 20)
                    continue;
                 // Tohle sice neni thread-safe, ale pravdepodobnost problemu je velmi mala
                if (!StatusExists(mob.Serial)) {
                    UO.Exec("statusbar", mob.Serial);
                    UO.Wait(100);
                }
            }
        }

        [Executable("statusallpk")]
        public void ShowAllpk()
        {
            foreach (var mob in World.Characters)
            {
                if (mob.Renamable || mob.Distance > 20)
                    continue;
                if (mob.Notoriety == Notoriety.Murderer)
                    continue;

                // Tohle sice neni thread-safe, ale pravdepodobnost problemu je velmi mala
                if (!StatusExists(mob.Serial))
                {
                    UO.Exec("statusbar", mob.Serial);
                    UO.Wait(100);
                }
            }
        }
        [Executable("statusallred")]
        public void ShowAllred()
        {
            foreach (var mob in World.Characters)
            {
                if (mob.Renamable || mob.Distance > 20)
                    continue;
                if (mob.Notoriety == Notoriety.Enemy)
                    continue;

                // Tohle sice neni thread-safe, ale pravdepodobnost problemu je velmi mala
                if (!StatusExists(mob.Serial))
                {
                    UO.Exec("statusbar", mob.Serial);
                    UO.Wait(100);
                }
            }
        }

        [ClientMessageHandler(0x05)]
        public CallbackResult OnAttack(byte[] data, CallbackResult prevResult)
        {
            uint id = ByteConverter.BigEndian.ToUInt32(data, 1);
            UOCharacter mob = new UOCharacter(id);

            if (mob.Distance < 20 && !StatusExists(mob.Serial)) {
                UO.Exec("statusbar", mob.Serial);
            }

            return CallbackResult.Normal;
        }

    }
}

Jeste bych pro uplnost doplnil, ze existuje ve hre klavesa TargetNext, ktera mozna dela presne to co hledas.