Рандомный Дроп по координатам

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
Как сделать рандомный дроп из всех возможных предметов указанный по этим же координатам?
вот код с определённым предметом в указанной точке
Код:
local newItem = CreateItem("item_potion", nil, nil)
newItem:SetPurchaseTime(0)
local spawnPoint = Vector(7.80176,327.14,128.367)
local destination = Vector(7.80176,327.14,128.367)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
 
Последнее редактирование модератором:

tasman208

Активный
30 Мар 2016
128
0
Попробуй так
Код:
local spawnPoint = Vector(7.80176,327.14,128.367)
local chance = math.random(2)
if chance == 1 then
local newItem = CreateItem("item_potion", nil, nil)
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
elseif chance == 2 then
local newItem = CreateItem("item_dagger", nil, nil)
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
end
В
Код:
math.random(2)
2 Значит всего может выпасть 1 из 2ух предметов.
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Можешь сделать гораздо проще.

Или более элегантно для компилятора через
Код:
 RollPercentage(80) -- выдаст true если шанс выпадения 80% сработает
 

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
[quote author=Илья link=topic=862.msg3929#msg3929 date=1462013144]
Можешь сделать гораздо проще.

Или более элегантно для компилятора через
Код:
 RollPercentage(80) -- выдаст true если шанс выпадения 80% сработает
[/quote] Может быть и проще но не понятный вариант
 

tasman208

Активный
30 Мар 2016
128
0
[quote author=Илья link=topic=862.msg3929#msg3929 date=1462013144]
Или более элегантно для компилятора через
Код:
 RollPercentage(80) -- выдаст true если шанс выпадения 80% сработает
[/quote]
Я думал об этом, но так и не смог представить себе способ с этим, т.к. нельзя сделать переменную на основе RollPercentage
 

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
[quote author=tasman208 link=topic=862.msg3925#msg3925 date=1462006888]
Попробуй так
Код:
local spawnPoint = Vector(7.80176,327.14,128.367)
local chance = math.random(2)
if chance == 1 then
local newItem = CreateItem("item_potion", nil, nil)
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
elseif chance == 2 then
local newItem = CreateItem("item_dagger", nil, nil)
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
end
В
Код:
math.random(2)
2 Значит всего может выпасть 1 из 2ух предметов.
[/quote] Можно ли как нибудь записать две координаты для предметов чтобы сэкономить код (два разных вектора)
 
Последнее редактирование модератором:

tasman208

Активный
30 Мар 2016
128
0
Код:
local spawnPoint = Vector(7.80176,327.14,128.367)
local spawnPoint2 = Vector(7.80176,327.14,128.367)
local chance = math.random(2)
if chance == 1 then
local newItem = CreateItem("item_potion", nil, nil)
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
elseif chance == 2 then
local newItem = CreateItem("item_dagger", nil, nil)
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
end
 
Последнее редактирование модератором:

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
я так пробовал уже, не работает он дропает только нижний вектор
 

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
Код:
local spawn2Point = Vector(256,-1536,160)
local spawnPoint = Vector(-128,-1600,160) 
local chance = math.random(2)
if chance == 1 then
local newItem = CreateItem("item_potion", nil, nil)
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
local drop = дроп для другого вектора 
elseif chance == 2 then
local newItem = CreateItem("item_small", nil, nil)
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawn2Point, newItem)
local drop = дроп для другого вектора 
end
всё сделал уже, спасибо что помог +rep ещё (нужно было дописать правильное значение для дропа) (можно тему закрыть, решено.)
 
Последнее редактирование модератором:

tasman208

Активный
30 Мар 2016
128
0
На самом деле для двух координат нужно делать 2 кода
Код:
local newItem = CreateItem("item_potion", nil, nil)
local newItem2 = CreateItem("item_small", nil, nil)
local spawnPoint = Vector(-128,-1600,160)
local spawn2Point = Vector(256,-1536,160)
local chance = math.random(2)
local chance2 = math.random(2)
if chance == 1 then
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
elseif chance == 2 then
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem2)
end
if chance2 == 1 then
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawn2Point, newItem)
elseif chance2 == 2 then
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawn2Point, newItem2)
end
 
Последнее редактирование модератором:

CryDeS

Друзья CG
14 Июл 2015
1,210
11
[quote author=tasman208 link=topic=862.msg3940#msg3940 date=1462020355]
На самом деле для двух координат нужно делать 2 кода
Код:
local newItem = CreateItem("item_potion", nil, nil)
local newItem2 = CreateItem("item_small", nil, nil)
local spawnPoint = Vector(-128,-1600,160)
local spawn2Point = Vector(256,-1536,160)
local chance = math.random(2)
local chance2 = math.random(2)
if chance == 1 then
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem)
elseif chance == 2 then
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawnPoint, newItem2)
end
if chance2 == 1 then
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawn2Point, newItem)
elseif chance2 == 2 then
newItem:SetPurchaseTime(0)
local drop = CreateItemOnPositionSync(spawn2Point, newItem2)
end
[/quote]
Ну можно же проще
Код:
local item_list = { [1] = "item_potion", [2] = "item_small"};
local vector_list = { [1] = Vector(-128, -1600, 160), [2] = Vector(256, -1536,160) };
local item_number = math.random(2);
local item = CreateItem(item_list[item_number], nil, nil);
CreateItemOnPositionSync(vector_list[item_number], item);
 
Последнее редактирование модератором:

tasman208

Активный
30 Мар 2016
128
0
А разве не странно, что будут появляться одинаковые предметы?
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
А разве не странно, что будут появляться одинаковые предметы?
Если надо спавн всех айтемов то:
Код:
local item_list = { [1] = "item_potion", [2] = "item_small"};
local vector_list = { [1] = Vector(-128, -1600, 160), [2] = Vector(256, -1536,160) };
for i = 1, #item_list do
 local item = CreateItem(item_list[i], nil, nil);
 CreateItemOnPositionSync(vector_list[i], item);
end
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Хорошо что Cry зашел сюда раньше меня ;D

А разве не странно, что будут появляться одинаковые предметы?

Нее, там не будет одинаковых, будет как раз таки одна из двух.
А во втором его варианте будут дропаться обе (естественно без рандома)
 
Последнее редактирование модератором:

tasman208

Активный
30 Мар 2016
128
0
Хорошо что Cry зашел сюда раньше меня ;D

Нее, там не будет одинаковых, будет как раз таки одна из двух.
А во втором его варианте будут дропаться обе (естественно без рандома)
Насколько я понял, нужны 2 точки, и на каждой спавнится какой то предмет. И получится так, что предметы всегда будут спавниться одинаковые
 
Последнее редактирование модератором:

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Ну если надо на рандомных векторах то
Код:
local item_list = { [1] = "item_potion", [2] = "item_small"};
local vector_list = { [1] = Vector(-128, -1600, 160), [2] = Vector(256, -1536,160) };
for i = 1, #item_list do
 local item = CreateItem(item_list[i], nil, nil);
 CreateItemOnPositionSync(vector_list[math.random(#vector_list)], item);
end
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Позволь мне тоже поковеркать твой код))
Случай одной рандомной шмотки в одной рандомной точке.

Код:
local item_list = { [1] = "item_potion", [2] = "item_small"};
local vector_list = { [1] = Vector(-128, -1600, 160), [2] = Vector(256, -1536,160) };
local item = CreateItem(item_list[math.random(#item_list)], nil, nil);
CreateItemOnPositionSync(vector_list[math.random(#vector_list)], item);
 
Последнее редактирование модератором:

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
[quote author=CryDeS link=topic=862.msg3955#msg3955 date=1462086768]
Ну если надо на рандомных векторах то
Код:
local item_list = { [1] = "item_potion", [2] = "item_small"};
local vector_list = { [1] = Vector(-128, -1600, 160), [2] = Vector(256, -1536,160) };
for i = 1, #item_list do
 local item = CreateItem(item_list[i], nil, nil);
 CreateItemOnPositionSync(vector_list[math.random(#vector_list)], item);
end
[/quote] Сделал как ты показал но у меня не кешируется дропнутые предметы приходится прописывть script_reload чтобы всё заработало как это исправить ? это мб из-за большого кол-во векторов так как у меня их 38 и 12 итемов
 
Последнее редактирование модератором:
Реклама: