Trump needs your help to stop the Starman!
Julia, 146 142 121 120 bytes
n->split("Pippi Lucas Ness Travis")[2any(isinteger,sqrt([5n^2+4,5n^2-4]))+(n∈[2;[(g=golden)^i+(-g)^-i for i=1:n]])+1]
This creates an unnamed function that returns a boolean. To call it, give it a name, e.g. f=n->...
.
Ungolfed:
function trump(n::Integer)
# Determine if n is a Fibonacci number by checking whether
# 5n^2 ± 4 is a perfect square
F = any(isinteger, sqrt([5n^2 + 4, 5n^2 - 4]))
# Determine if n is a Lucas number by generating Lucas
# numbers and testing for membership
# golden is a built-in constant containing the golden ratio
L = n ∈ [2; [golden^i + (-golden)^-i for i = 1:n]]
# Select the appropriate Earthbound charater using array
# indexing on a string split into an array on spaces
return split("Pippi Lucas Ness Travis")[2F+L+1]
end
Fixed an issue and saved 7 bytes thanks to Glen O!
Mathematica 143 156 - 15 (bonus) = 141 bytes
With 2 bytes saved thanks to LegionMammal978.
t_~g~l_:=(r=1<0;n=1;While[(z=l@n)<=t,If[z==t,r=1>0];n++];r);a=g[k=Input[],LucasL];
b=k~g~Fibonacci;Which[k==2016,Trump,a&&b,Travis,a,Lucas,b,Ness,2<3,Pippi]
Mathematica, 92 87 bytes
Inspired by Sp3000's answer.
Travis[Ness,Lucas,Pippi][[{2,1}.Product[Abs@Sign[{Fibonacci@n,LucasL@n}-#],{n,0,2#}]]]&