<?PHP
if($VISITOR->isLogged())
{
$errors = new Errors();
$didCreateCharacter = false;
$createCharacterConfig = Website::getPageConfig(array('character', 'create'));
if($createCharacterConfig->getErrorsCount() > 0)
new Error_Critic('', 'Cannot load config file of page <b>/character/create</b>', $createCharacterConfig->getErrorsList());
$characterNameConfig = Website::getConfig(array('player', 'name'));
if($createCharacterConfig->getErrorsCount() > 0)
new Error_Critic('', 'Cannot load config file of page <b>/character/create</b>', $characterNameConfig->getErrorsList());
$createCharacterForm = new Form();
$field = new FormField_Text();
$field->setName('characterName');
if($characterNameConfig->isSetKey('nameMaximumLenght'))
$field->setMaxLenght($characterNameConfig->getValue('nameMaximumLenght'));
if($createCharacterConfig->isSetKey('formSize'))
$field->setSize($createCharacterConfig->getValue('formSize'));
$field->setLoadUserValue(true);
$createCharacterForm->addField($field);
if(count($createCharacterConfig->getValue('vocationsAllowed')) > 1)
{
foreach($createCharacterConfig->getValue('vocationsAllowed') as $id => $data)
{
$field = new FormField_Radio();
$field->setName('characterVocation');
$field->setValue($id);
$field->setLoadUserValue(true);
$createCharacterForm->addField($field, $id);
}
}
else
{
$field = new FormField_Hidden();
$field->setName('characterVocation');
$field->setValue(array_shift(array_keys($createCharacterConfig->getValue('vocationsAllowed'))));
$createCharacterForm->addField($field);
}
if(count($createCharacterConfig->getValue('sexAllowed')) > 1)
{
foreach($createCharacterConfig->getValue('sexAllowed') as $id => $data)
{
$field = new FormField_Radio();
$field->setName('characterSex');
$field->setValue($id);
$field->setLoadUserValue(true);
$createCharacterForm->addField($field, $id);
}
}
else
{
$field = new FormField_Hidden();
$field->setName('characterSex');
$field->setValue(array_shift(array_values($createCharacterConfig->getValue('sexAllowed'))));
$createCharacterForm->addField($field);
}
if($createCharacterConfig->getValue('townsUserSelect') && count($createCharacterConfig->getValue('townsAllowed')) > 1)
{
foreach($createCharacterConfig->getValue('townsAllowed') as $id => $data)
{
$field = new FormField_Radio();
$field->setName('characterTown');
$field->setValue($id);
$field->setLoadUserValue(true);
$createCharacterForm->addField($field, $id);
}
}
else
{
$field = new FormField_Hidden();
$field->setName('characterTown');
$field->setValue(array_shift(array_values($createCharacterConfig->getValue('townsAllowed'))));
$createCharacterForm->addField($field);
}
$field = new FormField_Submit();
$field->setName('create');
$field->setValue('Create Character');
$field->setStyle('font-size', '24px');
$createCharacterForm->addField($field);
if($createCharacterForm->isSetFieldValue('create'))
{
if(!$createCharacterForm->isSetFieldValue('characterName') || $createCharacterForm->getFieldValue('characterName') == '')
$errors->addError('', 'You must fill field <b>Name</b>');
if(!$createCharacterForm->isSetFieldValue('characterVocation') || $createCharacterForm->getFieldValue('characterVocation') == '')
$errors->addError('', 'You must select <b>Vocation</b>');
if(!$createCharacterForm->isSetFieldValue('characterSex') || $createCharacterForm->getFieldValue('characterSex') == '')
$errors->addError('', 'You must select <b>Sex</b>');
if(!$createCharacterForm->isSetFieldValue('characterTown') || $createCharacterForm->getFieldValue('characterTown') == '')
$errors->addError('', 'You must select <b>Town</b>');
if($errors->isErrorsListEmpty())
{
list($isValidName, $nameError, $nameFixed) = Functions::isValidNewPlayerName($createCharacterForm->getFieldValue('characterName'));
if(!$isValidName)
$errors->addError('', $nameError);
elseif($nameFixed != $createCharacterForm->getFieldValue('characterName'))
{
$errors->addError('', 'Server rules changed your name to <b>' . htmlspecialchars($nameFixed) . '</b>, you cannot use <b><i>' . $createCharacterForm->getFieldValue('characterName') . ' </i></b><br />If you accept it, press Create Character');
$createCharacterForm->getField('characterName')->setValue($nameFixed);
}
}
if($errors->isErrorsListEmpty() && !array_key_exists($createCharacterForm->getFieldValue('characterVocation'), $createCharacterConfig->getValue('vocationsAllowed')))
$errors->addError('', '<b>Vocation</b> has invalid value. Unexpected error.');
if($errors->isErrorsListEmpty() && !in_array($createCharacterForm->getFieldValue('characterSex'), $createCharacterConfig->getValue('sexAllowed')))
$errors->addError('', '<b>Sex</b> has invalid value. Unexpected error.');
if($errors->isErrorsListEmpty() && $createCharacterConfig->getValue('townsUserSelect') && !in_array($createCharacterForm->getFieldValue('characterTown'), $createCharacterConfig->getValue('townsAllowed')))
$errors->addError('', '<b>Town</b> has invalid value. Unexpected error.');
if($errors->isErrorsListEmpty())
{
$isAlreadyCharacter = new Player($createCharacterForm->getFieldValue('characterName'), Player::LOADTYPE_NAME);
if(!$isAlreadyCharacter->isLoaded())
{
$characters = $createCharacterConfig->getValue('vocationsAllowed');
$newPlayer = new Player($characters[$createCharacterForm->getFieldValue('characterVocation')]['characterToCopy'], Player::LOADTYPE_NAME);
$newPlayer->setName(ucwords(trim($createCharacterForm->getFieldValue('characterName'))));
$newPlayer->setAccountId($VISITOR->getAccount()->getId());
if($createCharacterConfig->isSetKey('newPlayerGroupId'))
$newPlayer->setGroupId($createCharacterConfig->getValue('newPlayerGroupId'));
else
$newPlayer->setGroupId(1);
$newPlayer->setCreateIP(ip2long($_SERVER['REMOTE_ADDR']));
$newPlayer->setCreateDate(time());
if($createCharacterConfig->isSetKey('sexUserSelect') && $createCharacterConfig->getValue('sexUserSelect'))
$newPlayer->setSex($createCharacterForm->getFieldValue('characterSex'));
else
{
$_sex = $createCharacterConfig->getValue('sexAllowed');
$newPlayer->setSex($_towns[rand(0,(count($_towns) - 1))]);
}
if($createCharacterConfig->isSetKey('townsUserSelect') && $createCharacterConfig->getValue('townsUserSelect'))
$newPlayer->setTown($createCharacterForm->getFieldValue('characterTown'));
else
{
$_towns = $createCharacterConfig->getValue('townsAllowed');
$newPlayer->setTown($_towns[rand(0,(count($_towns) - 1))]);
}
if($createCharacterConfig->isSetKey('townsSpawnInTemple') && $createCharacterConfig->getValue('townsSpawnInTemple'))
{
$newPlayer->setPosX(0);
$newPlayer->setPosY(0);
$newPlayer->setPosZ(0);
}
$newPlayer->setId(null); // insert on save
$newPlayer->save(true);
$didCreateCharacter = true;
echo '<div class="bigTitle">Character <b>' . $newPlayer->getName() . '</b> created</div><br />';
echo 'Now you can <a href="' . new Link('account', array('view')) . '">GO BACK</a>';
}
else
$errors->addError('', 'Character with name <b>' . htmlspecialchars($createCharacterForm->getFieldValue('characterName')) . '</b> already exists');
}
}
if(!$didCreateCharacter)
{
echo '<div class="bigTitle">Create character</div><br />';
Display::printErrors($errors->getErrorsList());
echo $createCharacterForm->getString_Form();
$table = new Table();
$row = new TableRow();
$row->addCell(new TableCell('Name:'));
$row->addCell(new TableCell($createCharacterForm->getField('characterName')));
$table->addRow($row);
if(count($createCharacterConfig->getValue('vocationsAllowed')) > 1)
{
$row = new TableRow();
$row->addCell(new TableCell('Vocation:'));
$cell = new TableCell();
$_table_content = array();
foreach($createCharacterConfig->getValue('vocationsAllowed') as $id => $data)
$_table_content[] = $createCharacterForm->getField('characterVocation', $id) . ' ' . $data['name'];
$cell->setContent(implode('<br />', $_table_content));
$cell->setStyle('width', '150px');
$row->addCell($cell);
$table->addRow($row);
}
else
echo $createCharacterForm->getField('characterVocation');
if(count($createCharacterConfig->getValue('sexAllowed')) > 1)
{
$row = new TableRow();
$row->addCell(new TableCell('Sex:'));
$cell = new TableCell();
$_table_content = array();
foreach($createCharacterConfig->getValue('sexAllowed') as $id => $data)
$_table_content[] = $createCharacterForm->getField('characterSex', $id) . ' ' . $WEB->getSexName($id);
$cell->setContent(implode('<br />', $_table_content));
$cell->setStyle('width', '150px');
$row->addCell($cell);
$table->addRow($row);
}
else
echo $createCharacterForm->getField('characterSex');
if($createCharacterConfig->getValue('townsUserSelect') && count($createCharacterConfig->getValue('townsAllowed')) > 1)
{
$row = new TableRow();
$row->addCell(new TableCell('Town:'));
$cell = new TableCell();
$_table_content = array();
foreach($createCharacterConfig->getValue('townsAllowed') as $id => $data)
$_table_content[] = $createCharacterForm->getField('characterTown', $id) . ' ' . $WEB->getTownName($id);
$cell->setContent(implode('<br />', $_table_content));
$cell->setStyle('width', '150px');
$row->addCell($cell);
$table->addRow($row);
}
else
echo $createCharacterForm->getField('characterTown');
$row = new TableRow();
$row->addCell(new TableCell(''));
$row->addCell(new TableCell($createCharacterForm->getField('create')));
$row->setStyle('height', '40px');
$row->setStyle('vertical-align' , 'bottom');
$table->addRow($row);
echo $table;
echo $createCharacterForm->getString_FormEnd();
}
}
else
Website::redirect('', 'account', array('login', Website::saveSessionData()));
?>