- Fixed the server crashing on startup due to bad define
- Fixed the server crashing on a timer-queued disguise / undisguise (no sd check) - re-added the item_group_list for consistency's sake, moved to itemdb.h (after some hacking to remove the ugly map.h dependency) - Removed some overly verbose item group messages & code git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@10112 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
37d8d915b2
commit
dec82b6120
@ -9,11 +9,11 @@
|
||||
#include "../common/malloc.h"
|
||||
#include "../common/showmsg.h"
|
||||
#include "../common/strlib.h"
|
||||
#include "map.h"
|
||||
#include "battle.h"
|
||||
#include "itemdb.h"
|
||||
#include "script.h"
|
||||
#include "pc.h"
|
||||
#include "map.h"
|
||||
#include "battle.h" // struct battle_config
|
||||
#include "script.h" // item script processing
|
||||
#include "pc.h" // W_MUSICAL, W_WHIP
|
||||
|
||||
static struct dbt* item_db;
|
||||
|
||||
@ -103,19 +103,18 @@ int itemdb_searchrandomid(int group)
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Calculates total item-group related bonuses for the given item. [Skotlex]
|
||||
*------------------------------------------
|
||||
*/
|
||||
int itemdb_group_bonus(struct map_session_data *sd, int itemid)
|
||||
* Calculates total item-group related bonuses for the given item
|
||||
*------------------------------------------*/
|
||||
int itemdb_group_bonus(const int itemgrouphealrate[MAX_ITEMGROUP], int itemid)
|
||||
{
|
||||
int bonus = 0, i, j;
|
||||
for (i=0; i < MAX_ITEMGROUP; i++) {
|
||||
if (!sd->itemgrouphealrate[i])
|
||||
if (itemgrouphealrate[i])
|
||||
continue;
|
||||
for (j=0; j < itemgroup_db[i].qty; j++) {
|
||||
if (itemgroup_db[i].nameid[j] == itemid)
|
||||
{
|
||||
bonus += sd->itemgrouphealrate[i];
|
||||
bonus += itemgrouphealrate[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -447,8 +446,7 @@ static int itemdb_read_itemavail (void)
|
||||
|
||||
/*==========================================
|
||||
* read item group data
|
||||
*------------------------------------------
|
||||
*/
|
||||
*------------------------------------------*/
|
||||
static void itemdb_read_itemgroup_sub(const char* filename)
|
||||
{
|
||||
FILE *fp;
|
||||
@ -498,7 +496,7 @@ static void itemdb_read_itemgroup_sub(const char* filename)
|
||||
continue;
|
||||
}
|
||||
k = atoi(str[2]);
|
||||
if (itemgroup_db[groupid].qty+k > MAX_RANDITEM) {
|
||||
if (itemgroup_db[groupid].qty+k >= MAX_RANDITEM) {
|
||||
ShowWarning("itemdb_read_itemgroup: Group %d is full (%d entries) in %s:%d\n", groupid, MAX_RANDITEM, filename, ln);
|
||||
continue;
|
||||
}
|
||||
@ -512,52 +510,11 @@ static void itemdb_read_itemgroup_sub(const char* filename)
|
||||
static void itemdb_read_itemgroup(void)
|
||||
{
|
||||
char path[256];
|
||||
int i;
|
||||
const char* groups[] = {
|
||||
"Blue Box",
|
||||
"Violet Box",
|
||||
"Card Album",
|
||||
"Gift Box",
|
||||
"Scroll Box",
|
||||
"Finding Ore",
|
||||
"Cookie Bag",
|
||||
"Potion",
|
||||
"Herbs",
|
||||
"Fruits",
|
||||
"Meat",
|
||||
"Candy",
|
||||
"Juice",
|
||||
"Fish",
|
||||
"Boxes",
|
||||
"Gemstone",
|
||||
"Jellopy",
|
||||
"Ore",
|
||||
"Food",
|
||||
"Recovery",
|
||||
"Minerals",
|
||||
"Taming",
|
||||
"Scrolls",
|
||||
"Quivers",
|
||||
"Masks",
|
||||
"Accesory",
|
||||
"Jewels",
|
||||
"Gift Box 1",
|
||||
"Gift Box 2",
|
||||
"Gift Box 3",
|
||||
"Gift Box 4",
|
||||
"Egg Boy",
|
||||
"Egg Girl",
|
||||
"Gift Box China",
|
||||
"Lotto Box",
|
||||
};
|
||||
memset(&itemgroup_db, 0, sizeof(itemgroup_db));
|
||||
snprintf(path, 255, "%s/item_group_db.txt", db_path);
|
||||
|
||||
memset(&itemgroup_db, 0, sizeof(itemgroup_db));
|
||||
itemdb_read_itemgroup_sub(path);
|
||||
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","item_group_db.txt");
|
||||
if (battle_config.etc_log) {
|
||||
for (i = 1; i < MAX_ITEMGROUP; i++)
|
||||
ShowInfo("Group %s: %d entries.\n", groups[i-1], itemgroup_db[i].qty);
|
||||
}
|
||||
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n", "item_group_db.txt");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,8 @@
|
||||
#include "../common/mapindex.h"
|
||||
#include "../common/db.h"
|
||||
|
||||
#include "itemdb.h" // MAX_ITEMGROUP
|
||||
|
||||
//Uncomment to enable the Cell Stack Limit mod.
|
||||
//It's only config is the battle_config cell_stack_limit.
|
||||
//Only chars affected are those defined in BL_CHAR (mobs and players currently)
|
||||
@ -56,8 +58,6 @@
|
||||
#define MOBID_EMPERIUM 1288
|
||||
|
||||
#define MAX_PC_BONUS 10
|
||||
//Designed for search functions, species max number of matches to display.
|
||||
#define MAX_SEARCH 5
|
||||
#define MAX_DUEL 1024
|
||||
|
||||
#define map_id2index(id) map[(id)].index
|
||||
@ -229,10 +229,6 @@ enum {
|
||||
ELE_MAX
|
||||
};
|
||||
|
||||
//The onlu item group required by the code to be known.
|
||||
#define IG_FINDINGORE 6
|
||||
#define MAX_ITEMGROUP 40
|
||||
|
||||
enum {
|
||||
ATF_SELF=0x01,
|
||||
ATF_TARGET=0x02,
|
||||
|
@ -90,12 +90,12 @@ int npc_enable_sub( struct block_list *bl, va_list ap )
|
||||
{
|
||||
struct map_session_data *sd;
|
||||
struct npc_data *nd;
|
||||
//char *name=(char *)aCallocA(50,sizeof(char)); // fixed [Shinomori]
|
||||
|
||||
nullpo_retr(0, bl);
|
||||
nullpo_retr(0, ap);
|
||||
nullpo_retr(0, nd=va_arg(ap,struct npc_data *));
|
||||
if(bl->type == BL_PC && (sd=(struct map_session_data *)bl)){
|
||||
if(bl->type == BL_PC && (sd=(struct map_session_data *)bl))
|
||||
{
|
||||
char name[50]; // need 24 + 9 for the "::OnTouch"
|
||||
|
||||
if (nd->sc.option&OPTION_INVISIBLE) // 無効化されている
|
||||
@ -2136,7 +2136,8 @@ static int npc_parse_script(char *w1,char *w2,char *w3,char *w4,char *first_line
|
||||
|
||||
//-----------------------------------------
|
||||
// イベント用ラベルデータのエクスポート
|
||||
for (i = 0; i < nd->u.scr.label_list_num; i++){
|
||||
for (i = 0; i < nd->u.scr.label_list_num; i++)
|
||||
{
|
||||
char *lname = nd->u.scr.label_list[i].name;
|
||||
int pos = nd->u.scr.label_list[i].pos;
|
||||
|
||||
@ -2149,11 +2150,9 @@ static int npc_parse_script(char *w1,char *w2,char *w3,char *w4,char *first_line
|
||||
exit(1);
|
||||
} else {
|
||||
struct event_data *ev;
|
||||
unsigned char buf[51];
|
||||
// 51 comes from: 24 for npc name + 24 for label + 2 for a "::" and 1 for EOS
|
||||
unsigned char buf[50+1]; // 24 for npc name + 24 for label + 2 for a "::" and 1 for EOS
|
||||
sprintf(buf,"%s::%s",nd->exname,lname);
|
||||
|
||||
// remember the label is max 50 chars + eos; see the strdb_init below
|
||||
// generate the data and insert it
|
||||
ev=(struct event_data *)aMalloc(sizeof(struct event_data));
|
||||
ev->nd=nd;
|
||||
|
@ -37,7 +37,7 @@ struct view_data* npc_get_viewdata(int class_);
|
||||
int npc_chat_sub(struct block_list *bl, va_list ap);
|
||||
int npc_event_dequeue(struct map_session_data *sd);
|
||||
int npc_event_timer(int tid,unsigned int tick,int id,int data);
|
||||
int npc_event(struct map_session_data *sd,const unsigned char *npcname,int);
|
||||
int npc_event(struct map_session_data *sd, const unsigned char *eventname, int mob_kill);
|
||||
int npc_timer_event(const unsigned char *eventname); // Added by RoVeRT
|
||||
int npc_command(struct map_session_data* sd, const char* npcname, const char* command);
|
||||
int npc_touch_areanpc(struct map_session_data *,int,int,int);
|
||||
|
@ -10134,33 +10134,32 @@ BUILDIN_FUNC(clearitem)
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
Disguise Player (returns Mob/NPC ID if success, 0 on fail) [Lupus]
|
||||
*------------------------------------------
|
||||
*/
|
||||
* Disguise Player (returns Mob/NPC ID if success, 0 on fail)
|
||||
*------------------------------------------*/
|
||||
BUILDIN_FUNC(disguise)
|
||||
{
|
||||
struct map_session_data *sd=script_rid2sd(st);
|
||||
int id;
|
||||
struct map_session_data* sd = script_rid2sd(st);
|
||||
if (sd == NULL) return 0;
|
||||
|
||||
id = script_getnum(st,2);
|
||||
id = script_getnum(st,2);
|
||||
|
||||
if (!mobdb_checkid(id) && !npcdb_checkid(id)) {
|
||||
if (mobdb_checkid(id) || npcdb_checkid(id)) {
|
||||
pc_disguise(sd, id);
|
||||
script_pushint(st,id);
|
||||
} else
|
||||
script_pushint(st,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pc_disguise(sd, id);
|
||||
script_pushint(st,id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
Undisguise Player (returns 1 if success, 0 on fail) [Lupus]
|
||||
*------------------------------------------
|
||||
*/
|
||||
* Undisguise Player (returns 1 if success, 0 on fail)
|
||||
*------------------------------------------*/
|
||||
BUILDIN_FUNC(undisguise)
|
||||
{
|
||||
struct map_session_data *sd=script_rid2sd(st);
|
||||
struct map_session_data* sd = script_rid2sd(st);
|
||||
if (sd == NULL) return 0;
|
||||
|
||||
if (sd->disguise) {
|
||||
pc_disguise(sd, 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user