Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

M@lpa - zdjęcie

M@lpa

Rejestracja: 11.02.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 27.05.2012 17:59
-----

Moje tematy

Zmiana drużyn i wyników

15.05.2012 23:08

Witam.
Mam plugin który po X rundach powinien zamieniać graczy drużynami i zmieniać wyniki. Działa właściwie dobrze, ale tylko w przypadku, jeśli gra się z botami. Gdy sprawdzałem go na serwerze, działał tylko gdy było 1vs1. Gdy gracze dochodzili, wyświetlała się wiadomość o zmianie drużyn, zmieniał się wynik, ale gracze dalej pozostawali w swoich teamach. W logach nic nie wyrzuca.
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <orpheu>
#include <orpheu_memory>
#include <ColorChat>
#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 pCvarResult;
new lic = 0;
new ttscore = 0;
new ctscore = 0;
public plugin_precache()
{
	OrpheuRegisterHook( OrpheuGetFunction( "InstallGameRules" ), "OnInstallGameRules", OrpheuHookPost );
}
public OnInstallGameRules()
{
	g_pGameRules = OrpheuGetReturn();
}
public plugin_init() {
register_plugin("mr12", "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' )
		ttscore = read_data(2);
	else
		ctscore = read_data(2);

if(ttscore+ctscore >= get_pcvar_num(pCvarResult)) changeTeams();
}
public changeTeams(){
lic++;
if(lic > 1)
  return PLUGIN_HANDLED;
set_mp_pdata( "m_iNumCTWins", ttscore );
	set_mp_pdata( "m_iNumTerroristWins", ctscore );
ColorChat(0, RED, "--------------!!!ZMIANA DRUZYN!!!--------------");
  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 ) return PLUGIN_HANDLED;

  cs_set_user_team (i, cs_get_user_team(i) == CS_TEAM_CT?CS_TEAM_T:CS_TEAM_CT, CS_DONTCHANGE)
}

	UpdateTeamScores( .notifyAllPlugins = true );

return PLUGIN_HANDLED;
}
}
UpdateTeamScores ( const bool:notifyAllPlugins = false )
{
	static OrpheuFunction:handleFuncUpdateTeamScores;
	if ( !handleFuncUpdateTeamScores )
	{
	handleFuncUpdateTeamScores = OrpheuGetFunction( "UpdateTeamScores", "CHalfLifeMultiplay" )
	}
	( notifyAllPlugins ) ?
	OrpheuCallSuper( handleFuncUpdateTeamScores, g_pGameRules ) :
	OrpheuCall( handleFuncUpdateTeamScores, g_pGameRules );
}

[ROZWIĄZANE] Orpheu. Zamiana wyników drużyn

13.05.2012 21:28

Witam.
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

[ROZWIĄZANE] Sprawdzanie czy gracz jest ostatnim żyjącym w drużynie.

27.04.2012 21:41

Witam.
Napisałem plugin, którego zadaniem jest sprawdzanie, czy został ostatni żywy gracz z TT. Jeśli tak to wykonuję jakąś czynność(w tym przypadku client_print(0, print_chat, "123"); ). Problem w tym, że... nie działa. Nie wyrzuca żadnych logów ani nic, po prostu się nigdy nie wykonuje. Jakieś pomysły?

#include <amxmodx>
#include <fakemeta>
#include <fun>

new num;

public plugin_init()
{
		register_plugin( "a", "1.0", "au" );
	register_event("DeathMsg","death","a");	
}

public death(id)
{
	num = 0;
	for(new i=1; i<=32; i++)
	{
	if(is_user_alive(i) && get_user_team(i) == 1)
	num++;
	}
	if(num < 2)
	{
		for(new b = 1;1<=32;b++)
		{	
		if(is_user_connected( B) && get_user_team( B) == 2)
		{
		client_print(0, print_chat, "123");
		}
		else
		return PLUGIN_HANDLED;
		}
	}
	else
	return PLUGIN_HANDLED;
		return PLUGIN_CONTINUE;
}