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
 

Hagis - zdjęcie

Hagis

Rejestracja: 16.08.2013
Aktualnie: Nieaktywny
Poza forum Ostatnio: 04.07.2024 22:49
-----

Moje tematy

Jak dowiedzieć się więcej o Fakemeta i messages?

24.04.2014 22:45

Witam

 

Jestem koderem serwera typu zombiemod. Bardzo często edytuję różne pobrane pluginy w celu dostosowania ich do moich potrzeb.

Ostatnio miałem okazję pomęczyć się trochę z pluginem obsługującym wszystkim znane miny laserowe.

Ostatecznie udało mi się osiągnąć pożądany efekt, ale.. ten plugin wypchany pev'ami, a ja do końca nie ogarniam, co się kryje pod niektórymi poleceniami.

Na forum jest kompletna dokumentacja na temat omawianego modułu, ale na podstawie tej wiedzy nie da się nic zrobić :P

Na przykład to

value - zajrzyj do fakemeta_const.inc i szukaj wartości z prefiksem pev_

 

 Niestety, ale w fakemeta_const.inc nie ma żadnych opisów. Niektóre nazwy są logiczne, ale większość niestety nie.

Gdzie mogę znaleźć porządny poradnik, który ułatwi mi pracę z Fakemeta? (najlepiej w jęz. polskim, ewentualnie angielskim  ;>)

Chciałbym umieć robić pluginy podobne do min laserowych, lub różne inne, które tworzą nowe byty (działka automatyczne, jakieś magiczne granaty, etc.).

 

Taki sam problem mam z modułem messages. Często spotykam go w pluginach, ale jeśli każda przesyłana informacja nie jest opisana komentarzem, nie mam pojęcia, do czego służy..

Gdzie znajdę spis wiadomości, lub coś, co pomoże mi je lepiej poznać?

 

Pozdrawiam

Hagis

Błędy z Ham_TakeDamage

07.01.2014 18:36

Witam.
Napisałem sobie dość skomplikowany plugin wzorując się na innych pluginach, szczególnie na silniku Cod Mod by QTM_Peyote.
Plugin jest przystosowany do serwera zombiemod z exp modem. Jego działanie jest proste:
Za exp można kupić bonus. Po zakupie exp się traci, a bonus zapisuje. Zapis do nVault.
Każdy bonus jest oddzielnym pluginem i ma budowę bardzo podobną, a może nawet taką samą jak perki, czy klasy do Cod Moda.
 
Oto jeden z bonusów:

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <expbonuses>
#include <zombieplague>

#include <hamsandwich>
#include <fun>

#define PLUGIN ""
#define VERSION "0.1"
#define AUTHOR "Hagis"
#define CHANCE 2

new const nazwa[]	= "Instant";
new const koszt		=    47000;
new const druzyny[]	= "Zombie";
new const opis[]	= "Szansa na natychmiastowe zarazanie."

new ma_item[33];

public plugin_init() {
	register_plugin( nazwa, VERSION, AUTHOR );
	expbonus_register_item( nazwa, koszt ,opis, druzyny );
	
	RegisterHam(Ham_TakeDamage, "player", "TakeDamage")
}

public expbonus_item_activate(id)
{
	ma_item[id] = true;
}

public expbonus_item_deactivate(id)
{
	ma_item[id] = false;
}

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!ma_item[idattacker] || !zp_get_user_zombie(idattacker) || zp_get_user_nemesis(idattacker))
		return;
	if( zp_is_swarm_round() || zp_is_plague_round() )	
		return;
		
	if(random(CHANCE) == 0)
		zp_infect_user(this, idattacker, 0, 1)
}

 
Oto, co wypisuje się w logu z errorami:

L 01/07/2014 - 17:20:41: [AMXX] Run time error 4 (plugin "bonusexp_Instant.amxx") - debug not enabled!
L 01/07/2014 - 17:20:41: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).

Tak dzieje się z każdym bonusem, który zawiera     RegisterHam(Ham_TakeDamage, "player", "TakeDamage")

Gdy edytują wartość damage (np. podwajam dmg), to korzystam z budowy:

#define CHANCE	15
#define BONUS	2.0

{ ... }

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if( !(0 < idattacker  < 33) )
		return
		
	if( !is_user_connected(idattacker) || !ma_item[idattacker] || zp_get_user_zombie(idattacker))
		return
		
	if(random(CHANCE) == 0)
	{
		expbonus_message(idattacker, "Krytyczne uderzenie!")
		new Float:obrazenia = damage * BONUS;
		SetHamParamFloat(4, obrazenia);
	}
	return 
} 

Jak ustawię post na 0, to sytuacja nie zmienia się. Gdzie popełniam błąd?

Wcześniej zamiast nowej wartości Float:obrazenia po prostu pisałem

damage *= Bonus;

SetHamParamFloat(4, damage);

Później zmieniłem kod dodając nową zmienną, ale obawiam się, że to też nic nie daje.

 

Pobieranie pliku txt

07.12.2013 17:24

Witam, chciałem sobie napisać dość skomplikowany regulamin, a raczej plugin przystosowany do regulaminu.
Gdy ktoś wpisze /regulamin pojawia się motd z Regulaminem napisanym w HTML. To nic trudnego.
Ale ja lubię wyzwania i postanowiłem, że gdy ktoś wejdzie na serwer to regulamin ma się drukować w HUD.
Niby nic trudnego. Ale to nie koniec, chcę, aby to, co wyświetla się w HUDzie było powiązane z motd.
 
To znaczy: Chciałbym pobrać cały plik regulamin.txt do tablicy (która nie powinna mieć więcej, niż 1500 znaków).
A następnie za pomocą różnych ciekawych komend sformatować tekst wycinając wszystko, co znajduje
się w znacznikach < > oraz między <head>, a </head> i podobnie ze <script> i </script> oraz zamiana <br> na ^n.
Formatowanie jest trochę skomplikowane, ale do zrobienia.
 
Myślałem o czymś w tym stylu:
 

#define PLUGIN "Complex Rules"
#define VERSION "0.1"
#define AUTHOR "Hagis"


#define MAX 1500


public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)


register_clcmd("say /regulamin", "view", ADMIN_IMMUNITY);


new file = fopen("reklama.txt", "rt");
new g_plik[MAX];
if(file) fread(file, g_plik, BLOCK_INT);
}

Obawiam się jednak, że metoda fread pobiera tylko 1 znak ( przynajmniej tak to wygląda w dokumentacji, a mi wywala błąd ).
Potrzebuję cały plik w jednej tablicy. Jak to zrobić?

Dawanie defa dla CT na określonych mapach

02.09.2013 05:34

Witam. Tak jak w temacie.

Czy jest sposób, na sprawdzenie celów obecnej mapy? (vip | hosty | c4)

Dokładniej, to chciałbym zrobić klasę na nowy Cod Mod, który na starcie rundy dostaje defuse pack.

Oczywiście nie jest on potrzebny na mapach bez paki, więc miło by było wyeliminować taką sytuację.

Nie piszę w dziale Cod Mod, bo plugin może być też użyteczny na innych modach.

[ROZWIĄZANE] Nie działa natychmiastowe zabicie z HE

27.08.2013 22:43

Witam, stworzyłem klasę na CodMod. Klasa powinna mieć 1/2 szansy na natychmiastowe zabicie z granatu wybuchowego.

Jak w temacie ów natychmiastowe zabicie nie chce działać.

#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <cstrike>
#include <fakemeta>
#include <fun>

#define DMG_BULLET (1<<1)
#define DMG_HEGRENADE (1<<24)

new const nazwa[]   = "Piekielny [Unikalna]";
new const opis[]    = "Natychmiastowe zabicie ze scouta, 1/2 szansy na natychmiastowe zabicie z HE, +10dmg z Aug, dodatkowe 3 skoki";
new const bronie    = 1<<CSW_SCOUT | 1<<CSW_AUG | 1<<CSW_HEGRENADE;
new const zdrowie   = 85;
new const kondycja  = 100;
new const inteligencja = 30;
new const wytrzymalosc = 85;


new ma_klase[33];
new skoki[33];

public plugin_init()
{
	register_plugin(nazwa, "1.0", "Hagis");
	
	cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);   

	register_forward(FM_CmdStart, "fwCmdStart_MultiJump");

	RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
	
}

public cod_class_enabled(id)
{
	if(!(get_user_flags(id) & ADMIN_LEVEL_A))
	{
		client_print(id, print_chat, "[Piekielny] Nie masz uprawnien, aby uzywac tej klasy.")
		return COD_STOP;
	}

	give_item(id, "weapon_hegrenade");
	cs_set_user_defuse(id, 1);
	ma_klase[id] = true;

	return COD_CONTINUE;
}

public cod_class_disabled(id)
{
	ma_klase[id] = false;
}

public fwCmdStart_MultiJump(id, uc_handle)
{
	if(!is_user_alive(id) || !ma_klase[id])
		return FMRES_IGNORED;

	new flags = pev(id, pev_flags);

	if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id])
	{
		skoki[id]--;
		new Float:velocity[3];
		pev(id, pev_velocity,velocity);
		velocity[2] = random_float(265.0,285.0);
		set_pev(id, pev_velocity,velocity);
	}
	else if(flags & FL_ONGROUND)
		skoki[id] = 3;

	return FMRES_IGNORED;
}


public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
        if(!is_user_connected(idattacker))
                return HAM_IGNORED;
        
        if(!ma_klase[idattacker])
                return HAM_IGNORED;
        
        if(!(damagebits & DMG_BULLET))
                return HAM_IGNORED;
        
        if(get_user_weapon(idattacker) == CSW_SCOUT)
                cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);
				
		if(get_user_weapon(idattacker) == CSW_AUG && damagebits & DMG_BULLET)
			cod_inflict_damage(idattacker, this, 10.0, 0.0, idinflictor, damagebits);
			
		if(damagebits & DMG_HEGRENADE && get_user_team(this) != get_user_team(idattacker))
			cod_inflict_damage(idattacker, this, 801.0-damage, 1.0, idinflictor, damagebits);
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				
        return HAM_IGNORED;
}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/

 

 

Długo się z tym bawiłem, ostatecznie skopiowałem kod z perku, który daje 1/1 z HE. W perku działa - tu nie.

Próbowałem też tak:

if(get_user_weapon(idattacker) == CSW_HEGRENADE)
   cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);

I oczywiście też skucha.

Oraz próbowałem zamienić 

float(get_user_health(this))-damage+1.0

na 2000.0 i oczywiście też lipa.