Ejemplo n.º 1
0
        private void MemoryScanner_AnimationEvent(object sender, StringArg e)
        {
            string animation = e.String;

            switch (animation)
            {
            case "FootRight":
            case "FootLeft":
            case "JumpUp":
            case "JumpDown":

            case "IdleChairSitting":
            case "idleChairGetUp":

            case "tailCombatIdle":
            case "tailSneakIdle":
            case "IdleStop":

            case "weaponSwing":
            case "weaponLeftSwing":

            case "tailMTLocomotion":
            case "tailSneakLocomotion":
            case "tailCombatLocomotion":

                if (last_idle == animation)
                {
                    return;                            //prevent idle spam when slowly rotating arround with weapon drawn
                }
                last_idle = animation;


                for (int i = 0; i < dd_devices.Length; i++)
                {
                    DD_Device_Type type = dd_devices[i];
                    if (type == DD_Device_Type.none)
                    {
                        continue;
                    }

                    RunningAnimationEvents[i].RemoveAll(runningEvent => runningEvent.ended);
                    // only run one event per dd device per time
                    if (RunningAnimationEvents[i].Count > 0)      // there are still some running events
                    {
                        continue;
                    }

                    string location = Enum.GetNames(typeof(DD_Device_Location))[i].ToLower();
                    RunningAnimationEvents[i].AddRange(vibrationEvents.PlayEvent("dd device footstep " + location));
                }

                //PlaySound();

                break;
            }
        }
Ejemplo n.º 2
0
        public void Run()
        {
            Thread.Sleep(100);
            string path = Game_Path + @"\FunScripts\link.txt";

            const Int32 BufferSize = 128;

            using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize))
                {
                    long line_nr      = 0;
                    bool loading_game = true;
                    bool skipping_old = true;
                    while (true)
                    {
                        String line = streamReader.ReadLine();

                        if (line == null)
                        {
                            skipping_old = false; //we skipped all old lines
                            Thread.Sleep(10);
                        }
                        else
                        {
                            line_nr++;
                            line = line.ToLower().Replace("\'", "\"");

                            //Console.WriteLine(line);
                            if (!line.StartsWith("{"))
                            {
                                Debug_Message?.Invoke(this, new StringArg(String.Format("ESP msg - {0}", line)));
                                continue;
                            }
                            ;

                            JObject json;
                            try { json = JObject.Parse(line); }
                            catch
                            {
                                Warning_Message?.Invoke(this, new StringArg(String.Format("Couldn't format line {0}: {1}", line_nr, line)));
                                continue;
                            };

                            string mod_property   = (string)json.Property("mod");
                            string event_property = (string)json.Property("event");
                            string type_property  = (string)json.Property("type");


                            //this code runs mainly purpose is to skip old lines of code in the event file
                            if (loading_game || skipping_old)
                            {
                                bool allowed = false;
                                if (mod_property == "game")
                                {
                                    if (event_property == "loading save" || event_property == "loading save done")
                                    {
                                        allowed = true;
                                    }
                                }

                                if (mod_property == "dd")
                                {
                                    if (event_property == "(de)equiped")
                                    {
                                        allowed = true;
                                    }
                                }

                                if (mod_property == "sla")
                                {
                                    allowed = true;
                                }

                                if (!allowed)
                                {
                                    continue;
                                }
                            }

                            switch (mod_property)
                            {
                            case "game":
                                switch (event_property)
                                {
                                case "damage":

                                    break;

                                case "loading save":
                                    loading_game = true;

                                    string mods_found = "";

                                    if ((bool)json.Property("sla_running"))
                                    {
                                        mods_found += "- SexLab Arousal\n";
                                    }
                                    if ((bool)json.Property("dd_running"))
                                    {
                                        mods_found += "- Deviouse Devices\n";
                                    }
                                    if ((bool)json.Property("mme_running"))
                                    {
                                        mods_found += "- Milk Mod Economy\n";
                                    }
                                    if ((bool)json.Property("bf_running"))
                                    {
                                        mods_found += "- Being Female\n";
                                    }
                                    if ((bool)json.Property("sgo_running"))
                                    {
                                        mods_found += "- Soul Gem Oven\n";
                                    }
                                    Notification_Message?.Invoke(this, new StringArg("Loading save game"));
                                    Save_Loaded?.Invoke(this, new StringArg(mods_found));
                                    break;

                                case "loading save done":
                                    loading_game = false;
                                    Notification_Message?.Invoke(this, new StringArg("Save game Loaded"));
                                    break;

                                case "menu opened":    //TODO might need to re add this if the animation timer based check doest work good enough
                                    //form_EventFileReader.GamePaused(true);
                                    inMenu = true;
                                    break;

                                case "menu closed":
                                    //form_EventFileReader.GamePaused(false);
                                    inMenu = false;
                                    break;
                                }
                                break;

                            case "sla":
                                arousal = (int)json.Property("arousal");
                                Arousal_Updated?.Invoke(this, new IntArg(arousal));
                                break;

                            case "dd":

                                switch (event_property)
                                {
                                case "(de)equiped":

                                    string[] devices_names = new string[Enum.GetNames(typeof(DD_Device_Location)).Length];

                                    //check which device was (de)equiped
                                    for (int i = 0; i < dd_devices.Length; i++)
                                    {
                                        DD_Device_Type dd_device_current_type = dd_devices[i];

                                        string         s_location         = Enum.GetNames(typeof(DD_Device_Location))[i].ToLower();
                                        string         s_location_type    = (string)json.Property(s_location);
                                        string[]       s_location_types   = Array.ConvertAll(Enum.GetNames(typeof(DD_Device_Type)), d => d.ToLower());
                                        DD_Device_Type dd_device_new_type = (DD_Device_Type)Array.IndexOf(s_location_types, s_location_type);

                                        //check if this was the device that changed
                                        //And we dont run any event when the game was loading
                                        if (!(loading_game || skipping_old) && dd_device_current_type != dd_device_new_type)
                                        {
                                            //check if device was added or removed
                                            if (dd_device_new_type != DD_Device_Type.none)
                                            {    //device was removed
                                                Notification_Message?.Invoke(this, new StringArg("Deviouse Device equiped: " + s_location + " " + s_location_type));
                                                vibrationEvents.PlayEvent("dd device equiped " + s_location);
                                            }
                                            else
                                            {    //device was added
                                                Notification_Message?.Invoke(this, new StringArg("Deviouse Device de-equiped: " + s_location + " " + s_location_type));
                                                vibrationEvents.PlayEvent("dd device de-equiped " + s_location);
                                            }
                                            //break;
                                        }
                                        dd_devices[i] = dd_device_new_type;

                                        devices_names[i] = s_location_type;
                                    }
                                    DD_Device_Update?.Invoke(this, new StringArgs(devices_names));



                                    break;

                                case "vibrate effect start":
                                    System.Diagnostics.Debug.WriteLine("---PRIORITY---");
                                    System.Diagnostics.Debug.WriteLine("Devious Device vibrate START" + (float)json.Property("arg"));
                                    System.Diagnostics.Debug.WriteLine("---ENDPRIORITY---");
                                    float arg = (float)json.Property("arg");
                                    StartCustomEvent(CustomEventIdDdVibrate, LookupEventName(arg));
                                    Notification_Message?.Invoke(this, new StringArg("Devious Device vibrate " + arg));
                                    break;

                                case "vibrate effect stop":
                                    System.Diagnostics.Debug.WriteLine("---PRIORITY---");
                                    System.Diagnostics.Debug.WriteLine("Devious Device vibrate STOP" + (float)json.Property("arg"));
                                    System.Diagnostics.Debug.WriteLine("---ENDPRIORITY---");
                                    StopCustomEvent(CustomEventIdDdVibrate);
                                    Notification_Message?.Invoke(this, new StringArg("Devious Device vibrate stop " + (float)json.Property("arg")));
                                    break;

                                case "o****m":
                                    Notification_Message?.Invoke(this, new StringArg("Deviouse Device o****m " + (float)json.Property("arg")));
                                    break;

                                case "edged":
                                    Notification_Message?.Invoke(this, new StringArg("Deviouse Device edged " + (float)json.Property("arg")));
                                    StopCustomEvent(CustomEventIdDdVibrate);      // stop vibration effect already here
                                    break;

                                case "device event":
                                    string type = (string)json.Property("type");
                                    Notification_Message?.Invoke(this, new StringArg("Deviouse Device event: " + type));

                                    switch (type)
                                    {
                                    case "trip over":

                                        break;

                                    case "drip":

                                        break;

                                    case "stamina drain":

                                        break;

                                    case "blindfold mystery":

                                        break;

                                    case "restraints+armor":

                                        break;

                                    case "posture collar":

                                        break;

                                    case "wet padding":

                                        break;

                                    case "blindold trip":

                                        break;

                                    case "nipple piercings":

                                        break;

                                    case "tight corset":

                                        break;

                                    case "plug moan":

                                        break;

                                    case "trip and fall":

                                        break;

                                    case "bump pumps":

                                        break;

                                    case "struggle":

                                        break;

                                    case "belted empty":

                                        break;

                                    case "mounted":

                                        break;

                                    case "tight gloves":

                                        break;

                                    case "bra chafing":

                                        break;

                                    case "periodic shock":

                                        break;

                                    case "arm cuff fumble":

                                        break;

                                    case "draugr plug vibration":

                                        break;

                                    case "restrictive collar":

                                        break;

                                    case "mana drain":

                                        break;

                                    case "vibration":

                                        break;

                                    case "harness":

                                        break;

                                    case "horny":

                                        break;

                                    case "chaos plug":

                                        break;

                                    case "belt chafing":

                                        break;

                                    case "health drain":

                                        break;

                                    case "organicvibrationeffect":

                                        break;

                                    default:
                                        Warning_Message?.Invoke(this, new StringArg("Deviouse Device event unknown type: " + type));
                                        break;
                                    }

                                    break;
                                }
                                break;

                            case "sexlab":

                                string name = (string)json.Property("name");


                                switch (event_property)
                                {
                                case "animation started":
                                case "animation changed":
                                {
                                    int      stage        = (int)json.Property("stage") - 1;
                                    int      position     = (int)json.Property("pos");
                                    bool     usingStrapon = (bool)json.Property("usingstrappon");
                                    string[] tags         = json.Property("tags").Value.ToObject <string[]>();


                                    Notification_Message?.Invoke(this, new StringArg("SexLab " + event_property + " : \"" + name + "\" stage:" + stage + " position: " + position + " using strapon: " + usingStrapon));
                                    bool found = vibrationEvents.SexLab_StartAnimation(name, stage, position, usingStrapon);
                                    if (!found)
                                    {
                                        Notification_Message?.Invoke(this, new StringArg("Using Generic event"));
                                        vibrationEvents.SexLab_StartAnimation("Generic", stage, 0, false);
                                    }
                                    if (event_property == "animation changed")
                                    {
                                        vibrationEvents.SexLab_Update_Event();
                                    }
                                }
                                break;

                                case "animation ended":
                                    Notification_Message?.Invoke(this, new StringArg("SexLab animation stopped"));
                                    vibrationEvents.SexLab_StopAnimation();
                                    break;

                                case "stage started":
                                {
                                    int stage = (int)json.Property("stage") - 1;
                                    Notification_Message?.Invoke(this, new StringArg("SexLab stage started: " + stage));
                                    vibrationEvents.SexLab_SetStage(stage);
                                }
                                break;

                                case "position changed":
                                {
                                    int position = (int)json.Property("pos");
                                    Notification_Message?.Invoke(this, new StringArg("SexLab position changed: " + position));
                                    vibrationEvents.SexLab_SetPosition(position);
                                }
                                break;

                                case "o****m started":
                                    Notification_Message?.Invoke(this, new StringArg("SexLab o****m"));
                                    vibrationEvents.SexLab_Start_Orgasm();
                                    break;

                                case "o****m ended":
                                    Notification_Message?.Invoke(this, new StringArg("SexLab o****m ended"));
                                    vibrationEvents.SexLab_Stop_Orgasm();
                                    break;
                                }
                                break;

                            case "mme":
                                int mpas        = (int)json.Property("mpas");
                                int milkingType = (int)json.Property("milkingtype");
                                switch (event_property)
                                {
                                case "StartMilkingMachine":

                                    break;

                                case "StopMilkingMachine":

                                    break;

                                case "FeedingStage":

                                    break;

                                case "MilkingStage":

                                    break;

                                case "FuckMachineStage":

                                    break;
                                }
                                break;

                            case "custom":

                                int id = (int)json.Property("type");

                                if (event_property == "start")
                                {
                                    StartCustomEvent(id, type_property);
                                }
                                else
                                {
                                    StopCustomEvent(id);
                                }
                                break;
                            }
                        }
                    }
                }
        }