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

Drop Armor [ Проверка ]  [Решено]

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

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

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

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

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

Drop Armor [ Проверка ]

Сообщение MayroN » 18 май 2018, 12:23

Подскажите как в етом плагине убрать проверку на наличие брони?Другими словами:Бронь выпадает только когда она есть у игрока.Нужно сделать что-бы выпадала в любом случаи, даже если её у игрока нет.Спасибо.
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>

//---------------These values are default, they are added to the CVAR's---------------------
//---------------Change if you want these to be defaulted to the CVAR on SERVER RESTART-----

//----------------------------------------------------------------------
//This is percentage, if its 25, only 25% of dropped armor will be given.
#define ARMOR_TAX "25"
//----------------------------------------------------------------------
// MAX armor allowed, default = 100 (Set higher, if you want players to go over 100 armor.)
#define MAXARMOR "100"
//----------------------------------------------------------------------
// Minimum armor needed for armor to drop when player dies.
#define MINARMOR "15"
//----------------------------------------------------------------------
// Time before Armor is removed from the map in seconds (unless round ends) default=2mins
#define REMOVE_TIME "120"
//----------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------
//-----------------------------------DO NOT EDIT BELOW THIS LINE-----------------------------------------------
//-------------------------------------------------------------------------------------------------------------
#define KEVLAR       1
#define VESTHELM    2
#define ARMORTYPE_OFFSET 112

#define TITLE "Armor Drop"
#define VERSION "1.0"
#define AUTHOR "OneEyed"

new g_ArmorType[33], Float:g_ArmorAmount[33], fArmor[33]

//Change this if you want a custom kevlar model
new armormodel[] = "models/armor_dm/armor_dm.mdl"
new Float:multiplier
//-------------------------------------------------------------------------------------------------------------
public plugin_precache()
   precache_model(armormodel)   
//-------------------------------------------------------------------------------------------------------------
public plugin_init() {
   register_plugin(TITLE, VERSION, AUTHOR)
   register_cvar(TITLE,VERSION,FCVAR_SERVER)
   
   if
(!cvar_exists("armor_pct"))
      register_cvar("armor_pct",ARMOR_TAX)
   if(!cvar_exists("armor_max"))
      register_cvar("armor_max",MINARMOR)
   if(!cvar_exists("armor_min"))
      register_cvar("armor_min",MINARMOR)
   if(!cvar_exists("armor_removetime"))
      register_cvar("armor_removetime",REMOVE_TIME)
      
   register_touch
("FakeArmor","player","grabArmor")
   
   register_event
("DeathMsg","createArmor","a")
}

public removeArmor() {
   new tempid = -1
   while 
( ( tempid = find_ent_by_class(tempid, "FakeArmor") ) > 0)
      if(is_valid_ent(tempid)) {
         remove_entity(tempid)
         remove_task(tempid)
      }
   return PLUGIN_CONTINUE
}
//-------------------------------------------------------------------------------------------------------------
// Set task to this to remove the armor after specified amount of time. (armor_removetime)
public removeThisArmor(id)
   if(is_valid_ent(id))
      remove_entity(id)
//-------------------------------------------------------------------------------------------------------------
public grabArmor(pToucher, pTouched) {
   if(is_user_alive(pTouched) && is_user_connected(pTouched) && entity_get_float(pTouched,EV_FL_armorvalue) < float(get_cvar_num("armor_max"))) {
      new owner = entity_get_int(pToucher, EV_INT_iuser1)
      if(is_valid_ent(fArmor[owner])) {
         get_armor_values(pTouched)
         multiplier = float(get_cvar_num("armor_pct")) * 0.01
         
         
//Retrieve armor values left on the dropped kevlar
         new armortype = entity_get_int(fArmor[owner], EV_INT_iuser3)
         new armoramt = entity_get_int(fArmor[owner], EV_INT_iuser4)
         
         
//Set armor accordingly to how player has theirs, and what type they grab.
         if(g_ArmorType[pTouched] == 0) 
            csset_user_armor
(pTouched, armoramt*multiplier, (armortype==1?KEVLAR:VESTHELM))
         else if(g_ArmorType[pTouched] == 1 && armortype == 1) 
            csset_user_armor
(pTouched, entity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), KEVLAR)
         else if((g_ArmorType[pTouched] == 1 && armortype == 2) || g_ArmorType[pTouched] == 2) 
            csset_user_armor
(pTouched, entity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), VESTHELM)
         
         
// If their armor goes over MAXARMOR set it to MAXARMOR
         if(entity_get_float(pTouched,EV_FL_armorvalue) > float(get_cvar_num("armor_max")))
            entity_set_float(pTouched,EV_FL_armorvalue, float(get_cvar_num("armor_max")))

         g_ArmorType[pTouched] = armortype
         remove_entity
(fArmor[owner])
         remove_task(fArmor[owner])
      }
   }
   return PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public createArmor(id) {
   new victim = read_data(2) //grab user ID who died
   
   get_armor_values
(victim)
   
   if
(g_ArmorType[victim] <= 0 || g_ArmorAmount[victim] <= float(get_cvar_num("armor_min")))
      return PLUGIN_CONTINUE
   new origin
[3]
   new Float:fOrigin[3]
   get_user_origin(victim,origin)
   for(new a=0;a<3;a++)
      fOrigin[a]=float(origin[a])

   fArmor[victim] = create_entity("info_target")
   if(fArmor[victim]) {
      entity_set_string(fArmor[victim],EV_SZ_classname,"FakeArmor")
      entity_set_model(fArmor[victim], armormodel)
      
      new Float
:MinBox[3]
      new Float:MaxBox[3]
      MinBox[0] = -6.0
      MinBox
[1] = -8.0
      MinBox
[2] = -1.5
      MaxBox
[0] = 6.0
      MaxBox
[1] = 8.0
      MaxBox
[2] = 1.5
      
      entity_set_vector
(fArmor[victim], EV_VEC_mins, MinBox)
      entity_set_vector(fArmor[victim], EV_VEC_maxs, MaxBox)
      
      entity_set_int
(fArmor[victim], EV_INT_solid, SOLID_BBOX) 
      entity_set_int
(fArmor[victim], EV_INT_movetype, MOVETYPE_TOSS)
      
      
// Sets iuser1 to victim ID
      entity_set_int(fArmor[victim], EV_INT_iuser1, victim)
      // Sets iuser3 to Armor Type (kevlar of vest+helm)
      entity_set_int(fArmor[victim], EV_INT_iuser3, g_ArmorType[victim])
      // Sets iuser4 to Armor Value (amount victim had when he died)
      entity_set_int(fArmor[victim], EV_INT_iuser4, floatround(g_ArmorAmount[victim]))

      entity_set_origin(fArmor[victim], fOrigin)
      set_task(float(get_cvar_num("armor_removetime")),"removeThisArmor",fArmor[victim])
   }
   return PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public get_armor_values(id) {
   if(entity_get_float(id,EV_FL_armorvalue) <= 0.0)
      g_ArmorType[id] = 0
   else 
{
      g_ArmorAmount[id] = entity_get_float(id,EV_FL_armorvalue)
      g_ArmorType[id] = get_pdata_int(id,ARMORTYPE_OFFSET)
   }   
}
//-------------------------------------------------------------------------------------------------------------
//Cstrike.inc has this function, but its broken, so i made my own that works =).
public csset_user_armor(id, Float:amount, type) {
   entity_set_float(id,EV_FL_armorvalue, amount)
   set_pdata_int(id,ARMORTYPE_OFFSET,type)   
}
//-------------------------------------------------------------------------------------------------------------  
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Drop Armor [ Проверка ]  [Решено]

Сообщение ALIK » 18 май 2018, 14:39

Не тестил =)
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>

//---------------These values are default, they are added to the CVAR's---------------------
//---------------Change if you want these to be defaulted to the CVAR on SERVER RESTART-----

//----------------------------------------------------------------------
//This is percentage, if its 25, only 25% of dropped armor will be given.
#define ARMOR_TAX "25"
//----------------------------------------------------------------------
// MAX armor allowed, default = 100 (Set higher, if you want players to go over 100 armor.)
#define MAXARMOR "100"
//----------------------------------------------------------------------
// Minimum armor needed for armor to drop when player dies.
#define MINARMOR "15"
//----------------------------------------------------------------------
// Time before Armor is removed from the map in seconds (unless round ends) default=2mins
#define REMOVE_TIME "120"
//----------------------------------------------------------------------
// Start armor amount
#define START_ARMOR_AMOUNT "50"
//----------------------------------------------------------------------
// Start armor type
#define START_ARMOR_TYPE "2" // 1 - KEVLAR \ 2 - VESTHELM
//----------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------
//-----------------------------------DO NOT EDIT BELOW THIS LINE-----------------------------------------------
//-------------------------------------------------------------------------------------------------------------
#define KEVLAR       1
#define VESTHELM    2
#define ARMORTYPE_OFFSET 112

#define TITLE "Armor Drop"
#define VERSION "1.0"
#define AUTHOR "OneEyed"

new g_ArmorType[33], Float:g_ArmorAmount[33], fArmor[33]

//Change this if you want a custom kevlar model
new armormodel[] = "models/armor_dm/armor_dm.mdl"
new Float:multiplier
//-------------------------------------------------------------------------------------------------------------
public plugin_precache()
   precache_model(armormodel)   
//-------------------------------------------------------------------------------------------------------------
public plugin_init() {
   register_plugin(TITLE, VERSION, AUTHOR)
   register_cvar(TITLE,VERSION,FCVAR_SERVER)
   
   if
(!cvar_exists("armor_pct"))
      register_cvar("armor_pct",ARMOR_TAX)
   if(!cvar_exists("armor_max"))
      register_cvar("armor_max",MINARMOR)
   if(!cvar_exists("armor_min"))
      register_cvar("armor_min",MINARMOR)
   if(!cvar_exists("armor_removetime"))
      register_cvar("armor_removetime",REMOVE_TIME)
   if(!cvar_exists("armor_start_amount"))
      register_cvar("armor_start_amount",START_ARMOR_AMOUNT)
   if(!cvar_exists("armor_start_type"))
      register_cvar("armor_start_type",START_ARMOR_TYPE)
      
   register_touch
("FakeArmor","player","grabArmor")
   
   register_event
("DeathMsg","createArmor","a")
}

public removeArmor() {
   new tempid = -1
   while 
( ( tempid = find_ent_by_class(tempid, "FakeArmor") ) > 0)
      if(is_valid_ent(tempid)) {
         remove_entity(tempid)
         remove_task(tempid)
      }
   return PLUGIN_CONTINUE
}
//-------------------------------------------------------------------------------------------------------------
// Set task to this to remove the armor after specified amount of time. (armor_removetime)
public removeThisArmor(id)
   if(is_valid_ent(id))
      remove_entity(id)
//-------------------------------------------------------------------------------------------------------------
public grabArmor(pToucher, pTouched) {
   if(is_user_alive(pTouched) && is_user_connected(pTouched) && entity_get_float(pTouched,EV_FL_armorvalue) < float(get_cvar_num("armor_max"))) {
      new owner = entity_get_int(pToucher, EV_INT_iuser1)
      if(is_valid_ent(fArmor[owner])) {
         get_armor_values(pTouched)
         multiplier = float(get_cvar_num("armor_pct")) * 0.01
         
         
//Retrieve armor values left on the dropped kevlar
         new armortype = entity_get_int(fArmor[owner], EV_INT_iuser3)
         new armoramt = entity_get_int(fArmor[owner], EV_INT_iuser4)
         
         
//Set armor accordingly to how player has theirs, and what type they grab.
         if(g_ArmorType[pTouched] == 0) 
            csset_user_armor
(pTouched, armoramt*multiplier, (armortype==1?KEVLAR:VESTHELM))
         else if(g_ArmorType[pTouched] == 1 && armortype == 1) 
            csset_user_armor
(pTouched, entity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), KEVLAR)
         else if((g_ArmorType[pTouched] == 1 && armortype == 2) || g_ArmorType[pTouched] == 2) 
            csset_user_armor
(pTouched, entity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), VESTHELM)
         
         
// If their armor goes over MAXARMOR set it to MAXARMOR
         if(entity_get_float(pTouched,EV_FL_armorvalue) > float(get_cvar_num("armor_max")))
            entity_set_float(pTouched,EV_FL_armorvalue, float(get_cvar_num("armor_max")))

         g_ArmorType[pTouched] = armortype
         remove_entity
(fArmor[owner])
         remove_task(fArmor[owner])
      }
   }
   return PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public createArmor(id) {
   new victim = read_data(2) //grab user ID who died
   
   get_armor_values
(victim)
   
   if
(g_ArmorAmount[victim] <= float(get_cvar_num("armor_min")))
      return PLUGIN_CONTINUE
   new origin
[3]
   new Float:fOrigin[3]
   get_user_origin(victim,origin)
   for(new a=0;a<3;a++)
      fOrigin[a]=float(origin[a])

   fArmor[victim] = create_entity("info_target")
   if(fArmor[victim]) {
      entity_set_string(fArmor[victim],EV_SZ_classname,"FakeArmor")
      entity_set_model(fArmor[victim], armormodel)
      
      new Float
:MinBox[3]
      new Float:MaxBox[3]
      MinBox[0] = -6.0
      MinBox
[1] = -8.0
      MinBox
[2] = -1.5
      MaxBox
[0] = 6.0
      MaxBox
[1] = 8.0
      MaxBox
[2] = 1.5
      
      entity_set_vector
(fArmor[victim], EV_VEC_mins, MinBox)
      entity_set_vector(fArmor[victim], EV_VEC_maxs, MaxBox)
      
      entity_set_int
(fArmor[victim], EV_INT_solid, SOLID_BBOX) 
      entity_set_int
(fArmor[victim], EV_INT_movetype, MOVETYPE_TOSS)
      
      
// Sets iuser1 to victim ID
      entity_set_int(fArmor[victim], EV_INT_iuser1, victim)
      // Sets iuser3 to Armor Type (kevlar of vest+helm)
      entity_set_int(fArmor[victim], EV_INT_iuser3, g_ArmorType[victim])
      // Sets iuser4 to Armor Value (amount victim had when he died)
      entity_set_int(fArmor[victim], EV_INT_iuser4, floatround(g_ArmorAmount[victim]))

      entity_set_origin(fArmor[victim], fOrigin)
      set_task(float(get_cvar_num("armor_removetime")),"removeThisArmor",fArmor[victim])
   }
   return PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public get_armor_values(id) {
    if(entity_get_float(id,EV_FL_armorvalue) <= 0.0) {
        g_ArmorType[id] = get_cvar_num("armor_start_type")
        g_ArmorAmount[id] = float(get_cvar_num("armor_start_amount"))
    }
    else {
        g_ArmorAmount[id] = entity_get_float(id,EV_FL_armorvalue)
        g_ArmorType[id] = get_pdata_int(id,ARMORTYPE_OFFSET)
    }   
}
//-------------------------------------------------------------------------------------------------------------
//Cstrike.inc has this function, but its broken, so i made my own that works =).
public csset_user_armor(id, Float:amount, type) {
   entity_set_float(id,EV_FL_armorvalue, amount)
   set_pdata_int(id,ARMORTYPE_OFFSET,type)   
}
//-------------------------------------------------------------------------------------------------------------     


Добавлено спустя 42 секунды:
MayroN, посмотри эти квары и поймёшь
Код: Выделить всё
if(!cvar_exists("armor_start_amount"))
      
register_cvar("armor_start_amount",START_ARMOR_AMOUNT)
   if(!
cvar_exists("armor_start_type"))
      
register_cvar("armor_start_type",START_ARMOR_TYPE
Аватара пользователя
ALIK
 
Сообщения: 227
Зарегистрирован: 01 июн 2010, 23:05
Благодарил (а): 116 раз.
Поблагодарили: 55 раз.
Опыт программирования: Меньше недели
Языки программирования: Pawn

Re: Drop Armor [ Проверка ]

Сообщение MayroN » 18 май 2018, 16:14

ALIK,

Да,так работает.Но есть проблема:Когда у тебя есть хоть немного брони уже,то невозможно поднять ещё.
И при следующем раунде они розбросаны по карте.Нужно ,что-бы пропадали,как было изначально до етого.Розберись будь добр)
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Drop Armor [ Проверка ]

Сообщение ALIK » 18 май 2018, 16:57

MayroN писал(а):Но есть проблема:Когда у тебя есть хоть немного брони уже,то невозможно поднять ещё.

Квар же есть
Код: Выделить всё
if(!cvar_exists("armor_min"))
      register_cvar("armor_min",MINARMOR)


Добавлено спустя 4 минуты 12 секунд:
В конце раунда должно удаляться броня
Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>

//---------------These values are default, they are added to the CVAR's---------------------
//---------------Change if you want these to be defaulted to the CVAR on SERVER RESTART-----

//----------------------------------------------------------------------
//This is percentage, if its 25, only 25% of dropped armor will be given.
#define ARMOR_TAX "25"
//----------------------------------------------------------------------
// MAX armor allowed, default = 100 (Set higher, if you want players to go over 100 armor.)
#define MAXARMOR "100"
//----------------------------------------------------------------------
// Minimum armor needed for armor to drop when player dies.
#define MINARMOR "15"
//----------------------------------------------------------------------
// Time before Armor is removed from the map in seconds (unless round ends) default=2mins
#define REMOVE_TIME "120"
//----------------------------------------------------------------------
// Start armor amount
#define START_ARMOR_AMOUNT "50"
//----------------------------------------------------------------------
// Start armor type
#define START_ARMOR_TYPE "2" // 1 - KEVLAR \ 2 - VESTHELM
//----------------------------------------------------------------------

//-------------------------------------------------------------------------------------------------------------
//-----------------------------------DO NOT EDIT BELOW THIS LINE-----------------------------------------------
//-------------------------------------------------------------------------------------------------------------
#define KEVLAR       1
#define VESTHELM    2
#define ARMORTYPE_OFFSET 112

#define TITLE "Armor Drop"
#define VERSION "1.0"
#define AUTHOR "OneEyed"

new g_ArmorType[33], Float:g_ArmorAmount[33], fArmor[33]

//Change this if you want a custom kevlar model
new armormodel[] = "models/armor_dm/armor_dm.mdl"
new Float:multiplier
//-------------------------------------------------------------------------------------------------------------
public plugin_precache()
   
precache_model(armormodel)   
//-------------------------------------------------------------------------------------------------------------
public plugin_init() {
   
register_plugin(TITLEVERSIONAUTHOR)
   
register_cvar(TITLE,VERSION,FCVAR_SERVER)
   
   if(!
cvar_exists("armor_pct"))
      
register_cvar("armor_pct",ARMOR_TAX)
   if(!
cvar_exists("armor_max"))
      
register_cvar("armor_max",MINARMOR)
   if(!
cvar_exists("armor_min"))
      
register_cvar("armor_min",MINARMOR)
   if(!
cvar_exists("armor_removetime"))
      
register_cvar("armor_removetime",REMOVE_TIME)
   if(!
cvar_exists("armor_start_amount"))
      
register_cvar("armor_start_amount",START_ARMOR_AMOUNT)
   if(!
cvar_exists("armor_start_type"))
      
register_cvar("armor_start_type",START_ARMOR_TYPE)
      
   
register_touch("FakeArmor","player","grabArmor")
   
   
register_event("DeathMsg","createArmor","a")
   
register_logevent("Round_End"2"1=Round_End")
}

public 
Round_End() {
    
removeArmor();
}

public 
removeArmor() {
   new 
tempid = -1
   
while ( ( tempid find_ent_by_class(tempid"FakeArmor") ) > 0)
      if(
is_valid_ent(tempid)) {
         
remove_entity(tempid)
         
remove_task(tempid)
      }
   return 
PLUGIN_CONTINUE
}
//-------------------------------------------------------------------------------------------------------------
// Set task to this to remove the armor after specified amount of time. (armor_removetime)
public removeThisArmor(id)
   if(
is_valid_ent(id))
      
remove_entity(id)
//-------------------------------------------------------------------------------------------------------------
public grabArmor(pToucherpTouched) {
   if(
is_user_alive(pTouched) && is_user_connected(pTouched) && entity_get_float(pTouched,EV_FL_armorvalue) < float(get_cvar_num("armor_max"))) {
      new 
owner entity_get_int(pToucherEV_INT_iuser1)
      if(
is_valid_ent(fArmor[owner])) {
         
get_armor_values(pTouched)
         
multiplier float(get_cvar_num("armor_pct")) * 0.01
         
         
//Retrieve armor values left on the dropped kevlar
         
new armortype entity_get_int(fArmor[owner], EV_INT_iuser3)
         new 
armoramt entity_get_int(fArmor[owner], EV_INT_iuser4)
         
         
//Set armor accordingly to how player has theirs, and what type they grab.
         
if(g_ArmorType[pTouched] == 0
            
csset_user_armor(pTouchedarmoramt*multiplier, (armortype==1?KEVLAR:VESTHELM))
         else if(
g_ArmorType[pTouched] == && armortype == 1
            
csset_user_armor(pTouchedentity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), KEVLAR)
         else if((
g_ArmorType[pTouched] == && armortype == 2) || g_ArmorType[pTouched] == 2
            
csset_user_armor(pTouchedentity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), VESTHELM)
         
         
// If their armor goes over MAXARMOR set it to MAXARMOR
         
if(entity_get_float(pTouched,EV_FL_armorvalue) > float(get_cvar_num("armor_max")))
            
entity_set_float(pTouched,EV_FL_armorvaluefloat(get_cvar_num("armor_max")))

         
g_ArmorType[pTouched] = armortype
         remove_entity
(fArmor[owner])
         
remove_task(fArmor[owner])
      }
   }
   return 
PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public createArmor(id) {
   new 
victim read_data(2//grab user ID who died
   
   
get_armor_values(victim)
   
   if(
g_ArmorAmount[victim] <= float(get_cvar_num("armor_min")))
      return 
PLUGIN_CONTINUE
   
new origin[3]
   new 
Float:fOrigin[3]
   
get_user_origin(victim,origin)
   for(new 
a=0;a<3;a++)
      
fOrigin[a]=float(origin[a])

   
fArmor[victim] = create_entity("info_target")
   if(
fArmor[victim]) {
      
entity_set_string(fArmor[victim],EV_SZ_classname,"FakeArmor")
      
entity_set_model(fArmor[victim], armormodel)
      
      new 
Float:MinBox[3]
      new 
Float:MaxBox[3]
      
MinBox[0] = -6.0
      MinBox
[1] = -8.0
      MinBox
[2] = -1.5
      MaxBox
[0] = 6.0
      MaxBox
[1] = 8.0
      MaxBox
[2] = 1.5
      
      entity_set_vector
(fArmor[victim], EV_VEC_minsMinBox)
      
entity_set_vector(fArmor[victim], EV_VEC_maxsMaxBox)
      
      
entity_set_int(fArmor[victim], EV_INT_solidSOLID_BBOX
      
entity_set_int(fArmor[victim], EV_INT_movetypeMOVETYPE_TOSS)
      
      
// Sets iuser1 to victim ID
      
entity_set_int(fArmor[victim], EV_INT_iuser1victim)
      
// Sets iuser3 to Armor Type (kevlar of vest+helm)
      
entity_set_int(fArmor[victim], EV_INT_iuser3g_ArmorType[victim])
      
// Sets iuser4 to Armor Value (amount victim had when he died)
      
entity_set_int(fArmor[victim], EV_INT_iuser4floatround(g_ArmorAmount[victim]))

      
entity_set_origin(fArmor[victim], fOrigin)
      
set_task(float(get_cvar_num("armor_removetime")),"removeThisArmor",fArmor[victim])
   }
   return 
PLUGIN_HANDLED
}
//-------------------------------------------------------------------------------------------------------------
public get_armor_values(id) {
    if(
entity_get_float(id,EV_FL_armorvalue) <= 0.0) {
        
g_ArmorType[id] = get_cvar_num("armor_start_type")
        
g_ArmorAmount[id] = float(get_cvar_num("armor_start_amount"))
    }
    else {
        
g_ArmorAmount[id] = entity_get_float(id,EV_FL_armorvalue)
        
g_ArmorType[id] = get_pdata_int(id,ARMORTYPE_OFFSET)
    }   
}
//-------------------------------------------------------------------------------------------------------------
//Cstrike.inc has this function, but its broken, so i made my own that works =).
public csset_user_armor(idFloat:amounttype) {
   
entity_set_float(id,EV_FL_armorvalueamount)
   
set_pdata_int(id,ARMORTYPE_OFFSET,type)   
}
//-------------------------------------------------------------------------------------------------------------      
Аватара пользователя
ALIK
 
Сообщения: 227
Зарегистрирован: 01 июн 2010, 23:05
Благодарил (а): 116 раз.
Поблагодарили: 55 раз.
Опыт программирования: Меньше недели
Языки программирования: Pawn

Re: Drop Armor [ Проверка ]

Сообщение MayroN » 18 май 2018, 19:16

Да,квар то есть.Я поетому и спросил,что если выставить больше 15 AP ,то всёравно невозможно больше етого значения подобрать.Так как,срабатывает через консоль ети квары.В самом исходе переменная неработает...Есть решение?

После раунда исчезают - спасибо.Но тут маленькое уточнение.Можно поставить,что-бы исчезали именно в начале нового,что-бы была возможность ещё пару секунд подобрать в конце текущего.А то получаеться,что как только команда одержала победу - пропадает броня вся с карт.

Добавлено спустя 5 минут 25 секунд:
Код: Выделить всё
   register_logevent("Round_Start", 2, "1=Round_Start")

public Round_Start() {
    removeArmor();


Добавлено спустя 41 минуту 19 секунд:
Да и в добавок вместе с етим плагинов именно при подборе Брони появляеться в логах ошибка в другом плагине ( до етого небыло такого )
Код: Выделить всё
L 05/18/2018 18:09:43: [FAKEMETAInvalid entity
L 05
/18/2018 18:09:43: [AMXXDisplaying debug trace (plugin "WeaponTrail.amxx")
L 05/18/2018 18:09:43: [AMXXRun time error 10native error (native "pev")
L 05/18/2018 18:09:43: [AMXX]    [0WeaponTrail.sma::fw_touch (line 112


Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

#define PLUGIN "Weapon Trail"
#define VERSION "2.0"
#define AUTHOR "anakin_cstrike"

#define MAX_PLAYERS 32
#define OFFSET_ENT_TO_INDEX 43

enum droptype 
{
    
droptype_manual,
    
droptype_ondeath
}
new 
toggle,light,vel,g_max_clients,g_max_entities;

new const 
g_drop[] = "drop";
new const 
g_wbox_class[] = "weaponbox";
new const 
g_wbox_model[] = "models/w_weaponbox.mdl";
new const 
g_wbox_model_prefix[] = "models/w_";
new const 
g_start_client_index 1;
new 
g_command[MAX_PLAYERS 1][sizeof g_drop 1];
new 
g_trail,r,g,b;
public 
plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR);
    
register_forward(FM_SetModel"fw_setmodel");
    
register_forward(FM_Touch,"fw_touch");
    
toggle register_cvar("weapontrail","1");
    
light register_cvar("weapontrail_light","1");
    
vel register_cvar("weapontrail_vel","0");
    
g_max_clients global_get(glb_maxClients);
    
g_max_entities global_get(glb_maxEntities);
}
public 
plugin_precache()
g_trail precache_model("sprites/smoke.spr");
public 
client_command(id
    
read_argv(0g_command[id], sizeof g_drop);
public 
fw_setmodel(ent, const model[])
{
    if(
get_pcvar_num(toggle) != 1)
        return 
FMRES_IGNORED;
    if(!
pev_valid(ent) || !equal(modelg_wbox_model_prefixsizeof g_wbox_model_prefix 1) || equal(modelg_wbox_model))
        return 
FMRES_IGNORED;    
    new 
id pev(entpev_owner)
    if(!(
g_start_client_index <= id <= g_max_clients))
        return 
FMRES_IGNORED;
    static class[
32],i;
    
pev(ent,pev_classname,class, sizeof class - 1)
    if(!
equal(class,g_wbox_class))
        return 
FMRES_IGNORED;
    for(
g_max_clients 1;g_max_entities;++i
    {
        if(!
pev_valid(i) || ent != pev(ipev_owner))
            continue;
        
        new 
wid get_pdata_int(i,OFFSET_ENT_TO_INDEX);
        if(
wid != CSW_C4)
        {
            new 
droptype:drop_type;
            if(!
is_user_alive(id))
                
drop_type droptype_ondeath;
            else if(
equal(g_command[id], g_drop))
                
drop_type droptype_manual;
            else
                return 
FMRES_IGNORED;
            switch(
drop_type)
            {
                case 
droptype_ondeath: {
                    if(
get_user_team(id) == 1){r=255;g=0;b=0;}
                    else if(
get_user_team(id) == 2){r=0;g=0;b=255;}
                }
                case 
droptype_manual: {
                    
random(255);
                    
random(255);
                    
random(255);
                }
            }
            if(
get_pcvar_num(vel) == 1)
            {
                new 
Float:vel[3];
                
vel[0] = float(random(300));
                
vel[1] = float(random(300));
                
vel[2] = float(random(300));
                
set_pev(ent,pev_velocity,vel);
            }
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
            
write_byte(TE_BEAMFOLLOW);
            
write_short(ent);
            
write_short(g_trail);
            
write_byte(5);
            
write_byte(5);
            
write_byte(r);
            
write_byte(g);
            
write_byte(b);
            
write_byte(195);
            
message_end();
        }
    }
    return 
FMRES_IGNORED;
}
public 
fw_touch(touchedtoucher)
{
    if(
get_pcvar_num(toggle) != 1)
        return 
FMRES_IGNORED;
    if(
get_pcvar_num(light) != 1)
        return 
FMRES_IGNORED;
    
    static class[
32];
    
pev(toucherpev_classname, class, sizeof class - 1);
    
    if(
containi(class, "weapon") != -&& !touched)
    {
        new 
Float:origin[3];
        
pev(toucherpev_originorigin);
            
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
        
write_byte(TE_DLIGHT);
        
write_coord(floatround(origin[0])); 
        
write_coord(floatround(origin[1])); 
        
write_coord(floatround(origin[2]));
        
write_byte(20);
        
write_byte(r);
        
write_byte(g);
        
write_byte(b);
        
write_byte(5);
        
write_byte(20);
        
message_end();
    }
    return 
FMRES_IGNORED;
}
 
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...

Re: Drop Armor [ Проверка ]

Сообщение MayroN » 21 май 2018, 03:28

Нащёт Квара,что-бы сразу срабатывал без рестарта и потребности вводить в консоле,нужно удалить
Код: Выделить всё
#define ARMOR_TAX "25"
#define MAXARMOR "100"
#define MINARMOR "15"
#define REMOVE_TIME "120"
#define START_ARMOR_TYPE "2"    

И заменить ето
Код: Выделить всё
public plugin_init() {
   if(!cvar_exists("armor_pct"))
      register_cvar("armor_pct",ARMOR_TAX)
   if(!cvar_exists("armor_max"))
      register_cvar("armor_max",MINARMOR)
   if(!cvar_exists("armor_min"))
      register_cvar("armor_min",MINARMOR)
   if(!cvar_exists("armor_removetime"))
      register_cvar("armor_removetime",REMOVE_TIME)
   if(!cvar_exists("armor_start_amount"))
      register_cvar("armor_start_amount",START_ARMOR_AMOUNT)
   if(!cvar_exists("armor_start_type"))
      register_cvar("armor_start_type",START_ARMOR_TYPE)     
}

Етим
Код: Выделить всё
public plugin_init() {
   register_cvar("armor_pct","31")
   register_cvar("armor_max","200")
   register_cvar("armor_min","15")
   register_cvar("armor_removetime","350")
   register_cvar("armor_start_amount","50")
   register_cvar("armor_start_type","2")      
}
МультиМод CS
Аватара пользователя
MayroN
 
Сообщения: 673
Зарегистрирован: 10 окт 2010, 18:23
Откуда: Украина, г. Белая Церковь
Благодарил (а): 149 раз.
Поблагодарили: 86 раз.
Опыт программирования: Около года
Языки программирования: На которых говорю...


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

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

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