Page 1 of 1

Stunning weapon

Posted: Tue Apr 26, 2011 7:26 pm
by Dakota
i made this crazy zapping weapon that shocks all units and stuns them (maybe like freezing time) but i just needed to know what i did wrong when i did this. do i need an animation for it to work or is there more?

here is the odf of the weapon ord.
Hidden/Spoiler:
[OrdnanceClass]

ClassLabel = "emitterordnance"

[Properties]
Explosion = "com_weap_inf_force_zap_exp"

ImpactEffectWater = "com_sfx_watersplash_ord"

ConeLength = "1000"
ConeAngle = "360"
FirstRadius = "0.0"
MaxTargets = "100" // Max number of targets to hit. Chaining is off so the damage will be split between the number of targets
NoChaining = "0" // No chaining - all bolts coming from the attacker

//OrdnanceSound = "com_weap_launcher_energy_dumbfire"

Damage = "0" // This is the min damage. Even if the initial damage is split between the number of targets, it will never go below this number for each target
MaxDamage = "0" // This is the max damage
JumpDeduction = "0" // No jump deduction. This is for chaining only
DamageThreshold = "0" // Always do damage (no threshold)
MaxJumpDistance = "1000" // No max jump distance because the chaining is off

StunTime = "100000"
StunAnimation = ""

VehicleScale = "1.0"
ShieldScale = "1.0"
PersonScale = "1.0"
AnimalScale = "1.0"
DroidScale = "1.0"
BuildingScale = "1.0"

SmolderEffectTimer = "1000.0"

SmolderEffect = "chargeball"
SmolderBone = "bone_ribcage"

SmolderEffect = "chargeball"
SmolderBone = "bone_pelvis"

Push = "-1000.0"
LightningEffect = "com_sfx_lightningred"
LightningEffectScale = "1.0"
NoTargetLightningEffectCount = "25" // The number of ligthning effects to display when the ordinance has no targets to hit
NoTargetLightningEffectRandomSpread = "5.0" // The random rotation spread the ligthning effects does when the ordinance has no targets to hit

Re: stunning weapon

Posted: Tue Apr 26, 2011 7:32 pm
by Fiodis
I don't think stunning works - I remember something about it being broken. Most mods, certaintly, with "stun nades" accomplish that by just knocking the units over briefly; if there were a better way I'm sure they would've used it.

Re: Stunning weapon

Posted: Tue Apr 26, 2011 9:56 pm
by Dakota
hmm, i actually did see someone do this before. it was in the map "DMI/Dynamic Map Idea" by repsharpshooter. the jedi had a force move that could stun another unit and just hold them in place for about a minute even when the jedi walks away. i know its been done at least once but i wonder how he did it.

Re: Stunning weapon

Posted: Tue Apr 26, 2011 9:59 pm
by Maveritchell
Dakota wrote:hmm, i actually did see someone do this before. it was in the map "DMI/Dynamic Map Idea" by repsharpshooter. the jedi had a force move that could stun another unit and just hold them in place for about a minute even when the jedi walks away. i know its been done at least once but i wonder how he did it.
You're talking about a scripted weapon, which can do any number of things. What you saw in DMI was just a choke weapon.

Re: Stunning weapon

Posted: Tue Apr 26, 2011 10:01 pm
by Dakota
oh, so thats what its called :shock: but i still need to know how to make one.

Re: Stunning weapon

Posted: Tue Apr 26, 2011 11:48 pm
by THEWULFMAN
Dakota wrote:oh, so thats what its called :shock: but i still need to know how to make one.

Code: Select all

--ADD THIS AFTER THE ScriptCB_DoFile SECTION
count = 0
--END


Code: Select all

-- ADD THIS IN THE ScriptPostLoad SECTION

   OnObjectDamage(
         function(object, damager)
		 if GetObjectHealth(object) > 900000 then return end
               if GetObjectLastHitWeaponClass(object)  == "cis_weap_inf_stun_grenade" then
					FreezeFor(object,2)
               end 
          end
          )
--END

Code: Select all


--ADD THIS AFTER THE ScriptPostLoad SECTION
function FreezeFor(object, timercount)
   --Freeze
    print("--Freeze")
   health = GetObjectHealth(object)
   SetProperty(object, "CurHealth", 1000000)
   DeactivateObject(object)
   -- Wait for timercount
    print("-- Wait for timercount")
   CreateTimer("timer" .. count)
   SetTimerValue("timer" .. count, timercount)
   StartTimer("timer" .. count)
   OnTimerElapse(
   function(timer)
      --Unfreeze
	   print("--Unfreeze")
      ActivateObject(object)
      SetProperty(object, "CurHealth", (GetObjectHealth(object) - 1000000) + health)
	  count = count + 1
   end,
   "timer" .. count
   )
end
--END

Re: Stunning weapon

Posted: Wed Apr 27, 2011 3:31 am
by DarthD.U.C.K.
master saiteks forcefreeze, isnt it?
here is the older version of it, without lua-code:
Hidden/Spoiler:
[WeaponClass]

ClassLabel = "areaeffectweapon"

[Properties]
HUDTag = "hud_force_push"
GeometryName = ""
HighResGeometry = ""
//MuzzleFlash = "med_muzzle_flash"
FlashColor = "80 80 255 255"
FlashLength = 0.025
FlashLightColor = "220 220 255 175"
Discharge = "med_smoke_effect"

//RoundsPerClip = "32"
RoundsPerClip = "0"
ReloadTime = "0.0"

HeatPerShot = "0.0" // only allow player to fire every 5 seconds
HeatRecoverRate = "0.2"
HeatThreshold = "0.01"

DisplayRefire = "0"

EnergyDrain = "40.0"
EnergyDrainRate = "15.0"
FireType = "Hold"
InitialSalvoDelay = "0.5"
//ChargeMaxTime = "0.0"
//ChargeMinStrength = "0.0"
MaxTargets = "1"
AreaType = "Ray"
AreaRange = "10.0"
AreaRadius = "10.0" // -> 20 degree arc
AreaHeight = "4.0"
EffectDamage = "0.0"
EffectType = "Choke"
EffectStrength = "10.0"
EffectFalloff = "1.0"
ThrustFactor = "0.5" // when firing, move at half speed
// I don't think this is used in the code at all -> TargetLock = "1" // when firing, activate target lock
SoldierAnimation = "idle_emote_full"

OffhandWeapon = 1
InstantPlayFireAnim = 1
TriggerSingle = "1" // if FireType = "Hold" this will work correctly now - Mike Z

LockOnRange = "64.0"
LockTime = "0.0"
AutoAimSize = "2.0"

TargetEnemy = "1"
TargetNeutral = "0"
TargetFriendly = "0"

TargetPerson = "1"
TargetAnimal = "1"
TargetDroid = "1"
TargetVehicle = "0"
TargetBuilding = "0"

ChargeRateLight = "1.0"
MaxChargeStrengthLight = "1.0"
ChargeDelayLight = "0.0"
ChargeRateHeavy = "1.0"
MaxChargeStrengthHeavy = "0.5"
ChargeDelayHeavy = "2.2"

RecoilLengthHeavy = "0.25"
RecoilStrengthHeavy = "2"
RecoilDecayHeavy = "0.0"

FireSound = "force_choke_fire"
//ReloadSound = ""
WeaponChangeSound = ""
ChangeModeSound = ""
FireEmptySound = ""
ChargeSound = ""
ChargeSoundPitch = "0.05"
OverheatSound = ""
OverheatSoundPitch = "0.5"
OverheatStopSound = ""
im not sure in which ways its is worse

Re: Stunning weapon

Posted: Wed Apr 27, 2011 3:47 am
by THEWULFMAN
Ah, Master Saitek came up with that, no readme for me to give him credits, he never has readmes with credits XD.

Well, using the lua code version you can hit someone with a weapon and you can still move, while with the old version you cant move since your force choking with 0 damage.

Re: Stunning weapon

Posted: Wed Apr 27, 2011 7:13 am
by skelltor
Change this ThrustFactor = "0.5" to 1 and you can move at mormal speed but you still have to hold down the button.

Re: Stunning weapon

Posted: Wed Apr 27, 2011 3:44 pm
by Dakota
thanks, i will go try the one that requires lua (since i need to beable to move around >.>)

its actually munging right now and when i finish this mod up i am going to add some more people into the credits. :D

EDIT: ok i was just working with it and got the question: does having push on the weapon cause failure of it to stun?

also i was just wondering if i can have more than one weapon like this in the lua? because i could make a stun gun and a stun force power.

EDIT2: i see why its not working i got a munge error

here is the error
Hidden/Spoiler:
C:\BF2_ModTools\ToolsFL\Bin\luac.exe: ..\..\common\scripts\WSM\WSMc_con.lua:20: `)' expected near `('
ERROR[scriptmunge scripts\WSM\WSMc_con.lua]:Could not read input file.ERROR[scriptmunge scripts\WSM\WSMc_con.lua]:Could not read input file. [continuing]
2 Errors 0 Warnings

ERROR[levelpack mission\WSMc_con.req]:Expecting bracket, but none was found.
File : munged\pc\wsmc_con.script.req(1)...

ucft <--
ERROR[levelpack mission\WSMc_con.req]:Expecting bracket, but none was found.
File : munged\pc\wsmc_con.script.req(1)...

ucft <--

2 Errors 0 Warnings
here is my LUA (probably needed to see it)
Hidden/Spoiler:
--
-- Copyright (c) 2005 Pandemic Studios, LLC. All rights reserved.
--

-- load the gametype script
ScriptCB_DoFile("ObjectiveConquest")
ScriptCB_DoFile("setup_teams")

count = 0


-- REP Attacking (attacker is always #1)
REP = 1;
CIS = 2;
-- These variables do not change
ATT = REP;
DEF = CIS;


function ScriptPostLoad(
OnObjectDamage(
function(object, damager)
if GetObjectHealth(object) > 900000 then return end
if GetObjectLastHitWeaponClass(object) == "com_weap_inf_force_zap" then
FreezeFor(object,1000000)
end
end
)
)

function FreezeFor(object, timercount)
--Freeze
print("--Freeze")
health = GetObjectHealth(object)
SetProperty(object, "CurHealth", 1000000)
DeactivateObject(object)
-- Wait for timercount
print("-- Wait for timercount")
CreateTimer("timer" .. count)
SetTimerValue("timer" .. count, timercount)
StartTimer("timer" .. count)
OnTimerElapse(
function(timer)
--Unfreeze
print("--Unfreeze")
ActivateObject(object)
SetProperty(object, "CurHealth", (GetObjectHealth(object) - 1000000) + health)
count = count + 1
end,
"timer" .. count
)

end



--This defines the CPs. These need to happen first
cp1 = CommandPost:New{name = "cp1"}
cp2 = CommandPost:New{name = "cp2"}
cp3 = CommandPost:New{name = "cp3"}
cp4 = CommandPost:New{name = "cp4"}



--This sets up the actual objective. This needs to happen after cp's are defined
conquest = ObjectiveConquest:New{teamATT = ATT, teamDEF = DEF,
textATT = "game.modes.con",
textDEF = "game.modes.con2",
multiplayerRules = true}

--This adds the CPs to the objective. This needs to happen after the objective is set up
conquest:AddCommandPost(cp1)
conquest:AddCommandPost(cp2)
conquest:AddCommandPost(cp3)
conquest:AddCommandPost(cp4)

conquest:Start()

EnableSPHeroRules()

end


---------------------------------------------------------------------------
-- FUNCTION: ScriptInit
-- PURPOSE: This function is only run once
-- INPUT:
-- OUTPUT:
-- NOTES: The name, 'ScriptInit' is a chosen convention, and each
-- mission script must contain a version of this function, as
-- it is called from C to start the mission.
---------------------------------------------------------------------------
function ScriptInit()

ReadDataFile("ingame.lvl")


SetMaxFlyHeight(30)
SetMaxPlayerFlyHeight (30)

SetMemoryPoolSize ("ClothData",20)
SetMemoryPoolSize ("Combo",50) -- should be ~ 2x number of jedi classes
SetMemoryPoolSize ("Combo::State",650) -- should be ~12x #Combo
SetMemoryPoolSize ("Combo::Transition",650) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Condition",650) -- should be a bit bigger than #Combo::State
SetMemoryPoolSize ("Combo::Attack",550) -- should be ~8-12x #Combo
SetMemoryPoolSize ("Combo::DamageSample",6000) -- should be ~8-12x #Combo::Attack
SetMemoryPoolSize ("Combo::Deflect",100) -- should be ~1x #combo

ReadDataFile("sound\\yav.lvl;yav1cw")
ReadDataFile("dc:SIDE\\rep.lvl",
"rep_inf_ep3_rifleman",
"rep_inf_ep3_rocketeer",
"rep_inf_ep3_engineer",
"rep_inf_ep3_sniper",
"rep_inf_ep3_officer",
"rep_inf_ep3_jettrooper",
"rep_hover_fightertank",
"rep_hero_anakin",
"rep_hover_barcspeeder")
ReadDataFile("dc:SIDE\\cis.lvl",
"cis_inf_rifleman",
"cis_inf_rocketeer",
"cis_inf_engineer",
"cis_inf_sniper",
"cis_inf_officer",
"cis_inf_droideka",
"cis_hero_darthmaul",
"cis_hover_aat")


ReadDataFile("dc:SIDE\\tur.lvl",
"tur_bldg_laser",
"tur_bldg_tower")

SetupTeams{
rep = {
team = REP,
units = 20,
reinforcements = 150,
soldier = { "rep_inf_ep3_rifleman",9, 25},
assault = { "rep_inf_ep3_rocketeer",1, 4},
engineer = { "rep_inf_ep3_engineer",1, 4},
sniper = { "rep_inf_ep3_sniper",1, 4},
officer = {"rep_inf_ep3_officer",1, 4},
special = { "rep_inf_ep3_jettrooper",1, 4},

},
cis = {
team = CIS,
units = 20,
reinforcements = 150,
soldier = { "cis_inf_rifleman",9, 25},
assault = { "cis_inf_rocketeer",1, 4},
engineer = { "cis_inf_engineer",1, 4},
sniper = { "cis_inf_sniper",1, 4},
officer = {"cis_inf_officer",1, 4},
special = { "cis_hero_darthmaul",0, 4},
}
}

SetHeroClass(CIS, "cis_hero_darthmaul")
SetHeroClass(REP, "rep_hero_anakin")


-- Level Stats
-- ClearWalkers()
AddWalkerType(0, 4) -- special -> droidekas
AddWalkerType(1, 0) -- 1x2 (1 pair of legs)
AddWalkerType(2, 0) -- 2x2 (2 pairs of legs)
AddWalkerType(3, 0) -- 3x2 (3 pairs of legs)
local weaponCnt = 1024
SetMemoryPoolSize("Aimer", 75)
SetMemoryPoolSize("AmmoCounter", weaponCnt)
SetMemoryPoolSize("BaseHint", 1024)
SetMemoryPoolSize("EnergyBar", weaponCnt)
SetMemoryPoolSize("EntityCloth", 32)
SetMemoryPoolSize("EntityFlyer", 32)
SetMemoryPoolSize("EntityHover", 32)
SetMemoryPoolSize("EntityLight", 200)
SetMemoryPoolSize("EntitySoundStream", 4)
SetMemoryPoolSize("EntitySoundStatic", 32)
SetMemoryPoolSize("MountedTurret", 32)
SetMemoryPoolSize("Navigator", 128)
SetMemoryPoolSize("Obstacle", 1024)
SetMemoryPoolSize("PathNode", 1024)
SetMemoryPoolSize("SoundSpaceRegion", 64)
SetMemoryPoolSize("TreeGridStack", 1024)
SetMemoryPoolSize("UnitAgent", 128)
SetMemoryPoolSize("UnitController", 128)
SetMemoryPoolSize("Weapon", weaponCnt)

SetSpawnDelay(10.0, 0.25)
--ReadDataFile("dc:WSM\\WSM.lvl", "WSM_conquest")
ReadDataFile("dc:WSM\\WSM.lvl", "WSM_conquest")
SetDenseEnvironment("false")




-- Sound

SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")

voiceSlow = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_slow")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_slow", voiceSlow)
AudioStreamAppendSegments("sound\\global.lvl", "global_vo_slow", voiceSlow)

voiceQuick = OpenAudioStream("sound\\global.lvl", "rep_unit_vo_quick")
AudioStreamAppendSegments("sound\\global.lvl", "cis_unit_vo_quick", voiceQuick)

OpenAudioStream("sound\\global.lvl", "cw_music")
-- OpenAudioStream("sound\\global.lvl", "global_vo_quick")
-- OpenAudioStream("sound\\global.lvl", "global_vo_slow")
OpenAudioStream("sound\\yav.lvl", "yav1")
OpenAudioStream("sound\\yav.lvl", "yav1")
OpenAudioStream("sound\\yav.lvl", "yav1_emt")

SetBleedingVoiceOver(REP, REP, "rep_off_com_report_us_overwhelmed", 1)
SetBleedingVoiceOver(REP, CIS, "rep_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, REP, "cis_off_com_report_enemy_losing", 1)
SetBleedingVoiceOver(CIS, CIS, "cis_off_com_report_us_overwhelmed", 1)

SetOutOfBoundsVoiceOver(2, "cisleaving")
SetOutOfBoundsVoiceOver(1, "repleaving")

SetAmbientMusic(REP, 1.0, "rep_yav_amb_start", 0,1)
SetAmbientMusic(REP, 0.8, "rep_yav_amb_middle", 1,1)
SetAmbientMusic(REP, 0.2, "rep_yav_amb_end", 2,1)
SetAmbientMusic(CIS, 1.0, "cis_yav_amb_start", 0,1)
SetAmbientMusic(CIS, 0.8, "cis_yav_amb_middle", 1,1)
SetAmbientMusic(CIS, 0.2, "cis_yav_amb_end", 2,1)

SetVictoryMusic(REP, "rep_yav_amb_victory")
SetDefeatMusic (REP, "rep_yav_amb_defeat")
SetVictoryMusic(CIS, "cis_yav_amb_victory")
SetDefeatMusic (CIS, "cis_yav_amb_defeat")

SetSoundEffect("ScopeDisplayZoomIn", "binocularzoomin")
SetSoundEffect("ScopeDisplayZoomOut", "binocularzoomout")
--SetSoundEffect("BirdScatter", "birdsFlySeq1")
--SetSoundEffect("WeaponUnableSelect", "com_weap_inf_weaponchange_null")
--SetSoundEffect("WeaponModeUnableSelect", "com_weap_inf_modechange_null")
SetSoundEffect("SpawnDisplayUnitChange", "shell_select_unit")
SetSoundEffect("SpawnDisplayUnitAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplaySpawnPointChange", "shell_select_change")
SetSoundEffect("SpawnDisplaySpawnPointAccept", "shell_menu_enter")
SetSoundEffect("SpawnDisplayBack", "shell_menu_exit")


--OpeningSateliteShot
AddCameraShot(0.908386, -0.209095, -0.352873, -0.081226, -45.922508, -19.114113, 77.022636);

AddCameraShot(-0.481173, 0.024248, -0.875181, -0.044103, 14.767292, -30.602322, -144.506851);
AddCameraShot(0.999914, -0.012495, -0.004416, -0.000055, 1.143253, -33.602314, -76.884430);
AddCameraShot(0.839161, 0.012048, -0.543698, 0.007806, 19.152437, -49.802273, 24.337317);
AddCameraShot(0.467324, 0.006709, -0.883972, 0.012691, 11.825212, -49.802273, -7.000720);
AddCameraShot(0.861797, 0.001786, -0.507253, 0.001051, -11.986043, -59.702248, 23.263165);
AddCameraShot(0.628546, -0.042609, -0.774831, -0.052525, 20.429928, -48.302277, 9.771714);
AddCameraShot(0.765213, -0.051873, 0.640215, 0.043400, 57.692474, -48.302277, 16.540724);
AddCameraShot(0.264032, -0.015285, -0.962782, -0.055734, -16.681797, -42.902290, 129.553268);
AddCameraShot(-0.382320, 0.022132, -0.922222, -0.053386, 20.670977, -42.902290, 135.513001);
end