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