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

Teleport na resp


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

#1 slowly

    Wszechwidzący

  • Zbanowany

Reputacja: 14
Początkujący

  • Postów:270
  • Steam:steam
  • Lokalizacja:Warszawa
Offline

Napisano 26.08.2010 16:27

Witam.
Jak zrobić funkcję, dzięki której po naciśnięciu klawisza "R" na nożu dana klasa teleportuje się na swojego respa? Można tego użyć raz na rundę. Oraz po tym teleporcie, żeby się wyświetlało info w hudzie "Teleportowałeś się na resp".
Za wszystkie odpowiedzi bardzo dziękuje. Z góry pozdro, Slowly

Użytkownik slowly edytował ten post 26.08.2010 18:05


#2 Ortega

    mów mi Orti

  • Power User

Reputacja: 363
Wszechpomocny

  • Postów:640
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Sosnowiec
Offline

Napisano 26.08.2010 19:09

#include < amxmodx >
#include < cstrike >
#include < engine >
#include < fakemeta >

new const TASK_TELEPORT = 765;

public plugin_init( ) {
register_plugin( "Teleport 2 Spawn", "1.0", "Ortega" );

}

public client_PreThink( client ) {
if( !is_user_alive( client ) )
return;

if ( get_user_button( client ) & IN_USE )
set_task( 0.5, "Tspawn", TASK_TELEPORT + client );

}

public Tspawn( id ) {
new client = id - TASK_TELEPORT;

new CsTeams:iTeam;
iTeam = cs_get_user_team( client );

new iSpawnOrigin[3];
new Float:fSpawnAngle[3];

new ent;
ent = -1;

switch( iTeam ) {
case CS_TEAM_T:
{
while( ( ent = find_ent_by_class( ent, "info_player_deathmatch" ) ) != 0 ) {
if( !pev_valid( ent ) )
break;
}
get_user_origin( ent, iSpawnOrigin );
}
case CS_TEAM_CT:
{
while( ( ent = find_ent_by_class( ent, "info_player_start" ) ) != 0 ) {
if( !pev_valid( ent ) )
break;
}
get_user_origin( ent, iSpawnOrigin );
}
case CS_TEAM_SPECTATOR:
{
return;
}
}

if( !is_user_alive( client ) )
return;

new Float:fSpawnOrigin[3];
fSpawnOrigin[0] = iSpawnOrigin[0] + 0.0;
fSpawnOrigin[1] = iSpawnOrigin[1] + 0.0;
fSpawnOrigin[2] = iSpawnOrigin[2] + 0.0;

entity_set_vector( client, EV_VEC_origin, fSpawnOrigin );
entity_set_int( client, EV_INT_fixangle, 1 );
entity_set_vector( client, EV_VEC_angles, fSpawnAngle );

set_hudmessage( R, G, B, X, Y, 0, T, H );
show_hudmessage( client, "Teleportowales sie na resp" );

TeleportMSG( client );

}

TeleportMSG( client ) {
new fNewSpawnOrigin[3];
get_user_origin( client, fNewSpawnOrigin, 2 );

message_begin( MSG_BROADCAST, SVC_TEMPENTITY, { 0, 0, 0 }, client )
write_byte( TE_TELEPORT )
write_coord( fNewSpawnOrigin[0] )
write_coord( fNewSpawnOrigin[1] )
write_coord( fNewSpawnOrigin[2] )
message_end( )

}

Hud sobie ustaw według życzenia set_hudmessage( R, G, B, X, Y, 0, T, H ) :)
  • +
  • -
  • 1

#3 hardbot

    Banned

  • Zbanowany

Reputacja: 0
Nowy

  • Postów:3 049
Offline

Napisano 26.08.2010 19:22

a jeśli chcesz na R mieć to zmień to
 if ( get_user_button( client ) & IN_USE )
na
if ( get_user_button( client ) & IN_RELOAD )


#4 slowly

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 14
Początkujący

  • Postów:270
  • Steam:steam
  • Lokalizacja:Warszawa
Offline

Napisano 26.08.2010 19:25

Ale to miała być funkcja do Diablo Moda dla Danej Klasy, która się używa po wciśnięciu "R" na nożu....

@@EDIT:
Gdzie dać hudmessage, że funckcji można użyć raz na runde?

Użytkownik slowly edytował ten post 26.08.2010 19:31


#5 Onyke

    Godlike

  • Przyjaciel

Reputacja: 708
Guru

  • Postów:2 178
Offline

Napisano 26.08.2010 19:28

To może dodaj if że gdy gracz gra daną klasą to ma funkcje z powyższego kodu.

Użytkownik 0nYk3 edytował ten post 26.08.2010 19:29

  • +
  • -
  • 0

#6 slowly

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 14
Początkujący

  • Postów:270
  • Steam:steam
  • Lokalizacja:Warszawa
Offline

Napisano 26.08.2010 19:40

Do plugin_init ( id ) dodałem:
if(player_class[id] == Nekromanta && on_knife[id] && (button2 & IN_RELOAD) && is_user_alive(id)) 
        {
             set_task( 0.5, "Tspawn", TASK_TELEPORT);
        }
I do sma:
public Tspawn( id ) {
        new client = id - TASK_TELEPORT;
        
        new CsTeams:iTeam;
        iTeam = cs_get_user_team( client );
        
        new iSpawnOrigin[3];
        new Float:fSpawnAngle[3];
        
        new ent;
        ent = -1;
        
        switch( iTeam ) {
                case CS_TEAM_T:
                {
                        while( ( ent = find_ent_by_class( ent, "info_player_deathmatch" ) ) != 0 ) {
                                if( !pev_valid( ent ) )
                                        break;
                        }
                        get_user_origin( ent, iSpawnOrigin );
                }
                case CS_TEAM_CT:
                {
                        while( ( ent = find_ent_by_class( ent, "info_player_start" ) ) != 0 ) {
                                if( !pev_valid( ent ) )
                                        break;
                        }
                        get_user_origin( ent, iSpawnOrigin );
                }
                case CS_TEAM_SPECTATOR:
                {
                        return;
                }
        }
        
        if( !is_user_alive( client ) )
                return;
        
        new Float:fSpawnOrigin[3];
        fSpawnOrigin[0] = iSpawnOrigin[0] + 0.0;
        fSpawnOrigin[1] = iSpawnOrigin[1] + 0.0;
        fSpawnOrigin[2] = iSpawnOrigin[2] + 0.0;        
        
        entity_set_vector( client, EV_VEC_origin, fSpawnOrigin );
        entity_set_int( client, EV_INT_fixangle, 1 );
        entity_set_vector( client, EV_VEC_angles, fSpawnAngle );
        
        hudmsg(id,2.0,"Teleportowales sie na resp");
        
        TeleportMSG( client );
        
}

TeleportMSG( client ) {
        new fNewSpawnOrigin[3];
        get_user_origin( client, fNewSpawnOrigin, 2 );
        
        message_begin( MSG_BROADCAST, SVC_TEMPENTITY, { 0, 0, 0 }, client ) 
        write_byte( TE_TELEPORT ) 
        write_coord( fNewSpawnOrigin[0] ) 
        write_coord( fNewSpawnOrigin[1] ) 
        write_coord( fNewSpawnOrigin[2] )
        message_end( )
        
}

To będzie działać? I jeszcze gdzie dodać info, że funkcji można użyć raz na rundę...

Użytkownik slowly edytował ten post 26.08.2010 19:42


#7 hardbot

    Banned

  • Zbanowany

Reputacja: 0
Nowy

  • Postów:3 049
Offline

Napisano 26.08.2010 20:01

I nie zapomnij o tasku :D

nad plugin_init daj to

new const TASK_TELEPORT = 765;


#8 slowly

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 14
Początkujący

  • Postów:270
  • Steam:steam
  • Lokalizacja:Warszawa
Offline

Napisano 26.08.2010 20:12

Dalem i powinno działać? Aaa... I gdzie dodać info, że można teleportu użyć raz na rundę?

@@EDIT:
Przypisałem tą funkcję nekromancie(kod podałem wyżej), lecz teleport na resp'a cały czas nie działa :/

Użytkownik slowly edytował ten post 26.08.2010 21:00


#9 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 26.08.2010 21:36

...

Na górze:

new player_b_teleport[33]
new originss[33][3]


check_magic:

        if (player_b_teleport[id] > 0) make_tele(id)


Na koniec:

public make_tele(id)
{
if (used_item[id])
{
hudmsg(id,2.0,"Teleportu mozesz uzyc raz na runde!")
return PLUGIN_CONTINUE
}
if(on_knife[id])
{
set_user_origin(id, originss[id])
}
return PLUGIN_CONTINUE
}


Na koniec:

public set_tp()
{
for(new i=0;i<33;i++)
{
if(!is_user_connected(i) && player_class[i] != Twoja_klasa || !is_user_connected(i) && player_b_teleport[i] != 1)
continue

get_user_origin(i, originss[i], 0)
originss[i][2] += 50
}
}


W roundstart przed pętlą:

set_task(1.0, "set_tp", 9182)


Powinno pójść. ;F Btw. Nóż + E, przerób sobie na R.

Użytkownik Screeaam... edytował ten post 26.08.2010 21:37


#10 slowly

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 14
Początkujący

  • Postów:270
  • Steam:steam
  • Lokalizacja:Warszawa
Offline

Napisano 27.08.2010 09:18

Powiedz dokładnie gdzie dodać tego taska w roundstart() i jeszcze jak zmienić na IN_RELOAD na nożu...

@@EDIT:
new player_b_teleport[33]
new originss[33][3]
To mam dodać do tablic?

Użytkownik slowly edytował ten post 27.08.2010 10:11


#11 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 27.08.2010 10:17

public RoundStart(){
set_task(1.0, "set_tp", 9182)
for (new i=0; i < 33; i++){


Przed pętlą. ;F Poczytaj poradników, bo nawet nie wiesz co to pętla. ;/

#12 slowly

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 14
Początkujący

  • Postów:270
  • Steam:steam
  • Lokalizacja:Warszawa
Offline

Napisano 27.08.2010 10:21

A jak zmienić, aby na nożu było z IN_RELOAD...?

#13 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 27.08.2010 12:01

Na moje musisz przerobić i wywołać funkcje z prethinka. ;F Przestań mi spamować na PW.

#14 slowly

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 14
Początkujący

  • Postów:270
  • Steam:steam
  • Lokalizacja:Warszawa
Offline

Napisano 27.08.2010 12:26

Spamowaniem nazywasz wysłaniem 2 wiadomości? <lol2> Po drugie skorzystałem z kodu ortęgi:
if(player_class[id] == Nekromanta && on_knife[id] && (button2 & IN_RELOAD) && is_user_alive(id)) 
	{
        if(player_teleported[id])
                hudmsg(id,2.0,"Teleportu na respa mozesz uzyc tylko raz na runde!")
        else
        {
                player_teleported[id] = true;
                set_task( 0.5, "Tspawn", id+TASK_TELEPORT);
        }
	}
public Tspawn( id ) {
        new client = id - TASK_TELEPORT;
        
        new CsTeams:iTeam;
        iTeam = cs_get_user_team( client );
        
        new iSpawnOrigin[3];
        new Float:fSpawnAngle[3];
        
        new ent;
        ent = -1;
        
        switch( iTeam ) {
                case CS_TEAM_T:
                {
                        while( ( ent = find_ent_by_class( ent, "info_player_deathmatch" ) ) != 0 ) {
                                if( !pev_valid( ent ) )
                                        break;
                        }
                        get_user_origin( ent, iSpawnOrigin );
                }
                case CS_TEAM_CT:
                {
                        while( ( ent = find_ent_by_class( ent, "info_player_start" ) ) != 0 ) {
                                if( !pev_valid( ent ) )
                                        break;
                        }
                        get_user_origin( ent, iSpawnOrigin );
                }
                case CS_TEAM_SPECTATOR:
                {
                        return;
                }
        }
        
        if( !is_user_alive( client ) )
                return;
        
        new Float:fSpawnOrigin[3];
        fSpawnOrigin[0] = iSpawnOrigin[0] + 0.0;
        fSpawnOrigin[1] = iSpawnOrigin[1] + 0.0;
        fSpawnOrigin[2] = iSpawnOrigin[2] + 0.0;        
        
        entity_set_vector( client, EV_VEC_origin, fSpawnOrigin );
        entity_set_int( client, EV_INT_fixangle, 1 );
        entity_set_vector( client, EV_VEC_angles, fSpawnAngle );
        
        hudmsg(id,2.0,"Teleportowales sie na resp");
        
        TeleportMSG( client );
        
}

TeleportMSG( client ) {
        new fNewSpawnOrigin[3];
        get_user_origin( client, fNewSpawnOrigin, 2 );
        
        message_begin( MSG_BROADCAST, SVC_TEMPENTITY, { 0, 0, 0 }, client ) 
        write_byte( TE_TELEPORT ) 
        write_coord( fNewSpawnOrigin[0] ) 
        write_coord( fNewSpawnOrigin[1] ) 
        write_coord( fNewSpawnOrigin[2] )
        message_end( )
        
}
Dodałem nową zmienną:
new player_teleported[33]
Oraz do public roundstart():
player_teleported[i] = false
I nie działa mi to :/ Gdy chce użyć teleportu cały czas wyskakuje mi informacja
"Teleportu możesz użyć raz na runde!" Nie wiecie czemu tak jest?

Użytkownik slowly edytował ten post 27.08.2010 12:34


#15 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 27.08.2010 12:43

Bo nie dodałeś funkcje player_teleported[d] = false? ; /

Po drugie mój kod działa.. ;F

#16 slowly

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 14
Początkujący

  • Postów:270
  • Steam:steam
  • Lokalizacja:Warszawa
Offline

Napisano 27.08.2010 13:08

Powiedz gdzie i co mam dodać?!...
@@EDIT:
Chyba jednak skorzystam z kodu Screeaam'a. Powiedźcie mi tylko jak zmienić tą funkcję aby było można jej używać na nóż + R

Użytkownik slowly edytował ten post 27.08.2010 14:46


#17 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 27.08.2010 16:23

        if(player_class[id] == TwojaKlasa && on_knife[id] && (button2 & IN_RELOAD) && player_b_teleport[id] > 0) 
{
make_tele(id)
}



I z check_magic wyrzuć tamten wpis. Nie wie czy to pójdzie

public make_tele(id)
{
if (used_item[id])
{
hudmsg(id,2.0,"Teleportu mozesz uzyc raz na runde!")
return PLUGIN_CONTINUE
}
set_user_origin(id, originss[id])

return PLUGIN_CONTINUE
}


Btw. Teraz możesz usunąć zmienną i teleport przypisać tylko klasie.

Użytkownik Screeaam... edytował ten post 28.08.2010 01:07


#18 false

    Wszechmogący

  • Użytkownik

Reputacja: 53
Pomocny

  • Postów:652
  • Lokalizacja:z Polski
Offline

Napisano 28.08.2010 11:44

Screama działa tylko wystarczą podstawy i mÓsk to bedzie dzialac -.-

+4you screeeam.
  • +
  • -
  • 0

#19 slowly

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 14
Początkujący

  • Postów:270
  • Steam:steam
  • Lokalizacja:Warszawa
Offline

Napisano 28.08.2010 11:48

Screeaam ten kod, co podałeś jako drugi działa, ale jest jeden problem. Gdy chce się teleportować ląduję gdzieś w teksturach zamiast na respie. Proszę o pomoc.

Użytkownik slowly edytował ten post 28.08.2010 21:20


#20 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 29.08.2010 14:51

public set_tp()
{
for(new i=0;i<33;i++)
{
if(!is_user_connected(i) && player_class[i] != Twoja_klasa || !is_user_connected(i) && player_b_teleport[i] != 1)
continue

get_user_origin(i, originss[i], 0)
originss[i][2] += 50 // +50 jest odpowiedzialne za to, aby nie wylecieć w tekstury, możesz tym "po manipulować"
}
}





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

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