Raised This Month: $ Target: $400
 0% 

looping through an entity to get all keyvalues


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
HLM
Senior Member
Join Date: Apr 2008
Location: C:\WINDOWS\System32
Old 10-01-2009 , 19:24   looping through an entity to get all keyvalues
Reply With Quote #1

PHP Code:
public hook_KeyValue(entIdkvd_id)
{
    
server_print("[MedicMod] Entity has been hooked.. entity hooked is ^"%d^"",entId)
    
log_to_file("medicmod.txt","[MedicMod] Entity has been hooked.. entity hooked is ^"%d^"",entId)
    
//new maxteams;
    
if(!pev_valid(entId))
        return 
FMRES_HANDLED;
    
    new 
className[64];
    new 
keyName[32];
    new 
keyValue[32];
    
    
//pev(entId, pev_classname, className, 63);
    
get_kvd(kvd_idKV_ClassNameclassName31);
    if(
equali(className"info_tfdetect") && !tfdetectMade)
    {
        
server_print("[MedicMod] Classname picked as ^"%s^"",className)
        
log_to_file("medicmod.txt","[MedicMod] Classname picked as ^"%s^"",className)
        
get_kvd(kvd_idKV_KeyNamekeyName31);
        
log_to_file("mm_keys.txt","[MedicMod] Keyname : %s",keyName)
        if(
equali(keyName"number_of_teams"5) && !tfdetectMade)
        {
            
server_print("[MedicMod] Keyname picked as ^"%s^"",keyName)
            
log_to_file("medicmod.txt","[MedicMod] Keyname picked as ^"%s^"",keyName)
            
get_kvd(kvd_idKV_ValuekeyValue31);
            
server_print("[MedicMod] KeyValue : ^"%s^"",keyValue)
            
log_to_file("medicmod.txt","[MedicMod] KeyValue : ^"%s^"",keyValue)
            
g_maxteams str_to_num(keyValue);
            
server_print("[MedicMod] Maxteams = '%s'",g_maxteams)
            
log_to_file("medicmod.txt","[MedicMod] Maxteams = '%s'",g_maxteams)
        }
        
        
/*{
        while (maxteams == 0)
        {
            get_keyvalue(entId, "number_of_teams", szValue, sizeof(szValue)-1)
            maxteams = str_to_num(szValue)
            server_print("[MedicMod] Looping to get maxteams : %d", szValue)
            log_to_file("medicmod.txt","[MedicMod] Looping to get maxteams : %d", szValue)
        }*/
        
        
server_print("[MedicMod] About to remove entity, maxteams = ^"%d^"",g_maxteams)
        
log_to_file("medicmod.txt","[MedicMod] About to remove entity, maxteams = ^"%d^"",g_maxteams)
        
engfunc(EngFunc_RemoveEntityentId);
        
        if(!
tfdetectMade)
        {
            switch(
g_maxteams)
            {
                case 
1:
                {
                    new 
entFloat:entOrg[3];
                    
tfdetectMade true;
                    
                    
// Make the new tfdetect entity
                    
ent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_tfdetect"));
                    
engfunc(EngFunc_SetOriginententOrg);
                    
engfunc(EngFunc_SetSizeentFloat:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0});
                    
set_pev(entpev_classname"info_tfdetect");
                    
set_pev(entpev_solidSOLID_NOT);
                    
set_pev(entpev_movetypeMOVETYPE_FLY);
                    
                    
// Add the keys and values to the entity
                    
set_keyvalue(ent"number_of_teams""1");
                    
set_keyvalue(ent"team1_name""Team L33T!");
                    
//set_keyvalue(ent, "team2_name", "Team pWn0rs!");
                    //set_keyvalue(ent, "team3_name", "Team h4wt!");
                    //set_keyvalue(ent, "team4_name", "Team sm3xi!");
                    
set_keyvalue(ent"toggleflags""0");
                    
set_keyvalue(ent"maxammo_shells""1007");
                    
//set_keyvalue(ent, "maxammo_nails", "1007");
                    //set_keyvalue(ent, "maxammo_rockets", "1007");
                    //set_keyvalue(ent, "maxammo_cells", "1007");
                    
set_keyvalue(ent"team1_allies""0");
                    
//set_keyvalue(ent, "team2_allies", "0");
                    //set_keyvalue(ent, "team3_allies", "0");
                    //set_keyvalue(ent, "team4_allies", "0");
                
}
                case 
2:
                {
                    new 
entFloat:entOrg[3];
                    
tfdetectMade true;
                    
                    
// Make the new tfdetect entity
                    
ent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_tfdetect"));
                    
engfunc(EngFunc_SetOriginententOrg);
                    
engfunc(EngFunc_SetSizeentFloat:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0});
                    
set_pev(entpev_classname"info_tfdetect");
                    
set_pev(entpev_solidSOLID_NOT);
                    
set_pev(entpev_movetypeMOVETYPE_FLY);
                    
                    
// Add the keys and values to the entity
                    
set_keyvalue(ent"number_of_teams""2");
                    
set_keyvalue(ent"team1_name""Team h4x~!");
                    
set_keyvalue(ent"team2_name""Team pWn0rs!");
                    
//set_keyvalue(ent, "team3_name", "Team h4wt!");
                    //set_keyvalue(ent, "team4_name", "Team sm3xi!");
                    
set_keyvalue(ent"toggleflags""0");
                    
set_keyvalue(ent"maxammo_shells""1007");
                    
set_keyvalue(ent"maxammo_nails""1007");
                    
//set_keyvalue(ent, "maxammo_rockets", "1007");
                    //set_keyvalue(ent, "maxammo_cells", "1007");
                    
set_keyvalue(ent"team1_allies""0");
                    
set_keyvalue(ent"team2_allies""0");
                    
//set_keyvalue(ent, "team3_allies", "0");
                    //set_keyvalue(ent, "team4_allies", "0");    
                
}
                case 
3:
                {
                    
log_amx("maxteams was logged to be %d",szValue)
                    
pause("ad","medicmod-cutsom.amxx")
                }
                case 
4:
                {
                    new 
entFloat:entOrg[3];
                    
tfdetectMade true;
                    
                    
// Make the new tfdetect entity
                    
ent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_tfdetect"));
                    
engfunc(EngFunc_SetOriginententOrg);
                    
engfunc(EngFunc_SetSizeentFloat:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0});
                    
set_pev(entpev_classname"info_tfdetect");
                    
set_pev(entpev_solidSOLID_NOT);
                    
set_pev(entpev_movetypeMOVETYPE_FLY);
                    
                    
// Add the keys and values to the entity
                    
set_keyvalue(ent"number_of_teams""4");
                    
set_keyvalue(ent"team1_name""Team h4x~!");
                    
set_keyvalue(ent"team2_name""Team pWn0rs!");
                    
set_keyvalue(ent"team3_name""Team h4wt!");
                    
set_keyvalue(ent"team4_name""Team sm3xi!");
                    
set_keyvalue(ent"toggleflags""0");
                    
set_keyvalue(ent"maxammo_shells""1007");
                    
set_keyvalue(ent"maxammo_nails""1007");
                    
set_keyvalue(ent"maxammo_rockets""1007");
                    
set_keyvalue(ent"maxammo_cells""1007");
                    
set_keyvalue(ent"team1_allies""0");
                    
set_keyvalue(ent"team2_allies""0");
                    
set_keyvalue(ent"team3_allies""0");
                    
set_keyvalue(ent"team4_allies""0");    
                }
                default:
                {
                    new 
entFloat:entOrg[3];
                    
tfdetectMade true;
                    
                    
// Make the new tfdetect entity
                    
ent engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_tfdetect"));
                    
engfunc(EngFunc_SetOriginententOrg);
                    
engfunc(EngFunc_SetSizeentFloat:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0});
                    
set_pev(entpev_classname"info_tfdetect");
                    
set_pev(entpev_solidSOLID_NOT);
                    
set_pev(entpev_movetypeMOVETYPE_FLY);
                    
                    
// Add the keys and values to the entity
                    
set_keyvalue(ent"number_of_teams""2");
                    
set_keyvalue(ent"team1_name""Team h4x~!");
                    
set_keyvalue(ent"team2_name""Team pWn0rs!");
                    
//set_keyvalue(ent, "team3_name", "Team h4wt!");
                    //set_keyvalue(ent, "team4_name", "Team sm3xi!");
                    
set_keyvalue(ent"toggleflags""0");
                    
set_keyvalue(ent"maxammo_shells""1007");
                    
set_keyvalue(ent"maxammo_nails""1007");
                    
//set_keyvalue(ent, "maxammo_rockets", "1007");
                    //set_keyvalue(ent, "maxammo_cells", "1007");
                    
set_keyvalue(ent"team1_allies""0");
                    
set_keyvalue(ent"team2_allies""0");
                    
//set_keyvalue(ent, "team3_allies", "0");
                    //set_keyvalue(ent, "team4_allies", "0");    
                
}
                
            }
        }
    }
    return 
FMRES_HANDLED;

heres a log..

Code:
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "25"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:38 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "26"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "27"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "27"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "27"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "27"
19:20:39 [MedicMod] Classname picked as "info_tfdetect"
19:20:39 [MedicMod] Classname picked as "info_tfdetect"
19:20:39 Log file started (file "tfc\addons\amxmodx\logs\mm_keys.txt") (game "tfc") (amx "1.8.1.3746")
19:20:39 [MedicMod] Keyname : origin
19:20:39 [MedicMod] About to remove entity, maxteams = "0"
19:20:39 [MedicMod] About to remove entity, maxteams = "0"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "27"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "27"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "27"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "27"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "246"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "246"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "246"
19:20:39 [MedicMod] Entity has been hooked.. entity hooked is "246"
I can guarantee you that there is more than just origin to this entity, I am not a good coder, I just need to know why it cant FIND number_of_teams, this entity is the base for all tfc maps, it holds vital information for the map, like which classes which teams can have, and which teams are available and other important information..

some help?
__________________
+|- KARMA Respectively


Last edited by HLM; 10-01-2009 at 19:31.
HLM is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 10-02-2009 , 02:04   Re: looping through an entity to get all keyvalues
Reply With Quote #2

Try to use pfn_keyvalue() forward with copy_keyvalue().
__________________
Arkshine is offline
HLM
Senior Member
Join Date: Apr 2008
Location: C:\WINDOWS\System32
Old 10-02-2009 , 15:06   Re: looping through an entity to get all keyvalues
Reply With Quote #3

PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>

#define PLUGIN "TFDetect"
#define VERSION "1.0"
#define AUTHOR "Master"

public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR);
}

public 
pfn_keyvalue(entid)
{
    new 
classname[33]
    new 
keyname[33]
    new 
keyvalue[33]
    
    
copy_keyvalue(classname,32,keyname,32,keyvalue,32)
    
    
log_to_file("ents.txt","ClassName : %s  KeyName : %s  KeyValue : %s",classname,keyname,keyvalue)
    if(
equali(classname"info_tfdetect"))
        
log_to_file("tfdetect.txt","ClassName : %s  KeyName : %s  KeyValue : %s",classname,keyname,keyvalue)

    return 
PLUGIN_HANDLED

this is crashing my server.. its not lagging the whole box, but the server crashes (5+ minutes unresponsive, with logging to my hlsw)

I put it on my linux server just real quick to get a log..

Code:
L 10/02/2009 - 14:11:44: Server name is "-[EVIL]- Classics -Fast DL-"
L 10/02/2009 - 14:11:44: [META] (debug:3) user message registered again: name=VoiceMask, msgid=64
L 10/02/2009 - 14:11:44: [META] (debug:3) user message registered again: name=ReqState, msgid=65
L 10/02/2009 - 14:11:44: Log file started (file "tfc/addons/amxmodx/logs/ents.txt") (game "tfc") (amx "1.8.1.3746")
L 10/02/2009 - 14:11:44: ClassName :   KeyName : classname  KeyValue : func_plat
Host_Error: SuckOutClassname: parse error
L 10/02/2009 - 14:11:44: [META] (debug:3) Calling HookMod_i386.so:Sys_Error()
L 10/02/2009 - 14:11:44: [META] (debug:3) Calling foxbot_MM_i586.so:Sys_Error()
L 10/02/2009 - 14:11:44: [META] (debug:3) Calling EntMod_i386.so:Sys_Error()
L 10/02/2009 - 14:11:44: [META] (debug:3) Calling RadioMod_i386.so:Sys_Error()
L 10/02/2009 - 14:11:44: [META] (debug:3) Calling NeoTF_i486.so:Sys_Error()
L 10/02/2009 - 14:11:44: [META] (debug:3) Calling HookMod_i386.so:Sys_Error_Post()
L 10/02/2009 - 14:11:44: [META] (debug:3) Calling EntMod_i386.so:Sys_Error_Post()
L 10/02/2009 - 14:11:44: [META] (debug:3) Calling RadioMod_i386.so:Sys_Error_Post()
L 10/02/2009 - 14:11:44: FATAL ERROR (shutting down): Host_Error: SuckOutClassname: parse error

FATAL ERROR (shutting down): Host_Error: SuckOutClassname: parse error
__________________
+|- KARMA Respectively


Last edited by HLM; 10-02-2009 at 15:15.
HLM is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 10-02-2009 , 15:15   Re: looping through an entity to get all keyvalues
Reply With Quote #4

Add a check before if ent is valid
__________________
Arkshine is offline
HLM
Senior Member
Join Date: Apr 2008
Location: C:\WINDOWS\System32
Old 10-02-2009 , 15:47   Re: looping through an entity to get all keyvalues
Reply With Quote #5

PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>

#define PLUGIN "TFDetect"
#define VERSION "1.0"
#define AUTHOR "Master"

public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR);
}


public 
pfn_keyvalue(entid)
{
    
delete_file("ents.txt")
    
delete_file("tfdetect.txt")
    new 
classname[33]
    new 
keyname[33]
    new 
keyvalue[33]
    
    if(
is_valid_ent(entid))
    {
        
copy_keyvalue(classname,32,keyname,32,keyvalue,32)
        
        
log_to_file("ents.txt","ClassName : %s  KeyName : %s  KeyValue : %s",classname,keyname,keyvalue)
        if(
equali(classname"info_tfdetect"))
            
log_to_file("tfdetect.txt","ClassName : %s  KeyName : %s  KeyValue : %s",classname,keyname,keyvalue)
        
    }
    return 
PLUGIN_HANDLED

Code:
L 10/02/2009 - 14:46:01: Server name is "-[EVIL]- Classics -Fast DL-"
L 10/02/2009 - 14:46:01: [META] (debug:3) user message registered again: name=VoiceMask, msgid=64
L 10/02/2009 - 14:46:01: [META] (debug:3) user message registered again: name=ReqState, msgid=65
Host_Error: SuckOutClassname: parse error
L 10/02/2009 - 14:46:01: [META] (debug:3) Calling HookMod_i386.so:Sys_Error()
L 10/02/2009 - 14:46:01: [META] (debug:3) Calling foxbot_MM_i586.so:Sys_Error()
L 10/02/2009 - 14:46:01: [META] (debug:3) Calling EntMod_i386.so:Sys_Error()
L 10/02/2009 - 14:46:01: [META] (debug:3) Calling RadioMod_i386.so:Sys_Error()
L 10/02/2009 - 14:46:01: [META] (debug:3) Calling NeoTF_i486.so:Sys_Error()
L 10/02/2009 - 14:46:01: [META] (debug:3) Calling HookMod_i386.so:Sys_Error_Post()
L 10/02/2009 - 14:46:01: [META] (debug:3) Calling EntMod_i386.so:Sys_Error_Post()
L 10/02/2009 - 14:46:01: [META] (debug:3) Calling RadioMod_i386.so:Sys_Error_Post()
L 10/02/2009 - 14:46:01: FATAL ERROR (shutting down): Host_Error: SuckOutClassname: parse error

FATAL ERROR (shutting down): Host_Error: SuckOutClassname: parse error
__________________
+|- KARMA Respectively

HLM is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 10-02-2009 , 15:49   Re: looping through an entity to get all keyvalues
Reply With Quote #6

1. Install shp_tools : http://forums.space-headed.net/viewtopic.php?f=43&t=111

2. Launch a map

3. Type 'logfile 1' and 'hook_api 'f'

4. Launch the map on wich you want to log ents

5. go in amxmodx/logs/ folder and open the logfile.
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
Arkshine
AMX Mod X Plugin Approver
Join Date: Oct 2005
Old 10-02-2009 , 16:23   Re: looping through an entity to get all keyvalues
Reply With Quote #7

Why do you delete each time, it's idiot really. lol

Code:
public pfn_keyvalue(entid) {     if(is_valid_ent(entid))     {         new classname[33]         new keyname[33]         new keyvalue[33]                 copy_keyvalue(classname,32,keyname,32,keyvalue,32)                   log_to_file("ents.txt","ClassName : %s  KeyName : %s  KeyValue : %s",classname,keyname,keyvalue)                 if(equal(classname, "info_tfdetect"))             log_to_file("tfdetect.txt","ClassName : %s  KeyName : %s  KeyValue : %s",classname,keyname,keyvalue)               } }
__________________
Arkshine is offline
HLM
Senior Member
Join Date: Apr 2008
Location: C:\WINDOWS\System32
Old 10-02-2009 , 18:25   Re: looping through an entity to get all keyvalues
Reply With Quote #8

I delete it because it runs on windows, sometimes I get file access errors when trying to delete the files so I dont feel like waiting the 2 minutes to retry =/
__________________
+|- KARMA Respectively

HLM is offline
Reply



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 22:43.


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