From 095bc1b04cf9a9974e5bc0d5fde9d2c0f5c99f67 Mon Sep 17 00:00:00 2001 From: SIELA1915 Date: Sun, 31 Jan 2016 15:42:41 +0100 Subject: [PATCH] merged with compatibility-develop --- .../time_weather_season/time_and_season.h | 10 +- code/ryzom/server/src/ai_service/commands.cpp | 4 +- .../server/src/ai_service/state_instance.h | 190 +++++++++--------- .../translated/bodypart_words_es.txt | Bin 5150 -> 5154 bytes .../translated/career_words_es.txt | Bin 1510 -> 1514 bytes .../translated/characteristic_words_es.txt | Bin 704 -> 708 bytes .../classificationtype_words_wk.txt | Bin 3086 -> 3066 bytes .../translated/damagetype_words_es.txt | Bin 1080 -> 1084 bytes .../translated/ecosystem_words_es.txt | Bin 828 -> 832 bytes .../translated/faction_words_es.txt | Bin 10666 -> 10670 bytes .../translation/translated/item_words_en.txt | Bin 1467250 -> 1467454 bytes .../translation/translated/job_words_es.txt | Bin 6056 -> 6060 bytes .../translated/powertype_words_es.txt | Bin 6136 -> 6140 bytes .../translation/translated/score_words_es.txt | Bin 696 -> 700 bytes .../translation/translated/skill_words_de.txt | Bin 245638 -> 247746 bytes 15 files changed, 102 insertions(+), 102 deletions(-) diff --git a/code/ryzom/common/src/game_share/time_weather_season/time_and_season.h b/code/ryzom/common/src/game_share/time_weather_season/time_and_season.h index f1c8c81c3..ac9007d21 100644 --- a/code/ryzom/common/src/game_share/time_weather_season/time_and_season.h +++ b/code/ryzom/common/src/game_share/time_weather_season/time_and_season.h @@ -131,20 +131,20 @@ public: CRyzomTime() { _RyzomDay = 0; - _RyzomTime = 0; + _RyzomTime = 0.f; + _LocalTime = 0.0; _TickOffset = 0; } // Update ryzom clock when tick occurs, local time must be given if localUpdateRyzomClock() and getLocalRyzomTime() is used void updateRyzomClock( uint32 gameCyle, double localTime = 0 ) { - float time = ( gameCyle + _TickOffset ) / float(RYZOM_HOURS_IN_TICKS); - _RyzomDay = (uint32) ( time / RYZOM_DAY_IN_HOUR ) - RYZOM_START_SPRING; - _RyzomTime = (float) fmod( time, RYZOM_DAY_IN_HOUR ); + float hours = ( gameCyle + _TickOffset ) / float(RYZOM_HOURS_IN_TICKS); + _RyzomDay = ( (uint)hours / RYZOM_DAY_IN_HOUR ) - RYZOM_START_SPRING; + _RyzomTime = (float) fmod( hours, (float)RYZOM_DAY_IN_HOUR ); _LocalTime = localTime; } - // get ryzom time (synchronized with server) inline float getRyzomTime() const { return _RyzomTime; } diff --git a/code/ryzom/server/src/ai_service/commands.cpp b/code/ryzom/server/src/ai_service/commands.cpp index 52a89f19a..4d52fc5cf 100644 --- a/code/ryzom/server/src/ai_service/commands.cpp +++ b/code/ryzom/server/src/ai_service/commands.cpp @@ -1686,7 +1686,9 @@ NLMISC_COMMAND(getDatasetId,"get datasetid of bots with name matchiong the given FOREACH(itBot, vector, bots) { CBot* bot = *itBot; - DatasetIds += bot->getSpawnObj()->dataSetRow().toString()+"|"; + CSpawnBot* spawnBot = bot->getSpawnObj(); + if (spawnBot!=NULL) + DatasetIds += spawnBot->dataSetRow().toString()+"|"; } } diff --git a/code/ryzom/server/src/ai_service/state_instance.h b/code/ryzom/server/src/ai_service/state_instance.h index 802172825..916b6bc47 100644 --- a/code/ryzom/server/src/ai_service/state_instance.h +++ b/code/ryzom/server/src/ai_service/state_instance.h @@ -44,14 +44,14 @@ class CStateInstance public: inline CStateInstance(CAIState* startState); - + void init(CAIState* startState); - + virtual CPersistentStateInstance* getPersistentStateInstance(); - + ////////////////////////////////////////////////////////////////////////// // State Persistent. - + struct CStatePersistentObjEntry { CStatePersistentObjEntry(); @@ -61,78 +61,78 @@ public: NLMISC::CSmartPtr _Obj; }; typedef std::vector TStatePersistentObjList; - + TStatePersistentObjList _StatePersistentObjList; - + // Made to allow obj with life time less or equal to state affectation life time. void addStatePersistentObj(CAIState const* keyState, NLMISC::CSmartPtr anyObj); void removeExceptForState(CAIState const* keyState); - + /** Try to obtain a group interface from the CStateInstance. Can return NULL if the * CStateInstance if not implemeted by a group related objet. */ // Bad, Bad, Bad .. virtual CGroup* getGroup() = 0; - + ////////////////////////////////////////////////////////////////////////// - - CAITimerExtended& timerStateTimeout() { return _StateTimeout; } - CAITimerExtended& timerPunctTimeout() { return _PunctualStateTimeout; } + + CAITimerExtended& timerStateTimeout() { return _StateTimeout; } + CAITimerExtended& timerPunctTimeout() { return _PunctualStateTimeout; } CAITimerExtended& timerUser(uint idx); - + CAIState* getCAIState(); - + virtual CAliasTreeOwner* aliasTreeOwner() = 0; - + virtual void stateChange(CAIState const* oldState, CAIState const* newState) = 0; - + CAIState* getState() const { return _state; } void setNextState(CAIState*); - + CAIState* getPunctualState() const { return _PunctualState; } CAIState* getNextPunctualState() const { return _NextPunctualState; } void setNextPunctualState(CAIState* state); void cancelPunctualState() { _CancelPunctualState = true; } - + std::string buidStateInstanceDebugString() const; - + void dumpVarsAndFunctions(CStringWriter& sw) const; - + virtual CDebugHistory* getDebugHistory () = 0; - + CAIState const* getActiveState() const; - + sint32 getUserTimer(uint timerId); void setUserTimer(uint timerId, sint32 time); - + void logicVarsToString(std::string& str) const; - + float getNelVar(std::string const& varId); void setNelVar(std::string const& varId, float value); void delNelVar(std::string const& varId); - + std::string getStrNelVar(std::string const& varId); void setStrNelVar(std::string const& varId, std::string const& value); void delStrNelVar(std::string const& varId); static void setGlobalNelVar(std::string const& varId, float value); static void setGlobalNelVar(std::string const& varId, std::string value); - + CAITimerExtended const& userTimer (uint32 index) const; - + bool advanceUserTimer(uint32 nbTicks); - + void processStateEvent(CAIEvent const& stateEvent, CAIState const* state = NULL); - + // callerStateInstance could be NULL; void interpretCode(AIVM::IScriptContext* callerStateInstance, AIVM::CByteCodeEntry const& codeScriptEntry); void interpretCode(AIVM::IScriptContext* callerStateInstance, NLMISC::CSmartPtr const& codeScript); - + /// @name IScriptContext implementation //@{ virtual std::string getContextName(); virtual void interpretCodeOnChildren(AIVM::CByteCodeEntry const& codeScriptEntry); - + float getLogicVar(NLMISC::TStringId varId); void setLogicVar(NLMISC::TStringId varId, float value); std::string getStrLogicVar(NLMISC::TStringId varId); @@ -140,19 +140,19 @@ public: AIVM::IScriptContext* getCtxLogicVar(NLMISC::TStringId varId); void setCtxLogicVar(NLMISC::TStringId varId, AIVM::IScriptContext* value); void setFirstBotSpawned(); - + virtual AIVM::IScriptContext* findContext(NLMISC::TStringId const strId); - + virtual void setScriptCallBack(NLMISC::TStringId const& eventName, AIVM::CByteCodeEntry const& codeScriptEntry); virtual AIVM::CByteCodeEntry const* getScriptCallBackPtr(NLMISC::TStringId const& eventName) const; virtual void callScriptCallBack(AIVM::IScriptContext* caller, NLMISC::TStringId const& funcName, int mode = 0, std::string const& inParamsSig = "", std::string const& outParamsSig = "", AIVM::CScriptStack* stack = NULL); virtual void callNativeCallBack(AIVM::IScriptContext* caller, std::string const& funcName, int mode = 0, std::string const& inParamsSig = "", std::string const& outParamsSig = "", AIVM::CScriptStack* stack = NULL); - + void blockUserEvent(uint32 eventId); void unblockUserEvent(uint32 eventId); bool isUserEventBlocked(uint32 eventId) const; //@} - + protected: /// Logic variables typedef std::map TLogicVarList; @@ -162,38 +162,38 @@ protected: TLogicVarList _LogicVar; TStrLogicVarList _StrLogicVar; TCtxLogicVarList _CtxLogicVar; - + // Nel variables typedef std::map*> TNelVarList; typedef std::map*> TStrNelVarList; TNelVarList _NelVar; TStrNelVarList _StrNelVar; - + // Callbacks (?) typedef std::map TCallBackList; TCallBackList _CallBacks; - + /// Flag for variable modification bool _LogicVarChanged; bool _LogicVarChangedList[4]; //TLogicVarIndex _VarIndex; // update logic timers --------------------------------------------- /// 4 timers available for user logic - CAITimerExtended _UserTimer[4]; - + CAITimerExtended _UserTimer[4]; + /// timer for timing positional states - CAITimerExtended _StateTimeout; - /// current state (index into manager's state vector) + CAITimerExtended _StateTimeout; + /// current state (index into manager's state vector) CAIState* _state; /// variable set to request a state change (std::numeric_limits::max() otherwise) CAIState* _NextState; - + /// timer for timing punctual states CAITimerExtended _PunctualStateTimeout; - + CAIState* _PunctualState; CAIState* _NextPunctualState; - + /// Flag for leaving the punctual state, returning to normal behavior bool _CancelPunctualState; bool _FirstBotSpawned; @@ -213,35 +213,35 @@ class CPersistentStateInstance public: CPersistentStateInstance(CStateMachine& reactionContainer); virtual ~CPersistentStateInstance(); - + typedef std::vector > TChildList; - + void setParentStateInstance(CPersistentStateInstance* parentStateInstance); - + CPersistentStateInstance* getParentStateInstance() const { return _ParentStateInstance; } - + void addChildStateInstance(CPersistentStateInstance* parentStateInstance); - + void removeChildStateInstance(CPersistentStateInstance* parentStateInstance); - + TChildList& childs() { return _PSIChilds; } - + TChildList _PSIChilds; - + // Interface to state status variables ----------------------------- CAIState* getStartState() { return _StartState; } void setStartState(CAIState* state); - + CStateMachine& getEventContainer() { return _Container; } - + void updateStateInstance(); - + ////////////////////////////////////////////////////////////////////////// // CStateInstance CPersistentStateInstance* getPersistentStateInstance() { return this; } - + ////////////////////////////////////////////////////////////////////////// - + private: /// id of the state to use at startup NLMISC::CDbgPtr _StartState; @@ -330,9 +330,9 @@ void CStateInstance::setLogicVar(NLMISC::TStringId varId, float value) //_VarIndex[varId] _LogicVarChangedList[static_cast(index)] = true; } - + } - + } inline @@ -354,7 +354,7 @@ void CStateInstance::setStrLogicVar(NLMISC::TStringId varId, std::string const& //_VarIndex[varId] _LogicVarChangedList[static_cast(index)] = true; } - + } //_LogicVarChangedList[_VarIndex[varId]] = true; } @@ -376,17 +376,16 @@ inline float CStateInstance::getNelVar(std::string const& varId) { TNelVarList::iterator it = _NelVar.find(varId); - if (it==_NelVar.end()) + if (it != _NelVar.end()) return it->second->get(); + + if (NLMISC::CVariable::exists(varId)) { - if (NLMISC::CVariable::exists(varId)) - { - nlwarning("Nel variable \"%s\" exists outside of this state instance", varId.c_str()); - return 0.f; - } - _NelVar[varId] = new NLMISC::CVariable("StateInstance", varId.c_str(), "", 0.f); - _NelVar[varId]->get(); + nlwarning("Nel variable \"%s\" exists outside of this state instance", varId.c_str()); + return 0.f; } - return it->second->get(); + + _NelVar[varId] = new NLMISC::CVariable("StateInstance", varId.c_str(), "", 0.f); + return _NelVar[varId]->get(); } inline @@ -424,17 +423,16 @@ inline std::string CStateInstance::getStrNelVar(std::string const& varId) { TStrNelVarList::iterator it = _StrNelVar.find(varId); - if (it==_StrNelVar.end()) + if (it != _StrNelVar.end()) return it->second->get(); + + if (NLMISC::CVariable::exists(varId)) { - if (NLMISC::CVariable::exists(varId)) - { - nlwarning("Nel variable \"%s\" exists outside of this state instance", varId.c_str()); - return ""; - } - _StrNelVar[varId] = new NLMISC::CVariable("StateInstanceVar", varId.c_str(), "", std::string()); - _NelVar[varId]->get(); + nlwarning("Nel variable \"%s\" exists outside of this state instance", varId.c_str()); + return ""; } - return it->second->get(); + + _StrNelVar[varId] = new NLMISC::CVariable("StateInstanceStrVar", varId.c_str(), "", std::string()); + return _StrNelVar[varId]->get(); } inline @@ -483,7 +481,7 @@ bool CStateInstance::advanceUserTimer(uint32 nbTicks) setUserTimer(k, (t>nbTicks)?(t-nbTicks):0); } return true; -} +} inline void CStateInstance::processStateEvent(CAIEvent const& stateEvent, CAIState const* state) @@ -496,7 +494,7 @@ void CStateInstance::processStateEvent(CAIEvent const& stateEvent, CAIState cons if (!state) return; } - + bool foundReaction=false; // nlassert(_mgr); for (uint i=0;iaddHistory("STATE: '%s' EVENT: '%s' REACTION: '%s'", state->getAliasNode()->fullName().c_str(), stateEvent.getName().c_str(), reaction.getAliasNode()->fullName().c_str()); - + foundReaction=true; - + if (!reaction.getAction()) { nlwarning("Failed to find action for event: %s",reaction.getAliasNode()->fullName().c_str()); @@ -521,14 +519,14 @@ void CStateInstance::processStateEvent(CAIEvent const& stateEvent, CAIState cons aliasTreeOwner()->getAliasNode()->fullName().c_str(), state->getAliasNode()->fullName().c_str()); continue; } - + } if (!foundReaction) { getDebugHistory()->addHistory("STATE: '%s' EVENT: '%s' NO REACTION", state->getAliasNode()->fullName().c_str(), stateEvent.getName().c_str()); } - + } inline @@ -540,38 +538,38 @@ void CStateInstance::setNextState(CAIState* state) _NextState = state; return; } - + // make sure the state is positional (not punctual) - if (!state->isPositional()) - { + if (!state->isPositional()) + { nlwarning("setNextState(): State should not be punctual '%s'%s - setting state to std::numeric_limits::max()", state->getAliasNode()->fullName().c_str(), state->getAliasString().c_str()); _NextState = NULL; return; } - + // set the next state _NextState = state; } inline void CStateInstance::setNextPunctualState(CAIState* state) -{ +{ // we're allowed to set state to 'no state' if (!state) return; - + // make sure the state is not positional (ie punctual) - if (state->isPositional()) - { + if (state->isPositional()) + { nlwarning("CStateInstance::setNextPunctualState(): State should be punctual '%s'%s - setting state to std::numeric_limits::max()", state->getAliasNode()->fullName().c_str(), state->getAliasString().c_str()); state = NULL; return; - } - + } + // set the next state _NextPunctualState = state; } @@ -626,7 +624,7 @@ void CPersistentStateInstance::removeChildStateInstance(CPersistentStateInstance TChildList::iterator it = std::find(_PSIChilds.begin(), _PSIChilds.end(), NLMISC::CDbgPtr(parentStateInstance)); #if !FINAL_VERSION nlassert(it!=_PSIChilds.end()); -#endif +#endif if (it!=_PSIChilds.end()) _PSIChilds.erase(it); } diff --git a/code/ryzom/tools/translation/translated/bodypart_words_es.txt b/code/ryzom/tools/translation/translated/bodypart_words_es.txt index a695b23a357dd4543fa026e6bc8c28ad06f7e7bc..55df54341ad027ff40d3cf47bf0191eed1a61eb7 100644 GIT binary patch delta 11 ScmbQIu}EWsoXF$}oGbttQ3Im@ delta 7 OcmZ3aF;8QIoCp95djfL+ diff --git a/code/ryzom/tools/translation/translated/career_words_es.txt b/code/ryzom/tools/translation/translated/career_words_es.txt index 8de86c670ca2a7b24d9333957ae8525aefc65624..a53738f0484f8b79aca5dbc5c3fda208ec926f28 100644 GIT binary patch delta 11 ScmaFH{fc|TGuFutOe_E(P6S&3 delta 7 OcmaFG{fv9VGgbf(Is<|L diff --git a/code/ryzom/tools/translation/translated/characteristic_words_es.txt b/code/ryzom/tools/translation/translated/characteristic_words_es.txt index 63a63c83474b7ff0544c30f33459a9e62de850df..1cd7f4b4e95c844fc951e371e2cbdca5089c1538 100644 GIT binary patch delta 12 TcmX@WdW3bu0VWn+1}+8w96$pc delta 7 OcmX@YdVqDq0VV(p=K}!% diff --git a/code/ryzom/tools/translation/translated/classificationtype_words_wk.txt b/code/ryzom/tools/translation/translated/classificationtype_words_wk.txt index 3855774fe4223860994fc8a70cc5f184c4598efa..0d7d54a223662a0703bc3c6c1d1a30f98420c821 100644 GIT binary patch delta 36 ucmV+<0NekL82T5G;*r7>k@|d-dI6pR36oI*A+tULfC7`k1cb9n1;hp>jSh1F delta 47 scmew*-X}5P5pxVf%EX5gLDb|z#`z$6Ge6T}Ca}OpmR7KUDeF--0F@pOjsO4v diff --git a/code/ryzom/tools/translation/translated/damagetype_words_es.txt b/code/ryzom/tools/translation/translated/damagetype_words_es.txt index 55a7e6347364a31191e163963c9c8a43673cf14d..35af6bcc5e5fb0f67334f7fea1a588fe6c5f1462 100644 GIT binary patch delta 12 TcmdnNv4>-W1q%x=0~Z4T7$5?S delta 7 OcmdnPv4dlS1q%QRmjZDB diff --git a/code/ryzom/tools/translation/translated/ecosystem_words_es.txt b/code/ryzom/tools/translation/translated/ecosystem_words_es.txt index 45a0b59e1c9d680e395832962c81bf2ef9f0e827..0cf292eeb6c486fc82ca507aa4a1d59d08f9c625 100644 GIT binary patch delta 12 TcmdnPc7Sbz4KoWb0~Z4T7-j;K delta 7 OcmX@Wwufzl4Kn}>x&n9r diff --git a/code/ryzom/tools/translation/translated/faction_words_es.txt b/code/ryzom/tools/translation/translated/faction_words_es.txt index 957c6f7afd30124b6446905b5bc4ffb12b8a0034..81b0fe15b801c5843dadd52a94e4363719cf7600 100644 GIT binary patch delta 11 ScmZ1#ye@ddD$U6PTr2<|dIU27 delta 7 OcmZ1%yefFZDop?m<^zHN diff --git a/code/ryzom/tools/translation/translated/item_words_en.txt b/code/ryzom/tools/translation/translated/item_words_en.txt index 6e8780556bb0916c4db8cadeac60ab253e6e9a18..d8a09406ce45397c6a785969de4ea94387af2794 100644 GIT binary patch delta 2026 zcmZvdQD|Fb6vs(>dy}TM$if( zQ>2Wbk|Sk|Jctiv#>{rPT^DPdTDwqVR_N5(b+rtwwQFlx%cidLf6v#OT)~IZbI$kO zo1Fjee@?chk4?=S8!|m+jah4IW}T^TbkNKjw~g`|V|Pkjqg?rHf>Qxch55$LTxu8h1>f4Y?Pepg9%2d=;Id zMjV->i+rgOPlyB^*XW??8PREVAYzoR(WFX60<`;?N~QaV-)Q8O&#BFRwvD5HbdPkv zz7k_|iZZ-VYlse$DpK7aYS8#Zf!cX!hg$h~0Us&%pabz{fhJTc?f1M`r*rX3`pB+D zc<89#&wbtdA@g+#r532=zopkW@wcN*_ABb(p{o>OL}%53qtcX0p-qSr_aRzWB&2cf z8;B+^fK(y&PeU)HqSs08ISyTqev2zr^S~7T)QqFvUUphtfP&53u?#15Z9pDG&vCX_ z)42VH^A1t9cmq<1;}8wH+$DC(7b#*Ti}a4iWvZ@60gXpz@ftDO>MY%MS!wAzd~f@} zf`q0=!G~SeRU{fDZ`vQa3e#S=NvG6-sBvn}24ky+XiyHUwK>Xq6nOZhnS=AVgQi~P zgbz-BWgcHd+$5%f3PqJld+A&FHgdYuU^H99KhT^<0ao*oZ_;_|C(MU<01j#4;oB6E zSwIk1b(s;EU+31J>5{6UyECa>uWt1&kk6yQ$yB^~M}cc%={3Cw`K2X911|Ds@6yxU zf0ss74Q*z4Grmu^CYMO_R4|t-Ji|P*Ov@^DCPL$udr%7i+wCY`1!!gOQPPDiwE_5Z zzdF=p7~pS>%MZxMJv)@<(r*bFU$1d799q#e?tFm89EL%5 z8j~q+=iPvDgwwBkHKuLno-iHV#*`+v>B9=s>a#uzqQH68nT|fh29k8~Av`aU*!IUq zG_6v5bgiksXrKxZOWtpsPxaO6y#5cICi5#^9e#}Ql zVwL^lq;Z8A^BQ(zc3Kbdg(f3fVf`Kp|Goe;arSu0MH8C5@qRySz8f^QTr6Q)S+6ps ew<;_nyl6ldL2Ebnb}nS#&;GyP%7w!D?tcMRV=#sQ delta 1680 zcmZWpUr1Y57$@~6#&~OQzoSJ&f`~{EDI!IDkP-GUWE2tKD#I1&L+L}1QHn?@QZC&X zQpB-*Wyr`wDSOy#Y+Y_=)!A%KJKMF^jm+704X&%5wJsB9J7?Sd&N)fUx`$l8lXLja z@85T(t{+%S9O$=Q_71ziHf*=;u?ualU1a<0V%xNL+9mcb+p>3$(Z(0N_9F$jYJ}q4 zoknGzrv;u%qOzhiBX@~sf1*A7)+kkRYLaTWb(BIpG>;>xQ5@;INvGNJl81vAsgX}C zQ6&#vq!A8|p;gE4ST=u&Wh9QOB}RTu-=+##g*bkns`*xoZgTnw+D|w%#T}cdJ}nhK zUb%$B!Ke6Smm%&h6IFctEA*=$$48-Wy9_MB^Js;tSMx|;rg6<<8+iF7uH0r6ouoO< z{ax#m8EKqF8ooJ_8A=(;KMzB(r1O-iZb$uc3kBn7W3G z;7}b8FQT7fo4QUl;Z10H=sRlSH~++D$qWoqo8}CfY?FmmzVHpHr_@QVVmIg=mt>vb z+VAO+w9C)+w`f{&^mG3`G#-@hp=#u)ZF-!(+hn*j-N-D=RdiE#s5UG_9k1M>Big-* zIjYrsP#x18m4$;T8sympkB8TPpe+e+S=)uMnS3w_9TmRpvPW9DtY|n$;WF^L#1OYF zXoo5}vH+WbypntG(uLQMJ3t;(co#KP?*plh3>2!P+L_1$`gR+k1B9Qr+- z=AUJxg`g$}o>0PpzCM?hwCkycKBTc`1C*C1r+t-b6!Z(+@Uh$A`ZR6<)?Z{al6klW z)-v^P;2r!67AlEbHfV2VcsJ;T9)s`41gcI0K9kG`al+`NPHHP`InW!vil6HYG6j3~qP{ z1kkotRw1po?^QM?sPgo7&c32cDj^B|3Pr}q$Fs$vnj?2HZ`mbgU>?~{><~?w*Z$q& zJsv0!&6-k$A^b5zoKzI5dDSiOy2#MXdW4Th+<1WclT^;>j-3WKdc-~*F6?H87*(GR zSEx`-Xv1KtkB7a&k5LIYDC#p3$Wi32A`#88&M7ji`C6s~AjcL}Z_dYZer^Ja+;BEb zF`<~Ba5=|<84bK4JKX$*t>7NS?-n2kXzTXZ6I-DQQI-z)+ d(Zt7vi0hDI#^dkfg~qQGzcQ!0Y|p*6e*yi+#$*5h diff --git a/code/ryzom/tools/translation/translated/job_words_es.txt b/code/ryzom/tools/translation/translated/job_words_es.txt index 69177dfe7c5752084a5acea66d71c197b0d43e4b..701fc479bc90c0a8694fb7fa24c06cb6c14bf93a 100644 GIT binary patch delta 11 ScmZ3Xzeaz<3h~JTj4S{gQUl5W delta 7 OcmZ3Zze0b*3UL4pPy-?W diff --git a/code/ryzom/tools/translation/translated/powertype_words_es.txt b/code/ryzom/tools/translation/translated/powertype_words_es.txt index 2d1f42cbe3d19186277bd2b8cf83fd5f7dae2429..6934de33340ecf42dc7f0e384c77d25ef897809e 100644 GIT binary patch delta 12 TcmeyN|3`nr4{;V=1}+8wCSC+B delta 7 OcmeyP|3iPn4{-nyumlnS diff --git a/code/ryzom/tools/translation/translated/score_words_es.txt b/code/ryzom/tools/translation/translated/score_words_es.txt index 8469aa4714a072aabe0cd8916104df8117e36fd6..f22125af2a8b2b54b47a2a1815282868c2cbe984 100644 GIT binary patch delta 12 TcmdnNx`%bc4ki{}1}+8w8(0Gb delta 7 OcmdnPx`TDY4kiE$cLM1E diff --git a/code/ryzom/tools/translation/translated/skill_words_de.txt b/code/ryzom/tools/translation/translated/skill_words_de.txt index b382742c4fbed8d769aba54ef2c5a685588d056c..77e43f4fa510ac43f3b40e50fa94355601e5f0dc 100644 GIT binary patch delta 15291 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