Exemple #1
0
        public void SaveCharacterData(DatabaseConnection dbConnection)
        {
            if (loaded && !SavingLocked) {
                dataLock.EnterWriteLock();

                try {
                    if (playerData.AvailableModules == null) {
                        playerData.AvailableModules = "";
                    }
                    PlayerDataManager.SavePlayerAvailableExpKitModules(dbConnection.Database, playerData);
                    PlayerDataManager.SavePlayerCharacteristics(dbConnection.Database, playerData);
                    PlayerDataManager.SavePlayerGuild(dbConnection.Database, playerData);
                    PlayerDataManager.SavePlayerItemGenerals(dbConnection.Database, playerData);
                    JobList.SaveJobList(dbConnection);
                    //PlayerDataManager.SavePlayerJobList(dbConnection.Database, playerData);
                    PlayerDataManager.SavePlayerLocation(dbConnection.Database, playerData);
                    //PlayerDataManager.SavePlayerMissionBoardGenerals(dbConnection.Database, playerData);
                    missionBoard.SaveMissionBoardData();
                    PlayerDataManager.SavePlayerMissionBoardMissions(dbConnection.Database, playerData);
                    PlayerDataManager.SavePlayerMissionGenerals(dbConnection.Database, playerData);
                    PlayerDataManager.SavePlayerStoryGenerals(dbConnection.Database, playerData);
                    PlayerDataManager.SavePlayerStoryHelperStateSettings(dbConnection.Database, playerData);
                    PlayerDataManager.SavePlayerStatistics(dbConnection.Database, playerData);

                    // Save inventory
                    ListPair<int, Characters.InventoryItem> updatedInventory = new ListPair<int, Characters.InventoryItem>();
                    for (int i = 1; i <= Inventory.Count; i++) {
                        if (Inventory[i].Updated) {
                            updatedInventory.Add(i, Inventory[i].BaseInventoryItem);
                            Inventory[i].Updated = false;
                        }
                    }
                    PlayerDataManager.SavePlayerInventoryUpdates(dbConnection.Database, CharID, updatedInventory);

                    // Save bank
                    ListPair<int, Characters.InventoryItem> updatedBank = new ListPair<int, Characters.InventoryItem>();
                    for (int i = 1; i <= Bank.Count; i++) {
                        if (Bank[i].Updated) {
                            updatedBank.Add(i, Bank[i].BaseInventoryItem);
                            Bank[i].Updated = false;
                        }
                    }

                    PlayerDataManager.SavePlayerBankUpdates(dbConnection.Database, CharID, updatedBank);

                    // Save trigger events
                    playerData.TriggerEvents.Clear();
                    for (int i = 0; i < triggerEvents.Count; i++) {
                        PlayerDataTriggerEvent triggerEvent = new PlayerDataTriggerEvent();
                        triggerEvents[i].Save(triggerEvent);
                        playerData.TriggerEvents.Add(triggerEvent);
                    }
                    PlayerDataManager.SavePlayerTriggerEvents(dbConnection.Database, playerData);

                    // Save team
                    for (int i = 0; i < team.Length; i++) {
                        playerData.TeamMembers[i].RecruitIndex = team[i].RecruitIndex;
                        playerData.TeamMembers[i].UsingTempStats = team[i].InTempMode;
                        if (team[i].Loaded) {
                            team[i].Save(dbConnection);
                        }
                    }
                    PlayerDataManager.SavePlayerTeam(dbConnection.Database, playerData);

                    IMap map = GetCurrentMap();
                    if (map != null && (map.MapType == Enums.MapType.Instanced || map.MapType == Enums.MapType.RDungeonMap || map.MapType == Enums.MapType.House)) {
                        map.Save();
                        //mInstancedMapManager.SaveActiveMap();
                    }
                    lock (mapsToDelete) {
                        AI.AIProcessor.mapGC.AddMaps(mapsToDelete);
                        mapsToDelete.Clear();
                    }
                } catch (Exception ex) {
                    System.Windows.Forms.MessageBox.Show("Map: " + MapID + System.Environment.NewLine + ex.ToString());
                } finally {
                    dataLock.ExitWriteLock();
                }
            }
        }
        public static void LoadPlayerTriggerEvents(MySql database, PlayerData playerData)
        {
            string query = "SELECT trigger_events.ID, trigger_events.Type, trigger_events.Action, " +
               "trigger_events.TriggerCommand, trigger_events.AutoRemove " +
               "FROM trigger_events " +
               "WHERE trigger_events.CharID = \'" + playerData.CharID + "\'";

            foreach (DataColumnCollection columnCollection in database.RetrieveRowsEnumerable(query)) {
                PlayerDataTriggerEvent triggerEvent = new PlayerDataTriggerEvent();
                triggerEvent.Items.Add("Type", columnCollection["Type"].ValueString);
                triggerEvent.Items.Add("ID", columnCollection["ID"].ValueString);
                triggerEvent.Items.Add("Action", columnCollection["Action"].ValueString);
                triggerEvent.Items.Add("TriggerCommand", columnCollection["TriggerCommand"].ValueString);
                triggerEvent.Items.Add("AutoRemove", columnCollection["AutoRemove"].ValueString);

                playerData.TriggerEvents.Add(triggerEvent);
            }

            for (int i = 0; i < playerData.TriggerEvents.Count; i++) {
                if (playerData.TriggerEvents[i].Items.GetValue("Type") == "1") {
                    query = "SELECT map_load_trigger_event.MapID " +
                        "FROM map_load_trigger_event " +
                        "WHERE map_load_trigger_event.CharID = \'" + playerData.CharID + "\' " +
                        "AND map_load_trigger_event.ID = \'" + playerData.TriggerEvents[i].Items.GetValue("ID") + "\'";

                    foreach (DataColumnCollection columnCollection in database.RetrieveRowsEnumerable(query)) {
                        playerData.TriggerEvents[i].Items.Add("MapID", columnCollection["MapID"].ValueString);
                    }
                } else if (playerData.TriggerEvents[i].Items.GetValue("Type") == "2") {
                    query = "SELECT stepped_on_tile_trigger_event.MapID, stepped_on_tile_trigger_event.X, " +
                        "stepped_on_tile_trigger_event.Y " +
                        "FROM stepped_on_tile_trigger_event " +
                        "WHERE stepped_on_tile_trigger_event.CharID = \'" + playerData.CharID + "\' " +
                        "AND stepped_on_tile_trigger_event.ID = \'" + playerData.TriggerEvents[i].Items.GetValue("ID") + "\'";

                    foreach (DataColumnCollection columnCollection in database.RetrieveRowsEnumerable(query)) {
                        playerData.TriggerEvents[i].Items.Add("MapID", columnCollection["MapID"].ValueString);
                        playerData.TriggerEvents[i].Items.Add("X", columnCollection["X"].ValueString);
                        playerData.TriggerEvents[i].Items.Add("Y", columnCollection["Y"].ValueString);
                    }
                } else if (playerData.TriggerEvents[i].Items.GetValue("Type") == "3") {
                    query = "SELECT step_counter_trigger_event.Steps, step_counter_trigger_event.StepsCounted " +
                        "FROM step_counter_trigger_event " +
                        "WHERE step_counter_trigger_event.CharID = \'" + playerData.CharID + "\' " +
                        "AND step_counter_trigger_event.ID = \'" + playerData.TriggerEvents[i].Items.GetValue("ID") + "\'";

                    foreach (DataColumnCollection columnCollection in database.RetrieveRowsEnumerable(query)) {
                        playerData.TriggerEvents[i].Items.Add("Steps", columnCollection["Steps"].ValueString);
                        playerData.TriggerEvents[i].Items.Add("StepsCounted", columnCollection["StepsCounted"].ValueString);
                    }
                }
            }
        }