|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
Half-Life, func_healthcharger, func_recharge
|
|
Vladimirok | Дата: Четверг, 28.05.2009, 01:11:42 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| В Half-Life на картах есть настенные аптечки и зарядка для костюма: func_healthcharger entity и func_recharge entity. Незнаю как отловить нажатие игрока на клавишу использовать (по умолчанию "Е") в момент зарядки и погасить эту аптечку. Может вы подобное видели в моде OZ. Только мод подаеться в dll-ке и исходный код не посмотреть. Хочеться такое реализовать. Спасибо.
|
|
| |
PAHANCS | Дата: Четверг, 28.05.2009, 02:05:27 | Сообщение # 2 |
Полковник
Группа: Пользователи
Сообщений: 183
Статус: Не в сети
| Quote (Vladimirok) погасить эту аптечку Вообще удалить или опусташить ?
PAHANCS
|
|
| |
Vladimirok | Дата: Четверг, 28.05.2009, 02:20:31 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| Опустошить. Игрок подбегает к аптечке, использует и ему сразу например +50hp и аптечка пустая. Спасибо.
|
|
| |
PAHANCS | Дата: Четверг, 28.05.2009, 02:28:32 | Сообщение # 4 |
Полковник
Группа: Пользователи
Сообщений: 183
Статус: Не в сети
| Вот какраз те моменты : Code #include amxmodx #include hamsandwich
public plugin_init() { RegisterHam(Ham_Use, "func_healthcharger", "healthcharger_use") RegisterHam(Ham_Use, "func_recharge", "recharge_use") register_plugin("No Health End Armor Changer", "PahanCS", "1.0") }
public healthcharger_use(this, idcaller, idactivator, use_type, Float:value) { server_print("{[healthcharger_use] this: %i || idactivator: %i }",this,idactivator) return HAM_IGNORED }
public recharge_use(this, idcaller, idactivator, use_type, Float:value) { server_print("{[recharge_use] this: %i || idactivator: %i }",this,idactivator) return HAM_IGNORED }
Добавлено (2009-05-28, 2:28 Am) --------------------------------------------- Ток проблема в том, что два случая происходит за одно нажатие (+use и -use)
PAHANCS
Сообщение отредактировал PAHANCS - Четверг, 28.05.2009, 04:49:47 |
|
| |
Vladimirok | Дата: Четверг, 28.05.2009, 02:39:00 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| Большое спасибо! Как путушить опустушить аптечку, что нужно в pev(..) записать? Параметров незнаю
|
|
| |
PAHANCS | Дата: Четверг, 28.05.2009, 03:10:41 | Сообщение # 6 |
Полковник
Группа: Пользователи
Сообщений: 183
Статус: Не в сети
| Сейчас что нибуть попробую Добавлено (2009-05-28, 3:10 Am) --------------------------------------------- Просто заблокировать легче: Code #include amxmodx #include hamsandwich
public plugin_init() { RegisterHam(Ham_Use, "func_healthcharger", "healthcharger_use") RegisterHam(Ham_Use, "func_recharge", "recharge_use") register_plugin("No Health End Armor Changer", "PahanCS", "1.0") }
public healthcharger_use(this, idcaller, idactivator, use_type, Float:value) { return HAM_SUPERCEDE }
public recharge_use(this, idcaller, idactivator, use_type, Float:value) { return HAM_SUPERCEDE }
PAHANCS
Сообщение отредактировал PAHANCS - Четверг, 28.05.2009, 05:03:35 |
|
| |
Vladimirok | Дата: Четверг, 28.05.2009, 03:29:14 | Сообщение # 7 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| Что за тип данных такой Edict? Вот что нарыл, сейчас перебераю все значения: // pev types // based on engine_const.inc enums /* Int */ gamestate oldbuttons groupinfo iuser1 iuser2 iuser3 iuser4 weaponanim pushmsec bInDuck flTimeStepSound flSwimTime flDuckTime i StepLeft movetype solid skin body effects light_level sequence gaitsequence modelindex playerclass waterlevel watertype spawnfl ags flags colormap team fixangle weapons rendermode renderfx button impulse deadflag /* Float */ impacttime starttime idealpitch pitch_speed ideal_yaw yaw_speed ltime nextthink gravity friction frame animtime framerate hea lth frags takedamage max_health teleport_time armortype armorvalue dmg_take dmg_save dmg dmgtime speed air_finished pain_finish ed radsuit_finished scale renderamt maxspeed fov flFallVelocity fuser1 fuser2 fuser3 fuser4 /* Vector */ origin oldorigin velocity basevelocity clbasevelocity movedir angles avelocity punchangle v_angle endpos startpos absmin absm ax mins maxs size rendercolor view_ofs vuser1 vuser2 vuser3 vuser4 /* Edict */ chain dmg_inflictor enemy aiment owner groundentity pContainingEntity euser1 euser2 euser3 euser4 /* String */ classname globalname model target targetname netname message noise noise1 noise2 noise3 viewmodel weaponmodel /* Byte */ controller1 controller2 controller3 controller4 blending1 blending2 Из типа Integer ничего не изменилось
Сообщение отредактировал Vladimirok - Четверг, 28.05.2009, 03:32:27 |
|
| |
PAHANCS | Дата: Четверг, 28.05.2009, 03:47:55 | Сообщение # 8 |
Полковник
Группа: Пользователи
Сообщений: 183
Статус: Не в сети
| Помоему их смотреть не надо, они используются для pev_* ( пример: set_pev(id, pev_health, float(100) ) Файл fakemeta_const.inc Code
enum { pev_string_start = 0, pev_classname, pev_globalname, pev_model, pev_target, pev_targetname, pev_netname, pev_message, p ev_noise , pev _noise1, p ev_noise2, pev_noise3, pev_string_end, pev_edict_start, pev_chain, pev_dmg_inflictor, pev_enemy, pev_aime nt, p ev_own er, pe v_groundentity, pev_euser1, pev_euser2, pev_euser3, pev_euser4, pev_edict_end, pev_float_start, pev_impac ttime, p ev_ starttim e, pev_idealpitch, pev_ideal_yaw, pev_pitch_speed, pev_yaw_speed, pev_ltime, pev_nextthink, pev_gravity, p ev _frictio n, pev _frame, pev_animtime, pev_framerate, pev_scale, pev_renderamt, pev_health, pev_frags, pev_takedamage, p ev_ma x_health , pev_ teleport_time, pev_armortype, pev_armorvalue, pev_dmg_take, pev_dmg_save, pev_dmg, pev_dmgtime, pev_speed , p ev_air_f inished, pev_pain_finished, pev_radsuit_finished, pev_maxspeed, pev_fov, pev_flFallVelocity, pev_fuser1, p ev_ fuser2, p ev_fuser3, p ev_fuser4, pev_float_end, pev_int_start, pev_fixangle, pev_modelindex, pev_viewmodel, pev_weaponmodel, pe v_movet ype, p ev_sol id, pev_skin, pev_body, pev_effects, pev_light_level, pev_sequence, pev_gaitsequence, pev_rendermode, p ev_re nderfx, p ev_we apons, pev_deadflag, pev_button, pev_impulse, pev_spawnflags, pev_flags, pev_colormap, pev_team, pev _waterle vel, p ev_water type, pev_playerclass, pev_weaponanim, pev_pushmsec, pev_bInDuck, pev_flTimeStepSound, pev_flSwimTime, pe v_flDuc kTime, p ev_i StepLeft, pev_gamestate, pev_oldbuttons, pev_groupinfo, pev_iuser1, pev_iuser2, pev_iuser3, pev_iuser4, p ev_ int_end, pev_b yte_start, pev_controller_0, pev_controller_1, pev_controller_2, pev_controller_3, pev_blending_0, pev_blendin g_1, p ev_ byte_en d, pev_bytearray_start, pev_controller, pev_blending, pev_bytearray_end, pev_vecarray_start, pev_origin, p ev_old origin, pev_ velocity, pev_basevelocity, pev_clbasevelocity, pev_movedir, pev_angles, pev_avelocity, pev_v_angle, pev_ endpos, pev _startpo s, pev_absmin, pev_absmax, pev_mins, pev_maxs, pev_size, pev_rendercolor, pev_view_ofs, pev_vuser1, p ev_ vuser2, p ev_vuse r3, pev_vuser4, pev_punchangle, pev_vecarray_end, pev_string2_begin, /* anything after here are string corrections */ pev_weaponmodel2, pev_viewmodel2, pev_string2_end, pev_edict2_start, /* edict corrections */ pev_pContainingEntity, pev_absolute_end };
Точно незнаю. Добавлено (2009-05-28, 3:47 Am) --------------------------------------------- Ошибся. Файл engine.inc /* Sets/gets things in an entities Entvars Struct. */ native entity_get_int(iIndex, iKey); native entity_set_int(iIndex, iKey, iVal); native Float:entity_get_float(iIndex, iKey); native entity_set_float(iIndex, iKey, Float:iVal); native entity_get_vector(iIndex, iKey, Float:vRetVector[3]); native entity_set_vector(iIndex, iKey, const Float:vNewVector[3]); native entity_get_edict(iIndex, iKey); native entity_set_edict(iIndex, iKey, iNewIndex); native entity_get_string(iIndex, iKey, szReturn[], iRetLen); native entity_set_string(iIndex, iKey, const szNewVal[]); native entity_get_byte(iIndex, iKey); native entity_set_byte(iIndex, iKey, iVal); Пример: entity_set_float(id, EV_FL_health, float(100)) Файл engine_const.inc Code
/* Int */ enum { EV_INT_gamestate = 0, EV_INT_oldbuttons, EV_INT_groupinfo, EV_INT_iuser1, EV_INT_iuser2, EV_INT_iuser3, EV_INT_iuser4, EV_INT_weaponanim, E V_IN T_pushmsec, EV_INT_bInDuck, EV_INT_flTimeStepSound, EV_INT_flSwimTime, EV_INT_flDuckTime, EV_INT_iStepLeft, EV_INT_movetyp e, E V_INT_solid, EV_INT_skin, EV_INT_body, EV_INT_effects, EV_INT_light_level, EV_INT_sequence, EV_INT_gaitsequence, EV_INT _modeli ndex, EV_INT_playerclass, EV_INT_waterlevel, EV_INT_watertype, EV_INT_spawnflags, EV_INT_flags, EV_INT_colormap, EV_INT _team, E V_INT_fixangle, EV_INT_weapons, EV_INT_rendermode, EV_INT_renderfx, EV_INT_button, EV_INT_impulse, EV_INT_deadflag, };
/* Float */ enum { EV_FL_impacttime = 0, EV_FL_starttime, EV_FL_idealpitch, EV_FL_pitch_speed, EV_FL_ideal_yaw, EV_FL_yaw_speed, EV_FL_ltime, EV_FL_nextthink , EV_ FL_gravity, EV_FL_friction, EV_FL_frame, EV_FL_animtime, EV_FL_framerate, EV_FL_health, EV_FL_frags, EV_FL_takedamage, E V_FL _max_health, EV_FL_teleport_time, EV_FL_armortype, EV_FL_armorvalue, EV_FL_dmg_take, EV_FL_dmg_save, EV_FL_dmg, EV_FL_d mgtime, EV_FL_speed, EV_FL_air_finished, EV_FL_pain_finished, EV_FL_radsuit_finished, EV_FL_scale, EV_FL_renderamt, E V_FL_maxspeed, E V_FL_fov, EV_FL_flFallVelocity, EV_FL_fuser1, EV_FL_fuser2, EV_FL_fuser3, EV_FL_fuser4, };
/* Vector */ enum { EV_VEC_origin = 0, EV_VEC_oldorigin, EV_VEC_velocity, EV_VEC_basevelocity, EV_VEC_clbasevelocity, EV_VEC_movedir, EV_VEC_angles, EV_VEC _aveloc ity, EV_VEC_punchangle, EV_VEC_v_angle, EV_VEC_endpos, EV_VEC_startpos, EV_VEC_absmin, EV_VEC_absmax, EV_VEC_mins, E V_VEC_ma xs, EV_VEC_size, EV_VEC_rendercolor, EV_VEC_view_ofs, EV_VEC_vuser1, EV_VEC_vuser2, EV_VEC_vuser3, EV_VEC_vuser4, };
/* Edict */ enum { EV_ENT_chain = 0, EV_ENT_dmg_inflictor, EV_ENT_enemy, EV_ENT_aiment, EV_ENT_owner, EV_ENT_groundentity, EV_ENT_pContainingEntity, EV_E NT_euse r1, EV_ENT_euser2, EV_ENT_euser3, EV_ENT_euser4, };
/* String */ enum { EV_SZ_classname = 0, EV_SZ_globalname, EV_SZ_model, EV_SZ_target, EV_SZ_targetname, EV_SZ_netname, EV_SZ_message, EV_SZ_noise, EV_SZ_n oise1, E V_SZ_noise2, EV_SZ_noise3, EV_SZ_viewmodel, EV_SZ_weaponmodel, };
/* Byte */ enum { EV_BYTE_controller1 = 0, EV_BYTE_controller2, EV_BYTE_controller3, EV_BYTE_controller4, EV_BYTE_blending1, EV_BYTE_blending2, };
PAHANCS
Сообщение отредактировал PAHANCS - Четверг, 28.05.2009, 04:22:10 |
|
| |
Vladimirok | Дата: Четверг, 28.05.2009, 04:14:00 | Сообщение # 9 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| Где же это значение прячеться... Добавлено (2009-05-28, 4:14 Am) --------------------------------------------- Это из официального сайта Valve, только на C++ Code //------------------------------------------------------------- // Wall mounted health kit //------------------------------------------------------------- class CWallHealth : public CBaseToggle { public: void Spawn( ); void Precache( void ); void EXPORT Off(void); void EXPORT Recharge(void); void KeyValue( KeyValueData *pkvd ); void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); virtual int ObjectCaps( void ) { return (CBaseToggle :: ObjectCaps() | FCAP_CONTINUOUS_USE) & ~FCAP_ACROSS_TRANSITION; } virtual int Save( CSave &save ); virtual int Restore( CRestore &restore );
static TYPEDESCRIPTION m_SaveData[];
float m_flNextCharge; int m_iReactivate ; // DeathMatch Delay until reactvated int m_iJuice; int m_iOn; // 0 = off, 1 = startup, 2 = going float m_flSoundTime; };
TYPEDESCRIPTION CWallHealth::m_SaveData[] = { DEFINE_FIELD( CWallHealth, m_flNextCharge, FIELD_TIME), DEFINE_FIELD( CWallHealth, m_iReactivate, FIELD_INTEGER), DEFINE_FIELD( CWallHealth, m_iJuice, FIELD_INTEGER), DEFINE_FIELD( CWallHealth, m_iOn, FIELD_INTEGER), DEFINE_FIELD( CWallHealth, m_flSoundTime, FIELD_TIME), };
IMPLEMENT_SAVERESTORE( CWallHealth, CBaseEntity );
LINK_ENTITY_TO_CLASS(func_healthcharger, CWallHealth);
void CWallHealth::KeyValue( KeyValueData *pkvd ) { if ( FStrEq(pkvd->szKeyName, "style") || FStrEq(pkvd->szKeyName, "height") || FStrEq(pkvd->szKeyName, "value1") || FStrEq(pkvd->szKeyName, "value2") || FStrEq(pkvd->szKeyName, "value3")) { pkvd->fHandled = TRUE; } else if (FStrEq(pkvd->szKeyName, "dmdelay")) { m_iReactivate = atoi(pkvd->szValue); pkvd->fHandled = TRUE; } else CBaseToggle::KeyValue( pkvd ); }
void CWallHealth::Spawn() { Precache( );
pev->solid = SOLID_BSP; pev->movetype = MOVETYPE_PUSH;
UTIL_SetOrigin(pev, pev->origin); // set size and link into world UTIL_SetSize(pev, pev->mins, pev->maxs); SET_MODEL(ENT(pev), STRING(pev->model) ); m_iJuice = static_cast<int>(gSkillData.healthchargerCapacity); pev->frame = 0;
}
void CWallHealth::Precache() { PRECACHE_SOUND("items/medshot4.wav"); PRECACHE_SOUND("items/medshotno1.wav"); PRECACHE_SOUND("items/medcharge4.wav"); }
void CWallHealth::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { // Make sure that we have a caller if (!pActivator) return; // if it's not a player, ignore if ( !pActivator->IsPlayer() ) return;
// if there is no juice left, turn it off if (m_iJuice <= 0) { pev->frame = 1; Off(); }
// if the player doesn't have the suit, or there is no juice left, make the deny noise if ((m_iJuice <= 0) || (!(pActivator->pev->weapons & (1<<WEAPON_SUIT)))) { if (m_flSoundTime <= gpGlobals->time) { m_flSoundTime = gpGlobals->time + 0.62; EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/medshotno1.wav", 1.0, ATTN_NORM ); } return; }
pev->nextthink = pev->ltime + 0.25; SetThink(&CWallHealth::Off);
// Time to recharge yet?
if (m_flNextCharge >= gpGlobals->time) return;
// Play the on sound or the looping charging sound if (!m_iOn) { m_iOn++; EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/medshot4.wav", 1.0, ATTN_NORM ); m_flSoundTime = 0.56 + gpGlobals->time; } if ((m_iOn == 1) && (m_flSoundTime <= gpGlobals->time)) { m_iOn++; EMIT_SOUND(ENT(pev), CHAN_STATIC, "items/medcharge4.wav", 1.0, ATTN_NORM ); }
// charge the player if ( pActivator->TakeHealth( 1, DMG_GENERIC ) ) { m_iJuice--; }
// govern the rate of charge m_flNextCharge = gpGlobals->time + 0.1; }
void CWallHealth::Recharge(void) { EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/medshot4.wav", 1.0, ATTN_NORM ); m_iJuice = static_cast<int>(gSkillData.healthchargerCapacity); pev->frame = 0; SetThink( &CBaseEntity::SUB_DoNothing ); }
void CWallHealth::Off(void) { // Stop looping sound. if (m_iOn > 1) STOP_SOUND( ENT(pev), CHAN_STATIC, "items/medcharge4.wav" );
m_iOn = 0;
if ((!m_iJuice) && ( ( m_iReactivate = static_cast<int>(g_pGameRules->FlHealthChargerRechargeTime()) ) > 0) ) { pev->nextthink = pev->ltime + m_iReactivate; SetThink(&CWallHealth::Recharge); } else SetThink( &CBaseEntity::SUB_DoNothing ); }
Сообщение отредактировал Vladimirok - Четверг, 28.05.2009, 04:14:24 |
|
| |
PAHANCS | Дата: Четверг, 28.05.2009, 04:29:07 | Сообщение # 10 |
Полковник
Группа: Пользователи
Сообщений: 183
Статус: Не в сети
| Quote (Vladimirok) Где же это значение прячеться... Наверно в hl.dll, из HL1SDK Добавлено (2009-05-28, 4:29 Am) --------------------------------------------- Да, посмотрел, файлы healthkit.cpp h_battery.cpp
PAHANCS
|
|
| |
Vladimirok | Дата: Четверг, 28.05.2009, 04:42:14 | Сообщение # 11 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| Гугл не дал результатв :(, буду ждать, может кто то знает...
|
|
| |
PAHANCS | Дата: Четверг, 28.05.2009, 04:46:09 | Сообщение # 12 |
Полковник
Группа: Пользователи
Сообщений: 183
Статус: Не в сети
| Непойму, тебе что именно надо ?
PAHANCS
|
|
| |
Vladimirok | Дата: Четверг, 28.05.2009, 05:08:53 | Сообщение # 13 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| Нада опустошить аптечку, что бы она погасла, выключить ее, ну незнаю еще как выразиться. Так как будто все запасы закончелиль.
|
|
| |
PomanoB | Дата: Четверг, 28.05.2009, 16:35:01 | Сообщение # 14 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Попробуй pev_frame в 1 поставить
http://romanov4400.mybrute.com
|
|
| |
slogic | Дата: Четверг, 28.05.2009, 20:24:00 | Сообщение # 15 |
Генералиссимус
Группа: Админы
Сообщений: 1941
Статус: Не в сети
| pev_frame = 1 сделает лишь визуально изменения. Надо еще захукать Ham_Use для func_healthcharger и обнулять активатора, когда pev_frame = 1. Можно попробовать сделать объект несолдиным, может ничего не упадет Вообще тут вариантов куча, когда нельзя напрямую получиь доступ к m_iJuice. Еще дикий пример, в Ham_Use выставляете глобальный флаг, что игрок не игрок, а в Ham_IsPlayer используете этот флаг, и там же сбрасываете. Если флаг установлен, то Ham_IsPlayer веренет false, т.о. Use зарядки обломится (смотите исходный код void CRecharge::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) и принимайте решение, как его обмануть). с HS у вас супер неограниченные возможности. Раньше чтобы это сделать надо было обосраться мягко говоря.
|
|
| |
| AMX Mod X Russian Community © 2006-2025 | |
|
| |