diff --git a/config/scripts.cfg b/config/scripts.cfg index 595ab4ba..f309259e 100644 --- a/config/scripts.cfg +++ b/config/scripts.cfg @@ -22,6 +22,7 @@ complete demo "demos" dmo alias entcomplete [listcomplete $arg1 "light playerstart pistol ammobox grenades health armour akimbo mapmodel trigger ladder ctf-flag sound clip"] entcomplete newent entcomplete clearents +entcomplete closestenttype // Game mode descriptions... gamemodedesc 0 [Team Deathmatch: Find the enemy team and destroy them!] diff --git a/source/src/world.cpp b/source/src/world.cpp index 0cc8c791..c1db66f3 100644 --- a/source/src/world.cpp +++ b/source/src/world.cpp @@ -117,24 +117,51 @@ void remipmore(const block &b, int level) remip(bb, level); } +static int clentsel = 0, clenttype = NOTUSED; + +void nextclosestent(void) { clentsel++; } + +void closestenttype(char *what) +{ + clenttype = what[0] ? findtype(what) : NOTUSED; +} + +COMMAND(nextclosestent, ARG_NONE); +COMMAND(closestenttype, ARG_1STR); + int closestent() // used for delent and edit mode ent display { if(noteditmode()) return -1; - int best = -1; + int best = -1, bcnt = 0; float bdist = 99999; - loopv(ents) + loopj(3) { - entity &e = ents[i]; - if(e.type==NOTUSED) continue; - vec v(e.x, e.y, e.z); - float dist = v.dist(camera1->o); - if(disto); + if(j) + { + if(ents[best].x == e.x && ents[best].y == e.y && ents[best].z == e.z) + { + if(j == 2 && bcnt == clentsel) return i; + bcnt++; + } + } + else if(dist= 0) + { + entity &e = ents[cycle]; + player1->o.x = e.x; + player1->o.y = e.y; + player1->o.z = e.z; + player1->yaw = e.attr1; + player1->pitch = 0; + player1->roll = 0; + entinmap(player1); + } +} + +COMMAND(nextplayerstart, ARG_1STR); + sqr *wmip[LARGEST_FACTOR*2]; void setupworld(int factor)