Resolves merge conflicts

Conflicts:
	code/game/machinery/computer/communications.dm
This commit is contained in:
Krausus
2015-08-18 04:14:14 -04:00
136 changed files with 942 additions and 766 deletions
+4 -3
View File
@@ -311,13 +311,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(jobban_isbanned(M, "AntagHUD"))
src << "\red <B>You have been banned from using this feature</B>"
return
if(config.antag_hud_restricted && !M.has_enabled_antagHUD &&!client.holder)
if(config.antag_hud_restricted && !M.has_enabled_antagHUD && !check_rights(R_MOD,0))
var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No")
if(response == "No") return
M.can_reenter_corpse = 0
if(M in respawnable_list)
respawnable_list -= M
if(!M.has_enabled_antagHUD && !client.holder)
if(!M.has_enabled_antagHUD && !check_rights(R_MOD,0))
M.has_enabled_antagHUD = 1
if(M.antagHUD)
M.antagHUD = 0
@@ -598,4 +598,5 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
//add images for the 60inv things ghosts can normally see when darkness is enabled so they can see them now
client.images |= ghost_darkness_images
if (ghostimage)
client.images -= ghostimage //remove ourself
client.images -= ghostimage //remove ourself
+3 -3
View File
@@ -452,9 +452,9 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
var/start_T_descriptor = "<font color='#6b5d00'>tile at [start_T.x], [start_T.y], [start_T.z] in area [get_area(start_T)]</font>"
var/end_T_descriptor = "<font color='#6b4400'>tile at [end_T.x], [end_T.y], [end_T.z] in area [get_area(end_T)]</font>"
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been thrown by [usr.name] ([usr.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>")
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor]</font>")
msg_admin_attack("[usr.name] ([usr.ckey])[isAntag(usr) ? "(ANTAG)" : ""] has thrown [M.name] ([M.ckey]) from [start_T_descriptor] with the target [end_T_descriptor] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[usr.x];Y=[usr.y];Z=[usr.z]'>JMP</a>)")
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been thrown by [key_name(usr)] from [start_T_descriptor] with the target [end_T_descriptor]</font>")
usr.attack_log += text("\[[time_stamp()]\] <font color='red'>Has thrown [key_name(M)] from [start_T_descriptor] with the target [end_T_descriptor]</font>")
msg_admin_attack("[key_name_admin(usr)] has thrown [key_name_admin(M)] from [start_T_descriptor] with the target [end_T_descriptor]")
if(!iscarbon(usr))
M.LAssailant = null
+16 -12
View File
@@ -431,12 +431,10 @@
var/armor_block = run_armor_check(affecting, "melee")
apply_damage(damage, BRUTE, affecting, armor_block)
/mob/living/carbon/human/proc/is_loyalty_implanted(mob/living/carbon/human/M)
if(!istype(M))
return 0
for(var/L in M.contents)
/mob/living/carbon/human/proc/is_loyalty_implanted()
for(var/L in contents)
if(istype(L, /obj/item/weapon/implant/loyalty))
for(var/obj/item/organ/external/O in M.organs)
for(var/obj/item/organ/external/O in organs)
if(L in O.implants)
return 1
return 0
@@ -696,6 +694,12 @@
// if looting pockets with gloves, do it quietly
if(href_list["pockets"])
if(isanimal(usr))
return //animals cannot strip people
if(frozen)
usr << "\red Do not attempt to strip frozen people."
return
var/pocket_side = href_list["pockets"]
var/pocket_id = (pocket_side == "right" ? slot_r_store : slot_l_store)
var/obj/item/pocket_item = (pocket_id == slot_r_store ? src.r_store : src.l_store)
@@ -722,16 +726,19 @@
// Update strip window
if(usr.machine == src && in_range(src, usr))
show_inv(usr)
else if(!pickpocket)
// Display a warning if the user mocks up
src << "<span class='warning'>You feel your [pocket_side] pocket being fumbled with!</span>"
// if looting id with gloves, do it quietly - this allows pickpocket gloves to take/place id stealthily - Bone White
if(href_list["item"])
if(isanimal(usr))
return //animals cannot strip people
if(frozen)
usr << "\red Do not attempt to strip frozen people."
return
var/itemTarget = href_list["item"]
if(itemTarget == "id")
if(pickpocket)
@@ -764,9 +771,6 @@
// Display a warning if the user mocks up
src << "<span class='warning'>You feel your ID slot being fumbled with!</span>"
if (href_list["refresh"])
if((machine)&&(in_range(src, usr)))
show_inv(machine)
@@ -239,9 +239,9 @@ emp_act
--src.meatleft
user << "\red You hack off a chunk of meat from [src.name]"
if(!src.meatleft)
src.attack_log += "\[[time_stamp()]\] Was chopped up into meat by <b>[user]/[user.ckey]</b>"
user.attack_log += "\[[time_stamp()]\] Chopped up <b>[src]/[src.ckey]</b> into meat</b>"
msg_admin_attack("[user.name] ([user.ckey])[isAntag(user) ? "(ANTAG)" : ""] chopped up [src] ([src.ckey]) into meat (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
src.attack_log += "\[[time_stamp()]\] Was chopped up into meat by <b>[key_name(user)]</b>"
user.attack_log += "\[[time_stamp()]\] Chopped up <b>[key_name(src)]</b> into meat</b>"
msg_admin_attack("[key_name_admin(user)] chopped up [key_name_admin(src)] into meat")
if(!iscarbon(user))
LAssailant = null
else
@@ -394,12 +394,11 @@ emp_act
if(ismob(O.thrower))
var/mob/M = O.thrower
var/client/assailant = M.client
if(assailant)
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a [O], thrown by [M.name] ([assailant.ckey])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [src.name] ([src.ckey]) with a thrown [O]</font>")
if(M)
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a [O], thrown by [key_name(M)]</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [key_name(src)] with a thrown [O]</font>")
if(!istype(src,/mob/living/simple_animal/mouse))
msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey])[isAntag(M) ? "(ANTAG)" : ""] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
msg_admin_attack("[key_name_admin(src)] was hit by a [O], thrown by [key_name_admin(M)]")
//thrown weapon embedded object code.
if(dtype == BRUTE && istype(O,/obj/item))
@@ -497,8 +496,11 @@ emp_act
M.occupant_message("<span class='danger'>You hit [src].</span>")
visible_message("<span class='danger'>[src] has been hit by [M.name].</span>", \
"<span class='userdanger'>[src] has been hit by [M.name].</span>")
add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked by \the [M] controlled by [key_name(M.occupant)] (INTENT: [uppertext(M.occupant.a_intent)])</font>")
M.occupant.attack_log += text("\[[time_stamp()]\] <font color='red'>Attacked [src] with \the [M] (INTENT: [uppertext(M.occupant.a_intent)])</font>")
msg_admin_attack("[key_name_admin(M.occupant)] attacked [key_name_admin(src)] with \the [M] (INTENT: [uppertext(M.occupant.a_intent)])")
else
..()
+1 -1
View File
@@ -190,7 +190,7 @@
//These only pertain to common. Languages are handled by mob/say_understands()
if (!speaking)
if (istype(other, /mob/living/carbon/primitive/diona))
if (istype(other, /mob/living/simple_animal/diona))
if(other.languages.len >= 2) //They've sucked down some blood and can speak common now.
return 1
if (istype(other, /mob/living/silicon))
@@ -395,7 +395,7 @@
)
/datum/species/diona/can_understand(var/mob/other)
var/mob/living/carbon/primitive/diona/D = other
var/mob/living/simple_animal/diona/D = other
if(istype(D))
return 1
return 0
@@ -408,14 +408,14 @@
/* //overpowered and dumb as hell; they get cloning back, though.
/datum/species/diona/handle_death(var/mob/living/carbon/human/H)
var/mob/living/carbon/primitive/diona/S = new(get_turf(H))
var/mob/living/simple_animal/diona/S = new(get_turf(H))
if(H.mind)
H.mind.transfer_to(S)
else
S.key = H.key
for(var/mob/living/carbon/primitive/diona/D in H.contents)
for(var/mob/living/simple_animal/diona/D in H.contents)
if(D.client)
D.loc = H.loc
else
@@ -1,182 +0,0 @@
/mob/living/carbon/primitive/emote(var/act,var/m_type=1,var/message = null)
var/param = null
if (findtext(act, "-", 1, null))
var/t1 = findtext(act, "-", 1, null)
param = copytext(act, t1 + 1, length(act) + 1)
act = copytext(act, 1, t1)
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act,1,length(act))
var/muzzled = is_muzzled()
//Emote Cooldown System (it's so simple!)
// proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
var/on_CD = 0
switch(act)
//Cooldown-inducing emotes
if("chirp")
if(istype(src,/mob/living/carbon/primitive/diona)) //Only Diona Nymphs can chirp
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
else //Everyone else fails, skip the emote attempt
return
if("flip")
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
//Everything else, including typos of the above emotes
else
on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown
if(on_CD == 1) // Check if we need to suppress the emote attempt.
return // Suppress emote, you're still cooling off.
//--FalseIncarnate
switch(act)
if ("me")
if(silent)
return
if (src.client)
if (client.prefs.muted & MUTE_IC)
src << "\red You cannot send IC messages (muted)."
return
if (src.client.handle_spam_prevention(message,MUTE_IC))
return
if (stat)
return
if(!(message))
return
return custom_emote(m_type, message)
if ("custom")
return custom_emote(m_type, message)
if ("chirp")
message = "<B>The [src.name]</B> chirps!"
playsound(src.loc, 'sound/misc/nymphchirp.ogg', 50, 0)
m_type = 2
if("sign")
if (!src.restrained())
message = text("<B>The [src.name]</B> signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null))
m_type = 1
if("scratch")
if (!src.restrained())
message = "<B>The [src.name]</B> scratches."
m_type = 1
if("whimper")
if (!muzzled)
message = "<B>The [src.name]</B> whimpers."
m_type = 2
if("roar")
if (!muzzled)
message = "<B>The [src.name]</B> roars."
m_type = 2
if("tail")
message = "<B>The [src.name]</B> waves his tail."
m_type = 1
if("gasp")
message = "<B>The [src.name]</B> gasps."
m_type = 2
if("shiver")
message = "<B>The [src.name]</B> shivers."
m_type = 2
if("drool")
message = "<B>The [src.name]</B> drools."
m_type = 1
if("paw")
if (!src.restrained())
message = "<B>The [src.name]</B> flails his paw."
m_type = 1
if("scretch")
if (!muzzled)
message = "<B>The [src.name]</B> scretches."
m_type = 2
if("choke")
message = "<B>The [src.name]</B> chokes."
m_type = 2
if("moan")
message = "<B>The [src.name]</B> moans!"
m_type = 2
if("nod")
message = "<B>The [src.name]</B> nods his head."
m_type = 1
if("sit")
message = "<B>The [src.name]</B> sits down."
m_type = 1
if("sway")
message = "<B>The [src.name]</B> sways around dizzily."
m_type = 1
if("sulk")
message = "<B>The [src.name]</B> sulks down sadly."
m_type = 1
if("twitch")
message = "<B>The [src.name]</B> twitches violently."
m_type = 1
if("dance")
if (!src.restrained())
message = "<B>The [src.name]</B> dances around happily."
m_type = 1
if("roll")
if (!src.restrained())
message = "<B>The [src.name]</B> rolls."
m_type = 1
if("shake")
message = "<B>The [src.name]</B> shakes his head."
m_type = 1
if("gnarl")
if (!muzzled)
message = "<B>The [src.name]</B> gnarls and shows his teeth.."
m_type = 2
if("jump")
message = "<B>The [src.name]</B> jumps!"
m_type = 1
if("collapse")
Paralyse(2)
message = "<B>[src.name]</B> collapses!"
m_type = 2
if("deathgasp")
message = "<B>The [src.name]</B> lets out a faint chimper as it collapses and stops moving..."
m_type = 1
if ("flip")
m_type = 1
if (!src.restrained())
var/M = null
if (param)
for (var/mob/A in view(1, null))
if (param == A.name)
M = A
break
if (M == src)
M = null
if (M)
if(src.lying || src.weakened)
message = "<B>[src]</B> flops and flails around on the floor."
else
message = "<B>[src]</B> flips in [M]'s general direction."
src.SpinAnimation(5,1)
else
if(src.lying || src.weakened)
message = "<B>[src]</B> flops and flails around on the floor."
else
message = "<B>[src]</B> does a flip!"
src.SpinAnimation(5,1)
if("help")
var/text = "choke, "
if(istype(src,/mob/living/carbon/primitive/diona))
text += "chirp, "
text += "flip, collapse, dance, deathgasp, drool, gasp, shiver, gnarl, jump, paw, moan, nod, roar, roll, scratch,\nscretch, shake, sign-#, sit, sulk, sway, tail, twitch, whimper"
src << text
else
src << text("Invalid Emote: []", act)
if ((message && src.stat == 0))
if(src.client)
log_emote("[name]/[key] : [message]")
if (m_type & 1)
for(var/mob/O in viewers(src, null))
O.show_message(message, m_type)
//Foreach goto(703)
else
for(var/mob/O in hearers(src, null))
O.show_message(message, m_type)
//Foreach goto(746)
return
+9 -7
View File
@@ -115,12 +115,11 @@
if(ismob(O.thrower))
var/mob/M = O.thrower
var/client/assailant = M.client
if(assailant)
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a [O], thrown by [M.name] ([assailant.ckey])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [src.name] ([src.ckey]) with a thrown [O]</font>")
if(M)
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been hit with a [O], thrown by [key_name(M)]</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Hit [key_name(src)] with a thrown [O]</font>")
if(!istype(src,/mob/living/simple_animal/mouse))
msg_admin_attack("[src.name] ([src.ckey]) was hit by a [O], thrown by [M.name] ([assailant.ckey])[isAntag(M) ? "(ANTAG)" : ""] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
msg_admin_attack("[key_name_admin(src)] was hit by a [O], thrown by [key_name_admin(M)]")
// Begin BS12 momentum-transfer code.
if(O.throw_source && speed >= 15)
@@ -166,13 +165,16 @@
M.occupant_message("<span class='danger'>You hit [src].</span>")
visible_message("<span class='danger'>[src] has been hit by [M.name].</span>", \
"<span class='userdanger'>[src] has been hit by [M.name].</span>")
add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])")
attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked by \the [M] controlled by [key_name(M.occupant)] (INTENT: [uppertext(M.occupant.a_intent)])</font>")
M.occupant.attack_log += text("\[[time_stamp()]\] <font color='red'>Attacked [src] with \the [M] (INTENT: [uppertext(M.occupant.a_intent)])</font>")
msg_admin_attack("[key_name_admin(M.occupant)] attacked [key_name_admin(src)] with \the [M] (INTENT: [uppertext(M.occupant.a_intent)])")
else
step_away(src,M)
add_logs(M.occupant, src, "pushed", object=M, admin=0)
M.occupant_message("<span class='warning'>You push [src] out of the way.</span>")
visible_message("<span class='warning'>[M] pushes [src] out of the way.</span>")
return
//Mobs on Fire
+1 -1
View File
@@ -338,7 +338,7 @@ var/list/ai_verbs_default = list(
if(check_unable(AI_CHECK_WIRELESS))
return
var/input = stripped_input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null
var/input = input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null
if(!input || stat)
return
@@ -369,6 +369,8 @@
/mob/living/silicon/pai/proc/hackloop()
var/turf/T = get_turf_or_move(src.loc)
for(var/mob/living/silicon/ai/AI in player_list)
if(!T || !(T.z in config.contact_levels))
break
if(T.loc)
AI << "<font color = red><b>Network Alert: Brute-force encryption crack in progress in [T.loc].</b></font>"
else
@@ -196,8 +196,8 @@
src << "\red <B>You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.</B>"
host << "\red <B>You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.</B>"
var/borer_key = src.key
host.attack_log += text("\[[time_stamp()]\] <font color='blue'>[src.name] ([src.ckey]) has assumed control of [host.name] ([host.ckey])</font>")
msg_admin_attack("[src.name] ([src.ckey]) has assumed control of [host.name] ([host.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[host.x];Y=[host.y];Z=[host.z]'>JMP</a>)")
host.attack_log += text("\[[time_stamp()]\] <font color='blue'>[key_name(src)] has assumed control of [key_name(host)]</font>")
msg_admin_attack("[key_name_admin(src)] has assumed control of [key_name_admin(host)]")
// host -> brain
var/h2b_id = host.computer_id
var/h2b_ip= host.lastKnownIP
@@ -5,6 +5,7 @@
icon_state = "cat2"
icon_living = "cat2"
icon_dead = "cat2_dead"
icon_resting = "cat_rest"
gender = MALE
speak = list("Meow!", "Esp!", "Purr!", "HSSSSS")
speak_emote = list("purrs", "meows")
@@ -76,6 +77,7 @@
icon_state = "kitten"
icon_living = "kitten"
icon_dead = "kitten_dead"
icon_resting = null
gender = NEUTER
density = 0
pass_flags = PASSMOB
@@ -86,6 +88,7 @@
icon_state = "Syndicat"
icon_living = "Syndicat"
icon_dead = "Syndicat_dead"
icon_resting = "Syndicat_rest"
gender = FEMALE
flags = IS_SYNTHETIC|NO_BREATHE
faction = list("syndicate")
@@ -3,57 +3,73 @@
*/
//Mob defines.
/mob/living/carbon/primitive/diona
/mob/living/simple_animal/diona
name = "diona nymph"
voice_name = "diona nymph"
speak_emote = list("chirrups")
icon = 'icons/mob/monkey.dmi'
icon_state = "nymph1"
icon_state = "nymph"
icon_living = "nymph"
icon_dead = "nymph_dead"
icon_resting = "nymph_sleep"
pass_flags = PASSTABLE
small = 1
ventcrawler = 2
maxHealth = 50
health = 50
voice_name = "diona nymph"
speak_emote = list("chirrups")
emote_hear = list("chirrups")
emote_see = list("chirrups")
response_help = "pets"
response_disarm = "pushes"
response_harm = "kicks"
melee_damage_lower = 5
melee_damage_upper = 8
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
speed = 0
stop_automated_movement = 0
turns_per_move = 4
status_flags = 0
var/list/donors = list()
var/ready_evolve = 0
ventcrawler = 1
var/environment_smash = 0 // This is a sloppy way to solve attack_animal runtimes. Stupid nymphs...
holder_type = /obj/item/weapon/holder/diona
/mob/living/carbon/primitive/diona/New()
/mob/living/simple_animal/diona/New()
..()
gender = NEUTER
//greaterform = "Diona"
if(name == initial(name)) //To stop Pun-Pun becoming generic.
name = "[name] ([rand(1, 1000)])"
real_name = name
add_language("Rootspeak")
src.verbs += /mob/living/simple_animal/diona/proc/merge
/mob/living/carbon/primitive/diona/attack_hand(mob/living/carbon/human/M as mob)
/mob/living/simple_animal/diona/attack_hand(mob/living/carbon/human/M as mob)
//Let people pick the little buggers up.
if(M.a_intent == "help")
if(M.species && M.species.name == "Diona")
M << "You feel your being twine with that of [src] as it merges with your biomass."
src << "You feel your being twine with that of [M] as you merge with its biomass."
src.verbs += /mob/living/carbon/primitive/diona/proc/split
src.verbs -= /mob/living/carbon/primitive/diona/proc/merge
src.verbs += /mob/living/simple_animal/diona/proc/split
src.verbs -= /mob/living/simple_animal/diona/proc/merge
src.forceMove(M)
else
get_scooped(M)
..()
/mob/living/carbon/primitive/diona/New()
..()
gender = NEUTER
//greaterform = "Diona"
add_language("Rootspeak")
src.verbs += /mob/living/carbon/primitive/diona/proc/merge
/mob/living/carbon/primitive/diona/proc/merge()
/mob/living/simple_animal/diona/proc/merge()
set category = "Diona"
set name = "Merge with gestalt"
set desc = "Merge with another diona."
if(istype(src.loc,/mob/living/carbon))
src.verbs -= /mob/living/carbon/primitive/diona/proc/merge
src.verbs -= /mob/living/simple_animal/diona/proc/merge
return
var/list/choices = list()
@@ -76,19 +92,18 @@
src << "You feel your being twine with that of [M] as you merge with its biomass."
src.loc = M
src.verbs += /mob/living/carbon/primitive/diona/proc/split
src.verbs -= /mob/living/carbon/primitive/diona/proc/merge
src.verbs += /mob/living/simple_animal/diona/proc/split
src.verbs -= /mob/living/simple_animal/diona/proc/merge
else
return
/mob/living/carbon/primitive/diona/proc/split()
/mob/living/simple_animal/diona/proc/split()
set category = "Diona"
set name = "Split from gestalt"
set desc = "Split away from your gestalt as a lone nymph."
if(!(istype(src.loc,/mob/living/carbon)))
src.verbs -= /mob/living/carbon/primitive/diona/proc/split
src.verbs -= /mob/living/simple_animal/diona/proc/split
return
src.loc << "You feel a pang of loss as [src] splits away from your biomass."
@@ -97,8 +112,8 @@
var/mob/living/M = src.loc
src.loc = get_turf(src)
src.verbs -= /mob/living/carbon/primitive/diona/proc/split
src.verbs += /mob/living/carbon/primitive/diona/proc/merge
src.verbs -= /mob/living/simple_animal/diona/proc/split
src.verbs += /mob/living/simple_animal/diona/proc/merge
if(istype(M))
for(var/atom/A in M.contents)
@@ -106,8 +121,7 @@
return
M.status_flags &= ~PASSEMOTES
/mob/living/carbon/primitive/diona/verb/fertilize_plant()
/mob/living/simple_animal/diona/verb/fertilize_plant()
set category = "Diona"
set name = "Fertilize plant"
set desc = "Turn your food into nutrients for plants."
@@ -123,10 +137,9 @@
src.nutrition -= ((10-target.nutrilevel)*5)
target.nutrilevel = 10
src.visible_message("\red [src] secretes a trickle of green liquid from its tail, refilling [target]'s nutrient tray.","\red You secrete a trickle of green liquid from your tail, refilling [target]'s nutrient tray.")
/mob/living/carbon/primitive/diona/verb/eat_weeds()
src.visible_message("<span class='danger'>[src] secretes a trickle of green liquid from its tail, refilling [target]'s nutrient tray.","\red You secrete a trickle of green liquid from your tail, refilling [target]'s nutrient tray.</span>")
/mob/living/simple_animal/diona/verb/eat_weeds()
set category = "Diona"
set name = "Eat Weeds"
set desc = "Clean the weeds out of soil or a hydroponics tray."
@@ -142,24 +155,23 @@
src.nutrition += target.weedlevel * 15
target.weedlevel = 0
src.visible_message("\red [src] begins rooting through [target], ripping out weeds and eating them noisily.","\red You begin rooting through [target], ripping out weeds and eating them noisily.")
/mob/living/carbon/primitive/diona/verb/evolve()
src.visible_message("<span class='danger'>[src] begins rooting through [target], ripping out weeds and eating them noisily.</span>","<span class='danger'>You begin rooting through [target], ripping out weeds and eating them noisily.</span>")
/mob/living/simple_animal/diona/verb/evolve()
set category = "Diona"
set name = "Evolve"
set desc = "Grow to a more complex form."
if(donors.len < 5)
src << "You need more blood in order to ascend to a new state of consciousness..."
src << "<span class='warning'>You need more blood in order to ascend to a new state of consciousness...</span>"
return
if(nutrition < 500)
src << "You need to binge on weeds in order to have the energy to grow..."
src << "<span class='warning'>You need to binge on weeds in order to have the energy to grow...</span>"
return
src.split()
src.visible_message("\red [src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","\red You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.")
src.visible_message("<span class='danger'>[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.</span>","<span class='danger'>You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.</span>")
var/mob/living/carbon/human/diona/adult = new(get_turf(src.loc))
adult.set_species("Diona")
@@ -184,7 +196,7 @@
qdel(src)
/mob/living/carbon/primitive/diona/verb/steal_blood()
/mob/living/simple_animal/diona/verb/steal_blood()
set category = "Diona"
set name = "Steal Blood"
set desc = "Take a blood sample from a suitable donor."
@@ -198,14 +210,14 @@
if(!M || !src) return
if(M.species.flags & NO_BLOOD)
src << "\red That donor has no blood to take."
src << "<span class='warning'>That donor has no blood to take.</span>"
return
if(donors.Find(M.real_name))
src << "\red That donor offers you nothing new."
src << "<span class='warning'>That donor offers you nothing new.</span>"
return
src.visible_message("\red [src] flicks out a feeler and neatly steals a sample of [M]'s blood.","\red You flick out a feeler and neatly steal a sample of [M]'s blood.")
src.visible_message("<span class='danger'>[src] flicks out a feeler and neatly steals a sample of [M]'s blood.</span>","<span class='danger'>You flick out a feeler and neatly steal a sample of [M]'s blood.</span>")
donors += M.real_name
for(var/datum/language/L in M.languages)
if(!(L.flags & HIVEMIND))
@@ -214,36 +226,37 @@
spawn(25)
update_progression()
/mob/living/carbon/primitive/diona/proc/update_progression()
/mob/living/simple_animal/diona/proc/update_progression()
if(!donors.len)
return
if(donors.len == 5)
ready_evolve = 1
src << "\green You feel ready to move on to your next stage of growth."
src << "<span class='noticealien'>You feel ready to move on to your next stage of growth.</span>"
else if(donors.len == 3)
universal_understand = 1
src << "\green You feel your awareness expand, and realize you know how to understand the creatures around you."
src << "<span class='noticealien'>You feel your awareness expand, and realize you know how to understand the creatures around you.</span>"
else
src << "\green The blood seeps into your small form, and you draw out the echoes of memories and personality from it, working them into your budding mind."
src << "<span class='noticealien'>The blood seeps into your small form, and you draw out the echoes of memories and personality from it, working them into your budding mind.</span>"
/mob/living/carbon/primitive/diona/put_in_hands(obj/item/W)
/mob/living/simple_animal/diona/put_in_hands(obj/item/W)
W.loc = get_turf(src)
W.layer = initial(W.layer)
W.dropped()
/mob/living/carbon/primitive/diona/put_in_active_hand(obj/item/W)
src << "\red You don't have any hands!"
/mob/living/simple_animal/diona/put_in_active_hand(obj/item/W)
src << "<span class='warning'>You don't have any hands!</span>"
return
/mob/living/carbon/primitive/diona/say(var/message)
/mob/living/simple_animal/diona/say(var/message)
if(client)
if(client.prefs.muted & MUTE_IC)
src << "\red You cannot speak in IC (Muted)."
return
var/verb
message = trim_strip_html_properly(message)
if(stat)
@@ -257,5 +270,22 @@
if(copytext(message,1,2) == "*")
return emote(copytext(message,2))
//parse the language code and consume it
var/datum/language/speaking = parse_language(message)
if(speaking)
message = copytext(message,2+length(speaking.key))
else
speaking = get_default_language()
..(message)
var/ending = copytext(message, length(message))
if (speaking)
// This is broadcast to all mobs with the language,
// irrespective of distance or anything else.
if(speaking.flags & HIVEMIND)
speaking.broadcast(src,trim(message))
return
//If we've gotten this far, keep going!
verb = speaking.get_spoken_verb(ending)
..(message,speaking,verb)
@@ -30,5 +30,6 @@
icon_state = "Syndifox"
icon_living = "Syndifox"
icon_dead = "Syndifox_dead"
icon_resting = "Syndifox_rest"
flags = IS_SYNTHETIC|NO_BREATHE
faction = list("syndicate")
@@ -8,6 +8,7 @@
var/icon_living = ""
var/icon_dead = ""
var/icon_resting = ""
var/icon_gib = null //We only try to show a gibbing animation if this exists.
var/oxygen_alert = 0
@@ -86,6 +87,10 @@
return
/mob/living/simple_animal/Life()
if(paralysis || stunned || weakened || buckled || resting)
canmove = 0
else
canmove = 1
//Health
if(stat == DEAD)
@@ -97,12 +102,16 @@
density = 1
return 0
if(health < 1)
Die()
if(health > maxHealth)
health = maxHealth
if(resting && icon_resting && stat != DEAD)
icon_state = icon_resting
else if(icon_resting && stat != DEAD)
icon_state = icon_living
if(sleeping)
sleeping = max(sleeping-1, 0)
@@ -548,7 +557,7 @@
gib()
return
/mob/living/simple_animal/say(var/message)
/mob/living/simple_animal/say(var/message,var/datum/language/speaking,var/verb)
if(stat)
return
@@ -558,11 +567,11 @@
if(stat)
return
var/verb = "says"
verb = "says"
if(speak_emote.len)
verb = pick(speak_emote)
message = capitalize(trim_left(message))
..(message, null, verb)
..(message, speaking, verb)
+3 -24
View File
@@ -45,6 +45,9 @@
client.perspective = MOB_PERSPECTIVE
if(ckey in deadmins)
verbs += /client/proc/readmin
//Clear ability list and update from mob.
client.verbs -= ability_verbs
@@ -57,27 +60,3 @@
client.verbs |= H.species.abilities
CallHook("Login", list("client" = src.client, "mob" = src))
//Update morgues on login/logout
if (stat == DEAD)
var/obj/structure/morgue/Morgue = null
var/mob/living/carbon/human/C = null
if (istype(src,/mob/dead/observer)) //We're a ghost, let's find our corpse
var/mob/dead/observer/G = src
if(!G.mind) //This'll probably break morgue sprites, but the line under the next If statement causes runtimes with Assume Direct Control.
return
if (G.can_reenter_corpse && G.mind.current)
C = G.mind.current
else if (istype(src,/mob/living/carbon/human))
C = src
if (C) //We found our corpse, is it inside a morgue?
if (istype(C.loc,/obj/structure/morgue))
Morgue = C.loc
else if (istype(C.loc,/obj/structure/closet/body_bag))
var/obj/structure/closet/body_bag/B = C.loc
if (istype(B.loc,/obj/structure/morgue))
Morgue = B.loc
if (Morgue)
Morgue.update()
+3 -24
View File
@@ -10,28 +10,7 @@
if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell.
send2adminirc("[key_name(src)] logged out - no more admins online.")
..()
//Update morgues on login/logout
if (stat == DEAD)
var/obj/structure/morgue/Morgue = null
var/mob/living/carbon/human/C = null
if (istype(src,/mob/dead/observer)) //We're a ghost, let's find our corpse
var/mob/dead/observer/G = src
if(!G.mind) //This'll probably break morgue sprites, but the line under the next If statement causes runtimes with Assume Direct Control.
return 1
if (G.can_reenter_corpse && G.mind.current)
C = G.mind.current
else if (istype(src,/mob/living/carbon/human))
C = src
if (C) //We found our corpse, is it inside a morgue?
if (istype(C.loc,/obj/structure/morgue))
Morgue = C.loc
else if (istype(C.loc,/obj/structure/closet/body_bag))
var/obj/structure/closet/body_bag/B = C.loc
if (istype(B.loc,/obj/structure/morgue))
Morgue = B.loc
if (Morgue)
Morgue.update()
CallHook("Logout", list("client" = src.client, "mob" = src))
return 1
+1 -1
View File
@@ -406,7 +406,7 @@
if(isalien(attacker) && iscarbon(prey)) //Xenomorphs eating carbon mobs
return 1
if(ishuman(attacker) && attacker.get_species() == "Kidan" && istype(prey,/mob/living/carbon/primitive/diona)) //Kidan eating nymphs
if(ishuman(attacker) && attacker.get_species() == "Kidan" && istype(prey,/mob/living/simple_animal/diona)) //Kidan eating nymphs
return 1
if(ishuman(attacker) && attacker.get_species() == "Tajaran" && istype(prey,/mob/living/simple_animal/mouse)) //Tajaran eating mice. Meow!
+2 -2
View File
@@ -470,7 +470,7 @@ var/list/intents = list("help","disarm","grab","harm")
name = realname
for(var/mob/M in player_list)
if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && (M.client.holder.rights & R_MOD))) && (M.client.prefs.toggles & CHAT_DEAD))
if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || check_rights(R_MOD,0)) && (M.client.prefs.toggles & CHAT_DEAD))
var/follow
var/lname
if(subject)
@@ -481,7 +481,7 @@ var/list/intents = list("help","disarm","grab","harm")
var/mob/dead/observer/DM
if(istype(subject, /mob/dead/observer))
DM = subject
if(M.client.holder) // What admins see
if(check_rights(R_MOD,0)) // What admins see
lname = "[keyname][(DM && DM.anonsay) ? "*" : (DM ? "" : "^")] ([name])"
else
if(DM && DM.anonsay) // If the person is actually observer they have the option to be anonymous
+2
View File
@@ -30,6 +30,8 @@
CallHook("Login", list("client" = src.client, "mob" = src))
new_player_panel()
if(ckey in deadmins)
verbs += /client/proc/readmin
spawn(40)
if(client)
handle_privacy_poll()
+3 -3
View File
@@ -43,7 +43,7 @@
var/isadmin = 0
if(src.client && src.client.holder)
isadmin = 1
var/DBQuery/query = dbcon.NewQuery("SELECT id FROM erro_poll_question WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM erro_poll_vote WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM erro_poll_textreply WHERE ckey = \"[ckey]\")")
var/DBQuery/query = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[ckey]\")")
query.Execute()
var/newpoll = 0
while(query.NextRow())
@@ -178,7 +178,7 @@
var/voted = 0
//First check if the person has not voted yet.
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM erro_privacy WHERE ckey='[src.ckey]'")
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("privacy")] WHERE ckey='[src.ckey]'")
query.Execute()
while(query.NextRow())
voted = 1
@@ -203,7 +203,7 @@
return
if(!voted)
var/sql = "INSERT INTO erro_privacy VALUES (null, Now(), '[src.ckey]', '[option]')"
var/sql = "INSERT INTO [format_table_name("privacy")] VALUES (null, Now(), '[src.ckey]', '[option]')"
var/DBQuery/query_insert = dbcon.NewQuery(sql)
query_insert.Execute()
usr << "<b>Thank you for your vote!</b>"
+21 -21
View File
@@ -5,7 +5,7 @@
return
var/voted = 0
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM erro_privacy WHERE ckey='[src.ckey]'")
var/DBQuery/query = dbcon.NewQuery("SELECT * FROM [format_table_name("privacy")] WHERE ckey='[src.ckey]'")
query.Execute()
while(query.NextRow())
voted = 1
@@ -53,7 +53,7 @@
if(src.client && src.client.holder)
isadmin = 1
var/DBQuery/select_query = dbcon.NewQuery("SELECT id, question FROM erro_poll_question WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime")
var/DBQuery/select_query = dbcon.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime")
select_query.Execute()
var/output = "<div align='center'><B>Player polls</B>"
@@ -84,7 +84,7 @@
establish_db_connection()
if(dbcon.IsConnected())
var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM erro_poll_question WHERE id = [pollid]")
var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]")
select_query.Execute()
var/pollstarttime = ""
@@ -109,7 +109,7 @@
switch(polltype)
//Polls that have enumerated options
if("OPTION")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT optionid FROM erro_poll_vote WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
voted_query.Execute()
var/voted = 0
@@ -121,7 +121,7 @@
var/list/datum/polloption/options = list()
var/DBQuery/options_query = dbcon.NewQuery("SELECT id, text FROM erro_poll_option WHERE pollid = [pollid]")
var/DBQuery/options_query = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
options_query.Execute()
while(options_query.NextRow())
var/datum/polloption/PO = new()
@@ -162,7 +162,7 @@
//Polls with a text input
if("TEXT")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT replytext FROM erro_poll_textreply WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT replytext FROM [format_table_name("poll_textreply")] WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
voted_query.Execute()
var/voted = 0
@@ -204,7 +204,7 @@
//Polls with a text input
if("NUMVAL")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT o.text, v.rating FROM erro_poll_option o, erro_poll_vote v WHERE o.pollid = [pollid] AND v.ckey = '[usr.ckey]' AND o.id = v.optionid")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT o.text, v.rating FROM [format_table_name("poll_option")] o, erro_poll_vote v WHERE o.pollid = [pollid] AND v.ckey = '[usr.ckey]' AND o.id = v.optionid")
voted_query.Execute()
var/output = "<div align='center'><B>Player poll</B>"
@@ -230,7 +230,7 @@
var/minid = 999999
var/maxid = 0
var/DBQuery/option_query = dbcon.NewQuery("SELECT id, text, minval, maxval, descmin, descmid, descmax FROM erro_poll_option WHERE pollid = [pollid]")
var/DBQuery/option_query = dbcon.NewQuery("SELECT id, text, minval, maxval, descmin, descmid, descmax FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
option_query.Execute()
while(option_query.NextRow())
var/optionid = text2num(option_query.item[1])
@@ -273,7 +273,7 @@
src << browse(output,"window=playerpoll;size=500x500")
if("MULTICHOICE")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT optionid FROM erro_poll_vote WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
voted_query.Execute()
var/list/votedfor = list()
@@ -286,7 +286,7 @@
var/maxoptionid = 0
var/minoptionid = 0
var/DBQuery/options_query = dbcon.NewQuery("SELECT id, text FROM erro_poll_option WHERE pollid = [pollid]")
var/DBQuery/options_query = dbcon.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]")
options_query.Execute()
while(options_query.NextRow())
var/datum/polloption/PO = new()
@@ -345,7 +345,7 @@
establish_db_connection()
if(dbcon.IsConnected())
var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM erro_poll_question WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime")
var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime")
select_query.Execute()
var/validpoll = 0
@@ -363,7 +363,7 @@
usr << "\red Poll is not valid."
return
var/DBQuery/select_query2 = dbcon.NewQuery("SELECT id FROM erro_poll_option WHERE id = [optionid] AND pollid = [pollid]")
var/DBQuery/select_query2 = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE id = [optionid] AND pollid = [pollid]")
select_query2.Execute()
var/validoption = 0
@@ -378,7 +378,7 @@
var/alreadyvoted = 0
var/DBQuery/voted_query = dbcon.NewQuery("SELECT id FROM erro_poll_vote WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
voted_query.Execute()
while(voted_query.NextRow())
@@ -399,7 +399,7 @@
adminrank = usr.client.holder.rank
var/DBQuery/insert_query = dbcon.NewQuery("INSERT INTO erro_poll_vote (id ,datetime ,pollid ,optionid ,ckey ,ip ,adminrank) VALUES (null, Now(), [pollid], [optionid], '[usr.ckey]', '[usr.client.address]', '[adminrank]')")
var/DBQuery/insert_query = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (id ,datetime ,pollid ,optionid ,ckey ,ip ,adminrank) VALUES (null, Now(), [pollid], [optionid], '[usr.ckey]', '[usr.client.address]', '[adminrank]')")
insert_query.Execute()
usr << "\blue Vote successful."
@@ -415,7 +415,7 @@
establish_db_connection()
if(dbcon.IsConnected())
var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype FROM erro_poll_question WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime")
var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime")
select_query.Execute()
var/validpoll = 0
@@ -432,7 +432,7 @@
var/alreadyvoted = 0
var/DBQuery/voted_query = dbcon.NewQuery("SELECT id FROM erro_poll_textreply WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_textreply")] WHERE pollid = [pollid] AND ckey = '[usr.ckey]'")
voted_query.Execute()
while(voted_query.NextRow())
@@ -457,7 +457,7 @@
usr << "The text you entered was blank, contained illegal characters or was too long. Please correct the text and submit again."
return
var/DBQuery/insert_query = dbcon.NewQuery("INSERT INTO erro_poll_textreply (id ,datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (null, Now(), [pollid], '[usr.ckey]', '[usr.client.address]', '[replytext]', '[adminrank]')")
var/DBQuery/insert_query = dbcon.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (id ,datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (null, Now(), [pollid], '[usr.ckey]', '[usr.client.address]', '[replytext]', '[adminrank]')")
insert_query.Execute()
usr << "\blue Feedback logging successful."
@@ -473,7 +473,7 @@
establish_db_connection()
if(dbcon.IsConnected())
var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype FROM erro_poll_question WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime")
var/DBQuery/select_query = dbcon.NewQuery("SELECT starttime, endtime, question, polltype FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime")
select_query.Execute()
var/validpoll = 0
@@ -488,7 +488,7 @@
usr << "\red Poll is not valid."
return
var/DBQuery/select_query2 = dbcon.NewQuery("SELECT id FROM erro_poll_option WHERE id = [optionid] AND pollid = [pollid]")
var/DBQuery/select_query2 = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE id = [optionid] AND pollid = [pollid]")
select_query2.Execute()
var/validoption = 0
@@ -503,7 +503,7 @@
var/alreadyvoted = 0
var/DBQuery/voted_query = dbcon.NewQuery("SELECT id FROM erro_poll_vote WHERE optionid = [optionid] AND ckey = '[usr.ckey]'")
var/DBQuery/voted_query = dbcon.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE optionid = [optionid] AND ckey = '[usr.ckey]'")
voted_query.Execute()
while(voted_query.NextRow())
@@ -519,7 +519,7 @@
adminrank = usr.client.holder.rank
var/DBQuery/insert_query = dbcon.NewQuery("INSERT INTO erro_poll_vote (id ,datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (null, Now(), [pollid], [optionid], '[usr.ckey]', '[usr.client.address]', '[adminrank]', [(isnull(rating)) ? "null" : rating])")
var/DBQuery/insert_query = dbcon.NewQuery("INSERT INTO [format_table_name("poll_vote")] (id ,datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (null, Now(), [pollid], [optionid], '[usr.ckey]', '[usr.client.address]', '[adminrank]', [(isnull(rating)) ? "null" : rating])")
insert_query.Execute()
usr << "\blue Vote successful."
+1 -1
View File
@@ -482,7 +482,7 @@
return 1
//Friendly Creatures!
if(ispath(MP, /mob/living/carbon/primitive/diona) && !jobban_isbanned(src, "Dionaea"))
if(ispath(MP, /mob/living/simple_animal/diona) && !jobban_isbanned(src, "Dionaea"))
return 1
//Not in here? Must be untested!