Game Development Community

Ranged Auto Attack

by Joseph Jonathan · in Torque Game Engine · 01/31/2008 (10:22 am) · 1 replies

I am using the MMORPG Advanced Tutorial and I have finished where I can auto attack with the melee weapon. I have started coding so that I can also have an auto attack with a ranged weapon.

In my sword.cs file I placed

itemType = "melee"

Then in my commands.cs file where I have the autoattack function I have:

if(%client.Player.getMountedImage($WeaponSlot).itemType = "melee")
	{


			if(%tempObj && %tempObj.getId() == %targetObject.getId()){
				if(%targetObject.getDamagePercent() < 1 && %client.Player.getDamagePercent() < 1 && %client.Player.AttackOn == 1){
					echo("Recieved order for AutoAttack");
					%Msg = "You attack "@%targetObject.getShapeName();
					MessageClient(%client,'Attack',%Msg);
					echo("Rolling!");
					
					%clientRoll = getRandom(1,32) + %client.Player.Stat[OneHS];
					echo(%client.Player.getShapeName()@": "@%clientRoll);
				
					%targetRoll = getRandom(1,32) + %targetObject.Stat[DEX];
					echo(%targetObject.getShapeName()@": "@%targetRoll);

					Melee::Attack(%client.Player);
					
					if(%clientRoll >= %targetRoll){
						%BaseDamage = %client.Player.getMountedImage(0).BaseDamage;
						if(%BaseDamage < 1){
							%BaseDamage = 1;
						}
						echo("BaseDamage of weapon is "@%BaseDamage);
						
						%TotalWeaponStats = %client.Player.Stat["STR"] + %client.Player.Stat["DEX"] + %client.Player.Skill["OneHS"] * %client.Player.Level;
						echo("TotalWeaponStats = "@%TotalWeaponStats);
						%TotalDefStats = %targetObject.AC + %targetObject.Stat[DEX] * %targetObject.Level;
						%force = %TotalWeaponStats - %TotalDefStats + getRandom(1,32) * %client.Player.Level;
						%targetObject.damage(%client.Player, %client.Player.getTransform(),%force, "Direct");
						%Msg = "You hit "@%targetObject.getShapeName()@" for "@%force;
						MessageClient(%client,'Attack',%Msg);
					}else{
						%Msg = "You missed "@%targetObject.getShapeName();
						MessageClient(%client,'Missed',%Msg);
					}
				
				}
				if(%targetObject.getClassName() $="AIPlayer"){
					if( %targetObject.getAimObject() != %client.Player){
						echo("Target is AI, make sure to setup return of Damage");
						%targetObject.setAimObject(%client.Player);
						schedule(1000,%targetObject,ServerCmdAutoAttack,%targetObject);
					}
				}else{
					if(!%targetObject.getSelectedObject()){
						echo("Target is not AI and does not currently hold a target, setting target");
						%targetObject.setSelectedObject(%client);
						CommandToClient(%TargetObject,'UpdateTargetDialog','NewTarget',%Client.getshapeName());
					}
				}
				schedule(1000,%targetObject,ServerCmdAutoAttack,%Client);
				//%Msg = "You are at "@%client.player.getPosition()@" and your target is at "@%targetObject.getPosition(); 
				//MessageClient(%client,'Location',%Msg);
			}else{
				MessageClient(%client,'OutOfRange','You are too far away to strike your target');
			}


	}else{
	
		MessageClient(%client,'Wrong Weapon','The Test Worked yippy dippy do.');
	}


I still can not get it to work. I always get the Wrong Weapon message with both the crossbow and sword.

Can I have some help please?

#1
02/03/2008 (7:37 am)
Ok I figured it out.

Instead of this:

if(%client.Player.getMountedImage($WeaponSlot).itemType = "melee")

I needed to put this:

if(%client.Player.getMountedImage($WeaponSlot).itemType $= "melee")

It now works well.