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
Then in my commands.cs file where I have the autoattack function I have:
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?
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?
Torque Owner Joseph Jonathan
Instead of this:
I needed to put this:
It now works well.