Esempio n. 1
0
        public static int CacheAllStatels()
        {
            SqlWrapper ms    = new SqlWrapper();
            int        count = 0;
            DataTable  dt    = ms.ReadDatatable("SELECT * FROM statels ORDER BY id ASC");

            dtArgs =
                ms.ReadDatatable(
                    "SELECT * FROM statel_function_arguments ORDER BY statel_id, event_id, function_id, attrid ASC");
            dtEvents = ms.ReadDatatable("SELECT * FROM statel_events ORDER BY statel_id, eventid ASC");
            dtReqs   =
                ms.ReadDatatable(
                    "SELECT * FROM statel_function_reqs ORDER BY statel_id, event_id, function_id, reqid ASC");
            dtFunctions = ms.ReadDatatable(
                "SELECT * FROM statel_functions ORDER BY statel_id, event_id, functionid ASC");
            int maxcount = 0;

            ms.sqlclose();

            List <Statel> temp;

            maxcount = dt.Rows.Count;
            foreach (DataRow dr in dt.Rows)
            {
                int pf = (Int32)dr[0];
                if (Statelppf.ContainsKey(pf) == false)
                {
                    temp = new List <Statel>();
                    Statelppf.Add(pf, temp);
                    temp = new List <Statel>();
                    StatelppfonEnter.Add(pf, temp);
                    temp = new List <Statel>();
                    StatelppfonUse.Add(pf, temp);
                }
                Statel tempstatel = new Statel();
                tempstatel.Coordinates.x = (Single)dr[5];
                tempstatel.Coordinates.y = (Single)dr[6];
                tempstatel.Coordinates.z = (Single)dr[7];
                tempstatel.Type          = (Int32)dr[1];
                tempstatel.Instance      = (UInt32)dr[2];
                tempstatel.PlayField     = (Int32)dr[0];
                tempstatel.Template      = (Int32)dr[3];

                tempstatel.LoadEvents((Int32)dr[4]);
                Statelppf[pf].Add(tempstatel);

                foreach (StatelEvent e in tempstatel.Events)
                {
                    if ((e.EventNumber == Constants.EventtypeOnEnter) ||
                        (e.EventNumber == Constants.EventtypeOnTargetInVicinity))
                    {
                        StatelppfonEnter[pf].Add(tempstatel);
                    }
                    if (e.EventNumber == Constants.EventtypeOnUse)
                    {
                        StatelppfonUse[pf].Add(tempstatel);
                    }
                }
                count++;
                if ((count % 10) == 0)
                {
                    Console.Write(
                        "\rReading statels: " + count.ToString() + "/" + maxcount.ToString()
                        + "                        \r");
                }
            }

            ms.sqlclose();
            Console.Write("                                               \r");
            return(count);
        }
Esempio n. 2
0
            public void Execute(Client cli, Statel parent, int Eventnumber)
            {
                bool      reqs_met   = true;
                int       childop    = -1;
                Character ftarget    = null;
                bool      reqresult  = true;
                Character chartarget =
                    (Character)FindDynel.FindDynelById(cli.Character.Target.Type, cli.Character.Target.Instance);

                for (int r = 0; r < this.Requirements.Count; r++)
                {
                    switch (this.Requirements[r].Target)
                    {
                    case itemtarget_user:
                        ftarget = cli.Character;
                        break;

                    case itemtarget_wearer:
                        ftarget = cli.Character;
                        break;

                    case itemtarget_target:
                        ftarget = chartarget;
                        break;

                    case itemtarget_fightingtarget:
                        // Fighting target
                        break;

                    case itemtarget_self:
                        ftarget = cli.Character;
                        break;

                    case itemtarget_selectedtarget:
                        ftarget = chartarget;
                        break;
                    }
                    if (ftarget == null)
                    {
                        reqs_met = false;
                        return;
                    }
                    int statval = ftarget.Stats.StatValueByName(this.Requirements[r].AttributeNumber);
                    switch (this.Requirements[r].Operator)
                    {
                    case operator_and:
                        reqresult = ((statval & this.Requirements[r].AttributeValue) != 0);
                        break;

                    case operator_or:
                        reqresult = ((statval | this.Requirements[r].AttributeValue) != 0);
                        break;

                    case operator_equalto:
                        reqresult = (statval == this.Requirements[r].AttributeValue);
                        break;

                    case operator_lessthan:
                        reqresult = (statval < this.Requirements[r].AttributeValue);
                        break;

                    case operator_greaterthan:
                        reqresult = (statval > this.Requirements[r].AttributeValue);
                        break;

                    case operator_unequal:
                        reqresult = (statval != this.Requirements[r].AttributeValue);
                        break;

                    case operator_true:
                        reqresult = (statval != 0);
                        break;

                    case operator_false:
                        reqresult = (statval == 0);
                        break;

                    case operator_bitand:
                        reqresult = ((statval & this.Requirements[r].AttributeValue) != 0);
                        break;

                    case operator_bitor:
                        reqresult = ((statval | this.Requirements[r].AttributeValue) != 0);
                        break;

                    default:
                        reqresult = true;
                        break;
                    }

                    switch (childop)
                    {
                    case operator_and:
                        reqs_met &= reqresult;
                        break;

                    case operator_or:
                        reqs_met |= reqresult;
                        break;

                    case -1:
                        reqs_met = reqresult;
                        break;

                    default:
                        break;
                    }
                    childop = this.Requirements[r].ChildOperator;
                }

                if (!reqs_met)
                {
                    cli.SendChatText("Requirements not met. (better errormessage not coded yet)");
                    return;
                }

                if (
                    !Program.FunctionC.CallFunction(
                        this.FunctionNumber, cli.Character, cli.Character, parent, this.Arguments.ToArray()))
                {
#if DEBUG
                    cli.SendChatText(
                        "Statel " + parent.Type.ToString() + ":" + parent.Instance.ToString() + " handling "
                        + Eventnumber.ToString() + " Function " + this.FunctionNumber.ToString() + " "
                        + cli.Character.Coordinates);
                    foreach (string arg in this.Arguments)
                    {
                        cli.SendChatText("Argument: " + arg);
                    }
#endif
                }
            }
Esempio n. 3
0
            public void Execute(Client cli, Statel parent, int Eventnumber)
            {
                switch (FunctionNumber)
                {
                // Hit
                case 53002:
                {
                    int statnum = Int32.Parse(Arguments.ElementAt(0));
                    int min     = Int32.Parse(Arguments.ElementAt(1));
                    int max     = Int32.Parse(Arguments.ElementAt(2));
                    if (min > max)
                    {
                        min = max;
                        max = Int32.Parse(Arguments.ElementAt(1));
                    }
                    Random rnd = new Random();
                    cli.Character.Stats.Set(statnum, (uint)(cli.Character.Stats.Get(statnum) + rnd.Next(min, max)));
                    break;
                }

                // Lineteleport
                //
                case 53059:
                {
#if DEBUG
                    Console.WriteLine("Function 53059 (LineTeleport)");
                    Console.WriteLine("Object: " + parent.Type + ":" + parent.Instance);
#endif
                    uint arg2 = UInt32.Parse(Arguments.ElementAt(1));         // Linesegment and playfield (lower word)
                    arg2 = arg2 >> 16;
                    int          to_pf = Int32.Parse(Arguments.ElementAt(2));
                    coordheading a     = FindEntry(to_pf, (Int32)arg2);
                    if (a.Coordinates.x != -1)
                    {
                        cli.Teleport(a.Coordinates, a.Heading, to_pf);
                        break;
                    }
                    break;
                }

                case 53082:     // Teleport Proxy
                {
                    Identity pfinstance = new Identity();
                    pfinstance.Type     = Int32.Parse(Arguments.ElementAt(0));
                    pfinstance.Instance = Int32.Parse(Arguments.ElementAt(1));
                    Identity id2 = new Identity();
                    id2.Type     = Int32.Parse(Arguments.ElementAt(2));
                    id2.Instance = Int32.Parse(Arguments.ElementAt(3));
                    Identity id3 = new Identity();
                    id3.Type     = Int32.Parse(Arguments.ElementAt(4));
                    id3.Instance = Int32.Parse(Arguments.ElementAt(5));

                    SqlWrapper ms = new SqlWrapper();
                    DataTable  dt = ms.ReadDT("SELECT * from proxydestinations WHERE playfield=" + pfinstance.Instance);
                    if (dt.Rows.Count == 0)
                    {
#if DEBUG
                        cli.SendChatText("No Destination found for playfield " + pfinstance.Instance);
                        cli.SendChatText("Statel " + parent.Type.ToString() + ":" + parent.Instance.ToString() + " handling " + Eventnumber.ToString() + " Function " + FunctionNumber.ToString() + " " + cli.Character.Coordinates.ToString());
                        foreach (string arg in Arguments)
                        {
                            cli.SendChatText("Argument: " + arg);
                        }
#endif
                    }
                    else
                    {
                        AOCoord a = new AOCoord();
                        a.x = (Single)dt.Rows[0][1];
                        a.y = (Single)dt.Rows[0][2];
                        a.z = (Single)dt.Rows[0][3];
                        Quaternion q = new Quaternion(0, 0, 0, 0);
                        q.x = (Single)dt.Rows[0][4];
                        q.y = (Single)dt.Rows[0][5];
                        q.z = (Single)dt.Rows[0][6];
                        q.w = (Single)dt.Rows[0][7];
                        cli.TeleportProxy(a, q, pfinstance.Instance, pfinstance, 1, (Int32)parent.Instance, id2, id3);
                    }
                    break;
                }

                case 53092:     // Bank
                {
                    Packets.BankOpen.Send(cli);
                    break;
                }

                case 53083:     // Teleport Proxy 2
                {
                    Identity pfinstance = new Identity();
                    pfinstance.Type     = Int32.Parse(Arguments.ElementAt(0));
                    pfinstance.Instance = Int32.Parse(Arguments.ElementAt(1));
                    int      gs = 1;
                    int      sg = 0;
                    Identity R  = new Identity();
                    R.Type     = Int32.Parse(Arguments.ElementAt(2));
                    R.Instance = Int32.Parse(Arguments.ElementAt(3));
                    Identity dest = new Identity();
                    dest.Type     = Int32.Parse(Arguments.ElementAt(4));
                    dest.Instance = Int32.Parse(Arguments.ElementAt(5));
                    int          to_pf = (Int32)((UInt32)(dest.Instance & 0xffff));
                    int          arg2  = (Int32)((UInt32)(dest.Instance >> 16));
                    coordheading a     = FindEntry(to_pf, arg2);

                    if (a.Coordinates.x != -1)
                    {
                        cli.TeleportProxy(a.Coordinates, a.Heading, to_pf, pfinstance, gs, sg, R, dest);
                        break;
                    }
                    break;
                }

                // Teleport
                case 53016:
                {
                    Quaternion q = new Quaternion(0, 1, 0, 0);
                    AOCoord    a = new AOCoord();
                    a.x = Int32.Parse(Arguments.ElementAt(0));
                    a.y = Int32.Parse(Arguments.ElementAt(1));
                    a.z = Int32.Parse(Arguments.ElementAt(2));
                    cli.Teleport(a, q, Int32.Parse(Arguments.ElementAt(3)));
                    break;
                }

                case 53044:
                {
                    string text = Arguments.ElementAt(0);
                    Packets.SystemText.Send(cli, text, 0);
                    break;
                }

                default:
                {
#if DEBUG
                    cli.SendChatText("Statel " + parent.Type.ToString() + ":" + parent.Instance.ToString() + " handling " + Eventnumber.ToString() + " Function " + FunctionNumber.ToString() + " " + cli.Character.Coordinates.ToString());
                    foreach (string arg in Arguments)
                    {
                        cli.SendChatText("Argument: " + arg);
                    }
#endif
                    break;
                }
                }
            }
        public static int CacheAllStatels()
        {
            SqlWrapper ms = new SqlWrapper();
            int count = 0;
            DataTable dt = ms.ReadDT("SELECT * FROM statels ORDER BY id ASC");
            dt_args = ms.ReadDT("SELECT * FROM statel_function_arguments ORDER BY statel_id, event_id, function_id, attrid ASC");
            dt_events = ms.ReadDT("SELECT * FROM statel_events ORDER BY statel_id, eventid ASC");
            dt_reqs = ms.ReadDT("SELECT * FROM statel_function_reqs ORDER BY statel_id, event_id, function_id, reqid ASC");
            dt_functions = ms.ReadDT("SELECT * FROM statel_functions ORDER BY statel_id, event_id, functionid ASC");
            int maxcount = 0;
            ms.sqlclose();

            List<Statel> temp;
            maxcount = dt.Rows.Count;
            foreach (DataRow dr in dt.Rows)
            {
                int pf = (Int32)dr[0];
                if (Statelppf.ContainsKey(pf) == false)
                {
                    temp = new List<Statel>();
                    Statelppf.Add(pf, temp);
                    temp = new List<Statel>();
                    StatelppfonEnter.Add(pf, temp);
                    temp = new List<Statel>();
                    StatelppfonUse.Add(pf, temp);
                }
                Statel tempstatel = new Statel();
                tempstatel.Coordinates.x = (Single)dr[5];
                tempstatel.Coordinates.y = (Single)dr[6];
                tempstatel.Coordinates.z = (Single)dr[7];
                tempstatel.Type = (Int32)dr[1];
                tempstatel.Instance = (UInt32)dr[2];
                tempstatel.PlayField = (Int32)dr[0];
                tempstatel.Template = (Int32)dr[3];

                tempstatel.LoadEvents((Int32)dr[4]);
                Statelppf[pf].Add(tempstatel);

                foreach (Statel_Event e in tempstatel.Events)
                {
                    if ((e.EventNumber == ItemHandler.eventtype_onenter) || (e.EventNumber == ItemHandler.eventtype_ontargetinvicinity))
                    {
                        StatelppfonEnter[pf].Add(tempstatel);
                    }
                    if (e.EventNumber == ItemHandler.eventtype_onuse)
                    {
                        StatelppfonUse[pf].Add(tempstatel);
                    }
                }
                count++;
                if ((count % 10) == 0)
                {
                    Console.Write("\rReading statels: " + count.ToString() + "/" + maxcount.ToString() + "                        \r");
                }
            }
            
            ms.sqlclose();
            Console.Write("                                               \r");
            dt_args.Clear();
            dt_events.Clear();
            dt_functions.Clear();
            dt_reqs.Clear();
            dt_args = null;
            dt_events = null;
            dt_functions = null;
            dt_reqs = null;
            dt.Clear();
            return count;
        }
            public void Execute(Client cli, Statel parent, int Eventnumber)
            {
                switch (FunctionNumber)
                {
                    // Hit
                    case 53002:
                        {
                            int statnum = Int32.Parse(Arguments.ElementAt(0));
                            int min = Int32.Parse(Arguments.ElementAt(1));
                            int max = Int32.Parse(Arguments.ElementAt(2));
                            if (min > max)
                            {
                                min = max;
                                max = Int32.Parse(Arguments.ElementAt(1));
                            }
                            Random rnd = new Random();
                            cli.Character.Stats.Set(statnum, (uint)(cli.Character.Stats.Get(statnum) + rnd.Next(min, max)));
                            break;
                        }
                    // Lineteleport
                    //
                    case 53059:
                        {
#if DEBUG
                            Console.WriteLine("Function 53059 (LineTeleport)");
                            Console.WriteLine("Object: " + parent.Type + ":" + parent.Instance);
#endif
                            uint arg2 = UInt32.Parse(Arguments.ElementAt(1)); // Linesegment and playfield (lower word)
                            arg2 = arg2 >> 16;
                            int to_pf = Int32.Parse(Arguments.ElementAt(2));
                            coordheading a = FindEntry(to_pf, (Int32)arg2);
                            if (a.Coordinates.x != -1)
                            {
                                cli.Teleport(a.Coordinates, a.Heading, to_pf);
                                break;
                            }
                            break;
                        }
                    case 53082: // Teleport Proxy
                        {
                            Identity pfinstance = new Identity();
                            pfinstance.Type = Int32.Parse(Arguments.ElementAt(0));
                            pfinstance.Instance = Int32.Parse(Arguments.ElementAt(1));
                            Identity id2 = new Identity();
                            id2.Type = Int32.Parse(Arguments.ElementAt(2));
                            id2.Instance = Int32.Parse(Arguments.ElementAt(3));
                            Identity id3 = new Identity();
                            id3.Type = Int32.Parse(Arguments.ElementAt(4));
                            id3.Instance = Int32.Parse(Arguments.ElementAt(5));

                            SqlWrapper ms = new SqlWrapper();
                            DataTable dt = ms.ReadDT("SELECT * from proxydestinations WHERE playfield=" + pfinstance.Instance);
                            if (dt.Rows.Count == 0)
                            {
#if DEBUG
                                cli.SendChatText("No Destination found for playfield " + pfinstance.Instance);
                                cli.SendChatText("Statel " + parent.Type.ToString() + ":" + parent.Instance.ToString() + " handling " + Eventnumber.ToString() + " Function " + FunctionNumber.ToString() + " " + cli.Character.Coordinates.ToString());
                                foreach (string arg in Arguments)
                                {
                                    cli.SendChatText("Argument: " + arg);
                                }
#endif
                            }
                            else
                            {
                                AOCoord a = new AOCoord();
                                a.x= (Single)dt.Rows[0][1];
                                a.y= (Single)dt.Rows[0][2];
                                a.z = (Single)dt.Rows[0][3];
                                Quaternion q = new Quaternion(0, 0, 0, 0);
                                q.x = (Single)dt.Rows[0][4];
                                q.y = (Single)dt.Rows[0][5];
                                q.z = (Single)dt.Rows[0][6];
                                q.w = (Single)dt.Rows[0][7];
                                cli.TeleportProxy(a, q, pfinstance.Instance, pfinstance, 1, (Int32)parent.Instance, id2, id3);
                            }
                            break;
                        }
                    case 53092: // Bank
                        {
                            Packets.BankOpen.Send(cli);
                            break;
                        }

                    case 53083: // Teleport Proxy 2
                        {

                            Identity pfinstance = new Identity();
                            pfinstance.Type = Int32.Parse(Arguments.ElementAt(0));
                            pfinstance.Instance = Int32.Parse(Arguments.ElementAt(1));
                            int gs = 1;
                            int sg = 0;
                            Identity R = new Identity();
                            R.Type = Int32.Parse(Arguments.ElementAt(2));
                            R.Instance = Int32.Parse(Arguments.ElementAt(3));
                            Identity dest = new Identity();
                            dest.Type = Int32.Parse(Arguments.ElementAt(4));
                            dest.Instance = Int32.Parse(Arguments.ElementAt(5));
                            int to_pf = (Int32)((UInt32)(dest.Instance & 0xffff));
                            int arg2 = (Int32)((UInt32)(dest.Instance >> 16));
                            coordheading a = FindEntry(to_pf, arg2);

                            if (a.Coordinates.x != -1)
                            {
                                cli.TeleportProxy(a.Coordinates, a.Heading, to_pf, pfinstance, gs, sg, R, dest);
                                break;
                            }
                            break;
                        }
                        // Teleport
                    case 53016:
                        {
                            Quaternion q = new Quaternion(0, 1, 0, 0);
                            AOCoord a = new AOCoord();
                            a.x = Int32.Parse(Arguments.ElementAt(0));
                            a.y = Int32.Parse(Arguments.ElementAt(1));
                            a.z = Int32.Parse(Arguments.ElementAt(2));
                            cli.Teleport(a, q, Int32.Parse(Arguments.ElementAt(3)));
                            break;
                        }

                    case 53044:
                        {
                            string text = Arguments.ElementAt(0);
                            Packets.SystemText.Send(cli, text, 0);
                            break;
                        }
                    default:
                        {
#if DEBUG
                            cli.SendChatText("Statel " + parent.Type.ToString() + ":" + parent.Instance.ToString() + " handling " + Eventnumber.ToString() + " Function " + FunctionNumber.ToString() + " " + cli.Character.Coordinates.ToString());
                            foreach (string arg in Arguments)
                            {
                                cli.SendChatText("Argument: " + arg);
                            }
#endif
                            break;
                        }

                }
            }
            public void Execute(Client cli, Statel parent, int Eventnumber)
            {
                bool reqs_met = true;
                int childop = -1;
                Character ftarget = null;
                bool reqresult = true;
                Character chartarget =
                    (Character)FindDynel.FindDynelById(cli.Character.Target.Type, cli.Character.Target.Instance);

                for (int r = 0; r < this.Requirements.Count; r++)
                {
                    switch (this.Requirements[r].Target)
                    {
                        case itemtarget_user:
                            ftarget = cli.Character;
                            break;
                        case itemtarget_wearer:
                            ftarget = cli.Character;
                            break;
                        case itemtarget_target:
                            ftarget = chartarget;
                            break;
                        case itemtarget_fightingtarget:
                            // Fighting target
                            break;
                        case itemtarget_self:
                            ftarget = cli.Character;
                            break;
                        case itemtarget_selectedtarget:
                            ftarget = chartarget;
                            break;
                    }
                    if (ftarget == null)
                    {
                        reqs_met = false;
                        return;
                    }
                    int statval = ftarget.Stats.StatValueByName(this.Requirements[r].AttributeNumber);
                    switch (this.Requirements[r].Operator)
                    {
                        case operator_and:
                            reqresult = ((statval & this.Requirements[r].AttributeValue) != 0);
                            break;
                        case operator_or:
                            reqresult = ((statval | this.Requirements[r].AttributeValue) != 0);
                            break;
                        case operator_equalto:
                            reqresult = (statval == this.Requirements[r].AttributeValue);
                            break;
                        case operator_lessthan:
                            reqresult = (statval < this.Requirements[r].AttributeValue);
                            break;
                        case operator_greaterthan:
                            reqresult = (statval > this.Requirements[r].AttributeValue);
                            break;
                        case operator_unequal:
                            reqresult = (statval != this.Requirements[r].AttributeValue);
                            break;
                        case operator_true:
                            reqresult = (statval != 0);
                            break;
                        case operator_false:
                            reqresult = (statval == 0);
                            break;
                        case operator_bitand:
                            reqresult = ((statval & this.Requirements[r].AttributeValue) != 0);
                            break;
                        case operator_bitor:
                            reqresult = ((statval | this.Requirements[r].AttributeValue) != 0);
                            break;
                        default:
                            reqresult = true;
                            break;
                    }

                    switch (childop)
                    {
                        case operator_and:
                            reqs_met &= reqresult;
                            break;
                        case operator_or:
                            reqs_met |= reqresult;
                            break;
                        case -1:
                            reqs_met = reqresult;
                            break;
                        default:
                            break;
                    }
                    childop = this.Requirements[r].ChildOperator;
                }

                if (!reqs_met)
                {
                    cli.SendChatText("Requirements not met. (better errormessage not coded yet)");
                    return;
                }

                if (
                    !Program.FunctionC.CallFunction(
                        this.FunctionNumber, cli.Character, cli.Character, parent, this.Arguments.ToArray()))
                {
#if DEBUG
                    cli.SendChatText(
                        "Statel " + parent.Type.ToString() + ":" + parent.Instance.ToString() + " handling "
                        + Eventnumber.ToString() + " Function " + this.FunctionNumber.ToString() + " "
                        + cli.Character.Coordinates);
                    foreach (string arg in this.Arguments)
                    {
                        cli.SendChatText("Argument: " + arg);
                    }
#endif
                }
            }