velmir
offline
Опыт:
8,257Активность: |
баг, с пополнением итемов на рынке
Опшем суть в чем, была создана система добавления предметов на рынок, она работает как часики, ну суть системы добавлять в определеный магазин определеные предметы в определеном количестве., саму систему можна спростить до 1й стандартной строчки, которыя не вызывает быгов.
где
udg_ItemPostavkiTip[y0] - в масиве забиты типы итемов udg_IttemZariadInTreid[y0] - в масиве забитj количество итемов что поступает в даный магазин, напомню здесь в се работает стабильно, все послупает, и все видно.... ЗЫ. данный пример это не сама система, но она рабочья =) Строчка выше дала в магазин, C итем А, в зарядом. 5, но стоит нам купить этот итем, хотябы 1н раз и он пропадает с рынка, нам же поступает в инвентарь аналогичный итем с зарядом 1.
Может решение я и нубское придумал но всеже есть что есть.. дальше создал тригер который ловит ету продажу, и онимает от переменой, заряда -1, тобиш выходит что с магазина мы постоянно покупаем по 1му заряду(екземпляру ) предмета, а в магазине их ище остается (ну в нашем примере 4) Итак в чем же проблема?
Тестируя данную ерунду самител баг, которых просто хз как прававить, в слечае если при покупке числ зарядов покупаймого предмета менше числа зарядов 1итема в магазине, то удаляется не продаваймый а 1й итем в магазине, к томуже заряды на продаваймого ставятся как в 1го, таким образом портится рыночная модель. Помогите плз исправить данный баг
Высылаю код трига которым я вертаю в магазин итемы и даю им лвл...
ЗЫ Баг Не в системе описаной выше в коде что ниже! ((код jass
function Trig_TreidZariadItem_Actions takes nothing returns nothing
integer i=0,L loop цикл для сравниния продаваймый итемов,udg_ItIntG[0] максим кол всех итемов, i++ exitwhen i>=udg_ItIntG[0] or udg_IttemZariadInTreid[i]==0 or udg_ItP1[i]==0 or udg_ItP[i]==null if GetItemTypeId(GetSoldItem()) == udg_ItP1[i] and GetSellingUnit()==udg_ItP[i]{ проверка на то находится нужный итем в нужном магазине udg_IttemZariadInTreid[i]-- уменшаем заряд L=udg_IttemZariadInTreid[i] в принцепе можна и без этой строчки,.. if L>=1{ call AddItemToStock(GetSellingUnit(), udg_ItP1[i], L, L) добавляем предмет на вынок, если переменая с его зарядами больше 1 }elseif L<=0{ call RemoveItemFromStock(GetSellingUnit() ,udg_ItP1[i]) удаляем итем если менше, чистим все переменые udg_IttemZariadInTreid[i]=0 udg_ItP1[i]=0 udg_ItP[i]=null } i=udg_ItIntG[0] } endloop i=0 L=0 endfunction function InitTrig_TreidZariadItem takes nothing returns nothing set gg_trg_TreidZariadItem = CreateTrigger( ) local integer index set index = 0 loop call TriggerRegisterPlayerUnitEvent(gg_trg_TreidZariadItem, Player(index), EVENT_PLAYER_UNIT_SELL_ITEM, null) set index = index + 1 exitwhen index == bj_MAX_PLAYER_SLOTS endloop call TriggerAddAction( gg_trg_TreidZariadItem, function Trig_TreidZariadItem_Actions ) endfunction )) [+] 1 пункт от Кет: 1.2.1
Отредактировано velmir, 22.02.2015 в 13:14. |
19.02.2015, 22:24 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JaBeN_Симфер
offline
Опыт:
20,050Активность: |
Нужно хранить массив всех продаваемых предметов в магазине с количеством каждого из них, и при покупке удалять все и заного наполнять из этого массива. |
20.02.2015, 11:28 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
velmir
offline
Опыт:
8,257Активность: |
JaBeN_Симфер:
наверно ты невнимательно прочитал, я так и сделал, даже код етого выставил, но именно в этом баг есть( |
20.02.2015, 11:38 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Киря
offline
Опыт:
769Активность: |
velmir:
Он абсолютно правильно сказал. Лови событием покупки предмета и храни все предметы и их заряды для конкретного магазина. После покупки определяй магазин, отнимай заряд, количество которых также хранится для каждого конкретного предмета в конкретном магазине, а затем очищай полностью магазин.и обновляй список предметов и их зарядов.
С редактором давно не работал, да и с такими функциями тоже, но непонятно почему она удаляет предмет из лавки.
Совет: учись оформлять код красиво, правильно и точно называть переменные. Читать невозможно. Не в обиду. |
21.02.2015, 22:11 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
velmir
offline
Опыт:
8,257Активность: |
да.. или наверно я нетак что то написал в самом вопросе.. я рашил етот проблему, именно таким путем, как вы все мне придлагаете, но в решение возник баг и именно этот баг я и спрашиваю как править |
22.02.2015, 00:12 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Киря
offline
Опыт:
769Активность: |
Откомментируй или опиши построчно код выше, так как очень тяжело что-либо понять. |
22.02.2015, 03:08 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
velmir
offline
Опыт:
8,257Активность: |
Киря:
как я уже говорил, я сразу понял что проблему с пропаданием итемов с ранков нада решать так как и я и все предлагали, даный код это моя реализация, того что мы все предлагали, но в нем проблема, при продаже любого предмета, происходит не правельное переписивание зарядов, при условие продажи и что число зарядов предмета что мы продаём менше числа зарядов 1го впидмета в магазине, с магазина удаляется не продаваймый предмет а 1й, болие того число зарядов продаваймого стает как число зарядов 1.. теперь о коментах кода я в 1й пост сча добавлю |
22.02.2015, 13:06 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Киря
offline
Опыт:
769Активность: |
Задача не слишком сложная. Не понимаю зачем лишние ветвления с переменной L?
вынеси все в 3 отдельные функции: обработка покупки, очистка магазина, и обновление его предметов.
Для конкретного магазина уменьшить заряд предмета, количество которых также хранишь в отдельном массиве. Если зарядов осталось 0 - присвой переменной предмета значение "нет предмета" или как там в варике.
Далее очисси магазин от всех предметов, не конкретного, а циклом от всех.
передобавь все предметы циклом пропуская те, у которых нет зарядов.
то, что у тебя не работает, указывает на две возможные проблемы: ошибки в коде (90%) или есть еще вариант выставить всем предметам в ро нулевые значения позиций х и у, чтоб предметы добавлялись по порядку. Но я не уверен |
22.02.2015, 14:00 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
моя религия запрещает отладочные сообщения
сенсей сказал что отладка это грех, в 3.14 раз хуже рукоблудия, так что я лучше 3 раза чем добавлять отладку а лучше 3 раза и запосчу тему на хгм, там добрые доноры которые за меня сделают всё. |
22.02.2015, 15:16 | #9
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
JaBeN_Симфер
offline
Опыт:
20,050Активность: |
Для динамического магазина не нужно, оно не используется. Предметы получают порядок при первом появлении в магазине. |
22.02.2015, 15:17 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
velmir
offline
Опыт:
8,257Активность: |
Киря:
я в коментах написал что ее не нада, систему не оптимизировал.. Киря:
да я понял твою идею, нада будет попробывать, в моэм случае я сначала, икал предмет а тогда выяснял проблемы с ним, но можна и по твоему. velmir добавил: Киря: это однозначно она, но используя отладку, с выведением номера масива итема все работает, как нада, но моменда пока заряды продаваймого не <=зарядам 1го. |
22.02.2015, 16:01 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|