problem for compile

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
3
Реакции
0
Ошибка
damager.sma(36) : warning 217: loose indentation
damager.sma(41) : error 017: undefined symbol "LoadDamagerSettings"
damager.sma(81) : error 017: undefined symbol "g_event_info"
damager.sma(81) : warning 215: expression has no effect
damager.sma(81) : error 001: expected token: ";", but found "]"
damager.sma(81) : error 029: invalid expression, assumed zero
damager.sma(81) : fatal error 107: too many error messages on one line
Компилятор
Локальный
Amx Mod X
1.9.0
Исходный код
#include <amxmodx>
#include <reapi>
#include <nvault>

new const PLUGIN[] = "Damager"
new const VERSION[] = "0.4"
new const AUTHOR[] = "Prayer & slutter666"

new g_DamagerEnabled[MAX_PLAYERS]
new g_DamagerColor[MAX_PLAYERS][3]
new g_HudSync


public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /dm", "cmd_ToggleDamager")
register_clcmd("say_team /dm", "cmd_ToggleDamager")
register_clcmd("say /color", "cmd_ColorMenu")
register_clcmd("say_team /color", "cmd_ColorMenu")

// Регистрируем хуки для CBasePlayer_TraceAttack и CBasePlayer_TakeDamage
RegisterHookChain(RG_CBasePlayer_TraceAttack, "@CBasePlayer_TraceAttack_Post", true);
RegisterHookChain(RG_CBasePlayer_TakeDamage, "@CBasePlayer_TakeDamage_Post", true);

g_HudSync = CreateHudSyncObj()

LoadDamagerSettings()

for (new i = 0; i < MAX_PLAYERS; i++)
{
if (g_DamagerColor[i][0] == 0 && g_DamagerColor[i][1] == 0 && g_DamagerColor[i][2] == 0)
{
g_DamagerColor[i][0] = 255; // Красный
g_DamagerColor[i][1] = 255; // Зеленый
g_DamagerColor[i][2] = 255; // Синий
}
}
}

public CBasePlayer_TraceAttack_Post(id)
{
if (!g_DamagerEnabled[id])
{
return PLUGIN_HANDLED;
}

new attacker = get_user_attacker(id);
new damage = read_data(10);

if (is_user_connected(attacker))
{
set_hudmessage(g_DamagerColor[attacker][0], g_DamagerColor[attacker][1], g_DamagerColor[attacker][2], -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1);
ShowSyncHudMsg(attacker, g_HudSync, "%i", damage);
}
return PLUGIN_HANDLED;
}

public CBasePlayer_TakeDamage_Post(id)
{
// Проверяем, не включен ли дамагер для игрока
if (!g_DamagerEnabled[id])
{
return PLUGIN_HANDLED;
}

// Получаем данные о повреждении
new attacker = g_event_info[1];
new damage = g_event_info[2];

// Проверяем, является ли атакующий игроком
if (is_user_connected(attacker))
{
// Вывод сообщения для атакуемого игрока
set_hudmessage(g_DamagerColor[id][0], g_DamagerColor[id][1], g_DamagerColor[id][2], 0.45, 0.50, 2, 0.1, 4.0, 0.1, 0.1, -1);
ShowSyncHudMsg(id, g_HudSync, "%i", damage);

// Вывод сообщения для атакующего игрока
set_hudmessage(g_DamagerColor[attacker][0], g_DamagerColor[attacker][1], g_DamagerColor[attacker][2], -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1);
ShowSyncHudMsg(attacker, g_HudSync, "%i", damage);
}
return PLUGIN_HANDLED;
}

public client_putinserver()
{
LoadDamagerColor(id)
}

public cmd_ToggleDamager(id)
{
g_DamagerEnabled[id] = !g_DamagerEnabled[id] // Переключение состояния дамагера для игрока

if (g_DamagerEnabled[id])
{
client_print(id, print_chat, "Информирование урона - включено")
}
else
{
client_print(id, print_chat, "Информирование урона - отключено")
}
}

public cmd_ColorMenu(id)
{
new menu = menu_create("Выберите цвет дамагера", "cmd_SetColor")

menu_additem(menu, "Красный", "1")
menu_additem(menu, "Зеленый", "2")
menu_additem(menu, "Синий", "3")
menu_additem(menu, "Желтый", "4")
menu_additem(menu, "Фиолетовый", "5")
menu_additem(menu, "Циан", "6")

menu_display(id, menu)
}

public cmd_SetColor(id, const menu_id, const menu_item)
{

g_Color[id][0] = 0;
g_Color[id][1] = 0;
g_Color[id][2] = 0;

switch (menu_item)
{
case 0: // Красный
g_Color[id][0] = 255;
case 1: // Зеленый
g_Color[id][1] = 255;
case 2: // Синий
g_Color[id][2] = 255;
case 3: // Желтый
{
g_Color[id][0] = 255;
g_Color[id][1] = 255;
}
case 4: // Фиолетовый
{
g_Color[id][0] = 128;
g_Color[id][2] = 128;
}
case 5: // Циан
{
g_Color[id][1] = 255;
g_Color[id][2] = 255;
}
}
client_print(id, print_chat, "<ENMITY> Цвет дамагера изменен на " + menu_item_name[menu_item] + "!");

SaveDamagerColor(id, g_DamagerColor[id]);
}

public SaveDamagerSettings(id, enabled)
{
new nvault_handle = nvault_open("damagers");
nvault_set_bool(nvault_handle, "enabled" + id, enabled);
nvault_close(nvault_handle);
}

public SaveDamagerColor(id, color[3])
{
new nvault_handle = nvault_open("damagers");
nvault_set_int(nvault_handle, "color_r" + id, color[0]);
nvault_set_int(nvault_handle, "color_g" + id, color[1]);
nvault_set_int(nvault_handle, "color_b" + id, color[2]);
nvault_close(nvault_handle);
}

public LoadDamagerColor(id)
{
new nvault_handle = nvault_open("damagers");
if (nvault_exists(nvault_handle, "color_r" + id))
{
g_DamagerColor[id][0] = nvault_get_int(nvault_handle, "color_r" + id);
g_DamagerColor[id][1] = nvault_get_int(nvault_handle, "color_g" + id);
g_DamagerColor[id][2] = nvault_get_int(nvault_handle, "color_b" + id);
}
nvault_close(nvault_handle);
}
'.'
знающие люди, вдолбите твердолобому человеку
что здесь не так?
2 часа колдуюсь :D
 
В этой теме было размещено решение! Перейти к решению.

fgd

Сообщения
92
Реакции
25
Помог
12 раз(а)
В коде отсутствует функция LoadDamagerSettings
slutter666, Также в коде ты присвоил переменным attacker и damage глобальный массив g_event_info, но сам массив не был создан. То же самое касается массива g_Color.

Что касается g_DamagerEnabled и g_DamagerColor, то MAX_PLAYERS == 32 . Поэтому, если ты создаешь массив для игроков, ты должен выделить память MAX_PLAYERS +1, потому что индексация игроков начинается с единицы.

C++:
new g_DamagerEnabled[MAX_PLAYERS + 1];
new g_DamagerColor[MAX_PLAYERS + 1][3];

Идём дальше. Касаемо функции client_print на строке 150, в AMX Mod X нет конкатенации строк. Я так понял, что ты хотел вывести имя пункта меню menu_item_name[menu_item] . Это делается по-другому(пример ниже). Также, нам не нужно передавать g_DamagerColor в функцию SaveDamagerColor, так как массив и так является глобальным.

Код:
public cmd_SetColor(id, const menu_id, const menu_item)
{

    g_Color[id][0] = 0;
    g_Color[id][1] = 0;
    g_Color[id][2] = 0;

    new szName[64];
    menu_item_getinfo(menu_id, menu_item, .name = szName, .namelen = charsmax(szName));

    switch (menu_item)
    {
        case 0: // Красный
            g_Color[id][0] = 255;
        case 1: // Зеленый
            g_Color[id][1] = 255;
        case 2: // Синий
            g_Color[id][2] = 255;
        case 3: // Желтый
        {
            g_Color[id][0] = 255;
            g_Color[id][1] = 255;
        }
        case 4: // Фиолетовый
        {
            g_Color[id][0] = 128;
            g_Color[id][2] = 128;
        }
        case 5: // Циан
        {
            g_Color[id][1] = 255;
            g_Color[id][2] = 255;
        }
    }
    client_print(id, print_chat, "<ENMITY> Цвет дамагера изменен на %s!" szName);
   
    SaveDamagerColor(id);
}

Про nvault, nVault Tutorial .

Я не буду исправлять код за тебя, так как в данном случае его скорее нужно дописывать, а не просто исправлять.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу