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

Soccerjam bot


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

#1 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 12.09.2008 20:51

Elo zrobilem juz podstawy pluga do bota do soccerjamu.

Z powodu ze bot na tej bazie nie zrobi pp, to proponuje zrobic z niego bramkarza lub pomocnika, ale daje wolna reke :]

#include <amxmodx>
#include <amxmisc>
#include <engine>

#define PLUGIN "need_a_bot"
#define VERSION "0.1"
#define AUTHOR "Miczu"

new Float: g_mins[3]={-16.0,-16.0,-36.0}
new Float: g_maxs[3]={ 16.0, 16.0, 36.0}
new Float: g_sixe[3]={ 32.0, 32.0, 72.0}

new KNIFE_VIEW[] 	= "models/v_knife.mdl"
new KNIFE_PLAYER[] 	= "models/p_knife.mdl"

new aball

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_clcmd("need_a_bot","ball_krepper") 
	
	register_think("krepper","krepper_think")
	register_touch("krepper", "PwnBall", "touch_ball")
	register_touch("krepper", "krepper", "touch_krepper")
	register_touch("krepper", "player", "touch_player")
}

public plugin_precache()
{ 
	precache_model("models/player/vip/vip.mdl")

	precache_model(KNIFE_VIEW)     
	precache_model(KNIFE_PLAYER)
}

public ball_krepper(id)
{
	new Float: ori[3]
	new ent = create_entity("info_target")
	entity_set_string(ent, EV_SZ_classname,"krepper")
		
	entity_set_model(ent, "models/player/vip/vip.mdl")

	entity_set_vector(ent, EV_VEC_mins, g_mins)
	entity_set_vector(ent, EV_VEC_maxs, g_maxs)
	entity_set_vector(ent, EV_VEC_size, g_sixe)
	
	entity_get_vector(id,EV_VEC_origin,ori)
	ori[0]+=80.0
	ori[1]+=80.0
	ori[2]+=100.0
	
	entity_set_origin(ent,ori)
	
	entity_set_float(ent, EV_FL_health,1.0)
	entity_set_float(ent, EV_FL_takedamage, 1.0)
	entity_set_float(ent, EV_FL_dmg_take, 1.0)
	entity_set_float(ent, EV_FL_framerate, 1.0)
	
	entity_set_int(ent, EV_INT_movetype, 13)
	entity_set_int(ent, EV_INT_solid, 2)
	entity_set_int(ent, EV_INT_spawnflags, 0)
	entity_set_int(ent, EV_INT_sequence, 1)	//75
	entity_set_int(ent, EV_INT_gaitsequence,4)
	entity_set_int(ent, EV_INT_weaponanim,3)
	
	entity_set_string(ent, EV_SZ_viewmodel,KNIFE_VIEW)
	entity_set_string(ent, EV_SZ_weaponmodel,KNIFE_PLAYER)
	
	new entWeapon = create_entity("info_target")
	entity_set_string(entWeapon, EV_SZ_classname, "CSW_M4A1")
	//set to follow
	entity_set_int(entWeapon, EV_INT_movetype, MOVETYPE_FOLLOW)
	entity_set_int(entWeapon, EV_INT_solid, SOLID_NOT)
	entity_set_edict(entWeapon, EV_ENT_aiment, ent)
	entity_set_model(entWeapon, KNIFE_PLAYER)
	
	entity_set_float(ent,EV_FL_nextthink,halflife_time() + 2.0)
		
}

public krepper_think(ent)
{
	new Float: bolli[3],Float: Enti[3]
	new Float: ball_vec[3]
	new Float: dir[3]
	new Float: angle[3]
	new Float: lol[3]
	new Float: vector[3]
	new Float: k_speed
	
	aball = find_ent_by_class(-1,"PwnBall")
	new solid = entity_get_int(aball,EV_INT_solid)
	if(aball==0)
	{
		entity_set_int(ent, EV_INT_gaitsequence,1)
		entity_set_float(ent,EV_FL_nextthink,halflife_time() + 1.00)
		return
	}
	
	entity_get_vector(ent,EV_VEC_velocity,vector)
	entity_get_vector(aball,EV_VEC_velocity,ball_vec)	
	entity_get_vector(aball,EV_VEC_origin,bolli)
	entity_get_vector(ent,EV_VEC_origin,Enti)
	
	k_speed = vector_length(vector)
	if(k_speed<50)
	{
		entity_set_int(ent, EV_INT_sequence,1)
	}
	else if(k_speed<200)
	{
		entity_set_int(ent, EV_INT_sequence,4)
		entity_set_float(ent,EV_FL_framerate,0.5)
	}
	else
	{
		entity_set_int(ent, EV_INT_sequence,4)
		entity_set_float(ent,EV_FL_framerate,1.0)
	}
	
	for(new i=0;i<3;i++)
	{
		dir[i]=bolli[i]-Enti[i]
	}
	
	vector_to_angle(dir,angle)
	
	lol[0]=0.0
	lol[1]=angle[1]
	lol[2]=0.0
	
	entity_set_vector(ent,EV_VEC_angles,angle)
	entity_set_vector(ent,EV_VEC_v_angle,lol)	
	
	new flags = entity_get_int(ent,EV_INT_flags)
	
	if(flags & (1<<9)) bot_move_think(ent)
	else					//umoziwia wskok na trybuny
	{
		entity_get_vector(ent,EV_VEC_velocity,vector)
		
		if(bolli[0]>Enti[0]) vector[0]+=1.0
		else vector[0]-=1.0
		if(bolli[1]>Enti[1]) vector[1]+=1.0
		else vector[1]-=1.0
		
		vector[2]-=13.0
		entity_set_vector(ent,EV_VEC_velocity,vector)
	}
	
	entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.05)
}

public touch_krepper(ent,ent2)
{
	new Float: bolli[3],Float: Enti[3]
	entity_get_vector(ent2,EV_VEC_origin,bolli)
	entity_get_vector(ent,EV_VEC_origin,Enti)
	
	new Float: dir[3]
	for(new i=0;i<3;i++)
	{
		dir[i]=bolli[i]-Enti[i]
	}
	
	new Float: lol[3]
	lol[0]=dir[0]*17.0
	lol[1]=dir[1]*17.0
	lol[2]=250.0
	
	entity_set_vector(ent2,EV_VEC_basevelocity,lol)
}

public touch_player(ent,id)
{
	new Float: bolli[3],Float: Enti[3]
	entity_get_vector(id,EV_VEC_origin,bolli)
	entity_get_vector(ent,EV_VEC_origin,Enti)
	
	new Float: dir[3]
	for(new i=0;i<3;i++)
	{
		dir[i]=bolli[i]-Enti[i]
	}
	
	new Float: lol[3]
	lol[0]=dir[0]*10.0
	lol[1]=dir[1]*10.0
	lol[2]=50.0
	
	entity_set_vector(id,EV_VEC_basevelocity,lol)
}

public bot_jump(ent)
{
	new Float: vector[3]
	entity_get_vector(ent,EV_VEC_velocity,vector)
	vector[2]+=375.0
	entity_set_vector(ent,EV_VEC_velocity,vector)
}


/////////////////////////////////////////////////////////////////////////
//////		Ponizej tego proszę zrobic mozg bota 		/////////
/////////////////////////////////////////////////////////////////////////

public touch_ball(ent,ball)
{
	new Float: bolli[3],Float: Enti[3],Float: vol[3]
	entity_get_vector(ball,EV_VEC_origin,bolli)
	entity_get_vector(ent,EV_VEC_origin,Enti)
		
	new Float: dir[3]
	for(new i=0;i<3;i++)
	{
		dir[i]=bolli[i]-Enti[i]
	}
	
	new Float: lol[3]
	lol[0]=dir[0]*20.0
	lol[1]=dir[1]*20.0
	lol[2]+=350.0
	
	entity_get_vector(ball,EV_VEC_velocity,vol)
	new Float: speed = vector_length(vol)
	
	if(speed<1200) entity_set_vector(ball,EV_VEC_basevelocity,lol)
	
	lol[0]=dir[0]*-15.0
	lol[1]=dir[1]*-15.0
	lol[2]=0.0
	
	entity_set_vector(ent,EV_VEC_basevelocity,lol)
}

public bot_move_think(ent)
{
	new Float: o_ent[3],Float: o_ball[3],Float: dir[3],Float: dir2[3]
	new Float: speed
		
	entity_get_vector(ent,EV_VEC_origin,o_ent)
	entity_get_vector(aball,EV_VEC_origin,o_ball)
	
	for(new i=0;i<3;i++)
	{
		dir[i]=o_ball[i]-o_ent[i]
	}
	
	speed = vector_length(dir)
	
	for(new i=0;i<3;i++)
	{
		dir2[i]=dir[i]/speed		//tak o to dir2 jako jednostowy wektor kierunku
	}
	
	//////////////////////////////////////////////
	
	new Float: volecity[3]
	entity_get_vector(ent,EV_VEC_velocity,volecity)
	speed = vector_length(volecity)
	if(speed<100)
	{
		for(new i=0;i<2;i++) volecity[i]+= dir2[i]*45.0
		entity_set_vector(ent,EV_VEC_velocity,volecity) 
	}
	else if(speed<250)
	{
		for(new i=0;i<2;i++) volecity[i]+= dir2[i]*65.0
		entity_set_vector(ent,EV_VEC_velocity,volecity) 
	}
	else if(speed<333)
	{
		for(new i=0;i<2;i++) volecity[i]+= dir2[i]*90.0
		entity_set_vector(ent,EV_VEC_velocity,volecity) 
	}
	
	if(random_num(0,256)==66) bot_jump(ent)
	static jumpi=0
	
	if(speed<50) jumpi++
	
	if(jumpi>7)
	{
		jumpi=0
		bot_jump(ent)
	}	
}

proszę tylko zmieniac w 2 ostatnich funkcjach, reszta jest puki co w zadawalajacym poziomie.

Obecny kod pozwala botom biegac glupio za pilka i skakac gdy sie wolno ruszaja (np. przeszkoda na ktora wypada wskoczyc je blokuje). A takze bezmyslnie kopnac pilke :mur:

Mowiac inaczej sa glupie jak but, ale jeszcze nie wzielem sie za prawdziwa inteligencje.

Wszystkich zdolnych zaprawszam do programowania :]

[ Dodano: 12-09-2008, 21:53 ]
PS. Boty potrzebuja pilki z soccerjamu by ladnie dzialac.

Zaraz postaram sie zrobic pluga co zrobi wam na dowolnej mapie pileczke ;-)

Załączone pliki


  • +
  • -
  • 0

#2 MafiaDL

    Naj-Najstarszy Moderator

  • Przyjaciel

Reputacja: 561
Wszechwiedzący

  • Postów:3 492
  • GG:
  • Imię:Łukasz
  • Lokalizacja:Warsaw
Offline

Napisano 13.09.2008 01:35

Gratz :D:D:D:D
  • +
  • -
  • 0

#3 Miczu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 13.09.2008 07:38

Ej nie gratzy xD

Moze sie zle wyrazilem:
Chce zrobic maly konkurs na to kto zrobi najinteligentniejszego bota.

Szczytem moich marzen by bylo zrobienie bot teamow i team przeciwko teamowi ^^
  • +
  • -
  • 0

#4 Kobicjusz

    Nowy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:3
Offline

Napisano 20.10.2008 16:06

sorki, że odkopuje temat ale uwazam, ze nie warto pisać nowego.
A pisze bo nie wiem gdzie wkleić te pliki i jak mam zrobic żeby bot np. bronił na bramce
Licze na szybka odp. z góry dziekuje
Pozdrawiam Kobicjusz
  • +
  • -
  • 0

#5 Miczu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 20.10.2008 16:11

Uno. To jest surowy kod - spawniecie bota i prosty przyklad jak sie porusza, jesli chcesz by bronil bramke, to musisz bota odpowiednio zaprogramowac.

Duo. Jesli nie wiesz co zrobic z plikami .sma to znaczy ze sobie z tym nie poradzisz.
  • +
  • -
  • 0

#6 Kobicjusz

    Nowy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:3
Offline

Napisano 20.10.2008 18:15

aha dzięki
A sa juz jakies boty zo graja na mapkach sj??
  • +
  • -
  • 0

#7 Miczu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 20.10.2008 19:08

Zrobilem dosc dobrego bota do podawania (idealnie tam gdzie biegniesz) ale na razie nie planuje go dawac na forum - nadal nie jest gotowy, a nie mam czasu go rozwijac...
  • +
  • -
  • 0

#8 Kobicjusz

    Nowy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:3
Offline

Napisano 21.10.2008 17:28

ok dzięki za odpowiedź
  • +
  • -
  • 0

#9 Sevecio

    Zaawansowany

  • Użytkownik

Reputacja: 6
Nowy

  • Postów:125
  • GG:
  • Lokalizacja:Bełchatów
Offline

Napisano 21.10.2008 19:25

Wyzwanei dosc fajne ale ja dopeiro sie ucze o pluginach :P A wiec powodzenia osobom ktore spruboja :D
  • +
  • -
  • 0

#10 Knopers

    Nie patrz tak na mnie !

  • Przyjaciel

Reputacja: 588
Wszechwiedzący

  • Postów:2 013
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Cz-wa
Offline

Napisano 21.10.2008 20:00

Powoli się uczę programować może do końca roku będę dość dobry aby chociaż jedną linijkę dodać ale jak coś zrobię to dam znać (o ile Miczu nie skończy go pierwszy) ;]
  • +
  • -
  • 0

#11 Miczu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 21.10.2008 20:15

Jak ktos ma jakies pytania (np. jak cos zrobic z tym kodem - tj. nie ze od razu co zrobic by byl pro xD, tylko napkrzyklad by bot biegl tak gdzie pilka bedzie za np. 4s zamiast glupio tam gdzie teraz jest) to chetnie odpowiem :]

Niezbyt mnie cieszy ze tak malo jest programistow ktorzy byli by zainteresowani mala 'lamiglowka'.
  • +
  • -
  • 0




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

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