Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Полезные ссылки

Knife Deathmatch

, Оптимизация и доведение до ума исходного кода
Статус пользователя FDGod
сообщение 2.3.2016, 19:25
Сообщение #1


Стаж: 12 лет

Сообщений: 186
Благодарностей: 23
Полезность: 17

Здравствуйте.

Сразу к сути. Использую эту версию мода (ниже код)
Код:
Код
#include <amxmodx>
#include <hamsandwich>
#include <fun>

#define PLUGIN "Knife DM"
#define AUTHOR "TunoK`~"
#define VERSION "1.0"

#define SPAWN_SECOND    1.0//время в сек. через сколько произойдет возрождение (время обязательно в десятичных)

static szMap[32]

public plugin_init()
{
        register_plugin(PLUGIN, AUTHOR, VERSION)
        register_logevent("PlayerRespawn", 3, "1=joined team")//Отлов события выбора тима
        register_event("DeathMsg", "PlayerKill", "a")//Отлов события смерти игрока
      
        get_mapname(szMap, 31)
}

public PlayerKill()
{
        new id = read_data(2)//индекс жертвы
      
        SpawnTask(SPAWN_SECOND, id)//таймер для возрождения
}

public PlayerRespawn()
{
        new szLog[256]
        new szName[32], szTeam[12]

        read_logargv(0, szLog, charsmax( szLog ))
        read_logargv(2, szTeam, charsmax( szTeam ))

        parse_loguser(szLog, szName, charsmax( szName ))
      
        new id = get_user_index(szName)
      
        if(is_user_connected(id) && szTeam[0] != 'S')//игорируем спектаров
        {
                SpawnTask(SPAWN_SECOND, id)//таймер для возрождения
        }
}

public Respawn(id)
{
        static team
      
        new MapName[32]
        get_mapname(MapName,31)
          
        if(!is_user_alive(id) && (team = get_user_team(id)) != 3 && team != 0)
                ExecuteHamB(Ham_CS_RoundRespawn,id)//Возрождение
              
        if(is_user_alive(id))//Если игрок жив
        {
                set_user_godmode(id, 1)//Предоставляем бессмертие
                ColorChat(id, "", PLUGIN)
              
                if(get_user_team(id) == 1)//Если игрок тер
                {
                        set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 50)
                }
                else if(get_user_team(id) == 2)//Если игрок КТ
                {
                        set_user_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 50)
                }
                set_task(1.0, "ProtectionOff", id)
        }
        return PLUGIN_CONTINUE;
}

public ProtectionOff(id)
{
        if(!is_user_alive(id))
                return PLUGIN_CONTINUE;

        if (containi(szMap, "35hp_")!=-1)
                set_user_health(id, 35)
        else if (containi(szMap, "1hp_")!=-1)
                set_user_health(id, 1)

        set_user_godmode(id, 0)
        set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25)
        return PLUGIN_CONTINUE;
}
stock SpawnTask(Time, const id)
{
        set_task(Time, "Respawn", id)
}
stock ColorChat(const id, const input[], any:...)
{
        new count = 1, players[32]
        static msg[191]
        vformat(msg, 190, input, 3)
        format(msg, sizeof(msg), "%s", msg)
        replace_all(msg, 190, "!g", "^4") // Green Color
        replace_all(msg, 190, "!y", "^1") // Default Color
        replace_all(msg, 190, "!t", "^3") // Team Color

        if (id) players[0] = id; else get_players(players, count, "ch")
        {
                for (new i = 0; i < count; i++)
                {
                        if (is_user_connected(players[i]))
                        {
                                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                                write_byte(players[i]);
                                write_string(msg);
                                message_end();
                        }
                }
        }
}

Проблемы:
- игрок конектится к серверу, выбирает команду, остается смотреть убитым за игроками (при чем команду сменить не может), решение - перезайти (после n-попыток)
- игрок игрок конектится к серверу, каким-то образом не успевает выбрать команду и остается в спектрах. Решение - перезайти (после n-попыток)

Если это можно назвать работой, то оплачиваю (цена и прочее в ЛС).
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: