Лучший игрок раунда проблема :/

Сообщения
1
Реакции
0
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Ошибка
Ошибок нету просто неправильно выводит нанесённый урон :/
ОС
Linux
Amx Mod X
Amx Mod X 1.9.0
Билд
ReHLDS version: 3.6.0.672-dev Build
ReGamedll
ReGameDLL version: 5.9.0.345-dev
Версия Metamod
Metamod-r v1.3.0.128, API (5:13)
Список метамодулей
[ 1] Reunion RUN - reunion_mm_i386.so v0.1.0.133 ini Start Never
[ 2] WHBlocker RUN - whblocker_mm_i386.so v1.5.696 ini Chlvl ANY
[ 3] SoftBlocker RUN - softblocker_mm_i386.so v1.1g ini ANY Never
[ 4] ReSRDetector RUN - resrdetector_mm_i386.so v0.1.0 ini Chlvl ANY
[ 5] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 6] ReSemiclip RUN - resemiclip_mm_i386.so v2.3.9 ini Chlvl ANY
[ 7] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC3 ini ANY ANY
[ 8] AMX Mod X RUN - amxmodx_mm_i386.so v1.9.0.5249 ini Start ANY
[ 9] MySQL RUN - mysql_amxx_i386.so v1.9.0.5249 pl8 ANY ANY
[10] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5232 pl8 ANY ANY
[11] ReAPI RUN - reapi_amxx_i386.so v5.9.0.171-dev pl8 ANY Never
[12] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl8 ANY Never
[13] CSX RUN - csx_amxx_i386.so v1.8.3-dev+5154 pl8 ANY ANY
[14] Fun RUN - fun_amxx_i386.so v1.9.0.5249 pl8 ANY ANY
[15] Engine RUN - engine_amxx_i386.so v1.9.0.5249 pl8 ANY ANY
[16] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5249 pl8 ANY ANY
[17] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5249 pl8 ANY ANY
Список плагинов
[ 1] BestPlayer 1.3 neygomon bestround.amxx running
[ 2] [ReAPI] AWPoff 1.4.3 PAffAEJIkA :3 awp_off.amxx running
[ 3] Rat Bomb 1.0 Seroff mfsc4mdl.amxx running
[ 4] C4 Timer 0.1 Lightman bombtimer.amxx running
[ 5] resetscore(ReAPI) 1.0 Phantom resetscore.amxx running
[ 6] Killer ScreenFade 0.0.5 Vaqtincha reapi_killer_sc running
[ 7] Music Connect 1.1 Leo_[BH] music_connect.a running
[ 8] unknown unknown unknown mg_sound.amxx running
[ 9] AFK Bomb Transfer 0.4 VEN afkbombtransfer running
[ 10] Team menu 1.1 NobodyInTeam teammenu.amxx running
[ 11] Icon Color 1.0 AcE icon_color.amxx running
[ 12] Pop Grenades 1.2 EFFx/HamletEagle GrenadePop.amxx running
[ 13] GameName Changer 1.0 neugomon gamename_change running
[ 14] Advanced Experience Sy 0.5.9 [REA serfreeman1337/s aes_main.amxx running
[ 15] Map Manager: Core 3.0.3 Mistrick map_manager_cor running
[ 16] Map Manager: Scheduler 0.1.2 Mistrick map_manager_sch running
[ 17] Map Manager: Rtv 0.1.0 Mistrick map_manager_rtv running
[ 18] Map Manager: Nominatio 0.1.0 Mistrick map_manager_nom running
[ 19] Map Manager: BlockList 0.0.3 Mistrick map_manager_blo running
[ 20] Map Manager: Online so 0.0.2 Mistrick map_manager_onl running
[ 21] Map Manager: Effects 0.0.8 Mistrick map_manager_eff running
[ 22] Map Manager: Informer 0.0.5 Mistrick map_manager_inf running
[ 23] Map Manager: Advanced 0.0.5 Mistrick map_manager_adv running
[ 24] Lite Translit 2.8 neygomon lite_translit_c running
Автор плагина
neygomon
Версия плагина
1.3
Исходный код
// *************************************************************************************//
// Плагин загружен с www.neugomon.ru //
// Автор: Neygomon [ https://neugomon.ru/members/1/ ] //
// Официальная тема поддержки: https://neugomon.ru/threads/276/ //
// При копировании материала ссылка на сайт www.neugomon.ru ОБЯЗАТЕЛЬНА! //
// *************************************************************************************//

#include <amxmodx>
#include <fun>
#include <cstrike>
#include <hamsandwich>

enum _:DATA { Bonus[32], Num }
new const g_aBonuses[][DATA] =
{
{ "weapon_ak47", 60 }, // оружие | патроны
{ "addarmor", 100 }, // броня | кол-во
{ "addhealth", 30 }, // хп | кол-во
{ "addmoney", 1000} // деньги | кол-во
}

new g_iDamage[33];
new g_iBestDamage, g_iBestPlayer;
#if AMXX_VERSION_NUM < 183
new MaxClients;
#define client_disconnected client_disconnect
#endif

public plugin_init()
{
register_plugin("BestPlayer", "1.3", "neygomon");

register_logevent("LeRoundEnd", 2, "1=Round_End");

RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawnPost", true);
register_event("Damage", "eventDamage", "b", "2!0");
#if AMXX_VERSION_NUM < 183
MaxClients = get_maxplayers();
#endif
}

public client_disconnected(id)
{
if(g_iBestPlayer == id)
g_iBestPlayer = 0;

g_iDamage[id] = 0;
}

public fwdPlayerSpawnPost(const pClient)
{
if(g_iBestPlayer != pClient)
return;
if(!is_user_alive(pClient))
return;

new name[32]; get_user_name(pClient, name, charsmax(name));
new bonus = random(charsmax(g_aBonuses));

if(g_aBonuses[bonus][Bonus][0] == 'w' && g_aBonuses[bonus][Bonus][6] == '_')
{
give_item(pClient, g_aBonuses[bonus][Bonus]);
if(g_aBonuses[bonus][Num] > 0) cs_set_user_bpammo(pClient, get_weaponid(g_aBonuses[bonus][Bonus]), g_aBonuses[bonus][Num]);

ChatColor("^1[^4MVP^1] ^4Žaidėjas ^3%s ^4tapo ^3round ^4MVP! ^3(%d)^4dmg. Bonus ^1- ^3%s", name, g_iBestDamage, g_aBonuses[bonus][Bonus][7]);
}
else if(!strcmp(g_aBonuses[bonus][Bonus], "addarmor") && g_aBonuses[bonus][Num] > 0)
{
cs_set_user_armor(pClient, g_aBonuses[bonus][Num], CS_ARMOR_VESTHELM);
ChatColor("^1[^4MVP^1] ^4Žaidėjas ^3%s ^4tapo ^3round ^4MVP! ^3(%d)^4dmg. Bonus ^1- ^3%d Armor", name, g_iBestDamage, g_aBonuses[bonus][Num]);
}
else if(!strcmp(g_aBonuses[bonus][Bonus], "addhealth") && g_aBonuses[bonus][Num] > 0)
{
set_user_health(pClient, get_user_health(pClient) + g_aBonuses[bonus][Num]);
ChatColor("^1[^4MVP^1] ^4Žaidėjas ^3%s ^4tapo ^3round ^4MVP! ^3(%d)^4dmg. Bonus ^1- ^3%d HP", name, g_iBestDamage, g_aBonuses[bonus][Num]);
}
else if(!strcmp(g_aBonuses[bonus][Bonus], "addmoney") && g_aBonuses[bonus][Num] > 0)
{
cs_set_user_money(pClient, cs_get_user_money(pClient) + g_aBonuses[bonus][Num]);
ChatColor("^1[^4MVP^1] ^4Žaidėjas ^3%s ^4tapo ^3round ^4MVP! ^3(%d)^4dmg. Bonus ^1- ^3%d $", name, g_iBestDamage, g_aBonuses[bonus][Num]);
}
g_iBestPlayer = 0;
}

public eventDamage(id)
{
static attacker; attacker = get_user_attacker(id);
if(1 <= attacker <= MaxClients && id != attacker)
g_iDamage[attacker] += read_data(2);
}

public LeRoundEnd()
{
new players[32], pnum; get_players(players, pnum, "h");
for(new i, g_iBestDamage = 0; i < pnum; i++)
{
if(g_iDamage[players[i]] > g_iBestDamage)
{
g_iBestDamage = g_iDamage[players[i]];
g_iBestPlayer = players[i];
}
}
arrayset(g_iDamage, 0, sizeof g_iDamage);
}

stock ChatColor(const szMessage[], any:...)
{
new szMsg[190];
vformat(szMsg, charsmax(szMsg), szMessage, 2);
message_begin(MSG_ALL, 76, .player = 0);
write_byte(g_iBestPlayer);
write_string(szMsg);
message_end();
}
Добрый вечер , может найдется человек который разбирается в плагинах и поможет исправить данную проблему в плагине ,))

Суть плагина: Плагин выводит инфу в чат о лучшем игроке раунда.
Проблема: Урон каторый нанёс игрок выводется всегда [ 0 ] хотя допустим я набил 200 урона :/
P.S пробывал ставить плагин выше других.
 
Сообщения
576
Реакции
1,003
Помог
18 раз(а)
Главная проблема, инициализация переменной в цикле с одинаковым именем глобальной.
Рандом никогда не выберет последний вариант бонуса.
Эвент Damage вызывается позже конца раунда, в итоге можно было пропустить урон.
Код:
// *************************************************************************************//
// Плагин загружен с  www.neugomon.ru                                                   //
// Автор: Neygomon  [ https://neugomon.ru/members/1/ ]                                  //
// Официальная тема поддержки: https://neugomon.ru/threads/276/                         //
// При копировании материала ссылка на сайт www.neugomon.ru ОБЯЗАТЕЛЬНА!                //
// *************************************************************************************//

#include <amxmodx>
#include <fun>
#include <cstrike>
#include <hamsandwich>

enum _:DATA { Bonus[32], Num }
new const g_aBonuses[][DATA] =
{
    { "weapon_ak47",     60 },    // оружие | патроны
    { "addarmor",         100 },    // броня | кол-во
    { "addhealth",         30 },    // хп | кол-во
    { "addmoney",         1000}    // деньги | кол-во
}

new g_iDamage[33];
new g_iBestDamage, g_iBestPlayer;
#if AMXX_VERSION_NUM < 183
    new MaxClients;
    #define client_disconnected client_disconnect
#endif

public plugin_init()
{
    register_plugin("BestPlayer", "1.3-fixed", "neygomon");

    register_event("HLTV", "LeRoundStart", "a", "1=0", "2=0");
    
    RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawnPost", true);
    register_event("Damage", "eventDamage", "b", "2!0");
#if AMXX_VERSION_NUM  < 183   
    MaxClients = get_maxplayers();
#endif   
}

public client_disconnected(id)
{
    if(g_iBestPlayer == id)
        g_iBestPlayer = 0;
    
    g_iDamage[id] = 0;
}

public fwdPlayerSpawnPost(const pClient)
{
    if(g_iBestPlayer != pClient)
        return;
    if(!is_user_alive(pClient))
        return;
    
    new name[32]; get_user_name(pClient, name, charsmax(name));
    new bonus = random(sizeof(g_aBonuses));
    
    if(g_aBonuses[bonus][Bonus][0] == 'w' && g_aBonuses[bonus][Bonus][6] == '_')
    {
        give_item(pClient, g_aBonuses[bonus][Bonus]);
        if(g_aBonuses[bonus][Num] > 0) cs_set_user_bpammo(pClient, get_weaponid(g_aBonuses[bonus][Bonus]), g_aBonuses[bonus][Num]);
        
        ChatColor("^1[^4MVP^1] ^4Žaidėjas ^3%s ^4tapo ^3round ^4MVP! ^3(%d)^4dmg. Bonus ^1- ^3%s", name, g_iBestDamage, g_aBonuses[bonus][Bonus][7]);
    }
    else if(!strcmp(g_aBonuses[bonus][Bonus], "addarmor") && g_aBonuses[bonus][Num] > 0)
    {
        cs_set_user_armor(pClient, g_aBonuses[bonus][Num], CS_ARMOR_VESTHELM);
        ChatColor("^1[^4MVP^1] ^4Žaidėjas ^3%s ^4tapo ^3round ^4MVP! ^3(%d)^4dmg. Bonus ^1- ^3%d Armor", name, g_iBestDamage, g_aBonuses[bonus][Num]);
    }   
    else if(!strcmp(g_aBonuses[bonus][Bonus], "addhealth") && g_aBonuses[bonus][Num] > 0)
    {
        set_user_health(pClient, get_user_health(pClient) + g_aBonuses[bonus][Num]);
        ChatColor("^1[^4MVP^1] ^4Žaidėjas ^3%s ^4tapo ^3round ^4MVP! ^3(%d)^4dmg. Bonus ^1- ^3%d HP", name, g_iBestDamage, g_aBonuses[bonus][Num]);
    }
    else if(!strcmp(g_aBonuses[bonus][Bonus], "addmoney") && g_aBonuses[bonus][Num] > 0)
    {
        cs_set_user_money(pClient, cs_get_user_money(pClient) + g_aBonuses[bonus][Num]);
        ChatColor("^1[^4MVP^1] ^4Žaidėjas ^3%s ^4tapo ^3round ^4MVP! ^3(%d)^4dmg. Bonus ^1- ^3%d $", name, g_iBestDamage, g_aBonuses[bonus][Num]);
    }
    g_iBestPlayer = 0;
}

public eventDamage(id)
{
    static attacker; attacker = get_user_attacker(id);
    if(1 <= attacker <= MaxClients && id != attacker)
        g_iDamage[attacker] += read_data(2);
}

public LeRoundStart()
{
    new players[32], pnum; get_players(players, pnum, "h");
    g_iBestDamage = 0;
    for(new i; i < pnum; i++)
    {
        if(g_iDamage[players[i]] > g_iBestDamage)
        {
            g_iBestDamage = g_iDamage[players[i]];
            g_iBestPlayer = players[i];
        }
    }
    arrayset(g_iDamage, 0, sizeof g_iDamage);
}

stock ChatColor(const szMessage[], any:...)
{
    new szMsg[190];
    vformat(szMsg, charsmax(szMsg), szMessage, 2);
    message_begin(MSG_ALL, 76, .player = 0);
    write_byte(g_iBestPlayer);
    write_string(szMsg);
    message_end();
}
 
Последнее редактирование:

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

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