Zaloguj się, aby obserwować  
szogun

Modele broni

Recommended Posts

Napisano (edytowany)

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.

Edytowano przez Scorpion Flail

Udostępnij ten post


Link to postu
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 ten post


Link to postu
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 ten post


Link to postu
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 ten post


Link to postu
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 ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!

Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.

Zaloguj się

Zaloguj się, aby obserwować  

  • Kto przegląda   0 użytkowników

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

  • Podobna zawartość

    • 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
    • Przez query96
      Witam. Potrzebuje pluginu na menu wyboru broni np. M4 AK AWP a następnie wybór pistoletu p250 cz75 auto fivesven desert eagle i jak można żeby było pod flaga na "s"
    • Przez Bezimienny
      Siemka, zacząłem używać na moim serwerze CoD mod'a nowego, ale potrzebuje aby gracze mogli podnosić broń, a nie mogą tego zrobić. Ktoś wie jak naprawić?
    • Przez Sqower
      Jest możliwość z innych gier z silnikiem source przenieść modele na csgo albo czy znacie osobę co się tym zajmuje płatnie/bezpłatnie 
      z góry dzięki za odpowiedz :)