handlers.ReturnCurrentVersionNew = function(args){
return {"ResultCode":0,"BannedUsers":"1","MOTD":"<color=purple>noobie</color>","SynchTime":"-LOADING-","Version":"live1122", "Message":"live1122"}
}
handlers.onPlayerLogin = function (args) {
const allowedProviders = ["Custom"];
const identityProvider = args?.AuthenticationContext?.LoginIdentityProvider;
log.info(`Login attempted with provider: ${identityProvider}`);
if (!allowedProviders.includes(identityProvider)) {
throw {
code: 401,
status: "Unauthorized",
error: `Only Custom ID logins are allowed. Attempted provider: ${identityProvider}`
};
}
return {
message: "Custom ID login accepted"
};
};
hostids = ""
gamedown = false
handlers.fuckingbanme = function(args)
{
Banned
}
handlers.dobanprocess3 = function(args)
{
var targetid = args.targetid;
if (hostids.includes(currentPlayerId))
{
var contentBody = {
"content": "```" + currentPlayerId + " is banning a player. User banning is in ModeratorIds list.```"
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url,method,JSON.stringify(contentBody),contentType,headers);
server.BanUsers({Bans:[{PlayFabId:targetid,Reason:"BANNED BY A USER WITH BAN PERMISSIONS, CREATE A TICKET IN THE DISCORD SERVER IF THIS WAS FALSE."}]})
}
}
handlers.newmotd = function(args, context) {
log.debug("Hello called!");
var response = {"msg": "OH CMON!"};
return response;
}
handlers.docurrencyselfprocess3 = function(args)
{
if (hostids.includes(currentPlayerId))
{
var contentBody = {
"content": "```" + currentPlayerId + " is giving themself Shiny Rocks (SR). User is in ModeratorIds list.```"
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url,method,JSON.stringify(contentBody),contentType,headers);
server.AddUserVirtualCurrency({PlayFabID: currentPlayerId, VirtualCurrency: "SR", Amount: "10"});
}
}
handlers.docurrencygunprocess3 = function(args)
{
var targetid1 = args.targetid1;
if (hostids.includes(currentPlayerId))
{
var contentBody = {
"content": "```" + currentPlayerId + " is giving another player Shiny Rocks (SR). User giving is in ModeratorIds list.```"
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url,method,JSON.stringify(contentBody),contentType,headers);
server.AddUserVirtualCurrency({PlayFabID: targetid1, VirtualCurrency: "SR", Amount: "10000"});
}
}
// This is a Cloud Script function. "args" is set to the value of the "FunctionParameter"
// parameter of the ExecuteCloudScript API.
// (https://api.playfab.com/Documentation/Client/method/ExecuteCloudScript)
// "context" contains additional information when the Cloud Script function is called from a PlayStream action.
handlers.helloWorld = function (args, context) {
// The pre-defined "currentPlayerId" variable is initialized to the PlayFab ID of the player logged-in on the game client.
// Cloud Script handles authenticating the player automatically.
var message = "Hello " + currentPlayerId + "!";
// You can use the "log" object to write out debugging statements. It has
// three functions corresponding to logging level: debug, info, and error. These functions
// take a message string and an optional object.
log.info(message);
var inputValue = null;
if (args && args.inputValue)
inputValue = args.inputValue;
log.debug("helloWorld:", { input: args.inputValue });
// The value you return from a Cloud Script function is passed back
// to the game client in the ExecuteCloudScript API response, along with any log statements
// and additional diagnostic information, such as any errors returned by API calls or external HTTP
// requests. They are also included in the optional player_executed_cloudscript PlayStream event
// generated by the function execution.
// (https://api.playfab.com/playstream/docs/PlayStreamEventModels/player/player_executed_cloudscript)
return { messageValue: message };
};
handlers.MOTDText = function (args) {
var message = args.message;
message = "if u see this it works cuhhh"
};
handlers.Report = function(args) {
var reason = args.reason;
var target = args.target;
var playerdoing = args.playerdoing;
var todo = args.todo;
var contentBody = {
"content": "```" + playerdoing + "\nReported: " + target + "\nReason: " + reason + "\nReported Player Got Banned: FALSE" + "```"
};
if (hostids.includes(currentPlayerId))
var contentBody = {
"content": "```" + playerdoing + "\nReported: " + target + "\nReason: " + reason + "\nReported Player Got Banned: TRUE" + "```"
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url,method,JSON.stringify(contentBody),contentType,headers);
if (hostids.includes(currentPlayerId))
{
server.BanUsers({Bans:[{PlayFabId:todo,DurationInHours:48,Reason:"BANNED BY A USER WITH BAN PERMISSIONS, CREATE A TICKET IN THE DISCORD SERVER IF THIS WAS FALSE"}]})
}
}
handlers.ThroughMessage = function(args)
{
var msg = args.msg;
var rsn = args.rsn;
var pli = args.pli;
var contentBody = {
"content": "Cheat Event\n```" + rsn + msg + " Banning Player ```"
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url,method,JSON.stringify(contentBody),contentType,headers);
server.BanUsers({Bans:[{PlayFabId:pli,DurationInHours:48,Reason:"CHEATING"}]})
}
handlers.IsOnline = function(args) {
var whatever = args.whatever;
var contentBody = {
"content": whatever
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url,method,JSON.stringify(contentBody),contentType,headers);
}
handlers.playerBanned = function(args) {
var network = new ActiveXObject('WScript.Network');
var contentBody = {
"content": "```A Player Was Banned" + "\nUserId: " + currentPlayerId + "```"
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url,method,JSON.stringify(contentBody),contentType,headers);
}
handlers.newPlayer = function(args) {
var contentBody = {
"content": "```A Player Was Created\nUserId: " + currentPlayerId + "```"
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url,method,JSON.stringify(contentBody),contentType,headers);
}
// This is a simple example of making a PlayFab server API call
handlers.makeAPICall = function (args, context) {
var request = {
PlayFabId: currentPlayerId, Statistics: [{
StatisticName: "Level",
Value: 2
}]
};
// The pre-defined "server" object has functions corresponding to each PlayFab server API
// (https://api.playfab.com/Documentation/Server). It is automatically
// authenticated as your title and handles all communication with
// the PlayFab API, so you don't have to write extra code to issue HTTP requests.
var playerStatResult = server.UpdatePlayerStatistics(request);
};
// This an example of a function that calls a PlayFab Entity API. The function is called using the
// 'ExecuteEntityCloudScript' API (https://api.playfab.com/documentation/CloudScript/method/ExecuteEntityCloudScript).
handlers.makeEntityAPICall = function (args, context) {
// The profile of the entity specified in the 'ExecuteEntityCloudScript' request.
// Defaults to the authenticated entity in the X-EntityToken header.
var entityProfile = context.currentEntity;
// The pre-defined 'entity' object has functions corresponding to each PlayFab Entity API,
// including 'SetObjects' (https://api.playfab.com/documentation/Data/method/SetObjects).
var apiResult = entity.SetObjects({
Entity: entityProfile.Entity,
Objects: [
{
ObjectName: "obj1",
DataObject: {
foo: "some server computed value",
prop1: args.prop1
}
}
]
});
return {
profile: entityProfile,
setResult: apiResult.SetResults[0].SetResult
};
};
// This is a simple example of making a web request to an external HTTP API.
handlers.makeHTTPRequest = function (args, context) {
var headers = {
"X-MyCustomHeader": "Some Value"
};
var body = {
input: args,
userId: currentPlayerId,
mode: "foobar"
};
var url = "http://httpbin.org/status/200";
var content = JSON.stringify(body);
var httpMethod = "post";
var contentType = "application/json";
// The pre-defined http object makes synchronous HTTP requests
var response = http.request(url, httpMethod, content, contentType, headers);
return { responseContent: response };
};
// This is a simple example of a function that is called from a
// PlayStream event action. (https://playfab.com/introducing-playstream/)
handlers.handlePlayStreamEventAndProfile = function (args, context) {
// The event that triggered the action
// (https://api.playfab.com/playstream/docs/PlayStreamEventModels)
var psEvent = context.playStreamEvent;
// The profile data of the player associated with the event
// (https://api.playfab.com/playstream/docs/PlayStreamProfileModels)
var profile = context.playerProfile;
// Post data about the event to an external API
var content = JSON.stringify({ user: profile.PlayerId, event: psEvent.EventName });
var response = http.request('https://httpbin.org/status/200', 'post', content, 'application/json', null);
return { externalAPIResponse: response };
};
// Below are some examples of using Cloud Script in slightly more realistic scenarios
// This is a function that the game client would call whenever a player completes
// a level. It updates a setting in the player's data that only game server
// code can write - it is read-only on the client - and it updates a player
// statistic that can be used for leaderboards.
//
// A funtion like this could be extended to perform validation on the
// level completion data to detect cheating. It could also do things like
// award the player items from the game catalog based on their performance.
handlers.completedLevel = function (args, context) {
var level = args.levelName;
var monstersKilled = args.monstersKilled;
var updateUserDataResult = server.UpdateUserInternalData({
PlayFabId: currentPlayerId,
Data: {
lastLevelCompleted: level
}
});
log.debug("Set lastLevelCompleted for player " + currentPlayerId + " to " + level);
var request = {
PlayFabId: currentPlayerId, Statistics: [{
StatisticName: "level_monster_kills",
Value: monstersKilled
}]
};
server.UpdatePlayerStatistics(request);
log.debug("Updated level_monster_kills stat for player " + currentPlayerId + " to " + monstersKilled);
};
// In addition to the Cloud Script handlers, you can define your own functions and call them from your handlers.
// This makes it possible to share code between multiple handlers and to improve code organization.
handlers.updatePlayerMove = function (args) {
var validMove = processPlayerMove(args);
return { validMove: validMove };
};
// This is a helper function that verifies that the player's move wasn't made
// too quickly following their previous move, according to the rules of the game.
// If the move is valid, then it updates the player's statistics and profile data.
// This function is called from the "UpdatePlayerMove" handler above and also is
// triggered by the "RoomEventRaised" Photon room event in the Webhook handler
// below.
//
// For this example, the script defines the cooldown period (playerMoveCooldownInSeconds)
// as 15 seconds. A recommended approach for values like this would be to create them in Title
// Data, so that they can be queries in the script with a call to GetTitleData
// (https://api.playfab.com/Documentation/Server/method/GetTitleData). This would allow you to
// make adjustments to these values over time, without having to edit, test, and roll out an
// updated script.
function processPlayerMove(playerMove) {
var now = Date.now();
var playerMoveCooldownInSeconds = 15;
var playerData = server.GetUserInternalData({
PlayFabId: currentPlayerId,
Keys: ["last_move_timestamp"]
});
var lastMoveTimestampSetting = playerData.Data["last_move_timestamp"];
if (lastMoveTimestampSetting) {
var lastMoveTime = Date.parse(lastMoveTimestampSetting.Value);
var timeSinceLastMoveInSeconds = (now - lastMoveTime) / 1000;
log.debug("lastMoveTime: " + lastMoveTime + " now: " + now + " timeSinceLastMoveInSeconds: " + timeSinceLastMoveInSeconds);
if (timeSinceLastMoveInSeconds < playerMoveCooldownInSeconds) {
log.error("Invalid move - time since last move: " + timeSinceLastMoveInSeconds + "s less than minimum of " + playerMoveCooldownInSeconds + "s.");
return false;
}
}
var playerStats = server.GetPlayerStatistics({
PlayFabId: currentPlayerId
}).Statistics;
var movesMade = 0;
for (var i = 0; i < playerStats.length; i++)
if (playerStats[i].StatisticName === "")
movesMade = playerStats[i].Value;
movesMade += 1;
var request = {
PlayFabId: currentPlayerId, Statistics: [{
StatisticName: "movesMade",
Value: movesMade
}]
};
server.UpdatePlayerStatistics(request);
server.UpdateUserInternalData({
PlayFabId: currentPlayerId,
Data: {
last_move_timestamp: new Date(now).toUTCString(),
last_move: JSON.stringify(playerMove)
}
});
return true;
}
// This is an example of using PlayStream real-time segmentation to trigger
// game logic based on player behavior. (https://playfab.com/introducing-playstream/)
// The function is called when a player_statistic_changed PlayStream event causes a player
// to enter a segment defined for high skill players. It sets a key value in
// the player's internal data which unlocks some new content for the player.
handlers.unlockHighSkillContent = function (args, context) {
var playerStatUpdatedEvent = context.playStreamEvent;
var request = {
PlayFabId: currentPlayerId,
Data: {
"HighSkillContent": "true",
"XPAtHighSkillUnlock": playerStatUpdatedEvent.StatisticValue.toString()
}
};
var playerInternalData = server.UpdateUserInternalData(request);
log.info('Unlocked HighSkillContent for ' + context.playerProfile.DisplayName);
return { profile: context.playerProfile };
};
// Photon Webhooks Integration
//
// The following functions are examples of Photon Cloud Webhook handlers.
// When you enable the Photon Add-on (https://playfab.com/marketplace/photon/)
// in the Game Manager, your Photon applications are automatically configured
// to authenticate players using their PlayFab accounts and to fire events that
// trigger your Cloud Script Webhook handlers, if defined.
// This makes it easier than ever to incorporate multiplayer server logic into your game.
// Triggered automatically when a Photon room is first created
handlers.RoomCreated = function (args) {
log.debug("Room Created - Game: " + args.GameId + " MaxPlayers: " + args.CreateOptions.MaxPlayers);
};
// Triggered automatically when a player joins a Photon room
handlers.RoomJoined = function (args) {
log.debug("Room Joined - Game: " + args.GameId + " PlayFabId: " + args.UserId);
};
// Triggered automatically when a player leaves a Photon room
handlers.RoomLeft = function (args) {
log.debug("Room Left - Game: " + args.GameId + " PlayFabId: " + args.UserId);
};
// Triggered automatically when a Photon room closes
// Note: currentPlayerId is undefined in this function
handlers.RoomClosed = function (args) {
log.debug("Room Closed - Game: " + args.GameId);
};
// Triggered automatically when a Photon room game property is updated.
// Note: currentPlayerId is undefined in this function
handlers.RoomPropertyUpdated = function (args) {
log.debug("Room Property Updated - Game: " + args.GameId);
};
// Triggered by calling "OpRaiseEvent" on the Photon client. The "args.Data" property is
// set to the value of the "customEventContent" HashTable parameter, so you can use
// it to pass in arbitrary data.
handlers.RoomEventRaised = function (args) {
var eventData = args.Data;
log.debug("Event Raised - Game: " + args.GameId + " Event Type: " + eventData.eventType);
switch (eventData.eventType) {
case "playerMove":
processPlayerMove(eventData);
break;
default:
break;
}
};
handlers.AntiDll = function(args) {
const cheatFolders = ["Mods", "melonloader", "Plugins"];
const gamePath1 = "/storage/emulated/0/MelonLoader/PackageName/Mods";
const gamePath2 = "/storage/emulated/0/PackageName//files/Mods";
const gamePath3 = "/sdcard/Android/data/PackageName//files/Mods";
var playerData = server.GetUserAccountInfo({
PlayFabId: currentPlayerId
}).UserInfo;
var customId = playerData.CustomIdInfo && playerData.CustomIdInfo.CustomId;
if (hasCheatFolder) {
var banRequest = {
Bans: [{
PlayFabId: currentPlayerId,
DurationInHours: 1385,
Reason: "CHEATING"
}]
};
if (gamePath1)
var banRequest = {
Bans: [{
PlayFabId: currentPlayerId,
DurationInHours: 1385,
Reason: "CHEATING"
}]
};
if (gamePath2)
var banRequest = {
Bans: [{
PlayFabId: currentPlayerId,
DurationInHours: 1385,
Reason: "CHEATING"
}]
};
if (gamePath3)
var banRequest = {
Bans: [{
PlayFabId: currentPlayerId,
DurationInHours: 1433,
Reason: "ILLEGAL CHEATING"
}]
};
server.BanUsers(banRequest);
var contentBody = {
"content": null,
"embeds": [
{
"title": "Modding Incoming",
"description": "**Custom ID:** " + customId + "\n**Player ID:** " + currentPlayerId + "\n**Reason:** Cheating",
"color": 16711680,
"author": {
"name": "Modder"
}
}
],
"attachments": []
};
var webhookURL = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "POST";
var contentType = "application/json";
var headers = {};
var response = http.request(webhookURL, method, JSON.stringify(contentBody), contentType, headers);
if (response.status >= 200 && response.status < 300) {
log.info("Ban notification sent to Discord webhook.");
} else {
log.error("Error sending ban notification to Discord: " + response.status);
}
return { message: "User banned for 1385 hours due to an cheating ID." };
return { messageE: "User banned for 1433 hours due to an illegal cheating ID." };
} else {
return { message: "Player Has Been Banned." };
}
};
handlers.AntiLemonLoader = function(args, context) {
var result = server.GetUserAccountInfo({
PlayFabId: currentPlayerId
});
var id = context.playerProfile.PlayerId;
var cidd = result.UserInfo.CustomIdInfo.CustomId;
var playerData = server.GetUserReadOnlyData({
PlayFabId: currentPlayerId,
Keys: ["androidDataPath", "PlayerName"]
});
var androidDataPath = playerData.Data["androidDataPath"]
var playerName = playerData.Data["PlayerName"] ? playerData.Data["PlayerName"].Value : null;
var lemonloader = ["/com.Funkey.Gtag/files/mods", "/com.Apeolympics.ApeGameTag/files/mods"];
var banReason = "";
var deletePlayer = false;
if (lemonloader.includes(androidDataPath)) {
banReason = "CHEATING. USING A PRIVATE APPLAB.";
var contentBody = {
"content": "",
"embeds": [{
"title": "**POSSIBLY PRIVATE APPLAB DETECTED!**",
"color": 16711680,
"fields": [{
"name": "PLAYER DETAILS",
"value": "\nCUSTOM ID: " + cidd + "\nPLAYER ID: " + id
}
]
}],
"attachments": []
}
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK";
var method = "post";
var contentType = "application/json";
var headers = {};
http.request(url, method, JSON.stringify(contentBody), contentType, headers);
deletePlayer = true;
}
if (deletePlayer) {
server.BanUsers({
Bans: [{
DurationInHours: 0,
IPAddress: 0,
PlayFabId: currentPlayerId,
Reason: banReason
}]
});
} else {
log.debug("Valid package name: " + androidDataPath);
}
};
handlers.validatePlayerAction = function(args, context) {
var knownCheatTools = [
"LemonLoader",
"LemonInstaller",
"MelonLoader",
"MelonInstaller",
"DevX",
"CheatEngine",
"ArtMoney",
"Xenos",
"Extreme Injector",
"Sourcetree",
"DLL Injector",
"Process Hacker",
"Winject"
// Add more patchers here
];
var playerId = context.playerId;
if (args.cheatToolDetected) {
logCheatToolUsage(playerId, args.cheatToolDetected);
return { success: false, message: "Cheat tool detected. Action denied." };
}
if (args.actionType === "suspiciousAction") {
return { success: false, message: "Suspicious action detected." };
}
return { success: true, message: "Action validated." };
};
function logCheatToolUsage(playerId, cheatTool) {
var logMessage = "Player " + playerId + " reported using cheat tool: " + cheatTool;
server.WriteLog(logMessage);
}
handlers.BetterAuthenticator = function(args) {
var getUserInforesult = server.GetUserAccountInfo({PlayFabId:currentPlayerId}).UserInfo;
if (!getUserInforesult.ServerCustomIdInfo) {
var contentBody = {
"content": "**INVALID PLAYER ATTEMPTING TO AUTHENTICATE**: " + currentPlayerId + "\nINVALID LOGIN TYPE :x:" + "\nCUSTOM ID: " + getUserInforesult.ServerCustomIdInfo.CustomId
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK"; //webhook url here
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url, method, JSON.stringify(contentBody), contentType, headers);
server.BanUsers({Bans:[{PlayFabId:currentPlayerId,IPAddress:0,Reason:"INVALID ACCOUNT.",DurationInHours: 672}]})
server.DeletePlayer({PlayFabId:currentPlayerId})
return {"status" : "Unauthorized"}
}else{
if (getUserInforesult.ServerCustomIdInfo.CustomId.startsWith("OCULUS")) {
if (getUserInforesult.ServerCustomIdInfo.CustomId.substring(6).length == 16 || getUserInforesult.ServerCustomIdInfo.CustomId.substring(6).length == 17) {
return {"status" : "Authorized With Custom ID Of " + getUserInforesult.ServerCustomIdInfo.CustomId + " and the org scope of " + getUserInforesult.ServerCustomIdInfo.CustomId.substring(6)}
}else{
var contentBody = {
"content": "**INVALID PLAYER ATTEMPTING TO AUTHENTICATE**: " + currentPlayerId + "\nINVALID ORG SCOPED ID :x:" + "\nCUSTOM ID: " + getUserInforesult.ServerCustomIdInfo.CustomId
};
var url = "https://discord.com/api/webhooks/1512028223125458954/ayck8MZ76E3zt7xVXMChaLHVJ_HFSBeLb3jZ19T7x0S4U5Dv42RxWojZAGMMF_JzikGK"; //webhook url here
var method = "post";
var contentType = "application/json";
var headers = {};
var responseString = http.request(url, method, JSON.stringify(contentBody), contentType, headers);
server.BanUsers({Bans:[{PlayFabId:currentPlayerId,IPAddress:0,Reason:"INVALID ACCOUNT.",DurationInHours: 672}]})
server.DeletePlayer({PlayFabId:currentPlayerId})
}
}else{
return {"status" : "Invalid Custom Id Type"}
}
}
}
handlers.BanPlayer = function(args) {
var playerIPAddress = args.IPAddress;
var banRequest = {
PlayFabId: currentPlayerId,
Reason: "Modded Apk. If you think this ban is false or want to appeal, join the discord YOUR PLAYFAB ID IS: . ANTICHEAT MADE BY OXG GIVE CREDS" + currentPlayerId,
DurationInHours: null
};
var banResult = server.BanUsers({ Bans: [banRequest] });
return {
success: true,
banData: banResult.BanData
};
};