int Team_TouchEnemyFlag(gentity_t *ent, gentity_t *other, int team) { gclient_t *cl = other->client; gentity_t *tmp; ent->s.density--; tmp = ent->parent; ent->parent = other; if (cl->sess.sessionTeam == TEAM_AXIS) { gentity_t *pm = G_PopupMessage(PM_OBJECTIVE); pm->s.effect3Time = G_StringIndex(ent->message); pm->s.effect2Time = TEAM_AXIS; pm->s.density = 0; // 0 = stolen if (level.gameManager) { G_Script_ScriptEvent(level.gameManager, "trigger", "allied_object_stolen"); } G_Script_ScriptEvent(ent, "trigger", "stolen"); } else { gentity_t *pm = G_PopupMessage(PM_OBJECTIVE); pm->s.effect3Time = G_StringIndex(ent->message); pm->s.effect2Time = TEAM_ALLIES; pm->s.density = 0; // 0 = stolen if (level.gameManager) { G_Script_ScriptEvent(level.gameManager, "trigger", "axis_object_stolen"); } G_Script_ScriptEvent(ent, "trigger", "stolen"); } ent->parent = tmp; if (team == TEAM_AXIS) { cl->ps.powerups[PW_REDFLAG] = INT_MAX; } else { cl->ps.powerups[PW_BLUEFLAG] = INT_MAX; } // flags never expire // store the entitynum of our original flag spawner if (ent->flags & FL_DROPPED_ITEM) { cl->flagParent = ent->s.otherEntityNum; } else { cl->flagParent = ent->s.number; } other->client->speedScale = ent->splashDamage; // Alter player speed if (ent->s.density > 0) { return 1; // We have more flags to give out, spawn back quickly } return -1; // Do not respawn this automatically, but do delete it if it was FL_DROPPED }
void Team_ReturnFlagSound(gentity_t *ent, int team) { // play powerup spawn sound to all clients gentity_t *pm; if (ent == NULL) { G_DPrintf("Warning: NULL passed to Team_ReturnFlagSound\n"); return; } pm = G_PopupMessage(PM_OBJECTIVE); pm->s.effect3Time = G_StringIndex(ent->message); pm->s.effect2Time = team; pm->s.density = 1; // 1 = returned }
/** * @brief Team_TouchEnemyFlag * @param[in,out] ent * @param[out] other * @param[in] team * @return */ int Team_TouchEnemyFlag(gentity_t *ent, gentity_t *other, int team) { gclient_t *cl = other->client; gentity_t *tmp; ent->s.density--; // hey, its not our flag, pick it up AddScore(other, WOLF_STEAL_OBJ_BONUS); tmp = ent->parent; ent->parent = other; if (cl->sess.sessionTeam == TEAM_AXIS) { gentity_t *pm = G_PopupMessage(PM_OBJECTIVE); pm->s.effect3Time = G_StringIndex(ent->message); pm->s.effect2Time = TEAM_AXIS; pm->s.density = 0; // 0 = stolen if (level.gameManager) { G_Script_ScriptEvent(level.gameManager, "trigger", "allied_object_stolen"); } G_Script_ScriptEvent(ent, "trigger", "stolen"); #ifdef FEATURE_OMNIBOT Bot_Util_SendTrigger(ent, NULL, va("Axis have stolen %s!", ent->message), "stolen"); #endif } else { gentity_t *pm = G_PopupMessage(PM_OBJECTIVE); pm->s.effect3Time = G_StringIndex(ent->message); pm->s.effect2Time = TEAM_ALLIES; pm->s.density = 0; // 0 = stolen if (level.gameManager) { G_Script_ScriptEvent(level.gameManager, "trigger", "axis_object_stolen"); } G_Script_ScriptEvent(ent, "trigger", "stolen"); #ifdef FEATURE_OMNIBOT Bot_Util_SendTrigger(ent, NULL, va("Allies have stolen %s!", ent->message), "stolen"); #endif } ent->parent = tmp; // reset player disguise on stealing docs other->client->ps.powerups[PW_OPS_DISGUISED] = 0; other->client->disguiseClientNum = -1; if (team == TEAM_AXIS) { cl->ps.powerups[PW_REDFLAG] = INT_MAX; } else { cl->ps.powerups[PW_BLUEFLAG] = INT_MAX; } // flags never expire // store the entitynum of our original flag spawner if (ent->flags & FL_DROPPED_ITEM) { cl->flagParent = ent->s.otherEntityNum; } else { cl->flagParent = ent->s.number; } other->client->speedScale = ent->splashDamage; // Alter player speed if (ent->s.density > 0) { return 1; // We have more flags to give out, spawn back quickly } else { return -1; // Do not respawn this automatically, but do delete it if it was FL_DROPPED } }