Skocz do zawartości
Effx03

System Discret Admin.

Rekomendowane odpowiedzi

Siema ;d. Kiedyś mój dawny friend zrobił system Discret Admina, ale był on na 0.3a i miał niby "słabe" cmd, wiec postanowiłem sam taki skrypt zrobić ;d.

Polega on na tym że Jak Discret Admin daje np. bana to nie pisze:

Effx03 Został Zbanowany przez Discret Admina Effx03, tylko  Ktoś tam został Zbanowany przez Discret Admina.

Komendy Dla RCON'a:

/discretpass - Ustawiasz Hasło na Discret Admina

/discretadd - Logujesz Gracza i Dodaesz go do Listy Discret adminów (Może używać powyższego cmd)

/discret - Logujesz Gracza Jako Discret Admin

/discretoff - Wylogowujesz Gracza z Discret Admina

Komendy(Nie dawałem dużo, bo zbędne xd):

Dla Discret Admina:

IKgTk.png

IDaRN.png

Dla RCON'a:

Bfe5e.png

Użyte Include:

#include <zcmd>
#include <sscanf>
#include <dudb>

V.1 Download:

http://pastebin.com/eGWDUWsy

http://hostuje.net/file.php?id=4bb05f506438a26a5a48d12dd74a8277

V.2 Download:

http://pastebin.com/kZCtaaj1

http://hostuje.net/file.php?id=1cf4628f76cb52d75d044c5f88388272

-Zamieniono dini na Double o Files

-Dodano i Zedytowano Kilka CMD :D

-Ułożony kod xd

V.3 Download:

http://pastebin.com/3uf7ZJ0t

http://hostuje.net/file.php?id=d5f5af5599f044a76c9ac90515632fee

-Zaktualizowano sscanf do sscanf2 i Double o Files do Double o Files 2

-Usunięto bug z ID 0, tzn. jak jest puste cmd nie daje ID 0.

-Dodano Kilka CMD np: crashowanie gracza :D

-Zmieniono /discretpass na GUI

-Zmieniono pętle

No to tyle xd

Jak coś to mój pierwszy skrypt xd

Jak coś nie działa to pisać xd

Zabraniam: Na zmiane/edycje/usuwania Linijki z Kodem Autora

Zezwalam: Na Edycje/Dodawanie Do GM'ów etc..

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Skrypt (minusy):

- dini

- MAX_PLAYERS

- układanie kodu (czy to pastebin tak go rozwala?)

Przed #include <zcmd> musisz dać #define FILTERSCRIPT, bo gdy tego nie dasz to w zcmd jest wywoływany callback OnGameModeInit.

Plusy:

- dużo komend administratora

- pomysłowość (choć czy ja wiem?)

Warn, mute itp. można by zrobić w PVarach, ale jak ktoś lubi tablice ;) Ogólnie gdyby poprawić pętle, poukładać kod oraz zmienić system plików to nawet coś podobnego do AS'a by wyszło :P Ocena: 7/10.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

if(sscanf(cmdtext,"ds",id,powod))
Musisz po specyfikatorze 's' dać rozmiar tablicy w nawiasach kwadratowych. GetMaxPlayers() przykładowo przy liczbie 30 slotów serwera zwróci 30, czyli id graczy będzie w zakresie 0 - 29, więc jak ktoś wpisze 30 to nie będzie takiego gracza. Z resztą, po co się bawić w id < 0 czy coś jak jest już funkcja IsPlayerConnected? Te pętle mógłbyś jeszcze bardziej zoptymalizować:
for(new i, mp = GetMaxPlayers(); i < mp; i++)

I zapomniałeś przy każdej pętli (prócz OnFilterScriptInit/OnGameModeInit !) dać IsPlayerConnected, pętla wykonuje się na wszystkie sloty, ale jak gracz nie jest podłączony to poco wykonywać dodatkową iterację?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Pierwsze co to

#include <double-o-Files>
Dla takich drobnostek jak tu, to naucz się uzywać file bo nie każdy chcę uzywać takiego shitu jak to coś. Po drugie, nie umiesz formatować kodu, użyj spacji do tego bo kod wygląda jakoś nie czysto.
#define SCM SendClientMessage
+
                SendClientMessage(playerid,COLOR_YELLOW,"Nie możesz pisać !");
Jak już robisz tą definicję to uzywaj jej wszędzie.
stock SendClientMessageToDiscret(color, msg[])
{
        for(new a;a<GetMaxPlayers();a++)
        {
                if(IsPlayerConnected(a) && Discret[a])

                {
                        SendClientMessage(a,color,msg);
                }
        }
        return 1;
}
Słaba pętla, w dodatku możesz to zrobić bezklamrowo albo nawet w makro definicji, patrz
#define SendClientMessageToDiscret(%0,%1) for(new x,x2=GetMaxPlayers();x!=x2; x++)if(IsPlayerConnected(x)&&Discret[x])SendClientMessage(x,%0,%1) 
stock PlayerName(playerid)
{
        new name[124];
        GetPlayerName(playerid,name,sizeof(name));
        return name;
}
Widziałeś nick który ma 124 znaków!?! MÓJ MISTRZ ! a tak serio, to powinna być tablica z 24 lub po prostu dać tak: góra:
new Name[MAX_PLAYERS][24];
w OnPlayerConnect przypisywanie nicku przez OnPlayerDisconnect i małe makro #define PlayerName(%0) Name[%0] coo niee?
   if(Mute[playerid] == 1)

        {
                SendClientMessage(playerid,COLOR_YELLOW,"Nie możesz pisać !");
                return 0;


        }
Jak już piszesz kod to rób tym sposobem.
if(Mute[playerid])
    return SendClientMessage(playerid,COLOR_YELLOW,"Nie możesz pisać !"), 0;

       Discret[playerid] = 0;
        Mute[playerid] = 0;
        Warn[playerid] = 0;
Ja to bym tam to zrobił w tablicy boolean + enum, ale jak kto woli ;] .
CMD:drpomoc(playerid,params[])
{
        if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,COLOR_GREEN,"Nie Jesteś Administratorem RCON!");
        new string[300];
        strcat(string,"Komendy RCON'a\n");
        strcat(string,"/discretadd [ID] - Logujesz Gracza i dodajesz go do listy Discret Adminów\n");
        strcat(string,"/discret [ID] - Logujesz Gracza Jako Discret Admina\n");
        strcat(string,"/discretoff [ID] - Wylogowujesz Gracza z Rangi Discret Admina\n");
        strcat(string,"/discretpass [Hasło] - Ustawiasz Hasło dla Discret Admina\n");
        ShowPlayerDialog(playerid,3,DIALOG_STYLE_MSGBOX,"Komendy Dla RCONa by Effx03",string,"OK","OK");
        return 1;
}
Gratuluję pomysłu, ja bym dal tak.
CMD:costam(playerid, cmdtext[])
{
    if(...) return ...

    new xx[][] = {"Cos tam cos tam"};

    ShowPlayerDialog(playerid, ..)
    return 1;
}
        new string[1024];
        strcat(string,"Komendy Dla Discret Admina (2):\n");
        strcat(string,"/dhealall - Leczysz Wszystkich\n");
        strcat(string,"/darmorall - Dajesz Wszystkim Pancerz\n");
        strcat(string,"/dsethpall [Ilość HP] - Ustawiasz Wszystkim HP\n");
        strcat(string,"/dsetarmorall [Ilość Pancerza] - Ustawiasz Wszystkim Pancerz\n");
        strcat(string,"/dhpadd [ID] - Dajesz Graczu +10HP\n");
        strcat(string,"/dslap [ID] - Dajesz/Odejmujesz Graczu -10 HP\n");
        strcat(string,"/dadmins - Aktualni Discret Admini\n");
        strcat(string,"/killall - Zabijasz Wszystkich Graczy\n");
        strcat(string,"/dinvisible - Robisz się niewidzialny na mapie\n");
        strcat(string,"/dvisible - Robisz się widoczny na mapie\n");
        strcat(string,"/dcz - Czyścisz Chat\n");
        strcat(string,"/dfix - Naprawiasz Swój Pojazd\n");
        strcat(string,"/dfixall - Naprawiasz Wszystkim Pojazd/y\n");
        strcat(string,"/dgod [ID] - Dajesz Graczu Goda\n");
        strcat(string,"/dgodall - Dajesz Wszystkim Goda\n");
        ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,"Komendy Discret Admina (2) By Effx03",string,"OK","OK");
Za wielka tablica, porażka.
    if(id < 0 || id > GetMaxPlayers()) return SendClientMessage(playerid,-1,"Użyj: /discretoff [ID]");
Wygląda jak wycinek z FullDM, po co Ci if(IsPlayerConnected itp .. przecież jak wpisze nawet id 999 to da że nie jest podłączony więc?! Złe użycie sscanf, argument "ds" powinno być ds[rozmiar tablicy] tak się chwaliłeś na PVS że potrafisz sscanf i dini a naprawdę, za bardzo się przechwaliłeś. Ten kod to wycinki z FullDM i tyle.
        for(new a;a<GetMaxPlayers();a++) { GivePlayerWeapon(..

Nie wiem, użyj foreach w dodatku ta to graczom na ilość slotów.

Nie wiem, dalej nie chce mi się sprawdzać, pełno błędów, kod nie dopracowany, wycinki z FullDM, zrób coś sam, 1/10.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

kiedy kompilowalem trafilem na to

fatal error 100: cannot read from file: "sscanf"

masz rozwiazanie ?

Nie masz includ'a sscanf, czyli starej wersji sscanf która była tylko includ'em a nie includ + plugin

Musisz albo skrypt przerobić pod sscanf2, pod plugin albo znaleźć plik sscanf.inc (np. na forum.sa-mp.com)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Witam. Jestem nowy w skryptach i czy mógłby mi ktoś pomóc. Wkleiłem oba pliki do filterscripts ( .pwn .amx) po czym w pliku server.cfg w linijce filterscripts dopisałem nazwę skryptu. Po czym uruchamiam serwer i niby pisze loading filterscripts "DiscretAdmin". Wchodzę na serwer wpisuje jakąś komendę, a tu mi pisze unknown command . Proszę o pomoc

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×