* When loading shop scripts automatically check if the prices can be exploited with OC/DC
* If the buying price provided in item_db.txt is above 2x higher than selling price for an item no need to reset and redetermine the buying price git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1024 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
Date Added
|
||||
|
||||
02/03
|
||||
* When loading shop scripts automatically check if the prices can be exploited
|
||||
with OC/DC [celest]
|
||||
* If the buying price provided in item_db.txt is above 2x higher than selling
|
||||
price for an item no need to reset and redetermine the buying price [celest]
|
||||
* Fixed a mistake that was causing Ruwach to only work in PvP and PvM [celest]
|
||||
* Added DracoRPG's code for Joint Beat effects, thanks! [celest]
|
||||
|
||||
|
||||
@@ -326,13 +326,29 @@ static int itemdb_readdb(void)
|
||||
memcpy(id->name,str[1],24);
|
||||
memcpy(id->jname,str[2],24);
|
||||
id->type=atoi(str[3]);
|
||||
// buy≠sell*2 は item_value_db.txt で指定してください。
|
||||
if (atoi(str[5])) { // sell値を優先とする
|
||||
id->value_buy=atoi(str[5])*2;
|
||||
id->value_sell=atoi(str[5]);
|
||||
} else {
|
||||
id->value_buy=atoi(str[4]);
|
||||
id->value_sell=atoi(str[4])/2;
|
||||
|
||||
{
|
||||
int buy = atoi(str[4]), sell = atoi(str[5]);
|
||||
// if buying price > selling price * 2 consider it valid and don't change it [celest]
|
||||
if (buy && sell && buy > sell*2){
|
||||
id->value_buy = buy;
|
||||
id->value_sell = sell;
|
||||
} else {
|
||||
// buy≠sell*2 は item_value_db.txt で指定してください。
|
||||
if (sell) { // sell値を優先とする
|
||||
id->value_buy = sell*2;
|
||||
id->value_sell = sell;
|
||||
} else {
|
||||
id->value_buy = buy;
|
||||
id->value_sell = buy/2;
|
||||
}
|
||||
}
|
||||
// check for bad prices that can possibly cause exploits
|
||||
if (id->value_buy*75/100 < id->value_sell*124/100) {
|
||||
sprintf (tmp_output, "Item %s [%d] buying:%d < selling:%d\n",
|
||||
id->name, id->nameid, id->value_buy*75/100, id->value_sell*124/100);
|
||||
ShowWarning (tmp_output);
|
||||
}
|
||||
}
|
||||
id->weight=atoi(str[6]);
|
||||
id->atk=atoi(str[7]);
|
||||
|
||||
@@ -1513,15 +1513,21 @@ static int npc_parse_shop(char *w1,char *w2,char *w3,char *w4)
|
||||
|
||||
while (p && pos < max) {
|
||||
int nameid,value;
|
||||
struct item_data *id;
|
||||
p++;
|
||||
if (sscanf(p, "%d:%d", &nameid, &value) != 2)
|
||||
break;
|
||||
nd->u.shop_item[pos].nameid = nameid;
|
||||
if (value < 0) {
|
||||
struct item_data *id = itemdb_search(nameid);
|
||||
id = itemdb_search(nameid);
|
||||
if (value < 0)
|
||||
value = id->value_buy;
|
||||
}
|
||||
nd->u.shop_item[pos].value = value;
|
||||
// check for bad prices that can possibly cause exploits
|
||||
if (value*75/100 < id->value_sell*124/100) {
|
||||
sprintf (tmp_output, "Item %s [%d] buying:%d < selling:%d\n",
|
||||
id->name, id->nameid, value*75/100, id->value_sell*124/100);
|
||||
ShowWarning (tmp_output);
|
||||
}
|
||||
pos++;
|
||||
p=strchr(p,',');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user