ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/skills.c
(Generate patch)

Comparing deliantra/server/server/skills.c (file contents):
Revision 1.2 by pippijn, Fri Jun 2 02:01:12 2006 UTC vs.
Revision 1.6 by elmex, Thu Aug 10 12:45:23 2006 UTC

1/* 1/*
2 * static char *rcsid_skills_c = 2 * static char *rcsid_skills_c =
3 * "$Id: skills.c,v 1.2 2006/06/02 02:01:12 pippijn Exp $"; 3 * "$Id: skills.c,v 1.6 2006/08/10 12:45:23 elmex Exp $";
4 */ 4 */
5/* 5/*
6 CrossFire, A Multiplayer game for X-windows 6 CrossFire, A Multiplayer game for X-windows
7 7
8 Copyright (C) 2003 Mark Wedel & Crossfire Development Team 8 Copyright (C) 2003 Mark Wedel & Crossfire Development Team
292 object *owner = get_owner(tmp); 292 object *owner = get_owner(tmp);
293 if (owner != NULL && owner->type == PLAYER) 293 if (owner != NULL && owner->type == PLAYER)
294 return 0; 294 return 0;
295 } 295 }
296 296
297 return (calc_skill_exp(op,tmp, skill)); 297 // reduce monster experience by experience we gained, as to
298 // limit the amount of exp that can be gained by stealing from monsters
299 // (jessies gave ~20,000,000 exp otherwise.
300 int exp = calc_skill_exp (op, tmp, skill);
301 exp = MIN (tmp->stats.exp, exp);
302 tmp->stats.exp -= exp;
303 return exp;
298 } 304 }
299 } 305 }
300 return 0; 306 return 0;
301} 307}
302 308
615/* Helper function for do_skill_ident, so that we can loop 621/* Helper function for do_skill_ident, so that we can loop
616 * over inventory AND objects on the ground conveniently. 622 * over inventory AND objects on the ground conveniently.
617 */ 623 */
618int do_skill_ident2(object *tmp,object *pl, int obj_class, object *skill) 624int do_skill_ident2(object *tmp,object *pl, int obj_class, object *skill)
619{ 625{
620 int success=0,chance, ip; 626 int success = 0, chance;
621 int skill_value = skill->level * pl->stats.Int?pl->stats.Int:10; 627 int skill_value = skill->level * pl->stats.Int ? pl->stats.Int : 10;
622 628
623 if(!QUERY_FLAG(tmp,FLAG_IDENTIFIED) && !QUERY_FLAG(tmp,FLAG_NO_SKILL_IDENT) 629 if (!QUERY_FLAG (tmp,FLAG_IDENTIFIED) && !QUERY_FLAG (tmp,FLAG_NO_SKILL_IDENT)
624 && need_identify(tmp) && !tmp->invisible && tmp->type==obj_class) { 630 && need_identify (tmp) && !tmp->invisible && tmp->type == obj_class)
625 ip = tmp->magic; 631 {
626 if (tmp->item_power > ip) ip=tmp->item_power;
627
628 chance = die_roll(3, 10, pl, PREFER_LOW)-3 + 632 chance = die_roll(3, 10, pl, PREFER_LOW) - 3
629 rndm(0, (tmp->magic ? tmp->magic*5 : 1)-1); 633 + rndm (0, (tmp->magic ? tmp->magic * 5 : 1) - 1);
634
630 if(skill_value >= chance) { 635 if (skill_value >= chance)
631 identify(tmp); 636 {
637 identify(tmp);
638
632 if (pl->type==PLAYER) { 639 if (pl->type==PLAYER)
633 new_draw_info_format(NDI_UNIQUE, 0, pl, 640 {
634 "You identify %s.", long_desc(tmp, pl)); 641 new_draw_info_format (NDI_UNIQUE, 0, pl, "You identify %s.", long_desc (tmp, pl));
642
635 if (tmp->msg) { 643 if (tmp->msg)
644 {
636 new_draw_info(NDI_UNIQUE, 0,pl, "The item has a story:"); 645 new_draw_info(NDI_UNIQUE, 0,pl, "The item has a story:");
637 new_draw_info(NDI_UNIQUE, 0,pl, tmp->msg); 646 new_draw_info(NDI_UNIQUE, 0,pl, tmp->msg);
647 }
648
649 /* identify will take care of updating the item if it is in the players inventory. IF on map, do it here */
650 if (tmp->map)
651 esrv_send_item (pl, tmp);
638 } 652 }
639 /* identify will take care of updating the item if
640 * it is in the players inventory. IF on map, do it
641 * here
642 */
643 if (tmp->map)
644 esrv_send_item(pl, tmp);
645 }
646 success += calc_skill_exp(pl,tmp, skill); 653 success += calc_skill_exp(pl,tmp, skill);
647 } else
648 SET_FLAG(tmp, FLAG_NO_SKILL_IDENT);
649 } 654 }
655 else
656 SET_FLAG (tmp, FLAG_NO_SKILL_IDENT);
657 }
658
650 return success; 659 return success;
651} 660}
652 661
653/* do_skill_ident() - workhorse for skill_ident() -b.t. 662/* do_skill_ident() - workhorse for skill_ident() -b.t.
654 */ 663 */
655static int do_skill_ident(object *pl, int obj_class, object *skill) { 664static int do_skill_ident(object *pl, int obj_class, object *skill) {
1112/* write_note() - this routine allows players to inscribe messages in 1121/* write_note() - this routine allows players to inscribe messages in
1113 * ordinary 'books' (anything that is type BOOK). b.t. 1122 * ordinary 'books' (anything that is type BOOK). b.t.
1114 */ 1123 */
1115 1124
1116static int write_note(object *pl, object *item, const char *msg, object *skill) { 1125static int write_note(object *pl, object *item, const char *msg, object *skill) {
1117 char buf[BOOK_BUF]; 1126 char buf[1024];
1118 object *newBook = NULL; 1127 object *newBook = NULL;
1119 1128
1120 /* a pair of sanity checks */ 1129 /* a pair of sanity checks */
1121 if(!item||item->type!=BOOK) return 0; 1130 if(!item||item->type!=BOOK) return 0;
1122 1131
1134 /* Lauwenmark: Handle for plugin book writing (trigger) event */ 1143 /* Lauwenmark: Handle for plugin book writing (trigger) event */
1135 if (execute_event(item, EVENT_TRIGGER,pl,NULL,msg,SCRIPT_FIX_ALL)!=0) 1144 if (execute_event(item, EVENT_TRIGGER,pl,NULL,msg,SCRIPT_FIX_ALL)!=0)
1136 return strlen(msg); 1145 return strlen(msg);
1137 1146
1138 buf[0] = 0; 1147 buf[0] = 0;
1139 if(!book_overflow(item->msg,msg,BOOK_BUF)) { /* add msg string to book */ 1148 if(!book_overflow(item->msg,msg,sizeof (buf))) { /* add msg string to book */
1140 if(item->msg) 1149 if(item->msg)
1141 strcpy(buf,item->msg); 1150 strcpy(buf,item->msg);
1142 1151
1143 strcat(buf,msg); 1152 strcat(buf,msg);
1144 strcat(buf,"\n"); /* new msg needs a LF */ 1153 strcat(buf,"\n"); /* new msg needs a LF */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines