Появляется байзона там, где её быть не должно

Сообщения
3,331
Реакции
1,464
Помог
124 раз(а)
Ошибка
Ошибок нет
ОС
Windows
Amx Mod X
AMX Mod X 1.9.0.5271 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: Jun 24 2020 13:53:37
Built from: https://github.com/alliedmodders/amxmodx/commit/5eea3e5b
Build ID: 5271:5eea3e5b
Core mode: JIT+ASM32
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.7.0.698-dev
Build date: 10:14:22 Aug 19 2020 (2321)
Build from: https://github.com/dreamstalker/rehlds/commit/376bc15
ReGamedll
ReGameDLL version: 5.20.0.492-dev
Build date: 15:26:35 Jan 4 2021
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/aae507c
Версия Metamod
Metamod-r v1.3.0.128, API (5:13)
Metamod-r build: 15:47:38 Aug 24 2018
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/0cf2f70
Список метамодулей
Currently loaded plugins:
description stat pend file vers src load unload
[ 1] AMX Mod X RUN - amxmodx_mm.dll v1.9.0.5271 ini Start ANY
[ 2] Reunion RUN - reunion_mm.dll v0.1.0.92c ini Start Never
[ 3] HitboxTracker RUN - hitboxtracker_mm.dll v1.1 ini Start Never
[ 4] Fix Custom iMaxClip RUN - fixmaxclip.dll v0.1 ini ANY ANY
[ 5] SQLite RUN - sqlite_amxx.dll v1.9.0.5263 pl1 ANY ANY
[ 6] FakeMeta RUN - fakemeta_amxx.dll v1.9.0.5263 pl1 ANY ANY
[ 7] Engine RUN - engine_amxx.dll v1.9.0.5263 pl1 ANY ANY
[ 8] Ham Sandwich RUN - hamsandwich_amxx.dll v1.9.0.5271 pl1 ANY ANY
[ 9] CStrike RUN - cstrike_amxx.dll v1.9.0.5263 pl1 ANY ANY
9 plugins, 9 running
Список плагинов
Currently loaded plugins:
name version author file status
[ 1] Shoot Grenades 1.1 joaquimandrade shootGrenades.a running
1 plugins, 1 running
Автор плагина
joaquimandrade
Версия плагина
1.1
Исходный код
#include <amxmodx>

#include <fakemeta>
#include <engine>
#include <hamsandwich>

#include <cstrike>

#include <xs>

new const Plugin[] = "Shoot Grenades"
new const Author[] = "joaquimandrade"
new const Version[] = "1.1"

enum Grenade
{
Flashbang,
He,
Smoke,
C4
}

new Cvars[Grenade]

new CvarsNames[Grenade][] =
{
"flash",
"he",
"smoke",
"c4"
}

// Arkshine
const m_flC4Blow = 100

new Trie:RegisteredClasses

public plugin_precache()
{
RegisteredClasses = TrieCreate()

register_forward(FM_Spawn,"spawn")
}

public spawn(id)
{
if(pev_valid(id))
{
static classname[32]
pev(id,pev_classname,classname,charsmax(classname))

if(!TrieKeyExists(RegisteredClasses,classname))
{
RegisterHam(Ham_TraceAttack,classname,"globalTraceAttack")
TrieSetCell(RegisteredClasses,classname,true)
}
}
}

public plugin_init()
{
register_plugin(Plugin,Version,Author)

RegisterHam(Ham_TraceAttack,"worldspawn","globalTraceAttack")
RegisterHam(Ham_TraceAttack,"player","globalTraceAttack")

register_cvar("shootGrenades_version",Version,FCVAR_SERVER|FCVAR_SPONLY)
}

public plugin_cfg()
{
new cvarName[15]

for(new Grenade:i=Grenade:0;i<Grenade;i++)
{
formatex(cvarName,charsmax(cvarName),"shoot_%s",CvarsNames[i])
Cvars[i] = register_cvar(cvarName,"1")
}
}

public globalTraceAttack(this,attackerID,Float:damage,Float:direction[3],tracehandle,damagebits)
{
if(1 <= attackerID <= 32)
{
static Float:origin[3]
pev(attackerID,pev_origin,origin)

static Float:viewOfs[3]
pev(attackerID,pev_view_ofs,viewOfs)

xs_vec_add(origin,viewOfs,origin)

static Float:end[3]
get_tr2(tracehandle,TR_vecEndPos,end)

new trace = create_tr2()

new grenade = -1

while((grenade = find_ent_by_class(grenade,"grenade")))
{
engfunc(EngFunc_TraceModel,origin,end,HULL_POINT,grenade,trace)

if(get_tr2(trace,TR_pHit) == grenade)
{
new Grenade:id = fm_cs_get_grenade_type_myid(grenade)

if(id == C4)
{
new cvarValue = get_pcvar_num(Cvars[C4])

if((cvarValue == 2) || (cvarValue && (cs_get_user_team(attackerID) == CS_TEAM_CT)))
{
set_pdata_float(grenade,m_flC4Blow,0.0)
dllfunc(DLLFunc_Think,grenade)
}
}
else
{
if(get_pcvar_num(Cvars[id]))
{
if(id == Smoke)
set_pev(grenade,pev_flags,pev(grenade,pev_flags) | FL_ONGROUND)

// Connor
set_pev(grenade,pev_dmgtime,0.0)
dllfunc(DLLFunc_Think,grenade)
}
}
}
}

free_tr2(trace)
}
}

// VEN
Grenade:fm_cs_get_grenade_type_myid(index)
{
if(get_pdata_int(index, 96) & (1<<8))
{
return C4
}

return Grenade:(get_pdata_int(index, 114) & 3)
}
Прикрепленный плагин каким-то образом создаёт байзону там, где её быть не должно. Самому мне не удалось понять, как.
Для теста отключались все плагины, кроме него.

Тестировалось на картах: 35hp_2, awp_inida, awp_poseidon. Без сабжа байзоны нет, с ним - есть.
На каждой из карт нет самой func_buyzone, зато есть энтити info_map_parameters, отвечающая за запрет покупки на карте.
Из программы BSPEdit:
Код:
{
"origin" "648 -696 264"
"buying" "3"
"bombradius" "500"
"classname" "info_map_parameters"
}
 

Вложения

Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
Тоесть,на этих картах,что Вы написали с этим плагином создаются зоны покупки?

А с другими картами по типу 35hp_/aim_/awp_... также создаются?
 
Сообщения
3,331
Реакции
1,464
Помог
124 раз(а)
MayroN, без понятия. Три карты достаточно для проверки. Я просмотрел список энтити в них через BSPEdit.
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
Очень странная ситуация, глянул код плагина, напрямую ничего вроде нету связанного с бай зоной. Может махинации с "C4" какое-то влияние оказывают.
 
Сообщения
71
Реакции
39
{ "origin" "648 -696 264" "buying" "3" "bombradius" "500" "classname" "info_map_parameters" }

Я конечно извиняюсь, но если мне не изменяет память то id3 в buying отвечает за разрешение покупать всем командам, я не имею понятия может ли создаваться зона сама по себе (не тестировал), но полагаю что все дело именно в этом параметре и возможно (не факт), закупка происходит по всей карте, ну фактически она же разрешена
 
  • Нравится
Реакции: ifx
Сообщения
3,331
Реакции
1,464
Помог
124 раз(а)
KRYSIS, во-первых, вопрос в том, начинается у этой энтити в этом keyvalue нумерация с нуля, или с единицы? Ну это вопрос к мапперам скорее. Свойства entity Info_map_parameters (akksimo.net) - вот св-ва этой энтити, но там не подписаны значения цифрами, и если начинается с нуля, то это значит как раз, что никто не можешь покупать. А если с единицы, то все могут.

Во-вторых, собственно на вышеперечисленных картах нельзя закупаться без сабжа. Так что думаю, всё-таки 3 - это запрет всем.

В-третьих, как я уже упоминал, на данных картах я не обнаружил энтити байзоны, тогда как должна работать сама info_map_parameters, если ей задать покупку для всех? (без сабжа) Это тоже вопрос к мапперам.

В-четвёртых, байзона с сабжем появляется там, где она как бы должна быть - на спавне. Если отойти от спавна, она пропадает.
9 Май 2021
upd. Проверил опытным путём параметр buying у info_map_parameters;
  1. При значении 0 - все могут покупать.
  2. При значении 1 - CT.
  3. При значении 2 - TE.
  4. При значении 3 - никто.
 
Сообщения
694
Реакции
472
Помог
10 раз(а)
Нельзя убирать бацзону совсем, иначе у игрока при спавне будет N времени для покупки на месте, где он справился. Создай байзону, задай ей солид_нот, отправь ее на задворки карты и все.
9 Май 2021
ПыСы. Плагин тут явно не причем
 
Сообщения
3,331
Реакции
1,464
Помог
124 раз(а)
Плагин тут явно не причем
Ага, тогда как объяснить что с ним можно покупать?

И потом, если сделать пропуск info_map_parameters, то покупать становится нельзя.
Код:
public spawn(id)
{
+    if(FClassnameIs(id, "info_map_parameters"))
+        return;
    if(pev_valid(id))
    {
        static classname[32]
        pev(id,pev_classname,classname,charsmax(classname))
       
        if(!TrieKeyExists(RegisteredClasses,classname))
        {
            RegisterHam(Ham_TraceAttack,classname,"globalTraceAttack")
            TrieSetCell(RegisteredClasses,classname,true)
        }
    }
}
 
Последнее редактирование:

d3m37r4

111111
Сообщения
1,425
Реакции
1,166
Помог
10 раз(а)
upd. Проверил опытным путём параметр buying у info_map_parameters;
  1. При значении 0 - все могут покупать.
  2. При значении 1 - CT.
  3. При значении 2 - TE.
  4. При значении 3 - никто.
ну да, как-то так:
InfoMapBuyParam
CheckMapInfo()

Выше BlackSignature скинул пример, старой проверки на закуп, на картах, где нет бай зоны, который кстати и будет работать, если энтити байзоны не обнаружен на мапе
 
Сообщения
1,487
Реакции
1,480
Помог
2 раз(а)
Nordic Warrior,
Я проверял с одним этим плагином и без его.
Результат - плагин не причём здесь

На разных картах по-разному
Версии карт 35 hp_,,, - на 1ну секунду появляется значёк закупки,далее пропадает
aim_... - либо есть коляска ,либо нет.Дам,где есть - при покупке пишет ,что нельзя

Может стоит взять карту,там где вообще нет и посмотреть прогой BSPEdit и взять для себя нужные значения... ? Хз

Ну и 2 варианта для скрытия
Древний от VEN ( рабочий ) - правда Спектрам покажет тележку
Код:
/* AMX Mod X
*   Buyzone Range
*
* (c) Copyright 2006 by VEN
*
* This file is provided as is (no warranties)
*
*     DESCRIPTION
*       Plugin allows to set buyzone range: everywhere/nowhere/default
*       Note: AMX Mod X v1.75+ required
*
*     CVARs
*       bz_range (0: Nowhere, 1: Default, 2: Everywhere, default: 1)
*       Note: CVAR change is accepted every new round and player spawn
*/

#include <amxmodx>
#include <fakemeta>

// plugin's main information
#define PLUGIN_NAME "Buyzone Range"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "VEN"

// OPTIONS BELOW

// CVAR name and its default value
#define CVAR_NAME "bz_range"
#define CVAR_DEF "0"

// uncomment to disable automatic 32/64bit processor detection
// possible values is <0: 32bit | 1: 64bit>
//#define PROCESSOR_TYPE 0

// OPTIONS ABOVE

// mapzone player's private data offset
#define OFFSET_32BIT 235
#define OFFSET_64BIT 268

// offset's linux difference
#define OFFSET_LINUX_DIFF 5

// buyzone bit
#define BIT_BUYZONE (1<<0)

// determination of actual offsets
#if !defined PROCESSOR_TYPE // is automatic 32/64bit processor detection?
    #if cellbits == 32 // is the size of a cell 32 bits?
        // then considering processor as 32 bit
        #define OFFSET OFFSET_32BIT
    #else // in other case considering the size of a cell as 64 bits
        // and then considering processor as 64 bit
        #define OFFSET OFFSET_64BIT
    #endif
#else // processor type is specified by PROCESSOR_TYPE define
    #if PROCESSOR_TYPE == 0 // 32bit processor defined
        #define OFFSET OFFSET_32BIT
    #else // considering that defined 64bit processor
        #define OFFSET OFFSET_64BIT
    #endif
#endif

// get/set mapzone bits
#define CS_GET_USER_MAPZONES(%1) get_pdata_int(%1, OFFSET, OFFSET_LINUX_DIFF)
#define CS_SET_USER_MAPZONES(%1,%2) set_pdata_int(%1, OFFSET, %2, OFFSET_LINUX_DIFF)

// fake buyzone absmin and absmax
new Float:g_buyzone_min[3] = {-8192.0, -8192.0, -8192.0}
new Float:g_buyzone_max[3] = {-8191.0, -8191.0, -8191.0}

new g_buyzone
new g_pcvar

new bool:g_enabled
new g_bit

new bool:g_new_round
new g_maxplayers

#define MAX_PLAYERS 32
new bool:g_alive[MAX_PLAYERS + 1]

new g_msgid_icon
new g_icon_name[] = "buyzone"

#define ICON_R 0
#define ICON_G 160
#define ICON_B 0

public plugin_init() {
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

    g_pcvar = register_cvar(CVAR_NAME, CVAR_DEF)

    register_clcmd("buy", "menu_block")
    register_clcmd("buyequip", "menu_block")
    register_clcmd("fullupdate", "clcmd_fullupdate")

    register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
    register_event("ResetHUD", "event_player_alive", "be")
    register_event("Health", "event_player_dead", "bd", "1=0")

    register_forward(FM_PlayerPostThink, "forward_player_postthink")

    g_msgid_icon = get_user_msgid("StatusIcon")
    register_message(g_msgid_icon, "message_status_icon")

    g_maxplayers = get_maxplayers()

    g_buyzone = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_buyzone"))
    dllfunc(DLLFunc_Spawn, g_buyzone)
    engfunc(EngFunc_SetSize, g_buyzone, g_buyzone_min, g_buyzone_max)

    update_state_vars()
}

public forward_player_postthink(id) {
    if (g_alive[id] && g_enabled) {
        switch (g_bit) {
            case BIT_BUYZONE: dllfunc(DLLFunc_Touch, g_buyzone, id)
            default: CS_SET_USER_MAPZONES(id, CS_GET_USER_MAPZONES(id) & ~BIT_BUYZONE)
        }
    }
}

public event_new_round() {
    g_new_round = true
    set_task(0.1, "task_unset_var")
    update_state_vars()
}

public task_unset_var() {
    g_new_round = false
}

public event_player_alive(id) {
    g_alive[id] = true

    if (g_new_round) {
        if (g_enabled)
            draw_buyzone_icon(id, g_bit)
    }
    else {
        update_state_vars()
        if (g_enabled) {
            for (new i = 1; i <= g_maxplayers; ++i) {
                if (g_alive[i])
                    draw_buyzone_icon(i, g_bit)
            }
        }
    }
}

public event_player_dead(id) {
    g_alive[id] = false
}

public client_disconnect(id) {
    g_alive[id] = false
}

public message_status_icon(msg_id, msg_dest, id) {
    if (!g_alive[id] || !g_enabled)
        return PLUGIN_CONTINUE

    new icon[8]
    get_msg_arg_string(2, icon, 7)
    if (equal(icon, g_icon_name))
        return PLUGIN_HANDLED

    return PLUGIN_CONTINUE
}

public menu_block(id) {
    if (g_alive[id] && g_enabled && !g_bit)
        return PLUGIN_HANDLED

    return PLUGIN_CONTINUE
}

public clcmd_fullupdate() {
    return PLUGIN_HANDLED
}

update_state_vars() {
    new cvar_value = get_pcvar_num(g_pcvar)
    g_enabled = true
    switch (cvar_value) {
        case  0: g_bit = 0
        case  1: g_enabled = false
        default: g_bit = BIT_BUYZONE
    }
}

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(ICON_R)
        write_byte(ICON_G)
        write_byte(ICON_B)
    }
    message_end()
}

Arkshine ( не проверял )
Код:
#include <amxmodx>
#include <engine>

public plugin_precache()
{
        new Entity = create_entity( "info_map_parameters" );
     
        DispatchKeyValue( Entity, "buying", "3" );
        DispatchSpawn( Entity );
}
 
public plugin_init()
{
        register_plugin( "Remove Buy Zone", "1.0.0", "Arkshine" );
}

public pfn_keyvalue( Entity )
{
        new ClassName[ 20 ], Dummy[ 2 ];
        copy_keyvalue( ClassName, charsmax( ClassName ), Dummy, charsmax( Dummy ), Dummy, charsmax( Dummy ) );
     
        if( equal( ClassName, "info_map_parameters" ) )
        {
            remove_entity( Entity );
            return PLUGIN_HANDLED ;
        }
     
        return PLUGIN_CONTINUE;
}

new map_buy_block;


fm_remove_entity(EngFunc_RemoveEntity, "info_map_parameters");
fm_remove_entity(EngFunc_RemoveEntity, "func_buyzone");

new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_map_parameters"));

fm_set_kvd(iEntity, "buying", "0");

public plugin_precache()

register_forward(FM_KeyValue, "fw_keyvalue", 1);



public fw_keyvalue(ent, kvdid){

new classname[32], keyname[32], keyvalue[32];

if(pev_valid(ent)){

get_kvd(kvdid, KV_ClassName, classname, 31);

get_kvd(kvdid, KV_KeyName, keyname, 31);

get_kvd(kvdid, KV_Value, keyvalue, 31);

if(equali(classname, "info_map_parameters") && equali(keyname, "buying"))

if(str_to_num( keyvalue )!=3)

map_buy_block = str_to_num( keyvalue );

}

return FMRES_IGNORED;

}
 
Последнее редактирование:
Сообщения
3,331
Реакции
1,464
Помог
124 раз(а)
MayroN,
плагин не причём здесь
35 hp_,,, - на 1ну секунду появляется значёк закупки,далее пропадает
Ты сам себе притиворечишь. На 35hp_2 как и на других похожих, не должно даже появляться значка. Почему на одну секунду появляется - скинули выше. Что если на карте нет байзоны, закупаться можно в спавне, а на 35hp_2 после спавна телепортирует на саму карту (Спавны за картой)

Ну и 2 варианта для скрытия
Мне уже даже не столько решение интересно, сколько причины этого бага. Способ решения в данном случае я уже нашел:
И потом, если сделать пропуск info_map_parameters, то покупать становится нельзя.


Выше @BlackSignature скинул пример, старой проверки на закуп, на картах, где нет бай зоны, который кстати и будет работать, если энтити байзоны не обнаружен на мапе
Это я уже понял из его сообщения. Проблема в том, как будто при использовании сабжа у info_map_parameters сбивается параметр buying на 0... Но я хукал FM_KeyValue - проверял, и значение было "3".
 
Сообщения
775
Реакции
291
Помог
11 раз(а)
Баг есть у карт 35 и aim, когда таймер в 0, тебя возрождает и на секунду появляется иконка байзоны и если есть деньги и бинд, то легко можно купить оружие. Знаю такой баг был на hlds, на re не знаю, не проверял
 
Сообщения
71
Реакции
39
KRYSIS, во-первых, вопрос в том, начинается у этой энтити в этом keyvalue нумерация с нуля, или с единицы? Ну это вопрос к мапперам скорее. Свойства entity Info_map_parameters (akksimo.net) - вот св-ва этой энтити, но там не подписаны значения цифрами, и если начинается с нуля, то это значит как раз, что никто не можешь покупать. А если с единицы, то все могут.

Во-вторых, собственно на вышеперечисленных картах нельзя закупаться без сабжа. Так что думаю, всё-таки 3 - это запрет всем.

В-третьих, как я уже упоминал, на данных картах я не обнаружил энтити байзоны, тогда как должна работать сама info_map_parameters, если ей задать покупку для всех? (без сабжа) Это тоже вопрос к мапперам.

В-четвёртых, байзона с сабжем появляется там, где она как бы должна быть - на спавне. Если отойти от спавна, она пропадает.
9 Май 2021
upd. Проверил опытным путём параметр buying у info_map_parameters;
  1. При значении 0 - все могут покупать.
  2. При значении 1 - CT.
  3. При значении 2 - TE.
  4. При значении 3 - никто.
Спутал значения, собственно от этого ничего не поменялось
 

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

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