Brain Dump

привет :)
 MOCHET [7] 
19.07.2018 06:06
 0просмотров 1 0

stats.py

v1.0.2

import csv
import sys
import collections

if len(sys.argv) < 2:
    sys.exit(1)

csv_file = sys.argv[1] # "simulation3.csv" #"data.csv"
data = []
cards_on_hands = []
cards_last_seen = [0] * 102
diffs = []

with open(csv_file) as f:
    csv_reader = csv.reader(f)
    data = [r for r in csv_reader]

c_done = False
b_done = False

# collect initial cards
for row in data:
    # ['1', '6', '71', '0', 'turn', '6-54-37-94-82-96', '71-54-37-94-82-96', 'c']
    if row[7] == "c" and not c_done:
        cards_on_hands += map(int, row[5].split("-"))
        c_done = True
    elif row[7] == "b" and not b_done:
        cards_on_hands += map(int, row[5].split("-"))
        b_done = True
    if c_done and b_done:
        break

for row in data:
    
    turn_now = int(row[0]) # current turn
    c_out    = int(row[1]) # card we play now
    c_in     = int(row[2]) # new card we get after we play c_out
    
    # end game
    if c_in == -1:
        break
    
    # update last seen timer for my cards (c_out inclusive)
    for c in cards_on_hands:
        cards_last_seen[c] = turn_now
    
    # replace old card with new one on hands
    position = cards_on_hands.index(c_out)
    cards_on_hands[position] = c_in
    
    # when was c_in seen last time?
    c_in_seen_last = cards_last_seen[c_in]
    
    if c_in_seen_last != 0:
        diffs.append(turn_now - c_in_seen_last)

d = sorted(diffs)
counter=collections.Counter(d)

for num, freq in zip(counter.keys(), counter.values()):
    print "%s\t%s" % (num, freq)
 MOCHET [7] 
19.07.2018 05:31
 0просмотров 3 0

cooldown-simulation.py

v1.0.1

import sys
import random

pool = range(102)
cooldown = []
player1 = []
player2 = []

COOLDOWN_VALUE = 45+1
POSITIONS = range(6)

def give_card(arr):
    c = random.choice(arr)
    p = arr.index(c)
    c = arr.pop(i)
    return arr, c

def cooldown_handler(c):
    global pool
    if c != -1:
        cooldown.append(c)
    if len(cooldown) == COOLDOWN_VALUE:
        _c = cooldown.pop(0)
        pool.append(_c)
    i = random.randint(0, len(pool)-1)
    _c = pool.pop(i)
    return _c

for i in range(6):
    c = cooldown_handler(-1)
    player1.append(c)
    c = cooldown_handler(-1)
    player2.append(c)

last_player = "b"

for turn in range(1, 2502):
    c_new = -1
    c_out = -1
    cards_new = ""
    cards_old = ""
    pos = -1
    action = "turn"
    if last_player == "b":
        cards_old = "-".join(map(str, player1))
        i = random.choice(POSITIONS)
        pos = i
        c_out = player1[ i ]
        c_new = cooldown_handler(c_out)
        player1[ i ] = c_new
        cards_new = "-".join(map(str, player1))
    else:
        cards_old = "-".join(map(str, player2))
        i = random.choice(POSITIONS)
        pos = i
        c_out = player2[ i ]
        c_new = cooldown_handler(c_out)
        player2[ i ] = c_new
        cards_new = "-".join(map(str, player2))
    print ",".join(map(str, [turn, c_out, c_new, pos, action, cards_old, cards_new, last_player]))
    if last_player == "b":
        last_player = "c"
    else:
        last_player = "b"



v1.0.0

import sys
import random

pool = range(102)
cooldown = []
player1 = []
player2 = []

COOLDOWN_VALUE = 45
POSITIONS = range(6)

def give_card(arr):
    c = random.choice(arr)
    p = arr.index(c)
    c = arr.pop(i)
    return arr, c

def cooldown_handler(c):
    global pool
    if c != -1:
        cooldown.append(c)
    if len(cooldown) == COOLDOWN_VALUE:
        _c = cooldown.pop(0)
        pool.append(_c)
    i = random.randint(0, len(pool)-1)
    _c = pool.pop(i)
    return _c

for i in range(6):
    c = cooldown_handler(-1)
    player1.append(c)
    c = cooldown_handler(-1)
    player2.append(c)

last_player = "b"

for turn in range(1, 2502):
    c_new = -1
    c_out = -1
    cards_new = ""
    cards_old = ""
    pos = -1
    action = "turn"
    if last_player == "b":
        last_player = "c"
        cards_old = "-".join(map(str, player1))
        i = random.choice(POSITIONS)
        pos = i
        c_out = player1[ i]
        c_new = cooldown_handler(c_out)
        player1[ i] = c_new
        cards_new = "-".join(map(str, player1))
    else:
        last_player = "b"
        cards_old = "-".join(map(str, player2))
        i = random.choice(POSITIONS)
        pos = i
        c_out = player1[ i]
        c_new = cooldown_handler(c_out)
        player1[ i] = c_new
        cards_new = "-".join(map(str, player2))
    print ",".join(map(str, [turn, c_out, c_new, pos, action, cards_old, cards_new, last_player]))
 MOCHET [7] 
19.07.2018 03:11
 0просмотров 14 0

Вероятность выхода карты. Pool+Cooldown


Имеем: 102 карты
У меня и у тебя по 6. Значит в сумме 12 (6+6)
102-12=90 карт остаётся
Делим пополам (две колоды в механике): 90/2 = 45
45 кулдаун, там сидит карта 45 ходов и не может выйти. Выйдет только через 45.
Через 45 ходов карта попадает в общий котёл (pool), где рандомно выбирается карта и попадает в руки игроку, который только что сыграл какой-то другой картой.

Как всегда одна колода.

Вероятность того, что определённая карта не выйдет из общего котла X ходов: ((44/45)^Х) * 100% [1] Т.е. будут выходить 44 другие, но не она.
где Х это количество ходов
чем больше Х, тем меньше вероятность, что карта останется ещё дольше. Но бывают и случаи, когда бывает что карта не выходит и по 100 или 200 и более ходов. Но случается такое редко.

Данные по формуле [1]:


Данные собранные во время игры (карты обоих игроков был известны; 2500 ходов):


Данные из 13 игр, по 2500 ходов каждая (был баг в обработке - его пофиксил. чтобы не переделывать график, просто убрал забагованное место в графике):

X = turns (сколько ходов не появлялась карта)
Y = frequency (как часто было это событие?)

На самом деле просто куча боксплотов в одной картинке.



Статистические данные очень схожы с данными рассчитаными по формуле.
В статистических данных у нас частота явлений, а в данных по формуле вероятность.
Чтобы переделать количество явлений (frequency) в вероятность (probability), нужно посчитать сумму всех явлений: N (должно быть меньше чем лимит ходов, т.е. 2501) и делить явления на это число N.

Пример:
Событие: 44 хода не выходила карта (любая)
Это событие было 60 раз

Всего например 2400 собранных явлений
60/2400*100% = 2.50% вероятность того, что карта выйдет из кулдауна и срау попадёт кому-то на руки
По формуле: (1-(44/45)^1)*100 = 2.22%



Либо если формулу немного переделать (1-(44/45)^X) * 100% [2]
Чем дольше карта не выходит, тем больше вероятность, что карта выйдет в следующем ходу.

Данные по формуле [2]:


formula
1-((44/45)^X) = sum(frequency_i/sum(all frequencies))
1-((44/45)^4) = 0.08596958

statistical data
n = sum(all frequencies) = 2410
sum(frequency_i/n) = 0.02406639+0.0186722+0.02033195+0.01825726 = 0.0813278



code

import csv
import collections

csv_file = "data.csv"
data = []
cards_on_hands = []
cards_last_seen = [0] * 102
diffs = []

with open(csv_file) as f:
    csv_reader = csv.reader(f)
    data = [r for r in csv_reader]

c_done = False
b_done = False

# collect initial cards
for row in data:
    # ['1', '6', '71', '0', 'turn', '6-54-37-94-82-96', '71-54-37-94-82-96', 'c']
    if row[7] == "c" and not c_done:
        cards_on_hands += map(int, row[5].split("-"))
        c_done = True
    elif row[7] == "b" and not b_done:
        cards_on_hands += map(int, row[5].split("-"))
        b_done = True
    if c_done and b_done:
        break

for row in data:
    
    turn_now = int(row[0]) # current turn
    c_out    = int(row[1]) # card we play now
    c_in     = int(row[2]) # new card we get after we play c_out
    
    # end game
    if c_in == -1:
        break
    
    # update last seen timer for my cards (c_out inclusive)
    for c in cards_on_hands:
        cards_last_seen[c] = turn_now
    
    # replace old card with new one on hands
    position = cards_on_hands.index(c_out)
    cards_on_hands[position] = c_in
    
    # when was c_in seen last time?
    c_in_seen_last = cards_last_seen[c_in]
    
    if c_in_seen_last != 0:
        diffs.append(turn_now - c_in_seen_last)

d = sorted(diffs)
counter=collections.Counter(d)

for num, freq in zip(counter.keys(), counter.values()):
    print "%s\t%s" % (num, freq)


sample data

1,6,71,0,turn,6-54-37-94-82-96,71-54-37-94-82-96,c
2,69,21,0,drop,69-61-48-43-24-60,21-61-48-43-24-60,b
3,71,65,0,drop,71-54-37-94-82-96,65-54-37-94-82-96,c
...


processed data

cardAppeardAfterNturns frequency
45 58
46 45
47 49
48 44
49 45
50 49
51 40
52 41
53 44
54 41
55 47
56 39
57 41
58 31
59 45
60 46
61 41
62 33
63 37
64 43
65 35
66 29
67 29
68 35
69 29
70 35
71 39
72 23
73 39
74 25
75 23
76 31
77 20
78 19
79 24
80 23
81 27
82 21
83 17
84 30
85 23
86 16
87 19
88 23
89 16
90 23
91 23
92 19
93 21
94 17
95 21
96 11
97 19
98 20
99 14
100 27
101 14
102 21
103 10
104 15
105 13
106 12
107 17
108 15
109 14
110 9
111 10
112 13
113 11
114 13
115 14
116 13
117 11
118 19
119 8
120 7
121 10
122 7
123 5
124 10
125 8
126 10
127 10
128 9
129 11
130 6
131 8
132 8
133 7
134 10
135 8
136 6
137 11
138 6
139 9
140 5
141 8
142 5
143 6
144 5
145 6
146 7
147 5
148 5
149 8
150 3
151 1
152 4
153 3
154 2
155 3
156 4
157 10
159 4
160 4
161 3
162 2
163 3
164 2
165 2
166 4
167 1
168 1
169 3
170 4
171 2
172 2
173 5
174 1
175 4
176 3
177 3
178 1
179 3
180 2
181 1
182 2
183 2
184 3
185 4
186 5
187 3
188 2
189 5
190 4
193 3
194 1
195 2
197 2
198 2
199 1
200 2
201 2
202 1
203 4
206 3
207 1
208 1
210 2
211 2
212 1
213 3
214 1
215 1
216 2
217 2
219 1
220 2
222 2
223 2
225 2
226 1
229 2
230 1
231 1
233 2
234 1
236 1
239 2
242 1
248 1
249 1
250 1
255 1
258 1
259 1
266 2
267 1
272 1
277 3
282 1
285 1
286 1
293 1
294 1
295 1
296 1
297 1
299 1
307 1
319 1
320 1
335 1
370 1
432 1
 MOCHET [7] 
19.07.2018 00:40
 1просмотров 45 0

Зависимость процента побед от того кто начинает первым


Те же данные что и тут: http://daily.heroeswm.ru/bu.php?i=h68sulwe

Примечание: Те 15 ничьи здесь не включены (магическое число 5)

Статистика содержит игры с одной колодой и с бесконечной.
Тривиально различить тип колоды по ответу в логе нет возможности.

По правилам столицы.



На этот раз мы смотрим на позицию #31 в логе. Там написанно кто победил.
1 = игрок который начал первым
2 = игрок который начал вторым



Внимание: Данные могут быть искажены, т.к. не известно количество карт на руках у обеих игроков (6 и 6 или 6 и 7 или 7 и 7). В итоговом логе таких данных у постороннего наблюдателя нет.

#1: 58.61%
#2: 41.38%

Разница: 17.23%
8.61% от среднего значения (50%)



Если исходить из того что игроки покупают золотую колоду карт играя от 1000 монет и выше, то можно предположить, что у всех игроков играющих от 1000 монет и выше с большой долей вероятности было по 7 карт (у большинства из них).

Т.е. у нас будет 99.775 игр со ставкой < 1000 монет
и 32.546 со ставкой >= 1000 монет

В первую очередь интересны данные с играми 6 против 7 карт. Но такие данные из данной статистики не получится достоверно достать.



Разница в зависимости от ставки:



На графике видно что в основном данные кучкуются около 57% победа первого и 43% победа второго игрока. Исключения ближе к углам графика.

Количество проведёных игр (и проценты):


В среднем разница: 14.65%

У игрока начавшим игру первым в среднем на 14.65% шансов больше победить.



Рентабельность золотой карты
https://www.meta-chart.com/
 MOCHET [7] 
18.07.2018 23:39
 0просмотров 7 0

Зависимость ставки и количества ходов


Те же данные что и тут: http://daily.heroeswm.ru/bu.php?i=h68sulwe

Примечание: Те 15 ничьи здесь не включены (магическое число 5)

Статистика содержит игры с одной колодой и с бесконечной.
Тривиально различить тип колоды по ответу в логе нет возможности.



Большинство игр проходят где-то между 40 и 60-ю ходами.
Эффект кулдауна есть, но он включается лишь в последней трети игры (если 60 ходов).
Т.е. эффект должен быть не настолько сильным. Т.к. превые карты из кулдауна выходят только через 44-45 ходов в общий котёл ("pool"), откуда вытягиваются карты игрокам.

Количество проведёных игр (и проценты):




Анализ механизма выхода карт в таверне
Analysis of arcomage card-cooldown mechanics
https://www.meta-chart.com/
https://www.meta-chart.com/share/stake-distribution










Зависимость ставки и количества ходов? - Никакой  
 MOCHET [7] 
18.07.2018 22:21
 0просмотров 2 0

arc_scanner.py

scanner v1.0.1

import sys
import time
import urllib2

# http://daily.heroeswm.ru/bu.php?i=rbw1lvip
# %h%p/%n%[gameid:.php.gameid=:::].%t

# 83565888_83665888.txt

if len(sys.argv) < 3:
    sys.exit(1)

MIN_ID = int(sys.argv[1]) # 83565888 # + 100.000
MAX_ID = int(sys.argv[2]) # 83665888

BASE_URL = "http://www.lordswm.com/cardsgame.php?action=getnicks&lchatid=99999999999999999999999999999999&gameid="
PARTS_LEN = 36

for id in xrange(MIN_ID, MAX_ID):
    out = str(id) + "\t" + str(int(time.time())) + "\t"
    try:
        contents = urllib2.urlopen(BASE_URL+str(id)).read()
        if "ERROR: undefined game id" != contents:
            parts = contents.split("|")
            name1, id1 = parts[0].split("#")
            name2, id2 = parts[1].split("#")
            res = [name1, id1, name2, id2] + parts[2:]
            out += "\t".join(res)
        else:
            out += "\t".join(["n"]*PARTS_LEN) # no game
    except:
        out += "\t".join(["e"]*PARTS_LEN) # error
    print out


scanner v1.0.0
import sys
import time
import urllib2

if len(sys.argv) < 3:
    sys.exit(1)

MIN_ID = int(sys.argv[1])
MAX_ID = int(sys.argv[2])

BASE_URL = "http://www.lordswm.com/cardsgame.php?action=getnicks&lchatid=99999999999999999999999999999999&gameid="
PARTS_LEN = 36

for id in xrange(MIN_ID, MAX_ID):
    out = str(id) + "\t" + str(int(time.time())) + "\t"
    try:
        contents = urllib2.urlopen(BASE_URL+str(id)).read()
        if "error" not in contents.lower():
            parts = contents.split("|")
            name1, id1 = parts[0].split("#")
            name2, id2 = parts[1].split("#")
            res = [name1, id1, name2, id2] + parts[2:]
            out += "\t".join(res)
        else:
            out += "\t".join(["n"]*PARTS_LEN) # no game
    except:
        out += "\t".join(["e"]*PARTS_LEN) # error
    print out
 MOCHET [7] 
18.07.2018 21:31
 0просмотров 53 0

Статистика карточных игр


200.000 игр: 83465888...83665887 (200.000-52 *)
Из них 132.336 игры с условием победы: 50 башня, 150 ресурсов (столица)
Иными словами выполяют условия 66.18% из выбранных игр (2/3). Их и будем обрабатывать дальше.

Статистика содержит игры с одной колодой и с бесконечной.
Достоверно различить тип колоды по ответу в логе нет возможности (иногда можно, но в большинстве случаев нет).

Для начала немного парсинга данных:

Запрос-Ответ:
http://www.lordswm.com/cardsgame.php?gameid=83475135&action=getnicks
Hrenopotam#6743005|SPACE HARRIER#6868006
|50|150|0|37|2|0|-2656877|1|2|5|3|2|1|6|6|23|0|8|5|0|10|20|52|NA|2|1|t60-0|2|t60-|0|0|

"магическое" число "1" перед "t60-0" обозначает тип победы (#30, action=getnicks)

Есть 6 "магических" чисел:
0 = игра не закончена
1 = башня противника >= MAX_TOWER (50) (com: 83465888)(ru: 83465888)
2 = башня противника <= 0 (com: 83465896)(ru: 83465896)
3 = собрали макс ресурсов >= MAX_RESOURCES (150) (com: 83475472)(ru: 83475472)
4 = победа через таймаут (com: 83465958)(ru: 83465958)
5 = ничья через таймаут (com: 83503028)(ru: 83503028)
6 = Обе башни разрушены / Обе башни огромны / Оба игрока имеют гору ресурсов

Кто именно победил: ...NA|2|1|t60-0|2|... (#29, action=getnicks) => игрок, который был вторым.

Вопрос: Какими способами выигрывают в аркомаге и как часто?


башня противника > 49
102905
77.76%
башня противника <= 0
25911
19.57%
собрали макс ресурсов >149
21
0.015%
победа через таймаут
3484
2.63%
ничья через таймаут
15
0.011%

Примечание: Всякие диковинные комбинации вроде башня у обоих 50+ или у обоих <= 0 и так далее на сам результат не влияют, поэтому в данном анализе не интересны.

Предположение: Либо в игре больше всего карт на постройку башни и стен, чем карт на разрушение, либо карты на постройку дешевле чем карты на разрушение стены и башни.
Скорее всего засчёт постройки стен и получается соотношение ~20% (2 из 10 игр) побед через разрушение башни, и ~80% (8 из 10 игр) через постройку 50+ (здесь я очень грубо округлил).



*: 52 игры не были включены, т.к. при парсе были видимо какие-то сбои.

не сканированные

http://www.lordswm.com/cgame.php?gameid=83471516
http://www.lordswm.com/cgame.php?gameid=83476009
http://www.lordswm.com/cgame.php?gameid=83476022
http://www.lordswm.com/cgame.php?gameid=83476285
http://www.lordswm.com/cgame.php?gameid=83476383
http://www.lordswm.com/cgame.php?gameid=83483414
http://www.lordswm.com/cgame.php?gameid=83484188
http://www.lordswm.com/cgame.php?gameid=83492120
http://www.lordswm.com/cgame.php?gameid=83503021
http://www.lordswm.com/cgame.php?gameid=83503032
http://www.lordswm.com/cgame.php?gameid=83503198
http://www.lordswm.com/cgame.php?gameid=83503226
http://www.lordswm.com/cgame.php?gameid=83509837
http://www.lordswm.com/cgame.php?gameid=83509928
http://www.lordswm.com/cgame.php?gameid=83512577
http://www.lordswm.com/cgame.php?gameid=83515203
http://www.lordswm.com/cgame.php?gameid=83515227
http://www.lordswm.com/cgame.php?gameid=83517549
http://www.lordswm.com/cgame.php?gameid=83517889
http://www.lordswm.com/cgame.php?gameid=83518078
http://www.lordswm.com/cgame.php?gameid=83518159
http://www.lordswm.com/cgame.php?gameid=83520751
http://www.lordswm.com/cgame.php?gameid=83527791
http://www.lordswm.com/cgame.php?gameid=83530666
http://www.lordswm.com/cgame.php?gameid=83556245
http://www.lordswm.com/cgame.php?gameid=83556294
http://www.lordswm.com/cgame.php?gameid=83565066
http://www.lordswm.com/cgame.php?gameid=83565097
http://www.lordswm.com/cgame.php?gameid=83577437
http://www.lordswm.com/cgame.php?gameid=83593573
http://www.lordswm.com/cgame.php?gameid=83593987
http://www.lordswm.com/cgame.php?gameid=83599887
http://www.lordswm.com/cgame.php?gameid=83603187
http://www.lordswm.com/cgame.php?gameid=83614640
http://www.lordswm.com/cgame.php?gameid=83614674
http://www.lordswm.com/cgame.php?gameid=83622126
http://www.lordswm.com/cgame.php?gameid=83622200
http://www.lordswm.com/cgame.php?gameid=83633002
http://www.lordswm.com/cgame.php?gameid=83642270
http://www.lordswm.com/cgame.php?gameid=83648346
http://www.lordswm.com/cgame.php?gameid=83648444
http://www.lordswm.com/cgame.php?gameid=83650071
http://www.lordswm.com/cgame.php?gameid=83650220
http://www.lordswm.com/cgame.php?gameid=83657161
http://www.lordswm.com/cgame.php?gameid=83661836
http://www.lordswm.com/cgame.php?gameid=83530278
http://www.lordswm.com/cgame.php?gameid=83564880
http://www.lordswm.com/cgame.php?gameid=83568745
http://www.lordswm.com/cgame.php?gameid=83629244
http://www.lordswm.com/cgame.php?gameid=83631377
http://www.lordswm.com/cgame.php?gameid=83653610
http://www.lordswm.com/cgame.php?gameid=83660050
 MOCHET [7] 
18.07.2018 18:57
 0просмотров 6 0

Cards damage (conditional cards+exploitable effects)


ID = card ID
min = min damage
max = max damage

There are 3 kinds of damage:
1. tower damage (e.g. "Spear": 5 damage to enemy's tower)
2. wall damage (e.g. "Tremor": -5 tower to all players)
3. generic direct damage (without specifying type of construction (tower or wall))

I'm talking here about third damage type.

score(direct_damage) > score(tower_damage)
score(direct_damage) > score(wall_damage)

//preconditions: conditions are met (= increased damage)
//tower or wall damage won't lead to the victory. so we can just use direct damage to attack enemy's tower

Because we can always deal instant tower damage. Dealing tower damage by using direct damage it is often much more valuable (only if enemy's wall = 0 or small enough, otherwise of course if would make sense to make tower damage, see: "Elven archers").
Same idea with wall damage.

Direct Damage

Elven archers = 6 direct damage if conditions aren't met, otherwise 6 damage to tower = 0 direct damage

IDcostsminmaxname
26181010Rock caster
321466Fortification
591766Shining stone
68122Sprite
69144Goblins
71366Goblin army
74355Orc
75544Gnomes
78822Tower gremlin
80566Crusher
81677Ogre
82666Rabid sheep
83566Familiar
848610Beetle
85999Werewolf
8611710Caustic cloud
879812Unicorn
881060Elven archers
901188Stone devourers
92151010Stone giant
93171010Vampire
94252020Dragon
95223Spearman
96233Dwarf
97488Berserker
98131313Warrior

http://help.ordenmira.ru/arcomage/cards.htm (all cards, ru)
http://daily.heroeswm.ru/bu.php?i=alidndt6 (all cards, en)
http://daily.heroeswm.ru/bu.php?i=x67whaeo (min)
http://daily.heroeswm.ru/bu.php?i=24g382i8 (max)
 MOCHET [7] 
18.07.2018 17:31
 0просмотров 4 0

Распределение стоимости карт


Карт со стоимостью < 8: 62
Всего карт: 102
62/102*100% = 60.78% от общего количетва
1 колода, правила столицы. в начале всегда по 7 ресурсов (5+2).

62 картами в принципе можно играть в начале. если учесть счастливую монетку, то будет чуть больше.




 MOCHET [7] 
17.07.2018 21:10
 0просмотров 31 7

Как бы вы оценили карту в таверне


если добавить в скрипт, то как лучше оценить?
 MOCHET [7] 
17.07.2018 21:07
 0просмотров 7 0

Опрос

Кто вносит больший вклад в развитие игры?
http://daily.heroeswm.ru/vote.php?n=3yuk4qlk

Alex: 29 VS Max: 72

Причины перевеса максима как мне кажется:
1. интервью: всегда максим
2. флеш/хтмл5: максим + акрон
3. тема с мобильными устройствами, тоже максим
4: бои: максим

баги в боях / общие баги: ну тут 50/50 имхо. т.е. не в багах дело.



[UPD 27.07.2018] насчёт саши у меня своё мнение. но здесь я его писать конечно не буду.
 MOCHET [7] 
16.07.2018 23:24
 1просмотров 21 11

Скрипто-фейлы


Собственно напрашиваются несколько вопросов насчёт скриптов и модов

1. Где скрипты-помощники для боёв?
2. Где скрипты-помощники для таверны
3. Где моды для флеша боёв/таверны/карты/кампаний/...?

- Неужели за все годы ничего кроме скриптов для таймеров и косметических изменений интерфейса не сделали?

- Где самые крутые полезности и навороты? Трекеры и счётчики в бою, live анализ ходов и подсказки (счётчики промахов, примерное расположение ловушек, и .....), live статистика в бою, в таверне и так далее
- данных же в бою гора

- ну да мем #2: "игра умирает". 8 лет назад не умирала. и 5 лет назад нет. где раньше-то было?

- Боты-скупщики-мониторщики для рынка и карты это бедно.

по-моему самое прикольное было это увеличение груди у лейши. мод для флеша был или как реализовали? дайте ссылку. нет лучше не надо. я пошутил.

//про скрипт для поиска в пп и кланах от alex_2oo8+Рианти знаю знаю. он крут. но его низя.

//так сейчас хтмл5. ещё проще. где интересности?
это же примитивная хтмл игра, с get/post запросами. без клиента. всё в браузере. сложность понимания кода админа минимальная. без heavy обфускации.
или скриптерам не нужен скилл? и где моддеры?

кому интересно

Flash-modding:
1. monster debugger
2. rabcdasm
3. JPEXS .... ну да дожили, теперь и флеш умирает. нафига теперь этот моддинг :(

Ах да. во всех играх что-то там нельзя, но всё равно делают.

или у нас настолько низя, что аж думать страшно?

или?
 MOCHET [7] 
13.07.2018 20:56
 3просмотров 64 2

мем #1

ой, фу, надоела игра. пойду делать свою. (c)
 MOCHET [7] 
13.07.2018 20:24
 2просмотров 30 0

ArcomageCompanion v1.0.3



work in progress...
« 123