Начало Форум Сървъри Банове Статистика   » Потребители Правила и Условия   » Екип   »

Заглавие на темата: Toxic Water


Toxic Water

Мнениеот Drea<M>40 » 25 Май 2017, 13:35

Автор: Sh!nE*

Описание: Прави водата токсична (взима ви кръв когато минете през нея или когато сте до нея).

Версия: 0.8

Cvars:
Код: Избери целия код

amx_toxicwater <1/0> (Изключен/Включен) (По подразбиране: 1)
tx_dmgfeet <damage> (Колко кръв ще ти взима когато си стъпал във водата) (По подразбиране: 7)
tx_dmgwaist <damage> (Колко кърв ще ти взима когато си във водата до кръста) (По подразбиране: 15)
tx_dmghead <damage> (Колко кръв ще ти взима когато си изцяло под водата) (По подразбиране: 30)
tx_dmgnear <damage> (Колко кръв ще ти взема когато си близо до водата) (По подразбиране: 5)
tx_dmgradius <units> (Колко юнита ще ти влия ефекта от токсичността - tx_dmgnear) (По подразбиранеt: 100)
tx_fadegreen <1/0> (Включено/Изключено, Когато сте във водата екрана ще се показва в зелен цвят (много е яко )) (По подразбиране:


Промени във версията 0.8
-Плъгина не се нуждае от модула fakemeta
-Кодовете са оптимизирани
-Поправени са някои големи бъгове
-Добавен е много як екранен ефект





Код: Избери целия код

#include <amxmodx>
#include <fakemeta>
//#include <fakemeta_util>

#define PLUGIN   "Toxic Water"
#define AUTHOR   "Sh!nE*"
#define VERSION   "0.8"

#define SOUNDS_ON

new bool:g_restart_attempt[33]
new bool:can_take_dmg[33]
new bool:can_play[33]
//Cvars
new dmg_feet,dmg_waist,dmg_head,dmg_near,dmg_radius,on_off,scr_fade
new icon,g_msgScreenFade
new sound[] = "fvox/radiation_detected.wav"
public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR)
   register_forward(FM_PlayerPreThink, "PreThink")
   on_off = register_cvar("amx_toxicwater","1")
   dmg_feet = register_cvar("tx_dmgfeet","7")
   dmg_waist = register_cvar("tx_dmgwaist","15")
   dmg_head = register_cvar("tx_dmghead","30")
   dmg_near = register_cvar("tx_dmgnear","5")
   dmg_radius = register_cvar("tx_dmgradius","100")
   scr_fade = register_cvar("tx_fadegreen","1")
   
   g_msgScreenFade = get_user_msgid("ScreenFade")
   icon = get_user_msgid("StatusIcon")
   
   register_event("ResetHUD","event_hud_reset", "be")
   register_event("TextMsg","event_restart_attempt", "a", "2=#Game_will_restart_in")
   register_event("DeathMsg", "deatha", "a")
}

public plugin_precache() {
   #if defined SOUNDS_ON
   precache_sound(sound)
   #endif
}

public event_restart_attempt()
{
   if(!get_pcvar_num(on_off))
      return PLUGIN_HANDLED
   
   new players[32], num
   get_players(players, num, "a")
   for (new i; i < num; ++i)
      g_restart_attempt[players[i]] = true
   
   return PLUGIN_CONTINUE
}

public event_hud_reset(id)
{
   if(!get_pcvar_num(on_off))
      return PLUGIN_HANDLED
   
   if (g_restart_attempt[id])
      g_restart_attempt[id] = false
   
   set_task(0.2,"player_spawn",id)
   
   return PLUGIN_CONTINUE
}

public deatha() {
   new victim = read_data(2)
   remove_task(victim+1234)
   remove_task(victim+2345)
   remove_task(victim+4444)
}

public player_spawn(id) {
   if(!is_user_alive(id) || !get_pcvar_num(on_off))
      return PLUGIN_HANDLED
   
   can_take_dmg[id]=true
   can_play[id]=true
   
   remove_task(id+1234)
   remove_task(id+2345)
   remove_task(id+4444)
   
   return PLUGIN_CONTINUE
}

public PreThink(id) {
   if(!is_user_alive(id) || !get_pcvar_num(on_off) || !can_take_dmg[id])
      return FMRES_IGNORED
   
   switch(pev(id,pev_waterlevel)) {
      case 1:{
         effects(id)
         can_take_dmg[id] = false
         set_task(1.0,"reset_dmg",id+4444)
         make_dmg(id,get_pcvar_num(dmg_feet))
      }
      case 2:{
         effects(id)
         can_take_dmg[id] = false
         set_task(1.0,"reset_dmg",id+4444)
         make_dmg(id,get_pcvar_num(dmg_waist))
      }
      case 3:{
         effects(id)
         can_take_dmg[id] = false
         set_task(1.0,"reset_dmg",id+4444)
         make_dmg(id,get_pcvar_num(dmg_head))
      }
      case 0:{
         new Float:p_origin[3]
         pev(id, pev_origin, p_origin)
         
         new ent = -1
         while((ent = engfunc(EngFunc_FindEntityInSphere, ent, p_origin, get_pcvar_float(dmg_radius)))) {
            new classname[32]
            pev(ent, pev_classname, classname, 31)
            
            if(equal(classname, "func_water")) {
               effects(id)
               can_take_dmg[id] = false
               set_task(1.0,"reset_dmg",id+4444)
               make_dmg(id,get_pcvar_num(dmg_near))
            }
         }
      }
   }
   return FMRES_IGNORED
}

public reset_sound(taskid)      can_play[taskid-2345]=true
public reset_dmg(taskid)   can_take_dmg[taskid-4444]=true
public make_dmg(id,dmg)   fm_fakedamage(id,"trigger_hurt",float(dmg),DMG_GENERIC)

public effects(id) {
   //Icon Effect-----------------------------
   message_begin(MSG_ONE,icon,{0,0,0},id)
   write_byte(1) //1 = show
   write_string("dmg_rad") //Sprite
   write_byte(255) //R
   write_byte(255) //G
   write_byte(0) //B
   message_end()
   
   remove_task(id+1234)
   
   set_task(3.0,"remove_icon",id+1234)
   
   //Icon Effect-----------------------------
   
   //Sound Effect----------------------------
   
   #if defined SOUNDS_ON
   if(can_play[id]) {
      client_cmd(id,"spk %s",sound)
      can_play[id]=false
      set_task(10.0,"reset_sound",id+2345)
   }
   #endif
   
   //Sound Effect----------------------------
   
   //Screen Fade Effect----------------------
   if(get_pcvar_num(scr_fade)) {
      message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, id)
      write_short(1<<12)
      write_short(1<<12)
      write_short(1<<12)
      write_byte(0)
      write_byte(200)
      write_byte(0)
      write_byte(20)
      message_end()
   }
   
   //Screen Fade Effect----------------------
}


public remove_icon(taskid) {
   new id = taskid - 1234
   message_begin(MSG_ONE,icon,{0,0,0},id)
   write_byte(0)
   write_string("dmg_rad")
   message_end()
}

//Stock from Fakemeta_util
stock fm_fakedamage(victim, const classname[], Float:takedmgdamage, damagetype) {
   new class[] = "trigger_hurt"
   new entity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,class))
   if (!entity)
      return 0
   
   new value[16]
   float_to_str(takedmgdamage * 2, value, sizeof value - 1)
   fm_set_kvd(entity, "dmg", value, class)
   
   num_to_str(damagetype, value, sizeof value - 1)
   fm_set_kvd(entity, "damagetype", value, class)
   
   fm_set_kvd(entity, "origin", "8192 8192 8192", class)
   dllfunc(DLLFunc_Spawn, entity)
   
   set_pev(entity, pev_classname, classname)
   dllfunc(DLLFunc_Touch, entity, victim)
   engfunc(EngFunc_RemoveEntity, entity)
   
   return 1
}

stock fm_set_kvd(entity, const key[], const value[], const classname[] = "") {
   if (classname[0])
      set_kvd(0, KV_ClassName, classname)
   else {
      new class[32]
      pev(entity, pev_classname, class, sizeof class - 1)
      set_kvd(0, KV_ClassName, class)
   }
   
   set_kvd(0, KV_KeyName, key)
   set_kvd(0, KV_Value, value)
   set_kvd(0, KV_fHandled, 0)
   
   return dllfunc(DLLFunc_KeyValue, entity, 0)
}






Начин на инсталация
1.Сложете файлът ' toxic_water.amxx ' в директорията на играта ви>cstrike>addons>amxmodx>plugins.
2.Отворете директорията на играта ви>cstrike>addons>amxmodx>configs.След това отворете файлът ' plugins.ini ' и най-отдолу на нов ред добавете: toxic_water.amxx
3.Сложете файлът ' toxic_water.sma ' в директорията на играта ви>cstrike>addons>amxmodx>scripting.






Моля влезте в акаутна си за да виждате линковете!!!



Изображение

Аватар
Drea<M>40
Модератор раздел "Развлечения"
Модератор раздел "Развлечения"
Мнения: 488
Бонус точки: 0
Регистриран: 26 Мар 2016
Предупреждения: 0
Местоположение: зад волана
Ник в играта: -|LR|-*DIXIKlO^
Скайп профил: unsi1231
Вашият пол е: Мъж
Репутация: 56
  • { SIMILAR_TOPICS }
    Отговори
    Преглеждания
     Последно мнение