📄 playerclient.java
字号:
break; case Defines.MOD_EXPLOSIVE: case Defines.MOD_BARREL: message = "blew up"; break; case Defines.MOD_EXIT: message = "found a way out"; break; case Defines.MOD_TARGET_LASER: message = "saw the light"; break; case Defines.MOD_TARGET_BLASTER: message = "got blasted"; break; case Defines.MOD_BOMB: case Defines.MOD_SPLASH: case Defines.MOD_TRIGGER_HURT: message = "was in the wrong place"; break; } if (attacker == self) { switch (mod) { case Defines.MOD_HELD_GRENADE: message = "tried to put the pin back in"; break; case Defines.MOD_HG_SPLASH: case Defines.MOD_G_SPLASH: if (PlayerClient.IsNeutral(self)) message = "tripped on its own grenade"; else if (PlayerClient.IsFemale(self)) message = "tripped on her own grenade"; else message = "tripped on his own grenade"; break; case Defines.MOD_R_SPLASH: if (PlayerClient.IsNeutral(self)) message = "blew itself up"; else if (PlayerClient.IsFemale(self)) message = "blew herself up"; else message = "blew himself up"; break; case Defines.MOD_BFG_BLAST: message = "should have used a smaller gun"; break; default: if (PlayerClient.IsNeutral(self)) message = "killed itself"; else if (PlayerClient.IsFemale(self)) message = "killed herself"; else message = "killed himself"; break; } } if (message != null) { GameBase.gi.bprintf(Defines.PRINT_MEDIUM, self.client.pers.netname + " " + message + ".\n"); if (GameBase.deathmatch.value != 0) self.client.resp.score--; self.enemy = null; return; } self.enemy = attacker; if (attacker != null && attacker.client != null) { switch (mod) { case Defines.MOD_BLASTER: message = "was blasted by"; break; case Defines.MOD_SHOTGUN: message = "was gunned down by"; break; case Defines.MOD_SSHOTGUN: message = "was blown away by"; message2 = "'s super shotgun"; break; case Defines.MOD_MACHINEGUN: message = "was machinegunned by"; break; case Defines.MOD_CHAINGUN: message = "was cut in half by"; message2 = "'s chaingun"; break; case Defines.MOD_GRENADE: message = "was popped by"; message2 = "'s grenade"; break; case Defines.MOD_G_SPLASH: message = "was shredded by"; message2 = "'s shrapnel"; break; case Defines.MOD_ROCKET: message = "ate"; message2 = "'s rocket"; break; case Defines.MOD_R_SPLASH: message = "almost dodged"; message2 = "'s rocket"; break; case Defines.MOD_HYPERBLASTER: message = "was melted by"; message2 = "'s hyperblaster"; break; case Defines.MOD_RAILGUN: message = "was railed by"; break; case Defines.MOD_BFG_LASER: message = "saw the pretty lights from"; message2 = "'s BFG"; break; case Defines.MOD_BFG_BLAST: message = "was disintegrated by"; message2 = "'s BFG blast"; break; case Defines.MOD_BFG_EFFECT: message = "couldn't hide from"; message2 = "'s BFG"; break; case Defines.MOD_HANDGRENADE: message = "caught"; message2 = "'s handgrenade"; break; case Defines.MOD_HG_SPLASH: message = "didn't see"; message2 = "'s handgrenade"; break; case Defines.MOD_HELD_GRENADE: message = "feels"; message2 = "'s pain"; break; case Defines.MOD_TELEFRAG: message = "tried to invade"; message2 = "'s personal space"; break; } if (message != null) { GameBase.gi.bprintf(Defines.PRINT_MEDIUM, self.client.pers.netname + " " + message + " " + attacker.client.pers.netname + " " + message2 + "\n"); if (GameBase.deathmatch.value != 0) { if (ff) attacker.client.resp.score--; else attacker.client.resp.score++; } return; } } } GameBase.gi.bprintf(Defines.PRINT_MEDIUM, self.client.pers.netname + " died.\n"); if (GameBase.deathmatch.value != 0) self.client.resp.score--; } /** * This is only called when the game first initializes in single player, but * is called after each death and level change in deathmatch. */ public static void InitClientPersistant(gclient_t client) { gitem_t item; client.pers = new client_persistant_t(); item = GameItems.FindItem("Blaster"); client.pers.selected_item = GameItems.ITEM_INDEX(item); client.pers.inventory[client.pers.selected_item] = 1; /* * Give shotgun. item = FindItem("Shotgun"); client.pers.selected_item = * ITEM_INDEX(item); client.pers.inventory[client.pers.selected_item] = * 1; */ client.pers.weapon = item; client.pers.health = 100; client.pers.max_health = 100; client.pers.max_bullets = 200; client.pers.max_shells = 100; client.pers.max_rockets = 50; client.pers.max_grenades = 50; client.pers.max_cells = 200; client.pers.max_slugs = 50; client.pers.connected = true; } public static void InitClientResp(gclient_t client) { //memset(& client.resp, 0, sizeof(client.resp)); client.resp.clear(); // ok. client.resp.enterframe = GameBase.level.framenum; client.resp.coop_respawn.set(client.pers); } /** * Some information that should be persistant, like health, is still stored * in the edict structure, so it needs to be mirrored out to the client * structure before all the edicts are wiped. */ public static void SaveClientData() { int i; edict_t ent; for (i = 0; i < GameBase.game.maxclients; i++) { ent = GameBase.g_edicts[1 + i]; if (!ent.inuse) continue; GameBase.game.clients[i].pers.health = ent.health; GameBase.game.clients[i].pers.max_health = ent.max_health; GameBase.game.clients[i].pers.savedFlags = (ent.flags & (Defines.FL_GODMODE | Defines.FL_NOTARGET | Defines.FL_POWER_ARMOR)); if (GameBase.coop.value != 0) GameBase.game.clients[i].pers.score = ent.client.resp.score; } } public static void FetchClientEntData(edict_t ent) { ent.health = ent.client.pers.health; ent.max_health = ent.client.pers.max_health; ent.flags |= ent.client.pers.savedFlags; if (GameBase.coop.value != 0) ent.client.resp.score = ent.client.pers.score; } /** * Returns the distance to the nearest player from the given spot. */ static float PlayersRangeFromSpot(edict_t spot) { edict_t player; float bestplayerdistance; float[] v = { 0, 0, 0 }; int n; float playerdistance; bestplayerdistance = 9999999; for (n = 1; n <= GameBase.maxclients.value; n++) { player = GameBase.g_edicts[n]; if (!player.inuse) continue; if (player.health <= 0) continue; Math3D.VectorSubtract(spot.s.origin, player.s.origin, v); playerdistance = Math3D.VectorLength(v); if (playerdistance < bestplayerdistance) bestplayerdistance = playerdistance; } return bestplayerdistance; } /** * Go to a random point, but NOT the two points closest to other players. */ public static edict_t SelectRandomDeathmatchSpawnPoint() { edict_t spot, spot1, spot2; int count = 0; int selection; float range, range1, range2; spot = null; range1 = range2 = 99999; spot1 = spot2 = null; EdictIterator es = null; while ((es = GameBase.G_Find(es, GameBase.findByClass, "info_player_deathmatch")) != null) { spot = es.o; count++; range = PlayersRangeFromSpot(spot); if (range < range1) { range1 = range; spot1 = spot; } else if (range < range2) { range2 = range; spot2 = spot; } } if (count == 0) return null; if (count <= 2) { spot1 = spot2 = null; } else count -= 2; selection = Lib.rand() % count; spot = null; es = null; do { es = GameBase.G_Find(es, GameBase.findByClass, "info_player_deathmatch"); if (es == null) break; spot = es.o; if (spot == spot1 || spot == spot2) selection++; } while (selection-- > 0); return spot; } /** * If turned on in the dmflags, select a spawn point far away from other players. */ static edict_t SelectFarthestDeathmatchSpawnPoint() { edict_t bestspot; float bestdistance, bestplayerdistance; edict_t spot; spot = null; bestspot = null; bestdistance = 0; EdictIterator es = null; while ((es = GameBase.G_Find(es, GameBase.findByClass, "info_player_deathmatch")) != null) { spot = es.o; bestplayerdistance = PlayersRangeFromSpot(spot); if (bestplayerdistance > bestdistance) { bestspot = spot; bestdistance = bestplayerdistance; } } if (bestspot != null) { return bestspot; } // if there is a player just spawned on each and every start spot // we have no choice to turn one into a telefrag meltdown
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -