Class:Person

CamNet - das Wiki
ClassPerson
Class
TitlePerson
Änderungsdatum07.11.2017 12:30:36
Store availablesmw
Smw classPerson
NamespaceMAIN
All persons in the game, PCs and NPCs.
Pages
ModuleModule:Person
ClassModule:Person/class
ConfigModule:Person/config
TemplateTemplate:Person
FormForm:Person
CategoryCategory:Personen
GardeningCategory:Persons with erroneous input
Identity
imagePortrait
displaynameAnzeigename
fullnameVoller Name
coterieKlüngelmitglied
playerSpieler
typeFigurentyp
sectSekte
clanClan
sireErzeuger
generationGeneration
original_generationUrsprüngliche Generation
embracedErzeugt
embraced_is_estimateGeschätztes Erzeugungsjahr
apparent_ageScheinbares Alter
residenceWohnort
officeAmt
havenZuflucht
chapter_of_first_appearanceErstauftritt
diedVernichtet
died_in_chapterAbgetreten in Kapitel
introtextIntrotext
abilitiesBekannte Fähigkeiten
disciplinesDisziplinen
discipline_nekromantieNekromantische Pfade
discipline_thaumaturgieThaumaturgische Pfade
backgroundHintergrund
relationsVerbindungen
agendaAgenda
commentsKommentare
antitribuAntitribu
courtAspekt
displaytitleSeitentitel
kithKith
possesses_abilityFähigkeiten
Properties
NumberAppears_of_age
PageFirst_appeared_in_chapter
TextGoes_by_name
BooleanHas_an_estimated_year_of_embrace
TextHas_display_title
PageHas_haven_in
TextHolds_the_office_of
BooleanIs_an_antitribu
TextIs_identified_by_classengine_through
PageIs_member_of_clan
TextIs_member_of_class
PageIs_member_of_kith
BooleanIs_member_of_the_coterie
TextIs_of_character_type
NumberIs_of_generation
TextIs_played_by
BooleanMet_final_death
PageMet_final_death_in_chapter
TextPossesses_ability
PageResides_in
PageShows_allegiance_to
PageShows_allegiance_to_court
PageUses_image
TextWas_baptized
DateWas_embraced_on
NumberWas_originally_of_generation
PageWas_sired_by

All persons in the game, PCs and NPCs.

Your 2do checklist

  1. Yes You created all your modules
  2. Yes You created all auxilliary pages
  3. No Please autocreate your properties! The following are missing:
  4. No You are not finished yet, please tend to your tasks.

Class identity

Parameter Label Severity Cardinality Description
image Portrait suggested single Portrait für die Person. Wenn du das Bild direkt hochlädst, vergiss bitte nicht, es in die Kategorie:Porträts aufzunehmen!
displayname Anzeigename suggested single Unter dem Namen ist die Person bekannt, diesen Namen verwendet sie meistens.
fullname Voller Name suggested single Voller Name der Person. Mit Titeln, Zweitnamen, von und zu und allem drum und dran (Go Team Gangrel!)
coterie Klüngelmitglied mandatory single Ist die Person ein Mitglied des Klüngels oder gehört er zum Rest der Welt?
player Spieler mandatory single Wer ist der/die darstellende/r Spieler/in?
type Figurentyp mandatory single Welcher Figurentyp liegt vor (Vampir, Ghul, Gargyl, ...)?
sect Sekte mandatory single Welcher Sekte ist die Person angehörig?
clan Clan suggested single Welchem Clan ist der Vampir angehörig
sire Erzeuger suggested single Hier wird der Erzeuger, Schöpfer, Erschaffer, etc. der Figur eingetragen.
generation Generation suggested single Die aktuelle Generation des Vampirs. Je niedriger, desto mächtiger.
original_generation Ursprüngliche Generation suggested single Die ursprüngliche Generation des Vampirs. Sollte entweder der aktuellen entsprechen oder wir haben von der verbotenen Frucht genascht. Tztztz.
embraced Erzeugt suggested single Das Jahr oder Datum des Kusses, der Erzeugung, der Schöpfung, etc. Kann beliebig genau sein, wenn entsprechende Informationen vorliegen.

Beispiel: Genaues Datum 1.12.1999. Etwas ungenauer (nur der Monat): 12.1999. Ungenau: 1999. Falls das Datum nur ganz grob bekannt ist, hier die Schätzung angeben und im nächsten Feld den Haken setzen. Bsp: 2300 BC.

embraced_is_estimate Geschätztes Erzeugungsjahr suggested single Für den Fall, dass das Erzeugungsdatum geschätzt ist, dies hier ankreuzen
apparent_age Scheinbares Alter suggested single Wie alt erscheint die Person zu sein? Unabhängig von der Tagesform und Gewicht an aufgetragenem Makeup.

Und kein Schummeln ihr Nosferatu: Maske der tausend Gesichter zählt HIER nicht.

residence Wohnort suggested single Heimatstadt der Person. Also: Die Stadt, in der die Person gerade ihren Hauptwohnsitz hat.
office Amt suggested single Hat die Person in seiner Stadt ein besonderes Amt inne?
haven Zuflucht suggested list Hat der Charkater eine oder mehrere bekannte Zuflüchte? Sind die vielleicht sogar im CamNet beschrieben? Hier bitte verlinken. Oder einfach nur eintragen.
chapter_of_first_appearance Erstauftritt suggested single In diesem Kapitel ist die Person das erste Mal in Erscheinung getreten.
died Vernichtet suggested single Ist die Person bereits verstorben (in echt und wirklich), endgültig tot, vernichtet, zerstört, etc?
died_in_chapter Abgetreten in Kapitel mandatory single Hat in diesem Kapitel seinen endgültigen Tod gefunden.
introtext Introtext optional single Für den Fall, dass du auf deiner Seite Text oberhalb des automatisch generierten Werdegangs stehen haben möchstest, ist das hier der Ort, ihn zu platzieren.
abilities Bekannte Fähigkeiten suggested single Hier können manuell Disziplinkenntnisse oder andere Fähigkeiten der Person hinterlegt werden.

Bitte eine unsortierte Liste verwenden (die mit den * an jedem Zeilenanfang), damit die automatisch hinzugefügten Informationen optisch passend wirken.

disciplines Disziplinen suggested list Hier bitte die Disziplinen ankreuzen, in denen die Person mindestens einen Rang hat.
discipline_nekromantie Nekromantische Pfade suggested list In welchen nekromantischen Pfaden verfügt die Person über mindestens einen Rang?
discipline_thaumaturgie Thaumaturgische Pfade suggested list In welchen thaumaturgischen Pfaden verfügt die Person über mindestens einen Rang?
background Hintergrund suggested single Hier können manuell Hintergrundinformationen zu der Person hinterlegt werden.

Bitte eine unsortierte Liste verwenden (die mit den * an jedem Zeilenanfang), damit die automatisch hinzugefügten Informationen optisch passend wirken.

relations Verbindungen suggested single Hier können manuell Informationen zu Beziehungen der Person mit anderen Personen oder Organisationen hinterlegt werden.

Bitte eine unsortierte Liste verwenden (die mit den * an jedem Zeilenanfang), damit die automatisch hinzugefügten Informationen optisch passend wirken.

agenda Agenda suggested single Hier können manuell Informationen über die Agenda der Person hinterlegt werden.

Bitte eine unsortierte Liste verwenden (die mit den * an jedem Zeilenanfang), damit die automatisch hinzugefügten Informationen optisch passend wirken.

comments Kommentare suggested single Hier können manuell Kommentare zu der Person hinterlegt werden.
antitribu Antitribu suggested single Die Figur ist ein Antitribu, wenn Sie einer Sekte angehörig ist, der nicht der Hauptteil ihres Clans angehört. Beispiel: Liz ist Lasombra antitribu.
court Aspekt mandatory single Fae oder Fomori?
displaytitle Seitentitel suggested single Der Name, der als Linktext für die Personenseite verwendet wird
kith Kith suggested single Welcher Rasse ist die/der Kithain angehörig?
possesses_ability Fähigkeiten suggested list Eine Liste von (im System hinterlegten) Fähigkeiten, über die die Person verfügt.

Data Storage

Semantic properties used in this class:

Hier klicken für eine tabellarische Übersicht!

Page status

This status may be inaccurate, if you just created pages. In that case, run jobs and clear cache of this page.

Module:Person Yes
Module:Person/doc Yes
Module:Person/class Yes
Module:Person/class/doc Yes
Module:Person/config Yes
Module:Person/config/doc Yes
Template:Person Yes
Template:Person/doc Yes
Form:Person Yes
Category:Personen Yes
Category:Persons with erroneous input Yes
Property pages for your smw store
Property:Appears_of_age Yes
Property:First_appeared_in_chapter Yes
Property:Goes_by_name Yes
Property:Has_an_estimated_year_of_embrace Yes
Property:Has_display_title Yes
Property:Has_haven_in Yes
Property:Holds_the_office_of Yes
Property:Is_an_antitribu Yes
Property:Is_identified_by_classengine_through Yes
Property:Is_member_of_clan Yes
Property:Is_member_of_class Yes
Property:Is_member_of_kith No
Property:Is_member_of_the_coterie Yes
Property:Is_of_character_type Yes
Property:Is_of_generation Yes
Property:Is_played_by Yes
Property:Met_final_death Yes
Property:Met_final_death_in_chapter Yes
Property:Possesses_ability Yes
Property:Resides_in Yes
Property:Shows_allegiance_to Yes
Property:Shows_allegiance_to_court No
Property:Uses_image Yes
Property:Was_baptized Yes
Property:Was_embraced_on Yes
Property:Was_originally_of_generation Yes
Property:Was_sired_by Yes

Page autocreation

Use the following buttons ao create the corresponding pages automatically:

Create properties:
Requested on 29.02.2016 22:21:12
Create all pages:
Create automatically!

Page contents

Contents of Module:Person [EDIT]
local p = {}
local Class = require('Module:Person/class')
local getArgs = require('Module:Arguments').getArgs

function p.categorize(frame)
	return tostring(Class:categorize())
end

function p.categoryPage(frame)
	return tostring(Class:categoryPage())
end

function p.explainDataStore(frame)
	return tostring(Class:explainDataStore())
end

function p.gardeningCategoryPage(frame)
	return tostring(Class:gardeningCategoryPage())
end

function p.sfGenerateForm(frame)
	return tostring(Class:sfGenerateForm())
end

function p.sfGenerateFormEntry(frame)
	return tostring(Class:sfGenerateFormEntry())
end

function p.sfGenerateFormLink(frame)
	return tostring(Class:sfGenerateFormLink())
end

function p.templateDocumentation(frame)
	return tostring(Class:templateDocumentation())
end

function p.main(frame)
	local args = getArgs(frame)
	local me = Class:new(mw.title.getCurrentTitle().prefixedText)
	me:initFromArgs(args)
	me:storeData()
	me:addInfobox()
	me:addPageBody()
 	return me:render()
end

return p
Contents of Module:Person/doc [EDIT]
{{documentation subpage}}
{{module rating|protected}}{{lua|Module:Arguments|Module:Person/class}}
<!-- Categories go at the bottom of this page and interwikis go in Wikidata. -->

This module implements template {{tl|Person}}.

== Usage ==
{{pre|
{{tli|Person|''main''}}
}}

It also provides some additional "gateways" to some of [[Module:Person/class]]'s static methods:
{{pre|
{{tli|Person|''categorize''}}
{{tli|Person|''categoryPage''}}
{{tli|Person|''explainDataStore''}}
{{tli|Person|''gardeningCategoryPage''}}
{{tli|Person|''sfGenerateForm''}}
{{tli|Person|''sfGenerateFormEntry''}}
{{tli|Person|''sfGenerateFormLink''}}
{{tli|Person|''templateDocumentation''}}
}}

{{#invoke:Person|categorize}}<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox||
<!-- Note: The class engine sets the category "CamNet modules" automatically in function categorize -->
<!-- Categories go here if you wish an additional category to that set in {{module rating}} above automatically. -->

}}</includeonly><h2>Maintenanace notes</h2>
This page was created by [[Module:Classgenerator]] and belongs to [[Class:Person]].
local FoundationClass = require('Module:Foundationclass')
local ClassDebug = require('Module:Debug/class')

-- ****************************************************************
-- *                         inheritance                          *
-- ****************************************************************
local ClassPerson = FoundationClass:subclass('Person')
-- setting class's configuration data
ClassPerson.static.myConfiguration = mw.loadData('Module:Person/config')	-- this means, modules on subpages have a / in their names
--   being in a static method, use self.myConfiguration
--   being in a private method, that knows self or in a public method, use self.class.myConfiguration

-- ****************************************************************
-- *                          properties                          *
-- ****************************************************************

-- **************** initialization of table for private properties
local _private = setmetatable({}, {__mode = 'k'})   -- weak table storing all private attributes

-- **************** declaration of public static properties
-- ClassPerson.static.myPropertyModule = require('Module:extern')
-- ClassPerson.static.staticProperty = ' '

-- remember the static classes provided by Foundationclass:
-- ClassPerson.globalConfig
-- ClassPerson.myCargoUtil
-- ClassPerson.mySmwUtil
-- ClassPerson.myTableTools
-- ClassPerson.myYesno

-- **************** declaration of (global) private properties
-- for properties you should rather use constructor and _private[self]. this only, if you need a private class property
-- you should, however predeclare private methods here
local _debug	-- private method declared later
local _privateMethodAhead	-- declaration ahead, so this private method can be used in the constructor and in other private methods

-- ***************************************************************
-- *                           methods                           *
-- ***************************************************************
 
-- **************** declaration of static methods
function ClassPerson:initialize(uid, superhandler)
	local _CFG = self.class.myConfiguration
	FoundationClass.initialize(self, uid, superhandler)
	_private[self] = {
		dbg = ClassDebug:new(tostring(self.class) .. ': id ' .. uid),
	}
	_debug(self, 1, ' ClassPerson: done initializing object "' .. uid ..'", from ' .. tostring(self))
end

-- use use self.myConfiguration to access your configuration in a static method
function ClassPerson.static:aStaticMethod(var)
	_debug(self, 1, 'entering ClassPerson.static:aStaticMethod() to do something, from ' .. tostring(self))
end

function ClassPerson.static:mySfDynamicFieldAttribute(fieldname, attribute, value)
	_debug(self, 1, 'entering ClassPerson.static:mySfDynamicFieldAttribute(fieldname, attribute, value), from ' .. tostring(self))
	_debug(self, 2, ' with parameters "' .. fieldname .. '", "' .. attribute .. '" and a ' .. type(value) .. ' value')
	-- function that can process any attribute/value pair just before rendering the semantic forms field
	-- usually done, to generate a dynamic 'default' value
	-- keep in mind: you can completely disable a form field, if you return true on attribute "disable".
	-- 	however, this causes the parameter to not show at all, neither in the form, nor in processing
	local val = value
	if fieldname == 'this' and attribute == 'that' then
		val = 'whatever ' .. val
	end
	return val	-- this value will be used as new value for field's attribute
end

-- **************** declaration of private methods
-- use self.class.myConfiguration to access your configuration in a public or a private method that is called by a public method
_debug = function (self, level, text)
	if _private[self] and _private[self].dbg then
		local debugLevel = FoundationClass.globalConfig.debugLevel or self.class.myConfiguration.global.debugLevel
		if debugLevel and level <= debugLevel then
			_private[self].dbg:log(level, text)
		end
	else
		local debugLevel = FoundationClass.globalConfig.debugLevel or self.myConfiguration.global.debugLevel
		if debugLevel and level <= debugLevel then
			ClassDebug:log(level, text, tostring(self) .. '.static')
		end
	end
end

local _privateMethod = function (self)
	_debug(self, 1, 'entering private _privateMethod() to do something, from ' .. tostring(self))
end

-- **************** declaration of public methods
-- use self.class.myConfiguration to access your configuration in a public method
function ClassPerson:addInfobox()
	_debug(self, 1, 'entering ClassPerson:addInfobox(), from ' .. tostring(self))
	if self:goodToGo() then
		local _CFG = self.class.myConfiguration
		local coreData = self:getCoreData()
		local ib_args = {
			bodyclass = 'infobox_name',
			aboveclass = 'objtitle titletext',
			headerclass = 'headertext',
			labelstyle = 'width: 30%;',
			datastyle = 'width: 70%;',
			title = self:getUid(),
            above = _CFG.global.entityTitle,
			subheader = nil,
			label1 = _CFG.parameter.name.label,
			data1 = coreData.name and coreData.name or nil,
			header1 = nil,
		}
		self:addOutput(require('Module:Infobox').infobox(ib_args))
		return true
	end
	return false
end

function ClassPerson:addPageBody()
	_debug(self, 1, 'entering ClassPerson:addPageBody(), from ' .. tostring(self))
	_debug(self, 2, ' rendering errors and warnings and adding them to output')
	local frame = mw.getCurrentFrame()
	self:addOutput(self:renderErrors())
	self:addOutput(self:renderWarnings())
	if self:goodToGo() then
		self:addOutput('No output yet')
		return true
	end
	return false
end

function ClassPerson:myArgumentProcessing(coreData)
	_debug(self, 1, 'entering ClassPerson:myArgumentProcessing(args) to process coreData, from ' .. tostring(self))
	-- function that performs some individual transformation args --> coreData
	-- remember: you can add warnings to your output with self:addWarning(warning). the page, however, will not be put in any gardening category. for that, use self:addError()
	-- hint: for conversion bool values, this is useful: FoundationClass.myYesno
	local coreData = coreData
	return coreData	-- this is your new coreData.
end

function ClassPerson:myDataAdjustments(data)
	_debug(self, 1, 'entering ClassPerson:myDataAdjustments(data) to convert data from data store into data suitable for argument processing, from ' .. tostring(self))
	-- function that performs some individual transformation datastore data into argument data
	-- keep in mind, when using smw data store, that data is indexed by parameter names, not properties
	-- hint: for conversion bool values, this is useful: FoundationClass.myYesno
	local data = data
	return data	-- this is your new data table, being passed on to initFromArgs and subsequently to plausibility testing
end

function ClassPerson:myPlausibilityTest(args)
	_debug(self, 1, 'entering ClassPerson:myPlausibilityTest(args) to test arguments, from ' .. tostring(self))
	-- function that performs the individual plausibility tests
	-- note: before you access a field args.fieldname you should check for existance
	-- use self:addError(text); this also puts the page in its class's gardening category
	return false	-- return value will be ignored. but if you add any error, the object's initialization will fail with the error
end

function ClassPerson:myStashAdjustments(stash, storeType)
	_debug(self, 1, 'entering ClassPerson:myStashAdjustments(stash) to do some minor adjustments on data before storing, from ' .. tostring(self))
	-- function that alters the stash before storing the data. if necessary, you can complate skip storing this stash, if you return false or the empty table {}
	-- storeType is the actual method of storage for this call. either 'cargo', or 'smw'
	-- hint: for conversion bool values, this is useful: FoundationClass.myYesno
	local stash = stash
	return stash	-- this is your new stash. this will be stored. it has format (fieldname: value)
end

function ClassPerson:method()
	_debug(self, 1, 'entering ClassPerson:method() to do something, from ' .. tostring(self))
	return true
end

return ClassPerson
{{documentation subpage}}
{{module rating|protected}}{{lua|Module:Debug/class|Module:Foundationclass|Module:Person/config}}
<!-- Categories go at the bottom of this page and interwikis go in Wikidata. -->

This is a Class Module. It implements a class in Lua using [[Module:Middleclass]] and the template class [[Module:Foundationclass]]. This class provides methods for PURPOSE.

== Usage ==
{{code|lang=lua|code=
local name = args[1] or args.name or mw.title.getCurrentTitle().rootText
local Class = require('Module:Person/class')
local me = Class:new(mw.title.getCurrentTitle().prefixedText)
me:initFromArgs(args)
me:storeData()
me:addInfobox()
me:addPageBody()
return me:render()
}}

{{#invoke:Person|explainDataStore}}

== Methods ==
=== Constructor ===
==== new(uid, superhandler) ====
Creates a new Object for the class.
;uid
:variable, optional
:used to identify the object
;superhandler
:object of childclass of Foundationclass, optional
:supply the superhandler, if you instanciate this object within another object. the instanciated object will pass errors and warnings to the superhandler and forgo adding the object category
;return
:object, of the class

=== public methods ===
==== addInfobox() ====
If no errors and data is present, adds an infobox to the object's output.
{{small|
;return
:boolean, whether adding was successful or not
}}

==== addPageBody() ====
Adds a page body (all content besides the infobox) to the object's output: Errors and Warnings, sample configuration, statistics, ... Of course, only if there is data.
{{small|
;return
:boolean, whether adding was successful or not
}}

==== myArgumentProcessing(coreData) ====
Performs the individual argument processing in [[#initFromArgs(args)|initFromArgs(args)]] right before inititializing it.
{{small|
;coreData
:table, mandatory
:the core data of the object. the one to process individually before initialization
;return
:table, the new core data array to be used
}}

==== myDataAdjustments(data) ====
Performs a transformation form data (coming from the datastore) into data used for argument processing. This is called by [[#initFromData(data)|initFromData(data)]] (for smw: after property to parameter conversion)
and is directly passed to [[#initFromArgs(args)|initFromArgs(args)]] and subsequently plausibility test.
{{small|
;data
:table, mandatory
:a data table coming directly from the data store
;return
:table, the new data table suiteable for argument processing
}}

==== myPlausibilityTest(args) ====
Performs the individual plausibility tests in [[#initFromArgs(args)|initFromArgs(args)]] before entering the initialization part.
NOTE: The return value will be ignored. If this finds errors, it must add them to the list of errors via [[#addError(errortext)|addError(errortext)]].
{{small|
;args
:table, mandatory
:arguments passed to the template to be checked
;return
:boolean, whether the object is plausible or not.
}}

==== myStashAdjustments(stash, storeType) ====
Performs the adjusts the stash in [[#storeData()|storeData()]] right before storing it.
{{small|
;stash
:table, mandatory
:the array of data to be saved (in the form fieldname: value)
;storeType
:string, mandatory
:type of storage method used with the current call (either 'cargo' or 'swm'). In case you use both stores and your stash adjustment differs with each of this methods
;return
:boolean, the new stash
}}

=== static methods ===
==== ClassPerson:mySfDynamicFieldAttribute(fieldname, attribute, value) ====
For some semantic form fields there are attribute values, that are not static, thus can not be provided at forehand in the [[#Configuration Data|configuration file]]. This method does the trick to adapt them at runtime shortly before the field is rendered.
Essentially: the method checks, if it has a special rule for the pair fieldname:attribute and if so, calculates the new value. if not, the old value is returned. Note, that you can completely disable a form field with this when you 
return false on attribute "disable".
{{small|
;fieldname
:string, mandatory
:the form field's name, needed to match current paring to an existing special treatment rule
;attribute
:string, mandatory
:the form field's attribute, needed to match current paring to an existing special treatment rule
;value
:variable, mandatory
:the value, that is already provided in the [[#Configuration Data|configuration file]]. this will be adapted by the method, if there is a special rule for the pair fieldname:attribute.
;return
:string, the value to be used forthwith (which can be the old one or a freshly calculated)
}}

=== private methods ===
==== _debug(self, level, text) ====
Adds output to the internal debug log.
{{small|
;self
:object, me
;level
:int; mandatory
:debug level for the message
;text
:string; mandatory
:debug message text
;return
:void
}}

== Properties ==
=== static ===
See also [[#Static Properties|Static Properties]]
;ClassPerson.myConfiguration
:this is your configuration. It is devided in several section, each a
:table, holds configuration data found in Module:Person/config
::'''WARNING:''' This is a read only table and besides functions ''pairs()'' and ''ipairs()'' nothing else will work on it, especially not the functions of the table library!
<ul>
* form, table, holds data used to create the form. here are some of them:
** formButtons, table, which buttons should be printed at the bottom
** fieldOrder, table, in which order the form fields should appear (note: only fields listed here will be added to the form)
* global, table, holds some global configuration data
* parameter, table, holds all data about all parameter used in the module (be they form only, data store only or normal). The table has the form ''paramname = { table of paramdata }''. The tables for the parameter have data as follows:
** cardinality, string, mandatory, one of singe or list
** cargo_type, string, optional, if the parameter is to be stored in cargo, add the field type here (one of Page, Text, Integer, Float, Date, Datetime, Boolean (which should be provided as 1 or 0), Coordinates, Wikitext, File, String, URL, or Email)
** description, string, mandatory, a description of this parameter
** label, string, mandatory, the label used in the form and the template documentation
** property_name, string, optional, if the parameter is to be stored in smw, add the property name here
** property_type, string, optional, if the parameter is to be stored in smw, add the property type here (defaults to page)
** severity, string, optional, if provided one of mandatory, suggested
** sf, table, optional, used to add more attributes to the semantic forms field. ref [[Module:SFfield/config]] for all possible attributes. Note that the table is of type attribute_name : value. Value can be of type string, integer, boolean, and (in case of 'show on select') a table. Please note, that the attribute name cannot contain a " " (space). Use the underscore instead.
** td_default, string, optional, if you want a default value to be indicated in the template data section on the documentation page, add it here
** td_type, string, optional, if the parameter should be present in the template documentation page, fill this field. all possible values are listed [https://www.mediawiki.org/wiki/Extension:TemplateData#Format here]
** values, table, optional, if you want the possible values to be restricted to a specific set, fill this table
* template, table, holds some data used only in the template
</ul>
;ClassPerson.publicStaticProperty
:type, explanation
;_privateStaticProperty
:type, explanation

=== private ===
Note: all private properties are stored in table ''_private[self]''. _private is a static array that is indexed by ''self'', so the table ''_private[self]'' holds all properties for instance ''self''.
;dbg
:object, my instance of [[Module:Debug/class]] for debugging purposes. only present afer first call of [[#_debug(self, level, text)|_debug(self, level, text)]]

== Configuration Data ==
This class holds its control data in [[Module:{{ROOTPAGENAME}}/config]]. 

== Inheritance ==
'''Note:''' You still reference those either by self:publicMethod() or ClassPerson:staticMethod() and ClassPerson.staticProperty respectively!
=== Methods ===
{{MediaWiki:Classengine-content-documentation-methods}}
=== Static Properties ===
{{MediaWiki:Classengine-content-documentation-properties}}

{{#invoke:Person|categorize}}<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox||
<!-- Note: the class engine sets the categories "CamNet modules" and "Lua class modules" automatically in categorize -->
<!-- Categories go here if you wish an additional category to that set in {{module rating}} above automatically. -->

}}</includeonly><h2>Maintenanace notes</h2>
This page was created by [[Module:Classgenerator]] and belongs to [[Class:Person]].
-- This is the configuration for ClassPerson. It has been autocreated by Module:Classgenerator.
-- It is strongly suggested, you use the form to make alterations and copy the new configuration an this page!

local superglobal = mw.loadData('Module:Foundationclass/globalconfig')

local global = {
	debugLevel = false,
	entityTitle = 'Person',
	description = 'All persons in the game, PCs and NPCs.',
	category = 'Personen',
	gardeningCategory = 'Persons with erroneous input',
	namespace = nil,
	cargoTable = nil,
	smwUseStorage = true,
	smwIsSubobject = false,
	restrictedTo = nil,
	delimiter = ',',
}

local form = {
	enable = true,
	name = 'Person',
	teaserText = 'Mit diesem Formular kannst du eine Person erstellen oder bearbeiten - SC wie NSC gleichermaßen.\n' ..
		'Sollte bereits eine Person mit dem Namen vorhanden sein, wirst du auf die ensprechende Seite weitergeleitet und kannst sie bearbeiten.',
	typeCreateLink = 'forminput',
	createInfotext = 'Gibt bitte den Namen der zu bearbeitenden/erstellenden Person ein: ',
	createInputPlaceholder = 'Name der Person',
	createInputQueryString = nil,
	createLinkPageName = nil,
	createLinkQueryString = nil,
	createLinkType = nil,
	labelCreate = 'Person einpflegen',
	labelEdit = 'Person bearbeiten',
	headerText = 'Mit diesem Formular kannst du eine Person erstellen oder bearbeiten - SC wie NSC gleichermaßen.',
	notification = nil,
	sectionList = nil,
	allowsFreeText = false,
	freeTextPreload = nil,
	buttons = { 'save', 'preview', 'changes', 'cancel', },
	fieldSize = 80,
	textareaAttributes = {	-- the defaults for your textarea fields
		cols = 120,
		rows = 10,
		autogrow = true,
		editor = 'wikieditor',
	},
	fieldOrder = { 'image', 'displayname', 'fullname', 'coterie', 'player', 'type', 'sect', 'clan', 'sire', 'generation', 'original_generation', 'embraced', 'embraced_is_estimate', 'apparent_age', 'residence', 'office', 'haven', 'chapter_of_first_appearance', 'died', 'died_in_chapter', 'introtext', 'abilities', 'disciplines', 'discipline_nekromantie', 'discipline_thaumaturgie', 'background', 'relations', 'agenda', 'comments', },
	tab_maindata = { 'image', 'displayname', 'fullname', 'coterie', 'player', 'type', 'sect', 'clan', 'sire', 'generation', 'original_generation', 'embraced', 'embraced_is_estimate', 'apparent_age', 'residence', 'office', 'haven', 'chapter_of_first_appearance', 'died', 'died_in_chapter', 'introtext', },
	tab_abilities = {'abilities', 'disciplines', 'discipline_nekromantie', 'discipline_thaumaturgie',},
	tab_information = {'background', 'relations', 'agenda', 'comments',},
}

local template = {
	name = 'Person',
	templateDocumentationSeeAlso = { 'Chapter', },
}

local parameter = {
	image = {
		cardinality = 'single',
		description = 'Portrait für die Person. Wenn du das Bild direkt hochlädst, vergiss bitte nicht, es in die Kategorie:Porträts aufzunehmen!',
		label = 'Portrait',
		property_name = 'Uses_image',
		property_type = 'Page',
		severity = 'suggested',
		sf = {
			image_preview = true,
			input_type = 'text with autocomplete',
			uploadable = true,
			values_from_category = 'Porträts',
		},
		td_type = 'wiki-file-name',
	},
	displayname = {
		cardinality = 'single',
		description = 'Unter dem Namen ist die Person bekannt, diesen Namen verwendet sie meistens.',
		label = 'Anzeigename',
		property_name = 'Goes_by_name',
		property_type = 'Text',
		severity = 'suggested',
		sf = {
			input_type = 'text',
			placeholder = 'Anzeigename',
			unique_for_category = 'Personen',
		},
		td_type = 'line',
	},
	displaytitle = {
		cardinality = 'single',
		description = 'Der Name, der als Linktext für die Personenseite verwendet wird',
		label = 'Seitentitel',
		property_name = 'Has_display_title',
		property_type = 'Text',
		severity = 'suggested',
	},
	fullname = {
		cardinality = 'single',
		description = 'Voller Name der Person. Mit Titeln, Zweitnamen, von und zu und allem drum und dran (Go Team Gangrel!)',
		label = 'Voller Name',
		property_name = 'Was_baptized',
		property_type = 'Text',
		severity = 'suggested',
		sf = {
			default = false,
			input_type = 'text',
			placeholder = 'voller Name',
		},
		td_type = 'line',
	},
	coterie = {
		cardinality = 'single',
		description = 'Ist die Person ein Mitglied des Klüngels oder gehört er zum Rest der Welt?',
		label = 'Klüngelmitglied',
		property_name = 'Is_member_of_the_coterie',
		property_type = 'Boolean',
		severity = 'mandatory',
		sf = {
			default = 'Nein',
			input_type = 'radiobutton',
			show_on_select = { Ja = { 'introtext', }, },
		},
		td_type = 'boolean',
		values = { 'Ja', 'Nein', },
	},
	player = {
		cardinality = 'single',
		description = 'Wer ist der/die darstellende/r Spieler/in?',
		label = 'Spieler',
		property_name = 'Is_played_by',
		property_type = 'Text',
		severity = 'mandatory',
		sf = {
			existing_values_only = false,
			input_type = 'combobox',
			placeholder = 'Darsteller',
		},
		td_type = 'line',
		values = { 'Achim', 'Andreas', 'Angela', 'Arne', 'Axel', 'Bianca', 'Claudia', 'Dirk', 'SL', 'Tobi', 'Tobias', 'Ulli', 'N/A', },
	},
	type = {
		cardinality = 'single',
		description = 'Welcher Figurentyp liegt vor (Vampir, Ghoul, Gargyl, ...)?',
		label = 'Figurentyp',
		property_name = 'Is_of_character_type',
		property_type = 'Text',
		severity = 'mandatory',
		sf = {
			default = 'Vampir',
			input_type = 'dropdown',
			show_on_select = { Gargyl = { 'sire', 'embraced', 'embraced_is_estimate', 'office', 'sect', 'disciplines', 'discipline_nekromantie', 'discipline_thaumaturgie', }, Vampir = { 'sect', 'antitribu', 'sire', 'generation', 'original_generation', 'embraced', 'embraced_is_estimate', 'office', 'clan', 'disciplines', 'discipline_nekromantie', 'discipline_thaumaturgie', }, Ghul = { 'sect', 'sire', 'embraced', 'embraced_is_estimate', 'office', 'disciplines', 'discipline_nekromantie', 'discipline_thaumaturgie', }, },
		},
		td_type = 'line',
		values = { 'Vampir', 'Ghul', 'Mensch', 'Gargyl', 'Werwolf', 'Magus', 'Wiedergänger', 'Geist', 'Changeling', 'Fee', 'Jäger', },
	},
	sect = {
		cardinality = 'single',
		description = 'Welcher Sekte ist die Person angehörig?',
		label = 'Sekte',
		property_name = 'Shows_allegiance_to',
		property_type = 'Page',
		severity = 'mandatory',
		sf = {
			default = 'Camarilla',
			input_type = 'dropdown',
		},
		td_type = 'wiki-page-name',
		values = { 'Anarchen', 'Camarilla', 'Sabbat', 'Unabhängig', },
	},
	clan = {
		cardinality = 'single',
		description = 'Welchem Clan ist der Vampir angehörig',
		label = 'Clan',
		property_name = 'Is_member_of_clan',
		property_type = 'Page',
		severity = 'mandatory',
		sf = {
			existing_values_only = true,
			input_type = 'combobox',
			placeholder = 'Bitte angeben',
		},
		td_type = 'wiki-page-name',
		values = { 'Assamiten', 'Brujah', 'Gangrel', 'Giovanni', 'Lasombra', 'Malkavianer', 'Nosferatu', 'Ravnos', 'Jünger des Set', 'Toreador', 'Tremere', 'Tzimisce', 'Ventrue', 'Kappadozianer', 'Salubri', 'Kyasid', 'Caitiff', 'Harbinger of Skulls', 'Pander', 'Töchter der Kakophonie', },
	},
	antitribu = {
		cardinality = 'single',
		description = 'Die Figur ist ein Antitribu, wenn Sie einer Sekte angehörig ist, der nicht der Hauptteil ihres Clans angehört. Beispiel: Liz ist Lasombra antitribu.',
		label = 'Antitribu',
		property_name = 'Is_an_antitribu',
		property_type = 'Boolean',
		severity = 'suggested',
	},
	sire = {
		cardinality = 'single',
		description = 'Hier wird der Erzeuger, Schöpfer, Erschaffer, etc. der Figur eingetragen.',
		label = 'Erzeuger',
		property_name = 'Was_sired_by',
		property_type = 'Page',
		severity = 'suggested',
		sf = {
			existing_values_only = false,
			input_type = 'combobox',
			mapping_property = 'Has display title',
			placeholder = 'Erzeugername',
			values_from_category = 'Personen',
		},
		td_type = 'wiki-page-name',
	},
	generation = {
		cardinality = 'single',
		description = 'Die aktuelle Generation des Vampirs. Je niedriger, desto mächtiger.',
		label = 'Generation',
		property_name = 'Is_of_generation',
		property_type = 'Number',
		severity = 'suggested',
		sf = {
			base_type = 'text',
			input_type = 'regexp',
			maxlength = 2,
			message = 'Bitte einen Zahlenwert zwischen 1 und 15 angeben',
			regexp = '^1?[0-9]$',
			size = 10,
		},
		td_type = 'number',
	},
	original_generation = {
		cardinality = 'single',
		description = 'Die ursprüngliche Generation des Vampirs. Sollte entweder der aktuellen entsprechen oder wir haben von der verbotenen Frucht genascht. Tztztz.',
		label = 'Ursprüngliche Generation',
		property_name = 'Was_originally_of_generation',
		property_type = 'Number',
		severity = 'suggested',
		sf = {
			base_type = 'text',
			input_type = 'regexp',
			maxlength = 2,
			message = 'Bitte einen Zahlenwert zwischen 1 und 15 angeben',
			regexp = '^1?[0-9]$',
			size = 10,
		},
		td_type = 'number',
	},
	embraced = {
		cardinality = 'single',
		description = 'Das Jahr oder Datum des Kusses, der Erzeugung, der Schöpfung, etc. Kann beliebig genau sein, wenn entsprechende Informationen vorliegen.\n' ..
			'Beispiel: Genaues Datum 1.12.1999. Etwas ungenauer (nur der Monat): 12.1999. Ungenau: 1999.\n' ..
			'Falls das Datum nur ganz grob bekannt ist, hier die Schätzung angeben und im nächsten Feld den Haken setzen. Bsp: 2300 BC.',
		label = 'Erzeugt',
		property_name = 'Was_embraced_on',
		property_type = 'Date',
		severity = 'suggested',
		sf = {
			input_type = 'text',
			maxlength = 10,
			size = 10,
		},
		td_type = 'date',
	},
	embraced_is_estimate = {
		cardinality = 'single',
		description = 'Für den Fall, dass das Erzeugungsdatum geschätzt ist, dies hier ankreuzen',
		label = 'Geschätztes Erzeugungsjahr',
		property_name = 'Has_an_estimated_year_of_embrace',
		property_type = 'Boolean',
		severity = 'suggested',
		sf = {
			input_type = 'checkbox',
		},
		td_type = 'boolean',
	},
	apparent_age = {
		cardinality = 'single',
		description = 'Wie alt erscheint die Person zu sein? Unabhängig von der Tagesform und Gewicht an aufgetragenem Makeup.\n' ..
			'Und kein Schummeln ihr Nosferatu: Maske der tausend Gesichter zählt HIER nicht.',
		label = 'Scheinbares Alter',
		property_name = 'Appears_of_age',
		property_type = 'Number',
		severity = 'suggested',
		sf = {
			base_type = 'text',
			input_type = 'regexp',
			maxlength = 3,
			message = 'Bitte eine Zahl zwischen 10 und 199 angeben.',
			regexp = '^1?[0-9][0-9]+$',
			size = 10,
		},
		td_type = 'number',
	},
	residence = {
		cardinality = 'single',
		description = 'Heimatstadt der Person. Also: Die Stadt, in der die Person gerade ihren Hauptwohnsitz hat.',
		label = 'Wohnort',
		property_name = 'Resides_in',
		property_type = 'Page',
		severity = 'suggested',
		sf = {
			existing_values_only = false,
			input_type = 'combobox',
			placeholder = 'Stadt',
			values_from_category = 'Städte',
		},
		td_type = 'wiki-page-name',
	},
	office = {
		cardinality = 'single',
		description = 'Hat die Person in seiner Stadt ein besonderes Amt inne?',
		label = 'Amt',
		property_name = 'Holds_the_office_of',
		property_type = 'Text',
		severity = 'suggested',
		sf = {
			existing_values_only = true,
			input_type = 'combobox',
			placeholder = 'Bezeichnung',
		},
		td_type = 'line',
		values = { 'Justikar', 'Archont', 'Prinz', 'Seneschall', 'Primogen', 'Major Urbanus', 'Sheriff', 'Geißel', 'Harpyie', 'Hüter des Elysiums', 'Regent', 'Priscus', 'Inquisitor', 'Kardinal', 'Erzbischof', 'Bischof', 'Templer', 'Duktus', 'Priester', 'Monitor', 'Baron', 'Zensor', 'Botschafter', },
	},
	haven = {
		cardinality = 'list',
		description = 'Hat der Charkater eine oder mehrere bekannte Zuflüchte? Sind die vielleicht sogar im CamNet beschrieben? Hier bitte verlinken. Oder einfach nur eintragen.',
		label = 'Zuflucht',
		property_name = 'Has_haven_in',
		property_type = 'Page',
		severity = 'suggested',
		sf = {
			existing_values_only = false,
			input_type = 'tokens',
			values_from_category = 'Schauplätze',
		},
		td_type = 'wiki-page-name',
	},
	chapter_of_first_appearance = {
		cardinality = 'single',
		description = 'In diesem Kapitel ist die Person das erste Mal in Erscheinung getreten.',
		label = 'Erstauftritt',
		property_name = 'First_appeared_in_chapter',
		property_type = 'Page',
		severity = 'mandatory',
		sf = {
			default = false,
			existing_values_only = true,
			input_type = 'combobox',
			mapping_property = 'Has_display_title',
			placeholder = 'Kapitelbezeichnung',
			values_from_category = 'Kapitel',
		},
		td_type = 'wiki-page-name',
	},
	died = {
		cardinality = 'single',
		description = 'Ist die Person bereits verstorben (in echt und wirklich), endgültig tot, vernichtet, zerstört, etc?',
		label = 'Vernichtet',
		property_name = 'Met_final_death',
		property_type = 'Boolean',
		severity = 'suggested',
		sf = {
			input_type = 'checkbox',
			show_on_select = { 'died_in_chapter', },
		},
		td_type = 'line',
	},
	died_in_chapter = {
		cardinality = 'single',
		description = 'Hat in diesem Kapitel seinen endgültigen Tod gefunden.',
		label = 'Abgetreten in Kapitel',
		property_name = 'Met_final_death_in_chapter',
		property_type = 'Page',
		severity = 'mandatory',
		sf = {
			existing_values_only = true,
			input_type = 'combobox',
			mapping_property = 'Has display title',
			placeholder = 'Kapitelbezeichnung',
			values_from_category = 'Kapitel',
		},
		td_type = 'wiki-page-name',
	},
	introtext = {
		cardinality = 'single',
		description = 'Für den Fall, dass du auf deiner Seite Text oberhalb des automatisch generierten Werdegangs stehen haben möchstest, ist das hier der Ort, ihn zu platzieren.',
		label = 'Introtext',
		severity = 'optional',
		sf = {
			autogrow = true,
			editor = 'wikieditor',
			input_type = 'textarea',
			rows = 10,
		},
		td_type = 'string',
	},
	abilities = {
		cardinality = 'single',
		description = 'Hier können manuell Disziplinkenntnisse oder andere Fähigkeiten der Person hinterlegt werden.\n' ..
			'Bitte eine unsortierte Liste verwenden (die mit den * an jedem Zeilenanfang), damit die automatisch hinzugefügten Informationen optisch passend wirken.',
		label = 'Bekannte Fähigkeiten',
		severity = 'suggested',
		sf = {
			editor = 'wikieditor',
			input_type = 'textarea',
			rows = 10,
		},
		td_type = 'string',
	},
	disciplines = {
		cardinality = 'list',
		description = 'Hier bitte die Disziplinen ankreuzen, in denen die Person mindestens einen Rang hat.',
		label = 'Disziplinen',
		severity = 'suggested',
		sf = {
			input_type = 'checkboxes',
			mapping_property = 'Has display title',
			show_on_select = { Thaumaturgie = { 'discipline_thaumaturgie', }, Nekromantie = { 'discipline_nekromantie', }, },
			values_from_concept = 'Disciplines',
		},
		td_type = 'line',
	},
	discipline_nekromantie = {
		cardinality = 'list',
		description = 'In welchen nekromantischen Pfaden verfügt die Person über mindestens einen Rang?',
		label = 'Nekromantische Pfade',
		severity = 'suggested',
		sf = {
			input_type = 'checkboxes',
			mapping_property = 'Has display title',
			show_on_select = { 'false', },
			values_from_concept = 'Necromancy',
		},
		td_type = 'line',
	},
	discipline_thaumaturgie = {
		cardinality = 'list',
		description = 'In welchen thaumaturgischen Pfaden verfügt die Person über mindestens einen Rang?',
		label = 'Thaumaturgische Pfade',
		severity = 'suggested',
		sf = {
			input_type = 'checkboxes',
			mapping_property = 'Has display title',
			show_on_select = { 'false', },
			values_from_concept = 'Thaumaturgy',
		},
		td_type = 'line',
	},
	background = {
		cardinality = 'single',
		description = 'Hier können manuell Hintergrundinformationen zu der Person hinterlegt werden.\n' ..
			'Bitte eine unsortierte Liste verwenden (die mit den * an jedem Zeilenanfang), damit die automatisch hinzugefügten Informationen optisch passend wirken.',
		label = 'Hintergrund',
		severity = 'suggested',
		sf = {
			editor = 'wikieditor',
			input_type = 'textarea',
			rows = 10,
		},
		td_type = 'string',
	},
	relations = {
		cardinality = 'single',
		description = 'Hier können manuell Informationen zu Beziehungen der Person mit anderen Personen oder Organisationen hinterlegt werden.\n' ..
			'Bitte eine unsortierte Liste verwenden (die mit den * an jedem Zeilenanfang), damit die automatisch hinzugefügten Informationen optisch passend wirken.',
		label = 'Verbindungen',
		severity = 'suggested',
		sf = {
			editor = 'wikieditor',
			input_type = 'textarea',
			rows = 10,
		},
		td_type = 'string',
	},
	agenda = {
		cardinality = 'single',
		description = 'Hier können manuell Informationen über die Agenda der Person hinterlegt werden.\n' ..
			'Bitte eine unsortierte Liste verwenden (die mit den * an jedem Zeilenanfang), damit die automatisch hinzugefügten Informationen optisch passend wirken.',
		label = 'Agenda',
		severity = 'suggested',
		sf = {
			editor = 'wikieditor',
			input_type = 'textarea',
			rows = 10,
		},
		td_type = 'string',
	},
	comments = {
		cardinality = 'single',
		description = 'Hier können manuell Kommentare zu der Person hinterlegt werden.',
		label = 'Kommentare',
		severity = 'suggested',
		sf = {
			editor = 'wikieditor',
			input_type = 'textarea',
			rows = 10,
		},
		td_type = 'string',
	},
	possesses_ability = {
		cardinality = 'list',
		description = 'Eine Liste von (im System hinterlegten) Fähigkeiten, über die die Person verfügt.',
		label = 'Fähigkeiten',
		property_name = 'Possesses_ability',
		property_type = 'Text',
		severity = 'suggested',
	},
}

return {
	form = form,
	global = global,
	parameter = parameter,
	template = template,
}
{{documentation subpage}}
{{module rating|protected}}{{lua|Module:Foundationclass/globalconfig}}

<!-- Categories go at the bottom of this page and interwikis go in Wikidata. -->

This module provides data for [[Module:Person/class]]

== Usage ==

{{code|lang=lua|code=local cfg = mw.loadData('Module:Person/config')}}

{{#invoke:Person|categorize}}<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox||
<!-- Note: The class engine sets the categories "CamNet modules" and "Lua class modules" automatically in function categorize -->
<!-- Categories go here if you wish an additional category to that set in {{module rating}} above automatically. -->

}}</includeonly><h2>Maintenanace notes</h2>
This page was created by [[Module:Classgenerator]] and belongs to [[Class:Person]].

{{ombox| type=content | text = It is strongly advised, to not edit this page but to use [https://{{SERVERNAME}}{{SCRIPTPATH}}/Special:FormEdit/Classgenerator/Class%3APerson the Classgenerator form] instead! After that, use your new configuration to replace the contents of this page.}}
Contents of Template:Person [EDIT]
{{#invoke:Person|main|{{BASEPAGENAME}}}}<noinclude>
{{documentation}}

</noinclude>
{{Documentation subpage}}
<!-- Categories go at the bottom of this page. -->

{{#invoke:Person|templateDocumentation}}

{{#invoke:Person|categorize}}<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox | |
<!-- Note: The class engine sets the category "CamNet templates" automatically in function categorize -->
<!-- ADD CATEGORIES AFTER THIS LINE -->

}}</includeonly><h2>Maintenanace notes</h2>
This page was created by [[Module:Classgenerator]] and belongs to [[Class:Person]].
Contents of Form:Person [EDIT]
<noinclude>{{#invoke:Person|sfGenerateFormEntry}}{{#invoke:Person|categorize}}</noinclude>
<includeonly>{{#invoke:Person|sfGenerateForm}}</includeonly>
<!-- Note: The class engine sets category "CamNet forms" automatically in function categorize -->
Contents of Category:Personen [EDIT]
{{#invoke:Person|categoryPage}}{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet" automatically in function categorize -->
{{#invoke:Person|gardeningCategoryPage}}{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet entities with erroneous input" automatically in function categorize -->

All property pages

== Description ==
<div class="description-box">Wie alt erscheint die Person zu sein? Unabhängig von der Tagesform und Gewicht an aufgetragenem Makeup.
Und kein Schummeln ihr Nosferatu: Maske der tausend Gesichter zählt HIER nicht.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Number]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">In diesem Kapitel ist die Person das erste Mal in Erscheinung getreten.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Unter dem Namen ist die Person bekannt, diesen Namen verwendet sie meistens.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Text]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Für den Fall, dass das Erzeugungsdatum geschätzt ist, dies hier ankreuzen</div>

== Type ==
* This is an attribute of the datatype [[Has type::Boolean]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Der Name, der als Linktext für die Personenseite verwendet wird</div>

== Type ==
* This is an attribute of the datatype [[Has type::Text]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Hat der Charkater eine oder mehrere bekannte Zuflüchte? Sind die vielleicht sogar im CamNet beschrieben? Hier bitte verlinken. Oder einfach nur eintragen.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Hat die Person in seiner Stadt ein besonderes Amt inne?</div>

== Type ==
* This is an attribute of the datatype [[Has type::Text]].

== Allowed values ==
The allowed values are:
* [[Allows value::Justikar]]
* [[Allows value::Archont]]
* [[Allows value::Prinz]]
* [[Allows value::Seneschall]]
* [[Allows value::Primogen]]
* [[Allows value::Major Urbanus]]
* [[Allows value::Sheriff]]
* [[Allows value::Deputy]]
* [[Allows value::Geißel]]
* [[Allows value::Harpyie]]
* [[Allows value::Hüter des Elysiums]]
* [[Allows value::Regent]]
* [[Allows value::Priscus]]
* [[Allows value::Inquisitor]]
* [[Allows value::Kardinal]]
* [[Allows value::Erzbischof]]
* [[Allows value::Bischof]]
* [[Allows value::Templer]]
* [[Allows value::Duktus]]
* [[Allows value::Priester]]
* [[Allows value::Monitor]]
* [[Allows value::Baron]]
* [[Allows value::Zensor]]
* [[Allows value::Botschafter]]
* [[Allows value::Obmann]]
* [[Allows value::Prätor]]

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Die Figur ist ein Antitribu, wenn Sie einer Sekte angehörig ist, der nicht der Hauptteil ihres Clans angehört. Beispiel: Liz ist Lasombra antitribu.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Boolean]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Automatisch hinzugefügt! Wird verwendet, um individuelle Objekte innerhalb der Klasse zu identifizieren.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Text]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Welchem Clan ist der Vampir angehörig</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
The allowed values are:
* [[Allows value::Assamiten]]
* [[Allows value::Brujah]]
* [[Allows value::Gangrel]]
* [[Allows value::Giovanni]]
* [[Allows value::Lasombra]]
* [[Allows value::Malkavianer]]
* [[Allows value::Nosferatu]]
* [[Allows value::Ravnos]]
* [[Allows value::Jünger des Set]]
* [[Allows value::Toreador]]
* [[Allows value::Tremere]]
* [[Allows value::Tzimisce]]
* [[Allows value::Ventrue]]
* [[Allows value::Caitiff]]
* [[Allows value::Dünnblütige]]
* [[Allows value::Kappadozianer]]
* [[Allows value::Salubri]]
* [[Allows value::Kyasid]]
* [[Allows value::Caitiff]]
* [[Allows value::Harbinger of Skulls]]
* [[Allows value::Pander]]
* [[Allows value::Töchter der Kakophonie]]

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Automatisch hinzugefügt! Wird verwendet, um Mitglieder dieser Klasse zu finden (funktioniert auch, ohne dass eine Kategorie definiert wird und auch fur subobjects)</div>

== Type ==
* This is an attribute of the datatype [[Has type::Text]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Welcher Rasse ist die/der Kithain angehörig?</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
The allowed values are:
* [[Allows value::Heinzelmännchen]]
* [[Allows value::Eshu]]
* [[Allows value::Pixies]]
* [[Allows value::Sidhe]]
* [[Allows value::Troll]]
* [[Allows value::Nöcker]]
* [[Allows value::Pooka]]
* [[Allows value::Rotkappe]]
* [[Allows value::Satyr]]
* [[Allows value::Sluagh]]

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Ist die Person ein Mitglied des Klüngels oder gehört er zum Rest der Welt?</div>

== Type ==
* This is an attribute of the datatype [[Has type::Boolean]].

== Allowed values ==
The allowed values are:
* [[Allows value::Ja]]
* [[Allows value::Nein]]

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Welcher Figurentyp liegt vor (Vampir, Ghul, Gargyl, ...)?</div>

== Type ==
* This is an attribute of the datatype [[Has type::Text]].

== Allowed values ==
The allowed values are:
* [[Allows value::Vampir]]
* [[Allows value::Ghul]]
* [[Allows value::Mensch]]
* [[Allows value::Gargyl]]
* [[Allows value::Werwolf]]
* [[Allows value::Magus]]
* [[Allows value::Wiedergänger]]
* [[Allows value::Geist]]
* [[Allows value::Kithain]]
* [[Allows value::Jäger]]
* [[Allows value::KI]]
* [[Allows value::Kuei-Jin]]

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Die aktuelle Generation des Vampirs. Je niedriger, desto mächtiger.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Number]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Wer ist der/die darstellende/r Spieler/in?</div>

== Type ==
* This is an attribute of the datatype [[Has type::Text]].

== Allowed values ==
The allowed values are:
* [[Allows value::Achim]]
* [[Allows value::Andreas]]
* [[Allows value::Angela]]
* [[Allows value::Arne]]
* [[Allows value::Axel]]
* [[Allows value::Bianca]]
* [[Allows value::Claudia]]
* [[Allows value::Dirk]]
* [[Allows value::Lukas]]
* [[Allows value::SL]]
* [[Allows value::Tobi]]
* [[Allows value::Tobias]]
* [[Allows value::Ulli]]
* [[Allows value::N/A]]

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Ist die Person bereits verstorben (in echt und wirklich), endgültig tot, vernichtet, zerstört, etc?</div>

== Type ==
* This is an attribute of the datatype [[Has type::Boolean]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Hat in diesem Kapitel seinen endgültigen Tod gefunden.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Eine Liste von (im System hinterlegten) Fähigkeiten, über die die Person verfügt.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Text]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Heimatstadt der Person. Also: Die Stadt, in der die Person gerade ihren Hauptwohnsitz hat.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Welcher Sekte ist die Person angehörig?</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
The allowed values are:
* [[Allows value::Anarchen]]
* [[Allows value::Camarilla]]
* [[Allows value::Sabbat]]
* [[Allows value::Unabhängig]]

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Fae oder Fomori?</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
The allowed values are:
* [[Allows value::Fae]]
* [[Allows value::Fomori]]

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Portrait für die Person. Wenn du das Bild direkt hochlädst, vergiss bitte nicht, es in die Kategorie:Porträts aufzunehmen!</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Voller Name der Person. Mit Titeln, Zweitnamen, von und zu und allem drum und dran (Go Team Gangrel!)</div>

== Type ==
* This is an attribute of the datatype [[Has type::Text]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Das Jahr oder Datum des Kusses, der Erzeugung, der Schöpfung, etc. Kann beliebig genau sein, wenn entsprechende Informationen vorliegen.
Beispiel: Genaues Datum 1.12.1999. Etwas ungenauer (nur der Monat): 12.1999. Ungenau: 1999.
Falls das Datum nur ganz grob bekannt ist, hier die Schätzung angeben und im nächsten Feld den Haken setzen. Bsp: 2300 BC.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Date]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Die ursprüngliche Generation des Vampirs. Sollte entweder der aktuellen entsprechen oder wir haben von der verbotenen Frucht genascht. Tztztz.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Number]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->
== Description ==
<div class="description-box">Hier wird der Erzeuger, Schöpfer, Erschaffer, etc. der Figur eingetragen.</div>

== Type ==
* This is an attribute of the datatype [[Has type::Page]].

== Allowed values ==
No restriction given

{{#invoke:Person|categorize}}
<!-- Note: The class engine sets category "CamNet properties" automatically in function categorize -->