как понять static decl Handle..

NagarD

Участник
Сообщения
411
Реакции
184
Вот сейчас до меня дошел смысл 7 поста. Многое стало ясно. Всем спасибо за помощь.
Оффтоп
 
Последнее редактирование:

Jak ozdoba na torcie

Как украшение на торт
Сообщения
25
Реакции
11
Jak ozdoba na torcie, а в какой системе счислений это число, знаешь?

Это обычный int и для каждого плагина он исчисляться с 0. Так что если ты хочешь например убить таймер соседнего плагина (который был передан в твой плагин) нужно переопределить Handle. Ну то есть только SourceMod знает адрес в памяти ассоциируемый с 4bitжым числом для этого плагина.

C-подобный:
Syntax:
native Handle:CloneHandle(Handle:hndl, Handle:plugin=INVALID_HANDLE);

Usage:

 hndl		Handle to clone/duplicate.
 plugin	Optional Handle to another plugin to mark as the new owner. If no owner is passed, the owner becomes the calling plugin.

Notes:
Clones a Handle. When passing handles in between plugins, caching handles can result in accidental invalidation when one plugin releases the Handle, or is its owner is unloaded from memory. To prevent this, the Handle may be "cloned" with a new owner.

Return:
Handle on success, INVALID_HANDLE if not cloneable.

Version Added:

1.0.0.1946
 

NagarD

Участник
Сообщения
411
Реакции
184
по сути понял идею. Это похоже на взлом другого плагина. Значит Handle указывает не на что-то в памяти, а на индекс(идентификатор) этого что-то в памяти?
 

Jak ozdoba na torcie

Как украшение на торт
Сообщения
25
Реакции
11
по сути понял идею. Это похоже на взлом другого плагина. Значит Handle указывает не на что-то в памяти, а на индекс(идентификатор) этого что-то в памяти?

Угу. Можно функции из плагина вызывать зная Handle:plugin.
 
Последнее редактирование:

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
NagarD, хочешь понять как это выглядит. сделай на работающем сервере
sm_dump_handles handles.txt
и смотри файл handles.txt в корне (где файл srcds.exe/srcds_run)
Вот например отрывок:
PHP:
Handle    	Owner           	   Type                	Memory    
--------------------------------------------------------------------------
0x63f202c0	basecomm.smx        	GlobalFwd           	16        
0x623402c2	sourcebans.smx      	DataPack            	-1        
0xd9cb02c3	smac_cvars.smx      	Timer               	-1        
0xe43702c4	sourcebans.smx      	Timer               	-1        
0x5b1602c5	kdlp-adv.smx        	Timer               	-1        
0xf41b02cb	sourcebans.smx    	  DataPack            	-1        
0xda0b02cc	smac_cvars.smx      	Timer               	-1        
0x5b1002cd	passblock.smx       	KeyValues           	40
Первое число - это и есть адрес, который собственно содержится в переменой типа Handle. Как видно, тут и таймеры, и KV, и т.д.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #26
Не буду создавать новую тему.
Есть ли разница ( в плане занимаемой памяти и скорости обработки) вынесу я это в stock или оставлю как define?
PHP:
#define FFA_CONDITION(%1,%2) (1 <= %1 <= MaxClients && 1 <= %2 <= MaxClients && %1 != %2 && GetClientTeam(%1) == GetClientTeam(%2))
 

FrozDark

Участник
Сообщения
1,769
Реакции
2,050
#define упрощает работу, просто при компиляции делает замену везде, где стоит FFA_CONDITION на (1 <= %1 <= MaxClients && 1 <= %2 <= MaxClients && %1 != %2 && GetClientTeam(%1) == GetClientTeam(%2)). Его называют макро-функцией
 
Сверху Снизу