示例#1
0
        public void CreateNetPickup(dynamic info)
        {
            int netHandle = (int)info.NetHandle;

            if (pickups.SingleOrDefault(p => p.Exist && p.NetHandle == netHandle) != null)
            {
                return;
            }

            CustomPickup pickup = CustomPickup.FromInfo(new CustomPickupInfo
            {
                NetHandle       = (int)info.NetHandle,
                Dynamic         = (bool)info.Dynamic,
                OnGround        = (bool)info.OnGround,
                DeleteOnAction  = (bool)info.DeleteOnAction,
                EventActionType = (int)info.EventActionType,
                Control         = (int)info.Control,
                HelpText        = (string)info.HelpText,
                CallBack        = info.CallBack,
                Parameters      = info.Parameters,
                Created         = (bool)info.Created
            });

            if (pickup != null)
            {
                pickups.Add(pickup);
            }
        }
示例#2
0
        public static CustomPickup FromInfo(CustomPickupInfo info)
        {
            int handle = API.NetworkGetEntityFromNetworkId(info.NetHandle);

            if (!API.DoesEntityExist(handle))
            {
                return(null);
            }

            CustomPickup pickup = new CustomPickup
            {
                PickupProp     = handle,
                NetHandle      = API.ObjToNet(handle),
                Pos            = API.GetEntityCoords(handle, false),
                Model          = API.GetEntityModel(handle),
                Dynamic        = info.Dynamic,
                OnGround       = info.OnGround,
                DeleteOnAction = info.DeleteOnAction,
                EventAction    = new EventAction
                {
                    Type     = (EventActionType)info.EventActionType,
                    Control  = (Control)info.Control,
                    HelpText = info.HelpText,
                    Callback = info.CallBack,
                    Params   = info.Parameters
                },
                Created = info.Created
            };

            return(pickup);
        }
示例#3
0
        public static CustomPickup FromInfo(CustomPickupInfo info)
        {
            int  handle = API.NetworkGetEntityFromNetworkId(info.NetHandle);
            Prop prop   = new Prop(handle);

            if (prop == null)
            {
                return(null);
            }

            CustomPickup pickup = new CustomPickup
            {
                PickupProp     = prop,
                NetHandle      = API.ObjToNet(prop.Handle),
                Pos            = prop.Position,
                Model          = prop.Model,
                Dynamic        = info.Dynamic,
                OnGround       = info.OnGround,
                DeleteOnAction = info.DeleteOnAction,
                EventAction    = new EventAction
                {
                    Type     = (EventActionType)info.EventActionType,
                    Control  = (Control)info.Control,
                    HelpText = info.HelpText,
                    Callback = info.CallBack,
                    Params   = info.Parameters
                },
                Created = info.Created
            };

            return(pickup);
        }
示例#4
0
        public void PickupTriggered(int NetHandle)
        {
            CustomPickup pickup = pickups.SingleOrDefault(p => p.Exist && p.NetHandle == NetHandle);

            if (pickup == null || pickup.EventAction == null)
            {
                return;
            }

            pickup.EventAction.TriggerAction();
        }
示例#5
0
 private int CreatePickup(Vector3 pos, Model model, bool isDynamic, bool onGround, bool deleteOnAction, EventAction action)
 {
     try
     {
         CustomPickup pickup = new CustomPickup
         {
             Pos            = pos,
             Model          = model,
             Dynamic        = isDynamic,
             OnGround       = onGround,
             DeleteOnAction = deleteOnAction,
             EventAction    = action
         };
         pickup.Create();
         pickups.Add(pickup);
         return(pickup.NetHandle);
     }
     catch (Exception Ex)
     {
         Debug.WriteLine("Error: " + Ex);
         return(-1);
     }
 }
示例#6
0
        public FToolsClient()
        {
            Tick += OnTick;
            Tick += OnTick500;
            Tick += OnTick10000;

            markerEvents = new Dictionary <string, MarkerEvent>();
            texts        = new Dictionary <string, Text3D>();
            areas        = new Dictionary <string, AreaBase>();
            pickups      = new List <CustomPickup>();


            Exports.Add("CreateMarkerEvent", new Func <string, int, dynamic, dynamic, dynamic, float, bool>(
                            (identifier, type, pos, scale, color, maxDistance) =>
            {
                return(CreateMarkerEvent(
                           identifier,
                           (MarkerType)type,
                           new Vector3 {
                    X = float.Parse(pos.X.ToString()), Y = float.Parse(pos.Y.ToString()), Z = float.Parse(pos.Z.ToString())
                },
                           new Vector3 {
                    X = float.Parse(scale.X.ToString()), Y = float.Parse(scale.Y.ToString()), Z = float.Parse(scale.Z.ToString())
                },
                           Color.FromArgb(int.Parse(color.R.ToString()), int.Parse(color.G.ToString()), int.Parse(color.B.ToString())),
                           maxDistance
                           ));
            }));

            Exports.Add("CreateMarkerEventExtended", new Func <string, int, dynamic, dynamic, dynamic, float, bool, bool, bool, int, dynamic, dynamic, bool>(
                            (identifier, type, pos, scale, color, maxDistance, bobUpAndDown, faceCamera, rotate, accessibility, onEnter, onExit) =>
            {
                return(CreateMarkerEvent(
                           identifier,
                           (MarkerType)type,
                           new Vector3 {
                    X = float.Parse(pos.X.ToString()), Y = float.Parse(pos.Y.ToString()), Z = float.Parse(pos.Z.ToString())
                },
                           new Vector3 {
                    X = float.Parse(scale.X.ToString()), Y = float.Parse(scale.Y.ToString()), Z = float.Parse(scale.Z.ToString())
                },
                           Color.FromArgb(int.Parse(color.R.ToString()), int.Parse(color.G.ToString()), int.Parse(color.B.ToString())),
                           maxDistance,
                           (bool)bobUpAndDown,
                           (bool)faceCamera,
                           (bool)rotate,
                           (int)accessibility,
                           onEnter,
                           onExit
                           ));
            }));

            Exports.Add("DeleteMarkerEvent", new Action <string>(
                            (identifier) =>
            {
                if (identifier != null && markerEvents.ContainsKey(identifier))
                {
                    markerEvents.Remove(identifier);
                }
            }));

            Exports.Add("AddTextToMarkerEvent", new Func <string, string, int, dynamic, dynamic, dynamic, float, bool>(
                            (markerEventId, text, font, textColor, textScale, textPos, maxDistance) =>
            {
                return(AddTextToMarkerEvent(
                           markerEventId,
                           new Text3D {
                    TextString = text,
                    Font = (CitizenFX.Core.UI.Font)font,
                    Color = Color.FromArgb(int.Parse(textColor.R.ToString()), int.Parse(textColor.G.ToString()), int.Parse(textColor.B.ToString())),
                    Scale = new Vector2 {
                        X = float.Parse(textScale.X.ToString()), Y = float.Parse(textScale.Y.ToString())
                    },
                    Pos = new Vector3 {
                        X = float.Parse(textPos.X.ToString()), Y = float.Parse(textPos.Y.ToString()), Z = float.Parse(textPos.Z.ToString())
                    },
                    MaxDistance = maxDistance
                }
                           ));
            }));

            Exports.Add("AddActionToMarkerEvent", new Func <string, int, int?, string, dynamic, dynamic, bool>(
                            (markerEventId, eventActionType, control, helpText, callBack, parameters) =>
            {
                EventAction action = new EventAction
                {
                    Type     = (EventActionType)eventActionType,
                    Callback = callBack
                };

                if (!String.IsNullOrEmpty(helpText))
                {
                    action.HelpText = helpText;
                }

                if (control != null)
                {
                    action.Control = (Control)control;
                }

                if (parameters != null)
                {
                    action.Params = parameters;
                }

                return(AddActionToMarkerEvent(
                           markerEventId,
                           action
                           ));
            }));


            Exports.Add("CreateText3D", new Func <string, string, int, dynamic, dynamic, dynamic, float, bool>(
                            (identifier, text, font, textColor, textScale, textPos, maxDistance) =>
            {
                return(CreateText3D(
                           identifier,
                           text,
                           (CitizenFX.Core.UI.Font)font,
                           Color.FromArgb(int.Parse(textColor.R.ToString()), int.Parse(textColor.G.ToString()), int.Parse(textColor.B.ToString())),
                           new Vector2 {
                    X = float.Parse(textScale.X.ToString()), Y = float.Parse(textScale.Y.ToString())
                },
                           new Vector3 {
                    X = float.Parse(textPos.X.ToString()), Y = float.Parse(textPos.Y.ToString()), Z = float.Parse(textPos.Z.ToString())
                },
                           maxDistance
                           ));
            }));

            Exports.Add("CreateText3DOnEntity", new Func <string, string, int, dynamic, dynamic, dynamic, float, int, bool>(
                            (identifier, text, font, textColor, textScale, textPos, maxDistance, entity) =>
            {
                return(CreateText3D(
                           identifier,
                           text,
                           (CitizenFX.Core.UI.Font)font,
                           Color.FromArgb(int.Parse(textColor.R.ToString()), int.Parse(textColor.G.ToString()), int.Parse(textColor.B.ToString())),
                           new Vector2 {
                    X = float.Parse(textScale.X.ToString()), Y = float.Parse(textScale.Y.ToString())
                },
                           new Vector3 {
                    X = float.Parse(textPos.X.ToString()), Y = float.Parse(textPos.Y.ToString()), Z = float.Parse(textPos.Z.ToString())
                },
                           maxDistance,
                           entity
                           ));
            }));

            Exports.Add("DeleteText3D", new Action <string>(
                            (identifier) =>
            {
                if (identifier != null && texts.ContainsKey(identifier))
                {
                    texts.Remove(identifier);
                }
            }));

            Exports.Add("CreateArea", new Func <string, int, dynamic, dynamic, dynamic, dynamic, bool, bool>(
                            (identifier, type, data, onEnter, onExit, parameters, debug) =>
            {
                return(CreateArea(
                           identifier,
                           (AreaType)type,
                           data,
                           onEnter,
                           onExit,
                           parameters,
                           debug
                           ));
            }));

            Exports.Add("IsEntityInArea", new Func <string, int, bool>(
                            (identifier, handle) =>
            {
                if (identifier != null && areas.ContainsKey(identifier))
                {
                    Entity entity = Entity.FromHandle(handle);
                    AreaBase area = areas[identifier];
                    return(area.CoordsInside(entity.Position));
                }
                return(false);
            }));

            Exports.Add("IsCoordsInArea", new Func <string, float, float, float, bool>(
                            (identifier, x, y, z) =>
            {
                if (identifier != null && areas.ContainsKey(identifier))
                {
                    AreaBase area = areas[identifier];
                    return(area.CoordsInside(new Vector3 {
                        X = x, Y = y, Z = z
                    }));
                }
                return(false);
            }));

            Exports.Add("GetFirstAreaEntityIsIn", new Func <int, string>(
                            (handle) =>
            {
                Entity entity = Entity.FromHandle(handle);

                foreach (KeyValuePair <string, AreaBase> pair in areas)
                {
                    if (pair.Value.CoordsInside(entity.Position))
                    {
                        return(pair.Key);
                    }
                }

                return(null);
            }));

            Exports.Add("GetFirstAreaCoordsIsIn", new Func <float, float, float, string>(
                            (x, y, z) =>
            {
                Vector3 coords = new Vector3 {
                    X = x, Y = y, Z = z
                };

                foreach (KeyValuePair <string, AreaBase> pair in areas)
                {
                    if (pair.Value.CoordsInside(coords))
                    {
                        return(pair.Key);
                    }
                }

                return(null);
            }));

            Exports.Add("GetAreasEntityIsIn", new Func <int, object[]>(
                            (handle) =>
            {
                Entity entity        = Entity.FromHandle(handle);
                List <string> result = new List <string>();

                foreach (KeyValuePair <string, AreaBase> pair in areas)
                {
                    if (pair.Value.CoordsInside(entity.Position))
                    {
                        result.Add(pair.Key);
                    }
                }

                return(result.ToArray());
            }));

            Exports.Add("GetAreasCoordsIsIn", new Func <float, float, float, object[]>(
                            (x, y, z) =>
            {
                Vector3 coords = new Vector3 {
                    X = x, Y = y, Z = z
                };
                List <string> result = new List <string>();

                foreach (KeyValuePair <string, AreaBase> pair in areas)
                {
                    if (pair.Value.CoordsInside(coords))
                    {
                        result.Add(pair.Key);
                    }
                }

                return(result.ToArray());
            }));

            Exports.Add("DeleteArea", new Action <string>(
                            (identifier) =>
            {
                if (identifier != null && areas.ContainsKey(identifier))
                {
                    areas.Remove(identifier);
                }
            }));

            Exports.Add("CreatePickup", new Func <dynamic, string, bool, bool, bool, int, int?, string, string, dynamic, int>(
                            (position, model, isDynamic, onGround, deleteOnAction, eventActionType, control, helpText, callBack, parameters) =>
            {
                EventAction action = new EventAction
                {
                    Type     = (EventActionType)eventActionType,
                    Callback = callBack
                };

                if (!String.IsNullOrEmpty(helpText))
                {
                    action.HelpText = helpText;
                }

                if (control != null)
                {
                    action.Control = (Control)control;
                }

                if (parameters != null)
                {
                    action.Params = parameters;
                }

                return(CreatePickup(
                           new Vector3 {
                    X = float.Parse(position.X.ToString()), Y = float.Parse(position.Y.ToString()), Z = float.Parse(position.Z.ToString())
                },
                           new Model(model),
                           isDynamic,
                           onGround,
                           deleteOnAction,
                           action
                           ));
            }));

            Exports.Add("DeletePickup", new Action <int>(
                            (NetHandle) =>
            {
                CustomPickup pickup = pickups.SingleOrDefault(p => p.NetHandle == NetHandle);

                if (pickup != null)
                {
                    pickup.Delete();
                }
            }));

            Exports.Add("ShowNotification", new Action <string>(
                            (text) =>
            {
                ShowNotification(text);
            }));


            EventHandlers["getMapDirectives"]       += new Action <dynamic>(this.GetMapDirective);
            EventHandlers["FTools:PickupCreated"]   += new Action <dynamic>(this.CreateNetPickup);
            EventHandlers["FTools:PickupDeleted"]   += new Action <int>(this.DeleteNetPickup);
            EventHandlers["FTools:PickupTriggered"] += new Action <int>(this.PickupTriggered);
            EventHandlers["playerSpawned"]          += new Action <dynamic>(this.PlayerSpawned);
        }
示例#7
0
        public FToolsClient()
        {
            Tick += OnTick;
            Tick += OnTick500;
            Tick += OnTick10000;

            markerEvents = new Dictionary <string, MarkerEvent>();
            texts        = new Dictionary <string, Text3D>();
            areas        = new Dictionary <string, AreaBase>();
            pickups      = new List <CustomPickup>();


            Exports.Add("CreateMarkerEvent", new Func <string, int, dynamic, dynamic, dynamic, float, bool>(
                            (identifier, type, pos, scale, color, maxDistance) =>
            {
                return(CreateMarkerEvent(
                           identifier,
                           (MarkerType)type,
                           new Vector3 {
                    X = float.Parse(pos.X.ToString()), Y = float.Parse(pos.Y.ToString()), Z = float.Parse(pos.Z.ToString())
                },
                           new Vector3 {
                    X = float.Parse(scale.X.ToString()), Y = float.Parse(scale.Y.ToString()), Z = float.Parse(scale.Z.ToString())
                },
                           System.Drawing.Color.FromArgb(int.Parse(color.R.ToString()), int.Parse(color.G.ToString()), int.Parse(color.B.ToString())),
                           maxDistance
                           ));
            }));

            Exports.Add("CreateMarkerEventExtended", new Func <string, int, dynamic, dynamic, dynamic, float, bool, bool, bool, bool>(
                            (identifier, type, pos, scale, color, maxDistance, bobUpAndDown, faceCamera, rotate) =>
            {
                return(CreateMarkerEvent(
                           identifier,
                           (MarkerType)type,
                           new Vector3 {
                    X = float.Parse(pos.X.ToString()), Y = float.Parse(pos.Y.ToString()), Z = float.Parse(pos.Z.ToString())
                },
                           new Vector3 {
                    X = float.Parse(scale.X.ToString()), Y = float.Parse(scale.Y.ToString()), Z = float.Parse(scale.Z.ToString())
                },
                           System.Drawing.Color.FromArgb(int.Parse(color.R.ToString()), int.Parse(color.G.ToString()), int.Parse(color.B.ToString())),
                           maxDistance,
                           (bool)bobUpAndDown,
                           (bool)faceCamera,
                           (bool)rotate
                           ));
            }));

            Exports.Add("DeleteMarkerEvent", new Action <string>(
                            (identifier) =>
            {
                if (markerEvents.ContainsKey(identifier))
                {
                    markerEvents.Remove(identifier);
                }
            }));

            Exports.Add("AddTextToMarkerEvent", new Func <string, string, int, dynamic, dynamic, dynamic, float, bool>(
                            (markerEventId, text, font, textColor, textScale, textPos, maxDistance) =>
            {
                return(AddTextToMarkerEvent(
                           markerEventId,
                           new Text3D {
                    TextString = text,
                    Font = (CitizenFX.Core.UI.Font)font,
                    Color = System.Drawing.Color.FromArgb(int.Parse(textColor.R.ToString()), int.Parse(textColor.G.ToString()), int.Parse(textColor.B.ToString())),
                    Scale = new Vector2 {
                        X = float.Parse(textScale.X.ToString()), Y = float.Parse(textScale.Y.ToString())
                    },
                    Pos = new Vector3 {
                        X = float.Parse(textPos.X.ToString()), Y = float.Parse(textPos.Y.ToString()), Z = float.Parse(textPos.Z.ToString())
                    },
                    MaxDistance = maxDistance
                }
                           ));
            }));

            Exports.Add("AddActionToMarkerEvent", new Func <string, int, int?, string, dynamic, dynamic, bool>(
                            (markerEventId, eventActionType, control, helpText, callBack, parameters) =>
            {
                EventAction action = new EventAction
                {
                    Type     = (EventActionType)eventActionType,
                    Callback = callBack
                };

                if (!String.IsNullOrEmpty(helpText))
                {
                    action.HelpText = helpText;
                }

                if (control != null)
                {
                    action.Control = (Control)control;
                }

                if (parameters != null)
                {
                    action.Params = parameters;
                }

                return(AddActionToMarkerEvent(
                           markerEventId,
                           action
                           ));
            }));


            Exports.Add("CreateText3D", new Func <string, string, int, dynamic, dynamic, dynamic, float, bool>(
                            (identifier, text, font, textColor, textScale, textPos, maxDistance) =>
            {
                return(CreateText3D(
                           identifier,
                           text,
                           (CitizenFX.Core.UI.Font)font,
                           System.Drawing.Color.FromArgb(int.Parse(textColor.R.ToString()), int.Parse(textColor.G.ToString()), int.Parse(textColor.B.ToString())),
                           new Vector2 {
                    X = float.Parse(textScale.X.ToString()), Y = float.Parse(textScale.Y.ToString())
                },
                           new Vector3 {
                    X = float.Parse(textPos.X.ToString()), Y = float.Parse(textPos.Y.ToString()), Z = float.Parse(textPos.Z.ToString())
                },
                           maxDistance
                           ));
            }));

            Exports.Add("DeleteText3d", new Action <string>(
                            (identifier) =>
            {
                if (texts.ContainsKey(identifier))
                {
                    texts.Remove(identifier);
                }
            }));

            Exports.Add("CreateArea", new Func <string, int, dynamic, dynamic, dynamic, dynamic, bool, bool>(
                            (identifier, type, data, onEnter, onExit, parameters, debug) =>
            {
                return(CreateArea(
                           identifier,
                           (AreaType)type,
                           data,
                           onEnter,
                           onExit,
                           parameters,
                           debug
                           ));
            }));

            Exports.Add("DeleteArea", new Action <string>(
                            (identifier) =>
            {
                if (areas.ContainsKey(identifier))
                {
                    areas.Remove(identifier);
                }
            }));

            Exports.Add("CreatePickup", new Func <dynamic, string, bool, bool, bool, int, int?, string, string, dynamic, int>(
                            (position, model, isDynamic, onGround, deleteOnAction, eventActionType, control, helpText, callBack, parameters) =>
            {
                EventAction action = new EventAction
                {
                    Type     = (EventActionType)eventActionType,
                    Callback = callBack
                };

                if (!String.IsNullOrEmpty(helpText))
                {
                    action.HelpText = helpText;
                }

                if (control != null)
                {
                    action.Control = (Control)control;
                }

                if (parameters != null)
                {
                    action.Params = parameters;
                }

                return(CreatePickup(
                           new Vector3 {
                    X = float.Parse(position.X.ToString()), Y = float.Parse(position.Y.ToString()), Z = float.Parse(position.Z.ToString())
                },
                           new Model(model),
                           isDynamic,
                           onGround,
                           deleteOnAction,
                           action
                           ));
            }));

            Exports.Add("DeletePickup", new Action <int>(
                            (NetHandle) =>
            {
                CustomPickup pickup = pickups.SingleOrDefault(p => p.NetHandle == NetHandle);

                if (pickup != null)
                {
                    pickup.Delete();
                }
            }));

            Exports.Add("ShowNotification", new Action <string>(
                            (text) =>
            {
                ShowNotification(text);
            }));


            EventHandlers["getMapDirectives"]       += new Action <dynamic>(this.GetMapDirective);
            EventHandlers["FTools:PickupCreated"]   += new Action <dynamic>(this.CreateNetPickup);
            EventHandlers["FTools:PickupDeleted"]   += new Action <int>(this.DeleteNetPickup);
            EventHandlers["FTools:PickupTriggered"] += new Action <int>(this.PickupTriggered);
            EventHandlers["playerSpawned"]          += new Action <dynamic>(this.PlayerSpawned);
        }