←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

2 funkcje.

  • +
  • -
ELOS - zdjęcie ELOS 15.10.2011

Kolejny problem napotkany na mojej drodze : P

Poszukuje 2 funkcji.

Piorun - wali tylko w 1 przeciwnika na którego nacelowaliśmy i który jest xxx od nas (nie wali przez ściany)

Hight Jump - nie chodzi mi o gravitacje tylko np w pokemon chyba któryś z pokemonów miał wyższy skok to coś w tym stylu.


Aha no i jeszcze 1 pytanie.

W
zdrowie_gracza[id] = 100.0+zyciep[id]*10;
oraz
grawitacja_gracza[id] = 1.0-grawitacjap[id]*0.2;
wywala mi błąd tag mismatch pomimo że działa.
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 15.10.2011

Co do HightJump'a spróbuj tak:

#include <amxmodx>
#include <fakemeta>

new g_bJump[33] = false;

public plugin_init() {
register_forward(FM_PlayerPreThink, "fwd_PreThink")
}

public fwd_PreThink(id)
{
new iButtons = pev(id, pev_button)
new iOldButtons = pev(id, pev_oldbuttons)
new iFlags = pev(id, pev_flags)

if((iButtons & IN_JUMP) && !(iOldButtons & IN_JUMP) && (iFlags & FL_ONGROUND))
g_bJump[id] = true

if(!(iFlags & FL_ONGROUND) && g_bJump[id])
{
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)

fVelocity[2] *= 2.0

set_pev(id, pev_velocity, fVelocity)
g_bJump[id] = false
}

return FMRES_IGNORED
}


Co do tych zmiennych, podaj ich typ.
Użytkownik MarWit edytował ten post 15.10.2011 09:44
Odpowiedz

  • +
  • -
speedkill - zdjęcie speedkill 15.10.2011

W
zdrowie_gracza[id] = 100.0+zyciep[id]*10;

oraz
grawitacja_gracza[id] = 1.0-grawitacjap[id]*0.2;

wywala mi błąd tag mismatch pomimo że działa.
Dodaj + przed znakiem = ;) powinno nie być błędu
Odpowiedz

  • +
  • -
ELOS - zdjęcie ELOS 15.10.2011

Co do HightJump'a spróbuj tak:


#include <amxmodx>
#include <fakemeta>

new g_bJump[33] = false;

public plugin_init() {
register_forward(FM_PlayerPreThink, "fwd_PreThink")
}

public fwd_PreThink(id)
{
new iButtons = pev(id, pev_button)
new iOldButtons = pev(id, pev_oldbuttons)
new iFlags = pev(id, pev_flags)

if((iButtons & IN_JUMP) && !(iOldButtons & IN_JUMP) && (iFlags & FL_ONGROUND))
g_bJump[id] = true

if(!(iFlags & FL_ONGROUND) && g_bJump[id])
{
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)

fVelocity[2] *= 2.0

set_pev(id, pev_velocity, fVelocity)
g_bJump[id] = false
}

return FMRES_IGNORED
}

A jak z tego kodu zrobić że po użyciu tak skacze (automatycznie np jak wpiszemy /jump)
Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 15.10.2011

@SpeedKill, akurat on chce nadać wartość, a nie dodać. Tag Mismatch jest wywalany jak do jednego typu zmiennej ( np. int ) chcemy nadać wartość o innym typie ( np. float ). :)

@Up


#include <amxmodx>
#include <fakemeta>

new g_bJump[33] = false;
new g_bHasHightJump[33] = false;

public plugin_init() {
register_forward(FM_PlayerPreThink, "fwd_PreThink")
register_clcmd("say /jump", "cmdJump")
}

public cmdJump(id)
g_bHasHightJump[id] = !g_bHasHightJump[id]

public fwd_PreThink(id)
{
if(!g_bHasHightJump[id])
return FMRES_IGNORED

new iButtons = pev(id, pev_button)
new iOldButtons = pev(id, pev_oldbuttons)
new iFlags = pev(id, pev_flags)

if((iButtons & IN_JUMP) && !(iOldButtons & IN_JUMP) && (iFlags & FL_ONGROUND))
g_bJump[id] = true

if(!(iFlags & FL_ONGROUND) && g_bJump[id])
{
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)

fVelocity[2] *= 2.0

set_pev(id, pev_velocity, fVelocity)
g_bJump[id] = false
}

return FMRES_IGNORED
}

Użytkownik MarWit edytował ten post 15.10.2011 09:50
Odpowiedz

  • +
  • -
ELOS - zdjęcie ELOS 15.10.2011

W
zdrowie_gracza[id] = 100.0+zyciep[id]*10;
 
oraz
grawitacja_gracza[id] = 1.0-grawitacjap[id]*0.2;
 
wywala mi błąd tag mismatch pomimo że działa.
Dodaj + przed znakiem = ;) powinno nie być błędu

a z tym co zrobić ?



@SpeedKill, akurat on chce nadać wartość, a nie dodać. Tag Mismatch jest wywalany jak do jednego typu zmiennej ( np. int ) chcemy nadać wartość o innym typie ( np. float ). :)

@Up



#include <amxmodx>
#include <fakemeta>

new g_bJump[33] = false;
new g_bHasHightJump[33] = false;

public plugin_init() {
register_forward(FM_PlayerPreThink, "fwd_PreThink")
register_clcmd("say /jump", "cmdJump")
}

public cmdJump(id)
g_bHasHightJump[id] = !g_bHasHightJump[id]

public fwd_PreThink(id)
{
if(!g_bHasHightJump[id])
return FMRES_IGNORED

new iButtons = pev(id, pev_button)
new iOldButtons = pev(id, pev_oldbuttons)
new iFlags = pev(id, pev_flags)

if((iButtons & IN_JUMP) && !(iOldButtons & IN_JUMP) && (iFlags & FL_ONGROUND))
g_bJump[id] = true

if(!(iFlags & FL_ONGROUND) && g_bJump[id])
{
new Float:fVelocity[3]
pev(id, pev_velocity, fVelocity)

fVelocity[2] *= 2.0

set_pev(id, pev_velocity, fVelocity)
g_bJump[id] = false
}

return FMRES_IGNORED
}


A czy da się zrobić że po 1 skoku, skoki robią się normalne ?
Użytkownik ELOS edytował ten post 15.10.2011 10:12
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 15.10.2011

@ELOS, tym razem speedkill nie ma racji

łap poprawny kod


zdrowie_gracza[id] = floatround(100.0+zyciep[id]*10);


oraz
grawitacja_gracza[id] = floatround(1.0-grawitacjap[id]*0.2);
Odpowiedz

  • +
  • -
ELOS - zdjęcie ELOS 15.10.2011

Dzięki Nakupenda, A czy ktoś wie jak zrobić ten piorun ?
Edit:

zdrowie_gracza[id] = floatround(100.0+zyciep[id]*10);
oraz
grawitacja_gracza[id] = floatround(1.0-grawitacjap[id]*0.2);


są zbugowane mam 0 hp i latam
Użytkownik ELOS edytował ten post 15.10.2011 10:51
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 15.10.2011


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


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

new g_MaxPlayers;


new light;
new g_thunderbolt[ 33 ];

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

}

public plugin_init( ) {
register_forward( FM_PlayerPreThink, "fw_PlayerPreThink");
g_MaxPlayers = get_maxplayers( );

}

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

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


public MakeThunderBolt( client ) {
if( ( !is_user_alive( client ) ) || ( 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;
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, iVictimOrigin );
change_health( entPlayer, -80, 0, "world" );
g_thunderbolt[ client ]++;
}
}

}

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( )
}


wzuć funkcje do diablo i item/moc do klasy masz "g_item[id] = 1", "g_thunderbolt[ client ]" to jest ile razy może użyć (domyślnie 2) i dodaj w evencie newround "g_thunderbolt[client]=0" żeby resetowało

Nie mam sprite pioruna, z kodu się domyślisz jak się ma nazywać i gdzie być

zdrowie_gracza[id] = floatround(100.0+zyciep[id]*10);
oraz
grawitacja_gracza[id] = floatround(1.0-grawitacjap[id]*0.2);

są zbugowane mam 0 hp i latam
podaj cały kod, założyłem że jest niezaokraglone a tu chodzi o coś innego
Użytkownik Nakupenda. edytował ten post 15.10.2011 11:11
Odpowiedz

mierzwi - zdjęcie mierzwi 15.10.2011

może zdrowie_gracza[id] = floatround(100 + (zyciep[id] * 10)) ?
Odpowiedz

  • +
  • -
ELOS - zdjęcie ELOS 15.10.2011

może zdrowie_gracza[id] = floatround(100 + (zyciep[id] * 10)) ?

Nie działa.
Nakupenda dzięki za kod.
Edit: Ze zdrowia mi już nie wyskakuje taki kod dałem
zdrowie_gracza[id] = 100+zyciep[id]*10;

Edit2:
Jednak nie działa : P
To jest mój kod.

public Odrodzenie(id)
{
zdrowie_gracza[id] += zyciep[id]*10;
pancerz_gracza[id] = pancerzp[id]*20;
grawitacja_gracza[id] = 800-grawitacjap[id]*200;
//szybkosc_gracza[id] =
set_pev(id, pev_health, zdrowie_gracza[id]);
set_pev(id, pev_gravity, grawitacja_gracza[id]);
set_user_armor(id, pancerz_gracza[id])
if(butyp[id] == 4)
{
set_user_footsteps(id, 1);
}
else
if(butyp[id] < 4)
{
set_user_footsteps(id, 0);
}
DajBron(id)
}

Użytkownik ELOS edytował ten post 15.10.2011 11:52
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 15.10.2011

funfel, nie osmieszaj sie

Elos, ale ten kod jest zupełnie inny niż to co podałeś w pierwszym poście
Odpowiedz

  • +
  • -
ELOS - zdjęcie ELOS 15.10.2011

Bo teraz jest edytowany. teraz podałem cały kod w którym występują błędy.

Du masz jeszcze nowszy kod.

public Odrodzenie(id)
{
zdrowie_gracza[id] = STANDARDOWE_ZYCIE+zyciep[id]*10.0;
pancerz_gracza[id] = pancerzp[id]*20;
grawitacja_gracza[id] = STANDARDOWA_GRAWITACJA-grawitacjap[id]*0.2;
szybkosc_gracza[id] = STANDARDOWA_SZYBKOSC+butyp[id]*30;
set_pev(id, pev_health, zdrowie_gracza[id]);
set_pev(id, pev_gravity, grawitacja_gracza[id]);
set_user_armor(id, pancerz_gracza[id])
if(butyp[id] == 4)
{
set_user_footsteps(id, 1);
}
else
if(butyp[id] < 4)
{
set_user_footsteps(id, 0);
}
DajBron(id)
}

Użytkownik ELOS edytował ten post 15.10.2011 12:06
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 15.10.2011

zdrowie_gracza[id] = STANDARDOWE_ZYCIE+zyciep[id]*10;

gdzie STANDARDOWE_ZYCIE nie jest typu Float

oraz

new gravityy[33] //dodaj na gorze sma

gravityy[id] = floatround(grawitacjap[id]*0.2);
grawitacja_gracza[id]= STANDARDOWA_GRAWITACJA-gravityy[id];

gdzie STANDARDOWA_GRAWITACJA nie jest typu Float
Użytkownik Nakupenda. edytował ten post 15.10.2011 12:11
Odpowiedz

  • +
  • -
ELOS - zdjęcie ELOS 15.10.2011

Nadal te same błedy : P może zamiast funkcji set pev użyjemy jakieś innej gdzie będzie można podać liczbę całkowitą 800 bo gdy są całkowite to nie wywala błędu.
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 15.10.2011

o bosh, już wiem gdzie jest błąd :)

sprawdź czy grawitacja_gracza[id] i zdrowie_gracza[id] są Float :)

Muszą być Float, a nie int ;)
Odpowiedz

  • +
  • -
ELOS - zdjęcie ELOS 15.10.2011

Nie rozumiem.
Odpowiedz

mierzwi - zdjęcie mierzwi 15.10.2011

daj coś takiego
set_pev(id, pev_health, float(zdrowie_gracza[id]));




@Nakupenda - można próbować różnymi sposobami, czasem zadziała, czasem nie, ale Ty wiesz wszystko najlepiej...
Odpowiedz

  • +
  • -
ELOS - zdjęcie ELOS 15.10.2011

Co do pioruna może ktoś dać zwykły kod który nie będzie musiał być mieszany z diablo.
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 15.10.2011

to jest zwykły kod który zupełnie nie wymaga diablo, wystarczy że na górze sma dasz new g_item[33] = 1

@Nakupenda - można próbować różnymi sposobami, czasem zadziała, czasem nie, ale Ty wiesz wszystko najlepiej...

co innego próbować różnymi sposobami a co innego pisać takie bzdury

@ELOS sprawdź czy masz

new Float:grawitacja_gracza[33];
new Float:zdrowie_gracza[33];


a jak nie to zamień na to :)
Użytkownik Nakupenda. edytował ten post 15.10.2011 20:55
Odpowiedz