Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Denes

Pages: [1]
1
PlaneShift Mods / Ignoring the Dead
« on: February 25, 2014, 07:37:21 am »
   So, instead of shuffling through mobs to look for a new target with ā€˜/target next npcā€™, it is possible to filter the fallen out. Something like ā€˜/target next alive npcā€™ can be implemented. Here is how it works for me:
Code: [Select]
Index: client/cmdusers.cpp
===================================================================
--- client/cmdusers.cpp (revision 9296)
+++ client/cmdusers.cpp (working copy)
@@ -650,46 +650,54 @@
     else if (words[0] == "/target")
     {
         if (words[1].IsEmpty()) {
-            return "You can use /target [self|clear] or /target [prev|next|nearest] [item|npc|player|any].";
+            return "You can use /target [self|clear] or /target [prev|next|nearest] [alive] [item|npc|player|any].";
         } else if (words[1] == "self")
             psengine->GetCharManager()->SetTarget(psengine->GetCelClient()->GetMainPlayer(),"select");
         else
         {
             SearchDirection dir;
-            csString tail;
+ char tailn;           
             if(words[1] == "next")
             {
                 dir = SEARCH_FORWARD;
-                tail = words.GetTail(2);
+                tailn=2;
             }
             else if(words[1] == "prev")
             {
                 dir = SEARCH_BACK;
-                tail = words.GetTail(2);
+                tailn=2;
             }
             else if(words[1] == "nearest")
             {
                 dir = SEARCH_NONE;
-                tail = words.GetTail(2);
+                tailn=2;
             }
             else
             {
                 dir = SEARCH_NONE;
-                tail = words.GetTail(1);
+                tailn=1;
             }
 
+ bool onlyAlive=false;
+ if (words[tailn] == "alive")
+ {
+ onlyAlive=true;
+ tailn++;
+ }
+ csString tail=words.GetTail(tailn);
+
             if (tail == "item")
                 UpdateTarget(dir, PSENTITYTYPE_ITEM, NULL);
             else if (tail == "npc")
-                UpdateTarget(dir, PSENTITYTYPE_NON_PLAYER_CHARACTER, NULL);
+                UpdateTarget(dir, PSENTITYTYPE_NON_PLAYER_CHARACTER, NULL, onlyAlive);
             else if (tail == "player" || tail == "pc")
-                UpdateTarget(dir, PSENTITYTYPE_PLAYER_CHARACTER, NULL);
+                UpdateTarget(dir, PSENTITYTYPE_PLAYER_CHARACTER, NULL, onlyAlive);
             else if (tail == "any")
-                UpdateTarget(dir, PSENTITYTYPE_NO_TARGET, NULL);
+                UpdateTarget(dir, PSENTITYTYPE_NO_TARGET, NULL, onlyAlive);
             else if (tail == "clear")
                 psengine->GetCharManager()->SetTarget(NULL, "select");
             else
-                UpdateTarget(dir, PSENTITYTYPE_NAME, tail);
+                UpdateTarget(dir, PSENTITYTYPE_NAME, tail, onlyAlive);
         }
     }
 
@@ -1364,7 +1372,8 @@
 // around to the nearest or furthest entity respectively.
 void psUserCommands::UpdateTarget(SearchDirection searchDirection,
                                   EntityTypes entityType,
-                                  const char *name)
+                                  const char *name,
+   bool onlyAlive)
 {
     GEMClientObject* startingEntity = psengine->GetCharManager()->GetTarget();
     psCelClient* cel = psengine->GetCelClient();
@@ -1428,6 +1437,11 @@
             || (entityType == PSENTITYTYPE_NAME &&
                 !csString(object->GetName()).StartsWith(name, true)))
             continue;
+
+ if ((onlyAlive) && (!object->IsAlive()))
+ {
+ continue;
+ }
 
         csVector3 pos = object->GetPosition();
 
Index: client/cmdusers.h
===================================================================
--- client/cmdusers.h (revision 9296)
+++ client/cmdusers.h (working copy)
@@ -96,7 +96,8 @@
 
     void UpdateTarget(SearchDirection searchDirection,
                       EntityTypes entityType,
-                      const char* name);
+                      const char* name,
+   bool onlyAlive=false);
 
 
     /// Struct to hold our emote data.

2
PlaneShift Mods / /equip and /dequip a tiny bit differently
« on: December 07, 2013, 05:26:22 pm »
Little changes that might make ā€™reload arrowsā€™ or ā€™hammer closed ringā€™ shortcuts work smoother:
Code: [Select]
Index: client/cmdusers.cpp
===================================================================
--- client/cmdusers.cpp (revision 9059)
+++ client/cmdusers.cpp (working copy)
@@ -362,13 +362,22 @@
 
     else if ( words[0] == "/dequip" )
     {
-        if ( words.GetCount() < 2 )
-            return "Usage: /dequip [item name|slot name]";
+        if ( words.GetCount() < 2 || (words[1] == "stack" && words.GetCount() < 3))
+            return "Usage: /dequip [stack] [item name|slot name]";
 
         pawsInventoryWindow* window = (pawsInventoryWindow*)PawsManager::GetSingleton().FindWidget("InventoryWindow");
-        csString itemName( words.GetTail(1) );
+        csString itemName;
+ if (words[1] == "stack")
+ {
+ itemName=( words.GetTail(2) );
+ window->Dequip( itemName, true );
+ }
+ else
+ {
+ itemName=( words.GetTail(1) );
         window->Dequip( itemName );
     }
+    }
 
     else if ( words[0] == "/write" )
     {
Index: client/gui/inventorywindow.cpp
===================================================================
--- client/gui/inventorywindow.cpp (revision 9059)
+++ client/gui/inventorywindow.cpp (working copy)
@@ -288,8 +288,15 @@
     return NULL;
 }
 
+pawsSlot* pawsInventoryWindow::GetStackingSlot(const char* itemName, int stackCount)
+{
+    for ( size_t n = 0; n < bulkSlots.GetSize(); n++ ) //Iterate for first fit stacking slot
+ if ( (bulkSlots[n]) && (!bulkSlots[n]->IsEmpty()) && (bulkSlots[n]->GetToolTip().CompareNoCase(itemName)) && (bulkSlots[n]->StackCount()+stackCount<=65) ) //magical 65 used hardcoded in many places but also declared in psiem.h. include? MAX_STACK_COUNT?
+ return bulkSlots[n];
+    return NULL;
+}
 
-void pawsInventoryWindow::Dequip( const char* itemName )
+void pawsInventoryWindow::Dequip( const char* itemName, bool stack)
 {
     pawsListBox* bulkList = dynamic_cast <pawsListBox*> (FindWidget("BulkList"));
     if ( (itemName != NULL) && (bulkList) )
@@ -318,7 +325,15 @@
             int slot        = fromSlot->ID();
             int stackCount  = fromSlot->StackCount();
 
-            pawsSlot* freeSlot = GetFreeSlot();
+ pawsSlot* freeSlot = NULL;
+ if (stack)//Find a stacking slot
+ {
+ freeSlot = GetStackingSlot(fromSlot->GetToolTip(), fromSlot->StackCount());
+ }
+ if (freeSlot == NULL) //Need to look for an empty slot
+ {
+ freeSlot = GetFreeSlot();
+ }
             if ( freeSlot )
             {
 
@@ -353,12 +368,20 @@
                 // We found an item with a matching name.
                 // If the stack count matches the desired amount, we are done.
                 // Otherwise, keep looking for a better match.
+                if (slotDesc->stackCount == stackCount)
+ {
                 from = slotDesc;
-                if (slotDesc->stackCount == stackCount)
                     break;
             }
+ else if (from==NULL // if its first match
+ || ((from->stackCount<stackCount)&&(from->stackCount < slotDesc->stackCount)) // if storedslot stackcount (from) is smaller than what we wanted (stackCount), take the larger stack. '/equip 65 iron arrow' will take 45 over 35
+ || ((from->stackCount > slotDesc->stackCount)&&(slotDesc->stackCount>stackCount))) // if storedslot stackcount (from) is greater the examined (slotDesc) is greater than what we wanted (stackCount), take the smaller stack. '/equip 1 open steel ring' will take 10 over 65
+ {
+ from = slotDesc;
         }
     }
+        }
+    }
 
     if (from)
     {
Index: client/gui/inventorywindow.h
===================================================================
--- client/gui/inventorywindow.h (revision 9059)
+++ client/gui/inventorywindow.h (working copy)
@@ -66,6 +66,8 @@
 
     /// Get a free slot
     pawsSlot* GetFreeSlot();
+ /// Get a stacking slot returns NULL if no suitable found
+ pawsSlot* GetStackingSlot(const char* itemName, int stackCount);
 
     /** Equips an item into it's closest available slot.
      *  Will pick the first item of the given name in the bulk slots to try
@@ -84,7 +86,7 @@
      *
      *  @param itemName The name of the item in the inventory.     
      */   
-    void Dequip(const char* itemName);
+    void Dequip(const char* itemName, bool stack = false);
     
     /** Finds an item with the given name and attempts to open it as a book
      *  to write on.

So a ā€™/dequip stack iron arrow; /equip 65 iron arrowā€™ could first try to stack the ones you are holding with another in the inventory and then grab the stack which is closest to 65, so you donā€™t end up with several smaller stacks clogging the invo;
The same way ā€™/dequip stack dozen closed steel; /equip 1 dozen open steel rings; /useā€™ could stack the products and use up the smaller stack of materials first.

3
Wish list / Playing the Guard
« on: October 18, 2013, 04:04:20 pm »
   It hasnā€™t been till recently that I came to know that you could be ā€œbanned for being involved in a RP where someoneā€™s playing guardā€. That is a shame since working as a ā€˜reserve guardā€™ is an essential part of my mainā€™s RP and I canā€™t begin to imagine kra without it. Or even worse: get friendly chars in any kind of trouble.

   But personal feelings aside, here are some topics I can offer for our consideration:
-   rules clearly state players must not assume a guardā€™s role
-   easiest way to let others know ICly a GM is around regardless of their UI settings
-   There already is a quest for it. Jefecra  clearly states in ā€˜Joining the Guardsā€™ that: ā€œAnd now that joined our ranks, I've got...ā€(16-Nov-2012)
-   One of the easiest ways to create a ā€œgood side vs bad sideā€ scenario

Is there a way to preserve advantages while evading the contradiction?

4
Wish list / Buyable travel tokens
« on: May 12, 2013, 06:44:47 am »
As a means of supporting new players and to allow them to spend less time with hiking.

5
PlaneShift Mods / Main Coloring Based On Distance
« on: March 04, 2013, 07:20:09 am »
Wellā€¦ I understand this isnā€™t a new idea and neither considered a useful one. But. I for one find difficult to read ā€œbetween the linesā€ (on rare occasions when more than one interaction takes place close by) and thought of giving it a shot:
Code: [Select]
--- D:/development/ps_prist_20130208/src/client/gui/chatwindow.h Fri Feb 08 08:32:33 2013
+++ C:/development/PlaneShift/src/client/gui/chatwindow.h Mon Mar 04 12:30:22 2013
@@ -207,6 +207,10 @@
     /// mixes two colours and returns their mixed colour
     int mixColours(int colour1, int colour2);
 
+    /// mixes two colours and returns their mixed colour dased on distance [0..160]
+ int mixColoursWithDistance(int colour1, int colour2, float distFromMe);
+ static const int distantColour=4210752; //graphics2D->FindRGB(64,64,64); //grey TODO: Hardcoded. Needs config attribute
+
     /// Leaves the channel and removes the hotkey association
     bool LeaveChannel(int hotkeyChannel);
 
--- D:/development/ps_prist_20130208/src/client/gui/chatwindow.cpp Fri Feb 08 08:32:33 2013
+++ C:/development/PlaneShift/src/client/gui/chatwindow.cpp Mon Mar 04 12:32:51 2013
@@ -41,6 +41,8 @@
 #include <iutil/stringarray.h>
 #include <iutil/plugin.h>
 
+#include <csgeom/math3d.h>
+
 //=============================================================================
 // Project Includes
 //=============================================================================
@@ -1651,7 +1653,17 @@
         case CHAT_SAY:
         {
             FormatMessage(msg.sText,msg.sPerson, "says", buff, hasCharName);
-            colour = settings.chatColor;
+
+ csVector3 myPos = psengine->GetCelClient()->GetMainPlayer()->GetPosition();
+ GEMClientActor* actor = dynamic_cast<GEMClientActor*> (psengine->GetCelClient()->GetActorByName(msg.sPerson));
+ float distFromMe=0;
+ if (actor)
+ {
+ csVector3 pos = actor->GetPosition();
+ distFromMe = csSquaredDist::PointPoint(myPos, pos);
+ }
+ colour= mixColoursWithDistance(settings.chatColor,distantColour,distFromMe);
+            //colour = settings.chatColor;
             break;
         }
 
@@ -2626,6 +2638,19 @@
     graphics2D->GetRGB(colour1,r,g,b); //gets the rgb values of the first colour
     graphics2D->GetRGB(colour2,r2,g2,b2); //gets the rgb values of the second colour
     return graphics2D->FindRGB((r+r2)/2,(g+g2)/2,(b+b2)/2); //does the average of the two colours and returns it back
+}
+
+int pawsChatWindow::mixColoursWithDistance(int colour1, int colour2, float distFromMe)
+{
+    int r,g,b;
+    int r2,g2,b2;
+ int n=int(distFromMe);
+ if (n<0) {n=0;}
+ if (n>160) {n=160;} //0..160 is the distance we work with. TODO: either divide by 16 or 32 to save CPU, or make resolution configurable
+ int o=160-n;
+    graphics2D->GetRGB(colour1,r,g,b); //gets the rgb values of the first colour
+    graphics2D->GetRGB(colour2,r2,g2,b2); //gets the rgb values of the second colour
+    return graphics2D->FindRGB((o*r+n*r2)/160,(o*g+n*g2)/160,(o*b+n*b2)/160); //does the average of the two colours and returns it back
 }
 
 //------------------------------------------------------------------------------

This one is rather crude. Iā€™d be happy to enhance it, if I learnt someone else using it too.
Screenshot from an irrelevant event, but you get the idea  :) :

6
PlaneShift Mods / Store capacity
« on: February 09, 2013, 07:03:03 pm »
   Are you a merchant or perhaps a collector or precious items? Are you living in constant fear of the storekeeper telling you can’t access items because you have overrun your space?
   If you are one fear no more. Kra brings you the designs of a “Tal scale”. This unique device that was named after the famous weapon and armor merchant, can tell you what percent of the storage you are currently using in each category.
Usual “open mechanics” terms apply. Especially the no guarantee and the reusability part.


Be aware! If devs change price / name / code whatever you can end up above 100%. Also remember not to use store for junks, since it slows down data access for everyone not just you.

In the hope, others will find it useful.

Code: [Select]
--- D:/development/ps_prist_20130208/data/gui/storage.xml Fri Feb 08 08:33:45 2013
+++ C:/development/PlaneShift/data/gui/storage.xml Sun Feb 10 00:04:24 2013
@@ -31,6 +31,11 @@
             <text string="SINGLE" horizAdjust="CENTRE" />
     </widget>
 
+    <widget name="Tal_scale" factory="pawsButton" id="160" tooltip="Tal scale">
+        <frame x="560" y="308" width="48" height="48" border="no" />
+        <bgimage resource="ButtonCombine" />
+    </widget>
+
     <widget name="View" factory="pawsButton" id="150" tooltip="View item">
         <frame x="560" y="338" width="48" height="48" border="no" />
         <bgimage resource="view" alpha="0" />


--- D:/development/ps_prist_20130208/src/client/gui/pawsstoragewindow.h Fri Feb 08 08:32:32 2013
+++ C:/development/PlaneShift/src/client/gui/pawsstoragewindow.h Sun Feb 10 00:09:28 2013
@@ -74,6 +74,7 @@
     int merchantID;
     int tradeCommand;
     int selectedItem;   /// index of item, selected in the itemsBox
+ size_t dataSize; ///Last handled ITEMS message size
 
     pawsListBox* categoryBox;
     pawsListBox* itemsBox;


--- D:/development/ps_prist_20130208/src/client/gui/pawsstoragewindow.cpp Fri Feb 08 08:32:32 2013
+++ C:/development/PlaneShift/src/client/gui/pawsstoragewindow.cpp Sun Feb 10 00:16:10 2013
@@ -31,6 +31,7 @@
 /////////////////////////////////////////////////////////////////////////////
 //  CLIENT INCLUDES
 /////////////////////////////////////////////////////////////////////////////
+#include "gui/chatwindow.h"
 
 /////////////////////////////////////////////////////////////////////////////
 //  PAWS INCLUDES
@@ -53,6 +54,7 @@
 #define EXCHANGE_ALL          110
 #define EXCHANGE_SINGLE       120
 #define VIEW_ITEM             150
+#define TAL_SCALE             160
 #define WITHDRAW_RADIO_BUTTON 1000
 #define STORE_RADIO_BUTTON    2000
 /////////////////////////////////////////////////////////////////////////////
@@ -133,6 +135,7 @@
 
         case psGUIStorageMessage::ITEMS:
         {
+ dataSize=sizeof(uint8_t) +incoming.commandData.Length()+1;
             HandleItems( incoming.commandData );
             Show();
             return;
@@ -403,6 +406,7 @@
             psGUIStorageMessage outgoing(psGUIStorageMessage::CATEGORY, commandData);
             outgoing.SendMessage();
         }
+ dataSize=0; //Last incoming ITEMS data size reset. To prevent working before server could respond
     }
     else if ( widget->GetID()==ITEM_LIST  &&  status==LISTBOX_SELECTED )
     {
@@ -482,6 +486,22 @@
             }
             return true;
         }
+ case TAL_SCALE:
+ {
+ pawsChatWindow* chat = static_cast<pawsChatWindow*>(PawsManager::GetSingleton().FindWidget("ChatWindow"));
+ pawsRadioButtonGroup* group = (pawsRadioButtonGroup*)FindWidget("WithdrawStore");
+ if (group->GetActiveID()==WITHDRAW_RADIO_BUTTON && categoryBox->GetSelectedRow()!=NULL && dataSize>0) //We have a healthy selection
+ {
+ csString css;
+ css.Format( "You are using %.1f%% of your storage in %s category.", (float)dataSize*100/MAX_MESSAGE_SIZE,categoryBox->GetSelectedText(0));
+ chat->ChatOutput(css);
+ }
+ else
+ {
+ chat->ChatOutput("You have to select a category of stored items for the scale to work.");
+ }
+ return true;
+ }
     }
 
     return false;

7
Wish list / Kran character generation and parents.
« on: November 10, 2012, 04:27:11 am »
As for the WHY:
Choosing professions for two parents in Khan character generation is confusing to me.
Suggestion:
-   Krans have no way of knowing their parent since they transform to their adult form at some early stage of their cycle (Metamorphosis while being left in a cave?) so they canā€™t pick any.
-   Krans look after their young until they are capable of sustaining themselves because they see them as a renewed/prolonged self-existence. They may choose only one.
-   Krans have a unique way of reproducing which involves passing limited number of memories to the next generation on a cellular level. (suggesting 1-n, but letā€™s stick to 2)
-   Krans do pair up to provide a healthy social emotional environment for their young. (Suggests that a Kran may find mate from other races)
-   Krans do pair up, to support the physiological development of their young. Parents provide them with body fluids (blood and acids) on a regular basis, and having 2 individuals donating is easier or makes one more resilient.
-   Or any combination of the ones above

As for the seriousness:
I think this is a minor thing that should take the last place in a prioritized sense.

8
Newbie Help (Start Here) / First week in Yliakum
« on: November 09, 2012, 08:05:02 pm »
Purpose
   As a newcomer, Iā€™d like to share some of the insights I gathered during my first week as a citizen of Yliakum, in the hope that some of them come as a fresh, pure perspective might be valuable to the community.
Background
   Back in the Nineteen Nineties I used to play ā€œMiracle Adeptia Guns Urrus Sorrateā€ (a role-playing game much like AD&D) as a kid. Around 2005 I played on a Lineage C2 private server for somewhat less than a year. So Iā€™m no expert but I have some idea about MMORPGs and I have an idea what 2d6 is, unlike young people with alike intrests.
My plan
   After 15 minutes of reading the official website, I decided to give PS a go to relive the fun of RP-ing. My plan was to come out with a plain old simple grunt and advance him towards being some sort of knight, an engineer or an architect. Krans fit the bill perfectly. My choice was supported by the fact, that it is usually easy to RP a character like that and on the combat field every party needs someone to take the hits.
Start off
   Installing the Windows client was pretty straightforward although my VGA driver needed an update. Later on my client randomly exited quite frequently which finally became a permanent error as I strolled to into the Arena. (wasnā€™t sound related as I turned that off) I overcame by using the x86 binaries instead of the 64bit ones. (I didnā€™t file a bug report since I didnā€™t know where to find the relevant logs to attach or there is a ā€œ/debug=verboseā€ or similar argument to the binary)
   Character generation was intuitive enough. I paved my way by choosing both parent as architects (This one seemed odd for asexual reproduction, but there might be details in setting I donā€™t know. Anyway I treated them as one.) to give the prodigal son some family inheritance to live up to. The training ground was very helpful and brief. Iā€™d expect it to expand with the latest implementations, but either way it is fine.
   My first thing was to get my char a proper gear. The second was to look for something to do relying on the ā€œA letter from a friendā€. This on, the possibilities rose exponentially. At first I ran into some technical difficulties and the unability to find the NPC in the Arena. Secondly on my 2nd quest Iā€™ve been instructed to fetch lamp fuel from Ojaveda. As I had the in-game map, I knew where to leave the city. I spent 2 hours getting there . I didnā€™t know that monsters wonā€™t attack until provoked and the sign posts were not definitive in some cases. So I did some turn-backs, but I was on the right track all along. Iā€™m happy to have found the maps on planeshift.net after a while, but till than I spent hours searching for one in-game. (I donā€™t know whose responsibility it is since players may say, that it is not their job to maintain the signposts or the integrity of the world ie players have to find their way under the given circumstances, while devs could argue that players have everything to help each other out: by drawing maps or escorting newbies and so on. Now I think it is basically my fault for not asking either side for help.)
2nd step
   After familiarizing myself with the game itself, I took time to revise and do further readings about the PlaneShift universe. That basically meant the official website, wiki and the most recent portion of the forum. Since I started everywhere with reading the rules, I ended up felling that I ended up in some sort of virtual dictatorship. Donā€™t get me wrongā€¦ I like rules. They prevent chaos from happening. But having myself reminded to them at all corners is somewhat disturbing. (I wonderā€¦ How do they know, that my intentions are to create a bot to rule their most beloved world and troll their forums? ) Anyhow wiki is a bit outdated and that makes me proud to be a participant in an ever-changing alpha testing.
Quests
   Hot topic and opinions greatly differ. Since the ~4th day in game I feel like my char was an errand boy with a rodent exterminatorā€™s skillset. Quests usually involve travelling over great distances. I understand that there is no prospect for teleports. I also understand that having players prove their determination is crucial for their progression. Butā€¦ Having players run hours for quests can be temporary at best. I gave the problem some though and didnā€™t come up with any perfect solutions, although I believe, that we player-testers are responsible.  Here is one mentioned from previous forum posts: Letā€™s have a simple game in game. Possibilities are infinite, but for example playing for education points could involve beating an NPC in a board game of choice (minding the 1n-nn target age of course) like chess. In Lineage this was implemented to fishing. It relied on reflexes and I hated it so much, that I cheated with using a bot. On the other hand I remember when my father had his first mobile (M-bat). It had a game called something like Bot wars. I spent hours of programming virtual robots with a (as far as I can remember) ReallyRISC instruction set like: turn->direction; move (forward); sensor->if enemy is in front of me do this else jump that; go to xy instruction; shoot (front); on a max 16 instructions (4bit) and a 2d board with 3 bots. (It also had a random element, but I think you get the point already) It would be a win-win to utilize the players to generate the AI or the MOBs (I know it is a long shot) like this. For example in PS I could imagine my char as an engineer who designs the logic of automatic harvesters with rock evasion and rodent extermination. The concerns of the artist community should be addressed in the same manner (I guess). You might think that logic like the previous is far from the world of PlaneShift. I did so too, until I encountered a quest of deciphering a text. Not knowing what the quest reward was I decided to utilize my OOC self and applied letter frequency probability. I regret this decision, because my char: Denes would not have had any way of knowing that at all and the reward item was a musical instrument of some kind. Before that I had another quest requiring me to answer a question. I kept giving my (entirely wrong) answer to the NPC and he kept saying that he doesnā€™t understand what my char has been talking about. I almost filed a complaint, before I realized my mistake. Still I believe the response could have been more elaborate.
Iā€™m still clinging on the win-win idea. Since engineering relies on mathematics, I could imagine a quest to gather statistics for the dev crew. Say for example I could count the PCs leaving from Hydlaa to the Ojaveda Road from 7pm to 8pm GMT+1 for starters. I could upload the data to some sort of spreadsheet for further analysis. (Even if itā€™s no help at all Iā€™d rather be doing that, than running back and forth all the time)
NPCs being able to move maybe more realistic, but further the tortures one has to endure to get by.
Furthermore I couldnā€™t find the way to tell if an NPC is giving a quest for a certain faction. That is annoying and unintentionally against my RP wills.
NPCs in general talk understandably and always have interesting background stories to tell. I had a minor glitch leaving an NPC before it could finish the story, but /help got me out of the trouble. Some quests seem to be outdated but Iā€™m ever proud. (Getting broadsword crafted right after finding a pair of bracelets for the guards doesnā€™t seem fair and how am I supposed to produce carrot juice?)
Economy
As a pure warrior/barbarian I found my char lacking of money despite all the rat intestines he got. And this is all Iā€™m saying about combat, because I know that it is far from being the first priority in game. Iā€™ve been advised never-ever to sell glyphs by an experienced player. I took the advice, but now I know I was wrong. I know if I was a magician Iā€™d be very-very thankful for being able to buy spells from merchants. So the smaller the community is, the more we have to give each other. Back to money problems: no kidding I needed a side-job. I can only guess but if it is intentional than it is genius. I have had to come up with a side-kick and involve Denes in RP even more. I chose mining as the basis for a lot of items to support my progression in training. Usually there is a sellerā€™s market if Iā€™m lucky to have the right characters online. Mining is sometimes referred to as a ā€¦ Let me quote a response I got in reply to an auction message: ā€œi offer a bag of boredom for the highest bidderā€. That comment maybe true in some context, but I prefer to think of mining as a sacrifice on the altar of self-progression and common good. Another player told me, that there were better things to do on PS than mining wishing me all the best. Despite the previous there is a bigger problem than not recognizing the importance of gathering basic materials. So far I could only hear my own voiceā€™s echo in the auction channel. There are two options I can think of: The freshly started cars are all expert RP-ers (and/or chars of players already involved with PS) and hang out by the tavern to make friends, or there arenā€™t any and Iā€™m the only freshman here. /who usually describes a number of online players between 30-40. That is all kinds of ā€œLess than expectedā€ if I take the GMs, the experienced players, the distance of places and the variety of skills in account. Donā€™t get me wrong. Iā€™m happy for all the possibilities, but it leaves me with no real chance to meet a master of a certain profession I might need. Bottom line: We need more players. (Am I bold or what to target the top of the food chain as a newborn?) As for the how, I canā€™t be of any real help, but I hope that some of the readers of this post can do more. Maybe a ā€œwholesaleā€ type of warehouse could hold the key to a workaround. Imagine a warehouse where you can place bids or offer items for sale in a permanent manner. Youā€™d leave the money required to buy or the items you wish to sell, and on the next occasion you could check if you were successful in buying/selling. My personal target would be to feed crafters with minerals till they make mediocre to superior items publicly available / buyable.
Players
Iā€™m happy to have learnt, that all players and GMs are very kind and helpful. This could be derived from the fact that PS is a magnet for such (Iā€™m proud again), or maybe they realize: the more ā€“ the better (for now). I canā€™t think of any bad experiences (you know my IC name so I could expect consequences), but if I really-really had to say something than it would be the clear distinction of RP-ing and lvl-ing. Those aspects should be mixable (I too am tackling the ideaā€¦).
There also could be a coaching system to help the newcomers settling in and keeping the elderly busy. Whilst this previous might be a good idea I donā€™t see how it could be implemented.
Final words
So! Excuse my journal like post, but I needed to speak my mind. I can take all the constructive criticism. If there is any idea worth something we should elaborate and file a thread in the wish list.
If you think Iā€™m a n00bAss and should leave to whineland back where I came from, please do tell and elaborate so I can learn from it.
Denes

PS:
Weather you think Iā€™m a waist of space or a valuable contributor please remember:
I only wrote this to help.
I found all the topics satisfying which I didnā€™t cover. (Especially the Death Realm is perfect for its purpose)
I only wrote this because I care.

Pages: [1]