Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

TakaSytuacjaZiom

Użytkownik
  • Postów

    45
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Odpowiedzi opublikowane przez TakaSytuacjaZiom

  1. 2 godziny temu, MAGNET napisał:

    Takie coś byłoby możliwe, gdyby pawn obsługiwał funkcje asynchroniczne i polecenia async/await (jak w JavaScript'ie). Tutaj musisz posłużyć się timerami, ale na szczęście umożliwiają one przekazywanie danych. Jeśli musisz przesłać więcej niż jedną wartość można do tego celu użyć DataPacka

    Zwróć też uwagę, że Twój przypadek (wykopanie gracza po x sekundach) jest lekko podchwytliwy. Wyobraź sobie sytuację, że wywołujesz polecenie, które ma za zadanie wykopać gracza po X sekundach. Co jednak w sytuacji, gdy podczas tego czasu X oznaczony gracz wyjdzie z serwera i na jego miejsce wskoczy nowy? Wówczas niewinny player dostanie kicka i "Bye bye" na twarz.

    Aby temu zapobiec, użyj UserId

    Przyjrzę się temu, w razie problemów będę pisał. Dzięki wielkie za konkrety ?

  2. Siemka, można jakoś opóźnić wykonanie danej części funkcji, nie dzieląc jej na kolejne? Przykładowo mam funkcję, która wypisuje coś na czacie i po dajmy na to pięciu sekundach ma wykopać gracza, czyli coś w ten deseń:
     

    Cytat

    public void WykopGracza(int client) {

    PrintToChat(client, "Zostaniesz wykopany za 5 sekund");

    <-- TUTAJ 5 SEKUND PAUZY -->

    KickClient(client, "Bye bye");

    }

    Jakieś podpowiedzi, pomysły?

  3. Siemka, korzystam z nowego coda, chcę stworzyć klasę, która będzie miała USP-S oraz M1A1-S, ale pojawia się taki problem, że przy zrespieniu gracza, bronie zostają upuszczone :/ Nie korzystam z żadnych blokad broni ani nic, jakieś pomysły? :/ Bronie są poprawnie zadeklarowane:

    new const String:bronie[] = "#weapon_m4a1_silencer#weapon_usp_silencer#weapon_flashbang";

     

  4. Tak, dokładnie. Dobrze mówisz, tylko tutaj z tego co się bawiłem, jeśli ja zabijam przeciwnika, to on wybucha :/ Ale chyba właśnie podsunąłeś rozwiązanie tym ma_klase[client] :D

     Zaraz się pobawię i dam znać, czy działa jak należy z tym ;D

     

    EDIT: Działa, dziękuję :D

  5. Po 

     if(GetVectorDistance(origin, origin_player) <= 200.0);

    jest niepotrzebny średnik tylko, a tak to git ;)

    Tylko, żeee... Jeśli ja zabijam kogoś to wtedy on wybucha (nie ma klasy), to jest jedyny bubel :/ Jak powinien wyglądać ten warunek? Nie będzie tutaj potrzebne to?

    new killer = GetClientOfUserId(GetEventInt(event, "attacker"));
    
  6. Coś mi się tutaj chyba nie zgadza...

    Najpierw powinna nastąpić eksplozja ginącego (czyli gracza używającego tej klasy, który został zabity).

    Następnie pętla powinna sprawdzić wszystkich graczy po kolei czy są w przeciwnym teamie oraz czy są w obszarze dajmy na to 200 jednostek (Warunek if(GetVectorDistance(spawn, origin_player) <= 200)).

    I na koniec wszyscy gracze w danym obszarze (200 jednostek przykładowo wg. powyższego if'a), otrzymują damage 40+inteligencja (Czyli: cod_inflict_damage(i, client, 40+inteligencja);).

    Dobrze to rozumiem?

    public Action:SmiercGracza(Handle:event, String:name[], bool:dontbroadcast)
    {
    	new client = GetClientOfUserId(GetEventInt(event, "userid"));
    	new Float:iorigin[3];
    
    	PerformExplode(client);
    
    	for(new i = 1; i <= MaxClients; i++)
    	{
    		if(GetClientTeam(client) != GetClientTeam(i))
    			continue;
    
    		if(!IsClientInGame(i) || !IsPlayerAlive(i))
    			continue;
    
    		decl Float:origin_player[3];
    		GetEntPropVector(client, Prop_Send, "m_vecOrigin", origin_player);
    
    		decl Float:spawn[3];
       		GetEntPropVector(i, Prop_Send, "m_vecOrigin", spawn);
    
    		GetClientEyePosition(i, iorigin);
    		if(GetVectorDistance(spawn, origin_player) <= 200)
    			cod_inflict_damage(i, client, 40+inteligencja);
    	}
    
    	return Plugin_Continue;
    }

    Tak to powinno być? Czy źle to robię?

  7. Chyba jest ok, ale coś źle ustawiam chyba. To ma być do klasy COD mod, ma to wyglądać tak, że gracz grający tą klasą po śmierci wybucha i zadaje obrażenia pobliskim przeciwnikom, coś w stylu jakby dropnął odbezpieczony granat. Masz może pomysł jak to ustawić? W poniższym kodzie zostawiam pozostałości po poprzedniej próbie, może coś się przyda ;D

    #include <sourcemod>
    #include <sdkhooks>
    #include <sdktools>
    #include <csgocolors>
    #include <codmod>
    
    new const String:nazwa[] = "test";
    new const String:opis[] = "Wybucha po śmierci, 40 dmg + int";
    new const String:bronie[] = "#weapon_elite";
    new const inteligencja = 0;
    new const zdrowie = 0;
    new const obrazenia = 0;
    new const wytrzymalosc = 0;
    new const kondycja = 15;
    
    new bool:ma_klase[65];
    
    new g_ExplosionSprite;
    public Plugin:myinfo =
    {
    	name = nazwa,
    	version = "1.0",
    };
    public OnPluginStart()
    {
    	CreateTimer(0.5, RegisterStart, 0);
    	HookEvent("player_death", SmiercGracza);
    }
    public Action:RegisterStart(Handle:timer)
    {
        cod_register_class(nazwa, opis, bronie, inteligencja, zdrowie, obrazenia, wytrzymalosc, kondycja);
    }
    public OnMapStart()
    {
    	//sprite_explosion = PrecacheModel("materials/sprites/blueflare1.vmt");
    	PrecacheSound("weapons/hegrenade/explode5.wav");
    	g_ExplosionSprite = PrecacheModel("materials/sprites/sprite_fire01.vmt");
    }
    public cod_class_enabled(client)
    {
    	if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)
    	{
    		ma_klase[client] = true;
    		return COD_CONTINUE;
    	}
    
    	PrintToChat(client, " \x06Klasa dostępna tylko dla VIPów!");
    	return COD_STOP;
    }
    public cod_class_disabled(client)
    {
    	ma_klase[client] = false;
    }
    public Action:SmiercGracza(Handle:event, String:name[], bool:dontbroadcast)
    {
    	new client = GetClientOfUserId(GetEventInt(event, "userid"));
    	/*new killer = GetClientOfUserId(GetEventInt(event, "attacker"));
    
    	if(!IsValidClient(killer) || GetClientTeam(client) == GetClientTeam(killer))
    		return Plugin_Continue;
    
    	new Float:forigin[3], Float:iorigin[3];
    	GetClientEyePosition(client, forigin);
    
    	for(new i = 1; i <= MaxClients; i++)
    	{
    		if(!IsClientInGame(i) || !IsPlayerAlive(i))
    			continue;
    
    		if(GetClientTeam(client) == GetClientTeam(i))
    			continue;
    
    		GetClientEyePosition(i, iorigin);
    		if(GetVectorDistance(forigin, iorigin) <= 100.0)
    			cod_inflict_damage(i, client, GetClientHealth(i)+1);
    	}*/
    
    	PerformExplode(client);
    
    	/*EmitSoundToAll("weapons/hegrenade/explode5.wav", client, SNDCHAN_AUTO, SNDLEVEL_GUNFIRE);
    	TE_SetupExplosion(forigin, sprite_explosion, 10.0, 1, 0, 100, 100);
    	TE_SendToAll();*/
    
    	return Plugin_Continue;
    }
    
    public PerformExplode(target) {
        decl Float:location[3];
        GetEntPropVector(target, Prop_Send, "m_vecOrigin", location);
        location[2] += 20.0;
    
        TE_SetupExplosion(location, g_ExplosionSprite, 10.0, 1, 0, 70, 5000);
        TE_SendToAll();
    }

     

  8. To jest część kodu, którą próbowałem wychwycić co jest nie tak ;)

    Jest to fragment VIPa z generatora:

    #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"
    };
    
    public void OnPluginStart()
    {
    	HookEvent("player_spawn", PlayerSpawn);
    	HookEvent("player_death", PlayerDeath);
    }
    public Action PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
    {
    	int client = GetClientOfUserId(GetEventInt(event, "userid"));
    	if(!IsPlayerVIP(client)) return;
    	SetEntProp(client, Prop_Send, "m_ArmorValue", );
    	SetEntProp(client, Prop_Send, "m_bHasHelmet", 1);
    	SetEntityHealth(client, 150);
    	int money = GetEntProp(client, Prop_Send, "m_iAccount");
    	SetEntProp(client, Prop_Send, "m_iAccount", money+500);
    	if(GetClientTeam(client) == CS_TEAM_CT)
    		if(GetEntProp(client, Prop_Send, "m_bHasDefuser") == 0) GivePlayerItem(client, "item_defuser");
    }
    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);
    	SetEntityHealth(attacker, health+10);
    	int money = GetEntProp(attacker, Prop_Send, "m_iAccount");
    	SetEntProp(attacker, Prop_Send, "m_iAccount", money+100);
    	bool headshot = GetEventBool(event, "headshot", false);
    	if(headshot)
    	{
    		money = GetEntProp(attacker, Prop_Send, "m_iAccount");
    		SetEntProp(attacker, Prop_Send, "m_iAccount", money+100);
    	}
    	if(GetClientHealth(attacker) > 200)
    				SetEntityHealth(attacker, 200);
    }
    
    stock bool IsValidPlayer(int client)
    {
    	if(client >= 1 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client) && !IsClientSourceTV(client))
    		return true;
    	return false;
    }
    stock bool IsPlayerVIP(int client)
    {
    	if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1 && !(GetUserFlagBits(client) & ADMFLAG_ROOT))
    		return true;
    	return false;
    }

     

  9. Plugin ma dawać hp i dodatkową kasę. Działa bez problemu, jedynie w pierwszej rundzie drugiej połowy nie dodaje środków na konto gracza, natomiast przydziela bez problemu HP, co wydaje mi się nieco dziwne...

    #include <sourcemod>
    #include <cstrike>
    #include <sdktools>
    
    #pragma semicolon 1
    
    public void OnPluginStart()
    {
    	HookEvent("player_spawn", PlayerSpawn);
    }
    
    public Action PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
    {
    	int client = GetClientOfUserId(GetEventInt(event, "userid"));
    	SetEntityHealth(client, 150);
    	int money = GetEntProp(client, Prop_Send, "m_iAccount");
    	SetEntProp(client, Prop_Send, "m_iAccount", money+500);
    }

     

  10. Siema, mam prawdopodobnie problem z ustawieniem rund u siebie. Mianowicie problem objawia się tym, że pierwsza runda po zmianie drużyn tak jakby nie jest triggerowana jako nowa runda. Dochodzę do takiego wniosku po tym, że mam plugin, który na początku każdej rundy coś robi, dajmy na to przyznaje pieniądze graczowi. I tylko w pierwszej rundzie drugiej połowy to się nie dzieje. Plugin testowy zrobił dla mnie profesjonalista, więc raczej nie może to być wina pluginu.

    Macie jakieś pomysłu o co może chodzić lub gdzie szukać problemu? :/

  11. Siemanko, jest jakiś sposób, żeby wrzucać ilość graczy na serwerze do bazy danych mysql? Powiedzmy, że co minutę lub co 5 minut miałby się odświeżać status serwera i nowe dane miały by być dodane do bazy (nie zastąpione, dodane w nowym rekordzie). Ktoś coś? :D

×
×
  • Dodaj nową pozycję...