|
Sphere: Краткий Учебник
Сфера-один из наиболее распрастронённых
эмуляторов сервера для игры Ultima Online. Наиболее стабильными
версиями сферы являются: 0.51а и 0.55i. Установка сферы на локальном
компьютере: 1. Скачать Sphere Server (download.ultimasoft.ru) 2.
Разархивировать в директорию для сферы (например: D:UltimaSphere)
3. Настроить "файл настройки" sphere.ini 4. Создать аккаунт: зайти
в папку accounts, открыть файл sphereacct.scp и записать [ваше имя
аккаунта]-которое вы будете вводить в поле Login PLEVEL=ваш
статус-1=player 4=GM 6=Admin 7=Owner и другие... Password-ваш
пароль-который вы будете вводить в поле password 5.Всё! Можно
запускать сервер и играть. (не забудьте ввести в консоли сервера букву “a”
иначе вы не зайдете своим аккаунтом на ваш сервер)
Скрипты сферы -
объектно-ориентированный язык, что означает, что каждый скрипт приложен к
объекту некоторым способом. При написании скриптов, вам понадобится
понимание шестнадцатеричной системы исчисления. Также понадобится windows
калькулятор, переведенный в научный режим, для перевода из десятичной
системы исчисления в шестнадцатеричную и обратно. Зачем надо знать
шестнадцатеричную систему? Хотя сфера становится всё более десятичной,
многое ещё основано шестнадцатеричном. По этому, когда вы используете
шестнадцатеричный вариант записи в сфере, то пишите 0 (ноль) в первом
разряде. Такая форма записи сообщит сфере, что число является
шестнадцатеричным.
// - это обозначение означает пояснение: здесь
вы можете писать что угодно например: // пример я могу написать
тут, что угодно и это будет игнорироваться // сферой!
1.Spherebook.scp
Первые строки, которые вы увидите в
этом скрипте: [SCROLL SCROLL_MOTD]
ТУТ ВЫ МОЖЕТЕ НАПИСАТЬ
ПРИВЕТСТВИЕ ДЛЯ ЛЮДЕЙ ВОШЕДШИХ НА ШАРД ТИПА: !!! WELCOM !!!
[SCROLL SCROLL_GUEST] ДЛЯ ГУЕСТОВ-ТОЖЕ МОЖНО НАПИСАТЬ
ПРИВЕТСТВИЕ!
По умолчанию:
1.Welcome Guest Traveller
you have entered ! 2.A Guest account has been opened
for you 3.Your life in this world is transient at best. 4.Consult
with for a permenant account.
Пояснения:
1 Имя сервера, попробуйте зайти ГМом на вашу сферу и
написать .SERV.SERVNAME 4 Адрес мыла админа (задается
в sphere.ini)
Вообщем этот скрипт можно изменить на 90%.
2.Spherechar.scp
В этом скрипте представлены основные
монстры и животные в игре Например:
[CHARDEF 01]
DEFNAME=c_ogre NAME=#NAMES_OGRE the Ogre
SOUND=snd_MONSTER_OGRE1 ICON=i_pet_OGRE ANIM=078c7f
CAN=MT_WALK|MT_USEHANDS DAM=5,15 ARMOR=16 RESOURCES=6
i_ribs_raw FOODTYPE=15 t_meat_raw DESIRES=c_ogre, t_arock
//ALIGNMENT=EVIL SHELTER=r_forests,r_mountains
AVERSIONS=t_TRAP,r_civilization
CATEGORY=Monsters
SUBSECTION=Ettins, Ogres, Trolls, Cyclops, and Titans
DESCRIPTION=Ogre
ON=@Create // stuff that happens to the
created instance of a char. NPC=brain_monster STR={165 195}
DEX={46 65} INT={46 70}
PARRYING={45.0 55.0}
MAGICRESISTANCE={45.0 60.0} TACTICS={60.0 70.0}
WRESTLING={70.0 80.0}
FAME=4500 KARMA={-1000 -1999}
ON=@NPCRestock ITEM=loot_OGRE
1. [CHARDEF 01] Это -
идентификатор огра, его ID. Вы можете использовать это число для вызова
огра из игры .addnpc 01. Для создания своего монстра можно использовать
любое имя, например “c_ogre_dark” и вызывать его из игры .add c_ogre_dark.
2. DEFNAME=c_ogre -так называемый DEFNAME, просто ID огра вместо
01. Также можно использовать для вызова из игры и при создании нового
монстра, например “c_ogre_dark”. Необязательный параметр при создании
монстра с таким же ID как и огр по дефолту.
3. NAME=#NAMES_OGRE
the Ogre - Имя чара, в данном случае идет обращение к скрипту сферы
spherename.scp-NAME=#NAMES_OGRE the Ogre рандомно выбирает имя огра.
Можете найти в spherename.scp [NAMES NAMES_OGRE] и отредактировать все
имена огров или создать новые…Выделенное синим the Ogre это title любого
огра не зависимо от имени. Можно писать просто NAME=OGRE DARK, но тогда
ваш огр будет появляться с одним и тем же именем OGRE DARK
4.
SOUND=snd_MONSTER_OGRE1 - Звуки, которые издает огр. Смотри скрипт
spheredefs.scp, там перечислены звуки, которые вы можете использовать и
создать, например, огра который издает звуки лошади . Необязательный
параметр при создании монстра с таким же ID как и огр по дефолту.
5. ICON=i_pet_OGRE - Фигура животного появляющаяся, например, при
его шринковании. Необязательный параметр при создании монстра с таким же
ID как и огр по дефолту.
6. ANIM=078c7f - это анимация огра.
Необязательный параметр при создании монстра с таким же ID как и огр по
дефолту.
7. CAN=MT_WALK|MT_USEHANDS- что может делать ваш огр?
Необязательный параметр при создании монстра с таким же ID как и огр по
дефолту.
Таблица CAN=MT_* (MT_* DEFNAME in hexadecimal,)
MT_NONMOVER 0 // не может двигаться MT_GHOST 01 // может
проходить все через что проходит призрак(когда вас убили) MT_SWIM 02
// может плавать (применяется для животных и монстров которые могут
плавать по дефолту, не ставьте на игроков!) MT_WALK 04 // может
передвигаться MT_FLY 010 // например для деревьев MT_FIRE_IMMUNE
020 // иммунитет к огню MT_EQUIP 00100 // может одевать вещи
MT_USEHANDS 00200 // может использовать свои руки, чтобы открывать
двери, чтобы носить в них: факелы, свечи, и т.д MT_MALE 0 // мужчина
MT_FEMALE 00800 // женщина MT_NONHUM 01000 // не человек
MT_RUN 02000 // может передвигаться очень быстро
Для
присвоения нескольких MT_* ставьте разделитель “|”
8. DAM=5,15 -
урон наносимый чаром по дефолту, общий урон считается от урона по дефолту,
от силы, ловкости, тактики, других боевых скиллов используемых во время
удара. DAM Не влияет на урон от магии. DAM сокращенное слово от DAMAGE.
Необязательный параметр при создании монстра с таким же ID как и огр по
дефолту.
9. ARMOR=16 - защита чара по дефолту, общая защита
зависит, прежде всего от AR брони. Необязательный параметр при создании
монстра с таким же ID как и огр по дефолту.
10. RESOURCES=6
i_ribs_raw - вещь которая будет лежать в трупе после разрезания, в данном
случае 6 кусков мяса. Необязательный параметр при создании монстра с таким
же ID как и огр по дефолту.
11-14. FOODTYPE, SHELTER, DESIRES,
AVERSIONS - мне точно не известно для чего это нужно, Foodtype-то что
должно есть существо, Shelter-местность в которой существует существо .
Необязательный параметр при создании монстра с таким же ID как и огр по
дефолту.
15.CATEGORY=Monsters SUBSECTION=Ettins, Ogres,
Trolls, Cyclops, and Titans DESCRIPTION=Ogre Это все для Аксиса.
Удобная программа для Гмов. Скачать можно отсюда (http://www.q1.ru/ , http://www.sphereserver.com/).
Необязательный параметр при создании монстра с таким же ID как и огр по
дефолту.
16. ON=@CREATE -Триггер смотри далее про триггеры.
17-25. STR, DEX, INT, FAME, KARMA, SKILLS, BRAIN…-здесь вы задаете
силу, ловкость, ум, фэйм, карму, скиллы, тип существа.
26.
ON=@NPCRestock -Триггер смотри далее про триггеры. Необязательный параметр
при создании монстра с таким же ID как и огр по дефолту.
27.
ITEM=loot_OGRE - Template смотри далее про templates.
//Тут можно
поместить триггер сразу на существо или воспользоваться //TEVENTS
ON=@CLICK Message=[Ogre, Evil]
Также могут присутствовать
TEVENTS, TSPEECH: TSPEECH=spk_ogre_evil TEVENTS=e_ogre_evil
[SPEECH spk_ogre_evil] on=*Hello* Say Hello my eat!
I’am like people! Say For Lunch, of course!
[EVENTS
e_ogre_evil] ON=@CLICK // можно поместить триггер тут
Message=[Ogre, Evil] // покажет над именем существа [Ogre, Evil]
Создаем своего монстра:
[chardef ogre_my] // c_ не
обязательно id=c_ogre // Задаем ID name= MY OGRE the ogre my //
делаем ему имя и title icon=I_pet_ogre dam=50 // это больно )
armor=40
ON=@Create // триггер NPC=brain_monster // тип
существа, сейчас монстр STR={165 195} // сила DEX={46 65} //
ловкость INT={46 70} // ум // умения PARRYING={45.0 55.0}
MAGICRESISTANCE={45.0 60.0} TACTICS={60.0 70.0}
WRESTLING={70.0 80.0} // Fame, karma FAME=4500
KARMA={-1000 -1999}
ON=@NPCRestock // триггер
ITEM=loot_OGRE // template
Этот же скрипт можно написать еще
короче(но без дополнительных параметров):
[chardef ogre_2]
id=01 name=Ogre my
on=@create color=00a17 // можно
задать даже цвет огра
это весь ваш огр
Вы можете изменить
цену, за которую будет работать VENDOR:
[CHARDEF 0401]
DEFNAME=C_H_VENDOR NAME=#NAMES_HUMANMALE the Vendor ID=C_MAN
HIREDAYWAGE=50 // цена NPC, будет служить на вас 1день-50 gold coins
DESIRES=i_gold,e_notoriety AVERSIONS=t_TRAP,t_eerie_stuff
3.Spheredefs.scp Здесь вы найдете самую различную информацию
Например:
[DEFNAME HUES] color_none 0 color_metal
0 color_violet_lt 14 color_red1 32 color_red2 33
color_cyan 88 color_gray_dk 802 color_energy_vortex
118 color_gray_lt 904 COLOR_DYE_HIGH 1000 color_ice 1152
color_snow 1153 color_rock 1154 color_spectral 17969
Для чего это нужно? Для удобства, конечно! Например, вам нужно
окрасить своего огра в ледяной цвет: вы начнете подбирать цвет, потому что
вы его забыли, но вчера вы ведь подобрали его?! Так вот, когда находите
рарные цвета, записывайте их в spheredefs.scp для этого просто
напишите Color_ice_ogre 0480 Для того чтобы вызвать этот цвет,
введите Color=color_ice_ogre
4.Sphereevents.scp
В этом
скрипте вы увидете все основные events (события)
Например:
[EVENTS e_Undead] // событие ON=@EnvironChange // изменение
погоды, триггер // i like the dark if ||
(&(statf_nightsight|statf_indoors)) // смотри IF if !
// таг смотри таги return 0 endif anim 011
bark 4 str= // restore me. hits=
tag.lightstr=0 karma= tag.lightkarma=//just
dispose of this. fame= tag.lightfame=
flags=&~statf_conjured // no loot if killed. return 0
endif // i can't live in light areas. weaken me ? or destroy me ?
anim 014 bark 4 if return 0 endif if
( &statf_conjured ) // Flags смотри flags remove return
1 endif flags=|statf_conjured // no loot if killed.
tag.lightstr= str=1 hits=1 // very weak.
tag.lightkarma= // killing it means nothing now. karma=-2
tag.lightfame= fame=10 return 0
Вы можете
добавить свои события:
[EVENTS e_magic_immune] // событие
ON=@SpellEffect RETURN 1 On=@click Message=(Magic Immune)
// повесьте этот евент на вашего огра, он будет неуязвим для
магии! // и при нажатии на него, над его именем бедет (Magic Immune)
5.Триггеры.
@Click Активируется при нажатии
@CLIPERIODIC Активируется периодически при входе в регион @Create
Активируется при создании @DAMAGE Активируется при нанесении урона
@DClick Активируется при двойном нажатии @Death Активируется при
смерти @Destroy Активируется при уничтожении @DROPON_CHAR
Активируется при передаче предмета другому чару @DROPON_GROUND
Активируется при бросании предмета на землю @DROPON_ITEM Активируется
при бросании на другой предмет @ENTER Для регионов:Активируется при
входе в регион @EnvironChange Активируется при изменении света,погоды
@EQUIP Активируется при экипировке @EXIT Для регионов:Активируется
при выходе из региона @FIRE Активируется при стрельбе из лука
@FearOfDeath Активируется перед смертью @GetHit Активируется при
получении удара @Hit Активируется при наесении удара @HitMiss
Активируется при промахе @HitTry Активируется при попытке ударить
@itemClick Для событий:Активируется при нажатии на предмет
@itemDAMAGE Активируется при повреждении предмета @itemDCLICK Для
событий:Активируется при двойном нажатии на предмет @itemDROPON_CHAR
Активируется при пепредаче предмета чару @itemDROPON_GROUND
Активируется при бросании предмета на землю @itemDROPON_ITEM
Активируется при бросании предмета @itemEQUIP Активируется при
одевании предмета @itemPICKUP_GROUND Активируется при поднятии
предмета с земли @itemPICKUP_PACK Активируется при поднятии предмета
из бэкпака @itemSPELL Активируется при кастовании на предмет
@itemSTACKON Активируется при добавлении предмета в кучу @itemSTEP
Активируется при наступании на предмет @itemTARGON_CHAR Активируется
при прицеливаии на чара @itemTARGON_GROUND Активируется при
прицеливаии на землю @itemTARGON_ITEM Активируется при прицеливаии на
предмет @itemUNEQUIP Активируется при попытке надеть предмет
@LogIn Активируется при вхождения клиета в игру @LogOut
Активируется при логауте @NPCAcceptItem Активируется при передаче
нужного вам предмета от NPC @NPCHearGreeting Активируется когда NPC
слышит приветствия @NPCHearNeed Активируется когда кто-то говорит о
нужном предмете(NPC) @NPCHearUnknown Активируется когда NPC слышит
слова ,которые не понимает @NPCRefuseItem Активируется когда кто-то
дает ненужный предмет @NPCRestock Активируется при пополнеии запасов
торговца @NPCSeeNewPlayer Активируется когда NPC видит нового игрока
@NPCSeeWantItem Активируется когда NPC видит нужный предмет
@PersonalSpace Активируется когда кто-то наступает на NPC
@PICKUP_GROUND Активируется при поднятии предмета с земли
@PICKUP_PACK Активируется при поднятии предмета из бэкпака
@Profile Активируется когда кто-то хочет посмотреть профайл
@ReceiveItem Активируется когда предмет получен(взят в руки)
@SELECT Активируется при выборе @SkillAbort Активируется когда
использование скилла закончено @SkillFail Активируется при неудачном
использовании скилла @SkillSelect Активируется при выборе скилла из
меню @SkillStart Активируется когда начал использовать скилл
@SkillSuccess Активируется при удачном использовании скилла
@SkillTry Активируется при использовании скилла, до того как сервер
сообщит удачно или нет @SpellCast Активируется при кастовании
@SpellEffect Активируется когда кто-то на меня кастует @STACKON
Активируется при добавления в кучу @START Активируется при старте
@STEP Активируется при наступании @SUCCESS Активируется при успехе
@TARGON_CHAR Активируется при наведении целеуказателя на существо
@TARGON_GROUND Активируется при наведении целеуказателя на землю
@TARGON_ITEM Активируется при наведении целеуказателя на предмет
@TIMER Активируется когда таймер покажет 0
Пример:
[itemdef I_stone_my] id=01184 name=Stone of Trade
type=t_normal
on=@create color=color_ice_ogre // не
забыли???
On=@dclick // вот ОН, ТРИГГЕР Src.menu m_stone_my //
при двойном нажатии отпраляет в меню m_stone_my
[menu m_stone_my]
// ваше первое меню ))) смотри далее Menu What are you want? On=0
50 arrows (price 500 gold) if // проверка на
деньги src.consume=500 i_gold // если есть забирает 500
src.newitem=i_arrow // дает стрелу одну! src.act.amount=50 //
увеличивает кол-во стрел до 50 src.act.bounce // кладет в сумку
src.sysmessage=Thank thee // пишет Thank thee else // если денег
нету src.sysmessage=You need money // пишет You need money endif
// конец if return 0 // закрывает окно on=0 Exit // выход
return 0 // закрывает окно
6. ITEMDEF Применение itemdef
вы можете увидеть во многих скриптах например во всех скриптах с начальным
словом: sphereitem_*
Пример: [ITEMDEF I_sword_my]
id=I_sword_long name=My Sword type=t_weapon_sword // тип меча
WEIGHT=14 // вес SKILL=swordsmanship // используемый скилл
DAM=15,43 // урон REQSTR=50 // нужно силы TWOHANDS=n // n или
y (двуручный или одноручный)
on=@click // триггер message=[+5
str]
ON=@CREATE HITPOINTS=115,150
ON=@EQUIP SRC.
swordsmanship =(+5.0) RETURN 0
ON=@UNEQUIP
SRC. swordsmanship =(-5.0) RETURN 0
1.
ITEMDEF I_sword_my - вызывать из игры по этому имени .add I_sword_my
2. ID предмета, в данном случае I_sword_long
3. Name = имя
предмета
4. TYPE= t_weapon_sword - задает что это меч, что
нападает как меч, что свойства у него такие как у меча. Все типы вы
найдете в скрипте spheredefs.scp под этой строкой-[TYPEDEFS]
5.
Вес
6. Нужно силы, чтобы одеть
13. HITPOINTS=115,150 -
задает прочность вещи.
15. добавляет 5.0 к сворде!
18.
отнимает 5.0 от сворды!
Также вы можете добавить цену к этому
предмету!
VALUE=500 // будет брать 500 гольда за покупку этого
предмета! Чтобы можно было покупать этот предмет у торговцев(VENDOR) ищите
скрипт spheretemp_vend, затем найдите [TEMPLATE 102168] или любой другой
TEMPLATE и добавьте :
[TEMPLATE 102168]
DEFNAME=VENDOR_S_WEAPONS_BLADED CATEGORY=Vendor Templates
SUBSECTION=Sell Templates DESCRIPTION=Bladed Weaponsmith //
добавьте тут SELL=I_sword_my,{5 10} SELL=i_axe_exec,{10 15}
SELL=i_bardiche,{10 15} SELL=i_axe_battle,{10 15}
SELL=i_axe_battle_large,{10 15} SELL=i_bow,{10 15}
SELL=i_knife_butcher,{10 15} SELL=i_crossbow,{10 15}
SELL=i_crossbow_heavy,{10 15} SELL=i_cutlass,{10 15}
SELL=i_dagger,{10 15} SELL=i_halberd,{10 15}
SELL=i_hammer_pick,{10 15} SELL=i_katana,{10 15}
SELL=i_kryss,{10 15} SELL=i_sword_broad,{10 15}
SELL=i_sword_long,{10 15} SELL=i_sword_long_b,{10 15}
SELL=i_sword_viking,{10 15} SELL=i_cleaver_meat,{10 15}
SELL=i_axe,{10 15} SELL=i_axe_double,{10 15}
SELL=i_pickaxe,{10 15} SELL=i_pitchfork,{10 15}
SELL=i_scimitar,{10 15} SELL=i_knife_skinning,{10 15}
SELL=i_axe_two_hand,{10 15} SELL=i_axe_war,{10 15}
[TEMPLATE 102169] DEFNAME=VENDOR_B_WEAPONS_BLADED
CATEGORY=Vendor Templates SUBSECTION=Buy Templates
DESCRIPTION=Bladed Weaponsmith // добавьте тут BUY=I_sword_my,{5
10} BUY=i_axe_exec,{10 15} BUY=i_bardiche,{10 15}
BUY=i_axe_battle,{10 15} BUY=i_axe_battle_large,{10 15}
BUY=i_bow,{10 15} BUY=i_knife_butcher,{10 15}
BUY=i_crossbow,{10 15} BUY=i_crossbow_heavy,{10 15}
BUY=i_cutlass,{10 15} BUY=i_dagger,{10 15} BUY=i_halberd,{10
15} BUY=i_hammer_pick,{10 15} BUY=i_katana,{10 15}
BUY=i_kryss,{10 15} BUY=i_sword_broad,{10 15}
BUY=i_sword_long,{10 15} BUY=i_sword_long_b,{10 15}
BUY=i_sword_viking,{10 15} BUY=i_cleaver_meat,{10 15}
BUY=i_axe,{10 15} BUY=i_axe_double,{10 15} BUY=i_pickaxe,{10
15} BUY=i_pitchfork,{10 15} BUY=i_scimitar,{10 15}
BUY=i_knife_skinning,{10 15} BUY=i_axe_two_hand,{10 15}
BUY=i_axe_war,{10 15}
BUY=i_log,{10 15}
BUY=i_ingot_iron,{10 15}
Неудобные бутылки Наверное все
знают проблему с бутылками-они не падают в кучу!
[ITEMDEF
i_potion_Refresh] NAME=Refresh ID=I_bottle_red // замените тут на
I_bottle_empty (вот решение!!!) TYPE=T_POTION
TDATA1=i_bottle_empty RESOURCES=i_reag_black_pearl, i_bottle_EMPTY
SKILLMAKE=ALCHEMY 0
ON=@Create color=0a0e // сделайте
любой
on=@dclick MORE1=s_Refresh // рефреш MORE2=50.0 //
сила РЕФРЕША, можно поставить 100.0
Создание предмета с
эффектом!!!
[itemdef I_kryss_flame] id=I_kryss name=Kryss
of flamestrike type=t_weapon_fence
on=@create
hitpoints=100 color=0954
ON=@EQUIP SRC.SPELLEFFECT 06
1000 // при экипировке кастует nightsight // Будет бить флайм
страйками
ON=@DAMAGE SRC.EFFECT=3,03709,1,20,1
src.hits=(-{10 30})
Создание лука, который будет
стрелять вашими стрелами!!!
[itemdef I_bow_ar_my] id=I_bow
name=Bow My type=t_weapon_bow
TDATA3=i_my_arrow // ID
вещи, которая нужна чтобы стрелять TDATA4=036f4 // анимация, чем будет
стрелять
on=@create color=0455 // черный цвет
[DEFname
my] color_my 0455
[itemdef I_my_arrow] id=I_arrow
name=My arrow
on=@create color=color_my
7.Ваши
команды?!
Создавайте команды для облегчения игры. Например
сейчас мы создадим команду которая сообщает, сколько у вас реагентов!
Моя реагент система! Киньте это в любой скрипт, а в игре напишите
.reagents для простых стандартных реагентов, .reagents2 для сложных
реагентов!
[PLEVEL 1] reagents reagents2
[FUNCTION
reagents] src.sysmessage=Standard Reagents // eval используется
тут для отображения общего числа реагентов, после того // как rescount
сосчитает их количество src.sysmessage=> Spider Silk src.sysmessage=> Sulfurous Ash src.sysmessage=> Nightshade src.sysmessage=> Blood Moss src.sysmessage=> Ginseng src.sysmessage=> Garlic src.sysmessage=> Mandrake Root src.sysmessage=> Black Pearls
[FUNCTION reagents2]
src.sysmessage=Advanced Reagents src.sysmessage=> Batwings src.sysmessage=> Blackmoor src.sysmessage=> Bloodspawn src.sysmessage=> Bones src.sysmessage=> Vials of Blood src.sysmessage=> Brinstone src.sysmessage=> Daemon Bones src.sysmessage=> Fertile Dirt src.sysmessage=> Dragons Blood src.sysmessage=> Executioners Cap src.sysmessage=> Eye of Newt src.sysmessage=> Obsidian src.sysmessage=> Pig Irong src.sysmessage=> Pumice src.sysmessage=> Serpents Scales src.sysmessage=> Volcanic Ash src.sysmessage=> Dead Wood src.sysmessage=> Worms Heart
После этого скрипта,
я думаю вам будет не трудно сделать функцию для подсчета стрел и болтов!
Хотите узнать, сколько человек в онлайне? Киньте это в любой
скрипт, а в игре напишите .online
[PLEVEL 1] ONLINE
[FUNCTION ONLINE] VAR.CLIENTS 0 tag.start 1
SERV.ALLCLIENTS getname TRYP 0 VAR.NAME+1>
TRYP 0 VAR.NAME+2> TRYP 0 VAR.NAME+3> TRYP 0 VAR.NAME+4> TRYP
0 VAR.NAME+5> TRYP 0 VAR.NAME+6> TRYP 0 VAR.NAME+7> TRYP
0 VAR.NAME+8> SRC.DIALOG d_show_clients
RETURN 1
[FUNCTION getname] IF (==1)
VAR.CLIENTS +1> TRYP 0 VAR.NAME> None TRYP 0 VAR.NAME>
RETURN 1 ENDIF
[DIALOG d_show_clients] 0, 0
nomove resizepic 0 0 3600 300 280 text 30 17 0052 8 text
30 37 0052 9 text 30 67 1152 0 text 30 87 1152 1 text 30 107
1152 2 text 30 127 1152 3 text 30 147 1152 4 text 30 167 1152
5 text 30 187 1152 6 text 30 207 1152 7 button 262 252 4005
4006 1 0 1 button 6 252 4014 4015 1 0 2
[DIALOG d_show_clients
TEXT] >. >>
+ 1>. + 1>>
+ 2>. + 2>>
+ 3>. + 3>>
+ 4>. + 4>>
+ 5>. + 5>>
+ 6>. + 6>>
+ 7>. + 7>>
Dark Lands World Players online: >
[DIALOG d_show_clients BUTTON] on=1 tag.start =
+ 8 dialog d_show_clients
on=2 tag.start =
+ (- dialog d_show_clients
8. IF Оператор IF
позволяет выполнить входящий в оператор код. IF (<45)
SAY You are newbie! else Say You are not newbie! endif
В первой строке проверяется условие, заданное в скобках после
оператора IF. Если ваша сила меньше 45 то вам говорят, что вы ламер,
ели же нет то вам говорят что вы не ламер. Вот значения
== Равное
!= Не равное > Больше < Меньше >= Больше или
равное <= Меньше или равное
[itemdef I_sword_if]
id=I_sword_Viking name=If sword type=t_weapon_sword
on=@create hitpoints=120
ON=@EQUIP IF
( < 100.0) SRC.SYSMESSAGE You need 100.0
swordsmanship to equip this RETURN 1 ENDIF
В этом скрипте
проверяется есть ли у вас 100.0 сворды если есть то мечь оденется, если
нет то не оденется !
ELSEIF понадобиться тогда, когда вам надо
будет проверить много вариантов:
On=@equip If >50
Src.sysmessage= You very strong!!! Elseif (==50)
Src.sysmessage= You need str!!! Return 1 Elseif
(==49) Src.sysmessage= You LAMER! Return 1 Else
Src.sysmessage=You need more strength Return 1 Endif
Чтобы добавить значение, используйте “&&”
IF
(=5 && =5) Src.sysmessage=You at full heal!
endif
^Это будет читаться как: если у тебя 5 силы и 5 хелсов
то ты здоров! Но для такой проверки легче использовать: IF
(== ) Src.sysmessage=You at full heal! Endif
Чтобы написать такое: если у тебя 100 силы или 100 ловкости, то ты
сильный, напишите следующее: IF (=100 || =100) //
используется знак “||” Src.sysmessage=You strong! Endif
11.Другие операторы.
+-плюс --минус *-умножить
/-делить &-и |-или ==-эквивалентно !=-не
эквивалентно &&-и ||-или
10.Templates
Используется для того, чтобы не писать одно и то же. Можете взглянуть
на скрипт spheretemp_loot, там представлены templates. При помощи
templates вы можете насовать вещей в сумку, положить эту сумку в ещё одну
сумку. Рассмотрим Loot_template:
[TEMPLATE 150021]
DEFNAME=loot_LICH_LORD CATEGORY=Item Templates
SUBSECTION=Monster Loot Templates DESCRIPTION=Lich Lord // зелёное
для аксиса CONTAINER=i_backpack Container=i_bag // ложим все в
сумку ITEM=TTM_LVL4,R99 ITEM=RANDOM_SCROLL,{ 2 3 } // любой scroll
(2 или 3) ITEM=RANDOM_REAGENT,{ 4 6 } // тоже используется template
ITEM=RANDOM_REAGENT,{ 4 6 } ITEM=RANDOM_JEWEL
ITEM=RANDOM_JEWEL ITEM=RANDOM_MAGIC_WANDS,R99
ITEM=RANDOM_MAGIC_WANDS,R99 ITEM=I_SCROLL_BLANK
ITEM=i_staff_gnarled ITEM=i_reag_BLACKMOOR,{5 10}
ITEM=i_gold,{700 800} ITEM={ i_reag_garlic 1 i_reag_ginseng 1 } //
Сдесь может выпасть или Garlic или Ginseng! ITEM=I_sowrd_long,R5
R5 это значит, что вы не всегда найдете в трупе этот сворд, вроде
как шанс нахождения - примерно при каждом 5ом убитом монстре, будет лежать
этот меч . То есть в одном из пяти ! Если сделать R10, то меч будет падать
из 1ого из 10ти!
Vendor templates - взгляните в файл
spheretemp_vend, там вы найдете множество templates ни чего сложного в них
тоже нет! Просто добавляешь любую вещь, пишешь количество и всё! Выше мы
уже разбирали, как это делается.
Просто template - используется,
например, для вызова вещей одного комплекта за один раз! Пример:
[TEMPLATE MY_platemail_complect] CATEGORY=Item Templates
SUBSECTION=Miscellaneous DESCRIPTION=Poor Gold Pile // for axis
Container=I_bag // даст все в сумке!! ITEM=i_platemail_chest
ITEM=I_platemail_arms ITEM=I_platemail_leggings
ITEM=I_platemail_helm ITEM=I_platemail_gloves
ITEM=I_platemail_gorget
Киньте это в любой скрипт, а в игре
напишите .add my_platemail_complect
12.Создание диалогов.
Для создания диалогов вам могут понадобится некоторые программы,
например InsideUO можно скачать с официального сайта download.ultimasoft.ru Если
вы хотите создавать диалоги быстро, но не очень качественно, юзайте
DialogStudio (download.ultimasoft.ru)
Основные параметры для создания диалогов:
1 [DIALOG
d_my_dialog] тут будут Гампы, высота, ширина 2 [DIALOG d_my_dialog
TEXT] тут будет находится текст 3 [DIALOG d_my_dialog BUTTON]
тут будут кнопки
[DIALOG d_my_dialog] Далее вы можете
написать следующее:
Noclose Нельзя закрыть правой кнопкой мыши
Nomove Нельзя перемещать окно
Nodispose я точно не
знаю для чего это, но если будет стоять после nomove и/или noclose то
эти строки( nomove, noclose) работать не будут.
text
Расположение и параметры текста в диалоге;
<х> и <у> - координаты, по которым будет располагаться текст;
<сolor> - цвет текста; параметр - это номер строки, в
которой ниже располагается текст; строки считаются начиная с первой строки
содержащей текст (в разделе данных) и эта строка имеет номер 0.
, Расположение окна диалога.
resizepic
Тут описывается рисунок фона (background),
его расположение, высота, ширина. Значения gump id ищите через InsideUO.
button Задает параметры кнопки в диалоге. - координаты id гампа нажатой кнопки id гампа не нажатой кнопки
эффект нажатия страница индекс кнопки
page страница
group группа
диалога
gumppic картинка по координатам
tilepic вставляет картинку (не гамп а
тайл) (смотри InsideUO) координаты id тайла в
десятичной системе
radio Кто знает HTML тому все ясно, кто не знает
поясню, это такая кнопка “кружок с точкой” можно выбрать только один из
всех. выбрано/не выбрано
checkbox Опять же HTML. Кнопка
“квадратик с галочкой”
textentry выводит текст который можно изменить
- ширина и высота гампа; - цвет текста;
- это "номер" строки ARGTXT[] возвращает значение, введенное
в строку
htmlgump -
координаты; - ширина, высота; - флаг, если 0, фон
прозрачный, если 1 - нет; - флаг, 1 - Scrollbar есть, 0 - нету; -
номер строки минус 1 из [DIALOG xxx TEXT] (1-ая строка - 0, 2-ая - 1 и
т.д.)
13.MENU
Вот пример:
[menu test_menu]
Test menu On=0 Check SAY Say I’am check “say” Return 0
On=0 Check Message Src.Message=I’am check “message” Return 0
On=0 Check Sysmessage Src.sysmessage=I’am check “sysmessage”
Return 0 On=0 Exit Return 0
1. [MENU test_menu] все
меню начинаются с [MENU имя вашего меню] 2. Строка над меню 3.
кнопка и название Check SAY 4. Говорит I’am check “say” 5. Return
0 закрывает окно 6. кнопка и название Check Message 7. Над вами
надпись I’am check “message” 8. Return 0 закрывает окно 9. кнопка
и название Check Sysmessage 10. В нижнем левом углу I’am check
“sysmessage” 11. Return 0 закрывает окно 12. кнопка и название
Exit 13. Return 0 закрывает окно
14. TAG’s
TAG это
STRING Вы можете давать TAGам любые имена, например SRC.TAG.FIRSTTAG=1
и перед TAGом обязательно ставьте SRC.!!!
Несколько пример, того
как применять TAGи:
On=@dclick If ( ==1)
Src.sysmessage=Your TAG.dct is 1, this means you already change your
name. Else Src.name=TAGUSER Src.tag.dct=1 Endif
On=@skillstart // при создании чара сделайте ему
SRC.TAG.skillrun=1 Src.tag.skillrun=+1>
Src.sysmessage= Your status of skill starting!!!
Return 1
On=@equip Src.tag.equiptag=You equip this item
with TAG Src.sysmessage= Return 0
После
использования TAGа удаляйте его, это делается так: SRC.TAG.FIRSTTAG=
15. Пишем скрипт
Напишем камень, для примера:
[itemdef I_stone_of_heal] // itemdef id=01184 name Heal
Stone type=t_script
on=@create color=0455
on=@click message=[Stone of heal]
on=@dclick if
// проверяет ГМ ли вы!!! menu m_for_gm // открывает меню
else // если не ГМ menu m_for_users // открывает меню для
плайеров!!! endif
[menu m_for_gm] This is GM menu On=0
Full heal (not priced) Src.newitem=I_fullheal Src.act.bounce
Return 0
[MENU m_for_users] This is Menu for players
on=0 full heal (5000 gold) if //
проверяет есть ли 5000 src.consume=5000 I_gold // забирает 5000
src.newitem=I_fullheal src.act.bounce src.sysmessage=You buy a
Full Heal!!! Thank Thee!!! Else src.sysmessage=You need more money
to buy it!!! Endif Return 0
[itemdef I_fullheal]
id=I_bottle_empty type=t_script name=Full Heal
on=@create color=00a02
on=@dclick
src.hits= // делает ваши хиты равными силе src.consume
I_fullheal src.newitem=I_bottle_empty src.act.bounce
Пишем
браслет на регенерацию маны
[ITEMDEF i_mana_bracelet]
NAME=Mana Regeneration Bracelet ID=01086 TYPE=t_jewelry
ON=@CREATE COLOR=0e ATTR=attr_newbie
ON=@EQUIP
LINK= TIMER=1 RETURN 0
ON=@TIMER IF
(< ) LINK.mana=+1 ENDIF
TIMER=1 RETURN 1
ON=@UNEQUIP LINK=04FFFFFFFF
TIMER=-1 RETURN 0
Пишем свой EVENT и функцию, я написал
вот что: POISON IMMUNE:
[EVENTS e_poison_immune]
on=@skillstart src.poison_immune
ON=@EnvironChange
Src.poison_immune
On=@spellcast Src.poison_immune
On=@hit Src.poison_immune
on=@spelleffect IF
(==20) // poison src.emote see Имя вашего монстра resist posion
RETURN 1 ELSEIF (==39) //Poison Field src.emote see Имя
вашего монстра resist posion RETURN 1 return 0 endif
[function poison_immune] IF
((&STATF_Poisoned)==STATF_Poisoned)
SRC.FLAGS=&~STATF_Poisoned SRC.SPELLEFFECT=s_cure
1000 SRC.EMOTE=resist poison ENDIF
Вешайте это на любое
существо и у него будет иммунитет к поизону
16.Объекты
SRC Для евента @dclick Src, покажет кто нажал. Для евента
@damage Src, покажет кого бьют. Все евенты (события) имеют SRC за
исключением @TIMER.
ACT ACT обозначает прошлый совершавший
действие предмет
TARG Цель
CONT Допустим, мемори
предмет хочет отнять евент у чара на котором данный мемори предмет одет.
Получится, что мемори отнимет так: CONT.EVENTS=-e_event В целом
CONT это контейнер объекта
TOROBJ Если предмет находится в
контейнере или еще в нескольких, то применяйте TOROBJ
SERV
Используется админами например, чтобы узнать имя сервера введите
.SERV.SERVNAME
LINK Ссылка на объект
SECTOR Весь
мир Британии разбит на 64*64 секторов. Это сектор в котором находится
плаер.
REGION Регион, в котором находится чар
ACCOUNT
Игровой аккаунт
UID.xxx Предмет с UID.xxx
FINDLAYER(смотри в spheredefs.scp layers) Предмет в слое
FINDID.”id” Первый попавшийся предмет с указанным ID в
бэкпаке.
FINDTYPE.”type” Первый попавшийся предмет с указанным
type в бэкпаке.
FINDCONT.xxx Ищет предмет в контейнерах в
вашем бэкпаке
17.Spheretable.scp
Этот скрипт читается
первым после sphere.ini. Этот скрипт важен для sphere т.к. в нем
присутствуют сами пути к скриптам!
[RESOURCES] добавляйте тут
свои новые Скрипты // sphere.ini and spheretable.scp are automatic.
// All the other scripts we want to load. spherebook.scp
sphereevents.scp spheredefs.scp spheredialog.scp
spherehelp.scp sphereresources.scp sphereitemb1.scp
sphereitemb2.scp sphereitemb3.scp sphereitemb4.scp
sphereitemb5.scp
[RESOURCES] сдесь вы можете распределить
свои скрипты по папкам например: /scripts/speech/ /scripts/defs/
/scripts/items/ /scripts/chars/ /scripts/ /scripts/custom/
[OBSCENE] слова которые не будут отображаться должным
образом
[PLEVEL X] команды, которые могут использовать
определенные ПЛЕВЕЛЫ
[STARTS] здесь можно сделать так, чтобы
при создании нового чара и нажатии на британии, как стартовом городе вы
оказались во Вронге или Деспайсе
[RUNES] Вы можете
отредактировать все слова, главное чтобы начинались они с буквы от А до Я
хмм…. От A до Z будет правильней
18. Spheretable_x В этом
скрипте перечислены все спеллы. Например: [Spell 16] // .cast 16
вызовет этот спелл! DEFNAME=s_strength NAME=Strength // имя
SOUND=snd_SPELL_STRENGTH // sound смотри spheredefs.scp RUNES=UM
//слова которые произносятся когда каст точнее первые буквы
CAST_TIME=2.0 // время, сколько ждешь
RESOURCES=i_reag_mandrake_root,i_reag_nightshade // эти реги нужны
RUNE_ITEM=i_rune_STRENGTH // кастаните на себя strength и .EDIT там
будет i_rune_STRENGTH !!! SCROLL_ITEM=i_scroll_STRENGTH // Scroll
этого спелла! FLAGS=SPELLFLAG_TARG_CHAR | SPELLFLAG_FX_TARG|
SPELLFLAG_GOOD // Flags смотри флаги EFFECT_ID=i_fx_BLESS_EFFECT //
это эффект спелла EFFECT=5,15 // сила еффекта
DURATION=2*60.0,3*60.0 // продолжительность MANAUSE=6 // маны
нужно SKILLREQ=MAGERY 20.0 // нужно магери чтобы каст
|