Example #1
0
 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;
     }
 }
Example #2
0
    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;
        }
    }