Ich nehme einmal stark an, dass die Methode "change_weapon" nicht global ist, sondern in einer Klasse vorhanden ist.
Es könnte sein, dass du versuchst diese Methode global auf zu rufen und daher die NoMethodException geworfen bekommst.

Näheres könnte ich dir aber nur sagen, falls du mehr von dem Script zeigen würdest.