←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] automatyczna zmiana teamu gra...

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 31.10.2012

Witam!

Potrzebne są mi 2 rzeczy:
1. Chcę, aby TT po zabiciu stawał się CT (podejrzewam, że znalazł bym to w zombi modzie, bo zarażeniu CT staje się TT) i spawnił się w losowym miejscu z CSDM
2. Co pięć sekund dodawało fraga graczowi, an pewno coś z set_task, ale nie wiem jak dokładnie to zrobić
Odpowiedz

Gość_21977_* 31.10.2012

2. nie wiem do końca, co masz na myśli, tu daję Ci plugin, który co 5 sekund przyznaje wszystkim CT i TT po 1 fragu:

#include <amxmodx>
#include <fun>

new maxPlayers, id;

public plugin_init(){
register_plugin("5sec frag", "0.1", "benio101");
}

public plugin_cfg(){
maxPlayers=get_maxplayers();

set_task(5.0, "frag", .flags="b");
}

public frag(){
for(id=1; id<=maxPlayers; ++id){
if(is_user_connected(id) && !is_user_hltv(id) && get_user_team(id)%3){
set_user_frags(id, get_user_frags(id)+1);
}
}
}
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 31.10.2012

elegancko, tzn tak wygląda. O to mi chodzi (ma dawać tylko CT, ale to już sam poprawie), na razie nie przetestuje bo pierwsze testy będą jak będzie mod już w fazie końcowej +

ale potrzebuje jeszcze 1. :/
Użytkownik Eustachy8 edytował ten post 31.10.2012 20:58
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 31.10.2012

cs_set_user_team(player,( g_iTeam[player] = g_iTeam[player] == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T))

if (is_user_alive(player))
ExecuteHamB(Ham_CS_RoundRespawn, player)


Prosto z BaseBuildera (komenda do zmiany drużyny), player to id gracza którego chcesz przenieść, w tablicy g_iTeam jest zapisany aktualna drużyna (można użyć cs_get_user_team() lecz będziesz kilka razy wywoływał funkcję, czasem lepiej coś zapisać :D)
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 31.10.2012

a czy to nie zmieni dopiero od nowej rundy?
Odpowiedz

Gość_21977_* 31.10.2012

nie
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 31.10.2012

to jest wycinek kodu, możesz z tego zrobić np. komendę przerzucającą gracza do innej drużyny bez śmierci, lub dodać do zdarzenia śmierci (należy zmienić warunek, ponieważ trzeba jeszcze gracza odrodzić :D)
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 31.10.2012

to mnie trochę zmyliło

Ham_CS_RoundRespawn
w takim razie jutro postaram się to skleić do kupy i tam znać czy wszystko ładnie działa
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 01.11.2012

O takie coś chodziło ?
#include <amxmodx>
#include <fun>
#include <cstrike>

new maxPlayers;

public plugin_init(){
    register_plugin("5sec frag", "0.1", "benio101");
}

public plugin_cfg(){
    maxPlayers = get_maxplayers();
    set_task(5.0, "frag", .flags="b");
    register_event("DeathMsg", "DeathMsg", "a")
}

public frag(){
    for(new id=1; id<=maxPlayers; ++id){
        if(is_user_connected(id) && !is_user_hltv(id) && !is_user_bot(id) && get_user_team(id) == 2){
            set_user_frags(id, get_user_frags(id)+1);
        }
    }
}

public DeathMsg(){
    new g_Victim = read_data(2);
    if(is_user_connected(g_Victim)){
        if(get_user_team(g_Victim == 1)){
            cs_set_user_team(g_Victim, CS_TEAM_CT);
        }
    }
}
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 01.11.2012

nie do końca, TT jak zabije staje się CT, a zabity CT staje się TT :D ale reszta w najlepszym porządeczku
Odpowiedz

Gość_21977_* 01.11.2012

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

new maxPlayers;

public plugin_init(){
register_plugin("5sec frag", "0.3", "speedkill & benio101");

register_event("DeathMsg", "DeathMsg", "a");
}

public plugin_cfg(){
maxPlayers = get_maxplayers();
set_task(5.0, "frag", .flags="b");
}

public frag(){
for(new id=1; id<=maxPlayers; ++id){
if(is_user_connected(id) && !is_user_hltv(id) && !is_user_bot(id) && get_user_team(id) == 2){
set_user_frags(id, get_user_frags(id)+1);
}
}
}

public DeathMsg(){
new g_Victim = read_data(2);
if(is_user_connected(g_Victim)){
new vTeam=get_user_team(g_Victim);
switch(vTeam){
case 1:{
cs_set_user_team(g_Victim, CS_TEAM_CT);
}
case 2:{
cs_set_user_team(g_Victim, CS_TEAM_T);
}
}
}
}
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 01.11.2012

nie do końca mnie zrozumieliście, Jeżeli TT zabije CT, staje się nim, a CT zabity staje się TT. Ale jeżeli CT zabije TT nic ma się nie dziać, po prostu naliczyć fraga. Czy tak właśnie jest, a ja źle to widzę? :D
Odpowiedz

Gość_21977_* 01.11.2012

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

new maxPlayers;

public plugin_init(){
register_plugin("5sec frag", "0.4", "speedkill & benio101");

register_event("DeathMsg", "DeathMsg", "a");
}

public plugin_cfg(){
maxPlayers = get_maxplayers();
set_task(5.0, "frag", .flags="b");
}

public frag(){
for(new id=1; id<=maxPlayers; ++id){
if(is_user_connected(id) && !is_user_hltv(id) && !is_user_bot(id) && get_user_team(id) == 2){
set_user_frags(id, get_user_frags(id)+1);
}
}
}

public DeathMsg(g_Killer, g_Victim){
if(is_user_connected(g_Killer) && is_user_connected(g_Victim)){
if(get_user_team(g_Killer)==1 && get_user_team(g_Victim)==2){
cs_set_user_team(g_Killer, CS_TEAM_CT);
cs_set_user_team(g_Victim, CS_TEAM_T);
}
}
}
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 01.11.2012

Czy to ma racje bytu? :D

#include <amxmodx>
#include <fun>
#include <cstrike>
#include <csx>

new maxPlayers;
new g_ltimer[33];
new g_msgsync;

public plugin_init(){
		register_plugin(" BEL", "0.1", "Eustachy8 (+speedkill & benio101)");

		register_event("DeathMsg", "DeathMsg", "a");

		g_msgsync = CreateHudSyncObj();
}

public plugin_cfg(){
		maxPlayers = get_maxplayers();
		set_task(5.0, "frag", .flags="b");
		set_task(5.0, "dispTime", .flags="b");
}

public frag(){
		for(new id=1; id<=maxPlayers; ++id){
				if(is_user_connected(id) && !is_user_hltv(id) && !is_user_bot(id) && get_user_team(id) == 2){
						set_user_frags(id, get_user_frags(id)+1);
				}
		}
}

public DeathMsg(g_Killer, g_Victim){
		if(is_user_connected(g_Killer) && is_user_connected(g_Victim)){
				if(get_user_team(g_Killer)==1 && get_user_team(g_Victim)==2){
					cs_set_user_team(g_Killer, CS_TEAM_CT);
					cs_set_user_team(g_Victim, CS_TEAM_T);
                    spawn_func(g_Killer);
                    g_ltimer[g_Killer]=0;
				}
		}
}
public spawn_func(id)
{
	   new parm[1];
	   parm[0]=id;
	   set_task(0.5,"player_spawn",72,parm,1);
}
public player_spawn(parm[1])
{
spawn(parm[0]);
}
public dispTime(id)
{  
	   if (get_user_team(id)==2)
	   {
			  set_hudmessage(255, 255, 255, 0.10, 0.80, 0, 1.0, 1.0, 0.01, 0.01, -1);
			  ShowSyncHudMsg(0, g_msgsync, "Zyjesz juz: %d sekund", g_ltimer[id]);
			  ++g_ltimer[id];
	   }
}

Brakuje mi już tylko jednej rzeczy i nie wiem jak ją ugryźć.
A mianowicie, chcę zrobić ten modzik:
http://amxx.pl/topic...nd-enemy-lines/
brakuje mi punktu pierwszego, plugin ma automatycznie ustawiać graczy w drużynach. Dodatkowo musi ustawiać 0 w tablicy g_ltimer[33]; odpowiednim osobom (tym co zostaną przydzieleni do CT)
Użytkownik Eustachy8 edytował ten post 01.11.2012 14:19
Odpowiedz

Gość_21977_* 01.11.2012

W ten sposób spawn będzie powodował pewne problemy z kamerą w specyficznych sytuacjach.
Jeśli koniecznie nie chcesz korzystać z Kanapki, to skorzystaj z poprawnej formy ożywiania graczy.
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 01.11.2012

Także funkcja dispTime(id), nie zadziała poprawnie, ponieważ nie ma tam pętli ;)
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 01.11.2012

set_task(5.0, "dispTime", .flags="b");
(tu ma być 1.0)

dlaczego nie będzie? przecież jest ona wywoływana co sekunde i za każdym razem zmienia czas o 1

wrzuciłem w tej postaci:
Spoiler


i poprawnie działa tylko dodawanie fragów co 5 sec :/
nie przenosi do przeciwnego teamu, nie ma odliczania
speedkill (01.11.2012 17:01):
Dlatego, że funkcja dispTime nie posiada id, więc pokazujesz tą wiadomość każdemu ;)
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 01.11.2012

ok rozumiem, ale występuje problem, nie widzi to nikt ;d więc zrobiłem to w sposób jeszcze dziwaczniejszy :D
Odpowiedz

  • +
  • -
Eustachy8 - zdjęcie Eustachy8 01.11.2012

nie mogę już edytować, nie skleja postów, sorry, za wygląd spamu typowego ;<

Do rzeczy:
Odliczania i dodawanie fragów działa elegancko. Jednak event deathMsg jest olewany całkowicie, nic się nie dzieje podczas gdy TT zabija CT
register_event("DeathMsg", "DeathMsg", "a");
.
.
.

public DeathMsg(g_Killer, g_Victim){
		if(is_user_connected(g_Killer) && is_user_connected(g_Victim)){
				if(get_user_team(g_Killer)==1 && get_user_team(g_Victim)==2){

					cs_set_user_team(g_Killer, CS_TEAM_CT);
					cs_set_user_team(g_Victim, CS_TEAM_T);
					spawn_func(g_Killer);
					g_ltimer[g_Killer]=0;

					new szName[64];
					get_user_name(g_Victim,szName,charsmax(szName));
					new szName2[64];
					get_user_name(g_Killer,szName2,charsmax(szName2));
					ColorChat(0,RED,"[ BEL ] ^x04%s zyl ^x04%i sec. Zabil go ^x04%s",szName,g_ltimer[g_Victim],szName2)

				}
		}
}

Użytkownik Eustachy8 edytował ten post 01.11.2012 20:00
Odpowiedz

  • +
  • -
K!113r - zdjęcie K!113r 01.11.2012

event death chyba nie ma argumentów, trzeba je zczytać:

new iKiller = read_data( 1 );
new iVictim = read_data( 2 );


powinno działać, zawsze możesz spróbować z kanapką:

RegisterHam(Ham_Killed, "player", "Ham_Killed_Post", 1);
-
-
-
public Ham_Killed_Post(vid, kid)

(01.11.2012 20:20):
O minutę mnie wyprzedziłeś :D
Odpowiedz