RSSy MYGO.pl Opublikowano Maj 8, 2024 o 09:15 RSSy Udostępnij Opublikowano Maj 8, 2024 o 09:15 Can it be fixed when I use the admin command "amx_givexp" to give someone EXP and the server crashes? admin.inl PHP Code: /** Admin Functions*/// Advanced Swear Filter and Punishment plugin uses this functionpublic ADMIN_ServerHandler(){ // Make sure WC3 is loaded if ( !WC3_Check() ) { return PLUGIN_HANDLED; } new szCmd[32], szArg1[32], szArg2[32]; read_argv( 0, szCmd, 31 ); read_argv( 1, szArg1, 31 ); read_argv( 2, szArg2, 31 ); new id = str_to_num( szArg1 ); new iXP = str_to_num( szArg2 ); if ( equal( szCmd, "amx_takexp" ) ) { iXP *= -1; iXP += p_data[id][P_XP]; } else if ( equal( szCmd, "changexp" ) ) { iXP += p_data[id][P_XP]; } ADMIN_SetXP( id, iXP ); return PLUGIN_HANDLED;}// This will handle every admin client commandpublic ADMIN_Handler( id ){ new szCmd[32]; read_argv(0, szCmd, 31); // Make sure WC3 is loaded if (!WC3_Check() && !equal(szCmd, "wc3_disable") && !equal(szCmd, "wc3_enable")) { ADMIN_Print(id, "%s WC3 has been disabled by an admin of this server", g_MODclient); return PLUGIN_HANDLED; } // Make sure the user is an admin if (!(get_user_flags(id) & XP_GetAdminFlag())) { client_print(id, print_console, "%L", id, "YOU_HAVE_NO_ACCESS", g_MODclient); return PLUGIN_HANDLED; } // OK we're free to go!!! new szArg1[32], szArg2[32]; read_argv(1, szArg1, 31); read_argv(2, szArg2, 31); // Give the user XP if (equal(szCmd, "wc3_givexp") || equal(szCmd, "amx_givexp")) { if ( read_argc() < 3 ) { ADMIN_Print( id, "Format: %s <name|#id|auth|@TEAM|@ALL> <xp>", szCmd ); return PLUGIN_HANDLED; } ADMIN_GiveXP( id, szArg1, str_to_num( szArg2 ) ); } // Set the level of a user's race else if ( equal( szCmd, "wc3_setlevel" ) ) { if ( read_argc() < 3 ) { ADMIN_Print( id, "Format: %s <name|#id|auth|@TEAM|@ALL> <level>", szCmd ); return PLUGIN_HANDLED; } new iLevel = str_to_num( szArg2 ); if ( iLevel < 0 || iLevel >= 11 ) { ADMIN_Print( id, "%s Error, level must be in between (or equal to) 0 and 10", g_MODclient ); return PLUGIN_HANDLED; } ADMIN_SetLevel( id, szArg1, iLevel ); } // Give the user an item else if ( equal( szCmd, "wc3_giveitem" ) ) { if ( read_argc() < 3 ) { ADMIN_Print( id, "Format: %s <name|#id|auth|@TEAM|@ALL> <item id or name>", szCmd ); return PLUGIN_HANDLED; } new iItemID; if ( is_str_num( szArg2 ) ) { iItemID = str_to_num( szArg2 ); if ( iItemID > 17 || iItemID < 0 ) { ADMIN_Print( id, "%s Error, item id must be in between (or equal to) 0 and 17", g_MODclient ); return PLUGIN_HANDLED; } } ADMIN_GiveItem( id, szArg1, iItemID ); } // Enable the plugin else if ( equal( szCmd, "wc3_enable" ) ) { // Plugin was already enabled, why re-enable? if ( warcraft3 ) { ADMIN_Print( id, "%s The plugin was already enabled!", g_MODclient ); } // Enable the plugin! else { warcraft3 = true; ADMIN_Print( id, "%s Plugin enabled!", g_MODclient ); } } // Disable the plugin else if ( equal( szCmd, "wc3_disable" ) ) { // Plugin was already enabled, why re-enable? if ( !warcraft3 ) { ADMIN_Print( id, "%s The plugin was already disabled!", g_MODclient ); } // Disable the plugin! else { // What needs to happen here? // - all skills set to 0 for each player // - call SHARED_SetGravity // - call SHARED_SetInvis // - call SHARED_SetSpeed // - stop tasks - like money task for dod // - ULT_ClearIcons( id ) warcraft3 = false; ADMIN_Print( id, "%s Plugin disabled!", g_MODclient ); } } new szArgs[128]; read_args( szArgs, 127 ); ADMIN_Log( id, szCmd, "%s", szArgs ); return PLUGIN_HANDLED;}// Actually set the user's XPADMIN_SetXP( id, iXP ){ if ( iXP < 0 ) { iXP = 0; } p_data[id][P_XP] = iXP; XP_Check( id ); set_task( 0.3, "WC3_GetUserInput", TASK_GETINPUT + id );}// Set the user's levelADMIN_SetLevel( id, szTarget[], iLevel ){ new iXP = XP_GetByLevel( iLevel ); new iTarget = 0, bool:bTargetFound = false; // Do this while we continue having a target! while ( ( iTarget = FindTarget( iTarget, szTarget ) ) > 0 ) { ADMIN_SetXP( iTarget, iXP ); client_print( iTarget, print_chat, "%s The admin has set your race's level to %d", g_MODclient, iLevel ); bTargetFound = true; } // No target found :/ if ( !bTargetFound ) { ADMIN_NoTargetFound( id, szTarget, ( iTarget == -2 ) ); }}// Give the user some XPADMIN_GiveXP( id, szTarget[], iXP ){ new iTarget = 0, bool:bTargetFound = false; // Do this while we continue having a target! while ( ( iTarget = FindTarget( iTarget, szTarget ) ) > 0 ) { ADMIN_SetXP( iTarget, p_data[iTarget][P_XP] + iXP ); client_print( iTarget, print_chat, "%s %L", g_MODclient, iTarget, "THE_ADMIN_GAVE_YOU_EXPERIENCE", iXP ); bTargetFound = true; } // No target found :/ if ( !bTargetFound ) { ADMIN_NoTargetFound( id, szTarget, ( iTarget == -2 ) ); }}// Give the user an itemADMIN_GiveItem( id, szTarget[], iItemID ){ new szItemName[32]; LANG_GetItemName ( iItemID, id, szItemName, 31 ); new iTarget = 0, bool:bTargetFound = false; // Do this while we continue having a target! while ( ( iTarget = FindTarget( iTarget, szTarget ) ) > 0 ) { client_print( iTarget, print_chat, "%s The admin has given you the item '%s'", g_MODclient, szItemName ); ITEM_GiveItem( iTarget, iItemID ); bTargetFound = true; } // No target found :/ if ( !bTargetFound ) { ADMIN_NoTargetFound( id, szTarget, ( iTarget == -2 ) ); }}// Find a user based on szTargetFindTarget( iLastID, szTarget[] ){ new iTarget = -1; // Then we want to basically return everyone! if ( equali( szTarget, "@ALL" ) ) { new players[32], iTotalPlayers, i; get_players( players, iTotalPlayers ); // Loop through and search for the next target for ( i = 0; i < iTotalPlayers; i++ ) { // Target found, so lets return the next one (if possible)!! if ( players[i] == iLastID && i + 1 != iTotalPlayers ) { iTarget = players[i+1]; } } // No target was found so return the first one if ( iTotalPlayers > 0 && iLastID == 0 ) { iTarget = players[0]; } } // Find a target based on the team else if ( szTarget[0] == '@' ) { new iTeam = -1; // Counter-Strike and Condition Zero Checks if ( g_MOD == GAME_CSTRIKE || g_MOD == GAME_CZERO ) { if ( equali( szTarget, "@T" ) ) { iTeam = TEAM_T; } else if ( equali( szTarget, "@CT" ) ) { iTeam = TEAM_CT; } } // Day of Defeat check else if ( g_MOD == GAME_DOD ) { if ( equali( szTarget, "@ALLIES" ) ) { iTeam = ALLIES; } else if ( equali( szTarget, "@AXIS" ) ) { iTeam = AXIS; } } // Make sure a team was found if ( iTeam != -1 ) { new players[32], iTotalPlayers, i, iFirstPlayer = -1, bool:bSaveNext = false; get_players( players, iTotalPlayers ); // Loop through and search for the next target for ( i = 0; i < iTotalPlayers; i++ ) { // Make sure they're on the same team if ( iTeam == get_user_team( players[i] ) ) { // This is the next available player if ( bSaveNext ) { iTarget = players[i]; break; } // If this is the previous target, we need to get the next one! if ( players[i] == iLastID ) { bSaveNext = true; } // Save the FIRST player on this team if ( iFirstPlayer == -1 ) { iFirstPlayer = players[i]; } } } // No target was found so return the first one that matches the team (the target could still be -1 if iFirstPlayer wasn't found) if ( iLastID == 0 ) { iTarget = iFirstPlayer; } } } // Otherwise search for a player else { // Initial search is by player name new iPlayer = find_player( "a", szTarget ); // If not found, search by partial match if ( !iPlayer ) { iPlayer = find_player( "bl", szTarget ); if ( iPlayer ) { // Then Multiple clients found if ( iPlayer != find_player( "blj", szTarget ) ) { return -2; } } } // If not found, search by auth id if ( !iPlayer ) { iPlayer = find_player( "c" , szTarget ); } // If not found, search by user id if ( !iPlayer ) { // Make sure we have a user id if ( szTarget[0] == '#' && szTarget[1] ) { iPlayer = find_player( "k", str_to_num( szTarget[1] ) ) } } // Yay we have a match!!! if ( iPlayer && iLastID != iPlayer ) { iTarget = iPlayer; } } return iTarget;}ADMIN_NoTargetFound( id, szTarget[], bool:bMulti ){ // Multiple clients found if ( bMulti ) { ADMIN_Print( id, "%s There is more than one client matching '%s'", g_MODclient, szTarget ); } else { ADMIN_Print( id, "%s Unable to find target(s) '%s'", g_MODclient, szTarget ); } // List what the available targets are if ( g_MOD == GAME_CSTRIKE || g_MOD == GAME_CZERO ) { ADMIN_Print( id, "%s Available targets are: @ALL, @CT, @T or the player's name/auth/#id", g_MODclient ); } else if ( g_MOD == GAME_DOD ) { ADMIN_Print( id, "%s Available targets are: @ALL, @ALLIES, @AXIS or the player's name/auth/#id", g_MODclient ); }}// Function will print to server console or client console based on the ID numberADMIN_Print( id, text[], {Float,_}:...){ // format the text as needed new szFormattedText[128]; format_args( szFormattedText, 127, 1 ); if ( id == 0 ) { server_print( szFormattedText ); } else { client_print( id, print_console, szFormattedText ); } // Gets rid of compiler warning if ( text[0] == 0 ) { return; }} // Adapted from war3x's log file (I was lazy)ADMIN_Log( id, szCommand[], {Float,_}:... ){ new szLogFile[128]; get_configsdir( szLogFile, 127 ); formatex( szLogFile, 127, "%s/war3ft/wc3_admin.log", szLogFile ); new szFormattedText[128]; format_args( szFormattedText, 127, 2 ); if ( !file_exists( szLogFile ) ) { write_file( szLogFile, "WC3 : Frozen Throne", -1 ); write_file( szLogFile, "Logging of admin commands", -1 ); write_file( szLogFile, " ", -1 ); } new szAdminName[32], szSteamID[32], szTeam[13]; if ( id > 0 ) { get_user_name( id, szAdminName, 31 ); get_user_authid( id, szSteamID, 31 ); get_user_team( id, szTeam, 12 ); } else { copy( szAdminName, 31, "SERVER" ); copy( szSteamID, 31, "SERVER" ); } new szCurrentTime[32]; get_time( "L %m/%d/%Y %H:%M:%:S", szCurrentTime, 31 ); new szLogEntry[256]; formatex( szLogEntry, 255, "%s Cmd: ^"%s<%d><%s><%s>^" '%s %s'", szCurrentTime, szAdminName, get_user_userid( id ), szSteamID, szTeam, szCommand, szFormattedText ); write_file( szLogFile, szLogEntry, -1 ); // Gets rid of compiler warning if ( szCommand[0] == 0 ) { return; }} Attached Files Get Plugin or Get Source (war3ft.sma - 20.4 KB) Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi