I have looked in structs.h and I feel as confused and scared as before and
may be more :-)
Here is the code I made:
It wants to do this
Your Hitpts |##################.........|
Your Mana |#######################....|
Opps Lives |######.....................|
Could any1 try to help me out how to implement it more easily ?
I will learn C, I promise :-)
---------- rip ----------
static char _buf[ 80 + 3 ] = {'\0'};
void _setBuffer( int curItm, int maxItm, const char *head ) {
#define BORDER_MARK '|'
#define USABLE_ITEM '#'
#define UNUSABLE_ITEM '.'
#define CHAR_COUNT 50
int i, j, iUse = maxItm
? (((float) curItm) / maxItm) * CHAR_COUNT + .5
: 0;
if ( head ) strcpy( _buf, head );
else _buf[0] = '\0';
_buf[ j = strlen( _buf ) ] = BORDER_MARK;
_buf[ ++j ] = '\0';
for ( i = 0; i < CHAR_COUNT; i++ )
_buf[j + i] = i < iUse ? USABLE_ITEM : UNUSABLE_ITEM;
_buf[j += i] = BORDER_MARK;
_buf[++j] = '\r'; _buf[++j] = '\n'; _buf[++j] = '\0';
#undef USABLE_ITEM
#undef UNUSABLE_ITEM
#undef CHAR_COUNT
#undef BORDER_MARK
}
ACMD(do_hpstatus) {
_setBuffer( GET_HIT(ch), GET_MAX_HIT(ch), "Your Hitpts " );
send_to_char(_buf, ch);
_setBuffer( GET_MANA(ch), GET_MAX_MANA(ch), "Your Mana " );
send_to_char(_buf, ch);
if ((GET_POS(ch)) == POS_FIGHTING) {
_setBuffer( GET_HIT(FIGHTING(ch)),
GET_MAX_HIT(FIGHTING(ch)),
"Opps Lives " );
send_to_char(_buf, ch);
}
}
--------- end ----------
-----Původní zpráva-----
Od: Ben Cartwright [mailto:europa@vt.edu]
Odesláno: 14. února 2000 9:36
Komu: CIRCLE@POST.QUEENSU.CA
Předmět: Re: [CIRCLE] [NEWBIE] Modification of hitpoins and manapoints
> I know, that this is dump question, but i spent weekend with it and i feel
> confused.
> I have created a function, which tells player his HIT and MANA status more
> understandly, that Xh Xm in prompt. Now I want to call it WHENEVER his
hits
> or mana changes, but i didn't found where is such function defined nor
> called.
>
The easiest way to do this would be to:
1) Add a "int need_advanced_prompt" to struct player_specials in structs.h.
2) Add a check in make_prompt (in comm.c) to see if the need_advanced_prompt
variable is nonzero, and if it is, then set it back to zero and call the
function you wrote.
3) grep "GET_HIT(" *.c
or if you're using Windows use the Find program to find any *.c files
containing the text "GET_HIT(".
After each occurance that modifies the HP, set the need_advanced_prompt
variable to nonzero.
4) Do the same for GET_MANA(, and GET_MOVE( too if you want.
You might want to make a macro or two in utils.h, such as:
#define GET_NEED_ADV_PROMPT(ch) \
CHECK_PLR((ch), ((ch)->player_specials->need_advanced_prompt))
/* usage: MODIFY_HMV(ch); -- call after you change a player's HMV */
#define MODIFY_HMV(ch) do { \
GET_NEED_ADV_PROMPT(ch) = 1; \
} while(0);
--Ben Cartwright
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
+------------------------------------------------------------+
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 04/10/01 PDT