Русское сообщество по скриптингу

Отлов поднятия оружия  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Re: Отлов поднятия оружия

Сообщение KOTOKU » 08 дек 2017, 14:10

Mistrick писал(а):Зря вы пытаетесь в pev_user1 что-то записывать для оружий, геймдлл туда пишет некоторые значения.


Не записывает он ничего в iuser1 в оружиях, iuser1 служит исключительно для параметров игрока - режим наблюдателя.
В остальных случаях параметр пустует. (Если это не ReHLDS какие нибудь с переделками)

Добавлено спустя 9 минут 21 секунду:
Все работает прекрасно, хз что там автор чудит
Последний раз редактировалось KOTOKU 08 дек 2017, 15:23, всего редактировалось 1 раз.
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: Отлов поднятия оружия

Сообщение OtherWorld » 08 дек 2017, 14:14

KOTOKU писал(а):
Mistrick писал(а):Зря вы пытаетесь в pev_user1 что-то записывать для оружий, геймдлл туда пишет некоторые значения.


Не записывает он ничего в iuser1 в оружиях, iuser1 служит исключительно для параметров игрока.
В остальных случаях параметр пустует. (Если это не ReHLDS какие нибудь с переделками)

Добавлено спустя 9 минут 21 секунду:
Все работает прекрасно, хз что там автор чудит


беру твой код, ставлю и не пашет с зомби модом у меня
Аватара пользователя
OtherWorld
 
Сообщения: 78
Зарегистрирован: 01 сен 2017, 08:41
Благодарил (а): 39 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Отлов поднятия оружия

Сообщение KOTOKU » 08 дек 2017, 14:30

Да потому что ты свою булевую переменную посмотри!
У тебя даже если один раз ты поднимаешь что-то помимо АВП с iuser1 != WEAPONKEY, то у тебя bool становится false, а true у тебя она становится 1 раз когда ты выдаешь пуху. Естественно у тебя ничего не работает.
Повнимательней надо быть, жаль, что я сразу не потестил сам.
Проблема в take_awp[id], она у тебя один раз true бывает при спавне авп, а false становится сразу, как только ты берешь что-то помимо своего авп. Убери take_awp[id] и проверь еще раз, все прекрасно работает
Она там вообще ненужна так то.
Если ты хочешь чтобы эта авп конкретно кому то принадлежала, то в iuser ты можешь вбивать id игрока, а потом сверять pev(entity, pev_iuser1) == id. Надеюсь, понятно.

Добавлено спустя 30 секунд:
На вот даже код, который я тестил, убрав булку с attach
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <zombieplague>
#include <fun>
#include <xs>
#include <colorchat>


#define PLUGIN    "AWP"
#define VERSION    "0.1"
#define AUTHOR    "@"

#define WEAPONKEY    7

#define V_MODEL                 "models/v_awp.mdl"     //путь к модели v_
#define P_MODEL                 "models/p_awp.mdl"     //путь к модели p_
#define AMMO                     10                             //количество патронов в обойме
#define BPAMMO                     100                         //количество патронов в запасе

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_AK47)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_FAMAS)|(1<<CSW_P90);



new
    bool:take_awp[33];

new MAXPLAYERS;
    
public plugin_init
()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    register_concmd
("awp","give_awp");
    
    RegisterHam
(Ham_Item_Deploy, "weapon_awp", "ham_item_deploy", 1);

    RegisterHam (Ham_Item_AttachToPlayer, "weapon_awp", "ham_item_add",1);
    
    MAXPLAYERS 
= get_maxplayers();
}

public plugin_precache()
{
    precache_model(V_MODEL);
    precache_model(P_MODEL);
}

public give_awp(id)
{
    take_awp[id] = true;
    
    drop_weapons
(id,1);

    new give_awp_id = cs_give_item(id,"weapon_awp");
    if(give_awp_id)
    {
        cs_set_weapon_ammo(give_awp_id, AMMO);
        cs_set_user_bpammo(id, CSW_AWP, BPAMMO);
    }
}

public ham_item_add(item_id,player_id)
{
    
        client_print
(0, print_chat, "ENT ID: %d | ENT_IUSER: %d", item_id, pev(item_id, pev_iuser1));
}

public ham_item_deploy(weapon_id)
{
    new 
        player_id 
= get_pdata_cbase(weapon_id, 41, 4);
    
    if
(take_awp[player_id])
    {
        set_pev(player_id, pev_viewmodel2, V_MODEL);
        set_pev(player_id, pev_weaponmodel2, P_MODEL);
    }
}

stock drop_weapons(id, dropwhat)
{
    static weapons[32], num, i, weaponid
    num 
= 0
    get_user_weapons
(id, weapons, num)
        
    for 
(= 0; i < num; i++)
    {
        weaponid = weapons[i]
        if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)))
        {
            static wname[32]
            get_weaponname(weaponid, wname, sizeof wname - 1)
            engclient_cmd(id, "drop", wname)
        }
    }
}

stock cs_give_item(id, const szItem[])
{
        
    new iEntity 
= create_entity(szItem);
    if(!pev_valid(iEntity)) return 0;
    new Float:vecOrigin[3];
    pev(id, pev_origin, vecOrigin);
    set_pev(iEntity, pev_origin, vecOrigin);
    set_pev(iEntity, pev_spawnflags, pev(iEntity, pev_spawnflags) | SF_NORESPAWN);
    set_pev(iEntity, pev_iuser1, WEAPONKEY);
    client_print(0, print_chat, "ENT ID: %d | ENT_IUSER: %d", iEntity, pev(iEntity, pev_iuser1));

    dllfunc(DLLFunc_Spawn, iEntity);
    dllfunc(DLLFunc_Touch, iEntity, id);
    
    if
(pev(iEntity, pev_solid) != SOLID_NOT)
    {
        engfunc(EngFunc_RemoveEntity, iEntity);
        return -1;
    }

    return iEntity;
}


Добавлено спустя 3 минуты 50 секунд:
А вот код с переделанным стоком cs_give_item.
Третий параметр - это константа, которая будет iuser1 для этого оружия.
Сейчас сделано чтобы выданное АВП только у хозяина срабатывала через проверку по id.

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <zombieplague>
#include <fun>
#include <xs>
#include <colorchat>


#define PLUGIN    "AWP"
#define VERSION    "0.1"
#define AUTHOR    "@"

#define WEAPONKEY    7

#define V_MODEL                 "models/v_awp.mdl"     //путь к модели v_
#define P_MODEL                 "models/p_awp.mdl"     //путь к модели p_
#define AMMO                     10                             //количество патронов в обойме
#define BPAMMO                     100                         //количество патронов в запасе

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_AK47)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_FAMAS)|(1<<CSW_P90);

new 
MAXPLAYERS;
    
public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR);
    
    
register_concmd("awp","give_awp");
    
    
RegisterHam(Ham_Item_Deploy"weapon_awp""ham_item_deploy"1);
    
    
MAXPLAYERS get_maxplayers();
}

public 
plugin_precache()
{
    
precache_model(V_MODEL);
    
precache_model(P_MODEL);
}

public 
give_awp(id)
{
    
drop_weapons(id1);

    new 
give_awp_id cs_give_item(id"weapon_awp"id);
    if(
give_awp_id)
    {
        
cs_set_weapon_ammo(give_awp_idAMMO);
        
cs_set_user_bpammo(idCSW_AWPBPAMMO);
    }
}

public 
ham_item_deploy(weapon_id)
{
    new 
player_id get_pdata_cbase(weapon_id414);
    
    if(
pev(weapon_idpev_iuser1) == player_id)
    {
        
set_pev(player_idpev_viewmodel2V_MODEL);
        
set_pev(player_idpev_weaponmodel2P_MODEL);
    }
}

stock drop_weapons(iddropwhat)
{
    static 
weapons[32], numiweaponid
    num 
0
    get_user_weapons
(idweaponsnum)
        
    for (
0numi++)
    {
        
weaponid weapons[i]
        if ((
dropwhat == && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)))
        {
            static 
wname[32]
            
get_weaponname(weaponidwnamesizeof wname 1)
            
engclient_cmd(id"drop"wname)
        }
    }
}

stock cs_give_item(id, const szItem[], const iUser)
{        
    new 
iEntity create_entity(szItem);
    if(!
pev_valid(iEntity)) return 0;
    new 
Float:vecOrigin[3];
    
pev(idpev_originvecOrigin);
    
set_pev(iEntitypev_originvecOrigin);
    
set_pev(iEntitypev_spawnflagspev(iEntitypev_spawnflags) | SF_NORESPAWN);
    
set_pev(iEntitypev_iuser1iUser);
    
client_print(0print_chat"ENT ID: %d | ENT_IUSER: %d"iEntitypev(iEntitypev_iuser1));

    
dllfunc(DLLFunc_SpawniEntity);
    
dllfunc(DLLFunc_TouchiEntityid);
    
    if(
pev(iEntitypev_solid) != SOLID_NOT)
    {
        
engfunc(EngFunc_RemoveEntityiEntity);
        return -
1;
    }

    return 
iEntity;
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: Отлов поднятия оружия

Сообщение OtherWorld » 08 дек 2017, 16:40

Если что мне сам код ненужен, просто словесно в чём проблема и как исправить, а с кодом сам уже разберусь иначе как учиться)
Аватара пользователя
OtherWorld
 
Сообщения: 78
Зарегистрирован: 01 сен 2017, 08:41
Благодарил (а): 39 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Отлов поднятия оружия

Сообщение KOTOKU » 08 дек 2017, 16:45

:-| все уже расписано и даже код есть, сравнивай и смотри где что изменено
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: Отлов поднятия оружия

Сообщение OtherWorld » 08 дек 2017, 16:55

И непонятно причем тут take_awp[id] к pev_iuser1 ?? Я же его не меняю, говорю же включаю главный плагин zombieplague40 и pev_iuser1 становиться 0, отключаю всё норм.

Добавлено спустя 1 минуту 6 секунд:
без комментарием :-|
Аватара пользователя
OtherWorld
 
Сообщения: 78
Зарегистрирован: 01 сен 2017, 08:41
Благодарил (а): 39 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Отлов поднятия оружия

Сообщение KOTOKU » 08 дек 2017, 17:15

попробуй использовать iuser2, может мод не занимает его
Если и он занят, еще iuser3 есть
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: Отлов поднятия оружия  [Решено]

Сообщение OtherWorld » 08 дек 2017, 22:18

KOTOKU писал(а):попробуй использовать iuser2, может мод не занимает его
Если и он занят, еще iuser3 есть


Хотел же сразу проверить :-| в общем зомби мод занимает pev_iuser1 и pev_iuser2 (почему? фиг знает :dntknw: ) остальные pev_iuser3 и pev_iuser4 свободны :crazy: Если Вы не против подправил под свои нужды :-)

Код: Выделить всё
iuser_give_item(id,"weapon_awp",pev_iuser3,WEAPONKEY); 

Код: Выделить всё

stock iuser_give_item
(player_id, const weapon_name[], const iuser_key = pev_iuser1, const iuser_value = 0)
{
        
    new entity_id 
= create_entity(weapon_name);

    if(!pev_valid(entity_id)) 
        return 0
;

    new Float:origin[3];
    pev(player_id, pev_origin, origin);

    set_pev(entity_id, pev_origin, origin);
    set_pev(entity_id, pev_spawnflags, pev(entity_id, pev_spawnflags) | SF_NORESPAWN);
    set_pev(entity_id, iuser_key, iuser_value);

    dllfunc(DLLFunc_Spawn, entity_id);
    dllfunc(DLLFunc_Touch, entity_id, player_id);

    if(pev(entity_id, pev_solid) != SOLID_NOT)
    {
        engfunc(EngFunc_RemoveEntity, entity_id);
        return -1;
    }

    return entity_id;
}
 


Добавлено спустя 50 секунд:
P.S. СПАСИБО всем кто отписался!! :thumbs_up
Аватара пользователя
OtherWorld
 
Сообщения: 78
Зарегистрирован: 01 сен 2017, 08:41
Благодарил (а): 39 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Отлов поднятия оружия

Сообщение артист666 » 08 дек 2017, 23:10

OtherWorld писал(а):Хотел же сразу проверить :-| в общем зомби мод занимает pev_iuser1 и pev_iuser2 (почему? фиг знает :dntknw: )


Видимо тоже "помечали".
Плагины тестируй всегда на чистом сервере.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Отлов поднятия оружия

Сообщение OtherWorld » 08 дек 2017, 23:17

артист666 писал(а):
OtherWorld писал(а):Хотел же сразу проверить :-| в общем зомби мод занимает pev_iuser1 и pev_iuser2 (почему? фиг знает :dntknw: )


Видимо тоже "помечали".
Плагины тестируй всегда на чистом сервере.


С таким просто первый раз сталкиваюсь и впредь буду осмотрителен ;)
Аватара пользователя
OtherWorld
 
Сообщения: 78
Зарегистрирован: 01 сен 2017, 08:41
Благодарил (а): 39 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Пред.След.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 11

cron