UE虚幻将存档保存到自己服务器
创始人
2025-01-20 02:03:07
0

        本文思路,主要是通过二进制形式读取UE的存档文件,将字节串转为字符串,然后通过post提交到服务器,服务器通过php接收并写入mysql数据库,载入存档也是同理。亲测可用,windows和安卓都测试过,通过这个方案完全没问题。

        本文需要使用到http,json,文件管理3种插件,全部在商城购买大概300-400元,如果只是学习使用可以使用其他途径购买插件,商用买正版。

        使用到的UE插件如下:

        HTTP request for blueprint 大概36块

        LE file manage 289块,应该也可以用其他插件,只要能以二进制读写文件就行。

        

         LE Extended Library 免费插件,用来将字节串转为字符串,字符串转为字节串。

        JsonParse 43.32元,创建json,解析json。

        本文非插件广告,只要能满足需求,使用其他类似插件或者自己开发都行。

先要自行实现UE的存档,本文不赘述UE如何存档的问题。

UE会将存档保存为一个.sav文件。

将存档文件读出,返回一个字节数组,文件名是存档的插槽名。

字节数组转字符串, LE Extended Library提供这个功能。

然后创建Json,其中包括用户密码和内容,三个元素,生成Json字符串

创建Post请求

参数为空,请求头申明数据类型为Json,Body就是刚刚创建的Json字符串。

服务端本人使用的是LNMP环境,创建一个php文件,命名为SaveGame.php

connect_error) {     die("连接失败: " . $conn->connect_error); }  // 从数据库中获取用户密码和保存数据 function getUserPassword($username) {     global $conn;     $stmt = $conn->prepare("SELECT Password, Save FROM xxxxxxx WHERE User = ?");     $stmt->bind_param("s", $username);     $stmt->execute();     $result = $stmt->get_result();     $row = $result->fetch_assoc();     $stmt->close();     return $row; }  // 验证用户密码 function authenticateUser($username, $password) {     $user = getUserPassword($username);     if ($user && $user["Password"] === $password) {         return true;     } else {         return false;     } }   // 示例使用 $data = json_decode(file_get_contents('php://input'), true); $username = $data["User"]; $password = $data["Password"]; $saveData = $data["Save"];  if (authenticateUser($username, $password)) {     // 密码验证成功,修改保存数据     $stmt = $conn->prepare("UPDATE xxxxx SET Save = ? WHERE User = ?");     $stmt->bind_param("ss", $saveData, $username);     $stmt->execute();     $stmt->close();     $response = array("message" => "上传成功");     echo json_encode($response); } else {     // 密码验证失败,创建新用户并存储数据     #createUser($username, $password, $saveData);     $response = array("error" => "用户名或密码错误");     echo json_encode($response); }  // 关闭数据库连接 $conn->close(); ?>  

填写自己数据库信息,xxxxx是数据表名,通过phpmyadmin创建数据库,数据表和数据表的结构,结构如下:

包含ID作为主键,用户名,密码,内容。

执行sql命令ALTER TABLE your_table MODIFY COLUMN ID INT AUTO_INCREMENT;

将ID设置为自增。

回到UE,从上面PHP可以看到有两种返回的消息,一种是message,一种是error。

在回调事件处理这两种消息,告示用户是否成功。

这里json解析是http插件提供的。判断是否有error返回,有的话用红色把消息显示,这里的消息显示是我自己设计的一个简单的用户控件。

这样就完成了保存,

效果是这样的

可以看到Save这里有一串字符串,这个就是文件字节转过来的,如果要加载存档,就把这一些转回去。

加载存档

将用户名和密码post服务器上,服务器验证,然后返回数据,写入存档文件。

服务器创建LoadGame.php

connect_error) {     die("Connection failed: " . $conn->connect_error); }  // Receive JSON data from POST request $json_data = json_decode(file_get_contents('php://input'), true);  // Check if JSON data contains User and Password fields if (isset($json_data['User']) && isset($json_data['Password'])) {     $user = $json_data['User'];     $password = $json_data['Password'];      // Prepare SQL statement to retrieve user data     $stmt = $conn->prepare("SELECT Password, Save FROM xxxxxxxxxx WHERE User = ?");     $stmt->bind_param("s", $user);     $stmt->execute();     $result = $stmt->get_result();      // Check if user exists     if ($result->num_rows > 0) {         $row = $result->fetch_assoc();         $stored_password = $row["Password"];         $save_data = $row["Save"];          // Verify password         if ($password==$stored_password) {             // Password is correct, return Save data as JSON             echo json_encode(array("Save" => $save_data));         } else {             // Password is incorrect, return error message as JSON             echo json_encode(array("error" => "密码错误"));         }     } else {         // User does not exist, create new user         $hashed_password = password_hash($password, PASSWORD_DEFAULT); // Hash the password         $stmt = $conn->prepare("INSERT INTO xxxxxxx (User, Password, Save) VALUES (?, ?, ?)");         $stmt->bind_param("sss", $user, $hashed_password, ""); // Change "" to default Save data if needed         $stmt->execute();         echo json_encode(array("error" => "无此用户"));     }      $stmt->close(); } else {     // JSON data does not contain User and Password fields, return error message as JSON     echo json_encode(array("error" => "需要用户名和密码")); }  $conn->close();  ?> 

一样的逻辑

验证服务器是否返回错误

没有则写入存档

接下来还可以做一个创建新用户的事件,方法同上,自行研究。

再建立一个用户控件,方便用户输入用户名和密码。

创建控件的方法自行学习,本文就不赘述了。

此方案在UE原本的存档方案的前提下实现云存档,方便跨设备游玩,方案简单粗暴,适用广。

此方法仅供参考学习,商用需要考虑文件读写安全,性能,php代码防止sql注入等等问题,请勿直接用于商用。

相关内容

热门资讯

透视苹果版!pokerworl... 透视苹果版!pokerworld破解版下载,哈糖大菠萝破解器,举措教程(真的有挂)-哔哩哔哩poke...
透视ai代打!poker wo... 透视ai代打!poker world辅助器(透视)好像存在有挂,可靠教程(有挂插件挂)-哔哩哔哩一、...
八分钟揭露!wepoker怎么... 八分钟揭露!wepoker怎么挂飞机(透视)确实真的是有挂,AI教程(有挂实锤)-哔哩哔哩1、八分钟...
透视辅助!如何下载wepoke... 透视辅助!如何下载wepoker安装包,有没有人wepoker,举措教程(确实有挂)-哔哩哔哩如何下...
透视透视!拱趴大菠萝机器人(透... 透视透视!拱趴大菠萝机器人(透视)其实真的有挂,AI教程(有挂技巧)-哔哩哔哩1、拱趴大菠萝机器人透...
第5分钟详细!wepoker私... 第5分钟详细!wepoker私人定制透视(透视)竟然是有挂,必备教程(存在有挂)-哔哩哔哩1、点击下...
透视透视!wpk私人局辅助是真... 透视透视!wpk私人局辅助是真的吗,德普之星私人局辅助免费,方案教程(有人有挂)-哔哩哔哩1、德普之...
透视系统!werplan怎么辅... 透视系统!werplan怎么辅助(透视)切实是真的挂,详细教程(有挂脚本)-哔哩哔哩1、玩家可以在w...
一分钟普及!wepoker轻量... 一分钟普及!wepoker轻量版透视(透视)总是真的有挂,解密教程(真实有挂)-哔哩哔哩;1、游戏颠...
透视挂透视!we poker插... 透视挂透视!we poker插件,aapoker真的假的,策略教程(有挂助手)-哔哩哔哩1、aapo...