Поиск 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
Реакции
321
Помог
13 раз(а)
Как же надоело писать сообщения чтоб прикрепить фаел, одмены пафиксете плес.
 

Вложения

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

Вложения

Сообщения
35
Реакции
12
Помог
1 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Underground Player, ошибки в логах нету, но покупка так-же недоступна.
 
Сообщения
2,491
Реакции
2,797
Помог
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,752
Реакции
3,020
Помог
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, не знаю, подошло ли парню, но когда мне нужно было такое, это не работало, все равно не работала закупка.
 
Сообщения
2,752
Реакции
3,020
Помог
61 раз(а)
ThePhoenix, я проверил перед тем, как оповестить.
1517050632560.png
 
Сообщения
35
Реакции
12
Помог
1 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
wopox1337, спасибо, учту.

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

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

ssx

Сообщения
313
Реакции
88
Юзаю код
Код:
#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 не работает .
 
Сообщения
923
Реакции
548
Помог
13 раз(а)
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

Сообщения
313
Реакции
88
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,142
Реакции
1,222
Помог
44 раз(а)
ssx, так через карту и внесите байзону.
 

ssx

Сообщения
313
Реакции
88
Итого: если плагин не работает - проверьте через 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();
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.

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

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