Поиск Buyzone Range

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
35
Реакции
12
Помог
1 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Доброго времени суток, форумчане!

Интересует вопрос, есть ли аналоги данного плагина под reapi или же, как исправить ошибку на Re Amx Mod Х, а именно


[FAKEMETA] Invalid entity
[AMXX] Displaying debug trace (plugin "buyzonerange.amxx", version "0.1")
[AMXX] Run time error 10: native error (native "dllfunc")
[AMXX] [0] buyzonerange.sma::forward_player_postthink (line 121)

Благодарю.
 
Сообщения
443
Реакции
319
Помог
13 раз(а)
Как же надоело писать сообщения чтоб прикрепить фаел, одмены пафиксете плес.
 

Вложения

Сообщения
35
Реакции
12
Помог
1 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Underground Player, при bz_range 2 ошибка в логах оставалась и покупка по всей карте недоступна.
 
Сообщения
443
Реакции
319
Помог
13 раз(а)
Хм, да, плохо искал, это пробуй.
 

Вложения

Сообщения
35
Реакции
12
Помог
1 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Underground Player, ошибки в логах нету, но покупка так-же недоступна.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Автор Adidasman

Код:
#include <amxmodx>
#include <reapi>

#define BUY_SIGNAL (1<<0)

new Float:g_TimeUpdate[33];

public plugin_init() {
    RegisterHookChain(RG_CBasePlayer_UpdateClientData, "UpdateClientData", 1);
}

public UpdateClientData(id) {
    static Float:currentTime, m_state, m_changed;

    currentTime = get_gametime();

    if(currentTime < g_TimeUpdate[id] || !is_user_alive(id)) {
        return HC_CONTINUE;
    }

    m_state = get_member(id, m_signals, US_Signal);
    m_changed = get_member(id, m_signals, US_State) ^ m_state;

    if (~m_changed & BUY_SIGNAL) {
        set_member(id, m_signals, SIGNAL_BUY);
    }

    g_TimeUpdate[id] = currentTime + 0.4;

    return HC_CONTINUE;
}
 
Сообщения
35
Реакции
12
Помог
1 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
fantom, autobuy и buyequip работают, а вот buy нет.
26 Янв 2018
Underground Player, разрешить покупку по всей карте, как раз при bz_range 2 должно было работать, но сыпало ошибку. Ошибку исправили, а работать не начало)
 
Сообщения
35
Реакции
12
Помог
1 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Вообщем не знаю правильно ли решение нашёл, но сделал все как нужно было добавив показ иконки зоны покупки. Код прикреплю возможно кому-то понадобиться или найдутся те, кто предложит вариант лучше, если есть :)


Код:
#include <amxmodx>
#include <amxmisc>
#include <reapi>

#pragma semicolon     1

#define BUY_SIGNAL     (1<<0)

new Float:g_TimeUpdate[33];

new g_msgid_icon;

new g_icon_name[] = "buyzone";

public plugin_init()
{
    register_plugin("Update Client Data", "1.0", "Adidasman");
    
    RegisterHookChain(RG_CBasePlayer_UpdateClientData, "UpdateClientData", 1);
        
    g_msgid_icon     = get_user_msgid("StatusIcon");
}
public UpdateClientData(id)
{
    static Float:currentTime, m_state, m_changed;
    
    currentTime = get_gametime();
    
    if(currentTime < g_TimeUpdate[id] || !is_user_alive(id))
    {
        return HC_CONTINUE;
    }
    
    m_state     = get_member(id, m_signals, US_Signal);
    m_changed     = get_member(id, m_signals, US_State) ^ m_state;
    
    if(~m_changed & BUY_SIGNAL)
    {
        set_member(id, m_signals, SIGNAL_BUY);
    }
    
    g_TimeUpdate[id] = currentTime + 0.4;
        
    draw_buyzone_icon(id, BUY_SIGNAL);
    
    return HC_CONTINUE;
}
public draw_buyzone_icon(id, draw)
{
    message_begin(MSG_ONE, g_msgid_icon, _, id);
    write_byte(draw);
    write_string(g_icon_name);
    
    if(draw)
    {
        write_byte(0);
        write_byte(160);
        write_byte(0);
    }
    
    message_end();
}
 
Сообщения
2,751
Реакции
3,016
Помог
61 раз(а)
h9lla, Ещё один вариант под вашу конкретную задачу.
Что бы не дёргать постоянно UpdateClientData(), который вызывается достаточно часто (~100 раз в секунду) - мы можем на старте карты единожды создать зону покупки (func_buyzone) размером на всю карту, с параметром KeyValue "team" закупки для любой команды.
Инфа для мапперов: https://github.com/s1lentq/ReGameDL...meDefinitionFile/regamedll-cs.fgd#L2332-L2340 (#2)

Таким образом мы получили зону закупки, которая работает по всей карте и для любой команды.

Код:
#include <amxmodx>
#include <engine>

#pragma ctrlchar '\'
#pragma semicolon 1

public plugin_init()
{
    register_plugin("The total purchase on map", "0.1b", "wopox1337");

    // RemoveAllBuyZones();
    CreateBuyZone();
}

public CreateBuyZone()
{
    new pEnt_buyzone = create_entity("func_buyzone");

    DispatchKeyValue(pEnt_buyzone, "team", "0");
    DispatchSpawn(pEnt_buyzone);

    entity_set_size(pEnt_buyzone, Float:{-8191.0, -8191.0, -8191.0}, Float:{8191.0, 8191.0, 8191.0});

    return pEnt_buyzone;
}

stock RemoveAllBuyZones()
{
    new ent = -1;
    while((ent = find_ent_by_class(ent, "func_buyzone")))
        remove_entity(ent);

    return ent != -1;
}
 
Последнее редактирование:
Сообщения
702
Реакции
54
wopox1337, не знаю, подошло ли парню, но когда мне нужно было такое, это не работало, все равно не работала закупка.
 
Сообщения
35
Реакции
12
Помог
1 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
wopox1337, спасибо, учту.

К сожалению ваш вариант не заработал.

ReHlsd, ReGameDll, Re Amx Mod X все последнее.
 

ssx

Сообщения
289
Реакции
73
Юзаю код
Код:
#include <amxmodx>
#include <engine>

public plugin_init()
{
    register_plugin("create_buyzone", "T 0.1", "no")
    set_task(2.0, "create_buyzone")
}
public pfn_spawn(eid)
{
    new ClsName[32]
    entity_get_string(eid, EV_SZ_classname, ClsName, 31)
    if(equali(ClsName, "func_buyzone"))
    {
        server_print("[amxx]: block def. func_buyzone")
        return 1
    }
    return 0
}

public create_buyzone()
{
    new eid = create_entity("func_buyzone")
    DispatchSpawn(eid)
    entity_set_size(eid, Float:{-8191.0, -8191.0, -8191.0}, Float:{8191.0, 8191.0, 8191.0})

    server_print("[amxx]: create buyzone")
}

На КСДМ где стоят de_ и cs_ карты - работает отлично всё.
Но вот на сервере КСДМ где fy_/gg_/aim_ карты - через раз что-то работает.

Думаю, нужно в самих .bsp добавлять зону закупки через BSP EDITOR (BSP_EDIT.exe)
4 Мар 2018
с плагином с #10 поста аналогично, через раз на картах aim_
на aim_aztecplace работает , на aim_headshot не работает .
 
Сообщения
839
Реакции
519
Помог
12 раз(а)
PHP:
#include <amxmodx>
#include <fakemeta>

new g_hSpawn;

public plugin_precache()
{
    new Buyzone = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_buyzone"));
    if (pev_valid(Buyzone))
    {
        dllfunc(DLLFunc_Spawn, Buyzone)
        engfunc(EngFunc_SetSize, Buyzone, Float:{-8072.0,-8072.0,-8072.0}, Float:{8072.0,8072.0,8072.0});
    }
    g_hSpawn = register_forward(FM_Spawn, "Block_Spawn", true);
}
public plugin_init()
{
    unregister_forward(FM_Spawn, g_hSpawn);
}
public Block_Spawn(iEnt)
{
    new classname[32]; pev(iEnt, pev_classname, classname, charsmax(classname));
    if (equal(classname, "info_map_parameters") || equal(classname, "func_buyzone"))
    {
        set_pev(iEnt, pev_flags, FL_KILLME);
    }
}
с плагином с #10 поста аналогично, через раз на картах aim_
на aim_aztecplace работает , на aim_headshot не работает .
не работает из-за info_map_parameters
 

ssx

Сообщения
289
Реакции
73
BalbuR, с этим кодом аналогично - не работает на aim_headshot а на aim_aztecplace работает

В карте aim_headshot
{
"origin" "0 256 0"
"buying" "3"
"bombradius" "500"
"classname" "info_map_parameters"
}
В карте aim_aztecplace нету этого .
И в обох картах нет func_buyzone
4 Мар 2018
Изменил "buying" "3" на "buying" "0" на карте aim_headshot и заработало!

Только странно, ведь на aim_aztecplace нет этого и все работает норм, а вот удаление на карте aim_headshot ничего не меняет.
 
Последнее редактирование:
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
ssx, так через карту и внесите байзону.
 

ssx

Сообщения
289
Реакции
73
Итого: если плагин не работает - проверьте через bsp editor наличие
{
"buying" "0"
"classname" "info_map_parameters"
}

Переделал себе все aim_ / awp_ / fy_ карты и всё работает отлично!

Код использую с #10 сообщения.
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
h9lla, Ещё один вариант под вашу конкретную задачу.
Что бы не дёргать постоянно UpdateClientData(), который вызывается достаточно часто (~100 раз в секунду) - мы можем на старте карты единожды создать зону покупки (func_buyzone) размером на всю карту, с параметром KeyValue "team" закупки для любой команды.
Инфа для мапперов: https://github.com/s1lentq/ReGameDL...meDefinitionFile/regamedll-cs.fgd#L2332-L2340 (#2)

Таким образом мы получили зону закупки, которая работает по всей карте и для любой команды.

Код:
#include <amxmodx>
#include <engine>

#pragma ctrlchar '\'
#pragma semicolon 1

public plugin_init()
{
    register_plugin("The total purchase on map", "0.1b", "wopox1337");

    // RemoveAllBuyZones();
    CreateBuyZone();
}

public CreateBuyZone()
{
    new pEnt_buyzone = create_entity("func_buyzone");

    DispatchKeyValue(pEnt_buyzone, "team", "0");
    DispatchSpawn(pEnt_buyzone);

    entity_set_size(pEnt_buyzone, Float:{-8191.0, -8191.0, -8191.0}, Float:{8191.0, 8191.0, 8191.0});

    return pEnt_buyzone;
}

stock RemoveAllBuyZones()
{
    new ent = -1;
    while((ent = find_ent_by_class(ent, "func_buyzone")))
        remove_entity(ent);

    return ent != -1;
}
У меня почему-то так не работает начиная со второго раунда, то есть, работает только через O (buyequip) а через B (buy) не работает, вывожу кастомное меню магазина на эти две кнопки. Используя код выше и код что укажу ниже при спавне игрока эта проблема решается и получается использовать меню на B (buy) всегда.

Код:
message_begin(MSG_ONE, g_iMsgStatusIcon, .player = id);
write_byte(1);
write_string("buyzone");
write_byte(0);
write_byte(0);
write_byte(0);
message_end();
g_iMsgStatusIcon = get_user_msgid("StatusIcon"); соответственно в plugin_init();
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.

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

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