summaryrefslogtreecommitdiff
path: root/.tools/beta.patch2
blob: 8a6895b51e136ffacb4bfe1ff8c46418c10e2b9e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
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);