Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Sign in to follow this  
szogun

[Rozwiązane] Znikające modele w vipie

Recommended Posts

Witajcie, mam mały problem z znikaniem modeli broni gdy wchodzi vip na serwer. Kiedyś doradziła mi jedna osoba że może być to przez GivePlayerItem i żeby dodać do tego timer opóźniający dawanie granatów itp lecz niestety nadal mi to nie pomogło.

 

#include <sourcemod>
#include <cstrike>
#include <sdktools>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo =
{
	name = "[CS:GO] VIP",
	author = "xBonio & Avgariat & Vasto_Lorde",
	description = "VIP Generator by cs-plugin.com",
	version = "1.0",
	url = "http://cs-plugin.com"
};

char tag[64] = "VIP";

int offsetHe;
int offsetFlash;
int offsetSmoke;
int offsetInc;
int offsetMol;

public void OnPluginStart()
{
	HookEvent("bomb_planted", EventBombPlanted);
	HookEvent("bomb_defused", EventBombDefused);
	HookEvent("player_spawn", PlayerSpawn);
	HookEvent("player_death", PlayerDeath);
}

public void OnMapStart()
{
	
	int entindex;

	entindex = CreateEntityByName("weapon_hegrenade");
	DispatchSpawn(entindex);
	offsetHe = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType");
	AcceptEntityInput(entindex, "Kill");

	entindex = CreateEntityByName("weapon_flashbang");
	DispatchSpawn(entindex);
	offsetFlash = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType");
	AcceptEntityInput(entindex, "Kill");

	entindex = CreateEntityByName("weapon_smokegrenade");
	DispatchSpawn(entindex);
	offsetSmoke = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType");
	AcceptEntityInput(entindex, "Kill");

	entindex = CreateEntityByName("weapon_incgrenade");
	DispatchSpawn(entindex);
	offsetInc = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType");
	AcceptEntityInput(entindex, "Kill");
	
	entindex = CreateEntityByName("weapon_molotov");
	DispatchSpawn(entindex);
	offsetMol = GetEntProp(entindex, Prop_Send, "m_iPrimaryAmmoType");
	AcceptEntityInput(entindex, "Kill");

}


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;
}
public Action PlayerDeath(Handle event, const char[] name, bool dontBroadcast)
{
	int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	if(!IsValidPlayer(attacker) || !IsPlayerVIP(attacker)) return;
	int health = GetClientHealth(attacker);
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
	SetEntityHealth(attacker, health+5);
	int money = GetEntProp(attacker, Prop_Send, "m_iAccount");
	SetEntProp(attacker, Prop_Send, "m_iAccount", money+100);
	bool headshot = GetEventBool(event, "headshot", false);
	if(headshot)
	{
		health = GetClientHealth(attacker);
		if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0)
		SetEntityHealth(attacker, health+5);
		money = GetEntProp(attacker, Prop_Send, "m_iAccount");
		SetEntProp(attacker, Prop_Send, "m_iAccount", money+150);
	}
	if(GetClientHealth(attacker) > 100)
				SetEntityHealth(attacker, 100);
}

public Action EventBombPlanted(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	int money = GetEntProp(client, Prop_Send, "m_iAccount");
	if(IsPlayerVIP(client))
		SetEntProp(client, Prop_Send, "m_iAccount", money+150);
}
public Action EventBombDefused(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	int money = GetEntProp(client, Prop_Send, "m_iAccount");
	if(IsPlayerVIP(client))
		SetEntProp(client, Prop_Send, "m_iAccount", money+150);
}

public void OnClientPostAdminCheck(int client)
{
	if(IsPlayerVIP(client))
	{
			
		PrintToChatAll(" %s \x03%N\x01 \x01", tag, client);
	}
}

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

 

Share this post


Link to post
Share on other sites

Sam nie wiem co może powodować problem, ale można spróbować z tym pokombinować troche...

 

spróbuj usunąć z vipa wszystkie GivePlayerItem'y is sprawdzić, czy problem dalej występuje

Share this post


Link to post
Share on other sites

Jeżeli na serwerze są aktywne pluginy typu !ws, !knife, to bardziej prawdopodobne, że one to powodują. Skąd pewność, że problemy pojawiają się przez plugin do Vipa?

  • Lubię to! 1

Share this post


Link to post
Share on other sites

Obecnie mam wyłączone owe pluginy, na potrzeb testow, serwera są one wyłączone okolo tygodnia i w tym okresie rowniez znikał model broni gdy wchodził vip w momencie wyłączenia samego vipa problem nie występuje

Edited by szogun
  • Lubię to! 1

Share this post


Link to post
Share on other sites

Kawałek kodu, w którym kiedyś to poprawiałem:

 

public Action PlayerSpawn(Event event, const char[] name, bool dontBroadcast) 
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(IsValidPlayer(client) && IsPlayerVIP(client))
	{
		if(IsPlayerAlive(client))
		{
			CreateTimer(0.1, GiveEquipment, GetEventInt(event, "userid"), TIMER_FLAG_NO_MAPCHANGE);
		}
	}
}
public Action GiveEquipment(Handle timer, any userid) {
	int client = GetClientOfUserId(userid);
   
	if(!IsPlayerAlive(client) || !IsValidPlayer(client)) return;
  
   
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0 && GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 15)
	{  
		SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
		SetEntProp(client, Prop_Send, "m_bHasHelmet", 1);

		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetHe) < 1) 
			GivePlayerItem(client, "weapon_hegrenade");
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetFlash) < 1) 
			GivePlayerItem(client, "weapon_flashbang");
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetSmoke) < 1) 
			GivePlayerItem(client, "weapon_smokegrenade");

		if(GetClientTeam(client) == CS_TEAM_CT) 
			if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetInc) < 1) 
				GivePlayerItem(client, "weapon_incgrenade");

		if(GetClientTeam(client) == CS_TEAM_T)
			if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetMol) < 1) 
				GivePlayerItem(client, "weapon_molotov");
	}
	
	SetEntityHealth(client, 110);
	CS_SetClientClanTag(client, tag);
	if(GetClientTeam(client) == CS_TEAM_CT)
		if (GetEntProp(client, Prop_Send, "m_bHasDefuser") == 0)
			GivePlayerItem(client, "item_defuser");
}
stock bool IsValidPlayer(int client)
{
    if(client >= 1 && client <= MaxClients && IsClientInGame(client) && IsClientConnected(client) && !IsFakeClient(client) && !IsClientReplay(client) && !IsClientSourceTV(client))
        return true;
    return false;
}

Nie pamiętam czy wszystkie warunki są konieczne - potestuj sobie.

  • Lubię to! 3

Share this post


Link to post
Share on other sites

 

1 godzinę temu, Scorpion Flail napisał:

Kawałek kodu, w którym kiedyś to poprawiałem:

 


public Action PlayerSpawn(Event event, const char[] name, bool dontBroadcast) 
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(IsValidPlayer(client) && IsPlayerVIP(client))
	{
		if(IsPlayerAlive(client))
		{
			CreateTimer(0.1, GiveEquipment, GetEventInt(event, "userid"), TIMER_FLAG_NO_MAPCHANGE);
		}
	}
}
public Action GiveEquipment(Handle timer, any userid) {
	int client = GetClientOfUserId(userid);
   
	if(!IsPlayerAlive(client) || !IsValidPlayer(client)) return;
  
   
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0 && GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 15)
	{  
		SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
		SetEntProp(client, Prop_Send, "m_bHasHelmet", 1);

		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetHe) < 1) 
			GivePlayerItem(client, "weapon_hegrenade");
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetFlash) < 1) 
			GivePlayerItem(client, "weapon_flashbang");
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetSmoke) < 1) 
			GivePlayerItem(client, "weapon_smokegrenade");

		if(GetClientTeam(client) == CS_TEAM_CT) 
			if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetInc) < 1) 
				GivePlayerItem(client, "weapon_incgrenade");

		if(GetClientTeam(client) == CS_TEAM_T)
			if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetMol) < 1) 
				GivePlayerItem(client, "weapon_molotov");
	}
	
	SetEntityHealth(client, 110);
	CS_SetClientClanTag(client, tag);
	if(GetClientTeam(client) == CS_TEAM_CT)
		if (GetEntProp(client, Prop_Send, "m_bHasDefuser") == 0)
			GivePlayerItem(client, "item_defuser");
}
stock bool IsValidPlayer(int client)
{
    if(client >= 1 && client <= MaxClients && IsClientInGame(client) && IsClientConnected(client) && !IsFakeClient(client) && !IsClientReplay(client) && !IsClientSourceTV(client))
        return true;
    return false;
}

Nie pamiętam czy wszystkie warunki są konieczne - potestuj sobie.

Poprawiony kod:

Spoiler

public Action PlayerSpawn(Event event, const char[] name, bool dontBroadcast) 
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(IsPlayerVIP(client))	//Jeżeli się zrespił, to raczej jest valid. Ponadto sprawdzasz to samo w timerze, więc zbędne.
	{
//		if(IsPlayerAlive(client))	//Jeżeli właśnie się odrodził, to jest żywy. Ponadto sprawdzasz to samo w timerze, więc zbędne. ;>
		CreateTimer(0.1, GiveEquipment, client, TIMER_FLAG_NO_MAPCHANGE);	//Po co przekazywać userid, jeżeli i tak potrzebny jest client ?
	}
}
public Action GiveEquipment(Handle timer, any client) {
//	int client = GetClientOfUserId(userid);
   
	if(!IsValidPlayer(client, true)) return;	//Sprawdza czy valid i czy żywy
  
   
	if(GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 0 && GetTeamScore(CS_TEAM_CT) + GetTeamScore(CS_TEAM_T) != 15)
	{  
		SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
		SetEntProp(client, Prop_Send, "m_bHasHelmet", 1);
		int money = GetEntProp(client, Prop_Send, "m_iAccount");	//Twoja wersja nie zawiera dodatkowej gotówki
		SetEntProp(client, Prop_Send, "m_iAccount", money+200);		//Twoja wersja nie zawiera dodatkowej gotówki

		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetHe) < 1) 
			GivePlayerItem(client, "weapon_hegrenade");
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetFlash) < 1) 
			GivePlayerItem(client, "weapon_flashbang");
		if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetSmoke) < 1) 
			GivePlayerItem(client, "weapon_smokegrenade");

		if(GetClientTeam(client) == CS_TEAM_CT) 
			if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetInc) < 1) 
				GivePlayerItem(client, "weapon_incgrenade");

		if(GetClientTeam(client) == CS_TEAM_T)
			if(GetEntProp(client, Prop_Send, "m_iAmmo", _, offsetMol) < 1) 
				GivePlayerItem(client, "weapon_molotov");
	}
	
//	SetEntityHealth(client, 110);	//Wersja autora nie dodaje HP
//	CS_SetClientClanTag(client, tag);	//Wersja autora nie ingeruje w tag grupy
	if(GetClientTeam(client) == CS_TEAM_CT)
		if (GetEntProp(client, Prop_Send, "m_bHasDefuser") == 0)
			GivePlayerItem(client, "item_defuser");
}
//Wersja tego stocka z możliwościa sprawdzenia, czy gracz jest żywy
stock bool IsValidPlayer(int client, bool bAlive = false)
{
	if(client >= 1 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client) && (!bAlive || IsPlayerAlive(client)))
		return true;
	return false;
}

 

@szogun W ogóle jeżeli masz problemy z tym pluginem, to spróbuj użyć Vipa Mesharskiego i ewentualnie dodać elementu kodu, jeżeli czegoś Ci tam brakuje. Z tego co widzę, to jest wygenerowany Vip z naszego generatora. Jednak robiliśmy go już bardzo dawno temu. Niektóre sposoby mogą być już niekoniecznie efektywne.

  • Lubię to! 2

Share this post


Link to post
Share on other sites

Wiadomość wygenerowana automatycznie

 

Temat został zamknięty. Powodem jest całkowite rozwiązanie problemu zawartego w temacie.

 

Jeśli się z tym nie zgadzasz, zaraportuj ten post z prośbą o ponowne otwarcie i kontynuację dyskusji.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

Nasza historia

Na początku byliśmy małą grupą internetowych znajomych, którzy stwierdzili, że potrzebne jest solidne forum, na którym znajdą się ludzie z dużą wiedzą programistyczną ukierunkowaną na CS:GO. Pomysł powstał na początku 2018 roku, a parę miesięcy później, 19 kwietnia, powstała ta strona internetowa. Jako alternatywna odpowiedź na inne tego typu miejsca, poważnie podeszliśmy do tematu, najpierw tłumacząc angielską dokumentację SourceMod'a na język polski, a potem pisząc rozległe poradniki i wypełniając forum najpotrzebniejszymi rzeczami dla właścicieli serwerów i programistów. Cała nasza Ekipa jest dumna z pracy jaką w to włożyliśmy i cieszymy się że zbierają się wokół nas zarówno ludzie znający tematy sourcepawn'a i konfiguracji, jak i również nowe twarze w tym "biznesie", którym z chęcią niesiemy wiedzę oraz pomoc w rozwiązywaniu problemów.

Największe modyfikacje serwerowe

×
×
  • Create New...