public void addPlayer( Player p ) { if (fPlayers.contains(p)) return; // already joined this team fPlayers.addElement( p ); // make sure we find out if the team member disconnects p.addPlayerStateListener(this); // act as a damage filter for this member p.addDamageListener(this); // assign new skin assignSkinTo( p ); Object[] args = {p.getName(), fTeamIndex}; Game.localecast("q2java.ctf.CTFMessages", "join_team", args, Engine.PRINT_HIGH); //update players stats that he joined this team (the yellow line around team-icon) int index1 = ( this == Team.TEAM1 ? STAT_CTF_JOINED_TEAM1_PIC : STAT_CTF_JOINED_TEAM2_PIC ); int index2 = ( this == Team.TEAM1 ? STAT_CTF_JOINED_TEAM2_PIC : STAT_CTF_JOINED_TEAM1_PIC ); int picnum = Engine.getImageIndex("i_ctfj"); p.fEntity.setPlayerStat( index1, (short)picnum ); p.fEntity.setPlayerStat( index2, (short)0 ); }
public static void blinkDeathmatchScoreboard( Player client ) { // if during intermission, we must blink our header if we're the winning team (or tie) //if ( inIntermission && ((int)Game.getGameTime()%2 == 0 ) ) // blink every second if ( (int)Game.getGameTime()%2 == 0 ) // blink every second { if ( TEAM1.getCaptures() > TEAM2.getCaptures() ) client.fEntity.setPlayerStat( STAT_CTF_TEAM1_HEADER, (short)0 ); else if ( TEAM2.getCaptures() > TEAM1.getCaptures() ) client.fEntity.setPlayerStat( STAT_CTF_TEAM2_HEADER, (short)0 ); // Capture tie, check total frags else if ( TEAM1.getScore() > TEAM2.getScore() ) client.fEntity.setPlayerStat( STAT_CTF_TEAM1_HEADER, (short)0 ); else if ( TEAM2.getScore() > TEAM1.getScore() ) client.fEntity.setPlayerStat( STAT_CTF_TEAM2_HEADER, (short)0 ); else { // tie game client.fEntity.setPlayerStat( STAT_CTF_TEAM1_HEADER, (short)0 ); client.fEntity.setPlayerStat( STAT_CTF_TEAM2_HEADER, (short)0 ); } } else { // show both if not blinked client.fEntity.setPlayerStat( STAT_CTF_TEAM1_HEADER, (short)Engine.getImageIndex("ctfsb1") ); client.fEntity.setPlayerStat( STAT_CTF_TEAM2_HEADER, (short)Engine.getImageIndex("ctfsb2") ); } }
{ // look for an info_player_start object within the specified target group Vector list = Game.getLevelRegistryList("target-" + target); Enumeration enum = list.elements(); while (enum.hasMoreElements()) { Object obj = enum.nextElement(); if (obj instanceof q2java.baseq2.spawn.info_player_start) return (GenericSpawnpoint) obj; } }
/** * Filter a team member's damage. * @param DamageObject - damage to be filtered. */ public void damageOccured(DamageEvent damage) { // check for self-inflicted damage if (damage.getVictim() == damage.getAttacker()) return; // they deserve what they get..no help from us // check if the attacker also belongs to this team if (isTeamMember(damage.getAttacker())) { damage.fAmount = 0; return; // give the guy a break } if ((damage.getAttacker() instanceof Player) && ((Player)damage.getVictim()).isCarrying("flag")) { // A CTF Player other than ourselves attacked us and we have the flag // mark the attacker that he was aggressive to the flag-carrier. CTFPlayer p = (CTFPlayer)(damage.getAttacker()); p.fLastCarrierHurt = Game.getGameTime(); } }
/** * Find a single-player spawnpoint. Kind of simplistic. * @return q2jgame.GameEntity, null if nothing available. */ public static GenericSpawnpoint getSpawnpointSingle() { String target = BaseQ2.getSpawnpoint(); if (target == null) { // look for an info_player_start spawnpoint that's not a target Vector list = Game.getLevelRegistryList(q2java.baseq2.spawn.info_player_start.REGISTRY_KEY); Enumeration enum = list.elements(); while (enum.hasMoreElements()) { GenericSpawnpoint sp = (GenericSpawnpoint) enum.nextElement(); if (sp.getTargetGroup() == null) return sp; } // all info_player_starts are targets, so settle for the first one (if available) if (list.size() > 0) return (GenericSpawnpoint) list.elementAt(0); } else
/** * Select the spawnpoint farthest from other players. * @return q2jgame.GameEntity */ public static GenericSpawnpoint getSpawnpointFarthest() { GenericSpawnpoint result = null; float bestDistance = 0; Vector list = Game.getLevelRegistryList(q2java.baseq2.spawn.info_player_deathmatch.REGISTRY_KEY); Enumeration enum = list.elements(); while (enum.hasMoreElements()) { GenericSpawnpoint spawnPoint = (GenericSpawnpoint) enum.nextElement(); float range = MiscUtil.nearestPlayerDistance(spawnPoint); if (range > bestDistance) { bestDistance = range; result = spawnPoint; } } return result; }
//=================================================== // Constructor (private, so cannot be instanciated) //=================================================== private Team( int teamIndex ) { fTeamIndex = new Integer(teamIndex); fPlayers = new Vector(); Game.addGameStatusListener( this ); }
/** * This method finds a ctf spawnpoint for the TEAM, * but NOT the two points closest to other players. **/ public GenericSpawnpoint getSpawnpoint() { GenericSpawnpoint spawnPoint = null; GenericSpawnpoint spot1 = null; GenericSpawnpoint spot2 = null; float range1 = Float.MAX_VALUE; float range2 = Float.MAX_VALUE; int count = 0; String regKey; regKey = ( this == TEAM1 ? info_player_team1.REGISTRY_KEY : info_player_team2.REGISTRY_KEY ); // find the two ctf-team spawnpoints that are closest to any players Vector list = Game.getLevelRegistryList( regKey ); Enumeration enum = list.elements(); while (enum.hasMoreElements()) { count++; spawnPoint = (GenericSpawnpoint) enum.nextElement(); float range = q2java.baseq2.MiscUtil.nearestPlayerDistance(spawnPoint); if (range < range1) { range1 = range; spot1 = spawnPoint; } else { if (range < range2) { range2 = range; spot2 = spawnPoint; } } } if (count == 0) return null; if (count <= 2) spot1 = spot2 = null; else count -= 2; int selection = (GameUtil.randomInt() & 0x0fff) % count; spawnPoint = null; enum = list.elements(); while (enum.hasMoreElements()) { spawnPoint = (GenericSpawnpoint) enum.nextElement(); // skip the undesirable spots if ((spawnPoint == spot1) || (spawnPoint == spot2)) continue; if ((selection--) == 0) break; } return spawnPoint; }
/** * Set the bot's skin. * * @param args java.lang.String[] */ public void svcmd_skin(String[] args) { if (args.length > 2) fTestBot.setSkin(args[2]); else Game.dprint("Usage: sv skin <skin-name> (example: male/grunt)\n"); }
/** Set the bot's locale */ public void svcmd_locale(String[] args) { if (args.length > 2) fTestBot.setLocale(args[2]); else { Game.dprint("Usage: sv locale [<locale>]\nCurrent locale: " + fTestBot.getLocale() + "\n"); } }
/** * This method was created by a SmartGuide. * * @param args java.lang.String[] */ public void svcmd_help(String[] args) { Game.dprint("Bot health: " + fTestBot.getHealth() + "\n"); }
/** * Select a random spawnpoint, but exclude the two points closest * to other players. * @return q2jgame.GameEntity */ public static GenericSpawnpoint getSpawnpointRandom() { GenericSpawnpoint spawnPoint = null; GenericSpawnpoint spot1 = null; GenericSpawnpoint spot2 = null; float range1 = Float.MAX_VALUE; float range2 = Float.MAX_VALUE; int count = 0; // find the two deathmatch spawnpoints that are closest to any players Vector list = Game.getLevelRegistryList(q2java.baseq2.spawn.info_player_deathmatch.REGISTRY_KEY); // if no deathmatch spawnpoint, try single-player ones if (list.size() < 1) list = Game.getLevelRegistryList(q2java.baseq2.spawn.info_player_start.REGISTRY_KEY); Enumeration enum = list.elements(); while (enum.hasMoreElements()) { count++; spawnPoint = (GenericSpawnpoint) enum.nextElement(); float range = MiscUtil.nearestPlayerDistance(spawnPoint); if (range < range1) { range1 = range; spot1 = spawnPoint; } else { if (range < range2) { range2 = range; spot2 = spawnPoint; } } } if (count == 0) return null; if (count <= 2) spot1 = spot2 = null; else count -= 2; int selection = (GameUtil.randomInt() & 0x0fff) % count; spawnPoint = null; enum = list.elements(); while (enum.hasMoreElements()) { spawnPoint = (GenericSpawnpoint) enum.nextElement(); // skip the undesirable spots if ((spawnPoint == spot1) || (spawnPoint == spot2)) continue; if ((selection--) == 0) break; } return spawnPoint; }