Thursday, June 5, 2014

The Use of Stocks


Stock là gì? Nhiều người không hiểu gì cả, và đó là lý do tại sao viết bài này. 
Stock cơ bản là một chức năng hoặc biến đó, nếu không được sử dụng bất cứ nơi nào trong kịch bản, chỉ đơn giản là bỏ qua bởi trình biên dịch. 

Nhiều người có ý tưởng để làm điều này:
Code:
#include <amxmodx> #include <amxmisc> public plugin_init() {     register_plugin("The","Matrix","Has You")         fnDoFunc() } stock fnDoFunc()     log_amx("the world has imploded upon itself")

Trong khi thực tế bạn có thể đạt được các chức năng tương tự thông qua sử dụng điều này:

Code:
#include <amxmodx> #include <amxmisc> public plugin_init() {     register_plugin("The","Matrix","Has You")         fnDoFunc() } fnDoFunc()     log_amx("the world has imploded upon itself")

Vậy tại sao stock sử dụng? Chủ yếu là cho các file, nơi có nhiều chức năng và các biến không được sử dụng. 

Lấy trực tiếp từ engine_stocks.inc:


Code:
stock fakedamage(idvictim,szClassname[],Float:takedmgdamage,damagetype) {     new entity = create_entity("trigger_hurt")     if (entity)     {         DispatchKeyValue(entity,"classname","trigger_hurt")         new szDamage[16]         // Takedamages only do half damage per attack (damage is damage per second, and it's triggered in 0.5 second intervals).         // Compensate for that.         format(szDamage,15,"%f",takedmgdamage * 2)         DispatchKeyValue(entity,"dmg",szDamage)         format(szDamage,15,"%i",damagetype)         DispatchKeyValue(entity,"damagetype",szDamage)         DispatchKeyValue(entity,"origin","8192 8192 8192")         DispatchSpawn(entity)         entity_set_string(entity, EV_SZ_classname, szClassname)         fake_touch(entity,idvictim)         remove_entity(entity)         return 1     }     return 0 } //wrapper for find_ent_by_class stock find_ent(iStart, szClassname[]) {     return find_ent_by_class(iStart, szClassname) }

Vì vậy, hãy nói rằng tôi sử dụng find_ent nơi nào đó trong kịch bản của tôi (mà tôi không túng, nó là một hàm phản đối cho khả năng tương thích ngược với AMX). Chức năng find_ent sẽ được bao gồm trong chi phí và thực hiện kịch bản của tôi, nhưng fakedamage sẽ không được bởi vì nó không được sử dụng bất cứ nơi nào.

Stocks, như đã nói ở trên hai lần, cũng có thể được sử dụng trên các biến như vậy:

Code:
stock const mystring[] = "hello pm"

Một lần nữa, bao gồm này trong kịch bản của bạn là vô ích, nhưng nó rất hữu ích cho một bao gồm các tập tin mà một biến có thể có hoặc có thể không được sử dụng, mà không sử dụng # xác định do các vấn đề với đẩy nó vào stack mỗi khi nó được sử dụng.

Đó là cơ bản những gì stock đang có và tại sao họ là hữu ích.

0 nhận xét:

Post a Comment