summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLupus <Lupus@54d463be-8e91-2dee-dedb-b68131a5f0ec>2005-02-15 19:30:58 +0000
committerLupus <Lupus@54d463be-8e91-2dee-dedb-b68131a5f0ec>2005-02-15 19:30:58 +0000
commit35c7324f5f2f1a5f1dc4fa690020fcbd0c18d891 (patch)
tree32e1f80a817a307254862698e8d81127684ed748
parent89b9949be05475aff1be28ef1e3a2a18add12cf2 (diff)
downloadhercules-35c7324f5f2f1a5f1dc4fa690020fcbd0c18d891.tar.gz
hercules-35c7324f5f2f1a5f1dc4fa690020fcbd0c18d891.tar.bz2
hercules-35c7324f5f2f1a5f1dc4fa690020fcbd0c18d891.tar.xz
hercules-35c7324f5f2f1a5f1dc4fa690020fcbd0c18d891.zip
fixed spawn of treasure boxes
fixed present_log Mobs drops: expanded 8 slots into 10 (except READING info from TXT / SQL dbs. But added a plug - to make eA work with old DBs) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/stable@1115 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-SVN.txt10
-rw-r--r--npc/Changelog.txt5
-rw-r--r--npc/guild/ev_agit_event.txt58
-rw-r--r--npc/guild/gldfunc_treasure.txt32
-rw-r--r--src/map/atcommand.c2
-rw-r--r--src/map/log.c1
-rw-r--r--src/map/mob.c35
-rw-r--r--src/map/mob.h2
-rw-r--r--src/map/pc.c4
-rw-r--r--src/map/script.c10
10 files changed, 132 insertions, 27 deletions
diff --git a/Changelog-SVN.txt b/Changelog-SVN.txt
index 7345ee066..87da4e190 100644
--- a/Changelog-SVN.txt
+++ b/Changelog-SVN.txt
@@ -1,5 +1,15 @@
Date Added
+02/16
+ * Fixed Treasure Box spawn bug in all castles. [Lupus]
+ * Fixed wrong PresentLOG (it wasn't showing PRESENT BOX type ID) [Lupus]
+ * Expanded Monsters Drops Slots from 8 to 10. Everywhere in the sources. [Lupus]
+ But in TXT / SQL monsters DB reading functions, I added a temp plug
+ to make eA work fine with existing DBs. It reads only 8 drops and fills
+ 9th and 10th drops with Zero.
+ On expanding MOB_DB.TXT we'll remove that plug.
+ We are adding new cards and some monsters
+ have no free slots for them. Current state is tested and works fine.
02/15
* Allow Potion Pitcher to be able to cast on yourself -- i've almost forgot
about this, thanks to Filougarou and Poki#3 for the fix ^^; [celest]
diff --git a/npc/Changelog.txt b/npc/Changelog.txt
index 879254d72..12a9e1871 100644
--- a/npc/Changelog.txt
+++ b/npc/Changelog.txt
@@ -9,7 +9,7 @@ Darkchild
* Monk Quest - Botting An Acolyte Atm
Lupus
* looking for exploits, optimization, bugs hunt
- * Lolz - 100%
+ * Adding new cards, checking/adding mobs/items
Aria
* Devnpc
* Correct typos/mistakes
@@ -34,6 +34,9 @@ Other Ppl
Date Added
======
+02/16
+ * Fixed treasure chests spawn in the castles. (had to simplify some code and unroll some loops) [Lupus]
+
02/13
* Added midas's fixes for bugs in the novice training ground and the custom
jobchanger script [celest]
diff --git a/npc/guild/ev_agit_event.txt b/npc/guild/ev_agit_event.txt
index 1c9808414..2696d5864 100644
--- a/npc/guild/ev_agit_event.txt
+++ b/npc/guild/ev_agit_event.txt
@@ -4,7 +4,7 @@
//= kalen (1.0)
//= 1.1 by Akaru and ho|yAnge|
//===== Current Version: =====================================
-//= 1.3
+//= 1.4
//===== Compatible With: =====================================
//= eAthena 0.1+; RO Episode 4+
//===== Description: =========================================
@@ -19,6 +19,8 @@
//= v1.3 Moved treasure spawn time here.[kobra_k88]
//= v1.3a Implemented Shadowlady's idea to allow for different
//= start/stop times on different days.[kobra_k88]
+//= 1.4 Fixed treasure chests spawn! We had to unroll some loops
+//= Now they appear in castles from 00:01 to 00:24. [Lupus]
//============================================================
// WoE Start/Stop times
@@ -51,34 +53,76 @@ L_Start:
- script TreasSpawn -1,{
end;
-OnClock0000:
+OnClock0001:
callfunc "F_GldTreas","aldeg_cas01","A01",$boxNumA01,$@bxA01,$@boxIdA01,1324,114,218,123,227,0;
+ end;
+OnClock0002:
callfunc "F_GldTreas","aldeg_cas02","A02",$boxNumA02,$@bxA02,$@boxIdA02,1326,130,226,138,235,0;
+ end;
+OnClock0003:
callfunc "F_GldTreas","aldeg_cas03","A03",$boxNumA03,$@bxA03,$@boxIdA03,1328,220,264,229,273,0;
+ end;
+OnClock0004:
callfunc "F_GldTreas","aldeg_cas04","A04",$boxNumA04,$@bxA04,$@boxIdA04,1330,80,8,89,17,0;
+ end;
+OnClock0005:
callfunc "F_GldTreas","aldeg_cas05","A05",$boxNumA05,$@bxA05,$@boxIdA05,1332,58,8,65,15,0;
-
+ end;
+OnClock0006:
callfunc "F_GldTreas","gefg_cas01","G01",$boxNumG01,$@bxG01,$@boxIdG01,1334,150,108,158,114,0;
+ end;
+OnClock0007:
callfunc "F_GldTreas","gefg_cas02","G02",$boxNumG02,$@bxG02,$@boxIdG02,1336,136,112,145,118,0;
+ end;
+OnClock0008:
callfunc "F_GldTreas","gefg_cas03","G03",$boxNumG03,$@bxG03,$@boxIdG03,1338,266,286,275,293,0;
+ end;
+OnClock0009:
callfunc "F_GldTreas","gefg_cas04","G04",$boxNumG04,$@bxG04,$@boxIdG04,1340,112,114,119,123,0;
+ end;
+OnClock0010:
callfunc "F_GldTreas","gefg_cas05","G05",$boxNumG05,$@bxG05,$@boxIdG05,1342,140,106,147,113,0;
-
+ end;
+OnClock0011:
callfunc "F_GldTreas","payg_cas01","Py01",$boxNumPy01,$@bxPy01,$@boxIdPy01,1344,286,4,295,13,0;
+ end;
+OnClock0012:
callfunc "F_GldTreas","payg_cas02","Py02",$boxNumPy02,$@bxPy02,$@boxIdPy02,1346,140,140,148,149,0;
+ end;
+OnClock0013:
callfunc "F_GldTreas","payg_cas03","Py03",$boxNumPy03,$@bxPy03,$@boxIdPy03,1348,154,164,162,173,0;
+ end;
+OnClock0014:
callfunc "F_GldTreas","payg_cas04","Py04",$boxNumPy04,$@bxPy04,$@boxIdPy04,1350,142,44,151,51,0;
+ end;
+OnClock0015:
callfunc "F_GldTreas","payg_cas05","Py05",$boxNumPy05,$@bxPy05,$@boxIdPy05,1352,152,128,160,135,0;
-
+ end;
+OnClock0016:
callfunc "F_GldTreas","prtg_cas01","Pt01",$boxNumPt01,$@bxPt01,$@boxIdPt01,1354,6,204,15,213,0;
+ end;
+OnClock0017:
callfunc "F_GldTreas","prtg_cas02","Pt02",$boxNumPt02,$@bxPt02,$@boxIdPt02,1356,198,224,207,233,0;
+ end;
+OnClock0018:
callfunc "F_GldTreas","prtg_cas03","Pt03",$boxNumPt03,$@bxPt03,$@boxIdPt03,1358,184,128,193,135,0;
+ end;
+OnClock0019:
callfunc "F_GldTreas","prtg_cas04","Pt04",$boxNumPt04,$@bxPt04,$@boxIdPt04,1360,266,158,275,167,0;
+ end;
+OnClock0020:
callfunc "F_GldTreas","prtg_cas05","Pt05",$boxNumPt05,$@bxPt05,$@boxIdPt05,1362,272,174,279,181,0;
-
+ end;
+OnClock0021:
callfunc "F_GldTreas","nguild_alde","N01",$boxNumN01,$@bxN01,$@boxIdN01,1324,114,218,123,227,0;
+ end;
+OnClock0022:
callfunc "F_GldTreas","nguild_gef","N02",$boxNumN02,$@bxN02,$@boxIdN02,1334,150,108,158,114,0;
+ end;
+OnClock0023:
callfunc "F_GldTreas","nguild_pay","N03",$boxNumN03,$@bxN03,$@boxIdN03,1344,286,4,295,13,0;
+ end;
+OnClock0024:
callfunc "F_GldTreas","nguild_prt","N04",$boxNumN04,$@bxN04,$@boxIdN04,1354,6,204,15,213,0;
end;
-}
+} \ No newline at end of file
diff --git a/npc/guild/gldfunc_treasure.txt b/npc/guild/gldfunc_treasure.txt
index 8f4235556..c1d0f62bd 100644
--- a/npc/guild/gldfunc_treasure.txt
+++ b/npc/guild/gldfunc_treasure.txt
@@ -4,7 +4,7 @@
//= holyAngelX (1.0)
//= 1.1 by Akaru and ho|yAnge|X
//===== Current Version: =====================================
-//= 1.2b
+//= 1.3
//===== Compatible With: =====================================
//= eAthena 0.1+; RO Episode 4+
//===== Description: =========================================
@@ -32,6 +32,7 @@
//= v1.2a Function now returns to script that called it. Removed TreasureSpawn2.
//= Changed back to using specific global variables for number of boxes and the box id. [kobra_k88]
//= v1.2b Added a check to allow un broken treasure chests to respawn after map server restart.[kobra_k88]
+//= 1.3 Fixed treasure boxes spawn. (Unrolled one loop a bit) [Lupus]
//============================================================
@@ -51,6 +52,35 @@ function script F_GldTreas {
set getarg(3), getarg(2); //sets the counter variable = to the box number amount
TreasureSpawn:
+
+ set getarg(4), getarg(5); //sets the box id variable = to the box id
+ set $@temp, rand(4);
+ if ($@temp > 2) set getarg(4), getarg(4) + 1;
+ areamonster getarg(0)+".gat",getarg(6),getarg(7),getarg(8),getarg(9),"Treasure Chest",getarg(4),1,"Treasure_"+getarg(1)+"::OnDied";
+ set getarg(3), getarg(3) - 1;
+ if(getarg(3) <= 0) return;
+
+ set getarg(4), getarg(5); //sets the box id variable = to the box id
+ set $@temp, rand(4);
+ if ($@temp > 2) set getarg(4), getarg(4) + 1;
+ areamonster getarg(0)+".gat",getarg(6),getarg(7),getarg(8),getarg(9),"Treasure Chest",getarg(4),1,"Treasure_"+getarg(1)+"::OnDied";
+ set getarg(3), getarg(3) - 1;
+ if(getarg(3) <= 0) return;
+
+ set getarg(4), getarg(5); //sets the box id variable = to the box id
+ set $@temp, rand(4);
+ if ($@temp > 2) set getarg(4), getarg(4) + 1;
+ areamonster getarg(0)+".gat",getarg(6),getarg(7),getarg(8),getarg(9),"Treasure Chest",getarg(4),1,"Treasure_"+getarg(1)+"::OnDied";
+ set getarg(3), getarg(3) - 1;
+ if(getarg(3) <= 0) return;
+
+ set getarg(4), getarg(5); //sets the box id variable = to the box id
+ set $@temp, rand(4);
+ if ($@temp > 2) set getarg(4), getarg(4) + 1;
+ areamonster getarg(0)+".gat",getarg(6),getarg(7),getarg(8),getarg(9),"Treasure Chest",getarg(4),1,"Treasure_"+getarg(1)+"::OnDied";
+ set getarg(3), getarg(3) - 1;
+ if(getarg(3) <= 0) return;
+
set getarg(4), getarg(5); //sets the box id variable = to the box id
set $@temp, rand(4);
if ($@temp > 2) set getarg(4), getarg(4) + 1;
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 90db2f5c3..12e6c2306 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -8994,7 +8994,7 @@ int atcommand_mobinfo(
}
strcpy(output," Drops:");
j=0;
- for (i=0; i<8; i++) {
+ for (i=0; i<10; i++) { // 8 -> 10 Lupus
if ( mob_db[mob_id].dropitem[i].nameid<=0 || mob_db[mob_id].dropitem[i].p<=0)
continue;
if( (item_data = itemdb_search(mob_db[mob_id].dropitem[i].nameid)) == NULL)
diff --git a/src/map/log.c b/src/map/log.c
index 440dc40f8..5b0ff78de 100644
--- a/src/map/log.c
+++ b/src/map/log.c
@@ -48,6 +48,7 @@ int log_drop(struct map_session_data *sd, int monster_id, int *log_drop)
#ifndef TXT_ONLY
if(log_config.sql_logs > 0)
{
+ //TODO: Expand 8 slots into 10
sprintf(tmp_sql, "INSERT DELAYED INTO `%s` (`drop_date`, `kill_char_id`, `monster_id`, `item1`, `item2`, `item3`, `item4`, `item5`, `item6`, `item7`, `item8`, `map`) VALUES (NOW(), '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s') ", log_config.log_drop_db, sd->status.char_id, monster_id, log_drop[0], log_drop[1], log_drop[2], log_drop[3], log_drop[4], log_drop[5], log_drop[6], log_drop[7], sd->mapname);
if(mysql_query(&mmysql_handle, tmp_sql))
printf("DB server Error - %s\n",mysql_error(&mmysql_handle));
diff --git a/src/map/mob.c b/src/map/mob.c
index f0a3edd63..15f06f940 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -2531,9 +2531,9 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
// item drop
if(!(type&1)) {
- int log_item[8] = {0};
+ int log_item[10] = {0}; //8 -> 10 Lupus
int drop_ore = -1,drop_items=0; //slot N for DROP LOG, number of dropped items
- for(i=0;i<8;i++){
+ for(i=0;i<10;i++){ // 8 -> 10 Lupus
struct delay_item_drop *ditem;
int drop_rate;
@@ -2552,7 +2552,7 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
drop_ore = i; //we rmember an empty slot to put there ORE DISCOVERY drop later.
continue;
}
- drop_items++;
+ drop_items++; //we cound if there were any drops
ditem=(struct delay_item_drop *)aCalloc(1,sizeof(struct delay_item_drop));
ditem->nameid = mob_db[md->class_].dropitem[i].nameid;
@@ -2573,8 +2573,9 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type)
int itemid[17] = { 714, 756, 757, 969, 984, 985, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1002 };
ditem=(struct delay_item_drop *)aCalloc(1,sizeof(struct delay_item_drop));
ditem->nameid = itemid[rand()%17]; //should return from 0 to 16
- if (drop_ore<0) i=7; //we have only 8 slots in LOG, there's a check to not overflow
+ if (drop_ore<0) i=7; //we have only 10 slots in LOG, there's a check to not overflow <- TODO: change 7 to 9
log_item[i] = ditem->nameid; //it's for logging only
+ drop_items++; //we cound if there were any drops
ditem->amount = 1;
ditem->m = md->bl.m;
ditem->x = md->bl.x;
@@ -3836,9 +3837,9 @@ static int mob_makedummymobdb(int class_)
mob_db[class_].adelay=1000;
mob_db[class_].amotion=500;
mob_db[class_].dmotion=500;
- mob_db[class_].dropitem[0].nameid=909; // Jellopy
- mob_db[class_].dropitem[0].p=1000;
- for(i=1;i<8;i++){
+ //mob_db[class_].dropitem[0].nameid=909; // Jellopy
+ //mob_db[class_].dropitem[0].p=1000;
+ for(i=1;i<10;i++){ // 8-> 10 Lupus
mob_db[class_].dropitem[i].nameid=0;
mob_db[class_].dropitem[i].p=0;
}
@@ -3942,7 +3943,7 @@ static int mob_readdb(void)
mob_db[class_].amotion=atoi(str[27]);
mob_db[class_].dmotion=atoi(str[28]);
- for(i=0;i<8;i++){
+ for(i=0;i<8;i++){ // TODO: 8 -> 10 Lupus
int rate = 0,type,ratemin,ratemax;
mob_db[class_].dropitem[i].nameid=atoi(str[29+i*2]);
type = itemdb_type(mob_db[class_].dropitem[i].nameid);
@@ -4014,6 +4015,15 @@ static int mob_readdb(void)
rate = (rate < ratemin)? ratemin: (rate > ratemax)? ratemax: rate;
mob_db[class_].dropitem[i].p = rate;
}
+ //TEMP PLUG till we expand TXT DB and SQL DBs [Lupus]
+ for(i=8;i<10;i++){ //TODO: 8 -> 10 Lupus
+ //we fill 9th and 10th DROP slots with 0
+ mob_db[class_].dropitem[i].nameid = mob_db[class_].dropitem[i].p = 0;
+ }
+ //END of temp plug
+
+ //TODO: Shift columns (after adding 2 drops (4 coulmns)) Lupus
+
// Item1,Item2
mob_db[class_].mexp=atoi(str[45])*battle_config.mvp_exp_rate/100;
mob_db[class_].mexpper=atoi(str[46]);
@@ -4409,7 +4419,7 @@ static int mob_read_sqldb(void)
mob_db[class_].amotion=atoi(str[27]);
mob_db[class_].dmotion=atoi(str[28]);
- for(i=0;i<8;i++){
+ for(i=0;i<8;i++){ //TODO: 8 -> 10 Lupus
int rate = 0,type,ratemin,ratemax;
mob_db[class_].dropitem[i].nameid=atoi(str[29+i*2]);
type = itemdb_type(mob_db[class_].dropitem[i].nameid);
@@ -4442,7 +4452,14 @@ static int mob_read_sqldb(void)
rate = (rate < ratemin)? ratemin: (rate > ratemax)? ratemax: rate;
mob_db[class_].dropitem[i].p = rate;
}
+ //TEMP PLUG till we expand TXT DB and SQL DBs [Lupus]
+ for(i=8;i<10;i++){ //TODO: 8 -> 10 Lupus
+ //we fill 9th and 10th DROP slots with 0
+ mob_db[class_].dropitem[i].nameid = mob_db[class_].dropitem[i].p = 0;
+ }
+ //END of temp plug
+ //TODO: Shift columns (after adding 2 drops (4 coulmns)) Lupus
mob_db[class_].mexp=atoi(str[45])*battle_config.mvp_exp_rate/100;
mob_db[class_].mexpper=atoi(str[46]);
for(i=0;i<3;i++){
diff --git a/src/map/mob.h b/src/map/mob.h
index 0f65b1404..103335365 100644
--- a/src/map/mob.h
+++ b/src/map/mob.h
@@ -28,7 +28,7 @@ struct mob_db {
int size,race,element,mode;
int speed,adelay,amotion,dmotion;
int mexp,mexpper;
- struct { int nameid,p; } dropitem[8];
+ struct { int nameid,p; } dropitem[10]; //8 -> 10 Lupus
struct { int nameid,p; } mvpitem[3];
int view_class,sex;
short hair,hair_color,weapon,shield,head_top,head_mid,head_buttom,option,clothes_color; // [Valaris]
diff --git a/src/map/pc.c b/src/map/pc.c
index 80d15187d..8cfebbaf2 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -2614,9 +2614,9 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl)
if(0 < skill)
{
- for(count = 8; count <= 8 && count != 0; count--)
+ for(count = 10; count <= 10 && count != 0; count--) //8 -> 10 Lupus
{
- i = rand()%8;
+ i = rand()%10; //8 -> 10 Lupus
itemid = mob_db[md->class_].dropitem[i].nameid;
if(itemid > 0 && itemdb_type(itemid) != 6)
diff --git a/src/map/script.c b/src/map/script.c
index da7891924..6daa1340a 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -2302,7 +2302,7 @@ int buildin_checkweight(struct script_state *st)
*/
int buildin_getitem(struct script_state *st)
{
- int nameid,amount,flag = 0;
+ int nameid,nameidsrc,amount,flag = 0;
struct item item_tmp;
struct map_session_data *sd;
struct script_data *data;
@@ -2324,12 +2324,12 @@ int buildin_getitem(struct script_state *st)
return 0; //return if amount <=0, skip the useles iteration
}
//Violet Box, Blue Box, etc - random item pick
- if(nameid<0) { // ƒ‰ƒ“ƒ_ƒ€
+ if((nameidsrc = nameid)<0) { // Save real ID of the source Box [Lupus]
nameid=itemdb_searchrandomid(-nameid);
- #ifndef TXT_ONLY
+
if(log_config.present > 0)
- log_present(sd, -nameid, nameid);
- #endif //USE_SQL
+ log_present(sd, -nameidsrc, nameid); //fixed missing ID by Lupus
+
flag = 1;
}