mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-05-18 06:29:01 +01:00
588 lines
17 KiB
Plaintext
588 lines
17 KiB
Plaintext
/*var/const/PHASER_EMP = 1
|
|
var/const/PHASER_FLASH = 2
|
|
var/const/PHASER_TOXINS = 4
|
|
var/const/PHASER_BURN = 8
|
|
var/const/PHASER_SING = 16
|
|
var/const/PHASER_CONC = 512
|
|
|
|
var/const/PHASER_ENERGY = 32
|
|
var/const/PHASER_RADIUS = 64
|
|
var/const/PHASER_HOMING = 128
|
|
var/const/PHASER_SNIPER = 256
|
|
|
|
/obj/phaser_projectile
|
|
name = "Energy"
|
|
desc = "Looks dangerous."
|
|
density = 0
|
|
opacity = 0
|
|
anchored = 1
|
|
icon = 'icons/obj/projectiles.dmi'
|
|
var/mob/origin = null
|
|
var/list/impactsounds = new/list()
|
|
var/power = 0
|
|
var/damage = 0
|
|
var/range = 0
|
|
var/stun = 0
|
|
var/upgrades = 0
|
|
var/turf/dest = null
|
|
flags = TABLEPASS
|
|
|
|
/obj/mod_spawner
|
|
icon = 'icons/misc/mark.dmi'
|
|
icon_state = "rup"
|
|
New()
|
|
var/A = pick(typesof(/obj/item/gun_ext)-/obj/item/gun_ext)
|
|
new A (src.loc)
|
|
qdel(src)
|
|
|
|
/obj/item/gun_ext
|
|
var/overlay_name = ""
|
|
var/upgrade = null
|
|
var/location = null
|
|
name = "Phaser extension"
|
|
desc = "For use with phasers"
|
|
item_state = "table_parts"
|
|
inhand_image_icon = 'icons/mob/inhand/hand_tools.dmi'
|
|
icon = 'icons/obj/gun.dmi'
|
|
var/proj_mod = null
|
|
var/proj_sound = null
|
|
var/proj_sound_impact = null
|
|
mats = 8
|
|
|
|
/obj/item/gun_ext/sniper
|
|
name = "Phaser extension (sniper)"
|
|
desc = "Massively increases energy usage and damage. Also disables the radius setting."
|
|
overlay_name = "ext_sniper"
|
|
upgrade = PHASER_SNIPER
|
|
location = "ext"
|
|
icon_state = "add_sniper"
|
|
proj_sound = 'sound/weapons/snipershot.ogg'
|
|
|
|
/obj/item/gun_ext/battery
|
|
name = "Phaser extension (battery)"
|
|
desc = "Increases battery maximum but slightly reduces damage."
|
|
overlay_name = "ext_battery"
|
|
upgrade = PHASER_ENERGY
|
|
location = "ext"
|
|
icon_state = "add_battery"
|
|
|
|
/obj/item/gun_ext/homing
|
|
name = "Phaser extension (homing)"
|
|
desc = "Decreases battery maximum and increases energy usage but gives shots a slight homing ability."
|
|
overlay_name = "ext_focus"
|
|
upgrade = PHASER_HOMING
|
|
location = "ext"
|
|
icon_state = "add_homing"
|
|
|
|
/obj/item/gun_ext/thermal
|
|
name = "Phaser energy-converter mod (thermal)"
|
|
desc = "Decreases energy usage but causes burn damage instead of brute damage."
|
|
overlay_name = "conv_thermal"
|
|
upgrade = PHASER_BURN
|
|
location = "conv"
|
|
icon_state = "add_thermal"
|
|
proj_mod = "proj_thermal"
|
|
|
|
/obj/item/gun_ext/sing
|
|
name = "Phaser energy-converter mod (micro-singularity)"
|
|
desc = "Increases energy usage and decreases damage but pulls nearby targets in."
|
|
overlay_name = "conv_sing"
|
|
upgrade = PHASER_SING
|
|
location = "conv"
|
|
icon_state = "add_sing"
|
|
proj_mod = "proj_sing"
|
|
proj_sound_impact = 'sound/effects/singsuck.ogg'
|
|
|
|
/obj/item/gun_ext/toxin
|
|
name = "Phaser energy-converter mod (toxin)"
|
|
desc = "Increases energy usage but causes toxin damage instead of brute damage and adds additional damage over time."
|
|
overlay_name = "conv_tox"
|
|
upgrade = PHASER_TOXINS
|
|
location = "conv"
|
|
icon_state = "add_tox"
|
|
proj_mod = "proj_tox"
|
|
|
|
/obj/item/gun_ext/flash
|
|
name = "Phaser energy-converter mod (flash)"
|
|
desc = "Greatly reduces damage and stun time but causes each hit to blind the target temporarily."
|
|
overlay_name = "conv_flash"
|
|
upgrade = PHASER_FLASH
|
|
location = "conv"
|
|
icon_state = "add_flash"
|
|
proj_mod = "proj_flash"
|
|
|
|
/obj/item/gun_ext/emp
|
|
name = "Phaser energy-converter mod (EMP)"
|
|
desc = "Increases damage against synthetic lifeforms but slightly increases energy usage."
|
|
overlay_name = "conv_emp"
|
|
upgrade = PHASER_EMP
|
|
location = "conv"
|
|
icon_state = "add_emp"
|
|
proj_mod = "proj_emp"
|
|
|
|
/obj/item/gun_ext/conc
|
|
name = "Phaser energy-converter mod (concussion)"
|
|
desc = "Disables stuns and reduces damage but knocks target back on hit."
|
|
overlay_name = "conv_conc"
|
|
upgrade = PHASER_CONC
|
|
location = "conv"
|
|
icon_state = "add_conc"
|
|
proj_mod = "proj_conc"
|
|
|
|
/obj/item/oldgun
|
|
name = "gun"
|
|
icon = 'icons/obj/gun.dmi'
|
|
inhand_image_icon = 'icons/mob/inhand/hand_weapons.dmi'
|
|
flags = FPRINT | TABLEPASS | CONDUCT | ONBELT | EXTRADELAY
|
|
item_state = "gun"
|
|
m_amt = 2000
|
|
throwforce = 5
|
|
w_class = 2.0
|
|
throw_speed = 4
|
|
throw_range = 10
|
|
|
|
/obj/item/oldgun/energy
|
|
name = "energy"
|
|
var/charges = 10.0
|
|
var/maximum_charges = 10.0
|
|
var/unscrewed = 0
|
|
mats = 15
|
|
|
|
/obj/item/oldgun/energy/phaser/secure
|
|
safeties = 1
|
|
name = "locked phaser"
|
|
|
|
/obj/item/oldgun/energy/phaser
|
|
name = "phaser"
|
|
icon_state = "phaser"
|
|
desc = "Set phasers to 'Robust'"
|
|
w_class = 3.0
|
|
item_state = "gun"
|
|
force = 10.0
|
|
throw_speed = 2
|
|
throw_range = 10
|
|
|
|
var/obj/item/gun_ext/extension_mod = null
|
|
var/obj/item/gun_ext/converter_mod = null
|
|
var/list/shot_overlays = new/list()
|
|
var/list/shot_firesounds = new/list()
|
|
var/list/shot_impactsounds = new/list()
|
|
|
|
var/upgrades = 0
|
|
|
|
charges = 125
|
|
maximum_charges = 125
|
|
|
|
var/charges_per_shot = 0
|
|
var/safeties = 0
|
|
|
|
var/prop_dmg = 0
|
|
var/prop_stun = 0
|
|
var/prop_range = 0
|
|
var/prop_maxrange = 1
|
|
var/prop_power = 10
|
|
var/prop_iconstate = ""
|
|
var/prop_sound = 'sound/weapons/Taser.ogg'
|
|
|
|
var/overloading = 0
|
|
|
|
verb/remove_mods()
|
|
set src in usr
|
|
set name = "Remove Mods"
|
|
if(!src.contents.len)
|
|
boutput(usr, "<span style=\"color:red\">No mods to remove.</span>")
|
|
return
|
|
boutput(usr, "<span style=\"color:blue\">You remove all mods.</span>")
|
|
for(var/obj/O in src)
|
|
O.set_loc(get_turf(src))
|
|
var/obj/item/oldgun/energy/phaser/P = new/obj/item/oldgun/energy/phaser(get_turf(src))
|
|
var/energy_old = min(125,src.charges)
|
|
P.safeties = src.safeties
|
|
P.charges = energy_old
|
|
P.update_icon()
|
|
qdel(src)
|
|
|
|
examine()
|
|
set src in view()
|
|
if(src.contents.len)
|
|
boutput(usr, "<span style=\"color:blue\">Installed mods:</span>")
|
|
boutput(usr, "")
|
|
for(var/obj/O in src)
|
|
boutput(usr, "<span style=\"color:blue\">[O.name]</span>")
|
|
boutput(usr, "<span style=\"color:blue\">[O.desc]</span>")
|
|
boutput(usr, "")
|
|
..()
|
|
|
|
New()
|
|
update_settings()
|
|
..()
|
|
|
|
proc/generate_overlays()
|
|
src.overlays = null
|
|
if(extension_mod)
|
|
src.overlays += icon('icons/obj/gun.dmi',extension_mod.overlay_name)
|
|
if(converter_mod)
|
|
src.overlays += icon('icons/obj/gun.dmi',converter_mod.overlay_name)
|
|
|
|
attackby(obj/O as obj, mob/user as mob)
|
|
if (istype(O,/obj/item/gun_ext))
|
|
var/obj/item/gun_ext/G = O
|
|
switch(G.location)
|
|
if("ext")
|
|
if(extension_mod)
|
|
boutput(user, "<span style=\"color:red\">There is already a gun extension installed.</span>")
|
|
else
|
|
user.drop_item()
|
|
boutput(user, "<span style=\"color:blue\">You install the gun extension.</span>")
|
|
playsound(user, "sound/items/Screwdriver2.ogg", 65, 1)
|
|
G.set_loc(src)
|
|
extension_mod = G
|
|
generate_overlays()
|
|
upgrades |= G.upgrade
|
|
if(G.proj_mod) shot_overlays += G.proj_mod
|
|
if(G.proj_sound) shot_firesounds += G.proj_sound
|
|
if(G.proj_sound_impact) shot_impactsounds += G.proj_sound_impact
|
|
update_settings()
|
|
if("conv")
|
|
if(converter_mod)
|
|
boutput(user, "<span style=\"color:red\">There is already an energy-converter mod installed.</span>")
|
|
else
|
|
user.drop_item()
|
|
boutput(user, "<span style=\"color:blue\">You install the energy-converter mod.</span>")
|
|
playsound(user, "sound/items/Screwdriver2.ogg", 65, 1)
|
|
G.set_loc(src)
|
|
converter_mod = G
|
|
generate_overlays()
|
|
upgrades |= G.upgrade
|
|
if(G.proj_mod) shot_overlays += G.proj_mod
|
|
if(G.proj_sound) shot_firesounds += G.proj_sound
|
|
if(G.proj_sound_impact) shot_impactsounds += G.proj_sound_impact
|
|
update_settings()
|
|
|
|
proc/update_settings()
|
|
var/dmg_mod = 0
|
|
var/stun_mod = 0
|
|
var/cost_mod = 0
|
|
if(overloading) return
|
|
|
|
if(upgrades & PHASER_ENERGY)
|
|
maximum_charges = 175
|
|
else if((upgrades & PHASER_RADIUS) || (upgrades & PHASER_HOMING))
|
|
maximum_charges = 100
|
|
charges = min(100,charges)
|
|
else
|
|
maximum_charges = 125
|
|
|
|
if(upgrades & PHASER_RADIUS)
|
|
prop_maxrange = 2
|
|
else
|
|
prop_maxrange = 1
|
|
|
|
switch(prop_power)
|
|
if(1 to 33)
|
|
prop_iconstate = "phaser_light"
|
|
dmg_mod = -round(prop_power/6)
|
|
stun_mod = min(round(prop_power/4),4)
|
|
prop_sound = 'sound/weapons/laserlight.ogg'
|
|
if(34 to 66)
|
|
prop_iconstate = "phaser_med"
|
|
dmg_mod = 1
|
|
stun_mod = -round(prop_power/6)
|
|
prop_sound = 'sound/weapons/lasermed.ogg'
|
|
if(67 to 100)
|
|
prop_iconstate = "phaser_heavy"
|
|
dmg_mod = max(0,round(prop_power / 10)-2)
|
|
stun_mod = -prop_power
|
|
prop_sound = 'sound/weapons/laserheavy.ogg'
|
|
if(101 to 150)
|
|
prop_iconstate = "phaser_ultra"
|
|
dmg_mod = max(0,round(prop_power / 10)-2) + 10
|
|
stun_mod = -20
|
|
cost_mod = max(0,round(prop_power / 10)-2)
|
|
prop_sound = 'sound/weapons/laserultra.ogg'
|
|
|
|
if(upgrades & PHASER_SNIPER)
|
|
prop_range = 0
|
|
prop_dmg = max(0, round(prop_power / 4)-(prop_range*5) + dmg_mod)
|
|
prop_stun = max(0,round( ((prop_power/4)+stun_mod-prop_range*2)) )
|
|
if(upgrades & PHASER_SNIPER)
|
|
cost_mod += 50
|
|
prop_dmg += 45
|
|
if(upgrades & PHASER_ENERGY)
|
|
prop_dmg = max(0,prop_dmg-8)
|
|
if(upgrades & PHASER_HOMING)
|
|
cost_mod += 5
|
|
if(upgrades & PHASER_BURN)
|
|
cost_mod -= 5
|
|
if(upgrades & PHASER_TOXINS)
|
|
cost_mod += 8
|
|
if(upgrades & PHASER_EMP)
|
|
cost_mod += 5
|
|
if(upgrades & PHASER_SING)
|
|
cost_mod += 8
|
|
prop_dmg = max(0,prop_dmg-((prop_dmg/3)+3))
|
|
if(upgrades & PHASER_FLASH)
|
|
prop_dmg = max(0,round(prop_dmg-(prop_dmg/2)))
|
|
prop_stun = max(0, prop_stun-5)
|
|
if(upgrades & PHASER_CONC)
|
|
prop_stun = 0
|
|
prop_dmg = max(0,round(prop_dmg-(prop_dmg/2)))
|
|
|
|
charges_per_shot = round(max( 10,(prop_power/4)+(prop_range*14) ))+cost_mod
|
|
|
|
if(isrobot(loc))
|
|
charges_per_shot = charges_per_shot*10
|
|
|
|
return
|
|
|
|
proc/update_icon()
|
|
var/ratio = src.charges / maximum_charges
|
|
ratio = round(ratio, 0.25) * 100
|
|
src.icon_state = text("phaser[]", ratio)
|
|
|
|
afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
|
|
if(overloading) return
|
|
if (flag)
|
|
return
|
|
|
|
src.add_fingerprint(user)
|
|
|
|
if(isrobot(user))
|
|
var/mob/living/silicon/robot/R = user
|
|
if(R.cell.charge < charges_per_shot)
|
|
boutput(user, "<span style=\"color:red\">*Warning* Not enough power.</span>");
|
|
return
|
|
else
|
|
if(src.charges < charges_per_shot)
|
|
boutput(user, "<span style=\"color:red\">*click* *click*</span>");
|
|
return
|
|
|
|
if(shot_firesounds.len)
|
|
for(var/S in shot_firesounds)
|
|
playsound(user, S, 60, 1)
|
|
else
|
|
playsound(user, prop_sound, 60, 1)
|
|
|
|
if(isrobot(user))
|
|
var/mob/living/silicon/robot/R = user
|
|
R.cell.charge -= charges_per_shot
|
|
else
|
|
src.charges -= charges_per_shot
|
|
|
|
update_icon()
|
|
|
|
spawn(0)
|
|
|
|
var/obj/phaser_projectile/O = new/obj/phaser_projectile(get_turf(src))
|
|
O.damage = prop_dmg
|
|
O.range = prop_range
|
|
O.stun = prop_stun
|
|
O.power = prop_power
|
|
O.upgrades = upgrades
|
|
O.icon_state = prop_iconstate
|
|
O.dest = get_turf(target)
|
|
O.origin = user
|
|
O.impactsounds = shot_impactsounds.Copy()
|
|
spawn(15) qdel(O)
|
|
|
|
if(shot_overlays.len)
|
|
for(var/S in shot_overlays)
|
|
O.overlays += icon("icons/obj/gun.dmi",S)
|
|
|
|
while(O.loc != O.dest)
|
|
var/impact = 0
|
|
var/turf/next = get_step_towards(O,O.dest)
|
|
if(next.density) impact = 1
|
|
else O.set_loc(next)
|
|
|
|
if(O.upgrades & PHASER_HOMING)
|
|
for(var/mob/living/M in view(2,O.loc))
|
|
if(M == O.origin) continue
|
|
step_towards(O,M)
|
|
break
|
|
|
|
for(var/mob/living/M in O.loc)
|
|
if(M == O.origin || M.lying) continue
|
|
impact = 1
|
|
break
|
|
|
|
for(var/obj/machinery/bot/B in O.loc)
|
|
impact = 1
|
|
break
|
|
|
|
for(var/obj/critter/C in O.loc)
|
|
impact = 1
|
|
break
|
|
|
|
if(O.loc == O.dest) impact = 1
|
|
|
|
if(impact)
|
|
if(O.impactsounds.len)
|
|
for(var/S in O.impactsounds)
|
|
playsound(user, S, 65, 1)
|
|
|
|
if(O.upgrades & PHASER_SING)
|
|
var/turf/myloc = O.loc
|
|
for(var/mob/living/M in view(2,O.loc))
|
|
if(M == O.origin) continue
|
|
spawn(0)
|
|
step_towards(M,myloc)
|
|
sleep(5)
|
|
step_towards(M,myloc)
|
|
|
|
var/obj/projectile/PBul = unpool(/obj/projectile)
|
|
var/obj/projectile/PLas = unpool(/obj/projectile)
|
|
PBul.proj_data = new /datum/projectile/bullet/revolver_357( )
|
|
PLas.proj_data = new /datum/projectile/laser( )
|
|
for(var/obj/machinery/bot/B in view(O.range,O.loc))
|
|
if(O.upgrades & PHASER_EMP)
|
|
B.bullet_act(PBul)
|
|
B.bullet_act(PLas)
|
|
else
|
|
B.bullet_act(PLas)
|
|
if(O.upgrades & PHASER_CONC)
|
|
var/dir_old = O.dir
|
|
spawn(0)
|
|
step(B,dir_old)
|
|
sleep(3)
|
|
step(B,dir_old)
|
|
|
|
for(var/obj/critter/C in view(O.range,O.loc))
|
|
C.bullet_act(PLas)
|
|
if(O.upgrades & PHASER_CONC)
|
|
var/dir_old = O.dir
|
|
spawn(0)
|
|
step(C,dir_old)
|
|
sleep(3)
|
|
step(C,dir_old)
|
|
|
|
qdel(PBul)
|
|
qdel(PLas)
|
|
|
|
for(var/mob/living/M in view(O.range,O.loc))
|
|
if(M == O.origin) continue
|
|
|
|
user.lastattacked = M
|
|
M.lastattacker = user
|
|
M.lastattackertime = world.time
|
|
|
|
if(!isrobot(M) || (isrobot(M)&&!(O.upgrades & PHASER_EMP)))
|
|
if(O.upgrades & PHASER_BURN)
|
|
M.TakeDamage("chest", 0, O.damage)
|
|
else if(O.upgrades & PHASER_TOXINS)
|
|
M.take_toxin_damage(O.damage)
|
|
if(M.reagents)
|
|
M.reagents.add_reagent("toxin",7)
|
|
else
|
|
random_brute_damage(M, max(0,O.damage))
|
|
M.weakened += max(0,O.stun)
|
|
else if(isrobot(M) && (O.upgrades & PHASER_EMP))
|
|
random_brute_damage(M, max(0,round(O.damage*1.5)))
|
|
M.weakened += max(0,O.stun)
|
|
if(O.upgrades & PHASER_FLASH)
|
|
M.flash(60)
|
|
|
|
if(O.upgrades & PHASER_CONC)
|
|
var/dir_old = O.dir
|
|
spawn(0)
|
|
M.weakened += 2
|
|
step(M,dir_old)
|
|
sleep(3)
|
|
step(M,dir_old)
|
|
|
|
switch(O.power)
|
|
if(1 to 33)
|
|
for(var/turf/simulated/floor/T in view(O.range,O.loc))
|
|
var/obj/OV = unpool(/obj/effects/sparks)
|
|
OV.set_loc(T)
|
|
OV.dir = pick(alldirs)
|
|
spawn(20) if (OV) pool(OV)
|
|
if(34 to 66)
|
|
playsound(O.loc, "sound/effects/exlow.ogg", 65, 1)
|
|
for(var/turf/simulated/floor/T in view(O.range,O.loc))
|
|
var/obj/OV = new/obj/overlay(T)
|
|
OV.icon = 'icons/effects/effects.dmi'
|
|
OV.icon_state = "empdisable"
|
|
OV.dir = pick(alldirs)
|
|
spawn(3) qdel(OV)
|
|
if(prob(O.power/2) || !O.range)
|
|
T.burn_tile()
|
|
if(67 to 100)
|
|
playsound(O.loc, "sound/weapons/flashbang.ogg", 65, 1)
|
|
for(var/turf/simulated/floor/T in view(O.range,O.loc))
|
|
var/obj/OV = new/obj/effects/expl_particles(T)
|
|
OV.dir=get_dir(O.loc,OV)
|
|
if(prob(O.power/2) || !O.range)
|
|
T.break_tile()
|
|
if(101 to 150)
|
|
playsound(O.loc, "sound/weapons/grenade.ogg", 65, 1)
|
|
for(var/turf/simulated/floor/T in view(O.range,O.loc))
|
|
var/obj/OV = new/obj/effects/expl_particles(T)
|
|
OV.dir=get_dir(O.loc,OV)
|
|
if(prob(85) || !O.range)
|
|
T.break_tile_to_plating()
|
|
|
|
qdel(O)
|
|
return
|
|
sleep(1)
|
|
return
|
|
|
|
Topic(href, href_list)
|
|
if(overloading) return
|
|
if(usr.stat || usr.restrained()) return
|
|
if(!in_range(src, usr)) return
|
|
usr.machine = src
|
|
if (href_list["power"])
|
|
var/change = href_list["power"]
|
|
prop_power += text2num(change)
|
|
if(prop_power < 0) prop_power = 0
|
|
if(prop_power > 50 && safeties) prop_power = 50
|
|
if(prop_power > 100) prop_power = 100
|
|
|
|
update_settings()
|
|
src.attack_self(usr)
|
|
return
|
|
else if (href_list["focus"])
|
|
var/change = href_list["focus"]
|
|
prop_range += text2num(change)
|
|
if(prop_range < 0) prop_range = 0
|
|
if(prop_range > prop_maxrange) prop_range = prop_maxrange
|
|
update_settings()
|
|
src.attack_self(usr)
|
|
return
|
|
else if (href_list["overload"])
|
|
boutput(usr, "<span style=\"color:red\">Your phaser overloads.</span>");
|
|
overloading = 1
|
|
playsound(usr, "sound/weapons/phaseroverload.ogg", 65, 1)
|
|
spawn(60)
|
|
var/turf/curr = get_turf(src)
|
|
curr.hotspot_expose(700,125)
|
|
explosion(src, curr, 0, 0, 2, 4)
|
|
qdel(src)
|
|
src.attack_self(usr)
|
|
src.add_fingerprint(usr)
|
|
return
|
|
|
|
attack_self(mob/user as mob)
|
|
if(overloading) return
|
|
usr.machine = src
|
|
var/dat = "Phaser settings:<BR><BR>"
|
|
dat += "Power:<BR>"
|
|
dat += "<A href='?src=\ref[src];power=-5'>(--)</A><A href='?src=\ref[src];power=-1'>(-)</A> [prop_power] <A href='?src=\ref[src];power=1'>(+)</A><A href='?src=\ref[src];power=5'>(++)</A><BR><BR>"
|
|
dat += "Radius:<BR>"
|
|
//dat += "<A href='?src=\ref[src];focus=-1'>(-)</A> [prop_range] <A href='?src=\ref[src];focus=1'>(+)</A><BR><BR>"
|
|
dat += "Energy-cost per shot:[charges_per_shot]<BR>"
|
|
|
|
if(isrobot(user))
|
|
var/mob/living/silicon/robot/R = user
|
|
dat += "Energy:[R.cell.charge]<BR><BR>"
|
|
else
|
|
dat += "Energy:[charges]/[maximum_charges]<BR><BR>"
|
|
|
|
if(safeties) dat += "Safeties active. Phaser locked to non-lethal power levels."
|
|
//dat += "Damage:[prop_dmg]<BR>"
|
|
//dat += "Stun:[prop_stun]<BR>"
|
|
user << browse(dat, "window=phaser;can_minimize=0;can_resize=0;size=180x340")
|
|
onclose(user, "window=phaser")
|
|
return
|
|
*/ |