Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
Klasa

[ROZWIĄZANE] Modyfikacja regeneracji hp podczas kucania w klasie, tak aby regenerowało się co x sek

klasa

Najlepsza odpowiedź BlackPerfum, 02.08.2014 00:00

Zawiodłem się na cs'ie... Robić coś czego i tak nie użyją, pewnie zrobili to tylko po to bym się na tym zawiódł. Pewnie tak xD Masz Coś takiego zadziała:

#include <amxmodx>
#include <fakemeta>
#include <codmod>

const m_flDuckTime = 262

public plugin_init()	register_forward(FM_CmdStart, "CmdStart",1)
	
public CmdStart(id, uchwyt, wtf)
{
	if(get_uc(uchwyt,UC_Buttons) & IN_DUCK)
	{
		static Float:GlobalTime
		global_get(glb_time,GlobalTime)
		if(~pev(id,pev_oldbuttons) & IN_DUCK)	set_pdata_float(id,m_flDuckTime,GlobalTime,5)
		else
		{
			static Float:health
			pev(id, pev_health,health)
			if(GlobalTime >= 1.0+get_pdata_float(id,m_flDuckTime,5))
			{
				set_pev(id, pev_health, health+1.0);  
				set_pdata_float(id,m_flDuckTime,GlobalTime,5)
			}
			else if(get_user_weapon(id) != CSW_KNIFE || health >= 100+cod_get_user_health( id, 1, 1, 1 ))	set_pdata_float(id,m_flDuckTime,GlobalTime,5)
		}
	}
}
Przejdź do postu


  • Zamknięty Temat jest zamknięty
7 odpowiedzi w tym temacie

#1 kakus002

    (-.(-.(-.-).-).-)

  • Zbanowany

Reputacja: 164
Profesjonalista

  • Postów:209
  • Lokalizacja:OS
Offline

Napisano 30.07.2014 14:19

Witam, próbowałem sam przerabiać ale coś nie wychodziło ;x

Chciałbym aby HP regenerowało się co np. 1 sekunde podczas kucania, aktualnie odnawia się ono co 0.1(chyba)

KOD:

 

public regeneration_health(id)
{
if((!ma_klase[id]) && is_user_alive(id))
return;

new button = get_user_button(id);
if( button & IN_DUCK && get_user_weapon(id) == CSW_KNIFE)
{
if(get_user_health(id) > 100+cod_get_user_health( id, 1, 1, 1 ))
return;
else give_max_hp(id)
}

}
public give_max_hp(id) set_user_health(id,get_user_health(id)+1)


#2 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 081
Godlike

  • Postów:5 715
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 30.07.2014 14:27



if( button & IN_DUCK && get_user_weapon(id) == CSW_KNIFE)
{
	if(get_user_health(id) > 100+cod_get_user_health( id, 1, 1, 1 ))
		return;
	else set_task(1.0,"giveHP");
}
else
{
	if(task_exsist(id+12334)) remove_task(id+12334);
}

public giveHP(id)
{
	id-=12334;
	set_user_health(id,get_user_health(id)+1);
}

u Ciebie było tak że przy kucaniu po prostu dodawał max hp, a że funkcja w której to trzymasz wykonuje się dosyć często to miałeś takie odczucie że dodaje się po 0.1. poczytaj o set_task. Poza Tym - wyżej podałem pseudo kod (być moze działa - ale na 70% nie)  może naprowadzi Cię na rozwiązanie. 


  • +
  • -
  • 1

#3 kakus002

    (-.(-.(-.-).-).-)

  • Autor tematu
  • Zbanowany

Reputacja: 164
Profesjonalista

  • Postów:209
  • Lokalizacja:OS
Offline

Napisano 30.07.2014 21:28


może naprowadzi Cię na rozwiązanie.

Kurde, ale nie naprowadziło ;x Nie ogarniam ; /



#4 Split

    Programista

  • Power User

Reputacja: 106
Zaawansowany

  • Postów:490
  • Imię:Szymon
  • Lokalizacja:Opole
Offline

Napisano 01.08.2014 16:08

przecież naprowadził:
set_task(1.0,"funkcja");

  • +
  • -
  • 0

LoL, 500 postów ;D


#5 kakus002

    (-.(-.(-.-).-).-)

  • Autor tematu
  • Zbanowany

Reputacja: 164
Profesjonalista

  • Postów:209
  • Lokalizacja:OS
Offline

Napisano 01.08.2014 17:08

przecież naprowadził:

set_task(1.0,"funkcja");

To zrób i przetestuj, ja testowałem i zobacz jak działa ... 



#6 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 01.08.2014 17:09

kakus002
Nie sprawdzasz co się dzieje z graczem pomiędzy utworzeniem task'a a jego wykonaniem tzn. gracz może sobie wstać zmienić broń pobiegać i znowu kucnąć a hp się mu doda

• CheQ o ile przyjmując że to:

pseudo kod

to całkiem dobry pomysł. I tak ma parę poważnych błędów:

if(get_user_health(id) > 100+cod_get_user_health( id, 1, 1, 1 ))

na
if(get_user_health(id) >= 100+cod_get_user_health( id, 1, 1, 1 ))
bo gracz sobie kucnie (mając full hp) na początku rundy i mu się doda hp

Trzeba też zamienić to:

set_task(1.0,"giveHP");

Na to:
set_task(1.0,"giveHP",id+12334);
Poza tym by twój kod działał musiał by być w thinku a z tym się wiąże że ten kawałek:

else
{
    if(task_exsist(id+12334)) remove_task(id+12334);
}

Wykona się tyle razy ile think, gdy nie kucamy z kosą (czyli większość gry)


Ja bym zrobił coś takiego:
const m_flDuckTime = 262

public plugin_init()
{
	register_forward(FM_CmdStart,"CmdStart")
}

public CmdStart(id,uchwyt,wtf)
{
	if(get_uc(uchwyt, UC_Buttons) & IN_DUCK)
	{
		static health
		health = get_user_health(id)
		if(get_pdata_float(id,m_flDuckTime,5) >= 1.0)
		{
			set_user_health(id,health+1)
			set_pdata_float(id,m_flDuckTime,0.0,5)
		}
		else if(health >= 100+cod_get_user_health( id, 1, 1, 1 ) || get_user_weapon(id) != CSW_KNIFE )	set_pdata_float(id,m_flDuckTime,0.0,5)
	}
}

dasiek (01.08.2014 17:44):
Czuj się sprowokowany ^D^
BlackPerfum (01.08.2014 17:47):
Wiem wiem zrobiłeś to specjalnie bym pokazał swoje umiejętności, by twoje były okryte płaszczem niewiedzy

  • +
  • -
  • 2
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#7 kakus002

    (-.(-.(-.-).-).-)

  • Autor tematu
  • Zbanowany

Reputacja: 164
Profesjonalista

  • Postów:209
  • Lokalizacja:OS
Offline

Napisano 01.08.2014 20:48


Ja bym zrobił coś takiego:

const m_flDuckTime = 262

public plugin_init()
{
register_forward(FM_CmdStart,"CmdStart")
}

public CmdStart(id,uchwyt,wtf)
{
if(get_uc(uchwyt, UC_Buttons) & IN_DUCK)
{
static health
health = get_user_health(id)
if(get_pdata_float(id,m_flDuckTime,5) >= 1.0)
{
set_user_health(id,health+1)
set_pdata_float(id,m_flDuckTime,0.0,5)
}
else if(health >= 100+cod_get_user_health( id, 1, 1, 1 ) || get_user_weapon(id) != CSW_KNIFE ) set_pdata_float(id,m_flDuckTime,0.0,5)
}
}

 

Kod nie działa : ]

 

 



#8 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 02.08.2014 00:00   Najlepsza odpowiedź

Zawiodłem się na cs'ie... Robić coś czego i tak nie użyją, pewnie zrobili to tylko po to bym się na tym zawiódł. Pewnie tak xD Masz Coś takiego zadziała:
#include <amxmodx>
#include <fakemeta>
#include <codmod>

const m_flDuckTime = 262

public plugin_init()	register_forward(FM_CmdStart, "CmdStart",1)
	
public CmdStart(id, uchwyt, wtf)
{
	if(get_uc(uchwyt,UC_Buttons) & IN_DUCK)
	{
		static Float:GlobalTime
		global_get(glb_time,GlobalTime)
		if(~pev(id,pev_oldbuttons) & IN_DUCK)	set_pdata_float(id,m_flDuckTime,GlobalTime,5)
		else
		{
			static Float:health
			pev(id, pev_health,health)
			if(GlobalTime >= 1.0+get_pdata_float(id,m_flDuckTime,5))
			{
				set_pev(id, pev_health, health+1.0);  
				set_pdata_float(id,m_flDuckTime,GlobalTime,5)
			}
			else if(get_user_weapon(id) != CSW_KNIFE || health >= 100+cod_get_user_health( id, 1, 1, 1 ))	set_pdata_float(id,m_flDuckTime,GlobalTime,5)
		}
	}
}

  • +
  • -
  • 2
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika





Również z jednym lub większą ilością słów kluczowych: klasa

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych