From 8ea4ff53cbde3ce66d9f05fbd47a13c3c983fea8 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 25 Nov 2021 09:36:43 +0100
Subject: [PATCH 001/194] Added stairs collisions
---
nel/include/nel/pacs/move_container.h | 2 +-
nel/include/nel/pacs/move_primitive.h | 25 ++++++
nel/include/nel/pacs/u_move_primitive.h | 14 +++
nel/src/pacs/move_container.cpp | 30 +++++--
nel/src/pacs/move_primitive.cpp | 7 ++
ryzom/client/src/entities.cpp | 114 +++++++++++++-----------
ryzom/client/src/entity_cl.cpp | 15 +++-
ryzom/client/src/main_loop.cpp | 51 +++++++++--
8 files changed, 193 insertions(+), 65 deletions(-)
diff --git a/nel/include/nel/pacs/move_container.h b/nel/include/nel/pacs/move_container.h
index 5193e8386c..f368dd5e9a 100644
--- a/nel/include/nel/pacs/move_container.h
+++ b/nel/include/nel/pacs/move_container.h
@@ -244,7 +244,7 @@ class CMoveContainer: public UMoveContainer
CCollisionOTStaticInfo *staticColInfo);
// Add a trigger in the trigger array
- void newTrigger (CMovePrimitive* first, CMovePrimitive* second, const CCollisionDesc& desc, uint triggerType);
+ bool newTrigger (CMovePrimitive* first, CMovePrimitive* second, const CCollisionDesc& desc, uint triggerType);
// Clear modified primitive list
void clearModifiedList (uint8 worldImage);
diff --git a/nel/include/nel/pacs/move_primitive.h b/nel/include/nel/pacs/move_primitive.h
index aa153c076f..d77517a7d4 100644
--- a/nel/include/nel/pacs/move_primitive.h
+++ b/nel/include/nel/pacs/move_primitive.h
@@ -251,6 +251,27 @@ class CMovePrimitive: public UMovePrimitive
_Height=height;
}
+ void setZOffset(float offset)
+ {
+ _ZOffset = offset;
+ }
+
+ float getZOffset()
+ {
+ return _ZOffset;
+ }
+
+ bool haveZOffset()
+ {
+ return _HaveZOffset;
+ }
+
+ void enableZOffset(bool enabled)
+ {
+ _HaveZOffset = enabled;
+ }
+
+
/**
* Set the cylinder size. Only for cylinder.
*
@@ -466,6 +487,10 @@ class CMovePrimitive: public UMovePrimitive
// Iteration count
sint32 _IterationCount;
+
+ float _ZOffset;
+ bool _HaveZOffset;
+
};
} // NLPACS
diff --git a/nel/include/nel/pacs/u_move_primitive.h b/nel/include/nel/pacs/u_move_primitive.h
index 5a021daa82..e067c3e6b6 100644
--- a/nel/include/nel/pacs/u_move_primitive.h
+++ b/nel/include/nel/pacs/u_move_primitive.h
@@ -114,6 +114,12 @@ class UMovePrimitive
* This is an overlap trigger. This trigger is actived each time the object overlap the trigger.
*/
OverlapTrigger=0x400,
+
+ /**
+ * This is an stairs trigger. This trigger is actived each time the object overlap the trigger and change Z position.
+ */
+ OverlapStairsTrigger=0x800,
+
};
/**
@@ -274,6 +280,14 @@ class UMovePrimitive
*/
virtual float getHeight () const =0;
+ virtual void setZOffset(float offset) =0;
+
+ virtual float getZOffset() =0;
+
+ virtual bool haveZOffset() =0;
+
+ virtual void enableZOffset(bool enabled) =0;
+
/**
* Set the cylinder size. Only for cylinder.
*
diff --git a/nel/src/pacs/move_container.cpp b/nel/src/pacs/move_container.cpp
index 35b7ddcd6d..424f7d8b91 100644
--- a/nel/src/pacs/move_container.cpp
+++ b/nel/src/pacs/move_container.cpp
@@ -918,8 +918,10 @@ bool CMoveContainer::evalPrimAgainstPrimCollision (double beginTime, CMovePrimit
|| (otherPrimitive->getTriggerType()&UMovePrimitive::EnterTrigger));
bool exit = (beginTime<=lastTime) && (lastTime<_DeltaTime) && ((primitive->getTriggerType()&UMovePrimitive::ExitTrigger)
|| (otherPrimitive->getTriggerType()&UMovePrimitive::ExitTrigger));
- bool overlap = (firstTime<=beginTime) && (lastTime>_DeltaTime) && ((primitive->getTriggerType()&UMovePrimitive::OverlapTrigger)
- || (otherPrimitive->getTriggerType()&UMovePrimitive::OverlapTrigger));
+ bool overlap = ((firstTime<=beginTime) && (lastTime>_DeltaTime) && ((primitive->getTriggerType()&UMovePrimitive::OverlapTrigger)
+ || (otherPrimitive->getTriggerType()&UMovePrimitive::OverlapTrigger)) ||
+ (firstTime<=beginTime) && (lastTime>_DeltaTime) && ((primitive->getTriggerType()&UMovePrimitive::OverlapStairsTrigger)
+ || (otherPrimitive->getTriggerType()&UMovePrimitive::OverlapStairsTrigger)));
bool contact = ( beginTime<((firstTime+lastTime)/2) ) && (firstTime<=_DeltaTime);
bool collision = contact && (primitive->isObstacle() && otherPrimitive->isObstacle ());
@@ -1211,7 +1213,7 @@ void CMoveContainer::newCollision (CMovePrimitive* first, const CCollisionSurfac
// ***************************************************************************
-void CMoveContainer::newTrigger (CMovePrimitive* first, CMovePrimitive* second, const CCollisionDesc& desc, uint triggerType)
+bool CMoveContainer::newTrigger (CMovePrimitive* first, CMovePrimitive* second, const CCollisionDesc& desc, uint triggerType)
{
// Element index
uint index=(uint)_Triggers.size();
@@ -1224,6 +1226,14 @@ void CMoveContainer::newTrigger (CMovePrimitive* first, CMovePrimitive* second,
_Triggers[index].Object1=second->UserData;
_Triggers[index].CollisionDesc=desc;
_Triggers[index].CollisionType = uint8(triggerType);
+
+
+ if (second->_StaticFlags&UMovePrimitive::OverlapStairsTrigger) {
+ nlinfo("Col Stairs height %f", second->getHeight());
+ return true;
+ }
+
+ return false;
}
// ***************************************************************************
@@ -1659,8 +1669,18 @@ void CMoveContainer::reaction (const CCollisionOTInfo& first)
newTrigger (dynInfo->getFirstPrimitive (), dynInfo->getSecondPrimitive (), dynInfo->getCollisionDesc (), UTriggerInfo::In);
if (dynInfo->isExit())
newTrigger (dynInfo->getFirstPrimitive (), dynInfo->getSecondPrimitive (), dynInfo->getCollisionDesc (), UTriggerInfo::Out);
- if (dynInfo->isInside())
- newTrigger (dynInfo->getFirstPrimitive (), dynInfo->getSecondPrimitive (), dynInfo->getCollisionDesc (), UTriggerInfo::Inside);
+ if (dynInfo->isInside()) {
+ if (newTrigger (dynInfo->getFirstPrimitive (), dynInfo->getSecondPrimitive (), dynInfo->getCollisionDesc (), UTriggerInfo::Inside))
+ {
+ dynInfo->getFirstPrimitive()->enableZOffset(true);
+ CVectorD first_pos = dynInfo->getFirstPrimitive()->getFinalPosition(dynInfo->getFirstWorldImage());
+ CVectorD second_pos = dynInfo->getSecondPrimitive()->getFinalPosition(dynInfo->getSecondWorldImage());
+ nlinfo("P = %f, C = %f, H = %f, D = %f", first_pos.z, second_pos.z, dynInfo->getSecondPrimitive()->getHeight(), second_pos.z-first_pos.z);
+ dynInfo->getFirstPrimitive()->setZOffset(second_pos.z+dynInfo->getSecondPrimitive()->getHeight()-1.0f);
+ }
+ }
+ if (dynInfo->isExit())
+ newTrigger (dynInfo->getFirstPrimitive (), dynInfo->getSecondPrimitive (), dynInfo->getCollisionDesc (), UTriggerInfo::Out);
}
}
}
diff --git a/nel/src/pacs/move_primitive.cpp b/nel/src/pacs/move_primitive.cpp
index 039fa0c7b8..261d7bbf89 100644
--- a/nel/src/pacs/move_primitive.cpp
+++ b/nel/src/pacs/move_primitive.cpp
@@ -49,6 +49,8 @@ CMovePrimitive::CMovePrimitive (CMoveContainer* container, uint8 firstWorldImage
_StaticFlags=0;
_RootOTInfo=NULL;
_LastTestTime=0xffffffff;
+ _ZOffset = 0;
+ _HaveZOffset = false;
// Ptr table alloc
_WorldImages=_Container->allocateWorldImagesPtrs (numWorldImage);
@@ -149,6 +151,11 @@ bool CMovePrimitive::isTriggered (CMovePrimitive& second, bool enter, bool exit)
{
// Generate a trigger ?
+
+ // Is one of them is a stairs trigger ?
+ if ( second._StaticFlags&OverlapStairsTrigger )
+ return true;
+
// Is the two are not triggers ?
if ( ( (_StaticFlags&TriggerMask) == NotATrigger ) && ( (second._StaticFlags&TriggerMask) == NotATrigger ) )
return false;
diff --git a/ryzom/client/src/entities.cpp b/ryzom/client/src/entities.cpp
index 6a64ea449d..a17a49e4fb 100644
--- a/ryzom/client/src/entities.cpp
+++ b/ryzom/client/src/entities.cpp
@@ -461,7 +461,7 @@ void CEntityManager::initialize(uint nbMaxEntity)
NLGUI::CDBManager::getInstance()->getDB()->addObserver(&TeamUIDObserver, textId );
_GroupMemberUidDB[i] = NLGUI::CDBManager::getInstance()->getDbProp(text, false);
nlassert(_GroupMemberUidDB[i]);
-
+
text = toString(TEAM_DB_PATH ":%d:NAME", i);
textId = ICDBNode::CTextId(text);
NLGUI::CDBManager::getInstance()->getDB()->addObserver(&TeamPresentObserver, textId );
@@ -477,13 +477,13 @@ void CEntityManager::initialize(uint nbMaxEntity)
NLGUI::CDBManager::getInstance()->getDB()->addObserver(&AnimalUIDObserver, textId);
_BeastUidDB[i] = NLGUI::CDBManager::getInstance()->getDbProp(text, false);
nlassert(_BeastUidDB[i]);
-
+
text = toString("SERVER:PACK_ANIMAL:BEAST%d:STATUS", i);
textId = ICDBNode::CTextId(text);
NLGUI::CDBManager::getInstance()->getDB()->addObserver(&AnimalStatusObserver, textId);
_BeastStatusDB[i] = NLGUI::CDBManager::getInstance()->getDbProp(text, false);
nlassert(_BeastStatusDB[i]);
-
+
text = toString("SERVER:PACK_ANIMAL:BEAST%d:TYPE", i);
_BeastTypeDB[i] = NLGUI::CDBManager::getInstance()->getDbProp(text, false);
nlassert(_BeastTypeDB[i]);
@@ -550,7 +550,7 @@ CShapeInstanceReference CEntityManager::createInstance(const string& shape, cons
primitive = PACS->addCollisionablePrimitive(dynamicWI, 1);
primitive->setDontSnapToGround(false);
}
-
+
// Put instance in last deleted position if found
if (_LastRemovedInstance != -1)
{
@@ -562,7 +562,7 @@ CShapeInstanceReference CEntityManager::createInstance(const string& shape, cons
_ShapeInstances[idx].BboxActive = !text.empty() || !url.empty();
_ShapeInstances[idx].Deleted = false;
_ShapeInstances[idx].InIGZone = inIgZone > 0;
-
+
_LastRemovedInstance = _ShapeInstances[idx].LastDeleted;
_ShapeInstances[idx].LastDeleted = -1;
TIGZoneShapes::iterator it = _IgZoneShapes.find(inIgZone);
@@ -613,7 +613,7 @@ bool CEntityManager::deleteInstance(uint32 idx)
UMovePrimitive *primitive = _ShapeInstances[idx].Primitive;
if (primitive)
PACS->removePrimitive(primitive);
-
+
if (!_ShapeInstances[idx].Deleted)
{
_ShapeInstances[idx].Primitive = NULL;
@@ -649,7 +649,7 @@ CVector CEntityManager::getInstancePos(uint32 idx)
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return CVector(0,0,0);
-
+
return instance.getPos();
}
@@ -657,17 +657,17 @@ bool CEntityManager::setInstancePos(uint32 idx, CVector pos)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return false;
-
+
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return false;
-
+
UMovePrimitive *primitive = _ShapeInstances[idx].Primitive;
if (primitive)
{
primitive->setGlobalPosition(_ShapeInstances[idx].PrimRelativePos + pos, dynamicWI);
}
-
+
instance.setPos(pos);
return true;
}
@@ -676,11 +676,11 @@ CVector CEntityManager::getInstanceRot(uint32 idx)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return CVector(0,0,0);
-
+
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return CVector(0,0,0);
-
+
return instance.getRotEuler();
}
@@ -688,13 +688,13 @@ bool CEntityManager::setInstanceRot(uint32 idx, CVector rot)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return false;
-
+
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return false;
-
+
instance.setRotEuler(rot);
-
+
return true;
}
@@ -706,7 +706,7 @@ CVector CEntityManager::getInstanceScale(uint32 idx)
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return CVector(0,0,0);
-
+
return instance.getScale();
}
@@ -714,7 +714,7 @@ CVector CEntityManager::getInstanceColPos(uint32 idx)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return CVector(0,0,0);
-
+
return _ShapeInstances[idx].PrimRelativePos;
}
@@ -726,11 +726,11 @@ CVector CEntityManager::getInstanceColScale(uint32 idx)
UMovePrimitive *primitive = _ShapeInstances[idx].Primitive;
if (!primitive)
return CVector(0,0,0);
-
+
float width, depth;
primitive->getSize(width, depth);
float height = primitive->getHeight();
-
+
return CVector(width, depth, height);
}
@@ -738,11 +738,11 @@ double CEntityManager::getInstanceColOrient(uint32 idx)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return 0.f;
-
+
UMovePrimitive *primitive = _ShapeInstances[idx].Primitive;
if (!primitive)
return 0.f;
-
+
return primitive->getOrientation(dynamicWI);
}
@@ -754,21 +754,21 @@ CVector CEntityManager::getInstanceBBoxMin(uint32 idx)
UInstance instance = _ShapeInstances[idx].Instance;
if (instance.empty())
return CVector(0,0,0);
-
+
NLMISC::CAABBox bbox;
_ShapeInstances[idx].Instance.getShapeAABBox(bbox);
-
+
CVector bbox_min;
-
+
if (bbox.getCenter() == CVector::Null)
bbox_min = CVector(-0.5f, -0.5f, -0.5f);
else
bbox_min = bbox.getMin();
-
+
bbox_min.x *= _ShapeInstances[idx].Instance.getScale().x;
bbox_min.y *= _ShapeInstances[idx].Instance.getScale().y;
bbox_min.z *= _ShapeInstances[idx].Instance.getScale().z;
-
+
return bbox_min+_ShapeInstances[idx].Instance.getPos();
}
@@ -780,28 +780,28 @@ CVector CEntityManager::getInstanceBBoxMax(uint32 idx)
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return CVector(0,0,0);
-
+
NLMISC::CAABBox bbox;
_ShapeInstances[idx].Instance.getShapeAABBox(bbox);
-
+
CVector bbox_max;
-
+
if (bbox.getCenter() == CVector::Null)
bbox_max = CVector(-0.5f, -0.5f, -0.5f);
else
bbox_max = bbox.getMax();
-
+
bbox_max.x *= _ShapeInstances[idx].Instance.getScale().x;
bbox_max.y *= _ShapeInstances[idx].Instance.getScale().y;
bbox_max.z *= _ShapeInstances[idx].Instance.getScale().z;
-
+
return bbox_max+_ShapeInstances[idx].Instance.getPos();
}
bool CEntityManager::removeInstances()
{
if (!Scene) return false;
-
+
for(uint i=0; i<_ShapeInstances.size(); ++i)
{
if (!_ShapeInstances[i].InIGZone)
@@ -814,13 +814,13 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return false;
-
+
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return false;
-
+
UMovePrimitive *primitive = _ShapeInstances[idx].Primitive;
-
+
for (uint32 i=0; i < keys.size(); i++)
{
string param = keys[i];
@@ -891,7 +891,7 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
float v;
CVector pos = getInstancePos(idx);
-
+
if (getRelativeFloatFromString(values[i], v))
{
updateVector(param, pos, v, true);
@@ -904,10 +904,10 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
}
else if (param == "rot x" || param == "rot y" || param == "rot z")
{
-
+
float v;
CVector rot = getInstanceRot(idx);
-
+
if (getRelativeFloatFromString(values[i], v))
{
updateVector(param, rot, v, true);
@@ -922,7 +922,7 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
float v;
CVector scale = instance.getScale();
-
+
if (getRelativeFloatFromString(values[i], v))
{
updateVector(param, scale, v, true);
@@ -933,17 +933,17 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
}
instance.setScale(scale);
}
-
+
// Primitive colissions setups
-
+
if (!primitive) continue;
-
+
if (param == "col size x" || param == "col size y" || param == "col size z")
{
float width, depth;
primitive->getSize(width, depth);
float height = primitive->getHeight();
-
+
CVector size = CVector(width, depth, height);
float v;
if (getRelativeFloatFromString(values[i], v))
@@ -961,7 +961,7 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
CVector pos = instance.getPos();
float v;
-
+
if (getRelativeFloatFromString(values[i], v))
{
updateVector(param, _ShapeInstances[idx].PrimRelativePos, v, false);
@@ -981,10 +981,10 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
double orient = primitive->getOrientation(dynamicWI);
double v = 0.f;
-
+
if (values[i].empty())
continue;
-
+
if (values[i][0] == '+')
{
fromString(values[i].substr(1), v);
@@ -995,7 +995,7 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
fromString(values[i], v);
orient = v;
}
-
+
primitive->setOrientation(orient, dynamicWI);
}
else if (param == "col mask player")
@@ -1024,9 +1024,23 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
fromString(values[i], active);
primitive->setObstacle(active);
}
- else if (param == "col obstacle")
+ else if (param == "col stairs")
{
-
+ bool active;
+ fromString(values[i], active);
+ primitive->setObstacle(active);
+ if (active)
+ {
+ primitive->setReactionType(UMovePrimitive::DoNothing);
+ primitive->setTriggerType(UMovePrimitive::OverlapStairsTrigger);
+ primitive->setGlobalPosition(instance.getPos()+CVector(0, 0, 0.5f), dynamicWI);
+ }
+ else
+ {
+ primitive->setReactionType(UMovePrimitive::Slide);
+ primitive->setTriggerType(UMovePrimitive::NotATrigger);
+ primitive->setGlobalPosition(instance.getPos(), dynamicWI);
+ }
}
}
@@ -1039,7 +1053,7 @@ CShapeInstanceReference CEntityManager::getShapeInstanceUnderPos(float x, float
CShapeInstanceReference selectedInstance(UInstance(), string(""), string(""));
_LastInstanceUnderPos= NULL;
idx = -1;
-
+
// If not initialised, return
if (_ShapeInstances.empty())
return selectedInstance;
diff --git a/ryzom/client/src/entity_cl.cpp b/ryzom/client/src/entity_cl.cpp
index 9b7ca340e4..c523449a19 100644
--- a/ryzom/client/src/entity_cl.cpp
+++ b/ryzom/client/src/entity_cl.cpp
@@ -1478,6 +1478,7 @@ void CEntityCL::pacsMove(const CVectorD &vect)
if ((fabs (deltaPos.x) > 0.05) || (fabs (deltaPos.y) > 0.05))
{
_HasMoved = true;
+ _Primitive->enableZOffset(false);
_Primitive->move (deltaPos, dynamicWI);
}
}
@@ -1657,7 +1658,7 @@ void CEntityCL::snapToGround()
{
if ( isUser() || isPlayer() || isNPC())
{
-
+
float waterOffset = ClientCfg.WaterOffset;
switch(people())
{
@@ -1713,6 +1714,12 @@ void CEntityCL::snapToGround()
pos().z = vect.z;
}
+ if (_Primitive->haveZOffset()) {
+ //CVectorD prim_pos = _Primitive->getFinalPosition(dynamicWI);
+ pos().z = _Primitive->getZOffset();
+ }
+
+
// Set the box position.
posBox(pos());
}// snapToGround //
@@ -2294,7 +2301,7 @@ void CEntityCL::onStringAvailable(uint /* stringId */, const std::string &value)
{
womanTitle = ( c->getGender() == GSGENDER::female );
}
-
+
string replacement = STRING_MANAGER::CStringManagerClient::getTitleLocalizedName(_TitleRaw, womanTitle);
// Sometimes translation contains another title
@@ -2792,7 +2799,7 @@ void CEntityCL::setOpacityMin(uint32 value)
bool CEntityCL::mustShowInsceneInterface( bool enabledInSheet ) const
{
return (
- (enabledInSheet /*&& !CNPCIconCache::getInstance().getNPCIcon(this).getTextureMain().empty()*/) &&
+ (enabledInSheet /*&& !CNPCIconCache::getInstance().getNPCIcon(this).getTextureMain().empty()*/) &&
(_InSceneInterfaceEnabled) &&
( ClientCfg.Names ||
isUser () ||
@@ -3137,7 +3144,7 @@ void CEntityCL::updateVisiblePostPos(const NLMISC::TTime &/* currentTimeInMs */,
if (skeleton())
_StateFX.setClusterSystem(skeleton()->getClusterSystem());
}
-
+
if (!_SelectionFX.empty() || !_MouseOverFX.empty())
{
// Build a matrix for the fx
diff --git a/ryzom/client/src/main_loop.cpp b/ryzom/client/src/main_loop.cpp
index 492d54623b..bb9a29d4d4 100644
--- a/ryzom/client/src/main_loop.cpp
+++ b/ryzom/client/src/main_loop.cpp
@@ -1421,7 +1421,7 @@ bool mainLoop()
MainCam.setTransformMode(UTransformable::RotQuat);
CVector cameraMoves = UserEntity->getCameraMoves();
-
+
currViewPos.z += cameraMoves.z;
MainCam.setPos(currViewPos);
MainCam.setRotQuat(View.currentViewQuat());
@@ -1435,7 +1435,7 @@ bool mainLoop()
}
UserEntity->setCameraMoves(CVector(0, 0, 0));
-
+
if (StereoHMD)
{
CMatrix camMatrix;
@@ -2982,15 +2982,41 @@ CVector PacsBox[PacsBoxPointCount] =
CVector( 0.5f, 0.5f, 0), CVector( -0.5f, 0.5f, 0),
CVector( -0.5f, 0.5f, 0), CVector( -0.5f, -0.5f, 0),
+ CVector( -0.5f, -0.5f, 0), CVector( -0.5f, -0.5f, 1),
+ CVector( 0.5f, -0.5f, 0), CVector( 0.5f, -0.5f, 1),
+ CVector( 0.5f, 0.5f, 0), CVector( 0.5f, 0.5f, 1),
+ CVector( -0.5f, 0.5f, 0), CVector( -0.5f, 0.5f, 1),
+
CVector( -0.5f, -0.5f, 1), CVector( 0.5f, -0.5f, 1),
CVector( 0.5f, -0.5f, 1), CVector( 0.5f, 0.5f, 1),
CVector( 0.5f, 0.5f, 1), CVector( -0.5f, 0.5f, 1),
CVector( -0.5f, 0.5f, 1), CVector( -0.5f, -0.5f, 1),
+};
+
+const uint PacsStairPointCount = 32;
+
+CVector PacsStair[PacsStairPointCount] =
+{
+ CVector( -0.5f, -0.5f, 0), CVector( 0.5f, -0.5f, 0),
+ CVector( 0.5f, -0.5f, 0), CVector( 0.5f, 0.5f, 0),
+ CVector( 0.5f, 0.5f, 0), CVector( -0.5f, 0.5f, 0),
+ CVector( -0.5f, 0.5f, 0), CVector( -0.5f, -0.5f, 0),
CVector( -0.5f, -0.5f, 0), CVector( -0.5f, -0.5f, 1),
CVector( 0.5f, -0.5f, 0), CVector( 0.5f, -0.5f, 1),
CVector( 0.5f, 0.5f, 0), CVector( 0.5f, 0.5f, 1),
CVector( -0.5f, 0.5f, 0), CVector( -0.5f, 0.5f, 1),
+
+ CVector( -0.5f, -0.5f, 1), CVector( 0.5f, -0.5f, 1),
+ CVector( 0.5f, -0.5f, 1), CVector( 0.5f, 0.5f, 1),
+ CVector( 0.5f, 0.5f, 1), CVector( -0.5f, 0.5f, 1),
+ CVector( -0.5f, 0.5f, 1), CVector( -0.5f, -0.5f, 1),
+
+ CVector( -0.5f, -0.5f, 1), CVector( 0.5f, 0.5f, 1),
+ CVector( -0.5f, 0.5f, 1), CVector( 0.5f, -0.5f, 1),
+ CVector( -0.5f, 0, 1), CVector( 0.5f, 0, 1),
+ CVector( 0, - 0.5f, 1), CVector( 0, 0.5f, 1),
+
};
const uint PacsCylPointCount = 48;
@@ -3044,6 +3070,7 @@ void displayPACSPrimitive()
// Distance
CVector position = prim->getFinalPosition(wI);
+ bool isStairs = false;
if ((position-UserEntity->pos()).sqrnorm() < (200*200))
{
// Choose a color
@@ -3051,8 +3078,14 @@ void displayPACSPrimitive()
if (prim->isCollisionable())
{
// Static collision
- if (prim->getReactionType() == UMovePrimitive::DoNothing)
+ if (prim->getTriggerType() == UMovePrimitive::OverlapStairsTrigger)
{
+ line.Color0 = CRGBA::Blue;
+ isStairs = true;
+ position.z -= 1.0f;
+ }
+ else if (prim->getReactionType() == UMovePrimitive::DoNothing)
+ {
line.Color0 = CRGBA::Red;
}
else
@@ -3082,8 +3115,16 @@ void displayPACSPrimitive()
// Draw the primitive
if (prim->getPrimitiveType() == UMovePrimitive::_2DOrientedBox)
{
- lines = PacsBox;
- linecount = PacsBoxPointCount/2;
+ if (isStairs)
+ {
+ lines = PacsStair;
+ linecount = PacsStairPointCount/2;
+ }
+ else
+ {
+ lines = PacsBox;
+ linecount = PacsBoxPointCount/2;
+ }
float width;
float depth;
prim->getSize (width, depth);
From f0b74071ad981c1d00a6ea9f1d2d412005454244 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 25 Nov 2021 18:25:41 +0100
Subject: [PATCH 002/194] Npcs and mobs climb in stairs too
---
nel/src/pacs/move_container.cpp | 2 +-
ryzom/client/src/character_cl.cpp | 16 ++++++++--------
ryzom/client/src/entities.cpp | 8 ++++++--
ryzom/client/src/main_loop.cpp | 4 ++--
4 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/nel/src/pacs/move_container.cpp b/nel/src/pacs/move_container.cpp
index 424f7d8b91..4d093ae6a3 100644
--- a/nel/src/pacs/move_container.cpp
+++ b/nel/src/pacs/move_container.cpp
@@ -1676,7 +1676,7 @@ void CMoveContainer::reaction (const CCollisionOTInfo& first)
CVectorD first_pos = dynInfo->getFirstPrimitive()->getFinalPosition(dynInfo->getFirstWorldImage());
CVectorD second_pos = dynInfo->getSecondPrimitive()->getFinalPosition(dynInfo->getSecondWorldImage());
nlinfo("P = %f, C = %f, H = %f, D = %f", first_pos.z, second_pos.z, dynInfo->getSecondPrimitive()->getHeight(), second_pos.z-first_pos.z);
- dynInfo->getFirstPrimitive()->setZOffset(second_pos.z+dynInfo->getSecondPrimitive()->getHeight()-1.0f);
+ dynInfo->getFirstPrimitive()->setZOffset(second_pos.z+dynInfo->getSecondPrimitive()->getHeight()-10.0f);
}
}
if (dynInfo->isExit())
diff --git a/ryzom/client/src/character_cl.cpp b/ryzom/client/src/character_cl.cpp
index 68f8acfcb0..47b1ad4a2e 100644
--- a/ryzom/client/src/character_cl.cpp
+++ b/ryzom/client/src/character_cl.cpp
@@ -426,7 +426,7 @@ void CCharacterCL::computePrimitive()
// Initialize the primitive.
if (_Sheet)
{
- initPrimitive(_Sheet->ColRadius*getScale(), _Sheet->ColHeight*getScale(), _Sheet->ColLength, _Sheet->ColWidth, UMovePrimitive::DoNothing, UMovePrimitive::NotATrigger, MaskColNpc, MaskColNone, _Sheet->ClipRadius, _Sheet->ClipHeight);
+ initPrimitive(_Sheet->ColRadius*getScale(), _Sheet->ColHeight*getScale(), _Sheet->ColLength, _Sheet->ColWidth, UMovePrimitive::DoNothing, (UMovePrimitive::TTrigger)(UMovePrimitive::OverlapTrigger | UMovePrimitive::EnterTrigger), MaskColNpc, MaskColDoor, _Sheet->ClipRadius, _Sheet->ClipHeight);
}
else
{
@@ -976,7 +976,7 @@ bool CCharacterCL::build(const CEntitySheet *sheet) // virtual
_CustomScalePos *= getScale();
// Create PACS Primitive.
- initPrimitive(_Sheet->ColRadius*getScale(), _Sheet->ColHeight*getScale(), _Sheet->ColLength, _Sheet->ColWidth, UMovePrimitive::DoNothing, UMovePrimitive::NotATrigger, MaskColNpc, MaskColNone, _Sheet->ClipRadius, _Sheet->ClipHeight);
+ initPrimitive(_Sheet->ColRadius*getScale(), _Sheet->ColHeight*getScale(), _Sheet->ColLength, _Sheet->ColWidth, UMovePrimitive::DoNothing, (UMovePrimitive::TTrigger)(UMovePrimitive::OverlapTrigger | UMovePrimitive::EnterTrigger), MaskColNpc, MaskColDoor, _Sheet->ClipRadius, _Sheet->ClipHeight);
// Compute the element to be able to snap the entity to the ground.
computeCollisionEntity();
@@ -6678,7 +6678,7 @@ ADD_METHOD(void CCharacterCL::updatePos(const TTime ¤tTimeInMs, CEntityCL
updatePosCombatFloat(frameTimeRemaining, target);
}
// Compute the average speed to the destination.
- // double spd =
+ // double spd =
computeSpeed();
@@ -8232,14 +8232,14 @@ float CCharacterCL::getSheetScale() const // virtual
// getColRadius :
// Return the entity collision radius. (return 0.5 if there is any problem).
//---------------------------------------------------
-float CCharacterCL::getSheetColRadius() const
+float CCharacterCL::getSheetColRadius() const
{
- if(!_Sheet)
+ if(!_Sheet)
return 0.5f;
else
return _Sheet->ColRadius;
}
-
+
//---------------------------------------------------
// getScale :
@@ -8358,7 +8358,7 @@ std::string CCharacterCL::shapeFromItem(const CItemSheet &itemSheet) const
sheet = itemSheet.getShape();
return sheet;
-
+
}// shapeFromItem //
@@ -9146,7 +9146,7 @@ void CCharacterCL::setAuraFX(uint index, const CAnimationFX *sheet)
bi.DelayBeforeStart = 11.5f;
_AttachedFXListToStart.push_front(bi);
}
- else
+ else
{
CAttachedFX::TSmartPtr fx = new CAttachedFX;
fx->create(*this, bi, CAttachedFX::CTargeterInfo());
diff --git a/ryzom/client/src/entities.cpp b/ryzom/client/src/entities.cpp
index a17a49e4fb..3a13e0f300 100644
--- a/ryzom/client/src/entities.cpp
+++ b/ryzom/client/src/entities.cpp
@@ -945,6 +945,8 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
float height = primitive->getHeight();
CVector size = CVector(width, depth, height);
+ if (primitive->getTriggerType() == UMovePrimitive::OverlapStairsTrigger)
+ size.z -= 10.0f;
float v;
if (getRelativeFloatFromString(values[i], v))
{
@@ -954,6 +956,8 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
updateVector(param, size, v, false);
}
+ if (primitive->getTriggerType() == UMovePrimitive::OverlapStairsTrigger)
+ size.z += 10.0f;
primitive->setSize(size.x, size.y);
primitive->setHeight(size.z);
}
@@ -1028,12 +1032,12 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
bool active;
fromString(values[i], active);
- primitive->setObstacle(active);
+ primitive->setObstacle(!active);
if (active)
{
primitive->setReactionType(UMovePrimitive::DoNothing);
primitive->setTriggerType(UMovePrimitive::OverlapStairsTrigger);
- primitive->setGlobalPosition(instance.getPos()+CVector(0, 0, 0.5f), dynamicWI);
+ primitive->setGlobalPosition(instance.getPos(), dynamicWI);
}
else
{
diff --git a/ryzom/client/src/main_loop.cpp b/ryzom/client/src/main_loop.cpp
index bb9a29d4d4..7ce8b79fed 100644
--- a/ryzom/client/src/main_loop.cpp
+++ b/ryzom/client/src/main_loop.cpp
@@ -3080,9 +3080,9 @@ void displayPACSPrimitive()
// Static collision
if (prim->getTriggerType() == UMovePrimitive::OverlapStairsTrigger)
{
- line.Color0 = CRGBA::Blue;
+ line.Color0 = CRGBA::Green;
isStairs = true;
- position.z -= 1.0f;
+ position.z -= 10.0f;
}
else if (prim->getReactionType() == UMovePrimitive::DoNothing)
{
From 85c80ab0f2bb7ed7fcc20dba668bdcb1c3fb4786 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 26 Nov 2021 19:13:53 +0100
Subject: [PATCH 003/194] Smooth the z displacement of entities
---
nel/include/nel/pacs/move_primitive.h | 10 +++--
nel/include/nel/pacs/u_move_primitive.h | 4 +-
nel/src/pacs/move_container.cpp | 3 +-
ryzom/client/src/entity_cl.cpp | 50 +++++++++++++++++++++++--
ryzom/client/src/entity_cl.h | 8 +++-
5 files changed, 62 insertions(+), 13 deletions(-)
diff --git a/nel/include/nel/pacs/move_primitive.h b/nel/include/nel/pacs/move_primitive.h
index d77517a7d4..928ed10fcc 100644
--- a/nel/include/nel/pacs/move_primitive.h
+++ b/nel/include/nel/pacs/move_primitive.h
@@ -251,16 +251,17 @@ class CMovePrimitive: public UMovePrimitive
_Height=height;
}
- void setZOffset(float offset)
+ void setZFinalPosition(float pos)
{
- _ZOffset = offset;
+ _ZFinalPosition = pos;
}
- float getZOffset()
+ float getZFinalPosition()
{
- return _ZOffset;
+ return _ZFinalPosition;
}
+
bool haveZOffset()
{
return _HaveZOffset;
@@ -489,6 +490,7 @@ class CMovePrimitive: public UMovePrimitive
sint32 _IterationCount;
float _ZOffset;
+ float _ZFinalPosition;
bool _HaveZOffset;
};
diff --git a/nel/include/nel/pacs/u_move_primitive.h b/nel/include/nel/pacs/u_move_primitive.h
index e067c3e6b6..cba266174e 100644
--- a/nel/include/nel/pacs/u_move_primitive.h
+++ b/nel/include/nel/pacs/u_move_primitive.h
@@ -280,9 +280,9 @@ class UMovePrimitive
*/
virtual float getHeight () const =0;
- virtual void setZOffset(float offset) =0;
+ virtual void setZFinalPosition(float pos) =0;
- virtual float getZOffset() =0;
+ virtual float getZFinalPosition() =0;
virtual bool haveZOffset() =0;
diff --git a/nel/src/pacs/move_container.cpp b/nel/src/pacs/move_container.cpp
index 4d093ae6a3..c313fefb91 100644
--- a/nel/src/pacs/move_container.cpp
+++ b/nel/src/pacs/move_container.cpp
@@ -1675,8 +1675,7 @@ void CMoveContainer::reaction (const CCollisionOTInfo& first)
dynInfo->getFirstPrimitive()->enableZOffset(true);
CVectorD first_pos = dynInfo->getFirstPrimitive()->getFinalPosition(dynInfo->getFirstWorldImage());
CVectorD second_pos = dynInfo->getSecondPrimitive()->getFinalPosition(dynInfo->getSecondWorldImage());
- nlinfo("P = %f, C = %f, H = %f, D = %f", first_pos.z, second_pos.z, dynInfo->getSecondPrimitive()->getHeight(), second_pos.z-first_pos.z);
- dynInfo->getFirstPrimitive()->setZOffset(second_pos.z+dynInfo->getSecondPrimitive()->getHeight()-10.0f);
+ dynInfo->getFirstPrimitive()->setZFinalPosition(second_pos.z+dynInfo->getSecondPrimitive()->getHeight()-10.0f);
}
}
if (dynInfo->isExit())
diff --git a/ryzom/client/src/entity_cl.cpp b/ryzom/client/src/entity_cl.cpp
index c523449a19..616363f0be 100644
--- a/ryzom/client/src/entity_cl.cpp
+++ b/ryzom/client/src/entity_cl.cpp
@@ -740,6 +740,8 @@ void CEntityCL::init()
_EntityName = "Name";
}
_NameId = 0;
+ _LastSnapToGroup = 0;
+ _CurrentZOffset = 0;
_PermanentStatutIcon.clear();
@@ -1481,6 +1483,17 @@ void CEntityCL::pacsMove(const CVectorD &vect)
_Primitive->enableZOffset(false);
_Primitive->move (deltaPos, dynamicWI);
}
+ else
+ {
+ // This code force the player to move even when not moving, it's used to trigger special collissions
+ if (isUser())
+ {
+ _HasMoved = true;
+ deltaPos.x = 0.0001;
+ _Primitive->move (deltaPos, dynamicWI);
+ }
+
+ }
}
else
{
@@ -1714,11 +1727,42 @@ void CEntityCL::snapToGround()
pos().z = vect.z;
}
- if (_Primitive->haveZOffset()) {
- //CVectorD prim_pos = _Primitive->getFinalPosition(dynamicWI);
- pos().z = _Primitive->getZOffset();
+ if (_Primitive->haveZOffset())
+ {
+
+ if (_LastSnapToGroup > 0)
+ {
+ if (pos().z + _CurrentZOffset < _Primitive->getZFinalPosition())
+ {
+ _CurrentZOffset += (ryzomGetLocalTime() - _LastSnapToGroup)/100.0f;
+
+ if (pos().z + _CurrentZOffset > _Primitive->getZFinalPosition())
+ _CurrentZOffset = _Primitive->getZFinalPosition() - pos().z;
+ }
+
+ if (pos().z + _CurrentZOffset > _Primitive->getZFinalPosition())
+ {
+ _CurrentZOffset -= (ryzomGetLocalTime() - _LastSnapToGroup)/100.0f;
+
+ if (pos().z + _CurrentZOffset < _Primitive->getZFinalPosition())
+ _CurrentZOffset = _Primitive->getZFinalPosition() - pos().z;
+ }
+
+ pos().z += _CurrentZOffset;
+ }
}
+ else
+ {
+ if (_CurrentZOffset > 0)
+ {
+ _CurrentZOffset -= (ryzomGetLocalTime() - _LastSnapToGroup)/100.0f;
+ if (_CurrentZOffset < 0)
+ _CurrentZOffset = 0;
+ pos().z += _CurrentZOffset;
+ }
+ }
+ _LastSnapToGroup = ryzomGetLocalTime();
// Set the box position.
posBox(pos());
diff --git a/ryzom/client/src/entity_cl.h b/ryzom/client/src/entity_cl.h
index f2f99b347d..092a85dd3c 100644
--- a/ryzom/client/src/entity_cl.h
+++ b/ryzom/client/src/entity_cl.h
@@ -241,7 +241,7 @@ class CEntityCL : public NLMISC::IStreamable, public STRING_MANAGER::IStringWait
/// Return the persistent NPC alias of entity (0 if N/A).
uint32 npcAlias() const {return _NPCAlias; }
- /// Set the persistent NPC alias of the entity.
+ /// Set the persistent NPC alias of the entity.
void npcAlias(uint32 alias) {_NPCAlias = alias; }
/// Method to call to initialize all members of the right class.
@@ -702,7 +702,7 @@ class CEntityCL : public NLMISC::IStreamable, public STRING_MANAGER::IStringWait
// todo handle NPC entities
// Return true if this entity is a NPC (not a fauna)
bool isNPC () const { return Type == NPC; }
-
+
// Return true if this entity can have missions icons (humanoid NPCs (including Karavan), Kami or Bot Object)
bool canHaveMissionIcon() const { return isNPC() || isKami() || isUnknownRace(); }
@@ -949,6 +949,10 @@ class CEntityCL : public NLMISC::IStreamable, public STRING_MANAGER::IStringWait
uint32 _NameId;
// Primitive used for the collision in PACS
NLPACS::UMovePrimitive *_Primitive;
+
+ uint64 _LastSnapToGroup;
+ float _CurrentZOffset;
+
// 3D Logic info for light request.
CEntityLogicInfo3D _LogicInfo3D;
// Box around the entity.
From 80497e08e692b4f49acc571b7e203353801ad9d5 Mon Sep 17 00:00:00 2001
From: nimetu
Date: Mon, 21 Mar 2022 10:46:12 +0200
Subject: [PATCH 004/194] Add toggle_free_look action handler
---
.../src/interface_v3/action_handler_game.cpp | 14 ++++++++++++++
ryzom/client/src/motion/user_controls.h | 2 ++
2 files changed, 16 insertions(+)
diff --git a/ryzom/client/src/interface_v3/action_handler_game.cpp b/ryzom/client/src/interface_v3/action_handler_game.cpp
index 8c8c56e34e..15851758db 100644
--- a/ryzom/client/src/interface_v3/action_handler_game.cpp
+++ b/ryzom/client/src/interface_v3/action_handler_game.cpp
@@ -860,6 +860,20 @@ class CHandlerContextFreeLook : public IActionHandler
};
REGISTER_ACTION_HANDLER( CHandlerContextFreeLook, "context_free_look");
+// ***************************************************************************
+class CHandlerToggleFreeLook : public IActionHandler
+{
+public:
+ void execute(CCtrlBase * /* pCaller */, const std::string & /* sParams */)
+ {
+ if (UserControls.getFreeLook())
+ UserControls.stopFreeLook();
+ else
+ UserControls.startFreeLook();
+ }
+};
+REGISTER_ACTION_HANDLER( CHandlerToggleFreeLook, "toggle_free_look");
+
// ***************************************************************************
// GCM Move
// ***************************************************************************
diff --git a/ryzom/client/src/motion/user_controls.h b/ryzom/client/src/motion/user_controls.h
index 1ceabd8d9c..7f09ef7f29 100644
--- a/ryzom/client/src/motion/user_controls.h
+++ b/ryzom/client/src/motion/user_controls.h
@@ -179,6 +179,8 @@ class CUserControls
/// Stop Free Look (can be called multiple times if needed). Additionaly, the mouse/pointer is restored
void stopFreeLook();
+ bool getFreeLook() const { return _FreeLook; }
+
/// Is the camera inside the character.
bool isInternalView() {return _InternalView;}
From 4aeb93270cf37a2304c1b166149a33af9c8689a9 Mon Sep 17 00:00:00 2001
From: Nimetu
Date: Mon, 21 Mar 2022 10:52:01 +0200
Subject: [PATCH 005/194] Add toggle_free_look ah keybinding and macro options
---
ryzom/client/data/gamedev/interfaces_v3/actions.xml | 1 +
ryzom/client/data/gamedev/interfaces_v3/keys.xml | 1 +
ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml | 1 +
3 files changed, 3 insertions(+)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/actions.xml b/ryzom/client/data/gamedev/interfaces_v3/actions.xml
index 0a00cb0f64..194434a839 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/actions.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/actions.xml
@@ -417,6 +417,7 @@
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/keys.xml b/ryzom/client/data/gamedev/interfaces_v3/keys.xml
index 677854a9ef..60d219ddb2 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/keys.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/keys.xml
@@ -36,6 +36,7 @@
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml b/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml
index 65c7603cd2..b7ecb65519 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml
@@ -37,6 +37,7 @@
+
From d84e477c351d529d3572030a50b7fcdf53e29d19 Mon Sep 17 00:00:00 2001
From: nimetu
Date: Mon, 19 Dec 2022 14:49:39 +0200
Subject: [PATCH 006/194] Unassign key-combo from macro
---
.../src/interface_v3/macrocmd_manager.cpp | 38 +++++++++++++++++++
.../src/interface_v3/macrocmd_manager.h | 2 +
2 files changed, 40 insertions(+)
diff --git a/ryzom/client/src/interface_v3/macrocmd_manager.cpp b/ryzom/client/src/interface_v3/macrocmd_manager.cpp
index f942ae7e1d..f19bd71d52 100644
--- a/ryzom/client/src/interface_v3/macrocmd_manager.cpp
+++ b/ryzom/client/src/interface_v3/macrocmd_manager.cpp
@@ -162,6 +162,12 @@ void CMacroCmd::moveDownCommand (uint cmdNb)
Commands[cmdNb+1] = c;
}
+// ------------------------------------------------------------------------------------------------
+void CMacroCmd::unassignCombo()
+{
+ Combo.Key = KeyCount;
+ Combo.KeyButtons = noKeyButton;
+}
// ------------------------------------------------------------------------------------------------
// CMacroCmdManager
@@ -304,6 +310,19 @@ void CMacroCmdManager::delMacro(sint32 nMacNb)
addActionManagerEntries();
}
+void CMacroCmdManager::unassignMacro(size_t nMacNb)
+{
+ if (nMacNb >= _Macros.size())
+ {
+ nlwarning("unassign called on out-of-bounds index %lu, (size %lu)", nMacNb, _Macros.size());
+ return;
+ }
+
+ delActionManagerEntries();
+ _Macros[nMacNb].unassignCombo();
+ addActionManagerEntries();
+}
+
// ------------------------------------------------------------------------------------------------
// Refresh key association that can be changed in another place than in macro container
void CMacroCmdManager::refreshMacroCombo()
@@ -1128,6 +1147,25 @@ class CHandlerMacrosCopy : public IActionHandler
};
REGISTER_ACTION_HANDLER( CHandlerMacrosCopy, "macros_copy");
+
+// ***************************************************************************
+// Called from context menu on a macro
+class CHandlerMacrosUnassign : public IActionHandler
+{
+public:
+ virtual void execute(CCtrlBase *pCaller, const string &/* Params */)
+ {
+ sint nMacNb = getMacroFromId(pCaller->getId());
+ if (nMacNb < 0) return;
+
+ CMacroCmdManager::getInstance()->unassignMacro(nMacNb);
+ // update keybinding in macros list without calling runActionHandler("macros_open", NULL)
+ CViewText *pVT = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(pCaller->getId() + ":" + TEMPLATE_MACRO_ELT_KEYTEXT));
+ if (pVT) pVT->setText(CI18N::get(VIEW_EDITCMD_TEXT_KEY_DEFAULT));
+ }
+};
+REGISTER_ACTION_HANDLER( CHandlerMacrosUnassign, "macros_unassign");
+
// ***************************************************************************
// Called from context menu on a macro
class CHandlerMacrosDel : public IActionHandler
diff --git a/ryzom/client/src/interface_v3/macrocmd_manager.h b/ryzom/client/src/interface_v3/macrocmd_manager.h
index 0bc2eec03c..dfe59b67b7 100644
--- a/ryzom/client/src/interface_v3/macrocmd_manager.h
+++ b/ryzom/client/src/interface_v3/macrocmd_manager.h
@@ -78,6 +78,7 @@ class CMacroCmd
void delCommand (uint cmdNb);
void moveUpCommand (uint cmdNb);
void moveDownCommand (uint cmdNb);
+ void unassignCombo();
void writeTo (xmlNodePtr node) const;
bool readFrom (xmlNodePtr node);
@@ -104,6 +105,7 @@ class CMacroCmdManager
const std::vector &getMacros() { return _Macros; }
void addMacro (const CMacroCmd &m, sint32 nPos=-1);
void delMacro(sint32 nMacNb);
+ void unassignMacro(size_t nMacNb);
void removeAllMacros();
void refreshMacroCombo();
From ebd9b0f5d525427f1f6145522795c800458b011c Mon Sep 17 00:00:00 2001
From: nimetu
Date: Mon, 19 Dec 2022 14:59:14 +0200
Subject: [PATCH 007/194] Right-click menu command for macros_unassign
---
ryzom/client/data/gamedev/interfaces_v3/macros.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/macros.xml b/ryzom/client/data/gamedev/interfaces_v3/macros.xml
index d14e6e8886..297a94980d 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/macros.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/macros.xml
@@ -238,6 +238,7 @@
+
From b0a61fa9bbd0bce9e2bdd71a0f2b3a2661f921bd Mon Sep 17 00:00:00 2001
From: Nuno
Date: Mon, 13 Mar 2023 15:18:21 +0100
Subject: [PATCH 008/194] Switch to a real fame, added cap to minimal fame
based on equipment
---
.../entity_manager/entity_callbacks.cpp | 1 +
.../game_item_manager/player_inv_equip.cpp | 15 +-
.../guild_manager/fame_manager.cpp | 131 +++++++++++-------
.../player_manager/character.cpp | 59 ++------
.../player_manager/character.h | 9 ++
.../player_manager/character_inlines.h | 28 ++++
.../character_inventory_manipulation.cpp | 8 +-
7 files changed, 151 insertions(+), 100 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/entity_manager/entity_callbacks.cpp b/ryzom/server/src/entities_game_service/entity_manager/entity_callbacks.cpp
index cd8fdcefcd..e2bc9a3fef 100644
--- a/ryzom/server/src/entities_game_service/entity_manager/entity_callbacks.cpp
+++ b/ryzom/server/src/entities_game_service/entity_manager/entity_callbacks.cpp
@@ -453,6 +453,7 @@ void cbClientReady( CMessage& msgin, const std::string &serviceName, NLNET::TSer
c->initPvpPointDb();
c->initOrganizationInfos();
+ c->resetFameDatabase();
c->updateOutpostAdminFlagInDB();
if ( !player->getUserPriv().empty() && !player->havePriv(":DEV:") )
diff --git a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp
index 15a1b49fe4..eb2a02cff7 100644
--- a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp
+++ b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp
@@ -20,6 +20,7 @@
#include "game_share/slot_equipment.h"
#include "player_manager/character.h"
+#include "guild_manager/fame_manager.h"
#include "egs_sheets/egs_sheets.h"
using namespace NLMISC;
@@ -123,8 +124,18 @@ void CEquipInvView::onItemChanged(uint32 slot, INVENTORIES::TItemChangeFlags cha
}
// Update jewels enchants
- getCharacter()->updateJewelsTags(false);
- getCharacter()->updateJewelsModifiers();
+ if (getInventory()->getInventoryId() == INVENTORIES::equipment)
+ {
+ getCharacter()->updateJewelsTags(false);
+ getCharacter()->updateJewelsModifiers();
+ }
+
+ // Update fame
+ if (getInventory()->getInventoryId() == INVENTORIES::handling)
+ {
+ CFameManager::getInstance().enforceFameCaps(getCharacter()->getId(), getCharacter()->getOrganization(), getCharacter()->getAllegiance());
+ }
+
}
// ****************************************************************************
diff --git a/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp b/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
index fd7bf33486..0f319a4b17 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
@@ -27,6 +27,7 @@
#include "player_manager/player.h"
#include "guild_manager/guild.h"
#include "guild_manager/guild_manager.h"
+#include "egs_sheets/egs_sheets.h"
using namespace std;
using namespace NLMISC;
@@ -870,11 +871,11 @@ void CFameManager::addFameIndexed(const CEntityId &entityId, uint32 faction, sin
realDeltaFame = ((FAME_GAIN_FACTOR - fame) / FameAbsoluteMax) * deltaFame;
}
- if (realDeltaFame > 3*6000)
- realDeltaFame = 3*6000;
+ if (realDeltaFame > 3*kFameMultipler)
+ realDeltaFame = 3*kFameMultipler;
- if (realDeltaFame < -3*6000)
- realDeltaFame = -3*6000;
+ if (realDeltaFame < -3*kFameMultipler)
+ realDeltaFame = -3*kFameMultipler;
if (!isMarauder && realDeltaFame < 0)
realDeltaFame /= 10;
@@ -905,6 +906,7 @@ void CFameManager::addFameIndexed(const CEntityId &entityId, uint32 faction, sin
clamp(fame,FameAbsoluteMin,maxFame);
// Check to make sure player still qualifies to be in declared allegiances.
c->verifyClanAllegiance(PVP_CLAN::getClanFromIndex(faction), sint32(fame));
+ c->addSavedFame((uint32)PVP_CLAN::getClanFromIndex(faction), realDeltaFame);
c->setFameValuePlayer(faction, sint32(fame), maxFame, fow.LastFameChangeTrends[faction]);
if (deltaFame > 0)
CCharacter::sendDynamicSystemMessage( c->getEntityRowId(), "FAME_GAIN_CHAR", fameMsgParams );
@@ -1287,14 +1289,21 @@ sint32 CFameManager::getMaxFameByClan(std::pairsetFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
- }
- if (gu)
- {
- gu->setFameValueGuild(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
- }
- }
+ const CStaticItem *leftForm = NULL;
+ const CStaticItem *rightForm = NULL;
- for (int looper = PVP_CLAN::BeginCivs; looper <= PVP_CLAN::EndCivs; looper++)
+ CGameItemPtr leftItem = ch->getLeftHandItem();
+ if (leftItem != NULL)
+ leftForm = CSheets::getForm(leftItem->getSheetId());
+
+ CGameItemPtr rightItem = ch->getRightHandItem();
+ if (rightItem != NULL)
+ rightForm = CSheets::getForm(rightItem->getSheetId());
+
+ haveWeapons = (leftForm && (leftForm->Family == ITEMFAMILY::MELEE_WEAPON || leftForm->Family == ITEMFAMILY::RANGE_WEAPON))
+ ||
+ (rightForm && (rightForm->Family == ITEMFAMILY::MELEE_WEAPON || rightForm->Family == ITEMFAMILY::RANGE_WEAPON));
+
+ if (ch->getSavedFames() && haveWeapons)
{
- theFactionIndex = PVP_CLAN::getFactionIndex((PVP_CLAN::TPVPClan)looper);
- fame = fow.Fames[theFactionIndex];
- maxFame = -30*kFameMultipler;
- if( fame != NO_FAME)
- {
- clamp(fame,FameAbsoluteMin,maxFame);
- fow.Fames[theFactionIndex] = fame;
- }
- if (ch)
- {
- ch->setFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
- }
- if (gu)
+ ch->setSavedFames(false);
+ for (uint i = PVP_CLAN::BeginClans; i < PVP_CLAN::EndClans; i++)
{
- gu->setFameValueGuild(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
+ theFactionIndex = PVP_CLAN::getFactionIndex((PVP_CLAN::TPVPClan)i);
+ fow.Fames[theFactionIndex] = ch->restoreFame(i);
}
}
- return;
+ if (!ch->getSavedFames() && !haveWeapons)
+ ch->setSavedFames(true);
+
}
// Check cults, first member of allegiance
@@ -1564,16 +1558,25 @@ void CFameManager::enforceFameCaps(const NLMISC::CEntityId &entityId, uint32 org
clamp(fame,FameAbsoluteMin,maxFame);
fow.Fames[theFactionIndex] = fame;
}
+
if (ch)
{
+ // Cap to -40
+ if (!haveWeapons)
+ {
+ ch->saveFame(looper, fame);
+ clamp(maxFame, -40*kFameMultipler, maxFame);
+ clamp(fame, -40*kFameMultipler, fame);
+ fow.Fames[theFactionIndex] = fame;
+ }
+
ch->setFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
}
if (gu)
- {
gu->setFameValueGuild(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
- }
}
}
+
// Check civs, second member of allegiance
if (theCiv != PVP_CLAN::None)
{
@@ -1589,6 +1592,14 @@ void CFameManager::enforceFameCaps(const NLMISC::CEntityId &entityId, uint32 org
}
if (ch)
{
+ // Cap to -40
+ if (!haveWeapons)
+ {
+ ch->saveFame(looper, fame);
+ clamp(maxFame, -40*kFameMultipler, maxFame);
+ clamp(fame, -40*kFameMultipler, fame);
+ fow.Fames[theFactionIndex] = fame;
+ }
ch->setFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
}
if (gu)
@@ -1597,6 +1608,32 @@ void CFameManager::enforceFameCaps(const NLMISC::CEntityId &entityId, uint32 org
}
}
}
+
+
+ theFactionIndex = PVP_CLAN::getFactionIndex(PVP_CLAN::Marauder);
+ fame = fow.Fames[theFactionIndex];
+ maxFame = getMaxFameByClan(allegiance, organization, PVP_CLAN::Marauder);
+ if( fame != NO_FAME)
+ {
+ clamp(fame,FameAbsoluteMin,maxFame);
+ fow.Fames[theFactionIndex] = fame;
+ }
+
+ if (ch)
+ {
+ // Cap to -40
+ if (!haveWeapons)
+ {
+ ch->saveFame((uint32)PVP_CLAN::Marauder, fame);
+ clamp(maxFame, -40*kFameMultipler, maxFame);
+ clamp(fame, -40*kFameMultipler, fame);
+ fow.Fames[theFactionIndex] = fame;
+ }
+ ch->setFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
+ }
+
+ if (gu)
+ gu->setFameValueGuild(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
}
void CFameManager::setAndEnforceTribeFameCap(const NLMISC::CEntityId &entityId, uint32 organization, std::pair allegiance)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 2169e7de4f..cb32da5f31 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -677,6 +677,8 @@ CCharacter::CCharacter()
_FriendVisibility = VisibleToAll;
_LangChannel = "rf";
_NewTitle = "Refugee";
+ _SavedFame = false;
+
initDatabase();
_PowoCell = 0;
@@ -17072,36 +17074,6 @@ void CCharacter::setFameValuePlayer(uint32 factionIndex, sint32 playerFame, sint
{
if (playerFame != NO_FAME)
{
- // Update Marauder fame when < 50 and other fame change
- uint32 marauderIdx = PVP_CLAN::getFactionIndex(PVP_CLAN::Marauder);
- sint32 marauderFame = CFameInterface::getInstance().getFameIndexed(_Id, marauderIdx);
- if (factionIndex != marauderIdx)
- {
- sint32 maxOtherfame = -100*kFameMultipler;
- for (uint8 fameIdx = 0; fameIdx < 7; fameIdx++)
- {
- if (fameIdx == marauderIdx)
- continue;
-
- sint32 fame = CFameInterface::getInstance().getFameIndexed(_Id, fameIdx);
-
- if (fame > maxOtherfame)
- maxOtherfame = fame;
- }
-
- if (marauderFame < 50*kFameMultipler)
- {
- if (maxOtherfame < -50*kFameMultipler) // Cap to 50
- maxOtherfame = -50*kFameMultipler;
- CFameManager::getInstance().setEntityFame(_Id, marauderIdx, -maxOtherfame, false);
- }
- else
- {
- if (maxOtherfame > -40*kFameMultipler)
- CFameManager::getInstance().setEntityFame(_Id, marauderIdx, -maxOtherfame, false);
- }
- }
-
// _PropertyDatabase.setProp( toString("FAME:PLAYER%d:VALUE", fameIndexInDatabase),
// sint64(float(playerFame)/FameAbsoluteMax*100) );
CBankAccessor_PLR::getFAME()
@@ -17129,18 +17101,11 @@ void CCharacter::setFameValuePlayer(uint32 factionIndex, sint32 playerFame, sint
bool canPvp = false;
- for (uint8 fameIdx = 0; fameIdx < 7; fameIdx++)
+ for (uint8 fameIdx = PVP_CLAN::BeginClans; fameIdx < PVP_CLAN::EndClans; fameIdx++)
{
- sint32 fame = CFameInterface::getInstance().getFameIndexed(_Id, fameIdx);
-
- if (fame >= PVPFameRequired * 6000)
- {
- canPvp = true;
- }
- else if (fame <= -PVPFameRequired * 6000)
- {
+ sint32 fame = CFameInterface::getInstance().getFameIndexed(_Id, PVP_CLAN::getFactionIndex((PVP_CLAN::TPVPClan)fameIdx));
+ if ((fame >= PVPFameRequired * kFameMultipler) || (fame <= -PVPFameRequired * kFameMultipler))
canPvp = true;
- }
}
if (_LoadingFinish)
@@ -17186,13 +17151,15 @@ void CCharacter::resetFameDatabase()
CFameManager::getInstance().enforceFameCaps(getId(), getOrganization(), getAllegiance());
CFameManager::getInstance().setAndEnforceTribeFameCap(getId(), getOrganization(), getAllegiance());
}
-
- for (uint i = 0; i < CStaticFames::getInstance().getNbFame(); ++i)
+ else
{
- // update player fame info
- sint32 fame = fi.getFameIndexed(_Id, i, false, true);
- sint32 maxFame = CFameManager::getInstance().getMaxFameByFactionIndex(getAllegiance(), getOrganization(), i);
- setFameValuePlayer(i, fame, maxFame, 0);
+ for (uint i = 0; i < CStaticFames::getInstance().getNbFame(); ++i)
+ {
+ // update player fame info
+ sint32 fame = fi.getFameIndexed(_Id, i, false, true);
+ sint32 maxFame = CFameManager::getInstance().getMaxFameByFactionIndex(getAllegiance(), getOrganization(), i);
+ setFameValuePlayer(i, fame, maxFame, 0);
+ }
}
}
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.h b/ryzom/server/src/entities_game_service/player_manager/character.h
index 558c7ffe81..9e676d07fc 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.h
+++ b/ryzom/server/src/entities_game_service/player_manager/character.h
@@ -1998,6 +1998,8 @@ class CCharacter : public CCharacterPersistantData, public CEntityBase, public N
/// set a fame value for the player, send info to the client.
void setFameValuePlayer(uint32 factionIndex, sint32 playerFame, sint32 fameMax, uint16 fameTrend);
+ void saveFameValuePlayer(uint32 factionIndex, sint32 playerFame);
+
// set the fame boundaries, send info to the client.
// Called when some of the CVariables are changed.
void setFameBoundaries();
@@ -2318,6 +2320,11 @@ class CCharacter : public CCharacterPersistantData, public CEntityBase, public N
CPlayerRoomInterface &getRoomInterface();
EGSPD::CFameContainerPD &getPlayerFamesContainer();
+ void setSavedFames(bool status);
+ bool getSavedFames();
+ void saveFame(uint32 i, sint32 fame);
+ void addSavedFame(uint32 i, sint32 fame);
+ sint32 restoreFame(uint32 i);
bool checkCharacterStillValide(const char* msgError);
@@ -3437,6 +3444,8 @@ class CCharacter : public CCharacterPersistantData, public CEntityBase, public N
std::string _DontTranslate;
+ sint32 _SavedFames[PVP_CLAN::NbClans];
+ bool _SavedFame;
/// SDB path where player wins HoF points in PvP (if not empty)
std::string _SDBPvPPath;
diff --git a/ryzom/server/src/entities_game_service/player_manager/character_inlines.h b/ryzom/server/src/entities_game_service/player_manager/character_inlines.h
index 471bfc42cf..59aa565e9e 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character_inlines.h
+++ b/ryzom/server/src/entities_game_service/player_manager/character_inlines.h
@@ -773,6 +773,34 @@ inline EGSPD::CFameContainerPD &CCharacter::getPlayerFamesContainer()
return *_Fames;
}
+inline void CCharacter::setSavedFames(bool status)
+{
+ _SavedFame = status;
+}
+
+inline bool CCharacter::getSavedFames()
+{
+ return _SavedFame;
+}
+
+
+inline void CCharacter::saveFame(uint32 i, sint32 fame)
+{
+ _SavedFames[i] = fame;
+}
+
+inline void CCharacter::addSavedFame(uint32 i, sint32 fame)
+{
+ _SavedFames[i] += fame;
+}
+
+
+inline sint32 CCharacter::restoreFame(uint32 i)
+{
+ return _SavedFames[i];
+}
+
+
//------------------------------------------------------------------------------
inline bool CCharacter::logXpGain() const
diff --git a/ryzom/server/src/entities_game_service/player_manager/character_inventory_manipulation.cpp b/ryzom/server/src/entities_game_service/player_manager/character_inventory_manipulation.cpp
index 2dbb9b04f9..42dce8fc17 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character_inventory_manipulation.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character_inventory_manipulation.cpp
@@ -60,6 +60,7 @@
#include "game_item_manager/player_inventory.h"
#include "guild_manager/guild.h"
#include "guild_manager/guild_manager.h"
+#include "guild_manager/fame_manager.h"
#include "mission_manager/mission_guild.h"
#include "mission_manager/mission_solo.h"
#include "mission_manager/mission_team.h"
@@ -1222,11 +1223,8 @@ void CCharacter::unequipCharacter(INVENTORIES::TInventory invId, uint32 slot, bo
CBankAccessor_PLR::getCHARACTER_INFO().getPARRY().setCurrent(
_PropertyDatabase, checkedCast(_CurrentParryLevel));
CPhraseManager::getInstance().disengage(_EntityRowId, true);
- }
- // Remove enchant weapon effects as they are linked to equipped item
- if (invId == INVENTORIES::handling && slot == 0)
- {
+ // Remove enchant weapon effects as they are linked to equipped item
CSEffectPtr const effect = lookForActiveEffect(EFFECT_FAMILIES::PowerEnchantWeapon);
if (effect)
@@ -3165,7 +3163,7 @@ void CCharacter::rechargeItem(INVENTORIES::TInventory invId, uint32 slot)
sendDynamicSystemMessage(_EntityRowId, "ITEM_IS_FULLY_RECHARGED", params);
return;
}
-
+
rightHandItem->reloadSapLoad(sapRechargeItem->sapLoad());
// consume sap recharge (destroy it)
inv->deleteStackItem(slot, 1);
From 8539e8c72f550586fc1c6ee8c7000d49d3a728cd Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 17 Mar 2023 13:46:23 +0100
Subject: [PATCH 009/194] Fix getPlayerPetsInfos
---
.../entities_game_service/mission_manager/missions_commands.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index 77284befe3..a58dd9d166 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -3660,7 +3660,7 @@ NLMISC_COMMAND(getPlayerPetsInfos, "get player pets infos", "")
GET_ACTIVE_CHARACTER
std::vector< std::string > lines;
- NLMISC::splitString(c->getPetsInfos(), ",", lines);
+ NLMISC::splitString(c->getPetsInfos(), "\n", lines);
for (uint8 i = 0; i < lines.size(); i++)
log.displayNL("%s", lines[i].c_str());
return true;
From 424866b718d718e3e6ce79ad6b72bc5dacc7552b Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 17 Mar 2023 13:46:23 +0100
Subject: [PATCH 010/194] Fix getPlayerPetsInfos
---
.../entities_game_service/mission_manager/missions_commands.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index 77284befe3..a58dd9d166 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -3660,7 +3660,7 @@ NLMISC_COMMAND(getPlayerPetsInfos, "get player pets infos", "")
GET_ACTIVE_CHARACTER
std::vector< std::string > lines;
- NLMISC::splitString(c->getPetsInfos(), ",", lines);
+ NLMISC::splitString(c->getPetsInfos(), "\n", lines);
for (uint8 i = 0; i < lines.size(); i++)
log.displayNL("%s", lines[i].c_str());
return true;
From ecd4bab466861696aa7f926566cde99c607863f5 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 18 Mar 2023 17:26:49 +0100
Subject: [PATCH 011/194] Fix ark lua
---
.../client/data/gamedev/interfaces_v3/ark.lua | 2 +-
.../gamedev/interfaces_v3/ark_lessons.lua | 108 +++++++++++++++++-
.../gamedev/interfaces_v3/info_player.lua | 99 +---------------
.../gamedev/interfaces_v3/tp_interface.lua | 2 +-
ryzom/server/src/ai_service/ai.cpp | 2 +-
5 files changed, 108 insertions(+), 105 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark.lua b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
index e4f62fbcae..30040e00a6 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
@@ -101,7 +101,7 @@ function ArkMissionCatalog:OpenCat(cat, url)
local htmlA = getUI(ArkMissionCatalog.window_id..":content:htmlA")
local htmlB = getUI(ArkMissionCatalog.window_id..":content:htmlB")
local htmlC = getUI(ArkMissionCatalog.window_id..":content:htmlC")
- if cat == "title" or cat == "academic" or cat == "rykea" or cat == "workshops" or cat == "etools" then
+ if cat ~= "storyline" and cat ~= "daily" and cat ~= "achv" and cat ~= "puzzle" then
ArkMissionCatalog.posxB = 180
ArkMissionCatalog.widthB = 240
ArkMissionCatalog.widthC = 530
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua b/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
index eaf6db232a..fffaf0800d 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
@@ -1,3 +1,7 @@
+if game == nil then
+ game= {}
+end
+
if ArkLessons == nil then
ArkLessons = {}
@@ -24,8 +28,108 @@ function ArkLessons:Callback(event, id, args)
end
end
+game.ArkLessonUsedWindowUrl = "https://app.ryzom.com/app_arcc/index.php?action=mLesson_Run&script="
+
webig.urls_to_check = {}
+
+function ArkOpenLesson(id, require_rpitem)
+ debug(require_rpitem)
+ if id ~= 0 and id ~= nil then
+ local win = getUI("ui:interface:web_transaction_lessons")
+ if win then
+ win:find("html"):browse(game.ArkLessonUsedWindowUrl..id)
+ else
+ getUI("ui:interface:web_transactions"):find("html"):browse(game.ArkLessonUsedWindowUrl..id)
+ end
+ end
+end
+
+function ArkRevealLesson(id, i, total)
+ if i == game.ArkLessonRevealStep[id] then
+ game.ArkLessonRevealStep[id] = game.ArkLessonRevealStep[id] + 1
+ game:ArkLessonCallback("step", id, i)
+ game:ArkRevealLessonInfos(id, i, total)
+ if i == total then
+ game:ArkAcceptLesson()
+ end
+ end
+end
+
+function game:ArkRevealLessonInfos(id, i, total)
+ local ui = getUI("ui:interface:ArkLessonWin"..tostring(id))
+ if ui ~= nil then
+ local html = ui:find("html")
+ html:showDiv("enabled_"..tostring(i), false)
+ html:showDiv("disabled_"..tostring(i), false)
+ html:showDiv("current_"..tostring(i), true)
+ if i > 1 then
+ if i ~= total+1 then
+ html:showDiv("current_"..tostring(i-1), false)
+ html:showDiv("enabled_"..tostring(i-1), true)
+ end
+ end
+ if game.ArkLessonRevealCaps and game.ArkLessonRevealCaps[id] then
+ if total > i then
+ setCap(game.ArkLessonRevealCaps[id], "p", math.floor((100*i)/total), tostring(i).." / "..tostring(total))
+ else
+ setCap(game.ArkLessonRevealCaps[id], "p", 100, "")
+ end
+ end
+ end
+end
+
+
+function ArkLessonUpdateHtml(win, scriptid, title, progression, started, finished, requirement, reward)
+ win = getUI(win)
+ win = win:find("div_lesson_"..scriptid..":html")
+ if requirement ~= [[]] then
+ requirement = game.ArkLessonNeedRequirement
+ else
+ requirement = ""
+ end
+
+ local progressionHtml = " "
+ local height = "50"
+ if progression then
+ height = "12"
+ pogressionHtml = ""..progression.." "
+ end
+
+ local color = "AAA"
+ if started then
+ if finished then
+ color = "FFFFFF"
+ else
+ color = "FFDD4AFF"
+ end
+ end
+
+ win:renderHtml([[
+
+
+
+
+
+
+
+ ]]..title..[[
+
+
+ ]]..requirement..[[
+
+ ]]..pogressionHtml..[[
+
+
+
+ ]]..reward..[[
+
+
+
+ ]])
+end
+
+
function ArkLessons:Show(id, w, h, content, scriptid)
local ui = getUI("ui:interface:"..id)
-- deleteUI(framewin)
@@ -119,10 +223,6 @@ function ArkLessons:ArkRevealLessonInfos(scriptid, i, total)
end
end
-function ArkOpenLesson(id)
- WebQueue:push("https://app.ryzom.com/app_arcc/index.php?action=mLesson_Run&script="..tostring(id))
-end
-
function openArkLessonScript(i, script_id, url)
if i == ArkLessons.RevealStep[script_id] then
getUI("ui:interface:ArkLessonWin"..tostring(script_id)).active = false
diff --git a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
index 38ceec1972..862124a61b 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
@@ -16,7 +16,7 @@ game.PrevSessionMission = - 1
game.InGameDbInitialized = false
game.WebMissionLastDesc = {}
-game.ArkLessonUsedWindowUrl = "https://app.ryzom.com/app_arcc/index.php?action=mLesson_Run&script="
+
------------------------------------------------------------------------------------------------------------
-- CAP
------------------------------------------------------------------------------------------------------------
@@ -1579,103 +1579,6 @@ function game:setNextUrl(url)
game.CapNextUrl = url
end
-function ArkOpenLesson(id)
- if id ~= 0 and id ~= nil then
- local win = getUI("ui:interface:web_transaction_lessons")
- if win then
- win:find("html"):browse(game.ArkLessonUsedWindowUrl..id)
- else
- getUI("ui:interface:web_transactions"):find("html"):browse(game.ArkLessonUsedWindowUrl..id)
- end
- end
-end
-
-function ArkRevealLesson(id, i, total)
- if i == game.ArkLessonRevealStep[id] then
- game.ArkLessonRevealStep[id] = game.ArkLessonRevealStep[id] + 1
- game:ArkLessonCallback("step", id, i)
- game:ArkRevealLessonInfos(id, i, total)
- if i == total then
- game:ArkAcceptLesson()
- end
- end
-end
-
-function game:ArkRevealLessonInfos(id, i, total)
- local ui = getUI("ui:interface:ArkLessonWin"..tostring(id))
- if ui ~= nil then
- local html = ui:find("html")
- html:showDiv("enabled_"..tostring(i), false)
- html:showDiv("disabled_"..tostring(i), false)
- html:showDiv("current_"..tostring(i), true)
- if i > 1 then
- if i ~= total+1 then
- html:showDiv("current_"..tostring(i-1), false)
- html:showDiv("enabled_"..tostring(i-1), true)
- end
- end
- if game.ArkLessonRevealCaps and game.ArkLessonRevealCaps[id] then
- if total > i then
- setCap(game.ArkLessonRevealCaps[id], "p", math.floor((100*i)/total), tostring(i).." / "..tostring(total))
- else
- setCap(game.ArkLessonRevealCaps[id], "p", 100, "")
- end
- end
- end
-end
-
-
-function ArkLessonUpdateHtml(win, scriptid, title, progression, started, finished, requirement, reward)
- win = getUI(win)
- win = win:find("div_lesson_"..scriptid..":html")
- if requirement ~= [[]] then
- requirement = game.ArkLessonNeedRequirement
- else
- requirement = ""
- end
-
- local progressionHtml = " "
- local height = "50"
- if progression then
- height = "12"
- pogressionHtml = ""..progression.." "
- end
-
- local color = "AAA"
- if started then
- if finished then
- color = "FFFFFF"
- else
- color = "FFDD4AFF"
- end
- end
-
- win:renderHtml([[
-
-
-
-
-
-
-
- ]]..title..[[
-
-
- ]]..requirement..[[
-
- ]]..pogressionHtml..[[
-
-
-
- ]]..reward..[[
-
-
-
- ]])
-end
-
-
-
function setCap(id, element, a, b)
if element == nil then
game.CapId = id
diff --git a/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua b/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua
index 48ceaaf3fd..b9ee004710 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua
@@ -77,7 +77,7 @@ if artefact == nil then
isMinimized = true,
isLogoMinimized = false,
web_item = "params_l:#L;template:webig_inv_item_artefact;\
- display:inline-block;id:pact#P;tooltip:u:#T;\
+ display:inline-block;id:pact#P;tooltip:#T;\
quantity:q0;#Q;#O;img1:tp_#I.tga;\
bg:bk_#E.tga;col_over:255 255 255 45", -- slotbg:blank2.tga;
uiWindow = nil,
diff --git a/ryzom/server/src/ai_service/ai.cpp b/ryzom/server/src/ai_service/ai.cpp
index 49144fa9dd..3e2efeeca8 100644
--- a/ryzom/server/src/ai_service/ai.cpp
+++ b/ryzom/server/src/ai_service/ai.cpp
@@ -69,7 +69,7 @@ const std::string egsString("EGS");
const uint32 Default_MaxPlayers=5000;
-const uint32 Default_MaxBotsPet=Default_MaxPlayers*4;
+const uint32 Default_MaxBotsPet=Default_MaxPlayers*7;
const uint32 Default_MaxBotsFauna=40000;
const uint32 Default_MaxBotsNpc=20000;
const uint32 Default_MaxBotsFx=200;
From aed289651f7e54faf4ceeff8aa55506a40cf04d3 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 18 Mar 2023 20:52:59 +0100
Subject: [PATCH 012/194] Added getTags
---
.../mission_manager/missions_commands.cpp | 27 ++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index a58dd9d166..d0ce37cbc0 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -2824,7 +2824,7 @@ NLMISC_COMMAND(setTitle, "set player title", " ")
//setTag 2 pvpA pvp_ally_6.tga
//----------------------------------------------------------------------------
-NLMISC_COMMAND(setTag, "set player title", " ")
+NLMISC_COMMAND(setTag, "set player tags", " ")
{
if (args.size() != 3) {
log.displayNL("ERR: invalid arg count");
@@ -2851,6 +2851,31 @@ NLMISC_COMMAND(setTag, "set player title", " ")
return true;
}
+//----------------------------------------------------------------------------
+NLMISC_COMMAND(getTags, "get player tags", "")
+{
+ if (args.size() != 1) {
+ log.displayNL("ERR: invalid arg count");
+ return false;
+ }
+
+ GET_ACTIVE_CHARACTER
+
+ log.displayNL(c->getTagPvPA().c_str());
+ log.displayNL(c->getTagPvPB().c_str());
+ log.displayNL(c->getDefaultTagA().c_str());
+ log.displayNL(c->getDefaultTagB().c_str());
+ log.displayNL(c->getTagA().c_str());
+ log.displayNL(c->getTagB().c_str());
+ log.displayNL(c->getTagRightHand().c_str());
+ log.displayNL(c->getTagLeftHand().c_str());
+ log.displayNL(c->getTagHat().c_str());
+ log.displayNL("%d", c->getVisualPropertyA().directAccessForStructMembers().PropertySubData.WeaponRightHand);
+ log.displayNL("%d", c->getVisualPropertyA().directAccessForStructMembers().PropertySubData.WeaponLeftHand);
+ log.displayNL("%d", c->getVisualPropertyA().directAccessForStructMembers().PropertySubData.HatModel);
+ return true;
+}
+
//-----------------------------------------------
NLMISC_COMMAND(getArkMissions,"dump character ark missions","")
{
From df662971673968cc68abc364430e07e11e1cb4df Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 18 Mar 2023 20:59:32 +0100
Subject: [PATCH 013/194] fix
---
.../gamedev/interfaces_v3/ark_lessons.lua | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua b/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
index fffaf0800d..0a1bf8b2e7 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
@@ -83,16 +83,22 @@ end
function ArkLessonUpdateHtml(win, scriptid, title, progression, started, finished, requirement, reward)
win = getUI(win)
win = win:find("div_lesson_"..scriptid..":html")
+ local top = ""
if requirement ~= [[]] then
- requirement = game.ArkLessonNeedRequirement
+ requirement = [[]]..ArkLessons.NeedRequirement..[[ ]]
else
requirement = ""
+ top = [[ ]]
end
local progressionHtml = " "
local height = "50"
if progression then
- height = "12"
+ if requirement ~= "" then
+ height = "12"
+ else
+ height = "25"
+ end
pogressionHtml = ""..progression.." "
end
@@ -112,13 +118,11 @@ function ArkLessonUpdateHtml(win, scriptid, title, progression, started, finishe
+ ]]..top..[[
- ]]..title..[[
+ ]]..title..[[
-
- ]]..requirement..[[
-
- ]]..pogressionHtml..[[
+ ]]..requirement..pogressionHtml..[[
@@ -129,7 +133,6 @@ function ArkLessonUpdateHtml(win, scriptid, title, progression, started, finishe
]])
end
-
function ArkLessons:Show(id, w, h, content, scriptid)
local ui = getUI("ui:interface:"..id)
-- deleteUI(framewin)
From 0e0cf4e0b9df2a185c4fb20d004a795e71719550 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sun, 19 Mar 2023 20:45:04 +0100
Subject: [PATCH 014/194] Fix issues
---
.../creature_manager/harvestable.cpp | 6 +-
.../entities_game_service/egs_variables.cpp | 4 +-
.../player_manager/character.cpp | 139 ++++++++++++------
3 files changed, 98 insertions(+), 51 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/creature_manager/harvestable.cpp b/ryzom/server/src/entities_game_service/creature_manager/harvestable.cpp
index bfc7d2b163..86ee631e35 100644
--- a/ryzom/server/src/entities_game_service/creature_manager/harvestable.cpp
+++ b/ryzom/server/src/entities_game_service/creature_manager/harvestable.cpp
@@ -133,9 +133,11 @@ bool CHarvestable::writeMpInfos()
bool useGenericMats = false;
+
CSheetId usedSheet;
- CSBrickParamJewelAttrs sbrickParam = harvester->getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
- if (sbrickParam.ParsedOk && sbrickParam.Value == "generic")
+ CSBrickParamJewelAttrs sbrickParamL = harvester->getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
+ CSBrickParamJewelAttrs sbrickParamR = harvester->getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheet);
+ if ((sbrickParamL.ParsedOk && sbrickParamL.Value == "generic") || (sbrickParamR.ParsedOk && sbrickParamR.Value == "generic"))
{
useGenericMats = true;
}
diff --git a/ryzom/server/src/entities_game_service/egs_variables.cpp b/ryzom/server/src/entities_game_service/egs_variables.cpp
index 3202a39256..ff834e4dd5 100644
--- a/ryzom/server/src/entities_game_service/egs_variables.cpp
+++ b/ryzom/server/src/entities_game_service/egs_variables.cpp
@@ -389,13 +389,11 @@ CVariable ForageExtractionXPFactor( "egs", "ForageExtractionXPFactor", ""
CVariable ForageExtractionNbParticipantsXPBonusRatio( "egs", "ForageExtractionNbParticipantsXPBonusRatio", "", 0.1f, 0, true );
CVariable ForageExtractionNastyEventXPMalusRatio( "egs", "ForageExtractionNastyEventXPMalusRatio", "", 0.1f, 0, true );
-CVariable ArkLootTimeBeforeNewDraw( "egs", "ArkLootTimeBeforeNewDraw", "Time need before a new ark loot draw", 600, 0, true ); // 60sec
-
+CVariable ArkLootTimeBeforeNewDraw( "egs", "ArkLootTimeBeforeNewDraw", "Time need before a new ark loot draw", 120, 0, true ); // 12sec
CVariable ToxicCloudDamage( "egs","ToxicCloudDamage", "Max HP hit by a toxic cloud at ToxicCloudUpdateFrequency", 800.0f, true );
CVariable ForageExplosionDamage( "egs","ForageExplosionDamage", "Max HP hit once by a forage explosion", 4000.0f, true );
-
CVariable FameByKill( "egs","FameByKill", "Number of fame point lost for a kill", -5000, true );
CVariable PVPFameRequired ("egs","PVPFameRequired", "Minimum of positive or negative fame for PVP", 25, 0, true );
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index a9d4b5106e..f4496ee3f8 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -1113,13 +1113,17 @@ uint32 CCharacter::tickUpdate()
// Check Death of player and manage pact if death occurs
if (currentHp() <= 0 && !_IsDead && !teleportInProgress())
{
-
CSheetId usedSheet;
CSBrickParamJewelAttrs sbrickParam = getJewelAttrs("rez", SLOT_EQUIPMENT::NECKLACE, usedSheet);
SM_STATIC_PARAMS_1(params, STRING_MANAGER::sbrick);
params[0].SheetId = usedSheet;
- if (sbrickParam.ParsedOk && sbrickParam.Value == "lastPoint" && (rand() % 200) < sbrickParam.Modifier)
+ uint32 randvalue = rand() % 400;
+
+ if (sbrickParam.ParsedOk && sbrickParam.Value == "lastPoint" && randvalue < sbrickParam.Modifier)
+ {
_PhysScores._PhysicalScores[SCORES::hit_points].Current = 1;
+ sendDynamicSystemMessage(_Id, "ALLEGORY_EFFECT_TRIGGERED", params);
+ }
else
{
kill();
@@ -8157,8 +8161,6 @@ void CCharacter::addGuildPoints(uint32 points)
guild->addXP(1);
_GuildPoints = 0;
}
-
- nlinfo("_TodayGuildPoints, wantedPoints, _GuildPoints = %u, %u, %u", _TodayGuildPoints, wantedPoints, _GuildPoints);
}
//---------------------------------------------------
@@ -14448,21 +14450,15 @@ void CCharacter::botChatMissionAdvance(uint8 index)
}
- nlinfo("_CurrentInterlocutor = %d", _CurrentInterlocutor.toString().c_str());
- nlinfo("_Target = %d", getTarget().toString().c_str());
-
uint idx = 0;
- nlinfo("index = %d", index);
for (map::iterator it = getMissionsBegin(); it != getMissionsEnd(); ++it)
{
std::vector botchats;
(*it).second->getBotChatOptions(_EntityRowId, TheDataset.getDataSetRow(_CurrentInterlocutor), botchats);
- nlinfo("botchats.size = %d", botchats.size());
for (uint j = 0; j < botchats.size();)
{
- nlinfo("idx = %d", idx);
if (idx == index)
{
if (!botchats[j].Gift)
@@ -16785,7 +16781,7 @@ void CCharacter::getMatchingMissionLootRequirements(uint16 itemLevel, const std:
// (note: If he can get, it doesn't mean it will get)
if ((!foundMatchingOK) && foundMatchingExceptLevel)
{
- PHRASE_UTILITIES::sendDynamicSystemMessage(getEntityRowId(), "AUTO_LOOT_LEVEL_TOO_LOW");
+ PHRASE_UTILITIES::sendDynamicSystemMessage(_EntityRowId, "AUTO_LOOT_LEVEL_TOO_LOW");
}
}
@@ -16836,19 +16832,30 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
params[0].Int = (sint32)_ForageProgress->amount();
params[1].SheetId = _ForageProgress->material();
params[2].Int = (sint32)_ForageProgress->quality();
- PHRASE_UTILITIES::sendDynamicSystemMessage(_EntityRowId, "HARVEST_SUCCESS", params);
+ sendDynamicSystemMessage(_EntityRowId, "HARVEST_SUCCESS", params);
}
if ((CTickEventHandler::getGameCycle() - _LastTickForageLoot) > ArkLootTimeBeforeNewDraw)
{
_LastTickForageLoot = CTickEventHandler::getGameCycle();
CSheetId usedSheet;
- CSBrickParamJewelAttrs sbrickParam = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
- if (sbrickParam.ParsedOk && sbrickParam.Value == "loot" && (rand() % 1000) < sbrickParam.Modifier)
+ CSBrickParamJewelAttrs sbrickParamL = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
+ CSBrickParamJewelAttrs sbrickParamR = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheet);
+ sint32 modifierL = -1;
+ sint32 modifierR = -1;
+
+ if (sbrickParamL.ParsedOk && sbrickParamL.Value == "loot")
+ modifierL = sbrickParamL.Modifier;
+
+ if (sbrickParamR.ParsedOk && sbrickParamR.Value == "loot")
+ modifierR = sbrickParamR.Modifier;
+
+ sint32 modifier = max(modifierL, modifierR);
+ if (modifier >= 0 && rand() % 1000 < modifier)
{
SM_STATIC_PARAMS_1(params, STRING_MANAGER::sbrick);
params[0].SheetId = usedSheet;
- sendDynamicSystemMessage(_Id, "ALLEGORY_EFFECT_TRIGGERED", params);
+ sendDynamicSystemMessage(_EntityRowId, "ALLEGORY_EFFECT_TRIGGERED", params);
sendUrl(toString("app_arcc action=mScript_Run&script_name=ArkLoot&type=Forage&quality=%d%quantity=%d&command=reset_all", quality, _ForageProgress->amount()));
}
}
@@ -16925,22 +16932,24 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
}
}
- bool useGenericMats = false;
+
uint8 bonus = 1;
CSheetId usedSheet;
- CSBrickParamJewelAttrs sbrickParam = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
- if (sbrickParam.ParsedOk && sbrickParam.Value == "generic")
- {
- useGenericMats = true;
- if ((rand() % 1000) < sbrickParam.Modifier)
- {
- SM_STATIC_PARAMS_1(params, STRING_MANAGER::sbrick);
- params[0].SheetId = usedSheet;
- sendDynamicSystemMessage(_Id, "ALLEGORY_EFFECT_TRIGGERED", params);
- bonus = 2;
- }
- }
+ CSBrickParamJewelAttrs sbrickParamL = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
+ CSBrickParamJewelAttrs sbrickParamR = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheet);
+ sint32 modifierL = -1;
+ sint32 modifierR = -1;
+
+ if (sbrickParamL.ParsedOk && sbrickParamL.Value == "generic")
+ modifierL = sbrickParamL.Modifier;
+
+ if (sbrickParamR.ParsedOk && sbrickParamR.Value == "generic")
+ modifierR = sbrickParamR.Modifier;
+
+ sint32 modifier = max(modifierL, modifierR);
+
+ bool useGenericMats = modifier >= 0;
// first slots are filled with loot items, quarter items are not in temp inv but only info in DB
@@ -16962,10 +16971,20 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
if (quality != 0)
{
- // Create and stack the item in the bag (use genericMp beca
+ // Create and stack the item in the bag
CGameItemPtr item;
if (useGenericMats)
+ {
+ // Not Named or Boss mats
+ if (genericMp->ItemId != mp->ItemId && rand() % 500 < modifier)
+ {
+ SM_STATIC_PARAMS_1(params, STRING_MANAGER::sbrick);
+ params[0].SheetId = usedSheet;
+ sendDynamicSystemMessage(_EntityRowId, "ALLEGORY_EFFECT_TRIGGERED", params);
+ bonus = 2;
+ }
item = createItem(quality, bonus*genericMp->Quantity, genericMp->ItemId);
+ }
else
item = createItem(quality, mp->Quantity, mp->ItemId);
@@ -17019,21 +17038,6 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
}
}
}
-
- if ((CTickEventHandler::getGameCycle() - _LastTickCreatureLoot) > ArkLootTimeBeforeNewDraw)
- {
- _LastTickCreatureLoot = CTickEventHandler::getGameCycle();
- CSheetId usedSheet;
- CSBrickParamJewelAttrs sbrickParam = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheet);
- if ((sbrickParam.ParsedOk && sbrickParam.Value == "loot" && (rand() % 1000) < sbrickParam.Modifier))
- {
- SM_STATIC_PARAMS_1(params, STRING_MANAGER::sbrick);
- params[0].SheetId = usedSheet;
- sendDynamicSystemMessage(_Id, "ALLEGORY_EFFECT_TRIGGERED", params);
- sendUrl(toString("app_arcc action=mScript_Run&script_name=ArkLoot&type=Loot&quality=%d&quantity=%d&command=reset_all", (uint32)quality, (uint32)mp->Quantity));
- }
- }
-
}
// remove the quantity of mp harvested from the ressource
@@ -17054,6 +17058,33 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
{
if (lastMaterial)
*lastMaterial = true;
+ if ((CTickEventHandler::getGameCycle() - _LastTickCreatureLoot) > ArkLootTimeBeforeNewDraw)
+ {
+ _LastTickCreatureLoot = CTickEventHandler::getGameCycle();
+ CSheetId usedSheet;
+
+ CSBrickParamJewelAttrs sbrickParamL = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
+ CSBrickParamJewelAttrs sbrickParamR = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheet);
+ sint32 modifierL = -1;
+ sint32 modifierR = -1;
+
+ if (sbrickParamL.ParsedOk && sbrickParamL.Value == "loot")
+ modifierL = sbrickParamL.Modifier;
+
+ if (sbrickParamR.ParsedOk && sbrickParamR.Value == "loot")
+ modifierR = sbrickParamR.Modifier;
+
+ sint32 modifier = max(modifierL, modifierR);
+
+ if (modifier >= 0 && (rand() % 1000) < modifier)
+ {
+ SM_STATIC_PARAMS_1(params, STRING_MANAGER::sbrick);
+ params[0].SheetId = usedSheet;
+ sendDynamicSystemMessage(_Id, "ALLEGORY_EFFECT_TRIGGERED", params);
+ sendUrl(toString("app_arcc action=mScript_Run&script_name=ArkLoot&type=Loot&quality=%d&quantity=%d&command=reset_all", (uint32)quality, (uint32)mp->Quantity));
+ }
+ }
+
}
}
@@ -19224,8 +19255,24 @@ bool CCharacter::changeCurrentHp(sint32 deltaValue, TDataSetRow responsibleEntit
// for god mode
if (!_GodMode && !_Invulnerable)
{
- kill(responsibleEntity);
- return true;
+ CSheetId usedSheet;
+ CSBrickParamJewelAttrs sbrickParam = getJewelAttrs("rez", SLOT_EQUIPMENT::NECKLACE, usedSheet);
+ SM_STATIC_PARAMS_1(params, STRING_MANAGER::sbrick);
+ params[0].SheetId = usedSheet;
+ uint32 randvalue = rand() % 400;
+
+ if (sbrickParam.ParsedOk && sbrickParam.Value == "lastPoint" && randvalue < sbrickParam.Modifier)
+ {
+ _PhysScores._PhysicalScores[SCORES::hit_points].Current = 1;
+ setHpBar(1);
+ sendDynamicSystemMessage(_Id, "ALLEGORY_EFFECT_TRIGGERED", params);
+ return false;
+ }
+ else
+ {
+ kill(responsibleEntity);
+ return true;
+ }
}
else
{
From c250936692ed593f1f8af3a2f5675208e52857f0 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sun, 19 Mar 2023 22:26:43 +0100
Subject: [PATCH 015/194] Fix
---
.../player_manager/character.cpp | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index f4496ee3f8..514aba30f1 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -17061,18 +17061,25 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
if ((CTickEventHandler::getGameCycle() - _LastTickCreatureLoot) > ArkLootTimeBeforeNewDraw)
{
_LastTickCreatureLoot = CTickEventHandler::getGameCycle();
- CSheetId usedSheet;
+ CSheetId usedSheetL;
+ CSheetId usedSheetR;
- CSBrickParamJewelAttrs sbrickParamL = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
- CSBrickParamJewelAttrs sbrickParamR = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheet);
+ CSBrickParamJewelAttrs sbrickParamL = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheetL);
+ CSBrickParamJewelAttrs sbrickParamR = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheetR);
sint32 modifierL = -1;
sint32 modifierR = -1;
if (sbrickParamL.ParsedOk && sbrickParamL.Value == "loot")
+ {
modifierL = sbrickParamL.Modifier;
+ usedSheet = usedSheetL;
+ }
if (sbrickParamR.ParsedOk && sbrickParamR.Value == "loot")
+ {
modifierR = sbrickParamR.Modifier;
+ usedSheet = usedSheetR;
+ }
sint32 modifier = max(modifierL, modifierR);
From 7e19cde5808b125b92ae1084affa742ef7c0e85b Mon Sep 17 00:00:00 2001
From: Nuno
Date: Mon, 20 Mar 2023 14:05:51 +0100
Subject: [PATCH 016/194] Fixed display bugs
---
.../player_manager/character.cpp | 26 ++++++++++++++++---
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 514aba30f1..69f15ea15c 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -16839,16 +16839,24 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
{
_LastTickForageLoot = CTickEventHandler::getGameCycle();
CSheetId usedSheet;
- CSBrickParamJewelAttrs sbrickParamL = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
- CSBrickParamJewelAttrs sbrickParamR = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheet);
+ CSheetId usedSheetL;
+ CSheetId usedSheetR;
+ CSBrickParamJewelAttrs sbrickParamL = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheetL);
+ CSBrickParamJewelAttrs sbrickParamR = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheetR);
sint32 modifierL = -1;
sint32 modifierR = -1;
if (sbrickParamL.ParsedOk && sbrickParamL.Value == "loot")
+ {
modifierL = sbrickParamL.Modifier;
+ usedSheet = usedSheetL;
+ }
if (sbrickParamR.ParsedOk && sbrickParamR.Value == "loot")
+ {
modifierR = sbrickParamR.Modifier;
+ usedSheet = usedSheetR;
+ }
sint32 modifier = max(modifierL, modifierR);
if (modifier >= 0 && rand() % 1000 < modifier)
@@ -16936,16 +16944,26 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
uint8 bonus = 1;
CSheetId usedSheet;
- CSBrickParamJewelAttrs sbrickParamL = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheet);
- CSBrickParamJewelAttrs sbrickParamR = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheet);
+ CSheetId usedSheetL;
+ CSheetId usedSheetR;
+ CSBrickParamJewelAttrs sbrickParamL = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERL, usedSheetL);
+ CSBrickParamJewelAttrs sbrickParamR = getJewelAttrs("arkloot", SLOT_EQUIPMENT::FINGERR, usedSheetR);
sint32 modifierL = -1;
sint32 modifierR = -1;
+
if (sbrickParamL.ParsedOk && sbrickParamL.Value == "generic")
+ {
modifierL = sbrickParamL.Modifier;
+ usedSheet = usedSheetL;
+ }
if (sbrickParamR.ParsedOk && sbrickParamR.Value == "generic")
+ {
modifierR = sbrickParamR.Modifier;
+ usedSheet = usedSheetR;
+ }
+
sint32 modifier = max(modifierL, modifierR);
From 9d2485a091249d663f15269ecf83a0e0e293c7d5 Mon Sep 17 00:00:00 2001
From: nimetu
Date: Sat, 18 Mar 2023 12:21:28 +0200
Subject: [PATCH 017/194] Add trigger condition to azure-pipelines.yml
---
azure-pipelines.yml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 9c735531ba..e42680e060 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -1,3 +1,10 @@
+trigger:
+ branches:
+ include:
+ - core4
+ - feature/*
+ - main/atys-live
+
jobs:
- job: ubuntu18
timeoutInMinutes: 120
From 5bd60fcbbbef8caae7af27e3db227f8e1eb34d6b Mon Sep 17 00:00:00 2001
From: kaetemi
Date: Sat, 4 Mar 2023 20:56:23 +0800
Subject: [PATCH 018/194] Stop sound manager from the right thread
---
ryzom/client/src/login_patch.cpp | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/ryzom/client/src/login_patch.cpp b/ryzom/client/src/login_patch.cpp
index 82665aac1d..b97d410bef 100644
--- a/ryzom/client/src/login_patch.cpp
+++ b/ryzom/client/src/login_patch.cpp
@@ -533,6 +533,8 @@ void CPatchManager::getInfoToDisp(SPatchInfo &piOut)
}
}
+void stopSoundMngr();
+
// ****************************************************************************
// TODO : use selected categories to patch a list of files
void CPatchManager::startPatchThread(const vector &CategoriesSelected, bool applyPatch)
@@ -623,6 +625,12 @@ void CPatchManager::startPatchThread(const vector &CategoriesSelected, b
// Close opened big files
CBigFile::getInstance().remove(FilesToPatch[k].FileName);
+
+ if (NLMISC::startsWith(FilesToPatch[k].FileName, "sound"))
+ {
+ // Stop sound playback
+ stopSoundMngr();
+ }
}
}
}
@@ -2605,8 +2613,6 @@ class CPatchThreadDownloadProgress : public NLMISC::IProgressCallback
}
};
-void stopSoundMngr();
-
// ****************************************************************************
void CPatchThread::processFile (CPatchManager::SFileToPatch &rFTP)
{
@@ -2618,12 +2624,6 @@ void CPatchThread::processFile (CPatchManager::SFileToPatch &rFTP)
// Destination File Name (in writable directory)
string DestinationName;
- if (NLMISC::startsWith(rFTP.FileName, "sound"))
- {
- // Stop sound playback
- stopSoundMngr();
- }
-
if (rFTP.ExtractPath.empty())
{
DestinationName = pPM->WritableClientDataPath + rFTP.FileName;
From 1e5c6c41b6059039ee793808c42fa67e2139bd71 Mon Sep 17 00:00:00 2001
From: nimetu
Date: Sat, 18 Mar 2023 01:38:40 +0200
Subject: [PATCH 019/194] Fix possible crash on login
---
ryzom/client/src/user_entity.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/ryzom/client/src/user_entity.cpp b/ryzom/client/src/user_entity.cpp
index 0077b2bc46..9ec59f6fb1 100644
--- a/ryzom/client/src/user_entity.cpp
+++ b/ryzom/client/src/user_entity.cpp
@@ -194,6 +194,7 @@ CUserEntity::CUserEntity()
_R2CharMode= R2::TCharMode::Player;
+ _CameraMoves = NLMISC::CVector(0, 0, 0);
}// CUserEntity //
From 05ddcd5d5454427bf05e6c964e58619751ef3de6 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 31 Mar 2023 13:39:19 +0200
Subject: [PATCH 020/194] Added ArkLootExtraModifierMultiplier
---
.../src/entities_game_service/egs_variables.cpp | 3 ++-
.../player_manager/character.cpp | 12 +++++++-----
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/egs_variables.cpp b/ryzom/server/src/entities_game_service/egs_variables.cpp
index ff834e4dd5..0d084a4af8 100644
--- a/ryzom/server/src/entities_game_service/egs_variables.cpp
+++ b/ryzom/server/src/entities_game_service/egs_variables.cpp
@@ -389,7 +389,8 @@ CVariable ForageExtractionXPFactor( "egs", "ForageExtractionXPFactor", ""
CVariable ForageExtractionNbParticipantsXPBonusRatio( "egs", "ForageExtractionNbParticipantsXPBonusRatio", "", 0.1f, 0, true );
CVariable ForageExtractionNastyEventXPMalusRatio( "egs", "ForageExtractionNastyEventXPMalusRatio", "", 0.1f, 0, true );
-CVariable ArkLootTimeBeforeNewDraw( "egs", "ArkLootTimeBeforeNewDraw", "Time need before a new ark loot draw", 120, 0, true ); // 12sec
+CVariable ArkLootTimeBeforeNewDraw( "egs", "ArkLootTimeBeforeNewDraw", "Time need before a new Ark Loot draw", 120, 0, true ); // 12sec
+CVariable ArkLootExtraModifierMultiplier( "egs", "ArkLootExtraModifierMultiplier", "Extra multiplier for Ark Loot modifier", 1.0f, 0, true ); // 12sec
CVariable ToxicCloudDamage( "egs","ToxicCloudDamage", "Max HP hit by a toxic cloud at ToxicCloudUpdateFrequency", 800.0f, true );
CVariable ForageExplosionDamage( "egs","ForageExplosionDamage", "Max HP hit once by a forage explosion", 4000.0f, true );
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 69f15ea15c..b7b53df05d 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -16859,12 +16859,13 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
}
sint32 modifier = max(modifierL, modifierR);
- if (modifier >= 0 && rand() % 1000 < modifier)
+ if (modifier >= 0 && rand() % 1000 < (uint32)(modifier * ArkLootExtraModifierMultiplier))
{
SM_STATIC_PARAMS_1(params, STRING_MANAGER::sbrick);
params[0].SheetId = usedSheet;
- sendDynamicSystemMessage(_EntityRowId, "ALLEGORY_EFFECT_TRIGGERED", params);
- sendUrl(toString("app_arcc action=mScript_Run&script_name=ArkLoot&type=Forage&quality=%d%quantity=%d&command=reset_all", quality, _ForageProgress->amount()));
+ // ArkLoot script will trigger it
+ // sendDynamicSystemMessage(_EntityRowId, "ALLEGORY_EFFECT_TRIGGERED", params);
+ sendUrl(toString("app_arcc action=mScript_Run&script_name=ArkLoot&type=Forage&quality=%d&quantity=%d&command=reset_all", (sint32)_ForageProgress->quality(), (sint32)_ForageProgress->amount()));
}
}
@@ -17101,11 +17102,12 @@ bool CCharacter::pickUpRawMaterial(uint32 indexInTempInv, bool* lastMaterial)
sint32 modifier = max(modifierL, modifierR);
- if (modifier >= 0 && (rand() % 1000) < modifier)
+ if (modifier >= 0 && (rand() % 1000) < (uint32)(modifier*ArkLootExtraModifierMultiplier))
{
SM_STATIC_PARAMS_1(params, STRING_MANAGER::sbrick);
params[0].SheetId = usedSheet;
- sendDynamicSystemMessage(_Id, "ALLEGORY_EFFECT_TRIGGERED", params);
+ // Arkloot script will trigger it
+ // sendDynamicSystemMessage(_Id, "ALLEGORY_EFFECT_TRIGGERED", params);
sendUrl(toString("app_arcc action=mScript_Run&script_name=ArkLoot&type=Loot&quality=%d&quantity=%d&command=reset_all", (uint32)quality, (uint32)mp->Quantity));
}
}
From c8204acb7ad91998923930dbdec3ac5ff4448546 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 31 Mar 2023 14:06:14 +0200
Subject: [PATCH 021/194] Fix guild points
---
ryzom/common/src/game_share/entity_types.h | 2 +-
.../server/src/entities_game_service/egs_variables.cpp | 1 +
.../src/entities_game_service/guild_manager/guild.cpp | 2 +-
.../guild_manager/guild_version_adapter.cpp | 10 +++++++++-
.../guild_manager/guild_version_adapter.h | 1 +
5 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/ryzom/common/src/game_share/entity_types.h b/ryzom/common/src/game_share/entity_types.h
index 6087b33bbe..7645c28a99 100644
--- a/ryzom/common/src/game_share/entity_types.h
+++ b/ryzom/common/src/game_share/entity_types.h
@@ -157,7 +157,7 @@ const TCoord THRESHOLD_VPB = MAX_THRESHOLD;
// Visual property C
const TPropIndex PROPERTY_VPC = 11;
-const TCoord THRESHOLD_VPC = 10000;
+const TCoord THRESHOLD_VPC = MAX_THRESHOLD;
// Entity mounted
const TPropIndex PROPERTY_ENTITY_MOUNTED_ID = 12;
diff --git a/ryzom/server/src/entities_game_service/egs_variables.cpp b/ryzom/server/src/entities_game_service/egs_variables.cpp
index 3202a39256..fc67192883 100644
--- a/ryzom/server/src/entities_game_service/egs_variables.cpp
+++ b/ryzom/server/src/entities_game_service/egs_variables.cpp
@@ -426,6 +426,7 @@ CVariable MinFameToBuyGuildBuilding("egs","MinFameToBuyGuildBuilding", "
CVariable MinFameToBuyPlayerBuilding("egs","MinFameToBuyPlayerBuilding", "Minimum Fame To Buy a Player Building", 0, 0, true);
CVariable GuildCreationCost("egs","GuildCreationCost", "", 100, 0, true);
CVariable GuildMaxMemberCount("egs","GuildMaxMemberCount", "", 256, 0, true);
+CVariable GuildMaxPoints("egs","GuildMaxPoints", "", 200, 0, true);
CVariable TriggerRequestTimout("egs","TriggerRequestTimout", "", 300, 0, true);
diff --git a/ryzom/server/src/entities_game_service/guild_manager/guild.cpp b/ryzom/server/src/entities_game_service/guild_manager/guild.cpp
index d7669a806e..5214c9a0ea 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/guild.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/guild.cpp
@@ -136,7 +136,7 @@ void CGuild::spendXP( uint32 xp )
//----------------------------------------------------------------------------
void CGuild::addXP( uint32 xp )
{
- if (_XP < 1000) // TEMPORARY LIMIT : must be removed when added more stuff to pay with guild points
+ if (_XP < GuildMaxPoints)
{
setXP( _XP + xp );
CBankAccessor_GUILD::getGUILD().setXP(_DbGroup, _XP);
diff --git a/ryzom/server/src/entities_game_service/guild_manager/guild_version_adapter.cpp b/ryzom/server/src/entities_game_service/guild_manager/guild_version_adapter.cpp
index 0eda589063..f688d090fe 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/guild_version_adapter.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/guild_version_adapter.cpp
@@ -47,8 +47,9 @@ uint32 CGuildVersionAdapter::currentVersionNumber() const
// 3 : (01/11/2004) guild allegiance of previous existing guild setted to undefined...
// 4 : (07/03/2006) give full hp to all tools
// 5 : (13/03/2023) reset guild points
+ // 6 : (31/03/2023) set guild points to 100 (default)
////////////////////////////////////
- return 5;
+ return 6;
}
@@ -63,6 +64,7 @@ void CGuildVersionAdapter::adaptGuildFromVersion( CGuild & guild ) const
case 2: break; //adaptToVersion3(guild); // when we change guild save and have currentVersion = 4, we can re-active adapter (we can re-active
case 3: adaptToVersion4(guild);
case 4: adaptToVersion5(guild);
+ case 5: adaptToVersion6(guild);
default:; // the adapter at the next patch in fact...
}
@@ -108,5 +110,11 @@ void CGuildVersionAdapter::adaptToVersion5(CGuild & guild) const
guild.setPoints(0);
}
+//---------------------------------------------------
+void CGuildVersionAdapter::adaptToVersion6(CGuild & guild) const
+{
+ guild.setPoints(50);
+}
+
diff --git a/ryzom/server/src/entities_game_service/guild_manager/guild_version_adapter.h b/ryzom/server/src/entities_game_service/guild_manager/guild_version_adapter.h
index 6dcd27f743..e020d8254b 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/guild_version_adapter.h
+++ b/ryzom/server/src/entities_game_service/guild_manager/guild_version_adapter.h
@@ -49,6 +49,7 @@ class CGuildVersionAdapter
void adaptToVersion3(CGuild &guild) const;
void adaptToVersion4(CGuild &guild) const;
void adaptToVersion5(CGuild &guild) const;
+ void adaptToVersion6(CGuild &guild) const;
private:
CGuildVersionAdapter(){}
From 21e6ee12d1e25adbf3e58cdfbac24ca8a6a03810 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 31 Mar 2023 15:37:41 +0200
Subject: [PATCH 022/194] Miss
---
ryzom/server/src/entities_game_service/egs_variables.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/ryzom/server/src/entities_game_service/egs_variables.h b/ryzom/server/src/entities_game_service/egs_variables.h
index 25df74de73..7565ef87ff 100644
--- a/ryzom/server/src/entities_game_service/egs_variables.h
+++ b/ryzom/server/src/entities_game_service/egs_variables.h
@@ -303,6 +303,7 @@ extern NLMISC::CVariable MinFameToBuyGuildBuilding;
extern NLMISC::CVariable MinFameToBuyPlayerBuilding;
extern NLMISC::CVariable GuildCreationCost;
extern NLMISC::CVariable GuildMaxMemberCount;
+extern NLMISC::CVariable GuildMaxPoints;
extern NLMISC::CVariable TriggerRequestTimout;
From 1ec4fb0443f28845057c9a627497311425315592 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 31 Mar 2023 15:42:03 +0200
Subject: [PATCH 023/194] Fix
---
ryzom/server/src/entities_game_service/egs_variables.cpp | 2 +-
ryzom/server/src/entities_game_service/egs_variables.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/egs_variables.cpp b/ryzom/server/src/entities_game_service/egs_variables.cpp
index 61c3017051..de5c38297b 100644
--- a/ryzom/server/src/entities_game_service/egs_variables.cpp
+++ b/ryzom/server/src/entities_game_service/egs_variables.cpp
@@ -425,7 +425,7 @@ CVariable MinFameToBuyGuildBuilding("egs","MinFameToBuyGuildBuilding", "
CVariable MinFameToBuyPlayerBuilding("egs","MinFameToBuyPlayerBuilding", "Minimum Fame To Buy a Player Building", 0, 0, true);
CVariable GuildCreationCost("egs","GuildCreationCost", "", 100, 0, true);
CVariable GuildMaxMemberCount("egs","GuildMaxMemberCount", "", 256, 0, true);
-CVariable GuildMaxPoints("egs","GuildMaxPoints", "", 200, 0, true);
+CVariable GuildMaxPoints("egs","GuildMaxPoints", "", 200, 0, true);
CVariable TriggerRequestTimout("egs","TriggerRequestTimout", "", 300, 0, true);
diff --git a/ryzom/server/src/entities_game_service/egs_variables.h b/ryzom/server/src/entities_game_service/egs_variables.h
index 7565ef87ff..eee9eea1b1 100644
--- a/ryzom/server/src/entities_game_service/egs_variables.h
+++ b/ryzom/server/src/entities_game_service/egs_variables.h
@@ -303,7 +303,7 @@ extern NLMISC::CVariable MinFameToBuyGuildBuilding;
extern NLMISC::CVariable MinFameToBuyPlayerBuilding;
extern NLMISC::CVariable GuildCreationCost;
extern NLMISC::CVariable GuildMaxMemberCount;
-extern NLMISC::CVariable GuildMaxPoints;
+extern NLMISC::CVariable GuildMaxPoints;
extern NLMISC::CVariable TriggerRequestTimout;
From 508248badcbdd47b36b594defd8f5ec3b6b6486e Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 31 Mar 2023 15:49:45 +0200
Subject: [PATCH 024/194] Fix GP
---
.../mission_manager/missions_commands.cpp | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index d0ce37cbc0..45a918a526 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -1054,7 +1054,7 @@ string getJewelEnchantAttr(CSheetId sbrick)
//enchantEquipedItem 2 FingerL jloot_generic.sbrick,jboost_100x.sbrick
-//enchantEquipedItem 2 FingerL jloot_forage.sbrick,jboost_100x.sbrick
+//enchantEquipedItem 2 FingerL jloot_forage.sbrick,jboost_1000x.sbrick
//enchantEquipedItem 2 FingerR jloot_hunt.sbrick,jboost_100x.sbrick
//enchantEquipedItem 2 Neck jrez_lastpoint.sbrick,jboost_100x.sbrick
//enchantEquipedItem 2 WristR jmod_focus_tryker_1.sbrick
@@ -3545,6 +3545,7 @@ NLMISC_COMMAND(setGuildPoints, "get/set the guild points", " ")
{
fromString(quant.substr(1), quantity);
points += quantity;
+ guild->addXP(quantity);
}
}
else if (quant[0] == '-')
@@ -3561,14 +3562,14 @@ NLMISC_COMMAND(setGuildPoints, "get/set the guild points", " ")
log.displayNL("ERR: not enough"); // No enough points
return true;
}
+ guild->spendXP(quantity);
}
}
else
{
fromString(quant, points);
+ guild->setPoints(points);
}
-
- guild->setPoints(points);
}
log.displayNL("%u", points);
From dc479deeadf331fc1602b424ee90e13d0afd055c Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 31 Mar 2023 15:51:17 +0200
Subject: [PATCH 025/194] Fix
---
ryzom/server/src/entities_game_service/egs_variables.cpp | 2 +-
ryzom/server/src/entities_game_service/egs_variables.h | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/egs_variables.cpp b/ryzom/server/src/entities_game_service/egs_variables.cpp
index de5c38297b..61c3017051 100644
--- a/ryzom/server/src/entities_game_service/egs_variables.cpp
+++ b/ryzom/server/src/entities_game_service/egs_variables.cpp
@@ -425,7 +425,7 @@ CVariable MinFameToBuyGuildBuilding("egs","MinFameToBuyGuildBuilding", "
CVariable MinFameToBuyPlayerBuilding("egs","MinFameToBuyPlayerBuilding", "Minimum Fame To Buy a Player Building", 0, 0, true);
CVariable GuildCreationCost("egs","GuildCreationCost", "", 100, 0, true);
CVariable GuildMaxMemberCount("egs","GuildMaxMemberCount", "", 256, 0, true);
-CVariable GuildMaxPoints("egs","GuildMaxPoints", "", 200, 0, true);
+CVariable GuildMaxPoints("egs","GuildMaxPoints", "", 200, 0, true);
CVariable TriggerRequestTimout("egs","TriggerRequestTimout", "", 300, 0, true);
diff --git a/ryzom/server/src/entities_game_service/egs_variables.h b/ryzom/server/src/entities_game_service/egs_variables.h
index eee9eea1b1..ab952d81e0 100644
--- a/ryzom/server/src/entities_game_service/egs_variables.h
+++ b/ryzom/server/src/entities_game_service/egs_variables.h
@@ -271,6 +271,7 @@ extern NLMISC::CVariable ForageExtractionXPFactor;
extern NLMISC::CVariable ForageExtractionNbParticipantsXPBonusRatio;
extern NLMISC::CVariable ForageExtractionNastyEventXPMalusRatio;
extern NLMISC::CVariable ArkLootTimeBeforeNewDraw;
+extern NLMISC::CVariable ArkLootExtraModifierMultiplier;
extern NLMISC::CVariable ForageKamiOfferingSpeed;
extern NLMISC::CVariable ForageReduceDamageTimeWindow;
extern NLMISC::CVariable ForageDebug;
@@ -303,7 +304,7 @@ extern NLMISC::CVariable MinFameToBuyGuildBuilding;
extern NLMISC::CVariable MinFameToBuyPlayerBuilding;
extern NLMISC::CVariable GuildCreationCost;
extern NLMISC::CVariable GuildMaxMemberCount;
-extern NLMISC::CVariable GuildMaxPoints;
+extern NLMISC::CVariable GuildMaxPoints;
extern NLMISC::CVariable TriggerRequestTimout;
From 12776eb108e7c4adccd32008de72a21c9c06f32d Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 27 Apr 2023 11:43:00 +0200
Subject: [PATCH 026/194] Improve notify.sh
---
ryzom/server/tools/notify.sh | 29 +++++++++++++++++++++++++----
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/ryzom/server/tools/notify.sh b/ryzom/server/tools/notify.sh
index 7f9990b526..1279eb7420 100755
--- a/ryzom/server/tools/notify.sh
+++ b/ryzom/server/tools/notify.sh
@@ -25,29 +25,50 @@ if [[ "$COMMAND" == "ServiceStarted" ]]
then
if [[ ! -z "$NOTIFY_URL_SERVICE_RESTARTED" ]]
then
- echo "nofitiy $(hostname -s):$2 started"
+ echo "Nofitiy $(hostname -s):$2 started"
curl "$NOTIFY_URL_SERVICE_RESTARTED?command=started&shard=$(hostname -s)&apikey=$NOTIFY_URL_KEY&service=$2" & 2> /dev/null
+ echo $COMMAND > $SHARD_PATH/states/$2.txt
+ fi
+elif [[ "$COMMAND" == "ServiceStarting" ]]
+then
+ if [[ ! -z "$NOTIFY_URL_SERVICE_RESTARTED" ]]
+ then
+ echo "Nofitiy $(hostname -s):$2 starting"
+ curl "$NOTIFY_URL_SERVICE_RESTARTED?command=starting&shard=$(hostname -s)&apikey=$NOTIFY_URL_KEY&service=$2" & 2> /dev/null
+ echo $COMMAND > $SHARD_PATH/states/$2.txt
fi
elif [[ "$COMMAND" == "ServiceStopped" ]]
then
if [[ ! -z "$NOTIFY_URL_SERVICE_RESTARTED" ]]
then
- echo "nofitiy $(hostname -s):$2 stopped"
+ echo "Nofitiy $(hostname -s):$2 stopped"
curl "$NOTIFY_URL_SERVICE_RESTARTED?command=stopped&shard=$(hostname -s)&apikey=$NOTIFY_URL_KEY&service=$2" & 2> /dev/null
+ echo $COMMAND > $SHARD_PATH/states/$2.txt
fi
elif [[ "$COMMAND" == "ShardStopped" ]]
then
if [[ ! -z "$NOTIFY_URL_SERVICE_RESTARTED" ]]
then
- echo "nofitiy $(hostname -s):$2 shard stopped"
+ echo "Nofitiy $(hostname -s):$2 shard stopped"
curl "$NOTIFY_URL_SERVICE_RESTARTED?command=shard_stopped&shard=$(hostname -s)&apikey=$NOTIFY_URL_KEY" & 2> /dev/null
+ echo $COMMAND > $SHARD_PATH/states/shard.txt
fi
elif [[ "$COMMAND" == "ShardStarted" ]]
then
if [[ ! -z "$NOTIFY_URL_SERVICE_RESTARTED" ]]
then
- echo "nofitiy $(hostname -s):$2 shard started"
+ echo "Nofitiy $(hostname -s):$2 shard started"
curl "$NOTIFY_URL_SERVICE_RESTARTED?command=shard_started&shard=$(hostname -s)&apikey=$NOTIFY_URL_KEY" & 2> /dev/null
+ echo $COMMAND > $SHARD_PATH/states/shard.txt
+ fi
+elif [[ "$COMMAND" == "ShardStarting" ]]
+then
+ if [[ ! -z "$NOTIFY_URL_SERVICE_RESTARTED" ]]
+ then
+ echo "Nofitiy $(hostname -s):$2 shard starting"
+ curl "$NOTIFY_URL_SERVICE_RESTARTED?command=shard_starting&shard=$(hostname -s)&apikey=$NOTIFY_URL_KEY" & 2> /dev/null
+ echo $COMMAND > $SHARD_PATH/states/shard.txt
fi
fi
+sleep 1
From 50f663afcac064525ed6ecb486e17f2d6c75641e Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 27 Apr 2023 16:12:30 +0200
Subject: [PATCH 027/194] Update
---
ryzom/server/tools/service_launcher.sh | 45 +++++++++++++++++++++-----
1 file changed, 37 insertions(+), 8 deletions(-)
diff --git a/ryzom/server/tools/service_launcher.sh b/ryzom/server/tools/service_launcher.sh
index 4c74b61d50..6040830aff 100755
--- a/ryzom/server/tools/service_launcher.sh
+++ b/ryzom/server/tools/service_launcher.sh
@@ -76,22 +76,51 @@ do
#notify start
- if [ "$NAME" = "egs" ] || [ "$NAME" = "ios" ] || [ "$NAME" = "gpms" ]
+ if [[ "$NAME" == "ais_fyros" ]] || [[ "$NAME" == "ais_matis" ]] || [[ "$NAME" == "ais_tryker" ]] || [[ "$NAME" == "ais_roots" ]] || [[ "$NAME" == "ais_zorai" ]] || [[ "$NAME" == "ais_ark" ]]
then
+ touch "$SHARD_PATH/logs/ai_service_${NAME}.log"
+ "$CWD/wait_and_notify.sh" "$SHARD_PATH/logs/ai_service_${NAME}.log" "[[ARK]] AIS UP" $NAME 0 &
+ sleep 4
+ elif [[ "$NAME" == "egs" ]]
+ then
+ touch "$SHARD_PATH/logs/entities_game_service.log"
+ "$CWD/wait_and_notify.sh" "$SHARD_PATH/logs/entities_game_service.log" "onAiInstanceReady : AI Instance 1 is up" $NAME 0 &
sleep 2
- elif [ "$NAME" = "ais_fyros" ] || [ "$NAME" = "ais_matis" ] || [ "$NAME" = "ais_tryker" ] || [ "$NAME" = "ais_roots" ] || [ "$NAME" = "ais_zorai" ] || [ "$NAME" = "ais_ark" ]
+ elif [[ "$NAME" == "ios" ]]
then
- sleep 4
+ touch "$SHARD_PATH/logs/input_output_service.log"
+ "$CWD/wait_and_notify.sh" "$SHARD_PATH/logs/input_output_service.log" "cbDynChatAddChan: add channel : FACTION_MARAUDER" $NAME 0 &
+ sleep 2
+ elif [[ "$NAME" == "gpms" ]]
+ then
+ touch "$SHARD_PATH/logs/gpm_service.log"
+ "$CWD/wait_and_notify.sh" "$SHARD_PATH/logs/gpm_service.log" "cbCreateIndoorUnit : MSG: Creating indoor unit 256" $NAME 0 &
+ sleep 2
+ else
+ declare -A ServiceLogs
+ ServiceLogs[aes] = "admin_executor_service.log"
+ ServiceLogs[bms_master] = "backup_service.log"
+ ServiceLogs[fes] = "frontend_service.log"
+ ServiceLogs[las] = "log_analyser_service.log"
+ ServiceLogs[lgs] = "logger_service.log"
+ ServiceLogs[mos] = "monitor_service.log"
+ ServiceLogs[ms] = "mirror_service.log"
+ ServiceLogs[ras] = "admin_service.log"
+ ServiceLogs[rns] = "naming_service.log"
+ ServiceLogs[rws] = "welcome_service.log"
+ ServiceLogs[sbs] = "session_browser_server.log"
+ ServiceLogs[su] = "shard_unifier_service.log"
+ ServiceLogs[ts] = "tick_service.log"
+
+ touch "$SHARD_PATH/logs/${ServiceLogs[$NAME]}"
+ "$CWD/wait_and_notify.sh" "$SHARD_PATH/logs/${ServiceLogs[$NAME]}" "SERVICE: Service ready" $NAME 2 &
fi
-
- echo "notifying $CWD/notify.sh ServiceStarted $NAME"
- "$CWD/notify.sh" ServiceStarted $NAME
-
+
export LC_ALL=C; unset LANGUAGE
if [[ "$USE_GDB" == "1" ]]
then
- if [ "$NAME" = "egs" ] || [ "$NAME" = "ios" ] || [ "$NAME" = "ais_fyros" ] || [ "$NAME" = "ais_matis" ] || [ "$NAME" = "ais_tryker" ] || [ "$NAME" = "ais_roots" ] || [ "$NAME" = "ais_zorai" ] || [ "$NAME" = "ais_ark" ] || [ "$NAME" = "gpms" ]
+ if [[ "$NAME" == "egs" ]] || [[ "$NAME" == "ios" ]] || [[ "$NAME" == "ais_fyros" ]] || [[ "$NAME" == "ais_matis" ]] || [[ "$NAME" == "ais_tryker" ]] || [[ "$NAME" == "ais_roots" ]] || [[ "$NAME" == "ais_zorai" ]] || [[ "$NAME" == "ais_ark" ]] || [[ "$NAME" == "gpms" ]]
then
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SHARD_PATH/lib gdb -batch -ex 'set logging file $NAME/gdb_dump.txt' -ex 'set logging on' -ex 'run $CTRL_CMDLINE' -ex 'bt' $EXECUTABLE" > /tmp/run_$NAME
else
From e3306ba07f65e41e2b42289ec265c34f3601fac5 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sun, 30 Apr 2023 15:21:23 +0200
Subject: [PATCH 028/194] Fixes
---
.gitignore | 4 +
ryzom/server/www/.htaccess | 8 +
ryzom/server/www/libs/.htaccess | 1 +
ryzom/server/www/libs/nel_message.php | 592 +++++++++++++-------------
ryzom/server/www/tools/.htaccess | 1 +
5 files changed, 310 insertions(+), 296 deletions(-)
create mode 100644 ryzom/server/www/.htaccess
create mode 100644 ryzom/server/www/libs/.htaccess
create mode 100644 ryzom/server/www/tools/.htaccess
diff --git a/.gitignore b/.gitignore
index 51a5071f78..f50164ac22 100644
--- a/.gitignore
+++ b/.gitignore
@@ -271,3 +271,7 @@ web/public_php/db_version_ring
web/public_php/config_user.php
nel/tools/build_gamedata/processes/pz/build_world_packed_col.cfg
nel/tools/build_gamedata/processes/cartographer/island_screenshots.cfg
+
+# Configs
+ryzom/server/www/config.php
+ryzom/server/tools/config.sh
diff --git a/ryzom/server/www/.htaccess b/ryzom/server/www/.htaccess
new file mode 100644
index 0000000000..b47d2b304e
--- /dev/null
+++ b/ryzom/server/www/.htaccess
@@ -0,0 +1,8 @@
+
+ Deny from all
+
+
+
+ Deny from all
+
+
diff --git a/ryzom/server/www/libs/.htaccess b/ryzom/server/www/libs/.htaccess
new file mode 100644
index 0000000000..3a42882788
--- /dev/null
+++ b/ryzom/server/www/libs/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/ryzom/server/www/libs/nel_message.php b/ryzom/server/www/libs/nel_message.php
index d8669f1e44..65a415ddf0 100644
--- a/ryzom/server/www/libs/nel_message.php
+++ b/ryzom/server/www/libs/nel_message.php
@@ -1,296 +1,296 @@
-InputStream = false;
- $this->Pos = 0;
- $this->Buffer = "";
- debug("A : ".gettype($this->Buffer)." ");
- }
-
- function setBuffer ($Buffer)
- {
- $this->InputStream = true;
- $this->Buffer = $Buffer;
- $this->Pos = 0;
- }
-
- function isReading () { return $this->InputStream; }
-
- function serialUInt8 (&$val)
- {
- if ($this->isReading())
- {
- $val = ord($this->Buffer{$this->Pos++});
- debug(sprintf ("read uint8 '%d' \n", $val));
- }
- else
- {
- debug("B".gettype($this->Buffer)." ");
- debug(sprintf ("write uint8 Buffer size before = %u \n", strlen($this->Buffer)));
- $this->Buffer = $this->Buffer . chr($val & 0xFF);
- $this->Pos++;
- debug("C".gettype($this->Buffer)." ");
- debug(sprintf ("write uint8 '%d' %d \n", $val, $this->Pos));
- debug(sprintf ("write uint8 Buffer size after = %u \n", strlen($this->Buffer)));
- }
- }
-
- function serialUInt32 (&$val)
- {
- if ($this->isReading())
- {
- $val = ord($this->Buffer{$this->Pos++});
- $val += ord($this->Buffer{$this->Pos++})*256;
- $val += ord($this->Buffer{$this->Pos++})*(double)256*256;
- $val += ord($this->Buffer{$this->Pos++})*(double)256*256*256;
- debug(sprintf ("read uint32 '%d' \n", $val));
-// var_dump($val);
- }
- else
- {
- debug("D".gettype($this->Buffer)." ");
- $this->Buffer .= chr($val & 0xFF);
- $this->Buffer .= chr(($val>>8) & 0xFF);
- $this->Buffer .= chr(($val>>16) & 0xFF);
- $this->Buffer .= chr(($val>>24) & 0xFF);
- $this->Pos += 4;
- debug("E".gettype($this->Buffer)." ");
- debug(sprintf ("write uint32 '%d' %d \n", $val, $this->Pos));
- }
- }
-
- function serialString (&$val)
- {
- if ($this->isReading())
- {
- $this->serialUInt32($size);
- debug(sprintf ("read string : size = %u \n", $size));
- $val = substr ($this->Buffer, $this->Pos, $size);
- debug(sprintf ("read string '%s' \n", $val));
- $this->Pos += strlen($val);
- }
- else
- {
- $valLen = strlen($val);
- $this->serialUInt32($valLen);
- $this->Buffer .= $val;
- $this->Pos += $valLen;
- debug(sprintf ("write string '%s' %d \n", $val, $this->Pos));
- }
- }
- function serialEnum (&$val)
- {
- if ($this->isReading())
- {
- $intValue = 0;
- $this->serialUInt32($intValue);
- $val->fromInt((int)$intValue);
- debug(sprintf ("read enum '%s' \n", $val->toString()));
- }
- else
- {
- $intValue = $val->toInt();
- $this->serialUInt32($intValue);
- debug(sprintf ("write enum '%s' %d \n", $val->toString(), $this->Pos));
- }
- }
- }
-
- class CMessage extends CMemStream
- {
- var $MsgName;
-
- function CMessage()
- {
- $this->CMemStream();
- }
-
- function setName($name)
- {
- $this->MsgName = $name;
- }
- }
-
- class CCallbackClient
- {
- var $ConSock = false;
-
- var $MsgNum = 0;
-
- function connect($addr, $port, &$res)
- {
- global $SockTimeOut;
-
- debug(sprintf("Connect "));
- $this->MsgNum = 0;
-
- $this->ConSock = fsockopen ($addr, $port, $errno, $errstr, $SockTimeOut);
- debug("H".gettype($this->ConSock)." ");
-
- if (!$this->ConSock)
- {
- $res = "Can't connect to the callback server '$addr:$port' ($errno: $errstr)";
-
- return false;
- }
- else
- {
- // set time out on the socket to 2 secondes
- stream_set_timeout($this->ConSock, $SockTimeOut);
- $res = "";
- return true;
- }
- }
-
- function close()
- {
- if ($this->ConSock)
- {
- fclose($this->ConSock);
- debug(sprintf("Close "));
- }
- else
- debug(sprintf("Already Closed ! "));
- }
-
- function sendMessage(&$message)
- {
- if (!$this->ConSock)
- {
- debug(sprintf ("Socket is not valid\n"));
- return false;
- }
- debug(sprintf ("sendMessage : message Buffer is '%d' \n", $message->Pos));
- debug(sprintf ("sendMessage : message Buffer is '%d' \n", strlen($message->Buffer)));
- $hd = new CMemStream;
- debug(sprintf("SendMessage number %u ", $this->MsgNum));
- $hd->serialUInt32 ($this->MsgNum); // number the packet
- $this->MsgNum += 1;
- debug(sprintf("After SendMessage, number %u ", $this->MsgNum));
- $messageType = 0;
- $hd->serialUInt8 ($messageType);
- $hd->serialString ($message->MsgName);
-
- debug(sprintf ("sendMessage : header size is '%d' \n", $hd->Pos));
-
-// $sb .= $message->Buffer;
-
- $size = $hd->Pos + $message->Pos;
- $Buffer = (string) chr(($size>>24)&0xFF);
- $Buffer .= chr(($size>>16)&0xFF);
- $Buffer .= chr(($size>>8)&0xFF);
- $Buffer .= chr($size&0xFF);
- debug( "E".gettype($hd->Buffer)." ");
- debug("F".gettype($message->Buffer)." ");
- $Buffer .= (string) $hd->Buffer;
- $Buffer .= (string) $message->Buffer;
-
- debug("G".gettype($this->ConSock)." ");
-
- if (!fwrite ($this->ConSock, $Buffer))
- {
- debug(sprintf ("Error writing to socket\n"));
- return false;
- }
- debug(sprintf ("sent packet size '%d' (written size = %d) \n", strlen($Buffer), $size));
- fflush ($this->ConSock);
-
- return true;
- }
-
- function waitMessage()
- {
- if (!$this->ConSock)
- {
- debug(sprintf ("Socket is not valid\n"));
- return false;
- }
-
-
- $size = 0;
- $val = fread ($this->ConSock, 1);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size = ord($val) << 24;
- $val = fread ($this->ConSock, 1);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size = ord($val) << 16;
- $val = fread ($this->ConSock, 1);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size += ord($val) << 8;
- $val = fread ($this->ConSock, 1);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size += ord($val);
- debug(sprintf ("receive packet size '%d' \n", $size));
- $fake = fread ($this->ConSock, 5);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size -= 5; // remove the fake
-
- $Buffer = "";
- while ($size > 0 && strlen($Buffer) != $size)
- {
- $Buffer .= fread ($this->ConSock, $size - strlen($Buffer));
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- }
- $msgin = new CMemStream;
- $msgin->setBuffer ($Buffer);
-
- // decode msg name
- $msgin->serialString($name);
-
- debug(sprintf("Message name = '%s' ", $name));
- $message = new CMessage;
- $message->setBuffer(substr($msgin->Buffer, $msgin->Pos));
- $message->setName($name);
-
- debug(sprintf("In message name = '%s' ", $message->MsgName));
-
- return $message;
- }
- }
-
-?>
+InputStream = false;
+ $this->Pos = 0;
+ $this->Buffer = "";
+ debug("A : ".gettype($this->Buffer)." ");
+ }
+
+ function setBuffer ($Buffer)
+ {
+ $this->InputStream = true;
+ $this->Buffer = $Buffer;
+ $this->Pos = 0;
+ }
+
+ function isReading () { return $this->InputStream; }
+
+ function serialUInt8 (&$val)
+ {
+ if ($this->isReading())
+ {
+ $val = ord($this->Buffer[$this->Pos++]);
+ debug(sprintf ("read uint8 '%d' \n", $val));
+ }
+ else
+ {
+ debug("B".gettype($this->Buffer)." ");
+ debug(sprintf ("write uint8 Buffer size before = %u \n", strlen($this->Buffer)));
+ $this->Buffer = $this->Buffer . chr($val & 0xFF);
+ $this->Pos++;
+ debug("C".gettype($this->Buffer)." ");
+ debug(sprintf ("write uint8 '%d' %d \n", $val, $this->Pos));
+ debug(sprintf ("write uint8 Buffer size after = %u \n", strlen($this->Buffer)));
+ }
+ }
+
+ function serialUInt32 (&$val)
+ {
+ if ($this->isReading())
+ {
+ $val = ord($this->Buffer[$this->Pos++]);
+ $val += ord($this->Buffer[$this->Pos++])*256;
+ $val += ord($this->Buffer[$this->Pos++])*(double)256*256;
+ $val += ord($this->Buffer[$this->Pos++])*(double)256*256*256;
+ debug(sprintf ("read uint32 '%d' \n", $val));
+// var_dump($val);
+ }
+ else
+ {
+ debug("D".gettype($this->Buffer)." ");
+ $this->Buffer .= chr($val & 0xFF);
+ $this->Buffer .= chr(($val>>8) & 0xFF);
+ $this->Buffer .= chr(($val>>16) & 0xFF);
+ $this->Buffer .= chr(($val>>24) & 0xFF);
+ $this->Pos += 4;
+ debug("E".gettype($this->Buffer)." ");
+ debug(sprintf ("write uint32 '%d' %d \n", $val, $this->Pos));
+ }
+ }
+
+ function serialString (&$val)
+ {
+ if ($this->isReading())
+ {
+ $this->serialUInt32($size);
+ debug(sprintf ("read string : size = %u \n", $size));
+ $val = substr ($this->Buffer, $this->Pos, $size);
+ debug(sprintf ("read string '%s' \n", $val));
+ $this->Pos += strlen($val);
+ }
+ else
+ {
+ $valLen = strlen($val);
+ $this->serialUInt32($valLen);
+ $this->Buffer .= $val;
+ $this->Pos += $valLen;
+ debug(sprintf ("write string '%s' %d \n", $val, $this->Pos));
+ }
+ }
+ function serialEnum (&$val)
+ {
+ if ($this->isReading())
+ {
+ $intValue = 0;
+ $this->serialUInt32($intValue);
+ $val->fromInt((int)$intValue);
+ debug(sprintf ("read enum '%s' \n", $val->toString()));
+ }
+ else
+ {
+ $intValue = $val->toInt();
+ $this->serialUInt32($intValue);
+ debug(sprintf ("write enum '%s' %d \n", $val->toString(), $this->Pos));
+ }
+ }
+ }
+
+ class CMessage extends CMemStream
+ {
+ var $MsgName;
+
+ function CMessage()
+ {
+ $this->CMemStream();
+ }
+
+ function setName($name)
+ {
+ $this->MsgName = $name;
+ }
+ }
+
+ class CCallbackClient
+ {
+ var $ConSock = false;
+
+ var $MsgNum = 0;
+
+ function connect($addr, $port, &$res)
+ {
+ global $SockTimeOut;
+
+ debug(sprintf("Connect "));
+ $this->MsgNum = 0;
+
+ $this->ConSock = fsockopen ($addr, $port, $errno, $errstr, $SockTimeOut);
+ debug("H".gettype($this->ConSock)." ");
+
+ if (!$this->ConSock)
+ {
+ $res = "Can't connect to the callback server '$addr:$port' ($errno: $errstr)";
+
+ return false;
+ }
+ else
+ {
+ // set time out on the socket to 2 secondes
+ stream_set_timeout($this->ConSock, $SockTimeOut);
+ $res = "";
+ return true;
+ }
+ }
+
+ function close()
+ {
+ if ($this->ConSock)
+ {
+ fclose($this->ConSock);
+ debug(sprintf("Close "));
+ }
+ else
+ debug(sprintf("Already Closed ! "));
+ }
+
+ function sendMessage(&$message)
+ {
+ if (!$this->ConSock)
+ {
+ debug(sprintf ("Socket is not valid\n"));
+ return false;
+ }
+ debug(sprintf ("sendMessage : message Buffer is '%d' \n", $message->Pos));
+ debug(sprintf ("sendMessage : message Buffer is '%d' \n", strlen($message->Buffer)));
+ $hd = new CMemStream;
+ debug(sprintf("SendMessage number %u ", $this->MsgNum));
+ $hd->serialUInt32 ($this->MsgNum); // number the packet
+ $this->MsgNum += 1;
+ debug(sprintf("After SendMessage, number %u ", $this->MsgNum));
+ $messageType = 0;
+ $hd->serialUInt8 ($messageType);
+ $hd->serialString ($message->MsgName);
+
+ debug(sprintf ("sendMessage : header size is '%d' \n", $hd->Pos));
+
+// $sb .= $message->Buffer;
+
+ $size = $hd->Pos + $message->Pos;
+ $Buffer = (string) chr(($size>>24)&0xFF);
+ $Buffer .= chr(($size>>16)&0xFF);
+ $Buffer .= chr(($size>>8)&0xFF);
+ $Buffer .= chr($size&0xFF);
+ debug( "E".gettype($hd->Buffer)." ");
+ debug("F".gettype($message->Buffer)." ");
+ $Buffer .= (string) $hd->Buffer;
+ $Buffer .= (string) $message->Buffer;
+
+ debug("G".gettype($this->ConSock)." ");
+
+ if (!fwrite ($this->ConSock, $Buffer))
+ {
+ debug(sprintf ("Error writing to socket\n"));
+ return false;
+ }
+ debug(sprintf ("sent packet size '%d' (written size = %d) \n", strlen($Buffer), $size));
+ fflush ($this->ConSock);
+
+ return true;
+ }
+
+ function waitMessage()
+ {
+ if (!$this->ConSock)
+ {
+ debug(sprintf ("Socket is not valid\n"));
+ return false;
+ }
+
+
+ $size = 0;
+ $val = fread ($this->ConSock, 1);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size = ord($val) << 24;
+ $val = fread ($this->ConSock, 1);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size = ord($val) << 16;
+ $val = fread ($this->ConSock, 1);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size += ord($val) << 8;
+ $val = fread ($this->ConSock, 1);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size += ord($val);
+ debug(sprintf ("receive packet size '%d' \n", $size));
+ $fake = fread ($this->ConSock, 5);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size -= 5; // remove the fake
+
+ $Buffer = "";
+ while ($size > 0 && strlen($Buffer) != $size)
+ {
+ $Buffer .= fread ($this->ConSock, $size - strlen($Buffer));
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ }
+ $msgin = new CMemStream;
+ $msgin->setBuffer ($Buffer);
+
+ // decode msg name
+ $msgin->serialString($name);
+
+ debug(sprintf("Message name = '%s' ", $name));
+ $message = new CMessage;
+ $message->setBuffer(substr($msgin->Buffer, $msgin->Pos));
+ $message->setName($name);
+
+ debug(sprintf("In message name = '%s' ", $message->MsgName));
+
+ return $message;
+ }
+ }
+
+?>
diff --git a/ryzom/server/www/tools/.htaccess b/ryzom/server/www/tools/.htaccess
new file mode 100644
index 0000000000..3a42882788
--- /dev/null
+++ b/ryzom/server/www/tools/.htaccess
@@ -0,0 +1 @@
+Deny from all
From 8a7883e18aafff37548cb83912382455f881486e Mon Sep 17 00:00:00 2001
From: Nuno
Date: Mon, 8 May 2023 21:42:34 +0200
Subject: [PATCH 029/194] Fix ark commands
---
.../mission_manager/missions_commands.cpp | 43 ++++++++++++++++---
1 file changed, 36 insertions(+), 7 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index 45a918a526..e65ef0f8f2 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -3589,7 +3589,7 @@ NLMISC_COMMAND(resetTodayGuildPoints, "reset the today guild points", "")
}
//----------------------------------------------------------------------------
-NLMISC_COMMAND(addPlayerPet, "add a pet to player", " [size] [name]")
+NLMISC_COMMAND(addPlayerPet, "add a pet to player", " [size] [name] [clientsheet]")
{
if (args.size() < 2)
return false;
@@ -3599,19 +3599,23 @@ NLMISC_COMMAND(addPlayerPet, "add a pet to player", " [size] [nam
CSheetId ticket = CSheetId(args[1]);
uint8 size = 100;
- if (args.size() >= 3)
+ if (args.size() > 2)
fromString(args[2], size);
ucstring customName;
- if (args.size() >= 4)
+ if (args.size() >= 3)
customName.fromUtf8(args[3]);
+ string clientSheet;
+ if (args.size() > 4)
+ clientSheet = args[4];
+
if (ticket != CSheetId::Unknown)
{
CGameItemPtr item = c->createItemInInventoryFreeSlot(INVENTORIES::bag, 1, 1, ticket);
if (item != 0)
{
- if (! c->addCharacterAnimal(ticket, 0, item, size, customName))
+ if (! c->addCharacterAnimal(ticket, 0, item, size, customName, clientSheet))
{
item.deleteItem();
log.displayNL("ERR: CAN'T ADD ANIMAL");
@@ -4310,17 +4314,39 @@ NLMISC_COMMAND(removeDp, "Update the DP", " ")
}
-NLMISC_COMMAND(addBricks, "Specified player learns given brick", " ")
+NLMISC_COMMAND(haveBricks, "Return list of player selected learned bricks", " ")
{
if (args.size() != 2) return false;
GET_ACTIVE_CHARACTER
+ std::vector< std::string > bricks;
+ NLMISC::splitString(args[1], ",", bricks);
+ bool res = true;
+ for (uint32 i=0; ihaveBrick(brickId))
+ log.displayNL(bricks[i].c_str());
+ }
+
+ return true;
+}
+
+
+NLMISC_COMMAND(addBricks, "Specified player learns given brick", " [dont_add_again?]")
+{
+ if (args.size() < 2) return false;
+ GET_ACTIVE_CHARACTER
+
+ bool checkHave = args.size() > 2 && args[2] == "1";
+
std::vector< std::string > bricks;
NLMISC::splitString(args[1], ",", bricks);
for (uint32 i=0; iaddKnownBrick(brickId);
+ if (!c->haveBrick(brickId))
+ c->addKnownBrick(brickId);
}
return true;
}
@@ -4332,7 +4358,10 @@ NLMISC_COMMAND(delBrick, "Specified player unlearns given brick", " removeKnownBrick(brickId);
+ if (c->haveBrick(brickId))
+ c->removeKnownBrick(brickId);
+ else
+ log.displayNL("ERR: don't have brick");
return true;
}
From 39e04126a068c007f1254ee1ce59d77155853073 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Mon, 8 May 2023 21:45:23 +0200
Subject: [PATCH 030/194] Added aqua_speed for rite geo 50 tryker
---
.../entities_game_service.cpp | 7 ++++---
.../mission_manager/missions_commands.cpp | 16 ++++++++++++++++
.../player_manager/character.cpp | 17 +++++++++++++++++
.../player_manager/character.h | 4 ++++
.../player_manager/character_inlines.h | 6 ++++++
5 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/entities_game_service.cpp b/ryzom/server/src/entities_game_service/entities_game_service.cpp
index f2d2b1cee7..4031b5f5b0 100644
--- a/ryzom/server/src/entities_game_service/entities_game_service.cpp
+++ b/ryzom/server/src/entities_game_service/entities_game_service.cpp
@@ -389,6 +389,7 @@ void processMirrorUpdates()
{
user->entersWater();
}
+ user->applyRegenAndClipCurrentValue();
}
}
TheDataset.endChangedValuesForProp();
@@ -672,7 +673,7 @@ string getServerInfos(float x, float y)
pos.y = y;
pos.z = 0;
CRyzomTime::EWeather weather = WeatherEverywhere.getWeather(pos, CTimeDateSeasonManager::getRyzomTimeReference());
-
+
return toString("%f|%d|%s|%u",
CTimeDateSeasonManager::getRyzomTimeReference().getRyzomTime(),
CTimeDateSeasonManager::getRyzomTimeReference().getRyzomDay(),
@@ -1642,7 +1643,7 @@ nlassert(nodeLeaf->getType() == ICDBStructNode::TEXT);
// {
// if( args.size() == 0 )
// return false;
-//
+//
// NLMEMORY::StatisticsReport( args[0].c_str(), args.size() > 1 );
// return true;
//}
@@ -2047,7 +2048,7 @@ void cbMirrorUp( const std::string &serviceName, NLNET::TServiceId serviceId, vo
IOSIsUp = true;
nlinfo("IOS connection, serviceId %d",serviceId.get());
DynChatEGS.iosConnection();
-
+
CGuildManager::getInstance()->onIOSConnection();
CPVPManager2::getInstance()->onIOSMirrorUp();
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index 45a918a526..aecf7cf763 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -5229,3 +5229,19 @@ NLMISC_COMMAND(executePhrase,"execute a sabrina phrase","uid cyclic? [setCurrentSpeedSwimBonus(value);
+ }
+}
+
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index b7b53df05d..642a1b44da 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -591,6 +591,7 @@ CCharacter::CCharacter()
_MinPriceFilter = 0;
_MaxPriceFilter = ~0u;
_LastAppliedWeightMalus = 0;
+ _CurrentSpeedSwimBonus = 0;
_CurrentRegenerateReposBonus = 0;
_TpTicketSlot = INVENTORIES::INVALID_INVENTORY_SLOT;
// setup timer for tickUpdate() calling
@@ -2777,6 +2778,22 @@ void CCharacter::applyRegenAndClipCurrentValue()
_LastAppliedWeightMalus = getWeightMalus();
_PhysScores.SpeedVariationModifier += _LastAppliedWeightMalus;
sint16 speedVariationModifier = std::max((sint)_PhysScores.SpeedVariationModifier, (sint) - 100);
+ CSheetId aqua_speed("aqua_speed.sbrick");
+ if (isInWater() && (haveBrick(aqua_speed) || _CurrentSpeedSwimBonus > 0))
+ {
+ setBonusMalusName("aqua_speed", addEffectInDB(aqua_speed, true));
+ if (_CurrentSpeedSwimBonus > 0)
+ speedVariationModifier = std::min(speedVariationModifier + (sint16)_CurrentSpeedSwimBonus, 100);
+ else
+ speedVariationModifier = std::min(speedVariationModifier + 100, 100);
+ }
+ else
+ {
+ sint8 bonus = getBonusMalusName("aqua_speed");
+ if (bonus > -1)
+ removeEffectInDB(bonus, true);
+ }
+
// Speed
// while stunned/root/mezzed etc speed is forced to 0
float oldCurrentSpeed;
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.h b/ryzom/server/src/entities_game_service/player_manager/character.h
index 187169e131..f55ee5e4e2 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.h
+++ b/ryzom/server/src/entities_game_service/player_manager/character.h
@@ -2713,6 +2713,7 @@ class CCharacter : public CCharacterPersistantData, public CEntityBase, public N
uint32 getLastExchangeMount() const;
bool getRespawnMainLandInTown() const;
void setRespawnMainLandInTown(bool status);
+ void setCurrentSpeedSwimBonus(uint32 speed);
const std::list &getLastLogStats() const;
void updateConnexionStat();
@@ -3886,6 +3887,9 @@ class CCharacter : public CCharacterPersistantData, public CEntityBase, public N
/// backup last used weight malus
sint32 _LastAppliedWeightMalus;
+ /// aqua speed bonus (used for tryker rite)
+ uint32 _CurrentSpeedSwimBonus;
+
/// Regenerte factor
float _CurrentRegenerateReposBonus;
NLMISC::TGameCycle _CurrentRegenerateReposBonusTickUpdate;
diff --git a/ryzom/server/src/entities_game_service/player_manager/character_inlines.h b/ryzom/server/src/entities_game_service/player_manager/character_inlines.h
index 471bfc42cf..9840eef329 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character_inlines.h
+++ b/ryzom/server/src/entities_game_service/player_manager/character_inlines.h
@@ -1256,6 +1256,12 @@ inline void CCharacter::setRespawnMainLandInTown(bool status)
{
_RespawnMainLandInTown = status;
}
+
+inline void CCharacter::setCurrentSpeedSwimBonus(uint32 speed)
+{
+ _CurrentSpeedSwimBonus = speed;
+}
+
//------------------------------------------------------------------------------
inline const std::list& CCharacter::getLastLogStats() const
From 01b57a480ef14545f1c0e269a68986c4af0c8c9d Mon Sep 17 00:00:00 2001
From: Nuno
Date: Mon, 8 May 2023 21:45:46 +0200
Subject: [PATCH 031/194] Fix
---
.../entities_game_service/player_manager/character.cpp | 7 +++++--
.../src/entities_game_service/player_manager/character.h | 8 ++++----
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index b7b53df05d..fe8c4f8f3e 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -6030,7 +6030,7 @@ void CCharacter::setCurrentContinent(CONTINENT::TContinent continent)
//-----------------------------------------------
// CCharacter::addCharacterAnimal buy a creature
//-----------------------------------------------
-bool CCharacter::addCharacterAnimal(const CSheetId &PetTicket, uint32 Price, CGameItemPtr ptr, uint8 size, const ucstring &customName)
+bool CCharacter::addCharacterAnimal(const CSheetId &PetTicket, uint32 Price, CGameItemPtr ptr, uint8 size, const ucstring &customName, const string &clientSheet)
{
if (!PackAnimalSystemEnabled)
return false;
@@ -6046,7 +6046,10 @@ bool CCharacter::addCharacterAnimal(const CSheetId &PetTicket, uint32 Price, CGa
if (checkAnimalCount(PetTicket, true, 1))
{
const CStaticItem* form = CSheets::getForm(PetTicket);
- pet.PetSheetId = form->PetSheet;
+ if (!clientSheet.empty())
+ pet.PetSheetId = CSheetId(clientSheet.c_str());
+ else
+ pet.PetSheetId = form->PetSheet;
pet.Satiety = form->PetHungerCount;
pet.MaxSatiety = form->PetHungerCount;
uint8 startSlot = 0;
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.h b/ryzom/server/src/entities_game_service/player_manager/character.h
index 187169e131..bfbcb4b338 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.h
+++ b/ryzom/server/src/entities_game_service/player_manager/character.h
@@ -988,7 +988,7 @@ class CCharacter : public CCharacterPersistantData, public CEntityBase, public N
void setTimeOfDeath(NLMISC::TGameTime t);
// character buy a creature
- bool addCharacterAnimal(const NLMISC::CSheetId &PetTicket, uint32 Price, CGameItemPtr ptr, uint8 size = 100, const ucstring &customName = ucstring(""));
+ bool addCharacterAnimal(const NLMISC::CSheetId &PetTicket, uint32 Price, CGameItemPtr ptr, uint8 size = 100, const ucstring &customName = ucstring(""), const std::string &clientSheet = "");
// return free slot for pet spawn or -1 if there are no free slot
sint32 getFreePetSlot(uint8 startSlot = 0);
@@ -3024,6 +3024,9 @@ class CCharacter : public CCharacterPersistantData, public CEntityBase, public N
return (_EntityState.X() != _OldPosX || _EntityState.Y() != _OldPosY);
}
+ /// apply regenerate and clip currents value
+ void applyRegenAndClipCurrentValue();
+
/// Kill the player
void killMe();
@@ -3079,9 +3082,6 @@ class CCharacter : public CCharacterPersistantData, public CEntityBase, public N
/// recompute all Max value
void computeMaxValue();
- /// apply regenerate and clip currents value
- void applyRegenAndClipCurrentValue();
-
/// character is dead
void deathOccurs(void);
From a574dfe529ccd4dba99cab4ff79fe342408c10cf Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 13 May 2023 18:56:16 +0200
Subject: [PATCH 032/194] Let F2P buy or get zigs
---
.../src/entities_game_service/player_manager/character.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index fe8c4f8f3e..c9510925d4 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -6356,7 +6356,7 @@ bool CCharacter::checkAnimalCount(const CSheetId &PetTicket, bool sendMessage, s
return false;
}
- CPlayer* p = PlayerManager.getPlayer(PlayerManager.getPlayerId(getId()));
+ /*CPlayer* p = PlayerManager.getPlayer(PlayerManager.getPlayerId(getId()));
BOMB_IF(p == NULL, "Failed to find player record for character: " << getId().toString(), return 0.0);
if (p->isTrialPlayer())
@@ -6365,6 +6365,7 @@ bool CCharacter::checkAnimalCount(const CSheetId &PetTicket, bool sendMessage, s
sendDynamicSystemMessage(_Id, "EGS_CANT_BUY_PACKER_IS_TRIAL_PLAYER");
return false;
}
+ * */
}
else
{
From 133547bb9e918f0873570f6dab44a44e6155303a Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 13 May 2023 18:56:37 +0200
Subject: [PATCH 033/194] Fix classique titles display
---
ryzom/client/data/gamedev/interfaces_v3/info_player.lua | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
index 862124a61b..54b2414080 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
@@ -2170,6 +2170,7 @@ function game:setInfoPlayerCharacterRace()
end
function game:arkTitlesAddClassics()
+ local current_title = getUI("ui:interface:player:header_opened:player_title").uc_hardtext
runAH(nil, "title_init_combobox", "")
local cb = getUI("ui:interface:info_player_skills:content:webinfos:title:player_title")
local ui = getUI("ui:interface:encyclopedia:content:htmlC")
@@ -2181,7 +2182,12 @@ function game:arkTitlesAddClassics()
end
table.sort(titles)
for i,title in ipairs(titles) do
- html = html .. [[
]]
end
@@ -2189,3 +2195,4 @@ function game:arkTitlesAddClassics()
ui:renderHtml(html)
end
+
From 89206bf318baf472aa0489c115e1522033dacbc6 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 13 May 2023 18:58:14 +0200
Subject: [PATCH 034/194] Prevent mounted players to use aqua_speed. Aqua speed
at +33%
---
.../src/entities_game_service/player_manager/character.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 642a1b44da..0965e3882e 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -2779,13 +2779,13 @@ void CCharacter::applyRegenAndClipCurrentValue()
_PhysScores.SpeedVariationModifier += _LastAppliedWeightMalus;
sint16 speedVariationModifier = std::max((sint)_PhysScores.SpeedVariationModifier, (sint) - 100);
CSheetId aqua_speed("aqua_speed.sbrick");
- if (isInWater() && (haveBrick(aqua_speed) || _CurrentSpeedSwimBonus > 0))
+ if (isInWater() && getMode() != MBEHAV::MOUNT_NORMAL && (haveBrick(aqua_speed) || _CurrentSpeedSwimBonus > 0))
{
setBonusMalusName("aqua_speed", addEffectInDB(aqua_speed, true));
if (_CurrentSpeedSwimBonus > 0)
speedVariationModifier = std::min(speedVariationModifier + (sint16)_CurrentSpeedSwimBonus, 100);
else
- speedVariationModifier = std::min(speedVariationModifier + 100, 100);
+ speedVariationModifier = std::min(speedVariationModifier + 33, 100);
}
else
{
From cf903a114406b3c41fba6b0a6af90ba7e4cf9328 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Mon, 15 May 2023 15:34:48 +0200
Subject: [PATCH 035/194] Added ai command setEquipment
---
ryzom/server/src/ai_service/nf_grp_npc.cpp | 50 ++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/ryzom/server/src/ai_service/nf_grp_npc.cpp b/ryzom/server/src/ai_service/nf_grp_npc.cpp
index 7190c063d9..0a67aea43c 100644
--- a/ryzom/server/src/ai_service/nf_grp_npc.cpp
+++ b/ryzom/server/src/ai_service/nf_grp_npc.cpp
@@ -2725,6 +2725,55 @@ void maxHitRange_f_(CStateInstance* entity, CScriptStack& stack)
}
}
+//----------------------------------------------------------------------------
+/** @page code
+
+@subsection setEquipement_s_
+
+Arguments: ->
+
+arg1: is the equipment list (in hex)
+
+@code
+()setEquipement("xxxxx");
+@endcode
+
+*/
+void setEquipment_s_(CStateInstance* entity, CScriptStack& stack)
+{
+ string script = stack.top();
+ stack.pop();
+
+ IManagerParent* const managerParent = entity->getGroup()->getOwner()->getOwner();
+ CAIInstance* const aiInstance = dynamic_cast(managerParent);
+ if (!aiInstance)
+ return;
+
+ std::vector args;
+ std::vector equipements;
+ NLMISC::splitString(script, ";", equipements);
+
+ CGroup* group = entity->getGroup();
+
+ FOREACH(botIt, CCont, group->bots())
+ {
+ CBot* bot = *botIt;
+
+ if (bot->getRyzomType() == RYZOMID::npc)
+ {
+ CBotNpc* botNpc = NLMISC::safe_cast(bot);
+ if (botNpc==NULL)
+ return;
+ botNpc->equipmentInit();
+
+ FOREACHC(it, std::vector, equipements)
+ {
+ botNpc->equipmentAdd(*it);
+ }
+ }
+ }
+}
+
//----------------------------------------------------------------------------
/** @page code
@@ -3370,6 +3419,7 @@ std::map nfGetNpcGroupNativeFunctions()
REGISTER_NATIVE_FUNC(functions, setParent_s_);
REGISTER_NATIVE_FUNC(functions, addHealGroup_s_);
+ REGISTER_NATIVE_FUNC(functions, setEquipment_s_);
REGISTER_NATIVE_FUNC(functions, addUserModel_sss_);
REGISTER_NATIVE_FUNC(functions, addCustomLoot_ss_);
REGISTER_NATIVE_FUNC(functions, setUserModel_s_);
From 6164c7f44cebee431785584f1aa181cdb8ef2e84 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Mon, 15 May 2023 17:21:28 +0200
Subject: [PATCH 036/194] Fix bad merge
---
.../game_item_manager/player_inv_equip.cpp | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp
index a0af7063e3..eb2a02cff7 100644
--- a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp
+++ b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp
@@ -124,7 +124,18 @@ void CEquipInvView::onItemChanged(uint32 slot, INVENTORIES::TItemChangeFlags cha
}
// Update jewels enchants
+ if (getInventory()->getInventoryId() == INVENTORIES::equipment)
+ {
+ getCharacter()->updateJewelsTags(false);
+ getCharacter()->updateJewelsModifiers();
+ }
+
// Update fame
+ if (getInventory()->getInventoryId() == INVENTORIES::handling)
+ {
+ CFameManager::getInstance().enforceFameCaps(getCharacter()->getId(), getCharacter()->getOrganization(), getCharacter()->getAllegiance());
+ }
+
}
// ****************************************************************************
From 909ea344a87a8969cbf25d21932c9ceea0e6fbb7 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Mon, 22 May 2023 16:53:31 +0200
Subject: [PATCH 037/194] Added persistante SavedFames, improvements
---
ryzom/common/src/game_share/pvp_clan.cpp | 2 +-
.../game_item_manager/player_inv_equip.cpp | 7 -
.../game_item_manager/player_inv_hand.cpp | 20 ++-
.../guild_manager/fame_manager.cpp | 143 ++++++++++--------
.../player_manager/persistent_player_data.cpp | 7 +
5 files changed, 99 insertions(+), 80 deletions(-)
diff --git a/ryzom/common/src/game_share/pvp_clan.cpp b/ryzom/common/src/game_share/pvp_clan.cpp
index b25ce99712..0a467027e7 100644
--- a/ryzom/common/src/game_share/pvp_clan.cpp
+++ b/ryzom/common/src/game_share/pvp_clan.cpp
@@ -87,7 +87,7 @@ namespace PVP_CLAN
{
// These names are in order of the enum TPVPClan
// The first two clans, "None" and "Neutral", don't count. Subtract 2 from the lookup.
- std::string FactionNames[] = { "kami","karavan","fyros","matis","tryker","zorai","marauder" };
+ std::string FactionNames[] = { "kami","karavan","fyros","matis","tryker","zorai","black_kami" };
for (int looper = BeginClans; looper <= EndClans; looper += 1)
{
diff --git a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp
index eb2a02cff7..faa870bbef 100644
--- a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp
+++ b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_equip.cpp
@@ -129,13 +129,6 @@ void CEquipInvView::onItemChanged(uint32 slot, INVENTORIES::TItemChangeFlags cha
getCharacter()->updateJewelsTags(false);
getCharacter()->updateJewelsModifiers();
}
-
- // Update fame
- if (getInventory()->getInventoryId() == INVENTORIES::handling)
- {
- CFameManager::getInstance().enforceFameCaps(getCharacter()->getId(), getCharacter()->getOrganization(), getCharacter()->getAllegiance());
- }
-
}
// ****************************************************************************
diff --git a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_hand.cpp b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_hand.cpp
index 40e01d40ef..1502ce9482 100644
--- a/ryzom/server/src/entities_game_service/game_item_manager/player_inv_hand.cpp
+++ b/ryzom/server/src/entities_game_service/game_item_manager/player_inv_hand.cpp
@@ -20,6 +20,7 @@
#include "game_share/slot_equipment.h"
#include "player_manager/character.h"
+#include "guild_manager/fame_manager.h"
#include "egs_sheets/egs_sheets.h"
extern NLMISC::CVariable MaxPlayerBulk;
@@ -68,7 +69,7 @@ void CHandlingInvView::onItemChanged(uint32 slot, INVENTORIES::TItemChangeFlags
{
const CGameItemPtr item = getInventory()->getItem(slot);
nlassert(item != NULL);
-
+
updateClientSlot(slot, item);
const CStaticItem * form = CSheets::getForm( item->getSheetId() );
@@ -78,9 +79,9 @@ void CHandlingInvView::onItemChanged(uint32 slot, INVENTORIES::TItemChangeFlags
return;
}
getCharacter()->addWearMalus(form->WearEquipmentMalus);
-
+
getCharacter()->applyItemModifiers(item);
-
+
// if equip right hand item, compute parry level and disengage if player is engaged in combat
if (slot == INVENTORIES::right )
getCharacter()->updateParry(form->Family, form->Skill);
@@ -90,7 +91,7 @@ void CHandlingInvView::onItemChanged(uint32 slot, INVENTORIES::TItemChangeFlags
{
const CGameItemPtr item = getInventory()->getItem(slot);
nlassert(item != NULL);
-
+
updateClientSlot(slot, item);
}
@@ -99,6 +100,13 @@ void CHandlingInvView::onItemChanged(uint32 slot, INVENTORIES::TItemChangeFlags
// Cleanup the item in player inventory
updateClientSlot(slot, NULL);
}
+
+ // Update fame
+ if (getInventory()->getInventoryId() == INVENTORIES::handling)
+ {
+ CFameManager::getInstance().enforceFameCaps(getCharacter()->getId(), getCharacter()->getOrganization(), getCharacter()->getAllegiance());
+ }
+
}
// ****************************************************************************
@@ -122,11 +130,11 @@ void CHandlingInvView::updateClientSlot(uint32 clientSlot, const CGameItemPtr it
// unequip
getCharacter()->updateVisualInformation( getInventory()->getInventoryId(), uint16(clientSlot), INVENTORIES::UNDEFINED, 0, NLMISC::CSheetId::Unknown, 0 );
}
-
+
// do nothing else if client is not ready
if (!getCharacter()->getEnterFlag())
return;
-
+
if (item != NULL)
// getCharacter()->_PropertyDatabase.setProp( NLMISC::toString("INVENTORY:HAND:%u:INDEX_IN_BAG", clientSlot ).c_str(), item->getInventorySlot() + 1 );
CBankAccessor_PLR::getINVENTORY().getHAND().getArray(clientSlot).setINDEX_IN_BAG(getCharacter()->_PropertyDatabase, checkedCast(item->getInventorySlot()+1));
diff --git a/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp b/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
index 0f319a4b17..91d68bbd16 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
@@ -841,7 +841,6 @@ void CFameManager::addFameIndexed(const CEntityId &entityId, uint32 faction, sin
double fame = fow.Fames[faction];
CCharacter* character = PlayerManager.getChar( entityId );
- bool isMarauder = (character && character->getOrganization() == 5);
if (fame == NO_FAME)
{
@@ -877,11 +876,21 @@ void CFameManager::addFameIndexed(const CEntityId &entityId, uint32 faction, sin
if (realDeltaFame < -3*kFameMultipler)
realDeltaFame = -3*kFameMultipler;
- if (!isMarauder && realDeltaFame < 0)
+ if (realDeltaFame < 0)
realDeltaFame /= 10;
fame += realDeltaFame;
+ if (character && character->getSavedFames())
+ {
+ string factionName = CStaticFames::getInstance().getFactionName(faction);
+ if (factionName == "black_kami")
+ factionName = "marauder";
+ PVP_CLAN::TPVPClan theClan = PVP_CLAN::fromString(factionName);
+ sint32 saveFame = character->restoreFame((uint32)theClan);
+ character->saveFame((uint32)theClan, saveFame+realDeltaFame);
+ }
+
fameMsgParams[2].Int = (uint32)(abs(realDeltaFame));
// set fame tendance info
@@ -1203,7 +1212,7 @@ void CFameManager::setEntityFame(const NLMISC::CEntityId & entityId, uint32 fact
if( setDirectValue )
{
// change the scale( because this value comes from a user command)
- fame = fame*(FameAbsoluteMax/100);
+ fame = fame*kFameMultipler;
}
if (fame == NO_FAME)
@@ -1227,7 +1236,6 @@ void CFameManager::setEntityFame(const NLMISC::CEntityId & entityId, uint32 fact
oldFame = 0;
}
clamp(oldFame, FameAbsoluteMin, FameAbsoluteMax);
-
const sint32 deltaFame = fame - oldFame;
if (deltaFame == 0 && fow.Fames[faction] != NO_FAME )
return;
@@ -1244,6 +1252,16 @@ void CFameManager::setEntityFame(const NLMISC::CEntityId & entityId, uint32 fact
{
nldebug("FAME: set fame for character %s as P:%d", entityId.toString().c_str(), fame);
+
+ if (ch->getSavedFames())
+ {
+ string factionName = CStaticFames::getInstance().getFactionName(faction);
+ if (factionName == "black_kami")
+ factionName = "marauder";
+ PVP_CLAN::TPVPClan theClan = PVP_CLAN::fromString(factionName);
+ ch->saveFame((uint32)theClan, fame);
+ }
+
sint32 maxFame = getMaxFameByFactionIndex(ch->getAllegiance(), ch->getOrganization(), faction);
ch->setFameValuePlayer(faction, fame, maxFame, fow.LastFameChangeTrends[faction]);
@@ -1294,9 +1312,8 @@ sint32 CFameManager::getMaxFameByClan(std::pair allegiance, uint32 organization, uint32 factionIndex)
{
- PVP_CLAN::TPVPClan pvpClan;
+ PVP_CLAN::TPVPClan pvpClan;
// try first with a clan
- pvpClan= PVP_CLAN::getClanFromIndex(factionIndex);
+ pvpClan = PVP_CLAN::getClanFromIndex(factionIndex);
if(pvpClan != PVP_CLAN::Unknown)
return getMaxFameByClan(allegiance, organization, pvpClan);
+
// search for tribe
else
{
@@ -1505,14 +1523,10 @@ void CFameManager::enforceFameCaps(const NLMISC::CEntityId &entityId, uint32 org
bool haveWeapons = false;
if (ch)
{
- if (organization)
+ if (organization && (theCult != PVP_CLAN::Neutral || theCiv != PVP_CLAN::Neutral))
{
- if (theCult != PVP_CLAN::Neutral)
- if (theCult != PVP_CLAN::Neutral || theCiv != PVP_CLAN::Neutral)
- {
- ch->setOrganization(0, false);
- organization = 0;
- }
+ ch->setOrganization(0, false);
+ organization = 0;
}
const CStaticItem *leftForm = NULL;
@@ -1531,81 +1545,76 @@ void CFameManager::enforceFameCaps(const NLMISC::CEntityId &entityId, uint32 org
(rightForm && (rightForm->Family == ITEMFAMILY::MELEE_WEAPON || rightForm->Family == ITEMFAMILY::RANGE_WEAPON));
if (ch->getSavedFames() && haveWeapons)
+
+ if (haveWeapons && ch->getSavedFames())
{
ch->setSavedFames(false);
- for (uint i = PVP_CLAN::BeginClans; i < PVP_CLAN::EndClans; i++)
+ for (uint i = PVP_CLAN::BeginClans; i <= PVP_CLAN::EndClans; i++)
{
theFactionIndex = PVP_CLAN::getFactionIndex((PVP_CLAN::TPVPClan)i);
fow.Fames[theFactionIndex] = ch->restoreFame(i);
}
}
-
- if (!ch->getSavedFames() && !haveWeapons)
- ch->setSavedFames(true);
-
}
// Check cults, first member of allegiance
- if (theCult != PVP_CLAN::None)
+ for (int looper = PVP_CLAN::BeginCults; looper <= PVP_CLAN::EndCults; looper++)
{
- for (int looper = PVP_CLAN::BeginCults; looper <= PVP_CLAN::EndCults; looper++)
+ theFactionIndex = PVP_CLAN::getFactionIndex((PVP_CLAN::TPVPClan)looper);
+ fame = fow.Fames[theFactionIndex];
+ maxFame = getMaxFameByClan(allegiance, organization, (PVP_CLAN::TPVPClan)looper);
+ if( fame != NO_FAME)
{
- theFactionIndex = PVP_CLAN::getFactionIndex((PVP_CLAN::TPVPClan)looper);
- fame = fow.Fames[theFactionIndex];
- maxFame = getMaxFameByClan(allegiance, organization, (PVP_CLAN::TPVPClan)looper);
- if( fame != NO_FAME)
- {
- clamp(fame,FameAbsoluteMin,maxFame);
- fow.Fames[theFactionIndex] = fame;
- }
+ clamp(fame,FameAbsoluteMin,maxFame);
+ fow.Fames[theFactionIndex] = fame;
+ }
- if (ch)
+ if (ch)
+ {
+ // Cap to -40
+ if (!haveWeapons)
{
- // Cap to -40
- if (!haveWeapons)
- {
+ if (!ch->getSavedFames())
ch->saveFame(looper, fame);
- clamp(maxFame, -40*kFameMultipler, maxFame);
- clamp(fame, -40*kFameMultipler, fame);
- fow.Fames[theFactionIndex] = fame;
- }
-
- ch->setFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
+ clamp(maxFame, -40*kFameMultipler, maxFame);
+ clamp(fame, -40*kFameMultipler, fame);
+ fow.Fames[theFactionIndex] = fame;
}
- if (gu)
- gu->setFameValueGuild(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
+
+ ch->setFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
}
+ if (gu)
+ gu->setFameValueGuild(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
}
+
// Check civs, second member of allegiance
- if (theCiv != PVP_CLAN::None)
+ for (int looper = PVP_CLAN::BeginCivs; looper <= PVP_CLAN::EndCivs; looper++)
{
- for (int looper = PVP_CLAN::BeginCivs; looper <= PVP_CLAN::EndCivs; looper++)
+ theFactionIndex = PVP_CLAN::getFactionIndex((PVP_CLAN::TPVPClan)looper);
+ fame = fow.Fames[theFactionIndex];
+ maxFame = getMaxFameByClan(allegiance, organization, (PVP_CLAN::TPVPClan)looper);
+ if( fame != NO_FAME)
{
- theFactionIndex = PVP_CLAN::getFactionIndex((PVP_CLAN::TPVPClan)looper);
- fame = fow.Fames[theFactionIndex];
- maxFame = getMaxFameByClan(allegiance, organization, (PVP_CLAN::TPVPClan)looper);
- if( fame != NO_FAME)
- {
- clamp(fame,FameAbsoluteMin,maxFame);
- fow.Fames[theFactionIndex] = fame;
- }
- if (ch)
+ clamp(fame,FameAbsoluteMin,maxFame);
+ fow.Fames[theFactionIndex] = fame;
+ }
+ if (ch)
+ {
+ // Cap to -40
+ if (!haveWeapons)
{
- // Cap to -40
- if (!haveWeapons)
- {
+ if (!ch->getSavedFames())
ch->saveFame(looper, fame);
- clamp(maxFame, -40*kFameMultipler, maxFame);
- clamp(fame, -40*kFameMultipler, fame);
- fow.Fames[theFactionIndex] = fame;
- }
- ch->setFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
- }
- if (gu)
- {
- gu->setFameValueGuild(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
+ clamp(maxFame, -40*kFameMultipler, maxFame);
+ clamp(fame, -40*kFameMultipler, fame);
+ fow.Fames[theFactionIndex] = fame;
}
+ ch->setFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
+ }
+ if (gu)
+ {
+ gu->setFameValueGuild(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
}
}
@@ -1624,10 +1633,12 @@ void CFameManager::enforceFameCaps(const NLMISC::CEntityId &entityId, uint32 org
// Cap to -40
if (!haveWeapons)
{
- ch->saveFame((uint32)PVP_CLAN::Marauder, fame);
+ if (!ch->getSavedFames())
+ ch->saveFame((uint32)PVP_CLAN::Marauder, fame);
clamp(maxFame, -40*kFameMultipler, maxFame);
clamp(fame, -40*kFameMultipler, fame);
fow.Fames[theFactionIndex] = fame;
+ ch->setSavedFames(true);
}
ch->setFameValuePlayer(theFactionIndex, fame, maxFame, fow.LastFameChangeTrends[theFactionIndex]);
}
diff --git a/ryzom/server/src/entities_game_service/player_manager/persistent_player_data.cpp b/ryzom/server/src/entities_game_service/player_manager/persistent_player_data.cpp
index 4cb1a47161..6418aad94d 100644
--- a/ryzom/server/src/entities_game_service/player_manager/persistent_player_data.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/persistent_player_data.cpp
@@ -434,6 +434,13 @@ static void prepareCharacterPositionForStore ( COfflineEntityState & state, cons
PVP_CLAN::toString((PVP_CLAN::TPVPClan)(i+PVP_CLAN::BeginClans)),\
_FactionPoint[i],\
PVP_CLAN::TPVPClan k=PVP_CLAN::fromString(key); if ((k>=PVP_CLAN::BeginClans) && (k<=PVP_CLAN::EndClans)) _FactionPoint[k-PVP_CLAN::BeginClans]=val)\
+\
+ PROP(bool,_SavedFame)\
+ LPROP_MAP2(SavedFames, string, sint32,\
+ for(uint32 i = 0; i < (PVP_CLAN::EndClans-PVP_CLAN::BeginClans+1); ++i),\
+ PVP_CLAN::toString((PVP_CLAN::TPVPClan)(i+PVP_CLAN::BeginClans)),\
+ _SavedFames[i],\
+ PVP_CLAN::TPVPClan k=PVP_CLAN::fromString(key); if ((k>=PVP_CLAN::BeginClans) && (k<=PVP_CLAN::EndClans)) _SavedFames[k-PVP_CLAN::BeginClans]=val)\
\
PROP(uint32,_LastTpTick)\
PROP(uint32,_LastOverSpeedTick)\
From 11fd0bba4a7712efaa786301f2f36fddcd37132d Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 25 May 2023 13:26:46 +0200
Subject: [PATCH 038/194] Fix
---
ryzom/client/src/player_cl.cpp | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/ryzom/client/src/player_cl.cpp b/ryzom/client/src/player_cl.cpp
index ef11ab6f5b..cbd8928987 100644
--- a/ryzom/client/src/player_cl.cpp
+++ b/ryzom/client/src/player_cl.cpp
@@ -507,15 +507,15 @@ void CPlayerCL::equip(SLOTTYPE::EVisualSlot slot, const std::string &shapeName,
_Instances[s].createLoading(string(), stickPoint);
// Create the instance.
- if (item)
+ if (color != -1)
+ _Instances[s].createLoading(shapeName, stickPoint, color);
+ else
{
- if (color != -1) {
- _Instances[s].createLoading(shapeName, stickPoint, color);
- } else
+ if (item)
_Instances[s].createLoading(shapeName, stickPoint, item->MapVariant);
+ else
+ _Instances[s].createLoading(shapeName, stickPoint);
}
- else
- _Instances[s].createLoading(shapeName, stickPoint);
// If shapeName is empty, only clear the slot
if(shapeName.empty())
@@ -877,10 +877,11 @@ void CPlayerCL::updateVisualPropertyVpa(const NLMISC::TGameCycle &/* gameCycle *
sint instTexture;
fromString(tagInfos[1], instTexture);
equip(slot, tagInfos[0], itemSheet);
- UInstance pInst = _Instances[slot].createLoadingFromCurrent();
+ equip(slot, tagInfos[0], itemSheet, instTexture);
+ /*UInstance pInst = _Instances[slot].createLoadingFromCurrent();
if(!pInst.empty())
pInst.selectTextureSet(instTexture);
- _Instances[slot].TextureSet = instTexture;
+ _Instances[slot].TextureSet = instTexture;*/
}
else
{
@@ -939,9 +940,9 @@ void CPlayerCL::updateVisualPropertyVpa(const NLMISC::TGameCycle &/* gameCycle *
{
sint instTexture;
fromString(tagInfos[1], instTexture);
- equip(slot, tagInfos[0], itemSheet);
- _Instances[slot].selectTextureSet(instTexture);
- _Instances[slot].TextureSet = instTexture;
+ equip(slot, tagInfos[0], itemSheet, instTexture);
+ //_Instances[slot].selectTextureSet(instTexture);
+ //_Instances[slot].TextureSet = instTexture;
}
else
{
From e5aa59825ed6053041a3289277cc513d0e0f07f0 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 25 May 2023 19:36:33 +0200
Subject: [PATCH 039/194] Change Encyclo button name and macros icon
---
.../gamedev/html/help/interf_action_book_de.html | 10 +++++-----
.../gamedev/html/help/interf_action_book_en.html | 14 +++++++-------
.../gamedev/html/help/interf_action_book_fr.html | 12 ++++++------
ryzom/client/data/gamedev/interfaces_v3/phrase.xml | 2 +-
.../client/data/gamedev/interfaces_v3/taskbar.xml | 8 ++++----
5 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/ryzom/client/data/gamedev/html/help/interf_action_book_de.html b/ryzom/client/data/gamedev/html/help/interf_action_book_de.html
index 9790edee04..91a9d4b95b 100644
--- a/ryzom/client/data/gamedev/html/help/interf_action_book_de.html
+++ b/ryzom/client/data/gamedev/html/help/interf_action_book_de.html
@@ -8,9 +8,9 @@
@@ -36,8 +36,8 @@ Aktionen
Du musst eine Fähigkeit auswählen um Dir die Aktionen, die zu dieser Fähigkeit gehören, anzeigen zu lassen.
Die noch nicht erlernten Aktionen sind ausgegraut.
Die Aktionen, die Du noch nicht lernen kannst, da bestimmte Vorraussetzungen noch nicht erfüllt sind (z.B.: Du hast den benötigten Fähigkeitslevel noch nicht erreicht) werden rot angezeigt.
-Die Aktionen sind in zwei Gruppen aufgeteilt:
-Aktionen , and
+Die Aktionen sind in zwei Gruppen aufgeteilt:
+Aktionen , and
Aktions-Verbesserungen .
Du kannst Aktionen von hier aus per Drag'n'Drop in die Aktionsleiste ziehen, bei Aktions-Verbesserungen geht dies nicht, da sie keine eigenständige Aktion verkörpern und somit nicht ausgeführt werden können.
diff --git a/ryzom/client/data/gamedev/html/help/interf_action_book_en.html b/ryzom/client/data/gamedev/html/help/interf_action_book_en.html
index b53599e749..37c298890a 100644
--- a/ryzom/client/data/gamedev/html/help/interf_action_book_en.html
+++ b/ryzom/client/data/gamedev/html/help/interf_action_book_en.html
@@ -8,9 +8,9 @@
@@ -22,22 +22,22 @@ Skill Tree allows you to see the state of your skills.
It displays the current level of the skill and its max level (eg: Craft: 1/20).
- The bar indicates the progression in the current skill level.
+ The bar indicates the progression in the current skill level.
The color of the skill indicates either:
- transparent: skill not trained
- orange: skill currently trained
- green: skill completed
When you complete a skill, a new part of the tree is opened, which you can see by clicking on "+".
- The whole skill tree is not displayed. Only completed skills, currently trained skills,
+ The whole skill tree is not displayed. Only completed skills, currently trained skills,
and the untrained skills that relies directly on a trained skill are displayed.
Actions
The Actions part shows the actions you can learn or the actions you have learnt at each skill level.
You have to select a skill to see the actions related to this skill.
The actions you have not learned are grayed out.
The actions you cannot learn because you do not meet the requirements (e.g. you don't have the required skill level) displayed are in red.
- The actions are separated in two groups:
-Actions , and
+ The actions are separated in two groups:
+Actions , and
Upgrades .
You can drag and drop an Action to your action bar, but you cannot drag an Action Upgrade because they are either characteristic upgrades, or action upgrades
which are not castable directly.
diff --git a/ryzom/client/data/gamedev/html/help/interf_action_book_fr.html b/ryzom/client/data/gamedev/html/help/interf_action_book_fr.html
index 3956342a27..82ca7c4b2f 100644
--- a/ryzom/client/data/gamedev/html/help/interf_action_book_fr.html
+++ b/ryzom/client/data/gamedev/html/help/interf_action_book_fr.html
@@ -8,9 +8,9 @@
@@ -30,15 +30,15 @@ Arbre de Compétences
- vert : compétence terminée
Lorsque vous terminez une compétence, vous avez accès à de nouvelles compétences. Vous pouvez explorer l'arbre de compétences en cliquant sur "+".
-L'arbre de compétences n'est pas affiché dans son ensemble. Il n'y a que les compétences terminées ou en cours d'entraînement d'affichées.
+L'arbre de compétences n'est pas affiché dans son ensemble. Il n'y a que les compétences terminées ou en cours d'entraînement d'affichées.
Les compétences non entraînées en rapport direct avec une compétence entraînée sont également affichées.
Actions
La partie Actions indique les actions que vous pouvez apprendre ou avez appris à chaque niveau de compétence.
Vous devez sélectionner une compétence pour connaître les actions liées à cette compétence.
Les actions que vous ne connaissez pas sont grisées.
Les actions que vous n'avez pas apprises car les prérequis ne sont pas remplis (ex. : vous n'avez pas atteint le niveau de compétence requis) sont en rouge.
-Les actions se distinguent en deux groupes :
-Actions , et
+Les actions se distinguent en deux groupes :
+Actions , et
Actions Suprêmes .
Vous pouvez glisser-déposer une Action dans votre barre actions mais vous ne pouvez pas glisser une Action Suprême car il peut s'agir d'une mise à jour de caractéristiques ou d'actions
qui ne sont pas utilisables en tant que sorts.
diff --git a/ryzom/client/data/gamedev/interfaces_v3/phrase.xml b/ryzom/client/data/gamedev/interfaces_v3/phrase.xml
index 8588668dcc..9cde224ade 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/phrase.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/phrase.xml
@@ -133,7 +133,7 @@
-
+ tooltip="uiMk_Encyclopedia" onclick_l="show_hide" params_l="encyclopedia" tx_normal="tb_actions.tga" tx_pushed="tb_actions.tga"/>
+ tx_normal="tb_actions.tga" tx_pushed="tb_actions.tga"/>
+ tx_normal="tb_actions.tga" tx_pushed="tb_actions.tga"/>
-
Date: Fri, 26 May 2023 18:20:53 +0200
Subject: [PATCH 040/194] Fix crash with fame and new player
---
ryzom/server/src/ai_service/commands.cpp | 2 +-
.../src/entities_game_service/guild_manager/fame_manager.cpp | 3 +++
.../src/entities_game_service/player_manager/character.cpp | 3 +--
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/ryzom/server/src/ai_service/commands.cpp b/ryzom/server/src/ai_service/commands.cpp
index 417dcab43a..10db3a862a 100644
--- a/ryzom/server/src/ai_service/commands.cpp
+++ b/ryzom/server/src/ai_service/commands.cpp
@@ -1680,7 +1680,7 @@ NLMISC_COMMAND(getDatasetId,"get datasetid of bots with name matchiong the given
if (bots.empty())
{
log.displayNL("ERR: No bot correspond to name %s", botName.c_str());
- return false;
+ return true;
}
else
{
diff --git a/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp b/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
index fd7bf33486..0910a836a1 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
@@ -1278,6 +1278,9 @@ sint32 CFameManager::getStartFame(PVP_CLAN::TPVPClan playerClan, PVP_CLAN::TPVPC
return NO_FAME;
}
+ if (targetClan == PVP_CLAN::Marauder)
+ return 0;
+
// Parameters are within values, so return the lookup.
return *FameStart[playerClan-PVP_CLAN::BeginCivs][targetClan-PVP_CLAN::BeginClans];
}
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index c9510925d4..35cea3cb44 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -23570,8 +23570,7 @@ void CCharacter::updateEffectInDB(uint8 index, bool bonus, NLMISC::TGameCycle ac
sint32 CCharacter::getWeightMalus()
{
- sint32 maxWeight
- = BaseMaxCarriedWeight + 1000 * _PhysCharacs._PhysicalCharacteristics[CHARACTERISTICS::strength].Current;
+ sint32 maxWeight = BaseMaxCarriedWeight + 1000 * _PhysCharacs._PhysicalCharacteristics[CHARACTERISTICS::strength].Current;
sint32 weightDiff = (maxWeight - sint32(getCarriedWeight()));
sint32 weightMalus = weightDiff / 1000;
From bda458028eb40f76a063319293300208b1c78754 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Mon, 29 May 2023 16:58:09 +0200
Subject: [PATCH 041/194] Fix fames bug
---
.../guild_manager/fame_manager.cpp | 23 ++++++++++---------
.../player_manager/persistent_player_data.cpp | 6 ++---
2 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp b/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
index 1a4f78e269..d271d14675 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/fame_manager.cpp
@@ -881,14 +881,18 @@ void CFameManager::addFameIndexed(const CEntityId &entityId, uint32 faction, sin
fame += realDeltaFame;
- if (character && character->getSavedFames())
+ if (character)
{
string factionName = CStaticFames::getInstance().getFactionName(faction);
if (factionName == "black_kami")
factionName = "marauder";
PVP_CLAN::TPVPClan theClan = PVP_CLAN::fromString(factionName);
- sint32 saveFame = character->restoreFame((uint32)theClan);
- character->saveFame((uint32)theClan, saveFame+realDeltaFame);
+ sint32 saveFame;
+ if (character->getSavedFames())
+ saveFame = character->restoreFame((uint32)theClan)+realDeltaFame;
+ else
+ saveFame = fame;
+ character->saveFame((uint32)theClan, saveFame);
}
fameMsgParams[2].Int = (uint32)(abs(realDeltaFame));
@@ -1253,14 +1257,11 @@ void CFameManager::setEntityFame(const NLMISC::CEntityId & entityId, uint32 fact
nldebug("FAME: set fame for character %s as P:%d", entityId.toString().c_str(), fame);
- if (ch->getSavedFames())
- {
- string factionName = CStaticFames::getInstance().getFactionName(faction);
- if (factionName == "black_kami")
- factionName = "marauder";
- PVP_CLAN::TPVPClan theClan = PVP_CLAN::fromString(factionName);
- ch->saveFame((uint32)theClan, fame);
- }
+ string factionName = CStaticFames::getInstance().getFactionName(faction);
+ if (factionName == "black_kami")
+ factionName = "marauder";
+ PVP_CLAN::TPVPClan theClan = PVP_CLAN::fromString(factionName);
+ ch->saveFame((uint32)theClan, fame);
sint32 maxFame = getMaxFameByFactionIndex(ch->getAllegiance(), ch->getOrganization(), faction);
ch->setFameValuePlayer(faction, fame, maxFame, fow.LastFameChangeTrends[faction]);
diff --git a/ryzom/server/src/entities_game_service/player_manager/persistent_player_data.cpp b/ryzom/server/src/entities_game_service/player_manager/persistent_player_data.cpp
index 6418aad94d..74db9875ff 100644
--- a/ryzom/server/src/entities_game_service/player_manager/persistent_player_data.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/persistent_player_data.cpp
@@ -437,10 +437,10 @@ static void prepareCharacterPositionForStore ( COfflineEntityState & state, cons
\
PROP(bool,_SavedFame)\
LPROP_MAP2(SavedFames, string, sint32,\
- for(uint32 i = 0; i < (PVP_CLAN::EndClans-PVP_CLAN::BeginClans+1); ++i),\
- PVP_CLAN::toString((PVP_CLAN::TPVPClan)(i+PVP_CLAN::BeginClans)),\
+ for(uint32 i = PVP_CLAN::BeginClans; i <= PVP_CLAN::EndClans; ++i),\
+ PVP_CLAN::toString((PVP_CLAN::TPVPClan)i),\
_SavedFames[i],\
- PVP_CLAN::TPVPClan k=PVP_CLAN::fromString(key); if ((k>=PVP_CLAN::BeginClans) && (k<=PVP_CLAN::EndClans)) _SavedFames[k-PVP_CLAN::BeginClans]=val)\
+ PVP_CLAN::TPVPClan k=PVP_CLAN::fromString(key); if ((k>=PVP_CLAN::BeginClans) && (k<=PVP_CLAN::EndClans)) _SavedFames[k]=val)\
\
PROP(uint32,_LastTpTick)\
PROP(uint32,_LastOverSpeedTick)\
From bfdab44b1b4e4ec25b40659e44fd21a5edc670e5 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Tue, 30 May 2023 15:21:34 +0200
Subject: [PATCH 042/194] Fix timers
---
.../src/entities_game_service/player_manager/character.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 6d5eecf57d..aab3eb6696 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -2793,7 +2793,10 @@ void CCharacter::applyRegenAndClipCurrentValue()
{
sint8 bonus = getBonusMalusName("aqua_speed");
if (bonus > -1)
+ {
+ setBonusMalusName("aqua_speed", -1);
removeEffectInDB(bonus, true);
+ }
}
// Speed
From 014abf6f9e3e00addc27340da1193ea2586b7bd3 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Tue, 6 Jun 2023 16:32:04 +0200
Subject: [PATCH 043/194] Fix game:addSpawnShapesByZone
---
ryzom/client/data/gamedev/interfaces_v3/map.lua | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/map.lua b/ryzom/client/data/gamedev/interfaces_v3/map.lua
index 5e18772209..83dbd304a6 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/map.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/map.lua
@@ -196,7 +196,7 @@ function game:openFullMap()
end
end
-function game:addSpawnShapesByZone(zone, continent, name, displayIcon, setup, finish, openShape)
+function game:addSpawnShapesByZone(zone, continent, name, displayIcon, setup, finish, openShape, text, icon)
local id1 = -1
local id2 = -1
@@ -217,8 +217,18 @@ function game:addSpawnShapesByZone(zone, continent, name, displayIcon, setup, fi
game.spawnShapesByZone[continent][name] = setup
game.spawnShapesByZone[continent][name][8] = Json.decode(setup[8])
+ if not text then
+ text = i18n.get("uiWisdomChest"):toUtf8()
+ end
+
+ if not icon then
+ icon = "ico_box"
+ end
+
if displayIcon == 1 then
- game:addMapArkPoint(zone, setup[2], setup[3], setup[1], i18n.get("uiWisdomChest"):toUtf8(), "ico_box.tga")
+ game:addMapArkPoint(zone, setup[2], setup[3], setup[1], text, icon..".tga")
+ else
+ game:delMapArkPoint(zone, setup[1])
end
end
@@ -245,6 +255,8 @@ end
game.mapRegionSections["Silan"] = {}
game.mapRegionSections["Silan"]["newbieland_city.tga"] = true
+game.mapRegionSections["Zorai"] = {}
+game.mapRegionSections["Zorai"]["zorai_map.tga"] = true
game:addMapArkPoint("Vip/Silan", 10276, -11791, "vip_silan_tryker", "", "dynicon_vip.tga", "https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=9894&vip=nb_tryker_leader&title=fct_chief_explorer&gender=1", 150)
game:addMapArkPoint("Vip/Silan", 10341, -11822, "vip_silan_matis", "", "dynicon_vip.tga", "https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=9894&vip=nb_matis_leader&title=fct_matis_master_artisan&gender=1", 150)
From a8e400221d6617f3fa051121b9826879238484d8 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Tue, 6 Jun 2023 16:40:47 +0200
Subject: [PATCH 044/194] Update lua versions
---
ryzom/client/data/gamedev/interfaces_v3/appzone.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/ark.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/base64.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua | 4 +++-
ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/compass.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/game_config.lua | 5 ++++-
ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/guild.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/help.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/info_player.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/interaction.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/inventory.lua | 4 +++-
ryzom/client/data/gamedev/interfaces_v3/json.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/map.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/misc.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/names_matis.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua | 4 +++-
ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/outpost.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/player.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/player_trade.lua | 3 +++
.../client/data/gamedev/interfaces_v3/ring_access_point.lua | 3 +++
.../data/gamedev/interfaces_v3/ring_access_point_filter.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/ring_window.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/taskbar.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/web_queue.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua | 3 +++
ryzom/client/data/gamedev/interfaces_v3/webig.lua | 3 +++
36 files changed, 109 insertions(+), 4 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/appzone.lua b/ryzom/client/data/gamedev/interfaces_v3/appzone.lua
index af9f584cd8..878ea0a7b3 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/appzone.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/appzone.lua
@@ -190,3 +190,6 @@ function AppZone:handle(cmd)
self:launchApp(cmd)
end
end
+
+-- VERSION --
+RYZOM_APPZONE_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark.lua b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
index 30040e00a6..ac32ba43eb 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
@@ -621,3 +621,6 @@ function S2E1:newQuake(timer)
end
+
+-- VERSION --
+RYZOM_ARK_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua b/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
index 0a1bf8b2e7..59a0541822 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
@@ -419,3 +419,6 @@ function webig:openWin(ui_name)
end
end
+
+-- VERSION --
+RYZOM_ARK_LESSONS_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/base64.lua b/ryzom/client/data/gamedev/interfaces_v3/base64.lua
index 203d0aa52d..60aab44bed 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/base64.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/base64.lua
@@ -200,3 +200,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
--]]
+
+-- VERSION --
+RYZOM_BASE64_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua b/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua
index 161012d9e5..2264e48246 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua
@@ -178,4 +178,6 @@ function bgdownloader:inGamePatchUncompleteWarning()
pg:blink(2)
messageBoxWithHelp(i18n.get("uiBGD_InGamePatchIncomplete"), "ui:interface", tonumber(getDefine("case_normal")))
displaySystemInfo(i18n.get("uiBGD_InGamePatchIncompleteBC"), "BC")
-end
\ No newline at end of file
+end
+-- VERSION --
+RYZOM_BG_DOWNLOADER_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua b/ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua
index f0b3ec9130..ab145ecff8 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua
@@ -62,3 +62,6 @@ function game:bcMissionsUpdate()
ui = getUI('ui:interface:bot_chat_accept_mission')
ui.title = title;
end
+
+-- VERSION --
+RYZOM_BOT_CHAT_V4_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/compass.lua b/ryzom/client/data/gamedev/interfaces_v3/compass.lua
index 414c9c137f..df4727b1c9 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/compass.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/compass.lua
@@ -48,3 +48,6 @@ function game:displayCalendar()
end
setOnDraw(getUI("ui:interface:compass"), "game:updateCompass()")
+
+-- VERSION --
+RYZOM_COMPASS_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/game_config.lua b/ryzom/client/data/gamedev/interfaces_v3/game_config.lua
index dc39f93a16..c33e62fd6b 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/game_config.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/game_config.lua
@@ -129,7 +129,7 @@ function game:configShowOne(strUIToShow)
-- special case : if the display tab was shown, update the aspect ratio if needed
local generalGrp = getUI('ui:interface:game_config:content:general');
local uiGrp = getUI('ui:interface:game_config:content:' .. strUIToShow);
- -- Removed the following code to solve RT n°14720
+ -- Removed the following code to solve RT n°14720
-- The 'game_config_change_screen_ratio_custom' action handler
-- should only be called if the user changed the apect ratio himself
-- (else the edit box containing the aspect ratio may not have been initiliazed here)
@@ -198,3 +198,6 @@ function game:configInit()
winActive("wc_r2_scenario_control", true)
winActive("wc_r2_player_tracking", r2WinOn)
end
+
+-- VERSION --
+RYZOM_GAME_CONFIG_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua b/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua
index 33a3810d31..2ad99629ec 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua
@@ -636,3 +636,6 @@ function GameR2Loading:buildNewbielandScenarioTree()
tree:forceRebuild()
end
+
+-- VERSION --
+RYZOM_GAME_R2_LOADING_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/guild.lua b/ryzom/client/data/gamedev/interfaces_v3/guild.lua
index 4c3bc0646c..2d33203486 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/guild.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/guild.lua
@@ -96,3 +96,6 @@ function game:guildDeactive()
setDbProp('UI:VARIABLES:ISACTIVE:GUILD', 0);
end
+
+-- VERSION --
+RYZOM_GUILD_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/help.lua b/ryzom/client/data/gamedev/interfaces_v3/help.lua
index a175e2f03c..9d3d437531 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/help.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/help.lua
@@ -140,3 +140,6 @@ function help:continueLesson(id, url)
end
+
+-- VERSION --
+RYZOM_HELP_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
index 54b2414080..3073321a45 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
@@ -2196,3 +2196,6 @@ function game:arkTitlesAddClassics()
end
+
+-- VERSION --
+RYZOM_INFO_PLAYER_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
index 663d352a1b..2c351f90b2 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
@@ -1288,3 +1288,6 @@ function arkNpcShop:Buy(id)
end
arkNpcShop:Close()
end
+
+-- VERSION --
+RYZOM_INTERACTION_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/inventory.lua b/ryzom/client/data/gamedev/interfaces_v3/inventory.lua
index eb2892b0a6..b2f3b82c39 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/inventory.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/inventory.lua
@@ -74,4 +74,6 @@ function game:updateEquipOnResize(base, force)
handl.active = false
end
end
-end
\ No newline at end of file
+end
+-- VERSION --
+RYZOM_INVENTORY_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/json.lua b/ryzom/client/data/gamedev/interfaces_v3/json.lua
index 70d8c4413b..5de24111cc 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/json.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/json.lua
@@ -374,3 +374,6 @@ function Json.decode(str)
end
return ( parse(str, next_char(str, 1, space_chars, true)) )
end
+
+-- VERSION --
+RYZOM_JSON_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/map.lua b/ryzom/client/data/gamedev/interfaces_v3/map.lua
index 83dbd304a6..54f4a27855 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/map.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/map.lua
@@ -269,3 +269,6 @@ game:addMapArkPoint("Vip", 4154, -3305, "vip_allegory", "", "allegory_16.tga", "
-- register map overrride
-- game:setAltMap("fyros_map.tga", "fyros_map_sp.tga")
+
+-- VERSION --
+RYZOM_MAP_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/misc.lua b/ryzom/client/data/gamedev/interfaces_v3/misc.lua
index 6127a3a0ac..ac920e5912 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/misc.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/misc.lua
@@ -134,3 +134,6 @@ function misc:initInvObserver(
end
return setmetatable(misc, self.invObserver)
end
+
+-- VERSION --
+RYZOM_MISC_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua b/ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua
index d208e62de4..d6e0cbf2cf 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua
@@ -293,3 +293,6 @@ fyrosLastNames = {"Abyan", "Abybus", "Abycaon", "Abycus", "Abydix", "Abydon", "A
, "Aeton", "Aexius", "Apoan", "Apobus", "Apocaon", "Apocus", "Apodix", "Apodon", "Apodos", "Apoion", "Apokos", "Apola", "Apolaus", "Apolion"
, "Apollo", "Apolus", "Apomus", "Apon", "Aponix", "Apops", "Aporius", "Aporon", "Aporos", "Aporus", "Aposeus", "Aposse", "Apotheus", "Apothus", "Apotis", "Apoton", "Apoxius", "Boean", "Boebus", "Boecaon", "Boecus", "Boedix", "Boedon", "Boedos", "Boeion", "Boekos", "Boela", "Boelaus", "Boelion", "Boello", "Boelus", "Boemus", "Boen", "Boenix", "Boeps", "Boerius", "Boeron", "Boeros", "Boerus", "Boeseus", "Boesse", "Boetheus", "Boethus", "Boetis", "Boeton", "Boexius", "Cean", "Cebus", "Cecaon", "Cecus", "Cedix", "Cedon", "Cedos", "Ceion", "Cekos", "Cela", "Celaus", "Celion", "Cello", "Celus", "Cemus", "Cen", "Cenix", "Ceps", "Cerius", "Ceron", "Ceros", "Cerus", "Ceseus", "Cesse", "Cetheus", "Cethus", "Cetis", "Ceton", "Cexius", "Dean", "Debus", "Decaon", "Decus", "Dedix", "Dedon", "Dedos", "Deion", "Dekos", "Dela", "Delaus", "Delion", "Dello", "Delus", "Demus", "Den", "Denix", "Deps", "Derius", "Deron", "Deros", "Derus", "Deseus", "Desse", "Detheus"
, "Dethus", "Detis", "Deton", "Deuan", "Deubus", "Deucaon", "Deucus", "Deudix", "Deudon", "Deudos", "Deuion", "Deukos", "Deula", "Deulaus", "Deulion", "Deullo", "Deulus", "Deumus", "Deun", "Deunix", "Deups", "Deurius", "Deuron", "Deuros", "Deurus", "Deuseus", "Deusse", "Deutheus", "Deuthus", "Deutis", "Deuton", "Deuxius", "Dexius", "Dioan", "Diobus", "Diocaon", "Diocus", "Diodix", "Diodon", "Diodos", "Dioion", "Diokos", "Diola", "Diolaus", "Diolion", "Diollo", "Diolus", "Diomus", "Dion", "Dionix", "Diops", "Diorius", "Dioron", "Dioros", "Diorus", "Dioseus", "Diosse", "Diotheus", "Diothus", "Diotis", "Dioton", "Dioxius", "Dyan", "Dybus", "Dycaon", "Dycus", "Dydix", "Dydon", "Dydos", "Dyion", "Dykos", "Dyla", "Dylaus", "Dylion", "Dyllo", "Dylus", "Dymus", "Dyn", "Dynix", "Dyps", "Dyrius", "Dyron", "Dyros", "Dyrus", "Dyseus", "Dysse", "Dytheus", "Dythus", "Dytis", "Dyton", "Dyxius", "Euan", "Eubus", "Eucaon", "Eucus", "Eudix", "Eudon", "Eudos", "Euion", "Eukos", "Eula", "Eulaus", "Eulion", "Eullo", "Eulus", "Eumus", "Eun", "Eunix", "Eups", "Eurius", "Euron", "Euros", "Eurus", "Euseus", "Eusse", "Eutheus", "Euthus", "Eutis", "Euton", "Euxius", "Gaan", "Gabus", "Gacaon", "Gacus", "Gadix", "Gadon", "Gados", "Gaion", "Gakos", "Gala", "Galaus", "Galion", "Gallo", "Galus", "Gamus", "Gan", "Ganix", "Gaps", "Garius", "Garon", "Garos", "Garus", "Gaseus", "Gasse", "Gatheus", "Gathus", "Gatis", "Gaton", "Gaxius", "Ibian", "Ibibus", "Ibicaon", "Ibicus", "Ibidix", "Ibidon", "Ibidos", "Ibiion", "Ibikos", "Ibila", "Ibilaus", "Ibilion", "Ibillo", "Ibilus", "Ibimus", "Ibin", "Ibinix", "Ibips", "Ibirius", "Ibiron", "Ibiros", "Ibirus", "Ibiseus", "Ibisse", "Ibitheus", "Ibithus", "Ibitis", "Ibiton", "Ibixius", "Icaan", "Icabus", "Icacaon", "Icacus", "Icadix", "Icadon", "Icados", "Icaion", "Icakos", "Icala", "Icalaus", "Icalion", "Icallo", "Icalus", "Icamus", "Ican", "Icanix", "Icaps", "Icarius", "Icaron", "Icaros", "Icarus", "Icaseus", "Icasse", "Icatheus", "Icathus", "Icatis", "Icaton", "Icaxius", "Ioan", "Iobus", "Iocaon", "Iocus", "Iodix", "Iodon", "Iodos", "Ioion", "Iokos", "Iola", "Iolaus", "Iolion", "Iollo", "Iolus", "Iomus", "Ion", "Ionix", "Iops", "Iorius", "Ioron", "Ioros", "Iorus", "Ioseus", "Iosse", "Iotheus", "Iothus", "Iotis", "Ioton", "Ioxius", "Krian", "Kribus", "Kricaon", "Kricus", "Kridix", "Kridon", "Kridos", "Kriion", "Krikos", "Krila", "Krilaus", "Krilion", "Krillo", "Krilus", "Krimus", "Krin", "Krinix", "Krips", "Kririus", "Kriron", "Kriros", "Krirus", "Kriseus", "Krisse", "Kritheus", "Krithus", "Kritis", "Kriton", "Krixius", "Kyan", "Kybus", "Kycaon", "Kycus", "Kydix", "Kydon", "Kydos", "Kyion", "Kykos", "Kyla", "Kylaus", "Kylion", "Kyllo", "Kylus", "Kymus", "Kyn", "Kynix", "Kyps", "Kyrius", "Kyron", "Kyros", "Kyrus", "Kyseus", "Kysse", "Kytheus", "Kythus", "Kytis", "Kyton", "Kyxius", "Lyan", "Lybus", "Lycaon", "Lycus", "Lydix", "Lydon", "Lydos", "Lyion", "Lykos", "Lyla", "Lylaus", "Lylion", "Lyllo", "Lylus", "Lymus", "Lyn", "Lynix", "Lyps", "Lyrius", "Lyron", "Lyros", "Lyrus", "Lyseus", "Lysse", "Lytheus", "Lythus", "Lytis", "Lyton", "Lyxius", "Mean", "Mebus", "Mecaon", "Mecus", "Medix", "Medon", "Medos", "Meion", "Mekos", "Mela", "Melaus", "Melion", "Mello", "Melus", "Memus", "Men", "Menix", "Meps", "Merius", "Meron", "Meros", "Merus", "Meseus", "Messe", "Metheus", "Methus", "Metis", "Meton", "Mexius", "Mian", "Mibus", "Micaon", "Micus", "Midix", "Midon", "Midos", "Miion", "Mikos", "Mila", "Milaus", "Milion", "Millo", "Milus", "Mimus", "Min", "Minix", "Mips", "Mirius", "Miron", "Miros", "Mirus", "Miseus", "Misse", "Mitheus", "Mithus", "Mitis", "Miton", "Mixius", "Pean", "Pebus", "Pecaon", "Pecus", "Pedix", "Pedon", "Pedos", "Peion", "Pekos", "Pela", "Pelaus", "Pelion", "Pello", "Pelus", "Pemus", "Pen", "Penix", "Peps", "Perius", "Peron", "Peros", "Perus", "Peseus", "Pesse", "Petheus", "Pethus", "Petis", "Peton", "Pexius", "Pian", "Pibus", "Picaon", "Picus", "Pidix", "Pidon", "Pidos", "Piion", "Pikos", "Pila", "Pilaus", "Pilion", "Pillo", "Pilus", "Pimus", "Pin", "Pinix", "Pips", "Pirius", "Piron", "Piros", "Pirus", "Piseus", "Pisse", "Pitheus", "Pithus", "Pitis", "Piton", "Pixius", "Plean", "Plebus", "Plecaon", "Plecus", "Pledix", "Pledon", "Pledos", "Pleion", "Plekos", "Plela", "Plelaus", "Plelion", "Plello", "Plelus", "Plemus", "Plen", "Plenix", "Pleps", "Plerius", "Pleron", "Pleros", "Plerus", "Pleseus", "Plesse", "Pletheus", "Plethus", "Pletis", "Pleton", "Plexius", "Pyan", "Pybus", "Pycaon", "Pycus", "Pydix", "Pydon", "Pydos", "Pyion", "Pykos", "Pyla", "Pylaus", "Pylion", "Pyllo", "Pylus", "Pymus", "Pyn", "Pynix", "Pyps", "Pyrius", "Pyron", "Pyros", "Pyrus", "Pyseus", "Pysse", "Pytheus", "Pythus", "Pytis", "Pyton", "Pyxius", "Thean", "Thebus", "Thecaon", "Thecus", "Thedix", "Thedon", "Thedos", "Theion", "Thekos", "Thela", "Thelaus", "Thelion", "Thello", "Thelus", "Themus", "Then", "Thenix", "Theps", "Therius", "Theron", "Theros", "Therus", "Theseus", "Thesse", "Thetheus", "Thethus", "Thetis", "Theton", "Thexius", "Tian", "Tibus", "Ticaon", "Ticus", "Tidix", "Tidon", "Tidos", "Tiion", "Tikos", "Tila", "Tilaus", "Tilion", "Tillo", "Tilus", "Timus", "Tin", "Tinix", "Tips", "Tirius", "Tiron", "Tiros", "Tirus", "Tiseus", "Tisse", "Titheus", "Tithus", "Titis", "Titon", "Tixius", "Ulyan", "Ulybus", "Ulycaon", "Ulycus", "Ulydix", "Ulydon", "Ulydos", "Ulyion", "Ulykos", "Ulyla", "Ulylaus", "Ulylion", "Ulyllo", "Ulylus", "Ulymus", "Ulyn", "Ulynix", "Ulyps", "Ulyrius", "Ulyron", "Ulyros", "Ulyrus", "Ulyseus", "Ulysse", "Ulytheus", "Ulythus", "Ulytis", "Ulyton", "Ulyxius", "Xaan", "Xabus", "Xacaon", "Xacus", "Xadix", "Xadon", "Xados", "Xaion", "Xakos", "Xala", "Xalaus", "Xalion", "Xallo", "Xalus", "Xamus", "Xan", "Xanix", "Xaps", "Xarius", "Xaron", "Xaros", "Xarus", "Xaseus", "Xasse", "Xatheus", "Xathus", "Xatis", "Xaton", "Xaxius", "Xyan", "Xybus", "Xycaon", "Xycus", "Xydix", "Xydon", "Xydos", "Xyion", "Xykos", "Xyla", "Xylaus", "Xylion", "Xyllo", "Xylus", "Xymus", "Xyn", "Xynix", "Xyps", "Xyrius", "Xyron", "Xyros", "Xyrus", "Xyseus", "Xysse", "Xytheus", "Xythus", "Xytis", "Xyton", "Xyxius", "Zean", "Zebus", "Zecaon", "Zecus", "Zedix", "Zedon", "Zedos", "Zeion", "Zekos", "Zela", "Zelaus", "Zelion", "Zello", "Zelus", "Zemus", "Zen", "Zenix", "Zeps", "Zerius", "Zeron", "Zeros", "Zerus", "Zeseus", "Zesse", "Zetheus", "Zethus", "Zetis", "Zeton", "Zexius"}
+
+-- VERSION --
+RYZOM_NAMES_FYROS_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/names_matis.lua b/ryzom/client/data/gamedev/interfaces_v3/names_matis.lua
index 28d9584f7e..f0c1954e79 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/names_matis.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/names_matis.lua
@@ -1,3 +1,6 @@
matisLastNames = {"Anibi", "Anicco", "Anichini", "Anichio", "Anidera", "Anidi", "Anido", "Anigno", "Anildo", "Anilli", "Anillo", "Anilo", "Anindi", "Anini", "Aninia", "Aninio", "Anino", "Aninti", "Anipi", "Anirello", "Aniri", "Anirini", "Anirinia", "Anisi", "Anisti", "Anivaldo", "Anizzo", "Antobi", "Antocco", "Antochini", "Antochio", "Antodera", "Antodi", "Antodo", "Antogno", "Antoldo", "Antolli", "Antollo", "Antolo", "Antondi", "Antoni", "Antonia", "Antonio", "Antono", "Antonti", "Antopi", "Antorello", "Antori", "Antorini", "Antorinia", "Antosi", "Antosti", "Antovaldo", "Antozzo", "Bebi", "Becco", "Bechini", "Bechio", "Bedera", "Bedi", "Bedo", "Begno", "Beldo", "Belli", "Bello", "Belo", "Bendi", "Beni", "Benia", "Benio", "Beno", "Benti", "Bepi", "Berello", "Beri", "Berini", "Berinia", "Besi", "Besti", "Bevaldo", "Bezzo", "Chiabi", "Chiacco", "Chiachini", "Chiachio", "Chiadera", "Chiadi", "Chiado", "Chiagno", "Chialdo", "Chialli", "Chiallo", "Chialo", "Chiandi", "Chiani", "Chiania", "Chianio", "Chiano", "Chianti", "Chiapi", "Chiarello", "Chiari", "Chiarini", "Chiarinia", "Chiasi", "Chiasti", "Chiavaldo", "Chiazzo", "Cibi", "Cicco", "Cichini", "Cichio", "Cidera", "Cidi", "Cido", "Cigno", "Cildo", "Cilli", "Cillo", "Cilo", "Cindi", "Cini", "Cinia", "Cinio", "Cino", "Cinti", "Ciobi", "Ciocco", "Ciochini", "Ciochio", "Ciodera", "Ciodi", "Ciodo", "Ciogno", "Cioldo", "Ciolli", "Ciollo", "Ciolo", "Ciondi", "Cioni", "Cionia", "Cionio", "Ciono", "Cionti", "Ciopi", "Ciorello", "Ciori", "Ciorini", "Ciorinia", "Ciosi", "Ciosti", "Ciovaldo", "Ciozzo", "Cipi", "Cirello", "Ciri", "Cirini", "Cirinia", "Cisi", "Cisti", "Civaldo", "Cizzo", "Cuibi", "Cuicco", "Cuichini", "Cuichio", "Cuidera", "Cuidi", "Cuido", "Cuigno", "Cuildo", "Cuilli", "Cuillo", "Cuilo", "Cuindi", "Cuini", "Cuinia", "Cuinio", "Cuino", "Cuinti", "Cuipi", "Cuirello", "Cuiri", "Cuirini", "Cuirinia", "Cuisi", "Cuisti", "Cuivaldo", "Cuizzo", "Frebi", "Frecco", "Frechini", "Frechio", "Fredera", "Fredi", "Fredo", "Fregno", "Freldo", "Frelli", "Frello", "Frelo", "Frendi", "Freni", "Frenia", "Frenio", "Freno", "Frenti", "Frepi", "Frerello", "Freri", "Frerini", "Frerinia", "Fresi", "Fresti", "Frevaldo", "Frezzo", "Gibi", "Gicco", "Gichini", "Gichio", "Gidera", "Gidi", "Gido", "Gigno", "Gildo", "Gilli", "Gillo", "Gilo", "Gindi", "Gini", "Ginia", "Ginio", "Gino", "Ginti", "Gipi", "Girello", "Giri", "Girini", "Girinia", "Gisi", "Gisti", "Givaldo", "Gizzo", "Libi", "Licco", "Lichini", "Lichio", "Lidera", "Lidi", "Lido", "Ligno", "Lildo", "Lilli", "Lillo", "Lilo", "Lindi", "Lini", "Linia", "Linio", "Lino", "Linti", "Lipi", "Lirello", "Liri", "Lirini", "Lirinia", "Lisi", "Listi", "Livaldo", "Lizzo", "Miabi", "Miacco", "Miachini", "Miachio", "Miadera", "Miadi", "Miado", "Miagno", "Mialdo", "Mialli", "Miallo", "Mialo", "Miandi", "Miani", "Miania", "Mianio", "Miano", "Mianti", "Miapi", "Miarello", "Miari", "Miarini", "Miarinia", "Miasi", "Miasti", "Miavaldo", "Miazzo", "Nibi", "Nicco", "Nichini", "Nichio", "Nidera", "Nidi", "Nido", "Nigno", "Nildo", "Nilli", "Nillo", "Nilo", "Nindi", "Nini", "Ninia", "Ninio", "Nino", "Ninti", "Nipi", "Nirello", "Niri", "Nirini", "Nirinia", "Nisi", "Nisti", "Nivaldo", "Nizzo", "Pebi", "Pecco", "Pechini", "Pechio", "Pedera", "Pedi", "Pedo", "Pegno", "Peldo", "Pelli", "Pello", "Pelo", "Pendi", "Peni", "Penia", "Penio", "Peno", "Penti", "Pepi", "Perello", "Peri", "Perini", "Perinia", "Pesi", "Pesti", "Pevaldo", "Pezzo", "Pibi", "Picco", "Pichini", "Pichio", "Pidera", "Pidi", "Pido", "Pigno", "Pildo", "Pilli", "Pillo", "Pilo", "Pindi", "Pini", "Pinia", "Pinio", "Pino", "Pinti", "Pipi", "Pirello", "Piri", "Pirini", "Pirinia", "Pisi", "Pisti", "Pivaldo", "Pizzo", "Robi", "Rocco", "Rochini", "Rochio", "Rodera", "Rodi", "Rodo", "Rogno", "Roldo", "Rolli", "Rollo", "Rolo", "Rondi", "Roni", "Ronia", "Ronio", "Rono", "Ronti", "Ropi", "Rorello", "Rori", "Rorini", "Rorinia", "Rosi", "Rosibi", "Rosicco", "Rosichini", "Rosichio", "Rosidera", "Rosidi", "Rosido", "Rosigno", "Rosildo", "Rosilli", "Rosillo", "Rosilo", "Rosindi", "Rosini", "Rosinia", "Rosinio", "Rosino", "Rosinti", "Rosipi", "Rosirello", "Rosiri", "Rosirini", "Rosirinia", "Rosisi", "Rosisti", "Rosivaldo", "Rosizzo", "Rosti", "Rovaldo", "Rozzo", "Sibi", "Sicco", "Sichini", "Sichio", "Sidera", "Sidi", "Sido", "Signo", "Sildo", "Silli", "Sillo", "Silo", "Sindi", "Sini", "Sinia", "Sinio", "Sino", "Sinti", "Sipi", "Sirello", "Siri", "Sirini", "Sirinia", "Sisi", "Sisti", "Sivaldo", "Sizzo", "Stabi", "Stacco", "Stachini", "Stachio", "Stadera", "Stadi", "Stado", "Stagno", "Staldo", "Stalli", "Stallo", "Stalo", "Standi", "Stani", "Stania", "Stanio", "Stano", "Stanti", "Stapi", "Starello", "Stari", "Starini", "Starinia", "Stasi", "Stasti", "Stavaldo", "Stazzo", "Tinabi", "Tinacco", "Tinachini", "Tinachio", "Tinadera", "Tinadi", "Tinado", "Tinagno", "Tinaldo", "Tinalli", "Tinallo", "Tinalo", "Tinandi", "Tinani", "Tinania", "Tinanio", "Tinano", "Tinanti", "Tinapi", "Tinarello", "Tinari", "Tinarini", "Tinarinia", "Tinasi", "Tinasti", "Tinavaldo", "Tinazzo", "Tribi", "Tricco", "Trichini", "Trichio", "Tridera", "Tridi", "Trido", "Trigno", "Trildo", "Trilli", "Trillo", "Trilo", "Trindi", "Trini", "Trinia", "Trinio", "Trino", "Trinti", "Tripi", "Trirello", "Triri", "Tririni", "Tririnia", "Trisi", "Tristi", "Trivaldo", "Trizzo", "Vabi", "Vacco", "Vachini", "Vachio", "Vadera", "Vadi", "Vado", "Vagno", "Valdo", "Valli", "Vallo", "Valo", "Vandi", "Vani", "Vania", "Vanio", "Vano", "Vanti", "Vapi", "Varello", "Vari", "Varini", "Varinia", "Vasi", "Vasti", "Vavaldo", "Vazzo", "Vibi", "Vicco", "Vichini", "Vichio", "Videra", "Vidi", "Vido", "Vigno", "Vildo", "Villi", "Villo", "Vilo", "Vindi", "Vini", "Vinia", "Vinio", "Vino", "Vinti", "Vipi", "Virello", "Viri", "Virini", "Virinia", "Visi", "Visti", "Vivaldo", "Vizzo", "Zabi", "Zacco", "Zachini", "Zachio", "Zadera", "Zadi", "Zado", "Zagno", "Zaldo", "Zalli", "Zallo", "Zalo", "Zandi", "Zani", "Zania", "Zanio", "Zano", "Zanti", "Zapi", "Zarello", "Zari", "Zarini", "Zarinia", "Zasi", "Zasti", "Zavaldo", "Zazzo"}
matisFemaleFirstNames = {"Anibi", "Anichi", "Anichini", "Anidi", "Anilli", "Anini", "Aninni", "Anirni", "Anisti", "Antobi", "Antochi", "Antochini", "Antodi", "Antolli", "Antoni", "Antonni", "Antorni", "Antosti", "Bebi", "Bechi", "Bechini", "Bedi", "Belli", "Beni", "Benni", "Berni", "Besti", "Chiabi", "Chiachi", "Chiachini", "Chiadi", "Chialli", "Chiani", "Chianni", "Chiarni", "Chiasti", "Cibi", "Cichi", "Cichini", "Cidi", "Cilli", "Cini", "Cinni", "Ciobi", "Ciochi", "Ciochini", "Ciodi", "Ciolli", "Cioni", "Cionni", "Ciorni", "Ciosti", "Cirni", "Cisti", "Cuibi", "Cuichi", "Cuichini", "Cuidi", "Cuilli", "Cuini", "Cuinni", "Cuirni", "Cuisti", "Frebi", "Frechi", "Frechini", "Fredi", "Frelli", "Freni", "Frenni", "Frerni", "Fresti", "Gibi", "Gichi", "Gichini", "Gidi", "Gilli", "Gini", "Ginni", "Girni", "Gisti", "Libi", "Lichi", "Lichini", "Lidi", "Lilli", "Lini", "Linni", "Lirni", "Listi", "Miabi", "Miachi", "Miachini", "Miadi", "Mialli", "Miani", "Mianni", "Miarni", "Miasti", "Nibi", "Nichi", "Nichini", "Nidi", "Nilli", "Nini", "Ninni", "Nirni", "Nisti", "Pebi", "Pechi", "Pechini", "Pedi", "Pelli", "Peni", "Penni", "Perni", "Pesti", "Pibi", "Pichi", "Pichini", "Pidi", "Pilli", "Pini", "Pinni", "Pirni", "Pisti", "Robi", "Rochi", "Rochini", "Rodi", "Rolli", "Roni", "Ronni", "Rorni", "Rosibi", "Rosichi", "Rosichini", "Rosidi", "Rosilli", "Rosini", "Rosinni", "Rosirni", "Rosisti", "Rosti", "Sibi", "Sichi", "Sichini", "Sidi", "Silli", "Sini", "Sinni", "Sirni", "Sisti", "Stabi", "Stachi", "Stachini", "Stadi", "Stalli", "Stani", "Stanni", "Starni", "Stasti", "Tinabi", "Tinachi", "Tinachini", "Tinadi", "Tinalli", "Tinani", "Tinanni", "Tinarni", "Tinasti", "Tribi", "Trichi", "Trichini", "Tridi", "Trilli", "Trini", "Trinni", "Trirni", "Tristi", "Vabi", "Vachi", "Vachini", "Vadi", "Valli", "Vani", "Vanni", "Varni", "Vasti", "Vibi", "Vichi", "Vichini", "Vidi", "Villi", "Vini", "Vinni", "Virni", "Visti", "Zabi", "Zachi", "Zachini", "Zadi", "Zalli", "Zani", "Zanni", "Zarni", "Zasti", "Andrea", "Chiabre", "Aninne", "Gibre", "Fresse", "Liche", "Nirni", "Pechi"}
matisMaleFirstNames = {"Anibre", "Aniccio", "Anicco", "Anichio", "Anicho", "Aniero", "Anigio", "Anigno", "Anillo", "Anilo", "Anine", "Aninio", "Anino", "Anirgio", "Aniro", "Anisse", "Anivaldo", "Anizzo", "Antobre", "Antoccio", "Antocco", "Antochio", "Antocho", "Antoero", "Antogio", "Antogno", "Antollo", "Antolo", "Antone", "Antonio", "Antono", "Antorgio", "Antoro", "Antosse", "Antovaldo", "Antozzo", "Bebre", "Beccio", "Becco", "Bechio", "Becho", "Beero", "Begio", "Begno", "Bello", "Belo", "Bene", "Benio", "Beno", "Bergio", "Bero", "Besse", "Bevaldo", "Bezzo", "Chiabre", "Chiaccio", "Chiacco", "Chiachio", "Chiacho", "Chiaero", "Chiagio", "Chiagno", "Chiallo", "Chialo", "Chiane", "Chianio", "Chiano", "Chiargio", "Chiaro", "Chiasse", "Chiavaldo", "Chiazzo", "Cibre", "Ciccio", "Cicco", "Cichio", "Cicho", "Ciero", "Cigio", "Cigno", "Cillo", "Cilo", "Cine", "Cinio", "Cino", "Ciobre", "Cioccio", "Ciocco", "Ciochio", "Ciocho", "Cioero", "Ciogio", "Ciogno", "Ciollo", "Ciolo", "Cione", "Cionio", "Ciono", "Ciorgio", "Cioro", "Ciosse", "Ciovaldo", "Ciozzo", "Cirgio", "Ciro", "Cisse", "Civaldo", "Cizzo", "Cuibre", "Cuiccio", "Cuicco", "Cuichio", "Cuiero", "Cuigio", "Cuigno", "Cuillo", "Cuilo", "Cuine", "Cuinio", "Cuino", "Cuirgio", "Cuiro", "Cuisse", "Cuivaldo", "Cuizzo", "Frebre", "Freccio", "Frecco", "Frechio", "Frecho", "Freero", "Fregio", "Fregno", "Frello", "Frelo", "Frene", "Frenio", "Freno", "Frergio", "Frero", "Fresse", "Frevaldo", "Frezzo", "Gibre", "Giccio", "Gicco", "Gichio", "Gicho", "Giero", "Gigio", "Gigno", "Gillo", "Gilo", "Gine", "Ginio", "Gino", "Girgio", "Giro", "Gisse", "Givaldo", "Gizzo", "Libre", "Liccio", "Licco", "Lichio", "Licho", "Liero", "Ligio", "Ligno", "Lillo", "Lilo", "Line", "Linio", "Lino", "Lirgio", "Liro", "Lisse", "Livaldo", "Lizzo", "Miabre", "Miaccio", "Miacco", "Miachio", "Miacho", "Miaero", "Miagio", "Miagno", "Miallo", "Mialo", "Miane", "Mianio", "Miano", "Miargio", "Miaro", "Miasse", "Miavaldo", "Miazzo", "Nibre", "Niccio", "Nicco", "Nichio", "Nicho", "Niero", "Nigio", "Nigno", "Nillo", "Nilo", "Nine", "Ninio", "Nino", "Nirgio", "Niro", "Nisse", "Nivaldo", "Nizzo", "Pebre", "Peccio", "Pecco", "Pechio", "Pecho", "Peero", "Pegio", "Pegno", "Pello", "Pelo", "Pene", "Penio", "Peno", "Pergio", "Pero", "Pesse", "Pevaldo", "Pezzo", "Pibre", "Piccio", "Picco", "Pichio", "Picho", "Piero", "Pigio", "Pigno", "Pillo", "Pilo", "Pine", "Pinio", "Pino", "Pirgio", "Piro", "Pisse", "Pivaldo", "Pizzo", "Robre", "Roccio", "Rocco", "Rochio", "Rocho", "Roero", "Rogio", "Rogno", "Rollo", "Rolo", "Rone", "Ronio", "Rono", "Rorgio", "Roro", "Rosibre", "Rosiccio", "Rosicco", "Rosichio", "Rosicho", "Rosiero", "Rosigio", "Rosigno", "Rosillo", "Rosilo", "Rosine", "Rosinio", "Rosino", "Rosirgio", "Rosiro", "Rosisse", "Rosivaldo", "Rosizzo", "Rosse", "Rovaldo", "Rozzo", "Sibre", "Siccio", "Sicco", "Sichio", "Sicho", "Siero", "Sigio", "Signo", "Sillo", "Silo", "Sine", "Sinio", "Sino", "Sirgio", "Siro", "Sisse", "Sivaldo", "Sizzo", "Stabre", "Staccio", "Stacco", "Stachio", "Stacho", "Staero", "Stagio", "Stagno", "Stallo", "Stalo", "Stane", "Stanio", "Stano", "Stargio", "Staro", "Stasse", "Stavaldo", "Stazzo", "Tinabre", "Tinaccio", "Tinacco", "Tinachio", "Tinacho", "Tinaero", "Tinagio", "Tinagno", "Tinallo", "Tinalo", "Tinane", "Tinanio", "Tinano", "Tinargio", "Tinaro", "Tinasse", "Tinavaldo", "Tinazzo", "Tribre", "Triccio", "Tricco", "Trichio", "Tricho", "Triero", "Trigio", "Trigno", "Trillo", "Trilo", "Trine", "Trinio", "Trino", "Trirgio", "Triro", "Trisse", "Trivaldo", "Trizzo", "Vabre", "Vaccio", "Vacco", "Vachio", "Vacho", "Vaero", "Vagio", "Vagno", "Vallo", "Valo", "Vane", "Vanio", "Vano", "Vargio", "Varo", "Vasse", "Vavaldo", "Vazzo", "Vibre", "Viccio", "Vicco", "Vichio", "Vicho", "Viero", "Vigio", "Vigno", "Villo", "Vilo", "Vine", "Vinio", "Vino", "Virgio", "Viro", "Visse", "Vivaldo", "Vizzo", "Zabre", "Zaccio", "Zacco", "Zachio", "Zacho", "Zaero", "Zagio", "Zagno", "Zallo", "Zalo", "Zane", "Zanio", "Zano", "Zargio", "Zaro", "Zasse", "Zavaldo", "Zazzo", "Andrea", "Chiabre", "Aninne", "Gibre", "Fresse", "Liche", "Nirni", "Pechi"}
+
+-- VERSION --
+RYZOM_NAMES_MATIS_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua b/ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua
index 3d4c535cce..d3aa20da5f 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua
@@ -1,3 +1,5 @@
trykerFirstNames = {"Abban", "Abben", "Abber", "Abbie", "Abby", "Achan", "Achen", "Acher", "Achie", "Achy", "Ackan", "Acken", "Acker", "Ackie", "Acky", "Addan", "Adden", "Adder", "Addie", "Addy", "Adgan", "Adgen", "Adger", "Adgie", "Adgy", "Aebban", "Aebben", "Aebber", "Aebbie", "Aebby", "Aechan", "Aechen", "Aecher", "Aechie", "Aechy", "Aeckan", "Aecken", "Aecker", "Aeckie", "Aecky", "Aeddan", "Aedden", "Aedder", "Aeddie", "Aeddy", "Aedgan", "Aedgen", "Aedger", "Aedgie", "Aedgy", "Aeffan", "Aeffen", "Aeffer", "Aeffie", "Aeffy", "Aegan", "Aegen", "Aeger", "Aeggan", "Aeggen", "Aegger", "Aeggie", "Aeggy", "Aegie", "Aegy", "Aeksan", "Aeksen", "Aekser", "Aeksie", "Aeksy", "Aelan", "Aelen", "Aeler", "Aelie", "Aellan", "Aellen", "Aeller", "Aellie", "Aelly", "Aely", "Aeman", "Aemen", "Aemer", "Aemie", "Aemman", "Aemmen", "Aemmer", "Aemmie", "Aemmy", "Aemy", "Aenan", "Aendan", "Aenden", "Aender", "Aendie", "Aendy", "Aenen", "Aener", "Aenie", "Aennan", "Aennen", "Aenner", "Aennie", "Aenny", "Aeny", "Aepan", "Aepen", "Aeper", "Aepie", "Aeppan", "Aeppen", "Aepper", "Aeppie", "Aeppy", "Aepsan", "Aepsen", "Aepser", "Aepsie", "Aepsy", "Aepy", "Aerdan", "Aerden", "Aerder", "Aerdie", "Aerdy", "Aerman", "Aermen", "Aermer", "Aermie", "Aermy", "Aerran", "Aerren", "Aerrer", "Aerrie", "Aerry", "Aertan", "Aerten", "Aerter", "Aertie", "Aerty", "Aesan", "Aesen", "Aeser", "Aesie", "Aeskan", "Aesken", "Aesker", "Aeskie", "Aesky", "Aessan", "Aessen", "Aesser", "Aessie", "Aessy", "Aesy", "Aethan", "Aethen", "Aether", "Aethie", "Aethy", "Aettan", "Aetten", "Aetter", "Aettie", "Aetty", "Aexan", "Aexen", "Aexer", "Aexie", "Aexy", "Aezzan", "Aezzen", "Aezzer", "Aezzie", "Aezzy", "Affan", "Affen", "Affer", "Affie", "Affy", "Agan", "Agen", "Ager", "Aggan", "Aggen", "Agger", "Aggie", "Aggy", "Agie", "Agy", "Aibban", "Aibben", "Aibber", "Aibbie", "Aibby", "Aichan", "Aichen", "Aicher", "Aichie", "Aichy", "Aickan", "Aicken", "Aicker", "Aickie", "Aicky", "Aiddan", "Aidden", "Aidder", "Aiddie", "Aiddy", "Aidgan", "Aidgen", "Aidger", "Aidgie", "Aidgy", "Aiffan", "Aiffen", "Aiffer", "Aiffie", "Aiffy", "Aigan", "Aigen", "Aiger", "Aiggan", "Aiggen", "Aigger", "Aiggie", "Aiggy", "Aigie", "Aigy", "Aiksan", "Aiksen", "Aikser", "Aiksie", "Aiksy", "Ailan", "Ailen", "Ailer", "Ailie", "Aillan", "Aillen", "Ailler", "Aillie", "Ailly", "Aily", "Aiman", "Aimen", "Aimer", "Aimie", "Aimman", "Aimmen", "Aimmer", "Aimmie", "Aimmy", "Aimy", "Ainan", "Aindan", "Ainden", "Ainder", "Aindie", "Aindy", "Ainen", "Ainer", "Ainie", "Ainnan", "Ainnen", "Ainner", "Ainnie", "Ainny", "Ainy", "Aipan", "Aipen", "Aiper", "Aipie", "Aippan", "Aippen", "Aipper", "Aippie", "Aippy", "Aipsan", "Aipsen", "Aipser", "Aipsie", "Aipsy", "Aipy", "Airdan", "Airden", "Airder", "Airdie", "Airdy", "Airman", "Airmen", "Airmer", "Airmie", "Airmy", "Airran", "Airren", "Airrer", "Airrie", "Airry", "Airtan", "Airten", "Airter", "Airtie", "Airty", "Aisan", "Aisen", "Aiser", "Aisie", "Aiskan", "Aisken", "Aisker", "Aiskie", "Aisky", "Aissan", "Aissen", "Aisser", "Aissie", "Aissy", "Aisy", "Aithan", "Aithen", "Aither", "Aithie", "Aithy", "Aittan", "Aitten", "Aitter", "Aittie", "Aitty", "Aixan", "Aixen", "Aixer", "Aixie", "Aixy", "Aizzan", "Aizzen", "Aizzer", "Aizzie", "Aizzy", "Aksan", "Aksen", "Akser", "Aksie", "Aksy", "Alan", "Alen", "Aler", "Alie", "Allan", "Allen", "Aller", "Allie", "Ally", "Aly", "Aman", "Amen", "Amer", "Amie", "Amman", "Ammen", "Ammer", "Ammie", "Ammy", "Amy", "Anan", "Andan", "Anden", "Ander", "Andie", "Andy", "Anen", "Aner", "Anie", "Annan", "Annen", "Anner", "Annie", "Anny", "Any", "Apan", "Apen", "Aper", "Apie", "Appan", "Appen", "Apper", "Appie", "Appy", "Apsan", "Apsen", "Apser", "Apsie", "Apsy", "Apy", "Ardan", "Arden", "Arder", "Ardie", "Ardy", "Arman", "Armen", "Armer", "Armie", "Army", "Arran", "Arren", "Arrer", "Arrie", "Arry", "Artan", "Arten", "Arter", "Artie", "Arty", "Asan", "Asen", "Aser", "Asie", "Askan", "Asken", "Asker", "Askie", "Asky", "Assan", "Assen", "Asser", "Assie", "Assy", "Asy", "Athan", "Athen", "Ather", "Athie", "Athy", "Attan", "Atten", "Atter", "Attie", "Atty", "Axan", "Axen", "Axer", "Axie", "Axy", "Azzan", "Azzen", "Azzer", "Azzie", "Azzy", "Babban", "Babben", "Babber", "Babbie", "Babby", "Bachan", "Bachen", "Bacher", "Bachie", "Bachy", "Backan", "Backen", "Backer", "Backie", "Backy", "Baddan", "Badden", "Badder", "Baddie", "Baddy", "Badgan", "Badgen", "Badger", "Badgie", "Badgy", "Baffan", "Baffen", "Baffer", "Baffie", "Baffy", "Bagan", "Bagen", "Bager", "Baggan", "Baggen", "Bagger", "Baggie", "Baggy", "Bagie", "Bagy", "Baksan", "Baksen", "Bakser", "Baksie", "Baksy", "Balan", "Balen", "Baler", "Balie", "Ballan", "Ballen", "Baller", "Ballie", "Bally", "Baly", "Baman", "Bamen", "Bamer", "Bamie", "Bamman", "Bammen", "Bammer", "Bammie", "Bammy", "Bamy", "Banan", "Bandan", "Banden", "Bander", "Bandie", "Bandy", "Banen", "Baner", "Banie", "Bannan", "Bannen", "Banner", "Bannie", "Banny", "Bany", "Bapan", "Bapen", "Baper", "Bapie", "Bappan", "Bappen", "Bapper", "Bappie", "Bappy", "Bapsan", "Bapsen", "Bapser", "Bapsie", "Bapsy", "Bapy", "Bardan", "Barden", "Barder", "Bardie", "Bardy", "Barman", "Barmen", "Barmer", "Barmie", "Barmy", "Barran", "Barren", "Barrer", "Barrie", "Barry", "Bartan", "Barten", "Barter", "Bartie", "Barty", "Basan", "Basen", "Baser", "Basie", "Baskan", "Basken", "Basker", "Baskie", "Basky", "Bassan", "Bassen", "Basser", "Bassie", "Bassy", "Basy", "Bathan", "Bathen", "Bather", "Bathie", "Bathy", "Battan", "Batten", "Batter", "Battie", "Batty", "Baxan", "Baxen", "Baxer", "Baxie", "Baxy", "Bazzan", "Bazzen", "Bazzer", "Bazzie", "Bazzy", "Brabban", "Brabben", "Brabber", "Brabbie", "Brabby", "Brachan", "Brachen", "Bracher", "Brachie", "Brachy", "Brackan", "Bracken", "Bracker", "Brackie", "Bracky", "Braddan", "Bradden", "Bradder", "Braddie", "Braddy", "Bradgan", "Bradgen", "Bradger", "Bradgie", "Bradgy", "Braffan", "Braffen", "Braffer", "Braffie", "Braffy", "Bragan", "Bragen", "Brager", "Braggan", "Braggen", "Bragger", "Braggie", "Braggy", "Bragie", "Bragy", "Braksan", "Braksen", "Brakser", "Braksie", "Braksy", "Bralan", "Bralen", "Braler", "Bralie", "Brallan", "Brallen", "Braller", "Brallie", "Brally", "Braly", "Braman", "Bramen", "Bramer", "Bramie", "Bramman", "Brammen", "Brammer", "Brammie", "Brammy", "Bramy", "Branan", "Brandan", "Branden", "Brander", "Brandie", "Brandy", "Branen", "Braner", "Branie", "Brannan", "Brannen", "Branner", "Brannie", "Branny", "Brany", "Brapan", "Brapen", "Braper", "Brapie", "Brappan", "Brappen", "Brapper", "Brappie", "Brappy", "Brapsan", "Brapsen", "Brapser", "Brapsie", "Brapsy", "Brapy", "Brardan", "Brarden", "Brarder", "Brardie", "Brardy", "Brarman", "Brarmen", "Brarmer", "Brarmie", "Brarmy", "Brarran", "Brarren", "Brarrer", "Brarrie", "Brarry", "Brartan", "Brarten", "Brarter", "Brartie", "Brarty", "Brasan", "Brasen", "Braser", "Brasie", "Braskan", "Brasken", "Brasker", "Braskie", "Brasky", "Brassan", "Brassen", "Brasser", "Brassie", "Brassy", "Brasy", "Brathan", "Brathen", "Brather", "Brathie", "Brathy", "Brattan", "Bratten", "Bratter", "Brattie", "Bratty", "Braxan", "Braxen", "Braxer", "Braxie", "Braxy", "Brazzan", "Brazzen", "Brazzer", "Brazzie", "Brazzy", "Brebban", "Brebben", "Brebber", "Brebbie", "Brebby", "Brechan", "Brechen", "Brecher", "Brechie", "Brechy", "Breckan", "Brecken", "Brecker", "Breckie", "Brecky", "Breddan", "Bredden", "Bredder", "Breddie", "Breddy", "Bredgan", "Bredgen", "Bredger", "Bredgie", "Bredgy", "Breffan", "Breffen", "Breffer", "Breffie", "Breffy", "Bregan", "Bregen", "Breger", "Breggan", "Breggen", "Bregger", "Breggie", "Breggy", "Bregie", "Bregy", "Breksan", "Breksen", "Brekser", "Breksie", "Breksy", "Brelan", "Brelen", "Breler", "Brelie", "Brellan", "Brellen", "Breller", "Brellie", "Brelly", "Brely", "Breman", "Bremen", "Bremer", "Bremie", "Bremman", "Bremmen", "Bremmer", "Bremmie", "Bremmy", "Bremy", "Brenan", "Brendan", "Brenden", "Brender", "Brendie", "Brendy", "Brenen", "Brener", "Brenie", "Brennan", "Brennen", "Brenner", "Brennie", "Brenny", "Breny", "Brepan", "Brepen", "Breper", "Brepie", "Breppan", "Breppen", "Brepper", "Breppie", "Breppy", "Brepsan", "Brepsen", "Brepser", "Brepsie", "Brepsy", "Brepy", "Brerdan", "Brerden", "Brerder", "Brerdie", "Brerdy", "Brerman", "Brermen", "Brermer", "Brermie", "Brermy", "Brerran", "Brerren", "Brerrer", "Brerrie", "Brerry", "Brertan", "Brerten", "Brerter", "Brertie", "Brerty", "Bresan", "Bresen", "Breser", "Bresie", "Breskan", "Bresken", "Bresker", "Breskie", "Bresky", "Bressan", "Bressen", "Bresser", "Bressie", "Bressy", "Bresy", "Brethan", "Brethen", "Brether", "Brethie", "Brethy", "Brettan", "Bretten", "Bretter", "Brettie", "Bretty", "Brexan", "Brexen", "Brexer", "Brexie", "Brexy", "Brezzan", "Brezzen", "Brezzer", "Brezzie", "Brezzy", "Bribban", "Bribben", "Bribber", "Bribbie", "Bribby", "Brichan", "Brichen", "Bricher", "Brichie", "Brichy", "Brickan", "Bricken", "Bricker", "Brickie", "Bricky", "Briddan", "Bridden", "Bridder", "Briddie", "Briddy", "Bridgan", "Bridgen", "Bridger", "Bridgie", "Bridgy", "Briffan", "Briffen", "Briffer", "Briffie", "Briffy", "Brigan", "Brigen", "Briger", "Briggan", "Briggen", "Brigger", "Briggie", "Briggy", "Brigie", "Brigy", "Briksan", "Briksen", "Brikser", "Briksie", "Briksy", "Brilan", "Brilen", "Briler", "Brilie", "Brillan", "Brillen", "Briller", "Brillie", "Brilly", "Brily", "Briman", "Brimen", "Brimer", "Brimie", "Brimman", "Brimmen", "Brimmer", "Brimmie", "Brimmy", "Brimy", "Brinan", "Brindan", "Brinden", "Brinder", "Brindie", "Brindy", "Brinen", "Briner", "Brinie", "Brinnan", "Brinnen", "Brinner", "Brinnie", "Brinny", "Briny", "Bripan", "Bripen", "Briper", "Bripie", "Brippan", "Brippen", "Bripper", "Brippie", "Brippy", "Bripsan", "Bripsen", "Bripser", "Bripsie", "Bripsy", "Bripy", "Brirdan", "Brirden", "Brirder", "Brirdie", "Brirdy", "Brirman", "Brirmen", "Brirmer", "Brirmie", "Brirmy", "Brirran", "Brirren", "Brirrer", "Brirrie", "Brirry", "Brirtan", "Brirten", "Brirter", "Brirtie", "Brirty", "Brisan", "Brisen", "Briser", "Brisie", "Briskan", "Brisken", "Brisker", "Briskie", "Brisky", "Brissan", "Brissen", "Brisser", "Brissie", "Brissy", "Brisy", "Brithan", "Brithen", "Brither", "Brithie", "Brithy", "Brittan", "Britten", "Britter", "Brittie", "Britty", "Brixan", "Brixen", "Brixer", "Brixie", "Brixy", "Brizzan", "Brizzen", "Brizzer", "Brizzie", "Brizzy", "Cabban", "Cabben", "Cabber", "Cabbie", "Cabby", "Cachan", "Cachen", "Cacher", "Cachie", "Cachy", "Cackan", "Cacken", "Cacker", "Cackie", "Cacky", "Caddan", "Cadden", "Cadder", "Caddie", "Caddy", "Cadgan", "Cadgen", "Cadger", "Cadgie", "Cadgy", "Caffan", "Caffen", "Caffer", "Caffie", "Caffy", "Cagan", "Cagen", "Cager", "Caggan", "Caggen", "Cagger", "Caggie", "Caggy", "Cagie", "Cagy", "Caksan", "Caksen", "Cakser", "Caksie", "Caksy", "Calan", "Calen", "Caler", "Calie", "Callan", "Callen", "Caller", "Callie", "Cally", "Caly", "Caman", "Camen", "Camer", "Camie", "Camman", "Cammen", "Cammer", "Cammie", "Cammy", "Camy", "Canan", "Candan", "Canden", "Cander", "Candie", "Candy", "Canen", "Caner", "Canie", "Cannan", "Cannen", "Canner", "Cannie", "Canny", "Cany", "Capan", "Capen", "Caper", "Capie", "Cappan", "Cappen", "Capper", "Cappie", "Cappy", "Capsan", "Capsen", "Capser", "Capsie", "Capsy", "Capy", "Cardan", "Carden", "Carder", "Cardie", "Cardy", "Carman", "Carmen", "Carmer", "Carmie", "Carmy", "Carran", "Carren", "Carrer", "Carrie", "Carry", "Cartan", "Carten", "Carter", "Cartie", "Carty", "Casan", "Casen", "Caser", "Casie", "Caskan", "Casken", "Casker", "Caskie", "Casky", "Cassan", "Cassen", "Casser", "Cassie", "Cassy", "Casy", "Cathan", "Cathen", "Cather", "Cathie", "Cathy", "Cattan", "Catten", "Catter", "Cattie", "Catty", "Caxan", "Caxen", "Caxer", "Caxie", "Caxy", "Cazzan", "Cazzen", "Cazzer", "Cazzie", "Cazzy", "Cobban", "Cobben", "Cobber", "Cobbie", "Cobby", "Cochan", "Cochen", "Cocher", "Cochie", "Cochy", "Cockan", "Cocken", "Cocker", "Cockie", "Cocky", "Coddan", "Codden", "Codder", "Coddie", "Coddy", "Codgan", "Codgen", "Codger", "Codgie", "Codgy", "Coffan", "Coffen", "Coffer", "Coffie", "Coffy", "Cogan", "Cogen", "Coger", "Coggan", "Coggen", "Cogger", "Coggie", "Coggy", "Cogie", "Cogy", "Coksan", "Coksen", "Cokser", "Coksie", "Coksy", "Colan", "Colen", "Coler", "Colie", "Collan", "Collen", "Coller", "Collie", "Colly", "Coly", "Coman", "Comen", "Comer", "Comie", "Comman", "Commen", "Commer", "Commie", "Commy", "Comy", "Conan", "Condan", "Conden", "Conder", "Condie", "Condy", "Conen", "Coner", "Conie", "Connan", "Connen", "Conner", "Connie", "Conny", "Cony", "Copan", "Copen", "Coper", "Copie", "Coppan", "Coppen", "Copper", "Coppie", "Coppy", "Copsan", "Copsen", "Copser", "Copsie", "Copsy", "Copy", "Cordan", "Corden", "Corder", "Cordie", "Cordy", "Corman", "Cormen", "Cormer", "Cormie", "Cormy", "Corran", "Corren", "Correr", "Corrie", "Corry", "Cortan", "Corten", "Corter", "Cortie", "Corty", "Cosan", "Cosen", "Coser", "Cosie", "Coskan", "Cosken", "Cosker", "Coskie", "Cosky", "Cossan", "Cossen", "Cosser", "Cossie", "Cossy", "Cosy", "Cothan", "Cothen", "Cother", "Cothie", "Cothy", "Cottan", "Cotten", "Cotter", "Cottie", "Cotty", "Coxan", "Coxen", "Coxer", "Coxie", "Coxy", "Cozzan", "Cozzen", "Cozzer", "Cozzie", "Cozzy", "Dabban", "Dabben", "Dabber", "Dabbie", "Dabby", "Dachan", "Dachen", "Dacher", "Dachie", "Dachy", "Dackan", "Dacken", "Dacker", "Dackie", "Dacky", "Daddan", "Dadden", "Dadder", "Daddie", "Daddy", "Dadgan", "Dadgen", "Dadger", "Dadgie", "Dadgy", "Daffan", "Daffen", "Daffer", "Daffie", "Daffy", "Dagan", "Dagen", "Dager", "Daggan", "Daggen", "Dagger", "Daggie", "Daggy", "Dagie", "Dagy", "Daksan", "Daksen", "Dakser", "Daksie", "Daksy", "Dalan", "Dalen", "Daler", "Dalie", "Dallan", "Dallen", "Daller", "Dallie", "Dally", "Daly", "Daman", "Damen", "Damer", "Damie", "Damman", "Dammen", "Dammer", "Dammie", "Dammy", "Damy", "Danan", "Dandan", "Danden", "Dander", "Dandie", "Dandy", "Danen", "Daner", "Danie", "Dannan", "Dannen", "Danner", "Dannie", "Danny", "Dany", "Dapan", "Dapen", "Daper", "Dapie", "Dappan", "Dappen", "Dapper", "Dappie", "Dappy", "Dapsan", "Dapsen", "Dapser", "Dapsie", "Dapsy", "Dapy", "Dardan", "Darden", "Darder", "Dardie", "Dardy", "Darman", "Darmen", "Darmer", "Darmie", "Darmy", "Darran", "Darren", "Darrer", "Darrie", "Darry", "Dartan", "Darten", "Darter", "Dartie", "Darty", "Dasan", "Dasen", "Daser", "Dasie", "Daskan", "Dasken", "Dasker", "Daskie", "Dasky", "Dassan", "Dassen", "Dasser", "Dassie", "Dassy", "Dasy", "Dathan", "Dathen", "Dather", "Dathie", "Dathy", "Dattan", "Datten", "Datter", "Dattie", "Datty", "Daxan", "Daxen", "Daxer", "Daxie", "Daxy", "Dazzan", "Dazzen", "Dazzer", "Dazzie", "Dazzy", "Debban", "Debben", "Debber", "Debbie", "Debby", "Dechan", "Dechen", "Decher", "Dechie", "Dechy", "Deckan", "Decken", "Decker", "Deckie", "Decky", "Deddan", "Dedden", "Dedder", "Deddie", "Deddy", "Dedgan", "Dedgen", "Dedger", "Dedgie", "Dedgy", "Deffan", "Deffen", "Deffer", "Deffie", "Deffy", "Degan", "Degen", "Deger", "Deggan", "Deggen", "Degger", "Deggie", "Deggy", "Degie", "Degy", "Deksan", "Deksen", "Dekser", "Deksie", "Deksy", "Delan", "Delen", "Deler", "Delie", "Dellan", "Dellen", "Deller", "Dellie", "Delly", "Dely", "Deman", "Demen", "Demer", "Demie", "Demman", "Demmen", "Demmer", "Demmie", "Demmy", "Demy", "Denan", "Dendan", "Denden", "Dender", "Dendie", "Dendy", "Denen", "Dener", "Denie", "Dennan", "Dennen", "Denner", "Dennie", "Denny", "Deny", "Depan", "Depen", "Deper", "Depie", "Deppan", "Deppen", "Depper", "Deppie", "Deppy", "Depsan", "Depsen", "Depser", "Depsie", "Depsy", "Depy", "Derdan", "Derden", "Derder", "Derdie", "Derdy", "Derman", "Dermen", "Dermer", "Dermie", "Dermy", "Derran", "Derren", "Derrer", "Derrie", "Derry", "Dertan", "Derten", "Derter", "Dertie", "Derty", "Desan", "Desen", "Deser", "Desie", "Deskan", "Desken", "Desker", "Deskie", "Desky", "Dessan", "Dessen", "Desser", "Dessie", "Dessy", "Desy", "Dethan", "Dethen", "Dether", "Dethie", "Dethy", "Dettan", "Detten", "Detter", "Dettie", "Detty", "Dexan", "Dexen", "Dexer", "Dexie", "Dexy", "Dezzan", "Dezzen", "Dezzer", "Dezzie", "Dezzy", "Dibban", "Dibben", "Dibber", "Dibbie", "Dibby", "Dichan", "Dichen", "Dicher", "Dichie", "Dichy", "Dickan", "Dicken", "Dicker", "Dickie", "Dicky", "Diddan", "Didden", "Didder", "Diddie", "Diddy", "Didgan", "Didgen", "Didger", "Didgie", "Didgy", "Diffan", "Diffen", "Differ", "Diffie", "Diffy", "Digan", "Digen", "Diger", "Diggan", "Diggen", "Digger", "Diggie", "Diggy", "Digie", "Digy", "Diksan", "Diksen", "Dikser", "Diksie", "Diksy", "Dilan", "Dilen", "Diler", "Dilie", "Dillan", "Dillen", "Diller", "Dillie", "Dilly", "Dily", "Diman", "Dimen", "Dimer", "Dimie", "Dimman", "Dimmen", "Dimmer", "Dimmie", "Dimmy", "Dimy", "Dinan", "Dindan", "Dinden", "Dinder", "Dindie", "Dindy", "Dinen", "Diner", "Dinie", "Dinnan", "Dinnen", "Dinner", "Dinnie", "Dinny", "Diny", "Dipan", "Dipen", "Diper", "Dipie", "Dippan", "Dippen", "Dipper", "Dippie", "Dippy", "Dipsan", "Dipsen", "Dipser", "Dipsie", "Dipsy", "Dipy", "Dirdan", "Dirden", "Dirder", "Dirdie", "Dirdy", "Dirman", "Dirmen", "Dirmer", "Dirmie", "Dirmy", "Dirran", "Dirren", "Dirrer", "Dirrie", "Dirry", "Dirtan", "Dirten", "Dirter", "Dirtie", "Dirty", "Disan", "Disen", "Diser", "Disie", "Diskan", "Disken", "Disker", "Diskie", "Disky", "Dissan", "Dissen", "Disser", "Dissie", "Dissy", "Disy", "Dithan", "Dithen", "Dither", "Dithie", "Dithy", "Dittan", "Ditten", "Ditter", "Dittie", "Ditty", "Dixan", "Dixen", "Dixer", "Dixie", "Dixy", "Dizzan", "Dizzen", "Dizzer", "Dizzie", "Dizzy", "Ebban", "Ebben", "Ebber", "Ebbie", "Ebby", "Echan", "Echen", "Echer", "Echie", "Echy", "Eckan", "Ecken", "Ecker", "Eckie", "Ecky", "Eddan", "Edden", "Edder", "Eddie", "Eddy", "Edgan", "Edgen", "Edger", "Edgie", "Edgy", "Effan", "Effen", "Effer", "Effie", "Effy", "Egan", "Egen", "Eger", "Eggan", "Eggen", "Egger", "Eggie", "Eggy", "Egie", "Egy", "Eksan", "Eksen", "Ekser", "Eksie", "Eksy", "Elan", "Elen", "Eler", "Elie", "Ellan", "Ellen", "Eller", "Ellie", "Elly", "Ely", "Eman", "Emen", "Emer", "Emie", "Emman", "Emmen", "Emmer", "Emmie", "Emmy", "Emy", "Enan", "Endan", "Enden", "Ender", "Endie", "Endy", "Enen", "Ener", "Enie", "Ennan", "Ennen", "Enner", "Ennie", "Enny", "Eny", "Eobban", "Eobben", "Eobber", "Eobbie", "Eobby", "Eochan", "Eochen", "Eocher", "Eochie", "Eochy", "Eockan", "Eocken", "Eocker", "Eockie", "Eocky", "Eoddan", "Eodden", "Eodder", "Eoddie", "Eoddy", "Eodgan", "Eodgen", "Eodger", "Eodgie", "Eodgy", "Eoffan", "Eoffen", "Eoffer", "Eoffie", "Eoffy", "Eogan", "Eogen", "Eoger", "Eoggan", "Eoggen", "Eogger", "Eoggie", "Eoggy", "Eogie", "Eogy", "Eoksan", "Eoksen", "Eokser", "Eoksie", "Eoksy", "Eolan", "Eolen", "Eoler", "Eolie", "Eollan", "Eollen", "Eoller", "Eollie", "Eolly", "Eoly", "Eoman", "Eomen", "Eomer", "Eomie", "Eomman", "Eommen", "Eommer", "Eommie", "Eommy", "Eomy", "Eonan", "Eondan", "Eonden", "Eonder", "Eondie", "Eondy", "Eonen", "Eoner", "Eonie", "Eonnan", "Eonnen", "Eonner", "Eonnie", "Eonny", "Eony", "Eopan", "Eopen", "Eoper", "Eopie", "Eoppan", "Eoppen", "Eopper", "Eoppie", "Eoppy", "Eopsan", "Eopsen", "Eopser", "Eopsie", "Eopsy", "Eopy", "Eordan", "Eorden", "Eorder", "Eordie", "Eordy", "Eorman", "Eormen", "Eormer", "Eormie", "Eormy", "Eorran", "Eorren", "Eorrer", "Eorrie", "Eorry", "Eortan", "Eorten", "Eorter", "Eortie", "Eorty", "Eosan", "Eosen", "Eoser", "Eosie", "Eoskan", "Eosken", "Eosker", "Eoskie", "Eosky", "Eossan", "Eossen", "Eosser", "Eossie", "Eossy", "Eosy", "Eothan", "Eothen", "Eother", "Eothie", "Eothy", "Eottan", "Eotten", "Eotter", "Eottie", "Eotty", "Eoxan", "Eoxen", "Eoxer", "Eoxie", "Eoxy", "Eozzan", "Eozzen", "Eozzer", "Eozzie", "Eozzy", "Epan", "Epen", "Eper", "Epie", "Eppan", "Eppen", "Epper", "Eppie", "Eppy", "Epsan", "Epsen", "Epser", "Epsie", "Epsy", "Epy", "Erdan", "Erden", "Erder", "Erdie", "Erdy", "Erman", "Ermen", "Ermer", "Ermie", "Ermy", "Erran", "Erren", "Errer", "Errie", "Erry", "Ertan", "Erten", "Erter", "Ertie", "Erty", "Esan", "Esen", "Eser", "Esie", "Eskan", "Esken", "Esker", "Eskie", "Esky", "Essan", "Essen", "Esser", "Essie", "Essy", "Esy", "Ethan", "Ethen", "Ether", "Ethie", "Ethy", "Ettan", "Etten", "Etter", "Ettie", "Etty", "Exan", "Exen", "Exer", "Exie", "Exy", "Ezzan", "Ezzen", "Ezzer", "Ezzie", "Ezzy", "Gabban", "Gabben", "Gabber", "Gabbie", "Gabby", "Gachan", "Gachen", "Gacher", "Gachie", "Gachy", "Gackan", "Gacken", "Gacker", "Gackie", "Gacky", "Gaddan", "Gadden", "Gadder", "Gaddie", "Gaddy", "Gadgan", "Gadgen", "Gadger", "Gadgie", "Gadgy", "Gaffan", "Gaffen", "Gaffer", "Gaffie", "Gaffy", "Gagan", "Gagen", "Gager", "Gaggan", "Gaggen", "Gagger", "Gaggie", "Gaggy", "Gagie", "Gagy", "Gaksan", "Gaksen", "Gakser", "Gaksie", "Gaksy", "Galan", "Galen", "Galer", "Galie", "Gallan", "Gallen", "Galler", "Gallie", "Gally", "Galy", "Gaman", "Gamen", "Gamer", "Gamie", "Gamman", "Gammen", "Gammer", "Gammie", "Gammy", "Gamy", "Ganan", "Gandan", "Ganden", "Gander", "Gandie", "Gandy", "Ganen", "Ganer", "Ganie", "Gannan", "Gannen", "Ganner", "Gannie", "Ganny", "Gany", "Gapan", "Gapen", "Gaper", "Gapie", "Gappan", "Gappen", "Gapper", "Gappie", "Gappy", "Gapsan", "Gapsen", "Gapser", "Gapsie", "Gapsy", "Gapy", "Gardan", "Garden", "Garder", "Gardie", "Gardy", "Garman", "Garmen", "Garmer", "Garmie", "Garmy", "Garran", "Garren", "Garrer", "Garrie", "Garry", "Gartan", "Garten", "Garter", "Gartie", "Garty", "Gasan", "Gasen", "Gaser", "Gasie", "Gaskan", "Gasken", "Gasker", "Gaskie", "Gasky", "Gassan", "Gassen", "Gasser", "Gassie", "Gassy", "Gasy", "Gathan", "Gathen", "Gather", "Gathie", "Gathy", "Gattan", "Gatten", "Gatter", "Gattie", "Gatty", "Gaxan", "Gaxen", "Gaxer", "Gaxie", "Gaxy", "Gazzan", "Gazzen", "Gazzer", "Gazzie", "Gazzy", "Gebban", "Gebben", "Gebber", "Gebbie", "Gebby", "Gechan", "Gechen", "Gecher", "Gechie", "Gechy", "Geckan", "Gecken", "Gecker", "Geckie", "Gecky", "Geddan", "Gedden", "Gedder", "Geddie", "Geddy", "Gedgan", "Gedgen", "Gedger", "Gedgie", "Gedgy", "Geffan", "Geffen", "Geffer", "Geffie", "Geffy", "Gegan", "Gegen", "Geger", "Geggan", "Geggen", "Gegger", "Geggie", "Geggy", "Gegie", "Gegy", "Geksan", "Geksen", "Gekser", "Geksie", "Geksy", "Gelan", "Gelen", "Geler", "Gelie", "Gellan", "Gellen", "Geller", "Gellie", "Gelly", "Gely", "Geman", "Gemen", "Gemer", "Gemie", "Gemman", "Gemmen", "Gemmer", "Gemmie", "Gemmy", "Gemy", "Genan", "Gendan", "Genden", "Gender", "Gendie", "Gendy", "Genen", "Gener", "Genie", "Gennan", "Gennen", "Genner", "Gennie", "Genny", "Geny", "Gepan", "Gepen", "Geper", "Gepie", "Geppan", "Geppen", "Gepper", "Geppie", "Geppy", "Gepsan", "Gepsen", "Gepser", "Gepsie", "Gepsy", "Gepy", "Gerdan", "Gerden", "Gerder", "Gerdie", "Gerdy", "German", "Germen", "Germer", "Germie", "Germy", "Gerran", "Gerren", "Gerrer", "Gerrie", "Gerry", "Gertan", "Gerten", "Gerter", "Gertie", "Gerty", "Gesan", "Gesen", "Geser", "Gesie", "Geskan", "Gesken", "Gesker", "Geskie", "Gesky", "Gessan", "Gessen", "Gesser", "Gessie", "Gessy", "Gesy", "Gethan", "Gethen", "Gether", "Gethie", "Gethy", "Gettan", "Getten", "Getter", "Gettie", "Getty", "Gexan", "Gexen", "Gexer", "Gexie", "Gexy", "Gezzan", "Gezzen", "Gezzer", "Gezzie", "Gezzy", "Habban", "Habben", "Habber", "Habbie", "Habby", "Hachan", "Hachen", "Hacher", "Hachie", "Hachy", "Hackan", "Hacken", "Hacker", "Hackie", "Hacky", "Haddan", "Hadden", "Hadder", "Haddie", "Haddy", "Hadgan", "Hadgen", "Hadger", "Hadgie", "Hadgy", "Haffan", "Haffen", "Haffer", "Haffie", "Haffy", "Hagan", "Hagen", "Hager", "Haggan", "Haggen", "Hagger", "Haggie", "Haggy", "Hagie", "Hagy", "Haksan", "Haksen", "Hakser", "Haksie", "Haksy", "Halan", "Halen", "Haler", "Halie", "Hallan", "Hallen", "Haller", "Hallie", "Hally", "Haly", "Haman", "Hamen", "Hamer", "Hamie", "Hamman", "Hammen", "Hammer", "Hammie", "Hammy", "Hamy", "Hanan", "Handan", "Handen", "Hander", "Handie", "Handy", "Hanen", "Haner", "Hanie", "Hannan", "Hannen", "Hanner", "Hannie", "Hanny", "Hany", "Hapan", "Hapen", "Haper", "Hapie", "Happan", "Happen", "Happer", "Happie", "Happy", "Hapsan", "Hapsen", "Hapser", "Hapsie", "Hapsy", "Hapy", "Hardan", "Harden", "Harder", "Hardie", "Hardy", "Harman", "Harmen", "Harmer", "Harmie", "Harmy", "Harran", "Harren", "Harrer", "Harrie", "Harry", "Hartan", "Harten", "Harter", "Hartie", "Harty", "Hasan", "Hasen", "Haser", "Hasie", "Haskan", "Hasken", "Hasker", "Haskie", "Hasky", "Hassan", "Hassen", "Hasser", "Hassie", "Hassy", "Hasy", "Hathan", "Hathen", "Hather", "Hathie", "Hathy", "Hattan", "Hatten", "Hatter", "Hattie", "Hatty", "Haxan", "Haxen", "Haxer", "Haxie", "Haxy", "Hazzan", "Hazzen", "Hazzer", "Hazzie", "Hazzy", "Jibban", "Jibben", "Jibber", "Jibbie", "Jibby", "Jichan", "Jichen", "Jicher", "Jichie", "Jichy", "Jickan", "Jicken", "Jicker", "Jickie", "Jicky", "Jiddan", "Jidden", "Jidder", "Jiddie", "Jiddy", "Jidgan", "Jidgen", "Jidger", "Jidgie", "Jidgy", "Jiffan", "Jiffen", "Jiffer", "Jiffie", "Jiffy", "Jigan", "Jigen", "Jiger", "Jiggan", "Jiggen", "Jigger", "Jiggie", "Jiggy", "Jigie", "Jigy", "Jiksan", "Jiksen", "Jikser", "Jiksie", "Jiksy", "Jilan", "Jilen", "Jiler", "Jilie", "Jillan", "Jillen", "Jiller", "Jillie", "Jilly", "Jily", "Jiman", "Jimen", "Jimer", "Jimie", "Jimman", "Jimmen", "Jimmer", "Jimmie", "Jimmy", "Jimy", "Jinan", "Jindan", "Jinden", "Jinder", "Jindie", "Jindy", "Jinen", "Jiner", "Jinie", "Jinnan", "Jinnen", "Jinner", "Jinnie", "Jinny", "Jiny", "Jipan", "Jipen", "Jiper", "Jipie", "Jippan", "Jippen", "Jipper", "Jippie", "Jippy", "Jipsan", "Jipsen", "Jipser", "Jipsie", "Jipsy", "Jipy", "Jirdan", "Jirden", "Jirder", "Jirdie", "Jirdy", "Jirman", "Jirmen", "Jirmer", "Jirmie", "Jirmy", "Jirran", "Jirren", "Jirrer", "Jirrie", "Jirry", "Jirtan", "Jirten", "Jirter", "Jirtie", "Jirty", "Jisan", "Jisen", "Jiser", "Jisie", "Jiskan", "Jisken", "Jisker", "Jiskie", "Jisky", "Jissan", "Jissen", "Jisser", "Jissie", "Jissy", "Jisy", "Jithan", "Jithen", "Jither", "Jithie", "Jithy", "Jittan", "Jitten", "Jitter", "Jittie", "Jitty", "Jixan", "Jixen", "Jixer", "Jixie", "Jixy", "Jizzan", "Jizzen", "Jizzer", "Jizzie", "Jizzy", "Kebban", "Kebben", "Kebber", "Kebbie", "Kebby", "Kechan", "Kechen", "Kecher", "Kechie", "Kechy", "Keckan", "Kecken", "Kecker", "Keckie", "Kecky", "Keddan", "Kedden", "Kedder", "Keddie", "Keddy", "Kedgan", "Kedgen", "Kedger", "Kedgie", "Kedgy", "Keffan", "Keffen", "Keffer", "Keffie", "Keffy", "Kegan", "Kegen", "Keger", "Keggan", "Keggen", "Kegger", "Keggie", "Keggy", "Kegie", "Kegy", "Keksan", "Keksen", "Kekser", "Keksie", "Keksy", "Kelan", "Kelen", "Keler", "Kelie", "Kellan", "Kellen", "Keller", "Kellie", "Kelly", "Kely", "Keman", "Kemen", "Kemer", "Kemie", "Kemman", "Kemmen", "Kemmer", "Kemmie", "Kemmy", "Kemy", "Kenan", "Kendan", "Kenden", "Kender", "Kendie", "Kendy", "Kenen", "Kener", "Kenie", "Kennan", "Kennen", "Kenner", "Kennie", "Kenny", "Keny", "Kepan", "Kepen", "Keper", "Kepie", "Keppan", "Keppen", "Kepper", "Keppie", "Keppy", "Kepsan", "Kepsen", "Kepser", "Kepsie", "Kepsy", "Kepy", "Kerdan", "Kerden", "Kerder", "Kerdie", "Kerdy", "Kerman", "Kermen", "Kermer", "Kermie", "Kermy", "Kerran", "Kerren", "Kerrer", "Kerrie", "Kerry", "Kertan", "Kerten", "Kerter", "Kertie", "Kerty", "Kesan", "Kesen", "Keser", "Kesie", "Keskan", "Kesken", "Kesker", "Keskie", "Kesky", "Kessan", "Kessen", "Kesser", "Kessie", "Kessy", "Kesy", "Kethan", "Kethen", "Kether", "Kethie", "Kethy", "Kettan", "Ketten", "Ketter", "Kettie", "Ketty", "Kexan", "Kexen", "Kexer", "Kexie", "Kexy", "Kezzan", "Kezzen", "Kezzer", "Kezzie", "Kezzy", "Kibban", "Kibben", "Kibber", "Kibbie", "Kibby", "Kichan", "Kichen", "Kicher", "Kichie", "Kichy", "Kickan", "Kicken", "Kicker", "Kickie", "Kicky", "Kiddan", "Kidden", "Kidder", "Kiddie", "Kiddy", "Kidgan", "Kidgen", "Kidger", "Kidgie", "Kidgy", "Kiffan", "Kiffen", "Kiffer", "Kiffie", "Kiffy", "Kigan", "Kigen", "Kiger", "Kiggan", "Kiggen", "Kigger", "Kiggie", "Kiggy", "Kigie", "Kigy", "Kiksan", "Kiksen", "Kikser", "Kiksie", "Kiksy", "Kilan", "Kilen", "Kiler", "Kilie", "Killan", "Killen", "Killer", "Killie", "Killy", "Kily", "Kiman", "Kimen", "Kimer", "Kimie", "Kimman", "Kimmen", "Kimmer", "Kimmie", "Kimmy", "Kimy", "Kinan", "Kindan", "Kinden", "Kinder", "Kindie", "Kindy", "Kinen", "Kiner", "Kinie", "Kinnan", "Kinnen", "Kinner", "Kinnie", "Kinny", "Kiny", "Kipan", "Kipen", "Kiper", "Kipie", "Kippan", "Kippen", "Kipper", "Kippie", "Kippy", "Kipsan", "Kipsen", "Kipser", "Kipsie", "Kipsy", "Kipy", "Kirdan", "Kirden", "Kirder", "Kirdie", "Kirdy", "Kirman", "Kirmen", "Kirmer", "Kirmie", "Kirmy", "Kirran", "Kirren", "Kirrer", "Kirrie", "Kirry", "Kirtan", "Kirten", "Kirter", "Kirtie", "Kirty", "Kisan", "Kisen", "Kiser", "Kisie", "Kiskan", "Kisken", "Kisker", "Kiskie", "Kisky", "Kissan", "Kissen", "Kisser", "Kissie", "Kissy", "Kisy", "Kithan", "Kithen", "Kither", "Kithie", "Kithy", "Kittan", "Kitten", "Kitter", "Kittie", "Kitty", "Kixan", "Kixen", "Kixer", "Kixie", "Kixy", "Kizzan", "Kizzen", "Kizzer", "Kizzie", "Kizzy", "Libban", "Libben", "Libber", "Libbie", "Libby", "Lichan", "Lichen", "Licher", "Lichie", "Lichy", "Lickan", "Licken", "Licker", "Lickie", "Licky", "Liddan", "Lidden", "Lidder", "Liddie", "Liddy", "Lidgan", "Lidgen", "Lidger", "Lidgie", "Lidgy", "Liffan", "Liffen", "Liffer", "Liffie", "Liffy", "Ligan", "Ligen", "Liger", "Liggan", "Liggen", "Ligger", "Liggie", "Liggy", "Ligie", "Ligy", "Liksan", "Liksen", "Likser", "Liksie", "Liksy", "Lilan", "Lilen", "Liler", "Lilie", "Lillan", "Lillen", "Liller", "Lillie", "Lilly", "Lily", "Liman", "Limen", "Limer", "Limie", "Limman", "Limmen", "Limmer", "Limmie", "Limmy", "Limy", "Linan", "Lindan", "Linden", "Linder", "Lindie", "Lindy", "Linen", "Liner", "Linie", "Linnan", "Linnen", "Linner", "Linnie", "Linny", "Liny", "Lipan", "Lipen", "Liper", "Lipie", "Lippan", "Lippen", "Lipper", "Lippie", "Lippy", "Lipsan", "Lipsen", "Lipser", "Lipsie", "Lipsy", "Lipy", "Lirdan", "Lirden", "Lirder", "Lirdie", "Lirdy", "Lirman", "Lirmen", "Lirmer", "Lirmie", "Lirmy", "Lirran", "Lirren", "Lirrer", "Lirrie", "Lirry", "Lirtan", "Lirten", "Lirter", "Lirtie", "Lirty", "Lisan", "Lisen", "Liser", "Lisie", "Liskan", "Lisken", "Lisker", "Liskie", "Lisky", "Lissan", "Lissen", "Lisser", "Lissie", "Lissy", "Lisy", "Lithan", "Lithen", "Lither", "Lithie", "Lithy", "Littan", "Litten", "Litter", "Littie", "Litty", "Lixan", "Lixen", "Lixer", "Lixie", "Lixy", "Lizzan", "Lizzen", "Lizzer", "Lizzie", "Lizzy", "Mabban", "Mabben", "Mabber", "Mabbie", "Mabby", "Machan", "Machen", "Macher", "Machie", "Machy", "Mackan", "Macken", "Macker", "Mackie", "Macky", "Maddan", "Madden", "Madder", "Maddie", "Maddy", "Madgan", "Madgen", "Madger", "Madgie", "Madgy", "Maffan", "Maffen", "Maffer", "Maffie", "Maffy", "Magan", "Magen", "Mager", "Maggan", "Maggen", "Magger", "Maggie", "Maggy", "Magie", "Magy", "Maksan", "Maksen", "Makser", "Maksie", "Maksy", "Malan", "Malen", "Maler", "Malie", "Mallan", "Mallen", "Maller", "Mallie", "Mally", "Maly", "Maman", "Mamen", "Mamer", "Mamie", "Mamman", "Mammen", "Mammer", "Mammie", "Mammy", "Mamy", "Manan", "Mandan", "Manden", "Mander", "Mandie", "Mandy", "Manen", "Maner", "Manie", "Mannan", "Mannen", "Manner", "Mannie", "Manny", "Many", "Mapan", "Mapen", "Maper", "Mapie", "Mappan", "Mappen", "Mapper", "Mappie", "Mappy", "Mapsan", "Mapsen", "Mapser", "Mapsie", "Mapsy", "Mapy", "Mardan", "Marden", "Marder", "Mardie", "Mardy", "Marman", "Marmen", "Marmer", "Marmie", "Marmy", "Marran", "Marren", "Marrer", "Marrie", "Marry", "Martan", "Marten", "Marter", "Martie", "Marty", "Masan", "Masen", "Maser", "Masie", "Maskan", "Masken", "Masker", "Maskie", "Masky", "Massan", "Massen", "Masser", "Massie", "Massy", "Masy", "Mathan", "Mathen", "Mather", "Mathie", "Mathy", "Mattan", "Matten", "Matter", "Mattie", "Matty", "Maxan", "Maxen", "Maxer", "Maxie", "Maxy", "Mazzan", "Mazzen", "Mazzer", "Mazzie", "Mazzy", "Pabban", "Pabben", "Pabber", "Pabbie", "Pabby", "Pachan", "Pachen", "Pacher", "Pachie", "Pachy", "Packan", "Packen", "Packer", "Packie", "Packy", "Paddan", "Padden", "Padder", "Paddie", "Paddy", "Padgan", "Padgen", "Padger", "Padgie", "Padgy", "Paffan", "Paffen", "Paffer", "Paffie", "Paffy", "Pagan", "Pagen", "Pager", "Paggan", "Paggen", "Pagger", "Paggie", "Paggy", "Pagie", "Pagy", "Paksan", "Paksen", "Pakser", "Paksie", "Paksy", "Palan", "Palen", "Paler", "Palie", "Pallan", "Pallen", "Paller", "Pallie", "Pally", "Paly", "Paman", "Pamen", "Pamer", "Pamie", "Pamman", "Pammen", "Pammer", "Pammie", "Pammy", "Pamy", "Panan", "Pandan", "Panden", "Pander", "Pandie", "Pandy", "Panen", "Paner", "Panie", "Pannan", "Pannen", "Panner", "Pannie", "Panny", "Pany", "Papan", "Papen", "Paper", "Papie", "Pappan", "Pappen", "Papper", "Pappie", "Pappy", "Papsan", "Papsen", "Papser", "Papsie", "Papsy", "Papy", "Pardan", "Parden", "Parder", "Pardie", "Pardy", "Parman", "Parmen", "Parmer", "Parmie", "Parmy", "Parran", "Parren", "Parrer", "Parrie", "Parry", "Partan", "Parten", "Parter", "Partie", "Party", "Pasan", "Pasen", "Paser", "Pasie", "Paskan", "Pasken", "Pasker", "Paskie", "Pasky", "Passan", "Passen", "Passer", "Passie", "Passy", "Pasy", "Pathan", "Pathen", "Pather", "Pathie", "Pathy", "Pattan", "Patten", "Patter", "Pattie", "Patty", "Paxan", "Paxen", "Paxer", "Paxie", "Paxy", "Pazzan", "Pazzen", "Pazzer", "Pazzie", "Pazzy", "Ribban", "Ribben", "Ribber", "Ribbie", "Ribby", "Richan", "Richen", "Richer", "Richie", "Richy", "Rickan", "Ricken", "Ricker", "Rickie", "Ricky", "Riddan", "Ridden", "Ridder", "Riddie", "Riddy", "Ridgan", "Ridgen", "Ridger", "Ridgie", "Ridgy", "Riffan", "Riffen", "Riffer", "Riffie", "Riffy", "Rigan", "Rigen", "Riger", "Riggan", "Riggen", "Rigger", "Riggie", "Riggy", "Rigie", "Rigy", "Riksan", "Riksen", "Rikser", "Riksie", "Riksy", "Rilan", "Rilen", "Riler", "Rilie", "Rillan", "Rillen", "Riller", "Rillie", "Rilly", "Rily", "Riman", "Rimen", "Rimer", "Rimie", "Rimman", "Rimmen", "Rimmer", "Rimmie", "Rimmy", "Rimy", "Rinan", "Rindan", "Rinden", "Rinder", "Rindie", "Rindy", "Rinen", "Riner", "Rinie", "Rinnan", "Rinnen", "Rinner", "Rinnie", "Rinny", "Riny", "Ripan", "Ripen", "Riper", "Ripie", "Rippan", "Rippen", "Ripper", "Rippie", "Rippy", "Ripsan", "Ripsen", "Ripser", "Ripsie", "Ripsy", "Ripy", "Rirdan", "Rirden", "Rirder", "Rirdie", "Rirdy", "Rirman", "Rirmen", "Rirmer", "Rirmie", "Rirmy", "Rirran", "Rirren", "Rirrer", "Rirrie", "Rirry", "Rirtan", "Rirten", "Rirter", "Rirtie", "Rirty", "Risan", "Risen", "Riser", "Risie", "Riskan", "Risken", "Risker", "Riskie", "Risky", "Rissan", "Rissen", "Risser", "Rissie", "Rissy", "Risy", "Rithan", "Rithen", "Rither", "Rithie", "Rithy", "Rittan", "Ritten", "Ritter", "Rittie", "Ritty", "Rixan", "Rixen", "Rixer", "Rixie", "Rixy", "Rizzan", "Rizzen", "Rizzer", "Rizzie", "Rizzy", "Robban", "Robben", "Robber", "Robbie", "Robby", "Rochan", "Rochen", "Rocher", "Rochie", "Rochy", "Rockan", "Rocken", "Rocker", "Rockie", "Rocky", "Roddan", "Rodden", "Rodder", "Roddie", "Roddy", "Rodgan", "Rodgen", "Rodger", "Rodgie", "Rodgy", "Roffan", "Roffen", "Roffer", "Roffie", "Roffy", "Rogan", "Rogen", "Roger", "Roggan", "Roggen", "Rogger", "Roggie", "Roggy", "Rogie", "Rogy", "Roksan", "Roksen", "Rokser", "Roksie", "Roksy", "Rolan", "Rolen", "Roler", "Rolie", "Rollan", "Rollen", "Roller", "Rollie", "Rolly", "Roly", "Roman", "Romen", "Romer", "Romie", "Romman", "Rommen", "Rommer", "Rommie", "Rommy", "Romy", "Ronan", "Rondan", "Ronden", "Ronder", "Rondie", "Rondy", "Ronen", "Roner", "Ronie", "Ronnan", "Ronnen", "Ronner", "Ronnie", "Ronny", "Rony", "Ropan", "Ropen", "Roper", "Ropie", "Roppan", "Roppen", "Ropper", "Roppie", "Roppy", "Ropsan", "Ropsen", "Ropser", "Ropsie", "Ropsy", "Ropy", "Rordan", "Rorden", "Rorder", "Rordie", "Rordy", "Rorman", "Rormen", "Rormer", "Rormie", "Rormy", "Rorran", "Rorren", "Rorrer", "Rorrie", "Rorry", "Rortan", "Rorten", "Rorter", "Rortie", "Rorty", "Rosan", "Rosen", "Roser", "Rosie", "Roskan", "Rosken", "Rosker", "Roskie", "Rosky", "Rossan", "Rossen", "Rosser", "Rossie", "Rossy", "Rosy", "Rothan", "Rothen", "Rother", "Rothie", "Rothy", "Rottan", "Rotten", "Rotter", "Rottie", "Rotty", "Roxan", "Roxen", "Roxer", "Roxie", "Roxy", "Rozzan", "Rozzen", "Rozzer", "Rozzie", "Rozzy", "Sabban", "Sabben", "Sabber", "Sabbie", "Sabby", "Sachan", "Sachen", "Sacher", "Sachie", "Sachy", "Sackan", "Sacken", "Sacker", "Sackie", "Sacky", "Saddan", "Sadden", "Sadder", "Saddie", "Saddy", "Sadgan", "Sadgen", "Sadger", "Sadgie", "Sadgy", "Saffan", "Saffen", "Saffer", "Saffie", "Saffy", "Sagan", "Sagen", "Sager", "Saggan", "Saggen", "Sagger", "Saggie", "Saggy", "Sagie", "Sagy", "Saksan", "Saksen", "Sakser", "Saksie", "Saksy", "Salan", "Salen", "Saler", "Salie", "Sallan", "Sallen", "Saller", "Sallie", "Sally", "Saly", "Saman", "Samen", "Samer", "Samie", "Samman", "Sammen", "Sammer", "Sammie", "Sammy", "Samy", "Sanan", "Sandan", "Sanden", "Sander", "Sandie", "Sandy", "Sanen", "Saner", "Sanie", "Sannan", "Sannen", "Sanner", "Sannie", "Sanny", "Sany", "Sapan", "Sapen", "Saper", "Sapie", "Sappan", "Sappen", "Sapper", "Sappie", "Sappy", "Sapsan", "Sapsen", "Sapser", "Sapsie", "Sapsy", "Sapy", "Sardan", "Sarden", "Sarder", "Sardie", "Sardy", "Sarman", "Sarmen", "Sarmer", "Sarmie", "Sarmy", "Sarran", "Sarren", "Sarrer", "Sarrie", "Sarry", "Sartan", "Sarten", "Sarter", "Sartie", "Sarty", "Sasan", "Sasen", "Saser", "Sasie", "Saskan", "Sasken", "Sasker", "Saskie", "Sasky", "Sassan", "Sassen", "Sasser", "Sassie", "Sassy", "Sasy", "Sathan", "Sathen", "Sather", "Sathie", "Sathy", "Sattan", "Satten", "Satter", "Sattie", "Satty", "Saxan", "Saxen", "Saxer", "Saxie", "Saxy", "Sazzan", "Sazzen", "Sazzer", "Sazzie", "Sazzy", "Shabban", "Shabben", "Shabber", "Shabbie", "Shabby", "Shachan", "Shachen", "Shacher", "Shachie", "Shachy", "Shackan", "Shacken", "Shacker", "Shackie", "Shacky", "Shaddan", "Shadden", "Shadder", "Shaddie", "Shaddy", "Shadgan", "Shadgen", "Shadger", "Shadgie", "Shadgy", "Shaffan", "Shaffen", "Shaffer", "Shaffie", "Shaffy", "Shagan", "Shagen", "Shager", "Shaggan", "Shaggen", "Shagger", "Shaggie", "Shaggy", "Shagie", "Shagy", "Shaksan", "Shaksen", "Shakser", "Shaksie", "Shaksy", "Shalan", "Shalen", "Shaler", "Shalie", "Shallan", "Shallen", "Shaller", "Shallie", "Shally", "Shaly", "Shaman", "Shamen", "Shamer", "Shamie", "Shamman", "Shammen", "Shammer", "Shammie", "Shammy", "Shamy", "Shanan", "Shandan", "Shanden", "Shander", "Shandie", "Shandy", "Shanen", "Shaner", "Shanie", "Shannan", "Shannen", "Shanner", "Shannie", "Shanny", "Shany", "Shapan", "Shapen", "Shaper", "Shapie", "Shappan", "Shappen", "Shapper", "Shappie", "Shappy", "Shapsan", "Shapsen", "Shapser", "Shapsie", "Shapsy", "Shapy", "Shardan", "Sharden", "Sharder", "Shardie", "Shardy", "Sharman", "Sharmen", "Sharmer", "Sharmie", "Sharmy", "Sharran", "Sharren", "Sharrer", "Sharrie", "Sharry", "Shartan", "Sharten", "Sharter", "Shartie", "Sharty", "Shasan", "Shasen", "Shaser", "Shasie", "Shaskan", "Shasken", "Shasker", "Shaskie", "Shasky", "Shassan", "Shassen", "Shasser", "Shassie", "Shassy", "Shasy", "Shathan", "Shathen", "Shather", "Shathie", "Shathy", "Shattan", "Shatten", "Shatter", "Shattie", "Shatty", "Shaxan", "Shaxen", "Shaxer", "Shaxie", "Shaxy", "Shazzan", "Shazzen", "Shazzer", "Shazzie", "Shazzy", "Shibban", "Shibben", "Shibber", "Shibbie", "Shibby", "Shichan", "Shichen", "Shicher", "Shichie", "Shichy", "Shickan", "Shicken", "Shicker", "Shickie", "Shicky", "Shiddan", "Shidden", "Shidder", "Shiddie", "Shiddy", "Shidgan", "Shidgen", "Shidger", "Shidgie", "Shidgy", "Shiffan", "Shiffen", "Shiffer", "Shiffie", "Shiffy", "Shigan", "Shigen", "Shiger", "Shiggan", "Shiggen", "Shigger", "Shiggie", "Shiggy", "Shigie", "Shigy", "Shiksan", "Shiksen", "Shikser", "Shiksie", "Shiksy", "Shilan", "Shilen", "Shiler", "Shilie", "Shillan", "Shillen", "Shiller", "Shillie", "Shilly", "Shily", "Shiman", "Shimen", "Shimer", "Shimie", "Shimman", "Shimmen", "Shimmer", "Shimmie", "Shimmy", "Shimy", "Shinan", "Shindan", "Shinden", "Shinder", "Shindie", "Shindy", "Shinen", "Shiner", "Shinie", "Shinnan", "Shinnen", "Shinner", "Shinnie", "Shinny", "Shiny", "Shipan", "Shipen", "Shiper", "Shipie", "Shippan", "Shippen", "Shipper", "Shippie", "Shippy", "Shipsan", "Shipsen", "Shipser", "Shipsie", "Shipsy", "Shipy", "Shirdan", "Shirden", "Shirder", "Shirdie", "Shirdy", "Shirman", "Shirmen", "Shirmer", "Shirmie", "Shirmy", "Shirran", "Shirren", "Shirrer", "Shirrie", "Shirry", "Shirtan", "Shirten", "Shirter", "Shirtie", "Shirty", "Shisan", "Shisen", "Shiser", "Shisie", "Shiskan", "Shisken", "Shisker", "Shiskie", "Shisky", "Shissan", "Shissen", "Shisser", "Shissie", "Shissy", "Shisy", "Shithan", "Shithen", "Shither", "Shithie", "Shithy", "Shittan", "Shitten", "Shitter", "Shittie", "Shitty", "Shixan", "Shixen", "Shixer", "Shixie", "Shixy", "Shizzan", "Shizzen", "Shizzer", "Shizzie", "Shizzy", "Thobban", "Thobben", "Thobber", "Thobbie", "Thobby", "Thochan", "Thochen", "Thocher", "Thochie", "Thochy", "Thockan", "Thocken", "Thocker", "Thockie", "Thocky", "Thoddan", "Thodden", "Thodder", "Thoddie", "Thoddy", "Thodgan", "Thodgen", "Thodger", "Thodgie", "Thodgy", "Thoffan", "Thoffen", "Thoffer", "Thoffie", "Thoffy", "Thogan", "Thogen", "Thoger", "Thoggan", "Thoggen", "Thogger", "Thoggie", "Thoggy", "Thogie", "Thogy", "Thoksan", "Thoksen", "Thokser", "Thoksie", "Thoksy", "Tholan", "Tholen", "Tholer", "Tholie", "Thollan", "Thollen", "Tholler", "Thollie", "Tholly", "Tholy", "Thoman", "Thomen", "Thomer", "Thomie", "Thomman", "Thommen", "Thommer", "Thommie", "Thommy", "Thomy", "Thonan", "Thondan", "Thonden", "Thonder", "Thondie", "Thondy", "Thonen", "Thoner", "Thonie", "Thonnan", "Thonnen", "Thonner", "Thonnie", "Thonny", "Thony", "Thopan", "Thopen", "Thoper", "Thopie", "Thoppan", "Thoppen", "Thopper", "Thoppie", "Thoppy", "Thopsan", "Thopsen", "Thopser", "Thopsie", "Thopsy", "Thopy", "Thordan", "Thorden", "Thorder", "Thordie", "Thordy", "Thorman", "Thormen", "Thormer", "Thormie", "Thormy", "Thorran", "Thorren", "Thorrer", "Thorrie", "Thorry", "Thortan", "Thorten", "Thorter", "Thortie", "Thorty", "Thosan", "Thosen", "Thoser", "Thosie", "Thoskan", "Thosken", "Thosker", "Thoskie", "Thosky", "Thossan", "Thossen", "Thosser", "Thossie", "Thossy", "Thosy", "Thothan", "Thothen", "Thother", "Thothie", "Thothy", "Thottan", "Thotten", "Thotter", "Thottie", "Thotty", "Thoxan", "Thoxen", "Thoxer", "Thoxie", "Thoxy", "Thozzan", "Thozzen", "Thozzer", "Thozzie", "Thozzy", "Wibban", "Wibben", "Wibber", "Wibbie", "Wibby", "Wichan", "Wichen", "Wicher", "Wichie", "Wichy", "Wickan", "Wicken", "Wicker", "Wickie", "Wicky", "Widdan", "Widden", "Widder", "Widdie", "Widdy", "Widgan", "Widgen", "Widger", "Widgie", "Widgy", "Wiffan", "Wiffen", "Wiffer", "Wiffie", "Wiffy", "Wigan", "Wigen", "Wiger", "Wiggan", "Wiggen", "Wigger", "Wiggie", "Wiggy", "Wigie", "Wigy", "Wiksan", "Wiksen", "Wikser", "Wiksie", "Wiksy", "Wilan", "Wilen", "Wiler", "Wilie", "Willan", "Willen", "Willer", "Willie", "Willy", "Wily", "Wiman", "Wimen", "Wimer", "Wimie", "Wimman", "Wimmen", "Wimmer", "Wimmie", "Wimmy", "Wimy", "Winan", "Windan", "Winden", "Winder", "Windie", "Windy", "Winen", "Winer", "Winie", "Winnan", "Winnen", "Winner", "Winnie", "Winny", "Winy", "Wipan", "Wipen", "Wiper", "Wipie", "Wippan", "Wippen", "Wipper", "Wippie", "Wippy", "Wipsan", "Wipsen", "Wipser", "Wipsie", "Wipsy", "Wipy", "Wirdan", "Wirden", "Wirder", "Wirdie", "Wirdy", "Wirman", "Wirmen", "Wirmer", "Wirmie", "Wirmy", "Wirran", "Wirren", "Wirrer", "Wirrie", "Wirry", "Wirtan", "Wirten", "Wirter", "Wirtie", "Wirty", "Wisan", "Wisen", "Wiser", "Wisie", "Wiskan", "Wisken", "Wisker", "Wiskie", "Wisky", "Wissan", "Wissen", "Wisser", "Wissie", "Wissy", "Wisy", "Withan", "Withen", "Wither", "Withie", "Withy", "Wittan", "Witten", "Witter", "Wittie", "Witty", "Wixan", "Wixen", "Wixer", "Wixie", "Wixy", "Wizzan", "Wizzen", "Wizzer", "Wizzie", "Wizzy"}
-trykerLastNames = {"Ardan", "Arddy", "Arer", "Arffy", "Argan", "Arggan", "Argh", "Arghan", "Arins", "Arkry", "Arlan", "Arle", "Arley", "Arliam", "Arlly", "Arn", "Arnin", "Arny", "Arppy", "Arpsey", "Arra", "Arroy", "Arrrell", "Arrroy", "Arry", "Arssey", "Artty", "Arty", "Ba'ardan", "Ba'arddy", "Ba'arer", "Ba'arffy", "Ba'argan", "Ba'arggan", "Ba'argh", "Ba'arghan", "Ba'arins", "Ba'arkry", "Ba'arlan", "Ba'arle", "Ba'arley", "Ba'arliam", "Ba'arlly", "Ba'arn", "Ba'arnin", "Ba'arny", "Ba'arppy", "Ba'arpsey", "Ba'arra", "Ba'arroy", "Ba'arrrell", "Ba'arrroy", "Ba'arry", "Ba'arssey", "Ba'artty", "Ba'arty", "Ba'bidan", "Ba'biddy", "Ba'bier", "Ba'biffy", "Ba'bigan", "Ba'biggan", "Ba'bigh", "Ba'bighan", "Ba'biins", "Ba'bikry", "Ba'bilan", "Ba'bile", "Ba'biley", "Ba'biliam", "Ba'billy", "Ba'bin", "Ba'binin", "Ba'biny", "Ba'bippy", "Ba'bipsey", "Ba'bira", "Ba'biroy", "Ba'birrell", "Ba'birroy", "Ba'biry", "Ba'bissey", "Ba'bitty", "Ba'bity", "Ba'caudan", "Ba'cauddy", "Ba'cauer", "Ba'cauffy", "Ba'caugan", "Ba'cauggan", "Ba'caugh", "Ba'caughan", "Ba'cauins", "Ba'caukry", "Ba'caulan", "Ba'caule", "Ba'cauley", "Ba'cauliam", "Ba'caully", "Ba'caun", "Ba'caunin", "Ba'cauny", "Ba'cauppy", "Ba'caupsey", "Ba'caura", "Ba'cauroy", "Ba'caurrell", "Ba'caurroy", "Ba'caury", "Ba'caussey", "Ba'cautty", "Ba'cauty", "Ba'dadan", "Ba'daddy", "Ba'daer", "Ba'daffy", "Ba'dagan", "Ba'daggan", "Ba'dagh", "Ba'daghan", "Ba'dains", "Ba'dakry", "Ba'dalan", "Ba'dale", "Ba'daley", "Ba'daliam", "Ba'dally", "Ba'dan", "Ba'danin", "Ba'dany", "Ba'dappy", "Ba'dapsey", "Ba'dara", "Ba'dardan", "Ba'darddy", "Ba'darer", "Ba'darffy", "Ba'dargan", "Ba'darggan", "Ba'dargh", "Ba'darghan", "Ba'darins", "Ba'darkry", "Ba'darlan", "Ba'darle", "Ba'darley", "Ba'darliam", "Ba'darlly", "Ba'darn", "Ba'darnin", "Ba'darny", "Ba'daroy", "Ba'darppy", "Ba'darpsey", "Ba'darra", "Ba'darrell", "Ba'darroy", "Ba'darrrell", "Ba'darrroy", "Ba'darry", "Ba'darssey", "Ba'dartty", "Ba'darty", "Ba'dary", "Ba'dassey", "Ba'datty", "Ba'daty", "Ba'doydan", "Ba'doyddy", "Ba'doyer", "Ba'doyffy", "Ba'doygan", "Ba'doyggan", "Ba'doygh", "Ba'doyghan", "Ba'doyins", "Ba'doykry", "Ba'doylan", "Ba'doyle", "Ba'doyley", "Ba'doyliam", "Ba'doylly", "Ba'doyn", "Ba'doynin", "Ba'doyny", "Ba'doyppy", "Ba'doypsey", "Ba'doyra", "Ba'doyroy", "Ba'doyrrell", "Ba'doyrroy", "Ba'doyry", "Ba'doyssey", "Ba'doytty", "Ba'doyty", "Ba'dudan", "Ba'duddy", "Ba'duer", "Ba'duffy", "Ba'dugan", "Ba'duggan", "Ba'dugh", "Ba'dughan", "Ba'duins", "Ba'dukry", "Ba'dulan", "Ba'dule", "Ba'duley", "Ba'duliam", "Ba'dully", "Ba'dun", "Ba'dunin", "Ba'duny", "Ba'duppy", "Ba'dupsey", "Ba'dura", "Ba'duroy", "Ba'durrell", "Ba'durroy", "Ba'dury", "Ba'dussey", "Ba'dutty", "Ba'duty", "Ba'gadan", "Ba'gaddy", "Ba'gaer", "Ba'gaffy", "Ba'gagan", "Ba'gaggan", "Ba'gagh", "Ba'gaghan", "Ba'gains", "Ba'gakry", "Ba'galan", "Ba'gale", "Ba'galey", "Ba'galiam", "Ba'gally", "Ba'gan", "Ba'ganin", "Ba'gany", "Ba'gappy", "Ba'gapsey", "Ba'gara", "Ba'garoy", "Ba'garrell", "Ba'garroy", "Ba'gary", "Ba'gassey", "Ba'gatty", "Ba'gaty", "Ba'jordan", "Ba'jorddy", "Ba'jorer", "Ba'jorffy", "Ba'jorgan", "Ba'jorggan", "Ba'jorgh", "Ba'jorghan", "Ba'jorins", "Ba'jorkry", "Ba'jorlan", "Ba'jorle", "Ba'jorley", "Ba'jorliam", "Ba'jorlly", "Ba'jorn", "Ba'jornin", "Ba'jorny", "Ba'jorppy", "Ba'jorpsey", "Ba'jorra", "Ba'jorroy", "Ba'jorrrell", "Ba'jorrroy", "Ba'jorry", "Ba'jorssey", "Ba'jortty", "Ba'jorty", "Ba'keadan", "Ba'keaddy", "Ba'keaer", "Ba'keaffy", "Ba'keagan", "Ba'keaggan", "Ba'keagh", "Ba'keaghan", "Ba'keains", "Ba'keakry", "Ba'kealan", "Ba'keale", "Ba'kealey", "Ba'kealiam", "Ba'keally", "Ba'kean", "Ba'keanin", "Ba'keany", "Ba'keappy", "Ba'keapsey", "Ba'keara", "Ba'kearoy", "Ba'kearrell", "Ba'kearroy", "Ba'keary", "Ba'keassey", "Ba'keatty", "Ba'keaty", "Ba'keedan", "Ba'keeddy", "Ba'keeer", "Ba'keeffy", "Ba'keegan", "Ba'keeggan", "Ba'keegh", "Ba'keeghan", "Ba'keeins", "Ba'keekry", "Ba'keelan", "Ba'keele", "Ba'keeley", "Ba'keeliam", "Ba'keelly", "Ba'keen", "Ba'keenin", "Ba'keeny", "Ba'keeppy", "Ba'keepsey", "Ba'keera", "Ba'keeroy", "Ba'keerrell", "Ba'keerroy", "Ba'keery", "Ba'keessey", "Ba'keetty", "Ba'keety", "Ba'laudan", "Ba'lauddy", "Ba'lauer", "Ba'lauffy", "Ba'laugan", "Ba'lauggan", "Ba'laugh", "Ba'laughan", "Ba'lauins", "Ba'laukry", "Ba'laulan", "Ba'laule", "Ba'lauley", "Ba'lauliam", "Ba'laully", "Ba'laun", "Ba'launin", "Ba'launy", "Ba'lauppy", "Ba'laupsey", "Ba'laura", "Ba'lauroy", "Ba'laurrell", "Ba'laurroy", "Ba'laury", "Ba'laussey", "Ba'lautty", "Ba'lauty", "Ba'leadan", "Ba'leaddy", "Ba'leaer", "Ba'leaffy", "Ba'leagan", "Ba'leaggan", "Ba'leagh", "Ba'leaghan", "Ba'leains", "Ba'leakry", "Ba'lealan", "Ba'leale", "Ba'lealey", "Ba'lealiam", "Ba'leally", "Ba'lean", "Ba'leanin", "Ba'leany", "Ba'leappy", "Ba'leapsey", "Ba'leara", "Ba'learoy", "Ba'learrell", "Ba'learroy", "Ba'leary", "Ba'leassey", "Ba'leatty", "Ba'leaty", "Ba'ledan", "Ba'leddy", "Ba'leer", "Ba'leffy", "Ba'legan", "Ba'leggan", "Ba'legh", "Ba'leghan", "Ba'leidan", "Ba'leiddy", "Ba'leier", "Ba'leiffy", "Ba'leigan", "Ba'leiggan", "Ba'leigh", "Ba'leighan", "Ba'leiins", "Ba'leikry", "Ba'leilan", "Ba'leile", "Ba'leiley", "Ba'leiliam", "Ba'leilly", "Ba'lein", "Ba'leinin", "Ba'leins", "Ba'leiny", "Ba'leippy", "Ba'leipsey", "Ba'leira", "Ba'leiroy", "Ba'leirrell", "Ba'leirroy", "Ba'leiry", "Ba'leissey", "Ba'leitty", "Ba'leity", "Ba'lekry", "Ba'lelan", "Ba'lele", "Ba'leley", "Ba'leliam", "Ba'lelly", "Ba'len", "Ba'lenin", "Ba'leny", "Ba'leppy", "Ba'lepsey", "Ba'lera", "Ba'leroy", "Ba'lerrell", "Ba'lerroy", "Ba'lery", "Ba'lessey", "Ba'letty", "Ba'lety", "Ba'lodan", "Ba'loddy", "Ba'loer", "Ba'loffy", "Ba'logan", "Ba'loggan", "Ba'logh", "Ba'loghan", "Ba'loins", "Ba'lokry", "Ba'lolan", "Ba'lole", "Ba'loley", "Ba'loliam", "Ba'lolly", "Ba'lon", "Ba'lonin", "Ba'lony", "Ba'loppy", "Ba'lopsey", "Ba'lora", "Ba'loroy", "Ba'lorrell", "Ba'lorroy", "Ba'lory", "Ba'lossey", "Ba'lotty", "Ba'loty", "Ba'lyndan", "Ba'lynddy", "Ba'lyner", "Ba'lynffy", "Ba'lyngan", "Ba'lynggan", "Ba'lyngh", "Ba'lynghan", "Ba'lynins", "Ba'lynkry", "Ba'lynlan", "Ba'lynle", "Ba'lynley", "Ba'lynliam", "Ba'lynlly", "Ba'lynn", "Ba'lynnin", "Ba'lynny", "Ba'lynppy", "Ba'lynpsey", "Ba'lynra", "Ba'lynroy", "Ba'lynrrell", "Ba'lynrroy", "Ba'lynry", "Ba'lynssey", "Ba'lyntty", "Ba'lynty", "Ba'madan", "Ba'maddy", "Ba'maer", "Ba'maffy", "Ba'magan", "Ba'maggan", "Ba'magh", "Ba'maghan", "Ba'mains", "Ba'makry", "Ba'malan", "Ba'male", "Ba'maley", "Ba'maliam", "Ba'mally", "Ba'man", "Ba'manin", "Ba'many", "Ba'mappy", "Ba'mapsey", "Ba'mara", "Ba'maroy", "Ba'marrell", "Ba'marroy", "Ba'mary", "Ba'massey", "Ba'matty", "Ba'maty", "Ba'nadan", "Ba'naddy", "Ba'naer", "Ba'naffy", "Ba'nagan", "Ba'naggan", "Ba'nagh", "Ba'naghan", "Ba'nains", "Ba'nakry", "Ba'nalan", "Ba'nale", "Ba'naley", "Ba'naliam", "Ba'nally", "Ba'nan", "Ba'nanin", "Ba'nany", "Ba'nappy", "Ba'napsey", "Ba'nara", "Ba'naroy", "Ba'narrell", "Ba'narroy", "Ba'nary", "Ba'nassey", "Ba'natty", "Ba'naty", "Ba'nedan", "Ba'neddy", "Ba'neer", "Ba'neffy", "Ba'negan", "Ba'neggan", "Ba'negh", "Ba'neghan", "Ba'neins", "Ba'nekry", "Ba'nelan", "Ba'nele", "Ba'neley", "Ba'neliam", "Ba'nelly", "Ba'nen", "Ba'nenin", "Ba'neny", "Ba'neppy", "Ba'nepsey", "Ba'nera", "Ba'neroy", "Ba'nerrell", "Ba'nerroy", "Ba'nery", "Ba'nessey", "Ba'netty", "Ba'nety", "Ba'peadan", "Ba'peaddy", "Ba'peaer", "Ba'peaffy", "Ba'peagan", "Ba'peaggan", "Ba'peagh", "Ba'peaghan", "Ba'peains", "Ba'peakry", "Ba'pealan", "Ba'peale", "Ba'pealey", "Ba'pealiam", "Ba'peally", "Ba'pean", "Ba'peanin", "Ba'peany", "Ba'peappy", "Ba'peapsey", "Ba'peara", "Ba'pearoy", "Ba'pearrell", "Ba'pearroy", "Ba'peary", "Ba'peassey", "Ba'peatty", "Ba'peaty", "Ba'reidan", "Ba'reiddy", "Ba'reier", "Ba'reiffy", "Ba'reigan", "Ba'reiggan", "Ba'reigh", "Ba'reighan", "Ba'reiins", "Ba'reikry", "Ba'reilan", "Ba'reile", "Ba'reiley", "Ba'reiliam", "Ba'reilly", "Ba'rein", "Ba'reinin", "Ba'reiny", "Ba'reippy", "Ba'reipsey", "Ba'reira", "Ba'reiroy", "Ba'reirrell", "Ba'reirroy", "Ba'reiry", "Ba'reissey", "Ba'reitty", "Ba'reity", "Ba'ridan", "Ba'riddy", "Ba'rier", "Ba'riffy", "Ba'rigan", "Ba'riggan", "Ba'righ", "Ba'righan", "Ba'riins", "Ba'rikry", "Ba'rilan", "Ba'rile", "Ba'riley", "Ba'riliam", "Ba'rilly", "Ba'rin", "Ba'rinin", "Ba'riny", "Ba'ripdan", "Ba'ripddy", "Ba'riper", "Ba'ripffy", "Ba'ripgan", "Ba'ripggan", "Ba'ripgh", "Ba'ripghan", "Ba'ripins", "Ba'ripkry", "Ba'riplan", "Ba'riple", "Ba'ripley", "Ba'ripliam", "Ba'riplly", "Ba'ripn", "Ba'ripnin", "Ba'ripny", "Ba'ripppy", "Ba'rippsey", "Ba'rippy", "Ba'ripra", "Ba'riproy", "Ba'riprrell", "Ba'riprroy", "Ba'ripry", "Ba'ripsey", "Ba'ripssey", "Ba'riptty", "Ba'ripty", "Ba'rira", "Ba'riroy", "Ba'rirrell", "Ba'rirroy", "Ba'riry", "Ba'rissey", "Ba'ritty", "Ba'rity", "Ba'rodan", "Ba'roddy", "Ba'roer", "Ba'roffy", "Ba'rogan", "Ba'roggan", "Ba'rogh", "Ba'roghan", "Ba'roins", "Ba'rokry", "Ba'rolan", "Ba'role", "Ba'roley", "Ba'roliam", "Ba'rolly", "Ba'ron", "Ba'ronin", "Ba'rony", "Ba'roppy", "Ba'ropsey", "Ba'rora", "Ba'roroy", "Ba'rorrell", "Ba'rorroy", "Ba'rory", "Ba'rossey", "Ba'rotty", "Ba'roty", "Ba'sadan", "Ba'saddy", "Ba'saer", "Ba'saffy", "Ba'sagan", "Ba'saggan", "Ba'sagh", "Ba'saghan", "Ba'sains", "Ba'sakry", "Ba'salan", "Ba'sale", "Ba'saley", "Ba'saliam", "Ba'sally", "Ba'san", "Ba'sanin", "Ba'sany", "Ba'sappy", "Ba'sapsey", "Ba'sara", "Ba'saroy", "Ba'sarrell", "Ba'sarroy", "Ba'sary", "Ba'sassey", "Ba'satty", "Ba'saty", "Ba'shedan", "Ba'sheddy", "Ba'sheer", "Ba'sheffy", "Ba'shegan", "Ba'sheggan", "Ba'shegh", "Ba'sheghan", "Ba'sheins", "Ba'shekry", "Ba'shelan", "Ba'shele", "Ba'sheley", "Ba'sheliam", "Ba'shelly", "Ba'shen", "Ba'shenin", "Ba'sheny", "Ba'sheppy", "Ba'shepsey", "Ba'shera", "Ba'sheroy", "Ba'sherrell", "Ba'sherroy", "Ba'shery", "Ba'shessey", "Ba'shetty", "Ba'shety", "Ba'tedan", "Ba'teddy", "Ba'teer", "Ba'teffy", "Ba'tegan", "Ba'teggan", "Ba'tegh", "Ba'teghan", "Ba'teins", "Ba'tekry", "Ba'telan", "Ba'tele", "Ba'teley", "Ba'teliam", "Ba'telly", "Ba'ten", "Ba'tenin", "Ba'teny", "Ba'teppy", "Ba'tepsey", "Ba'tera", "Ba'teroy", "Ba'terrell", "Ba'terroy", "Ba'tery", "Ba'tessey", "Ba'tetty", "Ba'tety", "Ba'toodan", "Ba'tooddy", "Ba'tooer", "Ba'tooffy", "Ba'toogan", "Ba'tooggan", "Ba'toogh", "Ba'tooghan", "Ba'tooins", "Ba'tookry", "Ba'toolan", "Ba'toole", "Ba'tooley", "Ba'tooliam", "Ba'toolly", "Ba'toon", "Ba'toonin", "Ba'toony", "Ba'tooppy", "Ba'toopsey", "Ba'toora", "Ba'tooroy", "Ba'toorrell", "Ba'toorroy", "Ba'toory", "Ba'toossey", "Ba'tootty", "Ba'tooty", "Ba'widan", "Ba'widdy", "Ba'wier", "Ba'wiffy", "Ba'wigan", "Ba'wiggan", "Ba'wigh", "Ba'wighan", "Ba'wiins", "Ba'wikry", "Ba'wilan", "Ba'wile", "Ba'wiley", "Ba'wiliam", "Ba'willy", "Ba'win", "Ba'winin", "Ba'winy", "Ba'wippy", "Ba'wipsey", "Ba'wira", "Ba'wiroy", "Ba'wirrell", "Ba'wirroy", "Ba'wiry", "Ba'wissey", "Ba'witty", "Ba'wity", "Ba'ydan", "Ba'yddy", "Ba'yer", "Ba'yffy", "Ba'ygan", "Ba'yggan", "Ba'ygh", "Ba'yghan", "Ba'yins", "Ba'ykry", "Ba'ylan", "Ba'yle", "Ba'yley", "Ba'yliam", "Ba'ylly", "Ba'yn", "Ba'ynin", "Ba'yny", "Ba'yppy", "Ba'ypsey", "Ba'yra", "Ba'yroy", "Ba'yrrell", "Ba'yrroy", "Ba'yry", "Ba'yssey", "Ba'ytty", "Ba'yty", "Be'ardan", "Be'arddy", "Be'arer", "Be'arffy", "Be'argan", "Be'arggan", "Be'argh", "Be'arghan", "Be'arins", "Be'arkry", "Be'arlan", "Be'arle", "Be'arley", "Be'arliam", "Be'arlly", "Be'arn", "Be'arnin", "Be'arny", "Be'arppy", "Be'arpsey", "Be'arra", "Be'arroy", "Be'arrrell", "Be'arrroy", "Be'arry", "Be'arssey", "Be'artty", "Be'arty", "Be'bidan", "Be'biddy", "Be'bier", "Be'biffy", "Be'bigan", "Be'biggan", "Be'bigh", "Be'bighan", "Be'biins", "Be'bikry", "Be'bilan", "Be'bile", "Be'biley", "Be'biliam", "Be'billy", "Be'bin", "Be'binin", "Be'biny", "Be'bippy", "Be'bipsey", "Be'bira", "Be'biroy", "Be'birrell", "Be'birroy", "Be'biry", "Be'bissey", "Be'bitty", "Be'bity", "Be'caudan", "Be'cauddy", "Be'cauer", "Be'cauffy", "Be'caugan", "Be'cauggan", "Be'caugh", "Be'caughan", "Be'cauins", "Be'caukry", "Be'caulan", "Be'caule", "Be'cauley", "Be'cauliam", "Be'caully", "Be'caun", "Be'caunin", "Be'cauny", "Be'cauppy", "Be'caupsey", "Be'caura", "Be'cauroy", "Be'caurrell", "Be'caurroy", "Be'caury", "Be'caussey", "Be'cautty", "Be'cauty", "Be'dadan", "Be'daddy", "Be'daer", "Be'daffy", "Be'dagan", "Be'daggan", "Be'dagh", "Be'daghan", "Be'dains", "Be'dakry", "Be'dalan", "Be'dale", "Be'daley", "Be'daliam", "Be'dally", "Be'dan", "Be'danin", "Be'dany", "Be'dappy", "Be'dapsey", "Be'dara", "Be'dardan", "Be'darddy", "Be'darer", "Be'darffy", "Be'dargan", "Be'darggan", "Be'dargh", "Be'darghan", "Be'darins", "Be'darkry", "Be'darlan", "Be'darle", "Be'darley", "Be'darliam", "Be'darlly", "Be'darn", "Be'darnin", "Be'darny", "Be'daroy", "Be'darppy", "Be'darpsey", "Be'darra", "Be'darrell", "Be'darroy", "Be'darrrell", "Be'darrroy", "Be'darry", "Be'darssey", "Be'dartty", "Be'darty", "Be'dary", "Be'dassey", "Be'datty", "Be'daty", "Be'doydan", "Be'doyddy", "Be'doyer", "Be'doyffy", "Be'doygan", "Be'doyggan", "Be'doygh", "Be'doyghan", "Be'doyins", "Be'doykry", "Be'doylan", "Be'doyle", "Be'doyley", "Be'doyliam", "Be'doylly", "Be'doyn", "Be'doynin", "Be'doyny", "Be'doyppy", "Be'doypsey", "Be'doyra", "Be'doyroy", "Be'doyrrell", "Be'doyrroy", "Be'doyry", "Be'doyssey", "Be'doytty", "Be'doyty", "Be'dudan", "Be'duddy", "Be'duer", "Be'duffy", "Be'dugan", "Be'duggan", "Be'dugh", "Be'dughan", "Be'duins", "Be'dukry", "Be'dulan", "Be'dule", "Be'duley", "Be'duliam", "Be'dully", "Be'dun", "Be'dunin", "Be'duny", "Be'duppy", "Be'dupsey", "Be'dura", "Be'duroy", "Be'durrell", "Be'durroy", "Be'dury", "Be'dussey", "Be'dutty", "Be'duty", "Be'gadan", "Be'gaddy", "Be'gaer", "Be'gaffy", "Be'gagan", "Be'gaggan", "Be'gagh", "Be'gaghan", "Be'gains", "Be'gakry", "Be'galan", "Be'gale", "Be'galey", "Be'galiam", "Be'gally", "Be'gan", "Be'ganin", "Be'gany", "Be'gappy", "Be'gapsey", "Be'gara", "Be'garoy", "Be'garrell", "Be'garroy", "Be'gary", "Be'gassey", "Be'gatty", "Be'gaty", "Be'jordan", "Be'jorddy", "Be'jorer", "Be'jorffy", "Be'jorgan", "Be'jorggan", "Be'jorgh", "Be'jorghan", "Be'jorins", "Be'jorkry", "Be'jorlan", "Be'jorle", "Be'jorley", "Be'jorliam", "Be'jorlly", "Be'jorn", "Be'jornin", "Be'jorny", "Be'jorppy", "Be'jorpsey", "Be'jorra", "Be'jorroy", "Be'jorrrell", "Be'jorrroy", "Be'jorry", "Be'jorssey", "Be'jortty", "Be'jorty", "Be'keadan", "Be'keaddy", "Be'keaer", "Be'keaffy", "Be'keagan", "Be'keaggan", "Be'keagh", "Be'keaghan", "Be'keains", "Be'keakry", "Be'kealan", "Be'keale", "Be'kealey", "Be'kealiam", "Be'keally", "Be'kean", "Be'keanin", "Be'keany", "Be'keappy", "Be'keapsey", "Be'keara", "Be'kearoy", "Be'kearrell", "Be'kearroy", "Be'keary", "Be'keassey", "Be'keatty", "Be'keaty", "Be'keedan", "Be'keeddy", "Be'keeer", "Be'keeffy", "Be'keegan", "Be'keeggan", "Be'keegh", "Be'keeghan", "Be'keeins", "Be'keekry", "Be'keelan", "Be'keele", "Be'keeley", "Be'keeliam", "Be'keelly", "Be'keen", "Be'keenin", "Be'keeny", "Be'keeppy", "Be'keepsey", "Be'keera", "Be'keeroy", "Be'keerrell", "Be'keerroy", "Be'keery", "Be'keessey", "Be'keetty", "Be'keety", "Be'laudan", "Be'lauddy", "Be'lauer", "Be'lauffy", "Be'laugan", "Be'lauggan", "Be'laugh", "Be'laughan", "Be'lauins", "Be'laukry", "Be'laulan", "Be'laule", "Be'lauley", "Be'lauliam", "Be'laully", "Be'laun", "Be'launin", "Be'launy", "Be'lauppy", "Be'laupsey", "Be'laura", "Be'lauroy", "Be'laurrell", "Be'laurroy", "Be'laury", "Be'laussey", "Be'lautty", "Be'lauty", "Be'leadan", "Be'leaddy", "Be'leaer", "Be'leaffy", "Be'leagan", "Be'leaggan", "Be'leagh", "Be'leaghan", "Be'leains", "Be'leakry", "Be'lealan", "Be'leale", "Be'lealey", "Be'lealiam", "Be'leally", "Be'lean", "Be'leanin", "Be'leany", "Be'leappy", "Be'leapsey", "Be'leara", "Be'learoy", "Be'learrell", "Be'learroy", "Be'leary", "Be'leassey", "Be'leatty", "Be'leaty", "Be'ledan", "Be'leddy", "Be'leer", "Be'leffy", "Be'legan", "Be'leggan", "Be'legh", "Be'leghan", "Be'leidan", "Be'leiddy", "Be'leier", "Be'leiffy", "Be'leigan", "Be'leiggan", "Be'leigh", "Be'leighan", "Be'leiins", "Be'leikry", "Be'leilan", "Be'leile", "Be'leiley", "Be'leiliam", "Be'leilly", "Be'lein", "Be'leinin", "Be'leins", "Be'leiny", "Be'leippy", "Be'leipsey", "Be'leira", "Be'leiroy", "Be'leirrell", "Be'leirroy", "Be'leiry", "Be'leissey", "Be'leitty", "Be'leity", "Be'lekry", "Be'lelan", "Be'lele", "Be'leley", "Be'leliam", "Be'lelly", "Be'len", "Be'lenin", "Be'leny", "Be'leppy", "Be'lepsey", "Be'lera", "Be'leroy", "Be'lerrell", "Be'lerroy", "Be'lery", "Be'lessey", "Be'letty", "Be'lety", "Be'lodan", "Be'loddy", "Be'loer", "Be'loffy", "Be'logan", "Be'loggan", "Be'logh", "Be'loghan", "Be'loins", "Be'lokry", "Be'lolan", "Be'lole", "Be'loley", "Be'loliam", "Be'lolly", "Be'lon", "Be'lonin", "Be'lony", "Be'loppy", "Be'lopsey", "Be'lora", "Be'loroy", "Be'lorrell", "Be'lorroy", "Be'lory", "Be'lossey", "Be'lotty", "Be'loty", "Be'lyndan", "Be'lynddy", "Be'lyner", "Be'lynffy", "Be'lyngan", "Be'lynggan", "Be'lyngh", "Be'lynghan", "Be'lynins", "Be'lynkry", "Be'lynlan", "Be'lynle", "Be'lynley", "Be'lynliam", "Be'lynlly", "Be'lynn", "Be'lynnin", "Be'lynny", "Be'lynppy", "Be'lynpsey", "Be'lynra", "Be'lynroy", "Be'lynrrell", "Be'lynrroy", "Be'lynry", "Be'lynssey", "Be'lyntty", "Be'lynty", "Be'madan", "Be'maddy", "Be'maer", "Be'maffy", "Be'magan", "Be'maggan", "Be'magh", "Be'maghan", "Be'mains", "Be'makry", "Be'malan", "Be'male", "Be'maley", "Be'maliam", "Be'mally", "Be'man", "Be'manin", "Be'many", "Be'mappy", "Be'mapsey", "Be'mara", "Be'maroy", "Be'marrell", "Be'marroy", "Be'mary", "Be'massey", "Be'matty", "Be'maty", "Be'nadan", "Be'naddy", "Be'naer", "Be'naffy", "Be'nagan", "Be'naggan", "Be'nagh", "Be'naghan", "Be'nains", "Be'nakry", "Be'nalan", "Be'nale", "Be'naley", "Be'naliam", "Be'nally", "Be'nan", "Be'nanin", "Be'nany", "Be'nappy", "Be'napsey", "Be'nara", "Be'naroy", "Be'narrell", "Be'narroy", "Be'nary", "Be'nassey", "Be'natty", "Be'naty", "Be'nedan", "Be'neddy", "Be'neer", "Be'neffy", "Be'negan", "Be'neggan", "Be'negh", "Be'neghan", "Be'neins", "Be'nekry", "Be'nelan", "Be'nele", "Be'neley", "Be'neliam", "Be'nelly", "Be'nen", "Be'nenin", "Be'neny", "Be'neppy", "Be'nepsey", "Be'nera", "Be'neroy", "Be'nerrell", "Be'nerroy", "Be'nery", "Be'nessey", "Be'netty", "Be'nety", "Be'peadan", "Be'peaddy", "Be'peaer", "Be'peaffy", "Be'peagan", "Be'peaggan", "Be'peagh", "Be'peaghan", "Be'peains", "Be'peakry", "Be'pealan", "Be'peale", "Be'pealey", "Be'pealiam", "Be'peally", "Be'pean", "Be'peanin", "Be'peany", "Be'peappy", "Be'peapsey", "Be'peara", "Be'pearoy", "Be'pearrell", "Be'pearroy", "Be'peary", "Be'peassey", "Be'peatty", "Be'peaty", "Be'reidan", "Be'reiddy", "Be'reier", "Be'reiffy", "Be'reigan", "Be'reiggan", "Be'reigh", "Be'reighan", "Be'reiins", "Be'reikry", "Be'reilan", "Be'reile", "Be'reiley", "Be'reiliam", "Be'reilly", "Be'rein", "Be'reinin", "Be'reiny", "Be'reippy", "Be'reipsey", "Be'reira", "Be'reiroy", "Be'reirrell", "Be'reirroy", "Be'reiry", "Be'reissey", "Be'reitty", "Be'reity", "Be'ridan", "Be'riddy", "Be'rier", "Be'riffy", "Be'rigan", "Be'riggan", "Be'righ", "Be'righan", "Be'riins", "Be'rikry", "Be'rilan", "Be'rile", "Be'riley", "Be'riliam", "Be'rilly", "Be'rin", "Be'rinin", "Be'riny", "Be'ripdan", "Be'ripddy", "Be'riper", "Be'ripffy", "Be'ripgan", "Be'ripggan", "Be'ripgh", "Be'ripghan", "Be'ripins", "Be'ripkry", "Be'riplan", "Be'riple", "Be'ripley", "Be'ripliam", "Be'riplly", "Be'ripn", "Be'ripnin", "Be'ripny", "Be'ripppy", "Be'rippsey", "Be'rippy", "Be'ripra", "Be'riproy", "Be'riprrell", "Be'riprroy", "Be'ripry", "Be'ripsey", "Be'ripssey", "Be'riptty", "Be'ripty", "Be'rira", "Be'riroy", "Be'rirrell", "Be'rirroy", "Be'riry", "Be'rissey", "Be'ritty", "Be'rity", "Be'rodan", "Be'roddy", "Be'roer", "Be'roffy", "Be'rogan", "Be'roggan", "Be'rogh", "Be'roghan", "Be'roins", "Be'rokry", "Be'rolan", "Be'role", "Be'roley", "Be'roliam", "Be'rolly", "Be'ron", "Be'ronin", "Be'rony", "Be'roppy", "Be'ropsey", "Be'rora", "Be'roroy", "Be'rorrell", "Be'rorroy", "Be'rory", "Be'rossey", "Be'rotty", "Be'roty", "Be'sadan", "Be'saddy", "Be'saer", "Be'saffy", "Be'sagan", "Be'saggan", "Be'sagh", "Be'saghan", "Be'sains", "Be'sakry", "Be'salan", "Be'sale", "Be'saley", "Be'saliam", "Be'sally", "Be'san", "Be'sanin", "Be'sany", "Be'sappy", "Be'sapsey", "Be'sara", "Be'saroy", "Be'sarrell", "Be'sarroy", "Be'sary", "Be'sassey", "Be'satty", "Be'saty", "Be'shedan", "Be'sheddy", "Be'sheer", "Be'sheffy", "Be'shegan", "Be'sheggan", "Be'shegh", "Be'sheghan", "Be'sheins", "Be'shekry", "Be'shelan", "Be'shele", "Be'sheley", "Be'sheliam", "Be'shelly", "Be'shen", "Be'shenin", "Be'sheny", "Be'sheppy", "Be'shepsey", "Be'shera", "Be'sheroy", "Be'sherrell", "Be'sherroy", "Be'shery", "Be'shessey", "Be'shetty", "Be'shety", "Be'tedan", "Be'teddy", "Be'teer", "Be'teffy", "Be'tegan", "Be'teggan", "Be'tegh", "Be'teghan", "Be'teins", "Be'tekry", "Be'telan", "Be'tele", "Be'teley", "Be'teliam", "Be'telly", "Be'ten", "Be'tenin", "Be'teny", "Be'teppy", "Be'tepsey", "Be'tera", "Be'teroy", "Be'terrell", "Be'terroy", "Be'tery", "Be'tessey", "Be'tetty", "Be'tety", "Be'toodan", "Be'tooddy", "Be'tooer", "Be'tooffy", "Be'toogan", "Be'tooggan", "Be'toogh", "Be'tooghan", "Be'tooins", "Be'tookry", "Be'toolan", "Be'toole", "Be'tooley", "Be'tooliam", "Be'toolly", "Be'toon", "Be'toonin", "Be'toony", "Be'tooppy", "Be'toopsey", "Be'toora", "Be'tooroy", "Be'toorrell", "Be'toorroy", "Be'toory", "Be'toossey", "Be'tootty", "Be'tooty", "Be'widan", "Be'widdy", "Be'wier", "Be'wiffy", "Be'wigan", "Be'wiggan", "Be'wigh", "Be'wighan", "Be'wiins", "Be'wikry", "Be'wilan", "Be'wile", "Be'wiley", "Be'wiliam", "Be'willy", "Be'win", "Be'winin", "Be'winy", "Be'wippy", "Be'wipsey", "Be'wira", "Be'wiroy", "Be'wirrell", "Be'wirroy", "Be'wiry", "Be'wissey", "Be'witty", "Be'wity", "Be'ydan", "Be'yddy", "Be'yer", "Be'yffy", "Be'ygan", "Be'yggan", "Be'ygh", "Be'yghan", "Be'yins", "Be'ykry", "Be'ylan", "Be'yle", "Be'yley", "Be'yliam", "Be'ylly", "Be'yn", "Be'ynin", "Be'yny", "Be'yppy", "Be'ypsey", "Be'yra", "Be'yroy", "Be'yrrell", "Be'yrroy", "Be'yry", "Be'yssey", "Be'ytty", "Be'yty", "Bidan", "Biddy", "Bier", "Biffy", "Bigan", "Biggan", "Bigh", "Bighan", "Biins", "Bikry", "Bilan", "Bile", "Biley", "Biliam", "Billy", "Bin", "Binin", "Biny", "Bippy", "Bipsey", "Bira", "Biroy", "Birrell", "Birroy", "Biry", "Bissey", "Bitty", "Bity", "Caudan", "Cauddy", "Cauer", "Cauffy", "Caugan", "Cauggan", "Caugh", "Caughan", "Cauins", "Caukry", "Caulan", "Caule", "Cauley", "Cauliam", "Caully", "Caun", "Caunin", "Cauny", "Cauppy", "Caupsey", "Caura", "Cauroy", "Caurrell", "Caurroy", "Caury", "Caussey", "Cautty", "Cauty", "Dadan", "Daddy", "Daer", "Daffy", "Dagan", "Daggan", "Dagh", "Daghan", "Dains", "Dakry", "Dalan", "Dale", "Daley", "Daliam", "Dally", "Dan", "Danin", "Dany", "Dappy", "Dapsey", "Dara", "Dardan", "Darddy", "Darer", "Darffy", "Dargan", "Darggan", "Dargh", "Darghan", "Darins", "Darkry", "Darlan", "Darle", "Darley", "Darliam", "Darlly", "Darn", "Darnin", "Darny", "Daroy", "Darppy", "Darpsey", "Darra", "Darrell", "Darroy", "Darrrell", "Darrroy", "Darry", "Darssey", "Dartty", "Darty", "Dary", "Dassey", "Datty", "Daty", "Doydan", "Doyddy", "Doyer", "Doyffy", "Doygan", "Doyggan", "Doygh", "Doyghan", "Doyins", "Doykry", "Doylan", "Doyle", "Doyley", "Doyliam", "Doylly", "Doyn", "Doynin", "Doyny", "Doyppy", "Doypsey", "Doyra", "Doyroy", "Doyrrell", "Doyrroy", "Doyry", "Doyssey", "Doytty", "Doyty", "Dudan", "Duddy", "Duer", "Duffy", "Dugan", "Duggan", "Dugh", "Dughan", "Duins", "Dukry", "Dulan", "Dule", "Duley", "Duliam", "Dully", "Dun", "Dunin", "Duny", "Duppy", "Dupsey", "Dura", "Duroy", "Durrell", "Durroy", "Dury", "Dussey", "Dutty", "Duty", "Gadan", "Gaddy", "Gaer", "Gaffy", "Gagan", "Gaggan", "Gagh", "Gaghan", "Gains", "Gakry", "Galan", "Gale", "Galey", "Galiam", "Gally", "Gan", "Ganin", "Gany", "Gappy", "Gapsey", "Gara", "Garoy", "Garrell", "Garroy", "Gary", "Gassey", "Gatty", "Gaty", "Jordan", "Jorddy", "Jorer", "Jorffy", "Jorgan", "Jorggan", "Jorgh", "Jorghan", "Jorins", "Jorkry", "Jorlan", "Jorle", "Jorley", "Jorliam", "Jorlly", "Jorn", "Jornin", "Jorny", "Jorppy", "Jorpsey", "Jorra", "Jorroy", "Jorrrell", "Jorrroy", "Jorry", "Jorssey", "Jortty", "Jorty", "Keadan", "Keaddy", "Keaer", "Keaffy", "Keagan", "Keaggan", "Keagh", "Keaghan", "Keains", "Keakry", "Kealan", "Keale", "Kealey", "Kealiam", "Keally", "Kean", "Keanin", "Keany", "Keappy", "Keapsey", "Keara", "Kearoy", "Kearrell", "Kearroy", "Keary", "Keassey", "Keatty", "Keaty", "Keedan", "Keeddy", "Keeer", "Keeffy", "Keegan", "Keeggan", "Keegh", "Keeghan", "Keeins", "Keekry", "Keelan", "Keele", "Keeley", "Keeliam", "Keelly", "Keen", "Keenin", "Keeny", "Keeppy", "Keepsey", "Keera", "Keeroy", "Keerrell", "Keerroy", "Keery", "Keessey", "Keetty", "Keety", "Laudan", "Lauddy", "Lauer", "Lauffy", "Laugan", "Lauggan", "Laugh", "Laughan", "Lauins", "Laukry", "Laulan", "Laule", "Lauley", "Lauliam", "Laully", "Laun", "Launin", "Launy", "Lauppy", "Laupsey", "Laura", "Lauroy", "Laurrell", "Laurroy", "Laury", "Laussey", "Lautty", "Lauty", "Leadan", "Leaddy", "Leaer", "Leaffy", "Leagan", "Leaggan", "Leagh", "Leaghan", "Leains", "Leakry", "Lealan", "Leale", "Lealey", "Lealiam", "Leally", "Lean", "Leanin", "Leany", "Leappy", "Leapsey", "Leara", "Learoy", "Learrell", "Learroy", "Leary", "Leassey", "Leatty", "Leaty", "Ledan", "Leddy", "Leer", "Leffy", "Legan", "Leggan", "Legh", "Leghan", "Leidan", "Leiddy", "Leier", "Leiffy", "Leigan", "Leiggan", "Leigh", "Leighan", "Leiins", "Leikry", "Leilan", "Leile", "Leiley", "Leiliam", "Leilly", "Lein", "Leinin", "Leins", "Leiny", "Leippy", "Leipsey", "Leira", "Leiroy", "Leirrell", "Leirroy", "Leiry", "Leissey", "Leitty", "Leity", "Lekry", "Lelan", "Lele", "Leley", "Leliam", "Lelly", "Len", "Lenin", "Leny", "Leppy", "Lepsey", "Lera", "Leroy", "Lerrell", "Lerroy", "Lery", "Lessey", "Letty", "Lety", "Lodan", "Loddy", "Loer", "Loffy", "Logan", "Loggan", "Logh", "Loghan", "Loins", "Lokry", "Lolan", "Lole", "Loley", "Loliam", "Lolly", "Lon", "Lonin", "Lony", "Loppy", "Lopsey", "Lora", "Loroy", "Lorrell", "Lorroy", "Lory", "Lossey", "Lotty", "Loty", "Lyndan", "Lynddy", "Lyner", "Lynffy", "Lyngan", "Lynggan", "Lyngh", "Lynghan", "Lynins", "Lynkry", "Lynlan", "Lynle", "Lynley", "Lynliam", "Lynlly", "Lynn", "Lynnin", "Lynny", "Lynppy", "Lynpsey", "Lynra", "Lynroy", "Lynrrell", "Lynrroy", "Lynry", "Lynssey", "Lyntty", "Lynty", "Mac'ardan", "Mac'arddy", "Mac'arer", "Mac'arffy", "Mac'argan", "Mac'arggan", "Mac'argh", "Mac'arghan", "Mac'arins", "Mac'arkry", "Mac'arlan", "Mac'arle", "Mac'arley", "Mac'arliam", "Mac'arlly", "Mac'arn", "Mac'arnin", "Mac'arny", "Mac'arppy", "Mac'arpsey", "Mac'arra", "Mac'arroy", "Mac'arrrell", "Mac'arrroy", "Mac'arry", "Mac'arssey", "Mac'artty", "Mac'arty", "Mac'bidan", "Mac'biddy", "Mac'bier", "Mac'biffy", "Mac'bigan", "Mac'biggan", "Mac'bigh", "Mac'bighan", "Mac'biins", "Mac'bikry", "Mac'bilan", "Mac'bile", "Mac'biley", "Mac'biliam", "Mac'billy", "Mac'bin", "Mac'binin", "Mac'biny", "Mac'bippy", "Mac'bipsey", "Mac'bira", "Mac'biroy", "Mac'birrell", "Mac'birroy", "Mac'biry", "Mac'bissey", "Mac'bitty", "Mac'bity", "Mac'caudan", "Mac'cauddy", "Mac'cauer", "Mac'cauffy", "Mac'caugan", "Mac'cauggan", "Mac'caugh", "Mac'caughan", "Mac'cauins", "Mac'caukry", "Mac'caulan", "Mac'caule", "Mac'cauley", "Mac'cauliam", "Mac'caully", "Mac'caun", "Mac'caunin", "Mac'cauny", "Mac'cauppy", "Mac'caupsey", "Mac'caura", "Mac'cauroy", "Mac'caurrell", "Mac'caurroy", "Mac'caury", "Mac'caussey", "Mac'cautty", "Mac'cauty", "Mac'dadan", "Mac'daddy", "Mac'daer", "Mac'daffy", "Mac'dagan", "Mac'daggan", "Mac'dagh", "Mac'daghan", "Mac'dains", "Mac'dakry", "Mac'dalan", "Mac'dale", "Mac'daley", "Mac'daliam", "Mac'dally", "Mac'dan", "Mac'danin", "Mac'dany", "Mac'dappy", "Mac'dapsey", "Mac'dara", "Mac'dardan", "Mac'darddy", "Mac'darer", "Mac'darffy", "Mac'dargan", "Mac'darggan", "Mac'dargh", "Mac'darghan", "Mac'darins", "Mac'darkry", "Mac'darlan", "Mac'darle", "Mac'darley", "Mac'darliam", "Mac'darlly", "Mac'darn", "Mac'darnin", "Mac'darny", "Mac'daroy", "Mac'darppy", "Mac'darpsey", "Mac'darra", "Mac'darrell", "Mac'darroy", "Mac'darrrell", "Mac'darrroy", "Mac'darry", "Mac'darssey", "Mac'dartty", "Mac'darty", "Mac'dary", "Mac'dassey", "Mac'datty", "Mac'daty", "Mac'doydan", "Mac'doyddy", "Mac'doyer", "Mac'doyffy", "Mac'doygan", "Mac'doyggan", "Mac'doygh", "Mac'doyghan", "Mac'doyins", "Mac'doykry", "Mac'doylan", "Mac'doyle", "Mac'doyley", "Mac'doyliam", "Mac'doylly", "Mac'doyn", "Mac'doynin", "Mac'doyny", "Mac'doyppy", "Mac'doypsey", "Mac'doyra", "Mac'doyroy", "Mac'doyrrell", "Mac'doyrroy", "Mac'doyry", "Mac'doyssey", "Mac'doytty", "Mac'doyty", "Mac'dudan", "Mac'duddy", "Mac'duer", "Mac'duffy", "Mac'dugan", "Mac'duggan", "Mac'dugh", "Mac'dughan", "Mac'duins", "Mac'dukry", "Mac'dulan", "Mac'dule", "Mac'duley", "Mac'duliam", "Mac'dully", "Mac'dun", "Mac'dunin", "Mac'duny", "Mac'duppy", "Mac'dupsey", "Mac'dura", "Mac'duroy", "Mac'durrell", "Mac'durroy", "Mac'dury", "Mac'dussey", "Mac'dutty", "Mac'duty", "Mac'gadan", "Mac'gaddy", "Mac'gaer", "Mac'gaffy", "Mac'gagan", "Mac'gaggan", "Mac'gagh", "Mac'gaghan", "Mac'gains", "Mac'gakry", "Mac'galan", "Mac'gale", "Mac'galey", "Mac'galiam", "Mac'gally", "Mac'gan", "Mac'ganin", "Mac'gany", "Mac'gappy", "Mac'gapsey", "Mac'gara", "Mac'garoy", "Mac'garrell", "Mac'garroy", "Mac'gary", "Mac'gassey", "Mac'gatty", "Mac'gaty", "Mac'jordan", "Mac'jorddy", "Mac'jorer", "Mac'jorffy", "Mac'jorgan", "Mac'jorggan", "Mac'jorgh", "Mac'jorghan", "Mac'jorins", "Mac'jorkry", "Mac'jorlan", "Mac'jorle", "Mac'jorley", "Mac'jorliam", "Mac'jorlly", "Mac'jorn", "Mac'jornin", "Mac'jorny", "Mac'jorppy", "Mac'jorpsey", "Mac'jorra", "Mac'jorroy", "Mac'jorrrell", "Mac'jorrroy", "Mac'jorry", "Mac'jorssey", "Mac'jortty", "Mac'jorty", "Mac'keadan", "Mac'keaddy", "Mac'keaer", "Mac'keaffy", "Mac'keagan", "Mac'keaggan", "Mac'keagh", "Mac'keaghan", "Mac'keains", "Mac'keakry", "Mac'kealan", "Mac'keale", "Mac'kealey", "Mac'kealiam", "Mac'keally", "Mac'kean", "Mac'keanin", "Mac'keany", "Mac'keappy", "Mac'keapsey", "Mac'keara", "Mac'kearoy", "Mac'kearrell", "Mac'kearroy", "Mac'keary", "Mac'keassey", "Mac'keatty", "Mac'keaty", "Mac'keedan", "Mac'keeddy", "Mac'keeer", "Mac'keeffy", "Mac'keegan", "Mac'keeggan", "Mac'keegh", "Mac'keeghan", "Mac'keeins", "Mac'keekry", "Mac'keelan", "Mac'keele", "Mac'keeley", "Mac'keeliam", "Mac'keelly", "Mac'keen", "Mac'keenin", "Mac'keeny", "Mac'keeppy", "Mac'keepsey", "Mac'keera", "Mac'keeroy", "Mac'keerrell", "Mac'keerroy", "Mac'keery", "Mac'keessey", "Mac'keetty", "Mac'keety", "Mac'laudan", "Mac'lauddy", "Mac'lauer", "Mac'lauffy", "Mac'laugan", "Mac'lauggan", "Mac'laugh", "Mac'laughan", "Mac'lauins", "Mac'laukry", "Mac'laulan", "Mac'laule", "Mac'lauley", "Mac'lauliam", "Mac'laully", "Mac'laun", "Mac'launin", "Mac'launy", "Mac'lauppy", "Mac'laupsey", "Mac'laura", "Mac'lauroy", "Mac'laurrell", "Mac'laurroy", "Mac'laury", "Mac'laussey", "Mac'lautty", "Mac'lauty", "Mac'leadan", "Mac'leaddy", "Mac'leaer", "Mac'leaffy", "Mac'leagan", "Mac'leaggan", "Mac'leagh", "Mac'leaghan", "Mac'leains", "Mac'leakry", "Mac'lealan", "Mac'leale", "Mac'lealey", "Mac'lealiam", "Mac'leally", "Mac'lean", "Mac'leanin", "Mac'leany", "Mac'leappy", "Mac'leapsey", "Mac'leara", "Mac'learoy", "Mac'learrell", "Mac'learroy", "Mac'leary", "Mac'leassey", "Mac'leatty", "Mac'leaty", "Mac'ledan", "Mac'leddy", "Mac'leer", "Mac'leffy", "Mac'legan", "Mac'leggan", "Mac'legh", "Mac'leghan", "Mac'leidan", "Mac'leiddy", "Mac'leier", "Mac'leiffy", "Mac'leigan", "Mac'leiggan", "Mac'leigh", "Mac'leighan", "Mac'leiins", "Mac'leikry", "Mac'leilan", "Mac'leile", "Mac'leiley", "Mac'leiliam", "Mac'leilly", "Mac'lein", "Mac'leinin", "Mac'leins", "Mac'leiny", "Mac'leippy", "Mac'leipsey", "Mac'leira", "Mac'leiroy", "Mac'leirrell", "Mac'leirroy", "Mac'leiry", "Mac'leissey", "Mac'leitty", "Mac'leity", "Mac'lekry", "Mac'lelan", "Mac'lele", "Mac'leley", "Mac'leliam", "Mac'lelly", "Mac'len", "Mac'lenin", "Mac'leny", "Mac'leppy", "Mac'lepsey", "Mac'lera", "Mac'leroy", "Mac'lerrell", "Mac'lerroy", "Mac'lery", "Mac'lessey", "Mac'letty", "Mac'lety", "Mac'lodan", "Mac'loddy", "Mac'loer", "Mac'loffy", "Mac'logan", "Mac'loggan", "Mac'logh", "Mac'loghan", "Mac'loins", "Mac'lokry", "Mac'lolan", "Mac'lole", "Mac'loley", "Mac'loliam", "Mac'lolly", "Mac'lon", "Mac'lonin", "Mac'lony", "Mac'loppy", "Mac'lopsey", "Mac'lora", "Mac'loroy", "Mac'lorrell", "Mac'lorroy", "Mac'lory", "Mac'lossey", "Mac'lotty", "Mac'loty", "Mac'lyndan", "Mac'lynddy", "Mac'lyner", "Mac'lynffy", "Mac'lyngan", "Mac'lynggan", "Mac'lyngh", "Mac'lynghan", "Mac'lynins", "Mac'lynkry", "Mac'lynlan", "Mac'lynle", "Mac'lynley", "Mac'lynliam", "Mac'lynlly", "Mac'lynn", "Mac'lynnin", "Mac'lynny", "Mac'lynppy", "Mac'lynpsey", "Mac'lynra", "Mac'lynroy", "Mac'lynrrell", "Mac'lynrroy", "Mac'lynry", "Mac'lynssey", "Mac'lyntty", "Mac'lynty", "Mac'madan", "Mac'maddy", "Mac'maer", "Mac'maffy", "Mac'magan", "Mac'maggan", "Mac'magh", "Mac'maghan", "Mac'mains", "Mac'makry", "Mac'malan", "Mac'male", "Mac'maley", "Mac'maliam", "Mac'mally", "Mac'man", "Mac'manin", "Mac'many", "Mac'mappy", "Mac'mapsey", "Mac'mara", "Mac'maroy", "Mac'marrell", "Mac'marroy", "Mac'mary", "Mac'massey", "Mac'matty", "Mac'maty", "Mac'nadan", "Mac'naddy", "Mac'naer", "Mac'naffy", "Mac'nagan", "Mac'naggan", "Mac'nagh", "Mac'naghan", "Mac'nains", "Mac'nakry", "Mac'nalan", "Mac'nale", "Mac'naley", "Mac'naliam", "Mac'nally", "Mac'nan", "Mac'nanin", "Mac'nany", "Mac'nappy", "Mac'napsey", "Mac'nara", "Mac'naroy", "Mac'narrell", "Mac'narroy", "Mac'nary", "Mac'nassey", "Mac'natty", "Mac'naty", "Mac'nedan", "Mac'neddy", "Mac'neer", "Mac'neffy", "Mac'negan", "Mac'neggan", "Mac'negh", "Mac'neghan", "Mac'neins", "Mac'nekry", "Mac'nelan", "Mac'nele", "Mac'neley", "Mac'neliam", "Mac'nelly", "Mac'nen", "Mac'nenin", "Mac'neny", "Mac'neppy", "Mac'nepsey", "Mac'nera", "Mac'neroy", "Mac'nerrell", "Mac'nerroy", "Mac'nery", "Mac'nessey", "Mac'netty", "Mac'nety", "Mac'peadan", "Mac'peaddy", "Mac'peaer", "Mac'peaffy", "Mac'peagan", "Mac'peaggan", "Mac'peagh", "Mac'peaghan", "Mac'peains", "Mac'peakry", "Mac'pealan", "Mac'peale", "Mac'pealey", "Mac'pealiam", "Mac'peally", "Mac'pean", "Mac'peanin", "Mac'peany", "Mac'peappy", "Mac'peapsey", "Mac'peara", "Mac'pearoy", "Mac'pearrell", "Mac'pearroy", "Mac'peary", "Mac'peassey", "Mac'peatty", "Mac'peaty", "Mac'reidan", "Mac'reiddy", "Mac'reier", "Mac'reiffy", "Mac'reigan", "Mac'reiggan", "Mac'reigh", "Mac'reighan", "Mac'reiins", "Mac'reikry", "Mac'reilan", "Mac'reile", "Mac'reiley", "Mac'reiliam", "Mac'reilly", "Mac'rein", "Mac'reinin", "Mac'reiny", "Mac'reippy", "Mac'reipsey", "Mac'reira", "Mac'reiroy", "Mac'reirrell", "Mac'reirroy", "Mac'reiry", "Mac'reissey", "Mac'reitty", "Mac'reity", "Mac'ridan", "Mac'riddy", "Mac'rier", "Mac'riffy", "Mac'rigan", "Mac'riggan", "Mac'righ", "Mac'righan", "Mac'riins", "Mac'rikry", "Mac'rilan", "Mac'rile", "Mac'riley", "Mac'riliam", "Mac'rilly", "Mac'rin", "Mac'rinin", "Mac'riny", "Mac'ripdan", "Mac'ripddy", "Mac'riper", "Mac'ripffy", "Mac'ripgan", "Mac'ripggan", "Mac'ripgh", "Mac'ripghan", "Mac'ripins", "Mac'ripkry", "Mac'riplan", "Mac'riple", "Mac'ripley", "Mac'ripliam", "Mac'riplly", "Mac'ripn", "Mac'ripnin", "Mac'ripny", "Mac'ripppy", "Mac'rippsey", "Mac'rippy", "Mac'ripra", "Mac'riproy", "Mac'riprrell", "Mac'riprroy", "Mac'ripry", "Mac'ripsey", "Mac'ripssey", "Mac'riptty", "Mac'ripty", "Mac'rira", "Mac'riroy", "Mac'rirrell", "Mac'rirroy", "Mac'riry", "Mac'rissey", "Mac'ritty", "Mac'rity", "Mac'rodan", "Mac'roddy", "Mac'roer", "Mac'roffy", "Mac'rogan", "Mac'roggan", "Mac'rogh", "Mac'roghan", "Mac'roins", "Mac'rokry", "Mac'rolan", "Mac'role", "Mac'roley", "Mac'roliam", "Mac'rolly", "Mac'ron", "Mac'ronin", "Mac'rony", "Mac'roppy", "Mac'ropsey", "Mac'rora", "Mac'roroy", "Mac'rorrell", "Mac'rorroy", "Mac'rory", "Mac'rossey", "Mac'rotty", "Mac'roty", "Mac'sadan", "Mac'saddy", "Mac'saer", "Mac'saffy", "Mac'sagan", "Mac'saggan", "Mac'sagh", "Mac'saghan", "Mac'sains", "Mac'sakry", "Mac'salan", "Mac'sale", "Mac'saley", "Mac'saliam", "Mac'sally", "Mac'san", "Mac'sanin", "Mac'sany", "Mac'sappy", "Mac'sapsey", "Mac'sara", "Mac'saroy", "Mac'sarrell", "Mac'sarroy", "Mac'sary", "Mac'sassey", "Mac'satty", "Mac'saty", "Mac'shedan", "Mac'sheddy", "Mac'sheer", "Mac'sheffy", "Mac'shegan", "Mac'sheggan", "Mac'shegh", "Mac'sheghan", "Mac'sheins", "Mac'shekry", "Mac'shelan", "Mac'shele", "Mac'sheley", "Mac'sheliam", "Mac'shelly", "Mac'shen", "Mac'shenin", "Mac'sheny", "Mac'sheppy", "Mac'shepsey", "Mac'shera", "Mac'sheroy", "Mac'sherrell", "Mac'sherroy", "Mac'shery", "Mac'shessey", "Mac'shetty", "Mac'shety", "Mac'tedan", "Mac'teddy", "Mac'teer", "Mac'teffy", "Mac'tegan", "Mac'teggan", "Mac'tegh", "Mac'teghan", "Mac'teins", "Mac'tekry", "Mac'telan", "Mac'tele", "Mac'teley", "Mac'teliam", "Mac'telly", "Mac'ten", "Mac'tenin", "Mac'teny", "Mac'teppy", "Mac'tepsey", "Mac'tera", "Mac'teroy", "Mac'terrell", "Mac'terroy", "Mac'tery", "Mac'tessey", "Mac'tetty", "Mac'tety", "Mac'toodan", "Mac'tooddy", "Mac'tooer", "Mac'tooffy", "Mac'toogan", "Mac'tooggan", "Mac'toogh", "Mac'tooghan", "Mac'tooins", "Mac'tookry", "Mac'toolan", "Mac'toole", "Mac'tooley", "Mac'tooliam", "Mac'toolly", "Mac'toon", "Mac'toonin", "Mac'toony", "Mac'tooppy", "Mac'toopsey", "Mac'toora", "Mac'tooroy", "Mac'toorrell", "Mac'toorroy", "Mac'toory", "Mac'toossey", "Mac'tootty", "Mac'tooty", "Mac'widan", "Mac'widdy", "Mac'wier", "Mac'wiffy", "Mac'wigan", "Mac'wiggan", "Mac'wigh", "Mac'wighan", "Mac'wiins", "Mac'wikry", "Mac'wilan", "Mac'wile", "Mac'wiley", "Mac'wiliam", "Mac'willy", "Mac'win", "Mac'winin", "Mac'winy", "Mac'wippy", "Mac'wipsey", "Mac'wira", "Mac'wiroy", "Mac'wirrell", "Mac'wirroy", "Mac'wiry", "Mac'wissey", "Mac'witty", "Mac'wity", "Mac'ydan", "Mac'yddy", "Mac'yer", "Mac'yffy", "Mac'ygan", "Mac'yggan", "Mac'ygh", "Mac'yghan", "Mac'yins", "Mac'ykry", "Mac'ylan", "Mac'yle", "Mac'yley", "Mac'yliam", "Mac'ylly", "Mac'yn", "Mac'ynin", "Mac'yny", "Mac'yppy", "Mac'ypsey", "Mac'yra", "Mac'yroy", "Mac'yrrell", "Mac'yrroy", "Mac'yry", "Mac'yssey", "Mac'ytty", "Mac'yty", "Madan", "Maddy", "Maer", "Maffy", "Magan", "Maggan", "Magh", "Maghan", "Mains", "Makry", "Malan", "Male", "Maley", "Maliam", "Mally", "Man", "Manin", "Many", "Mappy", "Mapsey", "Mara", "Maroy", "Marrell", "Marroy", "Mary", "Massey", "Matty", "Maty", "Nadan", "Naddy", "Naer", "Naffy", "Nagan", "Naggan", "Nagh", "Naghan", "Nains", "Nakry", "Nalan", "Nale", "Naley", "Naliam", "Nally", "Nan", "Nanin", "Nany", "Nappy", "Napsey", "Nara", "Naroy", "Narrell", "Narroy", "Nary", "Nassey", "Natty", "Naty", "Nedan", "Neddy", "Neer", "Neffy", "Negan", "Neggan", "Negh", "Neghan", "Neins", "Nekry", "Nelan", "Nele", "Neley", "Neliam", "Nelly", "Nen", "Nenin", "Neny", "Neppy", "Nepsey", "Nera", "Neroy", "Nerrell", "Nerroy", "Nery", "Nessey", "Netty", "Nety", "O'ardan", "O'arddy", "O'arer", "O'arffy", "O'argan", "O'arggan", "O'argh", "O'arghan", "O'arins", "O'arkry", "O'arlan", "O'arle", "O'arley", "O'arliam", "O'arlly", "O'arn", "O'arnin", "O'arny", "O'arppy", "O'arpsey", "O'arra", "O'arroy", "O'arrrell", "O'arrroy", "O'arry", "O'arssey", "O'artty", "O'arty", "O'bidan", "O'biddy", "O'bier", "O'biffy", "O'bigan", "O'biggan", "O'bigh", "O'bighan", "O'biins", "O'bikry", "O'bilan", "O'bile", "O'biley", "O'biliam", "O'billy", "O'bin", "O'binin", "O'biny", "O'bippy", "O'bipsey", "O'bira", "O'biroy", "O'birrell", "O'birroy", "O'biry", "O'bissey", "O'bitty", "O'bity", "O'caudan", "O'cauddy", "O'cauer", "O'cauffy", "O'caugan", "O'cauggan", "O'caugh", "O'caughan", "O'cauins", "O'caukry", "O'caulan", "O'caule", "O'cauley", "O'cauliam", "O'caully", "O'caun", "O'caunin", "O'cauny", "O'cauppy", "O'caupsey", "O'caura", "O'cauroy", "O'caurrell", "O'caurroy", "O'caury", "O'caussey", "O'cautty", "O'cauty", "O'dadan", "O'daddy", "O'daer", "O'daffy", "O'dagan", "O'daggan", "O'dagh", "O'daghan", "O'dains", "O'dakry", "O'dalan", "O'dale", "O'daley", "O'daliam", "O'dally", "O'dan", "O'danin", "O'dany", "O'dappy", "O'dapsey", "O'dara", "O'dardan", "O'darddy", "O'darer", "O'darffy", "O'dargan", "O'darggan", "O'dargh", "O'darghan", "O'darins", "O'darkry", "O'darlan", "O'darle", "O'darley", "O'darliam", "O'darlly", "O'darn", "O'darnin", "O'darny", "O'daroy", "O'darppy", "O'darpsey", "O'darra", "O'darrell", "O'darroy", "O'darrrell", "O'darrroy", "O'darry", "O'darssey", "O'dartty", "O'darty", "O'dary", "O'dassey", "O'datty", "O'daty", "O'doydan", "O'doyddy", "O'doyer", "O'doyffy", "O'doygan", "O'doyggan", "O'doygh", "O'doyghan", "O'doyins", "O'doykry", "O'doylan", "O'doyle", "O'doyley", "O'doyliam", "O'doylly", "O'doyn", "O'doynin", "O'doyny", "O'doyppy", "O'doypsey", "O'doyra", "O'doyroy", "O'doyrrell", "O'doyrroy", "O'doyry", "O'doyssey", "O'doytty", "O'doyty", "O'dudan", "O'duddy", "O'duer", "O'duffy", "O'dugan", "O'duggan", "O'dugh", "O'dughan", "O'duins", "O'dukry", "O'dulan", "O'dule", "O'duley", "O'duliam", "O'dully", "O'dun", "O'dunin", "O'duny", "O'duppy", "O'dupsey", "O'dura", "O'duroy", "O'durrell", "O'durroy", "O'dury", "O'dussey", "O'dutty", "O'duty", "O'gadan", "O'gaddy", "O'gaer", "O'gaffy", "O'gagan", "O'gaggan", "O'gagh", "O'gaghan", "O'gains", "O'gakry", "O'galan", "O'gale", "O'galey", "O'galiam", "O'gally", "O'gan", "O'ganin", "O'gany", "O'gappy", "O'gapsey", "O'gara", "O'garoy", "O'garrell", "O'garroy", "O'gary", "O'gassey", "O'gatty", "O'gaty", "O'jordan", "O'jorddy", "O'jorer", "O'jorffy", "O'jorgan", "O'jorggan", "O'jorgh", "O'jorghan", "O'jorins", "O'jorkry", "O'jorlan", "O'jorle", "O'jorley", "O'jorliam", "O'jorlly", "O'jorn", "O'jornin", "O'jorny", "O'jorppy", "O'jorpsey", "O'jorra", "O'jorroy", "O'jorrrell", "O'jorrroy", "O'jorry", "O'jorssey", "O'jortty", "O'jorty", "O'keadan", "O'keaddy", "O'keaer", "O'keaffy", "O'keagan", "O'keaggan", "O'keagh", "O'keaghan", "O'keains", "O'keakry", "O'kealan", "O'keale", "O'kealey", "O'kealiam", "O'keally", "O'kean", "O'keanin", "O'keany", "O'keappy", "O'keapsey", "O'keara", "O'kearoy", "O'kearrell", "O'kearroy", "O'keary", "O'keassey", "O'keatty", "O'keaty", "O'keedan", "O'keeddy", "O'keeer", "O'keeffy", "O'keegan", "O'keeggan", "O'keegh", "O'keeghan", "O'keeins", "O'keekry", "O'keelan", "O'keele", "O'keeley", "O'keeliam", "O'keelly", "O'keen", "O'keenin", "O'keeny", "O'keeppy", "O'keepsey", "O'keera", "O'keeroy", "O'keerrell", "O'keerroy", "O'keery", "O'keessey", "O'keetty", "O'keety", "O'laudan", "O'lauddy", "O'lauer", "O'lauffy", "O'laugan", "O'lauggan", "O'laugh", "O'laughan", "O'lauins", "O'laukry", "O'laulan", "O'laule", "O'lauley", "O'lauliam", "O'laully", "O'laun", "O'launin", "O'launy", "O'lauppy", "O'laupsey", "O'laura", "O'lauroy", "O'laurrell", "O'laurroy", "O'laury", "O'laussey", "O'lautty", "O'lauty", "O'leadan", "O'leaddy", "O'leaer", "O'leaffy", "O'leagan", "O'leaggan", "O'leagh", "O'leaghan", "O'leains", "O'leakry", "O'lealan", "O'leale", "O'lealey", "O'lealiam", "O'leally", "O'lean", "O'leanin", "O'leany", "O'leappy", "O'leapsey", "O'leara", "O'learoy", "O'learrell", "O'learroy", "O'leary", "O'leassey", "O'leatty", "O'leaty", "O'ledan", "O'leddy", "O'leer", "O'leffy", "O'legan", "O'leggan", "O'legh", "O'leghan", "O'leidan", "O'leiddy", "O'leier", "O'leiffy", "O'leigan", "O'leiggan", "O'leigh", "O'leighan", "O'leiins", "O'leikry", "O'leilan", "O'leile", "O'leiley", "O'leiliam", "O'leilly", "O'lein", "O'leinin", "O'leins", "O'leiny", "O'leippy", "O'leipsey", "O'leira", "O'leiroy", "O'leirrell", "O'leirroy", "O'leiry", "O'leissey", "O'leitty", "O'leity", "O'lekry", "O'lelan", "O'lele", "O'leley", "O'leliam", "O'lelly", "O'len", "O'lenin", "O'leny", "O'leppy", "O'lepsey", "O'lera", "O'leroy", "O'lerrell", "O'lerroy", "O'lery", "O'lessey", "O'letty", "O'lety", "O'lodan", "O'loddy", "O'loer", "O'loffy", "O'logan", "O'loggan", "O'logh", "O'loghan", "O'loins", "O'lokry", "O'lolan", "O'lole", "O'loley", "O'loliam", "O'lolly", "O'lon", "O'lonin", "O'lony", "O'loppy", "O'lopsey", "O'lora", "O'loroy", "O'lorrell", "O'lorroy", "O'lory", "O'lossey", "O'lotty", "O'loty", "O'lyndan", "O'lynddy", "O'lyner", "O'lynffy", "O'lyngan", "O'lynggan", "O'lyngh", "O'lynghan", "O'lynins", "O'lynkry", "O'lynlan", "O'lynle", "O'lynley", "O'lynliam", "O'lynlly", "O'lynn", "O'lynnin", "O'lynny", "O'lynppy", "O'lynpsey", "O'lynra", "O'lynroy", "O'lynrrell", "O'lynrroy", "O'lynry", "O'lynssey", "O'lyntty", "O'lynty", "O'madan", "O'maddy", "O'maer", "O'maffy", "O'magan", "O'maggan", "O'magh", "O'maghan", "O'mains", "O'makry", "O'malan", "O'male", "O'maley", "O'maliam", "O'mally", "O'man", "O'manin", "O'many", "O'mappy", "O'mapsey", "O'mara", "O'maroy", "O'marrell", "O'marroy", "O'mary", "O'massey", "O'matty", "O'maty", "O'nadan", "O'naddy", "O'naer", "O'naffy", "O'nagan", "O'naggan", "O'nagh", "O'naghan", "O'nains", "O'nakry", "O'nalan", "O'nale", "O'naley", "O'naliam", "O'nally", "O'nan", "O'nanin", "O'nany", "O'nappy", "O'napsey", "O'nara", "O'naroy", "O'narrell", "O'narroy", "O'nary", "O'nassey", "O'natty", "O'naty", "O'nedan", "O'neddy", "O'neer", "O'neffy", "O'negan", "O'neggan", "O'negh", "O'neghan", "O'neins", "O'nekry", "O'nelan", "O'nele", "O'neley", "O'neliam", "O'nelly", "O'nen", "O'nenin", "O'neny", "O'neppy", "O'nepsey", "O'nera", "O'neroy", "O'nerrell", "O'nerroy", "O'nery", "O'nessey", "O'netty", "O'nety", "O'peadan", "O'peaddy", "O'peaer", "O'peaffy", "O'peagan", "O'peaggan", "O'peagh", "O'peaghan", "O'peains", "O'peakry", "O'pealan", "O'peale", "O'pealey", "O'pealiam", "O'peally", "O'pean", "O'peanin", "O'peany", "O'peappy", "O'peapsey", "O'peara", "O'pearoy", "O'pearrell", "O'pearroy", "O'peary", "O'peassey", "O'peatty", "O'peaty", "O'reidan", "O'reiddy", "O'reier", "O'reiffy", "O'reigan", "O'reiggan", "O'reigh", "O'reighan", "O'reiins", "O'reikry", "O'reilan", "O'reile", "O'reiley", "O'reiliam", "O'reilly", "O'rein", "O'reinin", "O'reiny", "O'reippy", "O'reipsey", "O'reira", "O'reiroy", "O'reirrell", "O'reirroy", "O'reiry", "O'reissey", "O'reitty", "O'reity", "O'ridan", "O'riddy", "O'rier", "O'riffy", "O'rigan", "O'riggan", "O'righ", "O'righan", "O'riins", "O'rikry", "O'rilan", "O'rile", "O'riley", "O'riliam", "O'rilly", "O'rin", "O'rinin", "O'riny", "O'ripdan", "O'ripddy", "O'riper", "O'ripffy", "O'ripgan", "O'ripggan", "O'ripgh", "O'ripghan", "O'ripins", "O'ripkry", "O'riplan", "O'riple", "O'ripley", "O'ripliam", "O'riplly", "O'ripn", "O'ripnin", "O'ripny", "O'ripppy", "O'rippsey", "O'rippy", "O'ripra", "O'riproy", "O'riprrell", "O'riprroy", "O'ripry", "O'ripsey", "O'ripssey", "O'riptty", "O'ripty", "O'rira", "O'riroy", "O'rirrell", "O'rirroy", "O'riry", "O'rissey", "O'ritty", "O'rity", "O'rodan", "O'roddy", "O'roer", "O'roffy", "O'rogan", "O'roggan", "O'rogh", "O'roghan", "O'roins", "O'rokry", "O'rolan", "O'role", "O'roley", "O'roliam", "O'rolly", "O'ron", "O'ronin", "O'rony", "O'roppy", "O'ropsey", "O'rora", "O'roroy", "O'rorrell", "O'rorroy", "O'rory", "O'rossey", "O'rotty", "O'roty", "O'sadan", "O'saddy", "O'saer", "O'saffy", "O'sagan", "O'saggan", "O'sagh", "O'saghan", "O'sains", "O'sakry", "O'salan", "O'sale", "O'saley", "O'saliam", "O'sally", "O'san", "O'sanin", "O'sany", "O'sappy", "O'sapsey", "O'sara", "O'saroy", "O'sarrell", "O'sarroy", "O'sary", "O'sassey", "O'satty", "O'saty", "O'shedan", "O'sheddy", "O'sheer", "O'sheffy", "O'shegan", "O'sheggan", "O'shegh", "O'sheghan", "O'sheins", "O'shekry", "O'shelan", "O'shele", "O'sheley", "O'sheliam", "O'shelly", "O'shen", "O'shenin", "O'sheny", "O'sheppy", "O'shepsey", "O'shera", "O'sheroy", "O'sherrell", "O'sherroy", "O'shery", "O'shessey", "O'shetty", "O'shety", "O'tedan", "O'teddy", "O'teer", "O'teffy", "O'tegan", "O'teggan", "O'tegh", "O'teghan", "O'teins", "O'tekry", "O'telan", "O'tele", "O'teley", "O'teliam", "O'telly", "O'ten", "O'tenin", "O'teny", "O'teppy", "O'tepsey", "O'tera", "O'teroy", "O'terrell", "O'terroy", "O'tery", "O'tessey", "O'tetty", "O'tety", "O'toodan", "O'tooddy", "O'tooer", "O'tooffy", "O'toogan", "O'tooggan", "O'toogh", "O'tooghan", "O'tooins", "O'tookry", "O'toolan", "O'toole", "O'tooley", "O'tooliam", "O'toolly", "O'toon", "O'toonin", "O'toony", "O'tooppy", "O'toopsey", "O'toora", "O'tooroy", "O'toorrell", "O'toorroy", "O'toory", "O'toossey", "O'tootty", "O'tooty", "O'widan", "O'widdy", "O'wier", "O'wiffy", "O'wigan", "O'wiggan", "O'wigh", "O'wighan", "O'wiins", "O'wikry", "O'wilan", "O'wile", "O'wiley", "O'wiliam", "O'willy", "O'win", "O'winin", "O'winy", "O'wippy", "O'wipsey", "O'wira", "O'wiroy", "O'wirrell", "O'wirroy", "O'wiry", "O'wissey", "O'witty", "O'wity", "O'ydan", "O'yddy", "O'yer", "O'yffy", "O'ygan", "O'yggan", "O'ygh", "O'yghan", "O'yins", "O'ykry", "O'ylan", "O'yle", "O'yley", "O'yliam", "O'ylly", "O'yn", "O'ynin", "O'yny", "O'yppy", "O'ypsey", "O'yra", "O'yroy", "O'yrrell", "O'yrroy", "O'yry", "O'yssey", "O'ytty", "O'yty", "Peadan", "Peaddy", "Peaer", "Peaffy", "Peagan", "Peaggan", "Peagh", "Peaghan", "Peains", "Peakry", "Pealan", "Peale", "Pealey", "Pealiam", "Peally", "Pean", "Peanin", "Peany", "Peappy", "Peapsey", "Peara", "Pearoy", "Pearrell", "Pearroy", "Peary", "Peassey", "Peatty", "Peaty", "Reidan", "Reiddy", "Reier", "Reiffy", "Reigan", "Reiggan", "Reigh", "Reighan", "Reiins", "Reikry", "Reilan", "Reile", "Reiley", "Reiliam", "Reilly", "Rein", "Reinin", "Reiny", "Reippy", "Reipsey", "Reira", "Reiroy", "Reirrell", "Reirroy", "Reiry", "Reissey", "Reitty", "Reity", "Ridan", "Riddy", "Rier", "Riffy", "Rigan", "Riggan", "Righ", "Righan", "Riins", "Rikry", "Rilan", "Rile", "Riley", "Riliam", "Rilly", "Rin", "Rinin", "Riny", "Ripdan", "Ripddy", "Riper", "Ripffy", "Ripgan", "Ripggan", "Ripgh", "Ripghan", "Ripins", "Ripkry", "Riplan", "Riple", "Ripley", "Ripliam", "Riplly", "Ripn", "Ripnin", "Ripny", "Ripppy", "Rippsey", "Rippy", "Ripra", "Riproy", "Riprrell", "Riprroy", "Ripry", "Ripsey", "Ripssey", "Riptty", "Ripty", "Rira", "Riroy", "Rirrell", "Rirroy", "Riry", "Rissey", "Ritty", "Rity", "Rodan", "Roddy", "Roer", "Roffy", "Rogan", "Roggan", "Rogh", "Roghan", "Roins", "Rokry", "Rolan", "Role", "Roley", "Roliam", "Rolly", "Ron", "Ronin", "Rony", "Roppy", "Ropsey", "Rora", "Roroy", "Rorrell", "Rorroy", "Rory", "Rossey", "Rotty", "Roty", "Sadan", "Saddy", "Saer", "Saffy", "Sagan", "Saggan", "Sagh", "Saghan", "Sains", "Sakry", "Salan", "Sale", "Saley", "Saliam", "Sally", "San", "Sanin", "Sany", "Sappy", "Sapsey", "Sara", "Saroy", "Sarrell", "Sarroy", "Sary", "Sassey", "Satty", "Saty", "Shedan", "Sheddy", "Sheer", "Sheffy", "Shegan", "Sheggan", "Shegh", "Sheghan", "Sheins", "Shekry", "Shelan", "Shele", "Sheley", "Sheliam", "Shelly", "Shen", "Shenin", "Sheny", "Sheppy", "Shepsey", "Shera", "Sheroy", "Sherrell", "Sherroy", "Shery", "Shessey", "Shetty", "Shety", "Tedan", "Teddy", "Teer", "Teffy", "Tegan", "Teggan", "Tegh", "Teghan", "Teins", "Tekry", "Telan", "Tele", "Teley", "Teliam", "Telly", "Ten", "Tenin", "Teny", "Teppy", "Tepsey", "Tera", "Teroy", "Terrell", "Terroy", "Tery", "Tessey", "Tetty", "Tety", "Toodan", "Tooddy", "Tooer", "Tooffy", "Toogan", "Tooggan", "Toogh", "Tooghan", "Tooins", "Tookry", "Toolan", "Toole", "Tooley", "Tooliam", "Toolly", "Toon", "Toonin", "Toony", "Tooppy", "Toopsey", "Toora", "Tooroy", "Toorrell", "Toorroy", "Toory", "Toossey", "Tootty", "Tooty", "Widan", "Widdy", "Wier", "Wiffy", "Wigan", "Wiggan", "Wigh", "Wighan", "Wiins", "Wikry", "Wilan", "Wile", "Wiley", "Wiliam", "Willy", "Win", "Winin", "Winy", "Wippy", "Wipsey", "Wira", "Wiroy", "Wirrell", "Wirroy", "Wiry", "Wissey", "Witty", "Wity", "Ydan", "Yddy", "Yer", "Yffy", "Ygan", "Yggan", "Ygh", "Yghan", "Yins", "Ykry", "Ylan", "Yle", "Yley", "Yliam", "Ylly", "Yn", "Ynin", "Yny", "Yppy", "Ypsey", "Yra", "Yroy", "Yrrell", "Yrroy", "Yry", "Yssey", "Ytty", "Yty"}
\ No newline at end of file
+trykerLastNames = {"Ardan", "Arddy", "Arer", "Arffy", "Argan", "Arggan", "Argh", "Arghan", "Arins", "Arkry", "Arlan", "Arle", "Arley", "Arliam", "Arlly", "Arn", "Arnin", "Arny", "Arppy", "Arpsey", "Arra", "Arroy", "Arrrell", "Arrroy", "Arry", "Arssey", "Artty", "Arty", "Ba'ardan", "Ba'arddy", "Ba'arer", "Ba'arffy", "Ba'argan", "Ba'arggan", "Ba'argh", "Ba'arghan", "Ba'arins", "Ba'arkry", "Ba'arlan", "Ba'arle", "Ba'arley", "Ba'arliam", "Ba'arlly", "Ba'arn", "Ba'arnin", "Ba'arny", "Ba'arppy", "Ba'arpsey", "Ba'arra", "Ba'arroy", "Ba'arrrell", "Ba'arrroy", "Ba'arry", "Ba'arssey", "Ba'artty", "Ba'arty", "Ba'bidan", "Ba'biddy", "Ba'bier", "Ba'biffy", "Ba'bigan", "Ba'biggan", "Ba'bigh", "Ba'bighan", "Ba'biins", "Ba'bikry", "Ba'bilan", "Ba'bile", "Ba'biley", "Ba'biliam", "Ba'billy", "Ba'bin", "Ba'binin", "Ba'biny", "Ba'bippy", "Ba'bipsey", "Ba'bira", "Ba'biroy", "Ba'birrell", "Ba'birroy", "Ba'biry", "Ba'bissey", "Ba'bitty", "Ba'bity", "Ba'caudan", "Ba'cauddy", "Ba'cauer", "Ba'cauffy", "Ba'caugan", "Ba'cauggan", "Ba'caugh", "Ba'caughan", "Ba'cauins", "Ba'caukry", "Ba'caulan", "Ba'caule", "Ba'cauley", "Ba'cauliam", "Ba'caully", "Ba'caun", "Ba'caunin", "Ba'cauny", "Ba'cauppy", "Ba'caupsey", "Ba'caura", "Ba'cauroy", "Ba'caurrell", "Ba'caurroy", "Ba'caury", "Ba'caussey", "Ba'cautty", "Ba'cauty", "Ba'dadan", "Ba'daddy", "Ba'daer", "Ba'daffy", "Ba'dagan", "Ba'daggan", "Ba'dagh", "Ba'daghan", "Ba'dains", "Ba'dakry", "Ba'dalan", "Ba'dale", "Ba'daley", "Ba'daliam", "Ba'dally", "Ba'dan", "Ba'danin", "Ba'dany", "Ba'dappy", "Ba'dapsey", "Ba'dara", "Ba'dardan", "Ba'darddy", "Ba'darer", "Ba'darffy", "Ba'dargan", "Ba'darggan", "Ba'dargh", "Ba'darghan", "Ba'darins", "Ba'darkry", "Ba'darlan", "Ba'darle", "Ba'darley", "Ba'darliam", "Ba'darlly", "Ba'darn", "Ba'darnin", "Ba'darny", "Ba'daroy", "Ba'darppy", "Ba'darpsey", "Ba'darra", "Ba'darrell", "Ba'darroy", "Ba'darrrell", "Ba'darrroy", "Ba'darry", "Ba'darssey", "Ba'dartty", "Ba'darty", "Ba'dary", "Ba'dassey", "Ba'datty", "Ba'daty", "Ba'doydan", "Ba'doyddy", "Ba'doyer", "Ba'doyffy", "Ba'doygan", "Ba'doyggan", "Ba'doygh", "Ba'doyghan", "Ba'doyins", "Ba'doykry", "Ba'doylan", "Ba'doyle", "Ba'doyley", "Ba'doyliam", "Ba'doylly", "Ba'doyn", "Ba'doynin", "Ba'doyny", "Ba'doyppy", "Ba'doypsey", "Ba'doyra", "Ba'doyroy", "Ba'doyrrell", "Ba'doyrroy", "Ba'doyry", "Ba'doyssey", "Ba'doytty", "Ba'doyty", "Ba'dudan", "Ba'duddy", "Ba'duer", "Ba'duffy", "Ba'dugan", "Ba'duggan", "Ba'dugh", "Ba'dughan", "Ba'duins", "Ba'dukry", "Ba'dulan", "Ba'dule", "Ba'duley", "Ba'duliam", "Ba'dully", "Ba'dun", "Ba'dunin", "Ba'duny", "Ba'duppy", "Ba'dupsey", "Ba'dura", "Ba'duroy", "Ba'durrell", "Ba'durroy", "Ba'dury", "Ba'dussey", "Ba'dutty", "Ba'duty", "Ba'gadan", "Ba'gaddy", "Ba'gaer", "Ba'gaffy", "Ba'gagan", "Ba'gaggan", "Ba'gagh", "Ba'gaghan", "Ba'gains", "Ba'gakry", "Ba'galan", "Ba'gale", "Ba'galey", "Ba'galiam", "Ba'gally", "Ba'gan", "Ba'ganin", "Ba'gany", "Ba'gappy", "Ba'gapsey", "Ba'gara", "Ba'garoy", "Ba'garrell", "Ba'garroy", "Ba'gary", "Ba'gassey", "Ba'gatty", "Ba'gaty", "Ba'jordan", "Ba'jorddy", "Ba'jorer", "Ba'jorffy", "Ba'jorgan", "Ba'jorggan", "Ba'jorgh", "Ba'jorghan", "Ba'jorins", "Ba'jorkry", "Ba'jorlan", "Ba'jorle", "Ba'jorley", "Ba'jorliam", "Ba'jorlly", "Ba'jorn", "Ba'jornin", "Ba'jorny", "Ba'jorppy", "Ba'jorpsey", "Ba'jorra", "Ba'jorroy", "Ba'jorrrell", "Ba'jorrroy", "Ba'jorry", "Ba'jorssey", "Ba'jortty", "Ba'jorty", "Ba'keadan", "Ba'keaddy", "Ba'keaer", "Ba'keaffy", "Ba'keagan", "Ba'keaggan", "Ba'keagh", "Ba'keaghan", "Ba'keains", "Ba'keakry", "Ba'kealan", "Ba'keale", "Ba'kealey", "Ba'kealiam", "Ba'keally", "Ba'kean", "Ba'keanin", "Ba'keany", "Ba'keappy", "Ba'keapsey", "Ba'keara", "Ba'kearoy", "Ba'kearrell", "Ba'kearroy", "Ba'keary", "Ba'keassey", "Ba'keatty", "Ba'keaty", "Ba'keedan", "Ba'keeddy", "Ba'keeer", "Ba'keeffy", "Ba'keegan", "Ba'keeggan", "Ba'keegh", "Ba'keeghan", "Ba'keeins", "Ba'keekry", "Ba'keelan", "Ba'keele", "Ba'keeley", "Ba'keeliam", "Ba'keelly", "Ba'keen", "Ba'keenin", "Ba'keeny", "Ba'keeppy", "Ba'keepsey", "Ba'keera", "Ba'keeroy", "Ba'keerrell", "Ba'keerroy", "Ba'keery", "Ba'keessey", "Ba'keetty", "Ba'keety", "Ba'laudan", "Ba'lauddy", "Ba'lauer", "Ba'lauffy", "Ba'laugan", "Ba'lauggan", "Ba'laugh", "Ba'laughan", "Ba'lauins", "Ba'laukry", "Ba'laulan", "Ba'laule", "Ba'lauley", "Ba'lauliam", "Ba'laully", "Ba'laun", "Ba'launin", "Ba'launy", "Ba'lauppy", "Ba'laupsey", "Ba'laura", "Ba'lauroy", "Ba'laurrell", "Ba'laurroy", "Ba'laury", "Ba'laussey", "Ba'lautty", "Ba'lauty", "Ba'leadan", "Ba'leaddy", "Ba'leaer", "Ba'leaffy", "Ba'leagan", "Ba'leaggan", "Ba'leagh", "Ba'leaghan", "Ba'leains", "Ba'leakry", "Ba'lealan", "Ba'leale", "Ba'lealey", "Ba'lealiam", "Ba'leally", "Ba'lean", "Ba'leanin", "Ba'leany", "Ba'leappy", "Ba'leapsey", "Ba'leara", "Ba'learoy", "Ba'learrell", "Ba'learroy", "Ba'leary", "Ba'leassey", "Ba'leatty", "Ba'leaty", "Ba'ledan", "Ba'leddy", "Ba'leer", "Ba'leffy", "Ba'legan", "Ba'leggan", "Ba'legh", "Ba'leghan", "Ba'leidan", "Ba'leiddy", "Ba'leier", "Ba'leiffy", "Ba'leigan", "Ba'leiggan", "Ba'leigh", "Ba'leighan", "Ba'leiins", "Ba'leikry", "Ba'leilan", "Ba'leile", "Ba'leiley", "Ba'leiliam", "Ba'leilly", "Ba'lein", "Ba'leinin", "Ba'leins", "Ba'leiny", "Ba'leippy", "Ba'leipsey", "Ba'leira", "Ba'leiroy", "Ba'leirrell", "Ba'leirroy", "Ba'leiry", "Ba'leissey", "Ba'leitty", "Ba'leity", "Ba'lekry", "Ba'lelan", "Ba'lele", "Ba'leley", "Ba'leliam", "Ba'lelly", "Ba'len", "Ba'lenin", "Ba'leny", "Ba'leppy", "Ba'lepsey", "Ba'lera", "Ba'leroy", "Ba'lerrell", "Ba'lerroy", "Ba'lery", "Ba'lessey", "Ba'letty", "Ba'lety", "Ba'lodan", "Ba'loddy", "Ba'loer", "Ba'loffy", "Ba'logan", "Ba'loggan", "Ba'logh", "Ba'loghan", "Ba'loins", "Ba'lokry", "Ba'lolan", "Ba'lole", "Ba'loley", "Ba'loliam", "Ba'lolly", "Ba'lon", "Ba'lonin", "Ba'lony", "Ba'loppy", "Ba'lopsey", "Ba'lora", "Ba'loroy", "Ba'lorrell", "Ba'lorroy", "Ba'lory", "Ba'lossey", "Ba'lotty", "Ba'loty", "Ba'lyndan", "Ba'lynddy", "Ba'lyner", "Ba'lynffy", "Ba'lyngan", "Ba'lynggan", "Ba'lyngh", "Ba'lynghan", "Ba'lynins", "Ba'lynkry", "Ba'lynlan", "Ba'lynle", "Ba'lynley", "Ba'lynliam", "Ba'lynlly", "Ba'lynn", "Ba'lynnin", "Ba'lynny", "Ba'lynppy", "Ba'lynpsey", "Ba'lynra", "Ba'lynroy", "Ba'lynrrell", "Ba'lynrroy", "Ba'lynry", "Ba'lynssey", "Ba'lyntty", "Ba'lynty", "Ba'madan", "Ba'maddy", "Ba'maer", "Ba'maffy", "Ba'magan", "Ba'maggan", "Ba'magh", "Ba'maghan", "Ba'mains", "Ba'makry", "Ba'malan", "Ba'male", "Ba'maley", "Ba'maliam", "Ba'mally", "Ba'man", "Ba'manin", "Ba'many", "Ba'mappy", "Ba'mapsey", "Ba'mara", "Ba'maroy", "Ba'marrell", "Ba'marroy", "Ba'mary", "Ba'massey", "Ba'matty", "Ba'maty", "Ba'nadan", "Ba'naddy", "Ba'naer", "Ba'naffy", "Ba'nagan", "Ba'naggan", "Ba'nagh", "Ba'naghan", "Ba'nains", "Ba'nakry", "Ba'nalan", "Ba'nale", "Ba'naley", "Ba'naliam", "Ba'nally", "Ba'nan", "Ba'nanin", "Ba'nany", "Ba'nappy", "Ba'napsey", "Ba'nara", "Ba'naroy", "Ba'narrell", "Ba'narroy", "Ba'nary", "Ba'nassey", "Ba'natty", "Ba'naty", "Ba'nedan", "Ba'neddy", "Ba'neer", "Ba'neffy", "Ba'negan", "Ba'neggan", "Ba'negh", "Ba'neghan", "Ba'neins", "Ba'nekry", "Ba'nelan", "Ba'nele", "Ba'neley", "Ba'neliam", "Ba'nelly", "Ba'nen", "Ba'nenin", "Ba'neny", "Ba'neppy", "Ba'nepsey", "Ba'nera", "Ba'neroy", "Ba'nerrell", "Ba'nerroy", "Ba'nery", "Ba'nessey", "Ba'netty", "Ba'nety", "Ba'peadan", "Ba'peaddy", "Ba'peaer", "Ba'peaffy", "Ba'peagan", "Ba'peaggan", "Ba'peagh", "Ba'peaghan", "Ba'peains", "Ba'peakry", "Ba'pealan", "Ba'peale", "Ba'pealey", "Ba'pealiam", "Ba'peally", "Ba'pean", "Ba'peanin", "Ba'peany", "Ba'peappy", "Ba'peapsey", "Ba'peara", "Ba'pearoy", "Ba'pearrell", "Ba'pearroy", "Ba'peary", "Ba'peassey", "Ba'peatty", "Ba'peaty", "Ba'reidan", "Ba'reiddy", "Ba'reier", "Ba'reiffy", "Ba'reigan", "Ba'reiggan", "Ba'reigh", "Ba'reighan", "Ba'reiins", "Ba'reikry", "Ba'reilan", "Ba'reile", "Ba'reiley", "Ba'reiliam", "Ba'reilly", "Ba'rein", "Ba'reinin", "Ba'reiny", "Ba'reippy", "Ba'reipsey", "Ba'reira", "Ba'reiroy", "Ba'reirrell", "Ba'reirroy", "Ba'reiry", "Ba'reissey", "Ba'reitty", "Ba'reity", "Ba'ridan", "Ba'riddy", "Ba'rier", "Ba'riffy", "Ba'rigan", "Ba'riggan", "Ba'righ", "Ba'righan", "Ba'riins", "Ba'rikry", "Ba'rilan", "Ba'rile", "Ba'riley", "Ba'riliam", "Ba'rilly", "Ba'rin", "Ba'rinin", "Ba'riny", "Ba'ripdan", "Ba'ripddy", "Ba'riper", "Ba'ripffy", "Ba'ripgan", "Ba'ripggan", "Ba'ripgh", "Ba'ripghan", "Ba'ripins", "Ba'ripkry", "Ba'riplan", "Ba'riple", "Ba'ripley", "Ba'ripliam", "Ba'riplly", "Ba'ripn", "Ba'ripnin", "Ba'ripny", "Ba'ripppy", "Ba'rippsey", "Ba'rippy", "Ba'ripra", "Ba'riproy", "Ba'riprrell", "Ba'riprroy", "Ba'ripry", "Ba'ripsey", "Ba'ripssey", "Ba'riptty", "Ba'ripty", "Ba'rira", "Ba'riroy", "Ba'rirrell", "Ba'rirroy", "Ba'riry", "Ba'rissey", "Ba'ritty", "Ba'rity", "Ba'rodan", "Ba'roddy", "Ba'roer", "Ba'roffy", "Ba'rogan", "Ba'roggan", "Ba'rogh", "Ba'roghan", "Ba'roins", "Ba'rokry", "Ba'rolan", "Ba'role", "Ba'roley", "Ba'roliam", "Ba'rolly", "Ba'ron", "Ba'ronin", "Ba'rony", "Ba'roppy", "Ba'ropsey", "Ba'rora", "Ba'roroy", "Ba'rorrell", "Ba'rorroy", "Ba'rory", "Ba'rossey", "Ba'rotty", "Ba'roty", "Ba'sadan", "Ba'saddy", "Ba'saer", "Ba'saffy", "Ba'sagan", "Ba'saggan", "Ba'sagh", "Ba'saghan", "Ba'sains", "Ba'sakry", "Ba'salan", "Ba'sale", "Ba'saley", "Ba'saliam", "Ba'sally", "Ba'san", "Ba'sanin", "Ba'sany", "Ba'sappy", "Ba'sapsey", "Ba'sara", "Ba'saroy", "Ba'sarrell", "Ba'sarroy", "Ba'sary", "Ba'sassey", "Ba'satty", "Ba'saty", "Ba'shedan", "Ba'sheddy", "Ba'sheer", "Ba'sheffy", "Ba'shegan", "Ba'sheggan", "Ba'shegh", "Ba'sheghan", "Ba'sheins", "Ba'shekry", "Ba'shelan", "Ba'shele", "Ba'sheley", "Ba'sheliam", "Ba'shelly", "Ba'shen", "Ba'shenin", "Ba'sheny", "Ba'sheppy", "Ba'shepsey", "Ba'shera", "Ba'sheroy", "Ba'sherrell", "Ba'sherroy", "Ba'shery", "Ba'shessey", "Ba'shetty", "Ba'shety", "Ba'tedan", "Ba'teddy", "Ba'teer", "Ba'teffy", "Ba'tegan", "Ba'teggan", "Ba'tegh", "Ba'teghan", "Ba'teins", "Ba'tekry", "Ba'telan", "Ba'tele", "Ba'teley", "Ba'teliam", "Ba'telly", "Ba'ten", "Ba'tenin", "Ba'teny", "Ba'teppy", "Ba'tepsey", "Ba'tera", "Ba'teroy", "Ba'terrell", "Ba'terroy", "Ba'tery", "Ba'tessey", "Ba'tetty", "Ba'tety", "Ba'toodan", "Ba'tooddy", "Ba'tooer", "Ba'tooffy", "Ba'toogan", "Ba'tooggan", "Ba'toogh", "Ba'tooghan", "Ba'tooins", "Ba'tookry", "Ba'toolan", "Ba'toole", "Ba'tooley", "Ba'tooliam", "Ba'toolly", "Ba'toon", "Ba'toonin", "Ba'toony", "Ba'tooppy", "Ba'toopsey", "Ba'toora", "Ba'tooroy", "Ba'toorrell", "Ba'toorroy", "Ba'toory", "Ba'toossey", "Ba'tootty", "Ba'tooty", "Ba'widan", "Ba'widdy", "Ba'wier", "Ba'wiffy", "Ba'wigan", "Ba'wiggan", "Ba'wigh", "Ba'wighan", "Ba'wiins", "Ba'wikry", "Ba'wilan", "Ba'wile", "Ba'wiley", "Ba'wiliam", "Ba'willy", "Ba'win", "Ba'winin", "Ba'winy", "Ba'wippy", "Ba'wipsey", "Ba'wira", "Ba'wiroy", "Ba'wirrell", "Ba'wirroy", "Ba'wiry", "Ba'wissey", "Ba'witty", "Ba'wity", "Ba'ydan", "Ba'yddy", "Ba'yer", "Ba'yffy", "Ba'ygan", "Ba'yggan", "Ba'ygh", "Ba'yghan", "Ba'yins", "Ba'ykry", "Ba'ylan", "Ba'yle", "Ba'yley", "Ba'yliam", "Ba'ylly", "Ba'yn", "Ba'ynin", "Ba'yny", "Ba'yppy", "Ba'ypsey", "Ba'yra", "Ba'yroy", "Ba'yrrell", "Ba'yrroy", "Ba'yry", "Ba'yssey", "Ba'ytty", "Ba'yty", "Be'ardan", "Be'arddy", "Be'arer", "Be'arffy", "Be'argan", "Be'arggan", "Be'argh", "Be'arghan", "Be'arins", "Be'arkry", "Be'arlan", "Be'arle", "Be'arley", "Be'arliam", "Be'arlly", "Be'arn", "Be'arnin", "Be'arny", "Be'arppy", "Be'arpsey", "Be'arra", "Be'arroy", "Be'arrrell", "Be'arrroy", "Be'arry", "Be'arssey", "Be'artty", "Be'arty", "Be'bidan", "Be'biddy", "Be'bier", "Be'biffy", "Be'bigan", "Be'biggan", "Be'bigh", "Be'bighan", "Be'biins", "Be'bikry", "Be'bilan", "Be'bile", "Be'biley", "Be'biliam", "Be'billy", "Be'bin", "Be'binin", "Be'biny", "Be'bippy", "Be'bipsey", "Be'bira", "Be'biroy", "Be'birrell", "Be'birroy", "Be'biry", "Be'bissey", "Be'bitty", "Be'bity", "Be'caudan", "Be'cauddy", "Be'cauer", "Be'cauffy", "Be'caugan", "Be'cauggan", "Be'caugh", "Be'caughan", "Be'cauins", "Be'caukry", "Be'caulan", "Be'caule", "Be'cauley", "Be'cauliam", "Be'caully", "Be'caun", "Be'caunin", "Be'cauny", "Be'cauppy", "Be'caupsey", "Be'caura", "Be'cauroy", "Be'caurrell", "Be'caurroy", "Be'caury", "Be'caussey", "Be'cautty", "Be'cauty", "Be'dadan", "Be'daddy", "Be'daer", "Be'daffy", "Be'dagan", "Be'daggan", "Be'dagh", "Be'daghan", "Be'dains", "Be'dakry", "Be'dalan", "Be'dale", "Be'daley", "Be'daliam", "Be'dally", "Be'dan", "Be'danin", "Be'dany", "Be'dappy", "Be'dapsey", "Be'dara", "Be'dardan", "Be'darddy", "Be'darer", "Be'darffy", "Be'dargan", "Be'darggan", "Be'dargh", "Be'darghan", "Be'darins", "Be'darkry", "Be'darlan", "Be'darle", "Be'darley", "Be'darliam", "Be'darlly", "Be'darn", "Be'darnin", "Be'darny", "Be'daroy", "Be'darppy", "Be'darpsey", "Be'darra", "Be'darrell", "Be'darroy", "Be'darrrell", "Be'darrroy", "Be'darry", "Be'darssey", "Be'dartty", "Be'darty", "Be'dary", "Be'dassey", "Be'datty", "Be'daty", "Be'doydan", "Be'doyddy", "Be'doyer", "Be'doyffy", "Be'doygan", "Be'doyggan", "Be'doygh", "Be'doyghan", "Be'doyins", "Be'doykry", "Be'doylan", "Be'doyle", "Be'doyley", "Be'doyliam", "Be'doylly", "Be'doyn", "Be'doynin", "Be'doyny", "Be'doyppy", "Be'doypsey", "Be'doyra", "Be'doyroy", "Be'doyrrell", "Be'doyrroy", "Be'doyry", "Be'doyssey", "Be'doytty", "Be'doyty", "Be'dudan", "Be'duddy", "Be'duer", "Be'duffy", "Be'dugan", "Be'duggan", "Be'dugh", "Be'dughan", "Be'duins", "Be'dukry", "Be'dulan", "Be'dule", "Be'duley", "Be'duliam", "Be'dully", "Be'dun", "Be'dunin", "Be'duny", "Be'duppy", "Be'dupsey", "Be'dura", "Be'duroy", "Be'durrell", "Be'durroy", "Be'dury", "Be'dussey", "Be'dutty", "Be'duty", "Be'gadan", "Be'gaddy", "Be'gaer", "Be'gaffy", "Be'gagan", "Be'gaggan", "Be'gagh", "Be'gaghan", "Be'gains", "Be'gakry", "Be'galan", "Be'gale", "Be'galey", "Be'galiam", "Be'gally", "Be'gan", "Be'ganin", "Be'gany", "Be'gappy", "Be'gapsey", "Be'gara", "Be'garoy", "Be'garrell", "Be'garroy", "Be'gary", "Be'gassey", "Be'gatty", "Be'gaty", "Be'jordan", "Be'jorddy", "Be'jorer", "Be'jorffy", "Be'jorgan", "Be'jorggan", "Be'jorgh", "Be'jorghan", "Be'jorins", "Be'jorkry", "Be'jorlan", "Be'jorle", "Be'jorley", "Be'jorliam", "Be'jorlly", "Be'jorn", "Be'jornin", "Be'jorny", "Be'jorppy", "Be'jorpsey", "Be'jorra", "Be'jorroy", "Be'jorrrell", "Be'jorrroy", "Be'jorry", "Be'jorssey", "Be'jortty", "Be'jorty", "Be'keadan", "Be'keaddy", "Be'keaer", "Be'keaffy", "Be'keagan", "Be'keaggan", "Be'keagh", "Be'keaghan", "Be'keains", "Be'keakry", "Be'kealan", "Be'keale", "Be'kealey", "Be'kealiam", "Be'keally", "Be'kean", "Be'keanin", "Be'keany", "Be'keappy", "Be'keapsey", "Be'keara", "Be'kearoy", "Be'kearrell", "Be'kearroy", "Be'keary", "Be'keassey", "Be'keatty", "Be'keaty", "Be'keedan", "Be'keeddy", "Be'keeer", "Be'keeffy", "Be'keegan", "Be'keeggan", "Be'keegh", "Be'keeghan", "Be'keeins", "Be'keekry", "Be'keelan", "Be'keele", "Be'keeley", "Be'keeliam", "Be'keelly", "Be'keen", "Be'keenin", "Be'keeny", "Be'keeppy", "Be'keepsey", "Be'keera", "Be'keeroy", "Be'keerrell", "Be'keerroy", "Be'keery", "Be'keessey", "Be'keetty", "Be'keety", "Be'laudan", "Be'lauddy", "Be'lauer", "Be'lauffy", "Be'laugan", "Be'lauggan", "Be'laugh", "Be'laughan", "Be'lauins", "Be'laukry", "Be'laulan", "Be'laule", "Be'lauley", "Be'lauliam", "Be'laully", "Be'laun", "Be'launin", "Be'launy", "Be'lauppy", "Be'laupsey", "Be'laura", "Be'lauroy", "Be'laurrell", "Be'laurroy", "Be'laury", "Be'laussey", "Be'lautty", "Be'lauty", "Be'leadan", "Be'leaddy", "Be'leaer", "Be'leaffy", "Be'leagan", "Be'leaggan", "Be'leagh", "Be'leaghan", "Be'leains", "Be'leakry", "Be'lealan", "Be'leale", "Be'lealey", "Be'lealiam", "Be'leally", "Be'lean", "Be'leanin", "Be'leany", "Be'leappy", "Be'leapsey", "Be'leara", "Be'learoy", "Be'learrell", "Be'learroy", "Be'leary", "Be'leassey", "Be'leatty", "Be'leaty", "Be'ledan", "Be'leddy", "Be'leer", "Be'leffy", "Be'legan", "Be'leggan", "Be'legh", "Be'leghan", "Be'leidan", "Be'leiddy", "Be'leier", "Be'leiffy", "Be'leigan", "Be'leiggan", "Be'leigh", "Be'leighan", "Be'leiins", "Be'leikry", "Be'leilan", "Be'leile", "Be'leiley", "Be'leiliam", "Be'leilly", "Be'lein", "Be'leinin", "Be'leins", "Be'leiny", "Be'leippy", "Be'leipsey", "Be'leira", "Be'leiroy", "Be'leirrell", "Be'leirroy", "Be'leiry", "Be'leissey", "Be'leitty", "Be'leity", "Be'lekry", "Be'lelan", "Be'lele", "Be'leley", "Be'leliam", "Be'lelly", "Be'len", "Be'lenin", "Be'leny", "Be'leppy", "Be'lepsey", "Be'lera", "Be'leroy", "Be'lerrell", "Be'lerroy", "Be'lery", "Be'lessey", "Be'letty", "Be'lety", "Be'lodan", "Be'loddy", "Be'loer", "Be'loffy", "Be'logan", "Be'loggan", "Be'logh", "Be'loghan", "Be'loins", "Be'lokry", "Be'lolan", "Be'lole", "Be'loley", "Be'loliam", "Be'lolly", "Be'lon", "Be'lonin", "Be'lony", "Be'loppy", "Be'lopsey", "Be'lora", "Be'loroy", "Be'lorrell", "Be'lorroy", "Be'lory", "Be'lossey", "Be'lotty", "Be'loty", "Be'lyndan", "Be'lynddy", "Be'lyner", "Be'lynffy", "Be'lyngan", "Be'lynggan", "Be'lyngh", "Be'lynghan", "Be'lynins", "Be'lynkry", "Be'lynlan", "Be'lynle", "Be'lynley", "Be'lynliam", "Be'lynlly", "Be'lynn", "Be'lynnin", "Be'lynny", "Be'lynppy", "Be'lynpsey", "Be'lynra", "Be'lynroy", "Be'lynrrell", "Be'lynrroy", "Be'lynry", "Be'lynssey", "Be'lyntty", "Be'lynty", "Be'madan", "Be'maddy", "Be'maer", "Be'maffy", "Be'magan", "Be'maggan", "Be'magh", "Be'maghan", "Be'mains", "Be'makry", "Be'malan", "Be'male", "Be'maley", "Be'maliam", "Be'mally", "Be'man", "Be'manin", "Be'many", "Be'mappy", "Be'mapsey", "Be'mara", "Be'maroy", "Be'marrell", "Be'marroy", "Be'mary", "Be'massey", "Be'matty", "Be'maty", "Be'nadan", "Be'naddy", "Be'naer", "Be'naffy", "Be'nagan", "Be'naggan", "Be'nagh", "Be'naghan", "Be'nains", "Be'nakry", "Be'nalan", "Be'nale", "Be'naley", "Be'naliam", "Be'nally", "Be'nan", "Be'nanin", "Be'nany", "Be'nappy", "Be'napsey", "Be'nara", "Be'naroy", "Be'narrell", "Be'narroy", "Be'nary", "Be'nassey", "Be'natty", "Be'naty", "Be'nedan", "Be'neddy", "Be'neer", "Be'neffy", "Be'negan", "Be'neggan", "Be'negh", "Be'neghan", "Be'neins", "Be'nekry", "Be'nelan", "Be'nele", "Be'neley", "Be'neliam", "Be'nelly", "Be'nen", "Be'nenin", "Be'neny", "Be'neppy", "Be'nepsey", "Be'nera", "Be'neroy", "Be'nerrell", "Be'nerroy", "Be'nery", "Be'nessey", "Be'netty", "Be'nety", "Be'peadan", "Be'peaddy", "Be'peaer", "Be'peaffy", "Be'peagan", "Be'peaggan", "Be'peagh", "Be'peaghan", "Be'peains", "Be'peakry", "Be'pealan", "Be'peale", "Be'pealey", "Be'pealiam", "Be'peally", "Be'pean", "Be'peanin", "Be'peany", "Be'peappy", "Be'peapsey", "Be'peara", "Be'pearoy", "Be'pearrell", "Be'pearroy", "Be'peary", "Be'peassey", "Be'peatty", "Be'peaty", "Be'reidan", "Be'reiddy", "Be'reier", "Be'reiffy", "Be'reigan", "Be'reiggan", "Be'reigh", "Be'reighan", "Be'reiins", "Be'reikry", "Be'reilan", "Be'reile", "Be'reiley", "Be'reiliam", "Be'reilly", "Be'rein", "Be'reinin", "Be'reiny", "Be'reippy", "Be'reipsey", "Be'reira", "Be'reiroy", "Be'reirrell", "Be'reirroy", "Be'reiry", "Be'reissey", "Be'reitty", "Be'reity", "Be'ridan", "Be'riddy", "Be'rier", "Be'riffy", "Be'rigan", "Be'riggan", "Be'righ", "Be'righan", "Be'riins", "Be'rikry", "Be'rilan", "Be'rile", "Be'riley", "Be'riliam", "Be'rilly", "Be'rin", "Be'rinin", "Be'riny", "Be'ripdan", "Be'ripddy", "Be'riper", "Be'ripffy", "Be'ripgan", "Be'ripggan", "Be'ripgh", "Be'ripghan", "Be'ripins", "Be'ripkry", "Be'riplan", "Be'riple", "Be'ripley", "Be'ripliam", "Be'riplly", "Be'ripn", "Be'ripnin", "Be'ripny", "Be'ripppy", "Be'rippsey", "Be'rippy", "Be'ripra", "Be'riproy", "Be'riprrell", "Be'riprroy", "Be'ripry", "Be'ripsey", "Be'ripssey", "Be'riptty", "Be'ripty", "Be'rira", "Be'riroy", "Be'rirrell", "Be'rirroy", "Be'riry", "Be'rissey", "Be'ritty", "Be'rity", "Be'rodan", "Be'roddy", "Be'roer", "Be'roffy", "Be'rogan", "Be'roggan", "Be'rogh", "Be'roghan", "Be'roins", "Be'rokry", "Be'rolan", "Be'role", "Be'roley", "Be'roliam", "Be'rolly", "Be'ron", "Be'ronin", "Be'rony", "Be'roppy", "Be'ropsey", "Be'rora", "Be'roroy", "Be'rorrell", "Be'rorroy", "Be'rory", "Be'rossey", "Be'rotty", "Be'roty", "Be'sadan", "Be'saddy", "Be'saer", "Be'saffy", "Be'sagan", "Be'saggan", "Be'sagh", "Be'saghan", "Be'sains", "Be'sakry", "Be'salan", "Be'sale", "Be'saley", "Be'saliam", "Be'sally", "Be'san", "Be'sanin", "Be'sany", "Be'sappy", "Be'sapsey", "Be'sara", "Be'saroy", "Be'sarrell", "Be'sarroy", "Be'sary", "Be'sassey", "Be'satty", "Be'saty", "Be'shedan", "Be'sheddy", "Be'sheer", "Be'sheffy", "Be'shegan", "Be'sheggan", "Be'shegh", "Be'sheghan", "Be'sheins", "Be'shekry", "Be'shelan", "Be'shele", "Be'sheley", "Be'sheliam", "Be'shelly", "Be'shen", "Be'shenin", "Be'sheny", "Be'sheppy", "Be'shepsey", "Be'shera", "Be'sheroy", "Be'sherrell", "Be'sherroy", "Be'shery", "Be'shessey", "Be'shetty", "Be'shety", "Be'tedan", "Be'teddy", "Be'teer", "Be'teffy", "Be'tegan", "Be'teggan", "Be'tegh", "Be'teghan", "Be'teins", "Be'tekry", "Be'telan", "Be'tele", "Be'teley", "Be'teliam", "Be'telly", "Be'ten", "Be'tenin", "Be'teny", "Be'teppy", "Be'tepsey", "Be'tera", "Be'teroy", "Be'terrell", "Be'terroy", "Be'tery", "Be'tessey", "Be'tetty", "Be'tety", "Be'toodan", "Be'tooddy", "Be'tooer", "Be'tooffy", "Be'toogan", "Be'tooggan", "Be'toogh", "Be'tooghan", "Be'tooins", "Be'tookry", "Be'toolan", "Be'toole", "Be'tooley", "Be'tooliam", "Be'toolly", "Be'toon", "Be'toonin", "Be'toony", "Be'tooppy", "Be'toopsey", "Be'toora", "Be'tooroy", "Be'toorrell", "Be'toorroy", "Be'toory", "Be'toossey", "Be'tootty", "Be'tooty", "Be'widan", "Be'widdy", "Be'wier", "Be'wiffy", "Be'wigan", "Be'wiggan", "Be'wigh", "Be'wighan", "Be'wiins", "Be'wikry", "Be'wilan", "Be'wile", "Be'wiley", "Be'wiliam", "Be'willy", "Be'win", "Be'winin", "Be'winy", "Be'wippy", "Be'wipsey", "Be'wira", "Be'wiroy", "Be'wirrell", "Be'wirroy", "Be'wiry", "Be'wissey", "Be'witty", "Be'wity", "Be'ydan", "Be'yddy", "Be'yer", "Be'yffy", "Be'ygan", "Be'yggan", "Be'ygh", "Be'yghan", "Be'yins", "Be'ykry", "Be'ylan", "Be'yle", "Be'yley", "Be'yliam", "Be'ylly", "Be'yn", "Be'ynin", "Be'yny", "Be'yppy", "Be'ypsey", "Be'yra", "Be'yroy", "Be'yrrell", "Be'yrroy", "Be'yry", "Be'yssey", "Be'ytty", "Be'yty", "Bidan", "Biddy", "Bier", "Biffy", "Bigan", "Biggan", "Bigh", "Bighan", "Biins", "Bikry", "Bilan", "Bile", "Biley", "Biliam", "Billy", "Bin", "Binin", "Biny", "Bippy", "Bipsey", "Bira", "Biroy", "Birrell", "Birroy", "Biry", "Bissey", "Bitty", "Bity", "Caudan", "Cauddy", "Cauer", "Cauffy", "Caugan", "Cauggan", "Caugh", "Caughan", "Cauins", "Caukry", "Caulan", "Caule", "Cauley", "Cauliam", "Caully", "Caun", "Caunin", "Cauny", "Cauppy", "Caupsey", "Caura", "Cauroy", "Caurrell", "Caurroy", "Caury", "Caussey", "Cautty", "Cauty", "Dadan", "Daddy", "Daer", "Daffy", "Dagan", "Daggan", "Dagh", "Daghan", "Dains", "Dakry", "Dalan", "Dale", "Daley", "Daliam", "Dally", "Dan", "Danin", "Dany", "Dappy", "Dapsey", "Dara", "Dardan", "Darddy", "Darer", "Darffy", "Dargan", "Darggan", "Dargh", "Darghan", "Darins", "Darkry", "Darlan", "Darle", "Darley", "Darliam", "Darlly", "Darn", "Darnin", "Darny", "Daroy", "Darppy", "Darpsey", "Darra", "Darrell", "Darroy", "Darrrell", "Darrroy", "Darry", "Darssey", "Dartty", "Darty", "Dary", "Dassey", "Datty", "Daty", "Doydan", "Doyddy", "Doyer", "Doyffy", "Doygan", "Doyggan", "Doygh", "Doyghan", "Doyins", "Doykry", "Doylan", "Doyle", "Doyley", "Doyliam", "Doylly", "Doyn", "Doynin", "Doyny", "Doyppy", "Doypsey", "Doyra", "Doyroy", "Doyrrell", "Doyrroy", "Doyry", "Doyssey", "Doytty", "Doyty", "Dudan", "Duddy", "Duer", "Duffy", "Dugan", "Duggan", "Dugh", "Dughan", "Duins", "Dukry", "Dulan", "Dule", "Duley", "Duliam", "Dully", "Dun", "Dunin", "Duny", "Duppy", "Dupsey", "Dura", "Duroy", "Durrell", "Durroy", "Dury", "Dussey", "Dutty", "Duty", "Gadan", "Gaddy", "Gaer", "Gaffy", "Gagan", "Gaggan", "Gagh", "Gaghan", "Gains", "Gakry", "Galan", "Gale", "Galey", "Galiam", "Gally", "Gan", "Ganin", "Gany", "Gappy", "Gapsey", "Gara", "Garoy", "Garrell", "Garroy", "Gary", "Gassey", "Gatty", "Gaty", "Jordan", "Jorddy", "Jorer", "Jorffy", "Jorgan", "Jorggan", "Jorgh", "Jorghan", "Jorins", "Jorkry", "Jorlan", "Jorle", "Jorley", "Jorliam", "Jorlly", "Jorn", "Jornin", "Jorny", "Jorppy", "Jorpsey", "Jorra", "Jorroy", "Jorrrell", "Jorrroy", "Jorry", "Jorssey", "Jortty", "Jorty", "Keadan", "Keaddy", "Keaer", "Keaffy", "Keagan", "Keaggan", "Keagh", "Keaghan", "Keains", "Keakry", "Kealan", "Keale", "Kealey", "Kealiam", "Keally", "Kean", "Keanin", "Keany", "Keappy", "Keapsey", "Keara", "Kearoy", "Kearrell", "Kearroy", "Keary", "Keassey", "Keatty", "Keaty", "Keedan", "Keeddy", "Keeer", "Keeffy", "Keegan", "Keeggan", "Keegh", "Keeghan", "Keeins", "Keekry", "Keelan", "Keele", "Keeley", "Keeliam", "Keelly", "Keen", "Keenin", "Keeny", "Keeppy", "Keepsey", "Keera", "Keeroy", "Keerrell", "Keerroy", "Keery", "Keessey", "Keetty", "Keety", "Laudan", "Lauddy", "Lauer", "Lauffy", "Laugan", "Lauggan", "Laugh", "Laughan", "Lauins", "Laukry", "Laulan", "Laule", "Lauley", "Lauliam", "Laully", "Laun", "Launin", "Launy", "Lauppy", "Laupsey", "Laura", "Lauroy", "Laurrell", "Laurroy", "Laury", "Laussey", "Lautty", "Lauty", "Leadan", "Leaddy", "Leaer", "Leaffy", "Leagan", "Leaggan", "Leagh", "Leaghan", "Leains", "Leakry", "Lealan", "Leale", "Lealey", "Lealiam", "Leally", "Lean", "Leanin", "Leany", "Leappy", "Leapsey", "Leara", "Learoy", "Learrell", "Learroy", "Leary", "Leassey", "Leatty", "Leaty", "Ledan", "Leddy", "Leer", "Leffy", "Legan", "Leggan", "Legh", "Leghan", "Leidan", "Leiddy", "Leier", "Leiffy", "Leigan", "Leiggan", "Leigh", "Leighan", "Leiins", "Leikry", "Leilan", "Leile", "Leiley", "Leiliam", "Leilly", "Lein", "Leinin", "Leins", "Leiny", "Leippy", "Leipsey", "Leira", "Leiroy", "Leirrell", "Leirroy", "Leiry", "Leissey", "Leitty", "Leity", "Lekry", "Lelan", "Lele", "Leley", "Leliam", "Lelly", "Len", "Lenin", "Leny", "Leppy", "Lepsey", "Lera", "Leroy", "Lerrell", "Lerroy", "Lery", "Lessey", "Letty", "Lety", "Lodan", "Loddy", "Loer", "Loffy", "Logan", "Loggan", "Logh", "Loghan", "Loins", "Lokry", "Lolan", "Lole", "Loley", "Loliam", "Lolly", "Lon", "Lonin", "Lony", "Loppy", "Lopsey", "Lora", "Loroy", "Lorrell", "Lorroy", "Lory", "Lossey", "Lotty", "Loty", "Lyndan", "Lynddy", "Lyner", "Lynffy", "Lyngan", "Lynggan", "Lyngh", "Lynghan", "Lynins", "Lynkry", "Lynlan", "Lynle", "Lynley", "Lynliam", "Lynlly", "Lynn", "Lynnin", "Lynny", "Lynppy", "Lynpsey", "Lynra", "Lynroy", "Lynrrell", "Lynrroy", "Lynry", "Lynssey", "Lyntty", "Lynty", "Mac'ardan", "Mac'arddy", "Mac'arer", "Mac'arffy", "Mac'argan", "Mac'arggan", "Mac'argh", "Mac'arghan", "Mac'arins", "Mac'arkry", "Mac'arlan", "Mac'arle", "Mac'arley", "Mac'arliam", "Mac'arlly", "Mac'arn", "Mac'arnin", "Mac'arny", "Mac'arppy", "Mac'arpsey", "Mac'arra", "Mac'arroy", "Mac'arrrell", "Mac'arrroy", "Mac'arry", "Mac'arssey", "Mac'artty", "Mac'arty", "Mac'bidan", "Mac'biddy", "Mac'bier", "Mac'biffy", "Mac'bigan", "Mac'biggan", "Mac'bigh", "Mac'bighan", "Mac'biins", "Mac'bikry", "Mac'bilan", "Mac'bile", "Mac'biley", "Mac'biliam", "Mac'billy", "Mac'bin", "Mac'binin", "Mac'biny", "Mac'bippy", "Mac'bipsey", "Mac'bira", "Mac'biroy", "Mac'birrell", "Mac'birroy", "Mac'biry", "Mac'bissey", "Mac'bitty", "Mac'bity", "Mac'caudan", "Mac'cauddy", "Mac'cauer", "Mac'cauffy", "Mac'caugan", "Mac'cauggan", "Mac'caugh", "Mac'caughan", "Mac'cauins", "Mac'caukry", "Mac'caulan", "Mac'caule", "Mac'cauley", "Mac'cauliam", "Mac'caully", "Mac'caun", "Mac'caunin", "Mac'cauny", "Mac'cauppy", "Mac'caupsey", "Mac'caura", "Mac'cauroy", "Mac'caurrell", "Mac'caurroy", "Mac'caury", "Mac'caussey", "Mac'cautty", "Mac'cauty", "Mac'dadan", "Mac'daddy", "Mac'daer", "Mac'daffy", "Mac'dagan", "Mac'daggan", "Mac'dagh", "Mac'daghan", "Mac'dains", "Mac'dakry", "Mac'dalan", "Mac'dale", "Mac'daley", "Mac'daliam", "Mac'dally", "Mac'dan", "Mac'danin", "Mac'dany", "Mac'dappy", "Mac'dapsey", "Mac'dara", "Mac'dardan", "Mac'darddy", "Mac'darer", "Mac'darffy", "Mac'dargan", "Mac'darggan", "Mac'dargh", "Mac'darghan", "Mac'darins", "Mac'darkry", "Mac'darlan", "Mac'darle", "Mac'darley", "Mac'darliam", "Mac'darlly", "Mac'darn", "Mac'darnin", "Mac'darny", "Mac'daroy", "Mac'darppy", "Mac'darpsey", "Mac'darra", "Mac'darrell", "Mac'darroy", "Mac'darrrell", "Mac'darrroy", "Mac'darry", "Mac'darssey", "Mac'dartty", "Mac'darty", "Mac'dary", "Mac'dassey", "Mac'datty", "Mac'daty", "Mac'doydan", "Mac'doyddy", "Mac'doyer", "Mac'doyffy", "Mac'doygan", "Mac'doyggan", "Mac'doygh", "Mac'doyghan", "Mac'doyins", "Mac'doykry", "Mac'doylan", "Mac'doyle", "Mac'doyley", "Mac'doyliam", "Mac'doylly", "Mac'doyn", "Mac'doynin", "Mac'doyny", "Mac'doyppy", "Mac'doypsey", "Mac'doyra", "Mac'doyroy", "Mac'doyrrell", "Mac'doyrroy", "Mac'doyry", "Mac'doyssey", "Mac'doytty", "Mac'doyty", "Mac'dudan", "Mac'duddy", "Mac'duer", "Mac'duffy", "Mac'dugan", "Mac'duggan", "Mac'dugh", "Mac'dughan", "Mac'duins", "Mac'dukry", "Mac'dulan", "Mac'dule", "Mac'duley", "Mac'duliam", "Mac'dully", "Mac'dun", "Mac'dunin", "Mac'duny", "Mac'duppy", "Mac'dupsey", "Mac'dura", "Mac'duroy", "Mac'durrell", "Mac'durroy", "Mac'dury", "Mac'dussey", "Mac'dutty", "Mac'duty", "Mac'gadan", "Mac'gaddy", "Mac'gaer", "Mac'gaffy", "Mac'gagan", "Mac'gaggan", "Mac'gagh", "Mac'gaghan", "Mac'gains", "Mac'gakry", "Mac'galan", "Mac'gale", "Mac'galey", "Mac'galiam", "Mac'gally", "Mac'gan", "Mac'ganin", "Mac'gany", "Mac'gappy", "Mac'gapsey", "Mac'gara", "Mac'garoy", "Mac'garrell", "Mac'garroy", "Mac'gary", "Mac'gassey", "Mac'gatty", "Mac'gaty", "Mac'jordan", "Mac'jorddy", "Mac'jorer", "Mac'jorffy", "Mac'jorgan", "Mac'jorggan", "Mac'jorgh", "Mac'jorghan", "Mac'jorins", "Mac'jorkry", "Mac'jorlan", "Mac'jorle", "Mac'jorley", "Mac'jorliam", "Mac'jorlly", "Mac'jorn", "Mac'jornin", "Mac'jorny", "Mac'jorppy", "Mac'jorpsey", "Mac'jorra", "Mac'jorroy", "Mac'jorrrell", "Mac'jorrroy", "Mac'jorry", "Mac'jorssey", "Mac'jortty", "Mac'jorty", "Mac'keadan", "Mac'keaddy", "Mac'keaer", "Mac'keaffy", "Mac'keagan", "Mac'keaggan", "Mac'keagh", "Mac'keaghan", "Mac'keains", "Mac'keakry", "Mac'kealan", "Mac'keale", "Mac'kealey", "Mac'kealiam", "Mac'keally", "Mac'kean", "Mac'keanin", "Mac'keany", "Mac'keappy", "Mac'keapsey", "Mac'keara", "Mac'kearoy", "Mac'kearrell", "Mac'kearroy", "Mac'keary", "Mac'keassey", "Mac'keatty", "Mac'keaty", "Mac'keedan", "Mac'keeddy", "Mac'keeer", "Mac'keeffy", "Mac'keegan", "Mac'keeggan", "Mac'keegh", "Mac'keeghan", "Mac'keeins", "Mac'keekry", "Mac'keelan", "Mac'keele", "Mac'keeley", "Mac'keeliam", "Mac'keelly", "Mac'keen", "Mac'keenin", "Mac'keeny", "Mac'keeppy", "Mac'keepsey", "Mac'keera", "Mac'keeroy", "Mac'keerrell", "Mac'keerroy", "Mac'keery", "Mac'keessey", "Mac'keetty", "Mac'keety", "Mac'laudan", "Mac'lauddy", "Mac'lauer", "Mac'lauffy", "Mac'laugan", "Mac'lauggan", "Mac'laugh", "Mac'laughan", "Mac'lauins", "Mac'laukry", "Mac'laulan", "Mac'laule", "Mac'lauley", "Mac'lauliam", "Mac'laully", "Mac'laun", "Mac'launin", "Mac'launy", "Mac'lauppy", "Mac'laupsey", "Mac'laura", "Mac'lauroy", "Mac'laurrell", "Mac'laurroy", "Mac'laury", "Mac'laussey", "Mac'lautty", "Mac'lauty", "Mac'leadan", "Mac'leaddy", "Mac'leaer", "Mac'leaffy", "Mac'leagan", "Mac'leaggan", "Mac'leagh", "Mac'leaghan", "Mac'leains", "Mac'leakry", "Mac'lealan", "Mac'leale", "Mac'lealey", "Mac'lealiam", "Mac'leally", "Mac'lean", "Mac'leanin", "Mac'leany", "Mac'leappy", "Mac'leapsey", "Mac'leara", "Mac'learoy", "Mac'learrell", "Mac'learroy", "Mac'leary", "Mac'leassey", "Mac'leatty", "Mac'leaty", "Mac'ledan", "Mac'leddy", "Mac'leer", "Mac'leffy", "Mac'legan", "Mac'leggan", "Mac'legh", "Mac'leghan", "Mac'leidan", "Mac'leiddy", "Mac'leier", "Mac'leiffy", "Mac'leigan", "Mac'leiggan", "Mac'leigh", "Mac'leighan", "Mac'leiins", "Mac'leikry", "Mac'leilan", "Mac'leile", "Mac'leiley", "Mac'leiliam", "Mac'leilly", "Mac'lein", "Mac'leinin", "Mac'leins", "Mac'leiny", "Mac'leippy", "Mac'leipsey", "Mac'leira", "Mac'leiroy", "Mac'leirrell", "Mac'leirroy", "Mac'leiry", "Mac'leissey", "Mac'leitty", "Mac'leity", "Mac'lekry", "Mac'lelan", "Mac'lele", "Mac'leley", "Mac'leliam", "Mac'lelly", "Mac'len", "Mac'lenin", "Mac'leny", "Mac'leppy", "Mac'lepsey", "Mac'lera", "Mac'leroy", "Mac'lerrell", "Mac'lerroy", "Mac'lery", "Mac'lessey", "Mac'letty", "Mac'lety", "Mac'lodan", "Mac'loddy", "Mac'loer", "Mac'loffy", "Mac'logan", "Mac'loggan", "Mac'logh", "Mac'loghan", "Mac'loins", "Mac'lokry", "Mac'lolan", "Mac'lole", "Mac'loley", "Mac'loliam", "Mac'lolly", "Mac'lon", "Mac'lonin", "Mac'lony", "Mac'loppy", "Mac'lopsey", "Mac'lora", "Mac'loroy", "Mac'lorrell", "Mac'lorroy", "Mac'lory", "Mac'lossey", "Mac'lotty", "Mac'loty", "Mac'lyndan", "Mac'lynddy", "Mac'lyner", "Mac'lynffy", "Mac'lyngan", "Mac'lynggan", "Mac'lyngh", "Mac'lynghan", "Mac'lynins", "Mac'lynkry", "Mac'lynlan", "Mac'lynle", "Mac'lynley", "Mac'lynliam", "Mac'lynlly", "Mac'lynn", "Mac'lynnin", "Mac'lynny", "Mac'lynppy", "Mac'lynpsey", "Mac'lynra", "Mac'lynroy", "Mac'lynrrell", "Mac'lynrroy", "Mac'lynry", "Mac'lynssey", "Mac'lyntty", "Mac'lynty", "Mac'madan", "Mac'maddy", "Mac'maer", "Mac'maffy", "Mac'magan", "Mac'maggan", "Mac'magh", "Mac'maghan", "Mac'mains", "Mac'makry", "Mac'malan", "Mac'male", "Mac'maley", "Mac'maliam", "Mac'mally", "Mac'man", "Mac'manin", "Mac'many", "Mac'mappy", "Mac'mapsey", "Mac'mara", "Mac'maroy", "Mac'marrell", "Mac'marroy", "Mac'mary", "Mac'massey", "Mac'matty", "Mac'maty", "Mac'nadan", "Mac'naddy", "Mac'naer", "Mac'naffy", "Mac'nagan", "Mac'naggan", "Mac'nagh", "Mac'naghan", "Mac'nains", "Mac'nakry", "Mac'nalan", "Mac'nale", "Mac'naley", "Mac'naliam", "Mac'nally", "Mac'nan", "Mac'nanin", "Mac'nany", "Mac'nappy", "Mac'napsey", "Mac'nara", "Mac'naroy", "Mac'narrell", "Mac'narroy", "Mac'nary", "Mac'nassey", "Mac'natty", "Mac'naty", "Mac'nedan", "Mac'neddy", "Mac'neer", "Mac'neffy", "Mac'negan", "Mac'neggan", "Mac'negh", "Mac'neghan", "Mac'neins", "Mac'nekry", "Mac'nelan", "Mac'nele", "Mac'neley", "Mac'neliam", "Mac'nelly", "Mac'nen", "Mac'nenin", "Mac'neny", "Mac'neppy", "Mac'nepsey", "Mac'nera", "Mac'neroy", "Mac'nerrell", "Mac'nerroy", "Mac'nery", "Mac'nessey", "Mac'netty", "Mac'nety", "Mac'peadan", "Mac'peaddy", "Mac'peaer", "Mac'peaffy", "Mac'peagan", "Mac'peaggan", "Mac'peagh", "Mac'peaghan", "Mac'peains", "Mac'peakry", "Mac'pealan", "Mac'peale", "Mac'pealey", "Mac'pealiam", "Mac'peally", "Mac'pean", "Mac'peanin", "Mac'peany", "Mac'peappy", "Mac'peapsey", "Mac'peara", "Mac'pearoy", "Mac'pearrell", "Mac'pearroy", "Mac'peary", "Mac'peassey", "Mac'peatty", "Mac'peaty", "Mac'reidan", "Mac'reiddy", "Mac'reier", "Mac'reiffy", "Mac'reigan", "Mac'reiggan", "Mac'reigh", "Mac'reighan", "Mac'reiins", "Mac'reikry", "Mac'reilan", "Mac'reile", "Mac'reiley", "Mac'reiliam", "Mac'reilly", "Mac'rein", "Mac'reinin", "Mac'reiny", "Mac'reippy", "Mac'reipsey", "Mac'reira", "Mac'reiroy", "Mac'reirrell", "Mac'reirroy", "Mac'reiry", "Mac'reissey", "Mac'reitty", "Mac'reity", "Mac'ridan", "Mac'riddy", "Mac'rier", "Mac'riffy", "Mac'rigan", "Mac'riggan", "Mac'righ", "Mac'righan", "Mac'riins", "Mac'rikry", "Mac'rilan", "Mac'rile", "Mac'riley", "Mac'riliam", "Mac'rilly", "Mac'rin", "Mac'rinin", "Mac'riny", "Mac'ripdan", "Mac'ripddy", "Mac'riper", "Mac'ripffy", "Mac'ripgan", "Mac'ripggan", "Mac'ripgh", "Mac'ripghan", "Mac'ripins", "Mac'ripkry", "Mac'riplan", "Mac'riple", "Mac'ripley", "Mac'ripliam", "Mac'riplly", "Mac'ripn", "Mac'ripnin", "Mac'ripny", "Mac'ripppy", "Mac'rippsey", "Mac'rippy", "Mac'ripra", "Mac'riproy", "Mac'riprrell", "Mac'riprroy", "Mac'ripry", "Mac'ripsey", "Mac'ripssey", "Mac'riptty", "Mac'ripty", "Mac'rira", "Mac'riroy", "Mac'rirrell", "Mac'rirroy", "Mac'riry", "Mac'rissey", "Mac'ritty", "Mac'rity", "Mac'rodan", "Mac'roddy", "Mac'roer", "Mac'roffy", "Mac'rogan", "Mac'roggan", "Mac'rogh", "Mac'roghan", "Mac'roins", "Mac'rokry", "Mac'rolan", "Mac'role", "Mac'roley", "Mac'roliam", "Mac'rolly", "Mac'ron", "Mac'ronin", "Mac'rony", "Mac'roppy", "Mac'ropsey", "Mac'rora", "Mac'roroy", "Mac'rorrell", "Mac'rorroy", "Mac'rory", "Mac'rossey", "Mac'rotty", "Mac'roty", "Mac'sadan", "Mac'saddy", "Mac'saer", "Mac'saffy", "Mac'sagan", "Mac'saggan", "Mac'sagh", "Mac'saghan", "Mac'sains", "Mac'sakry", "Mac'salan", "Mac'sale", "Mac'saley", "Mac'saliam", "Mac'sally", "Mac'san", "Mac'sanin", "Mac'sany", "Mac'sappy", "Mac'sapsey", "Mac'sara", "Mac'saroy", "Mac'sarrell", "Mac'sarroy", "Mac'sary", "Mac'sassey", "Mac'satty", "Mac'saty", "Mac'shedan", "Mac'sheddy", "Mac'sheer", "Mac'sheffy", "Mac'shegan", "Mac'sheggan", "Mac'shegh", "Mac'sheghan", "Mac'sheins", "Mac'shekry", "Mac'shelan", "Mac'shele", "Mac'sheley", "Mac'sheliam", "Mac'shelly", "Mac'shen", "Mac'shenin", "Mac'sheny", "Mac'sheppy", "Mac'shepsey", "Mac'shera", "Mac'sheroy", "Mac'sherrell", "Mac'sherroy", "Mac'shery", "Mac'shessey", "Mac'shetty", "Mac'shety", "Mac'tedan", "Mac'teddy", "Mac'teer", "Mac'teffy", "Mac'tegan", "Mac'teggan", "Mac'tegh", "Mac'teghan", "Mac'teins", "Mac'tekry", "Mac'telan", "Mac'tele", "Mac'teley", "Mac'teliam", "Mac'telly", "Mac'ten", "Mac'tenin", "Mac'teny", "Mac'teppy", "Mac'tepsey", "Mac'tera", "Mac'teroy", "Mac'terrell", "Mac'terroy", "Mac'tery", "Mac'tessey", "Mac'tetty", "Mac'tety", "Mac'toodan", "Mac'tooddy", "Mac'tooer", "Mac'tooffy", "Mac'toogan", "Mac'tooggan", "Mac'toogh", "Mac'tooghan", "Mac'tooins", "Mac'tookry", "Mac'toolan", "Mac'toole", "Mac'tooley", "Mac'tooliam", "Mac'toolly", "Mac'toon", "Mac'toonin", "Mac'toony", "Mac'tooppy", "Mac'toopsey", "Mac'toora", "Mac'tooroy", "Mac'toorrell", "Mac'toorroy", "Mac'toory", "Mac'toossey", "Mac'tootty", "Mac'tooty", "Mac'widan", "Mac'widdy", "Mac'wier", "Mac'wiffy", "Mac'wigan", "Mac'wiggan", "Mac'wigh", "Mac'wighan", "Mac'wiins", "Mac'wikry", "Mac'wilan", "Mac'wile", "Mac'wiley", "Mac'wiliam", "Mac'willy", "Mac'win", "Mac'winin", "Mac'winy", "Mac'wippy", "Mac'wipsey", "Mac'wira", "Mac'wiroy", "Mac'wirrell", "Mac'wirroy", "Mac'wiry", "Mac'wissey", "Mac'witty", "Mac'wity", "Mac'ydan", "Mac'yddy", "Mac'yer", "Mac'yffy", "Mac'ygan", "Mac'yggan", "Mac'ygh", "Mac'yghan", "Mac'yins", "Mac'ykry", "Mac'ylan", "Mac'yle", "Mac'yley", "Mac'yliam", "Mac'ylly", "Mac'yn", "Mac'ynin", "Mac'yny", "Mac'yppy", "Mac'ypsey", "Mac'yra", "Mac'yroy", "Mac'yrrell", "Mac'yrroy", "Mac'yry", "Mac'yssey", "Mac'ytty", "Mac'yty", "Madan", "Maddy", "Maer", "Maffy", "Magan", "Maggan", "Magh", "Maghan", "Mains", "Makry", "Malan", "Male", "Maley", "Maliam", "Mally", "Man", "Manin", "Many", "Mappy", "Mapsey", "Mara", "Maroy", "Marrell", "Marroy", "Mary", "Massey", "Matty", "Maty", "Nadan", "Naddy", "Naer", "Naffy", "Nagan", "Naggan", "Nagh", "Naghan", "Nains", "Nakry", "Nalan", "Nale", "Naley", "Naliam", "Nally", "Nan", "Nanin", "Nany", "Nappy", "Napsey", "Nara", "Naroy", "Narrell", "Narroy", "Nary", "Nassey", "Natty", "Naty", "Nedan", "Neddy", "Neer", "Neffy", "Negan", "Neggan", "Negh", "Neghan", "Neins", "Nekry", "Nelan", "Nele", "Neley", "Neliam", "Nelly", "Nen", "Nenin", "Neny", "Neppy", "Nepsey", "Nera", "Neroy", "Nerrell", "Nerroy", "Nery", "Nessey", "Netty", "Nety", "O'ardan", "O'arddy", "O'arer", "O'arffy", "O'argan", "O'arggan", "O'argh", "O'arghan", "O'arins", "O'arkry", "O'arlan", "O'arle", "O'arley", "O'arliam", "O'arlly", "O'arn", "O'arnin", "O'arny", "O'arppy", "O'arpsey", "O'arra", "O'arroy", "O'arrrell", "O'arrroy", "O'arry", "O'arssey", "O'artty", "O'arty", "O'bidan", "O'biddy", "O'bier", "O'biffy", "O'bigan", "O'biggan", "O'bigh", "O'bighan", "O'biins", "O'bikry", "O'bilan", "O'bile", "O'biley", "O'biliam", "O'billy", "O'bin", "O'binin", "O'biny", "O'bippy", "O'bipsey", "O'bira", "O'biroy", "O'birrell", "O'birroy", "O'biry", "O'bissey", "O'bitty", "O'bity", "O'caudan", "O'cauddy", "O'cauer", "O'cauffy", "O'caugan", "O'cauggan", "O'caugh", "O'caughan", "O'cauins", "O'caukry", "O'caulan", "O'caule", "O'cauley", "O'cauliam", "O'caully", "O'caun", "O'caunin", "O'cauny", "O'cauppy", "O'caupsey", "O'caura", "O'cauroy", "O'caurrell", "O'caurroy", "O'caury", "O'caussey", "O'cautty", "O'cauty", "O'dadan", "O'daddy", "O'daer", "O'daffy", "O'dagan", "O'daggan", "O'dagh", "O'daghan", "O'dains", "O'dakry", "O'dalan", "O'dale", "O'daley", "O'daliam", "O'dally", "O'dan", "O'danin", "O'dany", "O'dappy", "O'dapsey", "O'dara", "O'dardan", "O'darddy", "O'darer", "O'darffy", "O'dargan", "O'darggan", "O'dargh", "O'darghan", "O'darins", "O'darkry", "O'darlan", "O'darle", "O'darley", "O'darliam", "O'darlly", "O'darn", "O'darnin", "O'darny", "O'daroy", "O'darppy", "O'darpsey", "O'darra", "O'darrell", "O'darroy", "O'darrrell", "O'darrroy", "O'darry", "O'darssey", "O'dartty", "O'darty", "O'dary", "O'dassey", "O'datty", "O'daty", "O'doydan", "O'doyddy", "O'doyer", "O'doyffy", "O'doygan", "O'doyggan", "O'doygh", "O'doyghan", "O'doyins", "O'doykry", "O'doylan", "O'doyle", "O'doyley", "O'doyliam", "O'doylly", "O'doyn", "O'doynin", "O'doyny", "O'doyppy", "O'doypsey", "O'doyra", "O'doyroy", "O'doyrrell", "O'doyrroy", "O'doyry", "O'doyssey", "O'doytty", "O'doyty", "O'dudan", "O'duddy", "O'duer", "O'duffy", "O'dugan", "O'duggan", "O'dugh", "O'dughan", "O'duins", "O'dukry", "O'dulan", "O'dule", "O'duley", "O'duliam", "O'dully", "O'dun", "O'dunin", "O'duny", "O'duppy", "O'dupsey", "O'dura", "O'duroy", "O'durrell", "O'durroy", "O'dury", "O'dussey", "O'dutty", "O'duty", "O'gadan", "O'gaddy", "O'gaer", "O'gaffy", "O'gagan", "O'gaggan", "O'gagh", "O'gaghan", "O'gains", "O'gakry", "O'galan", "O'gale", "O'galey", "O'galiam", "O'gally", "O'gan", "O'ganin", "O'gany", "O'gappy", "O'gapsey", "O'gara", "O'garoy", "O'garrell", "O'garroy", "O'gary", "O'gassey", "O'gatty", "O'gaty", "O'jordan", "O'jorddy", "O'jorer", "O'jorffy", "O'jorgan", "O'jorggan", "O'jorgh", "O'jorghan", "O'jorins", "O'jorkry", "O'jorlan", "O'jorle", "O'jorley", "O'jorliam", "O'jorlly", "O'jorn", "O'jornin", "O'jorny", "O'jorppy", "O'jorpsey", "O'jorra", "O'jorroy", "O'jorrrell", "O'jorrroy", "O'jorry", "O'jorssey", "O'jortty", "O'jorty", "O'keadan", "O'keaddy", "O'keaer", "O'keaffy", "O'keagan", "O'keaggan", "O'keagh", "O'keaghan", "O'keains", "O'keakry", "O'kealan", "O'keale", "O'kealey", "O'kealiam", "O'keally", "O'kean", "O'keanin", "O'keany", "O'keappy", "O'keapsey", "O'keara", "O'kearoy", "O'kearrell", "O'kearroy", "O'keary", "O'keassey", "O'keatty", "O'keaty", "O'keedan", "O'keeddy", "O'keeer", "O'keeffy", "O'keegan", "O'keeggan", "O'keegh", "O'keeghan", "O'keeins", "O'keekry", "O'keelan", "O'keele", "O'keeley", "O'keeliam", "O'keelly", "O'keen", "O'keenin", "O'keeny", "O'keeppy", "O'keepsey", "O'keera", "O'keeroy", "O'keerrell", "O'keerroy", "O'keery", "O'keessey", "O'keetty", "O'keety", "O'laudan", "O'lauddy", "O'lauer", "O'lauffy", "O'laugan", "O'lauggan", "O'laugh", "O'laughan", "O'lauins", "O'laukry", "O'laulan", "O'laule", "O'lauley", "O'lauliam", "O'laully", "O'laun", "O'launin", "O'launy", "O'lauppy", "O'laupsey", "O'laura", "O'lauroy", "O'laurrell", "O'laurroy", "O'laury", "O'laussey", "O'lautty", "O'lauty", "O'leadan", "O'leaddy", "O'leaer", "O'leaffy", "O'leagan", "O'leaggan", "O'leagh", "O'leaghan", "O'leains", "O'leakry", "O'lealan", "O'leale", "O'lealey", "O'lealiam", "O'leally", "O'lean", "O'leanin", "O'leany", "O'leappy", "O'leapsey", "O'leara", "O'learoy", "O'learrell", "O'learroy", "O'leary", "O'leassey", "O'leatty", "O'leaty", "O'ledan", "O'leddy", "O'leer", "O'leffy", "O'legan", "O'leggan", "O'legh", "O'leghan", "O'leidan", "O'leiddy", "O'leier", "O'leiffy", "O'leigan", "O'leiggan", "O'leigh", "O'leighan", "O'leiins", "O'leikry", "O'leilan", "O'leile", "O'leiley", "O'leiliam", "O'leilly", "O'lein", "O'leinin", "O'leins", "O'leiny", "O'leippy", "O'leipsey", "O'leira", "O'leiroy", "O'leirrell", "O'leirroy", "O'leiry", "O'leissey", "O'leitty", "O'leity", "O'lekry", "O'lelan", "O'lele", "O'leley", "O'leliam", "O'lelly", "O'len", "O'lenin", "O'leny", "O'leppy", "O'lepsey", "O'lera", "O'leroy", "O'lerrell", "O'lerroy", "O'lery", "O'lessey", "O'letty", "O'lety", "O'lodan", "O'loddy", "O'loer", "O'loffy", "O'logan", "O'loggan", "O'logh", "O'loghan", "O'loins", "O'lokry", "O'lolan", "O'lole", "O'loley", "O'loliam", "O'lolly", "O'lon", "O'lonin", "O'lony", "O'loppy", "O'lopsey", "O'lora", "O'loroy", "O'lorrell", "O'lorroy", "O'lory", "O'lossey", "O'lotty", "O'loty", "O'lyndan", "O'lynddy", "O'lyner", "O'lynffy", "O'lyngan", "O'lynggan", "O'lyngh", "O'lynghan", "O'lynins", "O'lynkry", "O'lynlan", "O'lynle", "O'lynley", "O'lynliam", "O'lynlly", "O'lynn", "O'lynnin", "O'lynny", "O'lynppy", "O'lynpsey", "O'lynra", "O'lynroy", "O'lynrrell", "O'lynrroy", "O'lynry", "O'lynssey", "O'lyntty", "O'lynty", "O'madan", "O'maddy", "O'maer", "O'maffy", "O'magan", "O'maggan", "O'magh", "O'maghan", "O'mains", "O'makry", "O'malan", "O'male", "O'maley", "O'maliam", "O'mally", "O'man", "O'manin", "O'many", "O'mappy", "O'mapsey", "O'mara", "O'maroy", "O'marrell", "O'marroy", "O'mary", "O'massey", "O'matty", "O'maty", "O'nadan", "O'naddy", "O'naer", "O'naffy", "O'nagan", "O'naggan", "O'nagh", "O'naghan", "O'nains", "O'nakry", "O'nalan", "O'nale", "O'naley", "O'naliam", "O'nally", "O'nan", "O'nanin", "O'nany", "O'nappy", "O'napsey", "O'nara", "O'naroy", "O'narrell", "O'narroy", "O'nary", "O'nassey", "O'natty", "O'naty", "O'nedan", "O'neddy", "O'neer", "O'neffy", "O'negan", "O'neggan", "O'negh", "O'neghan", "O'neins", "O'nekry", "O'nelan", "O'nele", "O'neley", "O'neliam", "O'nelly", "O'nen", "O'nenin", "O'neny", "O'neppy", "O'nepsey", "O'nera", "O'neroy", "O'nerrell", "O'nerroy", "O'nery", "O'nessey", "O'netty", "O'nety", "O'peadan", "O'peaddy", "O'peaer", "O'peaffy", "O'peagan", "O'peaggan", "O'peagh", "O'peaghan", "O'peains", "O'peakry", "O'pealan", "O'peale", "O'pealey", "O'pealiam", "O'peally", "O'pean", "O'peanin", "O'peany", "O'peappy", "O'peapsey", "O'peara", "O'pearoy", "O'pearrell", "O'pearroy", "O'peary", "O'peassey", "O'peatty", "O'peaty", "O'reidan", "O'reiddy", "O'reier", "O'reiffy", "O'reigan", "O'reiggan", "O'reigh", "O'reighan", "O'reiins", "O'reikry", "O'reilan", "O'reile", "O'reiley", "O'reiliam", "O'reilly", "O'rein", "O'reinin", "O'reiny", "O'reippy", "O'reipsey", "O'reira", "O'reiroy", "O'reirrell", "O'reirroy", "O'reiry", "O'reissey", "O'reitty", "O'reity", "O'ridan", "O'riddy", "O'rier", "O'riffy", "O'rigan", "O'riggan", "O'righ", "O'righan", "O'riins", "O'rikry", "O'rilan", "O'rile", "O'riley", "O'riliam", "O'rilly", "O'rin", "O'rinin", "O'riny", "O'ripdan", "O'ripddy", "O'riper", "O'ripffy", "O'ripgan", "O'ripggan", "O'ripgh", "O'ripghan", "O'ripins", "O'ripkry", "O'riplan", "O'riple", "O'ripley", "O'ripliam", "O'riplly", "O'ripn", "O'ripnin", "O'ripny", "O'ripppy", "O'rippsey", "O'rippy", "O'ripra", "O'riproy", "O'riprrell", "O'riprroy", "O'ripry", "O'ripsey", "O'ripssey", "O'riptty", "O'ripty", "O'rira", "O'riroy", "O'rirrell", "O'rirroy", "O'riry", "O'rissey", "O'ritty", "O'rity", "O'rodan", "O'roddy", "O'roer", "O'roffy", "O'rogan", "O'roggan", "O'rogh", "O'roghan", "O'roins", "O'rokry", "O'rolan", "O'role", "O'roley", "O'roliam", "O'rolly", "O'ron", "O'ronin", "O'rony", "O'roppy", "O'ropsey", "O'rora", "O'roroy", "O'rorrell", "O'rorroy", "O'rory", "O'rossey", "O'rotty", "O'roty", "O'sadan", "O'saddy", "O'saer", "O'saffy", "O'sagan", "O'saggan", "O'sagh", "O'saghan", "O'sains", "O'sakry", "O'salan", "O'sale", "O'saley", "O'saliam", "O'sally", "O'san", "O'sanin", "O'sany", "O'sappy", "O'sapsey", "O'sara", "O'saroy", "O'sarrell", "O'sarroy", "O'sary", "O'sassey", "O'satty", "O'saty", "O'shedan", "O'sheddy", "O'sheer", "O'sheffy", "O'shegan", "O'sheggan", "O'shegh", "O'sheghan", "O'sheins", "O'shekry", "O'shelan", "O'shele", "O'sheley", "O'sheliam", "O'shelly", "O'shen", "O'shenin", "O'sheny", "O'sheppy", "O'shepsey", "O'shera", "O'sheroy", "O'sherrell", "O'sherroy", "O'shery", "O'shessey", "O'shetty", "O'shety", "O'tedan", "O'teddy", "O'teer", "O'teffy", "O'tegan", "O'teggan", "O'tegh", "O'teghan", "O'teins", "O'tekry", "O'telan", "O'tele", "O'teley", "O'teliam", "O'telly", "O'ten", "O'tenin", "O'teny", "O'teppy", "O'tepsey", "O'tera", "O'teroy", "O'terrell", "O'terroy", "O'tery", "O'tessey", "O'tetty", "O'tety", "O'toodan", "O'tooddy", "O'tooer", "O'tooffy", "O'toogan", "O'tooggan", "O'toogh", "O'tooghan", "O'tooins", "O'tookry", "O'toolan", "O'toole", "O'tooley", "O'tooliam", "O'toolly", "O'toon", "O'toonin", "O'toony", "O'tooppy", "O'toopsey", "O'toora", "O'tooroy", "O'toorrell", "O'toorroy", "O'toory", "O'toossey", "O'tootty", "O'tooty", "O'widan", "O'widdy", "O'wier", "O'wiffy", "O'wigan", "O'wiggan", "O'wigh", "O'wighan", "O'wiins", "O'wikry", "O'wilan", "O'wile", "O'wiley", "O'wiliam", "O'willy", "O'win", "O'winin", "O'winy", "O'wippy", "O'wipsey", "O'wira", "O'wiroy", "O'wirrell", "O'wirroy", "O'wiry", "O'wissey", "O'witty", "O'wity", "O'ydan", "O'yddy", "O'yer", "O'yffy", "O'ygan", "O'yggan", "O'ygh", "O'yghan", "O'yins", "O'ykry", "O'ylan", "O'yle", "O'yley", "O'yliam", "O'ylly", "O'yn", "O'ynin", "O'yny", "O'yppy", "O'ypsey", "O'yra", "O'yroy", "O'yrrell", "O'yrroy", "O'yry", "O'yssey", "O'ytty", "O'yty", "Peadan", "Peaddy", "Peaer", "Peaffy", "Peagan", "Peaggan", "Peagh", "Peaghan", "Peains", "Peakry", "Pealan", "Peale", "Pealey", "Pealiam", "Peally", "Pean", "Peanin", "Peany", "Peappy", "Peapsey", "Peara", "Pearoy", "Pearrell", "Pearroy", "Peary", "Peassey", "Peatty", "Peaty", "Reidan", "Reiddy", "Reier", "Reiffy", "Reigan", "Reiggan", "Reigh", "Reighan", "Reiins", "Reikry", "Reilan", "Reile", "Reiley", "Reiliam", "Reilly", "Rein", "Reinin", "Reiny", "Reippy", "Reipsey", "Reira", "Reiroy", "Reirrell", "Reirroy", "Reiry", "Reissey", "Reitty", "Reity", "Ridan", "Riddy", "Rier", "Riffy", "Rigan", "Riggan", "Righ", "Righan", "Riins", "Rikry", "Rilan", "Rile", "Riley", "Riliam", "Rilly", "Rin", "Rinin", "Riny", "Ripdan", "Ripddy", "Riper", "Ripffy", "Ripgan", "Ripggan", "Ripgh", "Ripghan", "Ripins", "Ripkry", "Riplan", "Riple", "Ripley", "Ripliam", "Riplly", "Ripn", "Ripnin", "Ripny", "Ripppy", "Rippsey", "Rippy", "Ripra", "Riproy", "Riprrell", "Riprroy", "Ripry", "Ripsey", "Ripssey", "Riptty", "Ripty", "Rira", "Riroy", "Rirrell", "Rirroy", "Riry", "Rissey", "Ritty", "Rity", "Rodan", "Roddy", "Roer", "Roffy", "Rogan", "Roggan", "Rogh", "Roghan", "Roins", "Rokry", "Rolan", "Role", "Roley", "Roliam", "Rolly", "Ron", "Ronin", "Rony", "Roppy", "Ropsey", "Rora", "Roroy", "Rorrell", "Rorroy", "Rory", "Rossey", "Rotty", "Roty", "Sadan", "Saddy", "Saer", "Saffy", "Sagan", "Saggan", "Sagh", "Saghan", "Sains", "Sakry", "Salan", "Sale", "Saley", "Saliam", "Sally", "San", "Sanin", "Sany", "Sappy", "Sapsey", "Sara", "Saroy", "Sarrell", "Sarroy", "Sary", "Sassey", "Satty", "Saty", "Shedan", "Sheddy", "Sheer", "Sheffy", "Shegan", "Sheggan", "Shegh", "Sheghan", "Sheins", "Shekry", "Shelan", "Shele", "Sheley", "Sheliam", "Shelly", "Shen", "Shenin", "Sheny", "Sheppy", "Shepsey", "Shera", "Sheroy", "Sherrell", "Sherroy", "Shery", "Shessey", "Shetty", "Shety", "Tedan", "Teddy", "Teer", "Teffy", "Tegan", "Teggan", "Tegh", "Teghan", "Teins", "Tekry", "Telan", "Tele", "Teley", "Teliam", "Telly", "Ten", "Tenin", "Teny", "Teppy", "Tepsey", "Tera", "Teroy", "Terrell", "Terroy", "Tery", "Tessey", "Tetty", "Tety", "Toodan", "Tooddy", "Tooer", "Tooffy", "Toogan", "Tooggan", "Toogh", "Tooghan", "Tooins", "Tookry", "Toolan", "Toole", "Tooley", "Tooliam", "Toolly", "Toon", "Toonin", "Toony", "Tooppy", "Toopsey", "Toora", "Tooroy", "Toorrell", "Toorroy", "Toory", "Toossey", "Tootty", "Tooty", "Widan", "Widdy", "Wier", "Wiffy", "Wigan", "Wiggan", "Wigh", "Wighan", "Wiins", "Wikry", "Wilan", "Wile", "Wiley", "Wiliam", "Willy", "Win", "Winin", "Winy", "Wippy", "Wipsey", "Wira", "Wiroy", "Wirrell", "Wirroy", "Wiry", "Wissey", "Witty", "Wity", "Ydan", "Yddy", "Yer", "Yffy", "Ygan", "Yggan", "Ygh", "Yghan", "Yins", "Ykry", "Ylan", "Yle", "Yley", "Yliam", "Ylly", "Yn", "Ynin", "Yny", "Yppy", "Ypsey", "Yra", "Yroy", "Yrrell", "Yrroy", "Yry", "Yssey", "Ytty", "Yty"}
+-- VERSION --
+RYZOM_NAMES_TRYKER_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua b/ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua
index be0d2d2c64..8cdb80123c 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua
@@ -3,3 +3,6 @@ zoraiFirstNamesOne = {"Ba", "Bai", "Be", "Bei", "Bi", "Bia", "Biai", "Bii", "Bo"
zoraiFirstNamesTwo = {"Ba", "Ban", "Bang", "Bao", "Be", "Ben", "Beng", "Beo", "Bi", "Bia", "Bian", "Biang", "Biao", "Bin", "Bing", "Bio", "Bo", "Bon", "Bong", "Boo", "Bu", "Bua", "Buan", "Buang", "Buao", "Bun", "Bung", "Buo", "Ca", "Can", "Cang", "Cao", "Ce", "Cen", "Ceng", "Ceo", "Cha", "Chan", "Chang", "Chao", "Che", "Chen", "Cheng", "Cheo", "Chi", "Chia", "Chian", "Chiang", "Chiao", "Chin", "Ching", "Chio", "Cho", "Chon", "Chong", "Choo", "Chu", "Chua", "Chuan", "Chuang", "Chuao", "Chun", "Chung", "Chuo", "Ci", "Cia", "Cian", "Ciang", "Ciao", "Cin", "Cing", "Cio", "Co", "Con", "Cong", "Coo", "Cu", "Cua", "Cuan", "Cuang", "Cuao", "Cun", "Cung", "Cuo", "Da", "Dan", "Dang", "Dao", "De", "Den", "Deng", "Deo", "Di", "Dia", "Dian", "Diang", "Diao", "Din", "Ding", "Dio", "Do", "Don", "Dong", "Doo", "Du", "Dua", "Duan", "Duang", "Duao", "Dun", "Dung", "Duo", "Fa", "Fan", "Fang", "Fao", "Fe", "Fen", "Feng", "Feo", "Fi", "Fia", "Fian", "Fiang", "Fiao", "Fin", "Fing", "Fio", "Fo", "Fon", "Fong", "Foo", "Fu", "Fua", "Fuan", "Fuang", "Fuao", "Fun", "Fung", "Fuo", "Ga", "Gan", "Gang", "Gao", "Ge", "Gen", "Geng", "Geo", "Gi", "Gia", "Gian", "Giang", "Giao", "Gin", "Ging", "Gio", "Go", "Gon", "Gong", "Goo", "Gu", "Gua", "Guan", "Guang", "Guao", "Gun", "Gung", "Guo", "Ha", "Han", "Hang", "Hao", "He", "Hen", "Heng", "Heo", "Hi", "Hia", "Hian", "Hiang", "Hiao", "Hin", "Hing", "Hio", "Ho", "Hon", "Hong", "Hoo", "Hu", "Hua", "Huan", "Huang", "Huao", "Hun", "Hung", "Huo", "Ja", "Jan", "Jang", "Jao", "Je", "Jen", "Jeng", "Jeo", "Ji", "Jia", "Jian", "Jiang", "Jiao", "Jin", "Jing", "Jio", "Jo", "Jon", "Jong", "Joo", "Ju", "Jua", "Juan", "Juang", "Juao", "Jun", "Jung", "Juo", "Ka", "Kan", "Kang", "Kao", "Ke", "Ken", "Keng", "Keo", "Ki", "Kia", "Kian", "Kiang", "Kiao", "Kin", "King", "Kio", "Ko", "Kon", "Kong", "Koo", "Ku", "Kua", "Kuan", "Kuang", "Kuao", "Kun", "Kung", "Kuo", "La", "Lan", "Lang", "Lao", "Le", "Len", "Leng", "Leo", "Li", "Lia", "Lian", "Liang", "Liao", "Lin", "Ling", "Lio", "Lo", "Lon", "Long", "Loo", "Lu", "Lua", "Luan", "Luang", "Luao", "Lun", "Lung", "Luo", "Ma", "Man", "Mang", "Mao", "Me", "Men", "Meng", "Meo", "Mi", "Mia", "Mian", "Miang", "Miao", "Min", "Ming", "Mio", "Mo", "Mon", "Mong", "Moo", "Mu", "Mua", "Muan", "Muang", "Muao", "Mun", "Mung", "Muo", "Na", "Nan", "Nang", "Nao", "Ne", "Nen", "Neng", "Neo", "Ni", "Nia", "Nian", "Niang", "Niao", "Nin", "Ning", "Nio", "No", "Non", "Nong", "Noo", "Nu", "Nua", "Nuan", "Nuang", "Nuao", "Nun", "Nung", "Nuo", "Pa", "Pan", "Pang", "Pao", "Pe", "Pen", "Peng", "Peo", "Pi", "Pia", "Pian", "Piang", "Piao", "Pin", "Ping", "Pio", "Po", "Pon", "Pong", "Poo", "Pu", "Pua", "Puan", "Puang", "Puao", "Pun", "Pung", "Puo", "Qa", "Qan", "Qang", "Qao", "Qe", "Qen", "Qeng", "Qeo", "Qi", "Qia", "Qian", "Qiang", "Qiao", "Qin", "Qing", "Qio", "Qo", "Qon", "Qong", "Qoo", "Qu", "Qua", "Quan", "Quang", "Quao", "Qun", "Qung", "Quo", "Sa", "San", "Sang", "Sao", "Se", "Sen", "Seng", "Seo", "Sha", "Shan", "Shang", "Shao", "She", "Shen", "Sheng", "Sheo", "Shi", "Shia", "Shian", "Shiang", "Shiao", "Shin", "Shing", "Shio", "Sho", "Shon", "Shong", "Shoo", "Shu", "Shua", "Shuan", "Shuang", "Shuao", "Shun", "Shung", "Shuo", "Si", "Sia", "Sian", "Siang", "Siao", "Sin", "Sing", "Sio", "So", "Son", "Song", "Soo", "Su", "Sua", "Suan", "Suang", "Suao", "Sun", "Sung", "Suo", "Ta", "Tan", "Tang", "Tao", "Te", "Ten", "Teng", "Teo", "Ti", "Tia", "Tian", "Tiang", "Tiao", "Tin", "Ting", "Tio", "To", "Ton", "Tong", "Too", "Tu", "Tua", "Tuan", "Tuang", "Tuao", "Tun", "Tung", "Tuo", "Va", "Van", "Vang", "Vao", "Ve", "Ven", "Veng", "Veo", "Vi", "Via", "Vian", "Viang", "Viao", "Vin", "Ving", "Vio", "Vo", "Von", "Vong", "Voo", "Vu", "Vua", "Vuan", "Vuang", "Vuao", "Vun", "Vung", "Vuo", "Wa", "Wan", "Wang", "Wao", "We", "Wen", "Weng", "Weo", "Wi", "Wia", "Wian", "Wiang", "Wiao", "Win", "Wing", "Wio", "Wo", "Won", "Wong", "Woo", "Wu", "Wua", "Wuan", "Wuang", "Wuao", "Wun", "Wung", "Wuo", "Xa", "Xan", "Xang", "Xao", "Xe", "Xen", "Xeng", "Xeo", "Xi", "Xia", "Xian", "Xiang", "Xiao", "Xin", "Xing", "Xio", "Xo", "Xon", "Xong", "Xoo", "Xu", "Xua", "Xuan", "Xuang", "Xuao", "Xun", "Xung", "Xuo", "Ya", "Yan", "Yang", "Yao", "Ye", "Yen", "Yeng", "Yeo", "Yi", "Yia", "Yian", "Yiang", "Yiao", "Yin", "Ying", "Yio", "Yo", "Yon", "Yong", "Yoo", "Yu", "Yua", "Yuan", "Yuang", "Yuao", "Yun", "Yung", "You", "Za", "Zan", "Zang", "Zao", "Ze", "Zen", "Zeng", "Zeo", "Zha", "Zhan", "Zhang", "Zhao", "Zhe", "Zhen", "Zheng", "Zheo", "Zhi", "Zhia", "Zhian", "Zhiang", "Zhiao", "Zhin", "Zhing", "Zhio", "Zho", "Zhon", "Zhong", "Zhoo", "Zhu", "Zhua", "Zhuan", "Zhuang", "Zhuao", "Zhun", "Zhung", "Zhuo", "Zi", "Zia", "Zian", "Ziang", "Ziao", "Zin", "Zing", "Zio", "Zo", "Zon", "Zong", "Zoo", "Zu", "Zua", "Zuan", "Zuang", "Zuao", "Zun", "Zung", "Zuo"}
zoraiLastNames = {"Ba", "Bai", "Ban", "Bang", "Bangi", "Bani", "Bao", "Baoi", "Be", "Bei", "Ben", "Beng", "Bengi", "Beni", "Beo", "Beoi", "Bi", "Bia", "Biai", "Bian", "Biang", "Biangi", "Biani", "Biao", "Biaoi", "Bii", "Bin", "Bing", "Bingi", "Bini", "Bio", "Bioi", "Bo", "Boi", "Bon", "Bong", "Bongi", "Boni", "Boo", "Booi", "Bu", "Bua", "Buai", "Buan", "Buang", "Buangi", "Buani", "Buao", "Buaoi", "Bui", "Bun", "Bung", "Bungi", "Buni", "Buo", "Buoi", "Ca", "Cai", "Can", "Cang", "Cangi", "Cani", "Cao", "Caoi", "Ce", "Cei", "Cen", "Ceng", "Cengi", "Ceni", "Ceo", "Ceoi", "Cha", "Chai", "Chan", "Chang", "Changi", "Chani", "Chao", "Chaoi", "Che", "Chei", "Chen", "Cheng", "Chengi", "Cheni", "Cheo", "Cheoi", "Chi", "Chia", "Chiai", "Chian", "Chiang", "Chiangi", "Chiani", "Chiao", "Chiaoi", "Chii", "Chin", "Ching", "Chingi", "Chini", "Chio", "Chioi", "Cho", "Choi", "Chon", "Chong", "Chongi", "Choni", "Choo", "Chooi", "Chu", "Chua", "Chuai", "Chuan", "Chuang", "Chuangi", "Chuani", "Chuao", "Chuaoi", "Chui", "Chun", "Chung", "Chungi", "Chuni", "Chuo", "Chuoi", "Ci", "Cia", "Ciai", "Cian", "Ciang", "Ciangi", "Ciani", "Ciao", "Ciaoi", "Cii", "Cin", "Cing", "Cingi", "Cini", "Cio", "Cioi", "Co", "Coi", "Con", "Cong", "Congi", "Coni", "Coo", "Cooi", "Cu", "Cua", "Cuai", "Cuan", "Cuang", "Cuangi", "Cuani", "Cuao", "Cuaoi", "Cui", "Cun", "Cung", "Cungi", "Cuni", "Cuo", "Cuoi", "Da", "Dai", "Dan", "Dang", "Dangi", "Dani", "Dao", "Daoi", "De", "Dei", "Den", "Deng", "Dengi", "Deni", "Deo", "Deoi", "Di", "Dia", "Diai", "Dian", "Diang", "Diangi", "Diani", "Diao", "Diaoi", "Dii", "Din", "Ding", "Dingi", "Dini", "Dio", "Dioi", "Do", "Doi", "Don", "Dong", "Dongi", "Doni", "Doo", "Dooi", "Du", "Dua", "Duai", "Duan", "Duang", "Duangi", "Duani", "Duao", "Duaoi", "Dui", "Dun", "Dung", "Dungi", "Duni", "Duo", "Duoi", "Fa", "Fai", "Fan", "Fang", "Fangi", "Fani", "Fao", "Faoi", "Fe", "Fei", "Fen", "Feng", "Fengi", "Feni", "Feo", "Feoi", "Fi", "Fia", "Fiai", "Fian", "Fiang", "Fiangi", "Fiani", "Fiao", "Fiaoi", "Fii", "Fin", "Fing", "Fingi", "Fini", "Fio", "Fioi", "Fo", "Foi", "Fon", "Fong", "Fongi", "Foni", "Foo", "Fooi", "Fu", "Fua", "Fuai", "Fuan", "Fuang", "Fuangi", "Fuani", "Fuao", "Fuaoi", "Fui", "Fun", "Fung", "Fungi", "Funi", "Fuo", "Fuoi", "Ga", "Gai", "Gan", "Gang", "Gangi", "Gani", "Gao", "Gaoi", "Ge", "Gei", "Gen", "Geng", "Gengi", "Geni", "Geo", "Geoi", "Gi", "Gia", "Giai", "Gian", "Giang", "Giangi", "Giani", "Giao", "Giaoi", "Gii", "Gin", "Ging", "Gingi", "Gini", "Gio", "Gioi", "Go", "Goi", "Gon", "Gong", "Gongi", "Goni", "Goo", "Gooi", "Gu", "Gua", "Guai", "Guan", "Guang", "Guangi", "Guani", "Guao", "Guaoi", "Gui", "Gun", "Gung", "Gungi", "Guni", "Guo", "Guoi", "Ha", "Hai", "Han", "Hang", "Hangi", "Hani", "Hao", "Haoi", "He", "Hei", "Hen", "Heng", "Hengi", "Heni", "Heo", "Heoi", "Hi", "Hia", "Hiai", "Hian", "Hiang", "Hiangi", "Hiani", "Hiao", "Hiaoi", "Hii", "Hin", "Hing", "Hingi", "Hini", "Hio", "Hioi", "Ho", "Hoi", "Hon", "Hong", "Hongi", "Honi", "Hoo", "Hooi", "Hu", "Hua", "Huai", "Huan", "Huang", "Huangi", "Huani", "Huao", "Huaoi", "Hui", "Hun", "Hung", "Hungi", "Huni", "Huo", "Huoi", "Ja", "Jai", "Jan", "Jang", "Jangi", "Jani", "Jao", "Jaoi", "Je", "Jei", "Jen", "Jeng", "Jengi", "Jeni", "Jeo", "Jeoi", "Ji", "Jia", "Jiai", "Jian", "Jiang", "Jiangi", "Jiani", "Jiao", "Jiaoi", "Jii", "Jin", "Jing", "Jingi", "Jini", "Jio", "Jioi", "Jo", "Joi", "Jon", "Jong", "Jongi", "Joni", "Joo", "Jooi", "Ju", "Jua", "Juai", "Juan", "Juang", "Juangi", "Juani", "Juao", "Juaoi", "Jui", "Jun", "Jung", "Jungi", "Juni", "Juo", "Juoi", "Ka", "Kai", "Kan", "Kang", "Kangi", "Kani", "Kao", "Kaoi", "Ke", "Kei", "Ken", "Keng", "Kengi", "Keni", "Keo", "Keoi", "Ki", "Kia", "Kiai", "Kian", "Kiang", "Kiangi", "Kiani", "Kiao", "Kiaoi", "Kii", "Kin", "King", "Kingi", "Kini", "Kio", "Kioi", "Ko", "Koi", "Kon", "Kong", "Kongi", "Koni", "Koo", "Kooi", "Ku", "Kua", "Kuai", "Kuan", "Kuang", "Kuangi", "Kuani", "Kuao", "Kuaoi", "Kui", "Kun", "Kung", "Kungi", "Kuni", "Kuo", "Kuoi", "La", "Lai", "Lan", "Lang", "Langi", "Lani", "Lao", "Laoi", "Le", "Lei", "Len", "Leng", "Lengi", "Leni", "Leo", "Leoi", "Li", "Lia", "Liai", "Lian", "Liang", "Liangi", "Liani", "Liao", "Liaoi", "Lii", "Lin", "Ling", "Lingi", "Lini", "Lio", "Lioi", "Lo", "Loi", "Lon", "Long", "Longi", "Loni", "Loo", "Looi", "Lu", "Lua", "Luai", "Luan", "Luang", "Luangi", "Luani", "Luao", "Luaoi", "Lui", "Lun", "Lung", "Lungi", "Luni", "Luo", "Luoi", "Ma", "Mai", "Man", "Mang", "Mangi", "Mani", "Mao", "Maoi", "Me", "Mei", "Men", "Meng", "Mengi", "Meni", "Meo", "Meoi", "Mi", "Mia", "Miai", "Mian", "Miang", "Miangi", "Miani", "Miao", "Miaoi", "Mii", "Min", "Ming", "Mingi", "Mini", "Mio", "Mioi", "Mo", "Moi", "Mon", "Mong", "Mongi", "Moni", "Moo", "Mooi", "Mu", "Mua", "Muai", "Muan", "Muang", "Muangi", "Muani", "Muao", "Muaoi", "Mui", "Mun", "Mung", "Mungi", "Muni", "Muo", "Muoi", "Na", "Nai", "Nan", "Nang", "Nangi", "Nani", "Nao", "Naoi", "Ne", "Nei", "Nen", "Neng", "Nengi", "Neni", "Neo", "Neoi", "Ni", "Nia", "Niai", "Nian", "Niang", "Niangi", "Niani", "Niao", "Niaoi", "Nii", "Nin", "Ning", "Ningi", "Nini", "Nio", "Nioi", "No", "Noi", "Non", "Nong", "Nongi", "Noni", "Noo", "Nooi", "Nu", "Nua", "Nuai", "Nuan", "Nuang", "Nuangi", "Nuani", "Nuao", "Nuaoi", "Nui", "Nun", "Nung", "Nungi", "Nuni", "Nuo", "Nuoi", "Pa", "Pai", "Pan", "Pang", "Pangi", "Pani", "Pao", "Paoi", "Pe", "Pei", "Pen", "Peng", "Pengi", "Peni", "Peo", "Peoi", "Pi", "Pia", "Piai", "Pian", "Piang", "Piangi", "Piani", "Piao", "Piaoi", "Pii", "Pin", "Ping", "Pingi", "Pini", "Pio", "Pioi", "Po", "Poi", "Pon", "Pong", "Pongi", "Poni", "Poo", "Pooi", "Pu", "Pua", "Puai", "Puan", "Puang", "Puangi", "Puani", "Puao", "Puaoi", "Pui", "Pun", "Pung", "Pungi", "Puni", "Puo", "Puoi", "Qa", "Qai", "Qan", "Qang", "Qangi", "Qani", "Qao", "Qaoi", "Qe", "Qei", "Qen", "Qeng", "Qengi", "Qeni", "Qeo", "Qeoi", "Qi", "Qia", "Qiai", "Qian", "Qiang", "Qiangi", "Qiani", "Qiao", "Qiaoi", "Qii", "Qin", "Qing", "Qingi", "Qini", "Qio", "Qioi", "Qo", "Qoi", "Qon", "Qong", "Qongi", "Qoni", "Qoo", "Qooi", "Qu", "Qua", "Quai", "Quan", "Quang", "Quangi", "Quani", "Quao", "Quaoi", "Qui", "Qun", "Qung", "Qungi", "Quni", "Quo", "Sa", "Sai", "San", "Sang", "Sangi", "Sani", "Sao", "Saoi", "Se", "Sei", "Sen", "Seng", "Sengi", "Seni", "Seo", "Seoi", "Sha", "Shai", "Shan", "Shang", "Shangi", "Shani", "Shao", "Shaoi", "She", "Shei", "Shen", "Sheng", "Shengi", "Sheni", "Sheo", "Sheoi", "Shi", "Shia", "Shiai", "Shian", "Shiang", "Shiangi", "Shiani", "Shiao", "Shiaoi", "Shii", "Shin", "Shing", "Shingi", "Shini", "Shio", "Shioi", "Sho", "Shoi", "Shon", "Shong", "Shongi", "Shoni", "Shoo", "Shooi", "Shu", "Shua", "Shuai", "Shuan", "Shuang", "Shuangi", "Shuani", "Shuao", "Shuaoi", "Shui", "Shun", "Shung", "Shungi", "Shuni", "Shuo", "Shuoi", "Si", "Sia", "Siai", "Sian", "Siang", "Siangi", "Siani", "Siao", "Siaoi", "Sii", "Sin", "Sing", "Singi", "Sini", "Sio", "Sioi", "So", "Soi", "Son", "Song", "Songi", "Soni", "Soo", "Sooi", "Su", "Sua", "Suai", "Suan", "Suang", "Suangi", "Suani", "Suao", "Suaoi", "Sui", "Sun", "Sung", "Sungi", "Suni", "Suo", "Suoi", "Ta", "Tai", "Tan", "Tang", "Tangi", "Tani", "Tao", "Taoi", "Te", "Tei", "Ten", "Teng", "Tengi", "Teni", "Teo", "Teoi", "Ti", "Tia", "Tiai", "Tian", "Tiang", "Tiangi", "Tiani", "Tiao", "Tiaoi", "Tii", "Tin", "Ting", "Tingi", "Tini", "Tio", "Tioi", "To", "Toi", "Ton", "Tong", "Tongi", "Toni", "Too", "Tooi", "Tu", "Tua", "Tuai", "Tuan", "Tuang", "Tuangi", "Tuani", "Tuao", "Tuaoi", "Tui", "Tun", "Tung", "Tungi", "Tuni", "Tuo", "Tuoi", "Va", "Vai", "Van", "Vang", "Vangi", "Vani", "Vao", "Vaoi", "Ve", "Vei", "Ven", "Veng", "Vengi", "Veni", "Veo", "Veoi", "Vi", "Via", "Viai", "Vian", "Viang", "Viangi", "Viani", "Viao", "Viaoi", "Vii", "Vin", "Ving", "Vingi", "Vini", "Vio", "Vioi", "Vo", "Voi", "Von", "Vong", "Vongi", "Voni", "Voo", "Vooi", "Vu", "Vua", "Vuai", "Vuan", "Vuang", "Vuangi", "Vuani", "Vuao", "Vuaoi", "Vui", "Vun", "Vung", "Vungi", "Vuni", "Vuo", "Vuoi", "Wa", "Wai", "Wan", "Wang", "Wangi", "Wani", "Wao", "Waoi", "We", "Wei", "Wen", "Weng", "Wengi", "Weni", "Weo", "Weoi", "Wi", "Wia", "Wiai", "Wian", "Wiang", "Wiangi", "Wiani", "Wiao", "Wiaoi", "Wii", "Win", "Wing", "Wingi", "Wini", "Wio", "Wioi", "Wo", "Woi", "Won", "Wong", "Wongi", "Woni", "Woo", "Wooi", "Wu", "Wua", "Wuai", "Wuan", "Wuang", "Wuangi", "Wuani", "Wuao", "Wuaoi", "Wui", "Wun", "Wung", "Wungi", "Wuni", "Wuo", "Wuoi", "Xa", "Xai", "Xan", "Xang", "Xangi", "Xani", "Xao", "Xaoi", "Xe", "Xei", "Xen", "Xeng", "Xengi", "Xeni", "Xeo", "Xeoi", "Xi", "Xia", "Xiai", "Xian", "Xiang", "Xiangi", "Xiani", "Xiao", "Xiaoi", "Xii", "Xin", "Xing", "Xingi", "Xini", "Xio", "Xioi", "Xo", "Xoi", "Xon", "Xong", "Xongi", "Xoni", "Xoo", "Xooi", "Xu", "Xua", "Xuai", "Xuan", "Xuang", "Xuangi", "Xuani", "Xuao", "Xuaoi", "Xui", "Xun", "Xung", "Xungi", "Xuni", "Xuo", "Xuoi", "Ya", "Yai", "Yan", "Yang", "Yangi", "Yani", "Yao", "Yaoi", "Ye", "Yei", "Yen", "Yeng", "Yengi", "Yeni", "Yeo", "Yeoi", "Yi", "Yia", "Yiai", "Yian", "Yiang", "Yiangi", "Yiani", "Yiao", "Yiaoi", "Yii", "Yin", "Ying", "Yingi", "Yini", "Yio", "Yioi", "Yo", "Yoi", "Yon", "Yong", "Yongi", "Yoni", "Yoo", "Yooi", "Yu", "Yua", "Yuai", "Yuan", "Yuang", "Yuangi", "Yuani", "Yuao", "Yuaoi", "Yui", "Yun", "Yung", "Yungi", "Yuni", "Yuo", "Yuoi", "Za", "Zai", "Zan", "Zang", "Zangi", "Zani", "Zao", "Zaoi", "Ze", "Zei", "Zen", "Zeng", "Zengi", "Zeni", "Zeo", "Zeoi", "Zha", "Zhai", "Zhan", "Zhang", "Zhangi", "Zhani", "Zhao", "Zhaoi", "Zhe", "Zhei", "Zhen", "Zheng", "Zhengi", "Zheni", "Zheo", "Zheoi", "Zhi", "Zhia", "Zhiai", "Zhian", "Zhiang", "Zhiangi", "Zhiani", "Zhiao", "Zhiaoi", "Zhii", "Zhin", "Zhing", "Zhingi", "Zhini", "Zhio", "Zhioi", "Zho", "Zhoi", "Zhon", "Zhong", "Zhongi", "Zhoni", "Zhoo", "Zhooi", "Zhu", "Zhua", "Zhuai", "Zhuan", "Zhuang", "Zhuangi", "Zhuani", "Zhuao", "Zhuaoi", "Zhui", "Zhun", "Zhung", "Zhungi", "Zhuni", "Zhuo", "Zhuoi", "Zi", "Zia", "Ziai", "Zian", "Ziang", "Ziangi", "Ziani", "Ziao", "Ziaoi", "Zii", "Zin", "Zing", "Zingi", "Zini", "Zio", "Zioi", "Zo", "Zoi", "Zon", "Zong", "Zongi", "Zoni", "Zoo", "Zooi", "Zu", "Zua", "Zuai", "Zuan", "Zuang", "Zuangi", "Zuani", "Zuao", "Zuaoi", "Zui", "Zun", "Zung", "Zungi", "Zuni", "Zuo", "Zuoi"}
+
+-- VERSION --
+RYZOM_NAMES_ZORAI_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua
index 198e9bdd2f..ddc8dd721b 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua
@@ -438,3 +438,6 @@ function outgame:loadRPBGPage()
getUI("ui:outgame:appear:job_options:rpbg:html"):browse("https://app.ryzom.com/app_arcc/outgame_rpbg.php?lang="..lang.."&slot="..tostring(slot).."&sex="..sex.."&key="..rpbg_key)
getUI("https://app.ryzom.com/app_arcc/outgame_rpbg.php?lang="..lang.."&slot="..tostring(slot).."&sex="..sex.."&key="..rpbg_key)
end
+
+-- VERSION --
+RYZOM_OUT_V2_APPEAR_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua
index 7e35b5a438..2e22ea2fe1 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua
@@ -42,3 +42,6 @@ function game:procCharselClickSlot()
local value = getDbProp('UI:SELECTED_SLOT')
runAH(nil, "proc", "proc_charsel_clickslot|"..value)
end
+
+-- VERSION --
+RYZOM_OUT_V2_SELECT_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
index 67fb214af5..5ba4f4066b 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
@@ -665,3 +665,6 @@ function game:outpostInitPvpJoinTimer()
setOnDraw(uiGroup, 'game:outpostPvpJoinTimerOnDraw()');
end
+
+-- VERSION --
+RYZOM_OUTPOST_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/player.lua b/ryzom/client/data/gamedev/interfaces_v3/player.lua
index b2eee2aa44..f32838dce0 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/player.lua
@@ -1030,3 +1030,6 @@ function game:fixVpx(vpx)
local nvpx = vpx1:sub(1, string.len(vpx1)-6)..vpx2:sub(string.len(vpx2)-5, string.len(vpx2))
return nvpx
end
+
+-- VERSION --
+RYZOM_PLAYER_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/player_trade.lua b/ryzom/client/data/gamedev/interfaces_v3/player_trade.lua
index f80911a100..f29f6ca55a 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/player_trade.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/player_trade.lua
@@ -30,3 +30,6 @@ function getBulk(inventory)
local bulk = runExpr("getItemsBulk('LOCAL:EXCHANGE:"..inventory.."', 0," .. slots .. ")");
return math.floor(bulk * 100) / 100;
end
+
+-- VERSION --
+RYZOM_PLAYER_TRADE_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua b/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua
index ca04561f1e..0799c8447f 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua
@@ -942,3 +942,6 @@ function RingAccessPoint:newScenario()
end
end
+
+-- VERSION --
+RYZOM_RING_ACCESS_POINT_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ring_access_point_filter.lua b/ryzom/client/data/gamedev/interfaces_v3/ring_access_point_filter.lua
index 44a0451d75..a9f56fb95d 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ring_access_point_filter.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ring_access_point_filter.lua
@@ -119,3 +119,6 @@ function game.RingAccessPointFilter:validate()
end
+
+-- VERSION --
+RYZOM_RING_ACCESS_POINT_FILTER_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ring_window.lua b/ryzom/client/data/gamedev/interfaces_v3/ring_window.lua
index dfec3edc4b..bad00bf25e 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ring_window.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ring_window.lua
@@ -15,3 +15,6 @@ function onRingWindowShown()
firstBrowseDone = true
end
end
+
+-- VERSION --
+RYZOM_RING_WINDOW_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua b/ryzom/client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua
index 5fd43364ba..906a3421f9 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua
@@ -234,3 +234,6 @@ function RyzhomePlace:close()
--runAH(nil, "remove_shapes", "")
getUI("ui:interface:webig_ryzhome_place_item").active=false
end
+
+-- VERSION --
+RYZOM_RYZHOME_TOOLBAR_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
index 78d02648ca..ea155fbfdc 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
@@ -624,3 +624,6 @@ function SceneEditor:get_html(message, message_bg)
end
end
+
+-- VERSION --
+RYZOM_SCENEEDIT_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/taskbar.lua b/ryzom/client/data/gamedev/interfaces_v3/taskbar.lua
index 635025f0ee..043d6f8f5a 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/taskbar.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/taskbar.lua
@@ -94,3 +94,6 @@ function game:updateMilkoKey(key, status)
game:resizeMilkoPad()
end
+
+-- VERSION --
+RYZOM_TASKBAR_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua b/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua
index b9ee004710..fef2fda33b 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua
@@ -836,3 +836,6 @@ function artefact:startInterface(cult)
end
--
--
+
+-- VERSION --
+RYZOM_TP_INTERFACE_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua b/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
index 77f9585551..1845df8c79 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
@@ -130,3 +130,6 @@ if WebQueue.doinit then
addOnDbChange(getUI("ui:interface:webqueue"), "@UI:VARIABLES:CURRENT_SERVER_TICK", "WebQueue:loop()")
end
+
+-- VERSION --
+RYZOM_WEB_QUEUE_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua b/ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua
index 22bedb1ba0..fdb36c76c6 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua
@@ -243,3 +243,6 @@ function WebBrowser:onClickHome()
html:browse("home")
end
end
+
+-- VERSION --
+RYZOM_WEBBROWSER_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/webig.lua b/ryzom/client/data/gamedev/interfaces_v3/webig.lua
index 52d5a8f268..d34fb372e9 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/webig.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/webig.lua
@@ -248,3 +248,6 @@ end
+
+-- VERSION --
+RYZOM_WEBIG_VERSION = 10469
\ No newline at end of file
From eda519bf8ddba4503daef902413967212bbdf001 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Wed, 7 Jun 2023 17:25:11 +0200
Subject: [PATCH 045/194] Fix lua version
---
ryzom/client/data/gamedev/interfaces_v3/appzone.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/ark.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/base64.lua | 4 ----
ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/compass.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/game_config.lua | 2 +-
.../client/data/gamedev/interfaces_v3/game_r2_loading.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/guild.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/help.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/info_player.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/info_player.xml | 8 ++++----
ryzom/client/data/gamedev/interfaces_v3/interaction.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/interaction.xml | 2 +-
ryzom/client/data/gamedev/interfaces_v3/inventory.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/json.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/map.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/misc.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/names_matis.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/outpost.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/player.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/player_trade.lua | 2 +-
.../data/gamedev/interfaces_v3/ring_access_point.lua | 2 +-
.../gamedev/interfaces_v3/ring_access_point_filter.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/ring_window.lua | 2 +-
.../client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/taskbar.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/web_queue.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/webig.lua | 2 +-
38 files changed, 40 insertions(+), 44 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/appzone.lua b/ryzom/client/data/gamedev/interfaces_v3/appzone.lua
index 878ea0a7b3..b04472d307 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/appzone.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/appzone.lua
@@ -192,4 +192,4 @@ function AppZone:handle(cmd)
end
-- VERSION --
-RYZOM_APPZONE_VERSION = 10469
\ No newline at end of file
+RYZOM_APPZONE_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark.lua b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
index ac32ba43eb..fc9ba53d7c 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
@@ -623,4 +623,4 @@ end
-- VERSION --
-RYZOM_ARK_VERSION = 10469
\ No newline at end of file
+RYZOM_ARK_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua b/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
index 59a0541822..a222e416f0 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark_lessons.lua
@@ -421,4 +421,4 @@ end
-- VERSION --
-RYZOM_ARK_LESSONS_VERSION = 10469
\ No newline at end of file
+RYZOM_ARK_LESSONS_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/base64.lua b/ryzom/client/data/gamedev/interfaces_v3/base64.lua
index 60aab44bed..c5fa529d46 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/base64.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/base64.lua
@@ -199,7 +199,3 @@ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
--]]
-
-
--- VERSION --
-RYZOM_BASE64_VERSION = 10469
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua b/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua
index 2264e48246..8a0789da9f 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/bg_downloader.lua
@@ -180,4 +180,4 @@ function bgdownloader:inGamePatchUncompleteWarning()
displaySystemInfo(i18n.get("uiBGD_InGamePatchIncompleteBC"), "BC")
end
-- VERSION --
-RYZOM_BG_DOWNLOADER_VERSION = 10469
\ No newline at end of file
+RYZOM_BG_DOWNLOADER_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua b/ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua
index ab145ecff8..1398b33e8c 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/bot_chat_v4.lua
@@ -64,4 +64,4 @@ function game:bcMissionsUpdate()
end
-- VERSION --
-RYZOM_BOT_CHAT_V4_VERSION = 10469
\ No newline at end of file
+RYZOM_BOT_CHAT_V4_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/compass.lua b/ryzom/client/data/gamedev/interfaces_v3/compass.lua
index df4727b1c9..9772d4083c 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/compass.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/compass.lua
@@ -50,4 +50,4 @@ end
setOnDraw(getUI("ui:interface:compass"), "game:updateCompass()")
-- VERSION --
-RYZOM_COMPASS_VERSION = 10469
\ No newline at end of file
+RYZOM_COMPASS_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/game_config.lua b/ryzom/client/data/gamedev/interfaces_v3/game_config.lua
index c33e62fd6b..4e699cdb7c 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/game_config.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/game_config.lua
@@ -200,4 +200,4 @@ function game:configInit()
end
-- VERSION --
-RYZOM_GAME_CONFIG_VERSION = 10469
\ No newline at end of file
+RYZOM_GAME_CONFIG_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua b/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua
index 2ad99629ec..d698e2c4ea 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/game_r2_loading.lua
@@ -638,4 +638,4 @@ end
-- VERSION --
-RYZOM_GAME_R2_LOADING_VERSION = 10469
\ No newline at end of file
+RYZOM_GAME_R2_LOADING_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/guild.lua b/ryzom/client/data/gamedev/interfaces_v3/guild.lua
index 2d33203486..e37e5f1862 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/guild.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/guild.lua
@@ -98,4 +98,4 @@ function game:guildDeactive()
end
-- VERSION --
-RYZOM_GUILD_VERSION = 10469
\ No newline at end of file
+RYZOM_GUILD_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/help.lua b/ryzom/client/data/gamedev/interfaces_v3/help.lua
index 9d3d437531..e5279ccac1 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/help.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/help.lua
@@ -142,4 +142,4 @@ end
-- VERSION --
-RYZOM_HELP_VERSION = 10469
\ No newline at end of file
+RYZOM_HELP_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
index 3073321a45..7cfe901eca 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
@@ -2198,4 +2198,4 @@ end
-- VERSION --
-RYZOM_INFO_PLAYER_VERSION = 10469
\ No newline at end of file
+RYZOM_INFO_PLAYER_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/info_player.xml b/ryzom/client/data/gamedev/interfaces_v3/info_player.xml
index 0b5af31f3e..b5036babf0 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/info_player.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/info_player.xml
@@ -847,13 +847,13 @@
-
+
-
-
-
+
+
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
index 2c351f90b2..8a281d924d 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
@@ -1290,4 +1290,4 @@ function arkNpcShop:Buy(id)
end
-- VERSION --
-RYZOM_INTERACTION_VERSION = 10469
\ No newline at end of file
+RYZOM_INTERACTION_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.xml b/ryzom/client/data/gamedev/interfaces_v3/interaction.xml
index 53af8d1117..ab219f874f 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.xml
@@ -3341,7 +3341,7 @@
-
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/inventory.lua b/ryzom/client/data/gamedev/interfaces_v3/inventory.lua
index b2f3b82c39..47ccd49f5f 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/inventory.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/inventory.lua
@@ -76,4 +76,4 @@ function game:updateEquipOnResize(base, force)
end
end
-- VERSION --
-RYZOM_INVENTORY_VERSION = 10469
\ No newline at end of file
+RYZOM_INVENTORY_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/json.lua b/ryzom/client/data/gamedev/interfaces_v3/json.lua
index 5de24111cc..02410d78f6 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/json.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/json.lua
@@ -376,4 +376,4 @@ function Json.decode(str)
end
-- VERSION --
-RYZOM_JSON_VERSION = 10469
\ No newline at end of file
+RYZOM_JSON_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/map.lua b/ryzom/client/data/gamedev/interfaces_v3/map.lua
index 54f4a27855..c06b363120 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/map.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/map.lua
@@ -271,4 +271,4 @@ game:addMapArkPoint("Vip", 4154, -3305, "vip_allegory", "", "allegory_16.tga", "
-- game:setAltMap("fyros_map.tga", "fyros_map_sp.tga")
-- VERSION --
-RYZOM_MAP_VERSION = 10469
\ No newline at end of file
+RYZOM_MAP_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/misc.lua b/ryzom/client/data/gamedev/interfaces_v3/misc.lua
index ac920e5912..6effaa6866 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/misc.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/misc.lua
@@ -136,4 +136,4 @@ function misc:initInvObserver(
end
-- VERSION --
-RYZOM_MISC_VERSION = 10469
\ No newline at end of file
+RYZOM_MISC_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua b/ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua
index d6e0cbf2cf..da40220d2c 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/names_fyros.lua
@@ -295,4 +295,4 @@ fyrosLastNames = {"Abyan", "Abybus", "Abycaon", "Abycus", "Abydix", "Abydon", "A
, "Dethus", "Detis", "Deton", "Deuan", "Deubus", "Deucaon", "Deucus", "Deudix", "Deudon", "Deudos", "Deuion", "Deukos", "Deula", "Deulaus", "Deulion", "Deullo", "Deulus", "Deumus", "Deun", "Deunix", "Deups", "Deurius", "Deuron", "Deuros", "Deurus", "Deuseus", "Deusse", "Deutheus", "Deuthus", "Deutis", "Deuton", "Deuxius", "Dexius", "Dioan", "Diobus", "Diocaon", "Diocus", "Diodix", "Diodon", "Diodos", "Dioion", "Diokos", "Diola", "Diolaus", "Diolion", "Diollo", "Diolus", "Diomus", "Dion", "Dionix", "Diops", "Diorius", "Dioron", "Dioros", "Diorus", "Dioseus", "Diosse", "Diotheus", "Diothus", "Diotis", "Dioton", "Dioxius", "Dyan", "Dybus", "Dycaon", "Dycus", "Dydix", "Dydon", "Dydos", "Dyion", "Dykos", "Dyla", "Dylaus", "Dylion", "Dyllo", "Dylus", "Dymus", "Dyn", "Dynix", "Dyps", "Dyrius", "Dyron", "Dyros", "Dyrus", "Dyseus", "Dysse", "Dytheus", "Dythus", "Dytis", "Dyton", "Dyxius", "Euan", "Eubus", "Eucaon", "Eucus", "Eudix", "Eudon", "Eudos", "Euion", "Eukos", "Eula", "Eulaus", "Eulion", "Eullo", "Eulus", "Eumus", "Eun", "Eunix", "Eups", "Eurius", "Euron", "Euros", "Eurus", "Euseus", "Eusse", "Eutheus", "Euthus", "Eutis", "Euton", "Euxius", "Gaan", "Gabus", "Gacaon", "Gacus", "Gadix", "Gadon", "Gados", "Gaion", "Gakos", "Gala", "Galaus", "Galion", "Gallo", "Galus", "Gamus", "Gan", "Ganix", "Gaps", "Garius", "Garon", "Garos", "Garus", "Gaseus", "Gasse", "Gatheus", "Gathus", "Gatis", "Gaton", "Gaxius", "Ibian", "Ibibus", "Ibicaon", "Ibicus", "Ibidix", "Ibidon", "Ibidos", "Ibiion", "Ibikos", "Ibila", "Ibilaus", "Ibilion", "Ibillo", "Ibilus", "Ibimus", "Ibin", "Ibinix", "Ibips", "Ibirius", "Ibiron", "Ibiros", "Ibirus", "Ibiseus", "Ibisse", "Ibitheus", "Ibithus", "Ibitis", "Ibiton", "Ibixius", "Icaan", "Icabus", "Icacaon", "Icacus", "Icadix", "Icadon", "Icados", "Icaion", "Icakos", "Icala", "Icalaus", "Icalion", "Icallo", "Icalus", "Icamus", "Ican", "Icanix", "Icaps", "Icarius", "Icaron", "Icaros", "Icarus", "Icaseus", "Icasse", "Icatheus", "Icathus", "Icatis", "Icaton", "Icaxius", "Ioan", "Iobus", "Iocaon", "Iocus", "Iodix", "Iodon", "Iodos", "Ioion", "Iokos", "Iola", "Iolaus", "Iolion", "Iollo", "Iolus", "Iomus", "Ion", "Ionix", "Iops", "Iorius", "Ioron", "Ioros", "Iorus", "Ioseus", "Iosse", "Iotheus", "Iothus", "Iotis", "Ioton", "Ioxius", "Krian", "Kribus", "Kricaon", "Kricus", "Kridix", "Kridon", "Kridos", "Kriion", "Krikos", "Krila", "Krilaus", "Krilion", "Krillo", "Krilus", "Krimus", "Krin", "Krinix", "Krips", "Kririus", "Kriron", "Kriros", "Krirus", "Kriseus", "Krisse", "Kritheus", "Krithus", "Kritis", "Kriton", "Krixius", "Kyan", "Kybus", "Kycaon", "Kycus", "Kydix", "Kydon", "Kydos", "Kyion", "Kykos", "Kyla", "Kylaus", "Kylion", "Kyllo", "Kylus", "Kymus", "Kyn", "Kynix", "Kyps", "Kyrius", "Kyron", "Kyros", "Kyrus", "Kyseus", "Kysse", "Kytheus", "Kythus", "Kytis", "Kyton", "Kyxius", "Lyan", "Lybus", "Lycaon", "Lycus", "Lydix", "Lydon", "Lydos", "Lyion", "Lykos", "Lyla", "Lylaus", "Lylion", "Lyllo", "Lylus", "Lymus", "Lyn", "Lynix", "Lyps", "Lyrius", "Lyron", "Lyros", "Lyrus", "Lyseus", "Lysse", "Lytheus", "Lythus", "Lytis", "Lyton", "Lyxius", "Mean", "Mebus", "Mecaon", "Mecus", "Medix", "Medon", "Medos", "Meion", "Mekos", "Mela", "Melaus", "Melion", "Mello", "Melus", "Memus", "Men", "Menix", "Meps", "Merius", "Meron", "Meros", "Merus", "Meseus", "Messe", "Metheus", "Methus", "Metis", "Meton", "Mexius", "Mian", "Mibus", "Micaon", "Micus", "Midix", "Midon", "Midos", "Miion", "Mikos", "Mila", "Milaus", "Milion", "Millo", "Milus", "Mimus", "Min", "Minix", "Mips", "Mirius", "Miron", "Miros", "Mirus", "Miseus", "Misse", "Mitheus", "Mithus", "Mitis", "Miton", "Mixius", "Pean", "Pebus", "Pecaon", "Pecus", "Pedix", "Pedon", "Pedos", "Peion", "Pekos", "Pela", "Pelaus", "Pelion", "Pello", "Pelus", "Pemus", "Pen", "Penix", "Peps", "Perius", "Peron", "Peros", "Perus", "Peseus", "Pesse", "Petheus", "Pethus", "Petis", "Peton", "Pexius", "Pian", "Pibus", "Picaon", "Picus", "Pidix", "Pidon", "Pidos", "Piion", "Pikos", "Pila", "Pilaus", "Pilion", "Pillo", "Pilus", "Pimus", "Pin", "Pinix", "Pips", "Pirius", "Piron", "Piros", "Pirus", "Piseus", "Pisse", "Pitheus", "Pithus", "Pitis", "Piton", "Pixius", "Plean", "Plebus", "Plecaon", "Plecus", "Pledix", "Pledon", "Pledos", "Pleion", "Plekos", "Plela", "Plelaus", "Plelion", "Plello", "Plelus", "Plemus", "Plen", "Plenix", "Pleps", "Plerius", "Pleron", "Pleros", "Plerus", "Pleseus", "Plesse", "Pletheus", "Plethus", "Pletis", "Pleton", "Plexius", "Pyan", "Pybus", "Pycaon", "Pycus", "Pydix", "Pydon", "Pydos", "Pyion", "Pykos", "Pyla", "Pylaus", "Pylion", "Pyllo", "Pylus", "Pymus", "Pyn", "Pynix", "Pyps", "Pyrius", "Pyron", "Pyros", "Pyrus", "Pyseus", "Pysse", "Pytheus", "Pythus", "Pytis", "Pyton", "Pyxius", "Thean", "Thebus", "Thecaon", "Thecus", "Thedix", "Thedon", "Thedos", "Theion", "Thekos", "Thela", "Thelaus", "Thelion", "Thello", "Thelus", "Themus", "Then", "Thenix", "Theps", "Therius", "Theron", "Theros", "Therus", "Theseus", "Thesse", "Thetheus", "Thethus", "Thetis", "Theton", "Thexius", "Tian", "Tibus", "Ticaon", "Ticus", "Tidix", "Tidon", "Tidos", "Tiion", "Tikos", "Tila", "Tilaus", "Tilion", "Tillo", "Tilus", "Timus", "Tin", "Tinix", "Tips", "Tirius", "Tiron", "Tiros", "Tirus", "Tiseus", "Tisse", "Titheus", "Tithus", "Titis", "Titon", "Tixius", "Ulyan", "Ulybus", "Ulycaon", "Ulycus", "Ulydix", "Ulydon", "Ulydos", "Ulyion", "Ulykos", "Ulyla", "Ulylaus", "Ulylion", "Ulyllo", "Ulylus", "Ulymus", "Ulyn", "Ulynix", "Ulyps", "Ulyrius", "Ulyron", "Ulyros", "Ulyrus", "Ulyseus", "Ulysse", "Ulytheus", "Ulythus", "Ulytis", "Ulyton", "Ulyxius", "Xaan", "Xabus", "Xacaon", "Xacus", "Xadix", "Xadon", "Xados", "Xaion", "Xakos", "Xala", "Xalaus", "Xalion", "Xallo", "Xalus", "Xamus", "Xan", "Xanix", "Xaps", "Xarius", "Xaron", "Xaros", "Xarus", "Xaseus", "Xasse", "Xatheus", "Xathus", "Xatis", "Xaton", "Xaxius", "Xyan", "Xybus", "Xycaon", "Xycus", "Xydix", "Xydon", "Xydos", "Xyion", "Xykos", "Xyla", "Xylaus", "Xylion", "Xyllo", "Xylus", "Xymus", "Xyn", "Xynix", "Xyps", "Xyrius", "Xyron", "Xyros", "Xyrus", "Xyseus", "Xysse", "Xytheus", "Xythus", "Xytis", "Xyton", "Xyxius", "Zean", "Zebus", "Zecaon", "Zecus", "Zedix", "Zedon", "Zedos", "Zeion", "Zekos", "Zela", "Zelaus", "Zelion", "Zello", "Zelus", "Zemus", "Zen", "Zenix", "Zeps", "Zerius", "Zeron", "Zeros", "Zerus", "Zeseus", "Zesse", "Zetheus", "Zethus", "Zetis", "Zeton", "Zexius"}
-- VERSION --
-RYZOM_NAMES_FYROS_VERSION = 10469
\ No newline at end of file
+RYZOM_NAMES_FYROS_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/names_matis.lua b/ryzom/client/data/gamedev/interfaces_v3/names_matis.lua
index f0c1954e79..0be4791390 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/names_matis.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/names_matis.lua
@@ -3,4 +3,4 @@ matisFemaleFirstNames = {"Anibi", "Anichi", "Anichini", "Anidi", "Anilli", "Anin
matisMaleFirstNames = {"Anibre", "Aniccio", "Anicco", "Anichio", "Anicho", "Aniero", "Anigio", "Anigno", "Anillo", "Anilo", "Anine", "Aninio", "Anino", "Anirgio", "Aniro", "Anisse", "Anivaldo", "Anizzo", "Antobre", "Antoccio", "Antocco", "Antochio", "Antocho", "Antoero", "Antogio", "Antogno", "Antollo", "Antolo", "Antone", "Antonio", "Antono", "Antorgio", "Antoro", "Antosse", "Antovaldo", "Antozzo", "Bebre", "Beccio", "Becco", "Bechio", "Becho", "Beero", "Begio", "Begno", "Bello", "Belo", "Bene", "Benio", "Beno", "Bergio", "Bero", "Besse", "Bevaldo", "Bezzo", "Chiabre", "Chiaccio", "Chiacco", "Chiachio", "Chiacho", "Chiaero", "Chiagio", "Chiagno", "Chiallo", "Chialo", "Chiane", "Chianio", "Chiano", "Chiargio", "Chiaro", "Chiasse", "Chiavaldo", "Chiazzo", "Cibre", "Ciccio", "Cicco", "Cichio", "Cicho", "Ciero", "Cigio", "Cigno", "Cillo", "Cilo", "Cine", "Cinio", "Cino", "Ciobre", "Cioccio", "Ciocco", "Ciochio", "Ciocho", "Cioero", "Ciogio", "Ciogno", "Ciollo", "Ciolo", "Cione", "Cionio", "Ciono", "Ciorgio", "Cioro", "Ciosse", "Ciovaldo", "Ciozzo", "Cirgio", "Ciro", "Cisse", "Civaldo", "Cizzo", "Cuibre", "Cuiccio", "Cuicco", "Cuichio", "Cuiero", "Cuigio", "Cuigno", "Cuillo", "Cuilo", "Cuine", "Cuinio", "Cuino", "Cuirgio", "Cuiro", "Cuisse", "Cuivaldo", "Cuizzo", "Frebre", "Freccio", "Frecco", "Frechio", "Frecho", "Freero", "Fregio", "Fregno", "Frello", "Frelo", "Frene", "Frenio", "Freno", "Frergio", "Frero", "Fresse", "Frevaldo", "Frezzo", "Gibre", "Giccio", "Gicco", "Gichio", "Gicho", "Giero", "Gigio", "Gigno", "Gillo", "Gilo", "Gine", "Ginio", "Gino", "Girgio", "Giro", "Gisse", "Givaldo", "Gizzo", "Libre", "Liccio", "Licco", "Lichio", "Licho", "Liero", "Ligio", "Ligno", "Lillo", "Lilo", "Line", "Linio", "Lino", "Lirgio", "Liro", "Lisse", "Livaldo", "Lizzo", "Miabre", "Miaccio", "Miacco", "Miachio", "Miacho", "Miaero", "Miagio", "Miagno", "Miallo", "Mialo", "Miane", "Mianio", "Miano", "Miargio", "Miaro", "Miasse", "Miavaldo", "Miazzo", "Nibre", "Niccio", "Nicco", "Nichio", "Nicho", "Niero", "Nigio", "Nigno", "Nillo", "Nilo", "Nine", "Ninio", "Nino", "Nirgio", "Niro", "Nisse", "Nivaldo", "Nizzo", "Pebre", "Peccio", "Pecco", "Pechio", "Pecho", "Peero", "Pegio", "Pegno", "Pello", "Pelo", "Pene", "Penio", "Peno", "Pergio", "Pero", "Pesse", "Pevaldo", "Pezzo", "Pibre", "Piccio", "Picco", "Pichio", "Picho", "Piero", "Pigio", "Pigno", "Pillo", "Pilo", "Pine", "Pinio", "Pino", "Pirgio", "Piro", "Pisse", "Pivaldo", "Pizzo", "Robre", "Roccio", "Rocco", "Rochio", "Rocho", "Roero", "Rogio", "Rogno", "Rollo", "Rolo", "Rone", "Ronio", "Rono", "Rorgio", "Roro", "Rosibre", "Rosiccio", "Rosicco", "Rosichio", "Rosicho", "Rosiero", "Rosigio", "Rosigno", "Rosillo", "Rosilo", "Rosine", "Rosinio", "Rosino", "Rosirgio", "Rosiro", "Rosisse", "Rosivaldo", "Rosizzo", "Rosse", "Rovaldo", "Rozzo", "Sibre", "Siccio", "Sicco", "Sichio", "Sicho", "Siero", "Sigio", "Signo", "Sillo", "Silo", "Sine", "Sinio", "Sino", "Sirgio", "Siro", "Sisse", "Sivaldo", "Sizzo", "Stabre", "Staccio", "Stacco", "Stachio", "Stacho", "Staero", "Stagio", "Stagno", "Stallo", "Stalo", "Stane", "Stanio", "Stano", "Stargio", "Staro", "Stasse", "Stavaldo", "Stazzo", "Tinabre", "Tinaccio", "Tinacco", "Tinachio", "Tinacho", "Tinaero", "Tinagio", "Tinagno", "Tinallo", "Tinalo", "Tinane", "Tinanio", "Tinano", "Tinargio", "Tinaro", "Tinasse", "Tinavaldo", "Tinazzo", "Tribre", "Triccio", "Tricco", "Trichio", "Tricho", "Triero", "Trigio", "Trigno", "Trillo", "Trilo", "Trine", "Trinio", "Trino", "Trirgio", "Triro", "Trisse", "Trivaldo", "Trizzo", "Vabre", "Vaccio", "Vacco", "Vachio", "Vacho", "Vaero", "Vagio", "Vagno", "Vallo", "Valo", "Vane", "Vanio", "Vano", "Vargio", "Varo", "Vasse", "Vavaldo", "Vazzo", "Vibre", "Viccio", "Vicco", "Vichio", "Vicho", "Viero", "Vigio", "Vigno", "Villo", "Vilo", "Vine", "Vinio", "Vino", "Virgio", "Viro", "Visse", "Vivaldo", "Vizzo", "Zabre", "Zaccio", "Zacco", "Zachio", "Zacho", "Zaero", "Zagio", "Zagno", "Zallo", "Zalo", "Zane", "Zanio", "Zano", "Zargio", "Zaro", "Zasse", "Zavaldo", "Zazzo", "Andrea", "Chiabre", "Aninne", "Gibre", "Fresse", "Liche", "Nirni", "Pechi"}
-- VERSION --
-RYZOM_NAMES_MATIS_VERSION = 10469
\ No newline at end of file
+RYZOM_NAMES_MATIS_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua b/ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua
index d3aa20da5f..686fe220bf 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/names_tryker.lua
@@ -2,4 +2,4 @@ trykerFirstNames = {"Abban", "Abben", "Abber", "Abbie", "Abby", "Achan", "Achen"
trykerLastNames = {"Ardan", "Arddy", "Arer", "Arffy", "Argan", "Arggan", "Argh", "Arghan", "Arins", "Arkry", "Arlan", "Arle", "Arley", "Arliam", "Arlly", "Arn", "Arnin", "Arny", "Arppy", "Arpsey", "Arra", "Arroy", "Arrrell", "Arrroy", "Arry", "Arssey", "Artty", "Arty", "Ba'ardan", "Ba'arddy", "Ba'arer", "Ba'arffy", "Ba'argan", "Ba'arggan", "Ba'argh", "Ba'arghan", "Ba'arins", "Ba'arkry", "Ba'arlan", "Ba'arle", "Ba'arley", "Ba'arliam", "Ba'arlly", "Ba'arn", "Ba'arnin", "Ba'arny", "Ba'arppy", "Ba'arpsey", "Ba'arra", "Ba'arroy", "Ba'arrrell", "Ba'arrroy", "Ba'arry", "Ba'arssey", "Ba'artty", "Ba'arty", "Ba'bidan", "Ba'biddy", "Ba'bier", "Ba'biffy", "Ba'bigan", "Ba'biggan", "Ba'bigh", "Ba'bighan", "Ba'biins", "Ba'bikry", "Ba'bilan", "Ba'bile", "Ba'biley", "Ba'biliam", "Ba'billy", "Ba'bin", "Ba'binin", "Ba'biny", "Ba'bippy", "Ba'bipsey", "Ba'bira", "Ba'biroy", "Ba'birrell", "Ba'birroy", "Ba'biry", "Ba'bissey", "Ba'bitty", "Ba'bity", "Ba'caudan", "Ba'cauddy", "Ba'cauer", "Ba'cauffy", "Ba'caugan", "Ba'cauggan", "Ba'caugh", "Ba'caughan", "Ba'cauins", "Ba'caukry", "Ba'caulan", "Ba'caule", "Ba'cauley", "Ba'cauliam", "Ba'caully", "Ba'caun", "Ba'caunin", "Ba'cauny", "Ba'cauppy", "Ba'caupsey", "Ba'caura", "Ba'cauroy", "Ba'caurrell", "Ba'caurroy", "Ba'caury", "Ba'caussey", "Ba'cautty", "Ba'cauty", "Ba'dadan", "Ba'daddy", "Ba'daer", "Ba'daffy", "Ba'dagan", "Ba'daggan", "Ba'dagh", "Ba'daghan", "Ba'dains", "Ba'dakry", "Ba'dalan", "Ba'dale", "Ba'daley", "Ba'daliam", "Ba'dally", "Ba'dan", "Ba'danin", "Ba'dany", "Ba'dappy", "Ba'dapsey", "Ba'dara", "Ba'dardan", "Ba'darddy", "Ba'darer", "Ba'darffy", "Ba'dargan", "Ba'darggan", "Ba'dargh", "Ba'darghan", "Ba'darins", "Ba'darkry", "Ba'darlan", "Ba'darle", "Ba'darley", "Ba'darliam", "Ba'darlly", "Ba'darn", "Ba'darnin", "Ba'darny", "Ba'daroy", "Ba'darppy", "Ba'darpsey", "Ba'darra", "Ba'darrell", "Ba'darroy", "Ba'darrrell", "Ba'darrroy", "Ba'darry", "Ba'darssey", "Ba'dartty", "Ba'darty", "Ba'dary", "Ba'dassey", "Ba'datty", "Ba'daty", "Ba'doydan", "Ba'doyddy", "Ba'doyer", "Ba'doyffy", "Ba'doygan", "Ba'doyggan", "Ba'doygh", "Ba'doyghan", "Ba'doyins", "Ba'doykry", "Ba'doylan", "Ba'doyle", "Ba'doyley", "Ba'doyliam", "Ba'doylly", "Ba'doyn", "Ba'doynin", "Ba'doyny", "Ba'doyppy", "Ba'doypsey", "Ba'doyra", "Ba'doyroy", "Ba'doyrrell", "Ba'doyrroy", "Ba'doyry", "Ba'doyssey", "Ba'doytty", "Ba'doyty", "Ba'dudan", "Ba'duddy", "Ba'duer", "Ba'duffy", "Ba'dugan", "Ba'duggan", "Ba'dugh", "Ba'dughan", "Ba'duins", "Ba'dukry", "Ba'dulan", "Ba'dule", "Ba'duley", "Ba'duliam", "Ba'dully", "Ba'dun", "Ba'dunin", "Ba'duny", "Ba'duppy", "Ba'dupsey", "Ba'dura", "Ba'duroy", "Ba'durrell", "Ba'durroy", "Ba'dury", "Ba'dussey", "Ba'dutty", "Ba'duty", "Ba'gadan", "Ba'gaddy", "Ba'gaer", "Ba'gaffy", "Ba'gagan", "Ba'gaggan", "Ba'gagh", "Ba'gaghan", "Ba'gains", "Ba'gakry", "Ba'galan", "Ba'gale", "Ba'galey", "Ba'galiam", "Ba'gally", "Ba'gan", "Ba'ganin", "Ba'gany", "Ba'gappy", "Ba'gapsey", "Ba'gara", "Ba'garoy", "Ba'garrell", "Ba'garroy", "Ba'gary", "Ba'gassey", "Ba'gatty", "Ba'gaty", "Ba'jordan", "Ba'jorddy", "Ba'jorer", "Ba'jorffy", "Ba'jorgan", "Ba'jorggan", "Ba'jorgh", "Ba'jorghan", "Ba'jorins", "Ba'jorkry", "Ba'jorlan", "Ba'jorle", "Ba'jorley", "Ba'jorliam", "Ba'jorlly", "Ba'jorn", "Ba'jornin", "Ba'jorny", "Ba'jorppy", "Ba'jorpsey", "Ba'jorra", "Ba'jorroy", "Ba'jorrrell", "Ba'jorrroy", "Ba'jorry", "Ba'jorssey", "Ba'jortty", "Ba'jorty", "Ba'keadan", "Ba'keaddy", "Ba'keaer", "Ba'keaffy", "Ba'keagan", "Ba'keaggan", "Ba'keagh", "Ba'keaghan", "Ba'keains", "Ba'keakry", "Ba'kealan", "Ba'keale", "Ba'kealey", "Ba'kealiam", "Ba'keally", "Ba'kean", "Ba'keanin", "Ba'keany", "Ba'keappy", "Ba'keapsey", "Ba'keara", "Ba'kearoy", "Ba'kearrell", "Ba'kearroy", "Ba'keary", "Ba'keassey", "Ba'keatty", "Ba'keaty", "Ba'keedan", "Ba'keeddy", "Ba'keeer", "Ba'keeffy", "Ba'keegan", "Ba'keeggan", "Ba'keegh", "Ba'keeghan", "Ba'keeins", "Ba'keekry", "Ba'keelan", "Ba'keele", "Ba'keeley", "Ba'keeliam", "Ba'keelly", "Ba'keen", "Ba'keenin", "Ba'keeny", "Ba'keeppy", "Ba'keepsey", "Ba'keera", "Ba'keeroy", "Ba'keerrell", "Ba'keerroy", "Ba'keery", "Ba'keessey", "Ba'keetty", "Ba'keety", "Ba'laudan", "Ba'lauddy", "Ba'lauer", "Ba'lauffy", "Ba'laugan", "Ba'lauggan", "Ba'laugh", "Ba'laughan", "Ba'lauins", "Ba'laukry", "Ba'laulan", "Ba'laule", "Ba'lauley", "Ba'lauliam", "Ba'laully", "Ba'laun", "Ba'launin", "Ba'launy", "Ba'lauppy", "Ba'laupsey", "Ba'laura", "Ba'lauroy", "Ba'laurrell", "Ba'laurroy", "Ba'laury", "Ba'laussey", "Ba'lautty", "Ba'lauty", "Ba'leadan", "Ba'leaddy", "Ba'leaer", "Ba'leaffy", "Ba'leagan", "Ba'leaggan", "Ba'leagh", "Ba'leaghan", "Ba'leains", "Ba'leakry", "Ba'lealan", "Ba'leale", "Ba'lealey", "Ba'lealiam", "Ba'leally", "Ba'lean", "Ba'leanin", "Ba'leany", "Ba'leappy", "Ba'leapsey", "Ba'leara", "Ba'learoy", "Ba'learrell", "Ba'learroy", "Ba'leary", "Ba'leassey", "Ba'leatty", "Ba'leaty", "Ba'ledan", "Ba'leddy", "Ba'leer", "Ba'leffy", "Ba'legan", "Ba'leggan", "Ba'legh", "Ba'leghan", "Ba'leidan", "Ba'leiddy", "Ba'leier", "Ba'leiffy", "Ba'leigan", "Ba'leiggan", "Ba'leigh", "Ba'leighan", "Ba'leiins", "Ba'leikry", "Ba'leilan", "Ba'leile", "Ba'leiley", "Ba'leiliam", "Ba'leilly", "Ba'lein", "Ba'leinin", "Ba'leins", "Ba'leiny", "Ba'leippy", "Ba'leipsey", "Ba'leira", "Ba'leiroy", "Ba'leirrell", "Ba'leirroy", "Ba'leiry", "Ba'leissey", "Ba'leitty", "Ba'leity", "Ba'lekry", "Ba'lelan", "Ba'lele", "Ba'leley", "Ba'leliam", "Ba'lelly", "Ba'len", "Ba'lenin", "Ba'leny", "Ba'leppy", "Ba'lepsey", "Ba'lera", "Ba'leroy", "Ba'lerrell", "Ba'lerroy", "Ba'lery", "Ba'lessey", "Ba'letty", "Ba'lety", "Ba'lodan", "Ba'loddy", "Ba'loer", "Ba'loffy", "Ba'logan", "Ba'loggan", "Ba'logh", "Ba'loghan", "Ba'loins", "Ba'lokry", "Ba'lolan", "Ba'lole", "Ba'loley", "Ba'loliam", "Ba'lolly", "Ba'lon", "Ba'lonin", "Ba'lony", "Ba'loppy", "Ba'lopsey", "Ba'lora", "Ba'loroy", "Ba'lorrell", "Ba'lorroy", "Ba'lory", "Ba'lossey", "Ba'lotty", "Ba'loty", "Ba'lyndan", "Ba'lynddy", "Ba'lyner", "Ba'lynffy", "Ba'lyngan", "Ba'lynggan", "Ba'lyngh", "Ba'lynghan", "Ba'lynins", "Ba'lynkry", "Ba'lynlan", "Ba'lynle", "Ba'lynley", "Ba'lynliam", "Ba'lynlly", "Ba'lynn", "Ba'lynnin", "Ba'lynny", "Ba'lynppy", "Ba'lynpsey", "Ba'lynra", "Ba'lynroy", "Ba'lynrrell", "Ba'lynrroy", "Ba'lynry", "Ba'lynssey", "Ba'lyntty", "Ba'lynty", "Ba'madan", "Ba'maddy", "Ba'maer", "Ba'maffy", "Ba'magan", "Ba'maggan", "Ba'magh", "Ba'maghan", "Ba'mains", "Ba'makry", "Ba'malan", "Ba'male", "Ba'maley", "Ba'maliam", "Ba'mally", "Ba'man", "Ba'manin", "Ba'many", "Ba'mappy", "Ba'mapsey", "Ba'mara", "Ba'maroy", "Ba'marrell", "Ba'marroy", "Ba'mary", "Ba'massey", "Ba'matty", "Ba'maty", "Ba'nadan", "Ba'naddy", "Ba'naer", "Ba'naffy", "Ba'nagan", "Ba'naggan", "Ba'nagh", "Ba'naghan", "Ba'nains", "Ba'nakry", "Ba'nalan", "Ba'nale", "Ba'naley", "Ba'naliam", "Ba'nally", "Ba'nan", "Ba'nanin", "Ba'nany", "Ba'nappy", "Ba'napsey", "Ba'nara", "Ba'naroy", "Ba'narrell", "Ba'narroy", "Ba'nary", "Ba'nassey", "Ba'natty", "Ba'naty", "Ba'nedan", "Ba'neddy", "Ba'neer", "Ba'neffy", "Ba'negan", "Ba'neggan", "Ba'negh", "Ba'neghan", "Ba'neins", "Ba'nekry", "Ba'nelan", "Ba'nele", "Ba'neley", "Ba'neliam", "Ba'nelly", "Ba'nen", "Ba'nenin", "Ba'neny", "Ba'neppy", "Ba'nepsey", "Ba'nera", "Ba'neroy", "Ba'nerrell", "Ba'nerroy", "Ba'nery", "Ba'nessey", "Ba'netty", "Ba'nety", "Ba'peadan", "Ba'peaddy", "Ba'peaer", "Ba'peaffy", "Ba'peagan", "Ba'peaggan", "Ba'peagh", "Ba'peaghan", "Ba'peains", "Ba'peakry", "Ba'pealan", "Ba'peale", "Ba'pealey", "Ba'pealiam", "Ba'peally", "Ba'pean", "Ba'peanin", "Ba'peany", "Ba'peappy", "Ba'peapsey", "Ba'peara", "Ba'pearoy", "Ba'pearrell", "Ba'pearroy", "Ba'peary", "Ba'peassey", "Ba'peatty", "Ba'peaty", "Ba'reidan", "Ba'reiddy", "Ba'reier", "Ba'reiffy", "Ba'reigan", "Ba'reiggan", "Ba'reigh", "Ba'reighan", "Ba'reiins", "Ba'reikry", "Ba'reilan", "Ba'reile", "Ba'reiley", "Ba'reiliam", "Ba'reilly", "Ba'rein", "Ba'reinin", "Ba'reiny", "Ba'reippy", "Ba'reipsey", "Ba'reira", "Ba'reiroy", "Ba'reirrell", "Ba'reirroy", "Ba'reiry", "Ba'reissey", "Ba'reitty", "Ba'reity", "Ba'ridan", "Ba'riddy", "Ba'rier", "Ba'riffy", "Ba'rigan", "Ba'riggan", "Ba'righ", "Ba'righan", "Ba'riins", "Ba'rikry", "Ba'rilan", "Ba'rile", "Ba'riley", "Ba'riliam", "Ba'rilly", "Ba'rin", "Ba'rinin", "Ba'riny", "Ba'ripdan", "Ba'ripddy", "Ba'riper", "Ba'ripffy", "Ba'ripgan", "Ba'ripggan", "Ba'ripgh", "Ba'ripghan", "Ba'ripins", "Ba'ripkry", "Ba'riplan", "Ba'riple", "Ba'ripley", "Ba'ripliam", "Ba'riplly", "Ba'ripn", "Ba'ripnin", "Ba'ripny", "Ba'ripppy", "Ba'rippsey", "Ba'rippy", "Ba'ripra", "Ba'riproy", "Ba'riprrell", "Ba'riprroy", "Ba'ripry", "Ba'ripsey", "Ba'ripssey", "Ba'riptty", "Ba'ripty", "Ba'rira", "Ba'riroy", "Ba'rirrell", "Ba'rirroy", "Ba'riry", "Ba'rissey", "Ba'ritty", "Ba'rity", "Ba'rodan", "Ba'roddy", "Ba'roer", "Ba'roffy", "Ba'rogan", "Ba'roggan", "Ba'rogh", "Ba'roghan", "Ba'roins", "Ba'rokry", "Ba'rolan", "Ba'role", "Ba'roley", "Ba'roliam", "Ba'rolly", "Ba'ron", "Ba'ronin", "Ba'rony", "Ba'roppy", "Ba'ropsey", "Ba'rora", "Ba'roroy", "Ba'rorrell", "Ba'rorroy", "Ba'rory", "Ba'rossey", "Ba'rotty", "Ba'roty", "Ba'sadan", "Ba'saddy", "Ba'saer", "Ba'saffy", "Ba'sagan", "Ba'saggan", "Ba'sagh", "Ba'saghan", "Ba'sains", "Ba'sakry", "Ba'salan", "Ba'sale", "Ba'saley", "Ba'saliam", "Ba'sally", "Ba'san", "Ba'sanin", "Ba'sany", "Ba'sappy", "Ba'sapsey", "Ba'sara", "Ba'saroy", "Ba'sarrell", "Ba'sarroy", "Ba'sary", "Ba'sassey", "Ba'satty", "Ba'saty", "Ba'shedan", "Ba'sheddy", "Ba'sheer", "Ba'sheffy", "Ba'shegan", "Ba'sheggan", "Ba'shegh", "Ba'sheghan", "Ba'sheins", "Ba'shekry", "Ba'shelan", "Ba'shele", "Ba'sheley", "Ba'sheliam", "Ba'shelly", "Ba'shen", "Ba'shenin", "Ba'sheny", "Ba'sheppy", "Ba'shepsey", "Ba'shera", "Ba'sheroy", "Ba'sherrell", "Ba'sherroy", "Ba'shery", "Ba'shessey", "Ba'shetty", "Ba'shety", "Ba'tedan", "Ba'teddy", "Ba'teer", "Ba'teffy", "Ba'tegan", "Ba'teggan", "Ba'tegh", "Ba'teghan", "Ba'teins", "Ba'tekry", "Ba'telan", "Ba'tele", "Ba'teley", "Ba'teliam", "Ba'telly", "Ba'ten", "Ba'tenin", "Ba'teny", "Ba'teppy", "Ba'tepsey", "Ba'tera", "Ba'teroy", "Ba'terrell", "Ba'terroy", "Ba'tery", "Ba'tessey", "Ba'tetty", "Ba'tety", "Ba'toodan", "Ba'tooddy", "Ba'tooer", "Ba'tooffy", "Ba'toogan", "Ba'tooggan", "Ba'toogh", "Ba'tooghan", "Ba'tooins", "Ba'tookry", "Ba'toolan", "Ba'toole", "Ba'tooley", "Ba'tooliam", "Ba'toolly", "Ba'toon", "Ba'toonin", "Ba'toony", "Ba'tooppy", "Ba'toopsey", "Ba'toora", "Ba'tooroy", "Ba'toorrell", "Ba'toorroy", "Ba'toory", "Ba'toossey", "Ba'tootty", "Ba'tooty", "Ba'widan", "Ba'widdy", "Ba'wier", "Ba'wiffy", "Ba'wigan", "Ba'wiggan", "Ba'wigh", "Ba'wighan", "Ba'wiins", "Ba'wikry", "Ba'wilan", "Ba'wile", "Ba'wiley", "Ba'wiliam", "Ba'willy", "Ba'win", "Ba'winin", "Ba'winy", "Ba'wippy", "Ba'wipsey", "Ba'wira", "Ba'wiroy", "Ba'wirrell", "Ba'wirroy", "Ba'wiry", "Ba'wissey", "Ba'witty", "Ba'wity", "Ba'ydan", "Ba'yddy", "Ba'yer", "Ba'yffy", "Ba'ygan", "Ba'yggan", "Ba'ygh", "Ba'yghan", "Ba'yins", "Ba'ykry", "Ba'ylan", "Ba'yle", "Ba'yley", "Ba'yliam", "Ba'ylly", "Ba'yn", "Ba'ynin", "Ba'yny", "Ba'yppy", "Ba'ypsey", "Ba'yra", "Ba'yroy", "Ba'yrrell", "Ba'yrroy", "Ba'yry", "Ba'yssey", "Ba'ytty", "Ba'yty", "Be'ardan", "Be'arddy", "Be'arer", "Be'arffy", "Be'argan", "Be'arggan", "Be'argh", "Be'arghan", "Be'arins", "Be'arkry", "Be'arlan", "Be'arle", "Be'arley", "Be'arliam", "Be'arlly", "Be'arn", "Be'arnin", "Be'arny", "Be'arppy", "Be'arpsey", "Be'arra", "Be'arroy", "Be'arrrell", "Be'arrroy", "Be'arry", "Be'arssey", "Be'artty", "Be'arty", "Be'bidan", "Be'biddy", "Be'bier", "Be'biffy", "Be'bigan", "Be'biggan", "Be'bigh", "Be'bighan", "Be'biins", "Be'bikry", "Be'bilan", "Be'bile", "Be'biley", "Be'biliam", "Be'billy", "Be'bin", "Be'binin", "Be'biny", "Be'bippy", "Be'bipsey", "Be'bira", "Be'biroy", "Be'birrell", "Be'birroy", "Be'biry", "Be'bissey", "Be'bitty", "Be'bity", "Be'caudan", "Be'cauddy", "Be'cauer", "Be'cauffy", "Be'caugan", "Be'cauggan", "Be'caugh", "Be'caughan", "Be'cauins", "Be'caukry", "Be'caulan", "Be'caule", "Be'cauley", "Be'cauliam", "Be'caully", "Be'caun", "Be'caunin", "Be'cauny", "Be'cauppy", "Be'caupsey", "Be'caura", "Be'cauroy", "Be'caurrell", "Be'caurroy", "Be'caury", "Be'caussey", "Be'cautty", "Be'cauty", "Be'dadan", "Be'daddy", "Be'daer", "Be'daffy", "Be'dagan", "Be'daggan", "Be'dagh", "Be'daghan", "Be'dains", "Be'dakry", "Be'dalan", "Be'dale", "Be'daley", "Be'daliam", "Be'dally", "Be'dan", "Be'danin", "Be'dany", "Be'dappy", "Be'dapsey", "Be'dara", "Be'dardan", "Be'darddy", "Be'darer", "Be'darffy", "Be'dargan", "Be'darggan", "Be'dargh", "Be'darghan", "Be'darins", "Be'darkry", "Be'darlan", "Be'darle", "Be'darley", "Be'darliam", "Be'darlly", "Be'darn", "Be'darnin", "Be'darny", "Be'daroy", "Be'darppy", "Be'darpsey", "Be'darra", "Be'darrell", "Be'darroy", "Be'darrrell", "Be'darrroy", "Be'darry", "Be'darssey", "Be'dartty", "Be'darty", "Be'dary", "Be'dassey", "Be'datty", "Be'daty", "Be'doydan", "Be'doyddy", "Be'doyer", "Be'doyffy", "Be'doygan", "Be'doyggan", "Be'doygh", "Be'doyghan", "Be'doyins", "Be'doykry", "Be'doylan", "Be'doyle", "Be'doyley", "Be'doyliam", "Be'doylly", "Be'doyn", "Be'doynin", "Be'doyny", "Be'doyppy", "Be'doypsey", "Be'doyra", "Be'doyroy", "Be'doyrrell", "Be'doyrroy", "Be'doyry", "Be'doyssey", "Be'doytty", "Be'doyty", "Be'dudan", "Be'duddy", "Be'duer", "Be'duffy", "Be'dugan", "Be'duggan", "Be'dugh", "Be'dughan", "Be'duins", "Be'dukry", "Be'dulan", "Be'dule", "Be'duley", "Be'duliam", "Be'dully", "Be'dun", "Be'dunin", "Be'duny", "Be'duppy", "Be'dupsey", "Be'dura", "Be'duroy", "Be'durrell", "Be'durroy", "Be'dury", "Be'dussey", "Be'dutty", "Be'duty", "Be'gadan", "Be'gaddy", "Be'gaer", "Be'gaffy", "Be'gagan", "Be'gaggan", "Be'gagh", "Be'gaghan", "Be'gains", "Be'gakry", "Be'galan", "Be'gale", "Be'galey", "Be'galiam", "Be'gally", "Be'gan", "Be'ganin", "Be'gany", "Be'gappy", "Be'gapsey", "Be'gara", "Be'garoy", "Be'garrell", "Be'garroy", "Be'gary", "Be'gassey", "Be'gatty", "Be'gaty", "Be'jordan", "Be'jorddy", "Be'jorer", "Be'jorffy", "Be'jorgan", "Be'jorggan", "Be'jorgh", "Be'jorghan", "Be'jorins", "Be'jorkry", "Be'jorlan", "Be'jorle", "Be'jorley", "Be'jorliam", "Be'jorlly", "Be'jorn", "Be'jornin", "Be'jorny", "Be'jorppy", "Be'jorpsey", "Be'jorra", "Be'jorroy", "Be'jorrrell", "Be'jorrroy", "Be'jorry", "Be'jorssey", "Be'jortty", "Be'jorty", "Be'keadan", "Be'keaddy", "Be'keaer", "Be'keaffy", "Be'keagan", "Be'keaggan", "Be'keagh", "Be'keaghan", "Be'keains", "Be'keakry", "Be'kealan", "Be'keale", "Be'kealey", "Be'kealiam", "Be'keally", "Be'kean", "Be'keanin", "Be'keany", "Be'keappy", "Be'keapsey", "Be'keara", "Be'kearoy", "Be'kearrell", "Be'kearroy", "Be'keary", "Be'keassey", "Be'keatty", "Be'keaty", "Be'keedan", "Be'keeddy", "Be'keeer", "Be'keeffy", "Be'keegan", "Be'keeggan", "Be'keegh", "Be'keeghan", "Be'keeins", "Be'keekry", "Be'keelan", "Be'keele", "Be'keeley", "Be'keeliam", "Be'keelly", "Be'keen", "Be'keenin", "Be'keeny", "Be'keeppy", "Be'keepsey", "Be'keera", "Be'keeroy", "Be'keerrell", "Be'keerroy", "Be'keery", "Be'keessey", "Be'keetty", "Be'keety", "Be'laudan", "Be'lauddy", "Be'lauer", "Be'lauffy", "Be'laugan", "Be'lauggan", "Be'laugh", "Be'laughan", "Be'lauins", "Be'laukry", "Be'laulan", "Be'laule", "Be'lauley", "Be'lauliam", "Be'laully", "Be'laun", "Be'launin", "Be'launy", "Be'lauppy", "Be'laupsey", "Be'laura", "Be'lauroy", "Be'laurrell", "Be'laurroy", "Be'laury", "Be'laussey", "Be'lautty", "Be'lauty", "Be'leadan", "Be'leaddy", "Be'leaer", "Be'leaffy", "Be'leagan", "Be'leaggan", "Be'leagh", "Be'leaghan", "Be'leains", "Be'leakry", "Be'lealan", "Be'leale", "Be'lealey", "Be'lealiam", "Be'leally", "Be'lean", "Be'leanin", "Be'leany", "Be'leappy", "Be'leapsey", "Be'leara", "Be'learoy", "Be'learrell", "Be'learroy", "Be'leary", "Be'leassey", "Be'leatty", "Be'leaty", "Be'ledan", "Be'leddy", "Be'leer", "Be'leffy", "Be'legan", "Be'leggan", "Be'legh", "Be'leghan", "Be'leidan", "Be'leiddy", "Be'leier", "Be'leiffy", "Be'leigan", "Be'leiggan", "Be'leigh", "Be'leighan", "Be'leiins", "Be'leikry", "Be'leilan", "Be'leile", "Be'leiley", "Be'leiliam", "Be'leilly", "Be'lein", "Be'leinin", "Be'leins", "Be'leiny", "Be'leippy", "Be'leipsey", "Be'leira", "Be'leiroy", "Be'leirrell", "Be'leirroy", "Be'leiry", "Be'leissey", "Be'leitty", "Be'leity", "Be'lekry", "Be'lelan", "Be'lele", "Be'leley", "Be'leliam", "Be'lelly", "Be'len", "Be'lenin", "Be'leny", "Be'leppy", "Be'lepsey", "Be'lera", "Be'leroy", "Be'lerrell", "Be'lerroy", "Be'lery", "Be'lessey", "Be'letty", "Be'lety", "Be'lodan", "Be'loddy", "Be'loer", "Be'loffy", "Be'logan", "Be'loggan", "Be'logh", "Be'loghan", "Be'loins", "Be'lokry", "Be'lolan", "Be'lole", "Be'loley", "Be'loliam", "Be'lolly", "Be'lon", "Be'lonin", "Be'lony", "Be'loppy", "Be'lopsey", "Be'lora", "Be'loroy", "Be'lorrell", "Be'lorroy", "Be'lory", "Be'lossey", "Be'lotty", "Be'loty", "Be'lyndan", "Be'lynddy", "Be'lyner", "Be'lynffy", "Be'lyngan", "Be'lynggan", "Be'lyngh", "Be'lynghan", "Be'lynins", "Be'lynkry", "Be'lynlan", "Be'lynle", "Be'lynley", "Be'lynliam", "Be'lynlly", "Be'lynn", "Be'lynnin", "Be'lynny", "Be'lynppy", "Be'lynpsey", "Be'lynra", "Be'lynroy", "Be'lynrrell", "Be'lynrroy", "Be'lynry", "Be'lynssey", "Be'lyntty", "Be'lynty", "Be'madan", "Be'maddy", "Be'maer", "Be'maffy", "Be'magan", "Be'maggan", "Be'magh", "Be'maghan", "Be'mains", "Be'makry", "Be'malan", "Be'male", "Be'maley", "Be'maliam", "Be'mally", "Be'man", "Be'manin", "Be'many", "Be'mappy", "Be'mapsey", "Be'mara", "Be'maroy", "Be'marrell", "Be'marroy", "Be'mary", "Be'massey", "Be'matty", "Be'maty", "Be'nadan", "Be'naddy", "Be'naer", "Be'naffy", "Be'nagan", "Be'naggan", "Be'nagh", "Be'naghan", "Be'nains", "Be'nakry", "Be'nalan", "Be'nale", "Be'naley", "Be'naliam", "Be'nally", "Be'nan", "Be'nanin", "Be'nany", "Be'nappy", "Be'napsey", "Be'nara", "Be'naroy", "Be'narrell", "Be'narroy", "Be'nary", "Be'nassey", "Be'natty", "Be'naty", "Be'nedan", "Be'neddy", "Be'neer", "Be'neffy", "Be'negan", "Be'neggan", "Be'negh", "Be'neghan", "Be'neins", "Be'nekry", "Be'nelan", "Be'nele", "Be'neley", "Be'neliam", "Be'nelly", "Be'nen", "Be'nenin", "Be'neny", "Be'neppy", "Be'nepsey", "Be'nera", "Be'neroy", "Be'nerrell", "Be'nerroy", "Be'nery", "Be'nessey", "Be'netty", "Be'nety", "Be'peadan", "Be'peaddy", "Be'peaer", "Be'peaffy", "Be'peagan", "Be'peaggan", "Be'peagh", "Be'peaghan", "Be'peains", "Be'peakry", "Be'pealan", "Be'peale", "Be'pealey", "Be'pealiam", "Be'peally", "Be'pean", "Be'peanin", "Be'peany", "Be'peappy", "Be'peapsey", "Be'peara", "Be'pearoy", "Be'pearrell", "Be'pearroy", "Be'peary", "Be'peassey", "Be'peatty", "Be'peaty", "Be'reidan", "Be'reiddy", "Be'reier", "Be'reiffy", "Be'reigan", "Be'reiggan", "Be'reigh", "Be'reighan", "Be'reiins", "Be'reikry", "Be'reilan", "Be'reile", "Be'reiley", "Be'reiliam", "Be'reilly", "Be'rein", "Be'reinin", "Be'reiny", "Be'reippy", "Be'reipsey", "Be'reira", "Be'reiroy", "Be'reirrell", "Be'reirroy", "Be'reiry", "Be'reissey", "Be'reitty", "Be'reity", "Be'ridan", "Be'riddy", "Be'rier", "Be'riffy", "Be'rigan", "Be'riggan", "Be'righ", "Be'righan", "Be'riins", "Be'rikry", "Be'rilan", "Be'rile", "Be'riley", "Be'riliam", "Be'rilly", "Be'rin", "Be'rinin", "Be'riny", "Be'ripdan", "Be'ripddy", "Be'riper", "Be'ripffy", "Be'ripgan", "Be'ripggan", "Be'ripgh", "Be'ripghan", "Be'ripins", "Be'ripkry", "Be'riplan", "Be'riple", "Be'ripley", "Be'ripliam", "Be'riplly", "Be'ripn", "Be'ripnin", "Be'ripny", "Be'ripppy", "Be'rippsey", "Be'rippy", "Be'ripra", "Be'riproy", "Be'riprrell", "Be'riprroy", "Be'ripry", "Be'ripsey", "Be'ripssey", "Be'riptty", "Be'ripty", "Be'rira", "Be'riroy", "Be'rirrell", "Be'rirroy", "Be'riry", "Be'rissey", "Be'ritty", "Be'rity", "Be'rodan", "Be'roddy", "Be'roer", "Be'roffy", "Be'rogan", "Be'roggan", "Be'rogh", "Be'roghan", "Be'roins", "Be'rokry", "Be'rolan", "Be'role", "Be'roley", "Be'roliam", "Be'rolly", "Be'ron", "Be'ronin", "Be'rony", "Be'roppy", "Be'ropsey", "Be'rora", "Be'roroy", "Be'rorrell", "Be'rorroy", "Be'rory", "Be'rossey", "Be'rotty", "Be'roty", "Be'sadan", "Be'saddy", "Be'saer", "Be'saffy", "Be'sagan", "Be'saggan", "Be'sagh", "Be'saghan", "Be'sains", "Be'sakry", "Be'salan", "Be'sale", "Be'saley", "Be'saliam", "Be'sally", "Be'san", "Be'sanin", "Be'sany", "Be'sappy", "Be'sapsey", "Be'sara", "Be'saroy", "Be'sarrell", "Be'sarroy", "Be'sary", "Be'sassey", "Be'satty", "Be'saty", "Be'shedan", "Be'sheddy", "Be'sheer", "Be'sheffy", "Be'shegan", "Be'sheggan", "Be'shegh", "Be'sheghan", "Be'sheins", "Be'shekry", "Be'shelan", "Be'shele", "Be'sheley", "Be'sheliam", "Be'shelly", "Be'shen", "Be'shenin", "Be'sheny", "Be'sheppy", "Be'shepsey", "Be'shera", "Be'sheroy", "Be'sherrell", "Be'sherroy", "Be'shery", "Be'shessey", "Be'shetty", "Be'shety", "Be'tedan", "Be'teddy", "Be'teer", "Be'teffy", "Be'tegan", "Be'teggan", "Be'tegh", "Be'teghan", "Be'teins", "Be'tekry", "Be'telan", "Be'tele", "Be'teley", "Be'teliam", "Be'telly", "Be'ten", "Be'tenin", "Be'teny", "Be'teppy", "Be'tepsey", "Be'tera", "Be'teroy", "Be'terrell", "Be'terroy", "Be'tery", "Be'tessey", "Be'tetty", "Be'tety", "Be'toodan", "Be'tooddy", "Be'tooer", "Be'tooffy", "Be'toogan", "Be'tooggan", "Be'toogh", "Be'tooghan", "Be'tooins", "Be'tookry", "Be'toolan", "Be'toole", "Be'tooley", "Be'tooliam", "Be'toolly", "Be'toon", "Be'toonin", "Be'toony", "Be'tooppy", "Be'toopsey", "Be'toora", "Be'tooroy", "Be'toorrell", "Be'toorroy", "Be'toory", "Be'toossey", "Be'tootty", "Be'tooty", "Be'widan", "Be'widdy", "Be'wier", "Be'wiffy", "Be'wigan", "Be'wiggan", "Be'wigh", "Be'wighan", "Be'wiins", "Be'wikry", "Be'wilan", "Be'wile", "Be'wiley", "Be'wiliam", "Be'willy", "Be'win", "Be'winin", "Be'winy", "Be'wippy", "Be'wipsey", "Be'wira", "Be'wiroy", "Be'wirrell", "Be'wirroy", "Be'wiry", "Be'wissey", "Be'witty", "Be'wity", "Be'ydan", "Be'yddy", "Be'yer", "Be'yffy", "Be'ygan", "Be'yggan", "Be'ygh", "Be'yghan", "Be'yins", "Be'ykry", "Be'ylan", "Be'yle", "Be'yley", "Be'yliam", "Be'ylly", "Be'yn", "Be'ynin", "Be'yny", "Be'yppy", "Be'ypsey", "Be'yra", "Be'yroy", "Be'yrrell", "Be'yrroy", "Be'yry", "Be'yssey", "Be'ytty", "Be'yty", "Bidan", "Biddy", "Bier", "Biffy", "Bigan", "Biggan", "Bigh", "Bighan", "Biins", "Bikry", "Bilan", "Bile", "Biley", "Biliam", "Billy", "Bin", "Binin", "Biny", "Bippy", "Bipsey", "Bira", "Biroy", "Birrell", "Birroy", "Biry", "Bissey", "Bitty", "Bity", "Caudan", "Cauddy", "Cauer", "Cauffy", "Caugan", "Cauggan", "Caugh", "Caughan", "Cauins", "Caukry", "Caulan", "Caule", "Cauley", "Cauliam", "Caully", "Caun", "Caunin", "Cauny", "Cauppy", "Caupsey", "Caura", "Cauroy", "Caurrell", "Caurroy", "Caury", "Caussey", "Cautty", "Cauty", "Dadan", "Daddy", "Daer", "Daffy", "Dagan", "Daggan", "Dagh", "Daghan", "Dains", "Dakry", "Dalan", "Dale", "Daley", "Daliam", "Dally", "Dan", "Danin", "Dany", "Dappy", "Dapsey", "Dara", "Dardan", "Darddy", "Darer", "Darffy", "Dargan", "Darggan", "Dargh", "Darghan", "Darins", "Darkry", "Darlan", "Darle", "Darley", "Darliam", "Darlly", "Darn", "Darnin", "Darny", "Daroy", "Darppy", "Darpsey", "Darra", "Darrell", "Darroy", "Darrrell", "Darrroy", "Darry", "Darssey", "Dartty", "Darty", "Dary", "Dassey", "Datty", "Daty", "Doydan", "Doyddy", "Doyer", "Doyffy", "Doygan", "Doyggan", "Doygh", "Doyghan", "Doyins", "Doykry", "Doylan", "Doyle", "Doyley", "Doyliam", "Doylly", "Doyn", "Doynin", "Doyny", "Doyppy", "Doypsey", "Doyra", "Doyroy", "Doyrrell", "Doyrroy", "Doyry", "Doyssey", "Doytty", "Doyty", "Dudan", "Duddy", "Duer", "Duffy", "Dugan", "Duggan", "Dugh", "Dughan", "Duins", "Dukry", "Dulan", "Dule", "Duley", "Duliam", "Dully", "Dun", "Dunin", "Duny", "Duppy", "Dupsey", "Dura", "Duroy", "Durrell", "Durroy", "Dury", "Dussey", "Dutty", "Duty", "Gadan", "Gaddy", "Gaer", "Gaffy", "Gagan", "Gaggan", "Gagh", "Gaghan", "Gains", "Gakry", "Galan", "Gale", "Galey", "Galiam", "Gally", "Gan", "Ganin", "Gany", "Gappy", "Gapsey", "Gara", "Garoy", "Garrell", "Garroy", "Gary", "Gassey", "Gatty", "Gaty", "Jordan", "Jorddy", "Jorer", "Jorffy", "Jorgan", "Jorggan", "Jorgh", "Jorghan", "Jorins", "Jorkry", "Jorlan", "Jorle", "Jorley", "Jorliam", "Jorlly", "Jorn", "Jornin", "Jorny", "Jorppy", "Jorpsey", "Jorra", "Jorroy", "Jorrrell", "Jorrroy", "Jorry", "Jorssey", "Jortty", "Jorty", "Keadan", "Keaddy", "Keaer", "Keaffy", "Keagan", "Keaggan", "Keagh", "Keaghan", "Keains", "Keakry", "Kealan", "Keale", "Kealey", "Kealiam", "Keally", "Kean", "Keanin", "Keany", "Keappy", "Keapsey", "Keara", "Kearoy", "Kearrell", "Kearroy", "Keary", "Keassey", "Keatty", "Keaty", "Keedan", "Keeddy", "Keeer", "Keeffy", "Keegan", "Keeggan", "Keegh", "Keeghan", "Keeins", "Keekry", "Keelan", "Keele", "Keeley", "Keeliam", "Keelly", "Keen", "Keenin", "Keeny", "Keeppy", "Keepsey", "Keera", "Keeroy", "Keerrell", "Keerroy", "Keery", "Keessey", "Keetty", "Keety", "Laudan", "Lauddy", "Lauer", "Lauffy", "Laugan", "Lauggan", "Laugh", "Laughan", "Lauins", "Laukry", "Laulan", "Laule", "Lauley", "Lauliam", "Laully", "Laun", "Launin", "Launy", "Lauppy", "Laupsey", "Laura", "Lauroy", "Laurrell", "Laurroy", "Laury", "Laussey", "Lautty", "Lauty", "Leadan", "Leaddy", "Leaer", "Leaffy", "Leagan", "Leaggan", "Leagh", "Leaghan", "Leains", "Leakry", "Lealan", "Leale", "Lealey", "Lealiam", "Leally", "Lean", "Leanin", "Leany", "Leappy", "Leapsey", "Leara", "Learoy", "Learrell", "Learroy", "Leary", "Leassey", "Leatty", "Leaty", "Ledan", "Leddy", "Leer", "Leffy", "Legan", "Leggan", "Legh", "Leghan", "Leidan", "Leiddy", "Leier", "Leiffy", "Leigan", "Leiggan", "Leigh", "Leighan", "Leiins", "Leikry", "Leilan", "Leile", "Leiley", "Leiliam", "Leilly", "Lein", "Leinin", "Leins", "Leiny", "Leippy", "Leipsey", "Leira", "Leiroy", "Leirrell", "Leirroy", "Leiry", "Leissey", "Leitty", "Leity", "Lekry", "Lelan", "Lele", "Leley", "Leliam", "Lelly", "Len", "Lenin", "Leny", "Leppy", "Lepsey", "Lera", "Leroy", "Lerrell", "Lerroy", "Lery", "Lessey", "Letty", "Lety", "Lodan", "Loddy", "Loer", "Loffy", "Logan", "Loggan", "Logh", "Loghan", "Loins", "Lokry", "Lolan", "Lole", "Loley", "Loliam", "Lolly", "Lon", "Lonin", "Lony", "Loppy", "Lopsey", "Lora", "Loroy", "Lorrell", "Lorroy", "Lory", "Lossey", "Lotty", "Loty", "Lyndan", "Lynddy", "Lyner", "Lynffy", "Lyngan", "Lynggan", "Lyngh", "Lynghan", "Lynins", "Lynkry", "Lynlan", "Lynle", "Lynley", "Lynliam", "Lynlly", "Lynn", "Lynnin", "Lynny", "Lynppy", "Lynpsey", "Lynra", "Lynroy", "Lynrrell", "Lynrroy", "Lynry", "Lynssey", "Lyntty", "Lynty", "Mac'ardan", "Mac'arddy", "Mac'arer", "Mac'arffy", "Mac'argan", "Mac'arggan", "Mac'argh", "Mac'arghan", "Mac'arins", "Mac'arkry", "Mac'arlan", "Mac'arle", "Mac'arley", "Mac'arliam", "Mac'arlly", "Mac'arn", "Mac'arnin", "Mac'arny", "Mac'arppy", "Mac'arpsey", "Mac'arra", "Mac'arroy", "Mac'arrrell", "Mac'arrroy", "Mac'arry", "Mac'arssey", "Mac'artty", "Mac'arty", "Mac'bidan", "Mac'biddy", "Mac'bier", "Mac'biffy", "Mac'bigan", "Mac'biggan", "Mac'bigh", "Mac'bighan", "Mac'biins", "Mac'bikry", "Mac'bilan", "Mac'bile", "Mac'biley", "Mac'biliam", "Mac'billy", "Mac'bin", "Mac'binin", "Mac'biny", "Mac'bippy", "Mac'bipsey", "Mac'bira", "Mac'biroy", "Mac'birrell", "Mac'birroy", "Mac'biry", "Mac'bissey", "Mac'bitty", "Mac'bity", "Mac'caudan", "Mac'cauddy", "Mac'cauer", "Mac'cauffy", "Mac'caugan", "Mac'cauggan", "Mac'caugh", "Mac'caughan", "Mac'cauins", "Mac'caukry", "Mac'caulan", "Mac'caule", "Mac'cauley", "Mac'cauliam", "Mac'caully", "Mac'caun", "Mac'caunin", "Mac'cauny", "Mac'cauppy", "Mac'caupsey", "Mac'caura", "Mac'cauroy", "Mac'caurrell", "Mac'caurroy", "Mac'caury", "Mac'caussey", "Mac'cautty", "Mac'cauty", "Mac'dadan", "Mac'daddy", "Mac'daer", "Mac'daffy", "Mac'dagan", "Mac'daggan", "Mac'dagh", "Mac'daghan", "Mac'dains", "Mac'dakry", "Mac'dalan", "Mac'dale", "Mac'daley", "Mac'daliam", "Mac'dally", "Mac'dan", "Mac'danin", "Mac'dany", "Mac'dappy", "Mac'dapsey", "Mac'dara", "Mac'dardan", "Mac'darddy", "Mac'darer", "Mac'darffy", "Mac'dargan", "Mac'darggan", "Mac'dargh", "Mac'darghan", "Mac'darins", "Mac'darkry", "Mac'darlan", "Mac'darle", "Mac'darley", "Mac'darliam", "Mac'darlly", "Mac'darn", "Mac'darnin", "Mac'darny", "Mac'daroy", "Mac'darppy", "Mac'darpsey", "Mac'darra", "Mac'darrell", "Mac'darroy", "Mac'darrrell", "Mac'darrroy", "Mac'darry", "Mac'darssey", "Mac'dartty", "Mac'darty", "Mac'dary", "Mac'dassey", "Mac'datty", "Mac'daty", "Mac'doydan", "Mac'doyddy", "Mac'doyer", "Mac'doyffy", "Mac'doygan", "Mac'doyggan", "Mac'doygh", "Mac'doyghan", "Mac'doyins", "Mac'doykry", "Mac'doylan", "Mac'doyle", "Mac'doyley", "Mac'doyliam", "Mac'doylly", "Mac'doyn", "Mac'doynin", "Mac'doyny", "Mac'doyppy", "Mac'doypsey", "Mac'doyra", "Mac'doyroy", "Mac'doyrrell", "Mac'doyrroy", "Mac'doyry", "Mac'doyssey", "Mac'doytty", "Mac'doyty", "Mac'dudan", "Mac'duddy", "Mac'duer", "Mac'duffy", "Mac'dugan", "Mac'duggan", "Mac'dugh", "Mac'dughan", "Mac'duins", "Mac'dukry", "Mac'dulan", "Mac'dule", "Mac'duley", "Mac'duliam", "Mac'dully", "Mac'dun", "Mac'dunin", "Mac'duny", "Mac'duppy", "Mac'dupsey", "Mac'dura", "Mac'duroy", "Mac'durrell", "Mac'durroy", "Mac'dury", "Mac'dussey", "Mac'dutty", "Mac'duty", "Mac'gadan", "Mac'gaddy", "Mac'gaer", "Mac'gaffy", "Mac'gagan", "Mac'gaggan", "Mac'gagh", "Mac'gaghan", "Mac'gains", "Mac'gakry", "Mac'galan", "Mac'gale", "Mac'galey", "Mac'galiam", "Mac'gally", "Mac'gan", "Mac'ganin", "Mac'gany", "Mac'gappy", "Mac'gapsey", "Mac'gara", "Mac'garoy", "Mac'garrell", "Mac'garroy", "Mac'gary", "Mac'gassey", "Mac'gatty", "Mac'gaty", "Mac'jordan", "Mac'jorddy", "Mac'jorer", "Mac'jorffy", "Mac'jorgan", "Mac'jorggan", "Mac'jorgh", "Mac'jorghan", "Mac'jorins", "Mac'jorkry", "Mac'jorlan", "Mac'jorle", "Mac'jorley", "Mac'jorliam", "Mac'jorlly", "Mac'jorn", "Mac'jornin", "Mac'jorny", "Mac'jorppy", "Mac'jorpsey", "Mac'jorra", "Mac'jorroy", "Mac'jorrrell", "Mac'jorrroy", "Mac'jorry", "Mac'jorssey", "Mac'jortty", "Mac'jorty", "Mac'keadan", "Mac'keaddy", "Mac'keaer", "Mac'keaffy", "Mac'keagan", "Mac'keaggan", "Mac'keagh", "Mac'keaghan", "Mac'keains", "Mac'keakry", "Mac'kealan", "Mac'keale", "Mac'kealey", "Mac'kealiam", "Mac'keally", "Mac'kean", "Mac'keanin", "Mac'keany", "Mac'keappy", "Mac'keapsey", "Mac'keara", "Mac'kearoy", "Mac'kearrell", "Mac'kearroy", "Mac'keary", "Mac'keassey", "Mac'keatty", "Mac'keaty", "Mac'keedan", "Mac'keeddy", "Mac'keeer", "Mac'keeffy", "Mac'keegan", "Mac'keeggan", "Mac'keegh", "Mac'keeghan", "Mac'keeins", "Mac'keekry", "Mac'keelan", "Mac'keele", "Mac'keeley", "Mac'keeliam", "Mac'keelly", "Mac'keen", "Mac'keenin", "Mac'keeny", "Mac'keeppy", "Mac'keepsey", "Mac'keera", "Mac'keeroy", "Mac'keerrell", "Mac'keerroy", "Mac'keery", "Mac'keessey", "Mac'keetty", "Mac'keety", "Mac'laudan", "Mac'lauddy", "Mac'lauer", "Mac'lauffy", "Mac'laugan", "Mac'lauggan", "Mac'laugh", "Mac'laughan", "Mac'lauins", "Mac'laukry", "Mac'laulan", "Mac'laule", "Mac'lauley", "Mac'lauliam", "Mac'laully", "Mac'laun", "Mac'launin", "Mac'launy", "Mac'lauppy", "Mac'laupsey", "Mac'laura", "Mac'lauroy", "Mac'laurrell", "Mac'laurroy", "Mac'laury", "Mac'laussey", "Mac'lautty", "Mac'lauty", "Mac'leadan", "Mac'leaddy", "Mac'leaer", "Mac'leaffy", "Mac'leagan", "Mac'leaggan", "Mac'leagh", "Mac'leaghan", "Mac'leains", "Mac'leakry", "Mac'lealan", "Mac'leale", "Mac'lealey", "Mac'lealiam", "Mac'leally", "Mac'lean", "Mac'leanin", "Mac'leany", "Mac'leappy", "Mac'leapsey", "Mac'leara", "Mac'learoy", "Mac'learrell", "Mac'learroy", "Mac'leary", "Mac'leassey", "Mac'leatty", "Mac'leaty", "Mac'ledan", "Mac'leddy", "Mac'leer", "Mac'leffy", "Mac'legan", "Mac'leggan", "Mac'legh", "Mac'leghan", "Mac'leidan", "Mac'leiddy", "Mac'leier", "Mac'leiffy", "Mac'leigan", "Mac'leiggan", "Mac'leigh", "Mac'leighan", "Mac'leiins", "Mac'leikry", "Mac'leilan", "Mac'leile", "Mac'leiley", "Mac'leiliam", "Mac'leilly", "Mac'lein", "Mac'leinin", "Mac'leins", "Mac'leiny", "Mac'leippy", "Mac'leipsey", "Mac'leira", "Mac'leiroy", "Mac'leirrell", "Mac'leirroy", "Mac'leiry", "Mac'leissey", "Mac'leitty", "Mac'leity", "Mac'lekry", "Mac'lelan", "Mac'lele", "Mac'leley", "Mac'leliam", "Mac'lelly", "Mac'len", "Mac'lenin", "Mac'leny", "Mac'leppy", "Mac'lepsey", "Mac'lera", "Mac'leroy", "Mac'lerrell", "Mac'lerroy", "Mac'lery", "Mac'lessey", "Mac'letty", "Mac'lety", "Mac'lodan", "Mac'loddy", "Mac'loer", "Mac'loffy", "Mac'logan", "Mac'loggan", "Mac'logh", "Mac'loghan", "Mac'loins", "Mac'lokry", "Mac'lolan", "Mac'lole", "Mac'loley", "Mac'loliam", "Mac'lolly", "Mac'lon", "Mac'lonin", "Mac'lony", "Mac'loppy", "Mac'lopsey", "Mac'lora", "Mac'loroy", "Mac'lorrell", "Mac'lorroy", "Mac'lory", "Mac'lossey", "Mac'lotty", "Mac'loty", "Mac'lyndan", "Mac'lynddy", "Mac'lyner", "Mac'lynffy", "Mac'lyngan", "Mac'lynggan", "Mac'lyngh", "Mac'lynghan", "Mac'lynins", "Mac'lynkry", "Mac'lynlan", "Mac'lynle", "Mac'lynley", "Mac'lynliam", "Mac'lynlly", "Mac'lynn", "Mac'lynnin", "Mac'lynny", "Mac'lynppy", "Mac'lynpsey", "Mac'lynra", "Mac'lynroy", "Mac'lynrrell", "Mac'lynrroy", "Mac'lynry", "Mac'lynssey", "Mac'lyntty", "Mac'lynty", "Mac'madan", "Mac'maddy", "Mac'maer", "Mac'maffy", "Mac'magan", "Mac'maggan", "Mac'magh", "Mac'maghan", "Mac'mains", "Mac'makry", "Mac'malan", "Mac'male", "Mac'maley", "Mac'maliam", "Mac'mally", "Mac'man", "Mac'manin", "Mac'many", "Mac'mappy", "Mac'mapsey", "Mac'mara", "Mac'maroy", "Mac'marrell", "Mac'marroy", "Mac'mary", "Mac'massey", "Mac'matty", "Mac'maty", "Mac'nadan", "Mac'naddy", "Mac'naer", "Mac'naffy", "Mac'nagan", "Mac'naggan", "Mac'nagh", "Mac'naghan", "Mac'nains", "Mac'nakry", "Mac'nalan", "Mac'nale", "Mac'naley", "Mac'naliam", "Mac'nally", "Mac'nan", "Mac'nanin", "Mac'nany", "Mac'nappy", "Mac'napsey", "Mac'nara", "Mac'naroy", "Mac'narrell", "Mac'narroy", "Mac'nary", "Mac'nassey", "Mac'natty", "Mac'naty", "Mac'nedan", "Mac'neddy", "Mac'neer", "Mac'neffy", "Mac'negan", "Mac'neggan", "Mac'negh", "Mac'neghan", "Mac'neins", "Mac'nekry", "Mac'nelan", "Mac'nele", "Mac'neley", "Mac'neliam", "Mac'nelly", "Mac'nen", "Mac'nenin", "Mac'neny", "Mac'neppy", "Mac'nepsey", "Mac'nera", "Mac'neroy", "Mac'nerrell", "Mac'nerroy", "Mac'nery", "Mac'nessey", "Mac'netty", "Mac'nety", "Mac'peadan", "Mac'peaddy", "Mac'peaer", "Mac'peaffy", "Mac'peagan", "Mac'peaggan", "Mac'peagh", "Mac'peaghan", "Mac'peains", "Mac'peakry", "Mac'pealan", "Mac'peale", "Mac'pealey", "Mac'pealiam", "Mac'peally", "Mac'pean", "Mac'peanin", "Mac'peany", "Mac'peappy", "Mac'peapsey", "Mac'peara", "Mac'pearoy", "Mac'pearrell", "Mac'pearroy", "Mac'peary", "Mac'peassey", "Mac'peatty", "Mac'peaty", "Mac'reidan", "Mac'reiddy", "Mac'reier", "Mac'reiffy", "Mac'reigan", "Mac'reiggan", "Mac'reigh", "Mac'reighan", "Mac'reiins", "Mac'reikry", "Mac'reilan", "Mac'reile", "Mac'reiley", "Mac'reiliam", "Mac'reilly", "Mac'rein", "Mac'reinin", "Mac'reiny", "Mac'reippy", "Mac'reipsey", "Mac'reira", "Mac'reiroy", "Mac'reirrell", "Mac'reirroy", "Mac'reiry", "Mac'reissey", "Mac'reitty", "Mac'reity", "Mac'ridan", "Mac'riddy", "Mac'rier", "Mac'riffy", "Mac'rigan", "Mac'riggan", "Mac'righ", "Mac'righan", "Mac'riins", "Mac'rikry", "Mac'rilan", "Mac'rile", "Mac'riley", "Mac'riliam", "Mac'rilly", "Mac'rin", "Mac'rinin", "Mac'riny", "Mac'ripdan", "Mac'ripddy", "Mac'riper", "Mac'ripffy", "Mac'ripgan", "Mac'ripggan", "Mac'ripgh", "Mac'ripghan", "Mac'ripins", "Mac'ripkry", "Mac'riplan", "Mac'riple", "Mac'ripley", "Mac'ripliam", "Mac'riplly", "Mac'ripn", "Mac'ripnin", "Mac'ripny", "Mac'ripppy", "Mac'rippsey", "Mac'rippy", "Mac'ripra", "Mac'riproy", "Mac'riprrell", "Mac'riprroy", "Mac'ripry", "Mac'ripsey", "Mac'ripssey", "Mac'riptty", "Mac'ripty", "Mac'rira", "Mac'riroy", "Mac'rirrell", "Mac'rirroy", "Mac'riry", "Mac'rissey", "Mac'ritty", "Mac'rity", "Mac'rodan", "Mac'roddy", "Mac'roer", "Mac'roffy", "Mac'rogan", "Mac'roggan", "Mac'rogh", "Mac'roghan", "Mac'roins", "Mac'rokry", "Mac'rolan", "Mac'role", "Mac'roley", "Mac'roliam", "Mac'rolly", "Mac'ron", "Mac'ronin", "Mac'rony", "Mac'roppy", "Mac'ropsey", "Mac'rora", "Mac'roroy", "Mac'rorrell", "Mac'rorroy", "Mac'rory", "Mac'rossey", "Mac'rotty", "Mac'roty", "Mac'sadan", "Mac'saddy", "Mac'saer", "Mac'saffy", "Mac'sagan", "Mac'saggan", "Mac'sagh", "Mac'saghan", "Mac'sains", "Mac'sakry", "Mac'salan", "Mac'sale", "Mac'saley", "Mac'saliam", "Mac'sally", "Mac'san", "Mac'sanin", "Mac'sany", "Mac'sappy", "Mac'sapsey", "Mac'sara", "Mac'saroy", "Mac'sarrell", "Mac'sarroy", "Mac'sary", "Mac'sassey", "Mac'satty", "Mac'saty", "Mac'shedan", "Mac'sheddy", "Mac'sheer", "Mac'sheffy", "Mac'shegan", "Mac'sheggan", "Mac'shegh", "Mac'sheghan", "Mac'sheins", "Mac'shekry", "Mac'shelan", "Mac'shele", "Mac'sheley", "Mac'sheliam", "Mac'shelly", "Mac'shen", "Mac'shenin", "Mac'sheny", "Mac'sheppy", "Mac'shepsey", "Mac'shera", "Mac'sheroy", "Mac'sherrell", "Mac'sherroy", "Mac'shery", "Mac'shessey", "Mac'shetty", "Mac'shety", "Mac'tedan", "Mac'teddy", "Mac'teer", "Mac'teffy", "Mac'tegan", "Mac'teggan", "Mac'tegh", "Mac'teghan", "Mac'teins", "Mac'tekry", "Mac'telan", "Mac'tele", "Mac'teley", "Mac'teliam", "Mac'telly", "Mac'ten", "Mac'tenin", "Mac'teny", "Mac'teppy", "Mac'tepsey", "Mac'tera", "Mac'teroy", "Mac'terrell", "Mac'terroy", "Mac'tery", "Mac'tessey", "Mac'tetty", "Mac'tety", "Mac'toodan", "Mac'tooddy", "Mac'tooer", "Mac'tooffy", "Mac'toogan", "Mac'tooggan", "Mac'toogh", "Mac'tooghan", "Mac'tooins", "Mac'tookry", "Mac'toolan", "Mac'toole", "Mac'tooley", "Mac'tooliam", "Mac'toolly", "Mac'toon", "Mac'toonin", "Mac'toony", "Mac'tooppy", "Mac'toopsey", "Mac'toora", "Mac'tooroy", "Mac'toorrell", "Mac'toorroy", "Mac'toory", "Mac'toossey", "Mac'tootty", "Mac'tooty", "Mac'widan", "Mac'widdy", "Mac'wier", "Mac'wiffy", "Mac'wigan", "Mac'wiggan", "Mac'wigh", "Mac'wighan", "Mac'wiins", "Mac'wikry", "Mac'wilan", "Mac'wile", "Mac'wiley", "Mac'wiliam", "Mac'willy", "Mac'win", "Mac'winin", "Mac'winy", "Mac'wippy", "Mac'wipsey", "Mac'wira", "Mac'wiroy", "Mac'wirrell", "Mac'wirroy", "Mac'wiry", "Mac'wissey", "Mac'witty", "Mac'wity", "Mac'ydan", "Mac'yddy", "Mac'yer", "Mac'yffy", "Mac'ygan", "Mac'yggan", "Mac'ygh", "Mac'yghan", "Mac'yins", "Mac'ykry", "Mac'ylan", "Mac'yle", "Mac'yley", "Mac'yliam", "Mac'ylly", "Mac'yn", "Mac'ynin", "Mac'yny", "Mac'yppy", "Mac'ypsey", "Mac'yra", "Mac'yroy", "Mac'yrrell", "Mac'yrroy", "Mac'yry", "Mac'yssey", "Mac'ytty", "Mac'yty", "Madan", "Maddy", "Maer", "Maffy", "Magan", "Maggan", "Magh", "Maghan", "Mains", "Makry", "Malan", "Male", "Maley", "Maliam", "Mally", "Man", "Manin", "Many", "Mappy", "Mapsey", "Mara", "Maroy", "Marrell", "Marroy", "Mary", "Massey", "Matty", "Maty", "Nadan", "Naddy", "Naer", "Naffy", "Nagan", "Naggan", "Nagh", "Naghan", "Nains", "Nakry", "Nalan", "Nale", "Naley", "Naliam", "Nally", "Nan", "Nanin", "Nany", "Nappy", "Napsey", "Nara", "Naroy", "Narrell", "Narroy", "Nary", "Nassey", "Natty", "Naty", "Nedan", "Neddy", "Neer", "Neffy", "Negan", "Neggan", "Negh", "Neghan", "Neins", "Nekry", "Nelan", "Nele", "Neley", "Neliam", "Nelly", "Nen", "Nenin", "Neny", "Neppy", "Nepsey", "Nera", "Neroy", "Nerrell", "Nerroy", "Nery", "Nessey", "Netty", "Nety", "O'ardan", "O'arddy", "O'arer", "O'arffy", "O'argan", "O'arggan", "O'argh", "O'arghan", "O'arins", "O'arkry", "O'arlan", "O'arle", "O'arley", "O'arliam", "O'arlly", "O'arn", "O'arnin", "O'arny", "O'arppy", "O'arpsey", "O'arra", "O'arroy", "O'arrrell", "O'arrroy", "O'arry", "O'arssey", "O'artty", "O'arty", "O'bidan", "O'biddy", "O'bier", "O'biffy", "O'bigan", "O'biggan", "O'bigh", "O'bighan", "O'biins", "O'bikry", "O'bilan", "O'bile", "O'biley", "O'biliam", "O'billy", "O'bin", "O'binin", "O'biny", "O'bippy", "O'bipsey", "O'bira", "O'biroy", "O'birrell", "O'birroy", "O'biry", "O'bissey", "O'bitty", "O'bity", "O'caudan", "O'cauddy", "O'cauer", "O'cauffy", "O'caugan", "O'cauggan", "O'caugh", "O'caughan", "O'cauins", "O'caukry", "O'caulan", "O'caule", "O'cauley", "O'cauliam", "O'caully", "O'caun", "O'caunin", "O'cauny", "O'cauppy", "O'caupsey", "O'caura", "O'cauroy", "O'caurrell", "O'caurroy", "O'caury", "O'caussey", "O'cautty", "O'cauty", "O'dadan", "O'daddy", "O'daer", "O'daffy", "O'dagan", "O'daggan", "O'dagh", "O'daghan", "O'dains", "O'dakry", "O'dalan", "O'dale", "O'daley", "O'daliam", "O'dally", "O'dan", "O'danin", "O'dany", "O'dappy", "O'dapsey", "O'dara", "O'dardan", "O'darddy", "O'darer", "O'darffy", "O'dargan", "O'darggan", "O'dargh", "O'darghan", "O'darins", "O'darkry", "O'darlan", "O'darle", "O'darley", "O'darliam", "O'darlly", "O'darn", "O'darnin", "O'darny", "O'daroy", "O'darppy", "O'darpsey", "O'darra", "O'darrell", "O'darroy", "O'darrrell", "O'darrroy", "O'darry", "O'darssey", "O'dartty", "O'darty", "O'dary", "O'dassey", "O'datty", "O'daty", "O'doydan", "O'doyddy", "O'doyer", "O'doyffy", "O'doygan", "O'doyggan", "O'doygh", "O'doyghan", "O'doyins", "O'doykry", "O'doylan", "O'doyle", "O'doyley", "O'doyliam", "O'doylly", "O'doyn", "O'doynin", "O'doyny", "O'doyppy", "O'doypsey", "O'doyra", "O'doyroy", "O'doyrrell", "O'doyrroy", "O'doyry", "O'doyssey", "O'doytty", "O'doyty", "O'dudan", "O'duddy", "O'duer", "O'duffy", "O'dugan", "O'duggan", "O'dugh", "O'dughan", "O'duins", "O'dukry", "O'dulan", "O'dule", "O'duley", "O'duliam", "O'dully", "O'dun", "O'dunin", "O'duny", "O'duppy", "O'dupsey", "O'dura", "O'duroy", "O'durrell", "O'durroy", "O'dury", "O'dussey", "O'dutty", "O'duty", "O'gadan", "O'gaddy", "O'gaer", "O'gaffy", "O'gagan", "O'gaggan", "O'gagh", "O'gaghan", "O'gains", "O'gakry", "O'galan", "O'gale", "O'galey", "O'galiam", "O'gally", "O'gan", "O'ganin", "O'gany", "O'gappy", "O'gapsey", "O'gara", "O'garoy", "O'garrell", "O'garroy", "O'gary", "O'gassey", "O'gatty", "O'gaty", "O'jordan", "O'jorddy", "O'jorer", "O'jorffy", "O'jorgan", "O'jorggan", "O'jorgh", "O'jorghan", "O'jorins", "O'jorkry", "O'jorlan", "O'jorle", "O'jorley", "O'jorliam", "O'jorlly", "O'jorn", "O'jornin", "O'jorny", "O'jorppy", "O'jorpsey", "O'jorra", "O'jorroy", "O'jorrrell", "O'jorrroy", "O'jorry", "O'jorssey", "O'jortty", "O'jorty", "O'keadan", "O'keaddy", "O'keaer", "O'keaffy", "O'keagan", "O'keaggan", "O'keagh", "O'keaghan", "O'keains", "O'keakry", "O'kealan", "O'keale", "O'kealey", "O'kealiam", "O'keally", "O'kean", "O'keanin", "O'keany", "O'keappy", "O'keapsey", "O'keara", "O'kearoy", "O'kearrell", "O'kearroy", "O'keary", "O'keassey", "O'keatty", "O'keaty", "O'keedan", "O'keeddy", "O'keeer", "O'keeffy", "O'keegan", "O'keeggan", "O'keegh", "O'keeghan", "O'keeins", "O'keekry", "O'keelan", "O'keele", "O'keeley", "O'keeliam", "O'keelly", "O'keen", "O'keenin", "O'keeny", "O'keeppy", "O'keepsey", "O'keera", "O'keeroy", "O'keerrell", "O'keerroy", "O'keery", "O'keessey", "O'keetty", "O'keety", "O'laudan", "O'lauddy", "O'lauer", "O'lauffy", "O'laugan", "O'lauggan", "O'laugh", "O'laughan", "O'lauins", "O'laukry", "O'laulan", "O'laule", "O'lauley", "O'lauliam", "O'laully", "O'laun", "O'launin", "O'launy", "O'lauppy", "O'laupsey", "O'laura", "O'lauroy", "O'laurrell", "O'laurroy", "O'laury", "O'laussey", "O'lautty", "O'lauty", "O'leadan", "O'leaddy", "O'leaer", "O'leaffy", "O'leagan", "O'leaggan", "O'leagh", "O'leaghan", "O'leains", "O'leakry", "O'lealan", "O'leale", "O'lealey", "O'lealiam", "O'leally", "O'lean", "O'leanin", "O'leany", "O'leappy", "O'leapsey", "O'leara", "O'learoy", "O'learrell", "O'learroy", "O'leary", "O'leassey", "O'leatty", "O'leaty", "O'ledan", "O'leddy", "O'leer", "O'leffy", "O'legan", "O'leggan", "O'legh", "O'leghan", "O'leidan", "O'leiddy", "O'leier", "O'leiffy", "O'leigan", "O'leiggan", "O'leigh", "O'leighan", "O'leiins", "O'leikry", "O'leilan", "O'leile", "O'leiley", "O'leiliam", "O'leilly", "O'lein", "O'leinin", "O'leins", "O'leiny", "O'leippy", "O'leipsey", "O'leira", "O'leiroy", "O'leirrell", "O'leirroy", "O'leiry", "O'leissey", "O'leitty", "O'leity", "O'lekry", "O'lelan", "O'lele", "O'leley", "O'leliam", "O'lelly", "O'len", "O'lenin", "O'leny", "O'leppy", "O'lepsey", "O'lera", "O'leroy", "O'lerrell", "O'lerroy", "O'lery", "O'lessey", "O'letty", "O'lety", "O'lodan", "O'loddy", "O'loer", "O'loffy", "O'logan", "O'loggan", "O'logh", "O'loghan", "O'loins", "O'lokry", "O'lolan", "O'lole", "O'loley", "O'loliam", "O'lolly", "O'lon", "O'lonin", "O'lony", "O'loppy", "O'lopsey", "O'lora", "O'loroy", "O'lorrell", "O'lorroy", "O'lory", "O'lossey", "O'lotty", "O'loty", "O'lyndan", "O'lynddy", "O'lyner", "O'lynffy", "O'lyngan", "O'lynggan", "O'lyngh", "O'lynghan", "O'lynins", "O'lynkry", "O'lynlan", "O'lynle", "O'lynley", "O'lynliam", "O'lynlly", "O'lynn", "O'lynnin", "O'lynny", "O'lynppy", "O'lynpsey", "O'lynra", "O'lynroy", "O'lynrrell", "O'lynrroy", "O'lynry", "O'lynssey", "O'lyntty", "O'lynty", "O'madan", "O'maddy", "O'maer", "O'maffy", "O'magan", "O'maggan", "O'magh", "O'maghan", "O'mains", "O'makry", "O'malan", "O'male", "O'maley", "O'maliam", "O'mally", "O'man", "O'manin", "O'many", "O'mappy", "O'mapsey", "O'mara", "O'maroy", "O'marrell", "O'marroy", "O'mary", "O'massey", "O'matty", "O'maty", "O'nadan", "O'naddy", "O'naer", "O'naffy", "O'nagan", "O'naggan", "O'nagh", "O'naghan", "O'nains", "O'nakry", "O'nalan", "O'nale", "O'naley", "O'naliam", "O'nally", "O'nan", "O'nanin", "O'nany", "O'nappy", "O'napsey", "O'nara", "O'naroy", "O'narrell", "O'narroy", "O'nary", "O'nassey", "O'natty", "O'naty", "O'nedan", "O'neddy", "O'neer", "O'neffy", "O'negan", "O'neggan", "O'negh", "O'neghan", "O'neins", "O'nekry", "O'nelan", "O'nele", "O'neley", "O'neliam", "O'nelly", "O'nen", "O'nenin", "O'neny", "O'neppy", "O'nepsey", "O'nera", "O'neroy", "O'nerrell", "O'nerroy", "O'nery", "O'nessey", "O'netty", "O'nety", "O'peadan", "O'peaddy", "O'peaer", "O'peaffy", "O'peagan", "O'peaggan", "O'peagh", "O'peaghan", "O'peains", "O'peakry", "O'pealan", "O'peale", "O'pealey", "O'pealiam", "O'peally", "O'pean", "O'peanin", "O'peany", "O'peappy", "O'peapsey", "O'peara", "O'pearoy", "O'pearrell", "O'pearroy", "O'peary", "O'peassey", "O'peatty", "O'peaty", "O'reidan", "O'reiddy", "O'reier", "O'reiffy", "O'reigan", "O'reiggan", "O'reigh", "O'reighan", "O'reiins", "O'reikry", "O'reilan", "O'reile", "O'reiley", "O'reiliam", "O'reilly", "O'rein", "O'reinin", "O'reiny", "O'reippy", "O'reipsey", "O'reira", "O'reiroy", "O'reirrell", "O'reirroy", "O'reiry", "O'reissey", "O'reitty", "O'reity", "O'ridan", "O'riddy", "O'rier", "O'riffy", "O'rigan", "O'riggan", "O'righ", "O'righan", "O'riins", "O'rikry", "O'rilan", "O'rile", "O'riley", "O'riliam", "O'rilly", "O'rin", "O'rinin", "O'riny", "O'ripdan", "O'ripddy", "O'riper", "O'ripffy", "O'ripgan", "O'ripggan", "O'ripgh", "O'ripghan", "O'ripins", "O'ripkry", "O'riplan", "O'riple", "O'ripley", "O'ripliam", "O'riplly", "O'ripn", "O'ripnin", "O'ripny", "O'ripppy", "O'rippsey", "O'rippy", "O'ripra", "O'riproy", "O'riprrell", "O'riprroy", "O'ripry", "O'ripsey", "O'ripssey", "O'riptty", "O'ripty", "O'rira", "O'riroy", "O'rirrell", "O'rirroy", "O'riry", "O'rissey", "O'ritty", "O'rity", "O'rodan", "O'roddy", "O'roer", "O'roffy", "O'rogan", "O'roggan", "O'rogh", "O'roghan", "O'roins", "O'rokry", "O'rolan", "O'role", "O'roley", "O'roliam", "O'rolly", "O'ron", "O'ronin", "O'rony", "O'roppy", "O'ropsey", "O'rora", "O'roroy", "O'rorrell", "O'rorroy", "O'rory", "O'rossey", "O'rotty", "O'roty", "O'sadan", "O'saddy", "O'saer", "O'saffy", "O'sagan", "O'saggan", "O'sagh", "O'saghan", "O'sains", "O'sakry", "O'salan", "O'sale", "O'saley", "O'saliam", "O'sally", "O'san", "O'sanin", "O'sany", "O'sappy", "O'sapsey", "O'sara", "O'saroy", "O'sarrell", "O'sarroy", "O'sary", "O'sassey", "O'satty", "O'saty", "O'shedan", "O'sheddy", "O'sheer", "O'sheffy", "O'shegan", "O'sheggan", "O'shegh", "O'sheghan", "O'sheins", "O'shekry", "O'shelan", "O'shele", "O'sheley", "O'sheliam", "O'shelly", "O'shen", "O'shenin", "O'sheny", "O'sheppy", "O'shepsey", "O'shera", "O'sheroy", "O'sherrell", "O'sherroy", "O'shery", "O'shessey", "O'shetty", "O'shety", "O'tedan", "O'teddy", "O'teer", "O'teffy", "O'tegan", "O'teggan", "O'tegh", "O'teghan", "O'teins", "O'tekry", "O'telan", "O'tele", "O'teley", "O'teliam", "O'telly", "O'ten", "O'tenin", "O'teny", "O'teppy", "O'tepsey", "O'tera", "O'teroy", "O'terrell", "O'terroy", "O'tery", "O'tessey", "O'tetty", "O'tety", "O'toodan", "O'tooddy", "O'tooer", "O'tooffy", "O'toogan", "O'tooggan", "O'toogh", "O'tooghan", "O'tooins", "O'tookry", "O'toolan", "O'toole", "O'tooley", "O'tooliam", "O'toolly", "O'toon", "O'toonin", "O'toony", "O'tooppy", "O'toopsey", "O'toora", "O'tooroy", "O'toorrell", "O'toorroy", "O'toory", "O'toossey", "O'tootty", "O'tooty", "O'widan", "O'widdy", "O'wier", "O'wiffy", "O'wigan", "O'wiggan", "O'wigh", "O'wighan", "O'wiins", "O'wikry", "O'wilan", "O'wile", "O'wiley", "O'wiliam", "O'willy", "O'win", "O'winin", "O'winy", "O'wippy", "O'wipsey", "O'wira", "O'wiroy", "O'wirrell", "O'wirroy", "O'wiry", "O'wissey", "O'witty", "O'wity", "O'ydan", "O'yddy", "O'yer", "O'yffy", "O'ygan", "O'yggan", "O'ygh", "O'yghan", "O'yins", "O'ykry", "O'ylan", "O'yle", "O'yley", "O'yliam", "O'ylly", "O'yn", "O'ynin", "O'yny", "O'yppy", "O'ypsey", "O'yra", "O'yroy", "O'yrrell", "O'yrroy", "O'yry", "O'yssey", "O'ytty", "O'yty", "Peadan", "Peaddy", "Peaer", "Peaffy", "Peagan", "Peaggan", "Peagh", "Peaghan", "Peains", "Peakry", "Pealan", "Peale", "Pealey", "Pealiam", "Peally", "Pean", "Peanin", "Peany", "Peappy", "Peapsey", "Peara", "Pearoy", "Pearrell", "Pearroy", "Peary", "Peassey", "Peatty", "Peaty", "Reidan", "Reiddy", "Reier", "Reiffy", "Reigan", "Reiggan", "Reigh", "Reighan", "Reiins", "Reikry", "Reilan", "Reile", "Reiley", "Reiliam", "Reilly", "Rein", "Reinin", "Reiny", "Reippy", "Reipsey", "Reira", "Reiroy", "Reirrell", "Reirroy", "Reiry", "Reissey", "Reitty", "Reity", "Ridan", "Riddy", "Rier", "Riffy", "Rigan", "Riggan", "Righ", "Righan", "Riins", "Rikry", "Rilan", "Rile", "Riley", "Riliam", "Rilly", "Rin", "Rinin", "Riny", "Ripdan", "Ripddy", "Riper", "Ripffy", "Ripgan", "Ripggan", "Ripgh", "Ripghan", "Ripins", "Ripkry", "Riplan", "Riple", "Ripley", "Ripliam", "Riplly", "Ripn", "Ripnin", "Ripny", "Ripppy", "Rippsey", "Rippy", "Ripra", "Riproy", "Riprrell", "Riprroy", "Ripry", "Ripsey", "Ripssey", "Riptty", "Ripty", "Rira", "Riroy", "Rirrell", "Rirroy", "Riry", "Rissey", "Ritty", "Rity", "Rodan", "Roddy", "Roer", "Roffy", "Rogan", "Roggan", "Rogh", "Roghan", "Roins", "Rokry", "Rolan", "Role", "Roley", "Roliam", "Rolly", "Ron", "Ronin", "Rony", "Roppy", "Ropsey", "Rora", "Roroy", "Rorrell", "Rorroy", "Rory", "Rossey", "Rotty", "Roty", "Sadan", "Saddy", "Saer", "Saffy", "Sagan", "Saggan", "Sagh", "Saghan", "Sains", "Sakry", "Salan", "Sale", "Saley", "Saliam", "Sally", "San", "Sanin", "Sany", "Sappy", "Sapsey", "Sara", "Saroy", "Sarrell", "Sarroy", "Sary", "Sassey", "Satty", "Saty", "Shedan", "Sheddy", "Sheer", "Sheffy", "Shegan", "Sheggan", "Shegh", "Sheghan", "Sheins", "Shekry", "Shelan", "Shele", "Sheley", "Sheliam", "Shelly", "Shen", "Shenin", "Sheny", "Sheppy", "Shepsey", "Shera", "Sheroy", "Sherrell", "Sherroy", "Shery", "Shessey", "Shetty", "Shety", "Tedan", "Teddy", "Teer", "Teffy", "Tegan", "Teggan", "Tegh", "Teghan", "Teins", "Tekry", "Telan", "Tele", "Teley", "Teliam", "Telly", "Ten", "Tenin", "Teny", "Teppy", "Tepsey", "Tera", "Teroy", "Terrell", "Terroy", "Tery", "Tessey", "Tetty", "Tety", "Toodan", "Tooddy", "Tooer", "Tooffy", "Toogan", "Tooggan", "Toogh", "Tooghan", "Tooins", "Tookry", "Toolan", "Toole", "Tooley", "Tooliam", "Toolly", "Toon", "Toonin", "Toony", "Tooppy", "Toopsey", "Toora", "Tooroy", "Toorrell", "Toorroy", "Toory", "Toossey", "Tootty", "Tooty", "Widan", "Widdy", "Wier", "Wiffy", "Wigan", "Wiggan", "Wigh", "Wighan", "Wiins", "Wikry", "Wilan", "Wile", "Wiley", "Wiliam", "Willy", "Win", "Winin", "Winy", "Wippy", "Wipsey", "Wira", "Wiroy", "Wirrell", "Wirroy", "Wiry", "Wissey", "Witty", "Wity", "Ydan", "Yddy", "Yer", "Yffy", "Ygan", "Yggan", "Ygh", "Yghan", "Yins", "Ykry", "Ylan", "Yle", "Yley", "Yliam", "Ylly", "Yn", "Ynin", "Yny", "Yppy", "Ypsey", "Yra", "Yroy", "Yrrell", "Yrroy", "Yry", "Yssey", "Ytty", "Yty"}
-- VERSION --
-RYZOM_NAMES_TRYKER_VERSION = 10469
\ No newline at end of file
+RYZOM_NAMES_TRYKER_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua b/ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua
index 8cdb80123c..30f371551b 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/names_zorai.lua
@@ -5,4 +5,4 @@ zoraiFirstNamesTwo = {"Ba", "Ban", "Bang", "Bao", "Be", "Ben", "Beng", "Beo", "B
zoraiLastNames = {"Ba", "Bai", "Ban", "Bang", "Bangi", "Bani", "Bao", "Baoi", "Be", "Bei", "Ben", "Beng", "Bengi", "Beni", "Beo", "Beoi", "Bi", "Bia", "Biai", "Bian", "Biang", "Biangi", "Biani", "Biao", "Biaoi", "Bii", "Bin", "Bing", "Bingi", "Bini", "Bio", "Bioi", "Bo", "Boi", "Bon", "Bong", "Bongi", "Boni", "Boo", "Booi", "Bu", "Bua", "Buai", "Buan", "Buang", "Buangi", "Buani", "Buao", "Buaoi", "Bui", "Bun", "Bung", "Bungi", "Buni", "Buo", "Buoi", "Ca", "Cai", "Can", "Cang", "Cangi", "Cani", "Cao", "Caoi", "Ce", "Cei", "Cen", "Ceng", "Cengi", "Ceni", "Ceo", "Ceoi", "Cha", "Chai", "Chan", "Chang", "Changi", "Chani", "Chao", "Chaoi", "Che", "Chei", "Chen", "Cheng", "Chengi", "Cheni", "Cheo", "Cheoi", "Chi", "Chia", "Chiai", "Chian", "Chiang", "Chiangi", "Chiani", "Chiao", "Chiaoi", "Chii", "Chin", "Ching", "Chingi", "Chini", "Chio", "Chioi", "Cho", "Choi", "Chon", "Chong", "Chongi", "Choni", "Choo", "Chooi", "Chu", "Chua", "Chuai", "Chuan", "Chuang", "Chuangi", "Chuani", "Chuao", "Chuaoi", "Chui", "Chun", "Chung", "Chungi", "Chuni", "Chuo", "Chuoi", "Ci", "Cia", "Ciai", "Cian", "Ciang", "Ciangi", "Ciani", "Ciao", "Ciaoi", "Cii", "Cin", "Cing", "Cingi", "Cini", "Cio", "Cioi", "Co", "Coi", "Con", "Cong", "Congi", "Coni", "Coo", "Cooi", "Cu", "Cua", "Cuai", "Cuan", "Cuang", "Cuangi", "Cuani", "Cuao", "Cuaoi", "Cui", "Cun", "Cung", "Cungi", "Cuni", "Cuo", "Cuoi", "Da", "Dai", "Dan", "Dang", "Dangi", "Dani", "Dao", "Daoi", "De", "Dei", "Den", "Deng", "Dengi", "Deni", "Deo", "Deoi", "Di", "Dia", "Diai", "Dian", "Diang", "Diangi", "Diani", "Diao", "Diaoi", "Dii", "Din", "Ding", "Dingi", "Dini", "Dio", "Dioi", "Do", "Doi", "Don", "Dong", "Dongi", "Doni", "Doo", "Dooi", "Du", "Dua", "Duai", "Duan", "Duang", "Duangi", "Duani", "Duao", "Duaoi", "Dui", "Dun", "Dung", "Dungi", "Duni", "Duo", "Duoi", "Fa", "Fai", "Fan", "Fang", "Fangi", "Fani", "Fao", "Faoi", "Fe", "Fei", "Fen", "Feng", "Fengi", "Feni", "Feo", "Feoi", "Fi", "Fia", "Fiai", "Fian", "Fiang", "Fiangi", "Fiani", "Fiao", "Fiaoi", "Fii", "Fin", "Fing", "Fingi", "Fini", "Fio", "Fioi", "Fo", "Foi", "Fon", "Fong", "Fongi", "Foni", "Foo", "Fooi", "Fu", "Fua", "Fuai", "Fuan", "Fuang", "Fuangi", "Fuani", "Fuao", "Fuaoi", "Fui", "Fun", "Fung", "Fungi", "Funi", "Fuo", "Fuoi", "Ga", "Gai", "Gan", "Gang", "Gangi", "Gani", "Gao", "Gaoi", "Ge", "Gei", "Gen", "Geng", "Gengi", "Geni", "Geo", "Geoi", "Gi", "Gia", "Giai", "Gian", "Giang", "Giangi", "Giani", "Giao", "Giaoi", "Gii", "Gin", "Ging", "Gingi", "Gini", "Gio", "Gioi", "Go", "Goi", "Gon", "Gong", "Gongi", "Goni", "Goo", "Gooi", "Gu", "Gua", "Guai", "Guan", "Guang", "Guangi", "Guani", "Guao", "Guaoi", "Gui", "Gun", "Gung", "Gungi", "Guni", "Guo", "Guoi", "Ha", "Hai", "Han", "Hang", "Hangi", "Hani", "Hao", "Haoi", "He", "Hei", "Hen", "Heng", "Hengi", "Heni", "Heo", "Heoi", "Hi", "Hia", "Hiai", "Hian", "Hiang", "Hiangi", "Hiani", "Hiao", "Hiaoi", "Hii", "Hin", "Hing", "Hingi", "Hini", "Hio", "Hioi", "Ho", "Hoi", "Hon", "Hong", "Hongi", "Honi", "Hoo", "Hooi", "Hu", "Hua", "Huai", "Huan", "Huang", "Huangi", "Huani", "Huao", "Huaoi", "Hui", "Hun", "Hung", "Hungi", "Huni", "Huo", "Huoi", "Ja", "Jai", "Jan", "Jang", "Jangi", "Jani", "Jao", "Jaoi", "Je", "Jei", "Jen", "Jeng", "Jengi", "Jeni", "Jeo", "Jeoi", "Ji", "Jia", "Jiai", "Jian", "Jiang", "Jiangi", "Jiani", "Jiao", "Jiaoi", "Jii", "Jin", "Jing", "Jingi", "Jini", "Jio", "Jioi", "Jo", "Joi", "Jon", "Jong", "Jongi", "Joni", "Joo", "Jooi", "Ju", "Jua", "Juai", "Juan", "Juang", "Juangi", "Juani", "Juao", "Juaoi", "Jui", "Jun", "Jung", "Jungi", "Juni", "Juo", "Juoi", "Ka", "Kai", "Kan", "Kang", "Kangi", "Kani", "Kao", "Kaoi", "Ke", "Kei", "Ken", "Keng", "Kengi", "Keni", "Keo", "Keoi", "Ki", "Kia", "Kiai", "Kian", "Kiang", "Kiangi", "Kiani", "Kiao", "Kiaoi", "Kii", "Kin", "King", "Kingi", "Kini", "Kio", "Kioi", "Ko", "Koi", "Kon", "Kong", "Kongi", "Koni", "Koo", "Kooi", "Ku", "Kua", "Kuai", "Kuan", "Kuang", "Kuangi", "Kuani", "Kuao", "Kuaoi", "Kui", "Kun", "Kung", "Kungi", "Kuni", "Kuo", "Kuoi", "La", "Lai", "Lan", "Lang", "Langi", "Lani", "Lao", "Laoi", "Le", "Lei", "Len", "Leng", "Lengi", "Leni", "Leo", "Leoi", "Li", "Lia", "Liai", "Lian", "Liang", "Liangi", "Liani", "Liao", "Liaoi", "Lii", "Lin", "Ling", "Lingi", "Lini", "Lio", "Lioi", "Lo", "Loi", "Lon", "Long", "Longi", "Loni", "Loo", "Looi", "Lu", "Lua", "Luai", "Luan", "Luang", "Luangi", "Luani", "Luao", "Luaoi", "Lui", "Lun", "Lung", "Lungi", "Luni", "Luo", "Luoi", "Ma", "Mai", "Man", "Mang", "Mangi", "Mani", "Mao", "Maoi", "Me", "Mei", "Men", "Meng", "Mengi", "Meni", "Meo", "Meoi", "Mi", "Mia", "Miai", "Mian", "Miang", "Miangi", "Miani", "Miao", "Miaoi", "Mii", "Min", "Ming", "Mingi", "Mini", "Mio", "Mioi", "Mo", "Moi", "Mon", "Mong", "Mongi", "Moni", "Moo", "Mooi", "Mu", "Mua", "Muai", "Muan", "Muang", "Muangi", "Muani", "Muao", "Muaoi", "Mui", "Mun", "Mung", "Mungi", "Muni", "Muo", "Muoi", "Na", "Nai", "Nan", "Nang", "Nangi", "Nani", "Nao", "Naoi", "Ne", "Nei", "Nen", "Neng", "Nengi", "Neni", "Neo", "Neoi", "Ni", "Nia", "Niai", "Nian", "Niang", "Niangi", "Niani", "Niao", "Niaoi", "Nii", "Nin", "Ning", "Ningi", "Nini", "Nio", "Nioi", "No", "Noi", "Non", "Nong", "Nongi", "Noni", "Noo", "Nooi", "Nu", "Nua", "Nuai", "Nuan", "Nuang", "Nuangi", "Nuani", "Nuao", "Nuaoi", "Nui", "Nun", "Nung", "Nungi", "Nuni", "Nuo", "Nuoi", "Pa", "Pai", "Pan", "Pang", "Pangi", "Pani", "Pao", "Paoi", "Pe", "Pei", "Pen", "Peng", "Pengi", "Peni", "Peo", "Peoi", "Pi", "Pia", "Piai", "Pian", "Piang", "Piangi", "Piani", "Piao", "Piaoi", "Pii", "Pin", "Ping", "Pingi", "Pini", "Pio", "Pioi", "Po", "Poi", "Pon", "Pong", "Pongi", "Poni", "Poo", "Pooi", "Pu", "Pua", "Puai", "Puan", "Puang", "Puangi", "Puani", "Puao", "Puaoi", "Pui", "Pun", "Pung", "Pungi", "Puni", "Puo", "Puoi", "Qa", "Qai", "Qan", "Qang", "Qangi", "Qani", "Qao", "Qaoi", "Qe", "Qei", "Qen", "Qeng", "Qengi", "Qeni", "Qeo", "Qeoi", "Qi", "Qia", "Qiai", "Qian", "Qiang", "Qiangi", "Qiani", "Qiao", "Qiaoi", "Qii", "Qin", "Qing", "Qingi", "Qini", "Qio", "Qioi", "Qo", "Qoi", "Qon", "Qong", "Qongi", "Qoni", "Qoo", "Qooi", "Qu", "Qua", "Quai", "Quan", "Quang", "Quangi", "Quani", "Quao", "Quaoi", "Qui", "Qun", "Qung", "Qungi", "Quni", "Quo", "Sa", "Sai", "San", "Sang", "Sangi", "Sani", "Sao", "Saoi", "Se", "Sei", "Sen", "Seng", "Sengi", "Seni", "Seo", "Seoi", "Sha", "Shai", "Shan", "Shang", "Shangi", "Shani", "Shao", "Shaoi", "She", "Shei", "Shen", "Sheng", "Shengi", "Sheni", "Sheo", "Sheoi", "Shi", "Shia", "Shiai", "Shian", "Shiang", "Shiangi", "Shiani", "Shiao", "Shiaoi", "Shii", "Shin", "Shing", "Shingi", "Shini", "Shio", "Shioi", "Sho", "Shoi", "Shon", "Shong", "Shongi", "Shoni", "Shoo", "Shooi", "Shu", "Shua", "Shuai", "Shuan", "Shuang", "Shuangi", "Shuani", "Shuao", "Shuaoi", "Shui", "Shun", "Shung", "Shungi", "Shuni", "Shuo", "Shuoi", "Si", "Sia", "Siai", "Sian", "Siang", "Siangi", "Siani", "Siao", "Siaoi", "Sii", "Sin", "Sing", "Singi", "Sini", "Sio", "Sioi", "So", "Soi", "Son", "Song", "Songi", "Soni", "Soo", "Sooi", "Su", "Sua", "Suai", "Suan", "Suang", "Suangi", "Suani", "Suao", "Suaoi", "Sui", "Sun", "Sung", "Sungi", "Suni", "Suo", "Suoi", "Ta", "Tai", "Tan", "Tang", "Tangi", "Tani", "Tao", "Taoi", "Te", "Tei", "Ten", "Teng", "Tengi", "Teni", "Teo", "Teoi", "Ti", "Tia", "Tiai", "Tian", "Tiang", "Tiangi", "Tiani", "Tiao", "Tiaoi", "Tii", "Tin", "Ting", "Tingi", "Tini", "Tio", "Tioi", "To", "Toi", "Ton", "Tong", "Tongi", "Toni", "Too", "Tooi", "Tu", "Tua", "Tuai", "Tuan", "Tuang", "Tuangi", "Tuani", "Tuao", "Tuaoi", "Tui", "Tun", "Tung", "Tungi", "Tuni", "Tuo", "Tuoi", "Va", "Vai", "Van", "Vang", "Vangi", "Vani", "Vao", "Vaoi", "Ve", "Vei", "Ven", "Veng", "Vengi", "Veni", "Veo", "Veoi", "Vi", "Via", "Viai", "Vian", "Viang", "Viangi", "Viani", "Viao", "Viaoi", "Vii", "Vin", "Ving", "Vingi", "Vini", "Vio", "Vioi", "Vo", "Voi", "Von", "Vong", "Vongi", "Voni", "Voo", "Vooi", "Vu", "Vua", "Vuai", "Vuan", "Vuang", "Vuangi", "Vuani", "Vuao", "Vuaoi", "Vui", "Vun", "Vung", "Vungi", "Vuni", "Vuo", "Vuoi", "Wa", "Wai", "Wan", "Wang", "Wangi", "Wani", "Wao", "Waoi", "We", "Wei", "Wen", "Weng", "Wengi", "Weni", "Weo", "Weoi", "Wi", "Wia", "Wiai", "Wian", "Wiang", "Wiangi", "Wiani", "Wiao", "Wiaoi", "Wii", "Win", "Wing", "Wingi", "Wini", "Wio", "Wioi", "Wo", "Woi", "Won", "Wong", "Wongi", "Woni", "Woo", "Wooi", "Wu", "Wua", "Wuai", "Wuan", "Wuang", "Wuangi", "Wuani", "Wuao", "Wuaoi", "Wui", "Wun", "Wung", "Wungi", "Wuni", "Wuo", "Wuoi", "Xa", "Xai", "Xan", "Xang", "Xangi", "Xani", "Xao", "Xaoi", "Xe", "Xei", "Xen", "Xeng", "Xengi", "Xeni", "Xeo", "Xeoi", "Xi", "Xia", "Xiai", "Xian", "Xiang", "Xiangi", "Xiani", "Xiao", "Xiaoi", "Xii", "Xin", "Xing", "Xingi", "Xini", "Xio", "Xioi", "Xo", "Xoi", "Xon", "Xong", "Xongi", "Xoni", "Xoo", "Xooi", "Xu", "Xua", "Xuai", "Xuan", "Xuang", "Xuangi", "Xuani", "Xuao", "Xuaoi", "Xui", "Xun", "Xung", "Xungi", "Xuni", "Xuo", "Xuoi", "Ya", "Yai", "Yan", "Yang", "Yangi", "Yani", "Yao", "Yaoi", "Ye", "Yei", "Yen", "Yeng", "Yengi", "Yeni", "Yeo", "Yeoi", "Yi", "Yia", "Yiai", "Yian", "Yiang", "Yiangi", "Yiani", "Yiao", "Yiaoi", "Yii", "Yin", "Ying", "Yingi", "Yini", "Yio", "Yioi", "Yo", "Yoi", "Yon", "Yong", "Yongi", "Yoni", "Yoo", "Yooi", "Yu", "Yua", "Yuai", "Yuan", "Yuang", "Yuangi", "Yuani", "Yuao", "Yuaoi", "Yui", "Yun", "Yung", "Yungi", "Yuni", "Yuo", "Yuoi", "Za", "Zai", "Zan", "Zang", "Zangi", "Zani", "Zao", "Zaoi", "Ze", "Zei", "Zen", "Zeng", "Zengi", "Zeni", "Zeo", "Zeoi", "Zha", "Zhai", "Zhan", "Zhang", "Zhangi", "Zhani", "Zhao", "Zhaoi", "Zhe", "Zhei", "Zhen", "Zheng", "Zhengi", "Zheni", "Zheo", "Zheoi", "Zhi", "Zhia", "Zhiai", "Zhian", "Zhiang", "Zhiangi", "Zhiani", "Zhiao", "Zhiaoi", "Zhii", "Zhin", "Zhing", "Zhingi", "Zhini", "Zhio", "Zhioi", "Zho", "Zhoi", "Zhon", "Zhong", "Zhongi", "Zhoni", "Zhoo", "Zhooi", "Zhu", "Zhua", "Zhuai", "Zhuan", "Zhuang", "Zhuangi", "Zhuani", "Zhuao", "Zhuaoi", "Zhui", "Zhun", "Zhung", "Zhungi", "Zhuni", "Zhuo", "Zhuoi", "Zi", "Zia", "Ziai", "Zian", "Ziang", "Ziangi", "Ziani", "Ziao", "Ziaoi", "Zii", "Zin", "Zing", "Zingi", "Zini", "Zio", "Zioi", "Zo", "Zoi", "Zon", "Zong", "Zongi", "Zoni", "Zoo", "Zooi", "Zu", "Zua", "Zuai", "Zuan", "Zuang", "Zuangi", "Zuani", "Zuao", "Zuaoi", "Zui", "Zun", "Zung", "Zungi", "Zuni", "Zuo", "Zuoi"}
-- VERSION --
-RYZOM_NAMES_ZORAI_VERSION = 10469
\ No newline at end of file
+RYZOM_NAMES_ZORAI_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua
index ddc8dd721b..016bb1d2ee 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua
@@ -440,4 +440,4 @@ function outgame:loadRPBGPage()
end
-- VERSION --
-RYZOM_OUT_V2_APPEAR_VERSION = 10469
\ No newline at end of file
+RYZOM_OUT_V2_APPEAR_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua
index 2e22ea2fe1..afd737f895 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_select.lua
@@ -44,4 +44,4 @@ function game:procCharselClickSlot()
end
-- VERSION --
-RYZOM_OUT_V2_SELECT_VERSION = 10469
\ No newline at end of file
+RYZOM_OUT_V2_SELECT_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
index 5ba4f4066b..fba2ce3adb 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
@@ -667,4 +667,4 @@ end
-- VERSION --
-RYZOM_OUTPOST_VERSION = 10469
\ No newline at end of file
+RYZOM_OUTPOST_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/player.lua b/ryzom/client/data/gamedev/interfaces_v3/player.lua
index f32838dce0..c9a1553bf3 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/player.lua
@@ -1032,4 +1032,4 @@ function game:fixVpx(vpx)
end
-- VERSION --
-RYZOM_PLAYER_VERSION = 10469
\ No newline at end of file
+RYZOM_PLAYER_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/player_trade.lua b/ryzom/client/data/gamedev/interfaces_v3/player_trade.lua
index f29f6ca55a..7af1084601 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/player_trade.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/player_trade.lua
@@ -32,4 +32,4 @@ function getBulk(inventory)
end
-- VERSION --
-RYZOM_PLAYER_TRADE_VERSION = 10469
\ No newline at end of file
+RYZOM_PLAYER_TRADE_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua b/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua
index 0799c8447f..16df6010c5 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ring_access_point.lua
@@ -944,4 +944,4 @@ end
-- VERSION --
-RYZOM_RING_ACCESS_POINT_VERSION = 10469
\ No newline at end of file
+RYZOM_RING_ACCESS_POINT_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ring_access_point_filter.lua b/ryzom/client/data/gamedev/interfaces_v3/ring_access_point_filter.lua
index a9f56fb95d..9eb909358e 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ring_access_point_filter.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ring_access_point_filter.lua
@@ -121,4 +121,4 @@ end
-- VERSION --
-RYZOM_RING_ACCESS_POINT_FILTER_VERSION = 10469
\ No newline at end of file
+RYZOM_RING_ACCESS_POINT_FILTER_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ring_window.lua b/ryzom/client/data/gamedev/interfaces_v3/ring_window.lua
index bad00bf25e..59ed3c745e 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ring_window.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ring_window.lua
@@ -17,4 +17,4 @@ function onRingWindowShown()
end
-- VERSION --
-RYZOM_RING_WINDOW_VERSION = 10469
\ No newline at end of file
+RYZOM_RING_WINDOW_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua b/ryzom/client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua
index 906a3421f9..9ece89fdbb 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ryzhome_toolbar.lua
@@ -236,4 +236,4 @@ function RyzhomePlace:close()
end
-- VERSION --
-RYZOM_RYZHOME_TOOLBAR_VERSION = 10469
\ No newline at end of file
+RYZOM_RYZHOME_TOOLBAR_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
index ea155fbfdc..50ef780562 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
@@ -626,4 +626,4 @@ end
-- VERSION --
-RYZOM_SCENEEDIT_VERSION = 10469
\ No newline at end of file
+RYZOM_SCENEEDIT_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/taskbar.lua b/ryzom/client/data/gamedev/interfaces_v3/taskbar.lua
index 043d6f8f5a..4d70cf8462 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/taskbar.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/taskbar.lua
@@ -96,4 +96,4 @@ end
-- VERSION --
-RYZOM_TASKBAR_VERSION = 10469
\ No newline at end of file
+RYZOM_TASKBAR_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua b/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua
index fef2fda33b..4cda37d227 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/tp_interface.lua
@@ -838,4 +838,4 @@ end
--
-- VERSION --
-RYZOM_TP_INTERFACE_VERSION = 10469
\ No newline at end of file
+RYZOM_TP_INTERFACE_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua b/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
index 1845df8c79..f3d1fcfa67 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
@@ -132,4 +132,4 @@ end
-- VERSION --
-RYZOM_WEB_QUEUE_VERSION = 10469
\ No newline at end of file
+RYZOM_WEB_QUEUE_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua b/ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua
index fdb36c76c6..79c4cac295 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua
@@ -245,4 +245,4 @@ function WebBrowser:onClickHome()
end
-- VERSION --
-RYZOM_WEBBROWSER_VERSION = 10469
\ No newline at end of file
+RYZOM_WEBBROWSER_VERSION = 324
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/webig.lua b/ryzom/client/data/gamedev/interfaces_v3/webig.lua
index d34fb372e9..623e9e1562 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/webig.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/webig.lua
@@ -250,4 +250,4 @@ end
-- VERSION --
-RYZOM_WEBIG_VERSION = 10469
\ No newline at end of file
+RYZOM_WEBIG_VERSION = 324
\ No newline at end of file
From ee18058b28961dd7303e5fd342356b09ed522dd5 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Wed, 14 Jun 2023 14:30:16 +0200
Subject: [PATCH 046/194] Fixes
---
.../client/data/gamedev/interfaces_v3/map.lua | 11 +-
.../data/gamedev/interfaces_v3/player.lua | 36 +++++
.../data/gamedev/interfaces_v3/sceneedit.lua | 125 ++++++++++++------
3 files changed, 131 insertions(+), 41 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/map.lua b/ryzom/client/data/gamedev/interfaces_v3/map.lua
index 83dbd304a6..9cdfa0c2d3 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/map.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/map.lua
@@ -51,7 +51,9 @@ function game:addMapArkPoint(section, x, y, name, title, texture, url, h)
end
function game:delMapArkPoint(section, name)
- game.mapArkPoints[section][name] = nil
+ if game.mapArkPoints[section] ~= nil then
+ game.mapArkPoints[section][name] = nil
+ end
end
function game:delMapArkSection(section)
@@ -236,14 +238,16 @@ function game:doSpawnShapesByZone(continent)
if game.spawnShapesByZone[continent] then
for name, shape in pairs(game.spawnShapesByZone[continent]) do
if shape[9] then
+ if shape[9] ~= nil and shape[9] > 0 then
deleteShape(shape[9])
end
if shape[10] then
+ if shape[10] ~= nil and shape[9] > 0then
deleteShape(shape[10])
end
local setup = shape[8]
- game.spawnShapesByZone[continent][name][9] = SceneEditor:doSpawnShape(shape[1]..".shape", setup, shape[2], shape[3], shape[4], shape[5], shape[6], shape[7], "user", 1, true, setup["action"], setup["url"], false, false, setup["textures"], "", false)
+ game.spawnShapesByZone[continent][name][9] = SceneEditor:doSpawnShape(shape[1]..".shape", setup, shape[2], shape[3], shape[4], shape[5], shape[6], shape[7], "user", 1, false, setup["action"], setup["url"], false, false, setup["textures"], "", false)
if shape[11] == 0 then
game.spawnShapesByZone[continent][name][10] = SceneEditor:doSpawnShape("ge_mission_evenement.ps", setup, shape[2], shape[3], shape[4]+0.35, shape[5], shape[6], shape[7], "user", 1, false, setup["action"], setup["url"], false, false, setup["textures"], "", false)
else
@@ -269,3 +273,6 @@ game:addMapArkPoint("Vip", 4154, -3305, "vip_allegory", "", "allegory_16.tga", "
-- register map overrride
-- game:setAltMap("fyros_map.tga", "fyros_map_sp.tga")
+
+-- VERSION --
+RYZOM_MAP_VERSION = 324
diff --git a/ryzom/client/data/gamedev/interfaces_v3/player.lua b/ryzom/client/data/gamedev/interfaces_v3/player.lua
index b2eee2aa44..6efbc1a6fe 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/player.lua
@@ -42,6 +42,39 @@ if (game.BonusMalus == nil) then
game.BonusMalus.MalusAHList= {};
end
+game.wantedScriptPlaces = {}
+game.latestValidScriptPlace = ""
+
+function game:addScriptPlace(modname, place, id)
+ if game.wantedScriptPlaces[modname] == nil then
+ game.wantedScriptPlaces[modname] = {}
+ end
+ game.wantedScriptPlaces[modname][place] = id
+end
+
+
+function game:checkScriptPlace(place)
+ for modname, vals in pairs(game.wantedScriptPlaces) do
+ if vals[place] ~= nil and game.latestValidScriptPlace ~= place then
+ game.latestValidScriptPlace = place
+ openArkScript(vals[place], nil, "place="..place)
+ end
+ end
+end
+
+
+function game:CheckPosition()
+ local x,y,z = getPlayerPos()
+ local sx = tostring(math.floor(x/10))
+ local sy = tostring(math.floor(y/10))
+ game:checkRpItemsPosition(sx, sy)
+ local cont, region, places = getPositionInfos()
+ game:checkScriptPlace(cont)
+ game:checkScriptPlace(region)
+ for place, typ in pairs(places) do
+ game:checkScriptPlace(place)
+ end
+end
------------------------------------------------------------------------------------------------------------
-- Update player bars in function of what we wants to display (we can hide each one of the 3 bars : sap,stamina and focus)
@@ -1030,3 +1063,6 @@ function game:fixVpx(vpx)
local nvpx = vpx1:sub(1, string.len(vpx1)-6)..vpx2:sub(string.len(vpx2)-5, string.len(vpx2))
return nvpx
end
+
+-- VERSION --
+RYZOM_PLAYER_VERSION = 324
diff --git a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
index 78d02648ca..739977e57a 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
@@ -52,57 +52,57 @@ function SceneEditor:launch_menu(id)
menu:updateCoords()
menu = menu:getRootMenu()
menu:reset()
- menu:addLine(ucstring("-- SHAPE EDITION --"), "", "", "shape_header")
- menu:addLine(ucstring("Move"), "", "", "shape_move")
+ menu:addLine(getUCtf8("-- SHAPE EDITION --"), "", "", "shape_header")
+ menu:addLine(getUCtf8("Move"), "", "", "shape_move")
menu:addSubMenu(1)
local subMenu = menu:getSubMenu(1)
- subMenu:addIconLine(ucstring("Axe X"), "lua", "setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:move_x()')", "shape_move_x", "ark_move_x.tga")
- subMenu:addIconLine(ucstring("Axe Y"), "lua", "setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:move_y()')", "shape_move_y", "ark_move_y.tga")
- subMenu:addIconLine(ucstring("Axe Z"), "lua", "x, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:move_z()')", "shape_move_z", "ark_move_z.tga")
- subMenu:addIconLine(ucstring("Axes X & Y"), "lua", "setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:move_xy()')", "shape_move_xy", "ark_move_xy.tga")
- subMenu:addIconLine(ucstring("Axes X & Y Snap to ground"), "lua", "setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:move_xysnap()')", "shape_move_xy_snap", "ark_move_xysnap.tga")
+ subMenu:addIconLine(getUCtf8("Axe X"), "lua", "setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:move_x()\')", "shape_move_x", "ark_move_x.tga")
+ subMenu:addIconLine(getUCtf8("Axe Y"), "lua", "setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:move_y()\')", "shape_move_y", "ark_move_y.tga")
+ subMenu:addIconLine(getUCtf8("Axe Z"), "lua", "x, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:move_z()\')", "shape_move_z", "ark_move_z.tga")
+ subMenu:addIconLine(getUCtf8("Axes X & Y"), "lua", "setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:move_xy()\')", "shape_move_xy", "ark_move_xy.tga")
+ subMenu:addIconLine(getUCtf8("Axes X & Y Snap to ground    "), "lua", "setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:move_xysnap()\')", "shape_move_xy_snap", "ark_move_xysnap.tga")
subMenu:addSeparator()
- subMenu:addIconLine(ucstring("Move to player"), "lua", "SceneEditor:move_player()", "shape_move_player", "ark_move_player.tga")
+ subMenu:addIconLine(getUCtf8("Move to player    "), "lua", "SceneEditor:move_player()", "shape_move_player", "ark_move_player.tga")
- menu:addLine(ucstring("Rotate"), "", "", "shape_rotate")
+ menu:addLine(getUCtf8("Rotate"), "", "", "shape_rotate")
menu:addSubMenu(2)
subMenu = menu:getSubMenu(2)
- subMenu:addIconLine(ucstring("Axe X"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:rotate(SelectedInstanceId, \"x\")')", "shape_rotate_x", "ark_rotate_x.tga")
- subMenu:addIconLine(ucstring("Axe Y"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:rotate(SelectedInstanceId, \"y\")')", "shape_rotate_y", "ark_rotate_y.tga")
- subMenu:addIconLine(ucstring("Axe Z"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:rotate(SelectedInstanceId, \"z\")')", "shape_rotate_z", "ark_rotate_z.tga")
+ subMenu:addIconLine(getUCtf8("Axe X"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:rotate(SelectedInstanceId, \"x\")\')", "shape_rotate_x", "ark_rotate_x.tga")
+ subMenu:addIconLine(getUCtf8("Axe Y"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:rotate(SelectedInstanceId, \"y\")\')", "shape_rotate_y", "ark_rotate_y.tga")
+ subMenu:addIconLine(getUCtf8("Axe Z Â Â Â "), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:rotate(SelectedInstanceId, \"z\")\')", "shape_rotate_z", "ark_rotate_z.tga")
- menu:addLine(ucstring("Scale"), "", "", "shape_scale")
+ menu:addLine(getUCtf8("Scale"), "", "", "shape_scale")
menu:addSubMenu(3)
subMenu = menu:getSubMenu(3)
- subMenu:addIconLine(ucstring("Axe X"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:scale(SelectedInstanceId, \"x\")')", "shape_scale_x", "ark_scale_x.tga")
- subMenu:addIconLine(ucstring("Axe Y"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:scale(SelectedInstanceId, \"y\")')", "shape_scale_y", "ark_scale_y.tga")
- subMenu:addIconLine(ucstring("Axe Z"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:scale(SelectedInstanceId, \"z\")')", "shape_scale_z", "ark_scale_z.tga")
- subMenu:addIconLine(ucstring("Axes X & Y & Z"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:scale(SelectedInstanceId, \"xyz\")')", "shape_scale_xyz", "ark_scale_xyz.tga")
+ subMenu:addIconLine(getUCtf8("Axe X"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:scale(SelectedInstanceId, \"x\")\')", "shape_scale_x", "ark_scale_x.tga")
+ subMenu:addIconLine(getUCtf8("Axe Y"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:scale(SelectedInstanceId, \"y\")\')", "shape_scale_y", "ark_scale_y.tga")
+ subMenu:addIconLine(getUCtf8("Axe Z"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:scale(SelectedInstanceId, \"z\")\')", "shape_scale_z", "ark_scale_z.tga")
+ subMenu:addIconLine(getUCtf8("Axes X & Y & Z Â Â Â "), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:scale(SelectedInstanceId, \"xyz\")\')", "shape_scale_xyz", "ark_scale_xyz.tga")
- menu:addLine(ucstring("-- COLLISION EDITION --"), "", "", "col_header")
- menu:addLine(ucstring("Move"), "", "", "col_move")
+ menu:addLine(getUCtf8("-- COLLISION EDITION --"), "", "", "col_header")
+ menu:addLine(getUCtf8("Move"), "", "", "col_move")
menu:addSubMenu(5)
subMenu = menu:getSubMenu(5)
- subMenu:addIconLine(ucstring("Axe X"), "lua", "setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:col_move_x()')", "col_move_x", "ark_move_x.tga")
- subMenu:addIconLine(ucstring("Axe Y"), "lua", "setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:col_move_y()')", "col_move_y", "ark_move_y.tga")
- subMenu:addIconLine(ucstring("Axe Z"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:col_move_z()')", "col_move_z", "ark_move_xy.tga")
- subMenu:addIconLine(ucstring("Axe X & Y"), "lua", "setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:col_move_xy()')", "col_move_xy", "ark_move_xy.tga")
+ subMenu:addIconLine(getUCtf8("Axe X"), "lua", "setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:col_move_x()\')", "col_move_x", "ark_move_x.tga")
+ subMenu:addIconLine(getUCtf8("Axe Y"), "lua", "setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:col_move_y()\')", "col_move_y", "ark_move_y.tga")
+ subMenu:addIconLine(getUCtf8("Axe Z"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:col_move_z()\')", "col_move_z", "ark_move_xy.tga")
+ subMenu:addIconLine(getUCtf8("Axe X & Y Â Â Â "), "lua", "setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:col_move_xy()\')", "col_move_xy", "ark_move_xy.tga")
subMenu:addSeparator()
- subMenu:addIconLine(ucstring("Move to Shape"), "lua", "SceneEditor:col_move_to_shape()", "col_move_to_shape", "ark_move_player.tga")
+ subMenu:addIconLine(getUCtf8("Move to Shape    "), "lua", "SceneEditor:col_move_to_shape()", "col_move_to_shape", "ark_move_player.tga")
- menu:addIconLine(ucstring("Rotate"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:col_rotate(SelectedInstanceId, \"x\")')", "col_rotate_x", "ark_rotate_x.tga")
+ menu:addIconLine(getUCtf8("Rotate"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:col_rotate(SelectedInstanceId, \"x\")\')", "col_rotate_x", "ark_rotate_x.tga")
- menu:addLine(ucstring("Scale"), "", "", "col_scale")
+ menu:addLine(getUCtf8("Scale"), "", "", "col_scale")
menu:addSubMenu(7)
subMenu = menu:getSubMenu(7)
- subMenu:addIconLine(ucstring("Axe X"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:col_scale(SelectedInstanceId, \"x\")')", "col_scale_x", "ark_scale_x.tga")
- subMenu:addIconLine(ucstring("Axe Y"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:col_scale(SelectedInstanceId, \"y\")')", "col_scale_y", "ark_scale_y.tga")
- subMenu:addIconLine(ucstring("Axe Z"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI('ui:interface:ark_scene_editor'), 'SceneEditor:col_scale(SelectedInstanceId, \"z\")')", "col_scale_z", "ark_scale_z.tga")
+ subMenu:addIconLine(getUCtf8("Axe X"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:col_scale(SelectedInstanceId, \"x\")\')", "col_scale_x", "ark_scale_x.tga")
+ subMenu:addIconLine(getUCtf8("Axe Y"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:col_scale(SelectedInstanceId, \"y\")\')", "col_scale_y", "ark_scale_y.tga")
+ subMenu:addIconLine(getUCtf8("Axe Z"), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:col_scale(SelectedInstanceId, \"z\")\')", "col_scale_z", "ark_scale_z.tga")
+ subMenu:addIconLine(getUCtf8("Axe X & Y Â Â Â "), "lua", "ARK_SHAPE_LATEST_X, ARK_SHAPE_LATEST_Y = getMousePos(); setOnDraw(getUI(\'ui:interface:ark_scene_editor\'), \'SceneEditor:col_scale(SelectedInstanceId, \"xy\")\')", "col_scale_xy", "ark_scale_xyz.tga")
launchContextMenuInGame("ui:interface:ark_scene_editor_edit_menu")
end
-
function arcc_tools_check_rclick()
root = getUI("ui:interface")
local rx, ry = getMousePos()
@@ -263,8 +263,8 @@ function SceneEditor:col_scale(id, axe)
else
mx, my = getMousePos()
local setup = {}
- if axe == "x" then setup["col size x"]="+"..tostring((mx-ARK_SHAPE_LATEST_X)/100) end
- if axe == "y" then setup["col size y"]="+"..tostring((mx-ARK_SHAPE_LATEST_X)/100) end
+ if axe == "x" or axe == "xy" then setup["col size x"]="+"..tostring((mx-ARK_SHAPE_LATEST_X)/100) end
+ if axe == "y" or axe == "xy" then setup["col size y"]="+"..tostring((mx-ARK_SHAPE_LATEST_X)/100) end
if axe == "z" then setup["col size z"]="+"..tostring((my-ARK_SHAPE_LATEST_Y)/100) end
setupShape(id, setup)
ARK_SHAPE_LATEST_X = mx
@@ -274,9 +274,27 @@ end
function SceneEditor:set_modified(id)
- self.Groups[self.Shapes[id].group].props.modified=true
- self.Shapes[id].modified = "modified"
+ if self.Shapes[id] then
+ self.Groups[self.Shapes[id].group].props.modified=true
+ self.Shapes[id].modified = "modified"
+ end
self.HaveUpdate = true
+ if self.repeatAdd ~= nil then
+ local d, mx, my = getMouseRightDown()
+ if d == false then
+ self.hideMenu = true
+ self:add(self.repeatAdd)
+ self.repeatAdd = nil
+ end
+ else
+ getUI("ui:interface:arkpowo_preview_shape:content:scene3d").active=1
+ local framewin = getUI("ui:interface:arkpowo_preview_shape")
+ framewin.opened=true
+ if self.hideMenu then
+ setOnDraw(getUI("ui:interface:game_context_menu"), "SceneEditor:setTopWindowShapeList()")
+ setOnDraw(getUI("ui:interface:ark_scene_editor_edit_menu"), "SceneEditor:setTopWindowShapeList()")
+ end
+ end
end
@@ -316,7 +334,7 @@ end
function SceneEditor:add(shape)
if self.LastEditedGroup == nil then
- self:get_html(''..self.T["no_selected_group"]..' ', '000000')
+ self:get_html(""..self.T["no_selected_group"].." \", \"000000\"")
end
local new_shape = {}
new_shape.file = shape
@@ -324,11 +342,17 @@ function SceneEditor:add(shape)
self.Groups[new_shape.group].props.modified=true
new_shape.db_id = self.Groups[new_shape.group].props.count + 1
new_shape.modified = "added"
- new_shape_id = addShape(shape, 0, 0, 0, "user", 1, true, "", "SceneEditor:show_menu()")
+ new_shape_id = addShape(shape, 0, 0, 0, "user", 1, true, "", "SceneEditor:show_menu()", false, false, "", "", false)
table.insert(self.Groups[new_shape.group], new_shape_id)
self.Groups[new_shape.group].props.count = self.Groups[new_shape.group].props.count + 1
self.Shapes[new_shape_id] = new_shape
self:get_html("Added")
+
+ self.move_timer = nltime.getLocalTime() + 60
+ getUI("ui:interface:arkpowo_preview_shape:content:scene3d").active=false
+ local framewin = getUI("ui:interface:arkpowo_preview_shape")
+ framewin.opened=false
+ setOnDraw(framewin, "SceneEditor:moveTimerUpdate( \'"..shape.."\', "..tostring(new_shape_id)..")")
end
@@ -373,16 +397,36 @@ function SceneEditor:editGroup(group)
end
function SceneEditor:addFromDb(group, db_id, json_shape, edit)
- shape = Json.decode(json_shape)
+ local shape = Json.decode(json_shape)
shape.db_id = db_id
shape.group = group
shape.modified = ""
+
+ if shape.setup["textures"] ~= nil then
+ textures = shape.setup["textures"]
+ else
+ textures = ""
+ end
+
+ if shape.setup["context"] ~= nil then
+ context = shape.setup["context"]
+ else
+ context = ""
+ end
+
+ if shape.setup["url"] ~= nil then
+ url = shape.setup["url"]
+ else
+ url = ""
+ end
+
if edit then
- shape_id = addShape(shape.file, shape.pos[1], shape.pos[2], shape.pos[3], "user", 1, true, "", "SceneEditor:show_menu()")
+ shape_id = addShape(shape.file, shape.pos[1], shape.pos[2], shape.pos[3], "user", 1, true, "", "SceneEditor:show_menu()", false, false, textures, "", false)
else
- shape_id = addShape(shape.file, shape.pos[1], shape.pos[2], shape.pos[3], "user", 1, true, "", "")
+ shape_id = addShape(shape.file, shape.pos[1], shape.pos[2], shape.pos[3], "user", 1, true, context, url, false, false, textures, "", false)
end
+
rotateShape(shape_id, tostring(shape.rot[1]), tostring(shape.rot[2]), tostring(shape.rot[3]))
setupShape(shape_id, shape.setup)
self.Shapes[shape_id] = shape
@@ -624,3 +668,6 @@ function SceneEditor:get_html(message, message_bg)
end
end
+
+-- VERSION --
+RYZOM_SCENEEDIT_VERSION = 324
From c0ab8aa2c78264d5b2ffd561b8c8e3857e17f144 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Wed, 14 Jun 2023 14:31:45 +0200
Subject: [PATCH 047/194] Added test
---
ryzom/common/src/game_share/continent.cpp | 1 +
ryzom/common/src/game_share/continent.h | 1 +
.../player_manager/character_respawn_points.cpp | 13 ++++++++-----
3 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/ryzom/common/src/game_share/continent.cpp b/ryzom/common/src/game_share/continent.cpp
index 0176eadb53..61febf9db1 100644
--- a/ryzom/common/src/game_share/continent.cpp
+++ b/ryzom/common/src/game_share/continent.cpp
@@ -56,6 +56,7 @@ namespace CONTINENT
NL_STRING_CONVERSION_TABLE_ENTRY(R2_JUNGLE)
NL_STRING_CONVERSION_TABLE_ENTRY(CORRUPTED_MOOR)
NL_STRING_CONVERSION_TABLE_ENTRY(KITINIERE)
+ NL_STRING_CONVERSION_TABLE_ENTRY(UNDERNEXUS)
NL_STRING_CONVERSION_TABLE_ENTRY(UNKNOWN)
NL_END_STRING_CONVERSION_TABLE(TContinent, ContinentConversion, UNKNOWN)
diff --git a/ryzom/common/src/game_share/continent.h b/ryzom/common/src/game_share/continent.h
index d6b0bd854e..6831aee431 100644
--- a/ryzom/common/src/game_share/continent.h
+++ b/ryzom/common/src/game_share/continent.h
@@ -52,6 +52,7 @@ namespace CONTINENT
R2_JUNGLE,
CORRUPTED_MOOR,
KITINIERE,
+ UNDERNEXUS,
UNKNOWN,
// NB_RESPAWN_POINT_TYPE = UNKNOWN,
diff --git a/ryzom/server/src/entities_game_service/player_manager/character_respawn_points.cpp b/ryzom/server/src/entities_game_service/player_manager/character_respawn_points.cpp
index e3de367026..ede41a1f4b 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character_respawn_points.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character_respawn_points.cpp
@@ -153,6 +153,9 @@ void CCharacterRespawnPoints::addDefaultRespawnPoint(CONTINENT::TContinent conti
case CONTINENT::KITINIERE:
defaultPlaceName = "kitiniere_entrance";
break;
+ case CONTINENT::UNDERNEXUS:
+ defaultPlaceName = "place_respawn_undernexus";
+ break;
default:
defaultPlaceName = "newbie_start_point";
}
@@ -242,11 +245,11 @@ void CCharacterRespawnPoints::clearRingRespawnpoint()
//-----------------------------------------------------------------------------
bool CCharacterRespawnPoints::inR2Island() const
{
-
+
CContinent * cont = CZoneManager::getInstance().getContinent( _Char.getX(), _Char.getY() );
if( cont == 0 )
return false;
-
+
CONTINENT::TContinent continent = (CONTINENT::TContinent)cont->getId();
return (continent == CONTINENT::R2_ROOTS ||
continent == CONTINENT::R2_FOREST ||
@@ -323,7 +326,7 @@ CONTINENT::TRespawnPointCounters CCharacterRespawnPoints::buildRingPoints() cons
const TRespawnPoint &rp = _RegularRespawnPoints[i];
const CTpSpawnZone *tsz = CZoneManager::getInstance().getTpSpawnZone(rp);
- if (tsz != NULL
+ if (tsz != NULL
/*&& (tsz->getType() == RESPAWN_POINT::KAMI || tsz->getType() == RESPAWN_POINT::KARAVAN)*/)
{
ret[tsz->getContinent()]++;
@@ -408,7 +411,7 @@ bool CCharacterRespawnPoints::isUsableRegularRespawnPoint(CONTINENT::TContinent
{
return false;
}
-
+
return CPVPManager2::getInstance()->isRespawnValid( &_Char, respawnPoint );
}
@@ -584,6 +587,6 @@ void CCharacterRespawnPoints::dumpRespawnPoints(NLMISC::CLog & log) const
// {
// // ensure we won't try to save in old format anymore
// nlassertex(false, (" you should not save in old format anymore!!!") );
-// }
+// }
//}
From 612db39598b4880df268ae38d55eeb9e50444a38 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Wed, 14 Jun 2023 14:32:38 +0200
Subject: [PATCH 048/194] undef HALF_FREQUENCY_SENDING_TO_CLIENT
---
ryzom/common/src/game_share/entity_types.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/common/src/game_share/entity_types.h b/ryzom/common/src/game_share/entity_types.h
index 7645c28a99..cd38a514c0 100644
--- a/ryzom/common/src/game_share/entity_types.h
+++ b/ryzom/common/src/game_share/entity_types.h
@@ -44,7 +44,7 @@ namespace CLFECOMMON {
* Defined -> one send every two cycles (usually 5 Hz).
* Don't forget to adjust the variable ClientBandwidth in frontend_service.cfg.
*/
-#define HALF_FREQUENCY_SENDING_TO_CLIENT
+#undef HALF_FREQUENCY_SENDING_TO_CLIENT
/*
From 11a22698a9595d446cfddc440a8a170f98f89f40 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 15 Jun 2023 12:00:47 +0200
Subject: [PATCH 049/194] Fix
---
ryzom/client/data/gamedev/interfaces_v3/map.lua | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/map.lua b/ryzom/client/data/gamedev/interfaces_v3/map.lua
index 9cdfa0c2d3..8938047501 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/map.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/map.lua
@@ -51,8 +51,8 @@ function game:addMapArkPoint(section, x, y, name, title, texture, url, h)
end
function game:delMapArkPoint(section, name)
- if game.mapArkPoints[section] ~= nil then
- game.mapArkPoints[section][name] = nil
+ if game.mapArkPoints[section] ~= nil then
+ game.mapArkPoints[section][name] = nil
end
end
@@ -241,7 +241,6 @@ function game:doSpawnShapesByZone(continent)
if shape[9] ~= nil and shape[9] > 0 then
deleteShape(shape[9])
end
- if shape[10] then
if shape[10] ~= nil and shape[9] > 0then
deleteShape(shape[10])
end
From 3e9207cd17b923ef9525b1295ee16a8b0152a346 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 15 Jun 2023 12:19:32 +0200
Subject: [PATCH 050/194] Fix
---
ryzom/client/data/gamedev/interfaces_v3/map.lua | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/map.lua b/ryzom/client/data/gamedev/interfaces_v3/map.lua
index 8938047501..6b731a64c2 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/map.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/map.lua
@@ -202,8 +202,7 @@ function game:addSpawnShapesByZone(zone, continent, name, displayIcon, setup, fi
local id1 = -1
local id2 = -1
- if game.spawnShapesByZone[continent] == nil
- then
+ if game.spawnShapesByZone[continent] == nil then
game.spawnShapesByZone[continent] = {}
end
@@ -230,17 +229,18 @@ function game:addSpawnShapesByZone(zone, continent, name, displayIcon, setup, fi
if displayIcon == 1 then
game:addMapArkPoint(zone, setup[2], setup[3], setup[1], text, icon..".tga")
else
- game:delMapArkPoint(zone, setup[1])
+ game:delMapArkPoint(zone, setup[1])
end
end
function game:doSpawnShapesByZone(continent)
if game.spawnShapesByZone[continent] then
for name, shape in pairs(game.spawnShapesByZone[continent]) do
- if shape[9] then
+
if shape[9] ~= nil and shape[9] > 0 then
deleteShape(shape[9])
end
+
if shape[10] ~= nil and shape[9] > 0then
deleteShape(shape[10])
end
From 2001fbaf5fbb83ce90db28fe6e2ea3951026d554 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Sat, 17 Jun 2023 01:12:43 +0200
Subject: [PATCH 051/194] Updates
---
.../entities_game_service/database_guild.cpp | 13 +----
.../entities_game_service/database_guild.h | 20 ++-----
.../entities_game_service/database_plr.cpp | 13 +----
.../src/entities_game_service/database_plr.h | 20 ++-----
.../guild_manager/guild_unifier_itf.cpp | 32 +++++------
.../shard_unifier_service/database_mapping.h | 55 +++++++++++--------
ryzom/server/tools/shard.screen.rc | 2 +-
ryzom/tools/pd_parser/cpp_output.h | 2 +-
8 files changed, 63 insertions(+), 94 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/database_guild.cpp b/ryzom/server/src/entities_game_service/database_guild.cpp
index 90014e7e2c..cc4c36c817 100644
--- a/ryzom/server/src/entities_game_service/database_guild.cpp
+++ b/ryzom/server/src/entities_game_service/database_guild.cpp
@@ -16,18 +16,7 @@
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-// WARNING : this is a generated file, don't change it !
-//
-//
-//
-//
-//
-//
+// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
#include "stdpch.h"
diff --git a/ryzom/server/src/entities_game_service/database_guild.h b/ryzom/server/src/entities_game_service/database_guild.h
index fb8611cf5c..4c51f81f72 100644
--- a/ryzom/server/src/entities_game_service/database_guild.h
+++ b/ryzom/server/src/entities_game_service/database_guild.h
@@ -1,7 +1,5 @@
-#ifndef INCLUDED_database_GUILD_H
-#define INCLUDED_database_GUILD_H
// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
@@ -19,20 +17,12 @@
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-// WARNING : this is a generated file, don't change it !
-//
-//
-//
-//
-//
-//
+// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
+#ifndef INCLUDED_DATABASE_database_GUILD_H
+#define INCLUDED_DATABASE_database_GUILD_H
+
#include "nel/misc/string_common.h"
#include "cdb_group.h"
#include "player_manager/cdb.h"
@@ -1857,4 +1847,4 @@ inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, NLMISC::C
};
-#endif // INCLUDED_database_GUILD_H
+#endif // INCLUDED_DATABASE_database_GUILD_H
diff --git a/ryzom/server/src/entities_game_service/database_plr.cpp b/ryzom/server/src/entities_game_service/database_plr.cpp
index b98c0bb0b5..3165656bd1 100644
--- a/ryzom/server/src/entities_game_service/database_plr.cpp
+++ b/ryzom/server/src/entities_game_service/database_plr.cpp
@@ -16,18 +16,7 @@
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-// WARNING : this is a generated file, don't change it !
-//
-//
-//
-//
-//
-//
+// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
#include "stdpch.h"
diff --git a/ryzom/server/src/entities_game_service/database_plr.h b/ryzom/server/src/entities_game_service/database_plr.h
index 0c5277073e..89af126c85 100644
--- a/ryzom/server/src/entities_game_service/database_plr.h
+++ b/ryzom/server/src/entities_game_service/database_plr.h
@@ -1,7 +1,5 @@
-#ifndef INCLUDED_database_PLR_H
-#define INCLUDED_database_PLR_H
// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
@@ -19,20 +17,12 @@
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-// WARNING : this is a generated file, don't change it !
-//
-//
-//
-//
-//
-//
+// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
+#ifndef INCLUDED_DATABASE_database_PLR_H
+#define INCLUDED_DATABASE_database_PLR_H
+
#include "nel/misc/string_common.h"
#include "cdb_group.h"
#include "player_manager/cdb.h"
@@ -10805,4 +10795,4 @@ inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, NLMISC::C
};
-#endif // INCLUDED_database_PLR_H
+#endif // INCLUDED_DATABASE_database_PLR_H
diff --git a/ryzom/server/src/entities_game_service/guild_manager/guild_unifier_itf.cpp b/ryzom/server/src/entities_game_service/guild_manager/guild_unifier_itf.cpp
index 873b69f0c3..aec2bf3563 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/guild_unifier_itf.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/guild_unifier_itf.cpp
@@ -1,5 +1,5 @@
// Ryzom - MMORPG Framework
-// Copyright (C) 2010 Winch Gate Property Limited
+// Copyright (C) 2010-2021 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
@@ -70,7 +70,7 @@ namespace GU
init = true;
}
- return handlers;
+ return handlers;
}
bool CGuildUnifierClientSkel::fwdOnProcessModuleMessage(NLNET::IModuleProxy *sender, const NLNET::CMessage &message)
{
@@ -161,9 +161,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_guildReady(__message);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -179,9 +179,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_receiveForeignGuild(__message, guilds);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -197,9 +197,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_updateMemberList(__message, guildId, members);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -215,9 +215,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_updateMemberInfo(__message, guildId, membersInfo);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -233,9 +233,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_updateGuild(__message, guildInfo);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -251,9 +251,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_guildDeleted(__message, guildId);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -269,9 +269,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_messageToGuildMembers(__message, guildId, messageName, params);
_ModuleProxy->sendModuleMessage(sender, __message);
diff --git a/ryzom/server/src/shard_unifier_service/database_mapping.h b/ryzom/server/src/shard_unifier_service/database_mapping.h
index e96676fefe..a340d3cce7 100644
--- a/ryzom/server/src/shard_unifier_service/database_mapping.h
+++ b/ryzom/server/src/shard_unifier_service/database_mapping.h
@@ -2201,7 +2201,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -2233,7 +2233,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -2335,7 +2336,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 3
};
@@ -2369,7 +2370,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -3696,7 +3698,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 4
};
@@ -3732,7 +3734,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -3834,7 +3837,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 3
};
@@ -3868,7 +3871,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -3969,7 +3973,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -4001,7 +4005,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -4102,7 +4107,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -4134,7 +4139,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -4237,7 +4243,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 4
};
@@ -4273,7 +4279,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -4955,7 +4962,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 3
};
@@ -4989,7 +4996,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -5090,7 +5098,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -5122,7 +5130,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -6095,7 +6104,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 4
};
@@ -6131,7 +6140,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -7342,7 +7352,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -7374,7 +7384,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
diff --git a/ryzom/server/tools/shard.screen.rc b/ryzom/server/tools/shard.screen.rc
index 4d36f5c7e3..d5d2a5a049 100644
--- a/ryzom/server/tools/shard.screen.rc
+++ b/ryzom/server/tools/shard.screen.rc
@@ -63,7 +63,7 @@ screen -t Trk /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_tryker ../sbin
screen -t Zor /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_zorai ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_zorai --nobreak --writepid -mCommon:Indoors:Zorai:ZoraiNewbie:ZoraiIsland:Post
# ais_roots
-screen -t Pri /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_roots ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_roots --nobreak --writepid -mCommon:Nexus:Bagne:RouteGouffre:Sources:Terre:Kitiniere:Post
+screen -t Pri /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_roots ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_roots --nobreak --writepid -mCommon:Nexus:Bagne:RouteGouffre:Sources:Terre:Kitiniere:Undernexus:Post
#ais_ark
screen -t Ark /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_ark ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_ark --nobreak --writepid -mCommon:Indoors::R2Desert:R2Roots:R2Jungle:R2Forest:R2Lakes:Post
diff --git a/ryzom/tools/pd_parser/cpp_output.h b/ryzom/tools/pd_parser/cpp_output.h
index f8ed9c6f82..96183b2652 100644
--- a/ryzom/tools/pd_parser/cpp_output.h
+++ b/ryzom/tools/pd_parser/cpp_output.h
@@ -659,7 +659,7 @@ inline void CCppOutput::flush(const std::string &fileName)
buffer.resize(fi.getFileSize(), '*');
fi.serialBuffer((uint8*)(&(buffer[0])), fi.getFileSize());
- // search for $Id: cpp_output.h,v 1.15 2004/12/13 17:19:01 legros Exp $ string in file...
+ // search for $Id$ string in file...
char *searchidstart, *searchidend;
char *replaceidstart, *replaceidend;
From 1c36488dc31b77509a317c91c9c49c0369ec7d00 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 17 Jun 2023 01:13:44 +0200
Subject: [PATCH 052/194] Fix
---
.../entities_game_service/database_guild.cpp | 13 +----
.../entities_game_service/database_guild.h | 20 ++-----
.../entities_game_service/database_plr.cpp | 13 +----
.../src/entities_game_service/database_plr.h | 20 ++-----
.../guild_manager/guild_unifier_itf.cpp | 32 +++++------
.../shard_unifier_service/database_mapping.h | 55 +++++++++++--------
ryzom/tools/pd_parser/cpp_output.h | 2 +-
7 files changed, 62 insertions(+), 93 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/database_guild.cpp b/ryzom/server/src/entities_game_service/database_guild.cpp
index 90014e7e2c..cc4c36c817 100644
--- a/ryzom/server/src/entities_game_service/database_guild.cpp
+++ b/ryzom/server/src/entities_game_service/database_guild.cpp
@@ -16,18 +16,7 @@
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-// WARNING : this is a generated file, don't change it !
-//
-//
-//
-//
-//
-//
+// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
#include "stdpch.h"
diff --git a/ryzom/server/src/entities_game_service/database_guild.h b/ryzom/server/src/entities_game_service/database_guild.h
index fb8611cf5c..4c51f81f72 100644
--- a/ryzom/server/src/entities_game_service/database_guild.h
+++ b/ryzom/server/src/entities_game_service/database_guild.h
@@ -1,7 +1,5 @@
-#ifndef INCLUDED_database_GUILD_H
-#define INCLUDED_database_GUILD_H
// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
@@ -19,20 +17,12 @@
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-// WARNING : this is a generated file, don't change it !
-//
-//
-//
-//
-//
-//
+// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
+#ifndef INCLUDED_DATABASE_database_GUILD_H
+#define INCLUDED_DATABASE_database_GUILD_H
+
#include "nel/misc/string_common.h"
#include "cdb_group.h"
#include "player_manager/cdb.h"
@@ -1857,4 +1847,4 @@ inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, NLMISC::C
};
-#endif // INCLUDED_database_GUILD_H
+#endif // INCLUDED_DATABASE_database_GUILD_H
diff --git a/ryzom/server/src/entities_game_service/database_plr.cpp b/ryzom/server/src/entities_game_service/database_plr.cpp
index b98c0bb0b5..3165656bd1 100644
--- a/ryzom/server/src/entities_game_service/database_plr.cpp
+++ b/ryzom/server/src/entities_game_service/database_plr.cpp
@@ -16,18 +16,7 @@
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-// WARNING : this is a generated file, don't change it !
-//
-//
-//
-//
-//
-//
+// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
#include "stdpch.h"
diff --git a/ryzom/server/src/entities_game_service/database_plr.h b/ryzom/server/src/entities_game_service/database_plr.h
index 0c5277073e..89af126c85 100644
--- a/ryzom/server/src/entities_game_service/database_plr.h
+++ b/ryzom/server/src/entities_game_service/database_plr.h
@@ -1,7 +1,5 @@
-#ifndef INCLUDED_database_PLR_H
-#define INCLUDED_database_PLR_H
// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
@@ -19,20 +17,12 @@
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-// WARNING : this is a generated file, don't change it !
-//
-//
-//
-//
-//
-//
+// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
+#ifndef INCLUDED_DATABASE_database_PLR_H
+#define INCLUDED_DATABASE_database_PLR_H
+
#include "nel/misc/string_common.h"
#include "cdb_group.h"
#include "player_manager/cdb.h"
@@ -10805,4 +10795,4 @@ inline void _getProp(const CCDBSynchronised &db, ICDBStructNode *node, NLMISC::C
};
-#endif // INCLUDED_database_PLR_H
+#endif // INCLUDED_DATABASE_database_PLR_H
diff --git a/ryzom/server/src/entities_game_service/guild_manager/guild_unifier_itf.cpp b/ryzom/server/src/entities_game_service/guild_manager/guild_unifier_itf.cpp
index 873b69f0c3..aec2bf3563 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/guild_unifier_itf.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/guild_unifier_itf.cpp
@@ -1,5 +1,5 @@
// Ryzom - MMORPG Framework
-// Copyright (C) 2010 Winch Gate Property Limited
+// Copyright (C) 2010-2021 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
@@ -70,7 +70,7 @@ namespace GU
init = true;
}
- return handlers;
+ return handlers;
}
bool CGuildUnifierClientSkel::fwdOnProcessModuleMessage(NLNET::IModuleProxy *sender, const NLNET::CMessage &message)
{
@@ -161,9 +161,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_guildReady(__message);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -179,9 +179,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_receiveForeignGuild(__message, guilds);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -197,9 +197,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_updateMemberList(__message, guildId, members);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -215,9 +215,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_updateMemberInfo(__message, guildId, membersInfo);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -233,9 +233,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_updateGuild(__message, guildInfo);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -251,9 +251,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_guildDeleted(__message, guildId);
_ModuleProxy->sendModuleMessage(sender, __message);
@@ -269,9 +269,9 @@ namespace GU
}
else
{
- // send the message for remote dispatching and execution or local queing
+ // send the message for remote dispatching and execution or local queing
NLNET::CMessage __message;
-
+
buildMessageFor_messageToGuildMembers(__message, guildId, messageName, params);
_ModuleProxy->sendModuleMessage(sender, __message);
diff --git a/ryzom/server/src/shard_unifier_service/database_mapping.h b/ryzom/server/src/shard_unifier_service/database_mapping.h
index e96676fefe..a340d3cce7 100644
--- a/ryzom/server/src/shard_unifier_service/database_mapping.h
+++ b/ryzom/server/src/shard_unifier_service/database_mapping.h
@@ -2201,7 +2201,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -2233,7 +2233,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -2335,7 +2336,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 3
};
@@ -2369,7 +2370,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -3696,7 +3698,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 4
};
@@ -3732,7 +3734,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -3834,7 +3837,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 3
};
@@ -3868,7 +3871,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -3969,7 +3973,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -4001,7 +4005,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -4102,7 +4107,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -4134,7 +4139,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -4237,7 +4243,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 4
};
@@ -4273,7 +4279,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -4955,7 +4962,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 3
};
@@ -4989,7 +4996,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -5090,7 +5098,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -5122,7 +5130,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -6095,7 +6104,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 4
};
@@ -6131,7 +6140,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
@@ -7342,7 +7352,7 @@ namespace RSMGR
end_of_enum,
invalid_val,
-
+
/// Number of enumerated values
nb_enum_items = 2
};
@@ -7374,7 +7384,8 @@ namespace RSMGR
};
static NLMISC::CStringConversion
conversionTable(TValues_nl_string_conversion_table, sizeof(TValues_nl_string_conversion_table)
- / sizeof(TValues_nl_string_conversion_table[0]), invalid_val);
+ / sizeof(TValues_nl_string_conversion_table[0]),
+ invalid_val);
return conversionTable;
}
diff --git a/ryzom/tools/pd_parser/cpp_output.h b/ryzom/tools/pd_parser/cpp_output.h
index f8ed9c6f82..96183b2652 100644
--- a/ryzom/tools/pd_parser/cpp_output.h
+++ b/ryzom/tools/pd_parser/cpp_output.h
@@ -659,7 +659,7 @@ inline void CCppOutput::flush(const std::string &fileName)
buffer.resize(fi.getFileSize(), '*');
fi.serialBuffer((uint8*)(&(buffer[0])), fi.getFileSize());
- // search for $Id: cpp_output.h,v 1.15 2004/12/13 17:19:01 legros Exp $ string in file...
+ // search for $Id$ string in file...
char *searchidstart, *searchidend;
char *replaceidstart, *replaceidend;
From c3c0bc9ef915c39ae632b358a41ddc119221b90e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Sat, 17 Jun 2023 02:24:18 +0000
Subject: [PATCH 053/194] Update
---
ryzom/server/tools/cfg_creator/templates/ai_service.cfg | 4 ++++
.../tools/cfg_creator/templates/ai_service_default.cfg | 8 ++++++++
.../tools/cfg_creator/templates/entities_game_service.cfg | 5 +++++
.../templates/entities_game_service_default.cfg | 2 +-
.../cfg_creator/templates/frontend_service_default.cfg | 2 +-
.../tools/cfg_creator/templates/input_output_service.cfg | 2 +-
.../tools/cfg_creator/templates/used_continents.cfg | 3 ++-
7 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/ryzom/server/tools/cfg_creator/templates/ai_service.cfg b/ryzom/server/tools/cfg_creator/templates/ai_service.cfg
index 2fb67b600a..55c3b761b8 100644
--- a/ryzom/server/tools/cfg_creator/templates/ai_service.cfg
+++ b/ryzom/server/tools/cfg_creator/templates/ai_service.cfg
@@ -119,6 +119,10 @@ UsedPrimitives =
"kitiniere_all",
// "kitiniere",
+
+"undernexus_all",
+// "undernexus",
+
//ace kitiniere+tcm "corrupted_moor_all",
};
diff --git a/ryzom/server/tools/cfg_creator/templates/ai_service_default.cfg b/ryzom/server/tools/cfg_creator/templates/ai_service_default.cfg
index cbff847816..f70e7d3732 100644
--- a/ryzom/server/tools/cfg_creator/templates/ai_service_default.cfg
+++ b/ryzom/server/tools/cfg_creator/templates/ai_service_default.cfg
@@ -301,6 +301,14 @@ StartCommandsWhenMirrorReadyKitiniere =
"loadMapsFromCommon kitiniere_all",
};
+// commands for Undernexus continent
+StartCommandsWhenMirrorReadyUndernexus =
+{
+ "loadContinent undernexus",
+ "createStaticAIInstance undernexus",
+ "loadMapsFromCommon undernexus_all",
+};
+
// commands for R2 continent
StartCommandsWhenMirrorReadyR2Desert =
{
diff --git a/ryzom/server/tools/cfg_creator/templates/entities_game_service.cfg b/ryzom/server/tools/cfg_creator/templates/entities_game_service.cfg
index 0db0cca11b..463e2dd3b7 100644
--- a/ryzom/server/tools/cfg_creator/templates/entities_game_service.cfg
+++ b/ryzom/server/tools/cfg_creator/templates/entities_game_service.cfg
@@ -150,6 +150,8 @@ UsedPrimitives =
// "bagne_the_abyss_of_ichor",
"kitiniere_all",
+"undernexus_all",
+
// "kitiniere",
//ace kitiniere+tcm "corrupted_moor_all",
"r2_desert_all",
@@ -189,6 +191,9 @@ DontUseSU = 0;
// Set this shard as a ring (1) or mainland (0) shard (main behavior switch)
IsRingShard = 0;
+IsDevShard = #DEV_SHARD#;
+
+
// Set a mainland SessionId.
// Live: Must be 0 for ring shards, non-zero (usually ShardId) for mainland shards
// Dev: Can be non-zero to initially connect a client to a ring shard
diff --git a/ryzom/server/tools/cfg_creator/templates/entities_game_service_default.cfg b/ryzom/server/tools/cfg_creator/templates/entities_game_service_default.cfg
index 2dddc223a5..70e5fc47bc 100644
--- a/ryzom/server/tools/cfg_creator/templates/entities_game_service_default.cfg
+++ b/ryzom/server/tools/cfg_creator/templates/entities_game_service_default.cfg
@@ -1416,7 +1416,7 @@ OutpostEditingConcurrencyCheckDelay = 50;
// Period in seconds between 2 updates of outpost timers on clients
OutpostClientTimersUpdatePeriod = 60;
// Number of rounds in an outpost fight
-OutpostFightRoundCount = 24;
+OutpostFightRoundCount = 12;
// Number of rounds in an outpost (in test) fight
OutpostInTestFightRoundCount = 11;
// Coef for squad count per round at outpost in test
diff --git a/ryzom/server/tools/cfg_creator/templates/frontend_service_default.cfg b/ryzom/server/tools/cfg_creator/templates/frontend_service_default.cfg
index b876829067..11ef9c1813 100644
--- a/ryzom/server/tools/cfg_creator/templates/frontend_service_default.cfg
+++ b/ryzom/server/tools/cfg_creator/templates/frontend_service_default.cfg
@@ -32,7 +32,7 @@ LimboTimeOut = 60000; // 1 min
TotalBandwidth = 536870911; // <512 MB : max value for 32 bit bitsize !
// Maximum bytes per game cycle sent to a client, including all headers
-ClientBandwidth = 332 * BandwidthRatio; // 332 <=> 13 kbit/s at 5 Hz; 202 <=> 16 kbit/s at 10 Hz
+ClientBandwidth = 202 * BandwidthRatio; // 332 <=> 13 kbit/s at 5 Hz; 202 <=> 16 kbit/s at 10 Hz
// Maximum bytes for impulsion channels per datagram sent to a client
ImpulsionByteSize0 = 20 * BandwidthRatio;
diff --git a/ryzom/server/tools/cfg_creator/templates/input_output_service.cfg b/ryzom/server/tools/cfg_creator/templates/input_output_service.cfg
index 812de5168b..ce74a86eac 100644
--- a/ryzom/server/tools/cfg_creator/templates/input_output_service.cfg
+++ b/ryzom/server/tools/cfg_creator/templates/input_output_service.cfg
@@ -31,7 +31,7 @@ StartCommands +=
};
Paths += {
- "../language",
+ "../language/translated",
};
// ---- service NeL variables (used by CVariable class)
diff --git a/ryzom/server/tools/cfg_creator/templates/used_continents.cfg b/ryzom/server/tools/cfg_creator/templates/used_continents.cfg
index 86dfbb3507..2e351ac71d 100644
--- a/ryzom/server/tools/cfg_creator/templates/used_continents.cfg
+++ b/ryzom/server/tools/cfg_creator/templates/used_continents.cfg
@@ -35,6 +35,7 @@ UsedContinents =
"r2_forest", "23",
"r2_lakes", "24",
"r2_jungle", "25",
- "r2_roots", "26"
+ "r2_roots", "26",
+ "undernexus", "27"
//ace kitiniere+tcm "corrupted_moor", "22"
};
From db8f9cd832d20cc13f71054862b2ab235e89c7c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Tue, 4 Jul 2023 16:50:27 +0100
Subject: [PATCH 054/194] Fix Rp Items
---
ryzom/client/src/player_cl.cpp | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/ryzom/client/src/player_cl.cpp b/ryzom/client/src/player_cl.cpp
index cbd8928987..7437682798 100644
--- a/ryzom/client/src/player_cl.cpp
+++ b/ryzom/client/src/player_cl.cpp
@@ -486,7 +486,7 @@ void CPlayerCL::equip(SLOTTYPE::EVisualSlot slot, const std::string &shapeName,
break;
case SLOTTYPE::LEFT_HAND_SLOT:
- if(_Items[slot].Sheet && _Items[slot].Sheet->getAnimSet()=="s")
+ if((_Items[slot].Sheet && _Items[slot].Sheet->getAnimSet() == "s") || (item && item->getAnimSet() == "s"))
stickPoint = "Box_bouclier";
else
stickPoint = "box_arme_gauche";
@@ -853,13 +853,11 @@ void CPlayerCL::updateVisualPropertyVpa(const NLMISC::TGameCycle &/* gameCycle *
else
{
// No Valid item in the right hand.
-
SLOTTYPE::EVisualSlot slot = SLOTTYPE::RIGHT_HAND_SLOT;
rightHandTag = getTag(5);
if (!rightHandTag.empty() && rightHandTag != "_")
{
- fakeRightHand = SheetMngr.getVSIndex("stake.sitem", slot);
- const CItemSheet *itemSheet = SheetMngr.getItem(slot, (uint)fakeRightHand);
+
vector tagInfos;
splitString(rightHandTag, string("|"), tagInfos);
UInstance instance;
@@ -872,16 +870,18 @@ void CPlayerCL::updateVisualPropertyVpa(const NLMISC::TGameCycle &/* gameCycle *
tagInfos[0] = SheetMngr.getRpItem(itemNameId);
}
- if (tagInfos.size() == 2)
+ if (tagInfos.size() >= 3 && tagInfos[2] == "2H")
+ fakeRightHand = SheetMngr.getVSIndex("ic_candy_stick.sitem", slot);
+ else
+ fakeRightHand = SheetMngr.getVSIndex("stake.sitem", slot);
+
+ const CItemSheet *itemSheet = SheetMngr.getItem(slot, (uint)fakeRightHand);
+
+ if (tagInfos.size() >= 2)
{
sint instTexture;
fromString(tagInfos[1], instTexture);
- equip(slot, tagInfos[0], itemSheet);
equip(slot, tagInfos[0], itemSheet, instTexture);
- /*UInstance pInst = _Instances[slot].createLoadingFromCurrent();
- if(!pInst.empty())
- pInst.selectTextureSet(instTexture);
- _Instances[slot].TextureSet = instTexture;*/
}
else
{
@@ -929,7 +929,8 @@ void CPlayerCL::updateVisualPropertyVpa(const NLMISC::TGameCycle &/* gameCycle *
tagInfos[0] = SheetMngr.getRpItem(itemNameId);
}
- if (tagInfos.size() == 3 && tagInfos[2] == ")")
+
+ if (tagInfos.size() >= 3 && tagInfos[2] == "S")
fakeLeftHand = SheetMngr.getVSIndex("icbss_pvp.sitem", slot);
else
fakeLeftHand = SheetMngr.getVSIndex("icfm1pd.sitem", slot);
@@ -941,8 +942,6 @@ void CPlayerCL::updateVisualPropertyVpa(const NLMISC::TGameCycle &/* gameCycle *
sint instTexture;
fromString(tagInfos[1], instTexture);
equip(slot, tagInfos[0], itemSheet, instTexture);
- //_Instances[slot].selectTextureSet(instTexture);
- //_Instances[slot].TextureSet = instTexture;
}
else
{
From 29badb25895a3996c9a650faedf5419ab0f0219f Mon Sep 17 00:00:00 2001
From: Nuno
Date: Wed, 14 Jun 2023 14:39:39 +0200
Subject: [PATCH 055/194] Merge branch '138-toggle-free-look-with-hotkey' into
main/gingo-test
---
.../client/data/gamedev/interfaces_v3/actions.xml | 1 +
ryzom/client/data/gamedev/interfaces_v3/keys.xml | 1 +
.../data/gamedev/interfaces_v3/keys_r2ed.xml | 1 +
.../src/interface_v3/action_handler_game.cpp | 14 ++++++++++++++
ryzom/client/src/motion/user_controls.h | 2 ++
5 files changed, 19 insertions(+)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/actions.xml b/ryzom/client/data/gamedev/interfaces_v3/actions.xml
index 0a00cb0f64..194434a839 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/actions.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/actions.xml
@@ -417,6 +417,7 @@
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/keys.xml b/ryzom/client/data/gamedev/interfaces_v3/keys.xml
index 677854a9ef..60d219ddb2 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/keys.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/keys.xml
@@ -36,6 +36,7 @@
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml b/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml
index 65c7603cd2..b7ecb65519 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml
@@ -37,6 +37,7 @@
+
diff --git a/ryzom/client/src/interface_v3/action_handler_game.cpp b/ryzom/client/src/interface_v3/action_handler_game.cpp
index eeb92888db..790c8b13d1 100644
--- a/ryzom/client/src/interface_v3/action_handler_game.cpp
+++ b/ryzom/client/src/interface_v3/action_handler_game.cpp
@@ -860,6 +860,20 @@ class CHandlerContextFreeLook : public IActionHandler
};
REGISTER_ACTION_HANDLER( CHandlerContextFreeLook, "context_free_look");
+// ***************************************************************************
+class CHandlerToggleFreeLook : public IActionHandler
+{
+public:
+ void execute(CCtrlBase * /* pCaller */, const std::string & /* sParams */)
+ {
+ if (UserControls.getFreeLook())
+ UserControls.stopFreeLook();
+ else
+ UserControls.startFreeLook();
+ }
+};
+REGISTER_ACTION_HANDLER( CHandlerToggleFreeLook, "toggle_free_look");
+
// ***************************************************************************
// GCM Move
// ***************************************************************************
diff --git a/ryzom/client/src/motion/user_controls.h b/ryzom/client/src/motion/user_controls.h
index 1ceabd8d9c..7f09ef7f29 100644
--- a/ryzom/client/src/motion/user_controls.h
+++ b/ryzom/client/src/motion/user_controls.h
@@ -179,6 +179,8 @@ class CUserControls
/// Stop Free Look (can be called multiple times if needed). Additionaly, the mouse/pointer is restored
void stopFreeLook();
+ bool getFreeLook() const { return _FreeLook; }
+
/// Is the camera inside the character.
bool isInternalView() {return _InternalView;}
From 26054bafc2c72bab539c71921f5d422429826786 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Wed, 14 Jun 2023 14:39:28 +0200
Subject: [PATCH 056/194] Merge branch
'158-allow-macro-keybind-to-be-unassigned' into main/gingo-test
---
.../data/gamedev/interfaces_v3/macros.xml | 1 +
.../src/interface_v3/macrocmd_manager.cpp | 38 +++++++++++++++++++
.../src/interface_v3/macrocmd_manager.h | 2 +
3 files changed, 41 insertions(+)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/macros.xml b/ryzom/client/data/gamedev/interfaces_v3/macros.xml
index d14e6e8886..297a94980d 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/macros.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/macros.xml
@@ -238,6 +238,7 @@
+
diff --git a/ryzom/client/src/interface_v3/macrocmd_manager.cpp b/ryzom/client/src/interface_v3/macrocmd_manager.cpp
index f942ae7e1d..f19bd71d52 100644
--- a/ryzom/client/src/interface_v3/macrocmd_manager.cpp
+++ b/ryzom/client/src/interface_v3/macrocmd_manager.cpp
@@ -162,6 +162,12 @@ void CMacroCmd::moveDownCommand (uint cmdNb)
Commands[cmdNb+1] = c;
}
+// ------------------------------------------------------------------------------------------------
+void CMacroCmd::unassignCombo()
+{
+ Combo.Key = KeyCount;
+ Combo.KeyButtons = noKeyButton;
+}
// ------------------------------------------------------------------------------------------------
// CMacroCmdManager
@@ -304,6 +310,19 @@ void CMacroCmdManager::delMacro(sint32 nMacNb)
addActionManagerEntries();
}
+void CMacroCmdManager::unassignMacro(size_t nMacNb)
+{
+ if (nMacNb >= _Macros.size())
+ {
+ nlwarning("unassign called on out-of-bounds index %lu, (size %lu)", nMacNb, _Macros.size());
+ return;
+ }
+
+ delActionManagerEntries();
+ _Macros[nMacNb].unassignCombo();
+ addActionManagerEntries();
+}
+
// ------------------------------------------------------------------------------------------------
// Refresh key association that can be changed in another place than in macro container
void CMacroCmdManager::refreshMacroCombo()
@@ -1128,6 +1147,25 @@ class CHandlerMacrosCopy : public IActionHandler
};
REGISTER_ACTION_HANDLER( CHandlerMacrosCopy, "macros_copy");
+
+// ***************************************************************************
+// Called from context menu on a macro
+class CHandlerMacrosUnassign : public IActionHandler
+{
+public:
+ virtual void execute(CCtrlBase *pCaller, const string &/* Params */)
+ {
+ sint nMacNb = getMacroFromId(pCaller->getId());
+ if (nMacNb < 0) return;
+
+ CMacroCmdManager::getInstance()->unassignMacro(nMacNb);
+ // update keybinding in macros list without calling runActionHandler("macros_open", NULL)
+ CViewText *pVT = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(pCaller->getId() + ":" + TEMPLATE_MACRO_ELT_KEYTEXT));
+ if (pVT) pVT->setText(CI18N::get(VIEW_EDITCMD_TEXT_KEY_DEFAULT));
+ }
+};
+REGISTER_ACTION_HANDLER( CHandlerMacrosUnassign, "macros_unassign");
+
// ***************************************************************************
// Called from context menu on a macro
class CHandlerMacrosDel : public IActionHandler
diff --git a/ryzom/client/src/interface_v3/macrocmd_manager.h b/ryzom/client/src/interface_v3/macrocmd_manager.h
index 0bc2eec03c..dfe59b67b7 100644
--- a/ryzom/client/src/interface_v3/macrocmd_manager.h
+++ b/ryzom/client/src/interface_v3/macrocmd_manager.h
@@ -78,6 +78,7 @@ class CMacroCmd
void delCommand (uint cmdNb);
void moveUpCommand (uint cmdNb);
void moveDownCommand (uint cmdNb);
+ void unassignCombo();
void writeTo (xmlNodePtr node) const;
bool readFrom (xmlNodePtr node);
@@ -104,6 +105,7 @@ class CMacroCmdManager
const std::vector &getMacros() { return _Macros; }
void addMacro (const CMacroCmd &m, sint32 nPos=-1);
void delMacro(sint32 nMacNb);
+ void unassignMacro(size_t nMacNb);
void removeAllMacros();
void refreshMacroCombo();
From 92687652447c66f2b394a1b3d2bc874d28d45739 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Wed, 14 Jun 2023 14:39:14 +0200
Subject: [PATCH 057/194] Merge branch
'164-crash-on-patching-and-possibly-right-after-login' into main/gingo-test
---
azure-pipelines.yml | 7 +++++++
ryzom/client/src/login_patch.cpp | 16 ++++++++--------
ryzom/client/src/user_entity.cpp | 1 +
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 9c735531ba..e42680e060 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -1,3 +1,10 @@
+trigger:
+ branches:
+ include:
+ - core4
+ - feature/*
+ - main/atys-live
+
jobs:
- job: ubuntu18
timeoutInMinutes: 120
diff --git a/ryzom/client/src/login_patch.cpp b/ryzom/client/src/login_patch.cpp
index 82665aac1d..b97d410bef 100644
--- a/ryzom/client/src/login_patch.cpp
+++ b/ryzom/client/src/login_patch.cpp
@@ -533,6 +533,8 @@ void CPatchManager::getInfoToDisp(SPatchInfo &piOut)
}
}
+void stopSoundMngr();
+
// ****************************************************************************
// TODO : use selected categories to patch a list of files
void CPatchManager::startPatchThread(const vector &CategoriesSelected, bool applyPatch)
@@ -623,6 +625,12 @@ void CPatchManager::startPatchThread(const vector &CategoriesSelected, b
// Close opened big files
CBigFile::getInstance().remove(FilesToPatch[k].FileName);
+
+ if (NLMISC::startsWith(FilesToPatch[k].FileName, "sound"))
+ {
+ // Stop sound playback
+ stopSoundMngr();
+ }
}
}
}
@@ -2605,8 +2613,6 @@ class CPatchThreadDownloadProgress : public NLMISC::IProgressCallback
}
};
-void stopSoundMngr();
-
// ****************************************************************************
void CPatchThread::processFile (CPatchManager::SFileToPatch &rFTP)
{
@@ -2618,12 +2624,6 @@ void CPatchThread::processFile (CPatchManager::SFileToPatch &rFTP)
// Destination File Name (in writable directory)
string DestinationName;
- if (NLMISC::startsWith(rFTP.FileName, "sound"))
- {
- // Stop sound playback
- stopSoundMngr();
- }
-
if (rFTP.ExtractPath.empty())
{
DestinationName = pPM->WritableClientDataPath + rFTP.FileName;
diff --git a/ryzom/client/src/user_entity.cpp b/ryzom/client/src/user_entity.cpp
index 0077b2bc46..9ec59f6fb1 100644
--- a/ryzom/client/src/user_entity.cpp
+++ b/ryzom/client/src/user_entity.cpp
@@ -194,6 +194,7 @@ CUserEntity::CUserEntity()
_R2CharMode= R2::TCharMode::Player;
+ _CameraMoves = NLMISC::CVector(0, 0, 0);
}// CUserEntity //
From 4ca2bd14740e8f7e11719bfb778adaf182019ffd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Tue, 4 Jul 2023 20:03:22 +0100
Subject: [PATCH 058/194] New lua versions
---
.../interfaces_v3/check_lua_versions.lua | 38 +++++++++++++++++++
.../client/data/gamedev/interfaces_v3/map.lua | 2 +-
.../data/gamedev/interfaces_v3/player.lua | 2 +-
.../data/gamedev/interfaces_v3/sceneedit.lua | 2 +-
4 files changed, 41 insertions(+), 3 deletions(-)
create mode 100644 ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
diff --git a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
new file mode 100644
index 0000000000..4ff1d4d75a
--- /dev/null
+++ b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
@@ -0,0 +1,38 @@
+local all_good_versions = true
+if RYZOM_APPZONE_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_ARK_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_ARK_LESSONS_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_BG_DOWNLOADER_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_BOT_CHAT_V4_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_CHECK_LUA_VERSIONS_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_COMPASS_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_GAME_CONFIG_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_GAME_R2_LOADING_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_GUILD_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_HELP_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_INFO_PLAYER_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_INTERACTION_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_INVENTORY_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_JSON_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_MAP_VERSION ~= 328 then all_good_versions = false end
+if RYZOM_MISC_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_NAMES_FYROS_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_NAMES_MATIS_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_NAMES_TRYKER_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_NAMES_ZORAI_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_OUT_V2_APPEAR_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_OUT_V2_SELECT_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_OUTPOST_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_PLAYER_VERSION ~= 328 then all_good_versions = false end
+if RYZOM_PLAYER_TRADE_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_RING_ACCESS_POINT_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_RING_ACCESS_POINT_FILTER_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_RING_WINDOW_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_RYZHOME_TOOLBAR_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_SCENEEDIT_VERSION ~= 328 then all_good_versions = false end
+if RYZOM_TASKBAR_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_TP_INTERFACE_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_WEB_QUEUE_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_WEBBROWSER_VERSION ~= 324 then all_good_versions = false end
+if RYZOM_WEBIG_VERSION ~= 324 then all_good_versions = false end
+if not all_good_versions then broadcastBadLuaVersions() end
diff --git a/ryzom/client/data/gamedev/interfaces_v3/map.lua b/ryzom/client/data/gamedev/interfaces_v3/map.lua
index 6b731a64c2..b9d321ae63 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/map.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/map.lua
@@ -274,4 +274,4 @@ game:addMapArkPoint("Vip", 4154, -3305, "vip_allegory", "", "allegory_16.tga", "
-- game:setAltMap("fyros_map.tga", "fyros_map_sp.tga")
-- VERSION --
-RYZOM_MAP_VERSION = 324
+RYZOM_MAP_VERSION = 328
diff --git a/ryzom/client/data/gamedev/interfaces_v3/player.lua b/ryzom/client/data/gamedev/interfaces_v3/player.lua
index 6efbc1a6fe..c662b6edbf 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/player.lua
@@ -1065,4 +1065,4 @@ function game:fixVpx(vpx)
end
-- VERSION --
-RYZOM_PLAYER_VERSION = 324
+RYZOM_PLAYER_VERSION = 328
diff --git a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
index 739977e57a..f3a2e967e0 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
@@ -670,4 +670,4 @@ end
-- VERSION --
-RYZOM_SCENEEDIT_VERSION = 324
+RYZOM_SCENEEDIT_VERSION = 328
From e6060173af9717f7d636d55bc530b05940d5778e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Meelis=20M=C3=A4gi?=
Date: Wed, 5 Jul 2023 10:49:44 +0000
Subject: [PATCH 059/194] Resolve "Toggle Free Look with Hotkey"
---
.../client/data/gamedev/interfaces_v3/actions.xml | 1 +
ryzom/client/data/gamedev/interfaces_v3/keys.xml | 1 +
.../data/gamedev/interfaces_v3/keys_r2ed.xml | 1 +
.../src/interface_v3/action_handler_game.cpp | 14 ++++++++++++++
ryzom/client/src/motion/user_controls.h | 2 ++
5 files changed, 19 insertions(+)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/actions.xml b/ryzom/client/data/gamedev/interfaces_v3/actions.xml
index 0a00cb0f64..194434a839 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/actions.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/actions.xml
@@ -417,6 +417,7 @@
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/keys.xml b/ryzom/client/data/gamedev/interfaces_v3/keys.xml
index 677854a9ef..60d219ddb2 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/keys.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/keys.xml
@@ -36,6 +36,7 @@
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml b/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml
index 65c7603cd2..b7ecb65519 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/keys_r2ed.xml
@@ -37,6 +37,7 @@
+
diff --git a/ryzom/client/src/interface_v3/action_handler_game.cpp b/ryzom/client/src/interface_v3/action_handler_game.cpp
index 8c8c56e34e..15851758db 100644
--- a/ryzom/client/src/interface_v3/action_handler_game.cpp
+++ b/ryzom/client/src/interface_v3/action_handler_game.cpp
@@ -860,6 +860,20 @@ class CHandlerContextFreeLook : public IActionHandler
};
REGISTER_ACTION_HANDLER( CHandlerContextFreeLook, "context_free_look");
+// ***************************************************************************
+class CHandlerToggleFreeLook : public IActionHandler
+{
+public:
+ void execute(CCtrlBase * /* pCaller */, const std::string & /* sParams */)
+ {
+ if (UserControls.getFreeLook())
+ UserControls.stopFreeLook();
+ else
+ UserControls.startFreeLook();
+ }
+};
+REGISTER_ACTION_HANDLER( CHandlerToggleFreeLook, "toggle_free_look");
+
// ***************************************************************************
// GCM Move
// ***************************************************************************
diff --git a/ryzom/client/src/motion/user_controls.h b/ryzom/client/src/motion/user_controls.h
index 1ceabd8d9c..7f09ef7f29 100644
--- a/ryzom/client/src/motion/user_controls.h
+++ b/ryzom/client/src/motion/user_controls.h
@@ -179,6 +179,8 @@ class CUserControls
/// Stop Free Look (can be called multiple times if needed). Additionaly, the mouse/pointer is restored
void stopFreeLook();
+ bool getFreeLook() const { return _FreeLook; }
+
/// Is the camera inside the character.
bool isInternalView() {return _InternalView;}
From 4dbbed0342965914b73846f9933a4a1d1d13ba8e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Meelis=20M=C3=A4gi?=
Date: Wed, 5 Jul 2023 10:49:58 +0000
Subject: [PATCH 060/194] Resolve "Allow macro keybind to be unassigned"
---
.../data/gamedev/interfaces_v3/macros.xml | 1 +
.../src/interface_v3/macrocmd_manager.cpp | 38 +++++++++++++++++++
.../src/interface_v3/macrocmd_manager.h | 2 +
3 files changed, 41 insertions(+)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/macros.xml b/ryzom/client/data/gamedev/interfaces_v3/macros.xml
index d14e6e8886..297a94980d 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/macros.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/macros.xml
@@ -238,6 +238,7 @@
+
diff --git a/ryzom/client/src/interface_v3/macrocmd_manager.cpp b/ryzom/client/src/interface_v3/macrocmd_manager.cpp
index f942ae7e1d..f19bd71d52 100644
--- a/ryzom/client/src/interface_v3/macrocmd_manager.cpp
+++ b/ryzom/client/src/interface_v3/macrocmd_manager.cpp
@@ -162,6 +162,12 @@ void CMacroCmd::moveDownCommand (uint cmdNb)
Commands[cmdNb+1] = c;
}
+// ------------------------------------------------------------------------------------------------
+void CMacroCmd::unassignCombo()
+{
+ Combo.Key = KeyCount;
+ Combo.KeyButtons = noKeyButton;
+}
// ------------------------------------------------------------------------------------------------
// CMacroCmdManager
@@ -304,6 +310,19 @@ void CMacroCmdManager::delMacro(sint32 nMacNb)
addActionManagerEntries();
}
+void CMacroCmdManager::unassignMacro(size_t nMacNb)
+{
+ if (nMacNb >= _Macros.size())
+ {
+ nlwarning("unassign called on out-of-bounds index %lu, (size %lu)", nMacNb, _Macros.size());
+ return;
+ }
+
+ delActionManagerEntries();
+ _Macros[nMacNb].unassignCombo();
+ addActionManagerEntries();
+}
+
// ------------------------------------------------------------------------------------------------
// Refresh key association that can be changed in another place than in macro container
void CMacroCmdManager::refreshMacroCombo()
@@ -1128,6 +1147,25 @@ class CHandlerMacrosCopy : public IActionHandler
};
REGISTER_ACTION_HANDLER( CHandlerMacrosCopy, "macros_copy");
+
+// ***************************************************************************
+// Called from context menu on a macro
+class CHandlerMacrosUnassign : public IActionHandler
+{
+public:
+ virtual void execute(CCtrlBase *pCaller, const string &/* Params */)
+ {
+ sint nMacNb = getMacroFromId(pCaller->getId());
+ if (nMacNb < 0) return;
+
+ CMacroCmdManager::getInstance()->unassignMacro(nMacNb);
+ // update keybinding in macros list without calling runActionHandler("macros_open", NULL)
+ CViewText *pVT = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(pCaller->getId() + ":" + TEMPLATE_MACRO_ELT_KEYTEXT));
+ if (pVT) pVT->setText(CI18N::get(VIEW_EDITCMD_TEXT_KEY_DEFAULT));
+ }
+};
+REGISTER_ACTION_HANDLER( CHandlerMacrosUnassign, "macros_unassign");
+
// ***************************************************************************
// Called from context menu on a macro
class CHandlerMacrosDel : public IActionHandler
diff --git a/ryzom/client/src/interface_v3/macrocmd_manager.h b/ryzom/client/src/interface_v3/macrocmd_manager.h
index 0bc2eec03c..dfe59b67b7 100644
--- a/ryzom/client/src/interface_v3/macrocmd_manager.h
+++ b/ryzom/client/src/interface_v3/macrocmd_manager.h
@@ -78,6 +78,7 @@ class CMacroCmd
void delCommand (uint cmdNb);
void moveUpCommand (uint cmdNb);
void moveDownCommand (uint cmdNb);
+ void unassignCombo();
void writeTo (xmlNodePtr node) const;
bool readFrom (xmlNodePtr node);
@@ -104,6 +105,7 @@ class CMacroCmdManager
const std::vector &getMacros() { return _Macros; }
void addMacro (const CMacroCmd &m, sint32 nPos=-1);
void delMacro(sint32 nMacNb);
+ void unassignMacro(size_t nMacNb);
void removeAllMacros();
void refreshMacroCombo();
From e7ad07346cf279a02f62319fc984f0d5e5a2da77 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Meelis=20M=C3=A4gi?=
Date: Wed, 5 Jul 2023 10:50:08 +0000
Subject: [PATCH 061/194] Resolve "Crash on patching and (possibly) right after
login"
---
azure-pipelines.yml | 7 +++++++
ryzom/client/src/login_patch.cpp | 16 ++++++++--------
ryzom/client/src/user_entity.cpp | 1 +
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 9c735531ba..e42680e060 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -1,3 +1,10 @@
+trigger:
+ branches:
+ include:
+ - core4
+ - feature/*
+ - main/atys-live
+
jobs:
- job: ubuntu18
timeoutInMinutes: 120
diff --git a/ryzom/client/src/login_patch.cpp b/ryzom/client/src/login_patch.cpp
index 82665aac1d..b97d410bef 100644
--- a/ryzom/client/src/login_patch.cpp
+++ b/ryzom/client/src/login_patch.cpp
@@ -533,6 +533,8 @@ void CPatchManager::getInfoToDisp(SPatchInfo &piOut)
}
}
+void stopSoundMngr();
+
// ****************************************************************************
// TODO : use selected categories to patch a list of files
void CPatchManager::startPatchThread(const vector &CategoriesSelected, bool applyPatch)
@@ -623,6 +625,12 @@ void CPatchManager::startPatchThread(const vector &CategoriesSelected, b
// Close opened big files
CBigFile::getInstance().remove(FilesToPatch[k].FileName);
+
+ if (NLMISC::startsWith(FilesToPatch[k].FileName, "sound"))
+ {
+ // Stop sound playback
+ stopSoundMngr();
+ }
}
}
}
@@ -2605,8 +2613,6 @@ class CPatchThreadDownloadProgress : public NLMISC::IProgressCallback
}
};
-void stopSoundMngr();
-
// ****************************************************************************
void CPatchThread::processFile (CPatchManager::SFileToPatch &rFTP)
{
@@ -2618,12 +2624,6 @@ void CPatchThread::processFile (CPatchManager::SFileToPatch &rFTP)
// Destination File Name (in writable directory)
string DestinationName;
- if (NLMISC::startsWith(rFTP.FileName, "sound"))
- {
- // Stop sound playback
- stopSoundMngr();
- }
-
if (rFTP.ExtractPath.empty())
{
DestinationName = pPM->WritableClientDataPath + rFTP.FileName;
diff --git a/ryzom/client/src/user_entity.cpp b/ryzom/client/src/user_entity.cpp
index 0077b2bc46..9ec59f6fb1 100644
--- a/ryzom/client/src/user_entity.cpp
+++ b/ryzom/client/src/user_entity.cpp
@@ -194,6 +194,7 @@ CUserEntity::CUserEntity()
_R2CharMode= R2::TCharMode::Player;
+ _CameraMoves = NLMISC::CVector(0, 0, 0);
}// CUserEntity //
From f3bf0f4be0e221607b772ce87549d0962bdc5850 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Wed, 5 Jul 2023 12:09:47 +0100
Subject: [PATCH 062/194] Update
---
.../interfaces_v3/check_lua_versions.lua | 73 +++++++++----------
1 file changed, 36 insertions(+), 37 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
index 4ff1d4d75a..b3399d95bc 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
@@ -1,38 +1,37 @@
-local all_good_versions = true
-if RYZOM_APPZONE_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_ARK_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_ARK_LESSONS_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_BG_DOWNLOADER_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_BOT_CHAT_V4_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_CHECK_LUA_VERSIONS_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_COMPASS_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_GAME_CONFIG_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_GAME_R2_LOADING_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_GUILD_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_HELP_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_INFO_PLAYER_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_INTERACTION_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_INVENTORY_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_JSON_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_MAP_VERSION ~= 328 then all_good_versions = false end
-if RYZOM_MISC_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_NAMES_FYROS_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_NAMES_MATIS_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_NAMES_TRYKER_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_NAMES_ZORAI_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_OUT_V2_APPEAR_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_OUT_V2_SELECT_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_OUTPOST_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_PLAYER_VERSION ~= 328 then all_good_versions = false end
-if RYZOM_PLAYER_TRADE_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_RING_ACCESS_POINT_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_RING_ACCESS_POINT_FILTER_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_RING_WINDOW_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_RYZHOME_TOOLBAR_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_SCENEEDIT_VERSION ~= 328 then all_good_versions = false end
-if RYZOM_TASKBAR_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_TP_INTERFACE_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_WEB_QUEUE_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_WEBBROWSER_VERSION ~= 324 then all_good_versions = false end
-if RYZOM_WEBIG_VERSION ~= 324 then all_good_versions = false end
+local ryzom_have_all_good_version = true
+if RYZOM_APPZONE_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_APPZONE_VERSION, 324, "appzone") end
+if RYZOM_ARK_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_ARK_VERSION, 324, "ark") end
+if RYZOM_ARK_LESSONS_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_ARK_LESSONS_VERSION, 324, "ark_lessons") end
+if RYZOM_BG_DOWNLOADER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_BG_DOWNLOADER_VERSION, 324, "bg_downloader") end
+if RYZOM_BOT_CHAT_V4_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_BOT_CHAT_V4_VERSION, 324, "bot_chat_v4") end
+if RYZOM_COMPASS_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_COMPASS_VERSION, 324, "compass") end
+if RYZOM_GAME_CONFIG_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_GAME_CONFIG_VERSION, 324, "game_config") end
+if RYZOM_GAME_R2_LOADING_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_GAME_R2_LOADING_VERSION, 324, "game_r2_loading") end
+if RYZOM_GUILD_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_GUILD_VERSION, 324, "guild") end
+if RYZOM_HELP_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_HELP_VERSION, 324, "help") end
+if RYZOM_INFO_PLAYER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_INFO_PLAYER_VERSION, 324, "info_player") end
+if RYZOM_INTERACTION_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_INTERACTION_VERSION, 324, "interaction") end
+if RYZOM_INVENTORY_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_INVENTORY_VERSION, 324, "inventory") end
+if RYZOM_JSON_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_JSON_VERSION, 324, "json") end
+if RYZOM_MAP_VERSION ~= 328 then broadcastBadLuaVersions(RYZOM_MAP_VERSION, 328, "map") end
+if RYZOM_MISC_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_MISC_VERSION, 324, "misc") end
+if RYZOM_NAMES_FYROS_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_FYROS_VERSION, 324, "names_fyros") end
+if RYZOM_NAMES_MATIS_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_MATIS_VERSION, 324, "names_matis") end
+if RYZOM_NAMES_TRYKER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_TRYKER_VERSION, 324, "names_tryker") end
+if RYZOM_NAMES_ZORAI_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_ZORAI_VERSION, 324, "names_zorai") end
+if RYZOM_OUT_V2_APPEAR_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_APPEAR_VERSION, 324, "out_v2_appear") end
+if RYZOM_OUT_V2_SELECT_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_SELECT_VERSION, 324, "out_v2_select") end
+if RYZOM_OUTPOST_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUTPOST_VERSION, 324, "outpost") end
+if RYZOM_PLAYER_VERSION ~= 328 then broadcastBadLuaVersions(RYZOM_PLAYER_VERSION, 328, "player") end
+if RYZOM_PLAYER_TRADE_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_PLAYER_TRADE_VERSION, 324, "player_trade") end
+if RYZOM_RING_ACCESS_POINT_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_RING_ACCESS_POINT_VERSION, 324, "ring_access_point") end
+if RYZOM_RING_ACCESS_POINT_FILTER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_RING_ACCESS_POINT_FILTER_VERSION, 324, "ring_access_point_filter") end
+if RYZOM_RING_WINDOW_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_RING_WINDOW_VERSION, 324, "ring_window") end
+if RYZOM_RYZHOME_TOOLBAR_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_RYZHOME_TOOLBAR_VERSION, 324, "ryzhome_toolbar") end
+if RYZOM_SCENEEDIT_VERSION ~= 328 then broadcastBadLuaVersions(RYZOM_SCENEEDIT_VERSION, 328, "sceneedit") end
+if RYZOM_TASKBAR_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_TASKBAR_VERSION, 324, "taskbar") end
+if RYZOM_TP_INTERFACE_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_TP_INTERFACE_VERSION, 324, "tp_interface") end
+if RYZOM_WEB_QUEUE_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_WEB_QUEUE_VERSION, 324, "web_queue") end
+if RYZOM_WEBBROWSER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_WEBBROWSER_VERSION, 324, "webbrowser") end
+if RYZOM_WEBIG_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_WEBIG_VERSION, 324, "webig") end
if not all_good_versions then broadcastBadLuaVersions() end
From a9e8be1dfcc6d9ceed914a2908f7b7ad92b28816 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Wed, 12 Jul 2023 12:06:26 +0100
Subject: [PATCH 063/194] Fix checkRpItemsPosition
---
.../gamedev/interfaces_v3/interaction.lua | 25 ++++++++++++-------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
index 8a281d924d..558904e819 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
@@ -268,7 +268,7 @@ function game:addRequireRpItemsPosition(x, y, id)
end
function game:addRequireRpItems(left, target, mode, id)
- game.wantedRpTargets[left..":"..target..":"..mode] = id
+ game.wantedRpTargets[left..":"..target..":"..mode..":"..id] = id
end
game.usedRpLeftItem = "_"
@@ -300,16 +300,21 @@ function game:updateRpItems()
mode = tostring(getTargetMode())
end
+ game:checkRpItemsPosition()
local html = getUI("ui:interface:rpitems_actions"):find("html")
for k, v in pairs(game.wantedRpTargets) do
local a = html:find("action"..v)
if a then
- if string.find(left..":"..target..":"..mode, k) or string.find(left..":"..target..":*", k) then
- a:find("but").frozen = false
+ if a:find("but").onclick_l == "lua" and (string.find(k, left..":"..target..":"..mode) or string.find(k, left..":"..target..":")) then
+ a:find("img").texture = "grey_0.tga"
+ a:find("but").onclick_l = "lua"
+ a:find("but").alpha = 255
a:find("text").alpha = 255
else
- a:find("but").frozen = true
- a:find("text").alpha = 155
+ a:find("img").texture = "r2ed_toolbar_lock_small.tga"
+ a:find("but").onclick_l = ""
+ a:find("but").alpha = 150
+ a:find("text").alpha = 100
end
end
end
@@ -325,11 +330,13 @@ function game:checkRpItemsPosition()
local a = html:find("action"..v)
if a then
if string.find(sx..":"..sy, k) then
- a:find("but").frozen = false
+ a:find("but").onclick_l = "lua"
+ a:find("img").texture = "grey_0.tga"
a:find("text").alpha = 255
else
- a:find("but").frozen = true
- a:find("text").alpha = 155
+ a:find("but").onclick_l = "proc"
+ a:find("img").texture = "r2ed_toolbar_lock_small.tga"
+ a:find("text").alpha = 200
end
end
end
@@ -1290,4 +1297,4 @@ function arkNpcShop:Buy(id)
end
-- VERSION --
-RYZOM_INTERACTION_VERSION = 324
\ No newline at end of file
+RYZOM_INTERACTION_VERSION = 324
From 4c2d5c518ae24f973be328cd4d388d32b30bc704 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Wed, 12 Jul 2023 12:06:26 +0100
Subject: [PATCH 064/194] Fix checkRpItemsPosition
---
.../gamedev/interfaces_v3/interaction.lua | 25 ++++++++++++-------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
index 8a281d924d..558904e819 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
@@ -268,7 +268,7 @@ function game:addRequireRpItemsPosition(x, y, id)
end
function game:addRequireRpItems(left, target, mode, id)
- game.wantedRpTargets[left..":"..target..":"..mode] = id
+ game.wantedRpTargets[left..":"..target..":"..mode..":"..id] = id
end
game.usedRpLeftItem = "_"
@@ -300,16 +300,21 @@ function game:updateRpItems()
mode = tostring(getTargetMode())
end
+ game:checkRpItemsPosition()
local html = getUI("ui:interface:rpitems_actions"):find("html")
for k, v in pairs(game.wantedRpTargets) do
local a = html:find("action"..v)
if a then
- if string.find(left..":"..target..":"..mode, k) or string.find(left..":"..target..":*", k) then
- a:find("but").frozen = false
+ if a:find("but").onclick_l == "lua" and (string.find(k, left..":"..target..":"..mode) or string.find(k, left..":"..target..":")) then
+ a:find("img").texture = "grey_0.tga"
+ a:find("but").onclick_l = "lua"
+ a:find("but").alpha = 255
a:find("text").alpha = 255
else
- a:find("but").frozen = true
- a:find("text").alpha = 155
+ a:find("img").texture = "r2ed_toolbar_lock_small.tga"
+ a:find("but").onclick_l = ""
+ a:find("but").alpha = 150
+ a:find("text").alpha = 100
end
end
end
@@ -325,11 +330,13 @@ function game:checkRpItemsPosition()
local a = html:find("action"..v)
if a then
if string.find(sx..":"..sy, k) then
- a:find("but").frozen = false
+ a:find("but").onclick_l = "lua"
+ a:find("img").texture = "grey_0.tga"
a:find("text").alpha = 255
else
- a:find("but").frozen = true
- a:find("text").alpha = 155
+ a:find("but").onclick_l = "proc"
+ a:find("img").texture = "r2ed_toolbar_lock_small.tga"
+ a:find("text").alpha = 200
end
end
end
@@ -1290,4 +1297,4 @@ function arkNpcShop:Buy(id)
end
-- VERSION --
-RYZOM_INTERACTION_VERSION = 324
\ No newline at end of file
+RYZOM_INTERACTION_VERSION = 324
From c10d9ae26098b7398e8dc55bfd0477141e3c457c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Wed, 12 Jul 2023 12:07:44 +0100
Subject: [PATCH 065/194] Update checkRpItemsPosition and getTeam
---
.../mission_manager/missions_commands.cpp | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index 1ba303d344..6c3e959714 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -2003,8 +2003,13 @@ NLMISC_COMMAND(slide, "slide to the powo", " x y cell [z] [h]")
}
//----------------------------------------------------------------------------
-NLMISC_COMMAND(getPlayersInPowos, "get list of players in a powo", "")
+NLMISC_COMMAND(getPlayersInPowos, "get list of players in a powo", "[onlyPowoId]")
{
+ sint32 onlyPowoId = 0;
+
+ if (args.size() >= 1)
+ fromString(args[0], onlyPowoId);
+
CPlayerManager::TMapPlayers::const_iterator itPlayer = PlayerManager.getPlayers().begin();
for (; itPlayer != PlayerManager.getPlayers().end(); ++itPlayer)
@@ -2015,7 +2020,7 @@ NLMISC_COMMAND(getPlayersInPowos, "get list of players in a powo", "")
if (player)
{
sint32 powo = player->getPowoCell();
- if (powo != 0)
+ if (powo != 0 && (onlyPowoId == 0 || powo == onlyPowoId))
log.displayNL("%d: %s", powo, player->getName().toString().c_str());
}
}
@@ -3433,6 +3438,9 @@ NLMISC_COMMAND(getTeam, "get the team of a player","")
if (pTeam != NULL)
{
log.displayNL("%d", c->getTeamId());
+ ucstring name = CEntityIdTranslator::getInstance()->getByEntity(pTeam->getLeader());
+ CEntityIdTranslator::removeShardFromName(name);
+ log.displayNL("leader|%s", name.toUtf8().c_str());
for (list::const_iterator it = pTeam->getTeamMembers().begin(); it != pTeam->getTeamMembers().end(); ++it)
{
ucstring name = CEntityIdTranslator::getInstance()->getByEntity((*it));
From b13d4bab5a9d64788e1aa2c0ab5335570f7a4407 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Wed, 12 Jul 2023 12:08:28 +0100
Subject: [PATCH 066/194] Try fix Team members positions when somone leave
---
.../team_manager/team.cpp | 114 +++++++++---------
1 file changed, 57 insertions(+), 57 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/team_manager/team.cpp b/ryzom/server/src/entities_game_service/team_manager/team.cpp
index 13b9a6fe91..52c1617d21 100644
--- a/ryzom/server/src/entities_game_service/team_manager/team.cpp
+++ b/ryzom/server/src/entities_game_service/team_manager/team.cpp
@@ -67,17 +67,17 @@ void CTeam::init( CCharacter* leader, uint16 teamId )
msgout.serial( idGroupe );
msgout.serialEnum( typeGroupe );
sendMessageViaMirror( "IOS", msgout );
-
+
// Add leader to chat group
CMessage msgAdd("ADD_TO_GROUP");
msgAdd.serial( idGroupe );
msgAdd.serial( const_cast (leader->getId()) );
sendMessageViaMirror( "IOS", msgAdd );
-
+
// inform the new team leader
PHRASE_UTILITIES::sendDynamicSystemMessage( leader->getEntityRowId(), "TEAM_CREATE");
//CCharacter::sendMessageToClient(_LeaderId,"OPS_CREATE_TEAM");
-
+
// update leader DB
// leader->_PropertyDatabase.setProp( "USER:TEAM_MEMBER", 1 );
CBankAccessor_PLR::getUSER().setTEAM_MEMBER(leader->_PropertyDatabase, true);
@@ -106,7 +106,7 @@ void CTeam::release()
_RewardSharing->giveAllItems( TheDataset.getDataSetRow( *_TeamMembers.begin()));
}
delete _RewardSharing;
- _RewardSharing = NULL;
+ _RewardSharing = NULL;
}
const uint size = (uint)_Missions.size();
for ( uint i = 0; i < size; i++ )
@@ -177,7 +177,7 @@ void CTeam::addCharacter(CCharacter *newCharacter)
uint8 index = getSuccessorIndex();
CBankAccessor_PLR::getGROUP().setSUCCESSOR_INDEX(newCharacter->_PropertyDatabase, index);
}
-
+
// update all member's DB
// char buffer[256];
uint position = (uint)_TeamMembers.size()-1;
@@ -239,7 +239,7 @@ void CTeam::addCharacter(CCharacter *newCharacter)
hp = (uint8) ( ( float(TeamMembersStatusMaxValue) * ( character->getPhysScores()._PhysicalScores[ SCORES::hit_points ].Current ) ) / ( character->getPhysScores()._PhysicalScores[ SCORES::hit_points ].Max ) );
else
hp = 0;
-
+
if ( character->getPhysScores()._PhysicalScores[ SCORES::sap ].Max != 0)
sap = (uint8) ( ( float(TeamMembersStatusMaxValue) * ( character->getPhysScores()._PhysicalScores[ SCORES::sap ].Current ) ) / ( character->getPhysScores()._PhysicalScores[ SCORES::sap ].Max ) );
else
@@ -257,7 +257,7 @@ void CTeam::addCharacter(CCharacter *newCharacter)
// sprintf(buffer, "GROUP:%d:HP",i );
// newCharacter->_PropertyDatabase.setProp( buffer, hp );
newArrayItem.setHP(newCharacter->_PropertyDatabase, hp);
-
+
// sprintf(buffer, "GROUP:%d:SAP",i );
// newCharacter->_PropertyDatabase.setProp( buffer, sap );
newArrayItem.setSAP(newCharacter->_PropertyDatabase, sap);
@@ -287,7 +287,7 @@ void CTeam::addCharacter(CCharacter *newCharacter)
// insert new member
_TeamMembers.push_back( newCharacter->getId() );
++_NbMembers;
-
+
// set the character team
newCharacter->setTeamId(_TeamId);
@@ -300,7 +300,7 @@ void CTeam::addCharacter(CCharacter *newCharacter)
msgout.serial( idGroupe );
msgout.serial( const_cast (newCharacter->getId()) );
sendMessageViaMirror( "IOS", msgout );
-
+
// send messages to members
SM_STATIC_PARAMS_1(params, STRING_MANAGER::player);
@@ -308,7 +308,7 @@ void CTeam::addCharacter(CCharacter *newCharacter)
//CCharacter::sendMessageToClient(newCharacter->getId(),"OPS_JOIN_TEAM_E",_LeaderId);
params[0].setEId( _LeaderId );
PHRASE_UTILITIES::sendDynamicSystemMessage(newCharacter->getEntityRowId(), "TEAM_YOU_JOIN", params);
-
+
params[0].setEIdAIAlias( newCharacter->getId(), CAIAliasTranslator::getInstance()->getAIAlias( newCharacter->getId()) );
set exclude;
@@ -335,7 +335,7 @@ void CTeam::addCharacter(CCharacter *newCharacter)
string msgName = "OPS_JOIN_TEAM_ACCEPT_E";
CMessage msggroup("STATIC_STRING");
msggroup.serial( groupId );
-
+
msggroup.serialCont( exclude);
msggroup.serial( msgName );
msggroup.serial( const_cast(newCharacter->getId()) );
@@ -414,10 +414,10 @@ void CTeam::removeCharacter( CCharacter * player )
_Missions[0]->onFailure(true);
count++;
}
-
+
// send a message to the last team member
PHRASE_UTILITIES::sendDynamicSystemMessage(TheDataset.getDataSetRow(_TeamMembers.front()), "TEAM_DISOLVED");
-
+
// clear the player DB
clearPlayerTeamDB( *_TeamMembers.begin() );
CCharacter * lastPlayer = PlayerManager.getOnlineChar( *_TeamMembers.begin() );
@@ -440,7 +440,7 @@ void CTeam::removeCharacter( CCharacter * player )
CMessage msgRemoveGroup("REMOVE_GROUP");
msgRemoveGroup.serial( idGroupe );
sendMessageViaMirror( "IOS", msgRemoveGroup );
-
+
// release the team
release();
//remove the team from the manager
@@ -491,11 +491,11 @@ void CTeam::removeCharacter( CCharacter * player )
for (std::list::iterator it2 = _TeamMembers.begin() ; it2 != _TeamMembers.end() ; ++it2)
{
if ( (*it) == (*it2) )
- continue;
+ continue;
CBankAccessor_PLR::TGROUP::TArray &groupItem = CBankAccessor_PLR::getGROUP().getArray(pos);
- CCharacter * ch2 = PlayerManager.getOnlineChar( (*it2) );
+ CCharacter * ch2 = PlayerManager.getOnlineChar( (*it2) );
if (ch2 != NULL)
{
// update new char for old char
@@ -511,22 +511,22 @@ void CTeam::removeCharacter( CCharacter * player )
stamina = (uint8) ( ( float(TeamMembersStatusMaxValue) * ( ch2->getPhysScores()._PhysicalScores[ SCORES::stamina ].Current ) ) / ( ch2->getPhysScores()._PhysicalScores[ SCORES::stamina ].Max ) );
else
stamina = 0;
-
+
CMirrorPropValueRO nameIndexValue( TheDataset, ch2->getId(), "NameIndex" );
nameId = nameIndexValue();
-
+
// sprintf(buffer, "GROUP:%d:HP",pos );
// ch1->_PropertyDatabase.setProp( buffer, hp );
groupItem.setHP(ch1->_PropertyDatabase, hp);
-
+
// sprintf(buffer, "GROUP:%d:SAP",pos );
// ch1->_PropertyDatabase.setProp( buffer, sap );
groupItem.setSAP(ch1->_PropertyDatabase, sap);
-
+
// sprintf(buffer, "GROUP:%d:STA",pos );
// ch1->_PropertyDatabase.setProp( buffer, stamina );
groupItem.setSTA(ch1->_PropertyDatabase, stamina);
-
+
// sprintf(buffer, "GROUP:%d:NAME",pos );
// ch1->_PropertyDatabase.setProp( buffer, nameId );
groupItem.setNAME(ch1->_PropertyDatabase, nameId);
@@ -534,7 +534,7 @@ void CTeam::removeCharacter( CCharacter * player )
// sprintf(buffer, "GROUP:%d:UID",pos );
// ch1->_PropertyDatabase.setProp( buffer, ch2->getEntityRowId().getCompressedIndex() );
groupItem.setUID(ch1->_PropertyDatabase, ch2->getEntityRowId().getCompressedIndex());
-
+
// sprintf(buffer, "GROUP:%d:PRESENT",pos );
// ch1->_PropertyDatabase.setProp( buffer, (uint8)1 );
groupItem.setPRESENT(ch1->_PropertyDatabase, true);
@@ -560,12 +560,12 @@ void CTeam::removeCharacter( CCharacter * player )
_RewardSharing->resetCandidates(this);
// update positions
- updateMembersPositions();
+ updateMembersPositions(true);
// remove character from chat group
- TGroupId idGroupe = CHAT_GROUPS_IDS::getTeamChatGroupId(_TeamId);
+ TGroupId idGroup = CHAT_GROUPS_IDS::getTeamChatGroupId(_TeamId);
CMessage msgRemoveGroup("REMOVE_FROM_GROUP");
- msgRemoveGroup.serial( idGroupe );
+ msgRemoveGroup.serial( idGroup );
msgRemoveGroup.serial( const_cast ( charId ) );
sendMessageViaMirror( "IOS", msgRemoveGroup );
@@ -596,7 +596,7 @@ void CTeam::setLeague(const string &leagueName)
// set historic size of the newly created channel
DynChatEGS.setHistoricSize(_LeagueId, 100);
}
-
+
updateLeague();
}
@@ -634,12 +634,12 @@ void CTeam::setLeader(CEntityId id, bool bMessage)
_TeamMembers.insert(_TeamMembers.begin(), _LeaderId);
// inform the new leader
- SM_STATIC_PARAMS_1(params1, STRING_MANAGER::player);
+ SM_STATIC_PARAMS_1(params1, STRING_MANAGER::player);
params1[0].setEId( id );
PHRASE_UTILITIES::sendDynamicSystemMessage(TheDataset.getDataSetRow(_LeaderId), "TEAM_YOU_NEW_LEADER", params1);
- // inform the group
- SM_STATIC_PARAMS_2(params, STRING_MANAGER::player, STRING_MANAGER::player);
+ // inform the group
+ SM_STATIC_PARAMS_2(params, STRING_MANAGER::player, STRING_MANAGER::player);
params[0].setEId( id );
params[1].setEId( _LeaderId );
@@ -743,7 +743,7 @@ void CTeam::setSuccessor( uint8 memberIdx, bool bMessage)
//---------------------------------------------------
sint16 CTeam::findCharacterPosition( const NLMISC::CEntityId &charId ) const
{
-
+
list::const_iterator it = _TeamMembers.begin();
sint16 i = 0;
for (; it != _TeamMembers.end(); ++it)
@@ -777,12 +777,12 @@ void CTeam::updateCharacterScore(const CCharacter *player, SCORES::TScores score
{
if ( (*it) == player->getId())
continue;
-
+
if ( charPosition > i )
position = charPosition - 1 ;
else
position = charPosition;
-
+
character = PlayerManager.getOnlineChar( (*it) );
if (character != NULL)
{
@@ -807,9 +807,9 @@ void CTeam::updateCharacterScore(const CCharacter *player, SCORES::TScores score
{
nlwarning(" Unknown character %s", player->getId().toString().c_str() );
}
-
+
++i;
- }
+ }
}
} // updateCharacterScore //
@@ -829,9 +829,9 @@ void CTeam::clearPlayerTeamDB( const NLMISC::CEntityId &charId )
CBankAccessor_PLR::getUSER().setTEAM_MEMBER(character->_PropertyDatabase, 0);
// character->_PropertyDatabase.setProp( "USER:TEAM_LEADER", 0 );
CBankAccessor_PLR::getUSER().setTEAM_LEADER(character->_PropertyDatabase, 0);
-
+
for (uint8 i = 0; i < CTEAM::TeamMaxNbMembers - (uint8)1 ; ++i)
- {
+ {
CBankAccessor_PLR::TGROUP::TArray &groupItem = CBankAccessor_PLR::getGROUP().getArray(i);
// sprintf(buffer, "GROUP:%d:PRESENT",i );
// character->_PropertyDatabase.setProp( buffer, (uint8)0 );
@@ -935,7 +935,7 @@ bool CTeam::processTeamMissionStepEvent(std::list< CMissionEvent* > & eventList,
return false;
else if ( result == CMissionEvent::MissionFailed )
return true;
-
+
CMissionTemplate * templ = CMissionManager::getInstance()->getTemplate( mission->getTemplateId() );
nlassert( templ );
if ( result == CMissionEvent::MissionEnds )
@@ -955,7 +955,7 @@ bool CTeam::processTeamMissionStepEvent(std::list< CMissionEvent* > & eventList,
CMissionManager::getInstance()->missionDoneOnce(templ);
mission->stopChildren();
-
+
// only remove no list missions, other must be manually removed by user
if ( templ->Tags.NoList || mission->isChained() || templ->Tags.AutoRemove )
{
@@ -1003,7 +1003,7 @@ void CTeam::rewardSharing(CRewardSharing * reward)
CMessage msgout ("IMPULSION_ID");
msgout.serial ((CEntityId&)(*it));
CBitMemStream bms;
-
+
if (!GenericMsgManager.pushNameToStream ("TEAM:SHARE_OPEN", bms))
nlstopex (("Missing TEAM:SHARE_OPEN in msg.xml"));
msgout.serialBufferWithSize ((uint8*)bms.buffer(), bms.length());
@@ -1018,7 +1018,7 @@ void CTeam::rewardSharing(CRewardSharing * reward)
struct TUpdatedMemberPosition
{
sint64 Pos;
-
+
TUpdatedMemberPosition(sint32 x, sint32 y) { Pos = (sint64(x)<<32) + y; }
};
@@ -1044,15 +1044,15 @@ void CTeam::updateMembersPositions(bool forceUpdate)
nlwarning(" Unknown character %s", (*it).toString().c_str() );
continue;
}
-
+
const sint32 lastX = (sint32)(character->getLastPosXInDB() * 0.001f);
const sint32 lastY = (sint32)(character->getLastPosYInDB() * 0.001f);
-
+
const sint32 posX = (sint32)(character->getX() * 0.001f);
const sint32 posY = (sint32)(character->getY() * 0.001f);
-
+
const sint32 member1Delta = (sint32)CVector2d(posX - lastX, posY - lastY).sqrnorm();
-
+
sint16 j = i;
list::const_iterator it2 = it;
++it2;
@@ -1064,26 +1064,26 @@ void CTeam::updateMembersPositions(bool forceUpdate)
nlwarning(" Unknown character %s", (*it2).toString().c_str() );
continue;
}
-
+
const sint32 lastXMember2 = (sint32)(member2->getLastPosXInDB() * 0.001f);
const sint32 lastYMember2 = (sint32)(member2->getLastPosYInDB() * 0.001f);
-
+
const sint32 posXMember2 = (sint32)(member2->getX() * 0.001f);
const sint32 posYMember2 = (sint32)(member2->getY() * 0.001f);
-
+
// get distance between the two players
const sint32 dist = (sint32)CVector2d(posXMember2 - posX, posYMember2 - posY).sqrnorm();
// distance between new and old pos for player 2
const sint32 member2Delta = (sint32)CVector2d(posXMember2 - lastXMember2, posYMember2 - lastYMember2).sqrnorm();
-
+
// update first player DB if member2Delta is important enough
- if ( ( ( member2Delta<<5 > dist || member2Delta > (80*80) ) && dist > 1 ) || forceUpdate)
+ if ( ( ( member2Delta<<5 > dist || member2Delta > (80*80) ) && dist > 1 ) || forceUpdate)
{
UpdatedMemberPos.insert( make_pair( member2->getId(), TUpdatedMemberPosition(member2->getX(), member2->getY())));
member2->setLastPosXInDB(member2->getX());
member2->setLastPosYInDB(member2->getY());
}
-
+
// update member2 DB is member1Delta is important enough
if ( ( ( member1Delta<<5 > dist || member1Delta > (80*80) ) && dist > 1 ) || forceUpdate )
{
@@ -1094,7 +1094,7 @@ void CTeam::updateMembersPositions(bool forceUpdate)
++j;
}
++i;
- }
+ }
i=0;
for (list::const_iterator it = _TeamMembers.begin() ; it != itEnd ; ++it)
@@ -1137,7 +1137,7 @@ void CTeam::updateMembersPositions(bool forceUpdate)
++j;
}
++i;
- }
+ }
} // updateCharacterScore //
CMissionTeam* CTeam::getMissionByAlias( TAIAlias missionAlias )
@@ -1165,7 +1165,7 @@ void CTeam::updateMembersDb()
{
CBankAccessor_PLR::getGROUP().setLEADER_INDEX(ch1->_PropertyDatabase, 0xf);
}
- else
+ else
{
CBankAccessor_PLR::getGROUP().setLEADER_INDEX(ch1->_PropertyDatabase, 0);
}
@@ -1175,11 +1175,11 @@ void CTeam::updateMembersDb()
for (std::list::iterator it2 = _TeamMembers.begin() ; it2 != _TeamMembers.end() ; ++it2)
{
if ( (*it) == (*it2) )
- continue;
+ continue;
CBankAccessor_PLR::TGROUP::TArray &groupItem = CBankAccessor_PLR::getGROUP().getArray(pos);
- CCharacter * ch2 = PlayerManager.getOnlineChar( (*it2) );
+ CCharacter * ch2 = PlayerManager.getOnlineChar( (*it2) );
if (ch2 != NULL)
{
// update new char for old char
@@ -1195,10 +1195,10 @@ void CTeam::updateMembersDb()
stamina = (uint8) ( ( float(TeamMembersStatusMaxValue) * ( ch2->getPhysScores()._PhysicalScores[ SCORES::stamina ].Current ) ) / ( ch2->getPhysScores()._PhysicalScores[ SCORES::stamina ].Max ) );
else
stamina = 0;
-
+
CMirrorPropValueRO nameIndexValue( TheDataset, ch2->getId(), "NameIndex" );
nameId = nameIndexValue();
-
+
groupItem.setHP(ch1->_PropertyDatabase, hp);
groupItem.setSAP(ch1->_PropertyDatabase, sap);
groupItem.setSTA(ch1->_PropertyDatabase, stamina);
From 668cfb4772446ccf09a74bd79efb2654faae7be1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Wed, 12 Jul 2023 12:09:21 +0100
Subject: [PATCH 067/194] Fix "no remove aqua speed" bug when player leaves the
water
---
.../src/entities_game_service/player_manager/character.cpp | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index aab3eb6696..e1a924919d 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -23755,11 +23755,16 @@ void CCharacter::incAggroCount()
bool CCharacter::isInWater() const
{
- if (!_PlayerIsInWater && (_ActionFlags.getValue() & RYZOMACTIONFLAGS::InWater))
+ nlinfo("check is in water = %d", (_EntityState.Z.getValue() & 4));
+ if (!_PlayerIsInWater && (((_EntityState.Z.getValue() & 4) != 0) || (_ActionFlags.getValue() & RYZOMACTIONFLAGS::InWater)))
{
entersWater();
_PlayerIsInWater = true;
}
+ else if (_PlayerIsInWater && (_EntityState.Z.getValue() & 4) == 0)
+ {
+ _PlayerIsInWater = false;
+ }
return (_PlayerIsInWater || (_ActionFlags.getValue() & RYZOMACTIONFLAGS::InWater));
}
From 8a4a0b3113726f6163fe42770b67dfafef193a5c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Wed, 12 Jul 2023 12:12:02 +0100
Subject: [PATCH 068/194] Fix deactivated guild roles options when player name
take time to come
---
ryzom/client/src/interface_v3/guild_manager.cpp | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/ryzom/client/src/interface_v3/guild_manager.cpp b/ryzom/client/src/interface_v3/guild_manager.cpp
index 83dbbdeeaa..af01f6c276 100644
--- a/ryzom/client/src/interface_v3/guild_manager.cpp
+++ b/ryzom/client/src/interface_v3/guild_manager.cpp
@@ -352,6 +352,7 @@ void CGuildManager::update()
// *** Need to update Names?
if (_NeedUpdate)
{
+ _NeedUpdate = false;
bool bAllValid = true;
// Update wait until all the name of members, name of the guild and description are valid
@@ -420,6 +421,9 @@ void CGuildManager::update()
uint i;
_Grade = EGSPD::CGuildGrade::Member;
string sUserName = toLower(UserEntity->getEntityName());
+ if (sUserName.empty())
+ _NeedUpdate = true;
+
for (i = 0; i < _GuildMembers.size(); ++i)
{
if (toLower(_GuildMembers[i].Name) == sUserName)
@@ -453,7 +457,6 @@ void CGuildManager::update()
}
// guild updated
- _NeedUpdate = false;
_NeedUpdateMembers= false;
}
}
@@ -876,7 +879,7 @@ class CAHGuildSheetOpen : public IActionHandler
break;
}
}
-
+
CCtrlBase *inviteButton = pLine->getCtrl("invite_button");
if (inviteButton != NULL)
inviteButton->setActive(rGuildMembers[i].Online != ccs_offline && rGuildMembers[i].Name != UserEntity->getEntityName());
@@ -900,12 +903,12 @@ class CAHGuildSheetOpen : public IActionHandler
pLine->setParent (pParent);
pParent->addChild (pLine);
}
-
+
// update member online count view
CViewText *pOnlineMember = dynamic_cast(CWidgetManager::getInstance()->getElementFromId(VIEW_TEXT_GUILD_MEMBER_COUNT_ONLINE));
if (pOnlineMember)
pOnlineMember->setText(toString(member_online));
-
+
}
}
};
@@ -1094,7 +1097,7 @@ class CAHGuildSheetTellMember : public IActionHandler
MemberIndexSelected= nLineNb;
MemberNameSelected = rGuildMembers[nLineNb].Name;
- CPeopleInterraction::displayTellInMainChat(MemberNameSelected);
+ CPeopleInterraction::displayTellInMainChat(MemberNameSelected);
}
// Current selection
@@ -1118,7 +1121,7 @@ class CAHGuildSheetSetLeader : public IActionHandler
}
};
REGISTER_ACTION_HANDLER (CAHGuildSheetSetLeader, "guild_member_chg_to_leader");
-
+
// ***************************************************************************
class CAHGuildSheetSetLeaderConfirm : public IActionHandler
{
From a45d790e0f5c7468ec61aabef833888f49b02d24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Thu, 13 Jul 2023 15:27:12 +0100
Subject: [PATCH 069/194] Fixes and add getPlayerPosition
---
.../mission_manager/missions_commands.cpp | 31 +++++++++++++++++++
.../player_manager/character.cpp | 1 -
2 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index 6c3e959714..c2827f029e 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -668,6 +668,10 @@ NLMISC_COMMAND(spawnItem, "Spawn a new Item", " <
item->recommended(recommended);
}
+ const CStaticItem* form = CSheets::getForm(sheet);
+ if (form != NULL && form->Family == ITEMFAMILY::ITEM_SAP_RECHARGE)
+ item->setSapLoad(quality);
+
log.displayNL("OK");
return true;
}
@@ -703,6 +707,13 @@ NLMISC_COMMAND(spawnItem, "Spawn a new Item", " <
finalItem->recommended(recommended);
}
+ const CStaticItem* form = finalItem->getStaticForm();
+
+ if (form != NULL) {
+ if (form->Family == ITEMFAMILY::ITEM_SAP_RECHARGE)
+ finalItem->setSapLoad(finalItem->quality());
+ }
+
if (c->addItemToInventory(getTInventory(selected_inv), finalItem))
{
log.displayNL("OK");
@@ -1312,6 +1323,26 @@ NLMISC_COMMAND(getPosition, "get position of entity", "")
}
+//----------------------------------------------------------------------------
+NLMISC_COMMAND(getPlayerPosition, "get position of an user", "")
+{
+ if (args.size() != 1)
+ return false;
+
+ CCharacter * player = PlayerManager.getCharacterByName(args[0]);
+ if (!player || !TheDataset.isAccessible(player->getEntityRowId()))
+ {
+ log.displayNL("ERR: user not found");
+ return true;
+ }
+
+ log.displayNL("%s", player->getPositionInfos().c_str());
+ return true;
+}
+
+
+
+
//----------------------------------------------------------------------------
// DEPRECATED use getTarget who send also position
NLMISC_COMMAND(getTargetPosition, "get position of entity", "")
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index e1a924919d..66893d05ec 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -23755,7 +23755,6 @@ void CCharacter::incAggroCount()
bool CCharacter::isInWater() const
{
- nlinfo("check is in water = %d", (_EntityState.Z.getValue() & 4));
if (!_PlayerIsInWater && (((_EntityState.Z.getValue() & 4) != 0) || (_ActionFlags.getValue() & RYZOMACTIONFLAGS::InWater)))
{
entersWater();
From 4a67a2bcbfebd3df8f1a246160d50a1740da626a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Sat, 15 Jul 2023 16:08:05 +0100
Subject: [PATCH 070/194] Don't udpate LastOverSpeedTick when using aqua_speed
---
.../src/entities_game_service/player_manager/character.cpp | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 66893d05ec..76fae01529 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -2781,13 +2781,17 @@ void CCharacter::applyRegenAndClipCurrentValue()
_PhysScores.SpeedVariationModifier += _LastAppliedWeightMalus;
sint16 speedVariationModifier = std::max((sint)_PhysScores.SpeedVariationModifier, (sint) - 100);
CSheetId aqua_speed("aqua_speed.sbrick");
+ bool usingAquaSpeed = false;
if (isInWater() && getMode() != MBEHAV::MOUNT_NORMAL && (haveBrick(aqua_speed) || _CurrentSpeedSwimBonus > 0))
{
setBonusMalusName("aqua_speed", addEffectInDB(aqua_speed, true));
if (_CurrentSpeedSwimBonus > 0)
speedVariationModifier = std::min(speedVariationModifier + (sint16)_CurrentSpeedSwimBonus, 100);
else
+ {
+ usingAquaSpeed = true;
speedVariationModifier = std::min(speedVariationModifier + 33, 100);
+ }
}
else
{
@@ -2822,7 +2826,7 @@ void CCharacter::applyRegenAndClipCurrentValue()
CBankAccessor_PLR::getUSER().setSPEED_FACTOR(
_PropertyDatabase, checkedCast(speedVariationModifier + 100.0f));
- if (speedVariationModifier > 0)
+ if (speedVariationModifier > 0 && !usingAquaSpeed)
{
_LastOverSpeedTick = CTickEventHandler::getGameCycle();
}
From 06b65fa34c1760b65a46581d65aa80dba22c9bc0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Sat, 15 Jul 2023 16:12:02 +0100
Subject: [PATCH 071/194] Don't udpate LastOverSpeedTick when using aqua_speed
---
.../src/entities_game_service/player_manager/character.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 76fae01529..3fbc4a4e48 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -2826,7 +2826,7 @@ void CCharacter::applyRegenAndClipCurrentValue()
CBankAccessor_PLR::getUSER().setSPEED_FACTOR(
_PropertyDatabase, checkedCast(speedVariationModifier + 100.0f));
- if (speedVariationModifier > 0 && !usingAquaSpeed)
+ if (speedVariationModifier > 0 && (!usingAquaSpeed || speedVariationModifier - 33 > 0)
{
_LastOverSpeedTick = CTickEventHandler::getGameCycle();
}
From 1f538d9c61f1d6b41273208def91866dd90efff9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Sat, 15 Jul 2023 16:12:02 +0100
Subject: [PATCH 072/194] Don't udpate LastOverSpeedTick when using aqua_speed
---
.../src/entities_game_service/player_manager/character.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 76fae01529..3fbc4a4e48 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -2826,7 +2826,7 @@ void CCharacter::applyRegenAndClipCurrentValue()
CBankAccessor_PLR::getUSER().setSPEED_FACTOR(
_PropertyDatabase, checkedCast(speedVariationModifier + 100.0f));
- if (speedVariationModifier > 0 && !usingAquaSpeed)
+ if (speedVariationModifier > 0 && (!usingAquaSpeed || speedVariationModifier - 33 > 0)
{
_LastOverSpeedTick = CTickEventHandler::getGameCycle();
}
From 731ab8d583df3e77d256d0668399044e9f34e408 Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Sun, 23 Jul 2023 10:24:35 +0000
Subject: [PATCH 073/194] Fixed: Don't udpate LastOverSpeedTick when using
aqua_speed
---
.../src/entities_game_service/player_manager/character.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 3fbc4a4e48..7b2874cca3 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -2826,7 +2826,7 @@ void CCharacter::applyRegenAndClipCurrentValue()
CBankAccessor_PLR::getUSER().setSPEED_FACTOR(
_PropertyDatabase, checkedCast(speedVariationModifier + 100.0f));
- if (speedVariationModifier > 0 && (!usingAquaSpeed || speedVariationModifier - 33 > 0)
+ if (speedVariationModifier > 0 && (!usingAquaSpeed || speedVariationModifier - 33 > 0))
{
_LastOverSpeedTick = CTickEventHandler::getGameCycle();
}
From 0b27439120744c357377a0dff19c7fa0703d59c5 Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Sun, 23 Jul 2023 10:24:35 +0000
Subject: [PATCH 074/194] Fixed: Don't udpate LastOverSpeedTick when using
aqua_speed
---
.../src/entities_game_service/player_manager/character.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 3fbc4a4e48..7b2874cca3 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -2826,7 +2826,7 @@ void CCharacter::applyRegenAndClipCurrentValue()
CBankAccessor_PLR::getUSER().setSPEED_FACTOR(
_PropertyDatabase, checkedCast(speedVariationModifier + 100.0f));
- if (speedVariationModifier > 0 && (!usingAquaSpeed || speedVariationModifier - 33 > 0)
+ if (speedVariationModifier > 0 && (!usingAquaSpeed || speedVariationModifier - 33 > 0))
{
_LastOverSpeedTick = CTickEventHandler::getGameCycle();
}
From 5f2b4f90fc4d017c03f0c3e267fec86f8580c081 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Tue, 1 Aug 2023 14:58:05 +0100
Subject: [PATCH 075/194] Remove guild fame requirement to buy a GH
---
.../guild_high_officer_module.cpp | 58 +++++++++----------
1 file changed, 29 insertions(+), 29 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/guild_manager/guild_high_officer_module.cpp b/ryzom/server/src/entities_game_service/guild_manager/guild_high_officer_module.cpp
index a9955d7ada..ffa769ebfa 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/guild_high_officer_module.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/guild_high_officer_module.cpp
@@ -68,10 +68,10 @@ void CGuildHighOfficerModule::buyGuildOption( const CStaticItem * form )
if ( proxy.getMoney() < form->GuildOption->MoneyCost )
return;
-
+
// if ( guild->getXP() < form->GuildOption->XpCost )
// return;
-
+
if ( form->GuildOption->Type == GUILD_OPTION::GuildMainBuilding )
{
CCreature * bot = proxy.getInterlocutor();
@@ -79,15 +79,15 @@ void CGuildHighOfficerModule::buyGuildOption( const CStaticItem * form )
{
nlwarning(" char %s bot %s is invalid",proxy.getId().toString().c_str(), proxy.getInterlocutor()->getId().toString().c_str() );
return;
- }
+ }
if ( bot->getGuildBuilding() == NULL )
{
nlwarning(" char %s bot %s has no building",proxy.getId().toString().c_str(), proxy.getInterlocutor()->getId().toString().c_str() );
return;
- }
-
- sint32 fame = CFameInterface::getInstance().getFameIndexed( guild->getEId(), bot->getForm()->getFaction());
+ }
+
+ /*sint32 fame = CFameInterface::getInstance().getFameIndexed( guild->getEId(), bot->getForm()->getFaction());
if ( fame < MinFameToBuyGuildBuilding )
{
SM_STATIC_PARAMS_2(params,STRING_MANAGER::integer,STRING_MANAGER::race);
@@ -95,19 +95,19 @@ void CGuildHighOfficerModule::buyGuildOption( const CStaticItem * form )
params[1].Enum = bot->getRace();
proxy.sendSystemMessage( "GUILD_BUILDING_BAD_FAME", params);
return;
- }
+ }*/
guild->setBuilding( bot->getGuildBuilding()->getAlias() );
}
// else if ( guild->getBuilding() != 0 )
-// {
+// {
// EGSPD::CSPType::TSPType type = GUILD_OPTION::toSPType( form->GuildOption->Type);
// if ( type == EGSPD::CSPType::EndSPType )
// {
// nlwarning(" char %s, sheet %s invalid sp type",proxy.getId().toString().c_str(),form->SheetId.toString().c_str() );
// return;
// }
-//
+//
// if ( guild->hasRoleMaster( type ) )
// {
// proxy.sendSystemMessage( "GUILD_RM_ALREADY_BOUGHT" );
@@ -133,7 +133,7 @@ void CGuildHighOfficerModule::buyOutpostBuilding(NLMISC::CSheetId sid)
CGuildCharProxy proxy;
getProxy(proxy);
- CGuild *pGuild = MODULE_CAST(_GuildMemberCore->getGuild());
+ CGuild *pGuild = MODULE_CAST(_GuildMemberCore->getGuild());
MODULE_AST(pGuild);
// This is an outpost building trade here
@@ -225,7 +225,7 @@ COutpost::TChallengeOutpostErrors CGuildHighOfficerModule::challengeOutpost(NLMI
proxy.sendSystemMessage( "NEED_MORE_GUILD_MONEY" );
return COutpost::NotEnoughMoney;
}
-
+
if (outpost->getAttackerGuild()!=0)
{
if (!simulate)
@@ -242,9 +242,9 @@ COutpost::TChallengeOutpostErrors CGuildHighOfficerModule::challengeOutpost(NLMI
);
return COutpost::AlreadyOwned;
}
-
+
COutpost::TChallengeOutpostErrors ret = outpost->challengeOutpost(guild, simulate);
-
+
if (!simulate && ret == COutpost::NoError)
{
uint32 remainingAmountToPay = outpost->getChallengeCost();
@@ -269,7 +269,7 @@ COutpost::TChallengeOutpostErrors CGuildHighOfficerModule::challengeOutpost(NLMI
nlassert(remainingAmountToPay == 0);
}
-
+
return ret;
}
@@ -310,10 +310,10 @@ void CGuildHighOfficerModule::outpostSetSquad(NLMISC::CSheetId outpostSheet, uin
{
CGuildCharProxy proxy;
getProxy(proxy);
-
+
CGuild * guild = MODULE_CAST(_GuildMemberCore->getGuild());
MODULE_AST(guild);
-
+
NLMISC::CSmartPtr outpost = COutpostManager::getInstance().getOutpostFromSheet(outpostSheet);
if (outpost == NULL)
return;
@@ -356,10 +356,10 @@ void CGuildHighOfficerModule::outpostSetSquadSpawnZone(NLMISC::CSheetId outpostS
{
CGuildCharProxy proxy;
getProxy(proxy);
-
+
CGuild * guild = MODULE_CAST(_GuildMemberCore->getGuild());
MODULE_AST(guild);
-
+
NLMISC::CSmartPtr outpost = COutpostManager::getInstance().getOutpostFromSheet(outpostSheet);
if (outpost == NULL)
return;
@@ -402,10 +402,10 @@ void CGuildHighOfficerModule::outpostInsertSquad(NLMISC::CSheetId outpostSheet,
{
CGuildCharProxy proxy;
getProxy(proxy);
-
+
CGuild * guild = MODULE_CAST(_GuildMemberCore->getGuild());
MODULE_AST(guild);
-
+
NLMISC::CSmartPtr outpost = COutpostManager::getInstance().getOutpostFromSheet(outpostSheet);
if (outpost == NULL)
return;
@@ -447,10 +447,10 @@ void CGuildHighOfficerModule::outpostRemoveSquad(NLMISC::CSheetId outpostSheet,
{
CGuildCharProxy proxy;
getProxy(proxy);
-
+
CGuild * guild = MODULE_CAST(_GuildMemberCore->getGuild());
MODULE_AST(guild);
-
+
NLMISC::CSmartPtr outpost = COutpostManager::getInstance().getOutpostFromSheet(outpostSheet);
if (outpost == NULL)
return;
@@ -492,10 +492,10 @@ void CGuildHighOfficerModule::outpostSetExpenseLimit(NLMISC::CSheetId outpostShe
{
CGuildCharProxy proxy;
getProxy(proxy);
-
+
CGuild * guild = MODULE_CAST(_GuildMemberCore->getGuild());
MODULE_AST(guild);
-
+
NLMISC::CSmartPtr outpost = COutpostManager::getInstance().getOutpostFromSheet(outpostSheet);
if (outpost == NULL)
return;
@@ -537,14 +537,14 @@ void CGuildHighOfficerModule::outpostSetDefensePeriod(NLMISC::CSheetId outpostSh
{
CGuildCharProxy proxy;
getProxy(proxy);
-
+
CGuild * guild = MODULE_CAST(_GuildMemberCore->getGuild());
MODULE_AST(guild);
-
+
NLMISC::CSmartPtr outpost = COutpostManager::getInstance().getOutpostFromSheet(outpostSheet);
if (outpost == NULL)
return;
-
+
if (proxy.getGuildId() != outpost->getOwnerGuild())
{
nlwarning("Player %s is not allowed to edit the outpost '%s'",
@@ -553,11 +553,11 @@ void CGuildHighOfficerModule::outpostSetDefensePeriod(NLMISC::CSheetId outpostSh
);
return;
}
-
+
// check editing concurrency
if (!outpost->submitEditingAccess(OUTPOSTENUMS::OutpostOwner, proxy.getId(), COutpost::EditDefenseHour))
return;
-
+
outpost->timeSetDefenseHour(hour);
}
From 9eeeebddb6456e4c382a25d40629a82d9769822d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Tue, 1 Aug 2023 14:58:13 +0100
Subject: [PATCH 076/194] Fix crash
---
.../entities_game_service/mission_manager/missions_commands.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index c2827f029e..ccee08a9b0 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -3642,7 +3642,7 @@ NLMISC_COMMAND(addPlayerPet, "add a pet to player", " [size] [nam
fromString(args[2], size);
ucstring customName;
- if (args.size() >= 3)
+ if (args.size() > 3)
customName.fromUtf8(args[3]);
string clientSheet;
From 4d18ebc6d6d4d582e1c5c04408332f3215f48a13 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Wed, 30 Aug 2023 17:09:36 +0100
Subject: [PATCH 077/194] Redefine HALF_FREQUENCY_SENDING_TO_CLIENT (better)
---
ryzom/common/src/game_share/entity_types.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/common/src/game_share/entity_types.h b/ryzom/common/src/game_share/entity_types.h
index cd38a514c0..7645c28a99 100644
--- a/ryzom/common/src/game_share/entity_types.h
+++ b/ryzom/common/src/game_share/entity_types.h
@@ -44,7 +44,7 @@ namespace CLFECOMMON {
* Defined -> one send every two cycles (usually 5 Hz).
* Don't forget to adjust the variable ClientBandwidth in frontend_service.cfg.
*/
-#undef HALF_FREQUENCY_SENDING_TO_CLIENT
+#define HALF_FREQUENCY_SENDING_TO_CLIENT
/*
From 18e85895bd4dcd8c96f31454adfad75e7a926a4d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Wed, 30 Aug 2023 17:17:05 +0100
Subject: [PATCH 078/194] Fix rumors and remove infos
---
.../data/gamedev/interfaces_v3/game_context_menu.xml | 6 +++---
.../client/data/gamedev/interfaces_v3/interaction.xml | 2 +-
.../data/gamedev/interfaces_v3/webig_widgets.xml | 4 ++--
ryzom/client/src/game_context_menu.cpp | 11 ++++++-----
4 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/game_context_menu.xml b/ryzom/client/data/gamedev/interfaces_v3/game_context_menu.xml
index 834714f313..49e0d60098 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/game_context_menu.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/game_context_menu.xml
@@ -74,8 +74,6 @@
-
-
@@ -89,7 +87,9 @@
-
+
+
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.xml b/ryzom/client/data/gamedev/interfaces_v3/interaction.xml
index ab219f874f..98a5ba4b0b 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.xml
@@ -16,7 +16,7 @@
-
diff --git a/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml b/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml
index 418faade26..e7256c2b3f 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml
@@ -204,7 +204,7 @@
-
+
@@ -215,7 +215,7 @@
-
+
diff --git a/ryzom/client/src/game_context_menu.cpp b/ryzom/client/src/game_context_menu.cpp
index 363abdd807..5c64b19645 100644
--- a/ryzom/client/src/game_context_menu.cpp
+++ b/ryzom/client/src/game_context_menu.cpp
@@ -460,14 +460,14 @@ void CGameContextMenu::update()
fameValue = pLeafFame->getValue8();
}
-
- bool enable_rumors = NLGUI::CDBManager::getInstance()->getDbProp("UI:SAVE:ENABLE_RUMORS")->getValueBool();
+ bool disable_rumors = NLGUI::CDBManager::getInstance()->getDbProp("UI:SAVE:DISABLE_RUMORS")->getValueBool();
+ bool newbie = NLGUI::CDBManager::getInstance()->getDbProp("SERVER:USER:IS_NEWBIE")->getValueBool();
if (_TextNews)
- _TextNews->setActive(enable_rumors && !UserEntity->isFighting() && !UserEntity->isRiding() && selection && !canAttack() && selection->isNPC() && fameValue >= -30);
+ _TextNews->setActive(!disable_rumors && !newbie && !UserEntity->isFighting() && !UserEntity->isRiding() && selection && !canAttack() && selection->isNPC() && fameValue >= -30);
if (_TextNewsAgressive)
- _TextNewsAgressive->setActive(enable_rumors && !UserEntity->isFighting() && !UserEntity->isRiding() && selection && !canAttack() && selection->isNPC() && fameValue < -30);
+ _TextNewsAgressive->setActive(!disable_rumors && !newbie && !UserEntity->isFighting() && !UserEntity->isRiding() && selection && !canAttack() && selection->isNPC() && fameValue < -30);
if (_TextDuel && _TextUnDuel)
@@ -521,7 +521,8 @@ void CGameContextMenu::update()
// Disable player properties
if(_TextInfo)
- _TextInfo->setActive(selection && (!selection->isForageSource()));
+ //_TextInfo->setActive(selection && (!selection->isForageSource()));
+ _TextInfo->setActive(false);
// Follow
if(_TextFollow)
From 061198b59b341eb7077c68c985ef8a324f63b0d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Thu, 31 Aug 2023 14:14:51 +0100
Subject: [PATCH 079/194] Add infos into target window
---
.../data/gamedev/interfaces_v3/interaction.lua | 6 +++++-
.../data/gamedev/interfaces_v3/interaction.xml | 16 ++++++++++++++++
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
index 558904e819..8ef1be2a21 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
@@ -360,12 +360,15 @@ function game:updateTargetConsiderUI()
local wgPvPTag = targetWindow:find("pvp_tags")
local wgHeader = targetWindow:find("header_opened")
local wgLock = targetWindow:find("lock")
+ local wginfos = targetWindow:find("target_tinfos")
wgTargetSlotForce.active = true
wgTargetSlotForce.texture = "consider_bg.tga"
wgImpossible.active = true
wgTargetSlotForce.h = 16
+ wginfos.active = false
+
-- no selection ?
if twGetTargetLevel() == -1 then
wgLock.active = false
@@ -394,7 +397,8 @@ function game:updateTargetConsiderUI()
-- if the selection is a player, then both the local & targeted player must be in PVP mode for the level to be displayed
if (twIsTargetPlayer()) then
- -- don't display anything ...
+ -- don't display anything except infos ...
+ wginfos.active = true
wgLock.active = false
wgTargetSlotForce.active = false
wgTargetLevel.active = false
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.xml b/ryzom/client/data/gamedev/interfaces_v3/interaction.xml
index 98a5ba4b0b..d3320228b9 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.xml
@@ -304,6 +304,22 @@
w="0"
h="0"
tooltip_parent="win" />
+
Date: Thu, 7 Sep 2023 13:21:20 +0100
Subject: [PATCH 080/194] setVpx accept now all VPX using ; as delimiter
---
ryzom/server/src/ai_service/ai_bot_npc.cpp | 75 ++++++++++++----------
1 file changed, 40 insertions(+), 35 deletions(-)
diff --git a/ryzom/server/src/ai_service/ai_bot_npc.cpp b/ryzom/server/src/ai_service/ai_bot_npc.cpp
index 7f06d37d96..227987de22 100644
--- a/ryzom/server/src/ai_service/ai_bot_npc.cpp
+++ b/ryzom/server/src/ai_service/ai_bot_npc.cpp
@@ -240,12 +240,12 @@ void CSpawnBotNpc::updateChat(CAIState const* state)
if (!state)
return;
CBotNpc const& botNpc = getPersistent();
-
+
FOREACHC(itChat, CCont, state->chats())
{
if (!itChat->testCompatibility(botNpc))
continue;
-
+
// update chat information if any
CNpcChatProfileImp const* const chatProfile = botNpc.getChat();
if (chatProfile)
@@ -1104,42 +1104,47 @@ void CBotNpc::setVisualProperties(std::string input) // AJM
if(input.empty())
return;
- // split 'input' string into keyword and tail
- std::string keyword, tail;
- if(!AI_SHARE::stringToKeywordAndTail(input,keyword,tail))
- {
- nlwarning("Failed to parse visual property text: '%s' for bot: '%s'",input.c_str(),getAliasNode()->fullName().c_str());
- return;
- }
- // load val from tail
- // accept 64bit hex value
- uint64 val;
- sscanf( tail.c_str(), "%" NL_I64 "x", &val );
-
- // can't set into mirror row until bot is spawned, so save away
- if( NLMISC::nlstricmp( keyword,"VPA")==0 ) // VisualPropertyA
+ std::vector< std::string > vpx;
+ NLMISC::splitString(input, ";", vpx);
+ for (uint8 i = 0; i < vpx.size(); i++)
{
- _VisualPropertyA = val;
- _useVisualProperties = true;
- }
- else if( NLMISC::nlstricmp( keyword,"VPB")==0 ) // VisualPropertyB
- {
- _VisualPropertyB = val;
- _useVisualProperties = true;
- }
- else if( NLMISC::nlstricmp( keyword,"VPC")==0 ) // VisualPropertyC
- {
- _VisualPropertyC = val;
- _useVisualProperties = true;
- }
+ // split 'input' string into keyword and tail
+ std::string keyword, tail;
+ if(!AI_SHARE::stringToKeywordAndTail(vpx[i],keyword,tail))
+ {
+ nlwarning("Failed to parse visual property text: '%s' for bot: '%s'", vpx[i].c_str(), getAliasNode()->fullName().c_str());
+ return;
+ }
- else
- {
- nlwarning("Bot '%s'%s: failed to parse visual property argument: '%s'",
- getAliasFullName().c_str(),
- getAliasString().c_str(),
- input.c_str());
+ // load val from tail
+ // accept 64bit hex value
+ uint64 val;
+ sscanf( tail.c_str(), "%" NL_I64 "x", &val );
+
+ // can't set into mirror row until bot is spawned, so save away
+ if( NLMISC::nlstricmp( keyword,"VPA")==0 ) // VisualPropertyA
+ {
+ _VisualPropertyA = val;
+ _useVisualProperties = true;
+ }
+ else if( NLMISC::nlstricmp( keyword,"VPB")==0 ) // VisualPropertyB
+ {
+ _VisualPropertyB = val;
+ _useVisualProperties = true;
+ }
+ else if( NLMISC::nlstricmp( keyword,"VPC")==0 ) // VisualPropertyC
+ {
+ _VisualPropertyC = val;
+ _useVisualProperties = true;
+ }
+ else
+ {
+ nlwarning("Bot '%s'%s: failed to parse visual property argument: '%s'",
+ getAliasFullName().c_str(),
+ getAliasString().c_str(),
+ input.c_str());
+ }
}
}
From 71b300903895042636a6be3670f4f15b4afec9e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Thu, 7 Sep 2023 13:22:16 +0100
Subject: [PATCH 081/194] spawnBots accept now name and vpx,
addedspawnGroup_ffsssffff_c
---
ryzom/server/src/ai_service/ai_grp.h | 3 +
ryzom/server/src/ai_service/ai_grp_fauna.cpp | 5 +
ryzom/server/src/ai_service/ai_grp_fauna.h | 1 +
ryzom/server/src/ai_service/ai_grp_npc.cpp | 65 ++++++++-
ryzom/server/src/ai_service/ai_grp_npc.h | 1 +
ryzom/server/src/ai_service/ai_grp_pet.cpp | 12 +-
ryzom/server/src/ai_service/ai_grp_pet.h | 1 +
ryzom/server/src/ai_service/ai_instance.cpp | 19 ++-
ryzom/server/src/ai_service/ai_instance.h | 4 +-
ryzom/server/src/ai_service/nf_grp.cpp | 10 +-
ryzom/server/src/ai_service/nf_grp_npc.cpp | 145 ++++++++++++-------
11 files changed, 188 insertions(+), 78 deletions(-)
diff --git a/ryzom/server/src/ai_service/ai_grp.h b/ryzom/server/src/ai_service/ai_grp.h
index c2cdfc011c..440967206c 100644
--- a/ryzom/server/src/ai_service/ai_grp.h
+++ b/ryzom/server/src/ai_service/ai_grp.h
@@ -64,6 +64,7 @@ class CSpawnGroup
virtual void spawnBots() = 0;
virtual void spawnBots(const std::string &name) = 0;
+ virtual void spawnBots(const std::string &name, const std::string &vpx) = 0;
virtual void despawnBots(bool immediately) = 0;
virtual void update() = 0;
@@ -215,6 +216,8 @@ class CGroup
CAliasTreeOwner* aliasTreeOwner() { return this; }
+ std::string botName;
+ std::string botVpx;
bool _AutoDestroy;
void autoDestroy(bool ad) { _AutoDestroy = ad; }
diff --git a/ryzom/server/src/ai_service/ai_grp_fauna.cpp b/ryzom/server/src/ai_service/ai_grp_fauna.cpp
index 1a54c8c4c8..d3e5f8c8dd 100644
--- a/ryzom/server/src/ai_service/ai_grp_fauna.cpp
+++ b/ryzom/server/src/ai_service/ai_grp_fauna.cpp
@@ -551,6 +551,11 @@ void CSpawnGroupFauna::spawnBots(const std::string &name)
}
+void CSpawnGroupFauna::spawnBots(const std::string &name, const std::string &vpx)
+{
+}
+
+
void CSpawnGroupFauna::despawnBots(bool immediately)
{
setDespawnImmediately(immediately);
diff --git a/ryzom/server/src/ai_service/ai_grp_fauna.h b/ryzom/server/src/ai_service/ai_grp_fauna.h
index 086e7ac523..bf84b27d37 100644
--- a/ryzom/server/src/ai_service/ai_grp_fauna.h
+++ b/ryzom/server/src/ai_service/ai_grp_fauna.h
@@ -72,6 +72,7 @@ class CSpawnGroupFauna
virtual void spawnBots();
virtual void spawnBots(const std::string &name);
+ virtual void spawnBots(const std::string &name, const std::string &vpx);
virtual void despawnBots(bool immediately);
// overrides the init to avoid automatic bot spawn ..
diff --git a/ryzom/server/src/ai_service/ai_grp_npc.cpp b/ryzom/server/src/ai_service/ai_grp_npc.cpp
index 88e1c22d99..7f65297442 100644
--- a/ryzom/server/src/ai_service/ai_grp_npc.cpp
+++ b/ryzom/server/src/ai_service/ai_grp_npc.cpp
@@ -392,6 +392,65 @@ void CSpawnGroupNpc::spawnBots(const std::string &name)
}
}
+void CSpawnGroupNpc::spawnBots(const std::string &name, const std::string &vpx)
+{
+ ucstring ucName;
+ ucName.fromUtf8(name);
+
+ FOREACH(itBot, CCont, bots())
+ {
+ CBot* bot = *itBot;
+ if (!bot->isSpawned()) {
+ bot->spawn();
+
+ CBotNpc *botnpc = static_cast(bot);
+ if (botnpc)
+ {
+ botnpc->setVisualProperties(vpx);
+ botnpc->sendVisualProperties();
+ }
+
+ if (!ucName.empty())
+ {
+ CSpawnBot *spawnBot = bot->getSpawnObj();
+ if (spawnBot)
+ {
+ TDataSetRow row = spawnBot->dataSetRow();
+ NLNET::CMessage msgout("CHARACTER_NAME");
+ msgout.serial(row);
+ msgout.serial(ucName);
+ sendMessageViaMirror("IOS", msgout);
+ spawnBot->getPersistent().setCustomName(ucName);
+ }
+ }
+
+ if (_Cell < 0) {
+ CEntityId id = bot->getSpawnObj()->getEntityId();
+ sint32 x = bot->getSpawnObj()->pos().x();
+ sint32 y = bot->getSpawnObj()->pos().y();
+ sint32 z = bot->getSpawnObj()->pos().h();
+ float t = bot->getSpawnObj()->pos().theta().asRadians();
+ uint8 cont = 0;
+ uint8 slide = 1;
+ NLMISC::TGameCycle tick = CTickEventHandler::getGameCycle() + 1;
+ CMessage msgout2("ENTITY_TELEPORTATION");
+ msgout2.serial( id );
+ msgout2.serial( x );
+ msgout2.serial( y );
+ msgout2.serial( z );
+ msgout2.serial( t );
+ msgout2.serial( tick );
+ msgout2.serial( cont );
+ msgout2.serial( _Cell );
+ msgout2.serial( slide );
+
+ sendMessageViaMirror("GPMS", msgout2);
+ }
+ }
+ }
+}
+
+
void CSpawnGroupNpc::spawnBots()
{
FOREACH(itBot, CCont, bots())
@@ -663,13 +722,13 @@ void CGroupNpc::addParameter(std::string const& parameter)
static std::string DESPAWN_TIME("despawn time");
static std::string RING("ring");
static std::string DENIED_ASTAR_FLAGS("denied_astar_flags");
-
+
std::string key, tail;
-
+
// force lowercase
std::string p = NLMISC::toLowerAscii(parameter);
AI_SHARE::stringToKeywordAndTail(p, key, tail);
-
+
breakable
{
if (key == RING)
diff --git a/ryzom/server/src/ai_service/ai_grp_npc.h b/ryzom/server/src/ai_service/ai_grp_npc.h
index 382c6840ed..5b520bd277 100644
--- a/ryzom/server/src/ai_service/ai_grp_npc.h
+++ b/ryzom/server/src/ai_service/ai_grp_npc.h
@@ -46,6 +46,7 @@ class CSpawnGroupNpc
virtual void spawnBots();
virtual void spawnBots(const std::string &name);
+ virtual void spawnBots(const std::string &name, const std::string &vpx);
virtual void despawnBots(bool immediately);
void update();
diff --git a/ryzom/server/src/ai_service/ai_grp_pet.cpp b/ryzom/server/src/ai_service/ai_grp_pet.cpp
index 9e45c0d46e..7f10d6f86b 100644
--- a/ryzom/server/src/ai_service/ai_grp_pet.cpp
+++ b/ryzom/server/src/ai_service/ai_grp_pet.cpp
@@ -36,15 +36,15 @@ void CSpawnGroupPet::update ()
if (!botPet->isSpawned() || botPet->haveToDespawn()) // must erase this bot.
getPersistent().bots().removeChildByIndex(botPet->getChildIndex());
}
-
+
CEntityId const& entityId = getPersistent().getPetOwner();
CAIEntityPhysical* const petOwner = CAIS::instance().getEntityPhysical(CMirrors::DataSet->getDataSetRow(entityId));
-
+
// Quick hack to prevent of too much computing..
if (petOwner)
- {
+ {
double const distContDestToRealDest = petOwner->wpos().toAIVector().quickDistTo(_PathCont.getDestination());
-
+
if (distContDestToRealDest>4) // update only each 4 meters.
_PathCont.setDestination(petOwner->wpos());
_IsPlayerSpawned = true;
@@ -64,11 +64,11 @@ void CSpawnGroupPet::update ()
_IsPlayerSpawned = false;
}
}
-
+
{
uint32 const newTime = CTimeInterface::gameCycle();
uint32 const dt = newTime - _LastUpdate;
-
+
FOREACH(it, CCont, bots())
{
(safe_cast(*it))->update(dt, petOwner);
diff --git a/ryzom/server/src/ai_service/ai_grp_pet.h b/ryzom/server/src/ai_service/ai_grp_pet.h
index 7d0f56ed28..bf01114c6e 100644
--- a/ryzom/server/src/ai_service/ai_grp_pet.h
+++ b/ryzom/server/src/ai_service/ai_grp_pet.h
@@ -46,6 +46,7 @@ class CSpawnGroupPet
void spawnBots() { }
void spawnBots(const std::string &name) { }
+ void spawnBots(const std::string &name, const std::string &vpx) {}
void despawnBots (bool immediately) { }
void update();
diff --git a/ryzom/server/src/ai_service/ai_instance.cpp b/ryzom/server/src/ai_service/ai_instance.cpp
index 8f3fce9fb2..6db8caac81 100644
--- a/ryzom/server/src/ai_service/ai_instance.cpp
+++ b/ryzom/server/src/ai_service/ai_instance.cpp
@@ -675,7 +675,7 @@ static float randomAngle()
return val;
}
-CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, double dispersionRadius, bool spawnBots, double orientation, const std::string &botsName, const std::string &look, sint32 cell) {
+CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, double dispersionRadius, bool spawnBots, double orientation, const std::string &grpName, const std::string &look, sint32 cell, const std::string &botsName, const std::string &vpx) {
if (!_EventNpcManager)
return NULL;
@@ -687,7 +687,8 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
}
_LastGroupAlias++;
- string name = botsName.empty() ? NLMISC::toString("event_group_%u", _LastGroupAlias):botsName;
+ string name = grpName.empty() ? NLMISC::toString("event_group_%u", _LastGroupAlias):grpName;
+ string botname = botsName.empty() ? name : botsName;
// Create a group
CGroupNpc* grp = new CGroupNpc(_EventNpcManager, _LastGroupAlias, name, RYAI_MAP_CRUNCH::Nothing);
// Register it in the manager
@@ -695,7 +696,8 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
// Set the group parameters
grp->setAutoSpawn(false);
-
+ grp->botVpx = vpx;
+ grp->botName = botname;
grp->setName(name);
grp->clearParameters();
grp->setPlayerAttackable(true);
@@ -705,7 +707,8 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
grp->clrBotsAreNamedFlag();
- eventCreateNpcBot(grp, nbBots, false, sheetId, pos, "", orientation, dispersionRadius, look);
+ if (nbBots > 0)
+ eventCreateNpcBot(grp, nbBots, false, sheetId, pos, "", orientation, dispersionRadius, look, botname, vpx);
grp->spawn();
CSpawnGroupNpc* spawnGroup = grp->getSpawnObj();
@@ -723,7 +726,7 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
destZone->setPosAndRadius(AITYPES::vp_auto, CAIPos(pos, 0, 0), (uint32)(dispersionRadius*1000.));
spawnGroup->movingProfile().setAIProfile(new CGrpProfileWanderNoPrim(spawnGroup, destZone));
- if (!botsName.empty())
+ if (!grpName.empty())
{
CStateMachine* sm = _EventNpcManager->getStateMachine();
uint32 stateAlias = grp->getStateAlias("start");
@@ -743,12 +746,12 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
}
if (spawnBots)
- grp->getSpawnObj()->spawnBots();
+ grp->getSpawnObj()->spawnBots(botname, vpx);
return grp;
}
-bool CAIInstance::eventCreateNpcBot(CGroupNpc* grp, uint nbBots, bool spawnBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, const std::string &name, double orientation, double dispersionRadius, const std::string &look)
+bool CAIInstance::eventCreateNpcBot(CGroupNpc* grp, uint nbBots, bool spawnBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, const std::string &name, double orientation, double dispersionRadius, const std::string &look, const std::string &botname, const std::string &vpx)
{
uint32 offset = grp->bots().size();
for (uint i=0; igetSpawnObj()->spawnBots(name);
+ grp->getSpawnObj()->spawnBots(botname, vpx);
return true;
}
diff --git a/ryzom/server/src/ai_service/ai_instance.h b/ryzom/server/src/ai_service/ai_instance.h
index b2a71cd3f8..db22a18bf6 100644
--- a/ryzom/server/src/ai_service/ai_instance.h
+++ b/ryzom/server/src/ai_service/ai_instance.h
@@ -208,8 +208,8 @@ class CAIInstance
return NULL;
}
- CGroupNpc* eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, double dispersionRadius, bool spawnBots, double orientation, const std::string &botsName, const std::string &look, sint32 cell=0);
- bool eventCreateNpcBot(CGroupNpc* grp, uint nbBots, bool spawnBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, const std::string &name, double orientation, double dispersionRadius, const std::string &look);
+ CGroupNpc* eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, double dispersionRadius, bool spawnBots, double orientation, const std::string &grpName, const std::string &look, sint32 cell=0, const std::string &botsName = "", const std::string &vpx = "");
+ bool eventCreateNpcBot(CGroupNpc* grp, uint nbBots, bool spawnBots, NLMISC::CSheetId const& sheetId, CAIVector const& pos, const std::string &name, double orientation, double dispersionRadius, const std::string &look, const std::string &botsName = "", const std::string &vpx = "");
/// create a new easter egg
CBotEasterEgg* createEasterEgg(uint32 easterEggId, NLMISC::CSheetId const& sheetId, std::string const& botName, double x, double y, double z, double heading, const std::string& look);
diff --git a/ryzom/server/src/ai_service/nf_grp.cpp b/ryzom/server/src/ai_service/nf_grp.cpp
index 43d5711578..333c45107b 100644
--- a/ryzom/server/src/ai_service/nf_grp.cpp
+++ b/ryzom/server/src/ai_service/nf_grp.cpp
@@ -65,7 +65,7 @@ void spawn__(CStateInstance* entity, CScriptStack& stack)
if (grp)
{
if (grp->isSpawned())
- grp->getSpawnObj()->spawnBots();
+ grp->getSpawnObj()->spawnBots(grp->botName, grp->botVpx);
}
}
@@ -110,10 +110,10 @@ void despawn_f_(CStateInstance* entity, CScriptStack& stack)
//----------------------------------------------------------------------------
/** @page code
-@subsection spawnBot_fsssffff_
+@subsection spawnBot_fsssfffff_
Spawn new bots in the current group.
-Arguments: f(NbrBots), s(Sheet), s(Name), s(Look), f(x), f(y), f(orientation), f(dispersion) ->
+Arguments: f(NbrBots), s(Sheet), s(Name), s(Look), f(x), f(y), f(orientation), f(dispersion), f(cell) ->
@code
@@ -148,12 +148,10 @@ void spawnBot_fsssffff_(CStateInstance* entity, CScriptStack& stack)
CGroupNpc* grp = dynamic_cast(entity->getGroup());
if (grp)
- aiInstance->eventCreateNpcBot(grp, nbBots, true, sheetId, CAIVector(x, y), name, orientation, dispersionRadius, look);
+ aiInstance->eventCreateNpcBot(grp, nbBots, true, sheetId, CAIVector(x, y), name, orientation, dispersionRadius, look, grp->botName, grp->botVpx);
return;
}
-
-
//----------------------------------------------------------------------------
/** @page code
diff --git a/ryzom/server/src/ai_service/nf_grp_npc.cpp b/ryzom/server/src/ai_service/nf_grp_npc.cpp
index 0a67aea43c..66b2c118b6 100644
--- a/ryzom/server/src/ai_service/nf_grp_npc.cpp
+++ b/ryzom/server/src/ai_service/nf_grp_npc.cpp
@@ -2644,6 +2644,7 @@ void rename_s_(CStateInstance* entity, CScriptStack& stack)
ucstring name;
name.fromUtf8(newName);
CGroup* group = entity->getGroup();
+ group->botName = newName;
if (group->isSpawned())
{
@@ -2676,6 +2677,7 @@ void vpx_s_(CStateInstance* entity, CScriptStack& stack)
string vpx = (string)stack.top(); stack.pop();
CGroup* group = entity->getGroup();
+ group->botVpx = vpx;
if (group->isSpawned())
{
@@ -3245,45 +3247,71 @@ void resetHealGroups_(CStateInstance* entity, CScriptStack& stack)
//----------------------------------------------------------------------------
/** @page code
-@subsection spawnGroup_fsssffff_
+@subsection spawnGroup_ffsssffff_
Spawn new group.
-Arguments: f(NbrBots), f(spawnBot) s(Sheet), s(Name), s(Look), f(x), f(y), f(orientation), f(dispersion) ->
+Arguments: f(NbrBots), f(spawnBot), s(Sheet), s(Name), s(Look), f(x), f(y), f(orientation), f(dispersion) ->
@code
@endcode
*/
-// CGroup
-void spawnGroup_ffsssffff_c(CStateInstance* entity, CScriptStack& stack)
+void spawnGroup_ffsssffff_(CStateInstance* entity, CScriptStack& stack)
{
- double dispersionRadius = (double)(float)stack.top();
- stack.pop();
+ double dispersionRadius = (double)(float)stack.top(); stack.pop();
+ double orientation = (double)(float)stack.top(); stack.pop();
+ double y = (double)(float)stack.top(); stack.pop();
+ double x = (double)(float)stack.top(); stack.pop();
+ string look = (string)stack.top(); stack.pop();
+ string name = (string)stack.top(); stack.pop();
+ CSheetId sheetId((string)stack.top()); stack.pop();
+ bool spawn = (float&)stack.top()!=0.0f; stack.pop();
+ uint nbBots = (uint)(float)stack.top(); stack.pop();
- double orientation = (double)(float)stack.top();
- stack.pop();
+ IManagerParent* const managerParent = entity->getGroup()->getOwner()->getOwner();
+ CAIInstance* const aiInstance = dynamic_cast(managerParent);
+ if (!aiInstance)
+ return;
- double y = (double)(float)stack.top();
- stack.pop();
+ CGroupNpc* grp = dynamic_cast(entity->getGroup());
+ if (grp)
+ {
+ CSpawnGroupNpc* spawnGroup = grp->getSpawnObj();
+ CGroupNpc* npcGroup;
+ if (spawnGroup)
+ npcGroup = aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawn, orientation, name, look, spawnGroup->getCell());
+ else
+ npcGroup = aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawn, orientation, name, look);
+ }
+}
- double x = (double)(float)stack.top();
- stack.pop();
- string look = (string)stack.top();
- stack.pop();
+//----------------------------------------------------------------------------
+/** @page code
- string name = (string)stack.top();
- stack.pop();
+@subsection spawnGroup_fsssfffff_c
+Spawn new group.
- CSheetId sheetId((string)stack.top());
- stack.pop();
+Arguments: f(NbrBots), f(spawnBot) s(Sheet), s(Name), s(Look), f(x), f(y), f(orientation), f(dispersion) ->
- bool spawn = (float&)stack.top()!=0.0f;
- stack.pop();
+@code
- uint nbBots = (uint)(float)stack.top();
- stack.pop();
+@endcode
+
+*/
+// CGroup
+void spawnGroup_ffsssffff_c(CStateInstance* entity, CScriptStack& stack)
+{
+ double dispersionRadius = (double)(float)stack.top(); stack.pop();
+ double orientation = (double)(float)stack.top(); stack.pop();
+ double y = (double)(float)stack.top(); stack.pop();
+ double x = (double)(float)stack.top(); stack.pop();
+ string look = (string)stack.top(); stack.pop();
+ string name = (string)stack.top(); stack.pop();
+ CSheetId sheetId((string)stack.top()); stack.pop();
+ bool spawn = (float&)stack.top()!=0.0f; stack.pop();
+ uint nbBots = (uint)(float)stack.top(); stack.pop();
IManagerParent* const managerParent = entity->getGroup()->getOwner()->getOwner();
CAIInstance* const aiInstance = dynamic_cast(managerParent);
@@ -3291,47 +3319,52 @@ void spawnGroup_ffsssffff_c(CStateInstance* entity, CScriptStack& stack)
return;
CGroupNpc* grp = dynamic_cast(entity->getGroup());
+ CGroupNpc* npcGroup;
if (grp)
{
CSpawnGroupNpc* spawnGroup = grp->getSpawnObj();
- CGroupNpc* npcGroup;
if (spawnGroup)
npcGroup = aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawn, orientation, name, look, spawnGroup->getCell());
- else
- npcGroup = aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawn, orientation, name, look);
- if (npcGroup)
- stack.push(npcGroup->getPersistentStateInstance());
}
-}
-void spawnGroup_ffsssffff_(CStateInstance* entity, CScriptStack& stack)
-{
- double dispersionRadius = (double)(float)stack.top();
- stack.pop();
+ if (!npcGroup)
+ npcGroup = aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawn, orientation, name, look);
- double orientation = (double)(float)stack.top();
- stack.pop();
+ if (npcGroup)
+ stack.push(npcGroup->getPersistentStateInstance());
- double y = (double)(float)stack.top();
- stack.pop();
+ return;
- double x = (double)(float)stack.top();
- stack.pop();
+}
- string look = (string)stack.top();
- stack.pop();
+//----------------------------------------------------------------------------
+/** @page code
- string name = (string)stack.top();
- stack.pop();
+@subsection spawnGroup_ffsssssffff_c
+Create a group with bots (not spawned)
- CSheetId sheetId((string)stack.top());
- stack.pop();
+Arguments: f(NbrBots), f(spawnBot), s(Sheet), s(Name), s(BotName), s(Look), s(vpx), f(x), f(y), f(orientation), f(dispersion) ->
- bool spawn = (float&)stack.top()!=0.0f;
- stack.pop();
+@code
- uint nbBots = (uint)(float)stack.top();
- stack.pop();
+@endcode
+
+*/
+// CGroup
+void spawnGroup_ffsssssffff_c(CStateInstance* entity, CScriptStack& stack)
+{
+ sint32 cell = (sint32)(float)stack.top(); stack.pop();
+ double dispersionRadius = (double)(float)stack.top(); stack.pop();
+ double orientation = (double)(float)stack.top(); stack.pop();
+ double y = (double)(float)stack.top(); stack.pop();
+ double x = (double)(float)stack.top(); stack.pop();
+ string vpx = (string)stack.top(); stack.pop();
+ string look = (string)stack.top(); stack.pop();
+ string botname = (string)stack.top(); stack.pop();
+ string name = (string)stack.top(); stack.pop();
+ CSheetId sheetId((string)stack.top()); stack.pop();
+ bool spawn = (float&)stack.top()!=0.0f; stack.pop();
+ uint nbBots = (uint)(float)stack.top(); stack.pop();
IManagerParent* const managerParent = entity->getGroup()->getOwner()->getOwner();
CAIInstance* const aiInstance = dynamic_cast(managerParent);
@@ -3339,17 +3372,22 @@ void spawnGroup_ffsssffff_(CStateInstance* entity, CScriptStack& stack)
return;
CGroupNpc* grp = dynamic_cast(entity->getGroup());
+ CGroupNpc* npcGroup;
if (grp)
{
CSpawnGroupNpc* spawnGroup = grp->getSpawnObj();
- CGroupNpc* npcGroup;
if (spawnGroup)
- npcGroup = aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawn, orientation, name, look, spawnGroup->getCell());
- else
- npcGroup = aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawn, orientation, name, look);
+ npcGroup = aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawn, orientation, name, look, spawnGroup->getCell(), botname, vpx);
}
-}
+ if (!npcGroup)
+ npcGroup = aiInstance->eventCreateNpcGroup(nbBots, sheetId, CAIVector(x, y), dispersionRadius, spawn, orientation, name, look, 0, botname, vpx);
+
+ if (npcGroup)
+ stack.push(npcGroup->getPersistentStateInstance());
+
+ return;
+}
std::map nfGetNpcGroupNativeFunctions()
{
@@ -3427,6 +3465,7 @@ std::map nfGetNpcGroupNativeFunctions()
REGISTER_NATIVE_FUNC(functions, spawnGroup_ffsssffff_);
REGISTER_NATIVE_FUNC(functions, spawnGroup_ffsssffff_c);
+ REGISTER_NATIVE_FUNC(functions, spawnGroup_ffsssssffff_c);
// REGISTER_NATIVE_FUNC(functions, hideMissionStepIcon_b_);
// REGISTER_NATIVE_FUNC(functions, hideMissionGiverIcon_b_);
From 2e11be8d605b0e6d09cb4ba4d698459de412eea0 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Thu, 5 Oct 2023 12:37:52 +0200
Subject: [PATCH 082/194] Added onOverShapeButton
---
.../data/gamedev/interfaces_v3/sceneedit.lua | 29 +++++++++++++++----
1 file changed, 24 insertions(+), 5 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
index f3a2e967e0..9a02d2fe47 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/sceneedit.lua
@@ -561,6 +561,21 @@ function SceneEditor:get_html_section(message, color)
return ''
end
+function SceneEditor:onOverShapeButton(shape_id)
+ if SceneEditor.lastColorizedCheck then
+ setupShape(SceneEditor.lastColorizedCheck, {colorize="0"})
+ end
+ SceneEditor.lastColorizedCheck = shape_id
+ setupShape(shape_id, {colorize="255 0 0 255"})
+end
+
+function SceneEditor:setupShapeButton(shape_id)
+ local button = getUI("ui:interface:ark_scene_editor:browser:content:html"):find("shape_"..shape_id):find("b")
+ button.onover = "lua"
+ button.params_over = "SceneEditor:onOverShapeButton("..shape_id..")"
+end
+
+
function SceneEditor:get_html(message, message_bg)
debug("get_html :"..message)
local new_group = ' '
@@ -627,15 +642,20 @@ function SceneEditor:get_html(message, message_bg)
if k % 2 == 0 then
color = "101010"
end
- local text_color = "ef9b64"
if self.Shapes[shape_id].modified == "modified" then
- text_color = "aa5555"
+ color = "aa5555"
else
if self.Shapes[shape_id].modified == "added" then
- text_color = "55aa55"
+ color = "55aa55"
end
end
- table.insert(shapes_html_dict, {id=shape.db_id, html=" "..'#'..(shape.db_id or '0').." "..shape.file.." \
+ table.insert(shapes_html_dict, {id=shape.db_id, html="\
+ \
+ \
+ "..'#'..(shape.db_id or '0').." \
+ "..shape.file.." \
+ SceneEditor:setupShapeButton('"..tostring(shape_id).."') \
+ \
\
\
"})
@@ -668,6 +688,5 @@ function SceneEditor:get_html(message, message_bg)
end
end
-
-- VERSION --
RYZOM_SCENEEDIT_VERSION = 328
From 1cb98b80946f43d4c3e3e820ab4d5653502ce29f Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 5 Oct 2023 12:40:14 +0200
Subject: [PATCH 083/194] Manage wildcards (?*) in /tar command
---
ryzom/client/src/entities.cpp | 100 +++++++++++++++++-----------------
1 file changed, 51 insertions(+), 49 deletions(-)
diff --git a/ryzom/client/src/entities.cpp b/ryzom/client/src/entities.cpp
index 7f4172f11b..95c44377e3 100644
--- a/ryzom/client/src/entities.cpp
+++ b/ryzom/client/src/entities.cpp
@@ -461,7 +461,7 @@ void CEntityManager::initialize(uint nbMaxEntity)
NLGUI::CDBManager::getInstance()->getDB()->addObserver(&TeamUIDObserver, textId );
_GroupMemberUidDB[i] = NLGUI::CDBManager::getInstance()->getDbProp(text, false);
nlassert(_GroupMemberUidDB[i]);
-
+
text = toString(TEAM_DB_PATH ":%d:NAME", i);
textId = ICDBNode::CTextId(text);
NLGUI::CDBManager::getInstance()->getDB()->addObserver(&TeamPresentObserver, textId );
@@ -477,13 +477,13 @@ void CEntityManager::initialize(uint nbMaxEntity)
NLGUI::CDBManager::getInstance()->getDB()->addObserver(&AnimalUIDObserver, textId);
_BeastUidDB[i] = NLGUI::CDBManager::getInstance()->getDbProp(text, false);
nlassert(_BeastUidDB[i]);
-
+
text = toString("SERVER:PACK_ANIMAL:BEAST%d:STATUS", i);
textId = ICDBNode::CTextId(text);
NLGUI::CDBManager::getInstance()->getDB()->addObserver(&AnimalStatusObserver, textId);
_BeastStatusDB[i] = NLGUI::CDBManager::getInstance()->getDbProp(text, false);
nlassert(_BeastStatusDB[i]);
-
+
text = toString("SERVER:PACK_ANIMAL:BEAST%d:TYPE", i);
_BeastTypeDB[i] = NLGUI::CDBManager::getInstance()->getDbProp(text, false);
nlassert(_BeastTypeDB[i]);
@@ -550,7 +550,7 @@ CShapeInstanceReference CEntityManager::createInstance(const string& shape, cons
primitive = PACS->addCollisionablePrimitive(dynamicWI, 1);
primitive->setDontSnapToGround(false);
}
-
+
// Put instance in last deleted position if found
if (_LastRemovedInstance != -1)
{
@@ -565,7 +565,7 @@ CShapeInstanceReference CEntityManager::createInstance(const string& shape, cons
_ShapeInstances[idx].BboxActive = !text.empty() || !url.empty();
_ShapeInstances[idx].Deleted = false;
_ShapeInstances[idx].InIGZone = inIgZone > 0;
-
+
_LastRemovedInstance = _ShapeInstances[idx].LastDeleted;
_ShapeInstances[idx].LastDeleted = -1;
TIGZoneShapes::iterator it = _IgZoneShapes.find(inIgZone);
@@ -658,7 +658,7 @@ CVector CEntityManager::getInstancePos(uint32 idx)
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return CVector(0,0,0);
-
+
return instance.getPos();
}
@@ -666,17 +666,17 @@ bool CEntityManager::setInstancePos(uint32 idx, CVector pos)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return false;
-
+
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return false;
-
+
UMovePrimitive *primitive = _ShapeInstances[idx].Primitive;
if (primitive)
{
primitive->setGlobalPosition(_ShapeInstances[idx].PrimRelativePos + pos, dynamicWI);
}
-
+
instance.setPos(pos);
return true;
}
@@ -685,11 +685,11 @@ CVector CEntityManager::getInstanceRot(uint32 idx)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return CVector(0,0,0);
-
+
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return CVector(0,0,0);
-
+
return instance.getRotEuler();
}
@@ -697,13 +697,13 @@ bool CEntityManager::setInstanceRot(uint32 idx, CVector rot)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return false;
-
+
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return false;
-
+
instance.setRotEuler(rot);
-
+
return true;
}
@@ -715,7 +715,7 @@ CVector CEntityManager::getInstanceScale(uint32 idx)
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return CVector(0,0,0);
-
+
return instance.getScale();
}
@@ -723,7 +723,7 @@ CVector CEntityManager::getInstanceColPos(uint32 idx)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return CVector(0,0,0);
-
+
return _ShapeInstances[idx].PrimRelativePos;
}
@@ -735,11 +735,11 @@ CVector CEntityManager::getInstanceColScale(uint32 idx)
UMovePrimitive *primitive = _ShapeInstances[idx].Primitive;
if (!primitive)
return CVector(0,0,0);
-
+
float width, depth;
primitive->getSize(width, depth);
float height = primitive->getHeight();
-
+
return CVector(width, depth, height);
}
@@ -747,11 +747,11 @@ double CEntityManager::getInstanceColOrient(uint32 idx)
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return 0.f;
-
+
UMovePrimitive *primitive = _ShapeInstances[idx].Primitive;
if (!primitive)
return 0.f;
-
+
return primitive->getOrientation(dynamicWI);
}
@@ -763,21 +763,21 @@ CVector CEntityManager::getInstanceBBoxMin(uint32 idx)
UInstance instance = _ShapeInstances[idx].Instance;
if (instance.empty())
return CVector(0,0,0);
-
+
NLMISC::CAABBox bbox;
_ShapeInstances[idx].Instance.getShapeAABBox(bbox);
-
+
CVector bbox_min;
-
+
if (bbox.getCenter() == CVector::Null)
bbox_min = CVector(-0.5f, -0.5f, -0.5f);
else
bbox_min = bbox.getMin();
-
+
bbox_min.x *= _ShapeInstances[idx].Instance.getScale().x;
bbox_min.y *= _ShapeInstances[idx].Instance.getScale().y;
bbox_min.z *= _ShapeInstances[idx].Instance.getScale().z;
-
+
return bbox_min+_ShapeInstances[idx].Instance.getPos();
}
@@ -789,28 +789,28 @@ CVector CEntityManager::getInstanceBBoxMax(uint32 idx)
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return CVector(0,0,0);
-
+
NLMISC::CAABBox bbox;
_ShapeInstances[idx].Instance.getShapeAABBox(bbox);
-
+
CVector bbox_max;
-
+
if (bbox.getCenter() == CVector::Null)
bbox_max = CVector(-0.5f, -0.5f, -0.5f);
else
bbox_max = bbox.getMax();
-
+
bbox_max.x *= _ShapeInstances[idx].Instance.getScale().x;
bbox_max.y *= _ShapeInstances[idx].Instance.getScale().y;
bbox_max.z *= _ShapeInstances[idx].Instance.getScale().z;
-
+
return bbox_max+_ShapeInstances[idx].Instance.getPos();
}
bool CEntityManager::removeInstances()
{
if (!Scene) return false;
-
+
for(uint i=0; i<_ShapeInstances.size(); ++i)
{
if (!_ShapeInstances[i].InIGZone)
@@ -823,13 +823,13 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
if (!Scene || idx >= _ShapeInstances.size() || _ShapeInstances[idx].Deleted)
return false;
-
+
UInstance instance = _ShapeInstances[idx].Instance;
if(instance.empty())
return false;
-
+
UMovePrimitive *primitive = _ShapeInstances[idx].Primitive;
-
+
for (uint32 i=0; i < keys.size(); i++)
{
string param = keys[i];
@@ -900,7 +900,7 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
float v;
CVector pos = getInstancePos(idx);
-
+
if (getRelativeFloatFromString(values[i], v))
{
updateVector(param, pos, v, true);
@@ -913,10 +913,10 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
}
else if (param == "rot x" || param == "rot y" || param == "rot z")
{
-
+
float v;
CVector rot = getInstanceRot(idx);
-
+
if (getRelativeFloatFromString(values[i], v))
{
updateVector(param, rot, v, true);
@@ -931,7 +931,7 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
float v;
CVector scale = instance.getScale();
-
+
if (getRelativeFloatFromString(values[i], v))
{
updateVector(param, scale, v, true);
@@ -942,17 +942,17 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
}
instance.setScale(scale);
}
-
+
// Primitive colissions setups
-
+
if (!primitive) continue;
-
+
if (param == "col size x" || param == "col size y" || param == "col size z")
{
float width, depth;
primitive->getSize(width, depth);
float height = primitive->getHeight();
-
+
CVector size = CVector(width, depth, height);
float v;
if (getRelativeFloatFromString(values[i], v))
@@ -970,7 +970,7 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
CVector pos = instance.getPos();
float v;
-
+
if (getRelativeFloatFromString(values[i], v))
{
updateVector(param, _ShapeInstances[idx].PrimRelativePos, v, false);
@@ -990,10 +990,10 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
{
double orient = primitive->getOrientation(dynamicWI);
double v = 0.f;
-
+
if (values[i].empty())
continue;
-
+
if (values[i][0] == '+')
{
fromString(values[i].substr(1), v);
@@ -1004,7 +1004,7 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
fromString(values[i], v);
orient = v;
}
-
+
primitive->setOrientation(orient, dynamicWI);
}
else if (param == "col mask player")
@@ -1035,7 +1035,7 @@ bool CEntityManager::setupInstance(uint32 idx, const vector &keys, const
}
else if (param == "col obstacle")
{
-
+
}
}
@@ -1048,7 +1048,7 @@ CShapeInstanceReference CEntityManager::getShapeInstanceUnderPos(float x, float
CShapeInstanceReference selectedInstance(UInstance(), string(""), string(""));
_LastInstanceUnderPos= NULL;
idx = -1;
-
+
// If not initialised, return
if (_ShapeInstances.empty())
return selectedInstance;
@@ -2397,7 +2397,9 @@ CEntityCL *CEntityManager::getEntityByKeywords (const std::vector &keywo
bool match = true;
for (uint k = 0; k < lcKeywords.size(); ++k)
{
- if (lcName.find(lcKeywords[k]) == string::npos)
+ string::size_type poswc = lcKeywords[k].find_first_of("?*");
+ if ((poswc != string::npos && !testWildCard(lcName, lcKeywords[k]))
+ || (poswc == string::npos && lcName.find(lcKeywords[k]) == string::npos))
{
match = false;
break;
From 1547f027cab55863b8cd2416b3c527d5ea59d2c9 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 5 Oct 2023 12:42:11 +0200
Subject: [PATCH 084/194] Improve follow player code, remove useless check of
Ai in setEquipement
---
.../server/src/ai_service/ai_profile_npc.cpp | 52 +++++++++++--------
.../src/ai_service/doc/doxycfg/commondoc.cfg | 40 +++++++-------
ryzom/server/src/ai_service/nf_grp_npc.cpp | 3 --
3 files changed, 49 insertions(+), 46 deletions(-)
diff --git a/ryzom/server/src/ai_service/ai_profile_npc.cpp b/ryzom/server/src/ai_service/ai_profile_npc.cpp
index fd338e518f..04bf51ca0d 100644
--- a/ryzom/server/src/ai_service/ai_profile_npc.cpp
+++ b/ryzom/server/src/ai_service/ai_profile_npc.cpp
@@ -2357,8 +2357,19 @@ void CGrpProfileFollowPlayer::updateProfile(uint ticksSinceLastUpdate)
return;
}
- _PathCont.setDestination(plrPtr->wpos());
- _PathPos._Angle = plrPtr->theta();
+ //_PathCont.setDestination(plrPtr->wpos());
+ //_PathPos._Angle = plrPtr->theta();
+ double const distContDestToRealDest = plrPtr->wpos().toAIVector().quickDistTo(_PathCont.getDestination());
+ if (distContDestToRealDest > 4) // update only each 4 meters.
+ {
+ _PathCont.setDestination(plrPtr->wpos());
+ _PathPos._Angle = plrPtr->theta();
+ }
+
+ // Need to wait for a correct position before moving?
+ CAIVector const& dest = _PathCont.getDestination();
+ if (dest.x()==0 || dest.y()==0)
+ return;
for (uint i = 0; i < pgrp.bots().size(); ++i)
{
@@ -2371,33 +2382,28 @@ void CGrpProfileFollowPlayer::updateProfile(uint ticksSinceLastUpdate)
if (!sbot)
continue;
- // Need to wait for a correct position before moving?
- CAIVector const& dest = _PathCont.getDestination();
- if (dest.x()==0 || dest.y()==0)
- return;
-
- static const std::string runParameter("running");
- float dist;
- if (sbot->getPersistent().getOwner()->getSpawnObj()->checkProfileParameter(runParameter))
+ float dist;
+ if (sbot->getPersistent().getOwner()->getSpawnObj()->checkProfileParameter("running"))
dist = sbot->runSpeed()*ticksSinceLastUpdate;
else
dist = sbot->walkSpeed()*ticksSinceLastUpdate;
- // Move
- CFollowPath::TFollowStatus const status = CFollowPath::getInstance()->followPath(
- sbot,
- _PathPos,
- _PathCont,
- dist,
- 0.f,
- 0.5f);
-
- if (status==CFollowPath::FOLLOW_NO_PATH)
+ if ((_PathCont.getDestination() - sbot->wpos().toAIVector()).quickNorm() > 6.f)
{
- nlwarning("Problem with following player");
- }
-
+ // Move
+ CFollowPath::TFollowStatus const status = CFollowPath::getInstance()->followPath(
+ sbot,
+ _PathPos,
+ _PathCont,
+ dist,
+ _DispersionRadius/10.f,
+ 0.5f);
+ if (status==CFollowPath::FOLLOW_NO_PATH)
+ {
+ nlwarning("Problem with following player");
+ }
+ }
}
}
diff --git a/ryzom/server/src/ai_service/doc/doxycfg/commondoc.cfg b/ryzom/server/src/ai_service/doc/doxycfg/commondoc.cfg
index 1d48c0c84c..561e359828 100644
--- a/ryzom/server/src/ai_service/doc/doxycfg/commondoc.cfg
+++ b/ryzom/server/src/ai_service/doc/doxycfg/commondoc.cfg
@@ -6,7 +6,7 @@
# (C) 2001 Radon Labs GmbH
#------------------------------------------------------------------------------
-# If you have dot (http://www.research.att.com/sw/tools/graphviz/)
+# If you have dot (http://www.research.att.com/sw/tools/graphviz/)
# on your system, then you can uncomment this line for more detailed graphs.
# HAVE_DOT = YES
@@ -27,7 +27,7 @@ BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ALWAYS_DETAILED_SEC = NO
FULL_PATH_NAMES = NO
-STRIP_FROM_PATH =
+STRIP_FROM_PATH =
INTERNAL_DOCS = NO
CLASS_DIAGRAMS = YES
DETAILS_AT_TOP = YES
@@ -35,7 +35,7 @@ DETAILS_AT_TOP = YES
# Setting this to NO, drops the .CHM size from 5mb to 3mb.
SOURCE_BROWSER = YES
-INLINE_SOURCES = NO
+INLINE_SOURCES = YES
STRIP_CODE_COMMENTS = YES
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
@@ -47,13 +47,13 @@ INLINE_INFO = YES
SORT_MEMBER_DOCS = NO
DISTRIBUTE_GROUP_DOC = NO
TAB_SIZE = 4
-ENABLED_SECTIONS =
+ENABLED_SECTIONS =
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
-ALIASES = "cmd=\par Script Command:\n"
-ALIASES += "input=\par Command Input:\n"
-ALIASES += "output=\par Command Output:\n"
+ALIASES = "cmd=\par Script Command:\n"
+ALIASES += "input=\par Command Input:\n"
+ALIASES += "output=\par Command Output:\n"
ALIASES += "info=\par Command Description:\n"
ALIASES += "classinfo=\par Class Description:\n"
ALIASES += "scriptclass=\file\n\par Class:\n"
@@ -63,19 +63,19 @@ QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = NO
WARN_FORMAT = "$file:$line: $text"
-WARN_LOGFILE =
+WARN_LOGFILE =
FILE_PATTERNS = *.h *.cc *.cpp *.dox
RECURSIVE = NO
-EXAMPLE_PATH =
-EXAMPLE_PATTERNS =
-IMAGE_PATH =
-INPUT_FILTER =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS =
+IMAGE_PATH =
+INPUT_FILTER =
FILTER_SOURCE_FILES = NO
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX =
+IGNORE_PREFIX =
GENERATE_HTML = YES
HTML_OUTPUT = html
@@ -93,8 +93,8 @@ GENERATE_LATEX = NO
LATEX_OUTPUT = latex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
+EXTRA_PACKAGES =
+LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
@@ -103,7 +103,7 @@ GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE =
+RTF_STYLESHEET_FILE =
GENERATE_MAN = NO
MAN_OUTPUT = man
@@ -114,10 +114,10 @@ ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
-EXPAND_AS_DEFINED =
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
diff --git a/ryzom/server/src/ai_service/nf_grp_npc.cpp b/ryzom/server/src/ai_service/nf_grp_npc.cpp
index 0a67aea43c..ad9ac13ce1 100644
--- a/ryzom/server/src/ai_service/nf_grp_npc.cpp
+++ b/ryzom/server/src/ai_service/nf_grp_npc.cpp
@@ -2745,9 +2745,6 @@ void setEquipment_s_(CStateInstance* entity, CScriptStack& stack)
stack.pop();
IManagerParent* const managerParent = entity->getGroup()->getOwner()->getOwner();
- CAIInstance* const aiInstance = dynamic_cast(managerParent);
- if (!aiInstance)
- return;
std::vector args;
std::vector equipements;
From 37c7df063e89f9ad5b5443f13072759dd8b5d67f Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 5 Oct 2023 12:43:57 +0200
Subject: [PATCH 085/194] Added groupBots and displayInfos commands
---
ryzom/server/src/ai_service/commands.cpp | 98 ++++++++++++++++++++++++
1 file changed, 98 insertions(+)
diff --git a/ryzom/server/src/ai_service/commands.cpp b/ryzom/server/src/ai_service/commands.cpp
index 10db3a862a..c017af8a76 100644
--- a/ryzom/server/src/ai_service/commands.cpp
+++ b/ryzom/server/src/ai_service/commands.cpp
@@ -1697,6 +1697,42 @@ NLMISC_COMMAND(getDatasetId,"get datasetid of bots with name matchiong the given
return true;
}
+
+NLMISC_COMMAND(groupBots,"get number of bots (total and alive (spawned))", "")
+{
+ if (args.size()!=1)
+ return false;
+
+ string const& grpName = args[0];
+ uint8 spawneds = 0;
+ uint8 total = 0;
+
+ vector grps;
+ /// try to find the bot name
+ buildFilteredGroupList(grps, grpName);
+ if (!grps.empty())
+ {
+ FOREACHC(itGrp, vector, grps)
+ {
+ CGroup* grp = *itGrp;
+ if (grp == NULL)
+ continue;
+
+ FOREACH(itBot, CCont, grp->bots())
+ {
+ CBot* bot = *itBot;
+ CSpawnBot* spawnBot = bot->getSpawnObj();
+ total++;
+ if (spawnBot != NULL && spawnBot->isAlive())
+ spawneds++;
+ }
+ }
+ }
+ log.displayNL("%u/%u", spawneds, total);
+ return true;
+}
+
+
NLMISC_COMMAND(script,"execute a script for groups matching the given filter [buffered]"," ")
{
clearBufferedRetStrings();
@@ -1968,6 +2004,68 @@ NLMISC_COMMAND(displayTarget,"display bot target status for given bot(s) or play
return true;
}
+
+
+NLMISC_COMMAND(displayInfos,"display bot status for given bot(s) or player(s)","[...]")
+{
+ if(args.size() <1)
+ return false;
+
+ CLogStringWriter stringWriter(&log);
+
+ for (uint i=0;i can't find entity: %s", args[i].c_str());
+ continue;
+ }
+
+ CAIEntityPhysical *phys=EntityPtr->getTarget();
+
+ if (!phys)
+ {
+ log.displayNL("=> bot %s have no target", args[i].c_str());
+ continue;
+ }
+
+ bool found=false;
+
+ switch (phys->getRyzomType())
+ {
+ case RYZOMID::npc:
+ case RYZOMID::creature:
+ case RYZOMID::pack_animal:
+ break;
+ case RYZOMID::player:
+ log.displayNL("=> target is a player");
+ break;
+ default:
+ {
+ CSpawnBot* spawnBot=dynamic_cast(phys);
+ if (spawnBot)
+ {
+ vector strings = spawnBot->getPersistent().getMultiLineInfoString();
+ FOREACHC(itString, vector, strings)
+ log.displayNL("%s", itString->c_str());
+ found=true;
+ }
+
+ }
+ break;
+ }
+
+ if (!found)
+ {
+ log.displayNL("=> can't display information for the target of: %s", args[i].c_str());
+ }
+
+ }
+ return true;
+}
+
+
NLMISC_COMMAND(displayVision3x3,"display 3x3 cell vision centred on a given coordinate in the given aIInstance"," ")
{
if(args.size()!=3)
From ad6dfdcf435eef7e47a10ef1abdb86dfd83ded8b Mon Sep 17 00:00:00 2001
From: Nuno
Date: Thu, 5 Oct 2023 12:44:46 +0200
Subject: [PATCH 086/194] Added spawnCrystalItem
---
.../src/interface_v3/action_handler_game.cpp | 2 +-
.../mission_manager/missions_commands.cpp | 75 ++++++++++++++++---
2 files changed, 67 insertions(+), 10 deletions(-)
diff --git a/ryzom/client/src/interface_v3/action_handler_game.cpp b/ryzom/client/src/interface_v3/action_handler_game.cpp
index 790c8b13d1..1d1f78e1dc 100644
--- a/ryzom/client/src/interface_v3/action_handler_game.cpp
+++ b/ryzom/client/src/interface_v3/action_handler_game.cpp
@@ -2500,7 +2500,7 @@ class CAHTarget : public IActionHandler
if (preferCompleteMatch)
{
// Try to get the entity with complete match first
- entity = EntitiesMngr.getEntityByName (entityName, false, true);
+ entity = EntitiesMngr.getEntityByName(entityName, false, true);
}
if (entity == NULL && !keywords.empty())
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index c2827f029e..ef0b2d2aa3 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -38,10 +38,12 @@
#include "weather_everywhere.h"
#include "death_penalties.h"
#include "harvest_source.h"
+
#include "mission_manager/mission_team.h"
#include "mission_manager/mission_step_ai.h"
#include "mission_manager/mission_guild.h"
#include "shop_type/named_items.h"
+#include "modules/client_command_forwarder.h"
#include "guild_manager/guild_manager.h"
#include "guild_manager/guild.h"
#include "guild_manager/guild_member_module.h"
@@ -622,11 +624,11 @@ NLMISC_COMMAND(getEid, "get entitiy id of entity", "")
NLMISC_COMMAND(spawnItem, "Spawn a new Item", " [| =,*]")
{
- GET_ACTIVE_CHARACTER
-
if (args.size() < 6)
return false;
+ GET_ACTIVE_CHARACTER
+
string selected_inv = args[1];
CInventoryPtr inventory = getInventory(c, selected_inv);
@@ -731,11 +733,11 @@ NLMISC_COMMAND(spawnItem, "Spawn a new Item", " <
NLMISC_COMMAND(spawnNamedItem, "Spawn a named Item", " ")
{
- GET_ACTIVE_CHARACTER
-
if (args.size() < 4)
return false;
+ GET_ACTIVE_CHARACTER
+
string selected_inv = args[1];
CInventoryPtr inventory = getInventory(c, selected_inv);
@@ -763,6 +765,66 @@ NLMISC_COMMAND(spawnNamedItem, "Spawn a named Item", " [,,...]")
+{
+
+ GET_ACTIVE_CHARACTER
+
+ if (args.size() < 5)
+ return false;
+
+ string selected_inv = args[1];
+
+ CInventoryPtr inventory = getInventory(c, selected_inv);
+ if (inventory == NULL)
+ {
+ log.displayNL("ERR: invalid inventory");
+ return true;
+ }
+
+ bool isSpell = args[2] == "spell";
+
+ CSheetId sheet;
+ if (isSpell)
+ sheet = CSheetId("crystalized_spell.sitem");
+ else
+ sheet = CSheetId("crystalized_allegory.sitem");
+
+ uint16 sap_charge;
+ NLMISC::fromString(args[3], sap_charge);
+
+ // Get Sbricks
+ std::vector sheets;
+ std::vector sheet_names;
+ NLMISC::splitString(args[4], ",", sheet_names);
+ for (uint32 i=0; iaddItemToInventory(getTInventory(selected_inv), item))
+ {
+ item->recommended(sap_charge);
+ item->applyEnchantment(sheets);
+
+ log.displayNL("OK");
+ return true;
+ }
+ item.deleteItem();
+ }
+
+ log.displayNL("ERR: adding item");
+ return true;
+}
+
+
//----------------------------------------------------------------------------
NLMISC_COMMAND(getItemList, "get list of items of character by filter", " [bag sheet quantity_min quantity_max quality_min quality_max extra_infos]")
@@ -2583,11 +2645,6 @@ NLMISC_COMMAND(spawn, "spawn entity", " quantity sheet dispersion spawnbot
uint32 nbBots;
fromString(args[1], nbBots);
- if (nbBots<=0)
- {
- log.displayNL("ERR: invalid bot count");
- return false;
- }
NLMISC::CSheetId sheetId(args[2]);
if (sheetId == NLMISC::CSheetId::Unknown)
From 5641d79f60c5ec04ddd11433b42ba3f03903a0ae Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Fri, 6 Oct 2023 11:43:01 +0200
Subject: [PATCH 087/194] Fix addEntitiesTrigger
---
.../mission_manager/missions_commands.cpp | 22 ++++++++--------
.../player_manager/character.cpp | 1 -
.../entities_game_service/zone_manager.cpp | 17 ++++++-------
.../src/entities_game_service/zone_manager.h | 25 ++++++++++---------
4 files changed, 32 insertions(+), 33 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index ef0b2d2aa3..1ffde45423 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -5253,34 +5253,34 @@ NLMISC_COMMAND(addEntitiesTrigger, "add an Entity as RP points trigger", "
GET_ACTIVE_CHARACTER
- TAIAlias alias;
+ CEntityId id;
string e = args[1];
if (e == "_target_")
{
- alias = CAIAliasTranslator::getInstance()->getAIAlias(c->getTarget());
+ id = c->getTarget();
}
else if (e == "_self_")
{
- alias = CAIAliasTranslator::getInstance()->getAIAlias(c->getId());
+ id = c->getId();
}
else
{
vector aliases;
CAIAliasTranslator::getInstance()->getNPCAliasesFromName( e, aliases );
- if ( aliases.empty() )
- {
- log.displayNL("ERR: no entity");
- return true;
- }
- alias = aliases[0];
+ if (aliases.empty())
+ id.fromString(args[1].c_str());
+ else
+ id = CAIAliasTranslator::getInstance()->getEntityId(aliases[0]);
}
+ if (id == CEntityId::Unknown)
+ return "ERR: no entity";
uint16 distance;
fromString(args[2], distance);
string url = args[3];
- CZoneManager::getInstance().addEntitiesTrigger(alias, distance, url);
- log.displayNL("OK");
+ CZoneManager::getInstance().addEntitiesTrigger(id, distance, url);
+ log.displayNL("%s", id.toString().c_str());
return true;
}
diff --git a/ryzom/server/src/entities_game_service/player_manager/character.cpp b/ryzom/server/src/entities_game_service/player_manager/character.cpp
index 7b2874cca3..494a030f92 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character.cpp
@@ -12358,7 +12358,6 @@ void CCharacter::addRpPoints(sint32 points)
_LastRpPointsWin = CTickEventHandler::getGameCycle();
}
- nlinfo("Add rp points : %d", points);
if (_RpPoints + points > 0)
_RpPoints += points;
else
diff --git a/ryzom/server/src/entities_game_service/zone_manager.cpp b/ryzom/server/src/entities_game_service/zone_manager.cpp
index 8db6c439d3..55384ab563 100644
--- a/ryzom/server/src/entities_game_service/zone_manager.cpp
+++ b/ryzom/server/src/entities_game_service/zone_manager.cpp
@@ -1899,31 +1899,30 @@ void CZoneManager::updateCharacterPosition( CCharacter * user, uint32 elapsedTim
}
// Trigger entities
- std::map::const_iterator it;
+ std::map::const_iterator it;
for (it = EntitiesDistanceTriggers.begin(); it != EntitiesDistanceTriggers.end(); it++)
{
- nlinfo("Entity trigger : %s", NLMISC::toString(it->first).c_str());
+ //nlinfo("Entity trigger : %s", NLMISC::toString(it->first).c_str());
if (it->second == 0)
{
- std::map::const_iterator it2 = EntitiesUrlTriggers.find(it->first);
+ std::map::const_iterator it2 = EntitiesUrlTriggers.find(it->first);
if ( it2 != EntitiesUrlTriggers.end() )
user->sendRpPoints(it2->second);
}
else
{
- nlinfo("Distance = %d", it->second);
- const CEntityId & botId = CAIAliasTranslator::getInstance()->getEntityId(it->first);
- if ( botId != CEntityId::Unknown )
+ //nlinfo("Distance = %d", it->second);
+ if ( it->first != CEntityId::Unknown )
{
- nlinfo("Botid found");
- CEntityBase *entityBase = CreatureManager.getCreature (botId);
+ //nlinfo("Botid found");
+ CEntityBase *entityBase = CEntityBaseManager::getEntityBasePtr(it->first);
if (entityBase != NULL)
{
sint32 x = entityBase->getState().X/1000.f;
sint32 y = entityBase->getState().Y/1000.f;
sint32 px = user->getState().X/1000.f;
sint32 py = user->getState().Y/1000.f;
- nlinfo("entityBase found, check pos %i, %i, %i, %i", x, y, px, py);
+ //nlinfo("entityBase found, check pos %i, %i, %i, %i", x, y, px, py);
if ((px-x)*(px-x)+(py-y)*(py-y) < it->second * it->second)
user->addRpPoints(elapsedTime);
}
diff --git a/ryzom/server/src/entities_game_service/zone_manager.h b/ryzom/server/src/entities_game_service/zone_manager.h
index 3a27f62b38..6078ee6612 100644
--- a/ryzom/server/src/entities_game_service/zone_manager.h
+++ b/ryzom/server/src/entities_game_service/zone_manager.h
@@ -543,21 +543,21 @@ class CZoneManager : public NLMISC::CSingleton
}
// Global Triggers for entities
- std::map EntitiesUrlTriggers;
- std::map EntitiesDistanceTriggers;
- inline void addEntitiesTrigger(const TAIAlias alias, uint16 distance, const std::string url)
+ std::map EntitiesUrlTriggers;
+ std::map EntitiesDistanceTriggers;
+ inline void addEntitiesTrigger(const NLMISC::CEntityId &id, uint16 distance, const std::string url)
{
- EntitiesUrlTriggers[alias] = url;
- EntitiesDistanceTriggers[alias] = distance;
+ EntitiesUrlTriggers[id] = url;
+ EntitiesDistanceTriggers[id] = distance;
}
- inline void delEntitiesTrigger(const TAIAlias alias)
+ inline void delEntitiesTrigger(const NLMISC::CEntityId &id)
{
- std::map::const_iterator it = EntitiesUrlTriggers.find(alias);
+ std::map::const_iterator it = EntitiesUrlTriggers.find(id);
if ( it != EntitiesUrlTriggers.end() )
EntitiesUrlTriggers.erase(it);
- std::map::const_iterator it2 = EntitiesDistanceTriggers.find(alias);
+ std::map::const_iterator it2 = EntitiesDistanceTriggers.find(id);
if ( it2 != EntitiesDistanceTriggers.end() )
EntitiesDistanceTriggers.erase(it2);
}
@@ -565,12 +565,13 @@ class CZoneManager : public NLMISC::CSingleton
inline void delEntitiesTriggers()
{
EntitiesDistanceTriggers.clear();
+ EntitiesUrlTriggers.clear();
}
- inline std::string getEntitiesUrlTrigger(const TAIAlias alias)
+ inline std::string getEntitiesUrlTrigger(const NLMISC::CEntityId &id)
{
std::string url;
- std::map::const_iterator it = EntitiesUrlTriggers.find(alias);
+ std::map::const_iterator it = EntitiesUrlTriggers.find(id);
if ( it != EntitiesUrlTriggers.end() )
{
url = it->second;
@@ -578,10 +579,10 @@ class CZoneManager : public NLMISC::CSingleton
return url;
}
- inline uint16 getEntitiesDistanceTrigger(const TAIAlias alias)
+ inline uint16 getEntitiesDistanceTrigger(const NLMISC::CEntityId &id)
{
uint16 distance = 0;
- std::map::const_iterator it = EntitiesDistanceTriggers.find(alias);
+ std::map::const_iterator it = EntitiesDistanceTriggers.find(id);
if ( it != EntitiesDistanceTriggers.end() )
distance = it->second;
return distance;
From 9187c1d54efee5e12481604b4c1a10063272271b Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Fri, 6 Oct 2023 23:50:10 +0200
Subject: [PATCH 088/194] Fix
---
ryzom/server/src/ai_service/ai_instance.cpp | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/ryzom/server/src/ai_service/ai_instance.cpp b/ryzom/server/src/ai_service/ai_instance.cpp
index 6db8caac81..d0711ddaa0 100644
--- a/ryzom/server/src/ai_service/ai_instance.cpp
+++ b/ryzom/server/src/ai_service/ai_instance.cpp
@@ -688,7 +688,6 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
_LastGroupAlias++;
string name = grpName.empty() ? NLMISC::toString("event_group_%u", _LastGroupAlias):grpName;
- string botname = botsName.empty() ? name : botsName;
// Create a group
CGroupNpc* grp = new CGroupNpc(_EventNpcManager, _LastGroupAlias, name, RYAI_MAP_CRUNCH::Nothing);
// Register it in the manager
@@ -697,7 +696,7 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
grp->setAutoSpawn(false);
grp->botVpx = vpx;
- grp->botName = botname;
+ grp->botName = botsName;
grp->setName(name);
grp->clearParameters();
grp->setPlayerAttackable(true);
@@ -708,7 +707,7 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
grp->clrBotsAreNamedFlag();
if (nbBots > 0)
- eventCreateNpcBot(grp, nbBots, false, sheetId, pos, "", orientation, dispersionRadius, look, botname, vpx);
+ eventCreateNpcBot(grp, nbBots, false, sheetId, pos, "", orientation, dispersionRadius, look, botsName, vpx);
grp->spawn();
CSpawnGroupNpc* spawnGroup = grp->getSpawnObj();
@@ -746,7 +745,7 @@ CGroupNpc* CAIInstance::eventCreateNpcGroup(uint nbBots, NLMISC::CSheetId const&
}
if (spawnBots)
- grp->getSpawnObj()->spawnBots(botname, vpx);
+ grp->getSpawnObj()->spawnBots(botsName, vpx);
return grp;
}
From e0d19d36d3d87a5b5749a9b921bddd40f883d2db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Meelis=20M=C3=A4gi?=
Date: Mon, 9 Oct 2023 10:04:03 +0000
Subject: [PATCH 089/194] Resolve "Emotes like /wave not using player ignore
list"
---
.../src/input_output_service/chat_manager.cpp | 19 ++++++++++++++-----
.../src/input_output_service/chat_manager.h | 3 ++-
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/ryzom/server/src/input_output_service/chat_manager.cpp b/ryzom/server/src/input_output_service/chat_manager.cpp
index 03afd7f3b5..2f483b6832 100644
--- a/ryzom/server/src/input_output_service/chat_manager.cpp
+++ b/ryzom/server/src/input_output_service/chat_manager.cpp
@@ -1832,10 +1832,10 @@ void CChatManager::sendEmoteTextToAudience( const TDataSetRow& sender,const std
// ignore users in the excluded vector
if ( std::find( excluded.begin(),excluded.end(), (*itA) ) == excluded.end() )
{
+ static ucstring ucstr = ucstring("");
// the phrase
uint32 sentId = STRING_MANAGER::sendStringToClient( *itA,phraseId.c_str(),params,&IosLocalSender );
- // send phrase id with an invalid sender, so that client dont display "toto says : toto bows"
- sendChat2Ex( CChatGroup::say, *itA, sentId, TDataSetRow::createFromRawIndex( INVALID_DATASET_ROW ) );
+ sendChat2Ex( CChatGroup::say, *itA, sentId, sender, ucstr, true );
}
}
// restore old chat mode
@@ -2253,7 +2253,7 @@ void CChatManager::sendChatParam( CChatGroup::TGroupType senderChatMode, const T
// sendChat2Ex
//
//-----------------------------------------------
-void CChatManager::sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, uint32 phraseId, const TDataSetRow &sender, ucstring customTxt )
+void CChatManager::sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, uint32 phraseId, const TDataSetRow &sender, ucstring customTxt, bool isEmote )
{
CCharacterInfos * charInfos = NULL;
if( sender.isValid() /* != CEntityId::Unknown*/ )
@@ -2296,8 +2296,17 @@ void CChatManager::sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDa
GenericXmlMsgHeaderMngr.pushNameToStream( "STRING:CHAT2", bms );
CChatMsg2 chatMsg;
- chatMsg.CompressedIndex = sender.getCompressedIndex();
- chatMsg.SenderNameId = charInfos ? charInfos->NameIndex : 0; // empty string if there is no sender
+ if (isEmote)
+ {
+ TDataSetRow senderFake = TDataSetRow::createFromRawIndex( INVALID_DATASET_ROW );
+ chatMsg.CompressedIndex = senderFake.getCompressedIndex();
+ chatMsg.SenderNameId = 0;
+ }
+ else
+ {
+ chatMsg.CompressedIndex = sender.getCompressedIndex();
+ chatMsg.SenderNameId = charInfos ? charInfos->NameIndex : 0; // empty string if there is no sender
+ }
chatMsg.ChatMode = (uint8) senderChatMode;
chatMsg.PhraseId = phraseId;
chatMsg.CustomTxt = customTxt;
diff --git a/ryzom/server/src/input_output_service/chat_manager.h b/ryzom/server/src/input_output_service/chat_manager.h
index b3af3538be..f8699978b8 100644
--- a/ryzom/server/src/input_output_service/chat_manager.h
+++ b/ryzom/server/src/input_output_service/chat_manager.h
@@ -416,8 +416,9 @@ private :
* \param phraseId the string manager string number of the chat phrase
* \param sender is the id of the sender
* \param customTxt is a custom text which can be added immediately after the chat message, on the same line
+ * \param isEmote if true, change receiver to unknown so that client dont display "toto says : toto bows"
*/
- void sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, uint32 phraseId, const TDataSetRow &sender = TDataSetRow(), ucstring customTxt = ucstring(""));
+ void sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, uint32 phraseId, const TDataSetRow &sender = TDataSetRow(), ucstring customTxt = ucstring(""), bool isEmote = false);
/**
* Send a custom emote chat message
From f4fd10db49926ba67fc18db4f23ba1f21976bcaa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Meelis=20M=C3=A4gi?=
Date: Mon, 9 Oct 2023 10:04:03 +0000
Subject: [PATCH 090/194] Resolve "Emotes like /wave not using player ignore
list"
---
.../src/input_output_service/chat_manager.cpp | 19 ++++++++++++++-----
.../src/input_output_service/chat_manager.h | 3 ++-
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/ryzom/server/src/input_output_service/chat_manager.cpp b/ryzom/server/src/input_output_service/chat_manager.cpp
index 03afd7f3b5..2f483b6832 100644
--- a/ryzom/server/src/input_output_service/chat_manager.cpp
+++ b/ryzom/server/src/input_output_service/chat_manager.cpp
@@ -1832,10 +1832,10 @@ void CChatManager::sendEmoteTextToAudience( const TDataSetRow& sender,const std
// ignore users in the excluded vector
if ( std::find( excluded.begin(),excluded.end(), (*itA) ) == excluded.end() )
{
+ static ucstring ucstr = ucstring("");
// the phrase
uint32 sentId = STRING_MANAGER::sendStringToClient( *itA,phraseId.c_str(),params,&IosLocalSender );
- // send phrase id with an invalid sender, so that client dont display "toto says : toto bows"
- sendChat2Ex( CChatGroup::say, *itA, sentId, TDataSetRow::createFromRawIndex( INVALID_DATASET_ROW ) );
+ sendChat2Ex( CChatGroup::say, *itA, sentId, sender, ucstr, true );
}
}
// restore old chat mode
@@ -2253,7 +2253,7 @@ void CChatManager::sendChatParam( CChatGroup::TGroupType senderChatMode, const T
// sendChat2Ex
//
//-----------------------------------------------
-void CChatManager::sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, uint32 phraseId, const TDataSetRow &sender, ucstring customTxt )
+void CChatManager::sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, uint32 phraseId, const TDataSetRow &sender, ucstring customTxt, bool isEmote )
{
CCharacterInfos * charInfos = NULL;
if( sender.isValid() /* != CEntityId::Unknown*/ )
@@ -2296,8 +2296,17 @@ void CChatManager::sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDa
GenericXmlMsgHeaderMngr.pushNameToStream( "STRING:CHAT2", bms );
CChatMsg2 chatMsg;
- chatMsg.CompressedIndex = sender.getCompressedIndex();
- chatMsg.SenderNameId = charInfos ? charInfos->NameIndex : 0; // empty string if there is no sender
+ if (isEmote)
+ {
+ TDataSetRow senderFake = TDataSetRow::createFromRawIndex( INVALID_DATASET_ROW );
+ chatMsg.CompressedIndex = senderFake.getCompressedIndex();
+ chatMsg.SenderNameId = 0;
+ }
+ else
+ {
+ chatMsg.CompressedIndex = sender.getCompressedIndex();
+ chatMsg.SenderNameId = charInfos ? charInfos->NameIndex : 0; // empty string if there is no sender
+ }
chatMsg.ChatMode = (uint8) senderChatMode;
chatMsg.PhraseId = phraseId;
chatMsg.CustomTxt = customTxt;
diff --git a/ryzom/server/src/input_output_service/chat_manager.h b/ryzom/server/src/input_output_service/chat_manager.h
index b3af3538be..f8699978b8 100644
--- a/ryzom/server/src/input_output_service/chat_manager.h
+++ b/ryzom/server/src/input_output_service/chat_manager.h
@@ -416,8 +416,9 @@ private :
* \param phraseId the string manager string number of the chat phrase
* \param sender is the id of the sender
* \param customTxt is a custom text which can be added immediately after the chat message, on the same line
+ * \param isEmote if true, change receiver to unknown so that client dont display "toto says : toto bows"
*/
- void sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, uint32 phraseId, const TDataSetRow &sender = TDataSetRow(), ucstring customTxt = ucstring(""));
+ void sendChat2Ex( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, uint32 phraseId, const TDataSetRow &sender = TDataSetRow(), ucstring customTxt = ucstring(""), bool isEmote = false);
/**
* Send a custom emote chat message
From 9bc4510bb9d20e81a56a5b156afba1cc24e817e2 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Mon, 9 Oct 2023 17:49:38 +0200
Subject: [PATCH 091/194] Fix
---
ryzom/client/src/game_context_menu.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/client/src/game_context_menu.cpp b/ryzom/client/src/game_context_menu.cpp
index 5c64b19645..a571ae2a1a 100644
--- a/ryzom/client/src/game_context_menu.cpp
+++ b/ryzom/client/src/game_context_menu.cpp
@@ -775,7 +775,7 @@ void CGameContextMenu::updateContextMenuMissionsOptions( bool forceHide )
if (result == string("Qui etes-vous ?")
|| result == string("Wer bist Du?")
|| result == string("Who are you?")
- || result == string("Quién eres tú?")
+ || result == string("¿Quién eres tú?")
|| result == string("Кто ты?"))
{
pVTM->setActive(false);
From 47083cc8944f16e9c4036fe8bc45c582436b24a2 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Wed, 18 Oct 2023 19:17:20 +0200
Subject: [PATCH 092/194] Added new R2 4 islands
---
.../common/data_common/r2/r2_entry_points.txt | 2142 +++---
ryzom/common/data_common/r2/r2_islands.xml | 5734 +++++++++--------
2 files changed, 3961 insertions(+), 3915 deletions(-)
diff --git a/ryzom/common/data_common/r2/r2_entry_points.txt b/ryzom/common/data_common/r2/r2_entry_points.txt
index 643a416c70..018ec2bab7 100644
--- a/ryzom/common/data_common/r2/r2_entry_points.txt
+++ b/ryzom/common/data_common/r2/r2_entry_points.txt
@@ -1,1068 +1,1074 @@
-a1 uiR2_Lakes01 uiR2EntryPoint01 31346 -1310 N
-a1 uiR2_Lakes01 uiR2EntryPoint02 31269 -1238 E
-a1 uiR2_Lakes01 uiR2EntryPoint03 31456 -1379 N
-
-a1 uiR2_Lakes07 uiR2EntryPoint01 36264 -1103 S
-a1 uiR2_Lakes07 uiR2EntryPoint02 36208 -1353 N
-a1 uiR2_Lakes07 uiR2EntryPoint03 36478 -1269 W
-a1 uiR2_Lakes07 uiR2EntryPoint04 36478 -1105 SW
-
-a1 uiR2_Lakes22 uiR2EntryPoint01 32250 -2800 W
-a1 uiR2_Lakes22 uiR2EntryPoint02 31920 -3160 N
-a1 uiR2_Lakes22 uiR2EntryPoint03 32080 -3090 N
-a1 uiR2_Lakes22 uiR2EntryPoint04 32250 -3065 NE
-
-l1 uiR2_Lakes15 uiR2EntryPoint01 34634 -1872 SW
-l1 uiR2_Lakes15 uiR2EntryPoint02 34258 -1991 W
-l1 uiR2_Lakes15 uiR2EntryPoint03 34321 -1860 S
-l1 uiR2_Lakes15 uiR2EntryPoint04 34510 -2060 W
-
-l1 uiR2_Lakes17 uiR2EntryPoint01 36150 -2310 NE
-l1 uiR2_Lakes17 uiR2EntryPoint02 35936 -2243 S
-l1 uiR2_Lakes17 uiR2EntryPoint03 35920 -1844 W
-l1 uiR2_Lakes17 uiR2EntryPoint04 36103 -1923 SW
-l1 uiR2_Lakes17 uiR2EntryPoint05 35895 -1935 S
-
-l1 uiR2_Lakes18 uiR2EntryPoint01 36725 -1993 E
-l1 uiR2_Lakes18 uiR2EntryPoint02 36688 -2159 N
-l1 uiR2_Lakes18 uiR2EntryPoint03 36879 -2217 N
-l1 uiR2_Lakes18 uiR2EntryPoint04 36941 -1970 SW
-
-l1 uiR2_Lakes26 uiR2EntryPoint01 34460 -3120 E
-l1 uiR2_Lakes26 uiR2EntryPoint02 34689 -2756 SW
-l1 uiR2_Lakes26 uiR2EntryPoint03 34681 -3111 N
-l1 uiR2_Lakes26 uiR2EntryPoint04 34671 -2931 N
-
-l1 uiR2_Lakes27 uiR2EntryPoint01 35605 -3080 NW
-l1 uiR2_Lakes27 uiR2EntryPoint02 35520 -2780 S
-l1 uiR2_Lakes27 uiR2EntryPoint03 35133 -2663 SE
-l1 uiR2_Lakes27 uiR2EntryPoint04 35283 -3051 N
-
-l1 uiR2_Lakes38 uiR2EntryPoint01 36720 -3740 S
-l1 uiR2_Lakes38 uiR2EntryPoint02 36751 -4024 NW
-l1 uiR2_Lakes38 uiR2EntryPoint03 36230 -3767 E
-l1 uiR2_Lakes38 uiR2EntryPoint04 36481 -3564 S
-
-l1 uiR2_Lakes39 uiR2EntryPoint01 37510 -3900 N
-l1 uiR2_Lakes39 uiR2EntryPoint02 37299 -3575 SE
-l1 uiR2_Lakes39 uiR2EntryPoint03 37861 -3719 W
-
-l2 uiR2_Lakes03 uiR2EntryPoint01 32961 -1388 N
-l2 uiR2_Lakes03 uiR2EntryPoint02 32784 -1507 NE
-l2 uiR2_Lakes03 uiR2EntryPoint03 33390 -1517 NW
-l2 uiR2_Lakes03 uiR2EntryPoint04 33365 -916 SW
-l2 uiR2_Lakes03 uiR2EntryPoint05 33033 -991 S
-
-l2 uiR2_Lakes08 uiR2EntryPoint01 36991 -1311 E
-l2 uiR2_Lakes08 uiR2EntryPoint02 37197 -1547 NW
-l2 uiR2_Lakes08 uiR2EntryPoint03 37230 -1035 S
-l2 uiR2_Lakes08 uiR2EntryPoint04 37111 -1264 SE
-l2 uiR2_Lakes08 uiR2EntryPoint05 37393 -1285 W
-
-l2 uiR2_Lakes16 uiR2EntryPoint01 35330 -2120 W
-l2 uiR2_Lakes16 uiR2EntryPoint02 35180 -2010 S
-l2 uiR2_Lakes16 uiR2EntryPoint03 35145 -2135 NE
-
-l2 uiR2_Lakes19 uiR2EntryPoint01 37681 -2167 N
-l2 uiR2_Lakes19 uiR2EntryPoint02 37367 -2341 NW
-l2 uiR2_Lakes19 uiR2EntryPoint03 37331 -2070 NE
-l2 uiR2_Lakes19 uiR2EntryPoint04 37521 -1929 S
-l2 uiR2_Lakes19 uiR2EntryPoint05 37773 -2008 W
-
-l2 uiR2_Lakes23 uiR2EntryPoint01 32727 -3120 W
-l2 uiR2_Lakes23 uiR2EntryPoint02 32694 -2802 W
-l2 uiR2_Lakes23 uiR2EntryPoint03 32523 -2995 E
-
-l2 uiR2_Lakes10 uiR2EntryPoint01 38531 -1379 NE
-l2 uiR2_Lakes10 uiR2EntryPoint02 38962 -1092 S
-l2 uiR2_Lakes10 uiR2EntryPoint03 38677 -1146 SE
-l2 uiR2_Lakes10 uiR2EntryPoint04 38953 -1444 NW
-
-l2 uiR2_Lakes11 uiR2EntryPoint01 31531 -2280 NW
-l2 uiR2_Lakes11 uiR2EntryPoint02 31517 -1946 SW
-l2 uiR2_Lakes11 uiR2EntryPoint03 31107 -2130 NE
-l2 uiR2_Lakes11 uiR2EntryPoint04 31203 -1938 SE
-l2 uiR2_Lakes11 uiR2EntryPoint05 31358 -2065 NW
-
-l3 uiR2_Lakes14 uiR2EntryPoint01 33438 -2169 E
-l3 uiR2_Lakes14 uiR2EntryPoint02 33562 -2128 SW
-l3 uiR2_Lakes14 uiR2EntryPoint03 33590 -2230 NW
-
-l3 uiR2_Lakes21 uiR2EntryPoint01 31247 -2790 E
-l3 uiR2_Lakes21 uiR2EntryPoint02 31128 -3031 N
-l3 uiR2_Lakes21 uiR2EntryPoint03 31536 -2778 W
-l3 uiR2_Lakes21 uiR2EntryPoint04 31413 -3101 NE
-l3 uiR2_Lakes21 uiR2EntryPoint05 31306 -3168 NW
-
-l3 uiR2_Lakes31 uiR2EntryPoint01 31295 -4080 N
-l3 uiR2_Lakes31 uiR2EntryPoint02 31425 -3724 SW
-l3 uiR2_Lakes31 uiR2EntryPoint03 31258 -3747 SE
-
-l3 uiR2_Lakes04 uiR2EntryPoint01 33740 -1068 E
-l3 uiR2_Lakes04 uiR2EntryPoint02 34268 -1202 W
-l3 uiR2_Lakes04 uiR2EntryPoint03 34145 -1045 SW
-l3 uiR2_Lakes04 uiR2EntryPoint04 33996 -1283 N
-l3 uiR2_Lakes04 uiR2EntryPoint05 33691 -1206 E
-
-l3 uiR2_Lakes06 uiR2EntryPoint01 35468 -1272 N
-l3 uiR2_Lakes06 uiR2EntryPoint02 35954 -1080 SW
-l3 uiR2_Lakes06 uiR2EntryPoint03 35764 -1026 E
-l3 uiR2_Lakes06 uiR2EntryPoint04 35438 -890 SE
-l3 uiR2_Lakes06 uiR2EntryPoint05 35634 -1288 N
-
-l3 uiR2_Lakes09 uiR2EntryPoint01 37916 -1124 S
-l3 uiR2_Lakes09 uiR2EntryPoint02 37709 -1451 NE
-l3 uiR2_Lakes09 uiR2EntryPoint03 38149 -1051 SW
-l3 uiR2_Lakes09 uiR2EntryPoint04 38073 -1412 NW
-
-l3 uiR2_Lakes20 uiR2EntryPoint01 38155 -2000 E
-l3 uiR2_Lakes20 uiR2EntryPoint02 38290 -1813 E
-l3 uiR2_Lakes20 uiR2EntryPoint03 38488 -1996 W
-l3 uiR2_Lakes20 uiR2EntryPoint04 38289 -2183 S
-
-l4 uiR2_Lakes33 uiR2EntryPoint01 32370 -3880 N
-l4 uiR2_Lakes33 uiR2EntryPoint02 32447 -3577 SE
-l4 uiR2_Lakes33 uiR2EntryPoint03 32561 -3774 SW
-l4 uiR2_Lakes33 uiR2EntryPoint04 32716 -3591 S
-l4 uiR2_Lakes33 uiR2EntryPoint05 32721 -3914 N
-
-l4 uiR2_Lakes02 uiR2EntryPoint01 32059 -1392 N
-l4 uiR2_Lakes02 uiR2EntryPoint02 32267 -1181 W
-l4 uiR2_Lakes02 uiR2EntryPoint03 32053 -1159 SE
-
-l4 uiR2_Lakes05 uiR2EntryPoint01 34650 -1133 NE
-l4 uiR2_Lakes05 uiR2EntryPoint02 35018 -1280 SW
-l4 uiR2_Lakes05 uiR2EntryPoint03 34984 -889 SW
-l4 uiR2_Lakes05 uiR2EntryPoint04 34769 -1166 NE
-
-l4 uiR2_Lakes12 uiR2EntryPoint01 32040 -2368 N
-l4 uiR2_Lakes12 uiR2EntryPoint02 32401 -2210 SW
-l4 uiR2_Lakes12 uiR2EntryPoint03 32019 -1939 S
-l4 uiR2_Lakes12 uiR2EntryPoint04 31891 -2241 E
-
-l4 uiR2_Lakes24 uiR2EntryPoint01 33350 -3120 N
-l4 uiR2_Lakes24 uiR2EntryPoint02 33200 -2865 N
-l4 uiR2_Lakes24 uiR2EntryPoint03 33450 -2950 W
-
-l4 uiR2_Lakes34 uiR2EntryPoint01 33520 -3910 N
-l4 uiR2_Lakes34 uiR2EntryPoint02 33206 -3990 W
-l4 uiR2_Lakes34 uiR2EntryPoint03 33276 -3784 N
-l4 uiR2_Lakes34 uiR2EntryPoint04 33619 -3638 NW
-l4 uiR2_Lakes34 uiR2EntryPoint05 33335 -3829 NE
-
-o1 uiR2_Lakes25 uiR2EntryPoint01 33980 -3110 N
-o1 uiR2_Lakes25 uiR2EntryPoint02 33900 -2990 NE
-o1 uiR2_Lakes25 uiR2EntryPoint03 34105 -2760 SW
-
-o1 uiR2_Lakes28 uiR2EntryPoint01 36480 -3100 N
-o1 uiR2_Lakes28 uiR2EntryPoint02 36146 -2679 SE
-o1 uiR2_Lakes28 uiR2EntryPoint03 36324 -2871 S
-
-o1 uiR2_Lakes29 uiR2EntryPoint01 37500 -3110 N
-o1 uiR2_Lakes29 uiR2EntryPoint02 37078 -2937 SW
-o1 uiR2_Lakes29 uiR2EntryPoint03 37389 -2802 S
-
-o1 uiR2_Lakes30 uiR2EntryPoint01 38100 -2850 E
-o1 uiR2_Lakes30 uiR2EntryPoint02 38414 -2715 S
-o1 uiR2_Lakes30 uiR2EntryPoint03 38489 -3116 NW
-
-o1 uiR2_Lakes32 uiR2EntryPoint01 31900 -3600 E
-o1 uiR2_Lakes32 uiR2EntryPoint02 32108 -3832 N
-o1 uiR2_Lakes32 uiR2EntryPoint03 32112 -3672 W
-
-o1 uiR2_Lakes35 uiR2EntryPoint01 34200 -4080 E
-o1 uiR2_Lakes35 uiR2EntryPoint02 34145 -3645 SE
-o1 uiR2_Lakes35 uiR2EntryPoint03 34387 -3988 S
-
-o1 uiR2_Lakes36 uiR2EntryPoint01 34960 -3770 N
-o1 uiR2_Lakes36 uiR2EntryPoint02 35149 -3703 SW
-o1 uiR2_Lakes36 uiR2EntryPoint03 34957 -3586 S
-
-o1 uiR2_Lakes37 uiR2EntryPoint01 35760 -3750 N
-o1 uiR2_Lakes37 uiR2EntryPoint02 35577 -3640 SE
-o1 uiR2_Lakes37 uiR2EntryPoint03 35912 -3874 N
-o1 uiR2_Lakes37 uiR2EntryPoint04 35902 -3589 SE
-
-o1 uiR2_Lakes40 uiR2EntryPoint01 38180 -3470 SE
-o1 uiR2_Lakes40 uiR2EntryPoint01 38416 -3819 NE
-o1 uiR2_Lakes40 uiR2EntryPoint01 38151 -3740 N
-
-
-//z1 uiR2_Lakes13 uiR2EntryPoint01 32479 -2298 E
-//z1 uiR2_Lakes13 uiR2EntryPoint02 32880 -2080 S
-//z1 uiR2_Lakes13 uiR2EntryPoint03 33050 -2265 NW
-
-// Desert
-
-
-a1 uiR2_Deserts03 uiR2EntryPoint01 22791 -1289 N
-a1 uiR2_Deserts03 uiR2EntryPoint02 23041 -1284 NW
-a1 uiR2_Deserts03 uiR2EntryPoint03 22873 -1110 SE
-
-a1 uiR2_Deserts21 uiR2EntryPoint01 25980 -2015 E
-a1 uiR2_Deserts21 uiR2EntryPoint02 26452 -1963 W
-a1 uiR2_Deserts21 uiR2EntryPoint03 26353 -1872 SW
-a1 uiR2_Deserts21 uiR2EntryPoint04 26214 -1961 S
-
-a1 uiR2_Deserts32 uiR2EntryPoint01 28070 -2340 E
-a1 uiR2_Deserts32 uiR2EntryPoint02 28240 -2719 N
-a1 uiR2_Deserts32 uiR2EntryPoint03 28318 -2643 W
-a1 uiR2_Deserts32 uiR2EntryPoint04 28293 -2445 W
-
-d1 uiR2_Deserts02 uiR2EntryPoint01 22383 -1512 N
-d1 uiR2_Deserts02 uiR2EntryPoint02 22454 -1186 SW
-d1 uiR2_Deserts02 uiR2EntryPoint03 22062 -1050 S
-d1 uiR2_Deserts02 uiR2EntryPoint04 22072 -1289 NE
-
-d1 uiR2_Deserts10 uiR2EntryPoint01 28923 -1434 N
-d1 uiR2_Deserts10 uiR2EntryPoint02 29217 -1371 E
-d1 uiR2_Deserts10 uiR2EntryPoint03 28901 -1115 SW
-
-d1 uiR2_Deserts22 uiR2EntryPoint01 26950 -2015 N
-d1 uiR2_Deserts22 uiR2EntryPoint02 26937 -1864 S
-d1 uiR2_Deserts22 uiR2EntryPoint03 27089 -2042 NW
-
-d1 uiR2_Deserts23 uiR2EntryPoint01 27600 -1924 S
-d1 uiR2_Deserts23 uiR2EntryPoint02 27575 -2351 NW
-d1 uiR2_Deserts23 uiR2EntryPoint03 27545 -2211 N
-d1 uiR2_Deserts23 uiR2EntryPoint04 27442 -1866 S
-
-d1 uiR2_Deserts28 uiR2EntryPoint01 25050 -2650 S
-d1 uiR2_Deserts28 uiR2EntryPoint02 24910 -2819 E
-d1 uiR2_Deserts28 uiR2EntryPoint03 24881 -2720 N
-d1 uiR2_Deserts28 uiR2EntryPoint04 24915 -2511 SW
-
-d1 uiR2_Deserts29 uiR2EntryPoint01 25880 -2630 E
-d1 uiR2_Deserts29 uiR2EntryPoint02 26022 -2374 SW
-d1 uiR2_Deserts29 uiR2EntryPoint03 26156 -2560 N
-d1 uiR2_Deserts29 uiR2EntryPoint04 26163 -2402 S
-
-d1 uiR2_Deserts31 uiR2EntryPoint01 27760 -2700 N
-d1 uiR2_Deserts31 uiR2EntryPoint02 27404 -2588 S
-d1 uiR2_Deserts31 uiR2EntryPoint03 27538 -2606 S
-d1 uiR2_Deserts31 uiR2EntryPoint04 27413 -2744 NE
-
-d1 uiR2_Deserts05 uiR2EntryPoint01 24257 -1520 NE
-d1 uiR2_Deserts05 uiR2EntryPoint02 24593 -1447 N
-d1 uiR2_Deserts05 uiR2EntryPoint03 24341 -1184 NE
-d1 uiR2_Deserts05 uiR2EntryPoint04 24535 -1054 S
-
-d1 uiR2_Deserts13 uiR2EntryPoint01 28942 -1919 S
-d1 uiR2_Deserts13 uiR2EntryPoint02 28538 -2241 E
-d1 uiR2_Deserts13 uiR2EntryPoint03 28814 -2251 NW
-d1 uiR2_Deserts13 uiR2EntryPoint04 28956 -2079 W
-d1 uiR2_Deserts13 uiR2EntryPoint05 28794 -1912 S
-
-d1 uiR2_Deserts17 uiR2EntryPoint01 23250 -1840 W
-d1 uiR2_Deserts17 uiR2EntryPoint02 23096 -1943 NE
-d1 uiR2_Deserts17 uiR2EntryPoint03 23034 -1839 E
-d1 uiR2_Deserts17 uiR2EntryPoint04 23096 -1713 S
-
-d1 uiR2_Deserts24 uiR2EntryPoint01 27915 -1875 S
-d1 uiR2_Deserts24 uiR2EntryPoint02 28136 -1960 S
-d1 uiR2_Deserts24 uiR2EntryPoint03 28233 -1746 S
-d1 uiR2_Deserts24 uiR2EntryPoint04 28324 -1841 W
-
-d3 uiR2_Deserts27 uiR2EntryPoint01 23305 -2454 E
-d3 uiR2_Deserts27 uiR2EntryPoint02 23313 -2682 N
-d3 uiR2_Deserts27 uiR2EntryPoint03 23464 -2611 N
-d3 uiR2_Deserts27 uiR2EntryPoint04 23496 -2442 SW
-
-d3 uiR2_Deserts04 uiR2EntryPoint01 23452 -1050 SE
-d3 uiR2_Deserts04 uiR2EntryPoint02 23846 -1435 W
-d3 uiR2_Deserts04 uiR2EntryPoint03 23599 -1418 N
-d3 uiR2_Deserts04 uiR2EntryPoint04 23927 -1163 W
-
-d3 uiR2_Deserts11 uiR2EntryPoint01 29554 -1468 N
-d3 uiR2_Deserts11 uiR2EntryPoint02 29922 -1222 W
-d3 uiR2_Deserts11 uiR2EntryPoint03 29622 -1048 S
-d3 uiR2_Deserts11 uiR2EntryPoint04 29615 -1306 SE
-d3 uiR2_Deserts11 uiR2EntryPoint05 29755 -1447 NW
-
-d3 uiR2_Deserts16 uiR2EntryPoint01 22304 -1856 E
-d3 uiR2_Deserts16 uiR2EntryPoint02 22513 -1995 E
-d3 uiR2_Deserts16 uiR2EntryPoint03 22687 -1891 N
-d3 uiR2_Deserts16 uiR2EntryPoint04 22537 -1877 N
-
-d4 uiR2_Deserts18 uiR2EntryPoint01 23730 -2280 N
-d4 uiR2_Deserts18 uiR2EntryPoint02 23666 -2154 NE
-d4 uiR2_Deserts18 uiR2EntryPoint03 23871 -1977 SE
-d4 uiR2_Deserts18 uiR2EntryPoint04 23570 -2056 NE
-d4 uiR2_Deserts18 uiR2EntryPoint05 23834 -1997 W
-
-d4 uiR2_Deserts19 uiR2EntryPoint01 24560 -2015 N
-d4 uiR2_Deserts19 uiR2EntryPoint02 24267 -1998 E
-d4 uiR2_Deserts19 uiR2EntryPoint03 24841 -2002 W
-d4 uiR2_Deserts19 uiR2EntryPoint04 24562 -1914 S
-
-d4 uiR2_Deserts09 uiR2EntryPoint01 27814 -1375 N
-d4 uiR2_Deserts09 uiR2EntryPoint02 27471 -1503 E
-d4 uiR2_Deserts09 uiR2EntryPoint03 27609 -1197 E
-d4 uiR2_Deserts09 uiR2EntryPoint04 27730 -1088 S
-d4 uiR2_Deserts09 uiR2EntryPoint05 27529 -1014 SE
-
-d4 uiR2_Deserts14 uiR2EntryPoint01 30629 -2300 N
-// d4 uiR2_Deserts14 uiR2EntryPoint04 30747 -2023 SW
-d4 uiR2_Deserts14 uiR2EntryPoint02 30577 -1836 S
-d4 uiR2_Deserts14 uiR2EntryPoint03 30347 -2140 SE
-// d4 uiR2_Deserts14 uiR2EntryPoint05 30407 -1835 SE
-
-d5 uiR2_Deserts15 uiR2EntryPoint01 21500 -1830 E
-d5 uiR2_Deserts15 uiR2EntryPoint02 21933 -1833 W
-d5 uiR2_Deserts15 uiR2EntryPoint03 21763 -1839 E
-d5 uiR2_Deserts15 uiR2EntryPoint04 21515 -1913 N
-
-d5 uiR2_Deserts30 uiR2EntryPoint01 26650 -2650 E
-d5 uiR2_Deserts30 uiR2EntryPoint02 27036 -2638 W
-d5 uiR2_Deserts30 uiR2EntryPoint03 26922 -2433 SE
-d5 uiR2_Deserts30 uiR2EntryPoint04 26779 -2504 S
-
-d5 uiR2_Deserts33 uiR2EntryPoint01 29510 -2040 S
-d5 uiR2_Deserts33 uiR2EntryPoint02 29517 -2239 N
-d5 uiR2_Deserts33 uiR2EntryPoint03 29712 -2523 NW
-d5 uiR2_Deserts33 uiR2EntryPoint04 29920 -2157 W
-d5 uiR2_Deserts33 uiR2EntryPoint05 29758 -2318 W
-
-d5 uiR2_Deserts08 uiR2EntryPoint01 26694 -1485 N
-d5 uiR2_Deserts08 uiR2EntryPoint02 26949 -1512 NW
-d5 uiR2_Deserts08 uiR2EntryPoint03 26482 -1366 E
-d5 uiR2_Deserts08 uiR2EntryPoint04 26875 -1010 S
-d5 uiR2_Deserts08 uiR2EntryPoint05 26460 -1205 NE
-
-d6 uiR2_Deserts06 uiR2EntryPoint01 25523 -1500 NW
-d6 uiR2_Deserts06 uiR2EntryPoint02 25419 -1142 SW
-d6 uiR2_Deserts06 uiR2EntryPoint03 25220 -1416 W
-d6 uiR2_Deserts06 uiR2EntryPoint04 25168 -1168 SW
-
-d6 uiR2_Deserts20 uiR2EntryPoint01 25206 -2118 N
-d6 uiR2_Deserts20 uiR2EntryPoint02 25435 -1997 W
-d6 uiR2_Deserts20 uiR2EntryPoint03 25410 -2177 N
-d6 uiR2_Deserts20 uiR2EntryPoint04 25532 -1942 N
-d6 uiR2_Deserts20 uiR2EntryPoint05 25724 -2192 W
-
-d6 uiR2_Deserts25 uiR2EntryPoint01 21845 -2475 S
-d6 uiR2_Deserts25 uiR2EntryPoint02 21891 -2836 W
-d6 uiR2_Deserts25 uiR2EntryPoint03 21442 -2799 NW
-d6 uiR2_Deserts25 uiR2EntryPoint04 21460 -2447 S
-d6 uiR2_Deserts25 uiR2EntryPoint05 21765 -2480 W
-
-d6 uiR2_Deserts26 uiR2EntryPoint01 22627 -2480 W
-d6 uiR2_Deserts26 uiR2EntryPoint02 22352 -2474 E
-d6 uiR2_Deserts26 uiR2EntryPoint03 22925 -2483 W
-d6 uiR2_Deserts26 uiR2EntryPoint04 22790 -2627 N
-
-
-
-o1 uiR2_Deserts07 uiR2EntryPoint01 26051 -1405 N
-o1 uiR2_Deserts07 uiR2EntryPoint02 26153 -1044 S
-o1 uiR2_Deserts07 uiR2EntryPoint03 25855 -1233 E
-o1 uiR2_Deserts07 uiR2EntryPoint04 25818 -1027 SE
-
-o1 uiR2_Deserts12 uiR2EntryPoint01 30818 -1487 NW
-o1 uiR2_Deserts12 uiR2EntryPoint02 30726 -1023 S
-o1 uiR2_Deserts12 uiR2EntryPoint03 30369 -1083 SE
-o1 uiR2_Deserts12 uiR2EntryPoint04 30389 -1307 E
-o1 uiR2_Deserts12 uiR2EntryPoint05 30539 -1440 NW
-
-
-
-//z1 uiR2_Deserts01 uiR2EntryPoint01 21570 -1363 N
-//z1 uiR2_Deserts01 uiR2EntryPoint02 21340 -1066 SE
-//z1 uiR2_Deserts01 uiR2EntryPoint03 21678 -1129 SW
-//z1 uiR2_Deserts01 uiR2EntryPoint04 21503 -1296 N
-
-
-
-
-// Forest
-
-
-a1 uiR2_Forest04 uiR2EntryPoint01 24213 -11157 W
-a1 uiR2_Forest04 uiR2EntryPoint02 23975 -11225 E
-a1 uiR2_Forest04 uiR2EntryPoint03 23827 -11373 NE
-a1 uiR2_Forest04 uiR2EntryPoint04 24180 -11383 NW
-a1 uiR2_Forest04 uiR2EntryPoint05 23871 -11059 SE
-a1 uiR2_Forest04 uiR2EntryPoint06 24189 -10982 SW
-
-a1 uiR2_Forest05 uiR2EntryPoint01 24752 -11360 N
-a1 uiR2_Forest05 uiR2EntryPoint02 24602 -11060 SE
-a1 uiR2_Forest05 uiR2EntryPoint03 24865 -11100 SW
-a1 uiR2_Forest05 uiR2EntryPoint04 25046 -11197 W
-a1 uiR2_Forest05 uiR2EntryPoint05 24640 -11453 N
-a1 uiR2_Forest05 uiR2EntryPoint06 24537 -11201 E
-
-a1 uiR2_Forest14 uiR2EntryPoint01 21282 -12196 N
-a1 uiR2_Forest14 uiR2EntryPoint02 21276 -11986 S
-a1 uiR2_Forest14 uiR2EntryPoint03 21276 -11766 S
-
-a1 uiR2_Forest27 uiR2EntryPoint01 21173 -12644 W
-a1 uiR2_Forest27 uiR2EntryPoint02 21068 -12561 S
-a1 uiR2_Forest27 uiR2EntryPoint03 21113 -12714 N
-a1 uiR2_Forest27 uiR2EntryPoint04 21119 -12639 S
-
-a1 uiR2_Forest32 uiR2EntryPoint01 24680 -12600 SE
-a1 uiR2_Forest32 uiR2EntryPoint02 24538 -13025 N
-a1 uiR2_Forest32 uiR2EntryPoint03 24822 -13039 N
-a1 uiR2_Forest32 uiR2EntryPoint04 24718 -12889 N
-a1 uiR2_Forest32 uiR2EntryPoint05 24830 -12554 SW
-a1 uiR2_Forest32 uiR2EntryPoint06 24659 -12750 E
-
-f1 uiR2_Forest03 uiR2EntryPoint01 23010 -11209 E
-f1 uiR2_Forest03 uiR2EntryPoint02 23080 -11152 E
-f1 uiR2_Forest03 uiR2EntryPoint03 23400 -11400 NW
-f1 uiR2_Forest03 uiR2EntryPoint04 23400 -11000 SW
-f1 uiR2_Forest03 uiR2EntryPoint05 23000 -11000 SE
-
-f1 uiR2_Forest19 uiR2EntryPoint01 24944 -12220 N
-f1 uiR2_Forest19 uiR2EntryPoint02 25357 -12233 N
-f1 uiR2_Forest19 uiR2EntryPoint03 25265 -12240 W
-f1 uiR2_Forest19 uiR2EntryPoint04 24971 -11947 S
-f1 uiR2_Forest19 uiR2EntryPoint05 25155 -12081 SE
-
-f1 uiR2_Forest23 uiR2EntryPoint01 28465 -12056 W
-f1 uiR2_Forest23 uiR2EntryPoint02 28011 -12082 E
-f1 uiR2_Forest23 uiR2EntryPoint03 28496 -12248 N
-f1 uiR2_Forest23 uiR2EntryPoint04 28375 -11911 SE
-f1 uiR2_Forest23 uiR2EntryPoint05 28194 -12118 E
-f1 uiR2_Forest23 uiR2EntryPoint06 27926 -11988 SE
-
-f1 uiR2_Forest39 uiR2EntryPoint01 30520 -12600 S
-f1 uiR2_Forest39 uiR2EntryPoint02 30143 -12958 E
-f1 uiR2_Forest39 uiR2EntryPoint03 30195 -12559 SE
-f1 uiR2_Forest39 uiR2EntryPoint04 30621 -12958 NW
-f1 uiR2_Forest39 uiR2EntryPoint05 30298 -12694 SE
-f1 uiR2_Forest39 uiR2EntryPoint06 30524 -12799 W
-f1 uiR2_Forest39 uiR2EntryPoint07 30291 -12910 NE
-
-f1 uiR2_Forest41 uiR2EntryPoint01 22140 -13150 SE
-f1 uiR2_Forest41 uiR2EntryPoint02 22401 -13440 NW
-f1 uiR2_Forest41 uiR2EntryPoint03 22263 -13269 S
-f1 uiR2_Forest41 uiR2EntryPoint04 22338 -13133 SW
-f1 uiR2_Forest41 uiR2EntryPoint05 22173 -13476 NE
-
-f1 uiR2_Forest20 uiR2EntryPoint01 26110 -11936 SW
-f1 uiR2_Forest20 uiR2EntryPoint02 25734 -11920 SE
-f1 uiR2_Forest20 uiR2EntryPoint03 25691 -12200 SW
-f1 uiR2_Forest20 uiR2EntryPoint04 26113 -12164 NW
-f1 uiR2_Forest20 uiR2EntryPoint05 25950 -12097 N
-
-f1 uiR2_Forest31 uiR2EntryPoint01 23470 -12600 SE
-f1 uiR2_Forest31 uiR2EntryPoint02 23681 -12712 S
-f1 uiR2_Forest31 uiR2EntryPoint03 23510 -13001 NE
-f1 uiR2_Forest31 uiR2EntryPoint04 23948 -13020 W
-f1 uiR2_Forest31 uiR2EntryPoint05 23598 -12850 SW
-f1 uiR2_Forest31 uiR2EntryPoint06 23995 -12787 W
-f1 uiR2_Forest31 uiR2EntryPoint07 23879 -12573 W
-
-f2 uiR2_Forest34 uiR2EntryPoint01 26220 -12600 SE
-f2 uiR2_Forest34 uiR2EntryPoint02 26613 -12753 NW
-f2 uiR2_Forest34 uiR2EntryPoint03 26413 -12556 S
-f2 uiR2_Forest34 uiR2EntryPoint04 26238 -12888 N
-f2 uiR2_Forest34 uiR2EntryPoint05 26661 -12640 W
-
-f2 uiR2_Forest35 uiR2EntryPoint01 27100 -12600 S
-f2 uiR2_Forest35 uiR2EntryPoint02 27043 -12938 N
-f2 uiR2_Forest35 uiR2EntryPoint03 27222 -12726 W
-
-f2 uiR2_Forest45 uiR2EntryPoint01 26000 -13600 SW
-f2 uiR2_Forest45 uiR2EntryPoint02 25983 -13976 NW
-f2 uiR2_Forest45 uiR2EntryPoint03 25684 -13611 SE
-f2 uiR2_Forest45 uiR2EntryPoint04 25835 -13674 SE
-f2 uiR2_Forest45 uiR2EntryPoint05 26004 -13834 NW
-f2 uiR2_Forest45 uiR2EntryPoint06 25786 -13883 N
-
-f2 uiR2_Forest08 uiR2EntryPoint01 26957 -11364 NE
-f2 uiR2_Forest08 uiR2EntryPoint02 27200 -11178 S
-f2 uiR2_Forest08 uiR2EntryPoint03 27360 -11040 SW
-f2 uiR2_Forest08 uiR2EntryPoint04 27002 -10967 SE
-f2 uiR2_Forest08 uiR2EntryPoint05 27406 -11414 NW
-
-f2 uiR2_Forest12 uiR2EntryPoint01 29919 -11062 N
-f2 uiR2_Forest12 uiR2EntryPoint02 29855 -11111 NE
-f2 uiR2_Forest12 uiR2EntryPoint03 29986 -10996 SW
-
-f2 uiR2_Forest33 uiR2EntryPoint01 25300 -12600 S
-f2 uiR2_Forest33 uiR2EntryPoint02 25598 -13023 N
-f2 uiR2_Forest33 uiR2EntryPoint03 25598 -12632 W
-f2 uiR2_Forest33 uiR2EntryPoint04 25299 -12957 N
-
-f3 uiR2_Forest38 uiR2EntryPoint01 29630 -12600 SW
-f3 uiR2_Forest38 uiR2EntryPoint02 29735 -12939 NW
-f3 uiR2_Forest38 uiR2EntryPoint03 29350 -12779 E
-f3 uiR2_Forest38 uiR2EntryPoint04 29525 -12714 SE
-f3 uiR2_Forest38 uiR2EntryPoint05 29391 -12585 SE
-f3 uiR2_Forest38 uiR2EntryPoint06 29465 -13029 NE
-
-f3 uiR2_Forest46 uiR2EntryPoint01 27000 -13600 S
-f3 uiR2_Forest46 uiR2EntryPoint02 28057 -14465 N
-f3 uiR2_Forest46 uiR2EntryPoint03 26890 -14013 NE
-f3 uiR2_Forest46 uiR2EntryPoint04 27254 -13872 S
-
-f3 uiR2_Forest02 uiR2EntryPoint01 22236 -11281 NE
-f3 uiR2_Forest02 uiR2EntryPoint02 22468 -11198 W
-f3 uiR2_Forest02 uiR2EntryPoint03 22222 -11426 NE
-f3 uiR2_Forest02 uiR2EntryPoint04 22353 -11000 S
-f3 uiR2_Forest02 uiR2EntryPoint05 22446 -11374 NW
-f3 uiR2_Forest02 uiR2EntryPoint06 22137 -11199 E
-f3 uiR2_Forest02 uiR2EntryPoint07 22158 -10990 E
-f3 uiR2_Forest02 uiR2EntryPoint08 22259 -11108 E
-
-f3 uiR2_Forest07 uiR2EntryPoint01 26322 -11348 N
-f3 uiR2_Forest07 uiR2EntryPoint02 26310 -11200 E
-f3 uiR2_Forest07 uiR2EntryPoint03 26545 -11157 W
-f3 uiR2_Forest07 uiR2EntryPoint04 26185 -10967 E
-f3 uiR2_Forest07 uiR2EntryPoint05 26171 -11200 E
-f3 uiR2_Forest07 uiR2EntryPoint06 26446 -11021 SW
-f3 uiR2_Forest07 uiR2EntryPoint07 26222 -11401 NE
-f3 uiR2_Forest07 uiR2EntryPoint08 26498 -11359 W
-
-f3 uiR2_Forest16 uiR2EntryPoint01 23114 -11953 W
-f3 uiR2_Forest16 uiR2EntryPoint02 22883 -11999 E
-f3 uiR2_Forest16 uiR2EntryPoint03 22743 -12136 N
-f3 uiR2_Forest16 uiR2EntryPoint04 22735 -11817 SE
-f3 uiR2_Forest16 uiR2EntryPoint05 23038 -12182 NW
-
-f3 uiR2_Forest18 uiR2EntryPoint01 24326 -11878 SE
-f3 uiR2_Forest18 uiR2EntryPoint02 24390 -12095 N
-f3 uiR2_Forest18 uiR2EntryPoint03 24525 -12090 E
-f3 uiR2_Forest18 uiR2EntryPoint04 24225 -11836 E
-
-f4 uiR2_Forest25 uiR2EntryPoint01 29903 -11886 SO
-f4 uiR2_Forest25 uiR2EntryPoint02 29714 -12046 NE
-f4 uiR2_Forest25 uiR2EntryPoint03 29730 -11826 SE
-f4 uiR2_Forest25 uiR2EntryPoint04 29959 -11791 SW
-
-f4 uiR2_Forest01 uiR2EntryPoint01 21581 -11056 S
-f4 uiR2_Forest01 uiR2EntryPoint02 21733 -11412 NW
-f4 uiR2_Forest01 uiR2EntryPoint03 21648 -11248 S
-f4 uiR2_Forest01 uiR2EntryPoint04 21510 -11443 NE
-f4 uiR2_Forest01 uiR2EntryPoint05 21400 -11247 E
-f4 uiR2_Forest01 uiR2EntryPoint06 21762 -10995 S
-f4 uiR2_Forest01 uiR2EntryPoint07 21855 -11231 W
-f4 uiR2_Forest01 uiR2EntryPoint08 21355 -11040 E
-f4 uiR2_Forest01 uiR2EntryPoint09 21596 -10946 S
-
-f4 uiR2_Forest10 uiR2EntryPoint01 28673 -11191 N
-f4 uiR2_Forest10 uiR2EntryPoint02 28645 -11007 S
-f4 uiR2_Forest10 uiR2EntryPoint03 28566 -11110 E
-
-f4 uiR2_Forest24 uiR2EntryPoint01 29365 -11968 W
-f4 uiR2_Forest24 uiR2EntryPoint02 28963 -11969 E
-f4 uiR2_Forest24 uiR2EntryPoint03 29146 -11817 S
-f4 uiR2_Forest24 uiR2EntryPoint04 29117 -12186 N
-f4 uiR2_Forest24 uiR2EntryPoint05 29139 -12001 N
-
-f4 uiR2_Forest30 uiR2EntryPoint01 22865 -12920 N
-f4 uiR2_Forest30 uiR2EntryPoint02 23068 -12632 W
-f4 uiR2_Forest30 uiR2EntryPoint03 22773 -12782 E
-f4 uiR2_Forest30 uiR2EntryPoint04 22901 -12688 S
-
-f4 uiR2_Forest40 uiR2EntryPoint01 21150 -13350 N
-f4 uiR2_Forest40 uiR2EntryPoint02 21536 -13506 N
-f4 uiR2_Forest40 uiR2EntryPoint03 21359 -13195 S
-f4 uiR2_Forest40 uiR2EntryPoint04 21162 -13553 NE
-f4 uiR2_Forest40 uiR2EntryPoint05 21267 -13280 W
-f4 uiR2_Forest40 uiR2EntryPoint06 21118 -13278 SE
-
-
-
-o1 uiR2_Forest09 uiR2EntryPoint01 28210 -10964 SW
-o1 uiR2_Forest09 uiR2EntryPoint02 28058 -11137 S
-o1 uiR2_Forest09 uiR2EntryPoint03 27855 -11099 E
-
-o1 uiR2_Forest13 uiR2EntryPoint01 30783 -11199 W
-o1 uiR2_Forest13 uiR2EntryPoint02 30569 -10957 S
-o1 uiR2_Forest13 uiR2EntryPoint03 30355 -11071 E
-
-o1 uiR2_Forest21 uiR2EntryPoint01 26547 -12021 E
-o1 uiR2_Forest21 uiR2EntryPoint02 26748 -11980 SW
-o1 uiR2_Forest21 uiR2EntryPoint03 26636 -12215 N
-o1 uiR2_Forest21 uiR2EntryPoint04 26560 -11775 S
-
-o1 uiR2_Forest26 uiR2EntryPoint01 30827 -11803 W
-o1 uiR2_Forest26 uiR2EntryPoint02 30559 -11816 E
-o1 uiR2_Forest26 uiR2EntryPoint03 30347 -11839 E
-
-o1 uiR2_Forest28 uiR2EntryPoint01 21720 -12717 N
-o1 uiR2_Forest28 uiR2EntryPoint02 21559 -12569 S
-o1 uiR2_Forest28 uiR2EntryPoint03 21581 -12739 NE
-o1 uiR2_Forest28 uiR2EntryPoint04 21831 -12579 SW
-o1 uiR2_Forest28 uiR2EntryPoint05 21676 -12643 E
-
-
-
-//z1 uiR2_Forest06 uiR2EntryPoint01 25424 -11251 E
-//z1 uiR2_Forest06 uiR2EntryPoint02 25768 -11068 SW
-//z1 uiR2_Forest06 uiR2EntryPoint03 25616 -11254 NW
-
-//z1 uiR2_Forest11 uiR2EntryPoint01 29400 -11408 NW
-//z1 uiR2_Forest11 uiR2EntryPoint02 29273 -11198 S
-//z1 uiR2_Forest11 uiR2EntryPoint03 29112 -11028 SE
-
-//z1 uiR2_Forest15 uiR2EntryPoint01 22136 -11787 S
-//z1 uiR2_Forest15 uiR2EntryPoint02 21908 -12109 NE
-//z1 uiR2_Forest15 uiR2EntryPoint03 21903 -11855 SE
-//z1 uiR2_Forest15 uiR2EntryPoint04 22206 -12161 NW
-//z1 uiR2_Forest15 uiR2EntryPoint05 22066 -11993 N
-
-//z1 uiR2_Forest17 uiR2EntryPoint01 23533 -11761 SE
-//z1 uiR2_Forest17 uiR2EntryPoint02 23689 -12007 N
-//z1 uiR2_Forest17 uiR2EntryPoint03 23688 -12223 N
-//z1 uiR2_Forest17 uiR2EntryPoint04 23850 -11791 SW
-//z1 uiR2_Forest17 uiR2EntryPoint05 23464 -12000 E
-//z1 uiR2_Forest17 uiR2EntryPoint06 23862 -12143 NW
-
-//z1 uiR2_Forest22 uiR2EntryPoint01 27153 -12009 E
-//z1 uiR2_Forest22 uiR2EntryPoint02 27581 -11992 SW
-//z1 uiR2_Forest22 uiR2EntryPoint03 27374 -12176 N
-//z1 uiR2_Forest22 uiR2EntryPoint04 27381 -11938 S
-//z1 uiR2_Forest22 uiR2EntryPoint05 27260 -12085 E
-//z1 uiR2_Forest22 uiR2EntryPoint06 27444 -12071 W
-
-//z1 uiR2_Forest29 uiR2EntryPoint01 22306 -12674 W
-//z1 uiR2_Forest29 uiR2EntryPoint02 22404 -12746 N
-//z1 uiR2_Forest29 uiR2EntryPoint03 22152 -12719 NE
-
-//z1 uiR2_Forest36 uiR2EntryPoint01 27800 -12770 E
-//z1 uiR2_Forest36 uiR2EntryPoint02 28127 -12573 SW
-//z1 uiR2_Forest36 uiR2EntryPoint03 28218 -13020 NW
-//z1 uiR2_Forest36 uiR2EntryPoint04 27909 -12736 SW
-//z1 uiR2_Forest36 uiR2EntryPoint05 27805 -12614 S
-//z1 uiR2_Forest36 uiR2EntryPoint06 27896 -12855 E
-//z1 uiR2_Forest36 uiR2EntryPoint07 27794 -13005 NW
-//z1 uiR2_Forest36 uiR2EntryPoint08 28058 -12493 SE
-
-//z1 uiR2_Forest37 uiR2EntryPoint01 28980 -12920 W
-//z1 uiR2_Forest37 uiR2EntryPoint02 28880 -12886 SE
-//z1 uiR2_Forest37 uiR2EntryPoint03 28879 -13020 NE
-//z1 uiR2_Forest37 uiR2EntryPoint04 28522 -12562 E
-//z1 uiR2_Forest37 uiR2EntryPoint05 28712 -12686 s
-//z1 uiR2_Forest37 uiR2EntryPoint06 28747 -12911 N
-
-//z1 uiR2_Forest42 uiR2EntryPoint01 22830 -13600 NE
-//z1 uiR2_Forest42 uiR2EntryPoint02 23342 -13475 W
-//z1 uiR2_Forest42 uiR2EntryPoint03 22853 -13394 SE
-//z1 uiR2_Forest42 uiR2EntryPoint04 23099 -13430 S
-
-//z1 uiR2_Forest43 uiR2EntryPoint01 24000 -13600 N
-//z1 uiR2_Forest43 uiR2EntryPoint02 24076 -13838 W
-//z1 uiR2_Forest43 uiR2EntryPoint03 23825 -13411 SE
-//z1 uiR2_Forest43 uiR2EntryPoint04 24208 -13583 W
-//z1 uiR2_Forest43 uiR2EntryPoint05 24000 -13364 S
-//z1 uiR2_Forest43 uiR2EntryPoint06 24039 -13492 W
-
-//z1 uiR2_Forest44 uiR2EntryPoint01 24670 -13600 S
-//z1 uiR2_Forest44 uiR2EntryPoint02 24877 -14823 N
-//z1 uiR2_Forest44 uiR2EntryPoint03 24959 -14224 W
-//z1 uiR2_Forest44 uiR2EntryPoint04 24653 -14092 N
-//z1 uiR2_Forest44 uiR2EntryPoint05 24565 -13357 S
-//z1 uiR2_Forest44 uiR2EntryPoint06 24642 -14325 E
-
-
-
-
-// Jungle
-
-a1 uiR2_Jungle14 uiR2EntryPoint01 40700 -11200 E
-a1 uiR2_Jungle14 uiR2EntryPoint02 40876 -11370 W
-a1 uiR2_Jungle14 uiR2EntryPoint03 40681 -11376 W
-a1 uiR2_Jungle14 uiR2EntryPoint04 40841 -10966 W
-
-a1 uiR2_Jungle23 uiR2EntryPoint01 38200 -12000 N
-a1 uiR2_Jungle23 uiR2EntryPoint02 38163 -11917 W
-a1 uiR2_Jungle23 uiR2EntryPoint03 37956 -12037 E
-a1 uiR2_Jungle23 uiR2EntryPoint04 38356 -11999 NW
-a1 uiR2_Jungle23 uiR2EntryPoint05 38489 -11936 NW
-a1 uiR2_Jungle23 uiR2EntryPoint06 38196 -11782 S
-
-a1 uiR2_Jungle27 uiR2EntryPoint01 31200 -12700 N
-a1 uiR2_Jungle27 uiR2EntryPoint02 31207 -12533 S
-a1 uiR2_Jungle27 uiR2EntryPoint03 31299 -12813 NW
-
-j1 uiR2_Jungle06 uiR2EntryPoint01 34426 -11339 NE
-j1 uiR2_Jungle06 uiR2EntryPoint02 34698 -11060 W
-j1 uiR2_Jungle06 uiR2EntryPoint03 34836 -11243 W
-j1 uiR2_Jungle06 uiR2EntryPoint04 34651 -11405 S
-j1 uiR2_Jungle06 uiR2EntryPoint05 34372 -11029 E
-
-j1 uiR2_Jungle07 uiR2EntryPoint01 35300 -11200 SE
-j1 uiR2_Jungle07 uiR2EntryPoint02 35534 -11057 SW
-j1 uiR2_Jungle07 uiR2EntryPoint03 35424 -11378 N
-j1 uiR2_Jungle07 uiR2EntryPoint04 35100 -11026 SE
-
-j1 uiR2_Jungle15 uiR2EntryPoint01 31300 -12000 N
-j1 uiR2_Jungle15 uiR2EntryPoint02 31181 -11823 SE
-j1 uiR2_Jungle15 uiR2EntryPoint03 31185 -12211 NE
-j1 uiR2_Jungle15 uiR2EntryPoint04 31549 -12148 NW
-j1 uiR2_Jungle15 uiR2EntryPoint05 31549 -11920 W
-
-j1 uiR2_Jungle18 uiR2EntryPoint01 34000 -12000 S
-j1 uiR2_Jungle18 uiR2EntryPoint02 34234 -12243 N
-j1 uiR2_Jungle18 uiR2EntryPoint03 34161 -11953 E
-j1 uiR2_Jungle18 uiR2EntryPoint04 34191 -11792 S
-j1 uiR2_Jungle18 uiR2EntryPoint05 33799 -11882 SE
-j1 uiR2_Jungle18 uiR2EntryPoint06 33832 -12256 N
-
-j1 uiR2_Jungle36 uiR2EntryPoint01 37074 -12782 N
-j1 uiR2_Jungle36 uiR2EntryPoint02 37071 -12878 SW
-j1 uiR2_Jungle36 uiR2EntryPoint03 36896 -12875 E
-j1 uiR2_Jungle36 uiR2EntryPoint04 36934 -12737 S
-j1 uiR2_Jungle36 uiR2EntryPoint05 36978 -13070 N
-j1 uiR2_Jungle36 uiR2EntryPoint06 36800 -13062 NE
-
-j1 uiR2_Jungle41 uiR2EntryPoint01 40648 -12573 N
-j1 uiR2_Jungle41 uiR2EntryPoint02 40696 -12807 E
-j1 uiR2_Jungle41 uiR2EntryPoint03 40771 -13042 N
-
-j1 uiR2_Jungle53 uiR2EntryPoint01 39683 -13678 W
-j1 uiR2_Jungle53 uiR2EntryPoint02 39413 -13784 NE
-j1 uiR2_Jungle53 uiR2EntryPoint03 39514 -13435 SE
-j1 uiR2_Jungle53 uiR2EntryPoint04 39718 -13338 S
-
-j2 uiR2_Jungle01 uiR2EntryPoint01 31300 -11100 S
-j2 uiR2_Jungle01 uiR2EntryPoint02 31257 -10932 E
-j2 uiR2_Jungle01 uiR2EntryPoint03 31594 -11118 N
-j2 uiR2_Jungle01 uiR2EntryPoint04 31080 -11296 NE
-
-j2 uiR2_Jungle28 uiR2EntryPoint01 31600 -12550 N
-j2 uiR2_Jungle28 uiR2EntryPoint02 31788 -12534 S
-
-j2 uiR2_Jungle32 uiR2EntryPoint01 33720 -12700 SW
-j2 uiR2_Jungle32 uiR2EntryPoint02 33855 -12620 W
-j2 uiR2_Jungle32 uiR2EntryPoint03 33646 -12853 SE
-j2 uiR2_Jungle32 uiR2EntryPoint04 33757 -12969 NW
-
-j2 uiR2_Jungle34 uiR2EntryPoint01 35220 -12610 N
-j2 uiR2_Jungle34 uiR2EntryPoint02 35030 -12535 SW
-j2 uiR2_Jungle34 uiR2EntryPoint03 35028 -12728 SE
-j2 uiR2_Jungle34 uiR2EntryPoint04 35304 -12781 W
-j2 uiR2_Jungle34 uiR2EntryPoint05 35419 -12726 S
-
-j2 uiR2_Jungle51 uiR2EntryPoint01 38204 -13916 N
-j2 uiR2_Jungle51 uiR2EntryPoint02 38135 -13696 NW
-j2 uiR2_Jungle51 uiR2EntryPoint03 38032 -13508 E
-
-j2 uiR2_Jungle02 uiR2EntryPoint01 32203 -11283 NW
-j2 uiR2_Jungle02 uiR2EntryPoint02 32062 -10944 E
-j2 uiR2_Jungle02 uiR2EntryPoint03 32396 -11409 N
-j2 uiR2_Jungle02 uiR2EntryPoint04 32557 -11107 S
-j2 uiR2_Jungle02 uiR2EntryPoint05 32533 -10964 W
-
-j2 uiR2_Jungle05 uiR2EntryPoint01 33768 -11278 N
-j2 uiR2_Jungle05 uiR2EntryPoint02 33981 -11292 W
-
-j3 uiR2_Jungle38 uiR2EntryPoint01 38290 -12740 E
-j3 uiR2_Jungle38 uiR2EntryPoint02 38288 -12905 E
-j3 uiR2_Jungle38 uiR2EntryPoint03 38446 -13070 E
-j3 uiR2_Jungle38 uiR2EntryPoint04 38665 -12895 NW
-j3 uiR2_Jungle38 uiR2EntryPoint05 38475 -12755 S
-
-j3 uiR2_Jungle49 uiR2EntryPoint01 36953 -13596 N
-j3 uiR2_Jungle49 uiR2EntryPoint02 36931 -13379 SW
-j3 uiR2_Jungle49 uiR2EntryPoint03 36564 -13630 NE
-j3 uiR2_Jungle49 uiR2EntryPoint04 36901 -13803 N
-
-j3 uiR2_Jungle52 uiR2EntryPoint01 39145 -13665 W
-j3 uiR2_Jungle52 uiR2EntryPoint02 39053 -13517 E
-j3 uiR2_Jungle52 uiR2EntryPoint03 38963 -13387 N
-j3 uiR2_Jungle52 uiR2EntryPoint04 38710 -13477 S
-j3 uiR2_Jungle52 uiR2EntryPoint05 38931 -13723 W
-j3 uiR2_Jungle52 uiR2EntryPoint06 38915 -13580 N
-
-j3 uiR2_Jungle03 uiR2EntryPoint01 33100 -11200 NE
-j3 uiR2_Jungle03 uiR2EntryPoint02 32837 -11458 E
-j3 uiR2_Jungle03 uiR2EntryPoint03 33230 -11343 N
-j3 uiR2_Jungle03 uiR2EntryPoint04 33304 -11015 SW
-
-j3 uiR2_Jungle24 uiR2EntryPoint01 39000 -12000 W
-j3 uiR2_Jungle24 uiR2EntryPoint02 39297 -11888 S
-j3 uiR2_Jungle24 uiR2EntryPoint03 38832 -11886 SE
-j3 uiR2_Jungle24 uiR2EntryPoint04 38847 -12265 NE
-j3 uiR2_Jungle24 uiR2EntryPoint05 39289 -12258 NE
-
-j3 uiR2_Jungle25 uiR2EntryPoint01 39621 -12083 NW
-j3 uiR2_Jungle25 uiR2EntryPoint02 39938 -12037 S
-j3 uiR2_Jungle25 uiR2EntryPoint03 39916 -12213 SE
-j3 uiR2_Jungle25 uiR2EntryPoint04 40114 -11884 W
-j3 uiR2_Jungle25 uiR2EntryPoint05 39955 -11803 W
-j3 uiR2_Jungle25 uiR2EntryPoint06 39786 -11886 W
-
-j3 uiR2_Jungle29 uiR2EntryPoint01 31753 -12934 N
-j3 uiR2_Jungle29 uiR2EntryPoint02 31766 -13034 W
-j3 uiR2_Jungle29 uiR2EntryPoint03 31948 -12894 NW
-j3 uiR2_Jungle29 uiR2EntryPoint04 31574 -12918 N
-
-j4 uiR2_Jungle50 uiR2EntryPoint01 37426 -13620 N
-j4 uiR2_Jungle50 uiR2EntryPoint02 37482 -13875 E
-j4 uiR2_Jungle50 uiR2EntryPoint03 37596 -13682 E
-j4 uiR2_Jungle50 uiR2EntryPoint04 37700 -13544 NE
-j4 uiR2_Jungle50 uiR2EntryPoint05 37685 -13388 NW
-
-j4 uiR2_Jungle08 uiR2EntryPoint01 36200 -11200 SE
-j4 uiR2_Jungle08 uiR2EntryPoint02 36390 -11360 W
-j4 uiR2_Jungle08 uiR2EntryPoint03 36076 -11069 W
-
-j4 uiR2_Jungle12 uiR2EntryPoint01 39235 -11288 N
-j4 uiR2_Jungle12 uiR2EntryPoint02 39448 -10932 W
-j4 uiR2_Jungle12 uiR2EntryPoint03 38946 -11120 E
-j4 uiR2_Jungle12 uiR2EntryPoint04 39153 -11467 N
-j4 uiR2_Jungle12 uiR2EntryPoint05 39130 -11005 NE
-j4 uiR2_Jungle12 uiR2EntryPoint06 39426 -11406 S
-
-j4 uiR2_Jungle16 uiR2EntryPoint01 32200 -12000 E
-j4 uiR2_Jungle16 uiR2EntryPoint02 32017 -11813 S
-j4 uiR2_Jungle16 uiR2EntryPoint03 32332 -12242 N
-j4 uiR2_Jungle16 uiR2EntryPoint04 32459 -11865 W
-j4 uiR2_Jungle16 uiR2EntryPoint05 32047 -12201 N
-
-j4 uiR2_Jungle22 uiR2EntryPoint01 37400 -12000 N
-j4 uiR2_Jungle22 uiR2EntryPoint02 37515 -11789 N
-j4 uiR2_Jungle22 uiR2EntryPoint03 37631 -12105 N
-j4 uiR2_Jungle22 uiR2EntryPoint04 37530 -12275 NE
-j4 uiR2_Jungle22 uiR2EntryPoint05 37339 -12275 NW
-j4 uiR2_Jungle22 uiR2EntryPoint06 37167 -11731 S
-
-j4 uiR2_Jungle42 uiR2EntryPoint01 31103 -13282 E
-j4 uiR2_Jungle42 uiR2EntryPoint02 31352 -13419 W
-j4 uiR2_Jungle42 uiR2EntryPoint03 31285 -13573 S
-j4 uiR2_Jungle42 uiR2EntryPoint04 31307 -13712 N
-j4 uiR2_Jungle42 uiR2EntryPoint05 31420 -13639 SW
-j4 uiR2_Jungle42 uiR2EntryPoint06 31083 -13691 NE
-
-
-o1 uiR2_Jungle11 uiR2EntryPoint01 38400 -11200 N
-o1 uiR2_Jungle11 uiR2EntryPoint02 38565 -11080 W
-o1 uiR2_Jungle11 uiR2EntryPoint03 38389 -11029 E
-
-o1 uiR2_Jungle19 uiR2EntryPoint01 35000 -12000 N
-o1 uiR2_Jungle19 uiR2EntryPoint02 34752 -12146 NE
-o1 uiR2_Jungle19 uiR2EntryPoint03 34749 -11909 SE
-o1 uiR2_Jungle19 uiR2EntryPoint04 35292 -12042 S
-o1 uiR2_Jungle19 uiR2EntryPoint05 35320 -12203 S
-
-o1 uiR2_Jungle21 uiR2EntryPoint01 36600 -12000 N
-o1 uiR2_Jungle21 uiR2EntryPoint02 36833 -11757 SW
-o1 uiR2_Jungle21 uiR2EntryPoint03 36443 -12055 E
-o1 uiR2_Jungle21 uiR2EntryPoint04 36504 -12275 NW
-o1 uiR2_Jungle21 uiR2EntryPoint05 36657 -12265 NW
-
-o1 uiR2_Jungle26 uiR2EntryPoint01 40600 -12000 W
-o1 uiR2_Jungle26 uiR2EntryPoint02 40903 -11996 W
-o1 uiR2_Jungle26 uiR2EntryPoint03 40429 -12233 NE
-
-o1 uiR2_Jungle30 uiR2EntryPoint01 32318 -12599 N
-o1 uiR2_Jungle30 uiR2EntryPoint02 32444 -12765 N
-o1 uiR2_Jungle30 uiR2EntryPoint03 32497 -12629 W
-
-o1 uiR2_Jungle33 uiR2EntryPoint01 34230 -12745 N
-o1 uiR2_Jungle33 uiR2EntryPoint02 34311 -12806 SE
-o1 uiR2_Jungle33 uiR2EntryPoint03 34399 -12967 W
-o1 uiR2_Jungle33 uiR2EntryPoint04 34221 -12959 E
-
-o1 uiR2_Jungle35 uiR2EntryPoint01 35800 -13010 N
-o1 uiR2_Jungle35 uiR2EntryPoint02 36057 -12912 W
-o1 uiR2_Jungle35 uiR2EntryPoint03 35755 -12619 E
-o1 uiR2_Jungle35 uiR2EntryPoint04 36228 -12618 W
-o1 uiR2_Jungle35 uiR2EntryPoint05 35934 -12714 E
-
-o1 uiR2_Jungle44 uiR2EntryPoint01 32799 -13439 N
-o1 uiR2_Jungle44 uiR2EntryPoint02 32628 -13363 SE
-o1 uiR2_Jungle44 uiR2EntryPoint03 32928 -13375 SW
-o1 uiR2_Jungle44 uiR2EntryPoint04 32828 -13484 SE
-o1 uiR2_Jungle44 uiR2EntryPoint05 32954 -13703 N
-
-o1 uiR2_Jungle45 uiR2EntryPoint01 33599 -13741 N
-o1 uiR2_Jungle45 uiR2EntryPoint02 33422 -13656 NE
-o1 uiR2_Jungle45 uiR2EntryPoint03 33762 -13543 NW
-o1 uiR2_Jungle45 uiR2EntryPoint04 33521 -13372 SE
-
-o1 uiR2_Jungle46 uiR2EntryPoint01 34218 -13905 N
-o1 uiR2_Jungle46 uiR2EntryPoint02 34374 -13798 NE
-o1 uiR2_Jungle46 uiR2EntryPoint03 34517 -13771 S
-o1 uiR2_Jungle46 uiR2EntryPoint04 34582 -13541 SE
-o1 uiR2_Jungle46 uiR2EntryPoint05 34311 -13491 N
-o1 uiR2_Jungle46 uiR2EntryPoint06 34194 -13371 NW
-
-o1 uiR2_Jungle47 uiR2EntryPoint01 35624 -13369 N
-o1 uiR2_Jungle47 uiR2EntryPoint02 35613 -13526 W
-o1 uiR2_Jungle47 uiR2EntryPoint03 35446 -13684 E
-o1 uiR2_Jungle47 uiR2EntryPoint04 35162 -13683 W
-o1 uiR2_Jungle47 uiR2EntryPoint05 35118 -13442 E
-o1 uiR2_Jungle47 uiR2EntryPoint06 35379 -13426 SE
-
-o1 uiR2_Jungle48 uiR2EntryPoint01 35989 -13425 N
-o1 uiR2_Jungle48 uiR2EntryPoint02 36122 -13469 SW
-o1 uiR2_Jungle48 uiR2EntryPoint03 36107 -13750 N
-
-
-
-//z1 uiR2_Jungle04 uiR2EntryPoint01 33840 -11000 N
-
-//z1 uiR2_Jungle09 uiR2EntryPoint01 36694 -11144 E
-//z1 uiR2_Jungle09 uiR2EntryPoint02 36947 -11190 N
-//z1 uiR2_Jungle09 uiR2EntryPoint03 36698 -10954 S
-//z1 uiR2_Jungle09 uiR2EntryPoint04 36679 -11467 N
-//z1 uiR2_Jungle09 uiR2EntryPoint05 36880 -11041 S
-//z1 uiR2_Jungle09 uiR2EntryPoint06 36870 -11253 E
-//z1 uiR2_Jungle09 uiR2EntryPoint07 37203 -11179 N
-
-//z1 uiR2_Jungle10 uiR2EntryPoint01 37790 -11080 E
-//z1 uiR2_Jungle10 uiR2EntryPoint02 37909 -11413 N
-//z1 uiR2_Jungle10 uiR2EntryPoint03 37530 -11208 NE
-//z1 uiR2_Jungle10 uiR2EntryPoint04 37588 -11375 N
-
-//z1 uiR2_Jungle13 uiR2EntryPoint01 40000 -11200 W
-//z1 uiR2_Jungle13 uiR2EntryPoint02 40187 -11030 S
-//z1 uiR2_Jungle13 uiR2EntryPoint03 39771 -10957 E
-//z1 uiR2_Jungle13 uiR2EntryPoint04 39793 -11177 E
-//z1 uiR2_Jungle13 uiR2EntryPoint05 40057 -11356 E
-
-//z1 uiR2_Jungle17 uiR2EntryPoint01 33000 -12000 N
-//z1 uiR2_Jungle17 uiR2EntryPoint02 33158 -12149 N
-//z1 uiR2_Jungle17 uiR2EntryPoint03 33211 -11895 N
-//z1 uiR2_Jungle17 uiR2EntryPoint04 33199 -12007 W
-//z1 uiR2_Jungle17 uiR2EntryPoint05 32971 -11754 S
-//z1 uiR2_Jungle17 uiR2EntryPoint06 33038 -11926 E
-
-//z1 uiR2_Jungle20 uiR2EntryPoint01 35650 -12140 N
-
-//z1 uiR2_Jungle31 uiR2EntryPoint01 33149 -12874 N
-//z1 uiR2_Jungle31 uiR2EntryPoint02 33066 -13037 S
-//z1 uiR2_Jungle31 uiR2EntryPoint03 33043 -12726 NW
-
-//z1 uiR2_Jungle37 uiR2EntryPoint01 37929 -12925 N
-
-//z1 uiR2_Jungle39 uiR2EntryPoint01 38971 -12788 N
-//z1 uiR2_Jungle39 uiR2EntryPoint02 39024 -13072 NE
-//z1 uiR2_Jungle39 uiR2EntryPoint03 39159 -12877 E
-//z1 uiR2_Jungle39 uiR2EntryPoint04 39432 -13045 N
-//z1 uiR2_Jungle39 uiR2EntryPoint05 39280 -12841 N
-//z1 uiR2_Jungle39 uiR2EntryPoint06 39255 -12682 N
-//z1 uiR2_Jungle39 uiR2EntryPoint07 39433 -12707 E
-
-//z1 uiR2_Jungle40 uiR2EntryPoint01 40132 -12610 N
-
-//z1 uiR2_Jungle43 uiR2EntryPoint01 31767 -13391 N
-
-
-// Prime Roots
-
-p1 uiR2_Primes04 uiR2EntryPoint01 33300 -21200 S
-p1 uiR2_Primes04 uiR2EntryPoint02 33454 -21456 NW
-p1 uiR2_Primes04 uiR2EntryPoint03 33029 -21522 E
-
-p1 uiR2_Primes06 uiR2EntryPoint01 34700 -21070 SE
-p1 uiR2_Primes06 uiR2EntryPoint02 34905 -21093 SW
-p1 uiR2_Primes06 uiR2EntryPoint03 34733 -21359 N
-
-p1 uiR2_Primes22 uiR2EntryPoint01 37500 -21960 S
-p1 uiR2_Primes22 uiR2EntryPoint02 37524 -22163 N
-p1 uiR2_Primes22 uiR2EntryPoint03 37394 -22286 NE
-
-p1 uiR2_Primes09 uiR2EntryPoint01 36950 -21200 E
-p1 uiR2_Primes09 uiR2EntryPoint02 37532 -21366 W
-p1 uiR2_Primes09 uiR2EntryPoint03 37208 -21170 S
-
-p3 uiR2_Primes29 uiR2EntryPoint01 33140 -22910 W
-p3 uiR2_Primes29 uiR2EntryPoint02 33016 -22602 S
-p3 uiR2_Primes29 uiR2EntryPoint03 32776 -23057 NE
-
-p3 uiR2_Primes01 uiR2EntryPoint01 31110 -21520 E
-p3 uiR2_Primes01 uiR2EntryPoint02 31198 -21061 S
-p3 uiR2_Primes01 uiR2EntryPoint03 31132 -21312 E
-
-p3 uiR2_Primes05 uiR2EntryPoint01 34250 -21300 W
-p3 uiR2_Primes05 uiR2EntryPoint02 33891 -21271 E
-p3 uiR2_Primes05 uiR2EntryPoint03 34151 -21558 N
-
-p5 uiR2_Primes16 uiR2EntryPoint01 32970 -22100 NW
-p5 uiR2_Primes16 uiR2EntryPoint02 32763 -21871 SE
-p5 uiR2_Primes16 uiR2EntryPoint03 32890 -21990 S
-
-p5 uiR2_Primes18 uiR2EntryPoint01 34600 -22075 W
-p5 uiR2_Primes18 uiR2EntryPoint02 34205 -22078 E
-p5 uiR2_Primes18 uiR2EntryPoint03 34651 -21825 S
-
-p5 uiR2_Primes25 uiR2EntryPoint01 39910 -22320 E
-p5 uiR2_Primes25 uiR2EntryPoint02 39757 -22077 E
-p5 uiR2_Primes25 uiR2EntryPoint03 39979 -22132 NW
-
-p6 uiR2_Primes03 uiR2EntryPoint01 32300 -21100 SE
-p6 uiR2_Primes03 uiR2EntryPoint02 32288 -21484 N
-p6 uiR2_Primes03 uiR2EntryPoint03 32691 -21085 SW
-
-p6 uiR2_Primes07 uiR2EntryPoint01 35350 -21300 NE
-p6 uiR2_Primes07 uiR2EntryPoint02 35519 -21067 S
-p6 uiR2_Primes07 uiR2EntryPoint03 35601 -21405 N
-
-p6 uiR2_Primes13 uiR2EntryPoint01 40330 -21600 N
-p6 uiR2_Primes13 uiR2EntryPoint02 40127 -21438 E
-p6 uiR2_Primes13 uiR2EntryPoint03 40537 -21438 W
-
-p7 uiR2_Primes19 uiR2EntryPoint01 35000 -22300 N
-p7 uiR2_Primes19 uiR2EntryPoint02 35456 -22007 W
-p7 uiR2_Primes19 uiR2EntryPoint03 35022 -21891 SE
-
-p7 uiR2_Primes26 uiR2EntryPoint01 40500 -22100 N
-p7 uiR2_Primes26 uiR2EntryPoint02 40694 -22284 NW
-p7 uiR2_Primes26 uiR2EntryPoint03 40426 -22298 NE
-
-p7 uiR2_Primes08 uiR2EntryPoint01 36200 -21100 E
-p7 uiR2_Primes08 uiR2EntryPoint02 36393 -21558 N
-p7 uiR2_Primes08 uiR2EntryPoint03 36077 -21345 S
-
-p8 uiR2_Primes10 uiR2EntryPoint01 38002 -21293 N
-p8 uiR2_Primes10 uiR2EntryPoint02 38006 -21532 N
-p8 uiR2_Primes10 uiR2EntryPoint03 38094 -21040 S
-
-p8 uiR2_Primes11 uiR2EntryPoint01 38970 -21520 W
-p8 uiR2_Primes11 uiR2EntryPoint02 38721 -21047 S
-p8 uiR2_Primes11 uiR2EntryPoint03 38577 -21350 NW
-
-p8 uiR2_Primes15 uiR2EntryPoint01 31980 -21880 SE
-p8 uiR2_Primes15 uiR2EntryPoint02 32365 -22121 NW
-p8 uiR2_Primes15 uiR2EntryPoint03 32159 -22032 N
-
-p11 uiR2_Primes30 uiR2EntryPoint01 33730 -22860 N
-p11 uiR2_Primes30 uiR2EntryPoint02 33656 -22604 E
-p11 uiR2_Primes30 uiR2EntryPoint03 33843 -22997 E
-
-p11 uiR2_Primes12 uiR2EntryPoint01 39500 -21280 NE
-p11 uiR2_Primes12 uiR2EntryPoint02 39240 -21197 E
-p11 uiR2_Primes12 uiR2EntryPoint03 39800 -21352 W
-
-p11 uiR2_Primes14 uiR2EntryPoint01 31350 -21960 S
-p11 uiR2_Primes14 uiR2EntryPoint02 31373 -22074 S
-p11 uiR2_Primes14 uiR2EntryPoint03 31166 -22272 NE
-
-p12 uiR2_Primes17 uiR2EntryPoint01 33660 -22000 SW
-p12 uiR2_Primes17 uiR2EntryPoint02 33397 -21879 SE
-p12 uiR2_Primes17 uiR2EntryPoint03 33347 -22331 N
-
-p12 uiR2_Primes21 uiR2EntryPoint01 37000 -22150 W
-p12 uiR2_Primes21 uiR2EntryPoint02 36645 -21864 SE
-p12 uiR2_Primes21 uiR2EntryPoint03 36964 -21813 SE
-
-p12 uiR2_Primes27 uiR2EntryPoint01 31530 -22700 SW
-p12 uiR2_Primes27 uiR2EntryPoint02 31533 -23080 NW
-p12 uiR2_Primes27 uiR2EntryPoint03 31078 -22800 N
-
-
-
-o1 uiR2_Primes02 uiR2EntryPoint01 31640 -21140 SE
-o1 uiR2_Primes02 uiR2EntryPoint02 31593 -21374 N
-o1 uiR2_Primes02 uiR2EntryPoint03 31818 -21204 W
-
-o1 uiR2_Primes28 uiR2EntryPoint01 32270 -23000 N
-o1 uiR2_Primes28 uiR2EntryPoint02 32316 -22662 S
-o1 uiR2_Primes28 uiR2EntryPoint03 31933 -22734 SE
-
-
-
-//z1 uiR2_Primes20 uiR2EntryPoint01 35790 -22100 N
-
-//z1 uiR2_Primes23 uiR2EntryPoint01 38360 -21970 N
-
-//z1 uiR2_Primes24 uiR2EntryPoint02 38906 -21891 SE
-
-//z1 uiR2_Primes24 uiR2EntryPoint03 39086 -22287 NW
+a1 uiR2_Lakes01 uiR2EntryPoint01 31346 -1310 N
+a1 uiR2_Lakes01 uiR2EntryPoint02 31269 -1238 E
+a1 uiR2_Lakes01 uiR2EntryPoint03 31456 -1379 N
+
+a1 uiR2_Lakes07 uiR2EntryPoint01 36264 -1103 S
+a1 uiR2_Lakes07 uiR2EntryPoint02 36208 -1353 N
+a1 uiR2_Lakes07 uiR2EntryPoint03 36478 -1269 W
+a1 uiR2_Lakes07 uiR2EntryPoint04 36478 -1105 SW
+
+a1 uiR2_Lakes22 uiR2EntryPoint01 32250 -2800 W
+a1 uiR2_Lakes22 uiR2EntryPoint02 31920 -3160 N
+a1 uiR2_Lakes22 uiR2EntryPoint03 32080 -3090 N
+a1 uiR2_Lakes22 uiR2EntryPoint04 32250 -3065 NE
+
+l1 uiR2_Lakes15 uiR2EntryPoint01 34634 -1872 SW
+l1 uiR2_Lakes15 uiR2EntryPoint02 34258 -1991 W
+l1 uiR2_Lakes15 uiR2EntryPoint03 34321 -1860 S
+l1 uiR2_Lakes15 uiR2EntryPoint04 34510 -2060 W
+
+l1 uiR2_Lakes17 uiR2EntryPoint01 36150 -2310 NE
+l1 uiR2_Lakes17 uiR2EntryPoint02 35936 -2243 S
+l1 uiR2_Lakes17 uiR2EntryPoint03 35920 -1844 W
+l1 uiR2_Lakes17 uiR2EntryPoint04 36103 -1923 SW
+l1 uiR2_Lakes17 uiR2EntryPoint05 35895 -1935 S
+
+l1 uiR2_Lakes18 uiR2EntryPoint01 36725 -1993 E
+l1 uiR2_Lakes18 uiR2EntryPoint02 36688 -2159 N
+l1 uiR2_Lakes18 uiR2EntryPoint03 36879 -2217 N
+l1 uiR2_Lakes18 uiR2EntryPoint04 36941 -1970 SW
+
+l1 uiR2_Lakes26 uiR2EntryPoint01 34460 -3120 E
+l1 uiR2_Lakes26 uiR2EntryPoint02 34689 -2756 SW
+l1 uiR2_Lakes26 uiR2EntryPoint03 34681 -3111 N
+l1 uiR2_Lakes26 uiR2EntryPoint04 34671 -2931 N
+
+l1 uiR2_Lakes27 uiR2EntryPoint01 35605 -3080 NW
+l1 uiR2_Lakes27 uiR2EntryPoint02 35520 -2780 S
+l1 uiR2_Lakes27 uiR2EntryPoint03 35133 -2663 SE
+l1 uiR2_Lakes27 uiR2EntryPoint04 35283 -3051 N
+
+l1 uiR2_Lakes38 uiR2EntryPoint01 36720 -3740 S
+l1 uiR2_Lakes38 uiR2EntryPoint02 36751 -4024 NW
+l1 uiR2_Lakes38 uiR2EntryPoint03 36230 -3767 E
+l1 uiR2_Lakes38 uiR2EntryPoint04 36481 -3564 S
+
+l1 uiR2_Lakes39 uiR2EntryPoint01 37510 -3900 N
+l1 uiR2_Lakes39 uiR2EntryPoint02 37299 -3575 SE
+l1 uiR2_Lakes39 uiR2EntryPoint03 37861 -3719 W
+
+l2 uiR2_Lakes03 uiR2EntryPoint01 32961 -1388 N
+l2 uiR2_Lakes03 uiR2EntryPoint02 32784 -1507 NE
+l2 uiR2_Lakes03 uiR2EntryPoint03 33390 -1517 NW
+l2 uiR2_Lakes03 uiR2EntryPoint04 33365 -916 SW
+l2 uiR2_Lakes03 uiR2EntryPoint05 33033 -991 S
+
+l2 uiR2_Lakes08 uiR2EntryPoint01 36991 -1311 E
+l2 uiR2_Lakes08 uiR2EntryPoint02 37197 -1547 NW
+l2 uiR2_Lakes08 uiR2EntryPoint03 37230 -1035 S
+l2 uiR2_Lakes08 uiR2EntryPoint04 37111 -1264 SE
+l2 uiR2_Lakes08 uiR2EntryPoint05 37393 -1285 W
+
+l2 uiR2_Lakes16 uiR2EntryPoint01 35330 -2120 W
+l2 uiR2_Lakes16 uiR2EntryPoint02 35180 -2010 S
+l2 uiR2_Lakes16 uiR2EntryPoint03 35145 -2135 NE
+
+l2 uiR2_Lakes19 uiR2EntryPoint01 37681 -2167 N
+l2 uiR2_Lakes19 uiR2EntryPoint02 37367 -2341 NW
+l2 uiR2_Lakes19 uiR2EntryPoint03 37331 -2070 NE
+l2 uiR2_Lakes19 uiR2EntryPoint04 37521 -1929 S
+l2 uiR2_Lakes19 uiR2EntryPoint05 37773 -2008 W
+
+l2 uiR2_Lakes23 uiR2EntryPoint01 32727 -3120 W
+l2 uiR2_Lakes23 uiR2EntryPoint02 32694 -2802 W
+l2 uiR2_Lakes23 uiR2EntryPoint03 32523 -2995 E
+
+l2 uiR2_Lakes10 uiR2EntryPoint01 38531 -1379 NE
+l2 uiR2_Lakes10 uiR2EntryPoint02 38962 -1092 S
+l2 uiR2_Lakes10 uiR2EntryPoint03 38677 -1146 SE
+l2 uiR2_Lakes10 uiR2EntryPoint04 38953 -1444 NW
+
+l2 uiR2_Lakes11 uiR2EntryPoint01 31531 -2280 NW
+l2 uiR2_Lakes11 uiR2EntryPoint02 31517 -1946 SW
+l2 uiR2_Lakes11 uiR2EntryPoint03 31107 -2130 NE
+l2 uiR2_Lakes11 uiR2EntryPoint04 31203 -1938 SE
+l2 uiR2_Lakes11 uiR2EntryPoint05 31358 -2065 NW
+
+l3 uiR2_Lakes14 uiR2EntryPoint01 33438 -2169 E
+l3 uiR2_Lakes14 uiR2EntryPoint02 33562 -2128 SW
+l3 uiR2_Lakes14 uiR2EntryPoint03 33590 -2230 NW
+
+l3 uiR2_Lakes21 uiR2EntryPoint01 31247 -2790 E
+l3 uiR2_Lakes21 uiR2EntryPoint02 31128 -3031 N
+l3 uiR2_Lakes21 uiR2EntryPoint03 31536 -2778 W
+l3 uiR2_Lakes21 uiR2EntryPoint04 31413 -3101 NE
+l3 uiR2_Lakes21 uiR2EntryPoint05 31306 -3168 NW
+
+l3 uiR2_Lakes31 uiR2EntryPoint01 31295 -4080 N
+l3 uiR2_Lakes31 uiR2EntryPoint02 31425 -3724 SW
+l3 uiR2_Lakes31 uiR2EntryPoint03 31258 -3747 SE
+
+l3 uiR2_Lakes04 uiR2EntryPoint01 33740 -1068 E
+l3 uiR2_Lakes04 uiR2EntryPoint02 34268 -1202 W
+l3 uiR2_Lakes04 uiR2EntryPoint03 34145 -1045 SW
+l3 uiR2_Lakes04 uiR2EntryPoint04 33996 -1283 N
+l3 uiR2_Lakes04 uiR2EntryPoint05 33691 -1206 E
+
+l3 uiR2_Lakes06 uiR2EntryPoint01 35468 -1272 N
+l3 uiR2_Lakes06 uiR2EntryPoint02 35954 -1080 SW
+l3 uiR2_Lakes06 uiR2EntryPoint03 35764 -1026 E
+l3 uiR2_Lakes06 uiR2EntryPoint04 35438 -890 SE
+l3 uiR2_Lakes06 uiR2EntryPoint05 35634 -1288 N
+
+l3 uiR2_Lakes09 uiR2EntryPoint01 37916 -1124 S
+l3 uiR2_Lakes09 uiR2EntryPoint02 37709 -1451 NE
+l3 uiR2_Lakes09 uiR2EntryPoint03 38149 -1051 SW
+l3 uiR2_Lakes09 uiR2EntryPoint04 38073 -1412 NW
+
+l3 uiR2_Lakes20 uiR2EntryPoint01 38155 -2000 E
+l3 uiR2_Lakes20 uiR2EntryPoint02 38290 -1813 E
+l3 uiR2_Lakes20 uiR2EntryPoint03 38488 -1996 W
+l3 uiR2_Lakes20 uiR2EntryPoint04 38289 -2183 S
+
+l4 uiR2_Lakes33 uiR2EntryPoint01 32370 -3880 N
+l4 uiR2_Lakes33 uiR2EntryPoint02 32447 -3577 SE
+l4 uiR2_Lakes33 uiR2EntryPoint03 32561 -3774 SW
+l4 uiR2_Lakes33 uiR2EntryPoint04 32716 -3591 S
+l4 uiR2_Lakes33 uiR2EntryPoint05 32721 -3914 N
+
+l4 uiR2_Lakes02 uiR2EntryPoint01 32059 -1392 N
+l4 uiR2_Lakes02 uiR2EntryPoint02 32267 -1181 W
+l4 uiR2_Lakes02 uiR2EntryPoint03 32053 -1159 SE
+
+l4 uiR2_Lakes05 uiR2EntryPoint01 34650 -1133 NE
+l4 uiR2_Lakes05 uiR2EntryPoint02 35018 -1280 SW
+l4 uiR2_Lakes05 uiR2EntryPoint03 34984 -889 SW
+l4 uiR2_Lakes05 uiR2EntryPoint04 34769 -1166 NE
+
+l4 uiR2_Lakes12 uiR2EntryPoint01 32040 -2368 N
+l4 uiR2_Lakes12 uiR2EntryPoint02 32401 -2210 SW
+l4 uiR2_Lakes12 uiR2EntryPoint03 32019 -1939 S
+l4 uiR2_Lakes12 uiR2EntryPoint04 31891 -2241 E
+
+l4 uiR2_Lakes24 uiR2EntryPoint01 33350 -3120 N
+l4 uiR2_Lakes24 uiR2EntryPoint02 33200 -2865 N
+l4 uiR2_Lakes24 uiR2EntryPoint03 33450 -2950 W
+
+l4 uiR2_Lakes34 uiR2EntryPoint01 33520 -3910 N
+l4 uiR2_Lakes34 uiR2EntryPoint02 33206 -3990 W
+l4 uiR2_Lakes34 uiR2EntryPoint03 33276 -3784 N
+l4 uiR2_Lakes34 uiR2EntryPoint04 33619 -3638 NW
+l4 uiR2_Lakes34 uiR2EntryPoint05 33335 -3829 NE
+
+o1 uiR2_Lakes25 uiR2EntryPoint01 33980 -3110 N
+o1 uiR2_Lakes25 uiR2EntryPoint02 33900 -2990 NE
+o1 uiR2_Lakes25 uiR2EntryPoint03 34105 -2760 SW
+
+o1 uiR2_Lakes28 uiR2EntryPoint01 36480 -3100 N
+o1 uiR2_Lakes28 uiR2EntryPoint02 36146 -2679 SE
+o1 uiR2_Lakes28 uiR2EntryPoint03 36324 -2871 S
+
+o1 uiR2_Lakes29 uiR2EntryPoint01 37500 -3110 N
+o1 uiR2_Lakes29 uiR2EntryPoint02 37078 -2937 SW
+o1 uiR2_Lakes29 uiR2EntryPoint03 37389 -2802 S
+
+o1 uiR2_Lakes30 uiR2EntryPoint01 38100 -2850 E
+o1 uiR2_Lakes30 uiR2EntryPoint02 38414 -2715 S
+o1 uiR2_Lakes30 uiR2EntryPoint03 38489 -3116 NW
+
+o1 uiR2_Lakes32 uiR2EntryPoint01 31900 -3600 E
+o1 uiR2_Lakes32 uiR2EntryPoint02 32108 -3832 N
+o1 uiR2_Lakes32 uiR2EntryPoint03 32112 -3672 W
+
+o1 uiR2_Lakes35 uiR2EntryPoint01 34200 -4080 E
+o1 uiR2_Lakes35 uiR2EntryPoint02 34145 -3645 SE
+o1 uiR2_Lakes35 uiR2EntryPoint03 34387 -3988 S
+
+o1 uiR2_Lakes36 uiR2EntryPoint01 34960 -3770 N
+o1 uiR2_Lakes36 uiR2EntryPoint02 35149 -3703 SW
+o1 uiR2_Lakes36 uiR2EntryPoint03 34957 -3586 S
+
+o1 uiR2_Lakes37 uiR2EntryPoint01 35760 -3750 N
+o1 uiR2_Lakes37 uiR2EntryPoint02 35577 -3640 SE
+o1 uiR2_Lakes37 uiR2EntryPoint03 35912 -3874 N
+o1 uiR2_Lakes37 uiR2EntryPoint04 35902 -3589 SE
+
+o1 uiR2_Lakes40 uiR2EntryPoint01 38180 -3470 SE
+o1 uiR2_Lakes40 uiR2EntryPoint01 38416 -3819 NE
+o1 uiR2_Lakes40 uiR2EntryPoint01 38151 -3740 N
+
+
+//z1 uiR2_Lakes13 uiR2EntryPoint01 32479 -2298 E
+//z1 uiR2_Lakes13 uiR2EntryPoint02 32880 -2080 S
+//z1 uiR2_Lakes13 uiR2EntryPoint03 33050 -2265 NW
+
+// Desert
+
+
+a1 uiR2_Deserts03 uiR2EntryPoint01 22791 -1289 N
+a1 uiR2_Deserts03 uiR2EntryPoint02 23041 -1284 NW
+a1 uiR2_Deserts03 uiR2EntryPoint03 22873 -1110 SE
+
+a1 uiR2_Deserts21 uiR2EntryPoint01 25980 -2015 E
+a1 uiR2_Deserts21 uiR2EntryPoint02 26452 -1963 W
+a1 uiR2_Deserts21 uiR2EntryPoint03 26353 -1872 SW
+a1 uiR2_Deserts21 uiR2EntryPoint04 26214 -1961 S
+
+a1 uiR2_Deserts32 uiR2EntryPoint01 28070 -2340 E
+a1 uiR2_Deserts32 uiR2EntryPoint02 28240 -2719 N
+a1 uiR2_Deserts32 uiR2EntryPoint03 28318 -2643 W
+a1 uiR2_Deserts32 uiR2EntryPoint04 28293 -2445 W
+
+d1 uiR2_Deserts02 uiR2EntryPoint01 22383 -1512 N
+d1 uiR2_Deserts02 uiR2EntryPoint02 22454 -1186 SW
+d1 uiR2_Deserts02 uiR2EntryPoint03 22062 -1050 S
+d1 uiR2_Deserts02 uiR2EntryPoint04 22072 -1289 NE
+
+d1 uiR2_Deserts10 uiR2EntryPoint01 28923 -1434 N
+d1 uiR2_Deserts10 uiR2EntryPoint02 29217 -1371 E
+d1 uiR2_Deserts10 uiR2EntryPoint03 28901 -1115 SW
+
+d1 uiR2_Deserts22 uiR2EntryPoint01 26950 -2015 N
+d1 uiR2_Deserts22 uiR2EntryPoint02 26937 -1864 S
+d1 uiR2_Deserts22 uiR2EntryPoint03 27089 -2042 NW
+
+d1 uiR2_Deserts23 uiR2EntryPoint01 27600 -1924 S
+d1 uiR2_Deserts23 uiR2EntryPoint02 27575 -2351 NW
+d1 uiR2_Deserts23 uiR2EntryPoint03 27545 -2211 N
+d1 uiR2_Deserts23 uiR2EntryPoint04 27442 -1866 S
+
+d1 uiR2_Deserts28 uiR2EntryPoint01 25050 -2650 S
+d1 uiR2_Deserts28 uiR2EntryPoint02 24910 -2819 E
+d1 uiR2_Deserts28 uiR2EntryPoint03 24881 -2720 N
+d1 uiR2_Deserts28 uiR2EntryPoint04 24915 -2511 SW
+
+d1 uiR2_Deserts29 uiR2EntryPoint01 25880 -2630 E
+d1 uiR2_Deserts29 uiR2EntryPoint02 26022 -2374 SW
+d1 uiR2_Deserts29 uiR2EntryPoint03 26156 -2560 N
+d1 uiR2_Deserts29 uiR2EntryPoint04 26163 -2402 S
+
+d1 uiR2_Deserts31 uiR2EntryPoint01 27760 -2700 N
+d1 uiR2_Deserts31 uiR2EntryPoint02 27404 -2588 S
+d1 uiR2_Deserts31 uiR2EntryPoint03 27538 -2606 S
+d1 uiR2_Deserts31 uiR2EntryPoint04 27413 -2744 NE
+
+d1 uiR2_Deserts05 uiR2EntryPoint01 24257 -1520 NE
+d1 uiR2_Deserts05 uiR2EntryPoint02 24593 -1447 N
+d1 uiR2_Deserts05 uiR2EntryPoint03 24341 -1184 NE
+d1 uiR2_Deserts05 uiR2EntryPoint04 24535 -1054 S
+
+d1 uiR2_Deserts13 uiR2EntryPoint01 28942 -1919 S
+d1 uiR2_Deserts13 uiR2EntryPoint02 28538 -2241 E
+d1 uiR2_Deserts13 uiR2EntryPoint03 28814 -2251 NW
+d1 uiR2_Deserts13 uiR2EntryPoint04 28956 -2079 W
+d1 uiR2_Deserts13 uiR2EntryPoint05 28794 -1912 S
+
+d1 uiR2_Deserts17 uiR2EntryPoint01 23250 -1840 W
+d1 uiR2_Deserts17 uiR2EntryPoint02 23096 -1943 NE
+d1 uiR2_Deserts17 uiR2EntryPoint03 23034 -1839 E
+d1 uiR2_Deserts17 uiR2EntryPoint04 23096 -1713 S
+
+d1 uiR2_Deserts24 uiR2EntryPoint01 27915 -1875 S
+d1 uiR2_Deserts24 uiR2EntryPoint02 28136 -1960 S
+d1 uiR2_Deserts24 uiR2EntryPoint03 28233 -1746 S
+d1 uiR2_Deserts24 uiR2EntryPoint04 28324 -1841 W
+
+d3 uiR2_Deserts27 uiR2EntryPoint01 23305 -2454 E
+d3 uiR2_Deserts27 uiR2EntryPoint02 23313 -2682 N
+d3 uiR2_Deserts27 uiR2EntryPoint03 23464 -2611 N
+d3 uiR2_Deserts27 uiR2EntryPoint04 23496 -2442 SW
+
+d3 uiR2_Deserts04 uiR2EntryPoint01 23452 -1050 SE
+d3 uiR2_Deserts04 uiR2EntryPoint02 23846 -1435 W
+d3 uiR2_Deserts04 uiR2EntryPoint03 23599 -1418 N
+d3 uiR2_Deserts04 uiR2EntryPoint04 23927 -1163 W
+
+d3 uiR2_Deserts11 uiR2EntryPoint01 29554 -1468 N
+d3 uiR2_Deserts11 uiR2EntryPoint02 29922 -1222 W
+d3 uiR2_Deserts11 uiR2EntryPoint03 29622 -1048 S
+d3 uiR2_Deserts11 uiR2EntryPoint04 29615 -1306 SE
+d3 uiR2_Deserts11 uiR2EntryPoint05 29755 -1447 NW
+
+d3 uiR2_Deserts16 uiR2EntryPoint01 22304 -1856 E
+d3 uiR2_Deserts16 uiR2EntryPoint02 22513 -1995 E
+d3 uiR2_Deserts16 uiR2EntryPoint03 22687 -1891 N
+d3 uiR2_Deserts16 uiR2EntryPoint04 22537 -1877 N
+
+d4 uiR2_Deserts18 uiR2EntryPoint01 23730 -2280 N
+d4 uiR2_Deserts18 uiR2EntryPoint02 23666 -2154 NE
+d4 uiR2_Deserts18 uiR2EntryPoint03 23871 -1977 SE
+d4 uiR2_Deserts18 uiR2EntryPoint04 23570 -2056 NE
+d4 uiR2_Deserts18 uiR2EntryPoint05 23834 -1997 W
+
+d4 uiR2_Deserts19 uiR2EntryPoint01 24560 -2015 N
+d4 uiR2_Deserts19 uiR2EntryPoint02 24267 -1998 E
+d4 uiR2_Deserts19 uiR2EntryPoint03 24841 -2002 W
+d4 uiR2_Deserts19 uiR2EntryPoint04 24562 -1914 S
+
+d4 uiR2_Deserts09 uiR2EntryPoint01 27814 -1375 N
+d4 uiR2_Deserts09 uiR2EntryPoint02 27471 -1503 E
+d4 uiR2_Deserts09 uiR2EntryPoint03 27609 -1197 E
+d4 uiR2_Deserts09 uiR2EntryPoint04 27730 -1088 S
+d4 uiR2_Deserts09 uiR2EntryPoint05 27529 -1014 SE
+
+d4 uiR2_Deserts14 uiR2EntryPoint01 30629 -2300 N
+// d4 uiR2_Deserts14 uiR2EntryPoint04 30747 -2023 SW
+d4 uiR2_Deserts14 uiR2EntryPoint02 30577 -1836 S
+d4 uiR2_Deserts14 uiR2EntryPoint03 30347 -2140 SE
+// d4 uiR2_Deserts14 uiR2EntryPoint05 30407 -1835 SE
+
+d5 uiR2_Deserts15 uiR2EntryPoint01 21500 -1830 E
+d5 uiR2_Deserts15 uiR2EntryPoint02 21933 -1833 W
+d5 uiR2_Deserts15 uiR2EntryPoint03 21763 -1839 E
+d5 uiR2_Deserts15 uiR2EntryPoint04 21515 -1913 N
+
+d5 uiR2_Deserts30 uiR2EntryPoint01 26650 -2650 E
+d5 uiR2_Deserts30 uiR2EntryPoint02 27036 -2638 W
+d5 uiR2_Deserts30 uiR2EntryPoint03 26922 -2433 SE
+d5 uiR2_Deserts30 uiR2EntryPoint04 26779 -2504 S
+
+d5 uiR2_Deserts33 uiR2EntryPoint01 29510 -2040 S
+d5 uiR2_Deserts33 uiR2EntryPoint02 29517 -2239 N
+d5 uiR2_Deserts33 uiR2EntryPoint03 29712 -2523 NW
+d5 uiR2_Deserts33 uiR2EntryPoint04 29920 -2157 W
+d5 uiR2_Deserts33 uiR2EntryPoint05 29758 -2318 W
+
+d5 uiR2_Deserts08 uiR2EntryPoint01 26694 -1485 N
+d5 uiR2_Deserts08 uiR2EntryPoint02 26949 -1512 NW
+d5 uiR2_Deserts08 uiR2EntryPoint03 26482 -1366 E
+d5 uiR2_Deserts08 uiR2EntryPoint04 26875 -1010 S
+d5 uiR2_Deserts08 uiR2EntryPoint05 26460 -1205 NE
+
+d6 uiR2_Deserts06 uiR2EntryPoint01 25523 -1500 NW
+d6 uiR2_Deserts06 uiR2EntryPoint02 25419 -1142 SW
+d6 uiR2_Deserts06 uiR2EntryPoint03 25220 -1416 W
+d6 uiR2_Deserts06 uiR2EntryPoint04 25168 -1168 SW
+
+d6 uiR2_Deserts20 uiR2EntryPoint01 25206 -2118 N
+d6 uiR2_Deserts20 uiR2EntryPoint02 25435 -1997 W
+d6 uiR2_Deserts20 uiR2EntryPoint03 25410 -2177 N
+d6 uiR2_Deserts20 uiR2EntryPoint04 25532 -1942 N
+d6 uiR2_Deserts20 uiR2EntryPoint05 25724 -2192 W
+
+d6 uiR2_Deserts25 uiR2EntryPoint01 21845 -2475 S
+d6 uiR2_Deserts25 uiR2EntryPoint02 21891 -2836 W
+d6 uiR2_Deserts25 uiR2EntryPoint03 21442 -2799 NW
+d6 uiR2_Deserts25 uiR2EntryPoint04 21460 -2447 S
+d6 uiR2_Deserts25 uiR2EntryPoint05 21765 -2480 W
+
+d6 uiR2_Deserts26 uiR2EntryPoint01 22627 -2480 W
+d6 uiR2_Deserts26 uiR2EntryPoint02 22352 -2474 E
+d6 uiR2_Deserts26 uiR2EntryPoint03 22925 -2483 W
+d6 uiR2_Deserts26 uiR2EntryPoint04 22790 -2627 N
+
+
+
+o1 uiR2_Deserts07 uiR2EntryPoint01 26051 -1405 N
+o1 uiR2_Deserts07 uiR2EntryPoint02 26153 -1044 S
+o1 uiR2_Deserts07 uiR2EntryPoint03 25855 -1233 E
+o1 uiR2_Deserts07 uiR2EntryPoint04 25818 -1027 SE
+
+o1 uiR2_Deserts12 uiR2EntryPoint01 30818 -1487 NW
+o1 uiR2_Deserts12 uiR2EntryPoint02 30726 -1023 S
+o1 uiR2_Deserts12 uiR2EntryPoint03 30369 -1083 SE
+o1 uiR2_Deserts12 uiR2EntryPoint04 30389 -1307 E
+o1 uiR2_Deserts12 uiR2EntryPoint05 30539 -1440 NW
+
+
+
+//z1 uiR2_Deserts01 uiR2EntryPoint01 21570 -1363 N
+//z1 uiR2_Deserts01 uiR2EntryPoint02 21340 -1066 SE
+//z1 uiR2_Deserts01 uiR2EntryPoint03 21678 -1129 SW
+//z1 uiR2_Deserts01 uiR2EntryPoint04 21503 -1296 N
+
+
+
+
+// Forest
+
+
+a1 uiR2_Forest04 uiR2EntryPoint01 24213 -11157 W
+a1 uiR2_Forest04 uiR2EntryPoint02 23975 -11225 E
+a1 uiR2_Forest04 uiR2EntryPoint03 23827 -11373 NE
+a1 uiR2_Forest04 uiR2EntryPoint04 24180 -11383 NW
+a1 uiR2_Forest04 uiR2EntryPoint05 23871 -11059 SE
+a1 uiR2_Forest04 uiR2EntryPoint06 24189 -10982 SW
+
+a1 uiR2_Forest05 uiR2EntryPoint01 24752 -11360 N
+a1 uiR2_Forest05 uiR2EntryPoint02 24602 -11060 SE
+a1 uiR2_Forest05 uiR2EntryPoint03 24865 -11100 SW
+a1 uiR2_Forest05 uiR2EntryPoint04 25046 -11197 W
+a1 uiR2_Forest05 uiR2EntryPoint05 24640 -11453 N
+a1 uiR2_Forest05 uiR2EntryPoint06 24537 -11201 E
+
+a1 uiR2_Forest14 uiR2EntryPoint01 21282 -12196 N
+a1 uiR2_Forest14 uiR2EntryPoint02 21276 -11986 S
+a1 uiR2_Forest14 uiR2EntryPoint03 21276 -11766 S
+
+a1 uiR2_Forest27 uiR2EntryPoint01 21173 -12644 W
+a1 uiR2_Forest27 uiR2EntryPoint02 21068 -12561 S
+a1 uiR2_Forest27 uiR2EntryPoint03 21113 -12714 N
+a1 uiR2_Forest27 uiR2EntryPoint04 21119 -12639 S
+
+a1 uiR2_Forest32 uiR2EntryPoint01 24680 -12600 SE
+a1 uiR2_Forest32 uiR2EntryPoint02 24538 -13025 N
+a1 uiR2_Forest32 uiR2EntryPoint03 24822 -13039 N
+a1 uiR2_Forest32 uiR2EntryPoint04 24718 -12889 N
+a1 uiR2_Forest32 uiR2EntryPoint05 24830 -12554 SW
+a1 uiR2_Forest32 uiR2EntryPoint06 24659 -12750 E
+
+f1 uiR2_Forest03 uiR2EntryPoint01 23010 -11209 E
+f1 uiR2_Forest03 uiR2EntryPoint02 23080 -11152 E
+f1 uiR2_Forest03 uiR2EntryPoint03 23400 -11400 NW
+f1 uiR2_Forest03 uiR2EntryPoint04 23400 -11000 SW
+f1 uiR2_Forest03 uiR2EntryPoint05 23000 -11000 SE
+
+f1 uiR2_Forest19 uiR2EntryPoint01 24944 -12220 N
+f1 uiR2_Forest19 uiR2EntryPoint02 25357 -12233 N
+f1 uiR2_Forest19 uiR2EntryPoint03 25265 -12240 W
+f1 uiR2_Forest19 uiR2EntryPoint04 24971 -11947 S
+f1 uiR2_Forest19 uiR2EntryPoint05 25155 -12081 SE
+
+f1 uiR2_Forest23 uiR2EntryPoint01 28465 -12056 W
+f1 uiR2_Forest23 uiR2EntryPoint02 28011 -12082 E
+f1 uiR2_Forest23 uiR2EntryPoint03 28496 -12248 N
+f1 uiR2_Forest23 uiR2EntryPoint04 28375 -11911 SE
+f1 uiR2_Forest23 uiR2EntryPoint05 28194 -12118 E
+f1 uiR2_Forest23 uiR2EntryPoint06 27926 -11988 SE
+
+f1 uiR2_Forest39 uiR2EntryPoint01 30520 -12600 S
+f1 uiR2_Forest39 uiR2EntryPoint02 30143 -12958 E
+f1 uiR2_Forest39 uiR2EntryPoint03 30195 -12559 SE
+f1 uiR2_Forest39 uiR2EntryPoint04 30621 -12958 NW
+f1 uiR2_Forest39 uiR2EntryPoint05 30298 -12694 SE
+f1 uiR2_Forest39 uiR2EntryPoint06 30524 -12799 W
+f1 uiR2_Forest39 uiR2EntryPoint07 30291 -12910 NE
+
+f1 uiR2_Forest41 uiR2EntryPoint01 22140 -13150 SE
+f1 uiR2_Forest41 uiR2EntryPoint02 22401 -13440 NW
+f1 uiR2_Forest41 uiR2EntryPoint03 22263 -13269 S
+f1 uiR2_Forest41 uiR2EntryPoint04 22338 -13133 SW
+f1 uiR2_Forest41 uiR2EntryPoint05 22173 -13476 NE
+
+f1 uiR2_Forest20 uiR2EntryPoint01 26110 -11936 SW
+f1 uiR2_Forest20 uiR2EntryPoint02 25734 -11920 SE
+f1 uiR2_Forest20 uiR2EntryPoint03 25691 -12200 SW
+f1 uiR2_Forest20 uiR2EntryPoint04 26113 -12164 NW
+f1 uiR2_Forest20 uiR2EntryPoint05 25950 -12097 N
+
+f1 uiR2_Forest31 uiR2EntryPoint01 23470 -12600 SE
+f1 uiR2_Forest31 uiR2EntryPoint02 23681 -12712 S
+f1 uiR2_Forest31 uiR2EntryPoint03 23510 -13001 NE
+f1 uiR2_Forest31 uiR2EntryPoint04 23948 -13020 W
+f1 uiR2_Forest31 uiR2EntryPoint05 23598 -12850 SW
+f1 uiR2_Forest31 uiR2EntryPoint06 23995 -12787 W
+f1 uiR2_Forest31 uiR2EntryPoint07 23879 -12573 W
+
+f1 uiR2_Forest49 uiR2EntryPoint01 22802 -14253 N
+f1 uiR2_Forest50 uiR2EntryPoint01 21222 -14270 N
+f1 uiR2_Forest51 uiR2EntryPoint01 23627 -14197 N
+f1 uiR2_Forest52 uiR2EntryPoint01 21983 -14266 N
+f1 uiR2_Forest53 uiR2EntryPoint01 21244 -14688 N
+
+f2 uiR2_Forest34 uiR2EntryPoint01 26220 -12600 SE
+f2 uiR2_Forest34 uiR2EntryPoint02 26613 -12753 NW
+f2 uiR2_Forest34 uiR2EntryPoint03 26413 -12556 S
+f2 uiR2_Forest34 uiR2EntryPoint04 26238 -12888 N
+f2 uiR2_Forest34 uiR2EntryPoint05 26661 -12640 W
+
+f2 uiR2_Forest35 uiR2EntryPoint01 27100 -12600 S
+f2 uiR2_Forest35 uiR2EntryPoint02 27043 -12938 N
+f2 uiR2_Forest35 uiR2EntryPoint03 27222 -12726 W
+
+f2 uiR2_Forest45 uiR2EntryPoint01 26000 -13600 SW
+f2 uiR2_Forest45 uiR2EntryPoint02 25983 -13976 NW
+f2 uiR2_Forest45 uiR2EntryPoint03 25684 -13611 SE
+f2 uiR2_Forest45 uiR2EntryPoint04 25835 -13674 SE
+f2 uiR2_Forest45 uiR2EntryPoint05 26004 -13834 NW
+f2 uiR2_Forest45 uiR2EntryPoint06 25786 -13883 N
+
+f2 uiR2_Forest08 uiR2EntryPoint01 26957 -11364 NE
+f2 uiR2_Forest08 uiR2EntryPoint02 27200 -11178 S
+f2 uiR2_Forest08 uiR2EntryPoint03 27360 -11040 SW
+f2 uiR2_Forest08 uiR2EntryPoint04 27002 -10967 SE
+f2 uiR2_Forest08 uiR2EntryPoint05 27406 -11414 NW
+
+f2 uiR2_Forest12 uiR2EntryPoint01 29919 -11062 N
+f2 uiR2_Forest12 uiR2EntryPoint02 29855 -11111 NE
+f2 uiR2_Forest12 uiR2EntryPoint03 29986 -10996 SW
+
+f2 uiR2_Forest33 uiR2EntryPoint01 25300 -12600 S
+f2 uiR2_Forest33 uiR2EntryPoint02 25598 -13023 N
+f2 uiR2_Forest33 uiR2EntryPoint03 25598 -12632 W
+f2 uiR2_Forest33 uiR2EntryPoint04 25299 -12957 N
+
+f3 uiR2_Forest38 uiR2EntryPoint01 29630 -12600 SW
+f3 uiR2_Forest38 uiR2EntryPoint02 29735 -12939 NW
+f3 uiR2_Forest38 uiR2EntryPoint03 29350 -12779 E
+f3 uiR2_Forest38 uiR2EntryPoint04 29525 -12714 SE
+f3 uiR2_Forest38 uiR2EntryPoint05 29391 -12585 SE
+f3 uiR2_Forest38 uiR2EntryPoint06 29465 -13029 NE
+
+f3 uiR2_Forest46 uiR2EntryPoint01 27000 -13600 S
+f3 uiR2_Forest46 uiR2EntryPoint02 28057 -14465 N
+f3 uiR2_Forest46 uiR2EntryPoint03 26890 -14013 NE
+f3 uiR2_Forest46 uiR2EntryPoint04 27254 -13872 S
+
+f3 uiR2_Forest02 uiR2EntryPoint01 22236 -11281 NE
+f3 uiR2_Forest02 uiR2EntryPoint02 22468 -11198 W
+f3 uiR2_Forest02 uiR2EntryPoint03 22222 -11426 NE
+f3 uiR2_Forest02 uiR2EntryPoint04 22353 -11000 S
+f3 uiR2_Forest02 uiR2EntryPoint05 22446 -11374 NW
+f3 uiR2_Forest02 uiR2EntryPoint06 22137 -11199 E
+f3 uiR2_Forest02 uiR2EntryPoint07 22158 -10990 E
+f3 uiR2_Forest02 uiR2EntryPoint08 22259 -11108 E
+
+f3 uiR2_Forest07 uiR2EntryPoint01 26322 -11348 N
+f3 uiR2_Forest07 uiR2EntryPoint02 26310 -11200 E
+f3 uiR2_Forest07 uiR2EntryPoint03 26545 -11157 W
+f3 uiR2_Forest07 uiR2EntryPoint04 26185 -10967 E
+f3 uiR2_Forest07 uiR2EntryPoint05 26171 -11200 E
+f3 uiR2_Forest07 uiR2EntryPoint06 26446 -11021 SW
+f3 uiR2_Forest07 uiR2EntryPoint07 26222 -11401 NE
+f3 uiR2_Forest07 uiR2EntryPoint08 26498 -11359 W
+
+f3 uiR2_Forest16 uiR2EntryPoint01 23114 -11953 W
+f3 uiR2_Forest16 uiR2EntryPoint02 22883 -11999 E
+f3 uiR2_Forest16 uiR2EntryPoint03 22743 -12136 N
+f3 uiR2_Forest16 uiR2EntryPoint04 22735 -11817 SE
+f3 uiR2_Forest16 uiR2EntryPoint05 23038 -12182 NW
+
+f3 uiR2_Forest18 uiR2EntryPoint01 24326 -11878 SE
+f3 uiR2_Forest18 uiR2EntryPoint02 24390 -12095 N
+f3 uiR2_Forest18 uiR2EntryPoint03 24525 -12090 E
+f3 uiR2_Forest18 uiR2EntryPoint04 24225 -11836 E
+
+f4 uiR2_Forest25 uiR2EntryPoint01 29903 -11886 SO
+f4 uiR2_Forest25 uiR2EntryPoint02 29714 -12046 NE
+f4 uiR2_Forest25 uiR2EntryPoint03 29730 -11826 SE
+f4 uiR2_Forest25 uiR2EntryPoint04 29959 -11791 SW
+
+f4 uiR2_Forest01 uiR2EntryPoint01 21581 -11056 S
+f4 uiR2_Forest01 uiR2EntryPoint02 21733 -11412 NW
+f4 uiR2_Forest01 uiR2EntryPoint03 21648 -11248 S
+f4 uiR2_Forest01 uiR2EntryPoint04 21510 -11443 NE
+f4 uiR2_Forest01 uiR2EntryPoint05 21400 -11247 E
+f4 uiR2_Forest01 uiR2EntryPoint06 21762 -10995 S
+f4 uiR2_Forest01 uiR2EntryPoint07 21855 -11231 W
+f4 uiR2_Forest01 uiR2EntryPoint08 21355 -11040 E
+f4 uiR2_Forest01 uiR2EntryPoint09 21596 -10946 S
+
+f4 uiR2_Forest10 uiR2EntryPoint01 28673 -11191 N
+f4 uiR2_Forest10 uiR2EntryPoint02 28645 -11007 S
+f4 uiR2_Forest10 uiR2EntryPoint03 28566 -11110 E
+
+f4 uiR2_Forest24 uiR2EntryPoint01 29365 -11968 W
+f4 uiR2_Forest24 uiR2EntryPoint02 28963 -11969 E
+f4 uiR2_Forest24 uiR2EntryPoint03 29146 -11817 S
+f4 uiR2_Forest24 uiR2EntryPoint04 29117 -12186 N
+f4 uiR2_Forest24 uiR2EntryPoint05 29139 -12001 N
+
+f4 uiR2_Forest30 uiR2EntryPoint01 22865 -12920 N
+f4 uiR2_Forest30 uiR2EntryPoint02 23068 -12632 W
+f4 uiR2_Forest30 uiR2EntryPoint03 22773 -12782 E
+f4 uiR2_Forest30 uiR2EntryPoint04 22901 -12688 S
+
+f4 uiR2_Forest40 uiR2EntryPoint01 21150 -13350 N
+f4 uiR2_Forest40 uiR2EntryPoint02 21536 -13506 N
+f4 uiR2_Forest40 uiR2EntryPoint03 21359 -13195 S
+f4 uiR2_Forest40 uiR2EntryPoint04 21162 -13553 NE
+f4 uiR2_Forest40 uiR2EntryPoint05 21267 -13280 W
+f4 uiR2_Forest40 uiR2EntryPoint06 21118 -13278 SE
+
+
+
+o1 uiR2_Forest09 uiR2EntryPoint01 28210 -10964 SW
+o1 uiR2_Forest09 uiR2EntryPoint02 28058 -11137 S
+o1 uiR2_Forest09 uiR2EntryPoint03 27855 -11099 E
+
+o1 uiR2_Forest13 uiR2EntryPoint01 30783 -11199 W
+o1 uiR2_Forest13 uiR2EntryPoint02 30569 -10957 S
+o1 uiR2_Forest13 uiR2EntryPoint03 30355 -11071 E
+
+o1 uiR2_Forest21 uiR2EntryPoint01 26547 -12021 E
+o1 uiR2_Forest21 uiR2EntryPoint02 26748 -11980 SW
+o1 uiR2_Forest21 uiR2EntryPoint03 26636 -12215 N
+o1 uiR2_Forest21 uiR2EntryPoint04 26560 -11775 S
+
+o1 uiR2_Forest26 uiR2EntryPoint01 30827 -11803 W
+o1 uiR2_Forest26 uiR2EntryPoint02 30559 -11816 E
+o1 uiR2_Forest26 uiR2EntryPoint03 30347 -11839 E
+
+o1 uiR2_Forest28 uiR2EntryPoint01 21720 -12717 N
+o1 uiR2_Forest28 uiR2EntryPoint02 21559 -12569 S
+o1 uiR2_Forest28 uiR2EntryPoint03 21581 -12739 NE
+o1 uiR2_Forest28 uiR2EntryPoint04 21831 -12579 SW
+o1 uiR2_Forest28 uiR2EntryPoint05 21676 -12643 E
+
+
+
+//z1 uiR2_Forest06 uiR2EntryPoint01 25424 -11251 E
+//z1 uiR2_Forest06 uiR2EntryPoint02 25768 -11068 SW
+//z1 uiR2_Forest06 uiR2EntryPoint03 25616 -11254 NW
+
+//z1 uiR2_Forest11 uiR2EntryPoint01 29400 -11408 NW
+//z1 uiR2_Forest11 uiR2EntryPoint02 29273 -11198 S
+//z1 uiR2_Forest11 uiR2EntryPoint03 29112 -11028 SE
+
+//z1 uiR2_Forest15 uiR2EntryPoint01 22136 -11787 S
+//z1 uiR2_Forest15 uiR2EntryPoint02 21908 -12109 NE
+//z1 uiR2_Forest15 uiR2EntryPoint03 21903 -11855 SE
+//z1 uiR2_Forest15 uiR2EntryPoint04 22206 -12161 NW
+//z1 uiR2_Forest15 uiR2EntryPoint05 22066 -11993 N
+
+//z1 uiR2_Forest17 uiR2EntryPoint01 23533 -11761 SE
+//z1 uiR2_Forest17 uiR2EntryPoint02 23689 -12007 N
+//z1 uiR2_Forest17 uiR2EntryPoint03 23688 -12223 N
+//z1 uiR2_Forest17 uiR2EntryPoint04 23850 -11791 SW
+//z1 uiR2_Forest17 uiR2EntryPoint05 23464 -12000 E
+//z1 uiR2_Forest17 uiR2EntryPoint06 23862 -12143 NW
+
+//z1 uiR2_Forest22 uiR2EntryPoint01 27153 -12009 E
+//z1 uiR2_Forest22 uiR2EntryPoint02 27581 -11992 SW
+//z1 uiR2_Forest22 uiR2EntryPoint03 27374 -12176 N
+//z1 uiR2_Forest22 uiR2EntryPoint04 27381 -11938 S
+//z1 uiR2_Forest22 uiR2EntryPoint05 27260 -12085 E
+//z1 uiR2_Forest22 uiR2EntryPoint06 27444 -12071 W
+
+//z1 uiR2_Forest29 uiR2EntryPoint01 22306 -12674 W
+//z1 uiR2_Forest29 uiR2EntryPoint02 22404 -12746 N
+//z1 uiR2_Forest29 uiR2EntryPoint03 22152 -12719 NE
+
+//z1 uiR2_Forest36 uiR2EntryPoint01 27800 -12770 E
+//z1 uiR2_Forest36 uiR2EntryPoint02 28127 -12573 SW
+//z1 uiR2_Forest36 uiR2EntryPoint03 28218 -13020 NW
+//z1 uiR2_Forest36 uiR2EntryPoint04 27909 -12736 SW
+//z1 uiR2_Forest36 uiR2EntryPoint05 27805 -12614 S
+//z1 uiR2_Forest36 uiR2EntryPoint06 27896 -12855 E
+//z1 uiR2_Forest36 uiR2EntryPoint07 27794 -13005 NW
+//z1 uiR2_Forest36 uiR2EntryPoint08 28058 -12493 SE
+
+//z1 uiR2_Forest37 uiR2EntryPoint01 28980 -12920 W
+//z1 uiR2_Forest37 uiR2EntryPoint02 28880 -12886 SE
+//z1 uiR2_Forest37 uiR2EntryPoint03 28879 -13020 NE
+//z1 uiR2_Forest37 uiR2EntryPoint04 28522 -12562 E
+//z1 uiR2_Forest37 uiR2EntryPoint05 28712 -12686 s
+//z1 uiR2_Forest37 uiR2EntryPoint06 28747 -12911 N
+
+//z1 uiR2_Forest42 uiR2EntryPoint01 22830 -13600 NE
+//z1 uiR2_Forest42 uiR2EntryPoint02 23342 -13475 W
+//z1 uiR2_Forest42 uiR2EntryPoint03 22853 -13394 SE
+//z1 uiR2_Forest42 uiR2EntryPoint04 23099 -13430 S
+
+//z1 uiR2_Forest43 uiR2EntryPoint01 24000 -13600 N
+//z1 uiR2_Forest43 uiR2EntryPoint02 24076 -13838 W
+//z1 uiR2_Forest43 uiR2EntryPoint03 23825 -13411 SE
+//z1 uiR2_Forest43 uiR2EntryPoint04 24208 -13583 W
+//z1 uiR2_Forest43 uiR2EntryPoint05 24000 -13364 S
+//z1 uiR2_Forest43 uiR2EntryPoint06 24039 -13492 W
+
+//z1 uiR2_Forest44 uiR2EntryPoint01 24670 -13600 S
+//z1 uiR2_Forest44 uiR2EntryPoint02 24877 -14823 N
+//z1 uiR2_Forest44 uiR2EntryPoint03 24959 -14224 W
+//z1 uiR2_Forest44 uiR2EntryPoint04 24653 -14092 N
+//z1 uiR2_Forest44 uiR2EntryPoint05 24565 -13357 S
+//z1 uiR2_Forest44 uiR2EntryPoint06 24642 -14325 E
+
+
+
+
+// Jungle
+
+a1 uiR2_Jungle14 uiR2EntryPoint01 40700 -11200 E
+a1 uiR2_Jungle14 uiR2EntryPoint02 40876 -11370 W
+a1 uiR2_Jungle14 uiR2EntryPoint03 40681 -11376 W
+a1 uiR2_Jungle14 uiR2EntryPoint04 40841 -10966 W
+
+a1 uiR2_Jungle23 uiR2EntryPoint01 38200 -12000 N
+a1 uiR2_Jungle23 uiR2EntryPoint02 38163 -11917 W
+a1 uiR2_Jungle23 uiR2EntryPoint03 37956 -12037 E
+a1 uiR2_Jungle23 uiR2EntryPoint04 38356 -11999 NW
+a1 uiR2_Jungle23 uiR2EntryPoint05 38489 -11936 NW
+a1 uiR2_Jungle23 uiR2EntryPoint06 38196 -11782 S
+
+a1 uiR2_Jungle27 uiR2EntryPoint01 31200 -12700 N
+a1 uiR2_Jungle27 uiR2EntryPoint02 31207 -12533 S
+a1 uiR2_Jungle27 uiR2EntryPoint03 31299 -12813 NW
+
+j1 uiR2_Jungle06 uiR2EntryPoint01 34426 -11339 NE
+j1 uiR2_Jungle06 uiR2EntryPoint02 34698 -11060 W
+j1 uiR2_Jungle06 uiR2EntryPoint03 34836 -11243 W
+j1 uiR2_Jungle06 uiR2EntryPoint04 34651 -11405 S
+j1 uiR2_Jungle06 uiR2EntryPoint05 34372 -11029 E
+
+j1 uiR2_Jungle07 uiR2EntryPoint01 35300 -11200 SE
+j1 uiR2_Jungle07 uiR2EntryPoint02 35534 -11057 SW
+j1 uiR2_Jungle07 uiR2EntryPoint03 35424 -11378 N
+j1 uiR2_Jungle07 uiR2EntryPoint04 35100 -11026 SE
+
+j1 uiR2_Jungle15 uiR2EntryPoint01 31300 -12000 N
+j1 uiR2_Jungle15 uiR2EntryPoint02 31181 -11823 SE
+j1 uiR2_Jungle15 uiR2EntryPoint03 31185 -12211 NE
+j1 uiR2_Jungle15 uiR2EntryPoint04 31549 -12148 NW
+j1 uiR2_Jungle15 uiR2EntryPoint05 31549 -11920 W
+
+j1 uiR2_Jungle18 uiR2EntryPoint01 34000 -12000 S
+j1 uiR2_Jungle18 uiR2EntryPoint02 34234 -12243 N
+j1 uiR2_Jungle18 uiR2EntryPoint03 34161 -11953 E
+j1 uiR2_Jungle18 uiR2EntryPoint04 34191 -11792 S
+j1 uiR2_Jungle18 uiR2EntryPoint05 33799 -11882 SE
+j1 uiR2_Jungle18 uiR2EntryPoint06 33832 -12256 N
+
+j1 uiR2_Jungle36 uiR2EntryPoint01 37074 -12782 N
+j1 uiR2_Jungle36 uiR2EntryPoint02 37071 -12878 SW
+j1 uiR2_Jungle36 uiR2EntryPoint03 36896 -12875 E
+j1 uiR2_Jungle36 uiR2EntryPoint04 36934 -12737 S
+j1 uiR2_Jungle36 uiR2EntryPoint05 36978 -13070 N
+j1 uiR2_Jungle36 uiR2EntryPoint06 36800 -13062 NE
+
+j1 uiR2_Jungle41 uiR2EntryPoint01 40648 -12573 N
+j1 uiR2_Jungle41 uiR2EntryPoint02 40696 -12807 E
+j1 uiR2_Jungle41 uiR2EntryPoint03 40771 -13042 N
+
+j1 uiR2_Jungle53 uiR2EntryPoint01 39683 -13678 W
+j1 uiR2_Jungle53 uiR2EntryPoint02 39413 -13784 NE
+j1 uiR2_Jungle53 uiR2EntryPoint03 39514 -13435 SE
+j1 uiR2_Jungle53 uiR2EntryPoint04 39718 -13338 S
+
+j2 uiR2_Jungle01 uiR2EntryPoint01 31300 -11100 S
+j2 uiR2_Jungle01 uiR2EntryPoint02 31257 -10932 E
+j2 uiR2_Jungle01 uiR2EntryPoint03 31594 -11118 N
+j2 uiR2_Jungle01 uiR2EntryPoint04 31080 -11296 NE
+
+j2 uiR2_Jungle28 uiR2EntryPoint01 31600 -12550 N
+j2 uiR2_Jungle28 uiR2EntryPoint02 31788 -12534 S
+
+j2 uiR2_Jungle32 uiR2EntryPoint01 33720 -12700 SW
+j2 uiR2_Jungle32 uiR2EntryPoint02 33855 -12620 W
+j2 uiR2_Jungle32 uiR2EntryPoint03 33646 -12853 SE
+j2 uiR2_Jungle32 uiR2EntryPoint04 33757 -12969 NW
+
+j2 uiR2_Jungle34 uiR2EntryPoint01 35220 -12610 N
+j2 uiR2_Jungle34 uiR2EntryPoint02 35030 -12535 SW
+j2 uiR2_Jungle34 uiR2EntryPoint03 35028 -12728 SE
+j2 uiR2_Jungle34 uiR2EntryPoint04 35304 -12781 W
+j2 uiR2_Jungle34 uiR2EntryPoint05 35419 -12726 S
+
+j2 uiR2_Jungle51 uiR2EntryPoint01 38204 -13916 N
+j2 uiR2_Jungle51 uiR2EntryPoint02 38135 -13696 NW
+j2 uiR2_Jungle51 uiR2EntryPoint03 38032 -13508 E
+
+j2 uiR2_Jungle02 uiR2EntryPoint01 32203 -11283 NW
+j2 uiR2_Jungle02 uiR2EntryPoint02 32062 -10944 E
+j2 uiR2_Jungle02 uiR2EntryPoint03 32396 -11409 N
+j2 uiR2_Jungle02 uiR2EntryPoint04 32557 -11107 S
+j2 uiR2_Jungle02 uiR2EntryPoint05 32533 -10964 W
+
+j2 uiR2_Jungle05 uiR2EntryPoint01 33768 -11278 N
+j2 uiR2_Jungle05 uiR2EntryPoint02 33981 -11292 W
+
+j3 uiR2_Jungle38 uiR2EntryPoint01 38290 -12740 E
+j3 uiR2_Jungle38 uiR2EntryPoint02 38288 -12905 E
+j3 uiR2_Jungle38 uiR2EntryPoint03 38446 -13070 E
+j3 uiR2_Jungle38 uiR2EntryPoint04 38665 -12895 NW
+j3 uiR2_Jungle38 uiR2EntryPoint05 38475 -12755 S
+
+j3 uiR2_Jungle49 uiR2EntryPoint01 36953 -13596 N
+j3 uiR2_Jungle49 uiR2EntryPoint02 36931 -13379 SW
+j3 uiR2_Jungle49 uiR2EntryPoint03 36564 -13630 NE
+j3 uiR2_Jungle49 uiR2EntryPoint04 36901 -13803 N
+
+j3 uiR2_Jungle52 uiR2EntryPoint01 39145 -13665 W
+j3 uiR2_Jungle52 uiR2EntryPoint02 39053 -13517 E
+j3 uiR2_Jungle52 uiR2EntryPoint03 38963 -13387 N
+j3 uiR2_Jungle52 uiR2EntryPoint04 38710 -13477 S
+j3 uiR2_Jungle52 uiR2EntryPoint05 38931 -13723 W
+j3 uiR2_Jungle52 uiR2EntryPoint06 38915 -13580 N
+
+j3 uiR2_Jungle03 uiR2EntryPoint01 33100 -11200 NE
+j3 uiR2_Jungle03 uiR2EntryPoint02 32837 -11458 E
+j3 uiR2_Jungle03 uiR2EntryPoint03 33230 -11343 N
+j3 uiR2_Jungle03 uiR2EntryPoint04 33304 -11015 SW
+
+j3 uiR2_Jungle24 uiR2EntryPoint01 39000 -12000 W
+j3 uiR2_Jungle24 uiR2EntryPoint02 39297 -11888 S
+j3 uiR2_Jungle24 uiR2EntryPoint03 38832 -11886 SE
+j3 uiR2_Jungle24 uiR2EntryPoint04 38847 -12265 NE
+j3 uiR2_Jungle24 uiR2EntryPoint05 39289 -12258 NE
+
+j3 uiR2_Jungle25 uiR2EntryPoint01 39621 -12083 NW
+j3 uiR2_Jungle25 uiR2EntryPoint02 39938 -12037 S
+j3 uiR2_Jungle25 uiR2EntryPoint03 39916 -12213 SE
+j3 uiR2_Jungle25 uiR2EntryPoint04 40114 -11884 W
+j3 uiR2_Jungle25 uiR2EntryPoint05 39955 -11803 W
+j3 uiR2_Jungle25 uiR2EntryPoint06 39786 -11886 W
+
+j3 uiR2_Jungle29 uiR2EntryPoint01 31753 -12934 N
+j3 uiR2_Jungle29 uiR2EntryPoint02 31766 -13034 W
+j3 uiR2_Jungle29 uiR2EntryPoint03 31948 -12894 NW
+j3 uiR2_Jungle29 uiR2EntryPoint04 31574 -12918 N
+
+j4 uiR2_Jungle50 uiR2EntryPoint01 37426 -13620 N
+j4 uiR2_Jungle50 uiR2EntryPoint02 37482 -13875 E
+j4 uiR2_Jungle50 uiR2EntryPoint03 37596 -13682 E
+j4 uiR2_Jungle50 uiR2EntryPoint04 37700 -13544 NE
+j4 uiR2_Jungle50 uiR2EntryPoint05 37685 -13388 NW
+
+j4 uiR2_Jungle08 uiR2EntryPoint01 36200 -11200 SE
+j4 uiR2_Jungle08 uiR2EntryPoint02 36390 -11360 W
+j4 uiR2_Jungle08 uiR2EntryPoint03 36076 -11069 W
+
+j4 uiR2_Jungle12 uiR2EntryPoint01 39235 -11288 N
+j4 uiR2_Jungle12 uiR2EntryPoint02 39448 -10932 W
+j4 uiR2_Jungle12 uiR2EntryPoint03 38946 -11120 E
+j4 uiR2_Jungle12 uiR2EntryPoint04 39153 -11467 N
+j4 uiR2_Jungle12 uiR2EntryPoint05 39130 -11005 NE
+j4 uiR2_Jungle12 uiR2EntryPoint06 39426 -11406 S
+
+j4 uiR2_Jungle16 uiR2EntryPoint01 32200 -12000 E
+j4 uiR2_Jungle16 uiR2EntryPoint02 32017 -11813 S
+j4 uiR2_Jungle16 uiR2EntryPoint03 32332 -12242 N
+j4 uiR2_Jungle16 uiR2EntryPoint04 32459 -11865 W
+j4 uiR2_Jungle16 uiR2EntryPoint05 32047 -12201 N
+
+j4 uiR2_Jungle22 uiR2EntryPoint01 37400 -12000 N
+j4 uiR2_Jungle22 uiR2EntryPoint02 37515 -11789 N
+j4 uiR2_Jungle22 uiR2EntryPoint03 37631 -12105 N
+j4 uiR2_Jungle22 uiR2EntryPoint04 37530 -12275 NE
+j4 uiR2_Jungle22 uiR2EntryPoint05 37339 -12275 NW
+j4 uiR2_Jungle22 uiR2EntryPoint06 37167 -11731 S
+
+j4 uiR2_Jungle42 uiR2EntryPoint01 31103 -13282 E
+j4 uiR2_Jungle42 uiR2EntryPoint02 31352 -13419 W
+j4 uiR2_Jungle42 uiR2EntryPoint03 31285 -13573 S
+j4 uiR2_Jungle42 uiR2EntryPoint04 31307 -13712 N
+j4 uiR2_Jungle42 uiR2EntryPoint05 31420 -13639 SW
+j4 uiR2_Jungle42 uiR2EntryPoint06 31083 -13691 NE
+
+
+o1 uiR2_Jungle11 uiR2EntryPoint01 38400 -11200 N
+o1 uiR2_Jungle11 uiR2EntryPoint02 38565 -11080 W
+o1 uiR2_Jungle11 uiR2EntryPoint03 38389 -11029 E
+
+o1 uiR2_Jungle19 uiR2EntryPoint01 35000 -12000 N
+o1 uiR2_Jungle19 uiR2EntryPoint02 34752 -12146 NE
+o1 uiR2_Jungle19 uiR2EntryPoint03 34749 -11909 SE
+o1 uiR2_Jungle19 uiR2EntryPoint04 35292 -12042 S
+o1 uiR2_Jungle19 uiR2EntryPoint05 35320 -12203 S
+
+o1 uiR2_Jungle21 uiR2EntryPoint01 36600 -12000 N
+o1 uiR2_Jungle21 uiR2EntryPoint02 36833 -11757 SW
+o1 uiR2_Jungle21 uiR2EntryPoint03 36443 -12055 E
+o1 uiR2_Jungle21 uiR2EntryPoint04 36504 -12275 NW
+o1 uiR2_Jungle21 uiR2EntryPoint05 36657 -12265 NW
+
+o1 uiR2_Jungle26 uiR2EntryPoint01 40600 -12000 W
+o1 uiR2_Jungle26 uiR2EntryPoint02 40903 -11996 W
+o1 uiR2_Jungle26 uiR2EntryPoint03 40429 -12233 NE
+
+o1 uiR2_Jungle30 uiR2EntryPoint01 32318 -12599 N
+o1 uiR2_Jungle30 uiR2EntryPoint02 32444 -12765 N
+o1 uiR2_Jungle30 uiR2EntryPoint03 32497 -12629 W
+
+o1 uiR2_Jungle33 uiR2EntryPoint01 34230 -12745 N
+o1 uiR2_Jungle33 uiR2EntryPoint02 34311 -12806 SE
+o1 uiR2_Jungle33 uiR2EntryPoint03 34399 -12967 W
+o1 uiR2_Jungle33 uiR2EntryPoint04 34221 -12959 E
+
+o1 uiR2_Jungle35 uiR2EntryPoint01 35800 -13010 N
+o1 uiR2_Jungle35 uiR2EntryPoint02 36057 -12912 W
+o1 uiR2_Jungle35 uiR2EntryPoint03 35755 -12619 E
+o1 uiR2_Jungle35 uiR2EntryPoint04 36228 -12618 W
+o1 uiR2_Jungle35 uiR2EntryPoint05 35934 -12714 E
+
+o1 uiR2_Jungle44 uiR2EntryPoint01 32799 -13439 N
+o1 uiR2_Jungle44 uiR2EntryPoint02 32628 -13363 SE
+o1 uiR2_Jungle44 uiR2EntryPoint03 32928 -13375 SW
+o1 uiR2_Jungle44 uiR2EntryPoint04 32828 -13484 SE
+o1 uiR2_Jungle44 uiR2EntryPoint05 32954 -13703 N
+
+o1 uiR2_Jungle45 uiR2EntryPoint01 33599 -13741 N
+o1 uiR2_Jungle45 uiR2EntryPoint02 33422 -13656 NE
+o1 uiR2_Jungle45 uiR2EntryPoint03 33762 -13543 NW
+o1 uiR2_Jungle45 uiR2EntryPoint04 33521 -13372 SE
+
+o1 uiR2_Jungle46 uiR2EntryPoint01 34218 -13905 N
+o1 uiR2_Jungle46 uiR2EntryPoint02 34374 -13798 NE
+o1 uiR2_Jungle46 uiR2EntryPoint03 34517 -13771 S
+o1 uiR2_Jungle46 uiR2EntryPoint04 34582 -13541 SE
+o1 uiR2_Jungle46 uiR2EntryPoint05 34311 -13491 N
+o1 uiR2_Jungle46 uiR2EntryPoint06 34194 -13371 NW
+
+o1 uiR2_Jungle47 uiR2EntryPoint01 35624 -13369 N
+o1 uiR2_Jungle47 uiR2EntryPoint02 35613 -13526 W
+o1 uiR2_Jungle47 uiR2EntryPoint03 35446 -13684 E
+o1 uiR2_Jungle47 uiR2EntryPoint04 35162 -13683 W
+o1 uiR2_Jungle47 uiR2EntryPoint05 35118 -13442 E
+o1 uiR2_Jungle47 uiR2EntryPoint06 35379 -13426 SE
+
+o1 uiR2_Jungle48 uiR2EntryPoint01 35989 -13425 N
+o1 uiR2_Jungle48 uiR2EntryPoint02 36122 -13469 SW
+o1 uiR2_Jungle48 uiR2EntryPoint03 36107 -13750 N
+
+
+
+//z1 uiR2_Jungle04 uiR2EntryPoint01 33840 -11000 N
+
+//z1 uiR2_Jungle09 uiR2EntryPoint01 36694 -11144 E
+//z1 uiR2_Jungle09 uiR2EntryPoint02 36947 -11190 N
+//z1 uiR2_Jungle09 uiR2EntryPoint03 36698 -10954 S
+//z1 uiR2_Jungle09 uiR2EntryPoint04 36679 -11467 N
+//z1 uiR2_Jungle09 uiR2EntryPoint05 36880 -11041 S
+//z1 uiR2_Jungle09 uiR2EntryPoint06 36870 -11253 E
+//z1 uiR2_Jungle09 uiR2EntryPoint07 37203 -11179 N
+
+//z1 uiR2_Jungle10 uiR2EntryPoint01 37790 -11080 E
+//z1 uiR2_Jungle10 uiR2EntryPoint02 37909 -11413 N
+//z1 uiR2_Jungle10 uiR2EntryPoint03 37530 -11208 NE
+//z1 uiR2_Jungle10 uiR2EntryPoint04 37588 -11375 N
+
+//z1 uiR2_Jungle13 uiR2EntryPoint01 40000 -11200 W
+//z1 uiR2_Jungle13 uiR2EntryPoint02 40187 -11030 S
+//z1 uiR2_Jungle13 uiR2EntryPoint03 39771 -10957 E
+//z1 uiR2_Jungle13 uiR2EntryPoint04 39793 -11177 E
+//z1 uiR2_Jungle13 uiR2EntryPoint05 40057 -11356 E
+
+//z1 uiR2_Jungle17 uiR2EntryPoint01 33000 -12000 N
+//z1 uiR2_Jungle17 uiR2EntryPoint02 33158 -12149 N
+//z1 uiR2_Jungle17 uiR2EntryPoint03 33211 -11895 N
+//z1 uiR2_Jungle17 uiR2EntryPoint04 33199 -12007 W
+//z1 uiR2_Jungle17 uiR2EntryPoint05 32971 -11754 S
+//z1 uiR2_Jungle17 uiR2EntryPoint06 33038 -11926 E
+
+//z1 uiR2_Jungle20 uiR2EntryPoint01 35650 -12140 N
+
+//z1 uiR2_Jungle31 uiR2EntryPoint01 33149 -12874 N
+//z1 uiR2_Jungle31 uiR2EntryPoint02 33066 -13037 S
+//z1 uiR2_Jungle31 uiR2EntryPoint03 33043 -12726 NW
+
+//z1 uiR2_Jungle37 uiR2EntryPoint01 37929 -12925 N
+
+//z1 uiR2_Jungle39 uiR2EntryPoint01 38971 -12788 N
+//z1 uiR2_Jungle39 uiR2EntryPoint02 39024 -13072 NE
+//z1 uiR2_Jungle39 uiR2EntryPoint03 39159 -12877 E
+//z1 uiR2_Jungle39 uiR2EntryPoint04 39432 -13045 N
+//z1 uiR2_Jungle39 uiR2EntryPoint05 39280 -12841 N
+//z1 uiR2_Jungle39 uiR2EntryPoint06 39255 -12682 N
+//z1 uiR2_Jungle39 uiR2EntryPoint07 39433 -12707 E
+
+//z1 uiR2_Jungle40 uiR2EntryPoint01 40132 -12610 N
+
+//z1 uiR2_Jungle43 uiR2EntryPoint01 31767 -13391 N
+
+
+// Prime Roots
+
+p1 uiR2_Primes04 uiR2EntryPoint01 33300 -21200 S
+p1 uiR2_Primes04 uiR2EntryPoint02 33454 -21456 NW
+p1 uiR2_Primes04 uiR2EntryPoint03 33029 -21522 E
+
+p1 uiR2_Primes06 uiR2EntryPoint01 34700 -21070 SE
+p1 uiR2_Primes06 uiR2EntryPoint02 34905 -21093 SW
+p1 uiR2_Primes06 uiR2EntryPoint03 34733 -21359 N
+
+p1 uiR2_Primes22 uiR2EntryPoint01 37500 -21960 S
+p1 uiR2_Primes22 uiR2EntryPoint02 37524 -22163 N
+p1 uiR2_Primes22 uiR2EntryPoint03 37394 -22286 NE
+
+p1 uiR2_Primes09 uiR2EntryPoint01 36950 -21200 E
+p1 uiR2_Primes09 uiR2EntryPoint02 37532 -21366 W
+p1 uiR2_Primes09 uiR2EntryPoint03 37208 -21170 S
+
+p3 uiR2_Primes29 uiR2EntryPoint01 33140 -22910 W
+p3 uiR2_Primes29 uiR2EntryPoint02 33016 -22602 S
+p3 uiR2_Primes29 uiR2EntryPoint03 32776 -23057 NE
+
+p3 uiR2_Primes01 uiR2EntryPoint01 31110 -21520 E
+p3 uiR2_Primes01 uiR2EntryPoint02 31198 -21061 S
+p3 uiR2_Primes01 uiR2EntryPoint03 31132 -21312 E
+
+p3 uiR2_Primes05 uiR2EntryPoint01 34250 -21300 W
+p3 uiR2_Primes05 uiR2EntryPoint02 33891 -21271 E
+p3 uiR2_Primes05 uiR2EntryPoint03 34151 -21558 N
+
+p5 uiR2_Primes16 uiR2EntryPoint01 32970 -22100 NW
+p5 uiR2_Primes16 uiR2EntryPoint02 32763 -21871 SE
+p5 uiR2_Primes16 uiR2EntryPoint03 32890 -21990 S
+
+p5 uiR2_Primes18 uiR2EntryPoint01 34600 -22075 W
+p5 uiR2_Primes18 uiR2EntryPoint02 34205 -22078 E
+p5 uiR2_Primes18 uiR2EntryPoint03 34651 -21825 S
+
+p5 uiR2_Primes25 uiR2EntryPoint01 39910 -22320 E
+p5 uiR2_Primes25 uiR2EntryPoint02 39757 -22077 E
+p5 uiR2_Primes25 uiR2EntryPoint03 39979 -22132 NW
+
+p6 uiR2_Primes03 uiR2EntryPoint01 32300 -21100 SE
+p6 uiR2_Primes03 uiR2EntryPoint02 32288 -21484 N
+p6 uiR2_Primes03 uiR2EntryPoint03 32691 -21085 SW
+
+p6 uiR2_Primes07 uiR2EntryPoint01 35350 -21300 NE
+p6 uiR2_Primes07 uiR2EntryPoint02 35519 -21067 S
+p6 uiR2_Primes07 uiR2EntryPoint03 35601 -21405 N
+
+p6 uiR2_Primes13 uiR2EntryPoint01 40330 -21600 N
+p6 uiR2_Primes13 uiR2EntryPoint02 40127 -21438 E
+p6 uiR2_Primes13 uiR2EntryPoint03 40537 -21438 W
+
+p7 uiR2_Primes19 uiR2EntryPoint01 35000 -22300 N
+p7 uiR2_Primes19 uiR2EntryPoint02 35456 -22007 W
+p7 uiR2_Primes19 uiR2EntryPoint03 35022 -21891 SE
+
+p7 uiR2_Primes26 uiR2EntryPoint01 40500 -22100 N
+p7 uiR2_Primes26 uiR2EntryPoint02 40694 -22284 NW
+p7 uiR2_Primes26 uiR2EntryPoint03 40426 -22298 NE
+
+p7 uiR2_Primes08 uiR2EntryPoint01 36200 -21100 E
+p7 uiR2_Primes08 uiR2EntryPoint02 36393 -21558 N
+p7 uiR2_Primes08 uiR2EntryPoint03 36077 -21345 S
+
+p8 uiR2_Primes10 uiR2EntryPoint01 38002 -21293 N
+p8 uiR2_Primes10 uiR2EntryPoint02 38006 -21532 N
+p8 uiR2_Primes10 uiR2EntryPoint03 38094 -21040 S
+
+p8 uiR2_Primes11 uiR2EntryPoint01 38970 -21520 W
+p8 uiR2_Primes11 uiR2EntryPoint02 38721 -21047 S
+p8 uiR2_Primes11 uiR2EntryPoint03 38577 -21350 NW
+
+p8 uiR2_Primes15 uiR2EntryPoint01 31980 -21880 SE
+p8 uiR2_Primes15 uiR2EntryPoint02 32365 -22121 NW
+p8 uiR2_Primes15 uiR2EntryPoint03 32159 -22032 N
+
+p11 uiR2_Primes30 uiR2EntryPoint01 33730 -22860 N
+p11 uiR2_Primes30 uiR2EntryPoint02 33656 -22604 E
+p11 uiR2_Primes30 uiR2EntryPoint03 33843 -22997 E
+
+p11 uiR2_Primes12 uiR2EntryPoint01 39500 -21280 NE
+p11 uiR2_Primes12 uiR2EntryPoint02 39240 -21197 E
+p11 uiR2_Primes12 uiR2EntryPoint03 39800 -21352 W
+
+p11 uiR2_Primes14 uiR2EntryPoint01 31350 -21960 S
+p11 uiR2_Primes14 uiR2EntryPoint02 31373 -22074 S
+p11 uiR2_Primes14 uiR2EntryPoint03 31166 -22272 NE
+
+p12 uiR2_Primes17 uiR2EntryPoint01 33660 -22000 SW
+p12 uiR2_Primes17 uiR2EntryPoint02 33397 -21879 SE
+p12 uiR2_Primes17 uiR2EntryPoint03 33347 -22331 N
+
+p12 uiR2_Primes21 uiR2EntryPoint01 37000 -22150 W
+p12 uiR2_Primes21 uiR2EntryPoint02 36645 -21864 SE
+p12 uiR2_Primes21 uiR2EntryPoint03 36964 -21813 SE
+
+p12 uiR2_Primes27 uiR2EntryPoint01 31530 -22700 SW
+p12 uiR2_Primes27 uiR2EntryPoint02 31533 -23080 NW
+p12 uiR2_Primes27 uiR2EntryPoint03 31078 -22800 N
+
+
+
+o1 uiR2_Primes02 uiR2EntryPoint01 31640 -21140 SE
+o1 uiR2_Primes02 uiR2EntryPoint02 31593 -21374 N
+o1 uiR2_Primes02 uiR2EntryPoint03 31818 -21204 W
+
+o1 uiR2_Primes28 uiR2EntryPoint01 32270 -23000 N
+o1 uiR2_Primes28 uiR2EntryPoint02 32316 -22662 S
+o1 uiR2_Primes28 uiR2EntryPoint03 31933 -22734 SE
+
+
+
+//z1 uiR2_Primes20 uiR2EntryPoint01 35790 -22100 N
+
+//z1 uiR2_Primes23 uiR2EntryPoint01 38360 -21970 N
+
+//z1 uiR2_Primes24 uiR2EntryPoint02 38906 -21891 SE
+
+//z1 uiR2_Primes24 uiR2EntryPoint03 39086 -22287 NW
diff --git a/ryzom/common/data_common/r2/r2_islands.xml b/ryzom/common/data_common/r2/r2_islands.xml
index a8209512d9..feee68d572 100644
--- a/ryzom/common/data_common/r2/r2_islands.xml
+++ b/ryzom/common/data_common/r2/r2_islands.xml
@@ -1,2847 +1,2887 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From be7acd8e2a1d8359578c755e8c1f60d52cf6c58d Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Tue, 24 Oct 2023 18:12:07 +0200
Subject: [PATCH 093/194] Fix updateRpItems
---
.../gamedev/interfaces_v3/interaction.lua | 26 ++++++++++++++-----
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
index 8ef1be2a21..e226ac4d14 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
@@ -262,9 +262,7 @@ game.wantedRpTargets = {}
game.wantedRpPositions = {}
function game:addRequireRpItemsPosition(x, y, id)
- local sx = tostring(math.floor(x/10))
- local sy = tostring(math.floor(y/10))
- game.wantedRpPositions[sx..":"..sy] = id
+ table.insert(game.wantedRpPositions, {x, y, id})
end
function game:addRequireRpItems(left, target, mode, id)
@@ -286,6 +284,11 @@ function game:updateRpItems()
right = "_"
end
+ local right_no_variant = right
+ for str in string.gmatch(right, "([a-zA-Z_.]*)[|0-9]*") do
+ right_no_variant = str
+ end
+
if game.updateRpItemsUrl then
if game.usedRpLeftItem ~= left or game.usedRpRightItem ~= right then
game.usedRpLeftItem = left
@@ -294,18 +297,29 @@ function game:updateRpItems()
end
local target = tostring(getTargetSheet())
-
local mode = ""
if target ~= "" then
mode = tostring(getTargetMode())
end
- game:checkRpItemsPosition()
+ -- game:checkRpItemsPosition()
local html = getUI("ui:interface:rpitems_actions"):find("html")
for k, v in pairs(game.wantedRpTargets) do
local a = html:find("action"..v)
if a then
- if a:find("but").onclick_l == "lua" and (string.find(k, left..":"..target..":"..mode) or string.find(k, left..":"..target..":")) then
+ if string.find(left..":"..target..":"..mode..":"..tostring(v), k) ~= nil
+ or string.find(left..":::"..tostring(v), k) ~= nil
+ or string.find(left..":"..target.."::"..tostring(v), k) ~= nil
+ or string.find(left..":"..target..":*:"..tostring(v), k) ~= nil
+ or string.find(right..":"..target..":"..mode..":"..tostring(v), k) ~= nil
+ or string.find(right..":::"..tostring(v), k) ~= nil
+ or string.find(right..":"..target.."::"..tostring(v), k) ~= nil
+ or string.find(right..":"..target..":*:"..tostring(v), k) ~= nil
+ or string.find(right_no_variant..":"..target..":"..mode..":"..tostring(v), k) ~= nil
+ or string.find(right_no_variant..":::"..tostring(v), k) ~= nil
+ or string.find(right_no_variant..":"..target.."::"..tostring(v), k) ~= nil
+ or string.find(right_no_variant..":"..target..":*:"..tostring(v), k) ~= nil
+ then
a:find("img").texture = "grey_0.tga"
a:find("but").onclick_l = "lua"
a:find("but").alpha = 255
From b2bc1706aaeaf8bdc6fd2fc886368a59d005a573 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Tue, 24 Oct 2023 18:15:13 +0200
Subject: [PATCH 094/194] Fix checkRpItemsPosition
---
.../data/gamedev/interfaces_v3/interaction.lua | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
index e226ac4d14..39682fc42e 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
@@ -337,20 +337,23 @@ end
function game:checkRpItemsPosition()
local x,y,z = getPlayerPos()
- local sx = tostring(math.floor(x/10))
- local sy = tostring(math.floor(y/10))
local html = getUI("ui:interface:rpitems_actions"):find("html")
- for k, v in pairs(game.wantedRpPositions) do
- local a = html:find("action"..v)
+ for _, v in pairs(game.wantedRpPositions) do
+ vx = v[1]
+ vy = v[2]
+ id = v[3]
+ local a = html:find("action"..id)
if a then
- if string.find(sx..":"..sy, k) then
+ if (vx-x)*(vx-x) + (vy-y)*(vy-y) <= 50 then
a:find("but").onclick_l = "lua"
a:find("img").texture = "grey_0.tga"
+ a:find("but").alpha = 255
a:find("text").alpha = 255
else
- a:find("but").onclick_l = "proc"
+ a:find("but").onclick_l = ""
a:find("img").texture = "r2ed_toolbar_lock_small.tga"
- a:find("text").alpha = 200
+ a:find("but").alpha = 150
+ a:find("text").alpha = 100
end
end
end
From 50f72a4fdfedcb4273fa2535df71f6acbe0c0049 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Wed, 25 Oct 2023 14:29:31 +0200
Subject: [PATCH 095/194] Fix vpx when empty
---
ryzom/server/src/ai_service/ai_grp_npc.cpp | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/ryzom/server/src/ai_service/ai_grp_npc.cpp b/ryzom/server/src/ai_service/ai_grp_npc.cpp
index 7f65297442..02a846e70c 100644
--- a/ryzom/server/src/ai_service/ai_grp_npc.cpp
+++ b/ryzom/server/src/ai_service/ai_grp_npc.cpp
@@ -404,24 +404,21 @@ void CSpawnGroupNpc::spawnBots(const std::string &name, const std::string &vpx)
bot->spawn();
CBotNpc *botnpc = static_cast(bot);
- if (botnpc)
+ if (botnpc && !vpx.empty())
{
botnpc->setVisualProperties(vpx);
botnpc->sendVisualProperties();
}
- if (!ucName.empty())
+ CSpawnBot *spawnBot = bot->getSpawnObj();
+ if (spawnBot && !ucName.empty())
{
- CSpawnBot *spawnBot = bot->getSpawnObj();
- if (spawnBot)
- {
- TDataSetRow row = spawnBot->dataSetRow();
- NLNET::CMessage msgout("CHARACTER_NAME");
- msgout.serial(row);
- msgout.serial(ucName);
- sendMessageViaMirror("IOS", msgout);
- spawnBot->getPersistent().setCustomName(ucName);
- }
+ TDataSetRow row = spawnBot->dataSetRow();
+ NLNET::CMessage msgout("CHARACTER_NAME");
+ msgout.serial(row);
+ msgout.serial(ucName);
+ sendMessageViaMirror("IOS", msgout);
+ spawnBot->getPersistent().setCustomName(ucName);
}
if (_Cell < 0) {
From ced2ca3d69ad25ecab8ab1eaf8e3c01380fc53bc Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Fri, 27 Oct 2023 15:18:29 +0200
Subject: [PATCH 096/194] Fix left rp items when have 2 hands real items
---
ryzom/client/src/player_cl.cpp | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/ryzom/client/src/player_cl.cpp b/ryzom/client/src/player_cl.cpp
index 7437682798..f4cb4ae58b 100644
--- a/ryzom/client/src/player_cl.cpp
+++ b/ryzom/client/src/player_cl.cpp
@@ -914,8 +914,11 @@ void CPlayerCL::updateVisualPropertyVpa(const NLMISC::TGameCycle &/* gameCycle *
// No Valid item in the left hand.
equip(SLOTTYPE::LEFT_HAND_SLOT, "");
SLOTTYPE::EVisualSlot slot = SLOTTYPE::LEFT_HAND_SLOT;
+
+ const CEntitySheet *pRight = _Items[SLOTTYPE::RIGHT_HAND_SLOT].Sheet;
+ CItemSheet *pIsRight = (CItemSheet *)pRight;
leftHandTag = getTag(6);
- if (!leftHandTag.empty() && leftHandTag != "_")
+ if ((!pIsRight || (!pIsRight->hasSlot(SLOTTYPE::TWO_HANDS) && !pIsRight->hasSlot(SLOTTYPE::RIGHT_HAND_EXCLUSIVE))) && !leftHandTag.empty() && leftHandTag != "_")
{
vector tagInfos;
splitString(leftHandTag, string("|"), tagInfos);
@@ -953,6 +956,7 @@ void CPlayerCL::updateVisualPropertyVpa(const NLMISC::TGameCycle &/* gameCycle *
equip(slot, "");
}
}
+
CLuaManager::getInstance().executeLuaScript(toString("game:updateRpItems('%s', '%s')", leftHandTag.c_str(), rightHandTag.c_str()), 0);
// Create face
@@ -1032,8 +1036,6 @@ void CPlayerCL::updateVisualPropertyVpa(const NLMISC::TGameCycle &/* gameCycle *
equip(slot, tagInfos[0], itemSheet);
}
}
-
-
}
else
{
From effee71fa93df753486188cfeeca16a56f397708 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 27 Oct 2023 15:21:19 +0200
Subject: [PATCH 097/194] Add debug
---
.../player_manager/character_inventory_manipulation.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/ryzom/server/src/entities_game_service/player_manager/character_inventory_manipulation.cpp b/ryzom/server/src/entities_game_service/player_manager/character_inventory_manipulation.cpp
index f754f5075e..285622f06e 100644
--- a/ryzom/server/src/entities_game_service/player_manager/character_inventory_manipulation.cpp
+++ b/ryzom/server/src/entities_game_service/player_manager/character_inventory_manipulation.cpp
@@ -3584,8 +3584,10 @@ void CCharacter::applyItemModifiers(const CGameItemPtr &item)
}
// init all modifiers due to equipment
+ nlinfo("Current _ParryModifier = Total : %d", _ParryModifier);
_DodgeModifier += item->dodgeModifier();
_ParryModifier += item->parryModifier();
+ nlinfo("+ Item Parry = Total : + %d = %d", item->parryModifier(), _ParryModifier);
_AdversaryDodgeModifier += item->adversaryDodgeModifier();
_AdversaryParryModifier += item->adversaryParryModifier();
// update DB for modifiers
From 84d2991c1ff3bcf2e1b7a3fcbe0ee0ced420361e Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Fri, 27 Oct 2023 15:28:15 +0200
Subject: [PATCH 098/194] Put payload lua things into client files
---
.../client/data/gamedev/interfaces_v3/ark.lua | 64 ++++++++++++++++++-
.../data/gamedev/interfaces_v3/compass.lua | 21 +++++-
.../data/gamedev/interfaces_v3/compass.xml | 6 +-
.../data/gamedev/interfaces_v3/help.lua | 45 ++++++++++++-
.../gamedev/interfaces_v3/info_player.lua | 22 +++++--
.../data/gamedev/interfaces_v3/outpost.lua | 25 ++++----
.../data/gamedev/interfaces_v3/player.lua | 40 ++++++++++--
.../data/gamedev/interfaces_v3/taskbar.xml | 2 +-
.../data/gamedev/interfaces_v3/web_queue.lua | 4 +-
.../gamedev/interfaces_v3/webig_widgets.xml | 5 +-
10 files changed, 197 insertions(+), 37 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark.lua b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
index fc9ba53d7c..36b95eb185 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
@@ -78,6 +78,16 @@ if ArkMissionCatalog == nil then
}
end
+function openRyward(folder, event)
+ folder = "f"..tostring(folder)
+ event = tostring(event)
+ if not (rykea_selected_path_B == folder and rykea_selected_path_C == event and getUI("ui:interface:encyclopedia").active == true) then
+ ArkMissionCatalog:OpenCat("rykea","https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=10741&command=reset_all")
+ end
+ getUI(ArkMissionCatalog.window_id..":content:htmlB"):browse("https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=10741&command=reset_all&pathB="..folder.."&pathC="..event)
+ getUI(ArkMissionCatalog.window_id).active = true
+end
+
function ArkMissionCatalog:OpenWindow(urlA, urlB, dont_active)
local winframe = getUI(ArkMissionCatalog.window_id)
winframe.opened=true
@@ -201,6 +211,58 @@ function ArkMissionCatalog:showLegacyEncyclopedia(state)
end
end
+
+function ArkMissionCatalog:setup()
+ debug("Define Mission Catalag url")
+ if ArkMissionCatalog ~= nil then
+ ArkMissionCatalog.posxB = 0
+ end
+
+ local urlA = "https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=8746&command=reset_all&no_html_header=1&ig=1"
+ getUI("ui:interface:encyclopedia:content:htmlA"):browse(urlA)
+
+ ArkMissionCatalog:startResize()
+ local continent = getContinentSheet()
+ if continent == "newbieland.continent" then
+ ArkMissionCatalog:OpenCat("academic","https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=10700&command=reset_all&no_html_header=1")
+ else
+ ArkMissionCatalog:OpenCat("storyline","https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=8840&command=reset_all&no_html_header=1&show_latest=1")
+ end
+
+ debug("Open ency")
+ getUI("ui:interface:encyclopedia").opened = true;
+
+end
+
+function translateText(id, script, event)
+ framewin = getUI("ui:interface:ark_translate_lesson", false)
+ if framewin == nil then
+ createRootGroupInstance("webig_browser", "ark_translate_lesson", {h=480, w=980})
+ framewin = getUI("ui:interface:ark_translate_lesson", false)
+ end
+
+ framewin.opened = true
+ framewin.active = true
+ framewin.x = math.floor((getUI("ui:interface").w - framewin.w) / 2)
+ framewin.y = math.floor((getUI("ui:interface").h + framewin.h) / 2)
+ setTopWindow(framewin)
+ framewin:find("html"):browse("https://app.ryzom.com/app_arcc/index.php?action=mTrads_Edit&event="..tostring(event).."&trad_name="..tostring(id).."&reload="..script)
+end
+
+
+function setupArkUrls()
+ debug("Setup Lm Events")
+ local ui = getUI("ui:interface:map:content:map_content:lm_events:html")
+ ui.home = "https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=8297&command=reset_all&no_html_header=1&continent="..tostring(game.currentMapContinent)
+ ui:browse("home")
+
+ debug("Setup Lm Icons")
+ ui = getUI("ui:interface:map:content:map_content:lm_dynicons:html")
+ ui.home = "https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=11158&command=reset_all&no_html_header=1"
+ ui:browse("home")
+ game.updateRpItemsUrl = "https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=11488&command=reset_all"
+end
+
if S2E1 == nil then
S2E1 = {}
end
@@ -623,4 +685,4 @@ end
-- VERSION --
-RYZOM_ARK_VERSION = 324
\ No newline at end of file
+RYZOM_ARK_VERSION = 324
diff --git a/ryzom/client/data/gamedev/interfaces_v3/compass.lua b/ryzom/client/data/gamedev/interfaces_v3/compass.lua
index 9772d4083c..8daf9ab4c7 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/compass.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/compass.lua
@@ -4,6 +4,25 @@ if (game==nil) then
game= {};
end
+if DynE == nil then
+ DynE = {}
+ DynE.lastWinUpdate = 0
+end
+
+if DynE.otherMapPoint == nil then
+ DynE.otherMapPoints = {}
+end
+
+function DynE:AddOtherMapPoints()
+ if DynE.otherMapPoints ~= nil then
+ for k, v in pairs(DynE.otherMapPoints) do
+ for _, point in pairs(v) do
+ addLandMark(point[1], point[2], point[3], point[4],"","","","","","")
+ end
+ end
+ end
+end
+
function game:areInSilan()
polygons = {{8128,-10208}, {11368,-10208}, {11392,-12392}, {8096,-12368}}
@@ -50,4 +69,4 @@ end
setOnDraw(getUI("ui:interface:compass"), "game:updateCompass()")
-- VERSION --
-RYZOM_COMPASS_VERSION = 324
\ No newline at end of file
+RYZOM_COMPASS_VERSION = 324
diff --git a/ryzom/client/data/gamedev/interfaces_v3/compass.xml b/ryzom/client/data/gamedev/interfaces_v3/compass.xml
index 131d1e1afb..0b3c538279 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/compass.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/compass.xml
@@ -783,7 +783,7 @@
w="24"
h="24"
x="4"
- y="-30">
+ y="-20">
self.NpcWebPage.Timeout then
local npcName = getTargetName()
-
local message = ucstring()
-
- local text = game:getOpenAppPageMessage()
- message:fromUtf8(text)
- displaySystemInfo(message, "AMB")
+ local text = ""
+ if game.appNpcMessages[npcName] ~= nil then
+ text = game.appNpcMessages[npcName]
+ else
+ text = game:getOpenAppPageMessage()
+ end
+ if text == "" then
+ text = "w_magic_sep2.tga|"
+ else
+ text = findReplaceAll(text, "%s", npcName)
+ end
+ message:fromUtf8(game:parseLangText(text))
+ displaySystemInfo(message, "ZON")
removeOnDbChange(getUI("ui:interface:npc_web_browser"),"@UI:VARIABLES:CURRENT_SERVER_TICK")
end
end
@@ -1617,7 +1625,7 @@ end
function game:openMissionsCatalog()
- -- Setup this function in webig
+ getUI("ui:interface:web_transactions"):find("html"):browse("https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=8747&command=reset_all")
end
@@ -2198,4 +2206,4 @@ end
-- VERSION --
-RYZOM_INFO_PLAYER_VERSION = 324
\ No newline at end of file
+RYZOM_INFO_PLAYER_VERSION = 324
diff --git a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
index fba2ce3adb..f09b5e6c3a 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
@@ -93,24 +93,25 @@ end
------------------------------------------------------------------------------------------------------------
function game:outpostBCOpenStateWindow()
+ getUI("ui:interface:outpost_selected").active = false
-- Open the State Window from the BotChat. server msg
- runAH(nil, 'outpost_select_from_bc', '');
+ runAH(nil, "outpost_select_from_bc", "");
-- Open the window
- runAH(nil, 'show', 'outpost_selected');
+ runAH(nil, "show", "outpost_selected");
end
------------------------------------------------------------------------------------------------------------
function game:outpostDeclareWar()
- -- Send Msg to server
- runAH(nil, 'outpost_declare_war_start', '');
-
- -- wait a ack from server. Suppose not OK by default
- setDbProp("UI:TEMP:OUTPOST:DECLARE_WAR_ACK_RECEIVED", 0);
- setDbProp("UI:TEMP:OUTPOST:DECLARE_WAR_ACK_OK", 0);
-
- -- Open the Declare War window
- runAH(nil, "show", "outpost_declare_war");
+ local sheetSel = getDbProp("SERVER:OUTPOST_SELECTED:SHEET");
+ if sheetSel ~= nil then
+ local sheetSel = getSheetName(sheetSel)
+ local timeoffset = "0"
+ if getTimestampHuman ~= nil then
+ timeoffset = getTimestampHuman("%z")
+ end
+ WebQueue:push("https://app.ryzom.com/app_guild/outposts.php?action=declareWar&script=10149&command=reset_all&outpost="..sheetSel.."&timeoffset="..timeoffset)
+ end
end
------------------------------------------------------------------------------------------------------------
@@ -667,4 +668,4 @@ end
-- VERSION --
-RYZOM_OUTPOST_VERSION = 324
\ No newline at end of file
+RYZOM_OUTPOST_VERSION = 324
diff --git a/ryzom/client/data/gamedev/interfaces_v3/player.lua b/ryzom/client/data/gamedev/interfaces_v3/player.lua
index c662b6edbf..39fd7dbe93 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/player.lua
@@ -52,7 +52,6 @@ function game:addScriptPlace(modname, place, id)
game.wantedScriptPlaces[modname][place] = id
end
-
function game:checkScriptPlace(place)
for modname, vals in pairs(game.wantedScriptPlaces) do
if vals[place] ~= nil and game.latestValidScriptPlace ~= place then
@@ -62,13 +61,9 @@ function game:checkScriptPlace(place)
end
end
-
function game:CheckPosition()
- local x,y,z = getPlayerPos()
- local sx = tostring(math.floor(x/10))
- local sy = tostring(math.floor(y/10))
- game:checkRpItemsPosition(sx, sy)
- local cont, region, places = getPositionInfos()
+ game:checkRpItemsPosition()
+ local cont, region, places = game:getPositionInfos()
game:checkScriptPlace(cont)
game:checkScriptPlace(region)
for place, typ in pairs(places) do
@@ -76,6 +71,37 @@ function game:CheckPosition()
end
end
+function game:getPositionInfos(x, y)
+ local player_cont = ""
+ local player_region = ""
+ local player_places = {}
+ if x == nil or y == nil then
+ x,y,z = getPlayerPos()
+ end
+
+ if game.World == nil then
+ return
+ end
+
+ for cont, c in pairs(game.World) do
+ player_cont = cont
+ if point_inside_poly(x, y, c[2]) then
+ for region, r in pairs(c[3]) do
+ if point_inside_poly(x, y, r[2]) then
+ player_region = region
+ for place, p in pairs(r[3]) do
+ if point_inside_poly(x, y, p[2]) then
+ player_places[place] = p[3]
+ end
+ end
+ end
+ end
+ end
+ end
+ return player_cont, player_region, player_places
+end
+
+
------------------------------------------------------------------------------------------------------------
-- Update player bars in function of what we wants to display (we can hide each one of the 3 bars : sap,stamina and focus)
function game:updatePlayerBars()
diff --git a/ryzom/client/data/gamedev/interfaces_v3/taskbar.xml b/ryzom/client/data/gamedev/interfaces_v3/taskbar.xml
index 59a6819534..fe372658ea 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/taskbar.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/taskbar.xml
@@ -865,7 +865,7 @@
diff --git a/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua b/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
index f3d1fcfa67..019cf20051 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
@@ -5,7 +5,7 @@ if not WebQueue then
end
function WebQueue:debug(text)
- debugInfo(text)
+ debug(text)
end
function WebQueue:push(url, web)
@@ -132,4 +132,4 @@ end
-- VERSION --
-RYZOM_WEB_QUEUE_VERSION = 324
\ No newline at end of file
+RYZOM_WEB_QUEUE_VERSION = 324
diff --git a/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml b/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml
index e7256c2b3f..40001707cd 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/webig_widgets.xml
@@ -282,7 +282,7 @@
-
+
-
+
+
From bffc468acbf8df757a1c2a8d92de95fd02effcfb Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Fri, 27 Oct 2023 17:50:38 +0200
Subject: [PATCH 099/194] New lua versions
---
ryzom/client/data/gamedev/interfaces_v3/ark.lua | 2 +-
.../interfaces_v3/check_lua_versions.lua | 17 ++++++++---------
.../data/gamedev/interfaces_v3/compass.lua | 2 +-
.../client/data/gamedev/interfaces_v3/help.lua | 2 +-
.../data/gamedev/interfaces_v3/info_player.lua | 2 +-
.../data/gamedev/interfaces_v3/interaction.lua | 2 +-
.../data/gamedev/interfaces_v3/outpost.lua | 2 +-
.../data/gamedev/interfaces_v3/player.lua | 2 +-
.../data/gamedev/interfaces_v3/web_queue.lua | 2 +-
9 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark.lua b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
index 36b95eb185..d1dd01688f 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
@@ -685,4 +685,4 @@ end
-- VERSION --
-RYZOM_ARK_VERSION = 324
+RYZOM_ARK_VERSION = 335
diff --git a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
index b3399d95bc..c3f48b9ee0 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
@@ -1,16 +1,16 @@
local ryzom_have_all_good_version = true
if RYZOM_APPZONE_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_APPZONE_VERSION, 324, "appzone") end
-if RYZOM_ARK_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_ARK_VERSION, 324, "ark") end
+if RYZOM_ARK_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_ARK_VERSION, 335, "ark") end
if RYZOM_ARK_LESSONS_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_ARK_LESSONS_VERSION, 324, "ark_lessons") end
if RYZOM_BG_DOWNLOADER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_BG_DOWNLOADER_VERSION, 324, "bg_downloader") end
if RYZOM_BOT_CHAT_V4_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_BOT_CHAT_V4_VERSION, 324, "bot_chat_v4") end
-if RYZOM_COMPASS_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_COMPASS_VERSION, 324, "compass") end
+if RYZOM_COMPASS_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_COMPASS_VERSION, 335, "compass") end
if RYZOM_GAME_CONFIG_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_GAME_CONFIG_VERSION, 324, "game_config") end
if RYZOM_GAME_R2_LOADING_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_GAME_R2_LOADING_VERSION, 324, "game_r2_loading") end
if RYZOM_GUILD_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_GUILD_VERSION, 324, "guild") end
-if RYZOM_HELP_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_HELP_VERSION, 324, "help") end
-if RYZOM_INFO_PLAYER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_INFO_PLAYER_VERSION, 324, "info_player") end
-if RYZOM_INTERACTION_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_INTERACTION_VERSION, 324, "interaction") end
+if RYZOM_HELP_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_HELP_VERSION, 335, "help") end
+if RYZOM_INFO_PLAYER_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_INFO_PLAYER_VERSION, 335, "info_player") end
+if RYZOM_INTERACTION_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_INTERACTION_VERSION, 335, "interaction") end
if RYZOM_INVENTORY_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_INVENTORY_VERSION, 324, "inventory") end
if RYZOM_JSON_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_JSON_VERSION, 324, "json") end
if RYZOM_MAP_VERSION ~= 328 then broadcastBadLuaVersions(RYZOM_MAP_VERSION, 328, "map") end
@@ -21,8 +21,8 @@ if RYZOM_NAMES_TRYKER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_TR
if RYZOM_NAMES_ZORAI_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_ZORAI_VERSION, 324, "names_zorai") end
if RYZOM_OUT_V2_APPEAR_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_APPEAR_VERSION, 324, "out_v2_appear") end
if RYZOM_OUT_V2_SELECT_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_SELECT_VERSION, 324, "out_v2_select") end
-if RYZOM_OUTPOST_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUTPOST_VERSION, 324, "outpost") end
-if RYZOM_PLAYER_VERSION ~= 328 then broadcastBadLuaVersions(RYZOM_PLAYER_VERSION, 328, "player") end
+if RYZOM_OUTPOST_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_OUTPOST_VERSION, 335, "outpost") end
+if RYZOM_PLAYER_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_PLAYER_VERSION, 335, "player") end
if RYZOM_PLAYER_TRADE_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_PLAYER_TRADE_VERSION, 324, "player_trade") end
if RYZOM_RING_ACCESS_POINT_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_RING_ACCESS_POINT_VERSION, 324, "ring_access_point") end
if RYZOM_RING_ACCESS_POINT_FILTER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_RING_ACCESS_POINT_FILTER_VERSION, 324, "ring_access_point_filter") end
@@ -31,7 +31,6 @@ if RYZOM_RYZHOME_TOOLBAR_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_RYZHO
if RYZOM_SCENEEDIT_VERSION ~= 328 then broadcastBadLuaVersions(RYZOM_SCENEEDIT_VERSION, 328, "sceneedit") end
if RYZOM_TASKBAR_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_TASKBAR_VERSION, 324, "taskbar") end
if RYZOM_TP_INTERFACE_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_TP_INTERFACE_VERSION, 324, "tp_interface") end
-if RYZOM_WEB_QUEUE_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_WEB_QUEUE_VERSION, 324, "web_queue") end
+if RYZOM_WEB_QUEUE_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_WEB_QUEUE_VERSION, 335, "web_queue") end
if RYZOM_WEBBROWSER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_WEBBROWSER_VERSION, 324, "webbrowser") end
if RYZOM_WEBIG_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_WEBIG_VERSION, 324, "webig") end
-if not all_good_versions then broadcastBadLuaVersions() end
diff --git a/ryzom/client/data/gamedev/interfaces_v3/compass.lua b/ryzom/client/data/gamedev/interfaces_v3/compass.lua
index 8daf9ab4c7..93ca89fd96 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/compass.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/compass.lua
@@ -69,4 +69,4 @@ end
setOnDraw(getUI("ui:interface:compass"), "game:updateCompass()")
-- VERSION --
-RYZOM_COMPASS_VERSION = 324
+RYZOM_COMPASS_VERSION = 335
diff --git a/ryzom/client/data/gamedev/interfaces_v3/help.lua b/ryzom/client/data/gamedev/interfaces_v3/help.lua
index 41c1590232..1a3e4dd1f8 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/help.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/help.lua
@@ -185,4 +185,4 @@ function help:checkTutorialMilkoPad()
end
-- VERSION --
-RYZOM_HELP_VERSION = 324
+RYZOM_HELP_VERSION = 335
diff --git a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
index e54a1026a4..c02b1143df 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/info_player.lua
@@ -2206,4 +2206,4 @@ end
-- VERSION --
-RYZOM_INFO_PLAYER_VERSION = 324
+RYZOM_INFO_PLAYER_VERSION = 335
diff --git a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
index 39682fc42e..b9a71b3c6a 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/interaction.lua
@@ -1318,4 +1318,4 @@ function arkNpcShop:Buy(id)
end
-- VERSION --
-RYZOM_INTERACTION_VERSION = 324
+RYZOM_INTERACTION_VERSION = 335
diff --git a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
index f09b5e6c3a..b307c5831e 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
@@ -668,4 +668,4 @@ end
-- VERSION --
-RYZOM_OUTPOST_VERSION = 324
+RYZOM_OUTPOST_VERSION = 335
diff --git a/ryzom/client/data/gamedev/interfaces_v3/player.lua b/ryzom/client/data/gamedev/interfaces_v3/player.lua
index 39fd7dbe93..7aca937557 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/player.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/player.lua
@@ -1091,4 +1091,4 @@ function game:fixVpx(vpx)
end
-- VERSION --
-RYZOM_PLAYER_VERSION = 328
+RYZOM_PLAYER_VERSION = 335
diff --git a/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua b/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
index 019cf20051..9edc0cf5d3 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/web_queue.lua
@@ -132,4 +132,4 @@ end
-- VERSION --
-RYZOM_WEB_QUEUE_VERSION = 324
+RYZOM_WEB_QUEUE_VERSION = 335
From a04be6f2a31b1f8c2d1e873a6edd5442eaece18b Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Sun, 19 Nov 2023 23:38:26 +0100
Subject: [PATCH 100/194] Enable debug of LUA ERROR in all clients
---
nel/src/gui/lua_manager.cpp | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/nel/src/gui/lua_manager.cpp b/nel/src/gui/lua_manager.cpp
index 9bdb002a6e..4b2018957d 100644
--- a/nel/src/gui/lua_manager.cpp
+++ b/nel/src/gui/lua_manager.cpp
@@ -75,19 +75,15 @@ namespace NLGUI
}
catch( const ELuaError &e )
{
- std::string ryzom_version = RYZOM_VERSION;
- if (!FINAL_VERSION || ryzom_version.find("Omega") == std::string::npos) // Omega version are the one used on live servers
+ nlwarning("--- LUA ERROR ---");
+ nlwarning(e.luaWhat().c_str());
+ std::vector res;
+ NLMISC::explode(luaScript, std::string("\n"), res);
+ for(uint k = 0; k < res.size(); ++k)
{
- nlwarning("--- LUA ERROR ---");
- nlwarning(e.luaWhat().c_str());
- std::vector res;
- NLMISC::explode(luaScript, std::string("\n"), res);
- for(uint k = 0; k < res.size(); ++k)
- {
- nlwarning("%.05u %s", k, res[k].c_str());
- }
- nlwarning("--- ********* ---");
+ nlwarning("%.05u %s", k, res[k].c_str());
}
+ nlwarning("--- ********* ---");
return false;
}
From ff0efa44bce625ed554a74acd9e777029df08d6e Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Wed, 22 Nov 2023 16:24:34 +0100
Subject: [PATCH 101/194] Fix buyable OP squads. Fix Inventorys access in powos
---
.../data/gamedev/interfaces_v3/outpost.lua | 62 +++++++++----------
.../data/gamedev/interfaces_v3/outpost.xml | 9 +--
ryzom/common/src/game_share/outpost.h | 2 +-
.../building_manager/room_instance.cpp | 12 +---
.../mission_manager/missions_commands.cpp | 6 ++
.../outpost_manager/outpost.cpp | 2 +-
6 files changed, 45 insertions(+), 48 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
index b307c5831e..8e01dce292 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/outpost.lua
@@ -169,63 +169,58 @@ function game:outpostSelectSquadCapitalConfirm()
end
function game:outpostSetSquad()
- local halfIndexSquad= tonumber(getDefine("right_squad_list_index"));
- local MaxSquad= tonumber(getDefine("outpost_nb_max_squad_in_list"));
- debug(getDbProp("UI:TEMP:OUTPOST:SQUAD_TO_BUY"))
- local slot = getDbProp("UI:TEMP:OUTPOST:SQUAD_SLOT_SELECTED")
- if slot >= halfIndexSquad then
- setDbProp("UI:TEMP:OUTPOST:SQUAD_SLOT_SELECTED", slot - MaxSquad)
- end
+ debug(getDbProp("UI:TEMP:OUTPOST:SQUAD_SLOT_SELECTED"))
runAH(nil, "outpost_set_squad", "line=@UI:TEMP:OUTPOST:SQUAD_TO_BUY");
end
function game:outpostRemoveSquad()
- local Rounds = tonumber(getDefine("right_squad_list_index"));
- local MaxSquad= tonumber(getDefine("outpost_nb_max_squad_in_list"));
- local slot = getDbProp("UI:TEMP:OUTPOST:SQUAD_SLOT_SELECTED")
- if slot >= Rounds then
- setDbProp("UI:TEMP:OUTPOST:SQUAD_SLOT_SELECTED", slot - MaxSquad)
- end
runAH(nil, "outpost_remove_squad", "line=@UI:TEMP:OUTPOST:SQUAD_TO_BUY");
end
function game:outpostInsertSquad()
- local Rounds= tonumber(getDefine("right_squad_list_index"));
- local MaxSquad= tonumber(getDefine("outpost_nb_max_squad_in_list"));
- local slot = getDbProp("UI:TEMP:OUTPOST:SQUAD_SLOT_SELECTED")
- if slot >= Rounds then
- setDbProp("UI:TEMP:OUTPOST:SQUAD_SLOT_SELECTED", slot - MaxSquad)
- end
runAH(nil, "outpost_insert_squad", "line=@UI:TEMP:OUTPOST:SQUAD_TO_BUY");
end
function game:outpostSetMapSquad()
- local Rounds= tonumber(getDefine("right_squad_list_index"));
- local MaxSquad= tonumber(getDefine("outpost_nb_max_squad_in_list"));
- local slot = getDbProp("UI:TEMP:OUTPOST:SQUAD_SLOT_SELECTED")
- if slot >= Rounds then
- setDbProp("UI:TEMP:OUTPOST:SQUAD_SLOT_SELECTED", slot - MaxSquad)
- end
runAH(nil, "outpost_squad_map_send", "ui:interface:squad_spawn_map:content:map_content:actual_map")
end
------------------------------------------------------------------------------------------------------------
function game:outpostToolTipTrainSquad(dbIndex)
- local Rounds= tonumber(getDefine("right_squad_list_index"));
+ local Rounds = tonumber(getDefine("right_squad_list_index"));
-- compute the level at which the squad will spawn.
- local lvl;
+ local lvl
+ local elm
if(dbIndex < Rounds) then
- lvl = dbIndex*2 +1 ; -- eg: 0 => 1. 1=> 3
+ elm = getUI("ui:interface:outpost:content:squad_setup:list_next_start:list:o"..tostring(dbIndex))
+ lvl = math.ceil((dbIndex + 1)*1.3) - 1 -- eg: 0 => 1
+ if dbIndex == 3 or dbIndex == 6 then
+ elm.y = -14
+ end
else
- lvl = (dbIndex-Rounds)*2 +2 ; -- eg: 12 => 2
+ elm = getUI("ui:interface:outpost:content:squad_setup:list_next_during:list:o"..tostring(dbIndex))
+ lvl = math.ceil((dbIndex - Rounds + 1)*1.3) -- eg: 12 => 1
+ if dbIndex == 12 or dbIndex == 15 or dbIndex == 18 then
+ elm.y = -14
+ end
end
-- set the tooltip
- local text = i18n.get('uittOutpostSquadLvl');
+ local text = i18n.get("uittOutpostSquadLvl");
text = findReplaceAll(text, "%lvl", tostring(lvl));
setContextHelpText(text);
+
+ if dbIndex == 10 or dbIndex == 11 then
+ getUI("ui:interface:outpost:content:squad_setup:list_next_start:list:o"..tostring(dbIndex)).active=false
+ end
+
+ if dbIndex >= 22 then
+ getUI("ui:interface:outpost:content:squad_setup:list_next_during:list:o"..tostring(dbIndex)).active=false
+ end
+
+
end
@@ -282,6 +277,10 @@ function game:outpostInfoOnDbChange()
-- change path for attacker text id
uiGroup.global_state.outpost_attacker.name.textid_dblink= path .. ':GUILD:NAME_ATT';
+
+ for i=0,23 do
+ game:outpostToolTipTrainSquad(i)
+ end
end
------------------------------------------------------------------------------------------------------------
@@ -415,7 +414,7 @@ function game:outpostGetStatusInfo(statusExpr, dbIndex, isTooltip)
if (isTooltip == 'no') then
path = self:outpostInfoGetDbPath(uiGroup.parent);
else
- path = formatUI('SERVER:GUILD:OUTPOST:O#1', math.max(0, dbIndex));
+ path = formatUI('SERVER:GUILD:OUTPOST:O#1', math.max(0, tonumber(dbIndex)));
end
-- Peace
@@ -484,7 +483,6 @@ function game:outpostGetStatusInfo(statusExpr, dbIndex, isTooltip)
end
return uittOutpost;
-
end
------------------------------------------------------------------------------------------------------------
diff --git a/ryzom/client/data/gamedev/interfaces_v3/outpost.xml b/ryzom/client/data/gamedev/interfaces_v3/outpost.xml
index 866b0b5788..669bde569e 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/outpost.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/outpost.xml
@@ -466,8 +466,8 @@
-
-
+
+
@@ -528,8 +528,9 @@
-
-
+
diff --git a/ryzom/common/src/game_share/outpost.h b/ryzom/common/src/game_share/outpost.h
index 260410aaea..ea790615fd 100644
--- a/ryzom/common/src/game_share/outpost.h
+++ b/ryzom/common/src/game_share/outpost.h
@@ -32,7 +32,7 @@ namespace OUTPOSTENUMS
const uint32 OUTPOST_MAX_SPAWN_ZONE = 16; // Same as (#y) in the database SERVER:GUILD:OUTPOST:O#x:SPAWN_ZONE:#y see (database.xml)
const uint32 OUTPOST_MAX_SQUAD_SHOP = 16; // Same as (#y) in the database SERVER:GUILD:OUTPOST:O#x:SQUAD_SHOP:#y see (database.xml)
- const uint32 OUTPOST_NB_BUYABLE_SQUAD_SLOTS = 6;
+ const uint32 OUTPOST_NB_BUYABLE_SQUAD_SLOTS = 12;
const uint32 OUTPOST_NB_SQUAD_SLOTS = 12;
const uint32 OUTPOST_MAX_SQUAD_TRAINING = OUTPOST_NB_SQUAD_SLOTS * 2; // Same as (#y) in the database SERVER:GUILD:OUTPOST:SQUADS:SP#y see (database.xml)
const uint32 OUTPOST_MAX_SQUAD_SPAWNED = OUTPOST_MAX_SQUAD_TRAINING; // Same as (#y) in the database SERVER:GUILD:OUTPOST:SQUADS:T#y see (database.xml)
diff --git a/ryzom/server/src/entities_game_service/building_manager/room_instance.cpp b/ryzom/server/src/entities_game_service/building_manager/room_instance.cpp
index ec5ca420b4..a4c872785f 100644
--- a/ryzom/server/src/entities_game_service/building_manager/room_instance.cpp
+++ b/ryzom/server/src/entities_game_service/building_manager/room_instance.cpp
@@ -116,7 +116,7 @@ void CRoomInstanceGuild::addUser( CCharacter* user, const NLMISC::CEntityId & ow
// open guild inventory window
PlayerManager.sendImpulseToClient(user->getId(), "GUILD:OPEN_INVENTORY");
-
+
user->sendUrl("app_ryzhome action=open_guild_room&owner="+ owner.toString()+"&room_name="+guildBuilding->getName());
++_RefCount;
@@ -174,14 +174,6 @@ void CRoomInstancePlayer::addUser( CCharacter* user, const NLMISC::CEntityId & o
CBuildingPhysicalPlayer * playerBuilding = dynamic_cast( _Building );
BOMB_IF( !playerBuilding, " building type does not match with room type", return );
- // open room inventory window if not in powo or in powo and have access
- if (user->getPowoCell() == 0 || user->getPowoFlag("room_inv"))
- PlayerManager.sendImpulseToClient(user->getId(), "ITEM:OPEN_ROOM_INVENTORY");
-
- // open guild inventory window if in powo and have access (in powo all are player rooms)
- if (user->getPowoCell() != 0 && user->getPowoFlag("guild_inv"))
- PlayerManager.sendImpulseToClient(user->getId(), "GUILD:OPEN_INVENTORY");
-
if (owner != CEntityId::Unknown)
{
CCharacter * o = PlayerManager.getChar(owner);
@@ -236,7 +228,7 @@ bool IRoomInstance::create( IBuildingPhysical * building, uint16 roomIdx,uint16
nlwarning(" Invalid bot id '%s'%s in destination '%s'", eid.toString().c_str(), CPrimitivesParser::aliasToString(templ.Bots[i]).c_str(), templ.Name.c_str() );
continue;
}
-
+
//allocate a new creature
static uint64 id64 = 0;
NLMISC::CEntityId entityId(RYZOMID::npc, id64++, TServiceId8(NLNET::IService::getInstance()->getServiceId()).get(), NLNET::TServiceId8(NLNET::IService::getInstance()->getServiceId()).get());
diff --git a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
index 4e51219835..9d510ec882 100644
--- a/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
+++ b/ryzom/server/src/entities_game_service/mission_manager/missions_commands.cpp
@@ -1997,6 +1997,12 @@ NLMISC_COMMAND(accessPowo, "give access to the powo", " [playername] [insta
c->setPowoFlag("room_inv", invFlags[0] == '1');
c->setPowoFlag("guild_inv", invFlags[1] == '1');
+ if (c->getPowoFlag("room_inv"))
+ PlayerManager.sendImpulseToClient(c->getId(), "ITEM:OPEN_ROOM_INVENTORY");
+
+ if (c->getPowoFlag("guild_inv"))
+ PlayerManager.sendImpulseToClient(c->getId(), "GUILD:OPEN_INVENTORY");
+
if (args.size () > 3 && args[3] != "*") // Change the default exit by exit of instance building
{
std::vector< std::string > pos;
diff --git a/ryzom/server/src/entities_game_service/outpost_manager/outpost.cpp b/ryzom/server/src/entities_game_service/outpost_manager/outpost.cpp
index 27dd65e3c1..e617411011 100644
--- a/ryzom/server/src/entities_game_service/outpost_manager/outpost.cpp
+++ b/ryzom/server/src/entities_game_service/outpost_manager/outpost.cpp
@@ -2453,7 +2453,7 @@ uint32 COutpost::computeSquadCountA(uint32 roundLevel) const
if (_PVPType == OUTPOSTENUMS::GVG)
coef = OutpostGvGFightSquadCount.get();
- return (uint32)ceil((float)(roundLevel+1)/coef);
+ return (uint32)floor((float)(roundLevel+2)/coef);
}
//----------------------------------------------------------------------------
From f300671b7dd779cbb979bd64ac7277bee752a7fa Mon Sep 17 00:00:00 2001
From: Nuno
Date: Fri, 24 Nov 2023 00:20:19 +0100
Subject: [PATCH 102/194] Added compatibility with Ryzom RC Bridge v6
---
.../guild_manager/guild_manager.cpp | 11 +++++++++++
.../pvp_manager/pvp_manager_2.cpp | 14 +++++++++-----
.../src/input_output_service/chat_client.cpp | 8 +++++++-
.../src/input_output_service/chat_manager.cpp | 18 +++++++++---------
.../src/input_output_service/messages.cpp | 15 +++++++++++++++
5 files changed, 51 insertions(+), 15 deletions(-)
diff --git a/ryzom/server/src/entities_game_service/guild_manager/guild_manager.cpp b/ryzom/server/src/entities_game_service/guild_manager/guild_manager.cpp
index 5f0a89c6f0..cf1e206386 100644
--- a/ryzom/server/src/entities_game_service/guild_manager/guild_manager.cpp
+++ b/ryzom/server/src/entities_game_service/guild_manager/guild_manager.cpp
@@ -29,6 +29,7 @@
#include "server_share/mail_forum_validator.h"
#include "game_share/persistent_data_tree.h"
#include "server_share/log_item_gen.h"
+#include "server_share/mongo_wrapper.h"
#include "player_manager/player_manager.h"
#include "player_manager/player.h"
@@ -833,6 +834,7 @@ void CGuildManager::createGuildStep2(uint32 guildId, const ucstring &guildName,
// init the guild strings
guild->setName(guildName);
guild->setDescription(pgc.Description);
+
// _GuildsAwaitingString.insert( std::make_pair( guildName, guild->getId() ) );
// _GuildsAwaitingString.insert( std::make_pair( pgc.Description, guild->getId() ) );
// NLMISC::CEntityId stringEId = guild->getEId();
@@ -857,6 +859,10 @@ void CGuildManager::createGuildStep2(uint32 guildId, const ucstring &guildName,
// broadcast the new guild info
IGuildUnifier::getInstance()->guildCreated(guild);
+#ifdef HAVE_MONGO
+ CMongo::insert("ryzom_guilds", toString("{ 'guildId': %u, 'name': '%s', 'created': %" NL_I64 "u }", guildId, guildName.toUtf8().c_str(), CTickEventHandler::getGameCycle()));
+#endif
+
// close guild creation interface
PlayerManager.sendImpulseToClient( proxy.getId(),"GUILD:ABORT_CREATION" );
@@ -927,6 +933,11 @@ void CGuildManager::deleteGuild(uint32 id)
IShardUnifierEvent::getInstance()->removeGuild(id);
}
+
+#ifdef HAVE_MONGO
+ CMongo::remove("ryzom_guilds", toString("{'guildId': %u}", id));
+#endif
+
_Container->deleteFromGuilds(id);
// if ( _HighestGuildId == id )
diff --git a/ryzom/server/src/entities_game_service/pvp_manager/pvp_manager_2.cpp b/ryzom/server/src/entities_game_service/pvp_manager/pvp_manager_2.cpp
index 369c4974a6..13ef45af50 100644
--- a/ryzom/server/src/entities_game_service/pvp_manager/pvp_manager_2.cpp
+++ b/ryzom/server/src/entities_game_service/pvp_manager/pvp_manager_2.cpp
@@ -646,7 +646,11 @@ void CPVPManager2::playerConnects(CCharacter * user)
if (pos != string::npos)
playerName = playerName.substr(0, pos);
- CMongo::update("ryzom_users", toString("{'name': '%s'}", playerName.c_str()), toString("{$set: {'cid': %" NL_I64 "u, 'guildId': %d, 'online': true} }", user->getId().getShortId(), user->getGuildId()), true);
+ CPlayer* player = PlayerManager.getPlayer(PlayerManager.getPlayerId(user->getId()));
+ if (player == NULL)
+ CMongo::update("ryzom_users", toString("{'name': '%s'}", playerName.c_str()), toString("{$set: {'cid': %" NL_I64 "u, 'guildId': %d, 'rzlang': 'en', 'online': true} }", user->getId().getShortId(), user->getGuildId()), true);
+ else
+ CMongo::update("ryzom_users", toString("{'name': '%s'}", playerName.c_str()), toString("{$set: {'cid': %" NL_I64 "u, 'guildId': %d, 'rzlang': '%s', 'online': true} }", user->getId().getShortId(), user->getGuildId(), player->getUserLanguage().c_str()), true);
#endif
std::vector currentChannels = getCharacterUserChannels(user);
@@ -848,7 +852,7 @@ PVP_RELATION::TPVPRelation CPVPManager2::getPVPRelation( CCharacter * actor, CEn
}
////////////////////////////////////////////////////////
}
-
+
bool is_ennemy = false;
bool is_neutral_op = false;
uint i;
@@ -867,7 +871,7 @@ PVP_RELATION::TPVPRelation CPVPManager2::getPVPRelation( CCharacter * actor, CEn
// Ennemy has the highest priority after outpost
if( relationTmp == PVP_RELATION::Ennemy )
is_ennemy = true;
-
+
// Neutral pvp
if( relationTmp == PVP_RELATION::NeutralPVP )
relation = PVP_RELATION::NeutralPVP;
@@ -876,10 +880,10 @@ PVP_RELATION::TPVPRelation CPVPManager2::getPVPRelation( CCharacter * actor, CEn
if (relationTmp == PVP_RELATION::Ally && relation != PVP_RELATION::NeutralPVP)
relation = PVP_RELATION::Ally;
}
-
+
if (is_neutral_op)
return PVP_RELATION::NeutralPVP;
-
+
if (is_ennemy)
return PVP_RELATION::Ennemy;
diff --git a/ryzom/server/src/input_output_service/chat_client.cpp b/ryzom/server/src/input_output_service/chat_client.cpp
index 716b958a13..e35e0fabc4 100644
--- a/ryzom/server/src/input_output_service/chat_client.cpp
+++ b/ryzom/server/src/input_output_service/chat_client.cpp
@@ -18,7 +18,7 @@
#include "stdpch.h"
#include "chat_client.h"
#include "input_output_service.h"
-
+#include "server_share/mongo_wrapper.h"
using namespace std;
using namespace NLMISC;
@@ -145,6 +145,9 @@ void CChatClient::setIgnoreStatus( const NLMISC::CEntityId &id, bool ignored)
if( itIgnore == _IgnoreList.end() )
{
_IgnoreList.insert( id );
+#ifdef HAVE_MONGO
+ CMongo::update("ryzom_users", toString("{ 'cid': %d}", TheDataset.getEntityId(_DataSetIndex).getShortId()), toString("{ $push:{ 'ignore': %d } }", id.getShortId()));
+#endif
}
}
@@ -153,6 +156,9 @@ void CChatClient::setIgnoreStatus( const NLMISC::CEntityId &id, bool ignored)
if( itIgnore != _IgnoreList.end() )
{
_IgnoreList.erase( itIgnore );
+#ifdef HAVE_MONGO
+ CMongo::update("ryzom_users", toString("{ 'cid': %d}", TheDataset.getEntityId(_DataSetIndex).getShortId()), toString("{ $pull:{ 'ignore': %d } }", id.getShortId()));
+#endif
}
}
} // ignore //
diff --git a/ryzom/server/src/input_output_service/chat_manager.cpp b/ryzom/server/src/input_output_service/chat_manager.cpp
index 2f483b6832..fc5f16978d 100644
--- a/ryzom/server/src/input_output_service/chat_manager.cpp
+++ b/ryzom/server/src/input_output_service/chat_manager.cpp
@@ -667,7 +667,7 @@ void CChatManager::checkNeedDeeplize( const TDataSetRow& sender, const ucstring&
else if (ucstr.length() > 5 && ucstr[1] == ':' && ucstr[4] == ':') // Already have filter
chatInGroup( grpId, ucstr, sender );
else
- chatInGroup( grpId, ucstring(":"+senderLang+":")+ucstr, sender ); // Need filter
+ chatInGroup( grpId, ucstring(":"+senderLang+": ")+ucstr, sender ); // Need filter
}
@@ -872,9 +872,9 @@ void CChatManager::chat( const TDataSetRow& sender, const ucstring& ucstr, strin
}
if (source_lang == "en") // in RC the icon are :gb:
- mongoText = ":gb:"+mongoText;
+ mongoText = ":gb: "+mongoText;
else
- mongoText = ":"+source_lang+":"+mongoText;
+ mongoText = ":"+source_lang+": "+mongoText;
chatId = "FACTION_EN";
if (usedlang != SM->getLanguageCodeString(ci->Language))
@@ -977,9 +977,9 @@ void CChatManager::chat( const TDataSetRow& sender, const ucstring& ucstr, strin
}
if (source_lang == "en") // in RC the icon are :gb:
- mongoText = ":gb:"+mongoText;
+ mongoText = ":gb: "+mongoText;
else
- mongoText = ":"+source_lang+":"+mongoText;
+ mongoText = ":"+source_lang+": "+mongoText;
}
chatInGroup( grpId, ucstr.substr(1), sender );
}
@@ -1089,9 +1089,9 @@ void CChatManager::chat( const TDataSetRow& sender, const ucstring& ucstr, strin
}
if (source_lang == "en") // in RC the icon are :gb:
- mongoText = ":gb:"+mongoText;
+ mongoText = ":gb: "+mongoText;
else
- mongoText = ":"+source_lang+":"+mongoText;
+ mongoText = ":"+source_lang+": "+mongoText;
}
}
// Send for translation
@@ -2113,9 +2113,9 @@ void CChatManager::sendFarChat(const string &name, const ucstring& ucstr, const
if (source_lang == "en") // in RC the icon are :gb:
- mongoText = ":gb:"+mongoText;
+ mongoText = ":gb: "+mongoText;
else
- mongoText = ":"+source_lang+":"+mongoText;
+ mongoText = ":"+source_lang+": "+mongoText;
#ifdef HAVE_MONGO
if (endOfOriginal != string::npos)
diff --git a/ryzom/server/src/input_output_service/messages.cpp b/ryzom/server/src/input_output_service/messages.cpp
index e7ddf8e85e..599087077e 100644
--- a/ryzom/server/src/input_output_service/messages.cpp
+++ b/ryzom/server/src/input_output_service/messages.cpp
@@ -22,6 +22,7 @@
#include
#include "game_share/ryzom_mirror_properties.h"
+#include "server_share/mongo_wrapper.h"
#include "input_output_service.h"
/*#include "game_share/tick_event_handler.h"
@@ -683,6 +684,20 @@ static void cbCharacterNameAndLang(CMessage& msgin, const string &serviceName, T
{
ci->Language = SM->checkLanguageCode(language);
ci->HavePrivilege = havePrivilege;
+
+#ifdef HAVE_MONGO
+ string cids = "";
+ for ( uint i = 0; i < ignoreList.size(); i++ )
+ {
+ if (i > 0)
+ cids += toString(",%d", ignoreList[i].getShortId());
+ else
+ cids += toString("%d", ignoreList[i].getShortId());
+ }
+
+ CMongo::update("ryzom_users", toString("{ 'cid': %d}", TheDataset.getEntityId(chId).getShortId()), toString("{ $set:{ 'ignore': [%s] } }", cids.c_str()));
+#endif
+
IOS->getChatManager().getClient(chId).setIgnoreList(ignoreList);
}
From e0aff525183d436f07177335946a249b030fc11a Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Sat, 2 Dec 2023 11:11:37 +0100
Subject: [PATCH 103/194] Added resetDefaultAttackSquads
---
.../outpost_manager/outpost_commands.cpp | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/ryzom/server/src/entities_game_service/outpost_manager/outpost_commands.cpp b/ryzom/server/src/entities_game_service/outpost_manager/outpost_commands.cpp
index ff45215f6c..fbae4920b4 100644
--- a/ryzom/server/src/entities_game_service/outpost_manager/outpost_commands.cpp
+++ b/ryzom/server/src/entities_game_service/outpost_manager/outpost_commands.cpp
@@ -760,6 +760,21 @@ NLMISC_COMMAND(outpostSetTimer0, "Set outpost timer0", " ")
return true;
}
+//----------------------------------------------------------------------------
+NLMISC_COMMAND(resetDefaultAttackSquads, "Reset Attack squads to Default", "")
+{
+ if (args.size() != 1) return false;
+
+ // select the wanted outpost
+ CSmartPtr outpost = getOutpostFromString(args[0], log);
+ if (outpost == NULL)
+ return false;
+
+ outpost->resetDefaultAttackSquads();
+ return true;
+}
+
+
//----------------------------------------------------------------------------
NLMISC_COMMAND(setMemberEntryDate, "Set guild member entry date", " ")
From 2ebcacf597c76d682ffdfe86e6c28db4aa300d46 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Sat, 2 Dec 2023 11:15:45 +0100
Subject: [PATCH 104/194] Send ignorelist to mongo
---
.../src/input_output_service/chat_client.cpp | 30 ++++++++++---------
.../src/input_output_service/chat_client.h | 5 ++--
2 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/ryzom/server/src/input_output_service/chat_client.cpp b/ryzom/server/src/input_output_service/chat_client.cpp
index e35e0fabc4..bb80314e59 100644
--- a/ryzom/server/src/input_output_service/chat_client.cpp
+++ b/ryzom/server/src/input_output_service/chat_client.cpp
@@ -139,14 +139,14 @@ bool CChatClient::isMuted()
//-----------------------------------------------
void CChatClient::setIgnoreStatus( const NLMISC::CEntityId &id, bool ignored)
{
- TIgnoreListCont::iterator itIgnore = _IgnoreList.find(id);
+ TIgnoreListCont::iterator itIgnore = _IgnoreList.find(id.getShortId());
if (ignored)
{
if( itIgnore == _IgnoreList.end() )
{
- _IgnoreList.insert( id );
+ _IgnoreList.insert( id.getShortId() );
#ifdef HAVE_MONGO
- CMongo::update("ryzom_users", toString("{ 'cid': %d}", TheDataset.getEntityId(_DataSetIndex).getShortId()), toString("{ $push:{ 'ignore': %d } }", id.getShortId()));
+ CMongo::update("ryzom_users", toString("{ 'cid': %u}", TheDataset.getEntityId(_DataSetIndex).getShortId()), toString("{ $push:{ 'ignore': %u } }", id.getShortId()));
#endif
}
@@ -157,7 +157,7 @@ void CChatClient::setIgnoreStatus( const NLMISC::CEntityId &id, bool ignored)
{
_IgnoreList.erase( itIgnore );
#ifdef HAVE_MONGO
- CMongo::update("ryzom_users", toString("{ 'cid': %d}", TheDataset.getEntityId(_DataSetIndex).getShortId()), toString("{ $pull:{ 'ignore': %d } }", id.getShortId()));
+ CMongo::update("ryzom_users", toString("{ 'cid': %u}", TheDataset.getEntityId(_DataSetIndex).getShortId()), toString("{ $pull:{ 'ignore': %u } }", id.getShortId()));
#endif
}
}
@@ -171,15 +171,7 @@ void CChatClient::setIgnoreStatus( const NLMISC::CEntityId &id, bool ignored)
bool CChatClient::isInIgnoreList( const NLMISC::CEntityId &id )
{
TIgnoreListCont::const_iterator itIgnore = _IgnoreList.find(id);
- if( itIgnore != _IgnoreList.end() )
- {
- return true;
- }
- else
- {
- return false;
- }
-
+ return isInIgnoreList(id.getShortId());
} // isInIgnoreList //
@@ -194,11 +186,21 @@ bool CChatClient::isInIgnoreList( const TDataSetRow &id )
return isInIgnoreList(ei);
}
+//-----------------------------------------------
+// isInIgnoreList :
+//
+//-----------------------------------------------
+bool CChatClient::isInIgnoreList( uint32 id )
+{
+ TIgnoreListCont::const_iterator itIgnore = _IgnoreList.find(id);
+ return itIgnore != _IgnoreList.end();
+}
+
//-----------------------------------------------
// setIgnoreList
//
//-----------------------------------------------
-void CChatClient::setIgnoreList(const std::vector &ignoreList)
+void CChatClient::setIgnoreList(const std::vector &ignoreList)
{
TIgnoreListCont ignoreListCont(ignoreList.begin(), ignoreList.end());
_IgnoreList.swap(ignoreListCont);
diff --git a/ryzom/server/src/input_output_service/chat_client.h b/ryzom/server/src/input_output_service/chat_client.h
index b59e15fadf..045125b1fa 100644
--- a/ryzom/server/src/input_output_service/chat_client.h
+++ b/ryzom/server/src/input_output_service/chat_client.h
@@ -86,7 +86,7 @@ public :
void setIgnoreStatus( const NLMISC::CEntityId &id, bool ignored);
// Set the ignore list
- void setIgnoreList(const std::vector &ignoreList);
+ void setIgnoreList(const std::vector &ignoreList);
/**
* Return true if the character is in the ignore list of this client
@@ -95,6 +95,7 @@ public :
*/
bool isInIgnoreList( const NLMISC::CEntityId &id );
bool isInIgnoreList( const TDataSetRow &id );
+ bool isInIgnoreList( uint32 id );
/**
* Add or remove a string filter
@@ -228,7 +229,7 @@ private :
/// mute delay (in min)
sint32 _MuteDelay;
- typedef std::set TIgnoreListCont;
+ typedef std::set TIgnoreListCont;
/// this client won't see chat incoming from these characters
// std::set _IgnoreList;
TIgnoreListCont _IgnoreList;
From 4aecb4ad39b02188cafefc658e07ea26d7ad1a41 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Sat, 2 Dec 2023 11:19:24 +0100
Subject: [PATCH 105/194] Added sendirId into FarTell, manage ignorelist from
mongo
---
.../src/input_output_service/chat_manager.cpp | 62 ++++++-------------
.../src/input_output_service/chat_manager.h | 8 +--
.../src/input_output_service/commands.cpp | 8 ++-
.../src/input_output_service/messages.cpp | 12 ++--
4 files changed, 37 insertions(+), 53 deletions(-)
diff --git a/ryzom/server/src/input_output_service/chat_manager.cpp b/ryzom/server/src/input_output_service/chat_manager.cpp
index fc5f16978d..fac53ceec2 100644
--- a/ryzom/server/src/input_output_service/chat_manager.cpp
+++ b/ryzom/server/src/input_output_service/chat_manager.cpp
@@ -1362,7 +1362,7 @@ void CChatManager::chatInGroup( TGroupId& grpId, const ucstring& ucstr, const TD
} // chatInGroup //
-void CChatManager::farChatInGroup(TGroupId &grpId, uint32 homeSessionId, const ucstring &text, const ucstring &senderName)
+void CChatManager::farChatInGroup(TGroupId &grpId, uint32 homeSessionId, const ucstring &text, const ucstring &senderName, uint32 senderCid)
{
map< TGroupId, CChatGroup >::iterator itGrp = _Groups.find( grpId );
if( itGrp != _Groups.end() )
@@ -1398,7 +1398,7 @@ void CChatManager::farChatInGroup(TGroupId &grpId, uint32 homeSessionId, const u
if (EnableDeepL && !usedlang.empty() && usedlang != SM->getLanguageCodeString(charInfo->Language))
continue;
- sendFarChat( itGrp->second.Type, *itM, text.substr(startPos), senderName );
+ sendFarChat(itGrp->second.Type, *itM, text.substr(startPos), senderName, CEntityId::Unknown, senderCid);
}
}
else
@@ -2061,7 +2061,7 @@ void CChatManager::sendChat( CChatGroup::TGroupType senderChatMode, const TDataS
} // sendChat //
-void CChatManager::sendFarChat(const string &name, const ucstring& ucstr, const string &chan, const string &rocketId)
+void CChatManager::sendFarChat(const string &name, const ucstring& ucstr, const string &chan, const string &rocketId, uint32 senderCid)
{
const TChanID *chanId = _ChanNames.getA(chan);
if (chanId || chan == "universe" || chan.substr(0, 6) == "guild:")
@@ -2131,13 +2131,13 @@ void CChatManager::sendFarChat(const string &name, const ucstring& ucstr, const
if (chan == "universe")
{
TGroupId grpId = CEntityId(RYZOMID::chatGroup, 0);
- farChatInGroup(grpId, 0, ucstr, ucstring("~")+ucstring(name));
+ farChatInGroup(grpId, 0, ucstr, ucstring("~"+name), senderCid);
}
else if (chan.substr(0, 6) == "guild:")
{
- TGroupId groupId = CEntityId::Unknown;
- groupId.fromString(chan.substr(6).c_str());
- farChatInGroup(groupId, 0, ucstr, ucstring("~")+ucstring(name));
+ TGroupId grpId = CEntityId::Unknown;
+ grpId.fromString(chan.substr(6).c_str());
+ farChatInGroup(grpId, 0, ucstr, ucstring("~"+name), senderCid);
}
else
{
@@ -2145,18 +2145,17 @@ void CChatManager::sendFarChat(const string &name, const ucstring& ucstr, const
CDynChatSession *dcc = _DynChat.getChan(*chanId)->getFirstSession();
while (dcc)
{
-
NLMISC::CEntityId receiverId = TheDataset.getEntityId(dcc->getClient()->getID());
CCharacterInfos* co = IOS->getCharInfos(receiverId);
if (!EnableDeepL || usedlang.empty() || (co != NULL && usedlang == SM->getLanguageCodeString(co->Language)))
- sendFarChat((CChatGroup::TGroupType)12, dcc->getClient()->getID(), ucstr.substr(startPos), ucstring("~")+ucstring(name), *chanId);
+ sendFarChat((CChatGroup::TGroupType)12, dcc->getClient()->getID(), ucstr.substr(startPos), ucstring("~"+name), *chanId, senderCid);
dcc = dcc->getNextChannelSession(); // next session in this channel
}
}
}
}
-void CChatManager::sendFarChat( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, const ucstring& ucstr, const ucstring &senderName, TChanID chanID)
+void CChatManager::sendFarChat( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, const ucstring& ucstr, const ucstring &senderName, TChanID chanID, uint32 senderCid)
{
CCharacterInfos * receiverInfos = IOS->getCharInfos( TheDataset.getEntityId(receiver) );
if( receiverInfos )
@@ -2166,6 +2165,9 @@ void CChatManager::sendFarChat( CChatGroup::TGroupType senderChatMode, const TDa
{
if (itCl->second->getId().getType() == RYZOMID::player)
{
+ if (senderCid > 0 && itCl->second->isInIgnoreList(senderCid))
+ return;
+
uint32 senderNameIndex = SM->storeString( senderName );
// send the string to FE
@@ -2753,34 +2755,6 @@ void CChatManager::farTell( const NLMISC::CEntityId &senderCharId, const ucstrin
// check if the sender is CSR is not in the ignore list of the receiver
if((senderInfos && senderInfos->HavePrivilege) || !itCl->second->isInIgnoreList(senderCharId) )
{
- // check if user is afk
-// if ( receiverInfos->DataSetIndex.isValid() && TheDataset.isDataSetRowStillValid( receiverInfos->DataSetIndex ) )
-// {
-// CMirrorPropValue mirrorValue( TheDataset, receiverInfos->DataSetIndex, DSPropertyCONTEXTUAL );
-// CProperties prop(mirrorValue);
-// if ( prop.afk() )
-// {
-// // send special message to user
-// SM_STATIC_PARAMS_1( vect, STRING_MANAGER::player );
-// vect[0].setEId( receiverInfos->EntityId );
-// uint32 phraseId = STRING_MANAGER::sendStringToClient( senderInfos->DataSetIndex, "TELL_PLAYER_AFK", vect, &IosLocalSender );
-// sendChat2Ex( CChatGroup::tell, senderInfos->DataSetIndex, phraseId );
-// return;
-// }
-// if ( _UsersIgnoringTells.find( receiverInfos->EntityId ) != _UsersIgnoringTells.end() )
-// {
-// // send special message to user (same message as if the receiver was offline)
-// SM_STATIC_PARAMS_1( vect, STRING_MANAGER::literal );
-// vect[0].Literal = ucstring( receiver );
-// uint32 phraseId = STRING_MANAGER::sendStringToClient( senderInfos->DataSetIndex, "TELL_PLAYER_UNKNOWN", vect, &IosLocalSender );
-// sendChat2Ex( CChatGroup::tell, senderInfos->DataSetIndex, phraseId );
-// return;
-// }
-// }
-
- // info for log the chat message
-// string senderName = senderInfos->Name.toString();
-
// info for log the chat message
string receiverName = receiverInfos->Name.toString();
@@ -3134,6 +3108,7 @@ void CChatManager::update()
string chatId;
string rocketId;
string usedlang;
+ uint32 sender_cid;
double date;
bool ig;
@@ -3143,6 +3118,7 @@ void CChatManager::update()
chatId = obj.getStringField("chatId");
rocketId = obj.getStringField("rocketId");
usedlang = obj.getStringField("lang");
+ sender_cid = obj.getIntField("sender_cid");
date = obj.getField("date").numberDouble();
if(date > last_mongo_chat_date)
@@ -3169,7 +3145,7 @@ void CChatManager::update()
{
if (EnableDeepL && chatId.substr(0, 8) == "FACTION_")
{
- _Log.displayNL("[%s]%s|%s|*|%s-*|%s", rocketId.c_str(), chatId.c_str(), string("~"+name).c_str(), toLower(usedlang).c_str(), text.toUtf8().c_str());
+ _Log.displayNL("[%s]%s|~%s#%u|*|%s-*|%s", rocketId.c_str(), chatId.c_str(), name.c_str(), sender_cid, toLower(usedlang).c_str(), text.toUtf8().c_str());
}
else
{
@@ -3185,7 +3161,7 @@ void CChatManager::update()
{
CDynChatClient *dccClient = dcc->getClient();
if (dccClient)
- sendFarChat((CChatGroup::TGroupType)12, dccClient->getID(), text, ucstring("~")+ucstring(name), *chanId);
+ sendFarChat((CChatGroup::TGroupType)12, dccClient->getID(), text, ucstring("~"+name), *chanId, sender_cid);
dcc = dcc->getNextChannelSession(); // next session in this channel
}
@@ -3199,7 +3175,7 @@ void CChatManager::update()
// Send to Deepl
if (EnableDeepL)
{
- _Log.displayNL("[%s]%s|%s|wk|wk-*|%s", rocketId.c_str(), "universe", name.c_str(), chat.c_str());
+ _Log.displayNL("[%s]universe|%s#%u|wk|wk-*|%s", rocketId.c_str(), sender_cid, name.c_str(), chat.c_str());
continue;
}
}
@@ -3210,12 +3186,12 @@ void CChatManager::update()
else
chatId = chatId+"(Atys)";
- farTell(CEntityId(uint64(0)), ucstring("~")+ucstring(name), false, ucstring(chatId), text);
+ farTell(CEntityId(0, uint64(sender_cid)), ucstring("~"+name), false, ucstring(chatId), text);
continue;
}
if (chatId != "user-unmuted" && chatId != "user-muted")
- farChatInGroup(grpId, 0, text, ucstring("~")+ucstring(name));
+ farChatInGroup(grpId, 0, text, ucstring("~"+name), sender_cid);
}
}
catch(const DBException& e)
diff --git a/ryzom/server/src/input_output_service/chat_manager.h b/ryzom/server/src/input_output_service/chat_manager.h
index f8699978b8..f44e3c2b37 100644
--- a/ryzom/server/src/input_output_service/chat_manager.h
+++ b/ryzom/server/src/input_output_service/chat_manager.h
@@ -179,7 +179,7 @@ public :
/**
* Transmit a far chat message to a group
*/
- void farChatInGroup(TGroupId &grpId, uint32 homeSessionId, const ucstring &text, const ucstring &senderName);
+ void farChatInGroup(TGroupId &grpId, uint32 homeSessionId, const ucstring &text, const ucstring &senderName, uint32 senderCid = 0);
/**
* Transmit a chat message to the receiver
@@ -191,7 +191,7 @@ public :
/**
* Transmit a chat message to the receiver
*/
- void farTell( const NLMISC::CEntityId &senderCharId, const ucstring &senderName, bool havePrivilege, const ucstring& receiver, const ucstring& ucstr );
+ void farTell( const NLMISC::CEntityId &senderCharId, const ucstring &senderName, bool havePrivilege, const ucstring& receiver, const ucstring& ucstr);
/**
* Transmit a chat message to the receiver
* \param sender is the id of the speaking char
@@ -395,8 +395,8 @@ private :
/**
* Send a far chat message
*/
- void sendFarChat(const std::string &name, const ucstring& ucstr, const std::string &chan, const std::string &rocketId = "");
- void sendFarChat( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, const ucstring& ucstr, const ucstring &senderName, TChanID chanID = NLMISC::CEntityId::Unknown);
+ void sendFarChat(const std::string &name, const ucstring& ucstr, const std::string &chan, const std::string &rocketId = "", uint32 senderCid = 0);
+ void sendFarChat( CChatGroup::TGroupType senderChatMode, const TDataSetRow &receiver, const ucstring& ucstr, const ucstring &senderName, TChanID chanID = NLMISC::CEntityId::Unknown, uint32 senderCid = 0);
/**
* Send a chat message
diff --git a/ryzom/server/src/input_output_service/commands.cpp b/ryzom/server/src/input_output_service/commands.cpp
index 02821eeb00..32e75b2481 100644
--- a/ryzom/server/src/input_output_service/commands.cpp
+++ b/ryzom/server/src/input_output_service/commands.cpp
@@ -771,15 +771,21 @@ NLMISC_COMMAND(farChat, "send far message chat", " sname;
+ NLMISC::splitString(name, "#", sname);
+ if (sname.size() == 2)
+ NLMISC::fromString(sname[1], senderCid);
+
ucstr.fromUtf8(args[2]);
if (args.size() > 3)
rocketId = args[3];
- IOS->getChatManager().sendFarChat(name, ucstr, args[1], rocketId);
+ IOS->getChatManager().sendFarChat(sname[0], ucstr, args[1], rocketId, senderCid);
return true;
}
diff --git a/ryzom/server/src/input_output_service/messages.cpp b/ryzom/server/src/input_output_service/messages.cpp
index 599087077e..cfe3062e28 100644
--- a/ryzom/server/src/input_output_service/messages.cpp
+++ b/ryzom/server/src/input_output_service/messages.cpp
@@ -650,7 +650,8 @@ static void cbCharacterNameAndLang(CMessage& msgin, const string &serviceName, T
ucstring name;
TSessionId sessionId;
string language;
- std::vector ignoreList;
+ std::vector _ignoreList;
+ std::vector ignoreList;
bool havePrivilege;
try
{
@@ -667,7 +668,7 @@ static void cbCharacterNameAndLang(CMessage& msgin, const string &serviceName, T
msgin.serial(language);
// ignoreList
- msgin.serialCont(ignoreList);
+ msgin.serialCont(_ignoreList);
// privilege
msgin.serial( havePrivilege );
@@ -687,12 +688,13 @@ static void cbCharacterNameAndLang(CMessage& msgin, const string &serviceName, T
#ifdef HAVE_MONGO
string cids = "";
- for ( uint i = 0; i < ignoreList.size(); i++ )
+ for ( uint i = 0; i < _ignoreList.size(); i++ )
{
+ ignoreList.push_back((uint32)_ignoreList[i].getShortId());
if (i > 0)
- cids += toString(",%d", ignoreList[i].getShortId());
+ cids += toString(",%u", _ignoreList[i].getShortId());
else
- cids += toString("%d", ignoreList[i].getShortId());
+ cids += toString("%u", _ignoreList[i].getShortId());
}
CMongo::update("ryzom_users", toString("{ 'cid': %d}", TheDataset.getEntityId(chId).getShortId()), toString("{ $set:{ 'ignore': [%s] } }", cids.c_str()));
From 4912606d35af79b5bd94f18498cd03e214a1b77e Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Tue, 5 Dec 2023 20:01:29 +0100
Subject: [PATCH 106/194] Fixed issue where items can recover the full HP after
stacking
---
.../entities_game_service/game_item_manager/game_item.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/ryzom/server/src/entities_game_service/game_item_manager/game_item.cpp b/ryzom/server/src/entities_game_service/game_item_manager/game_item.cpp
index d94ef48054..0413bff070 100644
--- a/ryzom/server/src/entities_game_service/game_item_manager/game_item.cpp
+++ b/ryzom/server/src/entities_game_service/game_item_manager/game_item.cpp
@@ -1276,7 +1276,10 @@ CGameItemPtr CGameItem::getItemCopy()
item->_RefInventorySlot = INVENTORIES::INVALID_INVENTORY_SLOT;
item->_CreatorId = _CreatorId;
item->_LockCount = 0;
- item->_HP = item->maxDurability();
+ if (_HP == 0)
+ item->_HP = item->maxDurability();
+ else
+ item->_HP = _HP;
item->_LatencyEndDate = _LatencyEndDate;
item->_Enchantment = _Enchantment;
From 1ee03c946686d1b44a09813c169a79292c2b3aa5 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Wed, 6 Dec 2023 03:17:36 +0100
Subject: [PATCH 107/194] Fixed crash on send post form if the select are empty
---
nel/src/gui/group_html.cpp | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/nel/src/gui/group_html.cpp b/nel/src/gui/group_html.cpp
index 5b43c895e1..47f5a4bc16 100644
--- a/nel/src/gui/group_html.cpp
+++ b/nel/src/gui/group_html.cpp
@@ -3508,8 +3508,14 @@ namespace NLGUI
else if (form.Entries[i].ComboBox)
{
CDBGroupComboBox *cb = form.Entries[i].ComboBox;
- entryData = form.Entries[i].SelectValues[cb->getSelection()];
- addEntry = true;
+ if (cb)
+ {
+ if (form.Entries[i].SelectValues.size() > 0)
+ {
+ entryData = form.Entries[i].SelectValues[cb->getSelection()];
+ addEntry = true;
+ }
+ }
}
else if (form.Entries[i].SelectBox)
{
From 801742a73e7c950099557b8ae7546b5bc22f0d52 Mon Sep 17 00:00:00 2001
From: nimetu
Date: Wed, 6 Dec 2023 15:17:35 +0200
Subject: [PATCH 108/194] Fix non-pow-2 html background textures in directx
showing as white
---
nel/src/gui/group_html.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/nel/src/gui/group_html.cpp b/nel/src/gui/group_html.cpp
index 5b43c895e1..0d9b3a0cbe 100644
--- a/nel/src/gui/group_html.cpp
+++ b/nel/src/gui/group_html.cpp
@@ -366,7 +366,7 @@ namespace NLGUI
CViewRenderer &rVR = *CViewRenderer::getInstance();
for(uint i = 0; i < TextureIds.size(); i++)
{
- rVR.reloadTexture(TextureIds[i].first, dest);
+ rVR.reloadTexture(TextureIds[i].first, dest, false);
TextureIds[i].second->invalidateCoords();
}
}
@@ -767,7 +767,7 @@ namespace NLGUI
// data:image/png;base64,AA...==
if (startsWith(url, "data:image/"))
{
- texId = rVR.createTextureFromDataURL(url);
+ texId = rVR.createTextureFromDataURL(url, false);
return NULL;
}
@@ -775,7 +775,7 @@ namespace NLGUI
// load the image from local files/bnp
if (lookupLocalFile(finalUrl, std::string(CFile::getPath(url) + CFile::getFilenameWithoutExtension(url) + ".tga").c_str(), false))
{
- texId = rVR.createTexture(finalUrl);
+ texId = rVR.createTexture(finalUrl, 0, 0, -1, -1, false);
return NULL;
}
@@ -786,7 +786,7 @@ namespace NLGUI
LOG_DL("add to download '%s' dest '%s'", finalUrl.c_str(), dest.c_str());
if (CFile::fileExists(dest) && CFile::getFileSize(dest) > 0)
- texId = rVR.createTexture(dest);
+ texId = rVR.createTexture(dest, 0, 0, -1, -1, false);
else
texId = rVR.newTextureId(dest);
From 1b703b7a58cc8a9ca599873069f86b82779dfca2 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Wed, 6 Dec 2023 15:49:31 +0100
Subject: [PATCH 109/194] Added lua functions for Ark Editor
---
.../client/data/gamedev/interfaces_v3/ark.lua | 77 ++++++++++++++++++-
1 file changed, 74 insertions(+), 3 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/ark.lua b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
index d1dd01688f..93149d59c5 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/ark.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/ark.lua
@@ -231,10 +231,9 @@ function ArkMissionCatalog:setup()
debug("Open ency")
getUI("ui:interface:encyclopedia").opened = true;
-
end
-function translateText(id, script, event)
+function translateText(id, script, event, dst_lang)
framewin = getUI("ui:interface:ark_translate_lesson", false)
if framewin == nil then
createRootGroupInstance("webig_browser", "ark_translate_lesson", {h=480, w=980})
@@ -246,7 +245,10 @@ function translateText(id, script, event)
framewin.x = math.floor((getUI("ui:interface").w - framewin.w) / 2)
framewin.y = math.floor((getUI("ui:interface").h + framewin.h) / 2)
setTopWindow(framewin)
- framewin:find("html"):browse("https://app.ryzom.com/app_arcc/index.php?action=mTrads_Edit&event="..tostring(event).."&trad_name="..tostring(id).."&reload="..script)
+ if dst_lang then
+ dst_lang = "&dst_lang="..dst_lang
+ end
+ framewin:find("html"):browse("https://app.ryzom.com/app_arcc/index.php?action=mTrads_Edit&event="..tostring(event).."&trad_name="..tostring(id).."&reload="..script..dst_lang)
end
@@ -263,6 +265,75 @@ function setupArkUrls()
game.updateRpItemsUrl = "https://app.ryzom.com/app_arcc/index.php?action=mScript_Run&script=11488&command=reset_all"
end
+
+--------------------------------------------------------------------------------
+--- ARK EDITOR ---
+--------------------------------------------------------------------------------
+
+function ArkSwitchAdvEdition(prefix)
+ if ArkSwitchAdvEditionSwitch then
+ ArkSwitchAdvEditionSwitch = false
+ getUICaller():showDiv("advEditionDiv"..prefix, false)
+ else
+ ArkSwitchAdvEditionSwitch = true
+ getUICaller():showDiv("advEditionDiv"..prefix, true)
+ end
+end
+
+function ArkShowStageDiv(name, state)
+ getUICaller():showDiv(name, state)
+end
+
+function ArkSelectRyform(curwin, id, mod)
+ e = ArkGetStageEdit(__CURRENT_WINDOW__):find(id..":eb")
+ e.input_string = mod
+ ArkGetStageEdit(__CURRENT_WINDOW__):find("send:b"):runLeftClickAction()
+end
+
+function ArkSendForm(name)
+ ArkGetStageEdit(__CURRENT_WINDOW__):find(name.."__command:eb").input_string = "reset"
+ ArkGetStageEdit(__CURRENT_WINDOW__):find("send:b"):runLeftClickAction()
+end
+
+function ArkGetStageEdit(curwin)
+ local sid = string.split(curwin, ":")
+ local eid = sid[#sid]
+ table.remove(sid, #sid)
+ local id = sid[1]
+ for i = 2, #sid do
+ id = id .. ":" .. sid[i]
+ end
+ return getUI(id):find(eid)
+end
+
+function ArkFindUI(name)
+ local i = 0
+ local ui = getUICaller()
+ while true do
+ local found = ui:find(name)
+ if found ~= nil then
+ return found
+ else
+ ui = ui.parent
+ end
+ i = i +1
+ if i >= 100 then
+ return nil
+ end
+ end
+end
+
+function ArkOnSelectChanged(name)
+ local text = ArkRyformV5[name][getUICaller().selection+1]
+ ArkFindUI(name..":eb").input_string = text
+end
+
+
+
+
+
+
+
if S2E1 == nil then
S2E1 = {}
end
From 5ff37f6e1bd2da5bbb9916597844c44c1043d536 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Fri, 8 Dec 2023 00:34:00 +0100
Subject: [PATCH 110/194] Fixe
---
ryzom/server/src/input_output_service/chat_client.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/ryzom/server/src/input_output_service/chat_client.cpp b/ryzom/server/src/input_output_service/chat_client.cpp
index bb80314e59..293d2bba17 100644
--- a/ryzom/server/src/input_output_service/chat_client.cpp
+++ b/ryzom/server/src/input_output_service/chat_client.cpp
@@ -170,7 +170,6 @@ void CChatClient::setIgnoreStatus( const NLMISC::CEntityId &id, bool ignored)
//-----------------------------------------------
bool CChatClient::isInIgnoreList( const NLMISC::CEntityId &id )
{
- TIgnoreListCont::const_iterator itIgnore = _IgnoreList.find(id);
return isInIgnoreList(id.getShortId());
} // isInIgnoreList //
From 137eb7532149acfe7f4d99b1dc002f6121f821b4 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Fri, 8 Dec 2023 20:45:19 +0100
Subject: [PATCH 111/194] Added server tools services
---
.../tools/services/_startup/Arma/AppCMD | 14 ++
.../tools/services/_startup/Arma/Ch2Web | 8 +
.../tools/services/_startup/Arma/DeepL_DE | 16 ++
.../tools/services/_startup/Arma/DeepL_EN | 16 ++
.../tools/services/_startup/Arma/DeepL_ES | 16 ++
.../tools/services/_startup/Arma/DeepL_FR | 16 ++
.../tools/services/_startup/Arma/DeepL_RU | 16 ++
.../tools/services/_startup/Arma/EgsLogs | 7 +
.../tools/services/_startup/Arma/KillRAS | 27 +++
.../server/tools/services/_startup/Arma/Logs | 11 +
.../server/tools/services/_startup/Arma/RIBS | 4 +
.../server/tools/services/_startup/screen.rc | 13 ++
.../tools/services/_startup/start_all.sh | 29 +++
ryzom/server/tools/services/deepl.py | 212 ++++++++++++++++++
ryzom/server/tools/services/kill_ras.sh | 23 ++
15 files changed, 428 insertions(+)
create mode 100755 ryzom/server/tools/services/_startup/Arma/AppCMD
create mode 100755 ryzom/server/tools/services/_startup/Arma/Ch2Web
create mode 100755 ryzom/server/tools/services/_startup/Arma/DeepL_DE
create mode 100755 ryzom/server/tools/services/_startup/Arma/DeepL_EN
create mode 100755 ryzom/server/tools/services/_startup/Arma/DeepL_ES
create mode 100755 ryzom/server/tools/services/_startup/Arma/DeepL_FR
create mode 100755 ryzom/server/tools/services/_startup/Arma/DeepL_RU
create mode 100755 ryzom/server/tools/services/_startup/Arma/EgsLogs
create mode 100755 ryzom/server/tools/services/_startup/Arma/KillRAS
create mode 100755 ryzom/server/tools/services/_startup/Arma/Logs
create mode 100755 ryzom/server/tools/services/_startup/Arma/RIBS
create mode 100644 ryzom/server/tools/services/_startup/screen.rc
create mode 100755 ryzom/server/tools/services/_startup/start_all.sh
create mode 100644 ryzom/server/tools/services/deepl.py
create mode 100755 ryzom/server/tools/services/kill_ras.sh
diff --git a/ryzom/server/tools/services/_startup/Arma/AppCMD b/ryzom/server/tools/services/_startup/Arma/AppCMD
new file mode 100755
index 0000000000..7d3ed27f79
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/AppCMD
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+cd /home/nevrax/tmp/xml_chars/
+while true
+do
+ inotifywait -e close_write from_appadmin
+ echo "------------"
+ echo "New command :"
+ cat from_appadmin
+ echo "------------"
+ sh from_appadmin
+ echo "" > from_appadmin
+done
+
diff --git a/ryzom/server/tools/services/_startup/Arma/Ch2Web b/ryzom/server/tools/services/_startup/Arma/Ch2Web
new file mode 100755
index 0000000000..b86f842fd2
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/Ch2Web
@@ -0,0 +1,8 @@
+#!/bin/sh
+mkdir -p /run/user/1000/chweb/
+
+while true
+do
+ cd $SHARD_PATH/tools/send_characters_to_web
+ bash send_characters_to_web.sh
+done
diff --git a/ryzom/server/tools/services/_startup/Arma/DeepL_DE b/ryzom/server/tools/services/_startup/Arma/DeepL_DE
new file mode 100755
index 0000000000..109313b854
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/DeepL_DE
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=de
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG atys
+done
diff --git a/ryzom/server/tools/services/_startup/Arma/DeepL_EN b/ryzom/server/tools/services/_startup/Arma/DeepL_EN
new file mode 100755
index 0000000000..77e6339e5c
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/DeepL_EN
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=en
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG atys
+done
diff --git a/ryzom/server/tools/services/_startup/Arma/DeepL_ES b/ryzom/server/tools/services/_startup/Arma/DeepL_ES
new file mode 100755
index 0000000000..ee1bc2d0b0
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/DeepL_ES
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=es
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG atys
+done
diff --git a/ryzom/server/tools/services/_startup/Arma/DeepL_FR b/ryzom/server/tools/services/_startup/Arma/DeepL_FR
new file mode 100755
index 0000000000..9d0afc728e
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/DeepL_FR
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+#trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=fr
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG atys
+done
diff --git a/ryzom/server/tools/services/_startup/Arma/DeepL_RU b/ryzom/server/tools/services/_startup/Arma/DeepL_RU
new file mode 100755
index 0000000000..757e0d4f72
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/DeepL_RU
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=ru
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG atys
+done
diff --git a/ryzom/server/tools/services/_startup/Arma/EgsLogs b/ryzom/server/tools/services/_startup/Arma/EgsLogs
new file mode 100755
index 0000000000..08ad16933d
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/EgsLogs
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+while true
+do
+ python3 ../../check_outpost_logs.py /home/nevrax/shard/logs/entities_game_service.log
+done
+
diff --git a/ryzom/server/tools/services/_startup/Arma/KillRAS b/ryzom/server/tools/services/_startup/Arma/KillRAS
new file mode 100755
index 0000000000..e0b9e91a23
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/KillRAS
@@ -0,0 +1,27 @@
+#!/bin/bash
+echo "0" > /tmp/killras.count
+while true
+do
+ RAS_PID=$(ps aux | grep "/sbin/ryzom_admin_service --" | grep -v "bash" | grep -v grep | awk '{print $2}')
+ RAS_CPU=$(top -b -n 1 -p $RAS_PID | tail -1 | awk '{print $9}' | cut -d"," -f1)
+ echo -n "$RAS_CPU "
+ if (( RAS_CPU >= 150 ))
+ then
+ count=$(cat /tmp/killras.count)
+ if (( count > 5 ))
+ then
+ date
+ echo "$RAS_PID : KILLED!"
+ kill $RAS_PID
+ echo "0" > /tmp/killras.count
+ else
+ date
+ echo "$RAS_PID $RAS_CPU : HOT"
+ let count++
+ echo "$count" > /tmp/killras.count
+ fi
+ else
+ echo "0" > /tmp/killras.count
+ fi
+ sleep 1
+done
diff --git a/ryzom/server/tools/services/_startup/Arma/Logs b/ryzom/server/tools/services/_startup/Arma/Logs
new file mode 100755
index 0000000000..15a0012fce
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/Logs
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+while true
+do
+ DAY=$(date +%d)
+ MONTH=$(date +%m)
+ YEAR=$(date +%Y)
+ python3 ../../rocket_logs_errors.py /home/nevrax/logs/login/$YEAR/$MONTH/error.$DAY.log LOGIN
+ sleep 10
+done
+
diff --git a/ryzom/server/tools/services/_startup/Arma/RIBS b/ryzom/server/tools/services/_startup/Arma/RIBS
new file mode 100755
index 0000000000..91e31f882b
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Arma/RIBS
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+cd ~/ribs/server
+./start_server.sh
diff --git a/ryzom/server/tools/services/_startup/screen.rc b/ryzom/server/tools/services/_startup/screen.rc
new file mode 100644
index 0000000000..f10fa9c30d
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/screen.rc
@@ -0,0 +1,13 @@
+defscrollback 5000
+mousetrack on
+hardstatus on
+hardstatus alwayslastline
+# hardstatus string "%{.kW}%-w%{.bW}%t [%n]%{-}%+w %=%{..G} %H %{..Y} %Y/%m/%d %c"
+hardstatus string "%{= kG}[%{G}%H%? %1`%?%{g}][%= %{= kw}%-w%{+b yk} %n*%t%?(%u)%? %{-}%+w %=%{g}][%{B}%m/%d %{W}%C%A%{g}]"
+
+# quickly switch between regions using tab and arrows
+bindkey "^[[1;5D" prev
+bindkey "^[[1;5C" next
+
+termcapinfo xterm* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007:ti@:te@'
+
diff --git a/ryzom/server/tools/services/_startup/start_all.sh b/ryzom/server/tools/services/_startup/start_all.sh
new file mode 100755
index 0000000000..28aec4cb3d
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/start_all.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# Check if screen is runnning
+cd $(dirname "$0")/services
+
+SHARD=$(hostname -s)
+
+if [ $(screen -list | grep \\\.services | wc -l) != 1 ]
+then
+ echo "Services Screen not running. Starting..."
+ screen -dmS services -c ../screen.rc
+else
+ echo "Good! Services Screen is running"
+fi
+
+# Check if each services is running in a screen window
+WINDOWS=$(screen -S services -Q windows)
+for service in *
+do
+ CHECK=$(echo "$WINDOWS" | grep "$service")
+ if [ -z "$CHECK" ]
+ then
+ echo "Service '$service' need be started! Do it..."
+ screen -S services -p bash -X stuff "cd ~/scripts/_startup/$SHARD && screen -t $service ./$service\n"
+ else
+ echo "Good! Service '$service' is up"
+ fi
+done
+
diff --git a/ryzom/server/tools/services/deepl.py b/ryzom/server/tools/services/deepl.py
new file mode 100644
index 0000000000..908a16bffd
--- /dev/null
+++ b/ryzom/server/tools/services/deepl.py
@@ -0,0 +1,212 @@
+#!/bin/env python3
+
+import os, sys, json, time, subprocess
+import importlib.util
+import urllib.request
+import urllib.parse
+import pyinotify
+import pymongo
+
+from admin_modules_itf import queryShard
+
+mongoclient = pymongo.MongoClient("mongodb://arma.ryzom.com:22110/")
+mongodb = mongoclient["megacorp_live"]
+ryzom_chats = mongodb["ryzom_chats"]
+
+ALL_LANGS = ["de", "en", "es", "fr", "ru"]
+
+logfilename="/home/nevrax/shard/logs/chat/chat.log"
+def getLang(lang):
+ return ":"+lang+":"
+
+def getDeepLang(lang):
+ return lang.upper()
+
+dirs = os.listdir("/home/nevrax/shard/logs/chat/")
+
+def follow(thefile):
+ thefile.seek(0,os.SEEK_END)
+ file_size = os.stat(logfilename).st_size
+ while True:
+ line = thefile.readline()
+ if line:
+ yield line
+ else:
+ size = os.stat(logfilename).st_size
+ if file_size > size:
+ sys.exit()
+ file_size = size
+ time.sleep(0.01)
+ continue
+
+only_lang = sys.argv[1]
+shard_domain = "("+sys.argv[2][0].upper()+sys.argv[2][1:]+")"
+print("Translating only in "+only_lang.upper()+" from "+shard_domain[1:-1]+"..")
+
+# load all terms
+terms = {}
+for src in ALL_LANGS:
+ if only_lang != src:
+ terms[src] = {}
+ with open("deepl_terms/"+src+"-"+only_lang+".json") as f:
+ content = json.load(f)
+ for term in content:
+ terms[src][term[0].lower()] = term[1]
+
+logfile = open(logfilename, "r", encoding="utf-8", errors="replace")
+loglines = follow(logfile)
+for line in loglines:
+
+ sline = line.split(" : ")
+
+ orig = " : ".join(sline[1:]).split("|")
+ if len(orig) >= 5:
+ print("-------------------------------------------------------")
+ print(orig)
+ print("---")
+
+
+ command = "chat"
+ prefix = ">"
+ domain = shard_domain
+
+ ### CHANNEL ###
+ channel = orig[0]
+ rocket_id = ""
+ if channel[0] == "[":
+ schannel = channel[1:].split("]")
+ rocket_id = schannel[0]
+ channel = schannel[1]
+
+
+ if channel[0] == "#":
+ channel = channel[1:]
+ is_dynamic = True
+ else:
+ is_dynamic = False
+
+ if channel in ("FACTION_EN", "FACTION_ES", "FACTION_DE", "FACTION_FR", "FACTION_RU") :
+ channel = "universe"
+
+ if channel in ("FACTION_RF-EN", "FACTION_RF-ES", "FACTION_RF-DE", "FACTION_RF-FR", "FACTION_RF-RU") :
+ channel = "FACTION_RF"
+
+ if not channel in ("say", "shout", "arround", "universe", "FACTION_RF") and channel[:7] != "region:" and channel[:6] != "guild:" and channel[:5] != "team:" and channel[:8] != "FACTION_" and channel[:7] != "league_":
+ print("bye...")
+ continue
+
+ print("Channel:", channel)
+ print("RocketId:", rocket_id)
+
+ ### USER ###
+ suser = orig[1].split("$")[0].split("@")
+ username = orig[1].split("$")[0]
+ if len(suser) == 2:
+ user = suser[1].lower()
+ else:
+ user = suser[0].lower()
+ if "(" in user:
+ user = user.split("(")[0]
+
+ if user[0] == "~": # it's a rocket chat message, send it as far message
+ user = user[1:]
+ command = "farChat"
+ domain = ""
+ prefix = ""
+
+ print("User:", user)
+ print("Command:", command)
+
+ ### NBR RECEIVERS ###
+ nbr_receivers = orig[2]
+
+ ### LANGS ###
+ langs = orig[3].split("-")
+ source = langs[0]
+
+ if not source in ALL_LANGS:
+ source = ""
+
+ print("Source:", source)
+
+ ### TEXT ###
+ text = "|".join(orig[4:]).strip()
+ if not text or text == " ":
+ continue
+
+ original_text = text.replace('"', '\'\'')
+
+ print("Text: [", original_text, "]")
+
+ if source == "":
+ # User lang factions, send only one test
+ if only_lang == "en":
+ queryShard("ios", command+" "+user+domain+" "+channel+" \""+prefix+original_text+"\"", False)
+ else:
+
+ if channel[:12] != "FACTION_USR_":
+ if channel == "arround":
+ text = text[5:]
+
+ if len(langs) > 1 and langs[1] == "*":
+ langs = [source] + ALL_LANGS
+
+ for lang in langs[1:]:
+ if lang != source and lang == only_lang:
+ stext = text.split(" ")
+ final_text = []
+ for word in stext:
+ w = word.lower()
+ if w in terms[source]:
+ final_text.append(""+terms[source][w]+" ")
+ else:
+ final_text.append(word)
+ text = " ".join(final_text)
+
+ data = {
+ "auth_key": "d8d46b41-5a26-d1d2-90e0-b3ab3e736fe6",
+ "tag_handling": "xml",
+ "ignore_tags": "x",
+ "text": text,
+ "target_lang": getDeepLang(lang)
+ }
+
+ if source:
+ data["source_lang"] = getDeepLang(source)
+
+ data = urllib.parse.urlencode(data)
+ data = data.encode("utf-8")
+
+ try:
+ with urllib.request.urlopen("https://api.deepl.com/v2/translate", data, timeout=2) as f:
+ response = f.read()
+ translated = json.loads(response.decode("utf-8"))
+ source_lang = translated["translations"][0]["detected_source_language"].lower()
+ translated = translated["translations"][0]["text"].replace('"', '\'\'')
+ except Exception as e:
+ print("DeepL Error...", e)
+ translated = text
+ source_lang = lang
+
+ translated = translated.replace("", "").replace(" ", "")
+
+ # UNUSED
+ if not source_lang in ("en", "de", "es", "fr", "ru"):
+ source_lang = "en"
+
+ print("[%s] => [%s] : %s" % (source_lang, lang, translated))
+ print("---")
+ print(command+" "+user+domain+" "+channel+" \""+prefix+"{"+getLang(lang)+original_text+"}@{ "+translated+"\"")
+ print("")
+ if channel == "arround":
+ queryShard("ios", command+" "+user+domain+" "+channel+" \""+prefix+getLang(lang)+"&EMT&{"+getLang(source_lang)+original_text+"}@{ "+translated+"\" "+rocket_id, False)
+ else:
+ queryShard("ios", command+" "+user+domain+" "+channel+" \""+prefix+getLang(lang)+"{"+getLang(source_lang)+original_text+"}@{ "+translated+"\" "+rocket_id, False)
+
+ if source == only_lang and (channel == "universe" or channel[:8] == "FACTION_" or channel[:7] == "league_"):
+ queryShard("ios", command+" "+user+domain+" "+channel+" \""+prefix+getLang(source)+original_text+"\" "+rocket_id, False)
+
+ if source == only_lang and channel[:6] == "guild:":
+ chat = { "_id": rocket_id, "username": username, "chat": getLang(source)+original_text, "chatType": "guildId", "chatId": int(channel[9:19], 16)-268435456, "date": time.time()*1000, "ig": True, "autoSub": 1}
+ ryzom_chats.insert_one(chat)
+
diff --git a/ryzom/server/tools/services/kill_ras.sh b/ryzom/server/tools/services/kill_ras.sh
new file mode 100755
index 0000000000..3375eccbc9
--- /dev/null
+++ b/ryzom/server/tools/services/kill_ras.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+echo "0" > /tmp/killras.count
+while true
+do
+ RAS_PID=$(ps aux | grep "/sbin/ryzom_admin_service --" | grep -v "bash" | grep -v grep | awk '{print $2}')
+ RAS_CPU=$(top -b -n 1 -p $RAS_PID | tail -1 | awk '{print $9}' | cut -d"," -f1)
+ echo -n "$RAS_CPU "
+
+ count=$(cat /tmp/killras.count)
+ if (( count > 5 ))
+ then
+ date
+ echo "$RAS_PID : KILLED!"
+ kill $RAS_PID
+ echo "0" > /tmp/killras.count
+ else
+ date
+ echo "$RAS_PID $RAS_CPU : HOT"
+ let count++
+ echo "$count" > /tmp/killras.count
+ fi
+ sleep 1
+done
From a770385dd3ae6a31ce5b739b660670fb60fdee29 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Fri, 8 Dec 2023 20:50:20 +0100
Subject: [PATCH 112/194] Added server tools services
---
.../tools/services/_startup/Gingo/Ais_R | 16 +++++
.../tools/services/_startup/Gingo/AutoRibs | 60 +++++++++++++++++++
.../tools/services/_startup/Gingo/DeepL_DE | 16 +++++
.../tools/services/_startup/Gingo/DeepL_EN | 16 +++++
.../tools/services/_startup/Gingo/DeepL_ES | 16 +++++
.../tools/services/_startup/Gingo/DeepL_FR | 16 +++++
.../tools/services/_startup/Gingo/DeepL_RU | 16 +++++
.../server/tools/services/_startup/Gingo/RIBS | 4 ++
.../tools/services/_startup/Yubo/AutoRibs | 60 +++++++++++++++++++
.../tools/services/_startup/Yubo/DeepL_DE | 16 +++++
.../tools/services/_startup/Yubo/DeepL_EN | 16 +++++
.../tools/services/_startup/Yubo/DeepL_ES | 16 +++++
.../tools/services/_startup/Yubo/DeepL_FR | 16 +++++
.../tools/services/_startup/Yubo/DeepL_RU | 16 +++++
ryzom/server/tools/services/_startup/Yubo/RC | 12 ++++
.../server/tools/services/_startup/Yubo/RIBS | 4 ++
ryzom/server/tools/services/deepl.py | 11 +++-
.../tools/services/update_deepl_terms.sh | 12 ++++
18 files changed, 337 insertions(+), 2 deletions(-)
create mode 100755 ryzom/server/tools/services/_startup/Gingo/Ais_R
create mode 100755 ryzom/server/tools/services/_startup/Gingo/AutoRibs
create mode 100755 ryzom/server/tools/services/_startup/Gingo/DeepL_DE
create mode 100755 ryzom/server/tools/services/_startup/Gingo/DeepL_EN
create mode 100755 ryzom/server/tools/services/_startup/Gingo/DeepL_ES
create mode 100755 ryzom/server/tools/services/_startup/Gingo/DeepL_FR
create mode 100755 ryzom/server/tools/services/_startup/Gingo/DeepL_RU
create mode 100755 ryzom/server/tools/services/_startup/Gingo/RIBS
create mode 100755 ryzom/server/tools/services/_startup/Yubo/AutoRibs
create mode 100755 ryzom/server/tools/services/_startup/Yubo/DeepL_DE
create mode 100755 ryzom/server/tools/services/_startup/Yubo/DeepL_EN
create mode 100755 ryzom/server/tools/services/_startup/Yubo/DeepL_ES
create mode 100755 ryzom/server/tools/services/_startup/Yubo/DeepL_FR
create mode 100755 ryzom/server/tools/services/_startup/Yubo/DeepL_RU
create mode 100755 ryzom/server/tools/services/_startup/Yubo/RC
create mode 100755 ryzom/server/tools/services/_startup/Yubo/RIBS
create mode 100644 ryzom/server/tools/services/update_deepl_terms.sh
diff --git a/ryzom/server/tools/services/_startup/Gingo/Ais_R b/ryzom/server/tools/services/_startup/Gingo/Ais_R
new file mode 100755
index 0000000000..f274f0fb6f
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Gingo/Ais_R
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+AIS=ais_roots
+
+while true
+do
+ touch $SHARD_PATH/logs/ai_service_${AIS}.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 ais_check.py $SHARD_PATH/logs/ai_service_${AIS}.log $AIS $(hostname -s)
+done
diff --git a/ryzom/server/tools/services/_startup/Gingo/AutoRibs b/ryzom/server/tools/services/_startup/Gingo/AutoRibs
new file mode 100755
index 0000000000..8a646170f6
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Gingo/AutoRibs
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+echo "Checking /home/nevrax/www/public_html/ribs_hook.cmd ..."
+tail -n 0 --follow=name /home/nevrax/www/public_html/ribs_hook.cmd | while read LINE0
+do
+ cmd=${LINE0}
+ echo "Getting command: $cmd"
+
+ if [ "$cmd" == "client" ]
+ then
+ cd /home/nevrax/repos/ryzom-core
+ BRANCH=$(git branch | grep \* | cut -d ' ' -f2)
+ REMOTE=$(git ls-remote -q --heads | grep "refs/heads/$BRANCH" | awk '{ print $1 }')
+ LOCAL=$(git rev-parse HEAD)
+
+ echo "$LOCAL vs $REMOTE"
+ FILES=$(git diff --name-only $REMOTE $LOCAL)
+ echo "$FILES" > /home/nevrax/files.txt
+
+ if [ "$LOCAL" == "$REMOTE" ]
+ then
+ echo "Latest version, no need update..."
+ else
+ git pull
+
+ if [[ ! $(grep -c '^ryzom/nel' /home/nevrax/files.txt) == 0 || ! $(grep -c '^ryzom/client' /home/nevrax/files.txt) == 0 || ! $(grep -c '^ryzom/common' /home/nevrax/files.txt) == 0 ]]
+ then
+ echo -e -n "build/ryzom_build_client.sh|Run|64 Windows Linux\ndata/generate_client_data.sh|Run|Clients\ndata/patch_client.sh|Run|-" >> /home/nevrax/www/public_html/autoribs_hook.cmd
+ fi
+
+ if [[ ! $(grep -c '^ryzom/nel' /home/nevrax/files.txt) == 0 || ! $(grep -c '^ryzom/server' /home/nevrax/files.txt) == 0 || ! $(grep -c '^ryzom/common' /home/nevrax/files.txt) == 0 ]]
+ then
+ echo -e -n "build/ryzom_build_server.sh|Run|Nel" >> /home/nevrax/www/public_html/autoribs_hook.cmd
+ fi
+ fi
+
+ elif [ "$cmd" == "client-data" ]
+ then
+ cd /home/nevrax/repos/ryzom-data
+ BRANCH=$(git branch | grep \* | cut -d ' ' -f2)
+ REMOTE=$(git ls-remote -q --heads | grep "refs/heads/$BRANCH" | awk '{ print $1 }')
+ LOCAL=$(git rev-parse HEAD)
+
+ echo "$LOCAL vs $REMOTE"
+ if [ "$LOCAL" == "$REMOTE" ]
+ then
+ echo "Latest version, no need update..."
+ else
+ git pull
+ echo -e -n "data/generate_client_data.sh|Run|Data\ndata/patch_client.sh|Run|-" >> /home/nevrax/www/public_html/autoribs_hook.cmd
+ fi
+ elif [ "$cmd" == "restart-shard" ]
+ then
+ cd /home/nevrax/ribs/server
+ #sh run_ribs.sh shard/ryzom_stop_shard.sh Run kickall
+ #1sh run_ribs.sh shard/ryzom_start_shard.sh Run Silent
+ #sh run_ribs.sh shard/ryzom_open_shard.sh Run -
+ fi
+done
+
diff --git a/ryzom/server/tools/services/_startup/Gingo/DeepL_DE b/ryzom/server/tools/services/_startup/Gingo/DeepL_DE
new file mode 100755
index 0000000000..5f4dea0f19
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Gingo/DeepL_DE
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=de
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG $(hostname -s)
+done
diff --git a/ryzom/server/tools/services/_startup/Gingo/DeepL_EN b/ryzom/server/tools/services/_startup/Gingo/DeepL_EN
new file mode 100755
index 0000000000..3c60cb1b13
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Gingo/DeepL_EN
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=en
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG $(hostname -s)
+done
diff --git a/ryzom/server/tools/services/_startup/Gingo/DeepL_ES b/ryzom/server/tools/services/_startup/Gingo/DeepL_ES
new file mode 100755
index 0000000000..0f5334852f
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Gingo/DeepL_ES
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=es
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG $(hostname -s)
+done
diff --git a/ryzom/server/tools/services/_startup/Gingo/DeepL_FR b/ryzom/server/tools/services/_startup/Gingo/DeepL_FR
new file mode 100755
index 0000000000..8e73301b5e
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Gingo/DeepL_FR
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=fr
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG $(hostname -s)
+done
diff --git a/ryzom/server/tools/services/_startup/Gingo/DeepL_RU b/ryzom/server/tools/services/_startup/Gingo/DeepL_RU
new file mode 100755
index 0000000000..9fdfb72237
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Gingo/DeepL_RU
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=ru
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG $(hostname -s)
+done
diff --git a/ryzom/server/tools/services/_startup/Gingo/RIBS b/ryzom/server/tools/services/_startup/Gingo/RIBS
new file mode 100755
index 0000000000..91e31f882b
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Gingo/RIBS
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+cd ~/ribs/server
+./start_server.sh
diff --git a/ryzom/server/tools/services/_startup/Yubo/AutoRibs b/ryzom/server/tools/services/_startup/Yubo/AutoRibs
new file mode 100755
index 0000000000..56904c1b68
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Yubo/AutoRibs
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+echo "Checking /home/nevrax/www/public_html/ribs_hook.cmd ..."
+tail -n 0 --follow=name /home/nevrax/www/public_html/ribs_hook.cmd | while read LINE0
+do
+ cmd=${LINE0}
+ echo "Getting command: $cmd"
+
+ if [ "$cmd" == "client" ]
+ then
+ cd /home/nevrax/repos/ryzom-core
+ BRANCH=$(git branch | grep \* | cut -d ' ' -f2)
+ REMOTE=$(git ls-remote -q --heads | grep "refs/heads/$BRANCH" | awk '{ print $1 }')
+ LOCAL=$(git rev-parse HEAD)
+
+ echo "$LOCAL vs $REMOTE"
+ FILES=$(git diff --name-only $REMOTE $LOCAL)
+ echo "$FILES" > /home/nevrax/files.txt
+
+ if [ "$LOCAL" == "$REMOTE" ]
+ then
+ echo "Latest version, no need update..."
+ else
+ git pull
+
+ if [[ ! $(grep -c '^ryzom/nel' /home/nevrax/files.txt) == 0 || ! $(grep -c '^ryzom/client' /home/nevrax/files.txt) == 0 || ! $(grep -c '^ryzom/common' /home/nevrax/files.txt) == 0 ]]
+ then
+ echo -e -n "build/ryzom_build_client.sh|Run|64 Windows Linux\ndata/generate_client_data.sh|Run|Clients\ndata/patch_client.sh|Run|-" >> /home/nevrax/www/public_html/autoribs_hook.cmd
+ fi
+
+ if [[ ! $(grep -c '^ryzom/nel' /home/nevrax/files.txt) == 0 || ! $(grep -c '^ryzom/server' /home/nevrax/files.txt) == 0 || ! $(grep -c '^ryzom/common' /home/nevrax/files.txt) == 0 ]]
+ then
+ echo -e -n "build/ryzom_build_server.sh|Run|Nel" >> /home/nevrax/www/public_html/autoribs_hook.cmd
+ fi
+ fi
+
+ elif [ "$cmd" == "client-data" ]
+ then
+ cd /home/nevrax/repos/ryzom-data
+ BRANCH=$(git branch | grep \* | cut -d ' ' -f2)
+ REMOTE=$(git ls-remote -q --heads | grep "refs/heads/$BRANCH" | awk '{ print $1 }')
+ LOCAL=$(git rev-parse HEAD)
+
+ echo "$LOCAL vs $REMOTE"
+ if [ "$LOCAL" == "$REMOTE" ]
+ then
+ echo "Latest version, no need update..."
+ else
+ git pull
+ echo -e -n "data/generate_client_data.sh|Run|Data\ndata/patch_client.sh|Run|-" >> /home/nevrax/www/public_html/autoribs_hook.cmd
+ fi
+ elif [ "$cmd" == "restart-shard" ]
+ then
+ cd /home/nevrax/ribs/server
+ sh run_ribs.sh shard/ryzom_stop_shard.sh Run kickall
+ sh run_ribs.sh shard/ryzom_start_shard.sh Run Silent
+ sh run_ribs.sh shard/ryzom_open_shard.sh Run -
+ fi
+done
+
diff --git a/ryzom/server/tools/services/_startup/Yubo/DeepL_DE b/ryzom/server/tools/services/_startup/Yubo/DeepL_DE
new file mode 100755
index 0000000000..b50e80b750
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Yubo/DeepL_DE
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=de
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG yubo
+done
diff --git a/ryzom/server/tools/services/_startup/Yubo/DeepL_EN b/ryzom/server/tools/services/_startup/Yubo/DeepL_EN
new file mode 100755
index 0000000000..9e96b17c8a
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Yubo/DeepL_EN
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=en
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG yubo
+done
diff --git a/ryzom/server/tools/services/_startup/Yubo/DeepL_ES b/ryzom/server/tools/services/_startup/Yubo/DeepL_ES
new file mode 100755
index 0000000000..3ce48746bb
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Yubo/DeepL_ES
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=es
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG yubo
+done
diff --git a/ryzom/server/tools/services/_startup/Yubo/DeepL_FR b/ryzom/server/tools/services/_startup/Yubo/DeepL_FR
new file mode 100755
index 0000000000..c6426d41eb
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Yubo/DeepL_FR
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=fr
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG yubo
+done
diff --git a/ryzom/server/tools/services/_startup/Yubo/DeepL_RU b/ryzom/server/tools/services/_startup/Yubo/DeepL_RU
new file mode 100755
index 0000000000..898dbfb0c7
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Yubo/DeepL_RU
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Trap interrupts and exit instead of continuing the loop
+trap "echo Exited!; exit;" SIGINT SIGTERM
+
+cd ~/scripts/
+
+LANG=ru
+
+while true
+do
+ touch $SHARD_PATH/logs/chat/chat.log
+ export PYTHONPATH=$PYTHONPATH:$SHARD_PATH/tools
+ export PYTHONIOENCODING=UTF-8
+ python3 deepl.py $LANG yubo
+done
diff --git a/ryzom/server/tools/services/_startup/Yubo/RC b/ryzom/server/tools/services/_startup/Yubo/RC
new file mode 100755
index 0000000000..0ba2c2afaa
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Yubo/RC
@@ -0,0 +1,12 @@
+#!/bin/sh
+cd /home/nevrax/scripts/Rocket.Chat
+
+export INSTANCE_IP=127.0.0.1
+export NODE_ENV=production
+export ROOT_URL=https://chatdev.ryzom.com
+export MONGO_URL=mongodb://arma.ryzom.com:22110/megacorp_test?replicaSet=mc
+export PORT=3000
+export MONGO_OPLOG_URL=mongodb://arma.ryzom.com:22110/local?replicaSet=mc
+export METEOR_SETTINGS='{ "local-console-debug":true }'
+node main.js --mobile-server https://chatdev.ryzom.com
+
diff --git a/ryzom/server/tools/services/_startup/Yubo/RIBS b/ryzom/server/tools/services/_startup/Yubo/RIBS
new file mode 100755
index 0000000000..91e31f882b
--- /dev/null
+++ b/ryzom/server/tools/services/_startup/Yubo/RIBS
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+cd ~/ribs/server
+./start_server.sh
diff --git a/ryzom/server/tools/services/deepl.py b/ryzom/server/tools/services/deepl.py
index 908a16bffd..7286d3aca5 100644
--- a/ryzom/server/tools/services/deepl.py
+++ b/ryzom/server/tools/services/deepl.py
@@ -10,7 +10,7 @@
from admin_modules_itf import queryShard
mongoclient = pymongo.MongoClient("mongodb://arma.ryzom.com:22110/")
-mongodb = mongoclient["megacorp_live"]
+mongodb = mongoclient["megacorp_test"]
ryzom_chats = mongodb["ryzom_chats"]
ALL_LANGS = ["de", "en", "es", "fr", "ru"]
@@ -114,6 +114,13 @@ def follow(thefile):
domain = ""
prefix = ""
+ # suser = user.split("#")
+ # user = suser[0]
+ # if len(suser) == 2:
+ # user_cid = suser[1]
+ # else:
+ # user_cid = 0
+
print("User:", user)
print("Command:", command)
@@ -205,7 +212,7 @@ def follow(thefile):
if source == only_lang and (channel == "universe" or channel[:8] == "FACTION_" or channel[:7] == "league_"):
queryShard("ios", command+" "+user+domain+" "+channel+" \""+prefix+getLang(source)+original_text+"\" "+rocket_id, False)
-
+
if source == only_lang and channel[:6] == "guild:":
chat = { "_id": rocket_id, "username": username, "chat": getLang(source)+original_text, "chatType": "guildId", "chatId": int(channel[9:19], 16)-268435456, "date": time.time()*1000, "ig": True, "autoSub": 1}
ryzom_chats.insert_one(chat)
diff --git a/ryzom/server/tools/services/update_deepl_terms.sh b/ryzom/server/tools/services/update_deepl_terms.sh
new file mode 100644
index 0000000000..0d0a41cf82
--- /dev/null
+++ b/ryzom/server/tools/services/update_deepl_terms.sh
@@ -0,0 +1,12 @@
+for src in "de" "en" "es" "fr" "ru"
+do
+ for dst in "de" "en" "es" "fr" "ru"
+ do
+ if [ $src != $dst ]
+ then
+ echo "$src $dst"
+ wget -O deepl_terms/$src-$dst.json "http://tears.family/STABLE/deeplist/term-export.php?src=$src&dst=$dst&modules=deepl_alang;deepl_atys;deepl_gaming;deepl_homin;deepl_locations;deepl_mobs;deepl_op;deepl_organizations;deepl_others;deepl_places;deepl_r2;&format=JSON"
+ fi
+ done
+done
+
From b1c7fa91d9d19d2627dcdc1d67a2b8c3d46d4072 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Tue, 12 Dec 2023 13:54:05 +0100
Subject: [PATCH 113/194] Adding and updating tools
---
ryzom/server/tools/restore_process.sh | 12 +
.../launch_send_characters_to_web.sh | 5 +
.../send_character_to_web.sh | 16 +
.../send_characters_to_web.sh | 38 ++
ryzom/server/tools/send_logs_2_web.py | 345 ++++++++++
ryzom/server/tools/start_restore_process.sh | 1 +
ryzom/server/tools/start_sync_rrd_graphs.sh | 2 +
ryzom/server/tools/sync_rrd_graphs.sh | 13 +
ryzom/server/www/libs/nel_message.php | 592 +++++++++---------
ryzom/server/www/tools/broadcast.php | 9 +-
ryzom/server/www/tools/manage_shard.php | 23 +-
ryzom/server/www/tools/utils.php | 1 +
12 files changed, 751 insertions(+), 306 deletions(-)
create mode 100755 ryzom/server/tools/restore_process.sh
create mode 100755 ryzom/server/tools/send_characters_to_web/launch_send_characters_to_web.sh
create mode 100755 ryzom/server/tools/send_characters_to_web/send_character_to_web.sh
create mode 100755 ryzom/server/tools/send_characters_to_web/send_characters_to_web.sh
create mode 100755 ryzom/server/tools/send_logs_2_web.py
create mode 100755 ryzom/server/tools/start_restore_process.sh
create mode 100755 ryzom/server/tools/start_sync_rrd_graphs.sh
create mode 100755 ryzom/server/tools/sync_rrd_graphs.sh
diff --git a/ryzom/server/tools/restore_process.sh b/ryzom/server/tools/restore_process.sh
new file mode 100755
index 0000000000..209d86976c
--- /dev/null
+++ b/ryzom/server/tools/restore_process.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+echo Launched: $(date)
+
+cd /home/nevrax/tmp/move/
+while true
+do
+ inotifywait -e close_write from_appadmin
+ sh from_appadmin > out.log
+ echo "" > from_appadmin
+done
+
diff --git a/ryzom/server/tools/send_characters_to_web/launch_send_characters_to_web.sh b/ryzom/server/tools/send_characters_to_web/launch_send_characters_to_web.sh
new file mode 100755
index 0000000000..9a4eb7881f
--- /dev/null
+++ b/ryzom/server/tools/send_characters_to_web/launch_send_characters_to_web.sh
@@ -0,0 +1,5 @@
+#!/bin/sh -
+
+cd $SHARD_PATH/tools/send_characters_to_web
+
+nohup ./send_characters_to_web.sh &
diff --git a/ryzom/server/tools/send_characters_to_web/send_character_to_web.sh b/ryzom/server/tools/send_characters_to_web/send_character_to_web.sh
new file mode 100755
index 0000000000..24e832f468
--- /dev/null
+++ b/ryzom/server/tools/send_characters_to_web/send_character_to_web.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+SUBID=$1
+FILE=$2
+cd $SHARD_PATH/run
+
+
+mkdir -p sc2w
+
+cp $SHARD_PATH/$SUBID/$FILE sc2w/
+pdr_util -x -s/$SHARD_PATH/common/data_leveldesign/leveldesign/Game_elem/sheet_id.bin sc2w/$FILE
+rm sc2w/$FILE
+
+scp -p -C -r sc2w/* app@app.ryzom.com:/home/api/public_html/server/scripts/achievement_script/new_xml/
+rm sc2w/*
+
diff --git a/ryzom/server/tools/send_characters_to_web/send_characters_to_web.sh b/ryzom/server/tools/send_characters_to_web/send_characters_to_web.sh
new file mode 100755
index 0000000000..5276c70709
--- /dev/null
+++ b/ryzom/server/tools/send_characters_to_web/send_characters_to_web.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+TEMP_PATH=/run/user/1000/chweb
+mkdir -p $TEMP_PATH
+
+F=$SHARD_PATH/save/new_save.txt
+TP=$TEMP_PATH/toprocess.txt
+
+while inotifywait -e close_write $F; do
+ echo "File changed..."
+ mv $F $TP
+ touch $F
+
+ for SRC in `sort -u $TP`
+ do
+ SRC=$SHARD_PATH/run/$SRC
+ FN=`basename $SRC .bin`
+ echo " Xmlize $FN"
+ if [[ ${SRC} != *"offline_commands"* ]]
+ then
+ cp $SRC $TEMP_PATH/
+ pdr2xml $TEMP_PATH/$FN.bin > /dev/null
+ if [ ! -e $TEMP_PATH/$FN.xml ]
+ then
+ # TODO sent mail or rocket message
+ echo "BAD !!!"
+ exit 1
+ fi
+ fi
+ done
+ #rm $TP
+ rm $TEMP_PATH/*.bin
+ echo " Sent to app server"
+ scp -p -C -r $TEMP_PATH/* app@app.ryzom.com:/home/app/www/api/server/scripts/achievement_script/new_xml/
+
+ rm -f $TEMP_PATH/*
+done
+
diff --git a/ryzom/server/tools/send_logs_2_web.py b/ryzom/server/tools/send_logs_2_web.py
new file mode 100755
index 0000000000..7a7e1dc2df
--- /dev/null
+++ b/ryzom/server/tools/send_logs_2_web.py
@@ -0,0 +1,345 @@
+#!/usr/bin/python
+
+import os, time
+import collections
+import urllib
+import urllib2
+
+class SlackClient(object):
+
+ BASE_URL = 'https://ryzom.slack.com/api'
+
+ def __init__(self, token):
+ self.token = token
+
+ def _make_request(self, method, params):
+ """Make request to API endpoint
+
+ Note: Ignoring SSL cert validation due to intermittent failures
+ http://requests.readthedocs.org/en/latest/user/advanced/#ssl-cert-verification
+ """
+ url = "%s/%s" % (SlackClient.BASE_URL, method)
+ params['token'] = self.token
+ data = urllib.urlencode(params)
+ #result = requests.post(url, data=params, verify=False).json()
+ req = urllib2.Request(url, data)
+ result = urllib2.urlopen(req)
+ return result.read()
+
+ def chat_post_message(self, channel, text, username=None, icon=':rage2:', parse=None, link_names=None):
+ """chat.postMessage
+
+ This method posts a message to a channel.
+
+ https://api.slack.com/methods/chat.postMessage
+ """
+ method = 'chat.postMessage'
+ params = {
+ 'channel': channel,
+ 'text': text,
+ 'icon_emoji': icon,
+ }
+ if username is not None:
+ params['username'] = username
+ if parse is not None:
+ params['parse'] = parse
+ if link_names is not None:
+ params['link_names'] = link_names
+ return self._make_request(method, params)
+
+
+
+critic_commands = ("renameplayer", "position", "exchange item", "hp", "createiteminbag","createitemintmpinv","createnamediteminbag","createfullarmorset","aggro","god","money","invulnerable","changevar","addxptoskill","learnallbricks","learnallforagephrases","learnallphrases","learnbrick","learnphrase","summonpet","summon","allowsummonpet", "setfameplayer")
+
+#2013/05/17 03:34:51 INF 3073373952 newshard.ryzom.com/EGS-139 admin.cpp 3160 cbClientAdmin : ADMIN: Player ((0x0000a70890:00:00:89),Placio(atys)) will execute client admin command 'lockItem (0x0000a70890:00:00:89) bag 28 1' on target Himself
+#2013/05/17 21:25:02 INF 3073373952 newshard.ryzom.com/EGS-139 admin.cpp 3278 cbClientAdminOffline : ADMINOFFLINE: Player ((0x00006dd281:00:00:89),Kemen(atys)) will execute client admin command 'addXPToSkill (0x00006dd281:00:00:00) 500 SMOEAEM 5' on target ((0x00006dd281:00:00:00),kemen(atys))
+#2014/11/02 01:30:19 INF 4146730752 newshard.ryzom.com/EGS-132 character.cpp 10983 acceptExchange : ADMIN: CSR ((0x00007ac5b0:00:00:8b),Tamarea(Atys)) exchange ic_candy_stick.sitem Q1 with Aleeskandaro(Atys)
+admin_commands = {}
+global_commands = {}
+new_sorbot_commands = {}
+
+#data = urllib.urlencode({"t" : ".t ulukyn Running"})
+#req = urllib2.Request('http://app.ryzom.com/sorbot/index.php?'+data)
+#r = urllib2.urlopen(req)
+
+def sorbot_old(line, ctype, name, command, command_args):
+ global new_sorbot_commands
+ new_sorbot_commands.append(line)
+ if not line in sorbot_commands:
+ data = urllib.urlencode({"t" : ".t ulukyn Player ["+name+"] using '/"+ctype+" "+command+" "+command_args+"' on target: "+line.split("' on target ")[-1][25:-7]+" http://app.ryzom.com/app_admin/player_stats.php?char_name="+name+"&stat=commands"})
+ req = urllib2.Request('http://app.ryzom.com/sorbot/index.php?'+data)
+ r = urllib2.urlopen(req)
+
+def sorbot(line, ctype, name, command, command_args, target):
+ if (name == 'Moondev'):
+ return
+
+ global new_sorbot_commands, sorbot_commands
+ new_sorbot_commands.append(line)
+ if (target == "" or target[:2] == 'on'):
+ if ctype != "a" or command.lower() != "position":
+ message = ' using \'/'+ctype+' '+command+' '+command_args+'\' '+target
+ else:
+ message = ""
+ icon = ':suspect:'
+ else:
+ if ctype == " ":
+ message = ' '+command+' '+command_args+'\' with '
+ elif ctype != "a" or command.lower() != "position":
+ message = ' using \'/'+ctype+' '+command+' '+command_args+'\' on '
+ else:
+ message = ""
+ icon = ':rage2:'
+ print target, message
+ if message:
+ if not line in sorbot_commands:
+ print "SLACKIT!"
+ client = SlackClient('xoxb-56970050663-z8Q1WyKLPh1m2K4iRMR4YsPI')
+ print "RESPONSE:", client.chat_post_message('command-logs', line[:20]+message, 'EGS', icon)
+ print "SLACK: ", line[:20]+message
+ else:
+ print "USED : ", line
+ else:
+ print "----"
+
+
+def writelogs(admin_commands, is_current=False, base_path="logged/"):
+ global global_commands
+ base = "logs/commands/"+base_path
+ for player, commands in admin_commands.items():
+ s_player = str(player)
+ if len(s_player) < 2:
+ s_player = "0"+s_player
+ if len(s_player) < 3:
+ s_player = "0"+s_player
+
+ fid = s_player[-1]
+ if not os.path.isdir(base):
+ os.mkdir(base)
+ if not os.path.isdir(base+fid):
+ os.mkdir(base+fid)
+ fid2 = s_player[-2]
+ if not os.path.isdir(base+fid+"/"+fid2):
+ os.mkdir(base+fid+"/"+fid2)
+ fid3 = s_player[-3]
+ if not os.path.isdir(base+fid+"/"+fid2+"/"+fid3):
+ os.mkdir(base+fid+"/"+fid2+"/"+fid3)
+ if not os.path.isdir(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)):
+ os.mkdir(base+fid+"/"+fid2+"/"+fid3+"/"+str(player))
+ for mouth, command in commands.items():
+ if mouth != "name" and mouth != "total":
+ if is_current:
+ open(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)+"/current.log", "w").write(command+"\n")
+ else:
+ if os.path.isfile(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)+"/"+mouth.replace("/", "_")+".log"):
+ previous = open(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)+"/"+mouth.replace("/", "_")+".log").read()
+ else:
+ previous = ""
+ open(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)+"/"+mouth.replace("/", "_")+".log", "w").write(command+"\n"+previous)
+
+ base = "logs/commands/"
+ for mouth, command in global_commands.items():
+ if not os.path.isdir(base+"global"):
+ os.mkdir(base+"global")
+ if is_current:
+ open(base+"global/current.log", "w").write(command+"\n")
+ else:
+ if os.path.isfile(base+"global/"+mouth.replace("/", "_")+".log"):
+ previous = open(base+"global/"+mouth.replace("/", "_")+".log").read()
+ else:
+ previsous = ""
+ open(base+"global/"+mouth.replace("/", "_")+".log", "w").write(command+"\n"+previous)
+
+def parse(filename):
+ global global_commands, admin_commands, sorbot_commands, new_sorbot_commands
+ file = open(filename).read().split("\n")
+ last_commands = {}
+ for line in file:
+ sline = line.split(" ")
+# if len(sline) >= 10 and ((sline[9] == "ADMIN:" and sline[10] == "Player") or sline[9] == "ADMINOFFLINE:"):
+ if "cbClientAdmin : ADMIN: " in line or "ADMINOFFLINE" in line or "ADMIN: CSR" in line :
+ if "tried to execute a no valid client admin command" in line :
+ continue
+ sline = line.split("' on target ")
+ #Only get text before "on target"
+ real_line = sline[0]
+ sline = real_line.split(" ")
+ day = sline[0]
+ mouth = day[:4]+day[5:7]
+ hour = sline[1]
+ player = sline[11]
+ splayer = player.split(",")
+ if splayer[0][4:-10] != '':
+ cid = int(splayer[0][4:-10], 16)
+ else:
+ cid = 0
+ if (len(splayer) == 2):
+ name = splayer[1][:-7]
+ else:
+ name = ""
+
+
+ if "ADMIN: CSR" in line :
+ print "Exchange :", sline
+ command = "exchange item"
+ command_args = sline[13]+" "+sline[14]
+ target = sline[16]
+ target_name = sline[16].split("(")[0]
+ ctype = " "
+ else:
+ #Get text between ' and '
+ sline = real_line.split("'")
+ full_command = "'".join(sline[1:])
+
+ if full_command[-1] == "'":
+ full_command = full_command[:-1]
+ scommand = full_command.split(" ")
+ command = scommand[0]
+ command_args = " ".join(scommand[2:])
+
+ if (len(scommand) > 1):
+ target = scommand[1]
+ else:
+ target = ""
+ target_name = ""
+ ctype = "c"
+ if target == "(0x0000000000:ff:00:00)":
+ target = ""
+ target_name = "on Nothing"
+ elif target[:-6] == "(0x"+splayer[0][4:-10]+":00:":
+ target = ""
+ target_name = ""
+ ctype = "a"
+ elif target[-6:-4] != "00" :
+ target = ""
+ target_name = "on a Mob or Npc"
+ ctype = "b"
+ elif len(target) > 20 :
+ target = "#"+str(int(target[4:-10], 16))
+ target_name = line.split(",")[-1].split("(")[0].capitalize()
+ ctype = "b"
+ else:
+ ctype = "a"
+
+ if line[100:120] == "ADMINOFFLINE: Player":
+ ctype = "c"
+ sorbot(line, ctype, name, command, command_args, target_name)
+
+ if not cid in admin_commands:
+ admin_commands[cid] = {}
+ admin_commands[cid]["total"] = 0
+ admin_commands[cid]["name"] = name
+ if not mouth in admin_commands[cid]:
+ admin_commands[cid][mouth] = ""
+ admin_commands[cid][mouth] = "|".join((day, hour, ctype, command, target, command_args))+"\n" + admin_commands[cid][mouth]
+ admin_commands[cid]["total"] += 1
+
+# print command.lower()
+ if command.lower() in critic_commands:
+ print command, command_args
+ if not name in last_commands or not command.lower() in ("addxptoskill","learnbrick","learnphrase"):
+ print "Setting..."
+ last_commands[name] = [None, None, None, None, None]
+ last_commands[name][0] = command
+ last_commands[name][1] = 1
+ last_commands[name][2] = [line, ctype, name, command, command_args, target_name]
+ last_commands[name][3] = "|".join((str(cid), name, day, hour, ctype, command, target, command_args))
+ last_commands[name][4] = mouth
+
+ if command.lower() in ("addxptoskill","learnbrick","learnphrase") and command == last_commands[name][0]:
+ print "+1"
+ last_commands[name][1] += 1
+ last_commands[name][2] = [line, ctype, name, command, command_args, target_name]
+ last_commands[name][3] = "|".join((str(cid), name, day, hour, ctype, command, target, command_args))
+ last_commands[name][4] = mouth
+ else :
+ if last_commands[name][1] > 1 :
+ print "More than 1 time"
+ last_commands[name][2][4] = "*"+str(last_commands[name][1])+" times*"
+ last_commands[name][2][0] += "*"+str(last_commands[name][1])+" times*"
+ else:
+ last_commands[name][2][4] = command_args
+ sorbot(last_commands[name][2][0], last_commands[name][2][1], last_commands[name][2][2], last_commands[name][2][3], last_commands[name][2][4], last_commands[name][2][5])
+ print "Sorbot: ", last_commands[name][2], last_commands[name][1]
+ if not last_commands[name][4] in global_commands:
+ global_commands[last_commands[name][4]] = ""
+ global_commands[last_commands[name][4]] = last_commands[name][3]+"\n"+global_commands[last_commands[name][4]]
+ del(last_commands[name])
+
+
+ for name, last_command in last_commands.items():
+ if last_command[1] > 1:
+ last_command[2][4] += " ["+str(last_command[1])+" times the same command]"
+ #last_command[2][0] += "*"+str(last_command[1])+" times*"
+ sorbot(last_command[2][0], last_command[2][1], last_command[2][2], last_command[2][3], last_command[2][4], last_command[2][5])
+ print "Sorbot ", last_command[2], last_command[1]
+ if not last_command[4] in global_commands:
+ global_commands[last_command[4]] = ""
+ global_commands[mouth] = last_command[3]+"\n"+global_commands[last_command[4]]
+
+
+BASE_PATH = "logs/commands/"
+
+if not os.path.isdir(BASE_PATH):
+ os.mkdir(BASE_PATH)
+
+if not os.path.isdir(BASE_PATH+"backup"):
+ os.mkdir(BASE_PATH+"backup")
+
+if not os.path.isdir(BASE_PATH+"global"):
+ os.mkdir(BASE_PATH+"global")
+
+
+if not os.path.isfile(BASE_PATH+"last_log"):
+ open(BASE_PATH+"last_log", "w").write("0")
+
+if not os.path.isfile("cache/commands"):
+ open("cache/commands", "w").write("")
+
+
+last_log = int(open(BASE_PATH+"last_log").read())
+sorbot_commands = []
+sorbot_commands = open("cache/commands").read().split("\n")
+new_sorbot_commands = []
+
+print "Last Log with date : ", last_log
+files = os.listdir("logs/")
+files.sort()
+higher_time = last_log
+for filename in files:
+ if len(filename) > 25 and filename.split(".")[1] == "log" and filename.split(".")[0][:21] == "entities_game_service":
+ if int(os.path.getmtime("logs/"+filename)) > last_log:
+ if int(os.path.getmtime("logs/"+filename)) > higher_time:
+ higher_time = os.path.getmtime("logs/"+filename)
+ print filename, " NEED PARSING"
+ parse("logs/"+filename)
+
+logged_players = len(admin_commands)
+
+print "Write logs..."
+writelogs(admin_commands, False)
+
+admin_commands = {}
+global_commands = {}
+filename = "entities_game_service.log"
+print filename, " "
+parse("logs/"+filename)
+logged_players += len(admin_commands)
+open(BASE_PATH+"global/current.log", "w").write("")
+writelogs(admin_commands, True, "current/")
+
+open(BASE_PATH+"last_log", "w").write(str(int(higher_time)))
+open("cache/commands", 'w').write("\n".join(new_sorbot_commands))
+
+
+print "Send logs to web..."
+os.system("scp -r "+BASE_PATH+"logged/ nevrax@newweb.ryzom.com:/mnt/tmp/cache/ > /dev/null")
+print "Backup..."
+os.system("cp -r "+BASE_PATH+"logged/* "+BASE_PATH+"backup")
+print "Clean..."
+os.system("rm -rf "+BASE_PATH+"logged/*")
+print "Send current..."
+#os.system("scp -r current/* nevrax@newweb.ryzom.com:/mnt/tmp/cache/logged/ > /dev/null")
+print "Done!"
+
+#os.system("rsync -avz -e ssh logged/ nevrax@web.ryzom.com:/mnt/tmp/cache/logged/")
diff --git a/ryzom/server/tools/start_restore_process.sh b/ryzom/server/tools/start_restore_process.sh
new file mode 100755
index 0000000000..9bffedf627
--- /dev/null
+++ b/ryzom/server/tools/start_restore_process.sh
@@ -0,0 +1 @@
+nohup /bin/sh $SHARD_PATH/scripts/restore_process.sh &
diff --git a/ryzom/server/tools/start_sync_rrd_graphs.sh b/ryzom/server/tools/start_sync_rrd_graphs.sh
new file mode 100755
index 0000000000..2fe8482282
--- /dev/null
+++ b/ryzom/server/tools/start_sync_rrd_graphs.sh
@@ -0,0 +1,2 @@
+cd $SHARD_PATH/tools
+nohup /bin/sh sync_rrd_graphs.sh &
diff --git a/ryzom/server/tools/sync_rrd_graphs.sh b/ryzom/server/tools/sync_rrd_graphs.sh
new file mode 100755
index 0000000000..66ff5c7833
--- /dev/null
+++ b/ryzom/server/tools/sync_rrd_graphs.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+echo Launched: $(date)
+while true
+do
+ cd $SHARD_PATH/save/rrd_graphs
+
+ rsync -t * app@app.ryzom.com:/home/admin.atrium/rrd_graphs/
+
+ # display a groovy message
+ echo Finished rsync: $(date)
+ sleep 60
+done
diff --git a/ryzom/server/www/libs/nel_message.php b/ryzom/server/www/libs/nel_message.php
index 65a415ddf0..d8669f1e44 100644
--- a/ryzom/server/www/libs/nel_message.php
+++ b/ryzom/server/www/libs/nel_message.php
@@ -1,296 +1,296 @@
-InputStream = false;
- $this->Pos = 0;
- $this->Buffer = "";
- debug("A : ".gettype($this->Buffer)." ");
- }
-
- function setBuffer ($Buffer)
- {
- $this->InputStream = true;
- $this->Buffer = $Buffer;
- $this->Pos = 0;
- }
-
- function isReading () { return $this->InputStream; }
-
- function serialUInt8 (&$val)
- {
- if ($this->isReading())
- {
- $val = ord($this->Buffer[$this->Pos++]);
- debug(sprintf ("read uint8 '%d' \n", $val));
- }
- else
- {
- debug("B".gettype($this->Buffer)." ");
- debug(sprintf ("write uint8 Buffer size before = %u \n", strlen($this->Buffer)));
- $this->Buffer = $this->Buffer . chr($val & 0xFF);
- $this->Pos++;
- debug("C".gettype($this->Buffer)." ");
- debug(sprintf ("write uint8 '%d' %d \n", $val, $this->Pos));
- debug(sprintf ("write uint8 Buffer size after = %u \n", strlen($this->Buffer)));
- }
- }
-
- function serialUInt32 (&$val)
- {
- if ($this->isReading())
- {
- $val = ord($this->Buffer[$this->Pos++]);
- $val += ord($this->Buffer[$this->Pos++])*256;
- $val += ord($this->Buffer[$this->Pos++])*(double)256*256;
- $val += ord($this->Buffer[$this->Pos++])*(double)256*256*256;
- debug(sprintf ("read uint32 '%d' \n", $val));
-// var_dump($val);
- }
- else
- {
- debug("D".gettype($this->Buffer)." ");
- $this->Buffer .= chr($val & 0xFF);
- $this->Buffer .= chr(($val>>8) & 0xFF);
- $this->Buffer .= chr(($val>>16) & 0xFF);
- $this->Buffer .= chr(($val>>24) & 0xFF);
- $this->Pos += 4;
- debug("E".gettype($this->Buffer)." ");
- debug(sprintf ("write uint32 '%d' %d \n", $val, $this->Pos));
- }
- }
-
- function serialString (&$val)
- {
- if ($this->isReading())
- {
- $this->serialUInt32($size);
- debug(sprintf ("read string : size = %u \n", $size));
- $val = substr ($this->Buffer, $this->Pos, $size);
- debug(sprintf ("read string '%s' \n", $val));
- $this->Pos += strlen($val);
- }
- else
- {
- $valLen = strlen($val);
- $this->serialUInt32($valLen);
- $this->Buffer .= $val;
- $this->Pos += $valLen;
- debug(sprintf ("write string '%s' %d \n", $val, $this->Pos));
- }
- }
- function serialEnum (&$val)
- {
- if ($this->isReading())
- {
- $intValue = 0;
- $this->serialUInt32($intValue);
- $val->fromInt((int)$intValue);
- debug(sprintf ("read enum '%s' \n", $val->toString()));
- }
- else
- {
- $intValue = $val->toInt();
- $this->serialUInt32($intValue);
- debug(sprintf ("write enum '%s' %d \n", $val->toString(), $this->Pos));
- }
- }
- }
-
- class CMessage extends CMemStream
- {
- var $MsgName;
-
- function CMessage()
- {
- $this->CMemStream();
- }
-
- function setName($name)
- {
- $this->MsgName = $name;
- }
- }
-
- class CCallbackClient
- {
- var $ConSock = false;
-
- var $MsgNum = 0;
-
- function connect($addr, $port, &$res)
- {
- global $SockTimeOut;
-
- debug(sprintf("Connect "));
- $this->MsgNum = 0;
-
- $this->ConSock = fsockopen ($addr, $port, $errno, $errstr, $SockTimeOut);
- debug("H".gettype($this->ConSock)." ");
-
- if (!$this->ConSock)
- {
- $res = "Can't connect to the callback server '$addr:$port' ($errno: $errstr)";
-
- return false;
- }
- else
- {
- // set time out on the socket to 2 secondes
- stream_set_timeout($this->ConSock, $SockTimeOut);
- $res = "";
- return true;
- }
- }
-
- function close()
- {
- if ($this->ConSock)
- {
- fclose($this->ConSock);
- debug(sprintf("Close "));
- }
- else
- debug(sprintf("Already Closed ! "));
- }
-
- function sendMessage(&$message)
- {
- if (!$this->ConSock)
- {
- debug(sprintf ("Socket is not valid\n"));
- return false;
- }
- debug(sprintf ("sendMessage : message Buffer is '%d' \n", $message->Pos));
- debug(sprintf ("sendMessage : message Buffer is '%d' \n", strlen($message->Buffer)));
- $hd = new CMemStream;
- debug(sprintf("SendMessage number %u ", $this->MsgNum));
- $hd->serialUInt32 ($this->MsgNum); // number the packet
- $this->MsgNum += 1;
- debug(sprintf("After SendMessage, number %u ", $this->MsgNum));
- $messageType = 0;
- $hd->serialUInt8 ($messageType);
- $hd->serialString ($message->MsgName);
-
- debug(sprintf ("sendMessage : header size is '%d' \n", $hd->Pos));
-
-// $sb .= $message->Buffer;
-
- $size = $hd->Pos + $message->Pos;
- $Buffer = (string) chr(($size>>24)&0xFF);
- $Buffer .= chr(($size>>16)&0xFF);
- $Buffer .= chr(($size>>8)&0xFF);
- $Buffer .= chr($size&0xFF);
- debug( "E".gettype($hd->Buffer)." ");
- debug("F".gettype($message->Buffer)." ");
- $Buffer .= (string) $hd->Buffer;
- $Buffer .= (string) $message->Buffer;
-
- debug("G".gettype($this->ConSock)." ");
-
- if (!fwrite ($this->ConSock, $Buffer))
- {
- debug(sprintf ("Error writing to socket\n"));
- return false;
- }
- debug(sprintf ("sent packet size '%d' (written size = %d) \n", strlen($Buffer), $size));
- fflush ($this->ConSock);
-
- return true;
- }
-
- function waitMessage()
- {
- if (!$this->ConSock)
- {
- debug(sprintf ("Socket is not valid\n"));
- return false;
- }
-
-
- $size = 0;
- $val = fread ($this->ConSock, 1);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size = ord($val) << 24;
- $val = fread ($this->ConSock, 1);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size = ord($val) << 16;
- $val = fread ($this->ConSock, 1);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size += ord($val) << 8;
- $val = fread ($this->ConSock, 1);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size += ord($val);
- debug(sprintf ("receive packet size '%d' \n", $size));
- $fake = fread ($this->ConSock, 5);
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- $size -= 5; // remove the fake
-
- $Buffer = "";
- while ($size > 0 && strlen($Buffer) != $size)
- {
- $Buffer .= fread ($this->ConSock, $size - strlen($Buffer));
- $info = stream_get_meta_data($this->ConSock);
- if ($info['timed_out'])
- {
- debug('Connection timed out!');
- return false;
- }
- }
- $msgin = new CMemStream;
- $msgin->setBuffer ($Buffer);
-
- // decode msg name
- $msgin->serialString($name);
-
- debug(sprintf("Message name = '%s' ", $name));
- $message = new CMessage;
- $message->setBuffer(substr($msgin->Buffer, $msgin->Pos));
- $message->setName($name);
-
- debug(sprintf("In message name = '%s' ", $message->MsgName));
-
- return $message;
- }
- }
-
-?>
+InputStream = false;
+ $this->Pos = 0;
+ $this->Buffer = "";
+ debug("A : ".gettype($this->Buffer)." ");
+ }
+
+ function setBuffer ($Buffer)
+ {
+ $this->InputStream = true;
+ $this->Buffer = $Buffer;
+ $this->Pos = 0;
+ }
+
+ function isReading () { return $this->InputStream; }
+
+ function serialUInt8 (&$val)
+ {
+ if ($this->isReading())
+ {
+ $val = ord($this->Buffer{$this->Pos++});
+ debug(sprintf ("read uint8 '%d' \n", $val));
+ }
+ else
+ {
+ debug("B".gettype($this->Buffer)." ");
+ debug(sprintf ("write uint8 Buffer size before = %u \n", strlen($this->Buffer)));
+ $this->Buffer = $this->Buffer . chr($val & 0xFF);
+ $this->Pos++;
+ debug("C".gettype($this->Buffer)." ");
+ debug(sprintf ("write uint8 '%d' %d \n", $val, $this->Pos));
+ debug(sprintf ("write uint8 Buffer size after = %u \n", strlen($this->Buffer)));
+ }
+ }
+
+ function serialUInt32 (&$val)
+ {
+ if ($this->isReading())
+ {
+ $val = ord($this->Buffer{$this->Pos++});
+ $val += ord($this->Buffer{$this->Pos++})*256;
+ $val += ord($this->Buffer{$this->Pos++})*(double)256*256;
+ $val += ord($this->Buffer{$this->Pos++})*(double)256*256*256;
+ debug(sprintf ("read uint32 '%d' \n", $val));
+// var_dump($val);
+ }
+ else
+ {
+ debug("D".gettype($this->Buffer)." ");
+ $this->Buffer .= chr($val & 0xFF);
+ $this->Buffer .= chr(($val>>8) & 0xFF);
+ $this->Buffer .= chr(($val>>16) & 0xFF);
+ $this->Buffer .= chr(($val>>24) & 0xFF);
+ $this->Pos += 4;
+ debug("E".gettype($this->Buffer)." ");
+ debug(sprintf ("write uint32 '%d' %d \n", $val, $this->Pos));
+ }
+ }
+
+ function serialString (&$val)
+ {
+ if ($this->isReading())
+ {
+ $this->serialUInt32($size);
+ debug(sprintf ("read string : size = %u \n", $size));
+ $val = substr ($this->Buffer, $this->Pos, $size);
+ debug(sprintf ("read string '%s' \n", $val));
+ $this->Pos += strlen($val);
+ }
+ else
+ {
+ $valLen = strlen($val);
+ $this->serialUInt32($valLen);
+ $this->Buffer .= $val;
+ $this->Pos += $valLen;
+ debug(sprintf ("write string '%s' %d \n", $val, $this->Pos));
+ }
+ }
+ function serialEnum (&$val)
+ {
+ if ($this->isReading())
+ {
+ $intValue = 0;
+ $this->serialUInt32($intValue);
+ $val->fromInt((int)$intValue);
+ debug(sprintf ("read enum '%s' \n", $val->toString()));
+ }
+ else
+ {
+ $intValue = $val->toInt();
+ $this->serialUInt32($intValue);
+ debug(sprintf ("write enum '%s' %d \n", $val->toString(), $this->Pos));
+ }
+ }
+ }
+
+ class CMessage extends CMemStream
+ {
+ var $MsgName;
+
+ function CMessage()
+ {
+ $this->CMemStream();
+ }
+
+ function setName($name)
+ {
+ $this->MsgName = $name;
+ }
+ }
+
+ class CCallbackClient
+ {
+ var $ConSock = false;
+
+ var $MsgNum = 0;
+
+ function connect($addr, $port, &$res)
+ {
+ global $SockTimeOut;
+
+ debug(sprintf("Connect "));
+ $this->MsgNum = 0;
+
+ $this->ConSock = fsockopen ($addr, $port, $errno, $errstr, $SockTimeOut);
+ debug("H".gettype($this->ConSock)." ");
+
+ if (!$this->ConSock)
+ {
+ $res = "Can't connect to the callback server '$addr:$port' ($errno: $errstr)";
+
+ return false;
+ }
+ else
+ {
+ // set time out on the socket to 2 secondes
+ stream_set_timeout($this->ConSock, $SockTimeOut);
+ $res = "";
+ return true;
+ }
+ }
+
+ function close()
+ {
+ if ($this->ConSock)
+ {
+ fclose($this->ConSock);
+ debug(sprintf("Close "));
+ }
+ else
+ debug(sprintf("Already Closed ! "));
+ }
+
+ function sendMessage(&$message)
+ {
+ if (!$this->ConSock)
+ {
+ debug(sprintf ("Socket is not valid\n"));
+ return false;
+ }
+ debug(sprintf ("sendMessage : message Buffer is '%d' \n", $message->Pos));
+ debug(sprintf ("sendMessage : message Buffer is '%d' \n", strlen($message->Buffer)));
+ $hd = new CMemStream;
+ debug(sprintf("SendMessage number %u ", $this->MsgNum));
+ $hd->serialUInt32 ($this->MsgNum); // number the packet
+ $this->MsgNum += 1;
+ debug(sprintf("After SendMessage, number %u ", $this->MsgNum));
+ $messageType = 0;
+ $hd->serialUInt8 ($messageType);
+ $hd->serialString ($message->MsgName);
+
+ debug(sprintf ("sendMessage : header size is '%d' \n", $hd->Pos));
+
+// $sb .= $message->Buffer;
+
+ $size = $hd->Pos + $message->Pos;
+ $Buffer = (string) chr(($size>>24)&0xFF);
+ $Buffer .= chr(($size>>16)&0xFF);
+ $Buffer .= chr(($size>>8)&0xFF);
+ $Buffer .= chr($size&0xFF);
+ debug( "E".gettype($hd->Buffer)." ");
+ debug("F".gettype($message->Buffer)." ");
+ $Buffer .= (string) $hd->Buffer;
+ $Buffer .= (string) $message->Buffer;
+
+ debug("G".gettype($this->ConSock)." ");
+
+ if (!fwrite ($this->ConSock, $Buffer))
+ {
+ debug(sprintf ("Error writing to socket\n"));
+ return false;
+ }
+ debug(sprintf ("sent packet size '%d' (written size = %d) \n", strlen($Buffer), $size));
+ fflush ($this->ConSock);
+
+ return true;
+ }
+
+ function waitMessage()
+ {
+ if (!$this->ConSock)
+ {
+ debug(sprintf ("Socket is not valid\n"));
+ return false;
+ }
+
+
+ $size = 0;
+ $val = fread ($this->ConSock, 1);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size = ord($val) << 24;
+ $val = fread ($this->ConSock, 1);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size = ord($val) << 16;
+ $val = fread ($this->ConSock, 1);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size += ord($val) << 8;
+ $val = fread ($this->ConSock, 1);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size += ord($val);
+ debug(sprintf ("receive packet size '%d' \n", $size));
+ $fake = fread ($this->ConSock, 5);
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ $size -= 5; // remove the fake
+
+ $Buffer = "";
+ while ($size > 0 && strlen($Buffer) != $size)
+ {
+ $Buffer .= fread ($this->ConSock, $size - strlen($Buffer));
+ $info = stream_get_meta_data($this->ConSock);
+ if ($info['timed_out'])
+ {
+ debug('Connection timed out!');
+ return false;
+ }
+ }
+ $msgin = new CMemStream;
+ $msgin->setBuffer ($Buffer);
+
+ // decode msg name
+ $msgin->serialString($name);
+
+ debug(sprintf("Message name = '%s' ", $name));
+ $message = new CMessage;
+ $message->setBuffer(substr($msgin->Buffer, $msgin->Pos));
+ $message->setName($name);
+
+ debug(sprintf("In message name = '%s' ", $message->MsgName));
+
+ return $message;
+ }
+ }
+
+?>
diff --git a/ryzom/server/www/tools/broadcast.php b/ryzom/server/www/tools/broadcast.php
index f9384a7512..ac545ace5b 100644
--- a/ryzom/server/www/tools/broadcast.php
+++ b/ryzom/server/www/tools/broadcast.php
@@ -12,11 +12,7 @@
case 'live':
sendToChat('is starting the Shard Restart Sequence...', '#pub-general', $ShardName, ':recycle:');
sendToChat('is broadcasting to players', '#pub-general', $ShardName, ':loudspeaker:');
- sendToChat('Le serveur va redémarrer dans 10 minutes. Merci de vous déconnecter en lieu sûr.', '#pub-uni-fr', 'Stagiaire d\''.$ShardName, ':loudspeaker:');
- sendToChat('Der Server wird in 10 Minuten heruntergefahren. Findet eine sichere Stelle und logt aus.', '#pub-uni-de', $ShardName.'\' Praktikantin', ':loudspeaker:');
- sendToChat('The shard will go down in 10 minutes. Please find a safe location and log out.', '#pub-uni-en', $ShardName.'\' Intern', ':loudspeaker:');
- sendToChat('The shard will go down in 10 minutes. Please find a safe location and log out.', '#pub-uni', $ShardName.' Intern', ':loudspeaker:');
- sendToChat('El servidor se cerrará en 10 minutos. Por favor, encuentre un lugar seguro y cierre la sesión.', '#pub-uni-es', 'Pasante de '.$ShardName, ':loudspeaker:');
+ sendToChat('The shard will go down in 10 minutes. Please find a safe location and log out.', '#pub-universe', $ShardName.'\' Intern', ':loudspeaker:');
if (!$message) {
$message = '@{F00F}[de]Der Server wird in $minutes$ Minuten heruntergefahren.\n@{FF0F}Findet eine sichere Stelle und logt aus.';
@@ -24,8 +20,9 @@
$message .= '[fr]Le serveur va redémarrer dans $minutes$ minutes.\n@{FF0F}Merci de vous déconnecter en lieu sûr.';
$message .= '[es]El servidor se cerrará en $minutos$ minutos.\n@{FF0F}Por favor, encuentre un lugar seguro y cierre la sesión.';
}
+
@queryShard('egs', 'broadcast repeat=11 every=60 '.$message);
- $timer=60;
+ $timer = 60;
break;
case 'dev':
diff --git a/ryzom/server/www/tools/manage_shard.php b/ryzom/server/www/tools/manage_shard.php
index 6bc74e45bc..f09df32460 100644
--- a/ryzom/server/www/tools/manage_shard.php
+++ b/ryzom/server/www/tools/manage_shard.php
@@ -9,16 +9,28 @@
switch($command) {
+ case 'test':
+ echo 'TEST...';
+ echo sendToChat('Atys are processing a reboot...', '#pub-general', 'Stagiaire d\'Atys', ':upside_down:');
+ break;
+
case 'lock':
@queryShard('su', 'rsm.setWSState '. $ShardId .' RESTRICTED ""');
break;
+ case 'stopEgs':
+ @queryShard('egs', 'stopService', 'stopService', true, true);
+ break;
+
+
case 'open':
+ @queryShard('su', 'rsm.setWSState '. $ShardId .' OPEN ""');
if ($option == 'players') {
- sendToChat('The shard is open for o/_--[ EVERYBODY ]--_\o', '#pub-uni', 'Stagiaire d\''.$AS_ShardName, ':tada:');
- sendToChat('is now open to ALL players \o/', '#pub-general', $AS_ShardName, ':tada:');
+ file_put_contents('/home/nevrax/www/login/server_open_status', 'ds_open'."\n");
+ sendToChat('The shard is open for o/_--[ EVERYBODY ]--_\o', '#pub-uni', 'Stagiaire d\''.$ShardName, ':tada:');
+ sendToChat('is now open to ALL players \o/', '#pub-general', $ShardName, ':tada:');
} else {
- @queryShard('su', 'rsm.setWSState '. $ShardId .' OPEN ""');
+ file_put_contents('/home/nevrax/www/login/server_open_status', 'ds_restricted'."\n");
if ($option != 'silent') {
sendToChat('The shard is open for RYZOM TEAM', '#pub-uni', $ShardName.'\' Intern', ':raised_hands:');
sendToChat('is now in the hands of the Customer Support Team.', '#pub-general', $ShardName, ':raised_hands:');
@@ -29,14 +41,17 @@
case 'kick_them_all':
$ret = queryShard('egs', 'displayPlayers');
$out = explode("\n", $ret['raw'][0]);
+ $have_player = false;
foreach($out as $i => $id) {
$sid = explode(' ', $id);
if ($sid[0] == 'Player:') {
queryShard('egs', 'disconnectPlayer '.$sid[1], false);
echo $sid[3].' has been kicked!'."\n";
+ $have_player = true;
}
}
- sendToChat('is killing all services...', '#pub-general', $ShardName, ':broken_heart:');
+ if ($have_player)
+ sendToChat('is killing all services...', '#pub-general', $ShardName, ':broken_heart:');
break;
}
diff --git a/ryzom/server/www/tools/utils.php b/ryzom/server/www/tools/utils.php
index edaab0228e..33ffe5dc05 100644
--- a/ryzom/server/www/tools/utils.php
+++ b/ryzom/server/www/tools/utils.php
@@ -5,6 +5,7 @@
function sendToChat($message, $channel='', $username='', $icon='') {
global $RocketChatHook;
+ global $RocketChatServer;
if ($RocketChatHook) {
$data = json_encode(array(
'channel' => $channel,
From 9e875a8a0b96d6eb1d061cb8661b3a60774bbcdf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Tue, 12 Dec 2023 13:59:14 +0100
Subject: [PATCH 114/194] Removed useless file
---
ryzom/server/tools/send_logs_2_web.py | 345 --------------------------
1 file changed, 345 deletions(-)
delete mode 100755 ryzom/server/tools/send_logs_2_web.py
diff --git a/ryzom/server/tools/send_logs_2_web.py b/ryzom/server/tools/send_logs_2_web.py
deleted file mode 100755
index 7a7e1dc2df..0000000000
--- a/ryzom/server/tools/send_logs_2_web.py
+++ /dev/null
@@ -1,345 +0,0 @@
-#!/usr/bin/python
-
-import os, time
-import collections
-import urllib
-import urllib2
-
-class SlackClient(object):
-
- BASE_URL = 'https://ryzom.slack.com/api'
-
- def __init__(self, token):
- self.token = token
-
- def _make_request(self, method, params):
- """Make request to API endpoint
-
- Note: Ignoring SSL cert validation due to intermittent failures
- http://requests.readthedocs.org/en/latest/user/advanced/#ssl-cert-verification
- """
- url = "%s/%s" % (SlackClient.BASE_URL, method)
- params['token'] = self.token
- data = urllib.urlencode(params)
- #result = requests.post(url, data=params, verify=False).json()
- req = urllib2.Request(url, data)
- result = urllib2.urlopen(req)
- return result.read()
-
- def chat_post_message(self, channel, text, username=None, icon=':rage2:', parse=None, link_names=None):
- """chat.postMessage
-
- This method posts a message to a channel.
-
- https://api.slack.com/methods/chat.postMessage
- """
- method = 'chat.postMessage'
- params = {
- 'channel': channel,
- 'text': text,
- 'icon_emoji': icon,
- }
- if username is not None:
- params['username'] = username
- if parse is not None:
- params['parse'] = parse
- if link_names is not None:
- params['link_names'] = link_names
- return self._make_request(method, params)
-
-
-
-critic_commands = ("renameplayer", "position", "exchange item", "hp", "createiteminbag","createitemintmpinv","createnamediteminbag","createfullarmorset","aggro","god","money","invulnerable","changevar","addxptoskill","learnallbricks","learnallforagephrases","learnallphrases","learnbrick","learnphrase","summonpet","summon","allowsummonpet", "setfameplayer")
-
-#2013/05/17 03:34:51 INF 3073373952 newshard.ryzom.com/EGS-139 admin.cpp 3160 cbClientAdmin : ADMIN: Player ((0x0000a70890:00:00:89),Placio(atys)) will execute client admin command 'lockItem (0x0000a70890:00:00:89) bag 28 1' on target Himself
-#2013/05/17 21:25:02 INF 3073373952 newshard.ryzom.com/EGS-139 admin.cpp 3278 cbClientAdminOffline : ADMINOFFLINE: Player ((0x00006dd281:00:00:89),Kemen(atys)) will execute client admin command 'addXPToSkill (0x00006dd281:00:00:00) 500 SMOEAEM 5' on target ((0x00006dd281:00:00:00),kemen(atys))
-#2014/11/02 01:30:19 INF 4146730752 newshard.ryzom.com/EGS-132 character.cpp 10983 acceptExchange : ADMIN: CSR ((0x00007ac5b0:00:00:8b),Tamarea(Atys)) exchange ic_candy_stick.sitem Q1 with Aleeskandaro(Atys)
-admin_commands = {}
-global_commands = {}
-new_sorbot_commands = {}
-
-#data = urllib.urlencode({"t" : ".t ulukyn Running"})
-#req = urllib2.Request('http://app.ryzom.com/sorbot/index.php?'+data)
-#r = urllib2.urlopen(req)
-
-def sorbot_old(line, ctype, name, command, command_args):
- global new_sorbot_commands
- new_sorbot_commands.append(line)
- if not line in sorbot_commands:
- data = urllib.urlencode({"t" : ".t ulukyn Player ["+name+"] using '/"+ctype+" "+command+" "+command_args+"' on target: "+line.split("' on target ")[-1][25:-7]+" http://app.ryzom.com/app_admin/player_stats.php?char_name="+name+"&stat=commands"})
- req = urllib2.Request('http://app.ryzom.com/sorbot/index.php?'+data)
- r = urllib2.urlopen(req)
-
-def sorbot(line, ctype, name, command, command_args, target):
- if (name == 'Moondev'):
- return
-
- global new_sorbot_commands, sorbot_commands
- new_sorbot_commands.append(line)
- if (target == "" or target[:2] == 'on'):
- if ctype != "a" or command.lower() != "position":
- message = ' using \'/'+ctype+' '+command+' '+command_args+'\' '+target
- else:
- message = ""
- icon = ':suspect:'
- else:
- if ctype == " ":
- message = ' '+command+' '+command_args+'\' with '
- elif ctype != "a" or command.lower() != "position":
- message = ' using \'/'+ctype+' '+command+' '+command_args+'\' on '
- else:
- message = ""
- icon = ':rage2:'
- print target, message
- if message:
- if not line in sorbot_commands:
- print "SLACKIT!"
- client = SlackClient('xoxb-56970050663-z8Q1WyKLPh1m2K4iRMR4YsPI')
- print "RESPONSE:", client.chat_post_message('command-logs', line[:20]+message, 'EGS', icon)
- print "SLACK: ", line[:20]+message
- else:
- print "USED : ", line
- else:
- print "----"
-
-
-def writelogs(admin_commands, is_current=False, base_path="logged/"):
- global global_commands
- base = "logs/commands/"+base_path
- for player, commands in admin_commands.items():
- s_player = str(player)
- if len(s_player) < 2:
- s_player = "0"+s_player
- if len(s_player) < 3:
- s_player = "0"+s_player
-
- fid = s_player[-1]
- if not os.path.isdir(base):
- os.mkdir(base)
- if not os.path.isdir(base+fid):
- os.mkdir(base+fid)
- fid2 = s_player[-2]
- if not os.path.isdir(base+fid+"/"+fid2):
- os.mkdir(base+fid+"/"+fid2)
- fid3 = s_player[-3]
- if not os.path.isdir(base+fid+"/"+fid2+"/"+fid3):
- os.mkdir(base+fid+"/"+fid2+"/"+fid3)
- if not os.path.isdir(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)):
- os.mkdir(base+fid+"/"+fid2+"/"+fid3+"/"+str(player))
- for mouth, command in commands.items():
- if mouth != "name" and mouth != "total":
- if is_current:
- open(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)+"/current.log", "w").write(command+"\n")
- else:
- if os.path.isfile(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)+"/"+mouth.replace("/", "_")+".log"):
- previous = open(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)+"/"+mouth.replace("/", "_")+".log").read()
- else:
- previous = ""
- open(base+fid+"/"+fid2+"/"+fid3+"/"+str(player)+"/"+mouth.replace("/", "_")+".log", "w").write(command+"\n"+previous)
-
- base = "logs/commands/"
- for mouth, command in global_commands.items():
- if not os.path.isdir(base+"global"):
- os.mkdir(base+"global")
- if is_current:
- open(base+"global/current.log", "w").write(command+"\n")
- else:
- if os.path.isfile(base+"global/"+mouth.replace("/", "_")+".log"):
- previous = open(base+"global/"+mouth.replace("/", "_")+".log").read()
- else:
- previsous = ""
- open(base+"global/"+mouth.replace("/", "_")+".log", "w").write(command+"\n"+previous)
-
-def parse(filename):
- global global_commands, admin_commands, sorbot_commands, new_sorbot_commands
- file = open(filename).read().split("\n")
- last_commands = {}
- for line in file:
- sline = line.split(" ")
-# if len(sline) >= 10 and ((sline[9] == "ADMIN:" and sline[10] == "Player") or sline[9] == "ADMINOFFLINE:"):
- if "cbClientAdmin : ADMIN: " in line or "ADMINOFFLINE" in line or "ADMIN: CSR" in line :
- if "tried to execute a no valid client admin command" in line :
- continue
- sline = line.split("' on target ")
- #Only get text before "on target"
- real_line = sline[0]
- sline = real_line.split(" ")
- day = sline[0]
- mouth = day[:4]+day[5:7]
- hour = sline[1]
- player = sline[11]
- splayer = player.split(",")
- if splayer[0][4:-10] != '':
- cid = int(splayer[0][4:-10], 16)
- else:
- cid = 0
- if (len(splayer) == 2):
- name = splayer[1][:-7]
- else:
- name = ""
-
-
- if "ADMIN: CSR" in line :
- print "Exchange :", sline
- command = "exchange item"
- command_args = sline[13]+" "+sline[14]
- target = sline[16]
- target_name = sline[16].split("(")[0]
- ctype = " "
- else:
- #Get text between ' and '
- sline = real_line.split("'")
- full_command = "'".join(sline[1:])
-
- if full_command[-1] == "'":
- full_command = full_command[:-1]
- scommand = full_command.split(" ")
- command = scommand[0]
- command_args = " ".join(scommand[2:])
-
- if (len(scommand) > 1):
- target = scommand[1]
- else:
- target = ""
- target_name = ""
- ctype = "c"
- if target == "(0x0000000000:ff:00:00)":
- target = ""
- target_name = "on Nothing"
- elif target[:-6] == "(0x"+splayer[0][4:-10]+":00:":
- target = ""
- target_name = ""
- ctype = "a"
- elif target[-6:-4] != "00" :
- target = ""
- target_name = "on a Mob or Npc"
- ctype = "b"
- elif len(target) > 20 :
- target = "#"+str(int(target[4:-10], 16))
- target_name = line.split(",")[-1].split("(")[0].capitalize()
- ctype = "b"
- else:
- ctype = "a"
-
- if line[100:120] == "ADMINOFFLINE: Player":
- ctype = "c"
- sorbot(line, ctype, name, command, command_args, target_name)
-
- if not cid in admin_commands:
- admin_commands[cid] = {}
- admin_commands[cid]["total"] = 0
- admin_commands[cid]["name"] = name
- if not mouth in admin_commands[cid]:
- admin_commands[cid][mouth] = ""
- admin_commands[cid][mouth] = "|".join((day, hour, ctype, command, target, command_args))+"\n" + admin_commands[cid][mouth]
- admin_commands[cid]["total"] += 1
-
-# print command.lower()
- if command.lower() in critic_commands:
- print command, command_args
- if not name in last_commands or not command.lower() in ("addxptoskill","learnbrick","learnphrase"):
- print "Setting..."
- last_commands[name] = [None, None, None, None, None]
- last_commands[name][0] = command
- last_commands[name][1] = 1
- last_commands[name][2] = [line, ctype, name, command, command_args, target_name]
- last_commands[name][3] = "|".join((str(cid), name, day, hour, ctype, command, target, command_args))
- last_commands[name][4] = mouth
-
- if command.lower() in ("addxptoskill","learnbrick","learnphrase") and command == last_commands[name][0]:
- print "+1"
- last_commands[name][1] += 1
- last_commands[name][2] = [line, ctype, name, command, command_args, target_name]
- last_commands[name][3] = "|".join((str(cid), name, day, hour, ctype, command, target, command_args))
- last_commands[name][4] = mouth
- else :
- if last_commands[name][1] > 1 :
- print "More than 1 time"
- last_commands[name][2][4] = "*"+str(last_commands[name][1])+" times*"
- last_commands[name][2][0] += "*"+str(last_commands[name][1])+" times*"
- else:
- last_commands[name][2][4] = command_args
- sorbot(last_commands[name][2][0], last_commands[name][2][1], last_commands[name][2][2], last_commands[name][2][3], last_commands[name][2][4], last_commands[name][2][5])
- print "Sorbot: ", last_commands[name][2], last_commands[name][1]
- if not last_commands[name][4] in global_commands:
- global_commands[last_commands[name][4]] = ""
- global_commands[last_commands[name][4]] = last_commands[name][3]+"\n"+global_commands[last_commands[name][4]]
- del(last_commands[name])
-
-
- for name, last_command in last_commands.items():
- if last_command[1] > 1:
- last_command[2][4] += " ["+str(last_command[1])+" times the same command]"
- #last_command[2][0] += "*"+str(last_command[1])+" times*"
- sorbot(last_command[2][0], last_command[2][1], last_command[2][2], last_command[2][3], last_command[2][4], last_command[2][5])
- print "Sorbot ", last_command[2], last_command[1]
- if not last_command[4] in global_commands:
- global_commands[last_command[4]] = ""
- global_commands[mouth] = last_command[3]+"\n"+global_commands[last_command[4]]
-
-
-BASE_PATH = "logs/commands/"
-
-if not os.path.isdir(BASE_PATH):
- os.mkdir(BASE_PATH)
-
-if not os.path.isdir(BASE_PATH+"backup"):
- os.mkdir(BASE_PATH+"backup")
-
-if not os.path.isdir(BASE_PATH+"global"):
- os.mkdir(BASE_PATH+"global")
-
-
-if not os.path.isfile(BASE_PATH+"last_log"):
- open(BASE_PATH+"last_log", "w").write("0")
-
-if not os.path.isfile("cache/commands"):
- open("cache/commands", "w").write("")
-
-
-last_log = int(open(BASE_PATH+"last_log").read())
-sorbot_commands = []
-sorbot_commands = open("cache/commands").read().split("\n")
-new_sorbot_commands = []
-
-print "Last Log with date : ", last_log
-files = os.listdir("logs/")
-files.sort()
-higher_time = last_log
-for filename in files:
- if len(filename) > 25 and filename.split(".")[1] == "log" and filename.split(".")[0][:21] == "entities_game_service":
- if int(os.path.getmtime("logs/"+filename)) > last_log:
- if int(os.path.getmtime("logs/"+filename)) > higher_time:
- higher_time = os.path.getmtime("logs/"+filename)
- print filename, " NEED PARSING"
- parse("logs/"+filename)
-
-logged_players = len(admin_commands)
-
-print "Write logs..."
-writelogs(admin_commands, False)
-
-admin_commands = {}
-global_commands = {}
-filename = "entities_game_service.log"
-print filename, " "
-parse("logs/"+filename)
-logged_players += len(admin_commands)
-open(BASE_PATH+"global/current.log", "w").write("")
-writelogs(admin_commands, True, "current/")
-
-open(BASE_PATH+"last_log", "w").write(str(int(higher_time)))
-open("cache/commands", 'w').write("\n".join(new_sorbot_commands))
-
-
-print "Send logs to web..."
-os.system("scp -r "+BASE_PATH+"logged/ nevrax@newweb.ryzom.com:/mnt/tmp/cache/ > /dev/null")
-print "Backup..."
-os.system("cp -r "+BASE_PATH+"logged/* "+BASE_PATH+"backup")
-print "Clean..."
-os.system("rm -rf "+BASE_PATH+"logged/*")
-print "Send current..."
-#os.system("scp -r current/* nevrax@newweb.ryzom.com:/mnt/tmp/cache/logged/ > /dev/null")
-print "Done!"
-
-#os.system("rsync -avz -e ssh logged/ nevrax@web.ryzom.com:/mnt/tmp/cache/logged/")
From 9d7e55c34bf31910bffc9b3a6c88ad72fb8923a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nuno=20Gon=C3=A7alves=20=28Ulukyn=29?=
Date: Tue, 12 Dec 2023 15:20:01 +0100
Subject: [PATCH 115/194] Update tools
---
ryzom/server/www/config_example.php | 3 ++-
ryzom/server/www/tools/broadcast.php | 6 +++---
ryzom/server/www/tools/manage_shard.php | 12 ++++++------
3 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/ryzom/server/www/config_example.php b/ryzom/server/www/config_example.php
index ff2e02fe9e..ddb270adcc 100644
--- a/ryzom/server/www/config_example.php
+++ b/ryzom/server/www/config_example.php
@@ -24,4 +24,5 @@
$RocketChatHook = '';
$RocketChatServer = '';
-
+$RocketChatGeneral = '#General';
+$RocketChatUniverse = '#Universe';
diff --git a/ryzom/server/www/tools/broadcast.php b/ryzom/server/www/tools/broadcast.php
index ac545ace5b..495e8d45d6 100644
--- a/ryzom/server/www/tools/broadcast.php
+++ b/ryzom/server/www/tools/broadcast.php
@@ -10,9 +10,9 @@
switch($shard) {
case 'live':
- sendToChat('is starting the Shard Restart Sequence...', '#pub-general', $ShardName, ':recycle:');
- sendToChat('is broadcasting to players', '#pub-general', $ShardName, ':loudspeaker:');
- sendToChat('The shard will go down in 10 minutes. Please find a safe location and log out.', '#pub-universe', $ShardName.'\' Intern', ':loudspeaker:');
+ sendToChat('The server is starting the Shard Restart Sequence...', $RocketChatGeneral, $ShardName.'\' Intern', ':recycle:');
+ sendToChat('The server is broadcasting to players to keep a safe place', $RocketChatGeneral, $ShardName.'\' Intern', ':loudspeaker:');
+ sendToChat('The shard will go down in 10 minutes. Please find a safe location and log out.', $RocketChatUniverse, $ShardName.'\' Intern', ':loudspeaker:');
if (!$message) {
$message = '@{F00F}[de]Der Server wird in $minutes$ Minuten heruntergefahren.\n@{FF0F}Findet eine sichere Stelle und logt aus.';
diff --git a/ryzom/server/www/tools/manage_shard.php b/ryzom/server/www/tools/manage_shard.php
index f09df32460..5b2d003909 100644
--- a/ryzom/server/www/tools/manage_shard.php
+++ b/ryzom/server/www/tools/manage_shard.php
@@ -11,7 +11,7 @@
case 'test':
echo 'TEST...';
- echo sendToChat('Atys are processing a reboot...', '#pub-general', 'Stagiaire d\'Atys', ':upside_down:');
+ echo sendToChat('Atys are processing a reboot...', $RocketChatGeneral, $ShardName.'\' Intern', ':upside_down:');
break;
case 'lock':
@@ -27,13 +27,13 @@
@queryShard('su', 'rsm.setWSState '. $ShardId .' OPEN ""');
if ($option == 'players') {
file_put_contents('/home/nevrax/www/login/server_open_status', 'ds_open'."\n");
- sendToChat('The shard is open for o/_--[ EVERYBODY ]--_\o', '#pub-uni', 'Stagiaire d\''.$ShardName, ':tada:');
- sendToChat('is now open to ALL players \o/', '#pub-general', $ShardName, ':tada:');
+ sendToChat('The server is open for o/_--[ EVERYBODY ]--_\o', $RocketChatUniverse , $ShardName.'\' Intern', ':tada:');
+ sendToChat('The server is now open to ALL players \o/', $RocketChatGeneral, $ShardName.'\' Intern', ':tada:');
} else {
file_put_contents('/home/nevrax/www/login/server_open_status', 'ds_restricted'."\n");
if ($option != 'silent') {
- sendToChat('The shard is open for RYZOM TEAM', '#pub-uni', $ShardName.'\' Intern', ':raised_hands:');
- sendToChat('is now in the hands of the Customer Support Team.', '#pub-general', $ShardName, ':raised_hands:');
+ sendToChat('The server is open for RYZOM TEAM', $RocketChatUniverse, $ShardName.'\' Intern', ':raised_hands:');
+ sendToChat('The server is now in the hands of the Customer Support Team.', $RocketChatGeneral, $ShardName.'\' Intern', ':raised_hands:');
}
}
break;
@@ -51,7 +51,7 @@
}
}
if ($have_player)
- sendToChat('is killing all services...', '#pub-general', $ShardName, ':broken_heart:');
+ sendToChat('is killing all services...', $RocketChatGeneral, $ShardName, ':broken_heart:');
break;
}
From e1502ef868f734b2c532fd585fa84951f21b1884 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 16 Dec 2023 13:43:43 +0100
Subject: [PATCH 116/194] Added EnableEventsBnp and EnableOccsBnp cfg options
and a way to activate OCC bnps
---
nel/src/misc/path.cpp | 11 ++--
ryzom/client/client_default.cfg | 3 +
.../interfaces_v3/check_lua_versions.lua | 1 +
.../gamedev/interfaces_v3/game_config.xml | 40 +++++++++---
.../gamedev/interfaces_v3/out_v2_connect.xml | 12 +++-
.../gamedev/interfaces_v3/out_v2_intro.lua | 9 +++
.../gamedev/interfaces_v3/out_v2_intro.xml | 61 ++++++++++---------
ryzom/client/src/client_cfg.cpp | 22 ++++---
ryzom/client/src/client_cfg.h | 3 +
ryzom/client/src/init.cpp | 15 ++++-
10 files changed, 123 insertions(+), 54 deletions(-)
create mode 100644 ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
diff --git a/nel/src/misc/path.cpp b/nel/src/misc/path.cpp
index ce787b1960..f2f97567dd 100644
--- a/nel/src/misc/path.cpp
+++ b/nel/src/misc/path.cpp
@@ -1107,9 +1107,6 @@ void CFileContainer::addSearchPath (const string &path, bool recurse, bool alter
progressCallBack->pushCropedValues ((float)f/(float)filesToProcess.size(), (float)(f+1)/(float)filesToProcess.size());
}
- string filename = CFile::getFilename (filesToProcess[f]);
- string filepath = CFile::getPath (filesToProcess[f]);
-// insertFileInMap (filename, filepath, false, CFile::getExtension(filename));
addSearchFile (filesToProcess[f], false, "", progressCallBack);
// Progress bar
@@ -1168,6 +1165,12 @@ void CFileContainer::addSearchFile (const string &file, bool remap, const string
return;
}
+ string filename = CFile::getFilename (newFile);
+ string filepath = CFile::getPath (newFile);
+ map::iterator itss = _RemappedFiles.find(filename);
+ if (itss != _RemappedFiles.end())
+ newFile = filepath+"/"+itss->second;
+
std::string fileExtension = CFile::getExtension(newFile);
// check if it s a big file
@@ -1195,7 +1198,7 @@ void CFileContainer::addSearchFile (const string &file, bool remap, const string
}
string filenamewoext = CFile::getFilenameWithoutExtension (newFile);
- string filename, ext;
+ string ext;
if (virtual_ext.empty())
{
diff --git a/ryzom/client/client_default.cfg b/ryzom/client/client_default.cfg
index 1ca844e63b..ddd0d8745d 100644
--- a/ryzom/client/client_default.cfg
+++ b/ryzom/client/client_default.cfg
@@ -308,6 +308,9 @@ HDEntityTexture = 1;
HDTextureInstalled = 1;
WaitVBL = 0; // 0 or 1 to wait Vertical Sync.
+EnableEventsBnp = 1;
+EnableOccsBnp = 0;
+
//////////////////
// GAME OPTIONS //
//////////////////
diff --git a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
index c3f48b9ee0..9e1c6d2f7a 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
@@ -20,6 +20,7 @@ if RYZOM_NAMES_MATIS_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_MAT
if RYZOM_NAMES_TRYKER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_TRYKER_VERSION, 324, "names_tryker") end
if RYZOM_NAMES_ZORAI_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_ZORAI_VERSION, 324, "names_zorai") end
if RYZOM_OUT_V2_APPEAR_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_APPEAR_VERSION, 324, "out_v2_appear") end
+if RYZOM_OUT_V2_INTRO_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_INTRO_VERSION, 324, "out_v2_intro") end
if RYZOM_OUT_V2_SELECT_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_SELECT_VERSION, 324, "out_v2_select") end
if RYZOM_OUTPOST_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_OUTPOST_VERSION, 335, "outpost") end
if RYZOM_PLAYER_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_PLAYER_VERSION, 335, "player") end
diff --git a/ryzom/client/data/gamedev/interfaces_v3/game_config.xml b/ryzom/client/data/gamedev/interfaces_v3/game_config.xml
index 184d6bf0d7..a42f4d5a10 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/game_config.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/game_config.xml
@@ -645,7 +645,7 @@
handler="lua"
params="game:configShowOne('landmark_colors')"
fontsize="10"
- y_decal="-1" />
+ y_decal="-1" />
+
+
-
+
+ y="-4" />
+ y="0" />
+
+
-
+
-
+
+
@@ -36,10 +37,10 @@
-
-
+
-
+
+
+
+
+
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
new file mode 100644
index 0000000000..681a35bd1a
--- /dev/null
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
@@ -0,0 +1,9 @@
+function get_occ_events()
+ getUI("ui:outgame:connecting:html"):renderHtml([[debug('ok') ]])
+end
+
+
+
+
+-- VERSION --
+RYZOM_OUT_V2_INTRO_VERSION = 335
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml
index 04bc3cd19d..7386625bc2 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml
@@ -1,6 +1,7 @@
+
@@ -22,9 +23,9 @@
-
+
-
+
@@ -42,7 +43,7 @@
-
+
@@ -85,21 +86,20 @@
-
+
-
-
+
@@ -109,30 +109,30 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-->
-
-
+
+
+
diff --git a/ryzom/client/src/client_cfg.cpp b/ryzom/client/src/client_cfg.cpp
index e5a8b662ba..954bcb0ebd 100644
--- a/ryzom/client/src/client_cfg.cpp
+++ b/ryzom/client/src/client_cfg.cpp
@@ -487,6 +487,9 @@ CClientConfig::CClientConfig()
MediaPlayerDirectory = "music";
MediaPlayerAutoPlay = false;
+ EnableEventsBnp = true;
+ EnableOccsBnp = false;
+
// PreDataPath.push_back("data/gamedev/language/"); // Default Path for the language data
// DataPath.push_back("data/"); // Default Path for the Data.
@@ -916,21 +919,21 @@ void CClientConfig::setValues()
READ_STRING_FV(FSHost)
READ_BOOL_DEV(DisplayAccountButtons)
-
-
+
+
READ_STRING_FV(CreateAccountURL)
READ_STRING_FV(EditAccountURL)
READ_STRING_FV(ForgetPwdURL)
-
+
READ_STRING_DEV(BetaAccountURL)
READ_STRING_DEV(FreeTrialURL)
// defined in client_default.cfg
READ_STRING_FV(LoginSupportURL)
-
+
// read NamingPolicyURL from client_default.cfg
//READ_STRING_FV(NamingPolicyURL)
-
+
std::string languageCo = "wk";
CConfigFile::CVar *languageCodeVarPtr = ClientCfg.ConfigFile.getVarPtr("LanguageCode");
@@ -960,7 +963,7 @@ void CClientConfig::setValues()
}
}
}
-
+
// read NamingPolicyURL from client_default.cfg
//READ_STRING_FV(ConditionsTermsURL)
CConfigFile::CVar *coturl = ClientCfg.ConfigFile.getVarPtr("ConditionsTermsURL");
@@ -970,7 +973,7 @@ void CClientConfig::setValues()
for (uint i = 0; i < coturl->size(); ++i)
{
std::string entry = coturl->asString(i);
-
+
if (entry.size() >= languageCo.size())
{
if (nlstricmp(entry.substr(0, languageCo.size()), languageCo) == 0)
@@ -985,7 +988,7 @@ void CClientConfig::setValues()
}
}
}
-
+
#ifndef RZ_NO_CLIENT
// if cookie is not empty, it means that the client was launch
@@ -1372,6 +1375,9 @@ void CClientConfig::setValues()
//////////
// MISC //
+ READ_BOOL_FV(EnableEventsBnp);
+ READ_BOOL_FV(EnableOccsBnp);
+
// Pre Data Path.
READ_STRINGVECTOR_FV(PreDataPath);
diff --git a/ryzom/client/src/client_cfg.h b/ryzom/client/src/client_cfg.h
index b17e82e8ae..9486393d99 100644
--- a/ryzom/client/src/client_cfg.h
+++ b/ryzom/client/src/client_cfg.h
@@ -389,6 +389,9 @@ struct CClientConfig
string MediaPlayerDirectory;
bool MediaPlayerAutoPlay;
+ bool EnableEventsBnp;
+ bool EnableOccsBnp;
+
/// Pre Data Path.
std::vector PreDataPath;
/// Data Path.
diff --git a/ryzom/client/src/init.cpp b/ryzom/client/src/init.cpp
index bb1d9405cd..2f436f1475 100644
--- a/ryzom/client/src/init.cpp
+++ b/ryzom/client/src/init.cpp
@@ -772,6 +772,19 @@ void addPreDataPaths(NLMISC::IProgressCallback &progress)
H_AUTO(InitRZAddSearchPaths);
+ std::vector UserDataPath;
+ UserDataPath.push_back("user");
+ addPaths(progress, UserDataPath, true);
+
+ // if want occ event:
+ if (ClientCfg.EnableEventsBnp)
+ CPath::loadRemappedFiles("enable_events_bnp.csv");
+ // if want occ stuff:
+ if (ClientCfg.EnableOccsBnp)
+ CPath::loadRemappedFiles("enable_occs_bnp.csv");
+
+
+
addPaths(progress, ClientCfg.PreDataPath, true);
//nlinfo ("PROFILE: %d seconds for Add search paths Predata", (uint32)(ryzomGetLocalTime ()-initPaths)/1000);
@@ -850,7 +863,7 @@ void initLog()
rlp2.rlim_cur = std::min(value, rlp.rlim_max);
rlp2.rlim_max = rlp.rlim_max;
-
+
if (setrlimit(RLIMIT_NOFILE, &rlp2))
{
if (errno == EINVAL)
From e56f0d8f0f1012ef7d82265dbf53d4ff243306df Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 16 Dec 2023 13:43:43 +0100
Subject: [PATCH 117/194] Added EnableEventsBnp and EnableOccsBnp cfg options
and a way to activate OCC bnps
---
nel/src/misc/path.cpp | 11 ++--
ryzom/client/client_default.cfg | 3 +
.../interfaces_v3/check_lua_versions.lua | 1 +
.../gamedev/interfaces_v3/game_config.xml | 40 +++++++++---
.../gamedev/interfaces_v3/out_v2_connect.xml | 12 +++-
.../gamedev/interfaces_v3/out_v2_intro.lua | 9 +++
.../gamedev/interfaces_v3/out_v2_intro.xml | 61 ++++++++++---------
ryzom/client/src/client_cfg.cpp | 22 ++++---
ryzom/client/src/client_cfg.h | 3 +
ryzom/client/src/init.cpp | 15 ++++-
10 files changed, 123 insertions(+), 54 deletions(-)
create mode 100644 ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
diff --git a/nel/src/misc/path.cpp b/nel/src/misc/path.cpp
index ce787b1960..f2f97567dd 100644
--- a/nel/src/misc/path.cpp
+++ b/nel/src/misc/path.cpp
@@ -1107,9 +1107,6 @@ void CFileContainer::addSearchPath (const string &path, bool recurse, bool alter
progressCallBack->pushCropedValues ((float)f/(float)filesToProcess.size(), (float)(f+1)/(float)filesToProcess.size());
}
- string filename = CFile::getFilename (filesToProcess[f]);
- string filepath = CFile::getPath (filesToProcess[f]);
-// insertFileInMap (filename, filepath, false, CFile::getExtension(filename));
addSearchFile (filesToProcess[f], false, "", progressCallBack);
// Progress bar
@@ -1168,6 +1165,12 @@ void CFileContainer::addSearchFile (const string &file, bool remap, const string
return;
}
+ string filename = CFile::getFilename (newFile);
+ string filepath = CFile::getPath (newFile);
+ map::iterator itss = _RemappedFiles.find(filename);
+ if (itss != _RemappedFiles.end())
+ newFile = filepath+"/"+itss->second;
+
std::string fileExtension = CFile::getExtension(newFile);
// check if it s a big file
@@ -1195,7 +1198,7 @@ void CFileContainer::addSearchFile (const string &file, bool remap, const string
}
string filenamewoext = CFile::getFilenameWithoutExtension (newFile);
- string filename, ext;
+ string ext;
if (virtual_ext.empty())
{
diff --git a/ryzom/client/client_default.cfg b/ryzom/client/client_default.cfg
index 1ca844e63b..ddd0d8745d 100644
--- a/ryzom/client/client_default.cfg
+++ b/ryzom/client/client_default.cfg
@@ -308,6 +308,9 @@ HDEntityTexture = 1;
HDTextureInstalled = 1;
WaitVBL = 0; // 0 or 1 to wait Vertical Sync.
+EnableEventsBnp = 1;
+EnableOccsBnp = 0;
+
//////////////////
// GAME OPTIONS //
//////////////////
diff --git a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
index c3f48b9ee0..9e1c6d2f7a 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
@@ -20,6 +20,7 @@ if RYZOM_NAMES_MATIS_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_MAT
if RYZOM_NAMES_TRYKER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_TRYKER_VERSION, 324, "names_tryker") end
if RYZOM_NAMES_ZORAI_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_ZORAI_VERSION, 324, "names_zorai") end
if RYZOM_OUT_V2_APPEAR_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_APPEAR_VERSION, 324, "out_v2_appear") end
+if RYZOM_OUT_V2_INTRO_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_INTRO_VERSION, 324, "out_v2_intro") end
if RYZOM_OUT_V2_SELECT_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_SELECT_VERSION, 324, "out_v2_select") end
if RYZOM_OUTPOST_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_OUTPOST_VERSION, 335, "outpost") end
if RYZOM_PLAYER_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_PLAYER_VERSION, 335, "player") end
diff --git a/ryzom/client/data/gamedev/interfaces_v3/game_config.xml b/ryzom/client/data/gamedev/interfaces_v3/game_config.xml
index 184d6bf0d7..a42f4d5a10 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/game_config.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/game_config.xml
@@ -645,7 +645,7 @@
handler="lua"
params="game:configShowOne('landmark_colors')"
fontsize="10"
- y_decal="-1" />
+ y_decal="-1" />
+
+
-
+
+ y="-4" />
+ y="0" />
+
+
-
+
-
+
+
@@ -36,10 +37,10 @@
-
-
+
-
+
+
+
+
+
+
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
new file mode 100644
index 0000000000..681a35bd1a
--- /dev/null
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
@@ -0,0 +1,9 @@
+function get_occ_events()
+ getUI("ui:outgame:connecting:html"):renderHtml([[debug('ok') ]])
+end
+
+
+
+
+-- VERSION --
+RYZOM_OUT_V2_INTRO_VERSION = 335
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml
index 04bc3cd19d..7386625bc2 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml
@@ -1,6 +1,7 @@
+
@@ -22,9 +23,9 @@
-
+
-
+
@@ -42,7 +43,7 @@
-
+
@@ -85,21 +86,20 @@
-
+
-
-
+
@@ -109,30 +109,30 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-->
-
-
+
+
+
diff --git a/ryzom/client/src/client_cfg.cpp b/ryzom/client/src/client_cfg.cpp
index e5a8b662ba..954bcb0ebd 100644
--- a/ryzom/client/src/client_cfg.cpp
+++ b/ryzom/client/src/client_cfg.cpp
@@ -487,6 +487,9 @@ CClientConfig::CClientConfig()
MediaPlayerDirectory = "music";
MediaPlayerAutoPlay = false;
+ EnableEventsBnp = true;
+ EnableOccsBnp = false;
+
// PreDataPath.push_back("data/gamedev/language/"); // Default Path for the language data
// DataPath.push_back("data/"); // Default Path for the Data.
@@ -916,21 +919,21 @@ void CClientConfig::setValues()
READ_STRING_FV(FSHost)
READ_BOOL_DEV(DisplayAccountButtons)
-
-
+
+
READ_STRING_FV(CreateAccountURL)
READ_STRING_FV(EditAccountURL)
READ_STRING_FV(ForgetPwdURL)
-
+
READ_STRING_DEV(BetaAccountURL)
READ_STRING_DEV(FreeTrialURL)
// defined in client_default.cfg
READ_STRING_FV(LoginSupportURL)
-
+
// read NamingPolicyURL from client_default.cfg
//READ_STRING_FV(NamingPolicyURL)
-
+
std::string languageCo = "wk";
CConfigFile::CVar *languageCodeVarPtr = ClientCfg.ConfigFile.getVarPtr("LanguageCode");
@@ -960,7 +963,7 @@ void CClientConfig::setValues()
}
}
}
-
+
// read NamingPolicyURL from client_default.cfg
//READ_STRING_FV(ConditionsTermsURL)
CConfigFile::CVar *coturl = ClientCfg.ConfigFile.getVarPtr("ConditionsTermsURL");
@@ -970,7 +973,7 @@ void CClientConfig::setValues()
for (uint i = 0; i < coturl->size(); ++i)
{
std::string entry = coturl->asString(i);
-
+
if (entry.size() >= languageCo.size())
{
if (nlstricmp(entry.substr(0, languageCo.size()), languageCo) == 0)
@@ -985,7 +988,7 @@ void CClientConfig::setValues()
}
}
}
-
+
#ifndef RZ_NO_CLIENT
// if cookie is not empty, it means that the client was launch
@@ -1372,6 +1375,9 @@ void CClientConfig::setValues()
//////////
// MISC //
+ READ_BOOL_FV(EnableEventsBnp);
+ READ_BOOL_FV(EnableOccsBnp);
+
// Pre Data Path.
READ_STRINGVECTOR_FV(PreDataPath);
diff --git a/ryzom/client/src/client_cfg.h b/ryzom/client/src/client_cfg.h
index b17e82e8ae..9486393d99 100644
--- a/ryzom/client/src/client_cfg.h
+++ b/ryzom/client/src/client_cfg.h
@@ -389,6 +389,9 @@ struct CClientConfig
string MediaPlayerDirectory;
bool MediaPlayerAutoPlay;
+ bool EnableEventsBnp;
+ bool EnableOccsBnp;
+
/// Pre Data Path.
std::vector PreDataPath;
/// Data Path.
diff --git a/ryzom/client/src/init.cpp b/ryzom/client/src/init.cpp
index bb1d9405cd..2f436f1475 100644
--- a/ryzom/client/src/init.cpp
+++ b/ryzom/client/src/init.cpp
@@ -772,6 +772,19 @@ void addPreDataPaths(NLMISC::IProgressCallback &progress)
H_AUTO(InitRZAddSearchPaths);
+ std::vector UserDataPath;
+ UserDataPath.push_back("user");
+ addPaths(progress, UserDataPath, true);
+
+ // if want occ event:
+ if (ClientCfg.EnableEventsBnp)
+ CPath::loadRemappedFiles("enable_events_bnp.csv");
+ // if want occ stuff:
+ if (ClientCfg.EnableOccsBnp)
+ CPath::loadRemappedFiles("enable_occs_bnp.csv");
+
+
+
addPaths(progress, ClientCfg.PreDataPath, true);
//nlinfo ("PROFILE: %d seconds for Add search paths Predata", (uint32)(ryzomGetLocalTime ()-initPaths)/1000);
@@ -850,7 +863,7 @@ void initLog()
rlp2.rlim_cur = std::min(value, rlp.rlim_max);
rlp2.rlim_max = rlp.rlim_max;
-
+
if (setrlimit(RLIMIT_NOFILE, &rlp2))
{
if (errno == EINVAL)
From 5a75a32b12e339fccf8d48474b023ebecdee7433 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Sat, 16 Dec 2023 13:45:29 +0100
Subject: [PATCH 118/194] Update lua versions
---
ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua | 2 +-
ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
index 9e1c6d2f7a..1655b31188 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/check_lua_versions.lua
@@ -20,7 +20,7 @@ if RYZOM_NAMES_MATIS_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_MAT
if RYZOM_NAMES_TRYKER_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_TRYKER_VERSION, 324, "names_tryker") end
if RYZOM_NAMES_ZORAI_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_NAMES_ZORAI_VERSION, 324, "names_zorai") end
if RYZOM_OUT_V2_APPEAR_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_APPEAR_VERSION, 324, "out_v2_appear") end
-if RYZOM_OUT_V2_INTRO_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_INTRO_VERSION, 324, "out_v2_intro") end
+if RYZOM_OUT_V2_INTRO_VERSION ~= 341 then broadcastBadLuaVersions(RYZOM_OUT_V2_INTRO_VERSION, 341, "out_v2_intro") end
if RYZOM_OUT_V2_SELECT_VERSION ~= 324 then broadcastBadLuaVersions(RYZOM_OUT_V2_SELECT_VERSION, 324, "out_v2_select") end
if RYZOM_OUTPOST_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_OUTPOST_VERSION, 335, "outpost") end
if RYZOM_PLAYER_VERSION ~= 335 then broadcastBadLuaVersions(RYZOM_PLAYER_VERSION, 335, "player") end
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
index 681a35bd1a..d87c13febc 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
@@ -6,4 +6,4 @@ end
-- VERSION --
-RYZOM_OUT_V2_INTRO_VERSION = 335
\ No newline at end of file
+RYZOM_OUT_V2_INTRO_VERSION = 341
\ No newline at end of file
From cc42c36d3c17fa6e51d4a4afbf183aec7632ce4b Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Sat, 16 Dec 2023 20:19:10 +0100
Subject: [PATCH 119/194] Fixed
---
ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
index d87c13febc..111b4c0ee3 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
@@ -1,9 +1,11 @@
function get_occ_events()
- getUI("ui:outgame:connecting:html"):renderHtml([[debug('ok') ]])
+ local application = getClientCfgVar("Application")
+ getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
+ getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
end
-- VERSION --
-RYZOM_OUT_V2_INTRO_VERSION = 341
\ No newline at end of file
+RYZOM_OUT_V2_INTRO_VERSION = 341
From dd67de21532c81db6b4ee37bc405bda282b22573 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Sat, 16 Dec 2023 20:53:15 +0100
Subject: [PATCH 120/194] Fix
---
ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
index 111b4c0ee3..28b07990fd 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
@@ -1,7 +1,7 @@
function get_occ_events()
local application = getClientCfgVar("Application")
- getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
- getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
+ getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
+ getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
end
From 980de8ef36f06bfb2fddf8b2dc6a9831d4b90d93 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Sat, 16 Dec 2023 21:07:41 +0100
Subject: [PATCH 121/194] Fixed
---
ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
index 28b07990fd..57e09cf266 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
@@ -1,7 +1,7 @@
function get_occ_events()
local application = getClientCfgVar("Application")
- getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
- getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
+ getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
+ getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
end
From f57fa8356b3a182a3e735e5f2d8f6eea574a26af Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Sat, 16 Dec 2023 21:21:39 +0100
Subject: [PATCH 122/194] Fix
---
ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
index 57e09cf266..16f09014d9 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
@@ -1,11 +1,10 @@
function get_occ_events()
local application = getClientCfgVar("Application")
- getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
- getUI("ui:outgame:connecting:html"):renderHtml([[ ]])
+ getUI("ui:outgame:connecting:html"):renderHtml([[
+
+
+ ]])
end
-
-
-
-- VERSION --
RYZOM_OUT_V2_INTRO_VERSION = 341
From c691befb754b1007d8f9a95e628882b4c68b245f Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Sun, 17 Dec 2023 02:45:35 +0100
Subject: [PATCH 123/194] Fixed get_occ_events (better way). Added CurlCABundle
to all Curl download
---
.../data/gamedev/interfaces_v3/out_v2_appear.lua | 3 +--
.../data/gamedev/interfaces_v3/out_v2_connect.xml | 9 ---------
.../client/data/gamedev/interfaces_v3/out_v2_intro.lua | 10 ----------
.../client/data/gamedev/interfaces_v3/out_v2_intro.xml | 5 -----
ryzom/client/src/client_cfg.cpp | 2 +-
ryzom/client/src/init.cpp | 7 +++++++
ryzom/client/src/init_main_loop.cpp | 2 +-
ryzom/client/src/login_patch.cpp | 4 ++--
ryzom/client/src/login_patch.h | 6 ++++--
9 files changed, 16 insertions(+), 32 deletions(-)
delete mode 100644 ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua
index 016bb1d2ee..62343406d4 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_appear.lua
@@ -436,8 +436,7 @@ function outgame:loadRPBGPage()
sex = "f"
end
getUI("ui:outgame:appear:job_options:rpbg:html"):browse("https://app.ryzom.com/app_arcc/outgame_rpbg.php?lang="..lang.."&slot="..tostring(slot).."&sex="..sex.."&key="..rpbg_key)
- getUI("https://app.ryzom.com/app_arcc/outgame_rpbg.php?lang="..lang.."&slot="..tostring(slot).."&sex="..sex.."&key="..rpbg_key)
end
-- VERSION --
-RYZOM_OUT_V2_APPEAR_VERSION = 324
\ No newline at end of file
+RYZOM_OUT_V2_APPEAR_VERSION = 324
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_connect.xml b/ryzom/client/data/gamedev/interfaces_v3/out_v2_connect.xml
index c9659f995e..a038a133c1 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_connect.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_connect.xml
@@ -23,7 +23,6 @@
-
@@ -53,14 +52,6 @@
-
-
-
-
-
-
-
-
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
deleted file mode 100644
index 16f09014d9..0000000000
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.lua
+++ /dev/null
@@ -1,10 +0,0 @@
-function get_occ_events()
- local application = getClientCfgVar("Application")
- getUI("ui:outgame:connecting:html"):renderHtml([[
-
-
- ]])
-end
-
--- VERSION --
-RYZOM_OUT_V2_INTRO_VERSION = 341
diff --git a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml
index 7386625bc2..9a341b3fc8 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/out_v2_intro.xml
@@ -241,10 +241,5 @@
-->
-
-
-
-
-
diff --git a/ryzom/client/src/client_cfg.cpp b/ryzom/client/src/client_cfg.cpp
index 954bcb0ebd..aa4d3abfcf 100644
--- a/ryzom/client/src/client_cfg.cpp
+++ b/ryzom/client/src/client_cfg.cpp
@@ -1180,7 +1180,7 @@ void CClientConfig::setValues()
READ_STRING_FV(WebIgMainDomain);
if (ClientCfg.WebIgMainDomain.find("http://") == std::string::npos
|| ClientCfg.WebIgMainDomain.find("https://") == std::string::npos)
- ClientCfg.WebIgMainDomain = "http://" + ClientCfg.WebIgMainDomain;
+ ClientCfg.WebIgMainDomain = "https://" + ClientCfg.WebIgMainDomain;
READ_STRINGVECTOR_FV(WebIgTrustedDomains);
READ_INT_FV(WebIgNotifInterval);
READ_INT_FV(CurlMaxConnections);
diff --git a/ryzom/client/src/init.cpp b/ryzom/client/src/init.cpp
index 2f436f1475..164dce5e26 100644
--- a/ryzom/client/src/init.cpp
+++ b/ryzom/client/src/init.cpp
@@ -57,6 +57,7 @@
#include "init.h"
#include "input.h"
#include "client_cfg.h" // Configuration of the client.
+#include "login_patch.h"
#include "actions_client.h"
#include "color_slot_manager.h"
#include "movie_shooter.h"
@@ -772,6 +773,12 @@ void addPreDataPaths(NLMISC::IProgressCallback &progress)
H_AUTO(InitRZAddSearchPaths);
+ CConfigFile *cf = &ClientCfg.ConfigFile;
+ std::string appName = cf->getVarPtr("Application") ? cf->getVar("Application").asString(0) : "ryzom_live";
+ CPatchManager *pPM = CPatchManager::getInstance();
+ pPM->downloadFileWithCurl(ClientCfg.WebIgMainDomain+"/data/"+appName+"/enable_events_bnp.csv", "user/enable_events_bnp.csv");
+ pPM->downloadFileWithCurl(ClientCfg.WebIgMainDomain+"/data/"+appName+"/enable_occs_bnp.csv", "user/enable_occs_bnp.csv");
+
std::vector UserDataPath;
UserDataPath.push_back("user");
addPaths(progress, UserDataPath, true);
diff --git a/ryzom/client/src/init_main_loop.cpp b/ryzom/client/src/init_main_loop.cpp
index 9d1ebf784f..0ae38afe9a 100644
--- a/ryzom/client/src/init_main_loop.cpp
+++ b/ryzom/client/src/init_main_loop.cpp
@@ -194,7 +194,7 @@ struct CStatThread : public NLMISC::IRunnable
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
if (url.length() > 8 && (url[4] == 's' || url[4] == 'S')) // 01234 https
{
- NLWEB::CCurlCertificates::addCertificateFile("cacert.pem");
+ NLWEB::CCurlCertificates::addCertificateFile(ClientCfg.CurlCABundle);
NLWEB::CCurlCertificates::useCertificates(curl);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);
diff --git a/ryzom/client/src/login_patch.cpp b/ryzom/client/src/login_patch.cpp
index b97d410bef..8f7be03cb4 100644
--- a/ryzom/client/src/login_patch.cpp
+++ b/ryzom/client/src/login_patch.cpp
@@ -625,7 +625,7 @@ void CPatchManager::startPatchThread(const vector &CategoriesSelected, b
// Close opened big files
CBigFile::getInstance().remove(FilesToPatch[k].FileName);
-
+
if (NLMISC::startsWith(FilesToPatch[k].FileName, "sound"))
{
// Stop sound playback
@@ -1457,7 +1457,7 @@ void CPatchManager::downloadFileWithCurl (const string &source, const string &de
curl_easy_setopt(curl, CURLOPT_URL, source.c_str());
if (source.length() > 8 && (source[4] == 's' || source[4] == 'S')) // 01234 https
{
- NLWEB::CCurlCertificates::addCertificateFile("cacert.pem");
+ NLWEB::CCurlCertificates::addCertificateFile(ClientCfg.CurlCABundle);
NLWEB::CCurlCertificates::useCertificates(curl);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);
diff --git a/ryzom/client/src/login_patch.h b/ryzom/client/src/login_patch.h
index 89c848f0c6..7bfaa022e8 100644
--- a/ryzom/client/src/login_patch.h
+++ b/ryzom/client/src/login_patch.h
@@ -275,6 +275,10 @@ class CPatchManager
bool bnpUnpack(const std::string &srcBigfile, const std::string &dstPath, std::vector &vFilenames);
const std::string & getServerVersion () { return ServerVersion; }
+ void downloadFileWithCurl (const std::string &source, const std::string &dest, NLMISC::IProgressCallback *progress = NULL);
+ void downloadFile (const std::string &source, const std::string &dest, NLMISC::IProgressCallback *progress = NULL);
+
+
private:
// Methods used by patch & check threads
@@ -316,8 +320,6 @@ class CPatchManager
// Get a file from the server and decompress it if zipped
void getServerFile (const std::string &name, bool bZipped = false, const std::string& destName="", NLMISC::IProgressCallback *progress = NULL);
- void downloadFileWithCurl (const std::string &source, const std::string &dest, NLMISC::IProgressCallback *progress = NULL);
- void downloadFile (const std::string &source, const std::string &dest, NLMISC::IProgressCallback *progress = NULL);
// Decompress zipped file override destination file
void decompressFile (const std::string &filename);
void applyDate (const std::string &sFilename, uint32 nDate);
From 6e4a54e3e9a2e146a1fbef645f571cd42d3096c9 Mon Sep 17 00:00:00 2001
From: Ulu Kyn
Date: Mon, 18 Dec 2023 20:02:16 +0100
Subject: [PATCH 124/194] Added bnpe as file patched by client
---
ryzom/client/src/login_patch.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/client/src/login_patch.cpp b/ryzom/client/src/login_patch.cpp
index 8f7be03cb4..4da9bdf65c 100644
--- a/ryzom/client/src/login_patch.cpp
+++ b/ryzom/client/src/login_patch.cpp
@@ -2532,7 +2532,7 @@ void CPatchThread::run()
CPatchManager::SFileToPatch &rFTP = AllFilesToPatch[i];
string ext = NLMISC::CFile::getExtension(rFTP.FileName);
- if (ext == "bnp" || ext == "snp")
+ if (ext == "bnp" || ext == "snp" || ext == "bnpe")
{
float oldCurrentFilePatched = CurrentFilePatched;
processFile (rFTP);
From 6fba56dc37d8d505801bcc754e976ccfe0ee89c1 Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Wed, 27 Dec 2023 12:36:15 +0100
Subject: [PATCH 125/194] Changed: added secound edit_box and call
search_command on onchange
---
ryzom/client/data/gamedev/interfaces_v3/widgets.xml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
index 293033d0dd..f8013155c5 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
@@ -707,8 +707,11 @@
-
+
+
+
+
From 4dd137a32e953262f48d2fa271e92676480fd6e8 Mon Sep 17 00:00:00 2001
From: Nuno
Date: Wed, 27 Dec 2023 16:18:43 +0100
Subject: [PATCH 126/194] Fix ebh
---
ryzom/client/data/gamedev/interfaces_v3/widgets.xml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
index f8013155c5..33d76d4a13 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
@@ -447,11 +447,11 @@
child_resize_h="true"
display_empty_slot="true"
onclick_l="inv_drop"
- params_l="src=ctrl_launch_modal"
- onclick_r="open_help_auto"
- lmargin="10" rmargin="6"
- tmargin="10" bmargin="6"
- column_max="4"
+ params_l="src=ctrl_launch_modal"
+ onclick_r="open_help_auto"
+ lmargin="10" rmargin="6"
+ tmargin="10" bmargin="6"
+ column_max="4"
rowmax="6"
maxitem="%max_bag_invslot" >
@@ -710,7 +710,7 @@
-
+
From c244c54ac21167e90ec03e6beabe4381ec94a6d9 Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Wed, 3 Jan 2024 20:28:37 +0100
Subject: [PATCH 127/194] Added: new lua commands for search command function
---
.../client/src/interface_v3/lua_ihm_ryzom.cpp | 21 +++++++++++++++++++
ryzom/client/src/interface_v3/lua_ihm_ryzom.h | 3 +++
.../src/interfaces_manager/chat_input.cpp | 19 +++++++++--------
3 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp b/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp
index 981305b502..923607b12e 100644
--- a/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp
+++ b/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp
@@ -482,6 +482,7 @@ void CLuaIHMRyzom::RegisterRyzomFunctions(NLGUI::CLuaState &ls)
ls.registerFunc("getMouseRightDown", getMouseRightDown),
ls.registerFunc("isShiftDown", isShiftDown),
ls.registerFunc("isCtrlDown", isCtrlDown),
+ ls.registerFunc("isTabDown", isTabDown),
ls.registerFunc("getShapeIdAt", getShapeIdAt),
ls.registerFunc("getPlayerFront", getPlayerFront);
ls.registerFunc("getPlayerDirection", getPlayerDirection);
@@ -517,6 +518,7 @@ void CLuaIHMRyzom::RegisterRyzomFunctions(NLGUI::CLuaState &ls)
ls.registerFunc("isPlayerFreeTrial", isPlayerFreeTrial);
ls.registerFunc("isPlayerNewbie", isPlayerNewbie);
ls.registerFunc("isInRingMode", isInRingMode);
+ ls.registerFunc("isPlayerPrivilege", isPlayerPrivilege);
ls.registerFunc("getUserRace", getUserRace);
ls.registerFunc("getSheet2idx", getSheet2idx);
ls.registerFunc("getTargetSlot", getTargetSlot);
@@ -1367,6 +1369,12 @@ int CLuaIHMRyzom::isCtrlDown(CLuaState &ls)
return 1;
}
+int CLuaIHMRyzom::isTabDown(CLuaState &ls)
+{
+ ls.push(Driver->AsyncListener.isKeyDown(KeyTAB));
+ return 1;
+}
+
int CLuaIHMRyzom::getShapeIdAt(CLuaState &ls)
@@ -1755,6 +1763,19 @@ int CLuaIHMRyzom::isInRingMode(CLuaState &ls)
return 1;
}
+// ***************************************************************************
+int CLuaIHMRyzom::isPlayerPrivilege(CLuaState &ls)
+{
+ bool hasPlayerPrivilege = (hasPrivilegeDEV() || hasPrivilegeSGM() || hasPrivilegeGM() || hasPrivilegeVG() || hasPrivilegeSG() || hasPrivilegeG() || hasPrivilegeEM() || hasPrivilegeEG());
+ if(hasPlayerPrivilege)
+ {
+ return 1;
+ }
+ else{
+ return 0;
+ }
+}
+
// ***************************************************************************
int CLuaIHMRyzom::getUserRace(CLuaState &ls)
{
diff --git a/ryzom/client/src/interface_v3/lua_ihm_ryzom.h b/ryzom/client/src/interface_v3/lua_ihm_ryzom.h
index 517519ee09..068d452e43 100644
--- a/ryzom/client/src/interface_v3/lua_ihm_ryzom.h
+++ b/ryzom/client/src/interface_v3/lua_ihm_ryzom.h
@@ -50,6 +50,7 @@ class CLuaIHMRyzom
static int updateAllLocalisedElements(CLuaState &ls);
static int isShiftDown(CLuaState &ls);
static int isCtrlDown(CLuaState &ls);
+ static int isTabDown(CLuaState &ls);
static int getTimestampHuman(CLuaState &ls);
static int breakPoint(CLuaState &ls);
static int i18n(CLuaState &ls); // retrieve an unicode string from CI18N
@@ -106,6 +107,7 @@ class CLuaIHMRyzom
static int isPlayerFreeTrial(CLuaState &ls);
static int isPlayerNewbie(CLuaState &ls);
static int isInRingMode(CLuaState &ls);
+ static int isPlayerPrivilege(CLuaState &ls);
static int getUserRace(CLuaState &ls);
static int getSheet2idx(CLuaState &ls);
static int getTargetSlot(CLuaState &ls);
@@ -137,6 +139,7 @@ class CLuaIHMRyzom
static int getShapeColOrient(CLuaState &ls);
static int deleteShape(CLuaState &ls);
+
///////////////////////////// Standard Lua stuff ends here //////////////////////////////////////////////
static sint32 getDbProp(const std::string &dbProp); // return 0 if not found.
diff --git a/ryzom/client/src/interfaces_manager/chat_input.cpp b/ryzom/client/src/interfaces_manager/chat_input.cpp
index 6d4ae4119f..a11bfce8eb 100644
--- a/ryzom/client/src/interfaces_manager/chat_input.cpp
+++ b/ryzom/client/src/interfaces_manager/chat_input.cpp
@@ -126,15 +126,16 @@ void CChatInput::operator()(const CEvent& event)
// TAB
case KeyTAB:
- if(insert())
- {
- if(!_Str.empty() && _Str[0] == '/')
- {
- string command = _Str.toString().substr(1);
- ICommand::expand(command);
- _Str = '/' + command;
- }
- }
+ //comment out because no one used it and will be replaces with a lua function search_command()
+ //if(insert())
+ //{
+ // if(!_Str.empty() && _Str[0] == '/')
+ // {
+ // string command = _Str.toString().substr(1);
+ // ICommand::expand(command);
+ // _Str = '/' + command;
+ // }
+ //}
break;
// ESCAPE
From afe7cb3dc3bd4055d2639a0094c83723edec3d47 Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Thu, 4 Jan 2024 19:12:06 +0100
Subject: [PATCH 128/194] Changed: add new interface window for menu to select
autocomplet
---
ryzom/client/data/gamedev/interfaces_v3/widgets.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
index 33d76d4a13..edd8b47528 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
@@ -707,7 +707,8 @@
-
+
+
From f05ca425cd991a95d8ad2ee836f2a2edf5b8f42a Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Fri, 5 Jan 2024 11:02:04 +0100
Subject: [PATCH 129/194] Changed: added new command ?
---
ryzom/client/data/gamedev/interfaces_v3/widgets.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
index edd8b47528..54e538f3e6 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
@@ -708,6 +708,7 @@
+
From e18fbebeb29d52fa3aa9422c6fe57cfcbd4c75a7 Mon Sep 17 00:00:00 2001
From: Tobias Peters
Date: Fri, 29 Dec 2023 08:39:31 +0100
Subject: [PATCH 130/194] Merge pull request #694 from
zerotacg/feature/fix-cmake-subdirs-deprecation
replace deprecated cmake subdirs command with add_subdirectory
---
nel/include/CMakeLists.txt | 3 +-
nel/include/nel/CMakeLists.txt | 18 ++---
nel/tools/3d/CMakeLists.txt | 80 +++++++++----------
nel/tools/logic/CMakeLists.txt | 3 +-
nel/tools/memory/CMakeLists.txt | 2 +-
nel/tools/misc/CMakeLists.txt | 18 ++---
.../misc/log_analyser_plug_ins/CMakeLists.txt | 2 +-
7 files changed, 60 insertions(+), 66 deletions(-)
diff --git a/nel/include/CMakeLists.txt b/nel/include/CMakeLists.txt
index b234f8fdeb..62534522c4 100644
--- a/nel/include/CMakeLists.txt
+++ b/nel/include/CMakeLists.txt
@@ -1,2 +1 @@
-SUBDIRS(nel)
-
+add_subdirectory(nel)
\ No newline at end of file
diff --git a/nel/include/nel/CMakeLists.txt b/nel/include/nel/CMakeLists.txt
index fda0ddbe92..8e50f3e7ef 100644
--- a/nel/include/nel/CMakeLists.txt
+++ b/nel/include/nel/CMakeLists.txt
@@ -1,7 +1,7 @@
-SUBDIRS(misc)
+ADD_SUBDIRECTORY(misc)
IF(WITH_3D)
- SUBDIRS(3d)
+ ADD_SUBDIRECTORY(3d)
ENDIF()
IF(WITH_WEB OR WITH_GUI)
@@ -13,29 +13,29 @@ IF(WITH_GUI)
ENDIF()
IF(WITH_GEORGES)
- SUBDIRS(georges)
+ ADD_SUBDIRECTORY(georges)
ENDIF()
IF(WITH_LIGO)
- SUBDIRS(ligo)
+ ADD_SUBDIRECTORY(ligo)
ENDIF()
IF(WITH_LOGIC)
- SUBDIRS(logic)
+ ADD_SUBDIRECTORY(logic)
ENDIF()
IF(WITH_NET)
- SUBDIRS(net)
+ ADD_SUBDIRECTORY(net)
ENDIF()
IF(WITH_SOUND)
- SUBDIRS(sound)
+ ADD_SUBDIRECTORY(sound)
ENDIF()
IF(WITH_PACS)
- SUBDIRS(pacs)
+ ADD_SUBDIRECTORY(pacs)
ENDIF()
IF(WITH_NEL_CEGUI)
- SUBDIRS(cegui)
+ ADD_SUBDIRECTORY(cegui)
ENDIF()
diff --git a/nel/tools/3d/CMakeLists.txt b/nel/tools/3d/CMakeLists.txt
index 8bf56b6c81..bad0382bf8 100644
--- a/nel/tools/3d/CMakeLists.txt
+++ b/nel/tools/3d/CMakeLists.txt
@@ -2,52 +2,48 @@
IF(WITH_NEL_TOOLS)
IF(WITH_3D)
IF(WITH_ASSIMP)
- SUBDIRS(
- mesh_utils
- mesh_export)
+ ADD_SUBDIRECTORY(mesh_utils)
+ ADD_SUBDIRECTORY(mesh_export)
ENDIF()
IF(WITH_LIBGSF)
- SUBDIRS(
- pipeline_max
- pipeline_max_dump
- pipeline_max_rewrite_assets)
+ ADD_SUBDIRECTORY(pipeline_max)
+ ADD_SUBDIRECTORY(pipeline_max_dump)
+ ADD_SUBDIRECTORY(pipeline_max_rewrite_assets)
ENDIF()
- SUBDIRS(
- anim_builder
- animation_set_builder
- build_clod_bank
- build_clodtex
- build_coarse_mesh
- build_far_bank
- build_shadow_skin
- build_smallbank
- cluster_viewer
- file_info
- ig_add
- ig_elevation
- ig_info
- ig_lighter
- lightmap_optimizer
- zone_dependencies
- zone_ig_lighter
- zone_lighter
- zone_welder
- unbuild_elevation
- zone_elevation
- shapes_exporter
- shape2obj
- zone_check_bind
- zone_dump
- zviewer)
+ ADD_SUBDIRECTORY(anim_builder)
+ ADD_SUBDIRECTORY(animation_set_builder)
+ ADD_SUBDIRECTORY(build_clod_bank)
+ ADD_SUBDIRECTORY(build_clodtex)
+ ADD_SUBDIRECTORY(build_coarse_mesh)
+ ADD_SUBDIRECTORY(build_far_bank)
+ ADD_SUBDIRECTORY(build_shadow_skin)
+ ADD_SUBDIRECTORY(build_smallbank)
+ ADD_SUBDIRECTORY(cluster_viewer)
+ ADD_SUBDIRECTORY(file_info)
+ ADD_SUBDIRECTORY(ig_add)
+ ADD_SUBDIRECTORY(ig_elevation)
+ ADD_SUBDIRECTORY(ig_info)
+ ADD_SUBDIRECTORY(ig_lighter)
+ ADD_SUBDIRECTORY(lightmap_optimizer)
+ ADD_SUBDIRECTORY(zone_dependencies)
+ ADD_SUBDIRECTORY(zone_ig_lighter)
+ ADD_SUBDIRECTORY(zone_lighter)
+ ADD_SUBDIRECTORY(zone_welder)
+ ADD_SUBDIRECTORY(unbuild_elevation)
+ ADD_SUBDIRECTORY(zone_elevation)
+ ADD_SUBDIRECTORY(shapes_exporter)
+ ADD_SUBDIRECTORY(shape2obj)
+ ADD_SUBDIRECTORY(zone_check_bind)
+ ADD_SUBDIRECTORY(zone_dump)
+ ADD_SUBDIRECTORY(zviewer)
ENDIF()
- SUBDIRS(
- build_interface
- unbuild_interface
- get_neighbors
- textures_optimizer
- textures_tool
- tga_cut
- tga_resize)
+ ADD_SUBDIRECTORY(build_interface)
+ ADD_SUBDIRECTORY(unbuild_interface)
+ ADD_SUBDIRECTORY(get_neighbors)
+ ADD_SUBDIRECTORY(textures_optimizer)
+ ADD_SUBDIRECTORY(textures_tool)
+ ADD_SUBDIRECTORY(tga_cut)
+ ADD_SUBDIRECTORY(tga_resize)
ENDIF()
# For tools selection of only max plugins
diff --git a/nel/tools/logic/CMakeLists.txt b/nel/tools/logic/CMakeLists.txt
index 0f65ab8f67..520a057702 100644
--- a/nel/tools/logic/CMakeLists.txt
+++ b/nel/tools/logic/CMakeLists.txt
@@ -1,3 +1,4 @@
IF(MFC_FOUND)
- SUBDIRS(logic_editor_dll logic_editor_exe)
+ ADD_SUBDIRECTORY(logic_editor_dll)
+ ADD_SUBDIRECTORY(logic_editor_exe)
ENDIF()
diff --git a/nel/tools/memory/CMakeLists.txt b/nel/tools/memory/CMakeLists.txt
index 458a4cc668..66dc4b6e8d 100644
--- a/nel/tools/memory/CMakeLists.txt
+++ b/nel/tools/memory/CMakeLists.txt
@@ -1 +1 @@
-SUBDIRS(memlog)
+ADD_SUBDIRECTORY(memlog)
diff --git a/nel/tools/misc/CMakeLists.txt b/nel/tools/misc/CMakeLists.txt
index dbe814d3fc..c1f6bdfb7e 100644
--- a/nel/tools/misc/CMakeLists.txt
+++ b/nel/tools/misc/CMakeLists.txt
@@ -4,16 +4,14 @@ IF(WITH_QT OR WITH_QT5)
ENDIF()
IF(WITH_NEL_TOOLS)
- SUBDIRS(
- bnp_make
- snp_make
- disp_sheet_id
- extract_filename
- lock
- make_sheet_id
- xml_packer
- utf_generator
- )
+ ADD_SUBDIRECTORY(bnp_make)
+ ADD_SUBDIRECTORY(snp_make)
+ ADD_SUBDIRECTORY(disp_sheet_id)
+ ADD_SUBDIRECTORY(extract_filename)
+ ADD_SUBDIRECTORY(lock)
+ ADD_SUBDIRECTORY(make_sheet_id)
+ ADD_SUBDIRECTORY(xml_packer)
+ ADD_SUBDIRECTORY(utf_generator)
IF(WITH_QT OR WITH_QT5)
ADD_SUBDIRECTORY(words_dic_qt)
diff --git a/nel/tools/misc/log_analyser_plug_ins/CMakeLists.txt b/nel/tools/misc/log_analyser_plug_ins/CMakeLists.txt
index c773742110..a6ffad5815 100644
--- a/nel/tools/misc/log_analyser_plug_ins/CMakeLists.txt
+++ b/nel/tools/misc/log_analyser_plug_ins/CMakeLists.txt
@@ -1 +1 @@
-SUBDIRS(extract_warnings)
+ADD_SUBDIRECTORY(extract_warnings)
From 6bacee167778dc4ee5037621f795e9c8afd58c47 Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Sun, 7 Jan 2024 22:08:36 +0100
Subject: [PATCH 131/194] Changed: moved lua code to client, add new
getPlayerPrivs lua command
---
.../gamedev/interfaces_v3/search_command.lua | 778 ++++++++++++++++++
.../data/gamedev/interfaces_v3/widgets.xml | 3 +-
.../client/src/interface_v3/lua_ihm_ryzom.cpp | 21 +
ryzom/client/src/interface_v3/lua_ihm_ryzom.h | 1 +
4 files changed, 802 insertions(+), 1 deletion(-)
create mode 100644 ryzom/client/data/gamedev/interfaces_v3/search_command.lua
diff --git a/ryzom/client/data/gamedev/interfaces_v3/search_command.lua b/ryzom/client/data/gamedev/interfaces_v3/search_command.lua
new file mode 100644
index 0000000000..7b1be6fdee
--- /dev/null
+++ b/ryzom/client/data/gamedev/interfaces_v3/search_command.lua
@@ -0,0 +1,778 @@
+if not SearchCommand then
+ --global SearchCommand class
+ SearchCommand = {
+ identifier_found = {},
+ command_self = "",
+ command_parameter_list = {},
+ valid_commands_list = {},
+ commands_list = {},
+ key_tab_down = 0,
+ modal_open=0,
+ process_list={}
+ }
+end
+
+--setup data
+--commands_list[x] = {"type(client/shard)","priv(player/privs)","uitranslation for description","command", "parameter1(playername/text/number)", "parameter2(playername/text/number)" ..}
+SearchCommand.commands_list = {}
+
+local player_priv = isPlayerPrivilege()
+if(player_priv)then
+ table.insert(SearchCommand.commands_list,{"client", "player", "help_desc", "?", {{"text:",""}, {"all","help_all_desc"}}, {{"client/shard",""}}})
+else
+ table.insert(SearchCommand.commands_list,{"client", "player", "help_desc", "?", {{"text:",""}, {"all","help_all_desc"}}})
+end
+
+--client commands
+table.insert(SearchCommand.commands_list,{"client", "player", "time_desc", "time"})
+table.insert(SearchCommand.commands_list,{"client", "player", "version_desc", "version"})
+table.insert(SearchCommand.commands_list,{"client", "player", "where_desc", "where"})
+table.insert(SearchCommand.commands_list,{"client", "player", "playedTime_desc", "playedTime"})
+table.insert(SearchCommand.commands_list,{"client", "player", "who_desc", "who", {{"gm","who_gm_desc"}}, {{"channel","who_channel_desc"}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "guildinvite_desc", "guildinvite",{{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "guildmotd_desc", "guildmotd",{{"text:","guildmotd_message_desc"},{"?","guildmotd_?_desc"}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "league_desc", "league",{{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "leagueinvite_desc", "leagueinvite",{{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "leaguequit_desc", "leaguequit"})
+table.insert(SearchCommand.commands_list,{"client", "player", "leaguekick_desc", "leaguekick",{{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "afk_desc", "afk",{{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "assist_desc", "assist"})
+table.insert(SearchCommand.commands_list,{"client", "player", "assist_desc", "as"})
+table.insert(SearchCommand.commands_list,{"client", "player", "self_desc", "self"})
+table.insert(SearchCommand.commands_list,{"client", "player", "brutalQuit_desc", "brutalQuit"})
+table.insert(SearchCommand.commands_list,{"client", "player", "chatLog_desc", "chatLog"})
+table.insert(SearchCommand.commands_list,{"client", "player", "follow_desc", "follow"})
+table.insert(SearchCommand.commands_list,{"client", "player", "ignore_desc", "ignore",{{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "invite_desc", "invite",{{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "mount_desc", "mount"})
+table.insert(SearchCommand.commands_list,{"client", "player", "unmount_desc", "unmount"})
+table.insert(SearchCommand.commands_list,{"client", "player", "random_desc", "random", {{"number:",""}}, {{"number:",""}}, {{"hide ",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "skiptutorial_desc", "skiptutorial"})
+table.insert(SearchCommand.commands_list,{"client", "player", "sleep_desc", "sleep", {{"number:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "tar_desc", "tar", {{"text:",""}}, {{"|quiet=true","tar_quiet_desc"}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "target_quiet_desc", "target_quiet"})
+table.insert(SearchCommand.commands_list,{"client", "player", "target_quiet_desc", "tarq"})
+table.insert(SearchCommand.commands_list,{"client", "player", "lmtar_desc", "lmtar", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "chat_desc", "chat"})
+table.insert(SearchCommand.commands_list,{"client", "player", "go_desc", "go"})
+table.insert(SearchCommand.commands_list,{"client", "player", "appzone_desc", "appzone", {{"number:","appzone_AppId_desc"},{"hide","appzone_hide_desc"}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "setuiscale_desc", "setuiscale", {{"number:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "createGroup_desc", "createGroup", {{"text:","createGroup_OutfitGroupName_desc"},{"true","createGroup_true_desc"}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "moveGroup_desc", "moveGroup", {{"text:",""}},{{"text:",""},{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "equipGroup_desc", "equipGroup", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "deleteGroup_desc", "deleteGroup", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "naked_desc", "naked"})
+table.insert(SearchCommand.commands_list,{"client", "player", "nude_desc", "nude"})
+table.insert(SearchCommand.commands_list,{"client", "player", "listGroup_desc", "listGroup"})
+table.insert(SearchCommand.commands_list,{"client", "player", "say_desc", "say",{{">","s_param1_desc"}}, {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "say_desc", "s",{{">","s_param1_desc"}}, {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "shout_desc", "shout", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "shout_desc", "sh", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "shout_desc", "y", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "shout_desc", "yell", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "guild_desc", "guild", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "guild_desc", "g", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "guild_desc", "gu", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "region_desc", "region", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "region_desc", "r", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "region_desc", "re", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "team_desc", "team", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "team_desc", "te", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "team_desc", "party", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "team_desc", "p", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "universe_desc", "universe", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "universe_desc", "u", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "0_desc", "0", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "1_desc", "1", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "2_desc", "2", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "3_desc", "3", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "4_desc", "4", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "channel_desc", "channel",{{"text:",""}}, {{"text:",""},{"*","channel_leave_desc"}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "tell_desc", "tell",{{"text:",""}}, {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"client", "player", "tell_desc", "t",{{"text:",""}}, {{"text:",""}}})
+--END client commands
+
+
+--shard commands
+table.insert(SearchCommand.commands_list,{"shard", "player", "a_desc", "a", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "privs", "b_desc", "b", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "privs", "c_desc", "c", {{"text:",""}}, {{"text:",""}}})
+
+table.insert(SearchCommand.commands_list,{"shard", "player", "showOnline_desc", "showOnline", {{"1","showOnline_1_desc"}, {"2","showOnline_2_desc"},{"0","showOnline_0_desc"}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "roomInvite_desc", "roomInvite", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "setDontTranslateLangs_desc", "setDontTranslateLangs", {{"codelang|codelang","setDontTranslateLangs_codelang_desc"}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "connectLangChannel_desc", "connectLangChannel",{{"fr",""},{"en",""},{"de",""},{"es",""},{"ru",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "privs", "Position_desc", "Position", {{"number:,[,]",""},{"text:",""},{"text:",""}}})
+--END shard commands
+
+function SearchCommand:find(tbl, value)
+ for k, v in pairs(tbl) do
+ if v == value then
+ return k
+ end
+ end
+ return nil
+end
+
+function SearchCommand:help_show_all(parameter)
+ local player_priv = isPlayerPrivilege()
+
+ debug("help parameter: "..parameter)
+
+ if(parameter == "all")then
+ displaySystemInfo(ucstring("######################## command help all #######################"), "AROUND")
+ else
+ displaySystemInfo(ucstring("######################## command help all / filter '"..parameter.."' #######################"), "AROUND")
+ end
+
+ for c = 1, #self.commands_list do
+ local command_are_allowed = 0
+ if(self.commands_list[c][2] == "player")then
+ command_are_allowed = 1
+ else
+ if(player_priv)then
+ command_are_allowed = 1
+ end
+ end
+
+ if(command_are_allowed == 1)then
+ if(self.commands_list[c][1] == parameter or parameter == "all")then
+ local arg_display=""
+ displaySystemInfo(ucstring(""), "AROUND")
+
+ max_arguments = #self.commands_list[c] - 4
+ for ad = 1, max_arguments do
+ if(ad > 1)then
+ arg_display=arg_display.." [arg"..ad.."]"
+ else
+ arg_display="[arg"..ad.."]"
+ end
+ end
+
+ displaySystemInfo(ucstring(c..". "..self.commands_list[c][4].." "..arg_display.." '"..self.commands_list[c][3].."'"), "AROUND")
+ displaySystemInfo(ucstring(" type: "..self.commands_list[c][1]), "AROUND")
+
+ for ac = 1, max_arguments do
+ displaySystemInfo(ucstring(" arg"..ac.." :"), "AROUND")
+ for pc = 1, #self.commands_list[c][4+ac] do
+ if(self.commands_list[c][4+ac][pc][2] == "")then
+ displaySystemInfo(ucstring(" "..self.commands_list[c][4+ac][pc][1]), "AROUND")
+ else
+ displaySystemInfo(ucstring(" "..self.commands_list[c][4+ac][pc][1].." '"..self.commands_list[c][4+ac][pc][2].."'"), "AROUND")
+ end
+ end
+ end
+ if(self.commands_list[c][4] ~= "a" and self.commands_list[c][4] ~= "b" and self.commands_list[c][4] ~= "c")then
+ if(self.commands_list[c][1] == "shard")then
+ displaySystemInfo(ucstring(" example: /a "..self.commands_list[c][4].." , /c riasan "..self.commands_list[c][4]), "AROUND")
+ end
+ end
+ end
+ end
+ end
+
+ displaySystemInfo(ucstring(""), "AROUND")
+ displaySystemInfo(ucstring("############################ end ##########################"), "AROUND")
+end
+
+function SearchCommand:help(uiId,input)
+ --debug("search_input: "..input)
+
+ local command_split = {}
+
+ if(input ~= "all")then
+ for substring in input:gmatch("%S+") do
+ table.insert(command_split, substring)
+ end
+ else
+ command_split[1]="all"
+ command_split[2]=""
+ end
+
+ if(command_split[1] == "all")then
+ if(command_split[2] == "")then
+ SearchCommand:help_show_all(command_split[1])
+ else
+ SearchCommand:help_show_all(command_split[2])
+ end
+ else
+ --show help for command input
+ local command_found = 0
+ for c = 1, #self.commands_list do
+ local command_are_allowed = 0
+ if(self.commands_list[c][4] == command_split[1])then
+ command_found = 1
+ displaySystemInfo(ucstring("######################## command help "..command_split[1].." #######################"), "AROUND")
+
+ local player_priv = isPlayerPrivilege()
+ if(self.commands_list[c][2] == "player")then
+ command_are_allowed = 1
+ else
+ if(player_priv)then
+ command_are_allowed = 1
+ end
+ end
+
+ if(command_are_allowed == 1)then
+ local arg_display=""
+ displaySystemInfo(ucstring(""), "AROUND")
+
+ max_arguments = #self.commands_list[c] - 4
+ for ad = 1, max_arguments do
+ if(ad > 1)then
+ arg_display=arg_display.." [arg"..ad.."]"
+ else
+ arg_display="[arg"..ad.."]"
+ end
+ end
+ displaySystemInfo(ucstring("desc: "..self.commands_list[c][3]), "AROUND")
+ displaySystemInfo(ucstring("type: "..self.commands_list[c][1]), "AROUND")
+ displaySystemInfo(ucstring(""), "AROUND")
+ displaySystemInfo(ucstring(self.commands_list[c][4].." "..arg_display), "AROUND")
+
+ for ac = 1, max_arguments do
+ displaySystemInfo(ucstring(" arg"..ac.." :"), "AROUND")
+ for pc = 1, #self.commands_list[c][4+ac] do
+ if(self.commands_list[c][4+ac][pc][2] == "")then
+ displaySystemInfo(ucstring(" "..self.commands_list[c][4+ac][pc][1]), "AROUND")
+ else
+ displaySystemInfo(ucstring(" "..self.commands_list[c][4+ac][pc][1].." '"..self.commands_list[c][4+ac][pc][2].."'"), "AROUND")
+ end
+ end
+ end
+ if(self.commands_list[c][4] ~= "a" and self.commands_list[c][4] ~= "b" and self.commands_list[c][4] ~= "c")then
+ if(self.commands_list[c][1] == "shard")then
+ displaySystemInfo(ucstring(" example: /a "..self.commands_list[c][4].." , /c riasan "..self.commands_list[c][4]), "AROUND")
+ end
+ end
+ displaySystemInfo(ucstring(""), "AROUND")
+ displaySystemInfo(ucstring("############################ end ############################"), "AROUND")
+ end
+ end
+ end
+ if(command_found == 0)then
+ displaySystemInfo(ucstring("Command not found"), "AROUND")
+ end
+ end
+end
+
+function SearchCommand:check_autocomplet(uiId)
+ --debug("try_autocomplte")
+ if(self.modal_open==1)then
+ if next(self.valid_commands_list)then
+ --debug("check_autocomplet"..self.valid_commands_list[1])
+ SearchCommand:finish_commands(self.valid_commands_list[1],uiId)
+ end
+ end
+end
+
+function SearchCommand:key_trigger(uiId)
+ base_window_id = string.sub(uiId,0,string.len(uiId)-15);
+ local check_window = getUI(base_window_id)
+
+ if(check_window.active == false)then
+ --debug("window closed")
+ local timer_function_on_ui_window = getUI(uiId)
+ removeOnDbChange(timer_function_on_ui_window,"@UI:VARIABLES:CURRENT_SERVER_TICK")
+ end
+
+ is_tab_down = isTabDown()
+ if(key_tab_down == 1)then
+ key_tab_down = 0
+ SearchCommand:check_autocomplet(uiId)
+ elseif(is_tab_down)then
+ key_tab_down = 0
+ SearchCommand:check_autocomplet(uiId)
+ end
+
+ --check is input are empty if yes cancel all stuff
+ local text_from_input = getUI(uiId)
+ if(text_from_input.input_string == "")then
+ SearchCommand:search(uiId)
+ end
+
+end
+
+function SearchCommand:update_process_list(uiId,p_status)
+ local found_process_status=0
+
+ --check if we already have a process status for this window
+ if next(self.process_list)then
+ for pc = 1, #self.process_list do
+ if(self.process_list[pc][1] == uiId)then
+ found_process_status=1
+ end
+ end
+ end
+
+ if(found_process_status == 0)then
+ table.insert(self.process_list,{uiId, p_status})
+ else
+ if next(self.process_list)then
+ for pc = 1, #self.process_list do
+ if(self.process_list[pc][1] == uiId)then
+ self.process_list[pc][2]=p_status
+ end
+ end
+ end
+ end
+end
+
+function SearchCommand:read_process_status(uiId)
+ local process_status = 0
+ if next(self.process_list)then
+ for pc = 1, #self.process_list do
+ if(self.process_list[pc][1] == uiId)then
+ process_status=self.process_list[pc][2]
+ end
+ end
+ end
+ return process_status
+end
+
+function SearchCommand:search(uiId)
+ is_tab_down = isTabDown()
+ if(is_tab_down)then
+ key_tab_down = 1
+ end
+ --trigger command by onchange a singel input
+
+ self.command_parameter_list = {}
+ local text_from_input = getUI(uiId)
+ command_identifier = string.sub(text_from_input.input_string, 0, 1)
+
+ --check if first char are a "/" from text_from_input
+ if(command_identifier == "/")then
+ --debug("identifier found")
+
+ if(SearchCommand:find(self.identifier_found, uiId) == nil)then
+ table.insert(self.identifier_found, uiId)
+
+ local timer_str = "@UI:VARIABLES:CURRENT_SERVER_TICK"
+ local timer_function_on_ui_window = getUI(uiId)
+ addOnDbChange(timer_function_on_ui_window, timer_str, "SearchCommand:key_trigger('"..uiId.."')")
+ end
+
+
+
+ max_string_count = string.len(text_from_input.input_string)
+
+ if(max_string_count == 1)then
+ self.command_self=""
+ SearchCommand:write_command_help(uiId,"/ or /? all")
+ SearchCommand:close_modal()
+
+ --update process_status
+ SearchCommand:update_process_list(uiId,0)
+ else
+ local command_first = string.sub(text_from_input.input_string, 2, (max_string_count))
+ --split text to commands
+ for substring in command_first:gmatch("%S+") do
+ table.insert(self.command_parameter_list, substring)
+ end
+
+ self.command_self=self.command_parameter_list[1]
+
+ --update process_status
+ SearchCommand:update_process_list(uiId,#self.command_parameter_list)
+
+ --go and search we found a mathing command
+ SearchCommand:write_command_help_clear(uiId)
+ SearchCommand:build_command_helper(uiId)
+ end
+ else
+ --check if we found the identifier
+ if(SearchCommand:find(self.identifier_found, uiId) ~= nil)then
+ --debug("clear all")
+ --run clear functions here
+
+ table.remove(self.identifier_found, SearchCommand:find(self.identifier_found, uiId))
+ local timer_function_on_ui_window = getUI(uiId)
+ removeOnDbChange(timer_function_on_ui_window,"@UI:VARIABLES:CURRENT_SERVER_TICK")
+
+ SearchCommand:close_modal()
+ SearchCommand:write_command_help_clear(uiId)
+ end
+ end
+end
+
+function SearchCommand:build_valid_command_list(command_input)
+ self.valid_commands_list = {}
+ local player_priv = isPlayerPrivilege()
+ local count_found=0
+ local found_command=0
+
+ for c = 1, #self.commands_list do
+ local command_are_allowed = 0
+ if(self.commands_list[c][2] == "player")then
+ command_are_allowed = 1
+ else
+ if(player_priv)then
+ command_are_allowed = 1
+ end
+ end
+
+ --check if we want used a client or shared command
+ if(self.command_self == "a" or self.command_self == "b" or self.command_self == "c")then
+ if(self.commands_list[c][1] == "shard")then
+ command_are_allowed = 1
+ else
+ command_are_allowed = 0
+ end
+ else
+ if(self.commands_list[c][1] == "shard")then
+ if(self.command_self == "?")then
+ command_are_allowed = 1
+ else
+ command_are_allowed = 0
+ end
+ end
+ end
+
+ if(command_are_allowed == 1)then
+ if(command_input ~= "")then
+ if(string.lower(self.commands_list[c][4]) == string.lower(command_input))then
+ found_command=c
+ count_found=1
+ else
+ if string.find(string.lower(self.commands_list[c][4]), string.lower(command_input))then
+ table.insert(self.valid_commands_list,self.commands_list[c][4])
+ count_found=count_found+1
+ end
+ end
+ end
+ end
+ end
+
+ if(count_found == 0)then
+ --debug("no_command_found_close_modal")
+ SearchCommand:close_modal()
+ end
+ return found_command
+end
+
+function SearchCommand:build_valid_player_list(playername_input)
+ player_list = {}
+ player_list[1] = "rias"
+ player_list[2] = "uluk"
+ player_list[3] = "riasan"
+ player_list[4] = "Limay"
+ player_list[5] = "Neira"
+ player_list[6] = "Beastie"
+ player_list[7] = "Audeva"
+ player_list[8] = "Decacaon"
+ player_list[9] = "Livege"
+ player_list[10] = "Purg"
+ player_list[11] = "Xxramusxx"
+ player_list[12] = "Kronoss"
+ player_list[13] = "Livan"
+ player_list[14] = "Mifisto"
+ player_list[15] = "Progulschik"
+ player_list[16] = "Darwyn"
+ player_list[17] = "Aprak"
+ player_list[18] = "Dorothee"
+ player_list[19] = "Zillah"
+
+ self.valid_commands_list = {}
+ local count_found=0
+ local found_playername=0
+
+ for c = 1, #player_list do
+ if(playername_input ~= "")then
+ if(string.lower(player_list[c]) == string.lower(playername_input))then
+ found_playername=c
+ count_found=1
+ else
+ if string.find(string.lower(player_list[c]), string.lower(playername_input))then
+ table.insert(self.valid_commands_list,player_list[c])
+ count_found=count_found+1
+ end
+ end
+ end
+ end
+
+ if(count_found == 0)then
+ SearchCommand:close_modal()
+ end
+ return found_playername
+end
+
+function SearchCommand:search_build_player_list(uiId,playername)
+ local found_player=0
+ local found_command=0
+ found_player=SearchCommand:build_valid_player_list(playername)
+
+ SearchCommand:search_build_argument_list(uiId,self.command_self)
+
+ if(found_player ~= 0)then
+ SearchCommand:close_modal()
+ else
+ if next(self.valid_commands_list) ~= nil then
+ SearchCommand:show_more_options(uiId)
+ end
+ end
+end
+
+function SearchCommand:search_build_command_list(uiId,command,show_argument_help)
+ local found_command=0
+ --debug("search_build_command_list")
+
+ found_command=SearchCommand:build_valid_command_list(command)
+
+ if(found_command ~= 0)then
+ SearchCommand:close_modal()
+ else
+ if next(self.valid_commands_list) ~= nil then
+ SearchCommand:show_more_options(uiId)
+ end
+ end
+
+ if(show_argument_help)then
+ if(found_command ~= 0)then
+ SearchCommand:search_build_argument_list(uiId,command)
+ end
+ else
+ SearchCommand:search_build_argument_list(uiId,self.command_self)
+ end
+end
+
+function SearchCommand:search_build_argument_list(uiId,command_to_show_argument)
+ local argument_help=""
+ local command_index=0
+ local max_arguments=0
+ local current_args=0
+ local special_offset=0
+
+ if(command_to_show_argument == "a")then
+ if(#self.command_parameter_list >= 2)then
+ command_to_show_argument=self.command_parameter_list[2]
+ special_offset=1
+ end
+ end
+
+ if(command_to_show_argument == "b")then
+ if(#self.command_parameter_list >= 2)then
+ command_to_show_argument=self.command_parameter_list[2]
+ special_offset=1
+ end
+ end
+
+ if(command_to_show_argument == "c")then
+ if(#self.command_parameter_list >= 3)then
+ command_to_show_argument=self.command_parameter_list[3]
+ special_offset=2
+ end
+ end
+
+ for c = 1, #self.commands_list do
+ if(self.commands_list[c][4] == command_to_show_argument)then
+ command_index=c
+ end
+ end
+
+ if(command_index ~= 0)then
+
+ max_arguments = #self.commands_list[command_index] - 4
+
+ for ac = 1, max_arguments do
+ max_args=#self.command_parameter_list
+ current_args=max_args - 1
+ --debug("p: "..#self.command_parameter_list.." l: "..ac)
+
+ if(special_offset ~= 0)then
+ max_args=max_args - special_offset
+ current_args=max_args - 1
+ end
+
+ if(max_args == ac or max_args == 1)then
+ for pc = 1, #self.commands_list[command_index][4+ac] do
+ if(pc > 1)then
+ argument_help=argument_help.."/"..self.commands_list[command_index][4+ac][pc][1]
+ else
+ argument_help=argument_help.." "..self.commands_list[command_index][4+ac][pc][1]
+ end
+ end
+ else
+ argument_help=argument_help.." "..self.command_parameter_list[ac+1+special_offset]
+ end
+ end
+
+ if(current_args > max_arguments)then
+ diff=current_args-max_arguments
+
+ for ma = 1, diff do
+ if(self.command_self == "a")then
+ argument_help=argument_help.." "..self.command_parameter_list[max_arguments+2+ma]
+ elseif(self.command_self == "b")then
+ argument_help=argument_help.." "..self.command_parameter_list[max_arguments+2+ma]
+ elseif(self.command_self == "c")then
+ argument_help=argument_help.." "..self.command_parameter_list[max_arguments+3+ma]
+ else
+ argument_help=argument_help.." "..self.command_parameter_list[max_arguments+1+ma]
+ end
+ end
+
+ argument_help=argument_help.." Warning to many Arguments"
+ end
+
+ if(self.command_self == "a" and #self.command_parameter_list >= 2)then
+ SearchCommand:write_command_help(uiId,"/"..self.command_parameter_list[1].." "..self.command_parameter_list[2]..""..argument_help)
+ elseif(self.command_self == "b" and #self.command_parameter_list >= 2)then
+ SearchCommand:write_command_help(uiId,"/"..self.command_parameter_list[1].." "..self.command_parameter_list[2]..""..argument_help)
+ elseif(self.command_self == "c" and #self.command_parameter_list >= 3)then
+ SearchCommand:write_command_help(uiId,"/"..self.command_parameter_list[1].." "..self.command_parameter_list[2].." "..self.command_parameter_list[3]..""..argument_help)
+ else
+ SearchCommand:write_command_help(uiId,"/"..self.commands_list[command_index][4]..""..argument_help)
+ end
+ end
+end
+
+function SearchCommand:find_argument(command,uiId)
+ --debug("find_argument")
+ local argument_name = ""
+ local special_offset = 0
+ local current_parm = 0
+ local max_command_args = 0
+
+ if(command == "a")then
+ if(#self.command_parameter_list > 2)then
+ command=self.command_parameter_list[2]
+ special_offset=2
+ end
+ end
+
+ if(command == "b")then
+ if(#self.command_parameter_list > 2)then
+ command=self.command_parameter_list[2]
+ special_offset=2
+ end
+ end
+
+ if(command == "c")then
+ if(#self.command_parameter_list > 3)then
+ command=self.command_parameter_list[3]
+ special_offset=3
+ end
+ end
+
+ --debug("special_offset: "..special_offset.." command: "..command)
+
+ for c = 1, #self.commands_list do
+ if(self.commands_list[c][4] == command)then
+ if(special_offset ~= 0)then
+ current_parm=SearchCommand:read_process_status(uiId) - special_offset
+ else
+ current_parm=SearchCommand:read_process_status(uiId) - 1
+ end
+
+ max_command_args = #self.commands_list[c] - 4
+
+ if(current_parm <= max_command_args)then
+ for pc = 1, #self.commands_list[c][4+current_parm] do
+ argument_name=argument_name..","..self.commands_list[c][4+current_parm][pc][1]
+ end
+ end
+ end
+ end
+ return argument_name
+end
+
+
+function SearchCommand:build_command_helper(uiId)
+ --read process_list
+ local player_priv = isPlayerPrivilege()
+ local argu_name = ""
+ local process_status=SearchCommand:read_process_status(uiId)
+
+ --debug("process_status: "..process_status)
+ --process_status == 0 only / identifyer found
+ --process_status == 1 try for command
+ --process_status > 1 try for parameter
+
+ if(process_status == 1)then
+ --initlial command
+ SearchCommand:search_build_command_list(uiId,self.command_self,true)
+ else
+ --debug("process_args")
+ argu_name = SearchCommand:find_argument(self.command_self,uiId)
+ --debug("argu_name: "..argu_name)
+
+
+ --check if argument can be a command or a playername
+ if(string.find(string.lower(argu_name), string.lower("")))then
+ --debug("parm is a command")
+ SearchCommand:search_build_command_list(uiId,self.command_parameter_list[process_status],false)
+ elseif(string.find(string.lower(argu_name), string.lower("")) or string.find(string.lower(argu_name), string.lower("")))then
+ --debug("parm is a playername")
+ if(player_priv)then
+ SearchCommand:search_build_player_list(uiId,self.command_parameter_list[process_status])
+ else
+ SearchCommand:search_build_argument_list(uiId,self.command_self)
+ end
+ else
+ SearchCommand:search_build_argument_list(uiId,self.command_self)
+ end
+ end
+end
+
+function SearchCommand:write_command_help(uiId,text)
+ --debug("write_command_help: "..text)
+ local behind_help_text = getUI(uiId.."h")
+ behind_help_text.input_string = text
+end
+
+function SearchCommand:write_command_help_clear(uiId)
+ local behind_help_text = getUI(uiId.."h")
+ behind_help_text.input_string = ""
+end
+
+function SearchCommand:close_modal()
+ self.modal_open=0
+ --debug("close_modal")
+ runAH(nil, "leave_modal", "group=ui:interface:search_command_add_menu")
+end
+
+function SearchCommand:show_more_options(uiId)
+ self.modal_open=1
+ --debug("build_menu")
+ launchContextMenuInGame("ui:interface:search_command_add_menu")
+ menu = getUI("ui:interface:search_command_add_menu")
+
+ menu:setMinW(85)
+ menu:updateCoords()
+ menu = menu:getRootMenu()
+ menu:reset()
+
+ menu:addLine(ucstring("Options..."), "", "", "")
+
+ for c = 1, #self.valid_commands_list do
+ menu:addLine(ucstring(self.valid_commands_list[c]), "lua", "SearchCommand:finish_commands('"..self.valid_commands_list[c].."','"..uiId.."')", "")
+ end
+end
+
+function SearchCommand:finish_commands(command_name,uiId)
+ local process_status=SearchCommand:read_process_status(uiId)
+ local input_search_string = getUI(uiId)
+ local final_command=""
+
+ for fc = 1, process_status do
+ if(fc == process_status)then
+ self.command_parameter_list[fc]=command_name
+ end
+ end
+
+ for pc = 1, #self.command_parameter_list do
+ if(final_command == "")then
+ final_command = self.command_parameter_list[pc]
+ else
+ final_command = final_command.." "..self.command_parameter_list[pc]
+ end
+ end
+
+ input_search_string.input_string = "/"..final_command
+
+ input_search_string:setFocusOnText()
+
+ SearchCommand:close_modal()
+ SearchCommand:search(uiId)
+end
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
index 54e538f3e6..105283adc2 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
@@ -3,6 +3,7 @@
+
@@ -712,7 +713,7 @@
-
+
diff --git a/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp b/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp
index 923607b12e..cf87a3bf0a 100644
--- a/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp
+++ b/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp
@@ -492,6 +492,7 @@ void CLuaIHMRyzom::RegisterRyzomFunctions(NLGUI::CLuaState &ls)
ls.registerFunc("getPlayerTitle", getPlayerTitle);
ls.registerFunc("getPlayerTag", getPlayerTag);
ls.registerFunc("getPlayerMode", getPlayerMode);
+ ls.registerFunc("getPlayerPrivs", getPlayerPrivs);
ls.registerFunc("getTargetPos", getTargetPos);
ls.registerFunc("getTargetFront", getTargetFront);
ls.registerFunc("getTargetDirection", getTargetDirection);
@@ -1554,6 +1555,26 @@ int CLuaIHMRyzom::getPlayerMode(CLuaState &ls)
return 1;
}
+// ***************************************************************************
+int CLuaIHMRyzom::getPlayerPrivs(CLuaState &ls)
+{
+ std::string privsString = "";
+
+ if (hasPrivilegeDEV()) privsString=":DEV";
+ if (hasPrivilegeSGM()) privsString+=":SGM";
+ if (hasPrivilegeGM()) privsString+=":GM";
+ if (hasPrivilegeVG()) privsString+=":VG";
+ if (hasPrivilegeSG()) privsString+=":SG";
+ if (hasPrivilegeG()) privsString+=":G";
+ if (hasPrivilegeEM()) privsString+=":EM";
+ if (hasPrivilegeEG()) privsString+=":EG";
+ if (hasPrivilegeOBSERVER()) privsString+=":OBSERVER";
+ if (hasPrivilegeOBSERVER()) privsString+=":TESTER";
+
+ ls.push(privsString+=":");
+ return 1;
+}
+
// ***************************************************************************
int CLuaIHMRyzom::getTargetPos(CLuaState &ls)
{
diff --git a/ryzom/client/src/interface_v3/lua_ihm_ryzom.h b/ryzom/client/src/interface_v3/lua_ihm_ryzom.h
index 068d452e43..b30f1c1af2 100644
--- a/ryzom/client/src/interface_v3/lua_ihm_ryzom.h
+++ b/ryzom/client/src/interface_v3/lua_ihm_ryzom.h
@@ -92,6 +92,7 @@ class CLuaIHMRyzom
static int getPlayerTitle(CLuaState &ls);
static int getPlayerTag(CLuaState &ls);
static int getPlayerMode(CLuaState &ls);
+ static int getPlayerPrivs(CLuaState &ls);
static int getTargetPos(CLuaState &ls);
static int getTargetFront(CLuaState &ls);
static int getTargetDirection(CLuaState &ls);
From bc9dec37336fc7229b430ef11e3c254d2799cd86 Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Tue, 9 Jan 2024 22:40:56 +0100
Subject: [PATCH 132/194] Changes: allow expand by /tell remove old build in
autocomplete
---
nel/src/gui/group_editbox.cpp | 12 +-
.../gamedev/interfaces_v3/search_command.lua | 392 ++++++++++++++----
.../data/gamedev/interfaces_v3/widgets.xml | 4 +-
.../src/interface_v3/action_handler_edit.cpp | 4 +-
.../client/src/interface_v3/lua_ihm_ryzom.cpp | 9 +-
5 files changed, 326 insertions(+), 95 deletions(-)
diff --git a/nel/src/gui/group_editbox.cpp b/nel/src/gui/group_editbox.cpp
index 1410e2cb1b..fb0a5a23f3 100644
--- a/nel/src/gui/group_editbox.cpp
+++ b/nel/src/gui/group_editbox.cpp
@@ -1305,13 +1305,13 @@ namespace NLGUI
{
makeTopWindow();
// for french, deutsch and russian, be aware of unicode
- std::string command = CUtfStringView(_InputString.substr(1)).toUtf8();
- ICommand::expand(command);
+ //std::string command = CUtfStringView(_InputString.substr(1)).toUtf8();
+ //ICommand::expand(command);
// then back to u32string
- _InputString = CUtfStringView('/' + command).toUtf32();
- _InputString = _InputString;
- _CursorPos = (sint32)_InputString.length();
- _CursorAtPreviousLineEnd = false;
+ //_InputString = CUtfStringView('/' + command).toUtf32();
+ //_InputString = _InputString;
+ //_CursorPos = (sint32)_InputString.length();
+ //_CursorAtPreviousLineEnd = false;
triggerOnChangeAH();
return true;
}
diff --git a/ryzom/client/data/gamedev/interfaces_v3/search_command.lua b/ryzom/client/data/gamedev/interfaces_v3/search_command.lua
index 7b1be6fdee..2a758b600a 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/search_command.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/search_command.lua
@@ -7,8 +7,8 @@ if not SearchCommand then
valid_commands_list = {},
commands_list = {},
key_tab_down = 0,
- modal_open=0,
- process_list={}
+ modal_open_list = {},
+ process_list = {}
}
end
@@ -18,7 +18,7 @@ SearchCommand.commands_list = {}
local player_priv = isPlayerPrivilege()
if(player_priv)then
- table.insert(SearchCommand.commands_list,{"client", "player", "help_desc", "?", {{"text:",""}, {"all","help_all_desc"}}, {{"client/shard",""}}})
+ table.insert(SearchCommand.commands_list,{"client", "player", "help_desc", "?", {{"text:",""}, {"all","help_all_desc"}}, {{"shard",""},{"client",""},{"eScript",""}}})
else
table.insert(SearchCommand.commands_list,{"client", "player", "help_desc", "?", {{"text:",""}, {"all","help_all_desc"}}})
end
@@ -95,16 +95,22 @@ table.insert(SearchCommand.commands_list,{"client", "player", "tell_desc", "t",{
--shard commands
table.insert(SearchCommand.commands_list,{"shard", "player", "a_desc", "a", {{"text:",""}}})
-table.insert(SearchCommand.commands_list,{"shard", "privs", "b_desc", "b", {{"text:",""}}})
-table.insert(SearchCommand.commands_list,{"shard", "privs", "c_desc", "c", {{"text:",""}}, {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", ":DEV:SGM:GM:VG:PR:OBSERVER:EM:EG:TESTER:", "b_desc", "b", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", ":DEV:SGM:GM:VG:PR:OBSERVER:EM:EG:TESTER:", "c_desc", "c", {{"text:",""}}, {{"text:",""}}})
table.insert(SearchCommand.commands_list,{"shard", "player", "showOnline_desc", "showOnline", {{"1","showOnline_1_desc"}, {"2","showOnline_2_desc"},{"0","showOnline_0_desc"}}})
table.insert(SearchCommand.commands_list,{"shard", "player", "roomInvite_desc", "roomInvite", {{"text:",""}}})
table.insert(SearchCommand.commands_list,{"shard", "player", "setDontTranslateLangs_desc", "setDontTranslateLangs", {{"codelang|codelang","setDontTranslateLangs_codelang_desc"}}})
table.insert(SearchCommand.commands_list,{"shard", "player", "connectLangChannel_desc", "connectLangChannel",{{"fr",""},{"en",""},{"de",""},{"es",""},{"ru",""}}})
-table.insert(SearchCommand.commands_list,{"shard", "privs", "Position_desc", "Position", {{"number:,[,]",""},{"text:",""},{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", ":DEV:SGM:GM:VG:PR:OBSERVER:EM:EG:", "Position_desc", "Position", {{"number:,[,]",""},{"text:",""},{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", ":DEV:SGM:GM:EM:", "eScript_desc", "eScript", {{"text:@text:",""}}, {{"text:",""}}})
--END shard commands
+--eScript commands
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setActivity_desc", "()setActivity(\"text:\")"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setAggro_desc", "()setAggro(number:<25>,number:<10>)"})
+--END eScript commands
+
function SearchCommand:find(tbl, value)
for k, v in pairs(tbl) do
if v == value then
@@ -114,15 +120,62 @@ function SearchCommand:find(tbl, value)
return nil
end
-function SearchCommand:help_show_all(parameter)
+function SearchCommand:check_prvis(command_privs)
local player_priv = isPlayerPrivilege()
+ local command_allowed = 0
- debug("help parameter: "..parameter)
+ if(command_privs == "player" or command_privs == "")then
+ return 0
+ else
+ if(player_priv)then
+ local prvis = getPlayerPrivs()
+ for prvissubstring in prvis:gmatch("[^: ]+") do
+ for substring in command_privs:gmatch("[^: ]+") do
+ if(substring == prvissubstring)then
+ command_allowed = 1
+ end
+ end
+ end
+ return command_allowed
+ else
+ return 0
+ end
+ end
+end
+
+function SearchCommand:htmlentities(text)
+ local html_help_content=""
+
+ html_help_content = text:gsub("<", "<")
+
+ return html_help_content
+end
+
+function SearchCommand:pars_help_on_window(content_of_window,height)
+ local whm = getUI("ui:interface:web_transactions")
+ local whm_html = getUI("ui:interface:web_transactions:content:html")
+
+ local html_help_content=""
+ html_help_content=[[]]..content_of_window..[[
]]
+
+ whm.title = "command help"
+ whm.active = true
+ whm.w = 750
+ whm.h = height
+ whm_html:renderHtml(html_help_content)
+end
+
+
+function SearchCommand:help_show_all(parameter)
+ local count = 0
+ local build_content = ""
+ --debug("help parameter: "..parameter)
+ build_content=build_content..""
if(parameter == "all")then
- displaySystemInfo(ucstring("######################## command help all #######################"), "AROUND")
+ build_content=build_content.."######################## command help all ####################### "
else
- displaySystemInfo(ucstring("######################## command help all / filter '"..parameter.."' #######################"), "AROUND")
+ build_content=build_content.."######################## command help all / filter '"..SearchCommand:htmlentities(parameter).."' ####################### "
end
for c = 1, #self.commands_list do
@@ -130,7 +183,7 @@ function SearchCommand:help_show_all(parameter)
if(self.commands_list[c][2] == "player")then
command_are_allowed = 1
else
- if(player_priv)then
+ if(SearchCommand:check_prvis(self.commands_list[c][2]))then
command_are_allowed = 1
end
end
@@ -138,7 +191,8 @@ function SearchCommand:help_show_all(parameter)
if(command_are_allowed == 1)then
if(self.commands_list[c][1] == parameter or parameter == "all")then
local arg_display=""
- displaySystemInfo(ucstring(""), "AROUND")
+ build_content=build_content..""
+ build_content=build_content.." "
max_arguments = #self.commands_list[c] - 4
for ad = 1, max_arguments do
@@ -149,35 +203,40 @@ function SearchCommand:help_show_all(parameter)
end
end
- displaySystemInfo(ucstring(c..". "..self.commands_list[c][4].." "..arg_display.." '"..self.commands_list[c][3].."'"), "AROUND")
- displaySystemInfo(ucstring(" type: "..self.commands_list[c][1]), "AROUND")
+ count=count+1
+
+ build_content=build_content..""..count..". "..SearchCommand:htmlentities(self.commands_list[c][4]).." "..arg_display.." '"..SearchCommand:htmlentities(tostring(i18n.get(self.commands_list[c][3]))).."' "
+ build_content=build_content.." type: "..SearchCommand:htmlentities(self.commands_list[c][1]).." "
for ac = 1, max_arguments do
- displaySystemInfo(ucstring(" arg"..ac.." :"), "AROUND")
+ build_content=build_content.." arg"..ac.." : "
for pc = 1, #self.commands_list[c][4+ac] do
if(self.commands_list[c][4+ac][pc][2] == "")then
- displaySystemInfo(ucstring(" "..self.commands_list[c][4+ac][pc][1]), "AROUND")
+ build_content=build_content.." "..SearchCommand:htmlentities(self.commands_list[c][4+ac][pc][1]).." "
else
- displaySystemInfo(ucstring(" "..self.commands_list[c][4+ac][pc][1].." '"..self.commands_list[c][4+ac][pc][2].."'"), "AROUND")
+ build_content=build_content.." "..SearchCommand:htmlentities(self.commands_list[c][4+ac][pc][1]).." '"..SearchCommand:htmlentities(tostring(i18n.get(self.commands_list[c][4+ac][pc][2]))).."' "
end
end
end
if(self.commands_list[c][4] ~= "a" and self.commands_list[c][4] ~= "b" and self.commands_list[c][4] ~= "c")then
if(self.commands_list[c][1] == "shard")then
- displaySystemInfo(ucstring(" example: /a "..self.commands_list[c][4].." , /c riasan "..self.commands_list[c][4]), "AROUND")
+ build_content=build_content.." example: /a "..SearchCommand:htmlentities(self.commands_list[c][4]).." , /c riasan "..SearchCommand:htmlentities(self.commands_list[c][4]).." "
end
end
end
+ build_content=build_content.."
"
end
end
- displaySystemInfo(ucstring(""), "AROUND")
- displaySystemInfo(ucstring("############################ end ##########################"), "AROUND")
+ build_content=build_content.." "
+ build_content=build_content.."############################ end ########################## "
+ build_content=build_content.."
"
+ SearchCommand:pars_help_on_window(build_content, 600)
end
function SearchCommand:help(uiId,input)
--debug("search_input: "..input)
-
+ local build_content = ""
local command_split = {}
if(input ~= "all")then
@@ -196,26 +255,27 @@ function SearchCommand:help(uiId,input)
SearchCommand:help_show_all(command_split[2])
end
else
+ build_content=build_content..""
--show help for command input
local command_found = 0
for c = 1, #self.commands_list do
local command_are_allowed = 0
if(self.commands_list[c][4] == command_split[1])then
command_found = 1
- displaySystemInfo(ucstring("######################## command help "..command_split[1].." #######################"), "AROUND")
+ build_content=build_content.."######################## command help '"..command_split[1].."' ####################### "
- local player_priv = isPlayerPrivilege()
if(self.commands_list[c][2] == "player")then
command_are_allowed = 1
else
- if(player_priv)then
+ if(SearchCommand:check_prvis(self.commands_list[c][2]))then
command_are_allowed = 1
end
end
if(command_are_allowed == 1)then
local arg_display=""
- displaySystemInfo(ucstring(""), "AROUND")
+ build_content=build_content.." "
+ build_content=build_content..""
max_arguments = #self.commands_list[c] - 4
for ad = 1, max_arguments do
@@ -225,43 +285,80 @@ function SearchCommand:help(uiId,input)
arg_display="[arg"..ad.."]"
end
end
- displaySystemInfo(ucstring("desc: "..self.commands_list[c][3]), "AROUND")
- displaySystemInfo(ucstring("type: "..self.commands_list[c][1]), "AROUND")
- displaySystemInfo(ucstring(""), "AROUND")
- displaySystemInfo(ucstring(self.commands_list[c][4].." "..arg_display), "AROUND")
+ build_content=build_content.."desc: "..SearchCommand:htmlentities(tostring(i18n.get(self.commands_list[c][3]))).." "
+ build_content=build_content.."type: "..SearchCommand:htmlentities(self.commands_list[c][1]).." "
+ build_content=build_content.." "
+ build_content=build_content..""..SearchCommand:htmlentities(self.commands_list[c][4]).." "..arg_display.." "
for ac = 1, max_arguments do
- displaySystemInfo(ucstring(" arg"..ac.." :"), "AROUND")
+ build_content=build_content.." arg"..ac.." : "
for pc = 1, #self.commands_list[c][4+ac] do
if(self.commands_list[c][4+ac][pc][2] == "")then
- displaySystemInfo(ucstring(" "..self.commands_list[c][4+ac][pc][1]), "AROUND")
+ build_content=build_content.." "..SearchCommand:htmlentities(self.commands_list[c][4+ac][pc][1]).." "
else
- displaySystemInfo(ucstring(" "..self.commands_list[c][4+ac][pc][1].." '"..self.commands_list[c][4+ac][pc][2].."'"), "AROUND")
+ build_content=build_content.." "..SearchCommand:htmlentities(self.commands_list[c][4+ac][pc][1]).." '"..SearchCommand:htmlentities(tostring(i18n.get(self.commands_list[c][4+ac][pc][2]))).."' "
end
end
end
if(self.commands_list[c][4] ~= "a" and self.commands_list[c][4] ~= "b" and self.commands_list[c][4] ~= "c")then
if(self.commands_list[c][1] == "shard")then
- displaySystemInfo(ucstring(" example: /a "..self.commands_list[c][4].." , /c riasan "..self.commands_list[c][4]), "AROUND")
+ build_content=build_content.."example: /a "..SearchCommand:htmlentities(self.commands_list[c][4]).." , /c riasan "..SearchCommand:htmlentities(self.commands_list[c][4]).." "
end
end
- displaySystemInfo(ucstring(""), "AROUND")
- displaySystemInfo(ucstring("############################ end ############################"), "AROUND")
end
+ build_content=build_content.."
"
end
end
+
+ build_content=build_content.." "
+ build_content=build_content.."############################ end ############################ "
+
if(command_found == 0)then
displaySystemInfo(ucstring("Command not found"), "AROUND")
+ else
+ --debug("pars_help")
+ SearchCommand:pars_help_on_window(build_content, 350)
end
end
end
function SearchCommand:check_autocomplet(uiId)
- --debug("try_autocomplte")
- if(self.modal_open==1)then
- if next(self.valid_commands_list)then
- --debug("check_autocomplet"..self.valid_commands_list[1])
- SearchCommand:finish_commands(self.valid_commands_list[1],uiId)
+ local modal_open_list = SearchCommand:read_modal_open_list(uiId)
+ local menu = getUI("ui:interface:search_command_add_menu")
+
+ if (menu.active) then
+ --debug("try_autocomplte: "..uiId.." modal_open_list: "..modal_open_list)
+ if(modal_open_list == 1)then
+ if next(self.valid_commands_list)then
+ --debug("check_autocomplet"..self.valid_commands_list[1])
+ SearchCommand:finish_commands(self.valid_commands_list[1],uiId)
+ end
+ end
+ end
+end
+
+function SearchCommand:check_autocomplet_number(uiId)
+ local modal_open_list = SearchCommand:read_modal_open_list(uiId)
+ local menu = getUI("ui:interface:search_command_add_menu")
+ local text_from_input = getUI(uiId)
+ local input_text = text_from_input.input_string
+
+ max_string_count = string.len(input_text)
+
+ local get_last_char_from_input = tonumber(string.sub(input_text, (max_string_count), -1))
+ if(type(get_last_char_from_input) == "number")then
+ --debug("last_input_is_a_number: "..get_last_char_from_input)
+
+ if(get_last_char_from_input <= #self.valid_commands_list)then
+ if (menu.active) then
+ --debug("try_autocomplte: "..uiId.." modal_open_list: "..modal_open_list)
+ if(modal_open_list == 1)then
+ if next(self.valid_commands_list)then
+ --debug("check_autocomplet"..self.valid_commands_list[get_last_char_from_input])
+ SearchCommand:finish_commands(self.valid_commands_list[get_last_char_from_input],uiId)
+ end
+ end
+ end
end
end
end
@@ -276,21 +373,48 @@ function SearchCommand:key_trigger(uiId)
removeOnDbChange(timer_function_on_ui_window,"@UI:VARIABLES:CURRENT_SERVER_TICK")
end
- is_tab_down = isTabDown()
- if(key_tab_down == 1)then
- key_tab_down = 0
- SearchCommand:check_autocomplet(uiId)
- elseif(is_tab_down)then
- key_tab_down = 0
- SearchCommand:check_autocomplet(uiId)
- end
-
--check is input are empty if yes cancel all stuff
local text_from_input = getUI(uiId)
if(text_from_input.input_string == "")then
SearchCommand:search(uiId)
end
+end
+
+function SearchCommand:update_modal_open_list(uiId,p_status)
+ local found_modal_open=0
+
+ --check if we already have a process status for this window
+ if next(self.modal_open_list)then
+ for pc = 1, #self.modal_open_list do
+ if(self.modal_open_list[pc][1] == uiId)then
+ found_modal_open=1
+ end
+ end
+ end
+ if(found_modal_open == 0)then
+ table.insert(self.modal_open_list,{uiId, p_status})
+ else
+ if next(self.modal_open_list)then
+ for mc = 1, #self.modal_open_list do
+ if(self.modal_open_list[mc][1] == uiId)then
+ self.modal_open_list[mc][2]=p_status
+ end
+ end
+ end
+ end
+end
+
+function SearchCommand:read_modal_open_list(uiId)
+ local found_modal_open = 0
+ if next(self.process_list)then
+ for mc = 1, #self.modal_open_list do
+ if(self.modal_open_list[mc][1] == uiId)then
+ found_modal_open=self.modal_open_list[mc][2]
+ end
+ end
+ end
+ return found_modal_open
end
function SearchCommand:update_process_list(uiId,p_status)
@@ -331,15 +455,19 @@ function SearchCommand:read_process_status(uiId)
end
function SearchCommand:search(uiId)
+ --debug("now_onchange "..uiId)
is_tab_down = isTabDown()
if(is_tab_down)then
- key_tab_down = 1
+ --debug("key_tab_down")
+ SearchCommand:check_autocomplet(uiId)
end
--trigger command by onchange a singel input
- self.command_parameter_list = {}
+ SearchCommand:check_autocomplet_number(uiId)
+
local text_from_input = getUI(uiId)
- command_identifier = string.sub(text_from_input.input_string, 0, 1)
+ local input_text = text_from_input.input_string
+ command_identifier = string.sub(input_text, 0, 1)
--check if first char are a "/" from text_from_input
if(command_identifier == "/")then
@@ -353,19 +481,20 @@ function SearchCommand:search(uiId)
addOnDbChange(timer_function_on_ui_window, timer_str, "SearchCommand:key_trigger('"..uiId.."')")
end
-
-
- max_string_count = string.len(text_from_input.input_string)
+ --reset command_parameter_list for fresh input
+ self.command_parameter_list = {}
+ --END reset command_parameter_list for fresh input
if(max_string_count == 1)then
self.command_self=""
SearchCommand:write_command_help(uiId,"/ or /? all")
- SearchCommand:close_modal()
+ SearchCommand:close_modal(uiId)
--update process_status
SearchCommand:update_process_list(uiId,0)
else
- local command_first = string.sub(text_from_input.input_string, 2, (max_string_count))
+ SearchCommand:close_modal(uiId)
+ local command_first = string.sub(input_text, 2, (max_string_count))
--split text to commands
for substring in command_first:gmatch("%S+") do
table.insert(self.command_parameter_list, substring)
@@ -396,9 +525,8 @@ function SearchCommand:search(uiId)
end
end
-function SearchCommand:build_valid_command_list(command_input)
+function SearchCommand:build_valid_command_list(command_input,uiId)
self.valid_commands_list = {}
- local player_priv = isPlayerPrivilege()
local count_found=0
local found_command=0
@@ -407,15 +535,22 @@ function SearchCommand:build_valid_command_list(command_input)
if(self.commands_list[c][2] == "player")then
command_are_allowed = 1
else
- if(player_priv)then
+ if(SearchCommand:check_prvis(self.commands_list[c][2]))then
command_are_allowed = 1
end
end
--check if we want used a client or shared command
if(self.command_self == "a" or self.command_self == "b" or self.command_self == "c")then
- if(self.commands_list[c][1] == "shard")then
+ --debug(self.commands_list[c][1])
+ if(self.commands_list[c][1] == "shard" and self.command_parameter_list[2] ~= "eScript")then
command_are_allowed = 1
+ elseif(self.commands_list[c][1] == "eScript")then
+ if(self.command_parameter_list[2] == "eScript")then
+ command_are_allowed = 1
+ else
+ command_are_allowed = 0
+ end
else
command_are_allowed = 0
end
@@ -426,6 +561,8 @@ function SearchCommand:build_valid_command_list(command_input)
else
command_are_allowed = 0
end
+ elseif(self.commands_list[c][1] == "eScript")then
+ command_are_allowed = 0
end
end
@@ -446,12 +583,12 @@ function SearchCommand:build_valid_command_list(command_input)
if(count_found == 0)then
--debug("no_command_found_close_modal")
- SearchCommand:close_modal()
+ SearchCommand:close_modal(uiId)
end
return found_command
end
-function SearchCommand:build_valid_player_list(playername_input)
+function SearchCommand:build_valid_player_list(playername_input,uiId)
player_list = {}
player_list[1] = "rias"
player_list[2] = "uluk"
@@ -492,7 +629,7 @@ function SearchCommand:build_valid_player_list(playername_input)
end
if(count_found == 0)then
- SearchCommand:close_modal()
+ SearchCommand:close_modal(uiId)
end
return found_playername
end
@@ -500,12 +637,12 @@ end
function SearchCommand:search_build_player_list(uiId,playername)
local found_player=0
local found_command=0
- found_player=SearchCommand:build_valid_player_list(playername)
+ found_player=SearchCommand:build_valid_player_list(playername,uiId)
SearchCommand:search_build_argument_list(uiId,self.command_self)
if(found_player ~= 0)then
- SearchCommand:close_modal()
+ SearchCommand:close_modal(uiId)
else
if next(self.valid_commands_list) ~= nil then
SearchCommand:show_more_options(uiId)
@@ -517,12 +654,12 @@ function SearchCommand:search_build_command_list(uiId,command,show_argument_help
local found_command=0
--debug("search_build_command_list")
- found_command=SearchCommand:build_valid_command_list(command)
+ found_command=SearchCommand:build_valid_command_list(command,uiId)
if(found_command ~= 0)then
- SearchCommand:close_modal()
+ SearchCommand:close_modal(uiId)
else
- if next(self.valid_commands_list) ~= nil then
+ if next(self.valid_commands_list) then
SearchCommand:show_more_options(uiId)
end
end
@@ -699,7 +836,7 @@ function SearchCommand:build_command_helper(uiId)
--check if argument can be a command or a playername
- if(string.find(string.lower(argu_name), string.lower("")))then
+ if(string.find(string.lower(argu_name), string.lower("")))then
--debug("parm is a command")
SearchCommand:search_build_command_list(uiId,self.command_parameter_list[process_status],false)
elseif(string.find(string.lower(argu_name), string.lower("")) or string.find(string.lower(argu_name), string.lower("")))then
@@ -709,6 +846,8 @@ function SearchCommand:build_command_helper(uiId)
else
SearchCommand:search_build_argument_list(uiId,self.command_self)
end
+ elseif(string.find(string.lower(argu_name), string.lower("")))then
+ SearchCommand:search_build_command_list(uiId,self.command_parameter_list[process_status],false)
else
SearchCommand:search_build_argument_list(uiId,self.command_self)
end
@@ -726,38 +865,124 @@ function SearchCommand:write_command_help_clear(uiId)
behind_help_text.input_string = ""
end
-function SearchCommand:close_modal()
- self.modal_open=0
+function SearchCommand:close_modal(uiId)
--debug("close_modal")
+
+ SearchCommand:update_modal_open_list(uiId,0)
runAH(nil, "leave_modal", "group=ui:interface:search_command_add_menu")
end
function SearchCommand:show_more_options(uiId)
- self.modal_open=1
+ SearchCommand:update_modal_open_list(uiId,1)
--debug("build_menu")
- launchContextMenuInGame("ui:interface:search_command_add_menu")
- menu = getUI("ui:interface:search_command_add_menu")
+ local display_max_found = 0
+ local calc_manu_hight = 0
+ local up_ok = 0
+ local down_ok = 0
+
+ table.sort(self.valid_commands_list)
+
+
+ base_main_chat_id = string.sub(uiId,0,string.len(uiId)-3)
+ local check_main_window = getUI(base_main_chat_id)
+
+ base_window_id = string.sub(uiId,0,string.len(uiId)-15)
+ local check_window = getUI(base_window_id)
+
+ local interface_window = getUI("ui:interface")
+ local interface_window_h = interface_window.h
+ local interface_window_w = interface_window.w
- menu:setMinW(85)
+ local offset_h_down = 20
+ local offset_h_up = 35
+ local offest_x = 0
+
+ if(check_main_window.x == 0)then
+ offest_x = 18
+ else
+ offest_x = check_main_window.x + 10
+ end
+
+ local new_modal_pos_x = check_window.x + offest_x
+ local new_modal_pos_y = check_window.y - check_window.h
+
+ if(#self.valid_commands_list > 9)then
+ display_max_found = 9
+ calc_manu_hight = (display_max_found * 16) + 39
+ else
+ display_max_found = #self.valid_commands_list
+ calc_manu_hight = (display_max_found * 16) + 23
+ end
+
+ --check we need spawn menu up or down
+ local cal_needed_space_up = (check_window.y - check_window.h) + calc_manu_hight + offset_h_up
+ local cal_needed_space_down = (check_window.y - check_window.h) - calc_manu_hight - offset_h_down
+
+ if(cal_needed_space_up > interface_window_h)then
+ up_ok = 0
+ else
+ up_ok = 1
+ end
+
+ if(cal_needed_space_down < 0)then
+ down_ok = 0
+ else
+ down_ok = 1
+ end
+
+ if(down_ok == 1 and up_ok == 1)then
+ if(cal_needed_space_up < cal_needed_space_down)then
+ up_ok = 1
+ down_ok = 0
+ else
+ up_ok = 0
+ down_ok = 1
+ end
+ end
+ if(up_ok == 1)then
+ new_modal_pos_y = (check_window.y - check_window.h) + offset_h_up
+ end
+ if(down_ok == 1)then
+ new_modal_pos_y = (check_window.y - check_window.h) - calc_manu_hight
+ end
+
+ --setup menu window
+ menu = getUI("ui:interface:search_command_add_menu")
+ menu.active = true
+ menu.y = new_modal_pos_y
+ menu.x = new_modal_pos_x
menu:updateCoords()
menu = menu:getRootMenu()
menu:reset()
+ --END setup menu window
+
+ --fill menu window
+ menu:addLine(ucstring("Found: "..#self.valid_commands_list), "", "", "")
- menu:addLine(ucstring("Options..."), "", "", "")
+ for c = 1, display_max_found do
+ menu:addLine(ucstring(c..". "..self.valid_commands_list[c]), "lua", "SearchCommand:finish_commands('"..self.valid_commands_list[c].."','"..uiId.."')", "")
+ end
- for c = 1, #self.valid_commands_list do
- menu:addLine(ucstring(self.valid_commands_list[c]), "lua", "SearchCommand:finish_commands('"..self.valid_commands_list[c].."','"..uiId.."')", "")
+ if(#self.valid_commands_list > 9)then
+ menu:addLine(ucstring("..."), "", "", "")
end
+ --END fill menu window
+
+ --launche menu window
+ launchContextMenuInGame("ui:interface:search_command_add_menu")
+ --END launche menu window
end
function SearchCommand:finish_commands(command_name,uiId)
- local process_status=SearchCommand:read_process_status(uiId)
+ local process_status = SearchCommand:read_process_status(uiId)
local input_search_string = getUI(uiId)
- local final_command=""
+ local final_command = ""
+
+ debug("process_status: "..process_status)
for fc = 1, process_status do
if(fc == process_status)then
- self.command_parameter_list[fc]=command_name
+ self.command_parameter_list[fc] = command_name
end
end
@@ -770,9 +995,10 @@ function SearchCommand:finish_commands(command_name,uiId)
end
input_search_string.input_string = "/"..final_command
+ debug("/"..final_command)
input_search_string:setFocusOnText()
- SearchCommand:close_modal()
+ SearchCommand:close_modal(uiId)
SearchCommand:search(uiId)
end
\ No newline at end of file
diff --git a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
index 105283adc2..eb57025bc1 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
@@ -3,7 +3,7 @@
-
+
@@ -708,7 +708,7 @@
-
+
diff --git a/ryzom/client/src/interface_v3/action_handler_edit.cpp b/ryzom/client/src/interface_v3/action_handler_edit.cpp
index d3fd022ad6..ebd7919067 100644
--- a/ryzom/client/src/interface_v3/action_handler_edit.cpp
+++ b/ryzom/client/src/interface_v3/action_handler_edit.cpp
@@ -639,8 +639,8 @@ class CAHEditExpandOrCycleTell : public CAHEdit
}
void actionPart ()
{
- // If the line starts with '/tell ', do not try to expand
- if (!NLMISC::startsWith(_GroupEdit->getInputString(), "/tell "))
+ // If the line starts with '/', try to expand
+ if (NLMISC::startsWith(_GroupEdit->getInputString(), "/"))
{
if (_GroupEdit->expand()) return;
}
diff --git a/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp b/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp
index cf87a3bf0a..19b016b897 100644
--- a/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp
+++ b/ryzom/client/src/interface_v3/lua_ihm_ryzom.cpp
@@ -1571,8 +1571,13 @@ int CLuaIHMRyzom::getPlayerPrivs(CLuaState &ls)
if (hasPrivilegeOBSERVER()) privsString+=":OBSERVER";
if (hasPrivilegeOBSERVER()) privsString+=":TESTER";
- ls.push(privsString+=":");
- return 1;
+ if(privsString == ""){
+ return 0;
+ }
+ else{
+ ls.push(privsString+=":");
+ return 1;
+ }
}
// ***************************************************************************
From ac5233c0cc7ac6bfce9a6503f8d9be67b55a80eb Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Tue, 9 Jan 2024 22:45:43 +0100
Subject: [PATCH 133/194] Fixed: bad commit
---
ryzom/client/data/gamedev/interfaces_v3/widgets.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
index eb57025bc1..b7cf67ee7c 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
+++ b/ryzom/client/data/gamedev/interfaces_v3/widgets.xml
@@ -3,7 +3,7 @@
-
From afd571304e7f85a2af1e737763b8e2a06297202c Mon Sep 17 00:00:00 2001
From: Rias Gremory
Date: Wed, 10 Jan 2024 15:15:03 +0100
Subject: [PATCH 134/194] Changes: add way to read/write prompt and other
changes
---
nel/include/nel/gui/group_editbox.h | 1 +
.../gamedev/interfaces_v3/search_command.lua | 138 ++++++++++++++----
2 files changed, 111 insertions(+), 28 deletions(-)
diff --git a/nel/include/nel/gui/group_editbox.h b/nel/include/nel/gui/group_editbox.h
index 1f4f316fc9..0ebf704f25 100644
--- a/nel/include/nel/gui/group_editbox.h
+++ b/nel/include/nel/gui/group_editbox.h
@@ -194,6 +194,7 @@ namespace NLGUI
REFLECT_LUA_METHOD("setFocusOnText", luaSetFocusOnText);
REFLECT_LUA_METHOD("cancelFocusOnText", luaCancelFocusOnText);
REFLECT_STRING("input_string", getInputString, setInputString);
+ REFLECT_STRING("prompt", getPrompt, setPrompt);
#ifdef RYZOM_LUA_UCSTRING
REFLECT_UCSTRING("uc_input_string", getInputStringAsUtf16, setInputStringAsUtf16); // Compatibility
#endif
diff --git a/ryzom/client/data/gamedev/interfaces_v3/search_command.lua b/ryzom/client/data/gamedev/interfaces_v3/search_command.lua
index 2a758b600a..8c705411e4 100644
--- a/ryzom/client/data/gamedev/interfaces_v3/search_command.lua
+++ b/ryzom/client/data/gamedev/interfaces_v3/search_command.lua
@@ -99,16 +99,80 @@ table.insert(SearchCommand.commands_list,{"shard", ":DEV:SGM:GM:VG:PR:OBSERVER:E
table.insert(SearchCommand.commands_list,{"shard", ":DEV:SGM:GM:VG:PR:OBSERVER:EM:EG:TESTER:", "c_desc", "c", {{"text:",""}}, {{"text:",""}}})
table.insert(SearchCommand.commands_list,{"shard", "player", "showOnline_desc", "showOnline", {{"1","showOnline_1_desc"}, {"2","showOnline_2_desc"},{"0","showOnline_0_desc"}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "setLeague_desc", "setLeague", {{"text:",""}}})
table.insert(SearchCommand.commands_list,{"shard", "player", "roomInvite_desc", "roomInvite", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "roomKick_desc", "roomKick", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "dodge_desc", "dodge"})
+table.insert(SearchCommand.commands_list,{"shard", "player", "parry_desc", "parry"})
+table.insert(SearchCommand.commands_list,{"shard", "player", "setPvPTag_desc", "setPvPTag", {{"0",""},{"1",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "clearGuildMessage_desc", "clearGuildMessage"})
+table.insert(SearchCommand.commands_list,{"shard", "player", "setGuildMessage_desc", "setGuildMessage", {{"text:",""}}})
table.insert(SearchCommand.commands_list,{"shard", "player", "setDontTranslateLangs_desc", "setDontTranslateLangs", {{"codelang|codelang","setDontTranslateLangs_codelang_desc"}}})
-table.insert(SearchCommand.commands_list,{"shard", "player", "connectLangChannel_desc", "connectLangChannel",{{"fr",""},{"en",""},{"de",""},{"es",""},{"ru",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "connectLangChannel_desc", "connectLangChannel",{{"fr",""},{"en",""},{"de",""},{"es",""},{"ru",""}},{{"1","connectLangChannel_1_desc"}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "updateTarget_desc", "updateTarget"})
+table.insert(SearchCommand.commands_list,{"shard", "player", "teamInvite_desc", "teamInvite", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "summonPet_desc", "summonPet", {{"number:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "setTeamLeader_desc", "setTeamLeader", {{"text:",""}}})
+table.insert(SearchCommand.commands_list,{"shard", "player", "resetName_desc", "resetName"})
+
+
+if(player_priv)then
+ table.insert(SearchCommand.commands_list,{"shard", "player", "connectUserChannel_desc", "connectUserChannel", {{"text:",""}}, {{"text:",""},{"*","channel_leave_desc"},{"***","channel_remove_admin_desc"}}})
+else
+ table.insert(SearchCommand.commands_list,{"shard", "player", "connectUserChannel_desc", "connectUserChannel", {{"text:",""}}, {{"text:",""},{"*","channel_leave_desc"}}})
+end
+
+
table.insert(SearchCommand.commands_list,{"shard", ":DEV:SGM:GM:VG:PR:OBSERVER:EM:EG:", "Position_desc", "Position", {{"number:,[,]",""},{"text:",""},{"text:",""}}})
table.insert(SearchCommand.commands_list,{"shard", ":DEV:SGM:GM:EM:", "eScript_desc", "eScript", {{"text:@text:",""}}, {{"text:",""}}})
--END shard commands
--eScript commands
-table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setActivity_desc", "()setActivity(\"text:\")"})
table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setAggro_desc", "()setAggro(number:<25>,number:<10>)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setPlayerAttackable_desc", "()setPlayerAttackable(number:<0/1>"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setBotAttackable_desc", "()setBotAttackable(number:<0/1)>"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setAttackable_desc", "()setAttackable(number:<0/1)>)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setActivity_desc", "()setActivity(\"text:\")"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setFactionProp_desc", "()setFactionProp(\"text::>\",\"text:FameMin|FameName\")"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setAggro_desc", "()setAggro(number:<25>,number:<10>)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "addProfileParameter_desc", "()addProfileParameter(\"text:\",\"text:\")"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "addProfileParameter_desc", "()addProfileParameter(\"text:\",text:)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "addProfileParameter_desc", "()addProfileParameter(\"text:)\""})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "addProfileParameter_desc", "()addProfileParameter(\"text:,text:\")"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "addProfileParameter_desc", "()addProfileParameter(\"text:\",number:<6000 points per 1 fame>)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "removeProfileParameter_desc", "()removeProfileParameter(\"text:\")"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "clearAggroList_desc", "()clearAggroList()"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "startMoving_desc", "()startMoving(number:,number:,number:)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "stopMoving_desc", "()stopMoving()"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "startWander_desc", "()startWander(number:)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setAutoSpawn_desc", "()setAutoSpawn(number:<0/1>)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setDespawnTime_desc", "()setDespawnTime(number:)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setRespawnTime_desc", "()setDespawnTime(number:)"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "standUp_desc", "()standUp()"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "sitDown_desc", "()sitDown()"})
+table.insert(SearchCommand.commands_list,{"eScript", ":DEV:SGM:GM:EM:", "setZoneState_desc", "()setZoneState(\"text: