Leaderboard
Popular Content
Showing content with the highest reputation on 05/11/20 in all areas
-
_______________________________________________________________________________________________________________________ DISCORD İÇİN TIKLA! TÜRKİYE'NİN EN ORJİNAL VE EN KALİTELİ SİSTEMLERİYLE AKTİF - ANLIK 160/180 OYUNCU 2017'den bu yana, Türkiye'nin ilk ve en büyük GTA5 sunucusu! (( Since 2017, first and biggest Turkish community based on GTA5 and RageMP )) 2019 - Voice Role Play Rekoru 2020 - Text Role Play Rekoru ______________________________________________________________________________________________________________ Merhabalar, 2017 yılında kurmuş olduğumuz Seven Role Play sunucusu, Türkiye'nin ilk sunucusu olmasının yanı sıra, üç yıldır hiç kimsenin ulaşamadığı oyuncu rekoruyla (251) zirvedeki yerini koruyor. Tüm aksiliklere rağmen, piyasada edindiği konumu ve markalaşmış ismiyle sizlere hizmet vermeye devam ediyor. Bir çoğunuz geçmiş dönemlerden ismimizi duymuş, sunucuda yer almış olabilirsiniz. Fark edeceğiniz üzere hiç bir zaman ismimizden, kalıcı üst yönetim ekibimizden ve markamızdan vazgeçmedik. Çünkü 2017 yılından bu yana hiç bir zaman oyuncularımıza haksızlık yapılmasına izin vermedik veya kalp kırıcı davranışlarda bulunmadık. Bu yüzden ortada herhangi bir utanılacak durum olduğunu düşünmüyoruz. Geçmiş dönemlerde sunucumuzu iki kere askıya almamız gerekti. Bunun en büyük sebebi üst yönetim kadromuzun kişisel hayatlarında yaşanan iş & kişisel hayat yoğunluğu. Bu dönem projemize ayıracak daha uzun bir vakit elde ettik ve sizlere kalıcı olarak hizmet vermek adına kolları sıvadık. Artık daha güzel günler için önümüze bakmalı ve geleceğe odaklanmalıyız. Dilerseniz biraz yeni dönemden konuşalım! Bu dönem sizlere daha iyi hizmet verebilmek adına teknik kadro sayımızı üçe çıkarttık. Geçmiş dönem hizmetinizde olan Seven:v1 modumuzda geliştirmelere giderek, iyileştirmeler ve yeni sistemler üzerine yoğunlaştık. Bu dönem sizleri yeni sistemleri ve daha stabil oyun moduyla Seven:v2 bekliyor olacak. Sunucu modumuza ek olarak RageMP, 1.1 güncellemesiyle oyunu büyük ölçüde stabil ve senkron hale getirdi. Artık rol ve aksiyon keyfinizi doruklarda yaşıyor olacaksınız.Ayrıca teknik kadromuzun aktif hizmetini çok daha iyi hissedeceksiniz. Sunucu modumuz açılış sonrası aktif olarak güncellenmeye devam edecek ve daha fazla yenilikle karşınızda olacağız. Sunucu moduna dair detaylarıda forum aktifleştikten sonra inceleyebilirsiniz. Genel olarak, geride bıraktığımız 3 yılın ardından Seven Roleplay bu dönem sizlere kalıcı rol deneyimi sözüyle hizmetinizde olacak. 3 yıldır her zaman hedeflediğimiz "Tek çatı altında roleplay" dünyası için daha kaliteli ve düzenli bir sunucu ortamına hepiniz yeniden davetlisiniz. Çünkü bu zamana kadar sizlere piyasada alışılmış sıradan rollerin aksine, kaliteli bir rol ortamı sunmaya devam ediyor olacağız. Tüm yenilik ve duyurular için discord kanalımızın bildirimlerini açmayı unutmayın, harika bir geri dönüş için beklemede kalın. Her zaman, daha iyi plan ve hedeflerimizle burada yer alıyor olacağız. Geçmiş dönem Türkiye'de bir rekor kırmıştık, rekor üzerine rekor kırmaya ne dersiniz? Detaylar çok yakında sizlerle! # soon sevenrp # Discord Hk. Discord kanalımız için aşağıdaki "TIKLA" yazısına tıklayabilirsiniz. Kanal yakında aktifleştirilecek ve gereken detaylar, duyurular oradan size aktarılacaktır. Kanala katılarak bildirimlerinizi açık bırakabilir, son gelişmelerden haberdar olabilirsiniz. DISCORD KANALIMIZA KATILMAK İÇİN TIKLA Geçmiş döneme ait rollerden kesitler, (daha fazlası için kanal sahiplerine bakabilir veya "seven roleplay" olarak youtube'da aratabilirsiniz) ---------------------------- Those who don't understand, This is a Turkish roleplay server based on Rage:MP. We asked first on RageMP discord to make sure we can advertise our server in our own language since there is no Turkish section on forum. Thanks.1 point
-
Wer bist du? was für ein Script soll ich geklaut haben?! ich habe es neu geschrieben und einiges aus meiner alten Vorlage von vor einem Jahr verwendet und überarbeitet.1 point
-
Summary of RAGE Multiplayer 1.1 updates since 1.1 Testing Release (*quickly* dumped from #quick-updates) API Client-side JS game methods now throw an exception (instead of 1) just pushing a notification on argument type mismatch 2) silently failing on argument count mismatch) Added client-side player.isTypingInTextChat (synchronized and works both for local and streamed remote players, intended to replace third party custom typing state synchronization that mostly was implemented *not the most optimized way*) Added mp.invoke("setTypingInChatState", state); (CEF) Updated client-/server C# libraries (server-side C# resources require recompilation) Added client-side C# RAGE.Util.MsgPack.Serialize (MsgPack library should not be used through scripts directly anymore) Added client-side C# RAGE.Util.MsgPack.Deserialize Added client-side C# RAGE.Util.Json.Serialize (unlike MsgPack, you still can use Json/XxHash libraries directly, this is just an easy to use wrapper) Added client-side C# RAGE.Util.Json.Deserialize Added client-side C# RAGE.Util.Json.DefaultSettings Added client-side C# RAGE.Util.XxHash64.Hash Added client-side C# RAGE.Util.MsgPack.ConvertFromJson Added client-side C# RAGE.Util.MsgPack.ConvertToJson Added client-side C# RAGE.Util.MsgPack.DefaultOptions CEF<->Client-side triggers now support larger strings Added: you can now spawn synchronized peds with automatic controller assignment ({dynamic: true, lockController: false}); disabled by default Added client-side playerReady event (triggered when all the server data is ready) Added mp.system.isFullscreen (RAGE.Ui.Windows.Fullscreen) Added mp.system.isFocused (RAGE.Ui.Windows.Focused) Added mp.system.notify({ title: string, text: string, attribute: string, duration: int, silent: bool }) (RAGE.Ui.Windows.Notify) Added RAGE.Ui.DefaultWindow.Call/ExecuteCachedJs Added client-side C# Input.Bind Added client-side C# Input.Unbind Added client-side C# VirtualKey enum (and Bind/Unbind/IsKeyUp/Down overloads) Added support of binding left/right buttons (L/RShift etc) separately Added missing server-side C# player own data API Added radius parameter to client-side blip constructor Added missing server-side C# Vehicle.Spawn(Vector3 position, float heading) Added: C# EntityPool.AsEnumerable() Added client-side C# Entity.GetSharedData ulong key overload Added seatId param to client-side OnPlayerLeaveVehicle event Updated: client-side playerLeaveVehicle now has vehicle param "api-threading-debugging" now also throws a C# exception, alongside with logging bad calls JS Error "Expected multiplayer object" now also throws a JavaScript exception, not crashing the server anymore if caught Fixes Fixed unoccupied vehicle synchronization related crash Fixed client-side JS intervals Fixed server crash on vehicle destroy Fixed driving synchronization glitch Fixed RAGE.Ui.Console.Verbosity not being available Fixed client-side C# damage events missing some params Fixed non-ASCII server path support Fixed "Server crashes when trying to use a command that has a player parameter, and a player cannot be found" Fixed: long initial vehicle streaming times Fixed 64-bit integers in triggers from client-side to server-side Fixed reported client-side C# events-related issues Fixed reported client-side streaming issues Fixed "Marker.Visible gets ignored on marker restreaming" Fixed dummyEntityDestroyed client-side event not fired Fixed launcher settings issues; also a bit overhauled it Fixed client-side C# receiving wrong entities from triggers Fixed "C# Server-side GetClothesDrawable and GetClothesTexture returns incorrect value" Fixed "Blips created server-side (C#) with another dimension assigned to them seem to act weird. I created some on resource start, and all of them are visible on join, including those that are in other dimensions." Fixed mp.game.invoke crash after frequent referenced array buffer usage Fixed "Launcher: open launcher -> open settings -> click on "Change path" and nothing will happen" Fixed "RAGE.Elements.Entities.Players.Streamed always return empty list" Fixed "player.stopAnimation()" Fixed client-side playerEnterVehicle 1.1 regression Fixed: client-side RAGE.Ui.Input.TakeScreenshot not available Fixed: "mp.game.gxt.get and mp.game.gxt.getDefault crashes the game if the gxt entry is unknown, should return 'NULL'" Fixed release build/anticheat conflict Unoccupied vehicle synchronization fixes Fixed mp.Pool.forEach-related issues Fixed server-side weapon anticheat blocking weapon if given exactly after taking it from the player due to a false positive Fixed client-side C# OnConsoleCommand function command argument Fixed client-side C# DummyEntity shared data getter Fixed client-side C# browser state events Fixed player vehicle data not available in server-side playerLeaveVehicle event, it's now cleaned up after the event Fixed vehicle exit animation Fixed incorrect UTF-8 to UTF-16 masterlist convert resulting in empty masterlist if specific server name used Fixed a bug when checkpoints get streamed in invisible and then collide detection doesn't get activated after making it visible without restreaming Fixed SetEntitySharedData Dictionary<string, object> overload Fixed server-side blip V/RDR2 branch regressions Fixed vehicle dimension change warping the player out of the vehicle Fixed a few vehicle-related issues Fixed server-side object rotation setter Fixed client console input Fixed arrow navigation in launcher not being enabled back after closing settings modal Fixed miscellaneous server issues Added 1.1 Linux server build to the updater image (direct link: https://cdn.rage.mp/updater/10_mNwuchuQ4ktWbR8d2N5jUzRt/server-files/linux_x64.tar.gz) Updated localisations Linux server build fixes Fixed server-side C# player.GetHeadOverlay Fixed vehicle synchronization glitches when the driver gets warped out of the vehicle Fixed vehicle damage ignored if vehicle gets re-streamed by client-side streamer without server-side streamer notification Fixed Cursor.Visible returning "freezeControl" value instead of an actual cursor state Fixes for recent C# API additions Fixed the "vehicle synchronization stop" bug Fixed several client-side streaming issues related to slow resource streaming resulting in undefined behavior in a few cases Fixed C# missing DLL error message on launch Fixed reported key bind issues Fixed reported Linux build issues Fixed regular static client-side peds flags not matching 0.3.7 Fixed entity.forceStreamingUpdate() Several server fixes of issues caught with emulated server stress tests Fixed sending expired entities through mp.events.callRemote (just null now) Fixed RAGE.Util.Json.Deserialize optional settings argument Fixed accidental vehicle respawning for its driver after leaving the car Fixed all vehicle extras enabled by default Fixed vehicle.Locked Fixed white screen popping up before UI is completely loaded Fixed vehicles tyre bug (needs confirmation?) Fixed player.playAnimation Fixed unoccupied vehicles teleport issue Decreased player/vehicle client-side streaming times Fixed history tab Fixed map object validation when it's created before player joins Fixed game freeze issue Fixed legacy/1.1 client-side C# conflict Fixed mp.storage issue Misc Added launcher option to disable Windows notifications (enabled by default) Improve launcher load times Updated: "enable-synchronization-extrapolation" has been replaced with "synchronization-extrapolation-multiplier" (0.0 to disable) Reimplemented blip naming API (solves random blip names disappearing) Handshake/initial loading stuff has been reimplemented: faster joining on many entities/data, fix of timeouts on packet lossy connections on joining; works parallel off main stuff going on Added client 0.3.7 compatibility mode (even supports launcher client packages download) Added CEF accelerated rendering toggle ability (launcher settings); it's disabled now by default as people seemed to have issues related to CEF rendering in 1.1+ Renamed /clientdata/pool_overrides.xml to: 1) pool_overrides_v.xml; 2) pool_overrides_rdr2.xml Added back RAGE Multiplayer's assets "default" pool limit overrides (custom server-sided gameconfig.xml 1.1 feature was supposed to be a more smart and flexible way but both are going to be present now) Server streamer performance optimizations Added launcher option to pick preferred voice input device A few optimizations of launcher downloader for heavy files Updater/launcher startup times improvements Optimized RAGE UI loading1 point
-
Naja rausgeworfen werden ist was anderes als verlassen... Und es ist mehr kopiert als nur die beiden Systeme. Und, 3%? Naja also das ist weit untertrieben... Aber versuch du dein Ding. Lass dich nicht davon abhalten zu betrügen.. Und verkauf den anderen das Script als "deines" wenn ich es auch habe(naja deine kopierten System sind draußen). PS: Wenn jemand mehr Informationen will kann er mich anschreiben. Grüße Boomray1 point
-
Всем привет!! Увидел тутер на английском по Entity Framework на MySql и решил сообразить свой вариант на Великом и Могучем, только для базы данных Postgresql. Надеюсь это кому-то будет полезным. Работать мне еще 3 часа, а значит должен успеть. Поехали Нам потребуется: Visual Studio Голова Руки Немного времени Установка необходимых библиотек Первое что нам нужно сделать это открыть наш Visual Studio и загрузить необходимые библиотеки. Для этого открываем диспетчер пакетов NuGet, ищем и устанавливаем следующие библиотеки: gtanetwork.api Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Tools Npgsql Npgsql.EntityFrameworkCore.PostgreSQL Newtonsoft.Json Вот общая картина: Создание структуры классов Создадим следующие классы: Character - основной класс, модель которого мы и будем сохранять в базе Finances - будет хранить в себе информацию о финансах нашего игрока. States - будет содержать информацию о состоянии персонажа Item - будет представлять класс вещи из нашего инвентаря Login - отвечающий за авторизацию персонажа Registration - ... за его регистрацию Db - будет хранить подключение к базе данных AppDbContext - основной класс который и будет содержать практически все настройки для нашей базы данных Посмотреть более подробно содержимое можно скачав проект с репозитория на github. Для тех кто в теме: git clone https://github.com/SirEleot/EFCore_Npgsql.git Для начала давайте настроим подключение к базе данных, для этого создадим новый класс AppDbContext который будет включать в себя все основные настройки касающиеся базы данных. Давайте пока просто посмотрим на его содержимое, а чуть позже разберем более детально: class AppDbContext : DbContext { //сторка подключения к бд. private static string ConnectionString = "Host=localhost;Port=5432;Database=test;Uid=test;Password=test;"; //настройка подключения к базе данных protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseNpgsql(ConnectionString); } //Добавляем класс для сохранения в дб //дочерние классы добавлять не нужно EFCore сам их подхватит public DbSet<Character> Characters { get; set; } // тут находится конфигурация наших сохроняемых классов protected override void OnModelCreating(ModelBuilder modelBuilder) { //настроим игнорирование свойства Data из класса Character //вот так игнорируются свойства класса modelBuilder.Entity<Character>().Ignore(c => c.Date); //также добавим будем игнорировать класс Item //так как он входит в состав нашего класса, то EFCore попытается для него создать таблицу //мы же решили что будем сохраять инвентарь в виде json строки //вот так игнорируются классы modelBuilder.Ignore<Item>(); //здесь здесь пример того как обработать данные при сохранении //мы будем преобразовывать массив с вещамивв строку json modelBuilder .Entity<Character>()//выбираем объект из контекста у нас он 1 .Property(c => c.Inventory)//выбираем свойство .HasConversion( //определяем кастомные методы для обработки данных i => JsonConvert.SerializeObject(i), // при сохранении i => JsonConvert.DeserializeObject<List<Item>>(i) // при загрузке ); //рассмотрим как сохранить отдельный объект в нашем случае Finance //в одной таблице с основным классом modelBuilder.Entity<Character>()//выбираем объект из контекста у нас он 1 .OwnsOne(c => c.Finance);//определяем свойство которое мы хотим добавить к текущей таблице в базе дбазе данных } } } Настройка базы данных Думаю что с ConnectionString проблемы возникнуть не должно. Хотя : Host=localhost; - расположение базы данных Port=5432; - прослушиваемый порт Database=test; - название базы данных Uid=test; - имя пользователя Password=test; - и соответственно пароль В функции OnConfiguring задаются настройки, которые необходимы при инициализации базы данных. В нашем случае это строка подключения к базе данных. Так же тут можно настроить автоматическую миграцию, но об этом поговорим позже. Давайте разберем содержимое нашего основного класса: class Character { //для элементов хранящихся в отдельных таблицах обязательно наличие поля с атрибутом primary key //но в EFCore достаточно создать для класса свойство Id и он сделает все за вас public int Id { get; set; } public string Social { get; set; } public string Name { get; set; } public string Lasname { get; set; } public string Password { get; set; } // поместим финансовую модель в одну таблицу с персонажем //состояние персонажа будет автоматом помещено в отдельную таблицу //все настройки производятся в классе AppDbContext public Finances Finance { get; set; } public States State { get; set; } //так же мы сохраним список вещей в основную таблицу персонажа в виде строки JSON //настройка так же в классе AppDbContext public List<Item> Inventory { get; set; } //это свойство создано для примера, мы его будем игнорировать при сохранении данных в базу //не поверите но это тоже настроим в классе AppDbContext public DateTime Date { get; set; } } Тут мы видим различные свойства персонажа: логин, имя, фамилия и пароль (не забывайте шифровать пароль при сохранении). Стоит обратить внимание на обязательный параметр Id, он необходим для корректного сохранения в базе данных. Все классы, которые предполагают сохранение в отдельной таблице, должны содержать свойство Id, либо любое другое предназначенное для хранения уникального ключа(но это другая история). Перейдем непосредственно к настройкам. Для начала нужно оповестить EF Core о том что мы собираемся сохранить данный класс, для этого добавим свойство Characters типа DbSet<T>, где Т - класс нашей модели Character public DbSet<Character> Characters { get; set; } Составим небольшой план действий. Допустим, что мы хотим чтобы информация о финансах находилась в одной таблице с нашим персонажем, а его состояние наоборот было вынесено в отдельную таблицу. Так же мы хотим что бы коллекция Inventory хранилась в виде строки Json. Еще у нас есть свойство Date и мы не хотим сохранять его в базе данных. План "накидали", теперь давайте попробуем воплотить его в код. Итак по порядку: Первым рассмотрим включаемый класс Finances: class Finances { //для элементов сохраняющихся в оттдельных таблицах обязательно поле с primary key //Достаточно создать свойство Id и EFCore сделает все за вас //В конкретном случае мы не добавляем свойство Id так как Finance будет помещен в одну таблицу с Character //смотрите настройки в классе AppDbContext //public int Id { get; set; } public int Bank { get; set; } = 5000; public int Cash { get; set; } = 500; //добавить деньги на счет public bool AddBank(int amount) { Bank += amount; return true; } //списать деньги со счета public bool SubBank(int amount) { if (amount > Bank) return false; Bank -= amount; return true; } //...... } Наш класс содержит информацию о счете игрока, а так же методы взаимодействия со счетом. Наличие методов никак не повлияет на корректность сохраняемых данных. Мы решили что класс Finances будет сохранятся в одной таблице с персонажем, а это значит что свойство Id можно опустить. Настройки записываются в переопределенном методе OnModelCreating класса AppDbContext: protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder. ....... } Перейдем непосредственно к настройке Finance: modelBuilder.Entity<Character>()//выбираем объект из контекста у нас он 1 .OwnsOne(c => c.Finance);//определяем свойство которое мы хотим добавить к текущей таблице в базе дбазе данных тут мы при помощи метода OwnsOne(c => c.Finance) говорим EF Core, что свойство Finance следует сохранять в одной таблице с Character. Обратите внимание на 6 и 7 колонки это и есть свойства нашего класса Finances включенного в состав таблицы Characters. Так же обратите внимание на 1 колонку Id с пометкой [PK], это и есть наше обязательное одноименное свойство. Дальше у нас идет класс States: class States { //для элементов сохраняющихся в отдельных таблицах обязательно поле с primary key //Достаточно создать свойство Id и EFCore сделает все за вас public int Id { get; set; } public int Health { get; set; } = 100; public int Armor { get; set; } = 100; } Ef Core, по умолчанию, пытается создать отдельную таблицу для каждого класса, включенного в состав нашего основного объекта, поэтому нам остается только создать уникальное свойство Id. Для нашего класса States была автоматически создана соответствующая таблица в базе данных, а ссылка на нее была добавлена в основную таблицу в колонку 8 с названием StateId Далее давайте рассмотрим пользовательские преобразование данных. У нас есть свойство Inventory которое является коллекцией классов Item, и мы решили сохраить его в виде строки json. Для этого в метод OnModelCreating класса AppDbContext добавим следующие строки кода: modelBuilder .Entity<Character>()//выбираем объект из контекста у нас он 1 .Property(c => c.Inventory)//выбираем свойство .HasConversion( //определяем кастомные методы для обработки данных i => JsonConvert.SerializeObject(i), // при сохранении i => JsonConvert.DeserializeObject<List<Item>>(i) // при загрузке ); За это отвечает метод HasConversion(), где первым параметром передается метод обработки данных при сохранении, а вторым при загрузке. В нашем случае это будет сериализация коллекции в строку при сохранении и обратно при загрузке. Для примера мы использовали методы из библиотеки Newtonsoft.Json В результате у нас добавилась колонка Inventory с типом text которая хранит нашу сериализованую коллекцию в виде строки, конечно пустой массив это не лучший пример, позже сделаю новый скриншот, если не забуду. Последним пунктом по настройке базы данных у нас будет исключение ненужных нам свойства Date, и класса Item. Так как класс Item включен в состав нашего основного класса Character, то EF Core попытается создать для него отдельную таблицу, а она нам не нужна. Тут все просто: modelBuilder.Ignore<Item>(); Вот так мы добавляем класс Item в список игнорируемых классов modelBuilder.Entity<Character>().Ignore(c => c.Date); А вот так Свойство Date класса Character Так выглядит общая структура созданной нами базы данных: Миграции базы данных Миграция базы данных это автоматическое созданная структура базы данных для нашего класса, в нашем случае SQL. Миграцию можно настроить как в автоматическом режиме, при запуске приложения, так и производить миграцию в ручном режиме. В рамках этого гайда мы не будем настраивать автоматический режим. В ручном режиме вы наглядно увидите что происходит. Для начала нам нужно отобразить окно с названием "Консоль диспетчера пакетов" для этого жмякаем : Вид -> Другие окна -> Консоль диспетчера пакетов В левом нижнем углу появится окно с названием, как ни странно "Консоль диспетчера пакетов". Давайте там пропишем команду для создания миграции: add-migration test_001 где add-migration это сама команда а test_001 это название будущей миграции и нажмем Enter Если мы все сделали правильно, мы должны увидеть сообщение следующего характера повествующее нам о том, что отменить это действие можно введя в консоли команду remove-migration: В проекте будет создана папка с файлами миграции Далее, чтобы развернуть саму базу данных введем команду update-database. Если строка подключения настроена корректна и база данных доступна вы увидите следующее сообщение об успешной миграции: В базе данных у нас должны появится таблицы соответствующие нашим настройкам. Дальнейшая работа с миграциями отличается больше чем никак: При изменении структуры класса мы создаем новую миграцию при помощи команды add-migration изменяя только имя самой миграции test_002 к примеру. Имя может быть произвольным, но уникальным. Для обновления базы введите команду update-database . В папке Migrations будет вестись история ваших миграций и вы в любой момент сможете откатить базу данных к любому этапу, используя команду update-database с именем миграции до которой нужно произвести откат изменений. Например последняя миграция у нас test_002 а нам нужно откатить до версии test_001, для этого мы должны ввести команду: update-database test_001 Думаю на этом этапе с миграциями мы закончим, если что-то непонятно по миграциям пишите в комментариях. Далее рассмотрим непосредственно работу с базой. Работа с базой данных Сохранение Для того чтобы добавить данные о персонаже в базу, нам нужно создать экземпляр нашего класса и добавить его в контекст при помощи метода Add(), после чего нужно сохранить все изменения из контекста данных непосредственно в базу при помощи метода SaveChanges() public void OnRegistration(Client client, string name, string lastname, string password) { //не забываем про хеширование пароля перед сохранением в бд //создаем нового персонажа Character Char = new Character { Social = client.SocialClubName, Name = name, Lasname = lastname, Password = password, Finance = new Finances(), State = new States(), Inventory = new List<Item>(), Date = DateTime.Now }; //добавляем его в контекст данных Db.Instance.Add(Char); //сохранянем изменения в базе данных Db.Instance.SaveChanges(); } Для обновления данных нужно воспользоваться методом Update() для обновления данных о персонаже, и так же зафиксировать их при помощи метода SaveChanges() //обновляем данные в контексте Db.Instance.Update(Char); //и сохраняем в бд Db.Instance.SaveChanges(); Загрузка С загрузкой дела немного обстоят по другому. Для начала нам не нужны данные находящиеся в другой таблице, будь то состояние персонажа в нашем примере, его кастомизация или что-то еще. Нам будет достаточно информации о его логине и пароле. Рассмотрим пример загрузки данных из бд: public void OnRegistration(Client client, string pwd) { //Получаем персонажа из бд Character Char = Db.Instance.Characters.SingleOrDefault(c=>c.Social == client.SocialClubName); //если записи соответствующей кретерию нашего запроса нет вернется Null if (Char == null) return; //проверяем пароль на совпадение (не забываем про хеш) if (Char.Password == pwd) { //подгружаем зависимые классы вынексеные в отдельную таблицу Db.Instance.Entry(Char).Reference(c => c.State).Load(); //создаем ссылку на нашу модель игрока client.SetData("Character", Char); //загружаем игрока //.............. } else { //если не прошел проверку отправляем на повторный логин //................ } } В этом методе, в первую очередь, мы получаем первое значение соответствующее критерию нашего запроса и возвращаем экземпляр объекта Character со свойствами взятыми из бд. Свойство State, хранящееся в отдельно таблице, будет иметь значение null,его нужно будет явно запросить из базы, но на данном этапе нам достаточно данных чтобы сверить полученный от клиента пароль с паролем из бд (не забывайте про шифрование паролей). Если ни одна одна запись не будет соответствовать критерию нашего запроса вернется Null, это скажет нам о том что пользователя с данным логином не существует. Если значение пароля совпадает то пришло время подгрузить недостающие данные. Делаем это мы при помощи метода Load() для необходимого свойства - в нашем случае это State Db.Instance.Entry(Char).Reference(c => c.State).Load(); На этом этапе наш класс загружен в полном объеме и готов к употреблению. Нам осталось сохранить ссылку на него что бы в дальнейшем можно было манипулировать данными. На этом думаю закончу, если что-то непонятно пишите, постараюсь дополнить. А я устал - я ухожу...1 point
-
Use 'ragemp-server.exe', that is the new 'server.exe'. With the new server version, you don't need to do the bridge anymore. So instead, what you need to do, is move the 'resources' folder inside the 'dotnet' folder. And then execute 'ragemp-server.exe' and you should no longer receive the 'Necesarry "resources" folder does not exist!' and everything should work like before.0 points
