summaryrefslogblamecommitdiff
path: root/.tools/beta.patch2
blob: 8a6895b51e136ffacb4bfe1ff8c46418c10e2b9e (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
                                                
                                 

                      








                                                                                                   

















                                                                                                                                   















































































































                                                                                                            


















                                                          
                                                
                                 

                      
                                              







                                                                                            
                                                
                                 

                      
                                                                                                        
























                                                                               












                                                                                                       
diff --git a/src/map/battle.c b/src/map/battle.c
index 37fc03bca..eb96f2036 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -372,7 +372,7 @@ static int64 battle_attr_fix(struct block_list *src, struct block_list *target,
 		return damage;
 	}
 
-	ratio = battle->attr_fix_table[def_lv-1][atk_elem][def_type];
+	ratio = battle->attr_fix_table[def_lv-1][def_type][atk_elem];
 	if (sc && sc->count) {
 		if(sc->data[SC_VOLCANO] && atk_elem == ELE_FIRE)
 			ratio += skill->enchant_eff[sc->data[SC_VOLCANO]->val1-1];
@@ -1426,7 +1426,7 @@ static int64 battle_calc_defense(int attack_type, struct block_list *src, struct
 			**/
 
 			if( def1 < -399 ) // it stops at -399
-				def1 = 399; // in aegis it set to 1 but in our case it may lead to exploitation so limit it to 399
+				def1 = -399; // in aegis it set to 1 but in our case it may lead to exploitation so limit it to 399
 				//return 1;
 
 			if( flag&2 )
@@ -1481,7 +1481,7 @@ static int64 battle_calc_defense(int attack_type, struct block_list *src, struct
 			 * RE MDEF Reduction
 			 **/
 			if( mdef < -99 ) // it stops at -99
-				mdef = 99; // in aegis it set to 1 but in our case it may lead to exploitation so limit it to 99
+				mdef = -99; // in aegis it set to 1 but in our case it may lead to exploitation so limit it to 99
 				//return 1;
 
 			damage = (int)((100.0f - mdef / (mdef + 100.0f) * 90.0f) / 100.0f * damage - mdef2);
@@ -4664,7 +4664,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
 		skill_id == SN_SHARPSHOOTING || skill_id == MA_SHARPSHOOTING ||
 		skill_id == NJ_KIRIKAGE))
 	{
-		short cri = sstatus->cri;
+		int cri = sstatus->cri;
 		if (sd != NULL) {
 			// if show_katar_crit_bonus is enabled, it already done the calculation in status.c
 			if (!battle_config.show_katar_crit_bonus && sd->weapontype == W_KATAR) {
@@ -4684,7 +4684,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
 		//Therefore, we use the old value 3 on cases when an sd gets attacked by a mob
 		cri -= tstatus->luk*(!sd&&tsd?3:2);
 #else
-		cri -= status->get_lv(target) / 15 + 2 * status_get_luk(target);
+		cri -= status->get_lv(target) / 5 + (3 * status_get_luk(target))/2;
 #endif
 
 		if( tsc && tsc->data[SC_SLEEP] ) {
diff --git a/src/map/npc.c b/src/map/npc.c
index fea82c873..84d292415 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -2070,9 +2070,6 @@ static int npc_buylist(struct map_session_data *sd, struct itemlist *item_list)
 		w += itemdb_weight(entry->id) * entry->amount;
 	}
 
-	if (nd->master_nd != NULL) //Script-based shops.
-		return npc->buylist_sub(sd, item_list, nd->master_nd);
-
 	if (z > sd->status.zeny)
 		return 1; // Not enough Zeny
 	if( w + sd->weight > sd->max_weight )
@@ -2109,6 +2106,9 @@ static int npc_buylist(struct map_session_data *sd, struct itemlist *item_list)
 		}
 	}
 
+	if (nd->master_nd != NULL) // TMW2 Script-based shops.
+		return npc->buylist_sub(sd, item_list, nd->master_nd);
+
 	return 0;
 }
 
@@ -2179,6 +2179,9 @@ static int npc_market_buylist(struct map_session_data *sd, struct itemlist *item
 				return 1;
 		}
 
+        // Apply player discout cupon (TMW2 Custom)
+		value = pc->modifybuyvalue(sd,value);
+
 		z += (int64)value * entry->amount;
 		w += itemdb_weight(entry->id) * entry->amount;
 	}
@@ -2218,6 +2221,9 @@ static int npc_market_buylist(struct map_session_data *sd, struct itemlist *item
 		}
 	}
 
+	if (nd->master_nd != NULL) // TMW2 Script-based shops.
+		return npc->buylist_sub(sd, item_list, nd->master_nd);
+
 	return 0;
 }
 
@@ -2463,7 +2469,7 @@ static int npc_selllist(struct map_session_data *sd, struct itemlist *item_list)
 
 	z = 0;
 
-	if (sd->status.zeny >= MAX_ZENY && nd->master_nd == NULL)
+	if (sd->status.zeny >= MAX_ZENY)
 		return 1;
 
 	// verify the sell list
@@ -2487,20 +2493,11 @@ static int npc_selllist(struct map_session_data *sd, struct itemlist *item_list)
 			return 1;
 		}
 
-		if (nd->master_nd) {
-			// Script-controlled shops decide by themselves, what can be sold and at what price.
-			continue;
-		}
-
 		value = pc->modifysellvalue(sd, sd->inventory_data[idx]->value_sell);
 
 		z += (int64)value * entry->amount;
 	}
 
-	if( nd->master_nd ) { // Script-controlled shops
-		return npc->selllist_sub(sd, item_list, nd->master_nd);
-	}
-
 	// delete items
 	for (i = 0; i < VECTOR_LENGTH(*item_list); i++) {
 		struct itemlist_entry *entry = &VECTOR_INDEX(*item_list, i);
@@ -2519,7 +2516,7 @@ static int npc_selllist(struct map_session_data *sd, struct itemlist *item_list)
 
 	}
 
-	if (z + sd->status.zeny > MAX_ZENY && nd->master_nd == NULL)
+	if (z + sd->status.zeny > MAX_ZENY)
 		return 1;
 
 	if (z > MAX_ZENY)
@@ -2540,6 +2537,10 @@ static int npc_selllist(struct map_session_data *sd, struct itemlist *item_list)
 		}
 	}
 
+	if( nd->master_nd ) { // Script-controlled shops
+		return npc->selllist_sub(sd, item_list, nd->master_nd);
+	}
+
 	return 0;
 }
 
diff --git a/src/map/rodex.c b/src/map/rodex.c
index 766fdc5ea..996576fd3 100644
--- a/src/map/rodex.c
+++ b/src/map/rodex.c
@@ -34,11 +34,11 @@
 
 // NOTE : These values are hardcoded into the client
 // Cost of each Attached Item
-#define ATTACHITEM_COST 2500
+#define ATTACHITEM_COST 500
 // Percent of Attached Zeny that will be paid as Tax
-#define ATTACHZENY_TAX 2
+#define ATTACHZENY_TAX 0
 // Maximun number of messages that can be sent in one day
-#define DAILY_MAX_MAILS 100
+#define DAILY_MAX_MAILS 3
 
 static struct rodex_interface rodex_s;
 struct rodex_interface *rodex;
diff --git a/src/map/script.c b/src/map/script.c
index f515d4403..3747abd6e 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -16552,6 +16552,8 @@ static BUILDIN(summon)
 		clif->specialeffect(&md->bl,344,AREA);
 		sc_start4(NULL, &md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
 	}
+	//mob_id = mob->once_spawn(sd, m, x, y, str, class_, amount, event, size, ai);
+	script_pushint(st, (md) ? md->bl.id : 0);
 	return true;
 }
 
diff --git a/src/map/status.c b/src/map/status.c
index 63e71c9dc..9a235e5e3 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -4469,17 +4469,23 @@ static int status_base_atk(const struct block_list *bl, const struct status_data
 		case W_SHOTGUN:
 		case W_GRENADE:
 			flag = 1;
+			break;
+		case W_STAFF:
+			flag = 2;
 		}
 	}
-	if ( flag ) {
+	if ( flag == 1 ) {
 		str = st->dex;
 		dex = st->str;
+	} else if ( flag == 2 ) {
+		str = st->int_;
+		dex = st->dex;
 	} else {
 		str = st->str;
 		dex = st->dex;
 	}
 #ifdef RENEWAL
-		dstr = str;
+		dstr = str*15/10;
 #endif
 	//Normally only players have base-atk, but homunc have a different batk
 	// equation, hinting that perhaps non-players should use this for batk.
@@ -6124,6 +6130,12 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, s
 static short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int aspd)
 {
 	nullpo_ret(bl);
+
+    // TMW2 Nerfing
+    if (aspd < 300)
+        aspd=cap_value(aspd+(aspd / 2), 0, 300);
+
+    // Status Conditions
 	if (!sc || !sc->count)
 		return cap_value(aspd, 0, 2000);