←  Poradniki oraz Łatki

AMXX.pl: Support AMX Mod X i SourceMod

»

Dodatek
Item "Piorun Zeusa"

Angel of Death - zdjęcie Angel of Death 12.02.2012

Opis Itemu:
Masz losową szansę na to że trafisz wroga piorunem.

Wymagany moduł: hamsandwich

Wygląda to tak:
Dołączona grafika

No to do dzieła:

1. Dodajemy zmienną globalną:
new piorun_zeusa[33] = 1


2. W public "reset_item_skills" dodajemy
piorun_zeusa[id] = 0

3. W public "iteminfo(id)" dodajemy:
if (piorun_zeusa[id] &--#62; 0)
{
num_to_str(piorun_zeusa[id],TempSkill,10)
add(itemEffect,699,"Masz 1/")
add(itemEffect,699,TempSkill)
add(itemEffect,699,"szans ,zeby uderzyc we wroga piorunem&--#60;br&--#62;")
}


4. W public "award_item(id, itemnum)" dodajemy kolejny Item'ek, na początku podmieniamy:
new rannum = random_num(1,xxx)
xxx - nasza ilość itemow musimy zwiększyć o jedno aby losowanie odbyło się prawidłowo
case xxx:
za xxx wstawiamy kolejny numer itemu

Dalej...

{
player_item_name[id] = "Piorun Zeusa"
player_item_id[id] = rannum
piorun_zeusa[id] = random_num(8,15)
show_hudmessage(id, "Znalazles przedmiot: %s :: Masz 1/%i szans ,ze trafisz wroga piorunem",player_item_name[id],piorun_zeusa[id])
}
W public damage(id) dodajemy
add_bonus_piorun(attacker_id,id)

5. I na końcu dodajemy:

public add_bonus_piorun(attacker_id,id)
{
if (piorun_zeusa[attacker_id] &--#62;0 && (random_num(1, piorun_zeusa[attacker_id]) == 1))
{
		new Float:fl_Origin[3]
		pev(id, pev_origin, fl_Origin)	
if(cs_get_user_team(attacker_id) == cs_get_user_team(id))
return HAM_IGNORED

set_pev(id, pev_velocity, Float:{0.0,0.0,0.0}) // stop motion
set_pev(id, pev_maxspeed, 5.0) // prevent from moving

thunder_effects(fl_Origin)
ExecuteHam(Ham_TakeDamage, id, attacker_id, attacker_id, 40.0, 1);
}
return PLUGIN_HANDLED
}
thunder_effects(Float:fl_Origin[3])
{
	new Float:fX = fl_Origin[0], Float:fY = fl_Origin[1], Float:fZ = fl_Origin[2]



	// Beam effect between two points
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fl_Origin, 0)
	write_byte(TE_BEAMPOINTS)		// 0
	engfunc(EngFunc_WriteCoord, fX + 150.0)	// start position
	engfunc(EngFunc_WriteCoord, fY + 150.0)
	engfunc(EngFunc_WriteCoord, fZ + 800.0)
	engfunc(EngFunc_WriteCoord, fX)	// end position
	engfunc(EngFunc_WriteCoord, fY)
	engfunc(EngFunc_WriteCoord, fZ)
	write_short(sprite_lgt)	// sprite index
	write_byte(1)					// starting frame
	write_byte(15)					// frame rate in 0.1's
	write_byte(10)					// life in 0.1's
	write_byte(80)					// line width in 0.1's
	write_byte(30)					// noise amplitude in 0.01's
	write_byte(255)					// red
	write_byte(255)					// green
	write_byte(255)					// blue
	write_byte(255)					// brightness
	write_byte(200)					// scroll speed in 0.1's
	message_end()

	// Sparks
	message_begin(MSG_PVS, SVC_TEMPENTITY)
	write_byte(TE_SPARKS)			// 9
	engfunc(EngFunc_WriteCoord, fX)	// position
	engfunc(EngFunc_WriteCoord, fY)
	engfunc(EngFunc_WriteCoord, fZ + 10.0)
	message_end()

	// Smoke
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fl_Origin, 0)
	write_byte(TE_SMOKE)			// 5
	engfunc(EngFunc_WriteCoord, fX)	// position
	engfunc(EngFunc_WriteCoord, fY)
	engfunc(EngFunc_WriteCoord, fZ + 10.0)
	write_short(sprite_smoke)		// sprite index
	write_byte(10)					// scale in 0.1's
	write_byte(10)					// framerate
	message_end()
	
	// Blood
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fl_Origin, 0)
	write_byte(TE_LAVASPLASH)		// 10
	engfunc(EngFunc_WriteCoord, fX)	// position
	engfunc(EngFunc_WriteCoord, fY)
	engfunc(EngFunc_WriteCoord, fZ + 12.0)
	message_end()


}

Autorem tak jak w poprzednim przypadku nie jestem ja lecz "M@nkovsky"
Koniec, Enjoy ;)

Dalej...

{
player_item_name[id] = "Piorun Zeusa"
player_item_id[id] = rannum
piorun_zeusa[id] = random_num(8,15)
show_hudmessage(id, "Znalazles przedmiot: %s :: Masz 1/%i szans ,ze trafisz wroga piorunem",player_item_name[id],piorun_zeusa[id])
}
W public damage(id) dodajemy
add_bonus_piorun(attacker_id,id)


Powinno być:
Dalej...
{
player_item_name[id] = "Piorun Zeusa"
player_item_id[id] = rannum
piorun_zeusa[id] = random_num(8,15)
show_hudmessage(id, "Znalazles przedmiot: %s :: Masz 1/%i szans ,ze trafisz wroga piorunem",player_item_name[id],piorun_zeusa[id])
}

A później:
* W public "damage(id)" dodajemy:
add_bonus_piorun(attacker_id,id)

Dodatkowo chcę wspomnieć, że linijką :

ExecuteHam(Ham_TakeDamage, id, 0 , id, 40.0, 1);




.. można edytować obrażenia zadawane przez piorun, zamiast 40.0 dajemy własną liczbę rzeczywistą, np 66.0 - rzeczywistą, czyli koniecznie z np .0 na końcu. Można to też przerobić dodając do tego np +floatround(player_intelligence[id]/5) - czyli przy 100 inteligencji będziecie zadawać SWOJE USTAWIONE + 20 ;]


Użytkownik DarkGL edytował ten post 24.03.2012 20:03
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 12.02.2012

zapomniałeś dodać

#include <hamsandwich>
Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 12.02.2012

Dodatkowo chcę wspomnieć, że linijką :

ExecuteHam(Ham_TakeDamage, id, 0 , id, 40.0, 1);


.. można edytować obrażenia zadawane przez piorun, zamiast 40.0 dajemy własną liczbę rzeczywistą, np 66.0 - rzeczywistą, czyli koniecznie z np .0 na końcu. Można to też przerobić dodając do tego np +floatround(player_intelligence[id]/5) - czyli przy 100 inteligencji będziecie zadawać SWOJE USTAWIONE + 20 ;]
Użytkownik ogieR- edytował ten post 12.02.2012 22:08
Odpowiedz

  • +
  • -
KariiO - zdjęcie KariiO 13.02.2012

+
za to że z nieba :P
Odpowiedz

  • +
  • -
piterlbk - zdjęcie piterlbk 26.02.2012

dał by ktoś ten perk w amx?
Hiroshima (26.02.2012 21:40):
każdy ma swoje przeróbki w silniku diablo i nikt nie będzie robił tego specjalnie dla Ciebie na Twoim .sma skoro nie ma w tym nic trudnego
Odpowiedz

  • +
  • -
Hiroshima - zdjęcie Hiroshima 26.02.2012

dał by ktoś ten perk w amx?



nie, trochę wysiłku... możesz zrobić to sam!

jak już skończysz robić to co jest w opisie to zapraszamy tutaj: http://amxx.pl/kompilator/
Odpowiedz

  • +
  • -
piterlbk - zdjęcie piterlbk 26.02.2012

nieee wiem jak to sie do końca robi niby zroniłem ale nie jestem pewien czy działa BARDZO BYM PROSIŁ O PLIK AMX

niby zrobiłem ale mi nie działa co w dotadku zawiesło mi serwer ja nie potrafie zrobić perka umiem klase BARDZO BYM PROSIŁ O AMX BD BARDZO WDZIĘCZNY
Odpowiedz

Tiger_pl - zdjęcie Tiger_pl 27.02.2012

Wszystko ( Prawie) działa ok ale.... gdy zabijasz przeciwnika używając tego skilla nie zalicza w ogóle dedów..
Przydało by się tutaj dodać funkcje zaliczania fragów przy użyciu tego skilla
Odpowiedz

  • +
  • -
piterlbk - zdjęcie piterlbk 27.02.2012

ej czy dalibyście ten item w amxx i sma jak byście
daje + za motyw z nieba a drugi + dam za podanie pliku w amxx
Odpowiedz

  • +
  • -
Nakupenda. - zdjęcie Nakupenda. 27.02.2012

@Tiger_pl: dodaj po ExecuteHam
set_user_frags(attacker_id, get_user_frags(attacker_id) + 1)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 24.03.2012

@Tiger_pl: dodaj po ExecuteHam

set_user_frags(attacker_id, get_user_frags(attacker_id) + 1)

No chyba nie ^ ^
A jak piorun nie zabije kogoś? Ogólnie nie chce mi się wierzyć, że nie dodaje fraga przy zabiciu, przecież kanapka ma to do siebie, że zadając w ten sposób obrażenia, przy zabiciu dodaje wszystko, kasę, itp.
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 24.03.2012

ExecuteHam(Ham_TakeDamage, id, 0, id, 40.0, 1);
na
ExecuteHam(Ham_TakeDamage, id, attacker_id, attacker_id, 40.0, 1);

i wszystko będzie ok

( podmieniłem już w 1 poście )
Odpowiedz

  • +
  • -
dw221 - zdjęcie dw221 31.03.2012

Ja mam problem z tym
if(cs_get_user_team(attacker_id) == cs_get_user_team(id))
Pomoże ktoś ??
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 31.03.2012

masz problem z tym tzn ?
Odpowiedz

  • +
  • -
dw221 - zdjęcie dw221 01.04.2012

Znaczy jest warning ale działa ale chciał bym aby go nie było
Odpowiedz

  • +
  • -
KoRnY - zdjęcie KoRnY 30.04.2012

Jak przypisać to do umiejętności na nożu?
Bo chyba samo wywołanie tego nie starczy.
Bo z tego co widzę nigdzie nie jest pobrane , gdzie osobnik celuje.
Ktoś mógłby pomóc?

ok ogarnąłem całe przypisanie do klasy itp
Wyrzuciłem atacker id bo chyba nie potrzebne.
Problem tylko jak sprawdzić , czy gracz namierzył cel?
Tj , żeby ktoś tym piorunem dostał.

Zrobiłem tak:

	    else {
new Float:fl_Origin[3]
pev(id, pev_origin, fl_Origin)
set_pev(id, pev_velocity, Float:{0.0,0.0,0.0}) // stop motion
set_pev(id, pev_maxspeed, 5.0) // prevent from moving
thunder_effects(fl_Origin)
wait1[id]=floatround(halflife_time())
}
return PLUGIN_HANDLED


Jak dodać tutaj , gdzie ten piorun trzepnie?
Puki co dostaje w głowę ja ;P

A no i jak sprawa ma się z zadaniem obrażeń?
Odpowiedz

Dizip - zdjęcie Dizip 01.05.2012

else {
new Float:fl_Origin[3]
pev(id, pev_origin, fl_Origin)
set_pev(id, pev_velocity, Float:{0.0,0.0,0.0}) // stop motion
set_pev(id, pev_maxspeed, 5.0) // prevent from moving
thunder_effects(fl_Origin)
wait1[id]=floatround(halflife_time())
}
return PLUGIN_HANDLED


Zobacz. ID to Ty ,wiec znajdujesz siebie a potem walisz sobie w leb ; P

Po co zmieniasz cos w kodzie itemu ?
zrób to w public Damage(id) po prostu okresl if klasa jakas tami jakas losowa wartosc == 1 uzyj mocy na ofeirze

Ogolnie polecam uzywac hamsandwich do zadawania dmg w diablo ; )
Odpowiedz

  • +
  • -
KoRnY - zdjęcie KoRnY 01.05.2012

Zmieniam kod , bo nie chce , aby użycie tej mocy było uzależnione od broni.
Oryginał pobiera atacker_id , a skąd je weźmie , skoro nie ma to wymagać strzału?
Odpowiedz

  • +
  • -
KoRnY - zdjęcie KoRnY 02.05.2012

Jeśli id to ja.
To jak pobrać id osoby w którą celuje?

Sory , że post pod postem , ale nie mogłem edytować ; /
Użytkownik KoRnY edytował ten post 02.05.2012 01:13
Odpowiedz

Dizip - zdjęcie Dizip 02.05.2012

Możesz zrobić get_user_aiming ale tego nie polecam bo potem mogą być crashe z powodem "wysylanai wiadomosic do nikąd" jak ktoś bedzie spamował moca


Zrób na get_uer_orgin i to będzie ,że jeśli w zasięgu gracza to niech zaatakuje.
w prethinku np uzycie E


a potem sama moc

public Moc(id)
new origin[3]
get_user_origin(id, origin)

for(new a = 0; a < MAX; a++)
{
if (!is_user_connected(a) || !is_user_alive(a) || get_user_team(a) == get_user_team(id))
continue;

new originssp[3]
get_user_origin(a, originssp)


if(get_distance(origin,originssp) < 200)
{


Widzisz teraz robis zpetle , i suzka ludzi w ogleglosci 200 po if distans uzyj pirouna i zadaj dmg
Odpowiedz