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

Piorun


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

#1 Weed

    Zaawansowany

  • Użytkownik

Reputacja: 13
Początkujący

  • Postów:108
  • Imię:Ganjor
  • Lokalizacja:Holandia
Offline

Napisano 08.10.2010 21:32

Witam, mam problem... gdy robie tak jak napisal Ortega w tym temacie: Piorun - Nieoficjalny polski support AMX Mod X to wywala mi serwer;/ ma ktos jakis inny kod?:)



Z gory thx...
  • +
  • -
  • 0

Dołączona grafika


#2 Ortega

    mów mi Orti

  • Power User

Reputacja: 363
Wszechpomocny

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

Napisano 08.10.2010 22:03

Nie testowałem go, ale wydawał mi się dobrze napisany. Po pierwsze czy masz odpowiedni plik sprite, po drugie jeśli dźwięk nie jest standardowym dźwiękiem z HL to musisz zrobić jego precache. Jeśli nie ustawiłeś swojej zmiennej g_item odpowiednio to nie ma prawa nawet zadziałać. Ewentualnie może coś pochrzaniłem z funkcją change_health z diablo moda, bo dokładnie jej się nie przyglądałem. No i tak apropos to przydały by się logi( bo podejrzewam, że to przez błędne precache ).
  • +
  • -
  • 0

#3 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

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

Napisano 08.10.2010 22:08

Ten sam problem. Gadałem z Weed i mamy to samo. Podaje swój:

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

new light;
new g_thunderbolt[ 33 ];
new piorun[33];

public plugin_precache( ) {
light = precache_model("sprites/piorunek.spr");

}

public plugin_init( ) {
register_forward( FM_PlayerPreThink, "fw_PlayerPreThink");

}

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

if ( ( get_user_button( client ) & IN_USE ) && piorun[client] == 1 )
{
MakeThunderBolt( client );
}
}

public MakeThunderBolt( client ) {
if( g_thunderbolt[ client ] == 2 )
return;

new iMakerOrigin[ 3 ], Float:iMakeOriginSe[3];
get_user_origin( client, iMakerOrigin );
for( new i = 0; i < 3; i++ ){
iMakeOriginSe[i] = float( iMakerOrigin[i] );
}

new entPlayer;
entPlayer = -1;

while( ( entPlayer = find_ent_in_sphere( client, iMakeOriginSe, 550.0 ) ) != 0 )
{
new iVictimOrigin[ 3 ];
get_user_origin( entPlayer, iVictimOrigin );
change_health( entPlayer, -80, client, "world" );
CreateBolt( entPlayer, iMakerOrigin, iVictimOrigin );
g_thunderbolt[ client ]++;
}

}

CreateBolt( iPlayer, iMaker[3], iVictim[3] ) {
message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte( 0 )
write_coord( iMaker[ 0 ] )
write_coord( iMaker[ 1 ] )
write_coord( iMaker[ 2 ] )
write_coord( iVictim[ 0 ] )
write_coord( iVictim[ 1 ] )
write_coord( iVictim[ 2 ] )
write_short( light )
write_byte( 1 )
write_byte( 5 )
write_byte( 2 )
write_byte( 20 )
write_byte( 30 )
write_byte( 255 )
write_byte( 255 )
write_byte( 255 )
write_byte( 200 )
write_byte( 200 )
message_end( )
}


Jak widać wszystko ok, wywaliłem tylko dźwięk, logi czyste.

Jak wcisnę na przeciwniku E na nożu crashuje serwer.

#4 Ortega

    mów mi Orti

  • Power User

Reputacja: 363
Wszechpomocny

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

Napisano 08.10.2010 22:29

if( !is_user_alive( client ) )
return;

na
if( !is_user_alive( client ) )
return PLUGIN_CONTINUE;


new entPlayer;
entPlayer = -1;

while( ( entPlayer = find_ent_in_sphere( client, iMakeOriginSe, 550.0 ) ) != 0 )
{
new iVictimOrigin[ 3 ];
get_user_origin( entPlayer, iVictimOrigin );
change_health( entPlayer, -80, client, "world" );
CreateBolt( entPlayer, iMakerOrigin, iVictimOrigin );
g_thunderbolt[ client ]++;
}


na

new entPlayer;
entPlayer = -1;
new iVictimOrigin[ 3 ];

while( ( entPlayer = find_ent_in_sphere( client, iMakeOriginSe, 550.0 ) ) != 0 )
{
if( IsPlayer( entPlayer ) && entPlayer != client )
{
get_user_origin( entPlayer, iVictimOrigin );
CreateBolt( entPlayer, iMakerOrigin, iVictimOrigin );
change_health( entPlayer, -80, 0, "world" );
g_thunderbolt[ client ]++;
}
}


public MakeThunderBolt( client ) {
if( g_thunderbolt[ client ] == 2 )
return;

na

public MakeThunderBolt( client ) {
if( ( !is_user_alive( client ) ) || ( g_thunderbolt[ client ] == 2 ) )
return;


dodaj
#define IsPlayer(%1) (1 <= %1 <= g_MaxPlayers)

new g_MaxPlayers;

w plugin_init
g_MaxPlayers = get_maxplayers( );

Użytkownik Ortega edytował ten post 08.10.2010 22:43

  • +
  • -
  • 3

#5 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

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

Napisano 08.10.2010 22:31

Ortega, wystarczy zmienić:

change_health( entPlayer, -80, client, "world" );


na

change_health( entPlayer, -80, 0, "world" );


I crash'a nie ma. :D

Tylko sprite nie mam. :/ Testowałem na laserbeam.

Użytkownik Screeaam... edytował ten post 08.10.2010 22:34


#6 Ortega

    mów mi Orti

  • Power User

Reputacja: 363
Wszechpomocny

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

Napisano 08.10.2010 22:37

Mimo wszystko zalecam optymalizacje albo przynajmniej wyrzucenie tworzenia tablicy przed pętlę while ;) Tak czułem, że to wina tej funkcji, bo mogłem zastosować zwykłą ale, że pokusiłem się na mniej kodu taką z diablo to wyszło tak, a nie inaczej.
  • +
  • -
  • 1

#7 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

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

Napisano 08.10.2010 22:47

To jutro zrobie to co opisałeś.

A może ma ktoś sprite lghtning.spr? Albo czy tego sprite da się zrobić, żeby bił z góry, a nie od gracza który tego używa?

#8 Ortega

    mów mi Orti

  • Power User

Reputacja: 363
Wszechpomocny

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

Napisano 08.10.2010 22:54

CreateBolt( entPlayer, iVictimOrigin );



CreateBolt( iPlayer, iVictim[3] ) {
message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte( 0 )
write_coord( iVictim[ 0 ] ) //x
write_coord( iVictim[ 1 ] ) //y
write_coord( iVictim[ 2 ] ) //z
write_coord( iVictim[ 0 ] )
write_coord( iVictim[ 1 ] )
write_coord( iVictim[ 2 ] )
write_short( light )
write_byte( 1 )
write_byte( 5 )
write_byte( 2 )
write_byte( 20 )
write_byte( 30 )
write_byte( 255 )
write_byte( 255 )
write_byte( 255 )
write_byte( 200 )
write_byte( 200 )
message_end( )
}

I dowolnie ustalasz wektory od gracza w który ma uderzyć ;)
Sprite możesz wziąć, z ZP albo War3, bo były na pewno.
  • +
  • -
  • 1

#9 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

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

Napisano 08.10.2010 23:04

DELETED.

Dodano 09 październik 2010 - 21:08:
Teraz to już mi crashuje serwer. Po pierwsze można użyć ile razy się chce i nawet na M4 a jak odejde za daleko i wcisne E to crashuje serwer.

public fw_PlayerPreThink( client ) {
if( !is_user_alive( client ) )
return PLUGIN_CONTINUE;

if ( ( get_user_button( client ) & IN_USE ) && piorunek[client] == 1 )
{
MakeThunderBolt( client );
}

return PLUGIN_CONTINUE;
}

public MakeThunderBolt( client ) {
if( ( !is_user_alive( client ) ) || ( g_thunderbolt[ client ] == 17 ) )
return;

new iMakerOrigin[ 3 ], Float:iMakeOriginSe[3];
get_user_origin( client, iMakerOrigin );
for( new i = 0; i < 3; i++ ){
iMakeOriginSe[i] = float( iMakerOrigin[i] );
}

new entPlayer;
entPlayer = -1;
new iVictimOrigin[ 3 ];

while( ( entPlayer = find_ent_in_sphere( client, iMakeOriginSe, 550.0 ) ) != 0 )
{
if( IsPlayer( entPlayer ) && entPlayer != client )
{
get_user_origin( entPlayer, iVictimOrigin );
CreateBolt( iVictimOrigin );
change_health( entPlayer, -80, 0, "world" );
g_thunderbolt[ client ]++;
}
}


}

CreateBolt( iVictim[3] ) {
message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte( 0 )
write_coord( iVictim[ 0 ] )
write_coord( iVictim[ 1 ] )
write_coord( iVictim[ 2 ] + 700)
write_coord( iVictim[ 0 ] )
write_coord( iVictim[ 1 ] )
write_coord( iVictim[ 2 ] )
write_short( light )
write_byte( 1 )
write_byte( 5 )
write_byte( 2 )
write_byte( 20 )
write_byte( 30 )
write_byte( 255 )
write_byte( 255 )
write_byte( 255 )
write_byte( 200 )
write_byte( 200 )
message_end( )
}


Dodano 10 październik 2010 - 19:06:
Może ktoś to lepiej zrobić? Bo niestety nie działa... Stara wersja tylko raz razi a potem crashuje.

Użytkownik Screeaam... edytował ten post 09.10.2010 21:08





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

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