AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   looping through an entity to get all keyvalues (https://forums.alliedmods.net/showthread.php?t=105158)

HLM 10-01-2009 19:24

looping through an entity to get all keyvalues
 
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?

Arkshine 10-02-2009 02:04

Re: looping through an entity to get all keyvalues
 
Try to use pfn_keyvalue() forward with copy_keyvalue().

HLM 10-02-2009 15:06

Re: looping through an entity to get all keyvalues
 
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


Arkshine 10-02-2009 15:15

Re: looping through an entity to get all keyvalues
 
Add a check before if ent is valid

HLM 10-02-2009 15:47

Re: looping through an entity to get all keyvalues
 
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

:?

ConnorMcLeod 10-02-2009 15:49

Re: looping through an entity to get all keyvalues
 
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.

Arkshine 10-02-2009 16:23

Re: looping through an entity to get all keyvalues
 
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)               } }

HLM 10-02-2009 18:25

Re: looping through an entity to get all keyvalues
 
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 =/


All times are GMT -4. The time now is 22:43.

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