Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - derula

Pages: [1] 2
1
Wish list / /attempt command
« on: March 16, 2014, 08:24:21 am »
Please check out this demo I made: http://ps.incertitu.de/attempt-command-demo.html

You can use it like a chatbox (/me and /my is implemented), and in addition to that, do something like /attempt to do something to Someone. You can select "Attempt" in the dropdown in the lower left to get some examples.

The rank would be an RP rank everyone could set in their profiles. Other characters' colors in the dropdown indicate their rank (same colors as in own rank dropdown)




TL;DR version:
This is an implementation of my concept published here and is designed to help people make RP decisions if they can't agree on the best outcome through other means. Because it is only an RP tool, people are free to change their rank at any time - e.g. a legendary warrior who happens to be intoxicated could temporarily reduce his rank, or a feeble citizen who is under the effect of a power-boosting spell or potion might want to raise it for that time.

The idea is that every person's rank is visible in their description, so people can evaluate other people's strength before even making an attempt. The "reject" option in the prompt is there in case the other person realizes he accidentally had the wrong rank set. In that case, the dispute needs to be settled manually in /tells.

The reason there are only 3 different ranks is to prevent a scenario where everyone just walks around with the highest rank. People tend to be confused with too many ranks, and in general, people like to see themselves as "above average," even if just slightly. To further improve this situation, one might consider to change the middle rank's name to something equivalent to "slightly above average."

I designed it that way that rank "legendary" can't really godmod, and rank "feeble" still has some chance to succeed at things. This could help make things more interesting and less predictable. And it is intentional, not a flaw in my system :P

Obviously, my original concept was designed to be as simple as possible, so that it can be used "manually." So surely, if done in script, percentages can be fine-tuned just a tad better. However, I feel they're quite good as they are. And also the three-rank thing is something I would keep. (It has been suggested to add an option to automatically set rank from character stats; I think that would make sense to add, but not to force this behavior.)

Thanks a bunch to Illysia for input / support.

Edit: As to the "why" rule: I personally have often got into trouble trying to decide whether someone's attempt should be successful or thought they unfairly decided about my attempt. Mixing it with some randomness will make things more interesting and unexpected. It will also help to limit godmodding.

2
General Discussion / Proposal: RP dice!
« on: March 07, 2014, 05:38:22 pm »
Hello!

I had an idea.

In RP, there is often the problem of who should decide whether an action would take effect. There can be a thin line between godmodding (/me strikes Character down, killing them instantly) and being overly careful (/me attempts to approach Character carefully).

In the end, it always comes down to human judgment; and whether the attacker or the attacked decides the outcome, it will always be biased.

I have a proposal that could help fix that. Using the /roll command in PS and some simple rules, we could establish a system where an outcome of an RP action is decided by fair chance.

Here's the concept: http://stuff.incertitu.de/planeshift/rp%20dice

Any opinions?

3
Single Author Stories / One thing left to do
« on: March 02, 2014, 04:44:36 pm »
In the late hours of the day, a lone Dermorian is sitting on the edge of a cliff. With her body slumped, her long, matted, red hair falls down in front of her legs. She is breathing heavily. Her weak, spindly hands are shaking as if she'd had several brews to many; although the lack of loud singing of all-too-popular folk tunes suggests that ale is not the culprit this time.

The rags on her body cover scarred skin. Her face, while still bearing a striking resemblance to the beauty she used to possess, has long become challenging to look at without feeling a sense of terror and regret. If it wasn't for her shivering, it would be highly unlikely for a random passerby not to confuse her for a corpse.

For a long time she's been sitting there. Sitting and trying to think. Not trying to think of something in particular, and unable to focus on that certain something, but utterly empty and failing to form any kind of coherent thought at all. Too many sensations, too many formerly restricted emotions, and too little energy have been forcing her mind completely blank.

But slowly, very slowly and with a lot of focus, one thought comes creeping into her mind: "I live." This thought stands on its own for a while, with no reflection, no judgment, no emotion. Only a discovery for now. Still, this thought lingers on, and suddenly, thought processes are springing into action, like the cogs of a machine that had been decommissioned for ages.

"I live.

"It went on for so long, and then it ended so fast.

"There was no place to hide, nowhere left to run; I thought I was done for, finally, finally done for; and yet I live.

"I live, I breathe, I live. Right? I must... I don't know how, but I must... I'm free...?

"Who am I kidding, I'm not free. No longer confined, true, but I'm not free. I've never been. How can anyone truly think they're free? Did I ever think so? ...Maybe. How naïve I was. To think I'm free! To think freedom exists...

"I can't go anywhere. I can't move on. I certainly can't go back. I just want it all to end... want it to end right now... but can I...? I can't. Not without making sure. I'm in debt, a debt I never got a chance to pay back, and thought I never would. But now I can. And now I have to.

"But where to start? Where did she go? Did she ever even make it out of... of...

"Hold on. I have to be careful. She can't know I exist, can't know I'm looking for her. But.... she's too young to know anyway, isn't she? It seems like it's been an eternity, but the signs of the cycles came to pass only so many times.

"But I can't... I can't meet them. I have caused them enough suffering, they need not know of my situation. I'm not worthy their concern, or even their hatred. They must keep believing I'm gone forever. They must never know what happened.

"So that leaves me with only one place to go. If my feet will carry me that far. ...well, they must, must they not? After I found her, and when I know that she will be fine, then I can finally go to rest. Finally, finally cut my pitiable life."

Somehow, her body manages to slump even further. The emptiness in her head has not been filled, no damage has been remedied; but now, besides the vacuum and the despair, a new idea has settled in her brain. A thought to live on for, a thought for which to return to the place she was forced to leave such a long time ago. No hope, no resurrection, no cure to the darkness that controls her; but a tiny bit of humanity, a hint of a positive emotion.

She knows that she needs to find the one she sent to Death Realm way before her time. She has to find her daughter.

4
Server Status / The new server
« on: March 11, 2012, 06:58:45 am »
Hi.

Thob asked a valid question in the announcement thread for the new server:

could you tell us some details why the server changes so often?

This question was never answered; though Talad did reply with a minor nitpick on the question itself (he said it doesn't actually change that often).

The reason I'm asking is because Zeroping seemed pretty stable. In contrast, the new server seems to go down all the time. There was a downtime on March 7th, from ~4:40PM CET to ~7:10PM CET and ~7:50PM CET to ~8:30PM CET, and now there's another one today that started ~10:40AM CET. I'm just wondering, is that the server's fault, or is some shit going on right now?

Also, would anyone be interested in a little website listing server downtimes? I could add that to my status script...

5
PlaneShift Mods / RulaScripts or whatevs
« on: February 15, 2012, 02:21:54 pm »
HEY GUISE just wanted to let you know I've worked my arse off the last days to create a new, better, collective homepage for the PS related scripts I wrote over time. Those are:

  • SVG <-> Sketch XML converter
  • The infamous status script :D
  • Chatlog analyzer / statistics
  • PS date converter thingy
The new homepage is here (the rest of the page is still a bit of a wreck... but if you click the right things, you'll get to see my 404 error cake :D)

So... if you like them or need help or just want to troll me, post here, send me a PM or spam my contact form. Also, there will be a URL change from psstatus.uglyhorst.de to ps.incertitu.de, so generally you should adjust any signature images you might have. That said, the old url will stay available for some... probably a long time and redirect to the new one. Cheers!

Also, poyo.

6
General Discussion / 2011 anonymous online sessions
« on: January 01, 2012, 09:39:40 pm »
Some of you are using my status script in their signatures. But did you know that this script can not only show who is currently online, but also saves a log of who logged in or out when?

Every ten minutes, my script fetches the list of online characters from the server's www site, and, by how it changes, reconstructs who logged on or off since the last check. All of this is saved in a database. More precisely, in two tables: one holds the character names, and the other holds the individual reconstructed "sessions".

Here I will share the second table with you. It has four columns:
  • id: A numerical id.
  • character_id: Id of the character (each char has a unique id).
  • start_time: when the character logged in
  • end_time: when the character logged out

The character IDs are the same used in the names table which I will not disclose. But anonymous statistics can be created out of this pretty well. Please note:
  • Since I only update every ten minutes, start_time and end_time can be off by +/-10 minutes.
  • All session that started before 2012 and ended after 2010 are included.
  • There are a few mistakes in the logs due to server downtimes. I am sorry for that.

I'm too lazy to come up with statistics, feel free to make your own!

Here is the file: download sessions2011.sql.zip
To be imported into a relational SQL database like MySQL and processed via script.

Have fun!

7
Fan Art / bla
« on: April 30, 2011, 04:08:23 am »

8
Fan Art / [Fan Song] (deleted)
« on: January 05, 2011, 01:21:12 pm »
Here was information about a fan song nobody cared about.

Also I mentioned I would stop playing, which the two people below addressed. Thank you, novacadian and Dannae!

Everyone else, please go to hell (or to DR, if you prefer).

9
So I stumbled across neko's post here, and well there you go: Download script or visit online version. Please note that the results of the online version are based on the UTC time zone. There's obviously no IC timezones, thus I chose to use UTC, as it's a quasi-Standard by now. The local version uses local time zone, ATM.

Installation

If you do not want to install or download anything, please use the online version. It has the same features as the downloadable one but no prerequisites have to be installed.

If you want to use the script version, first, you need to install Ruby if you haven't done that yet. That will also allow you to use some other useful pieces of crap written by me (all available here in the Mods forum...)

Save the file somewhere on your computer, rename it to psdate or something (psdate.rb if you want to) and start it either like this,

Code: [Select]
./<filename>
after you set the executable bit (*nix), or like that,

Code: [Select]
ruby <filename>
(I will only use the first form in below examples with the filename psdate)

What will be shown if you run this simple command or open up the online version is the current date in Yliakum.

Advanced usage

If you call the script like this

Code: [Select]
./psdate -h
-or-
./psdate --help

it'll tell you about its other features:

Code: [Select]
Call: psdate [OPTION] [+FORMAT]
Returns the current date in Yliakum in the supplied FORMAT or converts an Yliakum date back to an IRL date.
 
Option can be one of the following:
 
  -d STRING      Return date according to STRING, not "today"
  -r MONTH/DAY   Convert the specified Yliakum date into a real date
 
FORMAT determines the output of an Yliakum date. The following statements can be used:
 
  %%   literal %
  %b   abbreviated month name ("Uno" through "Ynd")
  %B   the full month name ("Unodin" through "Yndoli")
  %d   day of the month (01 through 39)
  %D   counted day of the month (1st through 39th)
  %j   day of the year (001 through 366)
  %m   month of the year (01 through 12)

When using -r, this option is ignored and the date is returned in a default date format.

(For the online version, click here, and you'll get a similar message)

Basically that's two other features, one to convert an "arbitrary" date (other than "today") into a PS date, the other to transform a PS date back into an IRL date. Examples:

Code: [Select]
./psdate -r 5/12
http://psstatus.uglyhorst.de/date.php?reverse=5/12

will tell you which real date 12th Quintahl (fifth month) is on.

Code: [Select]
./psdate -d 12/13
http://psstatus.uglyhorst.de/date.php?date=12/13

will tell you what day December 13th will be in PS.

(the -d command accepts more different formats than -r, which just accepts the one specified above (MONTH/DAY). Errors on some strange formats though. Accepted formats most likely differ between the two versions.)

You can also have fun with changing the format of the output, e.g.

Code: [Select]
./psdate +%m-%d
http://psstatus.uglyhorst.de/date.php?format=%m-%d

would result in something like

Code: [Select]
Kra-29
Have fun guys.

(this is not thoroughly tested and might still contain leap year bugs - so tell me if you find it's off by one!)

10
PlaneShift Mods / PS log statistics
« on: April 16, 2010, 12:48:36 pm »
Another waste of time:
Code: [Select]
begin
require 'parsedate'

class Date
module Format # :nodoc:
warn_level = $VERBOSE
$VERBOSE = nil
MONTHS = MONTHS.merge(
'januar'   => 1, 'februar'  => 2, 'märz'     => 3, 'mai'      => 5,
'juni'     => 6, 'juli'     => 7, 'oktober'  =>10, 'dezember' =>12
)
DAYS = DAYS.merge(
'sonntag'   =>0, 'montag'   => 1, 'dienstag' => 2, 'mittwoch' => 3,
'donnerstag'=>4, 'freitag'  => 5, 'samstag'  => 6
)
ABBR_MONTHS = ABBR_MONTHS.merge(
'mär'      => 3, 'apr'      => 4, 'mai'      => 5, 'okt'      =>10,
'dez'      =>12
)
ABBR_DAYS = ABBR_DAYS.merge(
'so'       => 0, 'mo'       => 1, 'di'       => 2, 'mi'       => 3,
'do'       => 4, 'fr'       => 5, 'sa'       => 6
)
$VERBOSE = warn_level
end
end
class PSLog < Array
class Line
COMMANDS = [:say, :shout, :tellnpc, :auction, :group, :guild, :tell, :channel, :action]
ACTIONS = [:me, :my]
attr_reader :direction, :name, :time, :command, :text, :action, :target
def initialize own_name, name, time, command, text, action = nil, target = nil
unless is_npc_action = (command == :action and name == nil)
name = own_name if name.downcase == 'you'
end
unless is_npc_action
@direction = (is_npc_action or (name != own_name)) ? :in : :out
@name = name
else
@direction = :unknown
end
@time = time
COMMANDS.include? command or raise "Invalid command #{command}"
@command = command
@text = text
if action
ACTIONS.include? action or raise "Invalid action #{action}"
@action = action
end
if [:tell, :channel].include? @command
@target = target
end
end
end
class Session < Array
attr_reader :start_time
def initialize time
@start_time = time
super()
end
end
def self.load name, &block
file = File.join File.expand_path('~'), '.PlaneShift', 'logs', (name.gsub(' ', '_') << '_chat.txt')
File.exist?(file) and new(name, file, &block)
end
TIMESTAMP = /^\((\d\d:\d\d:\d\d)\) /
ACTION = /^>/
CHAT_TAB = /^
(?:\[(NPC|Auction|Group|Guild|Tell)\]| # General chat tabs
   \[Channel\]\s\[\d+:\s([^\]]*)\])\s  # Channel chat tab
/x
NAME = /^([A-Z][a-z]*)(?: ((?:[A-Z][a-z]*-)*[A-Z][a-z]*))?/
SAY_SHOUT_SUFFIX = /^ (says|shouts|auctions): /
TELL_SUFFIX = /^ (?:tells you|tell ([A-Z][a-z]+)): /
MY_SUFFIX = /^'s /
ME_SUFFIX = /^ /
SEPARATOR = /^(=|-){48,}$/
COMMANDS = { "NPC" => :tellnpc, "Auction" => :auction, "Group" => :group,
"Guild" => :guild, "Tell" => :tell,
'says' => :say, 'shouts' => :shout, nil => :action
}
attr_reader :surnames
def initialize name, filename
@name = name
first, last = name.split(' ')
super()
session_start = /(.*) #{@name}/
day = lasthour = nil
@surnames = { first => last }
puts "Reading file #{filename}..."
File.foreach filename do |line|
if line.slice! TIMESTAMP
raise 'No session started in log file' if empty?
# Haben Chat-Zeile
h, m, s = $1.split(':').collect { |s| s.to_i }
if h < lasthour
day += 86400 # Einen Tag addieren
end
lasthour = h
# Command rekonstruieren, Name / Action / Target herausfinden
unless is_action = line.slice!(ACTION) != nil
line.slice! CHAT_TAB
tab, channel = $1, $2
end
line.slice! NAME
name = $1
@surnames[name] = $2 if $2
target = action = nil
command =
if is_action              # :action
command = :action
else
# Setzt $1 auf say oder shout, falls es sich um say/shout handelt
line.slice! SAY_SHOUT_SUFFIX
action =
if name and not (verb = $1)
if tab == "Tell" and line.slice!(TELL_SUFFIX)
target = $1
nil
elsif line.slice! MY_SUFFIX
:my
else
line.slice! ME_SUFFIX
:me
end
end
if tab and name        # Commands aus COMMANDS
COMMANDS[tab]
elsif channel           # :channel
target = channel
:channel
else                    # :say und :shout
# (/shout /m(e|y) wird zu /say :m(e|y), :mypet wird zu :my)
action ? :say : COMMANDS[verb]
end
end
line = Line.new(first, name, day + 3600*h+60*m+s, command, line.strip, action, target)
yield self[-1], line
self[-1] << line
elsif line[session_start]
time = Time.mktime(*ParseDate.parsedate($1))
a = time.to_a[2..5].reverse
lasthour = a[3]
day = Time.mktime(*a[0..2])
self << Session.new(time)
elsif not line[SEPARATOR]
puts "Failed to parse the following line:\n  #{line}"
end
end
puts "Parsing finished."
end
end

saved_chars = []
charname = /([^#{File::SEPARATOR}]*)_chat.txt/

Dir.glob File.join File.expand_path('~'), '.PlaneShift', 'logs', ('*_chat.txt') do |file|
file[charname]
saved_chars << [$1.gsub('_', ' '), file]
end

begin
puts "Please enter the number for the character whose logs are to be checked."
saved_chars.each_with_index do |char, i|
puts "#{i+1}) #{char[0]}"
end
end until (1..saved_chars.length).include?(i = gets.to_i)

linecount = 0
msg_by_dir = { :in => 0, :out => 0, :unknown => 0 }
msg_by_char = Hash.new { |hash, key| hash[key] = 0 }
log = PSLog.new *saved_chars[i-1] do |session, line|
linecount += 1
msg_by_dir[line.direction] += 1
msg_by_char[line.name] += 1 if line.name
end

unless log
puts "Error trying to load log for #{name}."
exit! 1
end

top_char = msg_by_char.sort{ |a, b| b[1] <=> a[1]}

max_session = [0]

play_time = log.inject(0) do |sum, session|
sl = (session.empty? ? 0 : (session[-1].time.to_i - session.start_time.to_i))
unless sl < max_session[0]
max_session = [sl, session.start_time]
end
sum + sl
end

puts "Your chatlog contains #{linecount} chat lines:"
puts "  #{msg_by_dir[:in]} incoming,"
puts "  #{msg_by_dir[:out]} outgoing and"
puts "  #{msg_by_dir[:unknown]} unknown (i.e. NPC/GM actions)."
puts ""
puts "Messages span across #{log.length} game sessions covering a total play"
puts "time of #{play_time/3600.0} hours; thus, the mean session length is"
puts "#{play_time/(60.0*log.length)} minutes. Your longest session was"
puts "#{max_session[0]/3600.0} hours long, it started #{max_session[1]}."
puts ""
puts "Your log contains messages from #{msg_by_char.length} different characters,"
puts "and surnames for #{log.surnames.length} of them are logged."
puts ""
puts "The top five characters in your log are:"
puts top_char[0..4].inject('') { |string, char|
string << char[0] << ' '
if log.surnames.include? char[0]
string << log.surnames[char[0]] << ' '
end
string << '(' << char[1].to_s << ")\n"
}

rescue Interrupt
puts "Aborted."
end

Save it as something.rb and run with "ruby something.rb". Only some sample statistics included that came to my mind, add more if you like. Won't fix bugs. Won't work correctly if your system locale isn't English or German (the dates are printed to the log according to system locale, and only dates in these two languages can be parsed).

Example output:

Code: [Select]
Parsing finished.
Your chatlog contains 95471 chat lines:
  58623 incoming,
  36084 outgoing and
  764 unknown (i.e. NPC/GM actions).

Messages span across 331 game sessions covering a total play
time of 618.291944444444 hours; thus, the mean session length is
112.077089627392 minutes. Your longest session was
17.4208333333333 hours long, it started Sat Jun 06 10:51:13 +0200 2009.

Your log contains messages from 988 different characters,
and surnames for 640 of them are logged.

The top five characters in your log are:
[truncated]

11
PlaneShift Mods / PS status script [LEGACY]
« on: February 24, 2010, 10:25:52 am »
Unfortunately, with PS Legacy taken offline today (2023/5/1), this script is currently broken.

Inspired by and blatantly stealing the idea of this, I made a little script that checks character statuses.

It will only query the Laanx server every 10 minutes at most and save the result for later. It's open for everyone to use it.

Click here for details.

Here's a simple usage example:
Code: [Select]
http://psstatus.uglyhorst.de/Idiotbrain.png=>

You can also make it create a complete list of characters, via comma separation:
Code: [Select]
http://psstatus.uglyhorst.de/Idiotbrain,Randomdude,Slaughterking.png=>

For an advanced usage example, see my sig (yes, that would be see psstatus.uglyhorst.de/Jamona.png).

If you have any improvement suggestions, or want to "register" for advanced usage, tell me :)

12
Linux Specific Issues / Inconsistency detected by ld.so
« on: January 03, 2010, 08:09:19 pm »
Hey, I updated to openSUSE 11.2 (and in the process switched to kernel-desktop as the setup suggested), and now I get:

Code: [Select]
simon@linux-00ip:~> planeshift
Inconsistency detected by ld.so: dl-close.c: 731: _dl_close: Assertion `map->l_init_called' failed!

Well, thanks, I guess. Starting pslaunch.bin directly works sometimes, reinstalling made no change. I'm not sure if that's a bug, also I lost my FlySpray password and the lost password e-mail still fights its way through my greylist filter. If it will ever make it.

Any ideas?

13
Fan Art / Some PS-themed song texts / poems
« on: December 13, 2009, 08:51:53 am »
I've been writing a ridiculous amount of song texts inspired by the world of PS, my main character and RPs that have been going on lately (though referencing none of them directly). I am planning to make an IC use of the better ones, but I don't want to throw away the others (which either lack in quality or are redundant, or both), so... well, here are a few. More may follow.

No return

One day, sunshine, I'll leave behind this town
I pray that I can make it by my own
A shame what this city has now become
Its fame today merely a joke for some

  The doors of Laanx' temple will be closed forever
  and I can ensure you that I will never
  return.

One night I'll simply pack my stuff and go
You ask if I'll return, but I say no!
Can't take Hydlaa for yet another day
And now I'd better be out on my way

  I'll pay my last rate at Kada-El's tavern
  wave at the tender and ensure her I'll never
  return.

Run away, run away, run awayay
Into the light, into the light, towards the crystal
Leaving behind, leaving behind what I'm used to
I just hope, only hope I won't lose you

  One last trip to the non-existing caverns
  to climb up the windowless tower
  clear my throat and shout with great power:
  Listen guards and citizens, I'm leaving Hydlaa now, and I will never
  return - not in a lifetime
  return - not in a century
  return - I will never, so you better forget about me


Sewer Rats

The sewer rats, though questionable beings
I believe that even they... have feelings
And that their morals are remarkably superior... to yours.

Look around you, the world in that you live
And just hope that the gods will forgive
You all the hate you spread, all the unreasonable violence... you brought to us.

I don't like you, don't think I ever will
And everyone who does... must be ill
Just go away from here, we don't need such mindless killers... as you round here.


It's also your world

You see them fight harmless animals and people alike,
Why does nobody stop them?, you think quietly.
A Gobble collapses after the final strike,
but you just close your eyes, go away and let them be.

  If you always run away, you'll never change a thing.
  Don't assume that someone else will, this won't be so.
  But I hope that what I tell you will be encouraging,
  'cause it's the only way to go.

You are taking some mining lessons with a friend.
Harnquist is your trainer, and he may be the best.
A stranger approaches quickly with a blade in her hand,
to, before you even see her, stab your friend in the chest.

  This time you can't run away, you watch your friend die.
  You're feeling so helpless, the guards far away.
  Some people gather around you, stare down at you,
  to show they commiserate.

The next time it won't be your friend, it will be you.
And there is really only one thing you can really do.
Simply asking for assistance won't achieve a lot,
you have to start acting or the world will start to rot.

  No one will ever help you, you are on your own.
  But I can guarantee you that you're not alone!
  If they can't make a change, then do it yourself,
  it's also your world, after all.

Whatever you would like to be done: do it yourself!
Whatever should be changed in this world: do it yourself!
Whatever needs improvement in your eyes: do it yourself!
It's also your world, after all,
it's also your world, after all!

14
PlaneShift Mods / Conversion SVG <-> Sketch XML
« on: July 11, 2009, 06:55:12 am »
Hi.

I'm not quite sure where to post this (feel free to move it around if you like) or if there's any interest at all. But I think it's quite neat so here I am.

I've written a little utility in Ruby that can convert between SVG files and the XML format Planeshift uses to export sketches / user drawn maps.

The direction Sketch -> SVG is pretty trivial and lossless, however the other way round isn't. In fact my tool ignores mostly everything in the SVG file - except things Planeshift understands. And by "understands", I mean: can also be achieved through the in-game editor. I don't know if that's the same. Anyway, here an example:



For those of you who know Ruby (I'ld think most of you do ;D), there's also the (fully documented) PlaneShiftSketchXML class which allows you to easily modify the XML files yourself. Example (from the documentation):

Code: [Select]
require 'planeshift_sketch_xml'
Dir.foreach('~/.PlaneShift/sketches') do |name|
  sketch = PlaneShiftSketchXML.load_from(name)
  sketch.add_text(sketch.width - 300, sketch.height - 50, 'signature')
  sketch.save_to(name)
end

This would add a signature to all of your saved sketches... I know, somewhat limited example, just to show how simple it is.

Main drawback of converting SVG files to sketches is the 200 elements limit Planeshift sets on the imported sketches. On the other hand, if this limit wasn't there I wouldn't have released this, because who knows what noob would spam the server with Megabytes of XML...

To run the thing, you need to have Ruby 1.8 installed, either through your distribution's package system (Linux) or as a download package from here. Simply open a console window, navigate to the folder you've extracted the zip file to, and type 'ruby svg2sketchxml.rb' or 'ruby sketchxml2svg.rb', without the quotes, appending the name of the source and dest files. For example:

Code: [Select]
ruby svg2sketchxml mymap.svg mymap.xml
You can then copy the mymap.xml file into the sketches subfolder of your PS settings directory and import it from within the game.

[Under Linux, you can alternatively run './<script>.rb' instead of 'ruby <script>.rb']

Feel free to report any bug, but please don't ask about how to get ruby running here or how to code in it... this is not the place for it.

I hope some of you find it useful. Here's the download: PlaneShift Sketch XML API, SVG converters and documentation

Please read the text file in the icons subdirectory if you can't see any icons in SVG files converted from sketches. AFAIK, PS license forbids me to bundle those icons with the zip, thus I've written a description where to find them.

15
In-Game Roleplay Events / The Dark Threat
« on: April 15, 2009, 09:12:08 pm »
Quote
~~~~~~~~~~~~~~~
The Dark Threat
~~~~~~~~~~~~~~~

By Jamona Shikon

1. Introduction
2. My Story
 2.1. At The Tavern
 2.2. Being Helped
 2.3. Finale
3. My Message
4. Summary


1. Introduction

If you have ever been to East Hydlaa, you have probably met Aldaaren Phostle, who tries to warn everyone passing him of the coming apocalypse. He said that there is a menace, threatening Hydlaa and probably all of Yliakum. He keeps saying the Derghir were about to "kill us all".

While I do not agree with him that the Derghir have an interest in killing anyone, I am also concerned, yes, even afraid of a group of people that have shown up here lately. In my opinion, they are particularly dangerous for no obvious reason. They are brutal and violent, not to be messed with. In the following, I will refer to them as, non-judgmentally, "The Group".

They are a group consisting of at least three people, and I have reason to believe they cooperate to bring fear to the world of Yliakum. In "my story", I'll tell you about my experiences with The Group. If you aren't interested in that, you can jump to "my message", where I tell you what I think would be best to do now. If you just want to know how to recognize them, skip to the summary, where I will try to sum up all information I have about them.


2. My Story

2.1. At The Tavern

The Dermorian was not unknown to me. I had seen him the night before, when he tried to make contact to some girls, including me. But I had never seen the other man, who sat on the floor in front of him and I think was an Ylian. In the following, let me nickname them Dan and Yan, respectively, as I do not know their real names.

So Yan sat on the floor, staring at me. When I first realized his gaze, I figured he was a poor sob who does not know where to put his hormones, especially because all this happened in Kada-El's tavern. They did not look like a threat at all, as they were dressed like commoners and did not carry weapons openly. They just behaved pretty odd, at first.

My nervousness grew when Yan came closer to me. I asked him what his problem was, since I did not want to be molested by a strong-looking stranger like him. Dan told me that -I- was the one with the problem instead. At first, I thought this was some sort of bad joke, but as time passed by, I began to realize he was quite serious about this.

The fear started to raise inside me when Yan said he wanted to "taste" me. Whether that was meant literary, sexually or in a different way, I do not know. Imagine this situation: you're at Kada-El's, being troubled by strangers. The tavern is not empty, there are people around you, and the patrons are standing directly in front of the tavern. At this point I just felt as if nobody at all could help me in this situation. It was then when I pulled out one of my daggers, in the midst of the tavern, to be able to defend myself.

They just laughed at it. Which made me more afraid, to an extent unimaginable to anyone who has not been in a similar situation. When they kept talking about me as if I was a piece of meat, and I did not see a way to escape the situation, I started to cry in fear. Staring at the door, wanting to escape, wanting to scream for help, I felt paralyzed and could not do anything but wait and see what would happen. They tried to assure me they wanted to help me, which sounded extraordinarily strange in this situation and hurt me even more.

At some point I shouted at them, they can just take me if they want, I will not be able to defend myself well, but asked them to stop talking like I was their meal. At some point, a Diaboli sitting nearby asked them to leave me alone, which they just pretended to not have heard. They were saying that I was not "for" Yan, who seemed very disappointed in this fact, but I was for "him", who I figured might be their boss.

Then, Yan stood up, facing Dan, as they kept talking about me, referring to me as an "it". My fear grew so strong at that point that I took the chance that they weren't looking at me for a moment to run away. I ran as fast as I could, ran to find refuge in Laanx's temple. I cowered in a backroom of the temple, still clutching my dagger. I felt ashamed of carrying a dagger in the temple, but at the same time I was too afraid to put it away.

2.2. Being helped

I'd been sitting there in fear for a long time, when a good friend of mine entered. I think she just knew I would need her at the moment, and where I was to be found. I was very grateful she found me. She is a brave warrior and talked about revenging me. I was afraid of returning to the tavern, but I did it for her.

There, she introduced me to another honorable Dermorian, who agreed to help me in this matter. As Dan and Yan didn't seem to be in the tavern anymore, we spoke about everything in front of its door. I was still very nervous, looking around me all the time. At some point, I heard a cough from above my head and turned up - where Yan was actually standing at the balcony! The honorable Dermorian quickly ran inside to look for him - but he was nowhere to be found. Only seconds later, Yan appeared again on the rooftop. This made me very afraid, but I knew I would be safe as long as I was with my newly-found compagnions.

So I just followed them when they decided to drink and chat in Kada-El's. After a while, my warrior friend left to mind her own business. That was when things quickly grew out of control: one of the girls that stayed with us got drunk, REALLY drunk. At some point, I saw Dan standing at the ground level looking down on us, as we sat in the basement. Even more so I knew I'ld have to stay with the Dermorians.

We brought the drunken girl to a room upstairs, so that she could get some sleep. We locked the door, because we feared she might wake up and continue to drink even more. At some point, I got nervous again. I had a feeling as if Dan or Yan was around, outside the room. At first we wanted to wait until he had gone.

But then, the drunken girl woke up again, making our all lives hard. The honorable Dermorian felt he must care for her, following her downstairs to prevent her drinking more. They seemed to have completely forgotten about my fear. However, I followed them, having no other choice. But everything went so chaotic that at some point, I completely lost them.

2.3. Finale

I found myself standing outside the tavern, alone. It was then that I remembered I had forgotten my water pouch in that room. For some odd reason, I went back inside to fetch it. Not more than a meter inside the tavern, I saw Dan hurrying downstairs. I turned around instantly and fled. After about ten meters, Yan was in front of me, trying to catch me, but I escaped his grip.

I don't know why I ran. I maybe should just have stayed by the guards. But I was afraid, so afraid. So I ran as fast as I could, out the north gate, through the forest. However, they were catching up gradually. At some point I think they fell, because my advance increased for a bit. However, they catched up on me pretty fast.

Now you must know, I am not physically in the best form; my stamina was already fading. I decided to run to the magic shop, maybe Levrus would know what to do. I got inside, but I could not stop to talk to him, still afraid of The Group. I ran up the stairs until I could not get any further, full of fear, my whole body shaking. I'll try to tell this story as closely to the truth as my memory allows, in a dialog form.

Dan: Hey you, please stop running! I just wanted to apologize to you.
Me: I do not believe you a single word, Dermorian.
Dan: Why would you not?
Me: If you wanted to say sorry, you would not have waited for my friends to be gone before doing so.
Yan (staring at me, chewing his lips): I used to have a pet...
Dan (nodding at Yan): She would probably not have liked your pet, at all.
Me: If you want me as a pet, I'm not interested.
Dan (a devilish look on his face): Us neither.
Me: Who made you do this? There must be someone who sent you.
Dan (mumbling): Kurtzen.
Dan realized what he just did. He revealed to me the name of his Group's leader. He pulled out a dagger with a bone for a handle, and used it to threaten me not to tell anyone about that name.
Me: I will remember that name, and if I survive this, I will tell it to everyone I meet.
He then pulled out his saber with his right hand, keeping his bone handled dagger in the left one.
Dan: Well, if that is your decision... good luck trying to find your way back through the dark depths of Death Realm.
I closed my eyes and kneed down on the floor, burrying my hands into my face full of tears, while Dan said something to Yan I did not understand.
Me: Then why don't you do it already, you sick bastards!?
Dan (threatening me with his saber): Listen to me, fair Dermorian. My friend here dislikes you as much as I do. He does not like people who fear him. [turning to Yan] It's yours.
Yan [turning to Dan]: Mind if I ... t-t-touch it?
I don't remember standing up again, but I must have, as my eyes were now the same height as theirs. Dan must have allowed him to touch me, since he started to run the back of his finger across my cheek, wiping my tears. When he took it away, it seemed that some sort of black spark jumped over into my skin. He must have used some kind of rare Dark Way magic, however it felt like a real, fiery spark touching my face. The tears rolling down my cheeks quickly cooled down the spot where it landed, luckily.
Dan (closing his eyes, completely satisfied): I love it so much when you are doing this...
Now, Yan took out a dagger himself, while Dan licked the edge of his.
Me: I beg you, don't pull it like that!
Dan (ramming his bone handled dagger into my skull): Too late to change your mind!
I fell down to the floor, but was still able to watch Yan carving a line into his shirt. Next to it, I saw some others. I tried to count them, it where more then six or seven in total. The last thing I heard was Yan, who repeated that he used to have a pet once...


2. My Message

For all we know, The Group is a loose cooperation of at least three shady characters. Its leader's name is Kurtzen. One member seems to be an Ylian, the other is a Dermorian. As I understood it, their way of seeking victims is as follows:

- Hang around public places, inspecting and talking to young females that their boss might like.
- Having a trip to their boss, asking him whether this or that girl would be a good choice.
- Coming back to the tavern to wait for the victim.
- Scaring their victim incredibly cruelly, making her run away.
- Kidnapping her from or killing her in a less public place she fled to.

In these days, DO NOT TRUST anyone who stares at you in the tavern, who maybe speaks to you or buys you a drink, EXCEPT YOU KNOW HIM. In my opinion, young and weak females are not secure anymore in Hydlaa, maybe not throughout Yliakum! If you think you are being followed, or that you met someone matching my descriptions, RUN and report them to a guard. There is reason to believe they have already killed MORE THEN SEVEN innocent girls!

The guards will do their best to catch them I'm sure, but for now, we have only little knowledge about them (see 3). DO NOT walk alone at night, DO NOT visit dark places, DO NOT visit public places without strong company. If you don't think you can defend yourself against two strong warriors, DO NOT TAKE ANY RISK. The Group is inpredictable and dangerous.

I do not know what would have happened to me if they did not kill me. They seem to know some rare and possibly very dangerous Dark Way magic. They are not to mess with. They have no scruples.

I hope they can be identified and arrested quickly. Until that happens, my message to everyone reading this is: Take good care of yourself, never walk alone, do not trust people you do not know!


3, Summary

These are the facts I can tell you about The Group:

- At least three members
- I am not the first victim
- No respect for guards or laws
- Boss is called "Kurtzen"
- Wearing commoners' clothing
- Own bone handled knifes
- Lack of any respect of life
- Disrespect neutrality of Kada-El's
- Use rare Dark Way magic
- Choose their victims one day prior to the attack
- Creep you out before harming you physically

Regarding the last to points, I would recommend you to report anyone to the guards you either meet in the same place twice in close time by chance, or who you think are trying to scare you. DON'T TRY TO PLAY THE HERO! Their Dark Way magic might be too dangerous to risk it!


OOC: This book has been written by Jamona Shikon, who is played by me. She only shows it to friends or people she thinks she can trust. There are only four original copies of this book, owned by Jamona and three friends. The book reflects her experiences. I've been asked to post the book here. I've no idea if my post is well-formed, please have mercy.

Pages: [1] 2