Soccerjam bot
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
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
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 ;-)
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
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
Miczu
13.09.2008
Ej nie gratzy
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
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
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
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
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.
Duo. Jesli nie wiesz co zrobic z plikami .sma to znaczy ze sobie z tym nie poradzisz.
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...
Sevecio
21.10.2008
Wyzwanei dosc fajne ale ja dopeiro sie ucze o pluginach A wiec powodzenia osobom ktore spruboja
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) ;]
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 , 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'.
Niezbyt mnie cieszy ze tak malo jest programistow ktorzy byli by zainteresowani mala 'lamiglowka'.