Город Джунов

Полная версия: Команда блок
Вы просматриваете упрощённую версию нашего контента. Просмотр полной версии с полным форматированием.
In the first, I apologize for my language Russia, I use a translator and Google for the text, but I think that I speak better English than Rusian.

I have a question -> How can I create a script (* scrptt *) (scenario card) to use commands godmode (0,1)

For example, I want that when a player use this godmode (0,1) command your character will die.
When he uses his body code GodMode die.

I try to use it for this example:

Код:
Script #Follow#1
(
 if
 (
   Godmode(0,1)
 )
 then
 (
   KillScript(  )
   KillUnit( getleader() )
 )
)


But it is not working. : (: (
Can you tell me what I'm doing wrong or how to write a script like this?
Sorry, but translated text is totally unusable. :unsure:
Can you please write in english along with translation.
Anyone can use translation to understand your question.
Боюсь, что простого способа узнать, включен ли режим бога, скриптами нельзя.
Ты можешь раз в секунду или чаще отключать режим бога:
Код:
Script TurnOffGodMode // Turn off god mode every 1/3 second
(
 if
 (
 )
 then
 (
   KillScript()
   Sleep(5)
   GodMode(0, 0)
   TurnOffGodMode()
 )
)
Либо, например, проверять, не убит ли какой-то юнит, который не может быть убит обычным способом по сценарию. Т.е. допустим у нас есть зеленый троль, которого игрок не может и не должен убивать. Если же он был убит, значит у игрока включен режим бога, и потому его надо наказать.
Код:
Script IsUnitGod // Kill leader if he killed some very difficult unit
(
 if
 (
   IsDead(SomethingQuestUnit)
 )
 then
 (
   KillScript()
   Sleep(2)
   GodMode(0, 0)
   KillUnit(GetLeader())
 )
)
Насчет твоего примера, у тебя ошибка в том, что GodMode - это процедура, которая устанавливает значение. С помощью нее нельзя узнать, включен ли режим бога или нет.
Please let us know if you need help in translation the answer.
Огромное спасибо Demoth вы великий помочь мне Smile) Smile) Smile) Я думаю, что это было Smile. Я постараюсь это.

Я говорю Вери плохо на английском языке Jet я лучше использовать Россию с помощью переводчика

У меня есть также 2 вопрос - если вы знаете, если я могу спросить.



1)

Я хочу использовать некоторые * Сценарий * для всех игроков (не только для getleader (), но для для getleader () + другие игроки в сервере)

Например, когда некоторые игроки (getleader () или игрок 2 - своему другу или игрока 3) будет находиться в районе "25", то заклинание работы по игроку, который находиться в районе 25

например

Код:
Script Float#2
(
 if
 (
   Isinarea 25 ( PLAYER )
 )
 then
 (
   KillScript(  )
   CastSpellUnit("slow{d2}", 310,146, // Игрок, который находится в районе - PLAYER // )
 )
)
-> как я делаю что то, что заклинание в код будет работать на месте, а не для ОБЪЕКТ?



2)
Другой вопрос:

Я хочу, чтобы заклинания работали не на объекте, а в области





как я делаю что то, что заклинание в код будет работать на месте, а не для ОБЪЕКТ


* scriptt * например

Код:
Script Float#3
(
 if
 (
   IsDead( GetObjectByName( "Merc3" )  )
 )
 then
 (
   KillScript(  )
   CastSpellUnit("acid_fog{d2}", 310,146,ОБЪЕКТ)
 )
)

Например заклинание:

CastSpellUnit("acid_fog{d2}", 310,146, getX (45) , getY (12) )

и я хочу, что объект не будет возражать, но будет указывать х и у на карте
как это



как сделать так, чтобы объект х был заменен г и у координаты?
Avaroscient, все очень просто. Тебе нужно использовать процедуру
Код:
CastSpellPoint( constSpell : string , x1 : float , y1 : float , x2 : float , у2 : float )
// x1, y1 - точка где появляется заклинание, x2, y2 - точка куда оно кастуется
Avaroscient,Понедельник, 15 Октября 2012, 21:20 Написал:Isinarea 25 ( PLAYER )
Это не корректный вызов функции. Функция IsInArea имеет формат
Код:
IsInArea( idArea : float , x : float , y : float ) : float
И потому правильно писать:
Код:
IsInArea(25, GetX(PLAYER), GetY(PLAYER))
----------------
P.S. Список скриптовых функций ты можешь посмотреть например здесь.
Avaroscient, ваше сообщение чрезвычайно трудно понять из-за плохого перевода, но я все же постараюсь ответить.
1) Как я понял, вам требуется применить на всех игроков, находящихся в зоне 25, некоторое заклинание.
Для того, чтобы получше объяснить вам, как нужно это сделать, приведу пример скрипта с комментариями.
Скрипт написан целиком, поэтому, если будете его использовать, то будьте аккуратны, перенося его к себе.
Код:
GlobalVars(
//Все игроки, которые играют на сервере, автоматически попадают в группу Heroes.
 Heroes : group,
 i : object // переменная-счетчик. Нужна для цикла ForIf и Any. Смотри ниже.
)
// #CastSpellOnAllPlayersInArea - длинное название для наглядности.
DeclareScript #CastSpellOnAllPlayersInArea()
Script #CastSpellOnAllPlayersInArea
(
 if
 (
// Any(объект-счетчик, группа, условие) : float
// функция Any возвращает значение ИСТИНА,
// если хотя бы для одного существа из группы выполнено условие.
// Иначе, она возвращает ЛОЖЬ.
// Таким образом, тело скрипта выполнится, тогда и только тогда,
// когда хотя бы один из игроков будет находиться в зоне 25.
   Any(i, Heroes, IsInArea(25, GetX(i), GetY(i)))
 )
 then
 (
   KillScript()
   Sleep(2)
   // Цикл ForIf(объект-счетчик, группа, условие) ( ТЕЛО ЦИКЛА )
   // Цикл переберет всех существ из группы Heroes(то есть всех игроков),
   // для которых выполнено условие IsInArea(25, GetX(i), GetY(i)), то есть существо из группы игроков находящиеся в зоне 25.
   ForIf(i, Heroes, IsInArea(25, GetX(i), GetY(i)))
   (
     CastSpellUnit("slow{d2}", 310,146, i) // Применяем заклинание для этого существа
   )
   
   #CastSpellOnAllPlayersInArea() // Запускаем проверку по-новой.
 )
)

WorldScript
(
 // Вызываем функцию. Просто для примера. Вы не обязаны вызывать ее именно здесь.
 #CastSpellOnAllPlayersInArea()
)
Не могу гарантировать, что скрипт на 100% корректен - я мог где-то опечататься.

2)
"bz10k" - это ключевое название карты. Оно указывается в map.txt(для компании) и в map-lmp.txt(для сетевой игры).
Должен предупредить, что команда LeaveToZone в сетевой игре работает не корректно - она перенесет на другую карту лишь того игрока, кто создал сервер, все остальные игроки на сервере потеряют соединение(у них случиться ошибка, как если бы сервер выключился).
Что насчет map.txt и map-lmp.txt, нужно в любой из них(в сетевой игре, корректно сработают оба варианта. Надежнее всего, конечно же map.txt. Проведите эксперимент. Smile ) добавить запись о "новой локации". Например в таком стиле:
Код:
#zone gz13k_mp ingos game
#res
zone13 zone13-lmp
#maps
14 10
zone13map zone13quest
#figure
ingm313
#position
0 0 0
#weather
snow
#sky
normal
Описание формата файла map.txt можно найти в оригинальном map.txt.
Код:
## format:
##
## #zone zone_name allod_name type // types can be: game, brief, edge
## #res
## MprFile MobFile                 // files to load
## #maps
## Xsize Ysize                     // size in sectors
## MinimapTexture ObjTexture       // textures to load: for minimap and objectives screen
## #figure
## FigureName                      // for single player only: figure to load
## #position
## x y z                           // for single player only: position on global map
## #weather
## none | rain | snow              // weather type in this zone. default: rain
## #sky
## normal | cave                   // sky type in this zone. default: normal
## #exit 1
## neighbour_zone_name NExit       // neighbour zone for this exit and corresponding exit there
## #deploy
## x1 y1 x2 y2                     // deploy rectangle for this exit
## #remove
## x1 y1 x2 y2                     // remove rectangle for this exit
## #passtime
## PassTime                        // for single player only: default pass time
## #view
## Angle                           // camera rotate angle of this entrance
## #exit 2
## ...
##
## #quest quest_name
## x y z                           // for single player only: position on global map
##
################################################
Вот оно.
Надеюсь это вам хоть как-то поможет. Smile
3) К сожалению, я не совсем понял, о чем идет речь. Постарайтесь описать подробнее. (Перевод google может сработать лучше, если оригинальный текст не будет содержать ошибок Smile )
Удачи!
So if is here a topic about scripting in Evil Island, I have a few questions.

1)Is there any possibility to return value in custom script ? Smile Something like return in c/c++.

2)Is there possibility to create monsters in script?
Joogi,
1) If you mean script construction
Код:
Script #SomeScript(
 if
 (
   ...
 )
 then
 (
   ...
 )
 if
 ...
)
then no, script can return value only with global var(defined in GlobalVars construction in .mob file) in script or global game var(use GSSetVar, GSGetVar).
2) There are 2 ways to make it:
- With AddMob("mob_file_name.mob") script procedure. But this way requires for each monster's pack its call of AddMob.
- With AddUnitToServer, this way is the worst way. Because for each mob its requires its call of AddUnitToServer and it correctly works only with humans or orc's.
Большое вам спасибо за вашу помощь Demoth

Большую помощь, спасибо
Thanks Demoth its what I wanted to know.