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
 

Zdjęcie

Zabijanie za pomocą amx'a


  • Zamknięty Temat jest zamknięty
18 odpowiedzi w tym temacie

#1 Vertricus

    Godlike

  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 02.10.2009 21:08

Ma ktoś pomysł jak zastąpić funkcję UTIL_kill?:D
Osobiście wpadłem na pomysł tego typu:
ExecuteHam(Ham_TraceAttack, this, idattacker, Float:damage, Float:direction[3], tracehandle, damagebits);


ExecuteHam(Ham_TakeDamage, this, idinflictor, idattacker, Float:damage, damagebits);

Jednak do końca nie wiem czym te funkcję się różnią i czy przy zabiciu Ham'em dodaje kasy i działa na statystyki:)
public UTIL_Kill(attacker,id,weapon[])
{
	if( is_user_alive(id)){
		if(get_user_team(attacker)!=get_user_team(id))
			set_user_frags(attacker,get_user_frags(attacker) +1);
	
		if(get_user_team(attacker)==get_user_team(id))
			set_user_frags(attacker,get_user_frags(attacker) -1);
		
		if (cs_get_user_money(attacker) + 150 <= 16000)
			cs_set_user_money(attacker,cs_get_user_money(attacker)+150)
		else
			cs_set_user_money(attacker,16000)
	
		cs_set_user_deaths(id, cs_get_user_deaths(id)+1)
		user_kill(id,1) 
		
		if(is_user_connected(attacker) && attacker!=id)
		{
			award_kill(attacker,id)
			if(is_user_alive(attacker)) award_item(attacker,0)
		}
				
		message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) 
		write_byte(attacker) 
		write_byte(id) 
		write_byte(0) 
		write_string(weapon) 
		message_end() 
	
		message_begin(MSG_ALL,gmsgScoreInfo) 
		write_byte(attacker) 
		write_short(get_user_frags(attacker)) 
		write_short(get_user_deaths(attacker)) 
		write_short(0) 
		write_short(get_user_team(attacker)) 
		message_end() 
	
		message_begin(MSG_ALL,gmsgScoreInfo) 
		write_byte(id) 
		write_short(get_user_frags(id)) 
		write_short(get_user_deaths(id)) 
		write_short(0) 
		write_short(get_user_team(id)) 
		message_end() 
	
		new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
	
		get_user_name(attacker, kname, 31);
		get_user_team(attacker, kteam, 9);
		get_user_authid(attacker, kauthid, 31);
	
		get_user_name(id, vname, 31);
		get_user_team(id, vteam, 9);
		get_user_authid(id, vauthid, 31);
	
		log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"", 
		kname, get_user_userid(attacker), kauthid, kteam, 
		vname, get_user_userid(id), vauthid, vteam, weapon);
	}
}
[/quote][/code]
  • +
  • -
  • 0

#2 m4ciekpl

    Życzliwy

  • Użytkownik

Reputacja: -1
Nowy

  • Postów:36
  • Lokalizacja:Ruda śląska
Offline

Napisano 03.10.2009 08:17

a nie lepiej wejsc do ~ amxmodmenu ?? i slap ??
  • +
  • -
  • 0

#3 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 03.10.2009 08:24

Vertricus, a dlaczego w ogóle chcesz zmieniać tą funkcję ?

Jednak do końca nie wiem czym te funkcję się różnią i czy przy zabiciu Ham'em dodaje kasy i działa na statystyki:)

jak nie wiesz to najlepiej sprawdź samemu

m4ciekpl, a ty chyba nawet nie wiesz ocb... o_O
  • +
  • -
  • 0

#4 Vertricus

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 03.10.2009 09:28

Pavulon, oj no powiedz bo mam problem teraz z ludźmi do testowania cały czas chce kogoś, żeby testował i nikt już nie chce a samemu tego nie mam jak przetestować ;(
  • +
  • -
  • 0

#5 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 03.10.2009 09:52

Vertricus, ale ja nie wiem.
Tylko wydaje mi się że jakby to działało tak jak chcesz to ktoś nie męczył by się z tą funkcją. Ale ją i tak wypadało by trochę zoptymalizować.

Spróbuje to przetestować, ale jak znajdę chwile czasu. Poza tym nie wiem czy samemu mi się uda xD
  • +
  • -
  • 0

#6 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 03.10.2009 11:28

TakeDamege dobrze działa ;)
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_stocks>
#include <hamsandwich>
#include <engine>
#include <cstrike>

new gBotId, gWeapEnt

public plugin_init()
{
	register_plugin("User Kill", "0.1", "Pavulon")
	register_concmd("killme", "killme")
	register_concmd("killbot", "killbot")

	set_task(5.0, "make_bot")
}
public make_bot()
{
	gBotId = create_bot("Death")
	cs_set_user_team(gBotId, CS_TEAM_CT)
	gWeapEnt = create_entity("weapon_knife")
}

public killme(id)
{
	new CsTeams: prev_team = cs_get_user_team(gBotId)
	cs_set_user_team(gBotId, cs_get_user_team(id)==CS_TEAM_CT?CS_TEAM_T:CS_TEAM_CT)
	
	ExecuteHam(Ham_TakeDamage, id, gWeapEnt, gBotId, 1000.0, DMG_GENERIC)
	
	cs_set_user_team(gBotId, prev_team)
	
	return PLUGIN_HANDLED
}

public killbot(id)
{
	new CsTeams: prev_team = cs_get_user_team(gBotId)
	cs_set_user_team(gBotId, cs_get_user_team(id)==CS_TEAM_CT?CS_TEAM_T:CS_TEAM_CT)
	
	ExecuteHam(Ham_TakeDamage, gBotId, gWeapEnt, id, 1000.0, DMG_GENERIC)
	
	cs_set_user_team(gBotId, prev_team)
	
	return PLUGIN_HANDLED
}

public create_bot(const name[]) // taken from BotAPI 0.5.1
{
	new id

	id = EF_CreateFakeClient(name)

	if (pev_valid(id))
	{
		EF_FreeEntPrivateData(id)

		DF_MetaFunc_CallGameEntity("player", id)
		set_user_info(id, "rate", "3500")
		set_user_info(id, "cl_updaterate", "25")
		set_user_info(id, "cl_lw", "1")
		set_user_info(id, "cl_lc", "1")
		set_user_info(id, "cl_dlmax", "128")
		set_user_info(id, "cl_righthand", "1")
		set_user_info(id, "_vgui_menus", "0")
		set_user_info(id, "_ah", "0")
		set_user_info(id, "dm", "0")
		set_user_info(id, "tracker", "0")
		set_user_info(id, "friends", "0")
		set_user_info(id, "*bot", "1")
		set_pev(id, pev_flags, pev(id, pev_flags) | FL_FAKECLIENT)
		set_pev(id, pev_colormap, id)

		new msg[128]

		DF_ClientConnect(id, name, "127.0.0.1", msg)
		DF_ClientPutInServer(id)
		EF_RunPlayerMove(id, Float:{0.0,0.0,0.0}, 0.0, 0.0, 0.0, 0, 0, 76)
		
		return id
	}

	return 0
}

  • +
  • -
  • 0

#7 Vertricus

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 03.10.2009 11:59

Działa perfekcyjnie ;)

Jedno pytanie czy da się jakoś na ranking podziałać?:)

Tylko wydaje mi się że jakby to działało tak jak chcesz to ktoś nie męczył by się z tą funkcją.


Pisał ją miczu ;)
  • +
  • -
  • 0

#8 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 03.10.2009 12:02

Jedno pytanie czy da się jakoś na ranking podziałać?:)

A to nie działa na ranking ??
  • +
  • -
  • 0

#9 Vertricus

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 03.10.2009 12:28


* Twoj ranking wynosi 1 na 23 Masz 140 zabojstw, 620 trafien, 56.22% eff. i 19.76% acc.

] killbot

Vertricus killed Death with scout

Vertricus :  /rank



Wpisz 'amx_langmenu' w konsoli aby wyswietlic menu z wyborem jezyka

Wpisz 'amx_help' w konsoli aby uzyskac liste komend

] /rank

Unknown command: /rank

* Twoj ranking wynosi 1 na 23 Masz 140 zabojstw, 620 trafien, 56.22% eff. i 19.76% acc.

Vertric

  • +
  • -
  • 0

#10 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 03.10.2009 12:43

hmm... to może trzeba by spróbować z TraceAttack'iem albo coś dorzucić jeszcze...
  • +
  • -
  • 0

#11 Vertricus

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 03.10.2009 13:18

No właśnie tylko czy jest w ogóle jakakolwiek funkcja działająca na ranking?
  • +
  • -
  • 0

#12 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 03.10.2009 17:43

UTIL_Kill nie jest funkcja zrobiona przeze mnie.

Co do rankingu to najpierw trzeba zadac sobie pytanie na podstawie jakiego eventu(?) sa robione statystyki. Jesli bedziemy znac zasade dzialania statystyk bedzie mozna troche sie tym pobawic, a jesli nie mozna odwzorowac/podrobic tego/tych eventow to mozemy zrobic nakladke na statystyki...
  • +
  • -
  • 0

#13 Vertricus

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 03.10.2009 18:11

A ktokolwiek zna tego typu event?
  • +
  • -
  • 0

#14 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 03.10.2009 20:08

(skasowal mi sie tekst to daje w skrocie ;> )

Sprawdzcie event DeathMsg uzywajac

emessage_begin
emessage_end
ewrite_angle
ewrite_byte
ewrite_char
ewrite_coord
ewrite_entity
ewrite_long
ewrite_short
ewrite_string

zamiast normalnych...
  • +
  • -
  • 0

#15 Vertricus

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 04.10.2009 12:46

public DeathMsg(id)
{
	new weaponname[20]
	new kid = read_data(1)
	new vid = read_data(2)
	new headshot = read_data(3)
	read_data(4,weaponname,31)
		
	reset_player(vid)
	msg_bartime(id, 0)
	static Float:minsize[3]
	pev(vid, pev_mins, minsize)
	if(minsize[2] == -18.0)
		g_wasducking[vid] = true
	else
		g_wasducking[vid] = false
	
	set_task(0.5, "task_check_dead_flag", vid)

	flashbattery[vid] = MAX_FLASH;
	flashlight[vid] = 0;
	
	if(player_sword[id] == 1){
		new clip,ammo
		new weaponID=get_user_weapon(id,clip,ammo)
		if(weaponID == CSW_KNIFE){
			if(get_user_team(kid) != get_user_team(vid)) {
				set_user_frags(kid, get_user_frags(kid) + 1)
				award_kill(kid,vid)
			}
		}
	}
	if (is_user_connected(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid))
	{
		show_deadmessage(kid,vid,headshot,weaponname)
		award_item(kid,0)
		award_kill(kid,vid)
		add_respawn_bonus(vid)
		add_bonus_explode(vid)
		add_barbarian_bonus(kid)
		register_place(kid)
		if (player_class[kid] == Barbarzynca || player_item_id[kid] == 77)
		refill_ammo(kid)
		set_renderchange(kid)
		savexpcom(vid)
	}
}

Tylko, że ten event w diablo tak wygląda czy ciebie chodzi żeby w util_kill pozmieniać.
  • +
  • -
  • 0

#16 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 04.10.2009 16:10

Eventy to sa (dosc) proste komunikaty wysylane z serwera do graczy (lub nie :F).
Event od smierci sklada sie 3 bajtow z informacjia kto zabil i kogo zabli wraz z informacja czy to byl hs oraz nazwa broni (string). To co podales (z diablo) to tylko czytanie informacji z eventa, a jak chcemy zrobic sztuczna informacje dla graczy (info o zabiciu z ikonka w prawym gornym rogu) to odpowiada cod z util_kill:

message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) 
write_byte(attacker) 
write_byte(id) 
write_byte(0) 
write_string(weapon) 
message_end(

Ale ta informacja jest wysylana bezposrednio do graczy i serwer nie widzi tego jako prawdziwy event smierci i tego nie czyta. Na aliedzie czytalem dosc ciekawy tekst o e... funkcjach co niby sa wywolywane w silniku gry, a nie tylko jako wiadomosc do graczy (nie wiem co mieli na mysli i jak to dziala dlatego daje wam cynk :> ).
  • +
  • -
  • 0

#17 Vertricus

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 04.10.2009 17:53

Miczu ja wiem mniej więcej co to eventy kiedy i jak ich użyć.
Ale napisałeś o tym żeby dać przed nie "e" tylko gdzie bo w deathmsg nie ma tej struktury , a util_kill nie używam gdy używam Ham_TakeDamage....

Chyba że ci chodzi o ten public:
public show_deadmessage(killer_id,victim_id,headshot,weaponname[])
{
	if (!(killer_id==victim_id && !headshot && equal(weaponname,"world")))
	{
		message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
		write_byte(killer_id)
		write_byte(victim_id)
		write_byte(headshot)
		write_string(weaponname)
		message_end()
	}
}

  • +
  • -
  • 0

#18 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 04.10.2009 18:36

Dobra oto moja prosta analiza problemu:

Co chcemy zrobic:
-zabijac tak by byly w statytsykach
Założenie:
-statystyki uzywaja deathmsg w swoich statystykach
Pomysly z założenia:
- skoro uzywaja deathmsg to musimy zrobic wlasne sztuczne deathmsg
Wiemy że:
-czytanie evetna nic nie da
-zywkle message_begin co wysyla info o smierci do gracza nie jest widziane przez statystki
Co nam zostaje:
- sprawdzenie emessage_begin co ma potencjal zadzialania na statystyki.
  • +
  • -
  • 0

#19 Vertricus

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 04.10.2009 19:30

Miczu ale ja się chcę pozbyć UTIL_KILL i mieć wzamian Ham_takedamage...
Jeśli chodzi o co mówiłeś to nie wiem czy to dobrze zrozumiałem ;>
Zrobiłem coś w ten deseń ale ani przez komendę ani normalnie bot nie dodaje nic do statystyk. (Z tym, że przez komendę pokazuje się dwa razy a normalnie raz ale ani to ani to nie dodaje do ranku)
Do tego:
csstats_rankbots 1 próbowałem na 0, 1
#include <amxmodx> 
#include <fakemeta> 
#include <fakemeta_stocks> 
#include <hamsandwich> 
#include <engine> 
#include <cstrike> 

new gBotId, gWeapEnt, gmsgDeathMsg

public plugin_init() 
{ 
    register_plugin("User Kill", "0.1", "Pavulon") 
    register_concmd("killme", "killme") 
    register_concmd("killbot", "killbot")
    gmsgDeathMsg = get_user_msgid("DeathMsg")

    set_task(5.0, "make_bot") 
} 
public make_bot() 
{ 
    gBotId = create_bot("Death") 
    cs_set_user_team(gBotId, CS_TEAM_CT) 
    gWeapEnt = create_entity("weapon_scout") 
} 

public killme(id) 
{ 
    new CsTeams: prev_team = cs_get_user_team(gBotId) 
    cs_set_user_team(gBotId, cs_get_user_team(id)==CS_TEAM_CT?CS_TEAM_T:CS_TEAM_CT) 
    new weapon = get_user_weapon(gBotId)
    ExecuteHam(Ham_TakeDamage, id, gWeapEnt, gBotId, 1000.0, DMG_BULLET) 
    new weaponname[32]; get_weaponname( weapon, weaponname, 31 ); replace(weaponname, 31, "weapon_", "")
    sztucznydeath(gBotId, id, 0, weaponname)
    cs_set_user_team(gBotId, prev_team) 
    
    return PLUGIN_HANDLED 
} 

public killbot(id) 
{ 
    new CsTeams: prev_team = cs_get_user_team(gBotId) 
    cs_set_user_team(gBotId, cs_get_user_team(id)==CS_TEAM_CT?CS_TEAM_T:CS_TEAM_CT) 
    new weapon = get_user_weapon(id)
    ExecuteHam(Ham_TakeDamage, gBotId, gWeapEnt, id, 1000.0, DMG_GENERIC) 
    new weaponname[32]; get_weaponname( weapon, weaponname, 31 ); replace(weaponname, 31, "weapon_", "")
    sztucznydeath(id, gBotId, 0, weaponname)
    cs_set_user_team(gBotId, prev_team) 
    
    return PLUGIN_HANDLED 
} 
public sztucznydeath(killer,ofiara,head, weaponname[])
{
	emessage_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) 
	ewrite_byte(killer) 
	ewrite_byte(ofiara) 
	ewrite_byte(head) 
	ewrite_string(weaponname) 
	emessage_end()
}
public create_bot(const name[]) // taken from BotAPI 0.5.1 
{ 
    new id 

    id = EF_CreateFakeClient(name) 

    if (pev_valid(id)) 
    { 
        EF_FreeEntPrivateData(id) 

        DF_MetaFunc_CallGameEntity("player", id) 
        set_user_info(id, "rate", "3500") 
        set_user_info(id, "cl_updaterate", "25") 
        set_user_info(id, "cl_lw", "1") 
        set_user_info(id, "cl_lc", "1") 
        set_user_info(id, "cl_dlmax", "128") 
        set_user_info(id, "cl_righthand", "1") 
        set_user_info(id, "_vgui_menus", "0") 
        set_user_info(id, "_ah", "0") 
        set_user_info(id, "dm", "0") 
        set_user_info(id, "tracker", "0") 
        set_user_info(id, "friends", "0") 
        set_user_info(id, "*bot", "1") 
        set_pev(id, pev_flags, pev(id, pev_flags) | FL_FAKECLIENT) 
        set_pev(id, pev_colormap, id) 

        new msg[128] 

        DF_ClientConnect(id, name, "127.0.0.1", msg) 
        DF_ClientPutInServer(id) 
        EF_RunPlayerMove(id, Float:{0.0,0.0,0.0}, 0.0, 0.0, 0.0, 0, 0, 76) 
        
        return id 
    } 

    return 0 
}

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych