Ошибка при компиляции.

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
134
Реакции
40
Помог
2 раз(а)
Ошибка
//AMXXPC compile.exe
// by the AMX Mod X Dev Team


//// hp.sma
//
// C:\Users\gsg6\Desktop\addons\amxmodx\scripting\hp.sma(22) : warning 213: tag
mismatch
// Header size: 556 bytes
// Code size: 892 bytes
// Data size: 224 bytes
// Stack/heap size: 16384 bytes
// Total requirements: 18056 bytes
//
// 1 Warning.
// Done.
//
// Compilation Time: 0,23 sec
// ----------------------------------------

Press enter to exit ...
Компилятор
Локальный
Amx Mod X
1.9.0
Исходный код
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <hamsandwich>

new g_iMaxPlayers

public plugin_init()
{
register_plugin("1337 HP", "0.1", "tba")
RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawn", 1)

g_iMaxPlayers = get_maxplayers()
}

public fwdPlayerSpawn()
{
for (new i = 1; i <= g_iMaxPlayers; i++)
{
if (is_user_alive(i))

if (get_user_team(i) == CS_TEAM_T)
{
set_user_health(i, 1337)
}
}
return PLUGIN_CONTINUE
}
Добрый день. Искал плагин, который бы изменял стартовое количество hp определенной команде, в моём случаи террористам. Нашел на одном форуме старое сообщение с подобным кодом, но там выдавалось hp всем игрокам без исключения. Путём сёрфинга, проб и ошибок мне удалось внести свои коррективы. На практике всё работает, но компиляции прошла с ошибками.
Такие же манипуляции я проделал со старым плагином HP Vision. Так же всё работает, но присутствует ошибка при первой компиляции. Не могли бы вы взглянуть на оба кода и сказать насколько это всё надёжно и не вызовет ли проблем в будущем по типу большой нагрузки, падения сервера или вылета игроков.
И скажите актуально ли это делать сейчас через плагин? Просто нашел решение для реализацию некоторых мелких моментов через regamedll, для которых раньше люди использовали дополнительные плагины. Но вот кваров отвечающих за hp не нашел, может плохо искал.
Извиняюсь если задал глупые вопросы, просто я обычный юзер не шарящий за написание плагинов. Заранее спасибо за любую помощь. Буду очень признателен если поправите код.

Код:
#include <amxmodx>

#define PLUGIN "HP vision"
#define VERSION "1.0"
#define AUTHOR "apprentice"

new hudsync;
new maxplayers;

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

    register_event("ResetHUD", "eResetHUD", "be");

    hudsync = CreateHudSyncObj();
    maxplayers = get_maxplayers();

    set_task(0.1, "stats", 0, "", 0, "b", 0);
}

public eResetHUD(id)
{
    if(!is_user_bot(id))
    {
        message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Crosshair"), _, id);
        write_byte(0);
        message_end();
    }
}

public stats()
{
    for(new i=1; i<=maxplayers; i++)
    {
        if(!is_user_alive(i)) return;

        if (get_user_team(i) == CS_TEAM_T)
        {
            set_hudmessage(255, 230, 0, 0.01, 0.89, 0, 6.0, 12.0);
            ShowSyncHudMsg(i, hudsync, "HP: %d", get_user_health(i));
        }
    }
}

Код:
//AMXXPC compile.exe
// by the AMX Mod X Dev Team


//// hp_vision.sma
//
// C:\Users\gsg6\Desktop\addons\amxmodx\scripting\hp_vision.sma(38) : warning 21
3: tag mismatch
// Header size:            516 bytes
// Code size:              992 bytes
// Data size:              340 bytes
// Stack/heap size:      16384 bytes
// Total requirements:   18232 bytes
//
// 1 Warning.
// Done.
//
// Compilation Time: 0,16 sec
// ----------------------------------------

Press enter to exit ...
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
775
Реакции
293
Помог
11 раз(а)
Алексеич, у него варнинг, но все равно неприятная фигня для перфекциониста
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
Rayn, начнём с того, что это не ошибка, а предупреждение. Предупреждения не всегда влияют на работу плагинов.
Советую изучить данную тему: ID's ошибок и предупреждений компилятора | Dev-CS.ru

По теме: ты использовал натив get_user_team который возвращает данные с другой меткой, (В данном случае без неё) И сравниваешь с константой, которая имеет свою метку:
Код:
/**
* Counter-Strike team id constants.
*/
enum CsTeams
{
    CS_TEAM_UNASSIGNED = 0,
    CS_TEAM_T          = 1,
    CS_TEAM_CT         = 2,
    CS_TEAM_SPECTATOR  = 3,
};
Решения тут целых четыре: либо использовать натив из икнлуда cstrike, для которого и есть та константа, которую ты использовал.
Код:
/**
* Returns the client's team and optionally the model id.
*
* @note For a list of valid team ids see the CsTeams enum, and for a list of
*       valid internal model ids see the CsInternalModel enum.
*
* @param index     Client index
* @param model     Optional variable to store model id in
*
* @return          Team id
* @error           If the client index is not within the range of 1 to
*                  MaxClients, or the client is not connected, an error will be
*                  thrown.
*/
native CsTeams:cs_get_user_team(index, &any:model = CS_DONTCHANGE);
Либо использовать константу без метки для get_user_team. если я правильно помню, то для него вообще нет констант, поэтому нужно написать цифрой. if (get_user_team(i) == 1)

Либо же, подставить тег от enum CsTeams к нативу get_user_team, чтобы возвращаемые им данные шли с такой меткой.
if (CsTeams:get_user_team(i) == CS_TEAM_T)

Наконец, можно сделать наоборот, подставив метку "any" к константе, тогда компилятор не будет сравнивать типы данных.
if (get_user_team(i) == any:CS_TEAM_T)
 
Сообщения
134
Реакции
40
Помог
2 раз(а)
Nordic Warrior, еще раз спасибо за помощь, решил использовать четвертый предложенный вами вариант. Предупреждение пропало, в целом тему можно закрывать. Единственное хотел спросить, что можете сказать по поводу кода выдающего hp игрокам? Знакомый скриптер в отставке сказал, что возможно не хватает set_task и из-за его отсутствия может падать сервер. Такого мною замечено не было, но уточнить лишним не будет.
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
что можете сказать по поводу кода выдающего hp игрокам?
В целом код рабочий и со своей задачей справляется. Остальное уже - дело вкуса. Я бы использовал для написания reapi, мне он привычнее.

P.s. все вышеперечисленные мной способы не сгодятся для решения такого же предупреждения, когда конфликт происходит между целыми числами (int) и числами с точкой (float), поэтому в других случаях решение может быть другим.
 
Статус
В этой теме нельзя размещать новые ответы.

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

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