←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Soccerjam bot

Zablokowany

  • +
  • -
Miczu - zdjęcie Miczu 12.09.2008

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

Odpowiedz

  • +
  • -
MafiaDL - zdjęcie MafiaDL 13.09.2008

Gratz :D:D:D:D
Odpowiedz

  • +
  • -
Miczu - zdjęcie Miczu 13.09.2008

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 ^^
Odpowiedz

  • +
  • -
Kobicjusz - zdjęcie Kobicjusz 20.10.2008

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
Odpowiedz

  • +
  • -
Miczu - zdjęcie Miczu 20.10.2008

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.
Odpowiedz

  • +
  • -
Kobicjusz - zdjęcie Kobicjusz 20.10.2008

aha dzięki
A sa juz jakies boty zo graja na mapkach sj??
Odpowiedz

  • +
  • -
Miczu - zdjęcie Miczu 20.10.2008

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...
Odpowiedz

  • +
  • -
Kobicjusz - zdjęcie Kobicjusz 21.10.2008

ok dzięki za odpowiedź
Odpowiedz

  • +
  • -
Sevecio - zdjęcie Sevecio 21.10.2008

Wyzwanei dosc fajne ale ja dopeiro sie ucze o pluginach :P A wiec powodzenia osobom ktore spruboja :D
Odpowiedz

  • +
  • -
Knopers - zdjęcie Knopers 21.10.2008

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) ;]
Odpowiedz

  • +
  • -
Miczu - zdjęcie Miczu 21.10.2008

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'.
Odpowiedz
Zablokowany