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.


Messages - Nilrin

Pages: [1] 2 3 ... 6
1
General / Re: LPMuds.net is back!
« on: May 21, 2017, 02:49:00 PM »
So glad to see the boards back! I admit I was quite curious myself.  :)

2
General / Re: wanting to loose this_player()
« on: March 04, 2016, 01:10:59 PM »
Could you call the code through something else other than init(), perhaps move_object()? Doesn't move_object() only return a 0 or 1 depending on success or failure?

3
Bug Central / Re: Saving armor conditions
« on: March 04, 2016, 12:57:27 PM »
Nice catch! On the list of my stuff to do for my MUD was to check why everyone had perfect armor all the time. That explains it.  ::)

4
I forgot to mention, one caveat of my system is it can make increasing skill levels even more grindy, especially when it comes to crafting stuff.

5
Pretty nice setup. The way I did it is characters only start with generic skills when first entering the game, like melee attack, melee defense, and hiking (a stamina saving skill for walking around). They also start with 15 "skill slots". They can talk to different NPCs which charge them copper and skill slots to learn new skills. The number of skill slots used ranges from 1-5 depending on the importance of the skill. They level their character still with experience, but experience is awarded not only for killing things, but using skills. More importantly, they are awarded large bonus exp for increasing a skill one level. Finally, each character level they gain gives them an additional skill slot. With this system I was hoping for both an open ended skill tree, and also award players for non-hack-n-slash RP. Further still, it should encourage players to explore, finding new skills they might not know existed.

6
General / Re: Armor protection and weapon damage ranges
« on: February 09, 2015, 01:15:46 PM »
I'm gathering you're simply looking for an idea of where to start as far as integer values for your weapons and armour? Well, in Rebirth, every tangible object that can be worn has at least some protection, albeit extremely small for basic cloth clothing, such as a point or two for most normal damage types (blunt, blade, shock, cold, heat, etc...) all the way up to your plate armours which might have 10 or 20 points defence against things such as blades. When deciding the basic attach values for common weapons such as knives and swords and such, I started with the base values used back in the old AD&D rules, where a basic dagger had a weapon class of about 4, up to your big swords that were around 8 or 10. However, Rebirth is hugely a skill based game, so those values are just the base. Also, keep in mind that, I believe by default, the damage absorbed on a strike is a range from 1/2 the armour value to the full armour value.

I don't mean to get into a medieval armour debate or anything, but technically the term 'chain mail' is a misnomer, as it is simply called 'mail' or 'maille'. This armour, in fact, protects very poorly against blunt weapons, so traditionally they wore kinds of padding under their maille, such as brigandine armour. I realise you were just giving examples quix, I just thought I could put in my two cents.

Lash, any values you go with, in the end, are just arbitrary numbers. The only thing you really want to be care of is choosing a range so small, you end up backing yourself into a corner when designing weapons and armour, or numbers so large that it becomes difficult in getting a feel for exactly how good an item really is.

7
Code Vault / Read and Write on Parchment
« on: December 20, 2014, 09:04:23 AM »
Someone asked me how I did this, for some silly reason...

Anyway, this lets you write using stationary and a writing utensil.

Here's the verb write.c:

Code: [Select]
/*    /verbs/players/write.c
 *    from the Rebirth Library
 *    created by Nilrin
 */

#include <lib.h>
#include <position.h>
#include <rounds.h>

inherit LIB_VERB;

static void create() {
    verb::create();
    SetVerb("write");
    SetRules("on OBJ with OBJ");
    SetErrorMessage("Write on what with what?");
    SetHelp("Syntax: write on <item> with <item>\n\n"
            "Allows you to write something on the specified object using the specified writing tool."
            "\nSee also:");
}

int end_write(object ob1, string tmp){
    if(ob1 && tmp){
        ob1->SetFileSource(tmp);
    }
    send_messages("stop","$agent_name $agent_verb writing on $target_name.",this_player(),ob1,"subject_env",0,({ "visual" }));
    return 1;
}

mixed can_write_on_obj_with_obj() {
    if( this_player()->GetParalyzed() ) {
        return "You cannot do anything!";
    }
    return this_player()->CanManipulate();
}

mixed do_write_on_obj_with_obj(object ob1, object ob2){
        string file = ob1->GetFileSource();

        if(file){
            this_player()->eventEdit(file, (: end_write, ob1 :));
            send_messages("begin","$agent_name $agent_verb writing on $target_name.",this_player(),ob1,"subject_env",0,({ "visual" }));
        }
        else{
            string dir = "/doc/writings/";
            string tmp;

            if(!directory_exists(dir)){
                mkdir(dir);
            }

            tmp = dir + ob1->GetKeyName() + sizeof(get_dir(dir));

            this_player()->eventEdit(tmp, (: end_write, ob1, tmp :));
            send_messages("begin","$agent_name $agent_verb writing on $target_name.",this_player(),ob1,"subject_env",0,({ "visual" }));
        }
    return 1;
}

And here is parchment.c

Code: [Select]
#include <lib.h>
#include <vendor_types.h>
#include <damage_types.h>

inherit LIB_ITEM;
inherit LIB_PERSIST;
inherit LIB_READ;

public string file_source;

string GetFileSource(){
    return file_source;
}

string SetFileSource(string str){
    file_source = str;
    SetLong("This is a sheet of parchment. It has been made from the skin of an animal and stretch out extremely thin, to the point of being partially transparent.\nThe parchment has something written on it.");
    return str;
}

eventRead(){
    if(file_source && file_exists(file_source)){
        this_player()->eventPage(file_source);
        send_messages("read","$agent_name $agent_verb $target_name.",this_player(),this_object(),"subject_env",0,({ "visual","exclude_subject" }));
    }
    else{
        write("There is nothing written on it.");
    }
    return 1;
}

void create(){
    item::create();
    SetKeyName("parchment");
    SetId(({"parchment","sheet of parchment","sheet"}));
    SetShort("a sheet of parchment");
    SetLong("This is a sheet of parchment. It has been made from the skin of an animal and stretch out extremely thin, to the point of being partially transparent.");
    SetMass(1);
    SetVendorType(VT_TREASURE);
    SetRead((: eventRead :));
    AddSave( ({ "file_source" }) );
}

void init(){
    ::init();
}

int direct_write_on_obj_with_obj(object ob1, object ob2){
    return 1;
}

Whatever you want to use as a writing utensil, just have:

int indirect_write_on_obj_with_obj(object ob1, object ob2){
    return 1;
}

Also, you'll want to change the send_messages() functions to whatever your message handler/print to screen thingie is.

Pretty simple really.

8
General / NetTerm using netedit.c
« on: December 04, 2014, 02:44:57 PM »
Does anyone use netedit with the NetTerm telnet client to remotely edit files on their MUD? I'm curious if anyone has experience implementing this.

Back in the day, I used to work on a MUD named Ascension that used this to edit files. You just typed 'netedit <filename>' and it would send the file to NetTerm which would automatically launch your text editor. Then when you saved the file, and it would send the file back to the MUD. I'm not sure how they implemented the netedit.c file with their MUD though.

9
General / Re: Parser Ignoring An Object?
« on: September 20, 2014, 11:09:34 PM »
Actually, I was presumptuous in thinking that would work. Apparently, unless I'm mistaken, a list of IDs for each object is cached by the driver, making the previous code useless. The ultimate goal here is to allow for special circumstances where the list of IDs for an object might be different depending on the observer. I've been messing with this for quite some time, but it seems there is no way to implement this in DS LPC with the current efuns available.

I can think of two good examples of how this would be useful.

1. An identify system where one player can "identify" another player by a certain name, and then use that name when using any coded verb on that player.

2. Subjective key words or adjectives, such as a small character viewing another as "large", while a third character viewing the same character as "moderate".

10
General / Re: Parser Ignoring An Object?
« on: September 15, 2014, 08:44:58 AM »
Err sorry, it is in fact the parse_command_id_list() function. Simply write:

if(query_invis(this_object(),previous_object())){
    return ({});
}

And this will keep the parser from matching anything to the object if they're invisible to that user.

Profit!

This is also extremely useful if you want a nicknaming mechanic in your MUD as you can return extra IDs as well.

11
General / Re: Parser Ignoring An Object?
« on: September 14, 2014, 10:23:24 PM »
Another thought I just had is messing with /lib/probs/id.c and changing the GetID() function to return nothing if query_invis(this_object(), this_player()).

12
General / Re: Parser Ignoring An Object?
« on: August 27, 2014, 08:30:26 PM »
For sure. I figured that was the case. I just hoped there was perhaps a call made to objects from the parser I didn't know about. I'm mostly a MUDlib level guy, so I don't know much about the FluffOS code other than it makes my LPC stuff go.

Thanks for the help.

13
General / Parser Ignoring An Object?
« on: August 17, 2014, 09:58:18 AM »
I'm curious if anyone knows a method to get the command parser to completely ignore an object.

I've worked with verbs plenty before. Generally, you use your direct and indirect functions to tell the verb if you want to allow something to interact with that object.
As an example here, we have a player who is invisible, and another player that suspects the first of being so. Currently, the player could try something like this:

> look nilrin
There is no nilrin here.
> look asdf
You can't look asdf.

Ah hah! So even though we get some coded error for Nilrin "not being there" when know he in fact is, due to the nature of the error message given.

Now, one work-around could be to try and make both error messages read the same. The problem there, is when the parser, or the very least, the verb, matches an argument to an actual object, there isn't any way to query the original argument the player used.

Either way, I think the best method would be to tell the parser to ignore an object all together if that object->GetInvis() returns true. Is this even possible?

14
Dead Souls Support / Re: Obvious Exit Colours, Player/NPC Health Colours
« on: February 28, 2014, 04:04:23 AM »
I would suggest learning your way around the library some, and perhaps the 'find' and 'grep' commands, which can be helpful in these cases. However, to get you started, the function your looking for is 'eventDescribeEnvironment()' inside /lib/lib/events/describe.c. Also, 'GetHealthShort()' is found in /lib/body.c.

I would do a simple 'warmboot' after making your changes.

P.S. Don't forget to backup your files before making significant changes.

15
Dead Souls Support / Re: New Verb
« on: February 18, 2014, 09:17:35 PM »
I look at it the same way, in a rather simplified manner.

There are exceptions to everything, but generally if I'm coding something in which I expect to act upon another object, the logical choice would be to use a verb. If its something that implies no physical action against another object, I code a command, such as score, or status, or who.

Kinda redundant after what quixadhal said, just felt I should mention my gut feeling when deciding how to write a new command.

Pages: [1] 2 3 ... 6