Skocz do zawartości
szogun

Modele broni

Rekomendowane odpowiedzi

Napisano (edytowane)

Plugin na kosy nie powinien mieć z tym nic wspólnego - założę się, że VIP z generatora wykonuje funkcję GivePlayerItem dokładnie w momencie wywołania eventu player_spawn co w przypadku CS:GO powoduje takie błędy (jest to w jakiś sposób powiązane ze zmianą drużyny). Rozwiązanie jest proste: musisz opóźnić dawanie broni timerem, np o 0.1 sec.

Edytowane przez Scorpion Flail

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Okej mam coś takiego, i tak to teraz ugryźć,

public Action PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(!IsPlayerVIP(client)) return;
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
		SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
		SetEntProp(client, Prop_Send, "m_bHasHelmet", 1);
	int money = GetEntProp(client, Prop_Send, "m_iAccount");
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
	SetEntProp(client, Prop_Send, "m_iAccount", money+200);
	if(GetClientTeam(client) == CS_TEAM_CT)
		if(GetEntProp(client, Prop_Send, "m_bHasDefuser") == 0) GivePlayerItem(client, "item_defuser");
	for(int x = 0; x < 1; x++)
			if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetHe) < 1) GivePlayerItem(client, "weapon_hegrenade");
	for(int x = 0; x < 1; x++)
			if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetFlash) < 1) GivePlayerItem(client, "weapon_flashbang");
	for(int x = 0; x < 1; x++)
			if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetSmoke) < 1) GivePlayerItem(client, "weapon_smokegrenade");
	if(GetClientTeam(client) == CS_TEAM_CT)
	{
		for(int x = 0; x < 1; x++)											// ilosc inc 
			if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
			if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetInc) < 1) GivePlayerItem(client, "weapon_incgrenade");
	}
	else if(GetClientTeam(client) == CS_TEAM_T)
	{
		for(int x = 0; x < 1; x++)
				if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
			if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetMol) < 1) GivePlayerItem(client, "weapon_molotov");
	}
}

Mam rozumieć że w onemapstart dodaje, ale teraz do tego playerspawn jak podpiąć timer

CreateTimer(5.0, Bonus_Item);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Scorpion Flail mam tak jak mówiłeś ale nadal, dochodzą mnie słuchy że modele znikają

 

public Action PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(!IsPlayerVIP(client)) return Plugin_Continue;
	CreateTimer(1.0, Timer_DelaySpawn, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
	return Plugin_Continue;
}

public Action Timer_DelaySpawn(Handle timer, any data)
{
	int client;
	
	if ((client = GetClientOfUserId(data)) == 0)
	{
		return Plugin_Stop;
	}
	
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
	SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
	SetEntProp(client, Prop_Send, "m_bHasHelmet", 1);
	int money = GetEntProp(client, Prop_Send, "m_iAccount");
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
	SetEntProp(client, Prop_Send, "m_iAccount", money+200);
	if(GetClientTeam(client) == CS_TEAM_CT)
	if(GetEntProp(client, Prop_Send, "m_bHasDefuser") == 0) GivePlayerItem(client, "item_defuser");
	for(int x = 0; x < 1; x++)
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
	if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetHe) < 1) GivePlayerItem(client, "weapon_hegrenade");
	for(int x = 0; x < 1; x++)
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
	if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetFlash) < 1) GivePlayerItem(client, "weapon_flashbang");
	for(int x = 0; x < 1; x++)
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
	if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetSmoke) < 1) GivePlayerItem(client, "weapon_smokegrenade");
	if(GetClientTeam(client) == CS_TEAM_CT)
	{
		for(int x = 0; x < 1; x++)                                            // ilosc inc
		if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0) 
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetInc) < 1) GivePlayerItem(client, "weapon_incgrenade");
	}
	else if(GetClientTeam(client) == CS_TEAM_T)
	{
		for(int x = 0; x < 1; x++)
		if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetMol) < 1) GivePlayerItem(client, "weapon_molotov");
	}
	
	return Plugin_Stop;
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W timerze powinieneś upewnić się, że gracz na pewno żyje + przydałaby się jakaś walidacja gracza typu:

stock bool IsValidPlayer(int client)
{
    if(client >= 1 && client <= MaxClients && IsClientInGame(client) && IsClientConnected(client) && !IsFakeClient(client) && !IsClientReplay(client) && !IsClientSourceTV(client))
        return true;
    return false;
}

Generalnie problem można, np odtworzyć tak:

- zbierz 3 osoby do testów (niech wszystkie mają vipa żeby było prościej)

- 2 osoby powinny samodzielnie dołączyć do przeciwnych drużyn, a następnie zamienić się nimi (jeśli używasz pluginów typu autojoin to wyłącz je na czas testów)

- trzecia osoba powinna wtedy dołączyć na serwer i jeśli dobrze pamiętam - odczekać na automatyczne przydzielenie do jednej z drużyn (po upłynięciu odpowiedniego czasu tak by jej nie zrespiło) - broń powinna zniknąć temu na kogo z automatu zacznie patrzeć

 

Jak już będziesz potrafił odtworzyć błąd to możesz zacząć testować poszczególne pluginy / fragmenty kodu, aż upewnisz się że problem rozwiązałeś. Dwukrotnie spotkałem się z takim problemem w pluginie vipa oraz oryginalnym pluginie cksurfa i w obu przypadkach problem stanowił GivePlayerItem dokładnie w momencie wywołania player_spawn - dodanie timera z prawidłową walidacją załatwiło sprawę.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Pomógł byś mi to ogarnąć, znaczy zrobić tą walidację i sprawdzanie, bo sam to nad tym będę siedział drugie tyle @Scorpion Flail

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

  • Podobna zawartość

    • Przez Arnaksik
      Siemka. poszukuje Vipa co ma menu broni od 3 rundy bądź plugin z którego będę mógł to wyciągnąć. 
    • Przez nikol
      Witam.
      Wgrałem na serwer o te modele https://gamebanana.com/skins/145956 ale nie wiem za bardzo co mam zrobić dalej by ustawić je defaultowo [odrazu by byly ciągle] dla terrorysty i ct
      Ktoś by mógł wyjaśnić co trzeba zrobić?
    • Przez Sqower
      Witam, czy posiada ktoś może z was plugin który automatycznie zmienia modele ct i tt ?
      Z góry dziękuje 
    • Przez Umino
      Opis: Zlecę wykonanie mapy typu. awp, oraz modeli postaci Cena: Do ugadania :D Płatność: Przelew Bankowy / PayPal Kontakt:  PW lub na forum
    • Przez BlackY123
      Plugin ma działać w ten sposób, że powinien wyrzucić wszystkie bronie z eq i zablokować podnoszenie broni dla Terrorystów
×