Как да спре да дава кръв когато лимита е достигнат!

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
[N]eXuS
Извън линия
Потребител
Потребител
Мнения: 163
Регистриран на: 16 Мар 2018, 04:52

Как да спре да дава кръв когато лимита е достигнат!

Мнение от [N]eXuS » 17 Апр 2018, 13:54

здравейте, как може да направя кръвта на играча да не натхвърля лимита pMaxHp при проверката проверява дали кръвта не е pMaxHp и аддва още но там влиза че ако играча вече има 140 хп и направи хс плъгина ще провери че играча не е на 150 хп и пак ще му аддне + 20 хп и ще стане на 160хп, та как да го направя дори и да е на 140 и като направи хс да не му ги аддне 20 а колкото може да се аддне до лимита благодаря

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <fun>

new pAddHp, pHsHp, pMaxHp

public plugin_init()
{
	pAddHp = register_cvar("amx_add_hp", "10")
	pHsHp = register_cvar("amx_hs_hp", "20")
	pMaxHp = register_cvar("amx_max_hp", "150")
	
	register_event("DeathMsg", "ev_DeathMsg", .flags="a")
}

public ev_DeathMsg()
{
	new iKiller = read_data(1);
	new iHeadSh = read_data(3);
	
	if(iHeadSh)
	{
		if(get_user_health(iKiller) <= get_pcvar_num(pMaxHp))
		{
			set_user_health(iKiller, get_user_health(iKiller) + get_pcvar_num(pHsHp))
		}
	}
	
	else
	
	{
		if(get_user_health(iKiller) <= get_pcvar_num(pMaxHp))
		{
			set_user_health(iKiller, get_user_health(iKiller) + get_pcvar_num(pAddHp))
		}
	}
}
П.с: Не че плъгина мми трябва а просто тествам разни работи :)

Аватар
SmirnoffBG
Извън линия
Потребител
Потребител
Мнения: 267
Регистриран на: 27 Ное 2016, 19:43
Местоположение: nz
Се отблагодари: 77 пъти
Получена благодарност: 38 пъти
Обратна връзка:

Как да спре да дава кръв когато лимита е достигнат!

Мнение от SmirnoffBG » 17 Апр 2018, 14:02

Аз съм ползвал следния метод:

Код за потвърждение: Избери целия код

#define ADDHP 20  "define" е функция с която слагаме няква информация в дума. В случая под думата ADDHP е числото 20 и надоло в плъгина където има думата компилатора автоматично ще го замести с посочената сума

maxhp = pev(id, pev_max_health)  тук ползваме pev(функция на fakemeta) чрез който можем да вземем разнообразна информация за id-то
//При "pev_max_health" функцията връща стойността която е поставена там. Но цс сам не го прави трябва предварително някой плугин или твоя да е нагласил сумата.

hp = pev(id, pev_health)  Чрез "pev_health" взимаме сегашната кръв на човека

set_pev(id, pev_health, (min(maxhp, hp+ADDHP))*1.0)  set_pev е за промяна на някоя информация. Този път променяме кръвта като сетваме следното:
 (min(maxhp, hp+ADDHP))*1.0 :
 ()*1.0 го правим защото set_pev търси Float(дроб) а сумите са int(цели числа)
 
 min() е функция чрез която можем да вземе по-малкият от двата посочени параметъра
 и съответно първия параметър е максималната кръв
 
 а втория кръвта + увеличението 
Обяснено подробно!
Последно промяна от SmirnoffBG на 17 Апр 2018, 14:20, променено общо 3 пъти.
El-Super Respawn = 87.121.54.85:27016
BG Trewa Respawn = 91.92.137.205:27015

Аватар
[N]eXuS
Извън линия
Потребител
Потребител
Мнения: 163
Регистриран на: 16 Мар 2018, 04:52

Как да спре да дава кръв когато лимита е достигнат!

Мнение от [N]eXuS » 17 Апр 2018, 14:05

Аха би ли обяснил малко по - подробно кое какво е :)

Аватар
hackera457
Извън линия
Модератор
Модератор
Мнения: 768
Регистриран на: 01 Ное 2016, 09:46
Местоположение: София
Се отблагодари: 1 път
Получена благодарност: 124 пъти
Обратна връзка:

Как да спре да дава кръв когато лимита е достигнат!

Мнение от hackera457 » 17 Апр 2018, 14:10

Код за потвърждение: Избери целия код

  #define ADDHP 20
maxhp = pev(id, pev_max_health) // взима максималната кръв
hp = pev(id, pev_health) // актуалното количество кръв

set_pev(id, pev_health, (max(maxhp, hp+ADDHP)))  //задава кръв на играча, като следи за достигане на лимита
Моите плъгини

Код за потвърждение: Избери целия код

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Аватар
[N]eXuS
Извън линия
Потребител
Потребител
Мнения: 163
Регистриран на: 16 Мар 2018, 04:52

Как да спре да дава кръв когато лимита е достигнат!

Мнение от [N]eXuS » 17 Апр 2018, 14:53

В един примерен плъгин как би изглеждало това цялото ?

Аватар
SmirnoffBG
Извън линия
Потребител
Потребител
Мнения: 267
Регистриран на: 27 Ное 2016, 19:43
Местоположение: nz
Се отблагодари: 77 пъти
Получена благодарност: 38 пъти
Обратна връзка:

Как да спре да дава кръв когато лимита е достигнат!

Мнение от SmirnoffBG » 17 Апр 2018, 15:41

Ето един мой плъгин. Който прави следното:
Има две опции heal всяка секунда и ако е под 27 кръв почва бърза регенерация или при убийство има зелен "glow" и "fade"

Код за потвърждение: Избери целия код

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <fun>
#include <fakemeta>

#define PLUGIN "HP Regen"
#define VERSION "2.1"
#define AUTHOR "SmirnoffBG"

#define TIMER 10.0
#define ADDHP 20

new bool:Vamp[33]

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	set_task(TIMER, "Heal", _,_,_,"b")
	register_event("Health", "CheckHP", "b", "1<26")
}

public VampHeal(id)
{
	if(Vamp[id])
		Vamp[id] = false
	else
		Vamp[id] = true
	client_print(id, print_chat, "[Extras] You set Heal to %s", Vamp[id]?"Vampiric(on kill)":"Heal per sec")
}

public CheckHP(id)
{
	if(!task_exists(id))
	{
		set_green(id)
		set_task(0.1, "Low_HP", id,_,_,"b")
	}
}

public Heal()
{
	static pl[32], num, i, id, hp, maxhp
	get_players(pl, num, "a")
	
	for(i=0; i<num; i++)
	{
		id = pl[i]
		if(Vamp[id]) continue
		hp = pev(id, pev_health)
		maxhp = pev(id, pev_max_health)
		if(maxhp == 0) maxhp = 100

		if(hp < 26.0)
		{
			if(!task_exists(id)) {
				set_green(id)
				set_task(0.1, "Low_HP", id,_,_,"b")
			}
		}
		else if(hp < maxhp)
		{
			set_pev(id, pev_health, (min(maxhp, hp+ADDHP))*1.0)
			if(TIMER > 5.0)
			{
				set_green(id)
				set_task(0.1, "Fade_Green", id,_,_,"b")
			}
		}
	}
}
public Fade_Green(id)
{
	static Float:colors[3]
	pev(id, pev_rendercolor, colors)
	//cl_debug("colors = %f", colors[1])
	if( colors[1] > 15.0)
	{
		colors[1] -= 15.0
		set_pev(id, pev_rendercolor, colors)
	}
	else
	{
		set_pev(id, pev_renderfx, kRenderFxNone);
		remove_task(id)
	}
}

public Low_HP(id)
{
	static hp
	if((hp=pev(id, pev_health)) > 25 || !is_user_alive(id))
	{
		set_pev(id, pev_renderfx, kRenderFxNone)
		remove_task(id)
		return
	}
	static Float:colors[3]
	pev(id, pev_rendercolor, colors)
	//cl_debug("colors = %f", colors[1])

	colors[1] = 250.0 - (hp*10.0)
	set_pev(id, pev_rendercolor, colors)
	set_pev(id, pev_health, (hp+1)*1.0)
}

public client_death(killer,victim,wpnindex,hitplace)
{
	if(!is_user_alive(killer) || !Vamp[killer]) return
	
	static hp, user_hp
	
	if(hitplace == HIT_HEAD)
		hp = 75
	else
		hp = 50
		
	user_hp = get_user_health(killer)
	if(user_hp+hp > pev(killer, pev_max_health))
		set_user_health(killer, pev(killer, pev_max_health))
	else
		set_user_health(killer, user_hp + hp)
}

set_green(id)
{
	set_pev(id, pev_renderfx, kRenderFxGlowShell);
	set_pev(id, pev_rendercolor, {0.0, 255.0, 0.0});
	set_pev(id, pev_rendermode, kRenderNormal);
	set_pev(id, pev_renderamt, 30.0);
}
El-Super Respawn = 87.121.54.85:27016
BG Trewa Respawn = 91.92.137.205:27015

Аватар
hackera457
Извън линия
Модератор
Модератор
Мнения: 768
Регистриран на: 01 Ное 2016, 09:46
Местоположение: София
Се отблагодари: 1 път
Получена благодарност: 124 пъти
Обратна връзка:

Как да спре да дава кръв когато лимита е достигнат!

Мнение от hackera457 » 17 Апр 2018, 18:16

@Smirnoff защо използваш client_death като има други, които са по добри за ползване HAM Player Killed, DeathMsg. Така подвеждаш момчето само да мисли че е правилно😂
Моите плъгини

Код за потвърждение: Избери целия код

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Аватар
SmirnoffBG
Извън линия
Потребител
Потребител
Мнения: 267
Регистриран на: 27 Ное 2016, 19:43
Местоположение: nz
Се отблагодари: 77 пъти
Получена благодарност: 38 пъти
Обратна връзка:

Как да спре да дава кръв когато лимита е достигнат!

Мнение от SmirnoffBG » 17 Апр 2018, 20:26

Принципно съм го използвал, защото е по малко писане :D
Незнам как го определи за грешно. Дали защото е "cs only" функция или защото има някои, който са с четвърт милисекунда по бързи.
Но като цяло, да признавам "client_death" нее изборът, който бих избрал за оптимизиран плъгин, но пък разнообразява еднаквостта на плъгините :Д
El-Super Respawn = 87.121.54.85:27016
BG Trewa Respawn = 91.92.137.205:27015

Аватар
hackera457
Извън линия
Модератор
Модератор
Мнения: 768
Регистриран на: 01 Ное 2016, 09:46
Местоположение: София
Се отблагодари: 1 път
Получена благодарност: 124 пъти
Обратна връзка:

Как да спре да дава кръв когато лимита е достигнат!

Мнение от hackera457 » 17 Апр 2018, 21:54

SmirnoffBG написа: 17 Апр 2018, 20:26 Принципно съм го използвал, защото е по малко писане :D
Незнам как го определи за грешно. Дали защото е "cs only" функция или защото има някои, който са с четвърт милисекунда по бързи.
Но като цяло, да признавам "client_death" нее изборът, който бих избрал за оптимизиран плъгин, но пък разнообразява еднаквостта на плъгините :Д
Е не трябва да учим бъдещите "скриптъри" на лоши практики :D
Моите плъгини

Код за потвърждение: Избери целия код

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Аватар
[N]eXuS
Извън линия
Потребител
Потребител
Мнения: 163
Регистриран на: 16 Мар 2018, 04:52

Как да спре да дава кръв когато лимита е достигнат!

Мнение от [N]eXuS » 17 Апр 2018, 22:31

И аз пак нищо не разбрах :D

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 9 госта