PvX Selector

Allows PvE/PvP Gameplay on one server.

Total Downloads: 683 - First Release: Apr 21, 2016 - Last Update: Mar 10, 2017

5/5, 14 likes
  1. How do you know it didn't work in game?
    Did you shoot someone who has PvP = False
     
  2. Yes I try with my modo has done on the request Two All PvP Then I accept both ticket in the data I have seen that it is a false move but could not touch neither one nor the other then 2 3 hours after I notice that I made to him of the damage so I do not understand too ..

    I'll try again but I test well pensse that its does not function : /


    EDIT: Ok last test for pvx its good, he working i dont understand why lather i have this beug so
    I prefer to put deceive que la plugins do not work ^^ Sorry if you have loose lot of time at screach the the bug :$
     
    Last edited by a moderator: Jul 12, 2016
  3. Could you send that to me via private message in french to translate as it did not come out good
     
  4. Yes no problem, google translate is not very good for talk english realy sorry guy.. :/
    [DOUBLEPOST=1468433643][/DOUBLEPOST]
    Yes no problem, google translate is not very good for talk english realy sorry guy.. :/
    I sends you a copy in English is so is still not very correct but people will know it works well :)


    Yes I try with my moderator to demand pvp , I accept the two tickets in the data files I noted that the pvp go well true, but I could not do dmg , then 2 3 hours later I noticed that I could do him damage, so I do not understand too ..

    I'll try again , but I pensse although this does not work : /


    EDIT: Okay I redid a test it works I do not understand why but I prefer to deceive and the plugins do not work ^^ Sorry if you lose a lot of time searching for the bug: /
    I hope that I do not really have to worry about with but I do not pensse :)
    If you expect to make the new update I would still be the test for her for you : D
     
  5. How can I fix that problem:

    [Oxide] 21:28 [Debug] at Oxide.Plugins.PvXselector.DamageEntity (.BasePlayer attacker, .BaseEntity _entity) [0x00000] in <filename unknown>:0
    at Oxide.Plugins.PvXselector.OnEntityTakeDamage (.BaseCombatEntity entity, .HitInfo hitinfo) [0x00000] in <filename unknown>:0
    at Oxide.Plugins.PvXselector.DirectCallHook (System.String name, System.Object& ret, System.Object[] args) [0x00000] in <filename unknown>:0
    at Oxide.Plugins.CSharpPlugin.InvokeMethod (HookMethod method, System.Object[] args) [0x00000] in <filename unknown>:0
    at Oxide.Core.Plugins.CSPlugin.OnCallHook (System.String name, System.Object[] args) [0x00000] in <filename unknown>:0
    at Oxide.Core.Plugins.Plugin.CallHook (System.String name, System.Object[] args) [0x00000] in <filename unknown>:0
     
  6. what version where you using?
    When did this error happen?
     
  7. I'm a pve player, if I try to destroy a building from a pve/pvp player, I can see this error code in rcon and not in the gui (not allowed message).

    Plugin: 0.6.0 (08.07.2016)
    Server+Client+Oxide: Update from 15.07.2016 (16 o'clock)
     
    Last edited by a moderator: Jul 15, 2016
  8. You have old version oxide , he working for me :)
     
  9. Please make sure you are using the most recent version of RustIO.
    This mod is dependent on that mod, if that mod does not work or is out of date I can not guarantee my mod will work.
    As per my test today the mod works on my test server running just Oxide and RustIO with everything up to day.
    Please confirm RustIO and Oxide are both correctly up to date.

    ############################################################
    Development Update
    So I have done some more work on my Dev version of this mod.
    State:
    • Overlay shows
    • new ticket system partly functional - Creates tickets
    • some chat commands are writen
    Please note this is a preview, Mod is not complete and parts are removed due to text count limit.
    Code:
    namespace Oxide.Plugins
    {
        [Info("PvXSelector", "Alphawar", "0.6.0", ResourceId = 1817)]
        [Description("Player vs x Selector")]
        class PvXselector : RustPlugin
        {
    void OnServerInitialized()
            {
                LoadData();
                InfoCache = playerData.Info;
                checkPlayersRegistered();
            }
            void Loaded()
            {
                PlayerData = Interface.Oxide.DataFileSystem.GetFile("PvX/PlayerData");
                TicketData = Interface.Oxide.DataFileSystem.GetFile("PvX/TicketData");
                TicketLog = Interface.Oxide.DataFileSystem.GetFile("PvX/TicketLog");
                lang.RegisterMessages(messages, this);
                permissionHandle();
                LoadVariables();
            }
            void saveInfoCache()
            {
                playerData.Info = InfoCache;
                PlayerData.WriteObject(playerData);
            }
            void saveTicketData()
            {
                TicketData.WriteObject(ticketData);
            }
            void saveTicketLog()
            {
                TicketLog.WriteObject(TicketLog);
            }
            void SaveAll()
            {
                playerData.Info = InfoCache;
                PlayerData.WriteObject(playerData);
                TicketData.WriteObject(ticketData);
                TicketLog.WriteObject(ticketLog);
            }
            // Main Controlls
            [ChatCommand("pvx")]
            void PvXCmd(BasePlayer _player, string cmd, string[] args)
            {
                if ((args == null || args.Length == 0)) return;
                switch (args[0].ToLower())
                {
                    case "admin":
                        AdminFunction();
                        return;
                    case "change": //Working, Not fully tested, No Debugg includded
                        if ((args.Length < 2) && (args[1] != "pve") && (args[1] != "pvp")){
                            LangMSG(_player, "IncoFormPleaUse");
                            ChatMessageHandle(_player, "/pvx change [pvp/pve]");
                            return;
                        }
                        if (isplayerNA(_player)){
                            LangMSG(_player, "IncoFormPleaUse");
                            ChatMessageHandle(_player, "/pvx select [pvp/pve]");
                            return;
                        }
                        changeFunction(_player, args[1]);
                        return;
                    case "debug":
                        debugFunction();
                        return;
                    case "developer":
                        developerFunction();
                        return;
                    case "help":
                        helpFunction();
                        return;
                    case "select": //Working, Not fully tested, No Debugg includded
                        if ((args.Length < 2) && (args[1] != "pve") && (args[1] != "pvp")){
                            LangMSG(_player, "IncoFormPleaUse");
                            ChatMessageHandle(_player, "/pvx select [pvp/pve]");}
                        selectFunction(_player, args[1]);
                        return;
                    case "ticket": //Ticket Edit Cancel working, Not fully tested, No Debugg includded
                        if (args.Length < 3)
                        {
                            LangMSG(_player, "IncoFormPleaUse");
                            if (IsAllowed(_player, "admin", "null")) ChatMessageHandle(_player, "/pvx ticket admin [list/accept/decline/display]");
                            ChatMessageHandle(_player, "/pvx ticket edit [cancel/reason]");
                        }
                        if (args.Length > 4)
                        {
                            LangMSG(_player, "IncoFormPleaUse");
                            if (IsAllowed(_player, "admin", "null")) ChatMessageHandle(_player, "/pvx ticket admin [list/accept/decline/display]");
                            ChatMessageHandle(_player, "/pvx ticket edit [cancel/reason]");
                        }
                        if (args.Length == 3) ticketFunction(_player, args[1].ToLower(), args[2].ToLower(), "NA");
                        else ticketFunction(_player, args[1].ToLower(), args[2].ToLower(), args[3]);
                        return;
                    default:
                        return;
                }
            }        // Functions
            void createTicket(BasePlayer _player, string selection)
            {
                int _TicketNumber = GetNewID();
                string _username = _player.UserIDString;
                string _requested = selection;
                string _reason = lang.GetMessage("TicketDefaultReason", this, _player.UserIDString);
                double _timeStamp = GetTimeStamp();
                ticketData.Link.Add(_TicketNumber, _player.userID);
                ticketData.Info.Add(_player.userID, new Ticket
                {
                    username = _username,
                    TicketNumber = _TicketNumber,
                    reason = _reason,
                    requested = _requested,
                    timeStamp = _timeStamp
                });            InfoCache[_player.userID].ticket = true;
                SaveAll();
            }
            void editTicket(BasePlayer _player, string _reason)
            {
                if (InfoCache[_player.userID].ticket == false)
                {
                    ChatMessageHandle(_player, "NoActTick");
                    return;
                }
                else ticketData.Info[_player.userID].reason = _reason;
                ChatMessageHandle(_player, "RSNChan");
            }
            bool playerHasTicket(BasePlayer _player)
            {
                if (InfoCache[_player.userID].ticket == true) return true;
                else return false;
            }
            bool IsAllowed(BasePlayer _player, string perm, string reason)
            {
                if (permission.UserHasPermission(_player.UserIDString, perm)) return true;
                if (reason != "null")
                    SendReply(_player, reason);
                return false;
            }
            double GetTimeStamp()
            {
                return (DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
            }
            bool isplayerNA(BasePlayer _player)
            {
                if (InfoCache[_player.userID].mode == "NA") return true;
                else return false;
            }
            void checkPlayersRegistered()
            {
                foreach (BasePlayer _player in BasePlayer.activePlayerList)
                    if (!(InfoCache.ContainsKey(_player.userID)))
                    {
                        InfoCache.Add(_player.userID, new PlayerInfo { username = _player.displayName, mode = "NA", previousMode = "NA", ticket = false, timeStamp = GetTimeStamp() });
                        saveInfoCache();
                        SelectorOverlay(_player);
                    }
            }
            // Chat Functions
            void AdminFunction()
            { }
            void changeFunction(BasePlayer _player, string _Selection)
            {
                if (playerHasTicket(_player) == true)
                { ChatMessageHandle(_player, "AlreadySubmitted"); return; }
                createTicket(_player, _Selection);
            }
            void selectFunction(BasePlayer _player, string _Selection)
            {
                if (InfoCache[_player.userID].mode == "NA")
                {
                    InfoCache[_player.userID].mode = _Selection.ToUpper();
                    InfoCache[_player.userID].previousMode = _Selection.ToUpper();
                    saveInfoCache();
                }
            }
            void ticketFunction(BasePlayer _player, string _mode, string _selection, string _value)
            {
                if (_mode == "edit")
                {
                    if (!(_selection == "cancel")&&(_selection == "reason"))
                    {
                        LangMSG(_player, "IncoFormPleaUse");
                        ChatMessageHandle(_player, "/pvx ticket edit [cancel/reason]");
                    }
                    if (_selection == "cancel")
                    {
                        int _ticketNumber = ticketData.Info[_player.userID].TicketNumber;
                        ticketData.Link.Remove(_ticketNumber);
                        ticketData.Info.Remove(_player.userID);
                        InfoCache[_player.userID].ticket = false;
                        SaveAll();
                    }
                }
                else if ((_mode == "admin")&&(IsAllowed(_player,"admin","null")))
                {
                }
                else
                {
                    LangMSG(_player, "IncoFormPleaUse");
                    if (IsAllowed(_player, "admin", "null")) ChatMessageHandle(_player, "/pvx ticket admin [list/accept/decline/display]");
                    ChatMessageHandle(_player, "/pvx ticket edit [cancel/reason]");
                }
            }
    
     
  10. Now it works, I have reinstalled the server :)

    @Alphawar: How can I easily add the overlay function in the current stable version?
     
  11. The latest patch is actually located on page 4 of this thread, It has a small change where one line has been changed from HUD/Overlay to Overlay
     
  12. Hello, I come to you now because there's a little more regular player on my server and a lot of PvE and PvP player we find a lot of fault which may give a bad gameplay pvp players or PvE same. So I wonder if I offer ideas would be possible to see her and choose the one that best emblem for me as for all your plugins. So the real question is what you are available for rework on your plugins :p
     
  13. Due to the way I am rewriting the plugin it is designed to have more customization in terms of what you can do.
    So please let me know your ideas and I will see if they can be added.
    Thanks.
     

  14. Infact I would like when a player reach a certain level they should choose PvP or PvE. So if he chose pvp it will continue to xp normally and if they then decided to spend the PvE they can no longer remain xp and block level decide.

    And the best would be that at 30 all players can have a Hud (Gui) with choice PvP / PvE and a changeable background image for why should he choose now

    This would experience a server until a selected level for PvE players and of course if the players want to start pvp they can choose to start

    Then her would be nice to define a maximum number of ticket (pvx exchange)

    I had a lot of things in head but unfortunately I do not reminds me of all, I would not hesitate if they ever come back to me :p
    Thank you very much for your quick response :)
    And told me if u dont understand
     
  15. If I understand this right. You want a player to start of as PvP, But at a certain level they can then decide to go PvP or PvE.
    If they go PvE, They will stay at there current XP level, But will not gain any more levels.
    Would this be correct
    Could you explain this in in a different way as the translation was not good. or maybe try Free French English translation, free French English translator, translate French English - SYSTRAN
     

  16. All new player can choose Pvp/Pve and choose one lvl limit (example 30) if one player is lvl 30 the plugins spawn a Gui with choose PvP or PvE and if he choice PvE xp is stop for him (lvl 30 max for all guy PvE), if he choice PvP he can xp normaly. Need a background on this GUI for explain why he choose now pvp or pve and say if he want he can demands switch pvp for xp alright and never swtich pve if he is 31 or more so can come back on pve after lvl 30 so if this ticket is accept the player is reset at lvl 30 (Can just use XpControl for this if you dont have many time)

    And if you can add a variable for choose how many can change demand a new ticket for change pvp or pve.

    Google transalte is bad, i try again with my bad english x)

    @LaserHydra
    I post an idea a little push here to see if it was possible to do so only with the PvxSelector here but here you have my idea a little more clearly ^^
     
    Last edited by a moderator: Jul 20, 2016
  17. Ok I understand what you are saying. I will see what I can do with mu current mod :)
     
  18. You are just amazing if you happen to make her !! : D PvP PvE still some flaws ingame , pvp player who lives in a PvE player ( home not raid ) .
    Then I do not know if it was desired but deployable from a PvE player ( campfires chests etc.) can be destroyed leaving the pvp players ( I do not know for between two player PvE )

    May be only one variable to activate the xp this block etc (this idea) and can change the max lvl for PvE and How Many ticket demands ( I would be able to wipe the plugins months after leaving (all data as of lvl ) ).
    This would permit the people to continue downloading your plugins without the PvE players will either block a selected level.

    If I have something other in head I would share his pleasure :)
     
    Last edited by a moderator: Jul 20, 2016
  19. Progress Update:
    Completed commands: /pvx {options}
    • select pve/pvp
    • change pve/pvp
    • ticket edit "..."
    • ticket cancel
    • ticket admin list {options} - 80% Completed

    Commands to include soon:
    • ticket admin accept/decline
    • Finsh ticket admin list
    • help

    Funtions to be added
    • Improved gui
    • replace old damage system with new damage system
    • impliment customisation

    Next working Patch:
    Eta 1-2 days - for testing