Back Stab Counter v1.0

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

Back Stab Counter v1.0

Мнение от JustInCase » 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 KiB) Свалено 149 пъти
hit_back_count.sma
(5.5 KiB) Свалено 149 пъти
Последно промяна от JustInCase на 24 Фев 2017, 19:45, променено общо 3 пъти.
MANSION - HNS : 93.123.18.46:27016
ONLINE

Аватар
hackera457
Извън линия
Модератор
Модератор
Мнения: 758
Регистриран на: 01 Ное 2016, 09:46
Местоположение: София
Се отблагодари: 1 път
Получена благодарност: 115 пъти
Обратна връзка:

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

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

Код за потвърждение: Избери целия код

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Аватар
JustInCase
Извън линия
Потребител
Потребител
Мнения: 580
Регистриран на: 14 Окт 2016, 23:31
Се отблагодари: 4 пъти
Получена благодарност: 8 пъти

Re: Back Stab Counter v1.0 [ UNTESTED ]

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

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

Винаги ли трябва да се ползва static вместо new ? Където е възможно разбира се.
MANSION - HNS : 93.123.18.46:27016
ONLINE

Аватар
hackera457
Извън линия
Модератор
Модератор
Мнения: 758
Регистриран на: 01 Ное 2016, 09:46
Местоположение: София
Се отблагодари: 1 път
Получена благодарност: 115 пъти
Обратна връзка:

Re: Back Stab Counter v1.0 [ UNTESTED ]

Мнение от hackera457 » 15 Фев 2017, 22:09

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

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

Код за потвърждение: Избери целия код

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Аватар
JustInCase
Извън линия
Потребител
Потребител
Мнения: 580
Регистриран на: 14 Окт 2016, 23:31
Се отблагодари: 4 пъти
Получена благодарност: 8 пъти

Re: Back Stab Counter v1.0 [ UNTESTED ]

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

Благодаря за обяснението всичко е оправено !
MANSION - HNS : 93.123.18.46:27016
ONLINE

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1015
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 72 пъти

Re: Back Stab Counter v1.0

Мнение от TheRedShoko » 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

Код за потвърждение: Избери целия код

%i | %i

Аватар
JustInCase
Извън линия
Потребител
Потребител
Мнения: 580
Регистриран на: 14 Окт 2016, 23:31
Се отблагодари: 4 пъти
Получена благодарност: 8 пъти

Re: Back Stab Counter v1.0

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

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



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

Код за потвърждение: Избери целия код

Loose identation on line 23123(пример)
За това с разстоянието си прав оправих го !
MANSION - HNS : 93.123.18.46:27016
ONLINE

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1015
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 72 пъти

Re: Back Stab Counter v1.0

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

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

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Нови попълнения”

Кой е на линия

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