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

 [ZP] Extra Item: Anti-Infection Armor 1.0  Limit

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

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

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

 [ZP] Extra Item: Anti-Infection Armor 1.0  Limit

Сообщение Kedrix » 10 авг 2017, 19:02

Хотел зделать лимит, на раунд но не получилось выдает вот такую ошибку, помогите буду благодарен
/hlds/web/www/amxxpc/work/scripting/zp_extra_armor_face.sma(75) : error 025: function heading differs from prototype
Код: Выделить всё
/*================================================================================  
      
    -------------------------------------------------  
    -*- [ZP] Extra Item: Anti-Infection Armor 1.0 -*-  
    -------------------------------------------------  
      
    ~~~~~~~~~~~~~~~  
    - Description -  
    ~~~~~~~~~~~~~~~  
      
    This item gives humans some armor that offers protection  
    against zombie injuries.  
      
================================================================================*/
  

#include <amxmodx>  
#include <fakemeta>  
#include <zombieplague>  
#include <engine>  
#include <hamsandwich>  


/*================================================================================  
 [Plugin Customization]  
=================================================================================*/
  


new const g_item_name
[] = { "Броня \r[+Маска]" }  
const g_item_cost 
= 10 

new const g_sound_buyarmor
[] = { "items/tr_kevlar.wav" }  

new const model_mask
[] = { "models/Reega_kz/normal_mask.mdl" }  
new const model_mask_2
[] = { "models/Reega_kz/normal_mask_2.mdl" }  
new const model_mask_boss
[] = { "models/Reega_kz/boss_mask.mdl" }  

const g_armor_amount 
= 100
const g_armor_limit 
= 100  

new Ent
[33], limit[33]

/*============================================================================*/  

// Item IDs  
new g_itemid_humanarmor  

public plugin_precache
()  
{  
    precache_sound
(g_sound_buyarmor)  
    precache_model
(model_mask)  
    precache_model
(model_mask_2)
    precache_model(model_mask_boss)
}
  

public plugin_init
()  
{  
    register_plugin
("[ZP] Extra: Anti-Infection Armor", "1.0", "MeRcyLeZZ")
    register_event("HLTV", "e_StartRound", "a", "1=0", "2=0");  
      
    RegisterHam
(Ham_Spawn, "player", "Spawn_Post", 1)  
    register_event
("Battery", "armor", "be")
    g_itemid_humanarmor = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)  
}  

public e_StartRound
()
{
    arrayset(limit, 0, sizeof(limit));
}

public Spawn_Post(id) remove_hat(id)  
public client_connect
(id) remove_hat(id), limit[id] = 0; 
public client_disconnect
(id) remove_hat(id), limit[id] = 0; 
public zp_user_infected_post
(id, inf, nem) remove_hat(id) 

public zp_extra_item_selected
(player, itemid, id)  
{  
    if 
(itemid == g_itemid_humanarmor)  
    
{  
        set_pev
(player, pev_armorvalue, float(min(pev(player, pev_armorvalue)+g_armor_amount, g_armor_limit)))  
        engfunc
(EngFunc_EmitSound, player, CHAN_BODY, g_sound_buyarmor, 1.0, ATTN_NORM, 0, PITCH_NORM)   
    
}

    if(limit[id] >= 5)
    {
        client_printcolor(id, "!g[ZP] !yБольше 5 нельзя")
        return ZP_PLUGIN_HANDLED;
    }

    limit[id]++;
    
    return PLUGIN_HANDLED
; 
}  

public remove_hat
(id)  
{  
    if
(Ent[id] > 0)  
    
{  
        remove_entity
(Ent[id])  
        Ent
[id] = 0     
    
}
}
  


public armor
(id)
{
    new amount = read_data(1)
    
    if
(amount > 0)
    {
        if(Ent[id] < 1)  
        
{  
            Ent
[id] = create_entity("info_target")  
            if
(is_valid_ent(Ent[id]))  
            
{  
                if 
(get_user_flags(id) & ADMIN_LEVEL_H)
                {
                    entity_set_model(Ent[id], model_mask_boss)  
                    entity_set_int
(Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)  
                    entity_set_edict
(Ent[id], EV_ENT_aiment, id)  
                
}
                else {
                    new random; random = random_num(0, 1)
                    switch(random){
                        case 0: entity_set_model(Ent[id], model_mask)  
                        case 1
: entity_set_model(Ent[id], model_mask_2)  
                    
}
                    entity_set_int(Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)  
                    entity_set_edict
(Ent[id], EV_ENT_aiment, id)  
                
}
            }  
        
} 
    
}
    else remove_hat(id)  
}

stock client_printcolor(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[191]
    vformat(msg, 190, input, 3)
    
    replace_all
(msg, 190, "!g", "^4") // Green Color
    replace_all(msg, 190, "!y", "^1") // Default Color
    replace_all(msg, 190, "!t", "^3") // Team Color
    
    if 
(id) players[0] = id; else get_players(players, count, "ch") 
    
{
        static iMsgSayText;
        if (!iMsgSayText)    iMsgSayText = get_user_msgid("SayText");
        
        for 
( new i = 0; i < count; i++ )
        {
            if (!is_user_connected(players[i]) )    continue;
            
            message_begin
(MSG_ONE_UNRELIABLE, iMsgSayText, _, players[i])
            write_byte(players[i]);
            write_string(msg);
            message_end();
        }
    }
}
Последний раз редактировалось Kedrix 11 авг 2017, 19:47, всего редактировалось 1 раз.
Аватара пользователя
Kedrix
 
Сообщения: 39
Зарегистрирован: 19 июл 2017, 18:22
Благодарил (а): 8 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Limit

Сообщение liFe iS GoOD » 10 авг 2017, 19:06

Добрый день !

Название Вашей темы не является информативным. Исправьте это в течении 24 часов , в ином случае Я буду вынужден сделать это сам , а Вы получите предупреждение в профиль .

Примечание : возможно Вы должны зарегистрироваться, чтобы видеть ссылки. помогут Вам в этом .
Аватара пользователя
liFe iS GoOD
Модератор
 
Сообщения: 1416
Зарегистрирован: 24 май 2012, 19:48
Благодарил (а): 116 раз.
Поблагодарили: 472 раз.

Re: Limit

Сообщение артист666 » 10 авг 2017, 20:18

Код: Выделить всё
public zp_extra_item_selected(player, itemid, id)

>>>
Код: Выделить всё
public zp_extra_item_selected(player, itemid)


Зачем ты добавил аргумент?
id - это player, назвать можно как угодно.

В этой же функции измени:

Код: Выделить всё
limit[id]

>>>
Код: Выделить всё
limit[player]


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

Re:  [ZP] Extra Item: Anti-Infection Armor 1.0  Limit

Сообщение Kedrix » 11 авг 2017, 19:56

Вот что выдает
/hlds/web/www/amxxpc/work/scripting/zp_extra_armor_face.sma(81) : error 017: undefined symbol "id"
/hlds/web/www/amxxpc/work/scripting/zp_extra_armor_face.sma(81) : warning 215: expression has no effect
/hlds/web/www/amxxpc/work/scripting/zp_extra_armor_face.sma(81) : error 001: expected token: ";", but found ")"
/hlds/web/www/amxxpc/work/scripting/zp_extra_armor_face.sma(81) : error 029: invalid expression, assumed zero
/hlds/web/www/amxxpc/work/scripting/zp_extra_armor_face.sma(81) : fatal error 107: too many error messages on one line


Код: Выделить всё
/*================================================================================  
      
    -------------------------------------------------  
    -*- [ZP] Extra Item: Anti-Infection Armor 1.0 -*-  
    -------------------------------------------------  
      
    ~~~~~~~~~~~~~~~  
    - Description -  
    ~~~~~~~~~~~~~~~  
      
    This item gives humans some armor that offers protection  
    against zombie injuries.  
      
================================================================================*/  

#include <amxmodx>  
#include <fakemeta>  
#include <zombieplague>  
#include <engine>  
#include <hamsandwich>  


/*================================================================================  
 [Plugin Customization]  
=================================================================================*/  


new const g_item_name[] = { "Броня \r[+Маска]" }  
const 
g_item_cost 10 

new const g_sound_buyarmor[] = { "items/tr_kevlar.wav" }  

new const 
model_mask[] = { "models/Reega_kz/normal_mask.mdl" }  
new const 
model_mask_2[] = { "models/Reega_kz/normal_mask_2.mdl" }  
new const 
model_mask_boss[] = { "models/Reega_kz/boss_mask.mdl" }  

const 
g_armor_amount 100
const g_armor_limit 100  

new Ent[33], limit[33]

/*============================================================================*/  

// Item IDs  
new g_itemid_humanarmor  

public plugin_precache()  
{  
    
precache_sound(g_sound_buyarmor)  
    
precache_model(model_mask)  
    
precache_model(model_mask_2)
    
precache_model(model_mask_boss)
}  

public 
plugin_init()  
{  
    
register_plugin("[ZP] Extra: Anti-Infection Armor""1.0""MeRcyLeZZ")
    
register_event("HLTV""e_StartRound""a""1=0""2=0");  
      
    
RegisterHam(Ham_Spawn"player""Spawn_Post"1)  
    
register_event("Battery""armor""be")
    
g_itemid_humanarmor zp_register_extra_item(g_item_nameg_item_costZP_TEAM_HUMAN)  
}  

public 
e_StartRound()
{
    
arrayset(limit0sizeof(limit));
}

public 
Spawn_Post(idremove_hat(id)  
public 
client_connect(idremove_hat(id), limit[id] = 0
public 
client_disconnect(idremove_hat(id), limit[id] = 0
public 
zp_user_infected_post(idinfnemremove_hat(id

public 
zp_extra_item_selected(playeritemid)  
{  
    if (
itemid == g_itemid_humanarmor)  
    {   
    if(
limit[player] >= 5)
    {
        
client_printcolor(id"!g[ZP] !yБольше 5 нельзя")
        
set_pev(playerpev_armorvaluefloat(min(pev(playerpev_armorvalue)+g_armor_amountg_armor_limit)))  
        
engfunc(EngFunc_EmitSoundplayerCHAN_BODYg_sound_buyarmor1.0ATTN_NORM0PITCH_NORM)   

    }
    }

    
limit[id]++;
    
    return 
PLUGIN_HANDLED
}  

public 
remove_hat(id)  
{  
    if(
Ent[id] > 0)  
    {  
        
remove_entity(Ent[id])  
        
Ent[id] = 0     
    
}
}  


public 
armor(id)
{
    new 
amount read_data(1)
    
    if(
amount 0)
    {
        if(
Ent[id] < 1)  
        {  
            
Ent[id] = create_entity("info_target")  
            if(
is_valid_ent(Ent[id]))  
            {  
                if (
get_user_flags(id) & ADMIN_LEVEL_H)
                {
                    
entity_set_model(Ent[id], model_mask_boss)  
                    
entity_set_int(Ent[id], EV_INT_movetypeMOVETYPE_FOLLOW)  
                    
entity_set_edict(Ent[id], EV_ENT_aimentid)  
                }
                else {
                    new 
randomrandom random_num(01)
                    switch(
random){
                        case 
0entity_set_model(Ent[id], model_mask)  
                        case 
1entity_set_model(Ent[id], model_mask_2)  
                    }
                    
entity_set_int(Ent[id], EV_INT_movetypeMOVETYPE_FOLLOW)  
                    
entity_set_edict(Ent[id], EV_ENT_aimentid)  
                }
            }  
        } 
    }
    else 
remove_hat(id)  
}

stock client_printcolor(const id, const input[], any:...)
{
    new 
count 1players[32]
    static 
msg[191]
    
vformat(msg190input3)
    
    
replace_all(msg190"!g""^4"// Green Color
    
replace_all(msg190"!y""^1"// Default Color
    
replace_all(msg190"!t""^3"// Team Color
    
    
if (idplayers[0] = id; else get_players(playerscount"ch"
    {
        static 
iMsgSayText;
        if (!
iMsgSayText)    iMsgSayText get_user_msgid("SayText");
        
        for ( new 
0counti++ )
        {
            if (!
is_user_connected(players[i]) )    continue;
            
            
message_begin(MSG_ONE_UNRELIABLEiMsgSayText_players[i])
            
write_byte(players[i]);
            
write_string(msg);
            
message_end();
        }
    }
Аватара пользователя
Kedrix
 
Сообщения: 39
Зарегистрирован: 19 июл 2017, 18:22
Благодарил (а): 8 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re:  [ZP] Extra Item: Anti-Infection Armor 1.0  Limit

Сообщение артист666 » 11 авг 2017, 20:34

Код: Выделить всё
public zp_extra_item_selected(playeritemid)
{
    if(
itemid == g_itemid_humanarmor)
    {
        if(
limit[player] >= 5)
        {
            
client_printcolor(player"!g[ZP] !yБольше 5 нельзя")
            return 
PLUGIN_HANDLED
        
}
        
set_pev(playerpev_armorvaluefloat(min(pev(playerpev_armorvalue)+g_armor_amountg_armor_limit)))
        
engfunc(EngFunc_EmitSoundplayerCHAN_BODYg_sound_buyarmor1.0ATTN_NORM0PITCH_NORM)
        
limit[player]++
    }
    return 
PLUGIN_CONTINUE
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re:  [ZP] Extra Item: Anti-Infection Armor 1.0  Limit

Сообщение Kedrix » 12 авг 2017, 23:03

артист666 писал(а):
Код: Выделить всё
public zp_extra_item_selected(player, itemid)
{
    if(itemid == g_itemid_humanarmor)
    {
        if(limit[player] >= 5)
        {
            client_printcolor(player, "!g[ZP] !yБольше 5 нельзя")
            return PLUGIN_HANDLED
        
}
        set_pev(player, pev_armorvalue, float(min(pev(player, pev_armorvalue)+g_armor_amount, g_armor_limit)))
        engfunc(EngFunc_EmitSound, player, CHAN_BODY, g_sound_buyarmor, 1.0, ATTN_NORM, 0, PITCH_NORM)
        limit[player]++
    }
    return PLUGIN_CONTINUE

А какая функция будет блочить покупку, при использование придмета больше 5 раз?
Аватара пользователя
Kedrix
 
Сообщения: 39
Зарегистрирован: 19 июл 2017, 18:22
Благодарил (а): 8 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re:  [ZP] Extra Item: Anti-Infection Armor 1.0  Limit

Сообщение Pafos » 13 авг 2017, 02:30

Kedrix, будет блочить всё.
Код: Выделить всё
public zp_extra_item_selected(playeritemid)
{
    if(
itemid == g_itemid_humanarmor)
    {
        if(
limit[player] >= 5)
        {
            
client_printcolor(player"!g[ZP] !yБольше 5 нельзя")
            return 
ZP_PLUGIN_HANDLED
        
}
        
set_pev(playerpev_armorvaluefloat(min(pev(playerpev_armorvalue)+g_armor_amountg_armor_limit)))
        
engfunc(EngFunc_EmitSoundplayerCHAN_BODYg_sound_buyarmor1.0ATTN_NORM0PITCH_NORM)
        
limit[player]++
    }
    return 
PLUGIN_CONTINUE

 
Аватара пользователя
Pafos
 
Сообщения: 574
Зарегистрирован: 07 апр 2014, 18:03
Откуда: pfnClientConnect
Забанен
Благодарил (а): 129 раз.
Поблагодарили: 97 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re:  [ZP] Extra Item: Anti-Infection Armor 1.0  Limit

Сообщение Kedrix » 13 авг 2017, 15:07

Pafos писал(а):Kedrix, будет блочить всё.
Код: Выделить всё

public zp_extra_item_selected
(player, itemid)
{
    if(itemid == g_itemid_humanarmor)
    {
        if(limit[player] >= 5)
        {
            client_printcolor(player, "!g[ZP] !yБольше 5 нельзя")
            return ZP_PLUGIN_HANDLED
        
}
        set_pev(player, pev_armorvalue, float(min(pev(player, pev_armorvalue)+g_armor_amount, g_armor_limit)))
        engfunc(EngFunc_EmitSound, player, CHAN_BODY, g_sound_buyarmor, 1.0, ATTN_NORM, 0, PITCH_NORM)
        limit[player]++
    }
    return PLUGIN_CONTINUE
} 

Когда я покупаю предмет больше 5 раз снимает аммо, но предмет больше не дает как это исправить?
Аватара пользователя
Kedrix
 
Сообщения: 39
Зарегистрирован: 19 июл 2017, 18:22
Благодарил (а): 8 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re:  [ZP] Extra Item: Anti-Infection Armor 1.0  Limit

Сообщение артист666 » 14 авг 2017, 00:09

Kedrix писал(а):А какая функция будет блочить покупку, при использование придмета больше 5 раз?


Я думаю, что
Код: Выделить всё
return ZP_PLUGIN_HANDLED

Сам с зп дел особо не имел, но как мне кажется, если в форвард вернуть 1, то и сумма итема не будет списана.

Иначе просто не поддерживает это.

Можешь скинуть исходник, в котором есть такаое:
Код: Выделить всё
CreateMultiForward("zp_extra_item_selected"


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

Re:  [ZP] Extra Item: Anti-Infection Armor 1.0  Limit

Сообщение boogaga » 14 авг 2017, 00:57

артист666 писал(а):
Kedrix писал(а):А какая функция будет блочить покупку, при использование придмета больше 5 раз?


Я думаю, что
Код: Выделить всё
return ZP_PLUGIN_HANDLED

Сам с зп дел особо не имел, но как мне кажется, если в форвард вернуть 1, то и сумма итема не будет списана.

Иначе просто не поддерживает это.

Можешь скинуть исходник, в котором есть такаое:
Код: Выделить всё
CreateMultiForward("zp_extra_item_selected"


Можно будет наверняка посмотреть, либо исправить этот недочёт(если он есть).

В зп этот момент предусмотрен:
Код: Выделить всё
if(g_fwDummyResult >= ZP_PLUGIN_HANDLED)
        zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + ArrayGetCell(g_extraitem_cost, itemid))


P.S: Если плагин вернул ZP_PLUGIN_HANDLED - возвращает игроку потраченные аммо

Ради интереса:
Код: Выделить всё
const ZP_PLUGIN_HANDLED = 97
Аватара пользователя
boogaga
 
Сообщения: 32
Зарегистрирован: 19 дек 2016, 17:56
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

След.

Вернуться в Вопросы по AMXX и его плагинам

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6