Всем привет !
Помогите пожалуйста со скриптом на армор.
Вот часть скрипта, которая на ту или иную шмотку дает рандомный скилл из перечисленных (при крафте).
ON=@Create
Color=Color_o_darksteel
HitPoints=50
TAG.SKILL=<hval {SKILL_WRESTLING 1 SKILL_SWORDSMANSHIP 1 SKILL_FENCING 1 SKILL_PARRYING 1 SKILL_MACEFIGHTING 1}>
ON=@Equip
SRC.MAXHITS +=3
try SRC.<SERV.SKILL.<TAG0.SKILL>.KEY>=<hval <SRC.<SERV.SKILL.<TAG0.SKILL>.KEY>>+1>
ON=@UnEquip
SRC.MAXHITS -=3
try SRC.<SERV.SKILL.<TAG0.SKILL>.KEY>=<hval <SRC.<SERV.SKILL.<TAG0.SKILL>.KEY>>-1>
try SRC.<TAG0.SKILL>
[ITEMDEF I_TROPICAL_BRACELET]
ID=I_BRACELET_GOLD
NAME=Tropical bracelet
VALUE=350
ON=@CREATE
COLOR=0B7E
TAG.SKILLBONUS=250
TAG.SKILLID=Wrestling
ON=@ITEMEQUIP
IF !(<ACT.DTAG0.SKILLBONUS>==0) && !(<ISEMPTY <ACT.TAG.SKILLID>>)
SRC.<ACT.TAG0.SKILLID>=<EVAL (<SRC.<ACT.TAG0.SKILLID>>+<ACT.TAG0.SKILLBONUS>)>
ENDIF
ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.SKILLBONUS>==0) && !(<ISEMPTY <ACT.TAG.SKILLID>>)
SRC.<ACT.TAG0.SKILLID>=<EVAL <SRC.<ACT.TAG0.SKILLID>>-<ACT.TAG0.SKILLBONUS>>
ENDIF
Насколько я понимаю автор просил реализовать (бонусы которых нет в дефолт сфере)
Перечисляя пример выше: char_spell_critical_damage, char_speed_damage, modfizdamage
Разумеется выше скрипт что он для примера скинул не будет работать,
Нужно:
1) Создать Массив (коллекцию) “особых умений”
2) Сделать сценарий с событиями этих умений и взаимодействия с ними
3) Повесить события (прописать в сфере)
4) Уже потом написать метод (функцию) (рандома или чего он там желает) и ее привязать на Тригер экипировки и снятия
PS: Это один из вариантов, уверен что есть и более простые решения.
[ITEMDEF I_TROPICAL_BRACELET]
ID=I_BRACELET_GOLD
NAME=Tropical bracelet
VALUE=350
ON=@CREATE
COLOR=0B7E
TAG.SKILLBONUS=250
TAG.SKILLID=Wrestling
ON=@ITEMEQUIP
IF !(<ACT.DTAG0.SKILLBONUS>==0) && !(<ISEMPTY <ACT.TAG.SKILLID>>)
SRC.<ACT.TAG0.SKILLID>=<EVAL (<SRC.<ACT.TAG0.SKILLID>>+<ACT.TAG0.SKILLBONUS>)>
ENDIF
ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.SKILLBONUS>==0) && !(<ISEMPTY <ACT.TAG.SKILLID>>)
SRC.<ACT.TAG0.SKILLID>=<EVAL <SRC.<ACT.TAG0.SKILLID>>-<ACT.TAG0.SKILLBONUS>>
ENDIF
[ITEMDEF I_FORCE_FEMALE_PLATEMAIL_CHEST]
NAME=Force female platemail chest
ID=I_ARMOR_FEMALE_PLATE
ARMOR=FORCE_PLATE_ARMOR_AR
VALUE=100
ON=@CREATE
FORCE_ARMOR_GENERATOR
[FUNCTION FORCE_ARMOR_GENERATOR]
HITPOINTS=FORCE_ARMOR_HITPOINTS
COLOR=COLOR_O_FORCE
TAG.EXPERIENCEBONUS=<EVAL {1 4 2 3 3 2 4 1}>
TAG.STATBONUS=<EVAL {1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1}>
DORAND 3
TAG.BONUS_STAT=Str
TAG.BONUS_STAT=Dex
TAG.BONUS_STAT=Int
ENDDO
[FUNCTION DARKSTEEL_ARMOR_GENERATOR]
HITPOINTS=50
COLOR=COLOR_O_DARKSTEEL
TAG.EXPERIENCEBONUS=<EVAL {1 4 2 3 3 2 4 1}>
TAG.STATBONUS=<EVAL {1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1}>
DORAND 3
TAG.BONUS_STAT=Str
TAG.BONUS_STAT=Dex
TAG.BONUS_STAT=Int
ENDDO
[ITEMDEF 04577]
DefName=i_DARKSTEEL_FEMALE_PLATEMAIL
Name=Darksteel Female Platemail Chest
Id=i_Armor_female_plate
Armor=35
ReqStr=15
Weight=4
Value=47
CATEGORY=Provisions - Armor - Colored
SUBSECTION=Darksteel
DESCRIPTION=Female Platemail
Resources=22 i_ingot_darksteel
SkillMake=BLACKSMITHING 40.0
ON=@Create
DARKSTEEL_ARMOR_GENERATOR
Чтобы вот это работало:
TAG.STATBONUS=<EVAL {1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1}>
DORAND 3
TAG.BONUS_STAT=Str
TAG.BONUS_STAT=Dex
TAG.BONUS_STAT=Int
ENDDO
ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.STATBONUS>==0) && !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
SRC.<ACT.TAG0.BONUS_STAT>=<EVAL <SRC.<ACT.TAG.BONUS_STAT>>+-<ACT.DTAG0.BONUS_STAT>>
ENDIF
ON=@ITEMEQUIP
IF (<ACT.DTAG0.STATBONUS> > 0)
IF !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
SRC.<ACT.TAG0.BONUS_STAT>=<EVAL (<SRC.<ACT.TAG.BONUS_STAT>>+<ACT.DTAG0.STATBONUS>)>
ENDIF
ENDIF
ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.STATBONUS>==0) && !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
SRC.<ACT.TAG0.BONUS_STAT>=<EVAL <SRC.<ACT.TAG.BONUS_STAT>>+-<ACT.DTAG0.BONUS_STAT>>
ENDIF
ON=@ITEMEQUIP
IF (<ACT.DTAG0.STATBONUS> > 0)
IF !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
SRC.<ACT.TAG0.BONUS_STAT>=<EVAL (<SRC.<ACT.TAG.BONUS_STAT>>+<ACT.DTAG0.STATBONUS>)>
ENDIF
ENDIF
10:12:ERROR:(sphere_item_provisions_armor_color.scp,370)Can't resolve <ACT.DTAG0.STATBONUS>
10:12:ERROR:(sphere_item_provisions_armor_color.scp,370)Undefined symbol ''
10:12:ERROR:(sphere_item_provisions_armor_color.scp,377)Can't resolve <ACT.DTAG0.STATBONUS>
10:12:ERROR:(sphere_item_provisions_armor_color.scp,377)Can't resolve <ACT.TAG.BONUS_STAT>
10:12:ERROR:(sphere_item_provisions_armor_color.scp,377)Undefined symbol ''
все прекрасно поняли, что ты хочешь сделать, делается это достаточно легко.
d`ArcZeal тебе всё сказал по сути, просто головой подумать осталось
через tag - ты создаешь не дефолтную систему, можешь называть и писать, что хочешь.
Создаешь на чаре tag, который будет отвечать за какие-то плюшки к магии. Например:
tag.bonus_magery
затем добавляешь этот "tag.bonus_magery" в формулы расчета магии в триггеры на чаре или в спеллах
а через шмот уже меняешь этот самый "tag.bonus_magery" на чаре путем equip/unequip
On=@Create
dorand 2
tag.rand_bonus = bonus_magery
tag.rand_bonus = bonus_healing
enddo
On=@Equip
src.tag0.<tag0.rand_bonus> += 5
On=@UnEquip
src.tag0.<tag0.rand_bonus> -= 5
Ребят, всем привет. Я несколько дней был в отьезде и только сейчас добрался до сферы.
Очень надеюсь что еще никому не надоел
Но есть вопрос по данной теме. Очень прошу подсказать .
Создал отдельно скрипт:
[TYPEDEF e_stat_bonus]
ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.STATBONUS>==0) && !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
SRC.<ACT.TAG0.BONUS_STAT>=<EVAL <SRC.<ACT.TAG.BONUS_STAT>>+-<ACT.DTAG0.BONUS_STAT>>
ENDIF
ON=@ITEMEQUIP
IF (<ACT.DTAG0.STATBONUS> > 0)
IF !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
SRC.<ACT.TAG0.BONUS_STAT>=<EVAL (<SRC.<ACT.TAG.BONUS_STAT>>+<ACT.DTAG0.STATBONUS>)>
ENDIF
ENDIF
[FUNCTION DARKSTEEL_ARMOR_GENERATOR]
HITPOINTS={10 80}
COLOR=COLOR_O_DARKSTEEL
TAG.EXPERIENCEBONUS=<EVAL {1 4 2 3 3 2 4 1}>
TAG.STATBONUS=<EVAL {1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1}>
DORAND 3
TAG.BONUS_STAT=Str
TAG.BONUS_STAT=Dex
TAG.BONUS_STAT=Int
ENDDO
[EOF]
[ITEMDEF 04560]
DefName=i_DARKSTEEL_PLATEMAIL_ARMS
Name=Darksteel Platemail Arms
Id=i_platemail_arms
Armor=55
ReqStr=40
Weight=5
Value=43
CATEGORY=Provisions - Armor - Colored
SUBSECTION=Darksteel
DESCRIPTION=Platemail Arms
Resources=18 i_ingot_darksteel
SkillMake=BLACKSMITHING 63.5
TEVENTS=e_stat_bonus
ON=@Create
DARKSTEEL_ARMOR_GENERATOR
1.
Удоли:
TEVENTS=e_stat_bonus
2.
Замени
[TYPEDEF e_stat_bonus]
на
[EVENTS e_stat_bonus]
3.
Вешай на персонажа игрового:
.x events=+e_stat_bonus
4.
Рестартани сферу
--------------------------------------
В сам армор добавь, чтобы видеть, видит на арморе бонус на статы или нет:
ON=@CLICK
SRC.SYSMESSAGE + <ACT.DTAG0.STATBONUS> <ACT.TAG0.BONUS_STAT>
Спасибо большое ! Сейчас заработало. Правда при одевании вещь прибавляет стат а вот когда снимаешь, то стат не минусуется. То есть, стат работает только на +. Выходит своего рода баг, с прокачкой статов.
В event_char.scp прописал:
[EVENTS e_bonus_login]
ON=@LOGIN
x events=+e_stat_bonus
[eof]
Хотел чтоб этот бонус распространялся на всех игровых чаров, но не срабатывает. Получается бонус может получить аккаунт с админкой, через команду что указана выше. Как это можно исправить ?
Спасибо d`ArcZeal за помощь ! Разобрался. Тема закрыта)
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)