Hi again all of you!
It's me again, and now I'm trying to script more complicated items.
I want to script poisons and such for alchemy. Say I want to script a poison named Nightshade,with one charge, which upon consumption gets the player to be more intelligent, but he must take it every 72 hours or suffer a -15 penalty in Dex, Str and Int for 96 hours (withdrawal time).
How do I do that?
[ITEMDEF i_nightshade]
NAME= Nightshade
ID=0EFB
TYPE=t_normal
VALUE=0
WEIGHT=1
CHARGE=1
RESOURCES=1 i_blue_flower, 1 i_empty_bottle, 1 i_ash
SKILLMAKE=ALCHEMY 60.0
CATEGORY=TdF
SUBSECTION=Drug
DESCRIPTION=Nightshade
ON=@Create
MORE1=s_Cunning
What is missing for it to be functionnal?
Thank you all so much for bearing with my inexperience!
Hi the spherewiki should be a great help to you with item creation.
Though just to help, if you were creating a posion first it must be in a bottle or have the id of a bottle I assume thats what 0efb is ? the type I guess must be T_Potion thats something you dclick and apparently drink, unlike t_normal which kind of declares a custom script. Though you can use any type there or make your own to suit. A value of 0 should be considered because if you add these to your vendor NPCS to sell at any point, they are a bit cheap !
The resourses are fine but were is the nightshade. LOL @ the withdrawal time thats funny.
PHP Code:
[DEFNAME potionControlPanel]
color_poison_nightshade 63
PHP Code:
[ITEMDEF i_potion_nightShade]
DEFNAME=i_potion_nightShade
NAME=Nightshade Poison
ID=i_bottle_GREEN
WEIGHT=1
TYPE=t_potion_nightshade
TDATA1=i_bottle_empty
RESOURCES=i_reag_nightshade 3, i_bottle_EMPTY
SKILLMAKE=ALCHEMY 100.0
ON=@Create
COLOR=color_poison_nightshade
PHP Code:
[TYPEDEF t_potion_nightshade]
ON=@DCLICK
IF (<SRC.FINDID.i_potiondelay>)
SRC.SYSMESSAGE @00023,,1 You can't use another potion yet.
RETURN 1
ELSE
NEWITEM i_potiondelay, 1, <SRC.UID>
NEWITEM i_potionNightshadeAddiction, 1, <SRC.UID>
RETURN 0
ENDIF
PHP Code:
[ITEMDEF i_potiondelay]
ID=i_bottle_empty
TYPE=t_eq_script
WEIGHT=0
LAYER=layer_special
ON=@CREATE
ATTR=attr_invis|attr_decay
TIMER=7
ON=@EQUIP
TIMER=7
ON=@TIMER
REMOVE
RETURN 1
Then all you would have to deal with is the i_potionNightshadeAddiction memory. First we will add your variables to the control.
PHP Code:
[DEFNAME potionControlPanel]
color_potion_nightshade 63
nightshade_int_Increase 10
nightshade_dose_timeout 72
nightshade_withdrawl_time 96
nightshade_withdrawl_penalty 15
Before your write the memory that will control the effect on the player you need to consider your time format its in hours so we could use a function to convert that to seconds-ish
PHP Code:
[FUNCTION f_convertHoursSecs]
RETURN <EVAL <ARGV[0]> * 60 * 60>
now when i want to use the value from the control to compare with the server time
i write <EVAL <f_convertHoursSecs <nightshade_withdrawl_time>>>
Finally the Memory
PHP Code:
[ITEMDEF i_nightShadeEffect]
DEFNAME=nightShadeEffect
ID=i_flesh_brain
TYPE=t_eq_script
NAME=Nightshade Effect
layer=layer_special
ON=@CREATE
ATTR=attr_newbie|attr_decay|attr_move_never
TIMER=1
ON=@TIMER
IF !<CONT.TAG0.NightShadeTimer> && !<CONT.TAG0.NightShadeWithdrawlTimer>
// They wont have either on first effect so give the dose timer and the effect here
CONT.TAG.NightShadeTimer=<EVAL <f_convertHoursSecs <nightshade_dose_timeout>>>
f_doNightShadeEffectOnTarget <CONT.UID>
ELIF <CONT.TAG.NightShadeTimer> && !<CONT.TAG0.NightShadeWithdrawlTimer>
// If they have the effect active just count the timer up one
CONT.TAG.NightShadeTimer --
IF <EVAL <CONT.TAG.NightShadeTimer>> < 1
CONT.TAG.NightShadeTimer=
CONT.TAG.NightShadeWithdrawlTimer=<EVAL <f_convertHoursSecs <nightshade_withdrawl_time>>>
f_doNightShadeWithdrawl <CONT.UID>
ENDIF
ELSE
IF <CONT.TAG0.NightShadeWithdrawlTimer>
// If they are in withdrawel they wont have the effect,
// The effect should have been removed by here
// The peanlity already applied before here
// Just count the withdrawl Down.
CONT.TAG.NightShadeWithdrawlTimer --
IF <EVAL <CONT.TAG.NightShadeWithdrawlTimer>> < 1
f_removeNightShadeWithdrawl <CONT.UID>
CONT.TAG.NightShadeTimer=
REMOVE
RETURN 1
ENDIF
ENDIF
ENDIF
TIMER=1
RETURN 1
^^ thats got to have errors in it but you should see whats supposed to happen.
finally the functions
f_doNightShadeEffect
f_removeNightShadeEffect
f_doNightShadeWithdrawl
f_removeNightShadeWithdrawl
PHP Code:
[FUNCTION f_doNightShadeEffect]
REF1=<SERV.UID.<ARGV[0]>>
REF1.INT = <EVAL <REF1.INT> + nightshade_int_Increase >
[FUNCTION f_removeNightShadeEffect]
REF1=<SERV.UID.<ARGV[0]>>
REF1.INT = <EVAL <REF1.INT> - nightshade_int_Increase >
[FUNCTION f_doNightShadeWithdrawl]
REF1=<SERV.UID.<ARGV[0]>>
REF1.INT = <EVAL <REF1.INT> - nightshade_withdrawl_penalty >
REF1.DEX= <EVAL <REF1.DEX> - nightshade_withdrawl_penalty >
REF1.STR= <EVAL <REF1.STR> - nightshade_withdrawl_penalty >
[FUNCTION f_removeNightShadeWithdrawl]
REF1=<SERV.UID.<ARGV[0]>>
REF1.INT = <EVAL <REF1.INT> + nightshade_withdrawl_penalty >
REF1.DEX= <EVAL <REF1.DEX> + nightshade_withdrawl_penalty >
REF1.STR= <EVAL <REF1.STR> + nightshade_withdrawl_penalty >
^^ I havnt tested any of that so you might have to fix or rearrange it, but it should give you a good idea of how you could layout and code something like drugs
Thank you for your help! That should help me getting started.
Well, my first try made my server go boom.
Second try, a wooden wall came out of nowhere.
This is fun!

LOL ^^
What did you do ? I would not have tested anything I wrote previously, did you follow my instructions?
If your still stuck with this...
Just post what you have built and I will check over it for you!