Here's what I had in mind. It includes the discontinuous algebraics, although for my choice of parameter values they never switch.
I suggest you provide some "reasonable" parameter values, most of which are fixed, but a few for which you would like to see results for a range of values. (My values likely make no sense.)
In[1]:= (* function for occupancy *)
occupancy[c_, p_, d_] := r (c f1 + p f2 + d f3)/k
In[2]:= (* equations *)
eqs = {c'[t] == c[t] (p1[t]*v[t] - (1 - p1[t]) v[t] - dr),
p'[t] ==
c[t] (1 - p1[t]) v[t] + p[t] (p1v - (1 - p1[t]) v[t] - dr),
d'[t] == p[t] (1 - p1[t]) v[t] + d[t] (1 - dr)};
In[3]:= (* initial conditions *)
initial = {c[0] == 1, p[0] == 0, d[0] == 0};
In[4]:= (* algebraic equations *)
(* values that vary with the independent parameter must be functions \
of it *)
algebraics = {v[t] == If[occupancy[c[t], p[t], d[t]] < x1, vy1, v0],
p1[t] == If[occupancy[c[t], p[t], d[t]] < x2, p1y2, p10]};
In[5]:= (* real numbers *)
values = {x1 -> .5, vy1 -> .5, v0 -> .3, x2 -> .6, p10 -> .3,
p1y2 -> .7, p10 -> .2, dr -> .5, p1v -> .4, f1 -> .5, f2 -> .3,
f3 -> .7, r -> .7, k -> 10};
In[6]:= (* check to make sure no undefined symbols *)
{eqs, initial, algebraics} /. values
Out[6]= {{Derivative[1][c][t] ==
c[t] (-0.5 - (1 - p1[t]) v[t] + p1[t] v[t]),
Derivative[1][p][t] ==
c[t] (1 - p1[t]) v[t] + p[t] (-0.1 - (1 - p1[t]) v[t]),
Derivative[1][d][t] == 0.5 d[t] + p[t] (1 - p1[t]) v[t]}, {c[0] ==
1, p[0] == 0,
d[0] == 0}, {v[t] ==
If[0.07 (0.5 c[t] + 0.7 d[t] + 0.3 p[t]) < 0.5, 0.5, 0.3],
p1[t] == If[0.07 (0.5 c[t] + 0.7 d[t] + 0.3 p[t]) < 0.6, 0.7, 0.3]}}
In[7]:= (* solve to f[t] set *)
{fc, fp, fd, fv, fp1} = NDSolveValue[
{eqs, initial, algebraics} /. values,
{c[t], p[t], d[t], v[t], p1[t]},
{t, 0, 10}
];
In[8]:= Plot[{fc, fp, fd, fv, fp1}, {t, 0, 10},
PlotLegends -> {"c[t]", "p[t]", "d[t]", "v[t]", "p1[t]"}]

Attachments: