NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:19.9.2016 11:46

Zdravím, mohl by mi někdo poradit jakým nejjednodušším způsobem upravit existující cs soubor představující příkaz do hry unturned? Má představa je taková že aktuální příkaz "/report <player> [reason]" bych chtěl změnit na tvar "/report [reason]", tudíž zrušit jednu podmínku. Jelikož příkaz jde přes MySQL, nedaří se mi ho upravit. Budu rád za každou radu. Díky

using Rocket.API;
using Rocket.Core.Logging;
using Rocket.Unturned.Chat;
using Rocket.Unturned.Player;
using Rocket.Unturned.Commands;
using SDG;
using SDG.Unturned;
using Steamworks;
using System.Collections.Generic;
using Rocket.Core.Steam;
using UnityEngine;

namespace rawrfuls.ThePunisher
{
    public class CommandReport : IRocketCommand
    {
        public string Help
        {
            get { return  "Reports a player"; }
        }

        public string Name
        {
            get { return "report"; }
        }

        public string Syntax
        {
            get { return "<player> [reason]"; }
        }

        public List<string> Aliases {
            get { return new List<string>(); }
        }

        public AllowedCaller AllowedCaller
        {
            get { return AllowedCaller.Both; }
        }

        public List<string> Permissions
        {
            get
            {
                return new List<string>() { "thepunisher.report" };
            }
        }

        public void Execute(IRocketPlayer caller, params string[] command)
        {
            try
            {
                if (command.Length == 0 || command.Length > 2)
                {
                    UnturnedChat.Say(caller, ThePunisher.Instance.Translate("command_generic_invalid_parameter"), (Color)ThePunisher.Instance.getColor(ThePunisher.Instance.Configuration.Instance.PublicMessageColor));
                    return;
                }

                bool isOnline = false;

                CSteamID steamid;
                string charactername = null;


                UnturnedPlayer otherPlayer = UnturnedPlayer.FromName(command[0]);
                ulong? otherPlayerID = command.GetCSteamIDParameter(0);
                if (otherPlayer == null || otherPlayer.CSteamID.ToString() == "0" || caller != null && otherPlayer.CSteamID.ToString() == caller.Id)
                {
                    KeyValuePair<CSteamID, string> player = ThePunisher.GetPlayer(command[0]);
                    if (player.Key.ToString() != "0")
                    {
                        steamid = player.Key;
                        charactername = player.Value;
                    }
                    else
                    {
                        if (otherPlayerID != null)
                        {
                            steamid = new CSteamID(otherPlayerID.Value);
                            Profile playerProfile = new Profile(otherPlayerID.Value);
                            charactername = playerProfile.SteamID;
                        }
                        else
                        {
                            UnturnedChat.Say(caller, ThePunisher.Instance.Translate("command_generic_player_not_found"), (Color)ThePunisher.Instance.getColor(ThePunisher.Instance.Configuration.Instance.PublicMessageColor));
                            return;
                        }
                    }
                }
                else
                {
                    isOnline = true;
                    steamid = otherPlayer.CSteamID;
                    charactername = otherPlayer.CharacterName;
                }
                if (caller.ToString() == steamid.ToString())
                {
                    UnturnedChat.Say(caller, ThePunisher.Instance.Translate("player_is_you"), (Color)ThePunisher.Instance.getColor(ThePunisher.Instance.Configuration.Instance.PublicMessageColor));
                    return;
                }
                if (ThePunisher.Instance.Database.HasReported(steamid.ToString(), caller.ToString()) != null)
                {
                    UnturnedChat.Say(caller, ThePunisher.Instance.Translate("player_allready_reported", charactername), (Color)ThePunisher.Instance.getColor(ThePunisher.Instance.Configuration.Instance.PublicMessageColor));
                    return;
                }
                string adminName = "Console";
                if (caller != null) adminName = caller.ToString();

                if (command.Length == 2)
                {
                    ThePunisher.Instance.Database.ReportPlayer(charactername, steamid.ToString(), adminName, command[1]);
                    UnturnedChat.Say(caller, ThePunisher.Instance.Translate("command_report_success", charactername, command[1]), (Color)ThePunisher.Instance.getColor(ThePunisher.Instance.Configuration.Instance.PublicMessageColor));
                }
                else
                {
                    ThePunisher.Instance.Database.ReportPlayer(charactername, steamid.ToString(), adminName, "");
                    UnturnedChat.Say(caller, ThePunisher.Instance.Translate("command_report_success", charactername, command[1]), (Color)ThePunisher.Instance.getColor(ThePunisher.Instance.Configuration.Instance.PublicMessageColor));
                }
            }
            catch (System.Exception ex)
            {
                Logger.LogException(ex);
            }
        }
    }
}
 
Odpovědět
19.9.2016 11:46
Avatar
Marian Benčat:19.9.2016 14:50

Eh.. tu hru jsem v životě nehrál.. ale nemá náhodou příkaz /report player reason sloužit k reportnutí JINEHO hráče s udáním důvodu? Kde chceš pak vzít to jméno hráče, když ho dáš pryč z příkazu? ;-) Chces nareportit sám sebe?

Nahoru Odpovědět
19.9.2016 14:50
Totalitní admini..
Avatar
Marian Benčat:19.9.2016 14:55

jinak ten kod je pomerne jednoduchy a pochopitelny, jen moc nedává smysl to, co chceš dělat.

Nahoru Odpovědět
19.9.2016 14:55
Totalitní admini..
Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:19.9.2016 16:42

samozřejmě, příkaz je k reportnutí, ale tento příkaz již není potřeba a chtěl bych ho využít na to co jsem již psal. Myslel jsem že bude jednodušší když tento příkaz použiji pouze jako text pro MySQL. Píšeš že je kod pomerne jednoduchy a pochopitelny, jak ho mohu upravit, aby sloužil k tomu co já chci? tedy "/report message"

 
Nahoru Odpovědět
19.9.2016 16:42
Avatar
Marian Benčat:19.9.2016 17:08

Porad nevidim, co ten prikazu ma delat? lepsi by bylo implementovat vlastní prikaz.. tj implementovat ten interface a nejak ho zaregistrovat někam .

Nahoru Odpovědět
19.9.2016 17:08
Totalitní admini..
Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:19.9.2016 17:38

Jak jsem už psal, chci aby ten příkaz byl pouze pro uchování textu v mysqlu.

tento příkaz "report" se už nepoužívá, tak ho chci změnít s tím, že zůstane tam kde je. Příkaz přepíši na "ticket" a použiji ho jinak "/ticket zpráva". Proto se ptám jak kod upravit.

Editováno 19.9.2016 17:39
 
Nahoru Odpovědět
19.9.2016 17:38
Avatar
Marian Benčat:19.9.2016 18:03

Implementovat od začátku vlastní command, tj. Implementovat ten interface,.. Všechny parametry ti tam přijdou a vidím tam i plno pomocných metod jako je thepunisher.da­tabase... Koukni jestli je tam nějaká metoda třeba pro Log. Pokud nedejbože chceš porušit všecky programátorské poučky. Můžeš jen přepsat tento command, kde zmenis především properu syntaxi na "[reason]" a v kódu vynechás defacto vše, kromě samotného volání te databáze.. Pravděpodobně v reportplayer už nic nekontroluji, takže můžeš jako playerid a char name napsat co chceš.. Předem ale říkám, že toto řešení je úplně špatně a minimálně znamená to, že v db v nějaké tabulce pro reporty budeš mít data, co tam absolutně nepatří. Zkus najít vhodnější database metodu

Nahoru Odpovědět
19.9.2016 18:03
Totalitní admini..
Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:19.9.2016 18:28

Právě jsem myslel že to bude nejrychlejší a nejjednodušší cesta. Chtěl bych tam zanechat SteamID, aby se v mysqlu objevilo to steamID a zpráva. Nevím co přesně vynechat, aby "player" nebyl podmínkou. Zkoušel jsem už mnoho věcí, ale vždy bud skončily chybou nebo podmínka player nebyla vynechána.

 
Nahoru Odpovědět
19.9.2016 18:28
Avatar
Marian Benčat:19.9.2016 18:38

Z pohledu toho command "api" stačí jen změnit tu propertu syntax, je ale možne, že ta třída database ještě kontroluje, že ten player existuje a to bys byl poměrně nahrany... Celkově vždy a všude takováto ,, cesta" vede k pruavihum. Koukni se na api toho database, jestli to nemá něco jako log

Nahoru Odpovědět
19.9.2016 18:38
Totalitní admini..
Avatar
Jan Kubáč
Člen
Avatar
Odpovídá na Marian Benčat
Jan Kubáč:19.9.2016 18:54

databáze vypadá takto http://pastebin.com/6Yak3Vub

Ještě mě napadlo ponechat podmínku "player" ale jen jí upravit tak, že by nebyla podmínění hráči online a jménu, ale jakýmkoli slovem.

 
Nahoru Odpovědět
19.9.2016 18:54
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.