private void OnEntityDataChange(NetHandle entity, string key, object oldValue) { if (key == "SC_Login_Status") { //玩家登录时读取他的权限 List <AclData> p = new List <AclData>(); var lg = new login(); var Player = API.getPlayerFromHandle(entity); if (lg.GetPlayerAccess(Player, "SC_ACL") != "SC_NULL") { var js = lg.GetPlayerAccess(Player, "SC_ACL"); //對於有數組結構的json字符串,必須使用 JArray.Parse來轉換 //需引用using Newtonsoft.Json.Linq; //GTA-N的API.fromJson暫時不支持帶數組結構的json字符串 //服務端版本:v0.1.367.419 JArray jsonVals = JArray.Parse(js); var allACL = 0; foreach (var i in jsonVals) { if (i["aclName"].ToString() == "SC_Admin") { allACL = 1; } var d = new AclData(i["aclName"].ToString(), "", ""); API.setEntitySyncedData(Player, "SC_ACL_HAS_Name:" + i["aclName"], 1); p.Add(d); d = null; } if (allACL == 1) { p = new List <AclData>(); p.Add(new AclData("SC_Admin", "", "~g~警告:該權限為超管權限\n擁有該權限後就擁有了其餘所有權限")); API.setEntitySyncedData(Player, "SC_ACL_HAS_Name:SC_Admin", 1); foreach (var i in aclList) { //API.consoleOutput(i); var d = new AclData(i.aclName.ToString(), "", ""); API.setEntitySyncedData(Player, "SC_ACL_HAS_Name:" + i.aclName, 1); p.Add(d); d = null; } } } API.setEntityData(entity, "SC_ACL", p); lg = null; p = null; } }
public void OnClientEvent(Client Player, string eventName, params object[] arguments) //arguments param can contain multiple params { if (eventName == "SC_ACL_edit_on") { var pName = arguments[0].ToString(); var target = API.getPlayerFromName(pName); if (target != null) { if (API.getEntityData(target, "SC_ACL_edit_state") == null) { API.setEntityData(Player, "SC_ACL_edit_to", target); API.setEntityData(target, "SC_ACL_edit_state", 1); API.triggerClientEvent(Player, "SC_ACL_edit_on_ok", pName, API.toJson(API.getEntityData(target, "SC_ACL")), API.toJson(aclList)); } else { API.sendNotificationToPlayer(Player, "編輯 ~g~" + pName + "\n~w~權限表失敗\n原因 ~r~該玩家權限表正在被編輯", false); } } else { API.sendNotificationToPlayer(Player, "編輯 ~g~" + pName + "\n~w~權限表失敗\n 原因 ~r~該玩家不在綫", false); } } if (eventName == "SC_ACL_edit_off") { var target = API.getEntityData(Player, "SC_ACL_edit_to"); API.resetEntityData(target, "SC_ACL_edit_state"); API.resetEntityData(Player, "SC_ACL_edit_to"); API.triggerClientEvent(Player, "SC_ACL_edit_off_ok", PlayerListToJson()); } if (eventName == "SC_ACL_edit_add_aclname") { //新增權限 var name = arguments[0].ToString(); var target = API.getEntityData(Player, "SC_ACL_edit_to"); var acllist = API.getEntityData(target, "SC_ACL"); acllist.Add(new AclData(name, "", "")); API.triggerClientEvent(Player, "SC_ACL_edit_listupdata", API.toJson(acllist)); var lg = new login(); lg.SetPlayerAccess(target, "SC_ACL", API.toJson(acllist)); API.setEntitySyncedData(target, "SC_ACL_HAS_Name:" + name, 1); lg = null; acllist = null; } if (eventName == "SC_ACL_edit_delete") { var name = arguments[0].ToString(); var target = API.getEntityData(Player, "SC_ACL_edit_to"); var acllist = API.getEntityData(target, "SC_ACL"); AclData p = null; foreach (AclData v in acllist) { if (v.aclName == name) { p = v; } } if (p != null) { acllist.Remove(p); } API.resetEntitySyncedData(Player, "SC_ACL_HAS_Name:" + name); API.triggerClientEvent(Player, "SC_ACL_edit_listupdata", API.toJson(acllist)); var lg = new login(); lg.SetPlayerAccess(Player, "SC_ACL", API.toJson(acllist)); lg = null; acllist = null; } }