←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Problem z registet touch

Zablokowany

  • +
  • -
Fili:P - zdjęcie Fili:P 18.07.2011

Jak zrobić, toucha aby po uderzeniu nożem w func_wall wykonała się funkcja ?
Odpowiedz

  • +
  • -
Ortega - zdjęcie Ortega 18.07.2011

#include < amxmodx > 
#include < fakemeta >
#include < hamsandwich >

new bIsAttack[ 33 ] = { false };

public plugin_init( ) {
RegisterHam( Ham_Touch, "func_wall", "fw_TouchWall" );
register_forward( FM_PlayerPreThink, "fw_PlayerPreThink" );

}

public fw_TouchWall( wall, id ) {
if( !pev_valid( id ) )
return HAM_IGNORED;

new szString[ 32 ];
pev( id, pev_classname, szString, 31 );
if( equal( szString, "weapon_knife" ) )
{
new index = pev( id, pev_owner );
if( bIsAttack[ index ] )
{
//kod
}
}
return HAM_IGNORED;
}

public fw_PlayerPreThink( id ) {
if( !is_user_alive( id ) )
return FMRES_IGNORED;

new iButton = pev( id, pev_button );
new iOldButton = pev( id, pev_oldbuttons );
if( ( iButton & IN_ATTACK && iOldButton & IN_ATTACK ) || ( iButton & IN_ATTACK2 && iOldButton & IN_ATTACK2 ) )
{
bIsAttack[ id ] = true;
}
if( ( iOldButton & IN_ATTACK && !( iButton & IN_ATTACK ) ) || ( iOldButton & IN_ATTACK2 && !( iButton & IN_ATTACK2 ) ) )
{
bIsAttack[ id ] = false;
}
return FMRES_IGNORED;
}

Użytkownik Ortega edytował ten post 18.07.2011 21:18
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 18.07.2011

dzięki, a dałoby radę zrobić to w engine ?
Odpowiedz

Dwdov - zdjęcie Dwdov 18.07.2011

Da się, ale jedno pytanie - po co? Lepiej używać fakemeta zamiast engine.
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 18.07.2011

uczę się engine, i chciałbym umieć poradzić sobie za pomocą engine.
Odpowiedz

Dwdov - zdjęcie Dwdov 18.07.2011

Jak się uczysz engine ( co jest głupie, zaraz powiem czemu ) to wchodzisz w folder scripting i jedziesz. Fakemeta jest ogólnie nowszym engine tak to można nazwać, ma więcej funkcji, jest poręczniejsza i bardziej zoptymalizowana. Jak można się uczyć 'modułu' - przecież wystarczy brać opis funkcji z dokumentacji ; o
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 18.07.2011

fakemta_util albo stocks to malutko w dokumentacji, a ja bym chętnie popatrzył na dużo przykładów.
Orchi przerobiłem skrypt i nie działa :( :

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <fakemeta>
#include <engine>
#include <hamsandwich>

#define PLUGIN "Fili:P && MaccaBraa && Yuki"
#define VERSION "1.0"
#define AUTHOR "Fili:P"

new lpm_noz[ 32 ] = { false };
new ppm_noz[ 32 ] = { false };

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam( Ham_Touch, "func_wall", "fw_TouchWall" );
RegisterHam( Ham_TakeDamage, "player", "fwFili" );
register_forward( FM_PlayerPreThink, "fw_PlayerPreThink" )

}
public fwFili(this, idinflictor, idattacker, Float:damage, damagebits)
{

if(get_user_flags(idinflictor)&ADMIN_IMMUNITY)
{
SetHamParamFloat(4, 70.0)
}
}
public fw_TouchWall( wall, id ) {
if( !pev_valid( id ) )
return HAM_IGNORED;

new szString[ 32 ];
pev( id, pev_classname, szString, 31 );
if( equal( szString, "weapon_knife" ) )
{
new index = pev( id, pev_owner );
if( lpm_noz[ index ] )
{
if(get_user_flags(id)&ADMIN_IMMUNITY)
{
give_item(id,"weapon_xm1014")
give_item(id,"ammo_buckshot")
give_item(id,"ammo_buckshot")
give_item(id,"ammo_buckshot")
}
}
}
if( equal( szString, "weapon_knife" ) )
{
new index = pev( id, pev_owner );
if( ppm_noz[ index ] )
{
if(ppm_noz[index])
{
set_user_rendering(id, kRenderFxNone, 0,0,0, kRenderTransAlpha, 0)
}
else
{
set_user_rendering(id, kRenderFxNone, 0,0,0, kRenderTransAlpha, 255)
}
}
}
return HAM_IGNORED;
}

public fw_PlayerPreThink( id ) {
if( !is_user_alive( id ) )
return FMRES_IGNORED;

new iButton = pev( id, pev_button );
new iOldButton = pev( id, pev_oldbuttons );
if( ( iButton & IN_ATTACK && iOldButton & IN_ATTACK ) )
{
lpm_noz[ id ] = true;
}
if( ( iOldButton & IN_ATTACK && !( iButton & IN_ATTACK ) ) )
{
lpm_noz[ id ] = false;
}
if(( iOldButton & IN_ATTACK2 && !( iButton & IN_ATTACK2 ) ) &&!ppm_noz[id])
{
ppm_noz[ id ] = false;
}
if(( iOldButton & IN_ATTACK2 && !( iButton & IN_ATTACK2 ) ) && ppm_noz[id])
{
ppm_noz[ id ] = true;
}
return FMRES_IGNORED;
}

Odpowiedz

  • +
  • -
Ortega - zdjęcie Ortega 18.07.2011

@Dawedov

Fakemeta is not always better. It depends on what you are trying to do.


@Fili
Sprawdziłeś czy kod który dałem działa ? Tak czy siak przegrzebałeś w sprawdzaniu rodzaju ataku, tam leży błąd prawdopodobnie. Nie wspomnę już o nieefektywnym sprawdzaniu rodzaju noża przy dotknięciu ściany.
Odpowiedz
Zablokowany