Raised This Month: $51 Target: $400
 12% 

[TUT] The Use of Stocks


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
Hawk552
AMX Mod X Moderator
Join Date: Aug 2005
Old 06-26-2006 , 09:17   [TUT] The Use of Stocks
Reply With Quote #1

What is a stock? Many people don't understand at all, and that's why I'm writing this.

A stock is basically a function or variable that, if not used anywhere in the script, is simply ignored by the compiler.

Many people have the idea of doing this:

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")

When in fact you could achieve the same functionality through using this:

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

So why are stocks used? Mostly for include files, where there are many functions and variables that are not used.

Taken straight from 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) }

So, let's say I use find_ent somewhere in my script (which I am not condoning, it is a deprecated function for backward compatibility with AMX). The find_ent function will be included in the overhead and execution of my script, but fakedamage will not be because it was not used anywhere.

Stocks, as said twice above, can also be used on variables as such:

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

Again, including this in your script is useless, but it is useful for an include file where a variable may or may not be used, without using a #define due to issues with pushing it onto the stack each time it is used.

That's basically what stocks are and why they are useful.
__________________

Last edited by Brad; 06-26-2006 at 09:21. Reason: snipped immature and useless adjective
Hawk552 is offline
Send a message via AIM to Hawk552
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 03:44.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode