Merge with develop

--HG--
branch : feature-material-editor
hg/feature/material-editor
kaetemi 9 years ago
commit ef9228df16

@ -9,38 +9,64 @@ MACRO(FIND_CORRECT_LUA_VERSION)
IF(LUABIND_LIBRARY_RELEASE MATCHES "\\.so")
INCLUDE(CheckDepends)
SET(LUA52_LIBRARY "liblua5.2")
CHECK_LINKED_LIBRARY(LUABIND_LIBRARY_RELEASE LUA52_LIBRARY LUALIB_FOUND)
# check for Lua 5.3
SET(LUA53_LIBRARIES liblua5.3 liblua-5.3 liblua.so.5.3)
FOREACH(_LIB ${LUA53_LIBRARIES})
CHECK_LINKED_LIBRARY(LUABIND_LIBRARY_RELEASE _LIB LUALIB_FOUND)
IF(LUALIB_FOUND)
MESSAGE(STATUS "Luabind is using Lua 5.3")
FIND_PACKAGE(Lua53 REQUIRED)
BREAK()
ENDIF()
ENDFOREACH()
IF(NOT LUALIB_FOUND)
# fedora (v20)
SET(LUA52_LIBRARY "liblua-5.2")
CHECK_LINKED_LIBRARY(LUABIND_LIBRARY_RELEASE LUA52_LIBRARY LUALIB_FOUND)
ENDIF(NOT LUALIB_FOUND)
# check for Lua 5.2
SET(LUA52_LIBRARIES liblua5.2 liblua-5.2 liblua.so.5.2)
IF(LUALIB_FOUND)
MESSAGE(STATUS "Luabind is using Lua 5.2")
FIND_PACKAGE(Lua52 REQUIRED)
ELSE(LUALIB_FOUND)
SET(LUA51_LIBRARY "liblua5.1")
CHECK_LINKED_LIBRARY(LUABIND_LIBRARY_RELEASE LUA51_LIBRARY LUALIB_FOUND)
FOREACH(_LIB ${LUA52_LIBRARIES})
CHECK_LINKED_LIBRARY(LUABIND_LIBRARY_RELEASE _LIB LUALIB_FOUND)
IF(LUALIB_FOUND)
MESSAGE(STATUS "Luabind is using Lua 5.2")
FIND_PACKAGE(Lua52 REQUIRED)
BREAK()
ENDIF()
ENDFOREACH()
ENDIF()
IF(LUALIB_FOUND)
MESSAGE(STATUS "Luabind is using Lua 5.1")
FIND_PACKAGE(Lua51 REQUIRED)
ELSE(LUALIB_FOUND)
SET(LUA50_LIBRARY "liblua5.0")
CHECK_LINKED_LIBRARY(LUABIND_LIBRARY_RELEASE LUA50_LIBRARY LUALIB_FOUND)
IF(NOT LUALIB_FOUND)
# check for Lua 5.1
SET(LUA51_LIBRARIES liblua5.1 liblua-5.1 liblua.so.5.1)
FOREACH(_LIB ${LUA51_LIBRARIES})
CHECK_LINKED_LIBRARY(LUABIND_LIBRARY_RELEASE _LIB LUALIB_FOUND)
IF(LUALIB_FOUND)
MESSAGE(STATUS "Luabind is using Lua 5.1")
FIND_PACKAGE(Lua51 REQUIRED)
BREAK()
ENDIF()
ENDFOREACH()
ENDIF()
IF(NOT LUALIB_FOUND)
# check for Lua 5.0
SET(LUA50_LIBRARIES liblua5.0 liblua-5.0 liblua.so.5.0)
FOREACH(_LIB ${LUA50_LIBRARIES})
CHECK_LINKED_LIBRARY(LUABIND_LIBRARY_RELEASE _LIB LUALIB_FOUND)
IF(LUALIB_FOUND)
MESSAGE(STATUS "Luabind is using Lua 5.0")
FIND_PACKAGE(Lua50 REQUIRED)
ELSE(LUALIB_FOUND)
MESSAGE(FATAL_ERROR "Can't determine Lua version used by Luabind")
ENDIF(LUALIB_FOUND)
ENDIF(LUALIB_FOUND)
ENDIF(LUALIB_FOUND)
ELSE(LUABIND_LIBRARY_RELEASE MATCHES "\\.so")
BREAK()
ENDIF()
ENDFOREACH()
ENDIF()
IF(NOT LUALIB_FOUND)
MESSAGE(FATAL_ERROR "Can't determine Lua version used by Luabind")
ENDIF()
ELSE()
# TODO: find a way to detect Lua version
IF(WITH_LUA53)
FIND_PACKAGE(Lua53 REQUIRED)

@ -63,6 +63,8 @@ namespace NLGUI
uint getTextId(uint i) const;
uint getTextPos(uint nId) const;
const ucstring &getTexture(uint i) const;
void setGrayed(uint i, bool g);
const bool getGrayed(uint i) const;
void removeText(uint nPos);
uint getNumTexts() const {return (uint)_Texts.size();}
void sortText();
@ -132,6 +134,7 @@ namespace NLGUI
sint32 _NotLinkedToDBSelection;
std::vector<std::pair<uint, ucstring> > _Texts;
std::vector<ucstring> _Textures;
std::vector<bool> _Grayed;
// Action Handler called on combo click
std::string _AHOnSelectStart;

@ -34,6 +34,7 @@ namespace NLGUI
class CCtrlButton;
class CCtrlScroll;
class CGroupList;
class CGroupMenu;
class CDBGroupComboBox;
class CGroupParagraph;
@ -189,6 +190,7 @@ namespace NLGUI
std::string DefaultFormTextGroup;
std::string DefaultFormTextAreaGroup;
std::string DefaultFormSelectGroup;
std::string DefaultFormSelectBoxMenuGroup;
std::string DefaultCheckBoxBitmapNormal;
std::string DefaultCheckBoxBitmapPushed;
std::string DefaultCheckBoxBitmapOver;
@ -345,6 +347,7 @@ namespace NLGUI
// Add a combo box in the current paragraph
CDBGroupComboBox *addComboBox(const std::string &templateName, const char *name);
CGroupMenu *addSelectBox(const std::string &templateName, const char *name);
// Add a button in the current paragraph. actionHandler, actionHandlerParams and tooltip can be NULL.
CCtrlButton *addButton(CCtrlButton::EType type, const std::string &name, const std::string &normalBitmap, const std::string &pushedBitmap,
@ -409,6 +412,10 @@ namespace NLGUI
double _TimeoutValue; // the timeout in seconds
double _ConnectingTimeout;
sint _RedirectsRemaining;
// Automatic page refresh
double _LastRefreshTime;
double _NextRefreshTime;
std::string _RefreshUrl;
// minimal embeded lua script support
// Note : any embeded script is executed immediately after the closing
@ -626,6 +633,10 @@ namespace NLGUI
TextArea = NULL;
Checkbox = NULL;
ComboBox = NULL;
SelectBox = NULL;
sbRBRef = NULL;
sbMultiple = false;
sbOptionDisabled = -1;
InitialSelection = 0;
}
@ -644,6 +655,19 @@ namespace NLGUI
// Combobox group
CDBGroupComboBox *ComboBox;
// Combobox with multiple selection or display size >= 2
CGroupMenu *SelectBox;
// Single or multiple selections for SelectBox
bool sbMultiple;
// Marks OPTION element as disabled
// Only valid when parsing html
sint sbOptionDisabled;
// First radio button in SelectBox if single selection
CCtrlBaseButton *sbRBRef;
// select values (for the <select> tag)
std::vector<std::string> SelectValues;
sint InitialSelection; // initial selection for the combo box

@ -346,6 +346,7 @@ namespace NLGUI
// set the minW of the RootMenu.
void setMinW(sint32 minW);
void setMinH(sint32 minH);
// Gray a line on the RootMenu
void setGrayedLine(uint line, bool g);

@ -262,6 +262,7 @@ namespace NLGUI
dirt();
_Texts.clear();
_Textures.clear();
_Grayed.clear();
}
// ***************************************************************************
@ -270,6 +271,7 @@ namespace NLGUI
dirt();
_Texts.push_back(make_pair((uint)_Texts.size(), text));
_Textures.push_back(std::string());
_Grayed.push_back(false);
}
// ***************************************************************************
@ -292,9 +294,11 @@ namespace NLGUI
{
_Texts[t+1] = _Texts[t];
_Textures[t+1] = _Textures[t];
_Grayed[t+1] = _Grayed[t];
}
_Texts[i] = make_pair(i, text);
_Textures[i] = std::string();
_Grayed[i] = false;
}
else if(i==_Texts.size())
addText(text);
@ -308,6 +312,24 @@ namespace NLGUI
_Textures[i]= texture;
}
// ***************************************************************************
void CDBGroupComboBox::setGrayed(uint i, bool g)
{
dirt();
if(i<_Grayed.size())
_Grayed[i] = g;
}
// ***************************************************************************
const bool CDBGroupComboBox::getGrayed(uint i) const
{
if(i<_Grayed.size())
return _Grayed[i];
else
return false;
}
// ***************************************************************************
void CDBGroupComboBox::removeText(uint nPos)
{
@ -316,6 +338,7 @@ namespace NLGUI
{
_Texts.erase( _Texts.begin()+nPos );
_Textures.erase( _Textures.begin()+nPos );
_Grayed.erase ( _Grayed.begin()+nPos );
}
}
@ -365,7 +388,6 @@ namespace NLGUI
return null;
}
// ***************************************************************************
void CDBGroupComboBox::setSelection(sint32 val)
{
@ -619,6 +641,7 @@ namespace NLGUI
}
groupMenu->addLine(getText(i), "combo_box_select_end", toString(i),
"", std::string(), getTexture(i).toString(), checkable);
groupMenu->setGrayedLine(i, getGrayed(i));
}

@ -26,6 +26,7 @@
#include "nel/gui/libwww.h"
#include "nel/gui/group_html.h"
#include "nel/gui/group_list.h"
#include "nel/gui/group_menu.h"
#include "nel/gui/group_container.h"
#include "nel/gui/view_link.h"
#include "nel/gui/ctrl_scroll.h"
@ -1137,6 +1138,40 @@ namespace NLGUI
}
}
break;
case HTML_META:
if (_ReadingHeadTag)
{
bool httpEquiv = present[HTML_META_HTTP_EQUIV] && value[HTML_META_HTTP_EQUIV];
bool httpContent = present[HTML_META_CONTENT] && value[HTML_META_CONTENT];
if (httpEquiv && httpContent)
{
// only first http-equiv="refresh" should be handled
if (_RefreshUrl.empty() && toLower(value[HTML_META_HTTP_EQUIV]) == "refresh")
{
const CWidgetManager::SInterfaceTimes &times = CWidgetManager::getInstance()->getInterfaceTimes();
double timeSec = times.thisFrameMs / 1000.0f;
string content(value[HTML_META_CONTENT]);
string::size_type pos = content.find_first_of(";");
if (pos == string::npos)
{
fromString(content, _NextRefreshTime);
_RefreshUrl = _URL;
}
else
{
fromString(content.substr(0, pos), _NextRefreshTime);
pos = toLower(content).find("url=");
if (pos != string::npos)
_RefreshUrl = content.substr(pos + 4);
}
_NextRefreshTime += timeSec;
}
}
}
break;
case HTML_A:
{
CStyleParams style;
@ -1691,15 +1726,50 @@ namespace NLGUI
case HTML_SELECT:
if (!(_Forms.empty()))
{
CStyleParams style;
// A select box
string name;
bool multiple = false;
sint32 size = 0;
if (present[HTML_SELECT_NAME] && value[HTML_SELECT_NAME])
name = value[HTML_SELECT_NAME];
if (present[HTML_SELECT_SIZE] && value[HTML_SELECT_SIZE])
fromString(value[HTML_SELECT_SIZE], size);
if (present[HTML_SELECT_MULTIPLE] && value[HTML_SELECT_MULTIPLE])
multiple = true;
if (present[HTML_SELECT_STYLE] && value[HTML_SELECT_STYLE])
getStyleParams(value[HTML_SELECT_STYLE], style);
CDBGroupComboBox *cb = addComboBox(DefaultFormSelectGroup, name.c_str());
CGroupHTML::CForm::CEntry entry;
entry.Name = name;
entry.ComboBox = cb;
entry.sbMultiple = multiple;
if (size > 1 || multiple)
{
entry.InitialSelection = -1;
CGroupMenu *sb = addSelectBox(DefaultFormSelectBoxMenuGroup, name.c_str());
if (sb)
{
if (size < 1)
size = 4;
if (style.Width > -1)
sb->setMinW(style.Width);
if (style.Height > -1)
sb->setMinH(style.Height);
sb->setMaxVisibleLine(size);
}
entry.SelectBox = sb;
}
else
{
CDBGroupComboBox *cb = addComboBox(DefaultFormSelectGroup, name.c_str());
entry.ComboBox = cb;
}
_Forms.back().Entries.push_back (entry);
}
break;
@ -1713,17 +1783,14 @@ namespace NLGUI
_SelectOptionStr.clear();
std::string optionValue;
bool selected = false;
if (present[HTML_OPTION_VALUE] && value[HTML_OPTION_VALUE])
optionValue = value[HTML_OPTION_VALUE];
if (present[HTML_OPTION_SELECTED] && value[HTML_OPTION_SELECTED])
selected = nlstricmp(value[HTML_OPTION_SELECTED], "selected") == 0;
_Forms.back().Entries.back().SelectValues.push_back(optionValue);
if (selected)
{
_Forms.back().Entries.back().InitialSelection = (sint)_Forms.back().Entries.back().SelectValues.size() - 1;
}
if (present[HTML_OPTION_SELECTED])
_Forms.back().Entries.back().InitialSelection = (sint)_Forms.back().Entries.back().SelectValues.size() - 1;
if (present[HTML_OPTION_DISABLED])
_Forms.back().Entries.back().sbOptionDisabled = (sint)_Forms.back().Entries.back().SelectValues.size() - 1;
}
}
_SelectOption = true;
@ -2242,7 +2309,65 @@ namespace NLGUI
CDBGroupComboBox *cb = _Forms.back().Entries.back().ComboBox;
if (cb)
{
uint lineIndex = cb->getNumTexts();
cb->addText(_SelectOptionStr);
if (_Forms.back().Entries.back().sbOptionDisabled == lineIndex)
{
cb->setGrayed(lineIndex, true);
}
}
else
{
CGroupMenu *sb = _Forms.back().Entries.back().SelectBox;
if (sb)
{
uint lineIndex = sb->getNumLine();
sb->addLine(_SelectOptionStr, "", "");
if (_Forms.back().Entries.back().sbOptionDisabled == lineIndex)
{
sb->setGrayedLine(lineIndex, true);
}
else
{
// create option line checkbox, CGroupMenu is taking ownership of the checbox
CInterfaceGroup *ig = CWidgetManager::getInstance()->getParser()->createGroupInstance("menu_checkbox", "", NULL, 0);
if (ig)
{
CCtrlButton *cb = dynamic_cast<CCtrlButton *>(ig->getCtrl("b"));
if (cb)
{
if (_Forms.back().Entries.back().sbMultiple)
{
cb->setType(CCtrlButton::ToggleButton);
cb->setTexture(DefaultCheckBoxBitmapNormal);
cb->setTexturePushed(DefaultCheckBoxBitmapPushed);
cb->setTextureOver(DefaultCheckBoxBitmapOver);
}
else
{
cb->setType(CCtrlButton::RadioButton);
cb->setTexture(DefaultRadioButtonBitmapNormal);
cb->setTexturePushed(DefaultRadioButtonBitmapPushed);
cb->setTextureOver(DefaultRadioButtonBitmapOver);
if (_Forms.back().Entries.back().sbRBRef == NULL)
_Forms.back().Entries.back().sbRBRef = cb;
cb->initRBRefFromRadioButton(_Forms.back().Entries.back().sbRBRef);
}
cb->setPushed(_Forms.back().Entries.back().InitialSelection == lineIndex);
sb->setUserGroupLeft(lineIndex, ig);
}
else
{
nlwarning("Failed to get 'b' element from 'menu_checkbox' template");
delete ig;
}
}
}
}
}
}
break;
@ -2422,6 +2547,9 @@ namespace NLGUI
_GroupListAdaptor = NULL;
_DocumentUrl = "";
_UrlFragment.clear();
_RefreshUrl.clear();
_NextRefreshTime = 0.0;
_LastRefreshTime = 0.0;
// Register
CWidgetManager::getInstance()->registerClockMsgTarget(this);
@ -2464,6 +2592,7 @@ namespace NLGUI
DefaultFormTextGroup = "edit_box_widget";
DefaultFormTextAreaGroup = "edit_box_widget_multiline";
DefaultFormSelectGroup = "html_form_select_widget";
DefaultFormSelectBoxMenuGroup = "html_form_select_box_menu_widget";
DefaultCheckBoxBitmapNormal = "checkbox_normal.tga";
DefaultCheckBoxBitmapPushed = "checkbox_pushed.tga";
DefaultCheckBoxBitmapOver = "checkbox_over.tga";
@ -3403,7 +3532,34 @@ namespace NLGUI
bool CGroupHTML::handleEvent (const NLGUI::CEventDescriptor& eventDesc)
{
bool traited = CGroupScrollText::handleEvent (eventDesc);
bool traited = false;
if (eventDesc.getType() == NLGUI::CEventDescriptor::mouse)
{
const NLGUI::CEventDescriptorMouse &mouseEvent = (const NLGUI::CEventDescriptorMouse &)eventDesc;
if (mouseEvent.getEventTypeExtended() == NLGUI::CEventDescriptorMouse::mousewheel)
{
// Check if mouse wheel event was on any of multiline select box widgets
// Must do this before CGroupScrollText
for (uint i=0; i<_Forms.size() && !traited; i++)
{
for (uint j=0; j<_Forms[i].Entries.size() && !traited; j++)
{
if (_Forms[i].Entries[j].SelectBox)
{
if (_Forms[i].Entries[j].SelectBox->handleEvent(eventDesc))
{
traited = true;
break;
}
}
}
}
}
}
if (!traited)
traited = CGroupScrollText::handleEvent (eventDesc);
if (eventDesc.getType() == NLGUI::CEventDescriptor::system)
{
@ -3413,8 +3569,15 @@ namespace NLGUI
// Handle now
handle ();
}
if (systemEvent.getEventTypeExtended() == NLGUI::CEventDescriptorSystem::activecalledonparent)
{
if (!((NLGUI::CEventDescriptorActiveCalledOnParent &) systemEvent).getActive())
{
// stop refresh when window gets hidden
_NextRefreshTime = 0;
}
}
}
return traited;
}
@ -3550,6 +3713,7 @@ namespace NLGUI
CViewText *viewText = new CViewText ("", (string("Error : ")+msg).c_str());
viewText->setColor (ErrorColor);
viewText->setModulateGlobalColor(ErrorColorGlobalColor);
viewText->setMultiLine (true);
getParagraph()->addChild (viewText);
if(!_TitlePrefix.empty())
setTitle (_TitlePrefix);
@ -3985,6 +4149,45 @@ namespace NLGUI
return NULL;
}
// ***************************************************************************
CGroupMenu *CGroupHTML::addSelectBox(const std::string &templateName, const char *name)
{
// In a paragraph ?
if (!_Paragraph)
{
newParagraph (0);
paragraphChange ();
}
// Not added ?
std::vector<std::pair<std::string,std::string> > templateParams;
templateParams.push_back(std::pair<std::string,std::string> ("id", name));
CInterfaceGroup *group = CWidgetManager::getInstance()->getParser()->createGroupInstance(templateName.c_str(),
getParagraph()->getId(), &(templateParams[0]), (uint)templateParams.size());
// Group created ?
if (group)
{
// Set the content
CGroupMenu *sb = dynamic_cast<CGroupMenu *>(group);
if (!sb)
{
nlwarning("'%s' template has bad type, CGroupMenu expected", templateName.c_str());
delete sb;
return NULL;
}
else
{
getParagraph()->addChild (sb);
paragraphChange ();
return sb;
}
}
// No group created
return NULL;
}
// ***************************************************************************
CCtrlButton *CGroupHTML::addButton(CCtrlButton::EType type, const std::string &/* name */, const std::string &normalBitmap, const std::string &pushedBitmap,
@ -4409,6 +4612,21 @@ namespace NLGUI
// handle curl downloads
checkDownloads();
// handle refresh timer
if (_NextRefreshTime > 0 && _NextRefreshTime <= (times.thisFrameMs / 1000.0f) )
{
// there might be valid uses for 0sec refresh, but two in a row is probably a mistake
if (_NextRefreshTime - _LastRefreshTime >= 1.0)
{
_LastRefreshTime = _NextRefreshTime;
doBrowse(_RefreshUrl.c_str());
}
else
nlwarning("Ignore second 0sec http-equiv refresh in a row (url '%s')", _URL.c_str());
_NextRefreshTime = 0;
}
if (_Connecting)
{
// Check timeout if needed
@ -4523,6 +4741,24 @@ namespace NLGUI
entryData.fromUtf8(form.Entries[i].SelectValues[cb->getSelection()]);
addEntry = true;
}
else if (form.Entries[i].SelectBox)
{
CGroupMenu *sb = form.Entries[i].SelectBox;
CGroupSubMenu *rootMenu = sb->getRootMenu();
if (rootMenu)
{
for(uint j=0; j<rootMenu->getNumLine(); ++j)
{
CInterfaceGroup *ig = rootMenu->getUserGroupLeft(j);
if (ig)
{
CCtrlBaseButton *cb = dynamic_cast<CCtrlBaseButton *>(ig->getCtrl("b"));
if (cb && cb->getPushed())
formfields.add(form.Entries[i].Name, form.Entries[i].SelectValues[j]);
}
}
}
}
// This is a hidden value
else
{
@ -4782,6 +5018,8 @@ namespace NLGUI
//
_Browsing = true;
_DocumentUrl = _URL;
_NextRefreshTime = 0;
_RefreshUrl.clear();
// clear content
beginBuild();
@ -5679,5 +5917,6 @@ namespace NLGUI
return ret;
}
}

@ -2496,6 +2496,17 @@ namespace NLGUI
}
}
// ------------------------------------------------------------------------------------------------
void CGroupMenu::setMinH(sint32 minH)
{
if ( _RootMenu )
{
_RootMenu->_GroupList->setMinH(minH-_RootMenu->getResizeFromChildHMargin());
_RootMenu->_GroupList->setH(minH-_RootMenu->getResizeFromChildHMargin());
_RootMenu->setH(minH-_RootMenu->getResizeFromChildHMargin());
}
}
// ------------------------------------------------------------------------------------------------
void CGroupMenu::setGrayedLine(uint line, bool g)
{

@ -1314,6 +1314,188 @@
params="value=add(@UI:PHRASE:SELECT_MEMORY,-1)" />
</group>
<tree node="gestionsets" />
<!-- second hands bar -->
<define id="gestionsets_h" value="1" />
<define id="gestionsets_v" value="2" />
<variable entry="UI:SAVE:GESTIONSETS2_MODE" type="sint32" value="0" />
<proc id="gestionsets2_proc_active">
<action handler="set" params="dblink=UI:VARIABLES:ISACTIVE:SETS2|value=1"/>
<action handler="proc" params="gestionsets2_proc_mode" />
</proc>
<proc id="gestionsets2_proc_set">
<action handler="set" params="dblink=UI:SAVE:GESTIONSETS2_MODE|value=@0"/>
<action handler="proc" params="gestionsets2_proc_mode" />
</proc>
<proc id="gestionsets2_proc_mode">
<action handler="proc" cond="eq(@UI:SAVE:GESTIONSETS2_MODE,%gestionsets_h)" params="gestionsets2_proc_horiz"/>
<action handler="proc" cond="ne(@UI:SAVE:GESTIONSETS2_MODE,%gestionsets_h)" params="gestionsets2_proc_vert"/>
</proc>
<proc id="gestionsets2_proc_vert">
<action handler="set" params="target='ui:interface:gestionsets2_menu:horiz:active'|value=1"/>
<action handler="set" params="target='ui:interface:gestionsets2_menu:vert:active'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:w'|value=68"/>
<action handler="set" params="target='ui:interface:gestionsets2:h'|value=300"/>
<action handler="set" params="target='ui:interface:gestionsets2:select_memory:active'|value=1"/>
<action handler="set" params="target='ui:interface:gestionsets2:select_memory_h:active'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:w'|value=68"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:h'|value=300"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:w'|value=68"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:h'|value=300"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s0:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s0:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s1:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s1:y'|value=-28"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s2:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s2:y'|value=-56"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s3:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s3:y'|value=-84"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s4:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s4:y'|value=-112"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s5:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s5:y'|value=-140"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s6:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s6:y'|value=-168"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s7:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s7:y'|value=-196"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s8:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s8:y'|value=-224"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s9:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s9:y'|value=-252"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s10:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s10:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s11:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s11:y'|value=-28"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s12:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s12:y'|value=-56"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s13:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s13:y'|value=-84"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s14:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s14:y'|value=-112"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s15:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s15:y'|value=-140"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s16:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s16:y'|value=-168"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s17:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s17:y'|value=-196"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s18:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s18:y'|value=-224"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s19:x'|value=26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s19:y'|value=-252"/>
</proc>
<proc id="gestionsets2_proc_horiz">
<action handler="set" params="target='ui:interface:gestionsets2_menu:horiz:active'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2_menu:vert:active'|value=1"/>
<action handler="set" params="target='ui:interface:gestionsets2:w'|value=315"/>
<action handler="set" params="target='ui:interface:gestionsets2:h'|value=52"/>
<action handler="set" params="target='ui:interface:gestionsets2:select_memory:active'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:select_memory_h:active'|value=1"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:w'|value=315"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:h'|value=52"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:w'|value=315"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:h'|value=52"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s0:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s0:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s1:x'|value=28"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s1:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s2:x'|value=56"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s2:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s3:x'|value=84"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s3:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s4:x'|value=112"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s4:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s5:x'|value=140"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s5:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s6:x'|value=168"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s6:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s7:x'|value=196"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s7:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s8:x'|value=224"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s8:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s9:x'|value=252"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s9:y'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s10:x'|value=0"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s10:y'|value=-26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s11:x'|value=28"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s11:y'|value=-26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s12:x'|value=56"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s12:y'|value=-26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s13:x'|value=84"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s13:y'|value=-26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s14:x'|value=112"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s14:y'|value=-26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s15:x'|value=140"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s15:y'|value=-26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s16:x'|value=168"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s16:y'|value=-26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s17:x'|value=196"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s17:y'|value=-26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s18:x'|value=224"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s18:y'|value=-26"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s19:x'|value=252"/>
<action handler="set" params="target='ui:interface:gestionsets2:header_closed:shortcuts:s19:y'|value=-26"/>
</proc>
<group type="menu" id="gestionsets2_menu" extends="base_menu_with_color">
<action id="horiz" name="uiHorizontal" handler="proc" params="gestionsets2_proc_set|%gestionsets_h"/>
<action id="vert" name="uiVertical" handler="proc" params="gestionsets2_proc_set|%gestionsets_v"/>
<separator />
</group>
<group type="container"
id="gestionsets2"
w="68"
@ -1322,7 +1504,7 @@
header_active="false"
right_button="false"
group_onclick_r="active_menu"
group_params_r="menu=ui:interface:base_menu_with_color"
group_params_r="menu=ui:interface:gestionsets2_menu"
movable="true"
active="true"
opened="false"
@ -1330,8 +1512,8 @@
global_color="false"
header_color="UI:SAVE:WIN:COLORS:INV"
locked="true"
on_active="set"
on_active_params="dblink=UI:VARIABLES:ISACTIVE:SETS2|value=1"
on_active="proc"
on_active_params="gestionsets2_proc_active"
on_deactive="set"
on_deactive_params="dblink=UI:VARIABLES:ISACTIVE:SETS2|value=0"
help_page="interf_action_bar.html">
@ -1501,9 +1683,66 @@
tooltip="uittHandSet"
tooltip_parent="win" />
</group>
<group type="select_number"
id="select_memory_h"
value="UI:PHRASE:SELECT_MEMORY_2"
loop="true"
min="1"
max="10"
x="0"
y="0"
w="300"
h="52"
active="false"
posparent="shortcuts"
posref="MM MM"
delta="1">
<view type="bitmap"
id="slot_number"
posref="MR MR"
texture="W_slot_number.tga" />
<view type="text"
id="number"
posparent="slot_number"
posref="MM MM"
x="0"
y="0"
color="255 255 255 255"
fontsize="12"
shadow="true"
hardtext="0"
global_color="false" />
<ctrl type="button"
id="arrow_up"
button_type="push_button"
posref="TM BM"
posparent="slot_number"
x="0"
y="0"
tx_normal="W_arrow_up_1.tga"
tx_pushed="W_arrow_up_1.tga"
tx_over="W_button_12_over.tga"
tooltip="uittHandSet"
tooltip_parent="win" />
<ctrl type="button"
id="arrow_down"
button_type="push_button"
posref="BM TM"
posparent="slot_number"
x="0"
y="0"
tx_normal="W_arrow_down_1.tga"
tx_pushed="W_arrow_down_1.tga"
tx_over="W_button_12_over.tga"
tooltip="uittHandSet"
tooltip_parent="win" />
</group>
<link expr="@UI:PHRASE:SELECT_MEMORY_2"
action="phrase_select_memory_2"
params="value=add(@UI:PHRASE:SELECT_MEMORY_2,-1)" />
<link expr="depends(@UI:SAVE:GESTIONSETS2_MODE)"
action="proc"
params="gestionsets_proc_mode" />
</group>
<tree node="gestionsets2" />
<!-- hands -->

@ -978,4 +978,23 @@
</group>
</template>
<template name="html_form_select_box_menu_widget"
keep="true"
id="sb">
<group type="menu"
id="#id"
posref="BL TL"
x="0"
y="0"
mouse_pos="false"
space="2"
shadow="false"
color="255 255 255 128"
color_over="255 255 255 255"
color_grayed="0 0 0 255"
fontsize="12"
highlight_over="255 255 255 128"
force_inside_screen="false"></group>
</template>
</interface_config>

@ -1,4 +1,4 @@
fyrosGivenNames = {"Abyan", "Abybus", "Abycaan", "Abycabus", "Abycacaon", "Abycacus", "Abycadix", "Abycadon", "Abycados", "Abycaion"
fyrosLastNames = {"Abyan", "Abybus", "Abycaan", "Abycabus", "Abycacaon", "Abycacus", "Abycadix", "Abycadon", "Abycados", "Abycaion"
, "Abycakos", "Abycala", "Abycalaus", "Abycalion", "Abycallo", "Abycalus", "Abycamus", "Abycan", "Abycanix", "Abycaon", "Abycaps"
, "Abycarius", "Abycaron", "Abycaros", "Abycarus", "Abycaseus", "Abycasse", "Abycatheus", "Abycathus", "Abycatis", "Abycaton", "Abycaxius"
, "Abycus", "Abydix", "Abydon", "Abydos", "Abygrian", "Abygribus", "Abygricaon", "Abygricus", "Abygridix", "Abygridon", "Abygridos"
@ -286,7 +286,7 @@ fyrosGivenNames = {"Abyan", "Abybus", "Abycaan", "Abycabus", "Abycacaon", "Abyca
, "Zenathus", "Zenatis", "Zenaton", "Zenaxius", "Zenbus", "Zencaon", "Zencus", "Zendix", "Zendon", "Zendos", "Zenion", "Zenix", "Zenkos", "Zenla", "Zenlaus", "Zenlion", "Zenllo", "Zenlus", "Zenmus", "Zenn", "Zennix", "Zenps", "Zenrius", "Zenron", "Zenros", "Zenrus", "Zenseus", "Zensse", "Zentheus"
, "Zenthus", "Zentis", "Zenton", "Zenxius", "Zeperian", "Zeperibus", "Zepericaon", "Zepericus", "Zeperidix", "Zeperidon", "Zeperidos", "Zeperiion", "Zeperikos", "Zeperila", "Zeperilaus", "Zeperilion", "Zeperillo", "Zeperilus", "Zeperimus", "Zeperin", "Zeperinix", "Zeperips", "Zeperirius", "Zeperiron", "Zeperiros", "Zeperirus", "Zeperiseus", "Zeperisse", "Zeperitheus", "Zeperithus", "Zeperitis", "Zeperiton", "Zeperixius", "Zephaan", "Zephabus", "Zephacaon", "Zephacus", "Zephadix", "Zephadon", "Zephados", "Zephaion", "Zephakos", "Zephala", "Zephalaus", "Zephalion", "Zephallo", "Zephalus", "Zephamus", "Zephan", "Zephanix", "Zephaps", "Zepharius", "Zepharon", "Zepharos", "Zepharus", "Zephaseus", "Zephasse", "Zephatheus", "Zephathus", "Zephatis", "Zephaton", "Zephaxius", "Zephoan", "Zephobus", "Zephocaon", "Zephocus", "Zephodix", "Zephodon", "Zephodos", "Zephoion", "Zephokos", "Zephola", "Zepholaus", "Zepholion", "Zephollo", "Zepholus", "Zephomus", "Zephon", "Zephonix", "Zephops", "Zephorius", "Zephoron", "Zephoros", "Zephorus", "Zephoseus", "Zephosse", "Zephotheus", "Zephothus", "Zephotis", "Zephoton", "Zephoxius", "Zephyan", "Zephybus", "Zephycaon", "Zephycus", "Zephydix", "Zephydon", "Zephydos", "Zephyion", "Zephykos", "Zephyla", "Zephylaus", "Zephylion", "Zephyllo", "Zephylus", "Zephymus", "Zephyn", "Zephynix", "Zephyps", "Zephyrius", "Zephyron", "Zephyros", "Zephyrus", "Zephyseus", "Zephysse", "Zephytheus", "Zephythus", "Zephytis", "Zephyton", "Zephyxius", "Zeps", "Zeraan", "Zerabus", "Zeracaon", "Zeracus", "Zeradix", "Zeradon", "Zerados", "Zeraion", "Zerakos", "Zerala", "Zeralaus", "Zeralion", "Zerallo", "Zeralus", "Zeramus", "Zeran", "Zeranix", "Zeraps", "Zerarius", "Zeraron", "Zeraros", "Zerarus", "Zeraseus", "Zerasse", "Zeratheus", "Zerathus", "Zeratis", "Zeraton", "Zeraxius", "Zerian", "Zeribus", "Zericaon", "Zericus", "Zeridix", "Zeridon", "Zeridos", "Zeriion", "Zerikos", "Zerila", "Zerilaus", "Zerilion", "Zerillo", "Zerilus", "Zerimus", "Zerin", "Zerinix", "Zerips", "Zeririus", "Zeriron", "Zeriros", "Zerirus", "Zeriseus", "Zerisse", "Zeritheus", "Zerithus", "Zeritis", "Zeriton", "Zerius", "Zerixius", "Zeron", "Zeros", "Zerus", "Zeryaan", "Zeryabus", "Zeryacaon", "Zeryacus", "Zeryadix", "Zeryadon", "Zeryados", "Zeryaion", "Zeryakos", "Zeryala", "Zeryalaus", "Zeryalion", "Zeryallo", "Zeryalus", "Zeryamus", "Zeryan", "Zeryanix", "Zeryaps", "Zeryarius", "Zeryaron", "Zeryaros", "Zeryarus", "Zeryaseus", "Zeryasse", "Zeryatheus", "Zeryathus", "Zeryatis", "Zeryaton", "Zeryaxius", "Zeseus", "Zesse", "Zessean", "Zessebus", "Zessecaon", "Zessecus", "Zessedix", "Zessedon", "Zessedos", "Zesseion", "Zessekos", "Zessela", "Zesselaus", "Zesselion", "Zessello", "Zesselus", "Zessemus", "Zessen", "Zessenix", "Zesseps", "Zesserius", "Zesseron", "Zesseros", "Zesserus", "Zesseseus", "Zessesse", "Zessetheus", "Zessethus", "Zessetis", "Zesseton", "Zessexius", "Zetheus", "Zethus", "Zetis", "Zeton", "Zexius"}
fyrosSurnames = {"Abyan", "Abybus", "Abycaon", "Abycus", "Abydix", "Abydon", "Abydos", "Abyion", "Abykos", "Abyla", "Abylaus", "Abylion"
fyrosFirstNames = {"Abyan", "Abybus", "Abycaon", "Abycus", "Abydix", "Abydon", "Abydos", "Abyion", "Abykos", "Abyla", "Abylaus", "Abylion"
, "Abyllo", "Abylus", "Abymus", "Abyn", "Abynix", "Abyps", "Abyrius", "Abyron", "Abyros", "Abyrus", "Abyseus", "Abysse", "Abytheus", "Abythus"
, "Abytis", "Abyton", "Abyxius", "Aean", "Aebus", "Aecaon", "Aecus", "Aedix", "Aedon", "Aedos", "Aeion", "Aekos", "Aela", "Aelaus", "Aelion"
, "Aello", "Aelus", "Aemus", "Aen", "Aenix", "Aeps", "Aerius", "Aeron", "Aeros", "Aerus", "Aeseus", "Aesse", "Aetheus", "Aethus", "Aetis"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -13,94 +13,86 @@ end
-- Name generator.
--nb noms:
-- matis: male 621 - female 621 - surname 621
-- fyros: given name 14269, surname 841
-- zorai: given name one 318, given name two 644, surname 1287
-- tryker: given name 4500, surname 4335
-- matis: male 621 - female 621 - FirstName 621
-- fyros: given name 14269, FirstName 841
-- zorai: given name one 318, given name two 644, FirstName 1287
-- tryker: given name 4500, FirstName 4335
function outgame:getFyrosName()
local nameResult = "";
local fullnameResult = "";
-- Fyros
function outgame:getFyrosLastName()
local nbFyrosLastNames = 0;
for _ in pairs(fyrosLastNames) do nbFyrosLastNames = nbFyrosLastNames + 1 end
local nbFyrosGivenNames = 0;
for _ in pairs(fyrosGivenNames) do nbFyrosGivenNames = nbFyrosGivenNames + 1 end
local givenName = fyrosGivenNames[math.random(nbFyrosGivenNames)];
return fyrosLastNames[math.random(nbFyrosLastNames)]
end
function outgame:getFyrosFirstName()
local nbFyrosFirstNames = 0;
for _ in pairs(fyrosFirstNames) do nbFyrosFirstNames = nbFyrosFirstNames + 1 end
local nbFyrosSurnames = 0;
for _ in pairs(fyrosSurnames) do nbFyrosSurnames = nbFyrosSurnames + 1 end
local surname = fyrosSurnames[math.random(nbFyrosSurnames)];
fullnameResult = givenName .. " " .. surname;
nameResult = surname;
return fullnameResult, nameResult
return fyrosFirstNames[math.random(nbFyrosFirstNames)]
end
function outgame:getMatisName(sex)
local nameResult = "";
local fullnameResult = "";
-- Matis
function outgame:getMatisLastName(sex)
local dbNameSex = getDbProp("UI:TEMP:NAME_SEX");
if sex ~= nil then
dbNameSex = sex
dbNameSex = sex;
end
local LastName = ""
if tonumber( dbNameSex )== 1 then
local nbMatisMaleNames = 0;
for _ in pairs(matisMaleNames) do nbMatisMaleNames = nbMatisMaleNames + 1 end
givenName = matisMaleNames[math.random(nbMatisMaleNames)];
local nbMatisMaleLastNames = 0;
for _ in pairs(matisMaleLastNames) do nbMatisMaleLastNames = nbMatisMaleLastNames + 1 end
LastName = matisMaleLastNames[math.random(nbMatisMaleLastNames)];
else
local nbMatisFemaleNames = 0;
for _ in pairs(matisFemaleNames) do nbMatisFemaleNames = nbMatisFemaleNames + 1 end
givenName = matisFemaleNames[math.random(nbMatisFemaleNames)];
local nbMatisFemaleLastNames = 0;
for _ in pairs(matisFemaleLastNames) do nbMatisFemaleLastNames = nbMatisFemaleLastNames + 1 end
LastName = matisFemaleLastNames[math.random(nbMatisFemaleLastNames)];
end
local nbMatisSurnames = 0;
for _ in pairs(matisSurnames) do nbMatisSurnames = nbMatisSurnames + 1 end
local surname = matisSurnames[math.random(nbMatisSurnames)];
fullnameResult = givenName .. " " .. surname;
nameResult = givenName;
return fullnameResult, nameResult
return LastName;
end
function outgame:getTrykerName()
local nameResult = "";
local fullnameResult = "";
local nbTrykerGivenNames = 0;
for _ in pairs(trykerGivenNames) do nbTrykerGivenNames = nbTrykerGivenNames + 1 end
local givenName = trykerGivenNames[math.random(nbTrykerGivenNames)];
function outgame:getMatisFirstName()
local nbTrykerSurnames = 0;
for _ in pairs(trykerSurnames) do nbTrykerSurnames = nbTrykerSurnames + 1 end
local surname = trykerSurnames[math.random(nbTrykerSurnames)];
local nbMatisFirstNames = 0;
for _ in pairs(matisFirstNames) do nbMatisFirstNames = nbMatisFirstNames + 1 end
fullnameResult = surname .. " " .. givenName;
nameResult = givenName;
return fullnameResult, nameResult
return matisFirstNames[math.random(nbMatisFirstNames)]
end
-- Tryker
function outgame:getTrykerLastName()
local nbTrykerLastNames = 0;
for _ in pairs(trykerLastNames) do nbTrykerLastNames = nbTrykerLastNames + 1 end
function outgame:getZoraiName()
local nameResult = "";
local fullnameResult = "";
return trykerLastNames[math.random(nbTrykerLastNames)]
end
function outgame:getTrykerFirstName()
local nbTrykerFirstNames = 0;
for _ in pairs(trykerFirstNames) do nbTrykerFirstNames = nbTrykerFirstNames + 1 end
local nbGivenNameOne = 0;
for _ in pairs(zoraiGivenNameOne) do nbGivenNameOne = nbGivenNameOne + 1 end
local givenNameOne = zoraiGivenNameOne[math.random(nbGivenNameOne)];
return trykerFirstNames[math.random(nbTrykerFirstNames)]
end
local nbGivenNameTwo = 0;
for _ in pairs(zoraiGivenNameTwo) do nbGivenNameTwo = nbGivenNameTwo + 1 end
local givenNameTwo = zoraiGivenNameTwo[math.random(nbGivenNameTwo)];
-- Zoraï
function outgame:getZoraiLastName()
local nbLastNamesOne = 0;
for _ in pairs(zoraiLastNamesOne) do nbLastNamesOne = nbLastNamesOne + 1 end
local lastNameOne = zoraiLastNamesOne[math.random(nbLastNamesOne)];
local nbSurnames = 0;
for _ in pairs(zoraiSurnames) do nbSurnames = nbSurnames + 1 end
local surname = zoraiSurnames[math.random(nbSurnames)];
local nbLastNamesTwo = 0;
for _ in pairs(zoraiLastNamesTwo) do nbLastNamesTwo = nbLastNamesTwo + 1 end
local lastNameTwo = zoraiLastNamesTwo[math.random(nbLastNamesTwo)];
fullnameResult = surname .. " " .. givenNameOne .. "-" .. givenNameTwo;
nameResult = givenNameOne .. givenNameTwo;
return lastNameOne .. "-" .. lastNameTwo
end
function outgame:getZoraiFirstName()
local nbFirstNames = 0;
for _ in pairs(zoraiFirstNames) do nbFirstNames = nbFirstNames + 1 end
return fullnameResult, nameResult
return zoraiFirstNames[math.random(nbFirstNames)]
end
function outgame:procGenerateName()
@ -115,59 +107,70 @@ function outgame:procGenerateName()
-- Look at outgame:procUpdateNameRaceLabel() for the "race" list.
-- fy ma try zo -->
local givenName = "";
local lastName = "test"
local firstName = "test2"
if tonumber( dbNameRace ) == 1 then
-- Fyros
fullnameResult, nameResult = self:getFyrosName()
lastName = self:getFyrosLastName()
firstName = self:getFyrosFirstName()
fullnameResult = lastName .. " " .. firstName
nameResult = lastName
elseif tonumber( dbNameRace ) == 2 then
-- Matis
fullnameResult, nameResult = self:getMatisName()
lastName = self:getMatisLastName()
firstName = self:getMatisFirstName()
fullnameResult = lastName .. " " .. firstName
nameResult = lastName
elseif tonumber( dbNameRace ) == 3 then
-- Tryker
fullnameResult, nameResult = self:getTrykerName()
lastName = self:getTrykerLastName()
firstName = self:getTrykerFirstName()
fullnameResult = firstName .. " " .. lastName
nameResult = lastName
elseif tonumber( dbNameRace ) == 4 then
-- Zorai
fullnameResult, nameResult = self:getZoraiName()
lastName = self:getZoraiLastName()
firstName = self:getZoraiFirstName()
fullnameResult = firstName .. " " .. lastName
nameResult = lastName
elseif tonumber( dbNameRace ) == 5 then
-- Maraudeurs
tempResult_1 = "";
tempResult_2 = "";
-- lastName
if tonumber(dbNameSubRace) == 1 then
-- Fyros
fullnameResult, tempResult_1 = self:getFyrosName()
lastName = self:getFyrosLastName()
elseif tonumber( dbNameSubRace ) == 2 then
-- Matis F
fullnameResult, tempResult_1 = self:getMatisName(2)
lastName = self:getMatisLastName(2)
elseif tonumber( dbNameSubRace ) == 3 then
-- Matis M
fullnameResult, tempResult_1 = self:getMatisName(1)
lastName = self:getMatisLastName(1)
elseif tonumber( dbNameSubRace ) == 4 then
-- Tryker
fullnameResult, tempResult_1 = self:getTrykerName()
lastName = self:getTrykerLastName()
elseif tonumber( dbNameSubRace ) == 5 then
-- Zorai
fullnameResult, tempResult_1 = self:getZoraiName()
lastName = self:getZoraiLastName()
end
-- firstName
if tonumber(dbNameSubRace2) == 1 then
-- Fyros
fullnameResult, tempResult_2 = self:getFyrosName()
firstName = self:getFyrosFirstName()
elseif tonumber( dbNameSubRace2 ) == 2 then
-- Matis F
fullnameResult, tempResult_2 = self:getMatisName(2)
-- Matis
firstName = self:getMatisFirstName()
firstName = self:getMatisFirstName()
elseif tonumber( dbNameSubRace2 ) == 3 then
-- Matis M
fullnameResult, tempResult_2 = self:getMatisName(1)
elseif tonumber( dbNameSubRace2 ) == 4 then
-- Tryker
fullnameResult, tempResult_2 = self:getTrykerName()
elseif tonumber( dbNameSubRace2 ) == 5 then
firstName = self:getTrykerFirstName()
elseif tonumber( dbNameSubRace2 ) == 4 then
-- Zorai
fullnameResult, tempResult_2 = self:getZoraiName()
firstName = self:getZoraiFirstName()
end
fullnameResult = tempResult_1 .. " " .. tempResult_2
nameResult = tempResult_2
fullnameResult = lastName .. " " .. firstName
nameResult = lastName
end
uiNameFull.hardtext = fullnameResult;
@ -241,7 +244,7 @@ function outgame:procUpdateNameSubRaceLabel()
uiNameSubRaceText.hardtext= tostring(nameSubRaceType[tonumber(dbNameSubRace)]);
end
function outgame:procUpdateNameSubRace2Label()
local nameSubRace2Type = { "Fyros", matisF, matisM, "Tryker", "Zoraï" }
local nameSubRace2Type = { "Fyros", "Matis", "Tryker", "Zoraï" }
local uiNameSubRace2Text = getUI("ui:outgame:appear_name:name_sub_race2_slider:name_race");
local dbNameSubRace2 = getDbProp("UI:TEMP:NAME_SUB_RACE2");

@ -1361,7 +1361,7 @@
id="but_next" posref="TR TR" x="0" y="-6"
onclick_l="proc" params_l="proc_appear_name_sub_race_add_one" />
<view type="text" id="surname" case="%case_first_string_letter_up" posparent="name_sub_race_slider" posref="TL TL" x="0" y="0" hardtext="uiCP_FirstName" color="255 255 255 255" fontsize="11"/>
<view type="text" id="lastName" case="%case_first_string_letter_up" posparent="name_sub_race_slider" posref="TL TL" x="0" y="0" hardtext="uiCP_LastName" color="255 255 255 255" fontsize="11"/>
<view type="text" id="name_race" case="%case_first_string_letter_up" posparent="name_sub_race_slider" posref="TR TL" x="-100" y="0" hardtext="Fyros" color="255 255 255 255" fontsize="11"/>
<ctrl type="scroll" id="name_race_scroll" posparent="name_sub_race_slider" posref="MM MM" x="0" y="0" w="160" h="32"
vertical="false" align="L" min="1" max="5" value="UI:TEMP:NAME_SUB_RACE" tracksize="40"
@ -1385,10 +1385,10 @@
id="but_next" posref="TR TR" x="0" y="-6"
onclick_l="proc" params_l="proc_appear_name_sub_race2_add_one" />
<view type="text" id="name" case="%case_first_string_letter_up" posparent="name_sub_race2_slider" posref="TL TL" x="0" y="0" hardtext="uiCP_LastName" color="255 255 255 255" fontsize="11"/>
<view type="text" id="firstName" case="%case_first_string_letter_up" posparent="name_sub_race2_slider" posref="TL TL" x="0" y="0" hardtext="uiCP_FirstName" color="255 255 255 255" fontsize="11"/>
<view type="text" id="name_race" case="%case_first_string_letter_up" posparent="name_sub_race2_slider" posref="TR TL" x="-100" y="0" hardtext="Fyros" color="255 255 255 255" fontsize="11"/>
<ctrl type="scroll" id="name_race_scroll" posparent="name_sub_race2_slider" posref="MM MM" x="0" y="0" w="160" h="32"
vertical="false" align="L" min="1" max="5" value="UI:TEMP:NAME_SUB_RACE2" tracksize="40"
vertical="false" align="L" min="1" max="4" value="UI:TEMP:NAME_SUB_RACE2" tracksize="40"
tx_topright="" tx_middle="slider_m.tga" tx_bottomleft=""
onscroll="proc" params="proc_appear_name_sub_race2_label_change" />
</group>
@ -1412,7 +1412,8 @@
<view type="text" id="name_sex" posparent="name_race_slider" posref="TL TL" x="0" y="0" hardtext="uiCP_Sex_Male" case="%case_first_string_letter_up" color="255 255 255 255" fontsize="11"/>
<ctrl type="scroll" id="name_sex_scroll" posparent="name_sex_slider" posref="MM MM" x="0" y="0" w="160" h="32"
vertical="false" align="L" min="1" max="2" value="UI:TEMP:NAME_SEX" tracksize="40"
tx_topright="" tx_middle="slider_m.tga" tx_bottomleft="" />
tx_topright="" tx_middle="slider_m.tga" tx_bottomleft=""
onscroll="proc" params="proc_appear_name_sex_label_change" />
</group>
@ -1666,7 +1667,7 @@
<action handler="lua:outgame:procUpdateNameSubRace2Label()" />
</proc>
<proc id="proc_appear_name_sub_race2_add_one">
<action handler="set" params="dblink=UI:TEMP:NAME_SUB_RACE2|value=min(add(@UI:TEMP:NAME_SUB_RACE2,1),5)" />
<action handler="set" params="dblink=UI:TEMP:NAME_SUB_RACE2|value=min(add(@UI:TEMP:NAME_SUB_RACE2,1),4)" />
<action handler="lua:outgame:procUpdateNameSubRace2Label()" />
</proc>
<proc id="proc_appear_name_sub_race2_sub_one">

@ -6950,4 +6950,24 @@
global_color="false" />
</group>
</template>
<template name="html_form_select_box_menu_widget"
keep="true"
id="sb">
<group type="menu"
id="#id"
posref="BL TL"
x="0"
y="0"
mouse_pos="false"
space="2"
shadow="false"
color="255 255 255 128"
color_over="255 255 255 255"
color_grayed="0 0 0 255"
fontsize="12"
highlight_over="255 255 255 128"
force_inside_screen="false"></group>
</template>
</interface_config>

@ -61,21 +61,31 @@ bool CCurlHttpClient::authenticate(const std::string &user, const std::string &p
const char *CAFilename = "ssl_ca_cert.pem"; // this is the certificate "Thawte Server CA"
// ***************************************************************************
static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
{
// look for certificate in search paths
string path = CPath::lookup(CAFilename);
nldebug("Cert path '%s'", path.c_str());
if (path.empty())
{
nlwarning("Unable to find %s", CAFilename);
return CURLE_SSL_CACERT;
}
CIFile file;
if (!file.open(CAFilename))
// open certificate
if (!file.open(path))
{
nlwarning("Unable to open %s", CAFilename);
nlwarning("Unable to open %s", path.c_str());
return CURLE_SSL_CACERT;
}
CURLcode res = CURLE_OK;
// load certificate content into memory
std::vector<uint8> buffer(file.getFileSize());
file.serialBuffer(&buffer[0], file.getFileSize());
@ -84,38 +94,51 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
if (bio)
{
// get a pointer to the X509 certificate store (which may be empty!)
X509_STORE *store = SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
// use it to read the PEM formatted certificate from memory into an X509
// structure that SSL can use
X509 *cert = NULL;
PEM_read_bio_X509(bio, &cert, 0, NULL);
STACK_OF(X509_INFO) *info = PEM_X509_INFO_read_bio(bio, NULL, NULL, NULL);
if (cert)
if (info)
{
// get a pointer to the X509 certificate store (which may be empty!)
X509_STORE *store = SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
// add our certificate to this store
if (X509_STORE_add_cert(store, cert) == 0)
// iterate over all entries from the PEM file, add them to the x509_store one by one
for (sint i = 0; i < sk_X509_INFO_num(info); ++i)
{
nlwarning("Error adding certificate");
res = CURLE_SSL_CACERT;
X509_INFO *itmp = sk_X509_INFO_value(info, i);
if (itmp->x509)
{
// add our certificate to this store
if (X509_STORE_add_cert(store, itmp->x509) == 0)
{
nlwarning("Error adding certificate");
res = CURLE_SSL_CACERT;
}
}
}
// decrease reference counts
X509_free(cert);
// cleanup
sk_X509_INFO_pop_free(info, X509_INFO_free);
}
else
{
nlwarning("PEM_read_bio_X509 failed...");
nlwarning("Unable to read PEM info");
res = CURLE_SSL_CACERT;
}
// decrease reference counts
BIO_free(bio);
}
else
{
nlwarning("Unable to allocate BIO buffer for certificates");
res = CURLE_SSL_CACERT;
}
// all set to go
return CURLE_OK ;
return res;
}
// ***************************************************************************
@ -125,7 +148,10 @@ bool CCurlHttpClient::verifyServer(bool verify)
curl_easy_setopt(_Curl, CURLOPT_SSL_VERIFYPEER, verify ? 1 : 0);
curl_easy_setopt(_Curl, CURLOPT_SSLCERTTYPE, "PEM");
// would allow to provide the CA in memory instead of using CURLOPT_CAINFO, but needs to include and link OpenSSL
curl_easy_setopt(_Curl, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
if (curl_easy_setopt(_Curl, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function) == CURLE_NOT_BUILT_IN)
{
nlwarning("Unable to support CURLOPT_SSL_CTX_FUNCTION, curl not compiled with OpenSSL ?");
}
// don't use that anymore, because CA can't be loaded from BNP and doesn't support UTF-8 under Windows
// curl_easy_setopt(_Curl, CURLOPT_CAINFO, path.c_str());
curl_easy_setopt(_Curl, CURLOPT_CAPATH, NULL);
@ -181,7 +207,7 @@ bool CCurlHttpClient::sendRequest(const std::string& methodWB, const std::string
curl_easy_getinfo(_Curl, CURLINFO_RESPONSE_CODE, &r);
if (verbose)
{
nldebug("%u", r);
nldebug("%u", (uint)r);
}
return true;

@ -7,9 +7,9 @@ then
fi
# executable flag for all executables
chmod +x $ROOTPATH/ryzom_client
chmod +x $ROOTPATH/crash_report
chmod +x $ROOTPATH/ryzom_client_patcher
chmod +x $ROOTPATH/ryzom_configuration
chmod +x "$ROOTPATH/ryzom_client"
chmod +x "$ROOTPATH/crash_report"
chmod +x "$ROOTPATH/ryzom_client_patcher"
chmod +x "$ROOTPATH/ryzom_configuration"
exit 0

@ -137,6 +137,7 @@ struct CClientPatcherTranslations : public NLMISC::CI18N::ILoadProxy
"TheSagaOfRyzom [Ryzom]\n"
"uiErrPatchApply [Error: Patch process ended but the patch has not been successfully applied.]\n"
"uiErrChecking [Error: Patch files failed - checking.]\n"
"uiByte [B]\n"
"uiKb [KiB]\n"
"uiMb [MiB]\n"
"uiLoginGetFile [Getting File:]\n"

Loading…
Cancel
Save