Diskuze: cs file a jeho editace

C# .NET .NET (C# a Visual Basic) cs file a jeho editace American English version English version

Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:

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. září 11:46
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

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. září 14:50
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

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

 
Nahoru Odpovědět 19. září 14:55
Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:

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. září 16:42
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

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. září 17:08
Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:

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. září 17:39
 
Nahoru Odpovědět  +1 19. září 17:38
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

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. září 18:03
Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:

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. září 18:28
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

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. září 18:38
Avatar
Jan Kubáč
Člen
Avatar
Odpovídá na Marian Benčat
Jan Kubáč:

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. září 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.