Problem about finding script name

Hi all,
i am struggling with this problem for very long time and i have never found right solution. So, let me explain my problem ( i don’t know how good will you understand because my English is not so good) :

I have a game where player click on a icon of monster he wants to spawn from his base, and that monster (or monsters) go right to enemy base. They deal damage buy colliding or with arrows if they are ranged, but let get on problem - I have base class for all of that monsters ( Called BaseMonster ) and in that class, i have TakeDamage function, but i have unique script for all of my monsters because some of them have reduced damage etc. Problem is, when monsters collide, i can’t know exactly name of the script, but i can not use ‘SendMessage’ because i need more then one parameter for that function.

I hope someone will give me right answer, i really need solution for this problem

Maybe this can help :

//Colliding method in your Base Monster class
void OnTriggerEnter(Collider  other)
{
//Just take damage if what collided with the monster is an Arrow, for example
   if (other.ComparTag("Arrow")
         TakeDamage(123);
}

Do you mean your MonsterBase class is controlling all your monster health ? If that is true, your approach is incorrect.
Instead, you should Instantiate a new Monster each time you want to spawn a Monster, like this.

Instantiate(monsterGameObjectPrefab, position, roration);

monsterGameObjectPrefab will be an object you already defined in Unity and that you made a prefab of it.
If you don’t know about what I am talking, then read Unity documentation about Prefabs.