Всем привет! Сейчас расширял карту, и когда я тестировал игру у меня появилась такая ошибка:
Код
ERROR in action number 1 of Alarm Event for alarm 2 for object objPlayer:
Error in code at line 21:
if variable_local_exists(objall.index) {writeushort(objall.index);} else {writeushort(0)} ^ at position 46: Unknown variable index
У меня во всех объектах есть переменная index всё идёт нормально, но после расширения карты у меня на её половине проверки(где-то в координатах 800-800 из 2400-2400) выдаёт ошибку и перестаёт проверять карту
Добавлено (02.03.2014, 12:35) --------------------------------------------- И ещё вопрос: Как сделать рисование текста из файла который в интернете?
Сообщение отредактировал maksim1221232 - Воскресенье, 02 Марта 2014, 12:35
Я где-то видел похожее: Как добавить спрайт который находится в интернете? И в ответ написали такой просто код: sprite_add(http://lalalla.png) Можно также вытащить текст?
Добавлено (03.03.2014, 20:40) --------------------------------------------- Ещё одна проблема: У меня есть список в котором хранятся ники игроков, сколько он умер и убил других игроков, есть он у сервера и у клиента. Сервер должен отправить весь список клиенту. Вот сам код:
Код
var ii; ii=0 while ii<8 { if server.pn[ii]='' {server.pn[ii]=nick;server.pd[ii]=deads;server.pk[ii]=kills;list=ii;break;}; if ii<7 {ii+=1} else {break;} } //Предыдущий кусочек кода помещает ник игрока в список with objPlayer { clearbuffer(); writebyte(alldata); writeushort(16); writebyte(list) writestring(vargroup,true); writestring(server.pn[0],true) writestring(server.pn[1],true) writestring(server.pn[2],true) writestring(server.pn[3],true) writestring(server.pn[4],true) writestring(server.pn[5],true) writestring(server.pn[6],true) writestring(server.pn[7],true) writebyte(server.pd[0]) writebyte(server.pd[1]) writebyte(server.pd[2]) writebyte(server.pd[3]) writebyte(server.pd[4]) writebyte(server.pd[5]) writebyte(server.pd[6]) writebyte(server.pd[7]) writebyte(server.pk[0]) writebyte(server.pk[1]) writebyte(server.pk[2]) writebyte(server.pk[3]) writebyte(server.pk[4]) writebyte(server.pk[5]) writebyte(server.pk[6]) writebyte(server.pk[7]) with(objPlayer){if(id = other.id){sendmessage(socketid); }} }
С никами всё в порядке, но количество смертей игрока и количество игроков которых он убил смещаются на низ когда подключается новый игрок. Например зашёл игрок kot555 и у него счёт 5-7, зашёл второй, у него 5-7 а у kot555 0 и 0 Помогите исправить
Пока будешь делать цикл, переосмыслишь весь свой кусок кода, и скорее всего найдешь косяк. Как минимум из замечаний - очень много бесполезных массмвов. Почему ты не можешь хранить все данные об игроке в отдельном объекте, или, еще лучше - в самом объекте игрока на сервере? А если тебе нужно будет добавить еще что то?
Код
obj_player obj_playerinfo - наши объекты связанные с игроком
При инициализации игрока(его создание видимо, в каком то объекте, пусть условно это будет obj.ctrl
Код
//Инициализация самого ctrl maxplayers = 10 - максимум игроков actual_player = 0 - максимальный ид для оптимизации цикла i = 0 while i<maxplayers - инициализируем массив игроков и информаций { players[i] = -1 - наше "общепринятое" пустое значение players_info[i] = -1 i += 1; } //Конец инициализации ctrl
newobj_info.player = newobj - ссылка на прямой доступ ко всем данным игрока-родителя
index = -1; index = find_free_id() - скрипт, который будет находить первый свободный индекс в массиве players[]. Не возвращает если все занято
if index >= 0 { players[index] = newobj; players_info[index] = newobj_info; newobj.array_index = index; }
Вот по примерно такой схеме я строил у себя данные. При этом я даже не примешивал дополнительные объекты, а харнил вообще всю инфу тупо в объектах игроках. Но если у тебя расширенная статистика, которую ты можешь обрабатывать даже для вылетевших\дисконнектнутых игроков - тогда пользуй это. Ghaarp
Теперь вообще ничего не работает, открываю список, а там везде(там где даже должен быть ник игрока) стоят 0 Я вообще не понимаю где эти ошибки, у меня всё должно быть верно. Вот коды: Server: obj_Player. [alarm 3](Отправка и добавление)
Код
list = find_free_id(); server.pn[list]=nick server.pd[list]=deads server.pk[list]=kills
А вот эта конструкция вообще что делает? О_о Судя по всему, она отправляет сообщения всем игрокам, т.е. она эквивалентна записи
Код
with(objPlayer) {sendmessage(socketid); }
Также не вполне понятны структуры твоих пакетов и массивов, если честно. Ошибка вполне может быть в оболочке, пользуйся show_message и ищи на каком этапе теряются твои данные: формирование на клиенте, отправка на сервер, прием на сервере, обработка на сервере, отправка на клиенты, прием на клиентах. 6 глобальных ивентов через которые проходят твои ники и все остальное. Ghaarp