Jak zrobić, toucha aby po uderzeniu nożem w func_wall wykonała się funkcja ?
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.
|
Guest Message by DevFuse
Problem z registet touch
Started By Fili:P, 18.07.2011 10:17
7 replies to this topic
#1
Posted 18.07.2011 10:17
#2
Posted 18.07.2011 11:37
#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;
}
Edited by Ortega, 18.07.2011 21:18.
#3
Posted 18.07.2011 13:05
dzięki, a dałoby radę zrobić to w engine ?
#4
Posted 18.07.2011 13:14
Da się, ale jedno pytanie - po co? Lepiej używać fakemeta zamiast engine.
Nie pomagam na PW, tylko na forum.
#5
Posted 18.07.2011 13:29
uczę się engine, i chciałbym umieć poradzić sobie za pomocą engine.
#6
Posted 18.07.2011 13:32
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
Nie pomagam na PW, tylko na forum.
#7
Posted 18.07.2011 13:35
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 :
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;
}
#8
Posted 18.07.2011 20:55
@Dawedov
@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.
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.
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users