diff options
author | Lupus <Lupus@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2005-02-15 19:30:58 +0000 |
---|---|---|
committer | Lupus <Lupus@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2005-02-15 19:30:58 +0000 |
commit | 35c7324f5f2f1a5f1dc4fa690020fcbd0c18d891 (patch) | |
tree | 32e1f80a817a307254862698e8d81127684ed748 | |
parent | 89b9949be05475aff1be28ef1e3a2a18add12cf2 (diff) | |
download | hercules-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.txt | 10 | ||||
-rw-r--r-- | npc/Changelog.txt | 5 | ||||
-rw-r--r-- | npc/guild/ev_agit_event.txt | 58 | ||||
-rw-r--r-- | npc/guild/gldfunc_treasure.txt | 32 | ||||
-rw-r--r-- | src/map/atcommand.c | 2 | ||||
-rw-r--r-- | src/map/log.c | 1 | ||||
-rw-r--r-- | src/map/mob.c | 35 | ||||
-rw-r--r-- | src/map/mob.h | 2 | ||||
-rw-r--r-- | src/map/pc.c | 4 | ||||
-rw-r--r-- | src/map/script.c | 10 |
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; } |