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
 

KoRrNiK - zdjęcie

KoRrNiK

Rejestracja: 26.12.2017
Aktualnie: Nieaktywny
Poza forum Ostatnio: 15.02.2025 20:02
*****

#779239 Pytanie o hud

Napisane przez KoRrNiK w 25.12.2024 23:36

 


ale w praktyce, jeśli ktoś ruszy głową i dobrze pomyśli, to można to obejść

no i po co ludzi w błąd wprowadzasz? Boski napisał, że się nie da, to się nie da. Jak dla mnie temat wyczerpany.

 

no taaak mój błąd  :facepalm: głupoty gadam.. czasem mam takie schizy, że nie wiem co się dzieje  :crazy:

 

Boski jest ten świat ukłony dla PANA  :rozpacz:


  • +
  • -
  • 1


#779235 Pytanie o hud

Napisane przez KoRrNiK w 25.12.2024 17:02

Teoretycznie HUDu nie da się zrobić w kilku kolorach, ale w praktyce, jeśli ktoś ruszy głową i dobrze pomyśli, to można to obejść. Można osiągnąć efekt wielu kolorów poprzez użycie kilku osobnych HUDów. Maksymalnie na ekranie można wyświetlić 4 HUDy przy użyciu funkcji show_hudmessage.  
 
Więc tak, da się zrobić tak, żeby np. "Perk" i "Klasa" były w różnych kolorach. Patrząc na Twój przykład, gdzie "Klasa" i "Perk" są wyświetlane jeden pod drugim, wystarczą dwa osobne HUDy, zamiast  np. trzech czy czterech.  
 
Pierwszy HUD (np. zielony) umieszczony na współrzędnych 0.01, 0.20 może wyglądać tak:  
 
NICK  
- odstęp  ^n (tutaj są odstępy specjalnie po to by zrobić miejsce dla drugiego HUDu który jest na tych samych współrzędnych)
- odstęp  ^n
MONETY  
POZIOM  
HP  
KLAN  
 
Drugi HUD (np. żółty) na tych samych współrzędnych by zachować odpowiednie skalowanie względem rozdzielczości, zaczyna się od razu od "odstępów", by odpowiednio ustawić "Klasę" i "Perk":  
 
- odstęp  ^n
KLASA  
PERK  
 
Oraz w kodzie masz warunek if(cod_get_user_class_id(id)), który spradza czy masz wybraną klasę i wyświetla wtedy klase i perka. W takim przypadku musisz zadbać o to, żeby odstępy również były zależne od tego warunku. Dzięki temu odstępy będą dodawane lub usuwane tylko wtedy, gdy gracz rzeczywiście ma klasę, a nie będą stale wyświetlane. 
 
Tutaj trzymaj na szybko coś wykombinowane oraz z wyczyszczonym kodem, nie wiem nawet czy działa bo dawno już w amxxie nie pisałem i nie miałem gdzie tego spradzić ale sama logika działania powinna być git nawet jakbyś chciał coś po swojemu pokombinować to już masz rozpisane jak to zrobić. 
 
public pokaz_hud(id) {
    id -= 1000;

    if (!is_user_connected(id))
        return;

    if (is_user_alive(id)) {
        display_hud_for_user(id);
    } else {
        new target = pev(id, pev_iuser2);

        if (!target)
            return;

        display_hud_for_user(target, id);
    }
}

stock display_hud_for_user(id, viewer = -1) {
    new hud_message[526], hud_length = 0;

    new player_name[33], class_name[30], perk_name[30], clan_name[30];
    get_user_name(id, player_name, charsmax(player_name));
    cod_get_user_class_name(id, class_name, charsmax(class_name));
    cod_get_user_perk_name(cod_get_user_perk(id), perk_name, charsmax(perk_name));
    cod_get_user_clan(id, clan_name, charsmax(clan_name));

    hud_length = formatex(hud_message[hud_length], sizeof(hud_message) - hud_length, "[NICK]: %s^n%s", player_name, cod_get_user_class_id(id) ? fmt("^n^n") : "");

    if (cod_get_user_class_id(id)) {
        new class_perk_message[256];
        new class_perk_length;

        class_perk_length = formatex(class_perk_message[class_perk_length], sizeof(class_perk_message) - class_perk_length, "^n^n[KLASA]: %s^n", class_name);
        class_perk_length += formatex(class_perk_message[class_perk_length], sizeof(class_perk_message) - class_perk_length, "[PERK]: %s^n", perk_name);

        set_hudmessage(255, 255, 0, 0.01, 0.20, 0, 6.0, 12.0);
        ShowSyncHudMsg(viewer != -1 ? viewer : id, hud, "%s", class_perk_message);
    }

    hud_length += formatex(hud_message[hud_length], sizeof(hud_message) - hud_length, "[MONETY]: %i^n", get_coins(id));

    if (cod_get_user_class_id(id)) {
        new Float:progress_percentage = float(((cod_get_user_next_exp(id) - cod_get_user_exp(id)) * 100) / cod_get_level_difference(id));
        hud_length += formatex(hud_message[hud_length], sizeof(hud_message) - hud_length, "[POZIOM]: %i (%0.1f%%)^n", cod_get_user_lvl(id), 100 - progress_percentage);
    }

    hud_length += formatex(hud_message[hud_length], sizeof(hud_message) - hud_length, "[HP]: %i^n", get_user_health(id));
    hud_length += formatex(hud_message[hud_length], sizeof(hud_message) - hud_length, "[KLAN]: %s^n", clan_name);

    new time_string[30];
    zwrot_czas(id, time_string, charsmax(time_string));
    hud_length += formatex(hud_message[hud_length], sizeof(hud_message) - hud_length, "[CZAS]: %s", time_string);

    set_hudmessage(0, 255, 0, 0.01, 0.20, 0, 6.0, 12.0);
    ShowSyncHudMsg(viewer != -1 ? viewer : id, hud, "%s", hud_message);
}
 

  • +
  • -
  • 2


#779184 AceHost.pl - Hosting serwerów CS 1.6

Napisane przez KoRrNiK w 09.12.2024 02:02

Krzakiem też są zabezpieczenia strony, znaczy ich brakiem... Prawie wszystko można zrobić przez API nie mając dostępu do konta, znając tylko ID serwera, koledze nawet nie chciało się jakoś tego zabezpieczyć...

 

https://acehost.pl/u...e=nazwa_zerwera - można sobie zmienić nazwę podając tylko ID XDDDD

https://acehost.pl/u...php?server_id=3 - sprawdzić konsolę.... nawet na bazarze aż tylu informacji nie da się wyciągnąć co tutaj.

https://acehost.pl/u...d=3&site=kokpit - wyłączyć serwer

https://acehost.pl/u...d=3&site=kokpit - włączyć/zresetować serwer

 

Takich API jest jeszcze więcej jak zagłębisz się bardziej i poszukasz to znajdziesz,

Serwery stawiane na VPS które mają takie samo IP tylko różny port, serwer o id 1,2,3,4 mają te same IP, POOZDROOO 

 

Nawet jak zostanie to załatane czy jest w ogóle sens coś tam kupować? Dobrze zgadłeś! nie xD

 

Strona z zabezpieczeniami na poziomie pliku notatnik.txt to totalny żart. Tak jak każdy projekt tego „speca”.  :crazy:

No i kolejna sprawa Polityka, Rodo które jest pełne w 100%  :crazy:  :^D

 

tenor.gif


  • +
  • -
  • 5


#773184 [ROZWIĄZANE] Reset nVault / MySQL

Napisane przez KoRrNiK w 27.01.2022 10:15

Jeśli chodzi o samoczynne resetowanie się sql jest to możliwe jeżeli masz źle napisany plugin i usuwa Ci samo dany, spowodowane może być tym, że np. podczas wczytywania danych one nie zostaną wczytane poprawnie i po zmianie mapy nadpisze Ci je wszystkie na DEFAULTOWE wartości czyli na - "0" a jeśli chodzi o nvault miałem kiedyś taki problem gdy było w pliku zapisanych za dużo graczy to wywalało niektórym osobom też zapis jakby plik miał za dużo informacji i nie mógł tego przetworzyć dlatego czasem warto w nvault używać tej funkcji nvault_prune do czyszczenia zapisu ale o wiele bardzie preferuję używanie FVAULT z którym nigdy nie miałem problemu. 

 

Aby zabezpieczyć ten sql to po wczytaniu informacji zrobić np: 

new bool:userLoad[33];

public loadData(...{
	
	// code....
	
	testVar[id] = SQL_ReadResult(query, 0);
	
	// code....
	
	userLoad[id] = true;
	
}

public saveDat(...{
			
	if(!userLoad[id]) return;
	
	// code...
			
}

  • +
  • -
  • 1


#772611 BaseBuilder TurboBB

Napisane przez KoRrNiK w 28.09.2021 18:02

Od dawna nie dawałem żadnego tematu czy jeszcze coś jest zmieniane / dodawane do paczki to postanowiłem napisać ten temat i opublikować wersję: 1.3.8  ^D^

W wersji 1.3.8 naprawiłem drobnego LAGA  który występował od wersji 1.3.3  gdy ktoś dołączał jako druga osoba podczas wywoływania eventu "Game Start"

 

Wszystkie zmiany od wersji 1.3.5 > 1.3.8

 

1.3.8

Spoiler

1.3.7
Spoiler

1.3.6
Spoiler

1.3.5
Spoiler

 

- Najnowszy release: Tutaj

 

Pozdrawiam Cieplutko :)


  • +
  • -
  • 1


#772563 problem lista graczy

Napisane przez KoRrNiK w 19.09.2021 13:14

Teraz tak patrzę to masz źle wypełnione bo pierwszy argument to "%s" czyli name i po nim masz , get_user_userid a drugiego argumentu nie masz wpisanego czyli %d 

I po co pobierasz np steamid jak go nie wykorzystujesz i twoja zmienna "wybrales" odpowiada za wybranego gracza więc jak wykonujesz client_cmd(wybrales, to wykonuje się u niego, a raczej powinieneś ty wykonać tą komendę wypełniając dane danego gracza którego wybrałeś czyli client_cmd(id, ..... , get_user_userid(wybrales);

client_cmd(wybrales, "amx_screen ^"%s^" 5", name, get_user_userid(id));
client_cmd(id, "amx_screen #%d 5", get_user_userid(wybrales)); 

Dla mnie lepszym sposobem jest taki: 


new userVarMenu[33][33];

public menuPlayer(id){
	
	if(!(get_user_flags(id) & ADMIN_BAN)) return;
	
	new menu = menu_create("Lista Graczy", "menuPlayer_2");
	
	new szName[33];
	
	for(new i = 1, x = 0; i < 33; i ++){
		
		if(!is_user_connected(i) || is_user_hltv(i) || is_user_bot(i)) continue;
		
		get_user_name(i, szName, sizeof(szName) - 1 );
		
		menu_additem(menu, szName);
		
		userVarMenu[id][x++] = i;
	}
	
	menu_display(id, menu, 0);
	
}

public menuPlayer_2(id, menu, item){
	if(item != MENU_EXIT){
		
		new target = userVarMenu[id][item];

		client_cmd(id, "amx_screen #%d 5", get_user_userid(target));
		
	} else menu_destroy(menu);
}

Gdy robisz pętle na graczach to rób od i = 1 ponieważ 0 = host i zmienną od nazwy rób [33] bo to maksymalny rozmiar bufora do przechowywania nazwy więc nie ma potrzeby robić na 64 .  

 

Oraz gdy chcesz banować przez ID to musisz przed nim wpisać jeszcze # czyli np amx_screen #1 5 


  • +
  • -
  • 1


#772441 Odświeżanie menu na ostatnio wyświetlanej stronie

Napisane przez KoRrNiK w 18.08.2021 15:59

Trzymaj 
 

new pageMenu[33];

public menuTest(id){
	
	new menu = menu_create("Test", "menuTest_2");
	
	for(new i = 0; i < 15; i ++){
		menu_additem(menu, fmt("%d", i));
	}
	
	menu_display(id, menu, pageMenu[id]/7);
	
}

public menuTest_2(id, menu, item){
	
	pageMenu[id] = ( item == MENU_EXIT ) ? 0 : item;
	
	if( item != MENU_EXIT ){
	
		client_print(id, 3, "%d", pageMenu[id]);
		menuTest(id);

	} else menu_destroy(menu);
	
}	

Najłatwiej to zrobić w taki sposób. Pobierasz do zmiennej aktualny przycisk w który kliknąłeś i dzielisz go na 7 aby wyliczyć na której stronie aktualnie przebywałeś aby odpalić ją ponownie. 


  • +
  • -
  • 1


#772430 Błąd error 001: expected token: "}", but found ";"

Napisane przez KoRrNiK w 15.08.2021 14:38

new static PrecacheModels[][] = {
	"models/lomDonaciakk/p_lomDonaciakk.mdl", 
	"models/lomDonaciakk/v_lomDonaciakk.mdl"
};

  • +
  • -
  • 1


#772420 glow weapons

Napisane przez KoRrNiK w 13.08.2021 14:42

No to musisz zmienić sobie tylko AMMO > CLIP czyli

 

Linijka 11 

new maxAmmo[CSW_P90 + 3]= { -2, 52, 0, 90, 1, 32, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, 0, 100, -1, -1 };

na 

new maxClip[CSW_P90 + 1]= {0, 13, 0, 10, 0, 7, 0, 30, 30, 0, 15, 20, 25, 30, 35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 0, 7, 30, 30, 0, 50};

W linijce 28

static ammo, color[3], percent, weapon;

zmieniasz ammo na clip

static clip, color[3], percent, weapon;

W linijce 30 musisz zamienić parametr od ammo na clip 

weapon = get_user_weapon( id, _, ammo );

na 

weapon = get_user_weapon( id, clip );

No i ostatnia zmiana w linijce 31

percent = floatround(float(ammo) / float(maxAmmo[weapon]) * 100.0);

na obliczanie procentów amunicji która znajduje się aktualnie w magazynku 

percent = floatround(float(clip) / float(maxClip[weapon]) * 100.0);

  • +
  • -
  • 3


#772412 [ROZWIĄZANE] Problem z przekompilowaniem vipów

Napisane przez KoRrNiK w 11.08.2021 16:09

Trzymaj kompilatory

Załączone pliki


  • +
  • -
  • 1


#772410 glow weapons

Napisane przez KoRrNiK w 11.08.2021 16:00

Jeśli w broni nie ma amunicji to broń będzie miała na sobie powłokę w kolorze czerwonym, na pomarańczowo gdy jest połowa magazynka a więcej na zielono.

#include <amxmodx>
#include <fakemeta_util>

#pragma semicolon 	1
#define isPlayer(%1) 	((1 <= %1 && %1 < 33))

new const PLUGIN[] 	= 	"xyz";
new const VERSION[] 	= 	"v1.0";
new const AUTHOR[] 	= 	"KoRrNiK - amxx.pl/user/69614-korrnik/";

new maxAmmo[CSW_P90 + 3]= { -2, 52, 0, 90, 1, 32, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, 0, 100, -1, -1 };

public plugin_init(){

	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_forward(FM_SetModel, "fw_SetModel", 0);
}

public fw_SetModel(ent){
	
	if(!pev_valid(ent)) return FMRES_IGNORED;
	
	static id; id = pev(ent,pev_owner);
	
	if(!isPlayer(id)) return FMRES_IGNORED;
	
	static ammo, color[3], percent, weapon;
	
	weapon = get_user_weapon( id, _, ammo );
	percent = floatround(float(ammo) / float(maxAmmo[weapon]) * 100.0);

	if(percent == 0){
		color[0] = 255; color[1] = 000; color[2] = 000;
	} else if(percent <= 50){
		color[0] = 255; color[1] = 160; color[2] = 000;
	} else {
		color[0] = 000; color[1] = 255; color[2] = 000;
	}
	
	fm_set_rendering(ent,kRenderFxGlowShell, color[0], color[1], color[2], kRenderNormal, 15);
	
	return FMRES_IGNORED;
}

  • +
  • -
  • 1


#772253 COD Rynek

Napisane przez KoRrNiK w 17.07.2021 18:03

Musisz zmienić to

public Wystawienie(id)
{
      new szIle[5], ile;

na

public Wystawienie(id)
{
      new szIle[6], ile;

  • +
  • -
  • 1


#772078 [ROZWIĄZANE] Skyboxy od czasu do czasu

Napisane przez KoRrNiK w 21.06.2021 13:47

Trzymaj powinno działać. 

#pragma semicolon 	1

#include <amxmodx>

new const PLUGIN[] 	= 	"Skybox from time";
new const VERSION[] 	= 	"v1.0";
new const AUTHOR[] 	= 	"KoRrNiK - amxx.pl/user/69614-korrnik/";

enum _:skyEnum { SKY_REAL = 0, SKY_ARCHIPELAGO, SKY_MILKWORD };

new const skyWalls[][] = { "up","dn","ft","bk","lf","rt" };
new const skyName[skyEnum][] = { "real", "archipelago", "MilkWorld" };

public plugin_precache(){
	
	register_plugin(
		PLUGIN,
		VERSION,
		AUTHOR
	);

	new hour = 0, setSky = SKY_REAL;
	new bool:foundSky = true;
	new gText[33]; 
	
	time(hour);
	
	if(hour >= 7 && hour < 15) setSky = SKY_REAL;
	else if(hour >= 15 && hour < 21) setSky = SKY_ARCHIPELAGO;
	else setSky = SKY_MILKWORD;
	
	for(new i = 0; i < sizeof(skyWalls); ++i){
		
		format(gText, sizeof(gText) - 1, "gfx/env/%s%s.tga", skyName[setSky], skyWalls[i]);

		if(file_exists(gText)) precache_generic(gText);
		else{
			log_amx("Nie znaleziono pliku: '%s'", gText);
			foundSky = false;
			break;
		}
	}
	
	if(foundSky) set_cvar_string("sv_skyname", skyName[setSky]);

}

Oraz nie dajesz tych skyboxow do \sprites tylko do \gfx\env


  • +
  • -
  • 2


#771979 Modele CS:GO MOD

Napisane przez KoRrNiK w 03.06.2021 11:47

Trzymaj: https://github.com/T.../cstrike/models

W paczce ozona modele działają na submodelach czyli: w jednym modelu może znajdować się max. 40 tekstur skinów. 

I pod tym linkiem masz wszystkie modele ze skinami i chyba tam jest ~1400 skinów. 


  • +
  • -
  • 1


#771921 Ściana blokująca w jedną stronę

Napisane przez KoRrNiK w 25.05.2021 20:54

Możesz spróbować to zrobić w taki sposób ale nie obiecuję, że będzie działał.

 

Dodajesz dwa eventy

register_forward(FM_CmdStart, 	   "fw_CmdStart",		0);
register_forward(FM_AddToFullPack, "fw_addtofullpack", 		1);

i zrobić np. 

public fw_CmdStart( id, uc_handle, randseed ){
	
	if( !is_user_alive(id) || !is_user_connected(id) || is_user_hltv(id) )
		return FMRES_IGNORED;
	
	floorTouching(id);
	
	return FMRES_IGNORED;
}

I w tym floorTouching sprawdzać czy stoi na danym obiekcie.

new ground = pev(id, pev_groundentity);

+ sprawdzasz classname obiektu

new szClass[9];
pev(ground, pev_classname, szClass, sizeof(szClass) - 1 );

No i później poprzez taki argument sprawdzasz czy wszystko się zgadza: 

ground != 0 && ( pev(id, pev_flags) & FL_ONGROUND ) && equal(szClass, "xyz")

i jeśli stoisz na tym obiekcie zmieniasz jakąś zmienną na true a jeśli nie to na false;

 

I teraz używasz addtofullpack

public fw_addtofullpack( es, e, ent, host, host_flags, player, p_set ){

poprzez classname oraz czy tamta twoja zmienna jest na true i jeśli tak to zmieniasz jego pozycję czy tam solid to musisz sprawdzić  " ES_Solid " " ES_Origin "

 

 


  • +
  • -
  • 3