Русское сообщество по скриптингу

доведение до ума кода "подстрелил-зарезал"

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

доведение до ума кода "подстрелил-зарезал"

Сообщение Dmitry Beast » 11 авг 2018, 14:18

Добрый день ув. форумчане!
Помогите довести до ума код, проблем несколько:
1) ни как не срабатывает скринфейд
2) иной раз сразу на второе предупреждение проходит, иной раз наоборот только первое выдаёт, иной раз выдаёт предупреждение, если просто зарезать не подстрелив перед этим
3) пришлось костылить с разминкой потому, как во время разминки на гг не нужно наказывать и там в принципе ножи, но в любом случае выдаёт предупреждение

Код: Выделить всё
#include <amxmodx>
#include <fun>
#include <cstrike>
#include <hamsandwich>

#define PLUGIN "Knf Weapon"
#define VERSION "1.0"
#define AUTHOR "BeasT"

#define bit_add(%0,%1) (%1 |= (1<<%0))
#define bit_sub(%0,%1) (%1 &= ~(1<<%0))
#define bit_valid(%0,%1) (%1 & (1<<%0))

#define MAX_WARNS 1

 
new g_iValidPlayersBitsum
new gg_warmup_timer_setting

new g_StatusPl[33], g_StatusKill[33], g_Status[33], g_WarmUP

new Float:fNum
 
public plugin_init()
{
    
register_event("DeathMsg""EventDeathMsg""a""4=knife")
    
RegisterHam(Ham_TakeDamage"player""UserTakeDamage")
    
    
gg_warmup_timer_setting register_cvar("gg_warmup_timer_setting","")
    
    
register_event("TextMsg","event_round_restart","a","2=#Game_Commencing","2=#Game_will_restart_in");
}

public 
enable_screenfade(Killer
{
    
message_begin(MSG_ONEget_user_msgid("ScreenFade"), {0,0,0}, Killer)
    
write_short(1<<10)
    
write_short(1<<10)
    
write_short(0x0000)
    
write_byte(0)
    
write_byte(155)
    
write_byte(0)
    
write_byte(0)
    
message_end()
}

public 
disable_screenfade(Killer
{
    
message_begin(MSG_ONEget_user_msgid("ScreenFade"), {0,0,0}, Killer)
    
write_short(1<<10)
    
write_short(1<<10)
    
write_short(0x0000)
    
write_byte(0)
    
write_byte(0)
    
write_byte(0)
    
write_byte(0)
    
message_end()
}    

public 
event_round_restart()
{
    new 
warmup_value get_pcvar_num(gg_warmup_timer_setting)
    new 
Float:fNum2
    
    fNum2 
get_gametime()
    
fNum get_gametime()
    
    new 
num_integer floatround((fNum2 fNum),floatround_round)
    
    if(
num_integer warmup_value)
    {
        
g_WarmUP true
    
}
}
    
public 
UserTakeDamage (VictimWeaponAttacker)
{
    if(!
g_WarmUP)return PLUGIN_HANDLED
    
    
if(g_Status[Attacker] < 1)
    {
        
g_Status[Attacker]++
    }
    else
    
    if (
get_user_weapon(Attacker) != CSW_KNIFE && g_Status[Attacker] > 0)
    {
        
g_StatusPl[Attacker] = Victim
        g_StatusPl
[Victim] = Victim
    
}
    return 
PLUGIN_CONTINUE
}
 
public 
client_putinserver(id)
{
        
bit_add(idg_iValidPlayersBitsum);
}

 

public 
client_disconnect(id)
{
        
bit_sub(idg_iValidPlayersBitsum);
}
 
public 
EventDeathMsg()
{
    new 
Killer read_data(1), Victim read_data(2);
    
    if(
bit_valid(Killerg_iValidPlayersBitsum) && bit_valid(Victimg_iValidPlayersBitsum))
    {
        if(
g_StatusPl[Killer] == g_StatusPl[Victim])
        {
            if(
g_StatusKill[Killer] < MAX_WARNS)
            {
                
ChatColor(0"^4Подстрелив-зарезал - 1 предупреждение")
                
                
g_StatusKill[Killer]++
                
                new 
CountiplayerPlayers[32]
                
                
get_players(PlayersCount"h"
                for (
i=0i<Counti++) 
                {
                    
player Players[i]
                    
                    if(
g_StatusPl[player] == g_StatusPl[player])
                    {
                        
g_StatusPl[player] = random_num(6127572175)
                    }
                }
            }
            else
            if(
g_StatusKill[Killer] >= MAX_WARNS)
            {
                new 
szFunc[84], szName[33]
                
                
get_user_name(KillerszNamecharsmax(szName))
                
                
formatex(szFunccharsmax(szFunc), "amx_gungame_level %s -1"szName)
                
                
server_cmd(szFunc)
                
                
enable_screenfade(Killer)
                
                
set_task(1.0"disable_screenfade"Killer)
                
                
ChatColor(0"^4Вы многократно убили подстрелив-зарезав , так нельзя")
                
                new 
CountiplayerPlayers[32]
                
                
get_players(PlayersCount"h"
                for (
i=0i<Counti++) 
                {
                    
player Players[i]
                    
                    if(
g_StatusPl[player] == g_StatusPl[player])
                    {
                        
g_StatusPl[player] = random_num(6127572175)
                    }
                }
            }
            
            new 
frags get_user_frags(Killer)
            
            
set_user_frags(Killerfrags 1)
        }
    }
    return 
PLUGIN_CONTINUE
}

stock ChatColor(const id, const input[], any:...)
{
   new 
count 1players[32]
   static 
msg[191]
   
vformat(msg190input3)
   
   
replace_all(msg190"!g""^4")
   
replace_all(msg190"!y""^1")
   
replace_all(msg190"!team""^3")
   
replace_all(msg190"!team2""^0")
   
   if (
idplayers[0] = id; else get_players(playerscount"ch")
   {
      for (new 
0counti++)
      {
         if (
is_user_connected(players[i]))
         {
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _players[i])
            
write_byte(players[i]);
            
write_string(msg);
            
message_end();
         }
      }
   }


опытным взглядом взгляните на код, где я набодяжил?
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: доведение до ума кода "подстрелил-зарезал"

Сообщение Dmitry Beast » 12 авг 2018, 15:42

суть плагина не давать игроку в режиме GunGame сначала подстрелить, за тем зарезать игрока с одного удара, чтобы поднять уровень.

действия считаются только между двумя игроками, ну и соответственно сбрасываются, когда игрок(которому нанесли урон) умер.
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: доведение до ума кода "подстрелил-зарезал"

Сообщение RevCrew » 12 авг 2018, 22:50

Dmitry Beast, поставьте дебаг в событии screenFade и посмотрите, работает или нет

Добавлено спустя 17 минут 55 секунд:
wtf ?
Код: Выделить всё
public event_round_restart()
{
    new 
warmup_value get_pcvar_num(gg_warmup_timer_setting)
    new 
Float:fNum2
    
    fNum2 
get_gametime()
    
fNum get_gametime()
    
    
// что это????????????????????????????
    
new num_integer floatround((fNum2 fNum),floatround_round)
    
    if(
num_integer warmup_value)
    {
        
g_WarmUP true
    
}
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: доведение до ума кода "подстрелил-зарезал"

Сообщение Dmitry Beast » 12 авг 2018, 22:56

RevCrew писал(а):Dmitry Beast, поставьте дебаг в событии screenFade и посмотрите, работает или нет

Добавлено спустя 17 минут 55 секунд:
wtf ?
Код: Выделить всё
public event_round_restart()
{
    new warmup_value = get_pcvar_num(gg_warmup_timer_setting)
    new Float:fNum2
    
    fNum2 
= get_gametime()
    fNum = get_gametime()
    
    
// что это????????????????????????????
    new num_integer = floatround((fNum2 - fNum),floatround_round)
    
    if
(num_integer > warmup_value)
    {
        g_WarmUP = true
    
}

скринфейд непервоочередная проблема....

Если взглянуть на код и условие "num_integer > warmup_value", будет понятно)

Добавлено спустя 33 секунды:
Dmitry Beast писал(а):3) пришлось костылить с разминкой потому, как во время разминки на гг не нужно наказывать и там в принципе ножи, но в любом случае выдаёт предупреждение
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: доведение до ума кода "подстрелил-зарезал"

Сообщение RevCrew » 12 авг 2018, 23:15

ну можно сократить же до
Код: Выделить всё
public event_round_restart() g_WarmUP = true


Добавлено спустя 1 минуту 2 секунды:
скринфейд непервоочередная проблема....

тоже самое и с другими частями кода можно делать
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: доведение до ума кода "подстрелил-зарезал"

Сообщение Dmitry Beast » 12 авг 2018, 23:20

RevCrew писал(а):ну можно сократить же до
Код: Выделить всё
public event_round_restart() g_WarmUP = true


Добавлено спустя 1 минуту 2 секунды:
скринфейд непервоочередная проблема....

тоже самое и с другими частями кода можно делать

код пока сырой настолько, что нужно сначала функционал довести до ума, потом уже думать за красоту..

Добавлено спустя 2 минуты 27 секунд:
RevCrew писал(а):ну можно сократить же до
Код: Выделить всё
public event_round_restart() g_WarmUP = true

и ведь выдернуто из мода в котором рестарты могут быть в разных ситуациях..

Добавлено спустя 56 секунд:
этот кусок не зря придуман!...
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: доведение до ума кода "подстрелил-зарезал"

Сообщение RevCrew » 12 авг 2018, 23:36

Тогда объясни.
Ты писал про три проблемы свои, я подсказал с 1 и 3, но по сути оказалось что это не нужно и все не зря придумано.
Зачем тогда писать про это?
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: доведение до ума кода "подстрелил-зарезал"

Сообщение Dmitry Beast » 12 авг 2018, 23:40

первая проблема бог с ней... разберемся походу пьесы(дебаг включу...)
3яя - возможно кто-то сталкивался с отловом убиств в разминке "ГГ", вся суть ЧТО ОСВНОВНОГО ФУНКЦИОНАЛА, ЧТО всех проблем ЯВНО заключается в проблеме под номером 2.

Список составлял глядя на код.... ;)
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12