Ответ на
Вопросы по форту (подскажите) [Balancer#09.01.07 12:42]Megawolf> Еще бы сделать другую команду, с радиусом
Там код у команды - примитивнейший:
code forth
forth:: drop-avoid ( item count player -- {items-list} )
new-list rot ( item player {list} count )
1 max 0 ?do
( item player {list} )
>r >r
dup 1 r@ r@ coords@ 100 + 100 coords-randomize item_spawn
( item_id new_item_obj; R: player list )
r> swap r@ list+ r>
loop nip nip
;
forth:: admin_idrop ( -- \ item_id [count] )
\ Drop <count> items with <item_id> around GM
"drop" check-access
2 args int 1 max
swap int
swap
player@
drop-avoid
drop
;
Т.е., скажем, пишем:
code forth
forth:: drop-in-range (( item count player radius -- {items-list} ))
new-list
count 1 max 0 ?do
item 1
player
player coords@ 100 + radius coords-randomize
item_spawn
over list+
loop
;
forth:: admin_irdrop ( -- \ item_id [count] [radius] )
\ Drop <count> items with <item_id> around GM in range <radius>
"drop" check-access
2 args
int 10 min 10000 max >r
int 1 max
swap int
swap
self r> drop-in-range
drop
;
Код с 90% вероятностью не рабочий, так как для проверки нужно клиент запускать. Скорее, как демонстратор, что нужно править (заодно переписан с использованием новых возможностей - скажем,
локальных переменных-аргументов слова)