Potrzebuję zrobić plugin, który po 12 rundach przenosi graczy do przeciwnych drużyn oraz zmienia wyniki. Przenoszenie graczy działa bez zarzutu, ale przy wyniku zaczynają się schodki. Dowiedziałem się, że trzeba użyć oprheu, ale nie miałem z nim zbyt wiele do czynienia, więc znalazłem kod w sieci. Całość prezentuje się tak:
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #include <cstrike> #include <orpheu> #include <orpheu_memory> #define SCORE_T 0 #define SCORE_CT 1 #define set_mp_pdata(%1,%2) ( OrpheuMemorySetAtAddress( g_pGameRules, %1, 1, %2 ) ) #define get_mp_pdata(%1) ( OrpheuMemoryGetAtAddress( g_pGameRules, %1 ) ) new g_pGameRules; new g_TeamScore[2]; new pCvarResult, lic; public plugin_init() { register_plugin("New Plug-In", "1.0", "author") register_event("TeamScore", "teamScore", "a") pCvarResult = register_cvar("change_team_result","12"); } public teamScore(){ new sTeam[2]; read_data(1, sTeam, 1); if( sTeam[0] == 'T' ) g_TeamScore[SCORE_T] = read_data(2); else g_TeamScore[SCORE_CT] = read_data(2); if(g_TeamScore[SCORE_CT]+ g_TeamScore[SCORE_T] >= get_pcvar_num(pCvarResult)) changeTeams(); } public changeTeams(){ lic++; if(lic > 1) return PLUGIN_HANDLED; for(new i = 1 ; i < 33; i++ ){ if(!is_user_connected(i) || cs_get_user_team(i) == CS_TEAM_SPECTATOR || cs_get_user_team(i) == CS_TEAM_UNASSIGNED ) continue; cs_set_user_team(i,cs_get_user_team(i) == CS_TEAM_CT ? CS_TEAM_T : CS_TEAM_CT,cs_get_user_team(i) == CS_TEAM_CT ? CS_T_LEET : CS_CT_GIGN); } set_mp_pdata( "m_iNumCTWins", g_TeamScore[SCORE_T] ); set_mp_pdata( "m_iNumTerroristWins", g_TeamScore[SCORE_CT] ); UpdateTeamScores( .notifyAllPlugins = true ); } UpdateTeamScores ( const bool:notifyAllPlugins = false ) { static OrpheuFunction:handleFuncUpdateTeamScores; if ( !handleFuncUpdateTeamScores ) { handleFuncUpdateTeamScores = OrpheuGetFunction( "UpdateTeamScores", "CHalfLifeMultiplay" ) } ( notifyAllPlugins ) ? OrpheuCallSuper( handleFuncUpdateTeamScores, g_pGameRules ) : OrpheuCall( handleFuncUpdateTeamScores, g_pGameRules ); } public plugin_precache() { OrpheuRegisterHook( OrpheuGetFunction( "InstallGameRules" ), "OnInstallGameRules", OrpheuHookPost ); } public OnInstallGameRules() { g_pGameRules = OrpheuGetReturn(); }
I... dalej nie działa zmienianie wyników a w konsoli wywala:
L 05/13/2012 - 22:23:03: [ORPHEU] Invalid memory structure "m_iNumCTWins" L 05/13/2012 - 22:23:03: [AMXX] Run time error 10 (plugin "mr12.amxx") (native "OrpheuMemorySetAtAddress") - debug not enable