Ham Sandwich: различия между версиями

Материал из HLDM Wiki
Перейти к навигации Перейти к поиску
(EnableHamForward)
(GetHamReturnStatus)
 
(не показано 13 промежуточных версий этого же участника)
Строка 3: Строка 3:
  
 
=== RegisterHam ===
 
=== RegisterHam ===
Hooks the virtual table for the specified entity class. Look at the Ham enum for parameter lists.
+
Отлавливает событие в игровом мире. Список событий очень большой, их описание можно посмотреть в константах Ham Sandwich. Функция возвращает идентификатор созданного форварда, который можно использовать в функциях EnableHamForward/DisableHamForward.
  
 
  native HamHook:RegisterHam(Ham:function, const EntityClass[], const Callback[], Post=0);
 
  native HamHook:RegisterHam(Ham:function, const EntityClass[], const Callback[], Post=0);
Строка 10: Строка 10:
 
|-
 
|-
 
| '''function'''
 
| '''function'''
| The function to hook
+
| Функция (событие). Например убийство.
 
|-
 
|-
 
| '''EntityClass'''
 
| '''EntityClass'''
| The entity classname to hook
+
| Класс объектов с которым происходит событие
 
|-
 
|-
 
| '''callback'''
 
| '''callback'''
| The forward to call
+
| Вызываемая функция
 
|-
 
|-
 
| '''post'''
 
| '''post'''
| Whether or not to forward this in post
+
| Функция будет вызвана До/Или после события.
 
|}
 
|}
  
Returns a handle to the forward.  Use EnableHamForward/DisableHamForward to toggle the forward on or
+
'''Пример:'''
  
'''Пример:'''
+
Будет вызвана функция player_hurt, перед тем как игрок получит повреждение.
  RegisterHam(Ham_TakeDamage, "player", "player_hurt");  
+
  RegisterHam(Ham_TakeDamage, "player", "player_hurt", 0);
  
 
=== RegisterHamFromEntity ===
 
=== RegisterHamFromEntity ===
  
Hooks the virtual table for the specified entity's class.
+
Отлавливает событие в игровом мире для определенного [[энтити-объекты|энтити-объекта]] или игрока.
  
 
  native HamHook:RegisterHamFromEntity(Ham:function, EntityId, const Callback[], Post=0);
 
  native HamHook:RegisterHamFromEntity(Ham:function, EntityId, const Callback[], Post=0);
Строка 36: Строка 36:
 
|-
 
|-
 
| '''function'''
 
| '''function'''
| The function to hook
+
| Событие для отлова
 
|-
 
|-
 
| '''EntityId'''
 
| '''EntityId'''
| The entity classname to hook
+
| id объекта
 
|-
 
|-
 
| '''callback'''
 
| '''callback'''
| The forward to call
+
| Функция, которая будет вызвана
 
|-
 
|-
 
| '''post'''
 
| '''post'''
| Whether or not to forward this in post
+
| Функция будет вызвана До/Или после события
 
|}
 
|}
  
Строка 51: Строка 51:
  
 
'''Пример:'''
 
'''Пример:'''
  RegisterHam(Ham_TakeDamage, id, "player_hurt");
+
  RegisterHam(Ham_TakeDamage, id, "player_hurt", 0);
  
 
=== DisableHamForward ===
 
=== DisableHamForward ===
Stops a ham forward from triggering. Use the return value from RegisterHam as the parameter here!
+
Запускает работу Ham форварда. Противоположность [[Ham_Sandwich#EnableHamForward|EnableHamForward]].
  
 
  native DisableHamForward(HamHook:fwd);
 
  native DisableHamForward(HamHook:fwd);
Строка 61: Строка 61:
 
|-
 
|-
 
| '''fwd'''
 
| '''fwd'''
| The forward to stop
+
| ID форварда для остановки.
 
|}
 
|}
  
Строка 108: Строка 108:
  
 
=== ExecuteHam ===
 
=== ExecuteHam ===
Executes the virtual function on the entity. Look at the Ham enum for parameter lists.
+
Выполняет виртуальную функцию на [[энтити-объекты|энтити-объекте]] или игроке. Смотрите список параметров.
  
 
  native ExecuteHam(Ham:function, this, any:...);
 
  native ExecuteHam(Ham:function, this, any:...);
Строка 115: Строка 115:
 
|-
 
|-
 
| '''function'''
 
| '''function'''
| The function to call.
+
| Функция из списка Ham_
 +
|-
 +
| '''this'''
 +
| id объекта к кому применяется функция
 
|-
 
|-
| '''id'''
+
| any:...
| The id of the entity to execute it on.
+
| Дополнительные параметры если есть
 
|}
 
|}
 +
 +
'''Пример:'''
 +
 +
Пример респавнит игрока.
 +
<pre>
 +
public plugin_init() {
 +
    register_clcmd("say /spawn","spawn");
 +
}
 +
public spawn(id){
 +
    ExecuteHam( Ham_CS_RoundRespawn, id );
 +
}
 +
</pre>
  
 
=== ExecuteHamB ===
 
=== ExecuteHamB ===
Executes the virtual function on the entity, this will trigger all hooks on that function. Be very careful about recursion! Look at the Ham enum for parameter lists.
+
Функция аналогична [[Ham_Sandwich#ExecuteHam|ExecuteHam]] за исключением того, что результат выполнения можно отловить.
  
 
  native ExecuteHamB(Ham:function, this, any:...);
 
  native ExecuteHamB(Ham:function, this, any:...);
Строка 129: Строка 144:
 
|-
 
|-
 
| '''function'''
 
| '''function'''
| The function to call
+
| Функция из списка Ham_*
 +
|-
 +
| '''this'''
 +
| id объекта
 
|-
 
|-
| '''id'''
+
| '''ani:...'''
| The id of the entity to execute it on
+
| Другие параметры (если есть)
 
|}
 
|}
  
 +
'''Пример:'''
 +
 +
Пример респавнит игрока и выводит сообщение.
 +
<pre>
 +
public plugin_init() {
 +
    register_clcmd("say resp","new_life")
 +
    RegisterHam(Ham_CS_RoundRespawn,"player","player_respawn")
 +
}
 +
 +
public new_life(id){
 +
    ExecuteHamB(Ham_CS_RoundRespawn,id)
 +
    return PLUGIN_HANDLED
 +
}
 +
 +
public player_respawn(id){
 +
    client_print(0,print_chat,"Ham_CS_RoundRespawn is hooked")
 +
}
 +
</pre>
  
 
=== GetHamReturnStatus ===
 
=== GetHamReturnStatus ===
Строка 145: Строка 181:
 
<pre>
 
<pre>
 
public plugin_init() {
 
public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
 
 
     RegisterHam(Ham_TakeDamage,"player","damager",0);
 
     RegisterHam(Ham_TakeDamage,"player","damager",0);
 
}
 
}
Строка 153: Строка 188:
 
     if(GetHamReturnStatus() != HAM_SUPERCEDE){
 
     if(GetHamReturnStatus() != HAM_SUPERCEDE){
 
         client_print(0,print_chat,"Damage: %.1f health:%d",damage,get_user_health(victim));
 
         client_print(0,print_chat,"Damage: %.1f health:%d",damage,get_user_health(victim));
     {  
+
     }  
 
}
 
}
 
</pre>
 
</pre>
Строка 331: Строка 366:
  
 
=== SetHamParamFloat ===
 
=== SetHamParamFloat ===
Sets a parameter on the fly of the current hook. This has no effect in post hooks. Use this on parameters that are floats.
+
Задает параметры отловленного события. Не имеет никакого эффекта, если отлов был после события (Post).  
 +
Полезна, если требуется увеличить или уменьшить урон, получаемый игроком.
 +
 
 
  native SetHamParamFloat(which, Float:value);
 
  native SetHamParamFloat(which, Float:value);
  
Строка 337: Строка 374:
 
|-
 
|-
 
| '''which'''
 
| '''which'''
| Which parameter to change.  Starts at 1, and works up from the left to right.  1 is always "this".
+
| Параметр, который нужно изменить
 
|-
 
|-
 
| '''value'''
 
| '''value'''
| The value to change it to.
+
| Новое значение параметра
 
|}
 
|}
 +
 +
'''Пример:'''
 +
Уменьшаем урон, получаемый игроком в два раза.
 +
 +
'''4''' - параметр урона
 +
 +
<pre>
 +
public plugin_init() {
 +
    RegisterHam(Ham_TakeDamage,"player","damager",0);
 +
}
 +
 +
public damager(victim, inflicator, attacker, Float:damage){
 +
    if(!is_user_connected(attacker)){
 +
        return;
 +
    }
 +
   
 +
    if(victim == attacker || !victim){
 +
        return;
 +
    }
 +
   
 +
    SetHamParamFloat(4, damage * 0.5);
 +
}
 +
</pre>
  
 
=== SetHamParamVector ===
 
=== SetHamParamVector ===
Sets a parameter on the fly of the current hook. This has no effect in post hooks. Use this on parameters that are Vectors.
+
Задает параметры отловленного события. Не имеет никакого эффекта, если отлов был после события (Post). Аналогична функции [[Ham_Sandwich#SetHamParamFloat|Ham_Sandwich]], за исключением того, что новые параметры задаются вектором.
 
  native SetHamParamVector(which, const Float:value[3]);
 
  native SetHamParamVector(which, const Float:value[3]);
  
Строка 350: Строка 410:
 
|-
 
|-
 
| '''which'''
 
| '''which'''
| Which parameter to change.  Starts at 1, and works up from the left to right.  1 is always "this".
+
| Параметр, который нужно изменить
 
|-
 
|-
 
| '''value'''
 
| '''value'''
| The value to change it to.
+
| Новое значение параметра
 
|}
 
|}
  
Строка 370: Строка 430:
  
 
=== SetHamParamString ===
 
=== SetHamParamString ===
Sets a parameter on the fly of the current hook. This has no effect in post hooks.Use this on parameters that are strings.
+
Задает параметры отловленного события. Не имеет никакого эффекта, если отлов был после события (Post). Аналогична функции [[Ham_Sandwich#SetHamParamFloat|Ham_Sandwich]], за исключением того, что новые параметры задаются строкой.
 
  native SetHamParamString(which, const output[]);
 
  native SetHamParamString(which, const output[]);
  
Строка 376: Строка 436:
 
|-
 
|-
 
| '''which'''
 
| '''which'''
| Which parameter to change.  Starts at 1, and works up from the left to right.  1 is always "this".
+
| Параметр, который нужно изменить
 
|-
 
|-
| '''value'''
+
| '''value'''
| The value to change it to.
+
| Новое значение параметра
 
|}
 
|}
  
Строка 461: Строка 521:
  
 
Return the index of the corresponding pdata field, -1 for null, -2 for invalid.
 
Return the index of the corresponding pdata field, -1 for null, -2 for invalid.
 +
 +
== Ссылки ==
 +
* [http://amxxmodx.ru/hamsandwich/hamsandwichinc/ Примеры Ham Sandwich (рус.)]

Текущая версия на 12:31, 15 июня 2013

hamsandwich.inc

RegisterHam

Отлавливает событие в игровом мире. Список событий очень большой, их описание можно посмотреть в константах Ham Sandwich. Функция возвращает идентификатор созданного форварда, который можно использовать в функциях EnableHamForward/DisableHamForward.

native HamHook:RegisterHam(Ham:function, const EntityClass[], const Callback[], Post=0);
function Функция (событие). Например убийство.
EntityClass Класс объектов с которым происходит событие
callback Вызываемая функция
post Функция будет вызвана До/Или после события.

Пример:

Будет вызвана функция player_hurt, перед тем как игрок получит повреждение.

RegisterHam(Ham_TakeDamage, "player", "player_hurt", 0);

RegisterHamFromEntity

Отлавливает событие в игровом мире для определенного энтити-объекта или игрока.

native HamHook:RegisterHamFromEntity(Ham:function, EntityId, const Callback[], Post=0);
function Событие для отлова
EntityId id объекта
callback Функция, которая будет вызвана
post Функция будет вызвана До/Или после события

Returns a handle to the forward. Use EnableHamForward/DisableHamForward to toggle the forward on or off.

Пример:

RegisterHam(Ham_TakeDamage, id, "player_hurt", 0);

DisableHamForward

Запускает работу Ham форварда. Противоположность EnableHamForward.

native DisableHamForward(HamHook:fwd);
fwd ID форварда для остановки.

EnableHamForward

Запускает работу Ham форварда. Противоположность DisableHamForward.

native EnableHamForward(HamHook:fwd);
fwd Идентификатор форварда (возвращаемое значение RegisterHam)

Пример:

new HamHook:g_fwdTakeDamage
 
public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
     
    g_fwdTakeDamage = RegisterHam(Ham_TakeDamage,"player","damager",0)
     
    register_clcmd("say /off","f_off")
    register_clcmd("say /on","f_on")
}
public f_on(){
    EnableHamForward(g_fwdTakeDamage)
    client_print(0,print_chat,"Forward TakeDamege is enable")
}
public f_off(){
    DisableHamForward(g_fwdTakeDamage)
    client_print(0,print_chat,"Forward TakeDamege is desable")
}
public damager(victim, inflicator, attacker, Float:damage){
    if(!is_user_connected(attacker))
        return;
     
    if(victim == attacker || !victim)
        return;
     
    client_print(0,print_chat,"Damage: %.1f health:%d",damage,get_user_health(victim))
     
}

ExecuteHam

Выполняет виртуальную функцию на энтити-объекте или игроке. Смотрите список параметров.

native ExecuteHam(Ham:function, this, any:...);
function Функция из списка Ham_
this id объекта к кому применяется функция
any:... Дополнительные параметры если есть

Пример:

Пример респавнит игрока.

public plugin_init() {
    register_clcmd("say /spawn","spawn");
}
public spawn(id){ 
    ExecuteHam( Ham_CS_RoundRespawn, id ); 
}

ExecuteHamB

Функция аналогична ExecuteHam за исключением того, что результат выполнения можно отловить.

native ExecuteHamB(Ham:function, this, any:...);
function Функция из списка Ham_*
this id объекта
ani:... Другие параметры (если есть)

Пример:

Пример респавнит игрока и выводит сообщение.

public plugin_init() {
    register_clcmd("say resp","new_life")
    RegisterHam(Ham_CS_RoundRespawn,"player","player_respawn")
}

public new_life(id){
    ExecuteHamB(Ham_CS_RoundRespawn,id)
    return PLUGIN_HANDLED
}

public player_respawn(id){
    client_print(0,print_chat,"Ham_CS_RoundRespawn is hooked")
}

GetHamReturnStatus

Проверяет статус определенного события. Полезно в случаях когда на сервере установлено два плагина, работающих с одним событием.

native GetHamReturnStatus();

Пример:

Пример отправляет в чат нанесенный урон.

public plugin_init() {
    RegisterHam(Ham_TakeDamage,"player","damager",0);
}

public damager(victim, inflicator, attacker, Float:damage){

    if(GetHamReturnStatus() != HAM_SUPERCEDE){
        client_print(0,print_chat,"Damage: %.1f health:%d",damage,get_user_health(victim));
    }  
}

GetHamReturnInteger

Gets the return value of a hook for hooks that return integers or booleans.

native GetHamReturnInteger(&output);
output The variable to store the value in.

GetHamReturnFloat

Gets the return value of a hook for hooks that return float.

native GetHamReturnFloat(&Float:output);
output The variable to store the value in.

GetHamReturnVector

Gets the return value of a hook for hooks that return Vectors.

native GetHamReturnVector(Float:output[3]);
output The variable to store the value in.

GetHamReturnEntity

Gets the return value of a hook for hooks that return entities.

native GetHamReturnEntity(&output);
output The variable to store the value in. Will be -1 on null.

GetHamReturnString

Gets the return value of a hook for hooks that return strings.

native GetHamReturnString(output[], size);
output The buffer to store the string in.
size The string size of the buffer.

GetOrigHamReturnInteger

Gets the original return value of a hook for hooks that return integers or booleans.

native GetOrigHamReturnInteger(&output);
output The variable to store the value in.

GetOrigHamReturnFloat

Gets the original return value of a hook for hooks that return floats.

native GetOrigHamReturnFloat(&Float:output);
output The variable to store the value in.

GetOrigHamReturnVector

Gets the original return value of a hook for hooks that return Vectors.

native GetOrigHamReturnVector(Float:output[3]);
output The variable to store the value in.

GetOrigHamReturnEntity

Gets the original return value of a hook for hooks that return entities.

native GetOrigHamReturnEntity(&output);
output The variable to store the value in. -1 on null.


GetOrigHamReturnString

Gets the original return value of a hook for hooks that return strings.

native GetOrigHamReturnString(output[], size);
output The buffer to store the string in.
size The size of the buffer.


SetHamReturnInteger

Sets the return value of a hook that returns an integer or boolean. This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE.

native SetHamReturnInteger(value);
value The value to set the return to.

SetHamReturnFloat

Sets the return value of a hook that returns a float. This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE.

native SetHamReturnFloat(Float:value);
value The value to set the return to.

SetHamReturnVector

Sets the return value of a hook that returns a Vector. This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE.

native SetHamReturnVector(const Float:value[3]);
value The value to set the return to.

SetHamReturnEntity

Sets the return value of a hook that returns an entity. Set to -1 for null. This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE.

native SetHamReturnEntity(value);
value The value to set the return to.

SetHamReturnString

Sets the return value of a hook that returns a string.This needs to be used in conjunction with HAM_OVERRIDE or HAM_SUPERCEDE.

native SetHamReturnString(const value[]);
value The value to set the return to.

SetHamParamInteger

Sets a parameter on the fly of the current hook. This has no effect in post hooks. Use this on parameters that are integers.

native SetHamParamInteger(which, value);
which Which parameter to change. Starts at 1, and works up from the left to right. 1 is always "this".
value The value to change it to.

SetHamParamFloat

Задает параметры отловленного события. Не имеет никакого эффекта, если отлов был после события (Post). Полезна, если требуется увеличить или уменьшить урон, получаемый игроком.

native SetHamParamFloat(which, Float:value);
which Параметр, который нужно изменить
value Новое значение параметра

Пример: Уменьшаем урон, получаемый игроком в два раза.

4 - параметр урона

public plugin_init() {
    RegisterHam(Ham_TakeDamage,"player","damager",0);
}

public damager(victim, inflicator, attacker, Float:damage){
    if(!is_user_connected(attacker)){
        return;
    }
     
    if(victim == attacker || !victim){
        return;
    }
     
    SetHamParamFloat(4, damage * 0.5);
}

SetHamParamVector

Задает параметры отловленного события. Не имеет никакого эффекта, если отлов был после события (Post). Аналогична функции Ham_Sandwich, за исключением того, что новые параметры задаются вектором.

native SetHamParamVector(which, const Float:value[3]);
which Параметр, который нужно изменить
value Новое значение параметра

SetHamParamEntity

Sets a parameter on the fly of the current hook. This has no effect in post hooks. Use this on parameters that are entities.

native SetHamParamEntity(which, value);
which Which parameter to change. Starts at 1, and works up from the left to right. 1 is always "this".
value The value to change it to.

SetHamParamString

Задает параметры отловленного события. Не имеет никакого эффекта, если отлов был после события (Post). Аналогична функции Ham_Sandwich, за исключением того, что новые параметры задаются строкой.

native SetHamParamString(which, const output[]);
which Параметр, который нужно изменить
value Новое значение параметра

SetHamParamTraceResult

Sets a parameter on the fly of the current hook. This has no effect in post hooks. Use this on parameters that are trace result handles.

native SetHamParamTraceResult(which, tr_handle);
which Which parameter to change. Starts at 1, and works up from the left to right. 1 is always "this".
value The value to change it to.

IsHamValid

Returns whether or not the function for the specified Ham is valid.Things that would make it invalid would be bounds (an older module version may not have all of the functions), and the function not being found in the mod's hamdata.ini file.

native bool:IsHamValid(Ham:function);
function

Return true if the function is valid, false otherwise.

get_pdata_cbase

This is used to compliment fakemeta's {get,set}_pdata_{int,float,string}.This requires the mod to have the pev and base fields set in hamdata.ini. Note this dereferences memory! Improper use of this will crash the server. This will return an index of the corresponding cbase field in private data. Returns -1 on a null entry.

native get_pdata_cbase(id, offset, linuxdiff=5);
id The entity to examine the private data.
offset The windows offset of the data.
linuxdiff The linux difference of the data.

Return the index of the corresponding pdata field. -1 for none set.

set_pdata_cbase

This is used to compliment fakemeta's {get,set}_pdata_{int,float,string}. This requires the mod to have the pev and base fields set in hamdata.ini. This will set the corresponding cbase field in private data with the index. Pass -1 to null the entry.

native set_pdata_cbase(id, offset, value, linuxdiff=5);
id The entity to examine the private data.
offset The windows offset of the data.
linuxdiff The linux difference of the data.

get_pdata_cbase_safe

This is similar to the get_pdata_cbase, however it does not dereference memory. This is many times slower than get_pdata_cbase, and this should only be used for testing and finding of offsets, not actual release quality plugins. This will return an index of the corresponding cbase field in private data. Returns -1 on a null entry. -2 on an invalid entry.

native get_pdata_cbase_safe(id, offset, linuxdiff=5);
id The entity to examine the private data.
offset The windows offset of the data.
linuxdiff The linux difference of the data.

Return the index of the corresponding pdata field, -1 for null, -2 for invalid.

Ссылки