YND Posted January 5, 2013 Share Posted January 5, 2013 Можете, пожалуйста, проверить валидность кода на спавн автомобиля через GUI? Клиент: GUIEditor = { button = {}, window = {}, } function createWindowCarSpawn() GUIEditor.window[1] = guiCreateWindow(1098, 194, 166, 93, "Вызвать машину", false) guiWindowSetSizable(GUIEditor.window[1], false) GUIEditor.button[1] = guiCreateButton(10, 30, 66, 19, "Bullet", false, GUIEditor.window[1]) guiSetFont(GUIEditor.button[1], "default-bold-small") guiSetProperty(GUIEditor.button[1], "NormalTextColour", "FFAAAAAA") addEventHandler ( "onClientGUIClick", GUIEditor.button[1], spwnbullet, false ) GUIEditor.button[2] = guiCreateButton(91, 30, 67, 19, "NRG-500", false, GUIEditor.window[1]) guiSetFont(GUIEditor.button[2], "default-bold-small") guiSetProperty(GUIEditor.button[2], "NormalTextColour", "FFAAAAAA") addEventHandler ( "onClientGUIClick", GUIEditor.button[2], spwnnrg500, false ) GUIEditor.button[3] = guiCreateButton(76, 49, 15, 15, "x", false, GUIEditor.window[1]) guiSetProperty(GUIEditor.button[3], "NormalTextColour", "FFAAAAAA") addEventHandler ( "onClientGUIClick", GUIEditor.button[3], spwnguioff, false ) GUIEditor.button[4] = guiCreateButton(10, 64, 66, 19, "Infernus", false, GUIEditor.window[1]) guiSetFont(GUIEditor.button[4], "default-bold-small") guiSetProperty(GUIEditor.button[4], "NormalTextColour", "FFAAAAAA") addEventHandler ( "onClientGUIClick", GUIEditor.button[4], spwninfernus, false ) GUIEditor.button[5] = guiCreateButton(91, 64, 66, 19, "Hunter", false, GUIEditor.window[1]) guiSetFont(GUIEditor.button[5], "default-bold-small") guiSetProperty(GUIEditor.button[5], "NormalTextColour", "FFAAAAAA") addEventHandler ( "onClientGUIClick", GUIEditor.button[5], spwnhunter, false ) guiSetVisible(GUIEditor.window[1], false) end addEventHandler("onClientResourceStart", resourceRoot, createWindowCarSpawn) --Открываем GUI по комманде < function carspawnguion(thePlayer, command) createWindowCarSpawn() if (GUIEditor.window[1] ~= nil) then --outputChatBox("dobre.", client) guiSetVisible(GUIEditor.window[1], true) showCursor(true) guiSetInputEnabled(true) else outputChatBox("Возникла непредвиденная ошибка и GUI входа не был создан.") end end addCommandHandler("spwcar", carspawnguion) --Открываем GUI по комманде > --Закрываем GUI по кнопке < function spwnguioff ( button ) if button == "left" then if (GUIEditor.window[1] ~= nil) then --outputChatBox("guiclos", client) guiSetVisible(GUIEditor.window[1], false) showCursor(false) guiSetInputEnabled(false) else outputChatBox("Возникла непредвиденная ошибка и GUI входа не был закрыт.") end end end -- Закрываем GUI по кнопке >aaaa ---- Спавн каров < -- Bullet < function spwnbullet ( button ) if button == "left" then local px, py, pz = getElementPosition ( localPlayer ) triggerServerEvent("zaspwnbullet", getRootElement(),px,py,pz) if (GUIEditor.window[1] ~= nil) then guiSetVisible(GUIEditor.window[1], false) showCursor(false) guiSetInputEnabled(false) else outputChatBox("Возникла непредвиденная ошибка и GUI входа не был закрыт.") end end end -- Bullet > -- NRG-500 < function spwnnrg500 ( button ) if button == "left" then local px, py, pz = getElementPosition ( localPlayer ) triggerServerEvent("zaspwnnrg", getRootElement(),px,py,pz) if (GUIEditor.window[1] ~= nil) then guiSetVisible(GUIEditor.window[1], false) showCursor(false) guiSetInputEnabled(false) else outputChatBox("Возникла непредвиденная ошибка и GUI входа не был закрыт.") end end end -- NRG-500 > -- Infernus < function spwninfernus ( button ) if button == "left" then local px, py, pz = getElementPosition ( localPlayer ) triggerServerEvent("zaspwninfernus", getRootElement(),px,py,pz) if (GUIEditor.window[1] ~= nil) then guiSetVisible(GUIEditor.window[1], false) showCursor(false) guiSetInputEnabled(false) else outputChatBox("Возникла непредвиденная ошибка и GUI входа не был закрыт.") end end end -- Infernus > -- Hunter < function spwnhunter ( button ) if button == "left" then local px, py, pz = getElementPosition ( localPlayer ) triggerServerEvent("zaspwnhunter", getRootElement(),px,py,pz) if (GUIEditor.window[1] ~= nil) then guiSetVisible(GUIEditor.window[1], false) showCursor(false) guiSetInputEnabled(false) else outputChatBox("Возникла непредвиденная ошибка и GUI входа не был закрыт.") end end end -- Hunter > ---- Спавн каров > Сервер: function zaspwnbulletto(px,py,pz) px = px + 5 local createdVehicle = createVehicle(541,px,py,pz) if (createdVehicle == false) then -- если да, то выводим сообщение в чат, но только для игрока, который спавнил ТС. outputChatBox("Bullet не заспавнен.",thePlayer) else outputChatBox("Bullet заспавнен.",thePlayer) end end addEvent("zaspwnbullet",true) addEventHandler("zaspwnbullet",root,zaspwnbulletto) function zaspwnnrgto(px,py,pz) px = px + 5 local createdVehicle = createVehicle(522,px,py,pz) if (createdVehicle == false) then -- если да, то выводим сообщение в чат, но только для игрока, который спавнил ТС. outputChatBox("NRG-500 не заспавнен.",thePlayer) else outputChatBox("NRG-500 заспавнен.",thePlayer) end end addEvent("zaspwnnrg",true) addEventHandler("zaspwnnrg",root,zaspwnnrgto) function zaspwninfernusto(px,py,pz) px = px + 5 local createdVehicle = createVehicle(411,px,py,pz) if (createdVehicle == false) then -- если да, то выводим сообщение в чат, но только для игрока, который спавнил ТС. outputChatBox("Infernus не заспавнен.",thePlayer) else outputChatBox("Infernus заспавнен.",thePlayer) end end addEvent("zaspwninfernus",true) addEventHandler("zaspwninfernus",root,zaspwninfernusto) function zaspwnhunterto(px,py,pz) px = px + 5 local createdVehicle = createVehicle(425,px,py,pz) if (createdVehicle == false) then -- если да, то выводим сообщение в чат, но только для игрока, который спавнил ТС. outputChatBox("Hunter не заспавнен.",thePlayer) else outputChatBox("Hunter заспавнен.",thePlayer) end end addEvent("zaspwnhunter",true) addEventHandler("zaspwnhunter",root,zaspwnhunterto) И мне кажется, что его можно сделать куда меньше.. Не подскажите как ? Link to comment
Kenix Posted January 5, 2013 Share Posted January 5, 2013 На клиенте и на сервере сделать по событию. Ты просто передавай аргументы серверу и он уже сам будет делать, то что нужно. Сервер addEvent( 'Server:SpawnVehicle', true ) addEventHandler( 'Server:SpawnVehicle', root, function( iModel, fX, fY, fZ ) fX = fX + 5 local pVehicle = createVehicle( iModel, fX, fY, fZ ) outputChatBox( getVehicleName( pVehicle ) .. ( not pVehicle and ' не ' or ' ' ) .. 'заспавнен', source ) end ) И у вас кстати thePlayer не определен на сервере в событиях. Вам его и не нужно будет определять если у вас source = игрок, но в вашем коде на клиенте вы этого не делаете и у вас source = корню всех элементов. Ну и ещё, раз вы делаете спавнер тачек, то зачем вам кнопки если вы можете это сделать в гридлисте? Так намного проще. Вы будете передавать данные серверу получая эти данные из гридлиста, что ещё легче для реализации. Link to comment
YND Posted January 5, 2013 Author Share Posted January 5, 2013 Спасибо, что ответили. Не очень понял то, что вы написали, но сейчас попробую сделать через gridlist и потом как-то передать id строки gridlist'a на сервер и через case (из pascal'я, надеюсь в lua такое есть) или же через if создавать машину.. Вопрос: почему в guiGridListSetItemText нельзя использовать просто числа ? text: The text you want to put in (does NOT accept numbers, use tostring() for that) У меня стоят числа и все работает... ----------------- Еще вопрос: как определить этого thePlayer ? Если просто дописать function zaspwnbulletto(thePlayer,px,py,pz) то работать не будет, это понятно.. Но как его определить ? ----------------- И еще один вопрос: Если использовать код как у меня выше - все работает, а если переставить строки addEventHandler ( "onClientGUIClick", GUIEditor.button[1], spwnbullet,) как правильно, после функции: function spwnbullet ( button ) if button == "left" then local px, py, pz = getElementPosition ( localPlayer ) triggerServerEvent("zaspwnbullet", getRootElement(),px,py,pz) if (GUIEditor.window[1] ~= nil) then guiSetVisible(GUIEditor.window[1], false) showCursor(false) guiSetInputEnabled(false) else outputChatBox("Возникла непредвиденная ошибка и GUI входа не был закрыт.") end end end addEventHandler ( "onClientGUIClick", GUIEditor.button[1], spwnbullet,) То работать перестает, ссылаясь на то, что GUIEditor.button[1] - nill.. Почему так ? Link to comment
Kenix Posted January 5, 2013 Share Posted January 5, 2013 Не очень понял то, что вы написали, но сейчас попробую сделать через gridlist и потом как-то передать id строки gridlist'a на сервер и через case (из pascal'я, надеюсь в lua такое есть) или же через if создавать машину.. А вообще вам этого и не нужно делать, вам нужно просто получить выбранную строку из гридлиста, и получить из неё текст и прислать серверу. Можете прочитать про switch в Lua: http://lua-users.org/wiki/SwitchStatement https://wiki.multitheftauto.com/wiki/Switch Вопрос: почему в guiGridListSetItemText нельзя использовать просто числа ? По названию функции можно определить, что используется только строка, ничего более. Чем вам строка не угадила? Вы можете из строки получить число очень простым образом. tonumber( '1' ) ну и через tostring в строку соответственно. Еще вопрос: как определить этого thePlayer ? Если просто дописать function zaspwnbulletto(thePlayer,px,py,pz) то работать не будет, это понятно.. Но как его определить ? Вам его не нужно определять, он уже определён внутри функции-обработчика, если источник игрок, то он и будет игроком. А если вам нужно передать элемент, то пожалуйста, отправляйте его и дописывайте в аргументах функции-обработчика. https://wiki.multitheftauto.com/wiki/Event Link to comment
YND Posted January 5, 2013 Author Share Posted January 5, 2013 И все же не могу понять.. Сервер: function zaspwncarto(source, idspwcar) local px,py,pz = getElementPosition(source) px = px + 5 local createdVehicle = createVehicle(idspwcar,px,py,pz) if (createdVehicle == false) then -- если да, то выводим сообщение в чат, но только для игрока, который спавнил ТС. outputChatBox(getVehicleName( idspwcar ).." не заспавнен.",thePlayer) else outputChatBox(getVehicleName( idspwcar ).." заспавнен.",thePlayer) end end addEvent("idspwcar",true) addEventHandler("idspwcar",source,zaspwncarto) Клиент: local allcars = { --{ID,Название,Скорость,Тип}; {400,"Landstalker","none","Внедорожник"}; {401,"Bravura","123","Седан"}; {402,"Buffalo","none","Спортивный"}; } GUIEditor = { gridlist = {}, window = {}, addcol = {}, button = {}, } function createWindowCarSpawn() GUIEditor.window[1] = guiCreateWindow(1032, 174, 315, 340, "Spawn car", false) guiWindowSetSizable(GUIEditor.window[1], false) GUIEditor.gridlist[1] = guiCreateGridList(10, 28, 294, 237, false, GUIEditor.window[1]) GUIEditor.addcol[1] = guiGridListAddColumn(GUIEditor.gridlist[1], "ID", 0.15) GUIEditor.addcol[2] = guiGridListAddColumn(GUIEditor.gridlist[1], "Название", 0.23) GUIEditor.addcol[3] = guiGridListAddColumn(GUIEditor.gridlist[1], "Скорость", 0.2) GUIEditor.addcol[4] = guiGridListAddColumn(GUIEditor.gridlist[1], "Тип", 0.35) for i,allcars in ipairs(allcars) do guiGridListAddRow(GUIEditor.gridlist[1]) guiGridListSetItemText(GUIEditor.gridlist[1], i-1, 1, allcars[1], false, true) guiGridListSetItemText(GUIEditor.gridlist[1], i-1, 2, allcars[2], false, false) guiGridListSetItemText(GUIEditor.gridlist[1], i-1, 3, allcars[3], false, true) guiGridListSetItemText(GUIEditor.gridlist[1], i-1, 4, allcars[4], false, false) end --guiGridListAutoSizeColumn (GUIEditor.gridlist[1],GUIEditor.addcol[4]) GUIEditor.button[1] = guiCreateButton(20, 277, 124, 53, "Закрыть", false, GUIEditor.window[1]) guiSetProperty(GUIEditor.button[1], "NormalTextColour", "FFAAAAAA") addEventHandler ( "onClientGUIClick", GUIEditor.button[1], carspawnguioff, false ) GUIEditor.button[2] = guiCreateButton(170, 277, 124, 53, "Вызвать", false, GUIEditor.window[1]) guiSetProperty(GUIEditor.button[2], "NormalTextColour", "FFAAAAAA") addEventHandler ( "onClientGUIClick", GUIEditor.button[2], carspawnguispw, false ) guiGridListSetSelectedItem ( GUIEditor.gridlist[1], 0, 1) end --Открываем GUI по комманде < function carspawnguion(thePlayer, command) createWindowCarSpawn() if (GUIEditor.window[1] ~= nil) then guiSetVisible(GUIEditor.window[1], true) showCursor(true) -- guiSetInputEnabled(true) else outputChatBox("Возникла непредвиденная ошибка и GUI входа не был создан.") end end addCommandHandler("spwcar", carspawnguion) --Открываем GUI по комманде > --Закрываем GUI < function carspawnguioff ( button ) if button == "left" then guiSetVisible(GUIEditor.window[1], false) showCursor(false) -- guiSetInputEnabled(false) end end --Закрываем GUI > --Передаем id на серв < function carspawnguispw ( button ) if button == "left" then selectgridlist = guiGridListGetSelectedItem (GUIEditor.gridlist[1]) idspwcar = guiGridListGetItemText (GUIEditor.gridlist[1], selectgridlist, GUIEditor.addcol[1]) triggerServerEvent("zaspwcar", source, idspwcar) -- outputChatBox(idspwcar) guiSetVisible(GUIEditor.window[1], false) showCursor(false) -- guiSetInputEnabled(false) end end --Передаем id на серв > Как передать этого игрока на сервер ????? Link to comment
Kenix Posted January 5, 2013 Share Posted January 5, 2013 Как передать этого игрока на сервер ????? triggerServerEvent("zaspwcar", source, idspwcar) Вы передаёте гуи элемент кнопки серверу, а надо игрока. Используйте предопределенную переменную localPlayer или функцию getLocalPlayer И ещё это событие "zaspwcar" не существует на сервере, у вас есть событие "idspwcar". И ещё не помешало бы конвертировать строку с идом модели в число перед отправкой на сервер. function zaspwncarto(source, idspwcar) local px,py,pz = getElementPosition(source) px = px + 5 local createdVehicle = createVehicle(idspwcar,px,py,pz) if (createdVehicle == false) then -- если да, то выводим сообщение в чат, но только для игрока, который спавнил ТС. outputChatBox(getVehicleName( idspwcar ).." не заспавнен.",thePlayer) else outputChatBox(getVehicleName( idspwcar ).." заспавнен.",thePlayer) end end addEvent("idspwcar",true) addEventHandler("idspwcar",source,zaspwncarto) Аргумент thePlayer к функции outputChatBox не определен, вам нужно использовать source. И я вам писал, что source вам не нужно определять, он уже определен в функции-обработчике. Если вы не понимаете, то вот небольшой пример: addEventHandler( 'onPlayerJoin', root, function() outputChatBox( getPlayerName( source ) .. ' joined.', root, 255, 0, 0, false ) end ) Будет выводить в чат игрока, которой зашёл на сервер. Источник( source ) в этом событии - игрок. Также это не верно. addEventHandler("idspwcar",source,zaspwncarto) Используйте предопределенную переменную root или функцию getRootElement Link to comment
YND Posted January 7, 2013 Author Share Posted January 7, 2013 Блин.. 2й день жду ответа, а вопрос у меня не отправился Cервер: function zaspwncarto(idspwcar, localPlayer) local spwcarid = tonumber(idspwcar) local px,py,pz = getElementPosition(localPlayer) px = px + 5 local createdVehicle = createVehicle(spwcarid,px,py,pz) local vehicleNamespw = getVehicleName (spwcarid) if (createdVehicle == false) then outputChatBox(vehicleNamespw.." не заспавнен.",localPlayer) else outputChatBox(vehicleNamespw.." заспавнен.",localPlayer) end end addEvent("zaspwcar",true) addEventHandler("zaspwcar",root,zaspwncarto) Кар спавнится, отлично, но сообщение не выводится.. По-моему, говорит, что это Boolean.. Link to comment
Kenix Posted January 7, 2013 Share Posted January 7, 2013 Вы не читаете мои посты, или вы просто плохо читаете их не вникая в суть. Поэтому у вас ничего и не получается .. Я вам писал много раз, в предыдущем посте я писал, что thePlayer не определен, вам нужно использовать source. Тут вы уже пишете localPlayer, для чего? Это клиентская предопределенная переменная, она не будет работать на сервере. Используйте source. Также я давал ссылку про систему событий и даже пример использования, но вы это видимо тоже не читали. И ещё я заметил, что вы хотите получить имя машины из ида, у вас не получится т.к чтобы узнать имя машины аргументом должна быть машина, а не её ид т.к вы используте функцию getVehicleName. Если вы хотите получить имя машины из ида, то используйте функцию getVehicleNameFromModel Может быть вы расчитываете, чтобы я написал весь код за вас, можете не расчитывать на это. Вы должны сами написать его. Вам же лучше, когда вы вникаете во всю суть, а не кто-то другой пишет за вас весь код. Link to comment
YND Posted January 8, 2013 Author Share Posted January 8, 2013 У меня код работал, не работал лишь вывод имени автомобиля из-за того, что я искал через id модели getVehicleName.. getVehicleNameFromModel - должен мне помочь (сейчас проверить не могу).. А так, этот код у меня работает и автомобиль спавнится.. А использую localPlayer только потому, что не могу понять что такое root, source, getRootElement... Благодаря предыдущему посту я понял, что localPlayer - это клиент, который выполняет этот скрипт (ну в общем я понял), а что такое root, source, getRootElement и в каких случаях их использовать я пока не понимаю.. А скрипт у меня работает (насколько я понимаю) потому, что я передал этого localPlayer через триггер: triggerServerEvent("zaspwcar", localPlayer, idspwcar) Секунду.. Получается, что source - это тот, кто передал переменную "idspwcar" через триггер ?? Так ? Надо тогда писать: function zaspwncarto(source, idspwcar) ? Тогда ж когда использовать root и getRootElement в addEventHandler ?.. Link to comment
Kernell Posted January 8, 2013 Share Posted January 8, 2013 root - указатель на самый первый (корневой) элемент в дереве элементов getRootElement - функция, возвращающая root (уже не используется). source - указатель на элемент, который вызвал событие Russian / Русский ‹ Скриптинг ‹ Глобальные переменные в MTA (root,resourceRoot,..,source,..) Надо тогда писать: function zaspwncarto(source, idspwcar) ? Тогда ж когда использовать root и getRootElement в addEventHandler ?.. Не надо, source передаётся "невидимым" как бы root и т.д. это просто глобальные переменные Link to comment
YND Posted January 8, 2013 Author Share Posted January 8, 2013 Ну вот если указать root - что будет означать ? Link to comment
Kernell Posted January 8, 2013 Share Posted January 8, 2013 Ну вот если указать root - что будет означать ? root - указатель на самый первый (корневой) элемент в дереве элементов Link to comment
YND Posted January 8, 2013 Author Share Posted January 8, 2013 Я уже раз 25 прочитал ту статью... Я не знаю.. На примере, пожалуйста, покажите что-ли... root надо использовать со всеми евентами типа Старт сервера и т.п. ? Link to comment
_Dark_ Posted January 8, 2013 Share Posted January 8, 2013 Представьте, что три шарика подвязаны к одной нити. ------------ | | | O O O Мы можем качнуть один шарик не затрагивая другие. Вот этот один шарик — это обычный элемент. Но мы можем раскачать и всю нить (root), тогда эффект будет на всех шариках, так как они связаны с этой нитью. Link to comment
YND Posted January 8, 2013 Author Share Posted January 8, 2013 Что такое дерево я понимаю.. Только что посмотрел множество примеров с евентами - всюду использовать root ?? (Кроме всяких GUIroot).. Если нет, то покажите, пожалуйста, пример, где евент с root'ом и где евент с другим значением и почему там другое значение.. P.s. getRootElement и root - одно и тоже же ? Link to comment
_Dark_ Posted January 8, 2013 Share Posted January 8, 2013 getRootElement() возвращает корневой элемент, т.е. root. Link to comment
YND Posted January 9, 2013 Author Share Posted January 9, 2013 Клиент: --Передаем id на серв < function carspawnguispw ( button ) if button == "left" then selectgridlist = guiGridListGetSelectedItem (GUIEditor.gridlist[1]) idspwcar = guiGridListGetItemText (GUIEditor.gridlist[1], selectgridlist, GUIEditor.addcol[1]) triggerServerEvent("zaspwcar", getRootElement(), localPlayer, idspwcar) -- outputChatBox(idspwcar) guiSetVisible(GUIEditor.window[1], false) showCursor(false) -- guiSetInputEnabled(false) end end --Передаем id на серв > Сервер: function zaspwncarto(localPlayer, idspwcar) outputChatBox(source) -- 00000001 outputChatBox(localPlayer) -- 0000002F local spwcarid = tonumber(idspwcar) local px,py,pz = getElementPosition(source) px = px + 5 local createdVehicle = createVehicle(spwcarid,px,py,pz) local vehicleNamespw = getVehicleNameFromModel (spwcarid) if (createdVehicle == false) then outputChatBox(vehicleNamespw.." не заспавнен.",source) else outputChatBox(vehicleNamespw.." заспавнен.",source) end end addEvent("zaspwcar",true) addEventHandler("zaspwcar",root,zaspwncarto) source выводит 00000001, а localPlayer - 0000002F.. Координаты у source выходят 0 0 0 Link to comment
_Dark_ Posted January 9, 2013 Share Posted January 9, 2013 Сейчас с телефона, поэтому пока без примеров с кодом. У меня к вам один вопрос: что вы хотели увидеть в вате когда выводили переменные source и localPlayer? Кстати, localPlayer на сервере нет и не может быть (подумайте почему), вы Вики вообще читаете? Там есть прекрасные пояснения на английском языке, последний обязателен, если вы хотите программировать. Посмотрите мои первые сообщения здесь, я таких вопросов как вы не задавал, я просто работал с Wiki. Позже объясню все с кодом, но все таки советую вам попробовать разобраться самому, иначе по чужим примерам вы ничего не поймете, раз вам даже пояснения на Wiki непонятны. Link to comment
_Dark_ Posted January 9, 2013 Share Posted January 9, 2013 О, только сейчас внимательней посмотрел на ваш код, он ужасен, вы похоже решили все, что знаете и не знаете писать. Link to comment
_Dark_ Posted January 9, 2013 Share Posted January 9, 2013 Короче говоря, просто пишу вам верный, с моей точки зрения, код: Клиент function carspawnguispw (button) if(button == "left") then local selectgridlist = guiGridListGetSelectedItem (GUIEditor.gridlist[1]) local idspwcar = guiGridListGetItemText (GUIEditor.gridlist[1], selectgridlist, GUIEditor.addcol[1]) triggerServerEvent("zaspwcar", root, idspwcar) guiSetVisible(GUIEditor.window[1], false) showCursor(false) end end Сервер function zaspwncarto(idspwcar) local px,py,pz = getElementPosition(client) px = px + 5 local vehicleNamespw = getVehicleNameFromModel(idspwcar) if (not createVehicle(idspwcar,px,py,pz)) then outputChatBox(vehicleNamespw.." не заспавнен.", client) else outputChatBox(vehicleNamespw.." заспавнен.", client) end end addEvent("zaspwcar",true) addEventHandler("zaspwcar",root,zaspwncarto) Небольшая оговорка: этот код "верен" только для вашего случая, я бы так не делал, в плане архитектуры. Link to comment
Kenix Posted January 9, 2013 Share Posted January 9, 2013 Зря ты ему весь код написал, он его просто копипастнет .. Link to comment
YND Posted January 9, 2013 Author Share Posted January 9, 2013 Короче говоря, просто пишу вам верный, с моей точки зрения, код:Клиент function carspawnguispw (button) if(button == "left") then local selectgridlist = guiGridListGetSelectedItem (GUIEditor.gridlist[1]) local idspwcar = guiGridListGetItemText (GUIEditor.gridlist[1], selectgridlist, GUIEditor.addcol[1]) triggerServerEvent("zaspwcar", root, idspwcar) guiSetVisible(GUIEditor.window[1], false) showCursor(false) end end Сервер function zaspwncarto(idspwcar) local px,py,pz = getElementPosition(client) px = px + 5 local vehicleNamespw = getVehicleNameFromModel(idspwcar) if (not createVehicle(idspwcar,px,py,pz)) then outputChatBox(vehicleNamespw.." не заспавнен.", client) else outputChatBox(vehicleNamespw.." заспавнен.", client) end end addEvent("zaspwcar",true) addEventHandler("zaspwcar",root,zaspwncarto) Небольшая оговорка: этот код "верен" только для вашего случая, я бы так не делал, в плане архитектуры. Откуда localPlayer ? Я его через триггер передал, сколько раз писать... Kenix предлагал мне использовать source - его то я и использовал, но он не работает.. По идее, если source - это игрок который передал через триггер переменные, то source должен быть равен localPlayer.. На клиенте вы дописали local .. На сервере: Как же tonumber(idspwcar) , он же в текстовом виде передается.. vehicleNamespw вы убрали.. В итоге вы просто уменьшили код (я, как любой начинающий растянул код) и убрали переменную vehicleNamespw.. Спасибо за "client" (если работает..), так как source не работает.. Ужасного кода у себя я не вижу.. Link to comment
YND Posted January 9, 2013 Author Share Posted January 9, 2013 Зря ты ему весь код написал, он его просто копипастнет .. Не копипастну, ибо этот спавн каров начал лишь для того, чтобы учить lua, а так он мне не нужен .. Если бы вы мне внятно пояснили где использовать root, а где что-то другое... И что все же ужасного в моем коде ? Link to comment
Kenix Posted January 9, 2013 Share Posted January 9, 2013 source должен работать если source = игроку в данном случае. У вас же triggerServerEvent("zaspwcar", root, idspwcar) Т.е source = root, корень всех элементов. А client - клиент, в котором было вызвано событие. Если событие вызвано не клиентом - не используется Если бы вы мне внятно пояснили где использовать root, а где что-то другое... https://wiki.multitheftauto.com/index.ph ... ement_tree Link to comment
YND Posted January 9, 2013 Author Share Posted January 9, 2013 source должен работать если source = игроку в данном случае.У вас же triggerServerEvent("zaspwcar", root, idspwcar) Т.е source = root, корень всех элементов. А client - клиент, в котором было вызвано событие. Если событие вызвано не клиентом - не используется Если бы вы мне внятно пояснили где использовать root, а где что-то другое... https://wiki.multitheftauto.com/index.ph ... ement_tree Что нужно указать вместо root, чтобы source был клиентом ? ЧТо такое дерево я понимаю, но в каком случае использовать root, а в каком что-то иное - не очень.. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now