Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.

  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
Kosz

Wyświetlanie informacji o robieniu ssów tylko graczowi. Błąd :MenuScreenow

kosz

  • Zamknięty Temat jest zamknięty
5 odpowiedzi w tym temacie

#1 Astralol

    Początkujący

  • Użytkownik

Reputacja: 0
zer0.

  • Postów:13
  • Imię:Patrycjusz
  • Lokalizacja:Słupsk
Offline

Napisano 27.11.2014 13:42

Witam.

Posiadam na swoich 3 serwerach plugin screenshot_new

Od samego początku co jakiś czas mam error_logi, nie wiem o co w nich chodzi

 

Chciałbym również prosić aby informacja podczas robienia ssów wyświetlała się tylko temu, komu robi się ssy.

Obecnie wyświetla się wszystkim.

#include <amxmodx>
#include <amxmisc>

#define SQL_ZAPIS

#define TASK_SCREEN 56323

enum _:cvary { HOST, USER, PASS, DBNAME, MAXSS, INTERVAL, SITE, BAN, BANTIME, BANREASON }
enum { BMP, TGA }


new const menu_ss[][] = {
    { 5, BMP } // Ilosc, Typ

};

new const menu_sname[][]     = { "BMP", "TGA" };

new const tag[]             = "[XXXX]";
new const name[]         = "Ultimate ScreenShot";

new gCvars[cvary];
new gScreens[33];
new gScreened[33];

new g_SyncHud;

#if defined SQL_ZAPIS
#include <sqlx>

new gMapa[33];
new gNazwa[101];

new Handle: g_SqlTuple;

public SqlInit() {
    new t[4][33];
    
    get_pcvar_string(gCvars[HOST],         t[HOST], 32);
    get_pcvar_string(gCvars[USER],         t[USER], 32);
    get_pcvar_string(gCvars[PASS],         t[PASS], 32);
    get_pcvar_string(gCvars[DBNAME],     t[DBNAME], 32);
    
    g_SqlTuple = SQL_MakeDbTuple(t[HOST], t[USER], t[PASS], t[DBNAME]);

    if(g_SqlTuple == Empty_Handle)
        set_fail_state("Nie mozna utworzyc uchwytu do polaczenia");
    
    new iErr, szError[32];
    new Handle:link = SQL_Connect(g_SqlTuple, iErr, szError, 31);
    if(link == Empty_Handle) {
        log_amx("Error (%d): %s", iErr, szError);
        set_fail_state("Brak polaczenia z baza danych");
    }
    
    new Handle:query;
    query = SQL_PrepareQuery(link,
    "CREATE TABLE IF NOT EXISTS `screeny` ( \
        `id` int(11) NOT NULL auto_increment, \
        `uname` varchar(32) NOT NULL, \
        `aname` varchar(32) NOT NULL, \
        `uip` varchar(20) NOT NULL, \
        `usid` varchar(32) NOT NULL, \
        `map` varchar(32) NOT NULL, \
        `time` int(15) NOT NULL, \
        `type` int(1) NOT NULL, \
        `amount` int(3) NOT NULL, \
        `server` varchar(100) NOT NULL, \
        PRIMARY KEY (`id`) \
    )");
    
    SQL_Execute(query);
    SQL_FreeHandle(query);
}

public Query(failstate, Handle:query, error[]) {
    if(failstate != TQUERY_SUCCESS) {
        log_amx("SQL Insert error: %s", error);
        return;
    }
}
#endif

public plugin_init() {
    register_plugin(name, "1.1", "byCZEK");
    
    gCvars[HOST]         = register_cvar("ss_hostname", "");
    gCvars[USER]         = register_cvar("ss_username", "");
    gCvars[PASS]         = register_cvar("ss_password", "");
    gCvars[DBNAME]         = register_cvar("ss_database", "");
    gCvars[MAXSS]        = register_cvar("ss_mscreens", "10");
    gCvars[INTERVAL]     = register_cvar("ss_interval", "1.5");
    gCvars[SITE]        = register_cvar("ss_sitemap", "http://Katujemy.eu");
    gCvars[BAN]        = register_cvar("ss_banplayer", "1");
    gCvars[BANTIME]        = register_cvar("ss_bantime", "0");
    gCvars[BANREASON]    = register_cvar("ss_banreason", "Wrzuc ssy na www.Katujemy.eu");
    
    register_concmd("amx_ss",     "ZrobScreena",     ADMIN_BAN, "<authid, nick or #userid> [screens] [type 0/1]");
    register_concmd("amx_screen",     "ZrobScreena",     ADMIN_BAN, "<authid, nick or #userid> [screens] [type 0/1]");
    register_concmd("amx_screenm",     "MenuScreenow", ADMIN_BAN, " - pokazuje menu screenow");
        
    g_SyncHud = CreateHudSyncObj();
    
    set_task(0.1, "Init");    
}

public Init() {
    #if defined SQL_ZAPIS
    get_mapname(gMapa, 32);
    get_user_name(0, gNazwa, 100);

    SqlInit();
    #endif
    
    AddMenuItem("ScreenShot", "amx_screenm", ADMIN_BAN, name);
}

public client_putinserver(id) {
    gScreens[id] = 0;
}

public ZrobScreena(id, level, cid) {
    if(!cmd_access(id, level, cid, 2)) {
        return PLUGIN_HANDLED;
    }
        
    new t[3][33], pid;
    
    read_argv(1, t[0], 32);
    read_argv(2, t[1], 3);
    read_argv(3, t[2], 3);
        
    new Screens     = str_to_num(t[1]);
    new Type    = str_to_num(t[2]);
    new MScreens    = get_pcvar_num(gCvars[MAXSS]);
    
    if(!Screens) Screens = 5;
    
    if(Screens > MScreens) {
        console_print(id, "%s Nie mozesz zrobic tylu screenow.", tag);
        return PLUGIN_HANDLED;
    }
    
    pid = cmd_target(id, t[0]);
    
    if(!pid)
        return PLUGIN_HANDLED;
        
    new dane[4];
    new Float: Interval = get_pcvar_float(gCvars[INTERVAL]);
    
    dane[0] = id;
    dane[1] = pid;
    dane[2] = Type;
    dane[3] = Screens;
    
    gScreens[pid] = Screens;
    
    set_task(Interval, "ZrobScreena_", TASK_SCREEN + pid, dane, 4, "a", Screens);
    
    #if defined SQL_ZAPIS
    new z[4][33], buffer[512];
    get_user_name(id,     z[0], 32);
    get_user_name(pid,     z[1], 32);
    get_user_ip(pid,     z[2], 32, 1);
    get_user_authid(pid,     z[3], 32);
    
    replace_all(z[0], 32, "'", "\'");
    replace_all(z[0], 32, "`", "\`");
    
    replace_all(z[1], 32, "'", "\'");
    replace_all(z[1], 32, "`", "\`");
    
    formatex(buffer, charsmax(buffer), "INSERT INTO `screeny` VALUES (NULL, '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s');", z[1], z[0], z[2], z[3], gMapa, get_systime(), Type, Screens, gNazwa);
    SQL_ThreadQuery(g_SqlTuple, "Query", buffer);    
    #endif
    
    return PLUGIN_HANDLED;
}

public ZrobScreena_(dane[4]) {
    new id         = dane[0];
    new pid     = dane[1];
    new tid     = dane[2];
    
    new t[6][33];
    
    get_user_name(id, t[0], 32);
    get_user_name(pid, t[1], 32);
    get_user_ip(pid, t[2], 20, 1);
    
    get_time("%m/%d - %H:%M", t[3], 31);
    
    set_hudmessage(0, 255, 0, -1.0, 0.3, 0, 0.25, 1.0, 0.0, 0.0, 4);
    ShowSyncHudMsg(pid, g_SyncHud, "** %s **^n%s", t[1], t[3]);
    
    client_print(0, print_chat, " Admin zrobil ssy graczowi: %s (%s) %s", t[1], t[2], t[3]);
        
    client_cmd(pid, tid ? "screenshot" : "snapshot");
    
    if(get_pcvar_num(gCvars[BAN]) && !--gScreens[pid]) {
        new czas = get_pcvar_num(gCvars[BANTIME]);
        
        get_pcvar_string(gCvars[BANREASON],     t[4], 32);
        get_pcvar_string(gCvars[SITE],         t[5], 32);
        
        console_print(pid, "%s ==========================================", tag);
        console_print(pid, "%s Admin %s zrobil Ci screeny", tag, t[0]);
        console_print(pid, "%s Ilosc: %d", tag, dane[3]);
        console_print(pid, "%s Typ: %s", tag, menu_sname[tid]);
        console_print(pid, "%s Umiesc screeny na: %s", tag, t[5]);
        console_print(pid, "%s Pozdro od autora (byCZEK)", tag);
        console_print(pid, "%s ==========================================", tag);
        
        client_cmd(id, "amx_ban %d #%d ^"%s^"", czas, get_user_userid(pid), t[4]);
    }
}

public MenuScreenow(id, level, cid) {
    if(!cmd_access(id, level, cid, 1)) {
        return PLUGIN_HANDLED;
    }
    
    new players[32], name[33], temp[2][128], num, pl;
    get_players(players, num);
    
    new m = menu_create("Lista Graczy", "MenuScreenow_");
    
    for(new i = 0; i < num; i++) {
        pl = players[i];
        
        get_user_name(pl, name, 32);
        num_to_str(pl, temp[0], 2);
        formatex(temp[1], 127, "%s%s", name, (get_user_flags(pl) & ADMIN_KICK) ? "\r *" : "");
        menu_additem(m, temp[1], temp[0], _, menu_makecallback("MenuScreenow_c"));
    }
    
    menu_setprop(m, MPROP_EXIT, MEXIT_ALL);
    menu_display(id, m, 0);
    return PLUGIN_HANDLED;
}

public MenuScreenow_(id, m, i) {
    if(i == MENU_EXIT) {
        menu_destroy(m);
        return PLUGIN_CONTINUE;
    }
    
    new data[6], iName[64], access, callback;
    menu_item_getinfo(m, i, access, data,5, iName, 63, callback);
    
    gScreened[id] = get_user_userid(str_to_num(data));
    
    new me = menu_create("Ilosc screenow", "MenuScreenow__");
    
    for(new j = 0; j < sizeof(menu_ss); j++) {
        formatex(iName, 63, "%d \y%s", menu_ss[j][0], menu_sname[menu_ss[j][1]]);
        menu_additem(me, iName);
    }
    
    
    menu_display(id, me, 0);
    return PLUGIN_CONTINUE;
}

public MenuScreenow_c(id, m, i) {
    new data[6], iName[64], access, callback;
    menu_item_getinfo(m, i, access, data,5, iName, 63, callback);
    
    new pl = str_to_num(data);
    
    if(get_user_flags(pl) & ADMIN_IMMUNITY || pl == id)
        return ITEM_DISABLED;
    
    return ITEM_ENABLED;
}

public MenuScreenow__(id, m, i) {
    new screens     = menu_ss[i][0];
    new type    = menu_ss[i][1];
            
    client_cmd(id, "amx_ss #%d %d %d", gScreened[id], screens, type);
}

Error logi :

L 11/26/2014 - 22:14:17: Start of error session.
L 11/26/2014 - 22:14:17: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20141126.log")
L 11/26/2014 - 22:14:17: [AMXX] Displaying debug trace (plugin "screenshot_new.amxx")
L 11/26/2014 - 22:14:17: [AMXX] Run time error 4: index out of bounds
L 11/26/2014 - 22:14:17: [AMXX] [0] screenshot_new_2596930.sma::MenuScreenow__ (line 279)

Z góry dziękuje za pomoc


  • +
  • -
  • 0

#2 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 27.11.2014 15:10

linia 279

 new screens     = menu_ss[i][0];

widocznie item sięga większej liczby niż zadeklarowano rozmiar tablicy


  • +
  • -
  • 0

#3 Astralol

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
zer0.

  • Postów:13
  • Imię:Patrycjusz
  • Lokalizacja:Słupsk
Offline

Napisano 27.11.2014 17:39

Jakieś porady jak to naprawić ?


  • +
  • -
  • 0

#4 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 28.11.2014 00:21

Nie wiem czemu, ale nie lubie czytać ze zrozumieniem pluginu, gdzie 60% kodu to makrodefinicje i zmiennej globalne w tym tablice nie koniecznie tylko jednowymiarowe. W wielkich projektach - ok, ale w takim małym pluginie to przerost formy nad treścią, większość z tych rzeczy możnaby spokojnie zamieścić w kodzie, a tak mamy Wielkie zbiorowisko zmiennych i mniejszość stanowiącą kod właściwy. Sory, ale jestem chory i nie mam głowy tego rozkminiać.

 

Podpowiem tylko chętnym, że ta tablica już w momencie kompilacji ma tylko jedną wartość pierwszego wymiaru tj:

new const menu_ss[][] = {
    { 5, BMP } // Ilosc, Typ

};

Podano tylko jeden element tablicy więc jedyne poprawne zapis to 

menu_ss[0][0]

oraz

menu_ss[0][1]

Każde inne wartości w nawiasach będą powodowały error logi oraz nieprawidłowe działanie. W miejsce pierwszego wymiaru auor podał zmienną item

 new screens     = menu_ss[i][0];

która jak wiadomo ma wartość 0 jedynie przy wybraniu pierwszego elementu menu. Nie widzę tu w ogóle sensu tablicy dwuwymiarowej. Bawta się robaczki.


Użytkownik grankee edytował ten post 28.11.2014 00:27

  • +
  • -
  • 0

#5 Astralol

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
zer0.

  • Postów:13
  • Imię:Patrycjusz
  • Lokalizacja:Słupsk
Offline

Napisano 29.11.2014 11:03

Nie jestem zbyt utalentowany w sprawach pisania/edycji pluginów, dlatego proszę aby ktoś mi pomógł :)

 


  • +
  • -
  • 0

#6 CheQ

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 1984
Godlike

  • Postów:5534
  • Imię:Adaś
  • Lokalizacja:Glinianka
Offline

Napisano 04.12.2014 08:19

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Nieodpowiednio umieszczony kod. Skorzystaj z Umieszczanie kodu na forum

Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0

b_560_95_1.png





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych