←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Jak zczytać lvl zabitego i osoby która zabiła

Zablokowany

SoPelQ - zdjęcie SoPelQ 10.05.2013

Hey. Otóż w tym pluginie: http://amxx.pl/topic...ajace-z-graczy/ chciałem zmienić losowy exp na (lvl gracza zabijającego + lvl gracza zabitego) jako dodatkowy exp z paczki.

I teraz nasuwa się pytanko jak ja mam to zrobić, bo mi nie wychodziło;/


Użytkownik SoPelQ edytował ten post 10.05.2013 18:51
Odpowiedz

GT Team - zdjęcie GT Team 10.05.2013

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

#define PLUGIN "Bonusowe Paczki"
#define VERSION "1.0"
#define AUTHOR "radim edytowal ricO"

new const modelitem[] = "models/cod_paczka.mdl";
new const prefix[] = "^04[BONUS]^01"

public plugin_init()
{
	register_plugin(PLUGIN, AUTHOR, VERSION)
	
	register_forward(FM_Touch, "fwd_touch")
	
	register_event("DeathMsg", "DeathMsg", "a")
	register_logevent("PoczatekRundy", 2, "1=Round_Start"); 
	
}

public plugin_precache()
{
	precache_model(modelitem);
}


public PoczatekRundy()	
	kill_all_entity("paczka")


public DeathMsg()
{
	new kid = read_data(1)
	new vid = read_data(2)
	
	if( kid == vid )
		return PLUGIN_CONTINUE;
	if(is_user_connected(kid) || is_user_connected(vid))
		create_itm(vid, 0)
	return PLUGIN_CONTINUE;
}

public UzyjPaczki(id, ent)
{
	if( !is_user_connected(id) || !is_user_alive(id) || !pev_valid(ent))
		return PLUGIN_HANDLED;
	
	
	switch(random_num(1, 5))
	{
		case 1:
		{
			new hp = get_user_health(id);
			new losowehp = random_num(-5, -20);
			set_user_health(id, hp+losowehp)
			ColorChat(id, GREY, "^x04%s ^x01Znalazles trucizne. Tracisz ^x03%i^x01 HP!", prefix, losowehp)
		}
		case 2:
		{
			new hp = get_user_health(id);
			new losowehp = random_num(5, 40);
			set_user_health(id, hp+losowehp)
			ColorChat(id, GREY, "^x04%s ^x01Znalazles apteczke. Dostales ^x03%i^x01 HP!", prefix, losowehp)	
		}
		case 3:
		{
			new kasa = cs_get_user_money(id);
			new losowakasa = random_num(20, 5000);
			cs_set_user_money(id, kasa+losowakasa)
			ColorChat(id, GREY, "^x04%s ^x01Znalazles sakiewke ze zlotem. Dostales ^x03%i^x01 kasy!", prefix, losowakasa)	
		}
		case 4:
		{
			ColorChat(id, GREY, "^x04%s ^x01Posiadasz juz perk!", prefix)	
			if(cod_get_user_perk(id))
				return PLUGIN_HANDLED
			
			cod_set_user_perk(id, -1, -1, 1);
		}
		case 5:
		{
			new explvl = (cod_get_user_level(id)+cod_get_user_level(pev(ent, pev_iuser2)))
			cod_set_user_xp(id, cod_get_user_xp(id)+explvl)
			ColorChat(id, GREY, "^x04%s ^x01Znalazles ^x03%i^x01 Expa!", prefix, explvl)
		}
	}
	return PLUGIN_HANDLED;
}


public create_itm(id, id_item){ 
	
	new Float:origins[3]
	pev(id,pev_origin,origins);
	new entit=create_entity("info_target")
	
	origins[0]+=50.0
	origins[2]-=32.0
	
	set_pev(entit,pev_origin,origins)
	entity_set_model(entit,modelitem)
	set_pev(entit,pev_classname,"paczka");
	
	dllfunc(DLLFunc_Spawn, entit); 
	set_pev(entit,pev_solid,SOLID_BBOX); 
	set_pev(entit,pev_movetype,MOVETYPE_FLY);
	
	engfunc(EngFunc_SetSize,entit,{-1.1, -1.1, -1.1},{1.1, 1.1, 1.1});
	
	engfunc(EngFunc_DropToFloor,entit);
	
	set_pev(entit, pev_iuser1, id_item)
	set_pev(entit, pev_iuser2, id)
}
public fwd_touch(ent,id)
{       
	if(!is_user_alive(id)) return FMRES_IGNORED;
	
	if(!pev_valid(ent)) return FMRES_IGNORED;
	
	static classname[32];
	pev(ent,pev_classname,classname,31); 
	
	if(!equali(classname,"paczka")) return FMRES_IGNORED;
	
	if(pev(id,pev_button))
	{
	{
		UzyjPaczki(id, ent)
		engfunc(EngFunc_RemoveEntity,ent);
	}
}
return FMRES_IGNORED; 
}
public kill_all_entity(classname[]) {
new iEnt = find_ent_by_class(-1, classname)
while(iEnt > 0) {
	remove_entity(iEnt)
	iEnt = find_ent_by_class(iEnt, classname)		
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
Lecz nie sprawdzalem, gdyz na swoim laptopie nie posiadam cs'a :)
Odpowiedz

  • +
  • -
SAL - zdjęcie SAL 10.05.2013

sprawdzil juz ktos?


Użytkownik SAL edytował ten post 10.05.2013 19:14
Odpowiedz

GT Team - zdjęcie GT Team 10.05.2013

Teoretycznie powinno działać. Wgraj na serwer i sprawdź, jak masz graczy to poczekaj ;x
Odpowiedz

SoPelQ - zdjęcie SoPelQ 10.05.2013

Wszystko ładnie działa, jeżeli chodzi o ten plug.

Ale mam jeszcze jedno pytanko. Jest taki perk w standardowym codzie jak maksymalne skupienie +20 expa za zabicie. Zmieniłem to bo chciałem uzyskać dodatkowy exp za fraga +(mój lvl * 10) niestety nie działa to wogóle.

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <codmod>
#include <fakemeta>

new const perk_name[] = "Maksymalne skupienie";
new const perk_desc[] = "Za kazdego fraga dostajesz +(twoj lvl * 300) dodatkowego expa za fraga.";

new bool:ma_perk[33];

public plugin_init() 
{
	register_plugin(perk_name, "1.0", "QTM_Peyote");
	
	cod_register_perk(perk_name, perk_desc);
	
	register_event("DeathMsg", "Death", "ade");
}

public cod_perk_enabled(id)
ma_perk[id] = true;

public cod_perk_disabled(id)
ma_perk[id] = false;

public Death(id)
{	
	new attacker = read_data(1);
	if(!is_user_connected(attacker))
	return PLUGIN_CONTINUE;
	
	if(!ma_perk[attacker])
	return PLUGIN_CONTINUE;
	
	if(get_user_team(id) != get_user_team(attacker))
		cod_set_user_xp(id, cod_get_user_xp(id)+cod_get_user_level*10);
	return PLUGIN_CONTINUE;
}

 



Jako że edita nie mogę dać. Pomyłka w kodzie napisałem przykład na szybko.

Poprawka niżej tego co napisałem i nie działa, jak chciałem.

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <codmod>
#include <fakemeta>

new const perk_name[] = "Maksymalne skupienie";
new const perk_desc[] = "Za kazdego fraga dostajesz +(twoj lvl * 300) dodatkowego expa za fraga.";

new bool:ma_perk[33];

public plugin_init() 
{
    register_plugin(perk_name, "1.0", "QTM_Peyote");
    
    cod_register_perk(perk_name, perk_desc);
    
    register_event("DeathMsg", "Death", "ade");
}

public cod_perk_enabled(id)
ma_perk[id] = true;

public cod_perk_disabled(id)
ma_perk[id] = false;

public Death(id)
{    
    new attacker = read_data(1);
    if(!is_user_connected(attacker))
    return PLUGIN_CONTINUE;
    
    if(!ma_perk[attacker])
    return PLUGIN_CONTINUE;
    
    if(get_user_team(id) != get_user_team(attacker))
        cod_set_user_xp(id, cod_get_user_xp(id)+cod_get_user_level(id)*10);
    return PLUGIN_CONTINUE;
}
Odpowiedz

  • +
  • -
SAL - zdjęcie SAL 10.05.2013

nie powinno zamiast tego 

cod_set_user_xp(id, cod_get_user_xp(id)+cod_get_user_level(id)*10);

 

byc cos takiego 

new ixp = cod_get_user_level(id)*10

cod_set_user_xp(id, cod_get_user_xp(id) + ixp)

 

moze zadziala ;)

 

Odpowiedz

SoPelQ - zdjęcie SoPelQ 10.05.2013

@up: Sprawdzałem to już wcześniej.

Poza tym kod to jedno i to samo inaczej zapisane.


Użytkownik SoPelQ edytował ten post 10.05.2013 21:06
Odpowiedz

GT Team - zdjęcie GT Team 11.05.2013

register_event("DeathMsg", "Death", "ade");
na
register_event("DeathMsg", "Death", "a");
i
public Death(id)
{    
    new attacker = read_data(1);
    if(!is_user_connected(attacker))
    return PLUGIN_CONTINUE;
    
    if(!ma_perk[attacker])
    return PLUGIN_CONTINUE;
    
    if(get_user_team(id) != get_user_team(attacker))
        cod_set_user_xp(id, cod_get_user_xp(id)+cod_get_user_level(id)*10);
    return PLUGIN_CONTINUE;
}
na
public Death()
{    
    new attacker = read_data(1);
    new id = read_data(2);
    if(!is_user_connected(attacker) || !is_user_connected(id))
    return PLUGIN_CONTINUE;
    
    if(!ma_perk[attacker])
    return PLUGIN_CONTINUE;
    
    if(get_user_team(id) != get_user_team(attacker))
        cod_set_user_xp(attacker, cod_get_user_xp(attacker)+(cod_get_user_level(attacker)*10));
    return PLUGIN_CONTINUE;
}
Odpowiedz

SoPelQ - zdjęcie SoPelQ 11.05.2013

Jeszcze raz dzięki za pomoc, przy okazji pomyłkę w opisie wychwyciłem;d

Odpowiedz

GT Team - zdjęcie GT Team 11.05.2013

Też ją widziałem, tylko nie zdążyłem napisac, bo bateria w laptopie była na 3% :) Działa ?
Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 11.05.2013

Nie powinno być 

 

if(!is_user_connected(attacker) & !is_user_connected(id))

 

??

Odpowiedz

GT Team - zdjęcie GT Team 11.05.2013

nieee :) jeżeli 'atakujacy' (attacker) albo 'id' (obrywajacy) nie sa polaczeni z serwerem ( czyli funkcja zostala zle wykonana ) to przerywa funkcje. Bo jak ma pobrac/ustawic gracza/owi dane skoro gracz nie jeste połączony :D ? Wywali błąd Invalid Player
Odpowiedz

  • +
  • -
SzalonyKrejzol - zdjęcie SzalonyKrejzol 11.05.2013

@playazz44
takie pytanko,dzialaja ci dobrze perki z tych paczek czy ci podmienia nawet jak masz?
Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 11.05.2013

Nie korzystam z tego, po prostu zerknąłem na kod i spytałem bo zawsze robiłem inaczej i działa.

Odpowiedz

  • +
  • -
Kawon - zdjęcie Kawon 24.05.2013

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Autor tematu zbanowany

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany