Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Function: Removeitem, Вайпаем предмет в мире
d`ArcZeal
сообщение 26.7.2011, 13:02
Сообщение #1


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Довольно часто приходится встречать ситуацию, когда надо удалить определенную вещь в мире.
DEFNAME мы знаем, а вот вручную тысячи предметов удалять не хотим, а дедовский способ удалять скрипт самой вещи и затем запускать сервер слишком нубский, и потому нам на помощь приходит функция:

Код
[FUNCTION REMOVEITEM]
FORINSTANCES <ARGS>
REMOVE
SERV.LOG <ARGS>, <AMOUNT> has been removed.
ENDFOR

Пример: .removeitem i_gold (Удалит все золото в мире).

Если надо удалить предмет без дефнейма.
Код

[FUNCTION REMOVEITEM_2]
FORITEMS <SERV.ITEMS>
IF <BASEID>==<ARGS>
REMOVE
ENDIF
ENDFOR

Пример для стены 026: .removeitem_2 026

Сообщение отредактировал d`ArcZeal - 27.7.2011, 15:20


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mirage
сообщение 27.7.2011, 14:03
Сообщение #2


*******

Группа: Пользователи
Наличность: 0
Из: Иваново
Пользователь №: 13.089
Возраст: 35



в sphere.ini есть строка
Цитата
// Limit the number of cycles the while/for loop can proceed. Setting this to
// zero disables the limitation
MaxLoopTimes=5000

при таком значении если потребуется удалить более 4999 предметов придется запускать несколько раз. Либо увеличить значение. На старом сейве моего сервера где было более 1КК предметов в мире пришлось запускать .removeitem i_dagger 19 раз чтобы он наконец показал что все удалил (IMG:style_emoticons/default/laugh.gif)

Код

[FUNCTION REMOVEITEM]
FORINSTANCES <ARGS>
  REMOVE
  local.total1 += <amount>
ENDFOR
SRC.sysmessage @0487 Удалено <dlocal.total1>  <ARGS> из мира.
так меньше флуда когда надо чтото большое удалить

Во втором скрипте буква R улетела вниз.


--------------------
Изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 27.7.2011, 15:21
Сообщение #3


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Юзаем MaxLoopTimes=0 и не знаем проблем


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 27.7.2011, 15:42
Сообщение #4


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3057
Пользователь №: 7.166



Для чего изначально была сделана эта опция?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Wap
сообщение 27.7.2011, 15:45
Сообщение #5


**********

Администратор Форума
Сообщений: 3.003
Регистрация: 22.12.2006
Группа: Администраторы
Наличность: 31652
Пользователь №: 9.227



Цитата(Soteric @ 27.7.2011, 13:42) *

Для чего изначально была сделана эта опция?
Думаю, для защиты от зацикливания.

Сообщение отредактировал wap - 27.7.2011, 15:46


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mirage
сообщение 27.7.2011, 19:58
Сообщение #6


*******

Группа: Пользователи
Наличность: 0
Из: Иваново
Пользователь №: 13.089
Возраст: 35



Цитата(Ozzy Osbourne @ 27.7.2011, 16:21) *

Юзаем MaxLoopTimes=0 и не знаем проблем

При нуле сфера может умереть - придется перезагружать. Хотя я фиг знает как надо извратиться чтобы специально прописать бесконечный цикл. Если только опечататься. Но ИМХО все таки лучше поставить просто большое число. 20000-50000. И то для миров с наполнением в 10К предметов этого уже слишком много (IMG:style_emoticons/default/smile.gif)

Хотя нет, вру. Поставил у себя 50000 и при удалении 21К луков сфера умерла на 4 минуты пока не ресинкнул, перезагрузил и при 0 удалил теже луки - полсекунды.


--------------------
Изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 27.7.2011, 21:23
Сообщение #7


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Цитата(Mirage @ 27.7.2011, 19:58) *

При нуле сфера может умереть - придется перезагружать. Хотя я фиг знает как надо извратиться чтобы специально прописать бесконечный цикл. Если только опечататься. Но ИМХО все таки лучше поставить просто большое число. 20000-50000. И то для миров с наполнением в 10К предметов этого уже слишком много (IMG:style_emoticons/default/smile.gif)

Хотя нет, вру. Поставил у себя 50000 и при удалении 21К луков сфера умерла на 4 минуты пока не ресинкнул, перезагрузил и при 0 удалил теже луки - полсекунды.


Я удалял и 60 лямов руды/логов/рыбы, и вот недавно все предметы с мира (оружие армы и тп). Сфера зависала не больше чем на 10 минут, потом нормально дальше работала. А то что эта фишка как "защита от ду-ра-ка" которые предомеренно рекурсии пишут - ну так это их дело) Я точно знаю что ненапишу такой лабуды что б зациклить приметивный for на приметивном языке сферы) А поставить там 20к и тп - все равно в случае чего - убьет сервак, т.к. на живом сервере некто не сообразит сразу в чем дело и будет в любом случае перезагружать т.к. консоль сферы уйдет в офф полюбому.


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mirage
сообщение 28.7.2011, 14:58
Сообщение #8


*******

Группа: Пользователи
Наличность: 0
Из: Иваново
Пользователь №: 13.089
Возраст: 35



Во злобная штука:
Код
[FUNCTION rall]
SRC.sysmessage @0487 Ой тля!! ВАЙП!!!
FORITEMS 50000
IF !(<BASEID>==<ARGS>)
REMOVE
local.total1 += <amount>
ENDIF
ENDFOR
SRC.sysmessage @0487 Удалено ВСЕ Кроме <ARGS> из мира.

Удобно делать пустые миры с одними респами (IMG:style_emoticons/default/smile.gif) Останется только то что на персонажах и мобах.

Научите меня <вырезано анти-матом>а как удалить предмет по прицелу, а не прописывать каждый раз.


--------------------
Изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 28.7.2011, 22:33
Сообщение #9


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Юзаешь функцию ,вылетает таргет. С таргета указываешь итем, сервер запоминает его дефнейм как локал внеременный. И идет функция как ремувитем, только в замен аргс будет локал, а локал у нас и равен дефнейму предмета.

Сообщение отредактировал d`ArcZeal - 28.7.2011, 22:33


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 27.4.2024, 19:56
Designed by Nickostyle