| Downtown1 |
06-25-2004 19:49 |
get_user_wstats() doesn't work in AMX X or something?
Hello, having trouble with the ucstats_cstrike.sma, trying to run it under AMX X :). It works fine in AMX, however it does not in AMXX:
Code:
/*
* AMXMOD script.
* (ucstats_cstrike.sma)
* by mike_cao <[email protected]>
* This file is provided as is (no warranties).
*
*/
#include <amxmodx>
#include <amxmisc>
#include <csstats>
#include <ucstats>
// Admin access level
#define ACCESS_LEVEL ADMIN_LEVEL_A
// Globals
new gPlayerStats [MAX_PLAYERS +1][PLAYER_INDEX ]
new gMoneyIndex [MAX_PLAYERS +1]
new gFirstKill = 0
new gPlanter = 0
/************************************************************
* LOG FUNCTIONS
************************************************************/
log_trigger (id,trigger [])
{
new iUserid = get_user_userid(id )
new sTeam [MAX_NAME_LENGTH ]
new sName [MAX_NAME_LENGTH ]
new sAuthid [MAX_NAME_LENGTH ]
get_user_name(id,sName,MAX_NAME_LENGTH )
get_user_authid(id,sAuthid,MAX_NAME_LENGTH )
get_user_team(id,sTeam,MAX_NAME_LENGTH )
log_message("^"%s< %d>< %s>< %s> ^" triggered ^"%s ^"",sName,iUserid,sAuthid,sTeam,trigger )
}
log_weapon_stats (id )
{
new iStats [8]
new iBodyHits [8]
new iUserid = get_user_userid(id )
new sTeam [MAX_NAME_LENGTH ]
new sName [MAX_NAME_LENGTH ]
new sAuthid [MAX_NAME_LENGTH ]
new sWeapon [MAX_NAME_LENGTH ]
get_user_name(id,sName,MAX_NAME_LENGTH )
get_user_authid(id,sAuthid,MAX_NAME_LENGTH )
get_user_team(id,sTeam,MAX_NAME_LENGTH )
for (new i = 1; i < MAX_WEAPONS; ++i ) {
if (get_user_wstats (id,i,iStats,iBodyHits )) {
get_weaponname(i,sWeapon,MAX_NAME_LENGTH )
if ((iStats [0]+iStats [1]+iStats [2]+iStats [3]+iStats [4]+iStats [5]+iStats [6]) > 0) {
// "Weapon_Stats" (weapon "kills,deaths,headshots,teamkills,shots,hits,damage")
log_message("^"%s< %d>< %s>< %s> ^" triggered ^"Weapon_Stats ^" (%s ^"%i, %i, %i, %i, %i, %i, %i ^")",
sName,
iUserid,
sAuthid,
sTeam,
sWeapon,
iStats [0],
iStats [1],
iStats [2],
iStats [3],
iStats [4],
iStats [5],
iStats [6]
)
}
if ((iBodyHits [0]+iBodyHits [1]+iBodyHits [2]+iBodyHits [3]+iBodyHits [4]+iBodyHits [5]+iBodyHits [6]+iBodyHits [7]) > 0) {
// "Weapon_Hits" (weapon "generic,head,chest,stomach,leftarm,rightarm,leftleg,rightleg")
log_message("^"%s< %d>< %s>< %s> ^" triggered ^"Weapon_Hits ^" (%s ^"%i, %i, %i, %i, %i, %i, %i, %i ^")",
sName,
iUserid,
sAuthid,
sTeam,
sWeapon,
iBodyHits [0],
iBodyHits [1],
iBodyHits [2],
iBodyHits [3],
iBodyHits [4],
iBodyHits [5],
iBodyHits [6],
iBodyHits [7]
)
}
}
}
}
log_player_stats (id )
{
new iUserid = get_user_userid(id )
new sTeam [MAX_NAME_LENGTH ]
new sName [MAX_NAME_LENGTH ]
new sAuthid [MAX_NAME_LENGTH ]
new sMap [MAX_NAME_LENGTH ]
get_user_name(id,sName,MAX_NAME_LENGTH )
get_user_authid(id,sAuthid,MAX_NAME_LENGTH )
get_user_team(id,sTeam,MAX_NAME_LENGTH )
get_mapname(sMap,MAX_NAME_LENGTH )
if ((gPlayerStats [id ][PLAYER_KILLS ]+gPlayerStats [id ][PLAYER_DEATHS ]) > 0) {
// "Player_Stats" (map "kills,deaths,killstreak,rounds_survived,rounds_played,playing_time,misc")
log_message("^"%s< %d>< %s>< %s> ^" triggered ^"Player_Stats ^" (%s ^"%i, %i, %i, %i, %i, %i ^")",
sName,
iUserid,
sAuthid,
sTeam,
sMap,
gPlayerStats [id ][PLAYER_KILLS ],
gPlayerStats [id ][PLAYER_DEATHS ],
gPlayerStats [id ][PLAYER_KILLSTREAK ],
gPlayerStats [id ][PLAYER_SURVIVE ],
gPlayerStats [id ][PLAYER_ROUNDS ],
floatround(get_gametime())-gPlayerStats [id ][PLAYER_TIME ]
)
}
}
/************************************************************
* EVENT FUNCTIONS
************************************************************/
public event_death () {
new iKiller = read_data(1)
new iVictim = read_data(2)
new iHeadshot = read_data(3)
gPlayerStats [iKiller ][PLAYER_KILLS ] += 1
gPlayerStats [iVictim ][PLAYER_DEATHS ] += 1
if (iKiller != iVictim && iKiller != 0) {
if (!gFirstKill ) {
log_trigger (iKiller, "First_Kill")
gFirstKill = 1
}
if (iHeadshot ) {
log_trigger (iKiller, "Head_Shot")
}
gPlayerStats [iKiller ][PLAYER_KILLCOUNT ] += 1
gPlayerStats [iVictim ][PLAYER_KILLCOUNT ] = 0
// New streak
if (gPlayerStats [iKiller ][PLAYER_KILLCOUNT ] > gPlayerStats [iKiller ][PLAYER_KILLSTREAK ]) {
gPlayerStats [iKiller ][PLAYER_KILLSTREAK ] = gPlayerStats [iKiller ][PLAYER_KILLCOUNT ]
}
}
return PLUGIN_CONTINUE
}
public event_world_action ()
{
new sAction [MAX_NAME_LENGTH ]
read_logargv(1,sAction,MAX_VAR_LENGTH )
if (equal(sAction, "Round_Start")) {
gFirstKill = 0
gPlanter = 0
}
else if (equal(sAction, "Round_End")) {
new iPlayer, iPlayers [MAX_PLAYERS ], iNumPlayers
get_players(iPlayers,iNumPlayers )
for (new i = 0; i < iNumPlayers; i ++) {
iPlayer = iPlayers [i ]
// If not spectator
if (get_user_team(iPlayer )==1 || get_user_team(iPlayer )==2) {
// Add round survived
if (is_user_alive(iPlayer )) {
gPlayerStats [iPlayer ][PLAYER_SURVIVE ] += 1
}
// Add round played
gPlayerStats [iPlayer ][PLAYER_ROUNDS ] += 1
}
}
}
return PLUGIN_CONTINUE
}
public event_player_action ()
{
new iUserId, iPlayer
new sArg [MAX_VAR_LENGTH ]
new sName [MAX_NAME_LENGTH ]
new sAction [MAX_NAME_LENGTH ]
read_logargv(0,sArg,MAX_VAR_LENGTH )
read_logargv(2,sAction,MAX_VAR_LENGTH )
parse_loguser(sArg,sName,MAX_NAME_LENGTH,iUserId )
if (equal(sAction, "Planted_The_Bomb")) {
iPlayer = find_player("k",iUserId )
if (iPlayer ) {
gPlanter = iPlayer
}
}
return PLUGIN_CONTINUE
}
public event_bomb_explode ()
{
if (gPlanter ) {
log_trigger (gPlanter, "Bomb_Exploded")
}
return PLUGIN_CONTINUE
}
public event_money (id )
{
new iMoney = read_data(1)
new iPrevMoney = gMoneyIndex [id ]
if (iMoney < iPrevMoney ) {
gPlayerStats [id ][PLAYER_MISC ] += iPrevMoney - iMoney
}
gMoneyIndex [id ] = iMoney
return PLUGIN_CONTINUE
}
public event_reset_stats (id )
{
for (new i = 0; i < PLAYER_INDEX; i ++) {
gPlayerStats [id ][i ] = 0
}
gPlayerStats [id ][PLAYER_TIME ] = floatround(get_gametime())
return PLUGIN_CONTINUE
}
/************************************************************
* PLUGIN FUNCTIONS
************************************************************/
public client_connect (id )
{
event_reset_stats (id )
return PLUGIN_CONTINUE
}
public client_disconnect (id )
{
log_player_stats (id )
log_weapon_stats (id )
event_reset_stats (id )
return PLUGIN_CONTINUE
}
public client_infochanged (id )
{
new sName [MAX_TEXT_LENGTH ], sNewName [MAX_TEXT_LENGTH ]
get_user_name(id,sName,MAX_TEXT_LENGTH )
get_user_info(id, "name",sNewName,MAX_TEXT_LENGTH )
if (!equal(sName,sNewName ) && !equal(sName, "")) {
// Log old name's stats
if (get_user_time(id ) > MIN_PLAYTIME ) {
log_player_stats (id )
log_weapon_stats (id )
}
// Reset stats for new name
reset_user_wstats (id )
event_reset_stats (id )
}
return PLUGIN_CONTINUE
}
public plugin_init () {
register_plugin("UCStats CSTRIKE", "1.1", "mike_cao")
register_event("DeathMsg", "event_death", "a")
register_event("Money", "event_money", "b")
register_logevent("event_player_action", 3, "1=triggered")
register_logevent("event_bomb_explode", 6, "2=triggered", "3=Target_Bombed")
register_logevent("event_world_action", 2, "0=World triggered")
server_print("[UCStats] CSTRIKE: Logging initialized successfully.")
return PLUGIN_CONTINUE
}
At the end of a map, it logs all the user weapon stats (only at the end of a map). However in AMXX I get this error several times just before a map changes:
Code:
[AMX] Run time error 10 on line 58 (plugin "ucstats_cstrike.amx")
Line 58 points to:
Code:
if (get_user_wstats(id,i,iStats,iBodyHits)) {
I checked out csstats.inc and all the parameters being passed just fine (it's the same exact function as for amxmod), so my question is this.. is the function just broken or what?
I'm also using the .SO file from the latest news, the "fixed" cstrike module incase anyone is wondering.
Thanks for anyone who can help me out here.
|