added setiteminfo function, updated setitemscript func, added NPC sample for them
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9938 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
c6d349bcee
commit
7beec2d152
@ -3,6 +3,13 @@ Date Added
|
||||
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
|
||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||
|
||||
2007/03/02
|
||||
* Added new script function: setiteminfo. Now you can make custom items [Lupus]
|
||||
- Updated script function setitemscript(itemID,script,WhichScript)
|
||||
now u can set one of 3 item scripts: use/update, equip, unequip
|
||||
But it works only if the original item had 3 non empty scriptsin ITEM_DB
|
||||
can't fix this issue yet
|
||||
- Check npc/sample/npc_test_setitemx.txt as example of setiteminfo & setitemscript
|
||||
2007/03/01
|
||||
* Fixed the definition of warpwaitingpc so that it allows an optional
|
||||
argument (number of people to warp).
|
||||
|
@ -28,6 +28,7 @@ Date Added
|
||||
======
|
||||
2007/03/01
|
||||
* The Sign: Fixed possible exploit, thanks to happylight [Lupus]
|
||||
- Added npc/sample/npc_test_setitemx.txt
|
||||
2007/02/28
|
||||
* Fixes to Merchant/Smith skill quests according to ragnainfo wiki [DracoRPG]
|
||||
- Added missing 1 Banana Juice requirement to Cart Revolution quest
|
||||
|
70
npc/sample/npc_test_setitemx.txt
Normal file
70
npc/sample/npc_test_setitemx.txt
Normal file
@ -0,0 +1,70 @@
|
||||
//by Lupus.
|
||||
// SVN TRUNK 9940+ only
|
||||
|
||||
//setiteminfo(itemID,n,Value), where n
|
||||
// 0 value_buy;
|
||||
// 1 value_sell;
|
||||
// 2 type;
|
||||
// 3 maxchance = Max drop chance of this item e.g. 1 = 0.01% , etc..
|
||||
// if = 0, then monsters don't drop it at all (rare or a quest item)
|
||||
// if = 10000, then this item is sold in NPC shops only
|
||||
// 4 sex;
|
||||
// 5 equip;
|
||||
// 6 weight;
|
||||
// 7 atk;
|
||||
// 8 def;
|
||||
// 9 range;
|
||||
// 10 slot;
|
||||
// 11 look;
|
||||
// 12 elv;
|
||||
// 13 wlv;
|
||||
|
||||
prontera.gat,164,161,5 script Lupus 1013,{
|
||||
menu "Make Knife[3] Edible",M_1,
|
||||
"Make Apple Equippable",M_2,
|
||||
"Edible Knife = Full SP",M_3,
|
||||
"Knife = Weapon + 3 Notes",M_4;
|
||||
close;
|
||||
|
||||
M_1:
|
||||
//WORKS!
|
||||
mes "Ok. We Made Knife[3] Edible";
|
||||
setiteminfo(1201,2,0); //type = 0 : potion
|
||||
setitemscript(1201,"{dispbottom \"* You used Knife[3]\";}");
|
||||
close;
|
||||
|
||||
M_2:
|
||||
//WORKS!
|
||||
mes "Ok. We Made Apple Equippable";
|
||||
//item type -> headgear
|
||||
setiteminfo(512,2,5); //type = 5
|
||||
//where to equip to
|
||||
setiteminfo(512,5,512); //equip = 512
|
||||
//set as headgear location
|
||||
setiteminfo(512,11,256); //loc = 256
|
||||
//set Headgear Sprite ID
|
||||
setiteminfo(512,14,85); //view id = 85
|
||||
|
||||
setitemscript(512,"{dispbottom \"* Other item's changed\";}",0);
|
||||
setitemscript(512,"{dispbottom \"* Equipped\";}",1);
|
||||
setitemscript(512,"{dispbottom \"* Unequipped\";}",2);
|
||||
close;
|
||||
|
||||
M_3:
|
||||
//WORKS!
|
||||
mes "Ok. Now Edible Knife[3] restores your SP";
|
||||
setitemscript(1201,2,0);
|
||||
setitemscript(1201,"{dispbottom \"* You ate Knife[3] + Full SP\"; percentheal 0,100;}");
|
||||
close;
|
||||
|
||||
M_4:
|
||||
//WORKS!
|
||||
mes "Ok. We Made Knife... a weapon. But added 3 notes.";
|
||||
setiteminfo(1201,2,4); //type = 4 : weapon again
|
||||
setitemscript(1201,"{dispbottom \"* 1 Used\";}",0);
|
||||
setitemscript(1201,"{dispbottom \"* 2 Equipped\";}",1);
|
||||
setitemscript(1201,"{dispbottom \"* 3 Unequipped\";}",2);
|
||||
close;
|
||||
|
||||
}
|
||||
|
@ -51,6 +51,7 @@ struct item_data {
|
||||
int look;
|
||||
int elv;
|
||||
int wlv;
|
||||
int view_id;
|
||||
//Lupus: I rearranged order of these fields due to compatibility with ITEMINFO script command
|
||||
// some script commands should be revised as well...
|
||||
unsigned int class_base[3]; //Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2)
|
||||
@ -73,7 +74,6 @@ struct item_data {
|
||||
unsigned autoequip: 1;
|
||||
} flag;
|
||||
short gm_lv_trade_override; //GM-level to override trade_restriction
|
||||
int view_id;
|
||||
};
|
||||
|
||||
struct item_group {
|
||||
|
@ -3793,6 +3793,7 @@ BUILDIN_FUNC(charisalpha);//isalpha [valaris]
|
||||
BUILDIN_FUNC(fakenpcname); // [Lance]
|
||||
BUILDIN_FUNC(compare); // Lordalfa, to bring strstr to Scripting Engine
|
||||
BUILDIN_FUNC(getiteminfo); //[Lupus] returns Items Buy / sell Price, etc info
|
||||
BUILDIN_FUNC(setiteminfo); //[Lupus] set Items Buy / sell Price, etc info
|
||||
BUILDIN_FUNC(getequipcardid); //[Lupus] returns card id from quipped item card slot N
|
||||
// [zBuffer] List of mathematics commands --->
|
||||
BUILDIN_FUNC(sqrt);
|
||||
@ -4130,6 +4131,7 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF(fakenpcname,"ssi"), // [Lance]
|
||||
BUILDIN_DEF(compare,"ss"), // Lordalfa - To bring strstr to scripting Engine.
|
||||
BUILDIN_DEF(getiteminfo,"ii"), //[Lupus] returns Items Buy / sell Price, etc info
|
||||
BUILDIN_DEF(setiteminfo,"iii"), //[Lupus] set Items Buy / sell Price, etc info
|
||||
BUILDIN_DEF(getequipcardid,"ii"), //[Lupus] returns CARD ID or other info from CARD slot N of equipped item
|
||||
// [zBuffer] List of mathematics commands --->
|
||||
BUILDIN_DEF(sqrt,"i"),
|
||||
@ -4151,7 +4153,7 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF(autoequip,"ii"),
|
||||
BUILDIN_DEF(setbattleflag,"ss"),
|
||||
BUILDIN_DEF(getbattleflag,"s"),
|
||||
BUILDIN_DEF(setitemscript,"is"), //Set NEW item bonus script. Lupus
|
||||
BUILDIN_DEF(setitemscript,"is*"), //Set NEW item bonus script. Lupus
|
||||
BUILDIN_DEF(disguise,"i"), //disguise player. Lupus
|
||||
BUILDIN_DEF(undisguise,"*"), //undisguise player. Lupus
|
||||
BUILDIN_DEF(getmonsterinfo,"ii"), //Lupus
|
||||
@ -9882,6 +9884,7 @@ BUILDIN_FUNC(getitemslots)
|
||||
11 look;
|
||||
12 elv;
|
||||
13 wlv;
|
||||
14 view id
|
||||
*------------------------------------------
|
||||
*/
|
||||
BUILDIN_FUNC(getiteminfo)
|
||||
@ -9902,6 +9905,50 @@ BUILDIN_FUNC(getiteminfo)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Set some values of an item [Lupus]
|
||||
* Price, Weight, etc...
|
||||
setiteminfo(itemID,n,Value), where n
|
||||
0 value_buy;
|
||||
1 value_sell;
|
||||
2 type;
|
||||
3 maxchance = Max drop chance of this item e.g. 1 = 0.01% , etc..
|
||||
if = 0, then monsters don't drop it at all (rare or a quest item)
|
||||
if = 10000, then this item is sold in NPC shops only
|
||||
4 sex;
|
||||
5 equip;
|
||||
6 weight;
|
||||
7 atk;
|
||||
8 def;
|
||||
9 range;
|
||||
10 slot;
|
||||
11 look;
|
||||
12 elv;
|
||||
13 wlv;
|
||||
14 view id
|
||||
* Returns Value or -1 if the wrong field's been set
|
||||
*------------------------------------------
|
||||
*/
|
||||
BUILDIN_FUNC(setiteminfo)
|
||||
{
|
||||
int item_id,n,value;
|
||||
int *item_arr;
|
||||
struct item_data *i_data;
|
||||
|
||||
item_id = conv_num(st,& (st->stack->stack_data[st->start+2]));
|
||||
n = conv_num(st,& (st->stack->stack_data[st->start+3]));
|
||||
value = conv_num(st,& (st->stack->stack_data[st->start+4]));
|
||||
i_data = itemdb_exists(item_id);
|
||||
|
||||
if (i_data && n>=0 && n<14) {
|
||||
item_arr = (int*)&i_data->value_buy;
|
||||
item_arr[n] = value;
|
||||
push_val(st->stack,C_INT,value);
|
||||
} else
|
||||
push_val(st->stack,C_INT,-1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Returns value from equipped item slot n [Lupus]
|
||||
getequipcardid(num,slot)
|
||||
@ -12133,23 +12180,36 @@ BUILDIN_FUNC(npcshopattach)
|
||||
/*==========================================
|
||||
* Returns some values of an item [Lupus]
|
||||
* Price, Weight, etc...
|
||||
setiteminfo(itemID,"{new item bonus script}");
|
||||
setitemscript(itemID,"{new item bonus script}",[n]);
|
||||
Where n:
|
||||
0 - script
|
||||
1 - Equip script
|
||||
2 - Unequip script
|
||||
*------------------------------------------
|
||||
*/
|
||||
BUILDIN_FUNC(setitemscript)
|
||||
{
|
||||
int item_id;
|
||||
int item_id,n=0;
|
||||
char *script;
|
||||
struct item_data *i_data;
|
||||
struct script_code *dstscript;
|
||||
|
||||
item_id = conv_num(st,& (st->stack->stack_data[st->start+2]));
|
||||
script = conv_str(st,& (st->stack->stack_data[st->start+3]));
|
||||
if( st->end>st->start+4 )
|
||||
n=conv_num(st,& (st->stack->stack_data[st->start+4]));
|
||||
i_data = itemdb_exists(item_id);
|
||||
|
||||
if (i_data && script!=NULL && script[0]=='{') {
|
||||
if(i_data->script!=NULL)
|
||||
script_free_code(i_data->script);
|
||||
i_data->script = parse_script(script, "script_setitemscript", 0, 0);
|
||||
if (i_data && script!=NULL && script[0]=='{' && n<3) {
|
||||
if(n==2)
|
||||
dstscript = i_data->unequip_script;
|
||||
else if(n==1)
|
||||
dstscript = i_data->equip_script;
|
||||
else
|
||||
dstscript = i_data->script;
|
||||
if(dstscript)
|
||||
script_free_code(dstscript);
|
||||
dstscript = parse_script(script, "script_setitemscript", 0, 0);
|
||||
push_val(st->stack,C_INT,1);
|
||||
} else
|
||||
push_val(st->stack,C_INT,0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user