←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Czas funkcji.

  • +
  • -
Ender # - zdjęcie Ender # 26.01.2014

Kurczę, chciałbym się dowiedzieć jak użyć set_task'a aby no clip działał jakiś czas. Z tamtego poradnika mało rozumiem, coś tam rozumiem, ale za mało :P

 

Mam nadzieję, że ktoś mi to wyjaśni na "Chłopski Rozum" a najlepiej jakby mi napisał gotowego taska jako przykład który będzie trwał np. 10sek.

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 26.01.2014

Robisz drugą funkcję, która będzie służyła jako wyłączenie no-clipa

public wyłącz(id){
if(!is_user_connected(id)
     return;
set_user_noclip(id, 0)
}

 

i w funkcji gdzie jest ustawianie noclipa, robisz set_task(10.0, "wyłącz", id);


Użytkownik Wielkie Jol edytował ten post 26.01.2014 16:27
Odpowiedz

  • +
  • -
Ender # - zdjęcie Ender # 26.01.2014

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>

#define PLUGIN "Ruletka"
#define VERSION "1.0"
#define AUTHOR "Ender #"


public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("say /ruletka", "ruletka");
}

public ruletka(id)
{

switch(random_num(1, 2))
{

         case 1:
		 {
		   client_print (id,print_center, "Masz 1 HP");
		   set_user_health (id, 1)
		   }
		   
		   case 2:
		   
		   {
		   client_print (id, print_center, "Jestes Duchem!");
		   set_user_noclip (id, 1)
		  
		   }
		   
		   
		   
	}
}

To jest kod ruletki (skopiowałem tylko do no clipa) i jak miałbym to zmodyfikować ? :)

 

Odpowiedz

  • +
  • -
Niide - zdjęcie Niide 26.01.2014

W taki sposób.

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>

#define PLUGIN "Ruletka"
#define VERSION "1.0"
#define AUTHOR "Ender #"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("say /ruletka", "ruletka");
}

public ruletka(id)
{
	if(is_user_alive(id))
	{
		switch(random_num(1, 2))
		{
			case 1:
			{
				client_print(id,print_center, "Masz 1 HP");
				set_user_health(id, 1)
			}
			case 2:	
			{
				client_print(id, print_center, "Jestes Duchem!");
				set_user_noclip(id, 1)
				set_task(10.0, "off_no", id);
			}
		}
	}
}

public off_no(id)
{
	if(is_user_connected(id))
		set_user_noclip(id, 0);
}
Odpowiedz

  • +
  • -
Ender # - zdjęcie Ender # 26.01.2014

Dzięki wielkie ;) Najlepiej mi się uczyć jak mam to przed oczami :)

 


Użytkownik Ender # edytował ten post 26.01.2014 18:43
Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 26.01.2014

Na marginesie dodaj wartość bool, żeby sprawdzać, czy grasz już nie użył ruletki w tej rundzie czy cuś, bo inaczej będzie mógł ją cały czas używać.

Odpowiedz

  • +
  • -
Ender # - zdjęcie Ender # 26.01.2014

O właśnie chciałem o to spytać ;) Jak dokładnie to zrobić? Mógłbyś tak samo dodać do kodu tylko tam razem do tego co dał Niide

 

To przy okazji żeby nie spamić tematami to się spytam również jak dać wiadomość typu admin_say, ale żeby wyświetlało się tylko 1 użytkownikowi i po środku :)


Użytkownik Ender # edytował ten post 26.01.2014 18:46
Odpowiedz

  • +
  • -
Niide - zdjęcie Niide 26.01.2014

Tu to z boolem: Co 300 sekund (5 minut) można używać ruletki).

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>

#define PLUGIN "Ruletka"
#define VERSION "1.0"
#define AUTHOR "Ender #"

new bool: uzyl[33];

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("say /ruletka", "ruletka");
}

public client_connect(id)
{
	uzyl[id] = false;
}

public ruletka(id)
{
	if(is_user_alive(id))
	{
		if(uzyl[id])
		{
			client_print(id, print_chat, "Poczekaj jeszcze troche przed uzyciem ruletki!");
			return PLUGIN_HANDLED;
		}
		switch(random_num(1, 2))
		{
			case 1:
			{
				client_print(id,print_center, "Masz 1 HP");
				set_user_health(id, 1)
			}
			case 2:	
			{
				client_print(id, print_center, "Jestes Duchem!");
				set_user_noclip(id, 1)
				set_task(10.0, "off_no", id);
			}
		}
		uzyl[id] = true;
		set_task(300.0, "uzycie", id);
	}
	return PLUGIN_CONTINUE;
}

public off_no(id)
{
	if(is_user_connected(id))
		set_user_noclip(id, 0);
}

public uzycie(id)
{
	if(is_user_connected(id) && uzyl[id])
		uzyl[id] = false;
}

Co do komendy, to zawze można użyć admin_psay. Wysyłasz prywatną wiadomość na czacie podanemu graczowi.


Użytkownik Niide edytował ten post 26.01.2014 19:23
Odpowiedz

  • +
  • -
Ender # - zdjęcie Ender # 26.01.2014

A dało by radę taką wiadomość napisać tak jak w print_center?

 

Fajnie że co 300 sekund bo to nawet wygodniejsze :)

 

Odpowiedz

  • +
  • -
Niide - zdjęcie Niide 26.01.2014

Trzeba to zmienić w admichat.amxx. Trzymaj, w załączniku masz zmienione na print_center.

Załączone pliki

Odpowiedz

  • +
  • -
Ender # - zdjęcie Ender # 26.01.2014

Dzięki, mam nadzieję że nikogo nie denerwuję tym, że ciąglę zmieniam że jednak nie do zamknięcia ;P

 

Jeszcze chciałbym wiedzieć jak dodać pasek który pokazywał ile no clipa zostało :)


Użytkownik Ender # edytował ten post 26.01.2014 19:58
Odpowiedz

  • +
  • -
Niide - zdjęcie Niide 26.01.2014

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>

#define PLUGIN "Ruletka"
#define VERSION "1.0"
#define AUTHOR "Ender #"

new bool: uzyl[33];

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("say /ruletka", "ruletka");
}

public client_connect(id)
{
	uzyl[id] = false;
}

public ruletka(id)
{
	if(is_user_alive(id))
	{
		if(uzyl[id])
		{
			client_print(id, print_chat, "Poczekaj jeszcze troche przed uzyciem ruletki!");
			return PLUGIN_HANDLED;
		}
		switch(random_num(1, 2))
		{
			case 1:
			{
				client_print(id,print_center, "Masz 1 HP");
				set_user_health(id, 1)
			}
			case 2:	
			{
				client_print(id, print_center, "Jestes Duchem!");
				set_user_noclip(id, 1)
				set_bartime(id, 10);
				set_task(10.0, "off_no", id);
			}
		}
		uzyl[id] = true;
		set_task(300.0, "uzycie", id);
	}
	return PLUGIN_CONTINUE;
}

public off_no(id)
{
	if(is_user_connected(id))
	{
		set_user_noclip(id, 0);
		set_bartime(id, 0);
	}
}

public uzycie(id)
{
	if(is_user_connected(id) && uzyl[id])
		uzyl[id] = false;
}

stock set_bartime(id, czas)
{
	message_begin((id)?MSG_ONE:MSG_ALL, get_user_msgid("BarTime2"), _, id)
	write_short(czas);
	write_short(0);
	message_end();   
}
Odpowiedz

  • +
  • -
Ender # - zdjęcie Ender # 26.01.2014

Pomogłeś mi jak nie wiem, jak Ci dam kolejny plus to warna dostanę :P

 

A teraz Dzięki wszystkim za pomoc.

 

Tym razem na pewno do zamknięcia :)

Odpowiedz

  • +
  • -
Amaroq - zdjęcie Amaroq 26.01.2014

To rozwiązanie jest moim zdaniem bardziej optymalne
#include <amxmodx>
#include <fun>

#define PLUGIN "Ruletka"
#define VERSION "1.0"
#define AUTHOR "Ender #"

new Uzyl;

#define SetUzyl(%1) (Uzyl |= (1<<(%1-1)))
#define CheckUzyl(%1) (Uzyl & (1<<(%1-1)))
#define RemoveUzyl(%1) (Uzyl &= ~(1<<(%1-1)))

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("say /ruletka", "ruletka");
}

public client_connect(id)
{
	RemoveUzyl(id);
}

public client_disconnect(id)
{
	RemoveUzyl(id);
	
	if(task_exists(id))
	 	remove_task(id);
	 	
}

public ruletka(id)
{
	if(is_user_alive(id))
	{
		if(CheckUzyl(id))
		{
			client_print(id, print_chat, "Poczekaj jeszcze troche przed uzyciem ruletki!");
			return PLUGIN_HANDLED;
		}
		switch(random(2))
		{
			case 0:
			{
				client_print(id,print_center, "Masz 1 HP");
				set_user_health(id, 1)
			}
			case 1:	
			{
				client_print(id, print_center, "Jestes Duchem!");
				set_user_noclip(id, 1)
				set_bartime(id, 10);
				set_task(10.0, "off_no", id);
			}
		}
		SetUzyl(id);
		set_task(300.0, "uzycie", id);
	}
	return PLUGIN_CONTINUE;
}

public off_no(id)
{
	if(is_user_connected(id))
	{
		set_user_noclip(id, 0);
	}
}

public uzycie(id)
{
	if(is_user_connected(id) && CheckUzyl(id))
		RemoveUzyl(id)
}

stock set_bartime(id, czas)
{
	static MsgBarTime;
	
	if(!MsgBarTime)
		MsgBarTime = get_user_msgid("BarTime");
		
	message_begin((id)?MSG_ONE:MSG_ALL, MsgBarTime, _, id)
	write_short(czas);
	message_end();   
}
Odpowiedz

  • +
  • -
Ender # - zdjęcie Ender # 26.01.2014

Dzięki za robotę, ale jestem zielony i z tamtego więcej rozumiem :P :)

Odpowiedz