I WonT To BeLiVe
Домашняя ] Вверх ]
All what you wont, Last update 12.08.07.


Upload

In Da Forum форум сайта смотрим тут


Новости Сайта

12.08.07 Доработан дизайн.


03.07.07 Добавлены разделы.

02.07.07 Новый дизайн.

22.11.06 Обновление.

10.07.06 Форум упал.

20.06.06 Новый форум.

17.06.06 Форум удален.
 

10.06.06 Новый дизайн.


________________
Происшествия
________________
Предложения и пожелания,нашли неработающую ссылку?

Напишите об этом Администратору
Спасибо !!!
 

 
Простые скрипты

В данной статье, я приведу пример создания команды для ГМа. Данный скрипт позволит ГМу создать контейнер с ловушкой в котором через определенное будет появлятся лут.

ЗЫ Данный пример написан на скорую руку и предназначен больше для обучения, поэтому в нем могут быть ляпы. неоптимезированность и т.д., прошу отнестись к этому с пониманием.

И так начнем. Первым, на первом, надо с делать... А, купить пианину, хм, хотя стоп, зачем нам пианина? Первым наперво надо сделать команду, которая будет создавать контейнер. Вобщем пишем:

use uo;
use os;

Тут мы подключаем модули для использывания разного вида функций, анпример use uo - позволит нам использывать возможности вывода информации на экран, указание цели т.д.

include "include/client";
include "include/objtype";

тут мы подключаем модули написанные например конкретным пользывателем, в данном случае это стандартные инклуды идущие с поставко POL'а, найти их можно в ../scripts/include

Теперь самое главное мы написали, далее идет полет так сказать мысли.
program spawnchest(who, text) - начало нашего кода, text - это текст который будет введен после названия самой команды, в данном случае он будет обозначать уровень сложности сундука и номер ловушки.

var param := SplitWords(text) - назначаем парам сплющенные данные которые мы ввели
var lvl := cint(param[1]); передаем первой число, причем cint берет целое число.
var trap := cint(param[2]);

Уровень у нас будет от 1 до 10, а номер ловушки от 0 до 9, поэтому сделаем проверку на правильность ввода, а также приведем синтаксис написания

if((!lvl) or (lvl>10) or (lvl<1) and (!trap) or (trap>9))
SendSysMessage(who,"Usage is .spawnchest [1to10] [0to9]");
return;
endif
тоесть, если нет какого либо из числа мы прерываем выполнение.

Теперь чтоб ГМу было веселее, создадим мену в котоорм он сможет выбрать тип контейнера.

var boxmenu := CreateMenu("Select a chest type:");

теперь наполним его:

AddMenuItem(boxmenu, 0xe40,"metallchest");
AddMenuItem(boxmenu, 0xe41,"metallchest2");
AddMenuItem(boxmenu, 0xe7c,"silverchest");
AddMenuItem(boxmenu, 0xe80,"brassbox");
AddMenuItem(boxmenu, 0xe42,"woodchest");
AddMenuItem(boxmenu, 0xe43,"woodchest2");

Ну тут вроде как все просто, взяли графику сундука, добавили ее в наше мену и обозвали словом.

Теперь получим нужный нам выбранный сундук:

var selection := SelectMenuItem2(who, boxmenu)
if(!selection)
return;
endif

После того как выбрали сундук, попорсим указать место куда его поставить, для этого выведим саобщение и воспользуемся стандартной функцией для указания места:
SendSysMessage(who, "Select a place for chest creation");
var where := TargetCoordinates(who)

И опять проверка:
if(!where)
return;
endif

Теперь создадим выбранный нами сундук, на выбранном нами месте:
var chest := CreateItemAtLocation(where.x, where.y, where.z, selection[2],1); - тут вроде все просто.

if(!chest)
SendSysMessage(who, "Nu ne SHmogla I, ne SHmogla");
return;
endif

Теперь сделаем чтобы наш сундучек не уперли игроки:
chest.movable := 0; 0 - хрен сопрешь/1 - каждый может уволочить.

Теперь поставим на него силу ловушки, уровень, номер ловушки, время через которе в сундуке будет опять лут, для этого воспользуемся SetObjProperty в которой просто укажем на какой объект и какое свойство и его значение:

SetObjProperty(chest, "trap_str", cint((2*lvl)+9));
SetObjProperty(chest, "lvl", cint(lvl));
SetObjProperty(chest, "trap_type", cint(trap));
SetObjProperty(chest, "restock", ReadGameClock()+(600+RandomInt(300))); - ресток каждые 15 минут.

Теперь на созданный нами сундук повесим упоравляющим им скрипт, который мы создадим чуть позже:

chest.usescript := ":lootchest:lootchest"; - фаил будет лежать в ../pkg/lootchest/lootchest.elc

SendSysMessage("who, "The chest is set!");
endprogram

Все, пол дела сделано, откомпилируйте фаил и киньте его в ../scripts/textcmd/gm

Теперь приступим к созданию управляющего скрипта и назовем его lootchest:

use uo;
use os;
use cfgfile;

include "include/startequip";

program lootchest(character, chest)

var restock := GetObjproperty(chest, "restock");
var lvl := GetObjproperty(chest, "lvl");
var lootgroup;

В зависимости от уровня сундука выберим номер лута, номер лута передастся include/startequip, которая сформирует лут.

case cint(lvl)
1: lootgroup :=1;
2: lootgroup :=2;
тут я пропушу несколько строк. Номер лута определяет лут из ../config/loot.src (нужный вам номер сами подставите)
10: lootgroup :=16;
default: lootgroup :=1;
endcase
Смотрим, прошло ли воемя рестока, если да, то ставим ловушку на контейнер и создаем лут.

if(restock< ReadGameClock())
trap_dm(character,chest); - эта функция активирует ловушку
Makeloot(chest, lootgroup); - функция которая вызывается из include/startequipt

sleep(40); ждем 40 сорок секунд и перезапускаем скрипт.
chest.usescript := ":lootchest:lootchest";
else
SendSysMessage(character, "This box is enpty");
chest.userscript := это просьл покажет гамп открытого сундука.
sleep(40); ждем 40 сорок секунд и перезапускаем скрипт.
chest.usescript := ":lootchest:lootchest";
endif

function trap_dm(character, chest)

var trap := GetObjProperty(chest, "trap_type");
var trapstr := GetObjProperty(chest, "trap_str");
var lvl := GetObjProperty(chest, "lvl");
var skill := lvl+randomInt(40);
var thepoints ;= CInt(skill*2);

if(!CheckSkill(character, 24, skill, thepoints)) - если мастерства по удалению ловушки не хватает для открытия сундука, ловушка активируется. skill - сложность,thepoints -начисление очков в случае удачи.

Далее мы посмотрим как можно отброжать различные эффекты:

case(trap)
"1":
PlaySoundEffect(character, SFX_225);
var dmg := randomInt(5* cint(trapstr));
SendSysMessage(character, "You set off a needle trap!");
ApplyDamage(character, dmg); - наносим повреждение чару

"2":

PlaySoundEffect(character, SFX_226);
PrintTextAbovePrivate(character, "You have been poisoned", character); - можно выводить саобщения таким образом, она доже лучьше чем седсисмессадж.
PlayObjectCenteredEffect(character, FX_CURSE_EFFECT, 10,10); тут учавствуют сам эффект - для этого мы подрубили client.inc в нем порписан нужный номер который мы заменили на слово, потом идет скоросьт и поркрутка.
SetObjProperty(character,"ppoison_level", trapstr)); - травим персонажа
start_script("spells/poisondamage", character) - запускаем скрипт на отравление.

Я сново пропущу пару сторк

"4":
PlayMovingEffect(chest, character, FX_MAGIC_ARROW, 5, 1); эфект будет от сундука до чара, далее сам эффект, потом скоросьт и прокрутка.
PlaySoundEffect(character, SFX_SPELL_MAGIC_ARROW);
var dmg := randomInt(5* cint(trapstr));
ApplyDamage(character, dmg);
"5":
PlayLightingBoltEffect(character); - дфнный эффект только для молнии.

и т.д.
default: SendSysMessage(character," YOu narrowly avoid the trap!");
endcase
chest.usescript :="";

else
SendSysMessage(character," YOu remove trap!");
chest.usescript :="";
endif
endfunction

Ну вот и все, ведь правда не сложно?
Теперь дело за малым, создадим Pkg с именем lootchest
в нем создадим фаил pkg.cfg в котором укажем

version 1.0
Enable 1 - это самая важная строка ;)
Name lootchest - тоже важная
Maintainer Slayer
Email Slayer@dinfo.ru
; Все права принадлежат Middle-Earth

Также добавляем в этот пкдж наш фаил Lootchest и можно юзать.

Зы все работает ок, проверено на 094 и 095 версиях пола.
 

 


 

Новое из разделов:


Юмор:
Комментатор

 


Тюнинг:
Самое мощное авто

 


Web дизайн:
Хитрости

 


Мобильник:
Сервисные коды

 

 


История дня:

Звони по 0,01$


 

 
Hosted by uCoz