Back Stab Counter v1.0

В този раздел можете да публикувате нови плъгини, като същите ще бъдат одобрени или неодобрени от страна на екипа.
Правила на форума
ИНФОРМАЦИЯ: В този раздел най-вероятно няма да намерите много теми (възможно е и да е напълно празен), тъй като новите теми се местят в https://amxx-bg.info/viewforum.php?f=21 или https://amxx-bg.info/viewforum.php?f=22, зависимо от качеството им.
Отговори
Потребителски аватар

Автор на темата
JustInCase AMXX
AMXX Скриптър
AMXX Скриптър
Мнения: 536
Регистриран: 14 окт 2016, 23:31

Back Stab Counter v1.0

Мнение от JustInCase AMXX » 15 фев 2017, 19:16

Име на плъгина : Back Stab Counter
Версия : 1.0
Автор : Just In Case ( аз )

Описание:
Плъгина отброява на всеки играч убийствата/умиранията в гръб.

CVARs
amx_bsc_savetype"1" --- С този квар определяте начина на запазване на данните
| 1 за НИК |2 за IP | 3 за Steam ID (не препоръчвам 3-тия вариант
amx_bsc_stats "1" --- Това е кварът който изключва/включва /statsback командата
amx_bsc_menuinfo "2" --- Кварът с който настройвате как да показва информацията на даден играч (ако горния квар е 1)
| 1 за ЧАТ | 2 отваря друго меню с информацията
Чат команди

/checkback - Показва вашите убийства/умирания в гръб.

/statsback - Отваря менюто с играчите в сървъра

Благодарности на @TheRedShoko.
Прикачени файлове
hit_back_count.sma
(5.5 KиБ) Свален 19 пъти
hit_back_count.sma
(5.5 KиБ) Свален 19 пъти
Последна промяна от JustInCase AMXX на 24 фев 2017, 19:45, променено общо 3 пъти.

Потребителски аватар

hackera457 Охрана
AMXX Скриптър
AMXX Скриптър
Мнения: 223
Регистриран: 01 ное 2016, 09:46
Местоположение: София
Години: 23
Контакти:

Re: Back Stab Counter v1.0 [ UNTESTED ]

Мнение от hackera457 Охрана » 15 фев 2017, 19:55

Така при преглеждането на плъгина ми изглежда точно, но ето какво бих те посъветвал:
  • * static вместо new - само на няколко места си го ползвал, а има още къде да се замени
    * ShowCounts( id ) трябва да има return PLUGIN_HANDLED /отговора на въпроса оставам ти да се сетиш/
Функцията за запазване ти е неправилна

Код: Избери всички

UseVault(id, iType) {        
    new szKey[32], szData[16]
    switch ( get_pcvar_num( g_iSaveType ) )
    {
        case 0: return
        case 1: get_user_name(id, szKey, charsmax(szKey))
        case 2: get_user_ip(id, szKey, charsmax(szKey), 1)
        case 3: get_user_authid(id, szKey, charsmax(szKey))
    }

    
    switch(iType)
    {
        case 0:
        {
            formatex(szData, charsmax(szData), "%i | %i", g_iBackStabKills[ id ], g_iBackStabDeaths[ id ])
            replace_all(szData, charsmax(szData), "|", " ")
            nvault_set(g_iVault, szKey, szData)
        }
        case 1:
        {
            nvault_get(g_iVault, szKey, szData, charsmax(szData))
            new szArg[2][8]
            parse(szData, szArg[0], charsmax(szArg[]), szArg[1], charsmax(szArg[]))
            g_iBackStabKills[ id ] = str_to_num(szArg[0])
            g_iBackStabDeaths[ id ] = str_to_num(szArg[1])
        }
    }
}
Трябва да стане

Код: Избери всички

UseVault(id,iType)
{
    static szVaultKey[64], szVaultData[128], szBackStabKills[10], szBackStabDeaths[10]
    
    switch(get_pcvar_num( g_iSaveType ))
    {
        case 0: return
        case 1: get_user_name(id,szVaultKey, sizeof szVaultKey -1)
        case 2: get_user_ip(id,szVaultKey, sizeof szVaultKey -1);
        case 3: get_user_authid(id,szVaultKey, sizeof szVaultKey -1)
    }
    
    switch(iType)
    {
        case 0:
        {
            formatex(szVaultData, sizeof szVaultData -1,"%i | %i",g_iBackStabKills[ id ], g_iBackStabDeaths[ id ])
            nvault_set(g_iVault, szVaultKey, szVaultData)
        }
        
        case 1:
        {
            nvault_get(g_iVault, szVaultKey, szVaultData, sizeof szVaultData -1)
            replace_all(szVaultData, sizeof szVaultData,"|", " ")
            parse(szVaultData, szBackStabKills[10], sizeof szBackStabKills -1, szBackStabDeaths, sizeof szBackStabDeaths -1)
            
            g_iBackStabKills[id] = str_to_num(szBackStabKills)
            g_iBackStabDeaths[id] = str_to_num(szBackStabDeaths)
        }
    }
}
Сравни твоя код и моя код и виж къде си допуснал грешката. Грешката е, че там където запазваш си сложил

Код: Избери всички

replace_all(szData, charsmax(szData), "|", " ")
А трябва да е над parse(), защото така както си го дал като реплейсваш с празни във файла ще стане мазало, а функцията няма да ти парсва правилно и ще се чудиш защо не ти зарежда Kills и Deads

Иначе Браво, други забележки нямам
Моите плъгини

Човек трябва да бъде достатъчно голям, за да признае грешките си, достатъчно умен, за да спечели от тях, и достатъчно силен, за да ги поправи.
Джон Максуел

Потребителски аватар

Автор на темата
JustInCase AMXX
AMXX Скриптър
AMXX Скриптър
Мнения: 536
Регистриран: 14 окт 2016, 23:31

Re: Back Stab Counter v1.0 [ UNTESTED ]

Мнение от JustInCase AMXX » 15 фев 2017, 20:47

Благодаря ще го ъпдейтна по-късно :)

Винаги ли трябва да се ползва static вместо new ? Където е възможно разбира се.

Потребителски аватар

hackera457 Охрана
AMXX Скриптър
AMXX Скриптър
Мнения: 223
Регистриран: 01 ное 2016, 09:46
Местоположение: София
Години: 23
Контакти:

Re: Back Stab Counter v1.0 [ UNTESTED ]

Мнение от hackera457 Охрана » 15 фев 2017, 22:09

Препоръчително е,обяснявал съм защо, но пак ще го повтора докато го научите

Когато ползваш new знаеш, че се заделя някакво блокче в паметта с ключ и стойност. Името на ключа на това блокче е името на променливата. При всяко извикване на функцията ще се създава все ново и ново блокче в паметта и така при по-голям код със множество цикли и т.н ще дойде момент, когато паметта ще се напълни и при викане няма да има място където да се създаде това блокче. Това явление се нарича "Препълване на буфера" (Buffer Overflow).
Когато дефинираш дадена променлива като static то тя се създвава веднъж и се ползва локално /само във самата функция, ако опита да се достъпи от другаде няма да стане/ и колкото пъти се извика функцията, тя променя само стойността си, а не се създава наново. С други думи - променлива дефинирана като статична се създава веднъж при първото извикване на функцията и после си променя стойността при всяко повторно извикване
Моите плъгини

Човек трябва да бъде достатъчно голям, за да признае грешките си, достатъчно умен, за да спечели от тях, и достатъчно силен, за да ги поправи.
Джон Максуел

Потребителски аватар

Автор на темата
JustInCase AMXX
AMXX Скриптър
AMXX Скриптър
Мнения: 536
Регистриран: 14 окт 2016, 23:31

Re: Back Stab Counter v1.0 [ UNTESTED ]

Мнение от JustInCase AMXX » 24 фев 2017, 15:00

Благодаря за обяснението всичко е оправено !

Потребителски аватар

TheRedShoko ReShoko
Модератор
Модератор
Мнения: 663
Регистриран: 06 окт 2016, 07:42
Местоположение: Бургас

Re: Back Stab Counter v1.0

Мнение от TheRedShoko ReShoko » 24 фев 2017, 19:23

Имам една забележка - допускаш грешки при именуването на функции (както си започнал, изкарай го до края, а не едното да е PascalCase, другото с долни_черти, а третото - Смесено_ПоТози_Начин), това дразни до известна степен. Същото е положението и при скобите, когато го правиш

Код: Избери всички

SomeMethod() {

}
изкарай го по този начин до края. Същото важи и за

Код: Избери всички

SomeMethod()
{

}
Ако за един ред не слагаш { }, то спазвай го на всякъде, а не:

Код: Избери всички

case 1:
			{
				SubMenu( id, iPlayer )
			}
			case 2:
				ColorChat(id, RED, "^4[BSC] ^3%s ^1have ^4%i ^1BS Kills and ^4%i ^1BS Deaths", szName, g_iBackStabKills[ iPlayer], g_iBackStabDeaths[ iPlayer ])
				
Тествал ли си плъгина? Струва ми се, че може да направи проблем при зареждането от базата, заради разстоянието между placeholders
Програмистът е творец и инженер. Той измисля решения, генерира идеи, пише код, тества го, поправя грешките, тества пак - всичко това, докато тръгне или докато не усети, че е в грешна посока и трябва да промени нещо кардинално. Програмистът постоянно развива и използва своето логическо мислене. Той е обречен на учене всеки ден, цял живот. Добрият програмист постоянно учи, променя се, адаптира се.
Светлин Наков

Потребителски аватар

Автор на темата
JustInCase AMXX
AMXX Скриптър
AMXX Скриптър
Мнения: 536
Регистриран: 14 окт 2016, 23:31

Re: Back Stab Counter v1.0

Мнение от JustInCase AMXX » 24 фев 2017, 19:42

Плъгина не е тестван.



Това с скобите при Const, Bool, или функции, които нямат public отпред се пише точно на реда в който е дефинирана самата функция защото при натискане на ctrl + I (Indenting Code) в AMXX Studio подрежда кода както трябва иначе се получават разминавания(примера по долу). Това е причината поради, която съм го направил така.

Код: Избери всички

Loose identation on line 23123(пример)
За това с разстоянието си прав оправих го !

Потребителски аватар

TheRedShoko ReShoko
Модератор
Модератор
Мнения: 663
Регистриран: 06 окт 2016, 07:42
Местоположение: Бургас

Re: Back Stab Counter v1.0

Мнение от TheRedShoko ReShoko » 24 фев 2017, 20:05

Това е въпрос на стил на писане на код, а не на правила. Правилно е да го пишеш по 1 начин, а не по няколко различни. Колкото до подреждането на кода в AMXX Studio - не бих му вярвал, не мога да кажа, че съм особено доволен от начина, по който подрежда кода, още повече, че ако сложиш някой напълно прецакан код, ще го направи още по-зле. Loose identation се получава, при различни ситуации. Предполагам, че при теб е било от това, че при начало на ред си смесил разстояния (многобройни space) и табулации. Не се вижда това, но хвърля warning.
Програмистът е творец и инженер. Той измисля решения, генерира идеи, пише код, тества го, поправя грешките, тества пак - всичко това, докато тръгне или докато не усети, че е в грешна посока и трябва да промени нещо кардинално. Програмистът постоянно развива и използва своето логическо мислене. Той е обречен на учене всеки ден, цял живот. Добрият програмист постоянно учи, променя се, адаптира се.
Светлин Наков

Отговори

Върни се в “Нови попълнения”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост