Перейти к содержимому

Asummonster

Пользователи
  • Публикации

    420
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Сообщения, опубликованные пользователем Asummonster


  1. pastebin get 6x9YtbrX file_sender Немного неказисто, но задачу выполняет.Чтобы включить ожидание файла пишем: file_sender receive <имя файла> (если хотим заменить оригинальное имя файла)Выскочит сообщение выбора модема - вводим 'modem' для обычной платы, 'tunnel' для связанной. На передающем компе пишем: file_sender send <имя файла>Далее так же выбираем нужный тип модема. Не сделал чтение файла частями, поэтому он весь загружается в оперативу - размер передаваемого файла ограничен свободной памятью.К тому-же нет выбора модема-партнера для обычных модемов, все пересылается через broadcast.

    А зачем оно сериализирует? Зачем в сообщении с куском кода название файла? + обрезалка по maxPacketSize не спасёт, потому что serialization добавляет кучу "/".


  2. Зед, ну что? Дали тебе прогу или нет? У Монтсрика, судя по описанию его, блютуз-программка вроде позволяет тебе решить твои задачи.

    У него там консольно вроде можно сендить файл.

     

     

    П.С. Недавно, кстати, наткнулся на канал интересный. Сделать бы что-то толковое на ОС, с определенным диапазоном или на бродкасте первый пинг, а соединение уже свое там какое-то, но с удобным интерфейсом и прочее.

    Типа вот такого - смотреть.

     

    Интересный канал, кстати у паренька. Толковый парнишка, грамотный. И оболочка у него графическая, и винтовка, сделана на КБ и редстончике, а мы не можем до сих пор на целом ОС пушку несчастную сделать и тир. Опять заглохло там все с тиром.

     

    Даже, казалось бы, банальный замок на дверь, но насколько удобно все в один клик делается у него, и конфиги, и инсталлер, и сама реализация программы.

    Этого паренька я уже 2 года смотрю,они ещё тогда механизмы на редстоуне делали классные

    • Нравится 2

  3. Ну слава яйцам. Сегодня протестирую. :)

     

    Пока сам немного программки все свои заканчиваю оформлять и с новой сборкой игрался.

     

    Серега Кибер уже предлагает тебя под реабилитацию запускать, но я предложил только после должного оформления программки "Баночка опыта" и полного дебажинга, иначе она бы так и валялась с кучей багулек. А так сразу будет новая фича на ИТ. Я уже и компунтер там поставил специально для  нее=)

    Мне уже "шпионы" доложили о компуктере:)


  4. Всё, багфикснул.

     


     

    --ПОДКЛЮЧЕНИЕ КОМПОНЕНТОВ
    component=require("component")
    radar=component.openperipheral_sensor
    cb=component.command_block
    gpu=component.gpu
    event=require("event")
    term=require("term")
    unicode=require("unicode")
    computer=require("computer")
    keys=require("keyboard").keys
    --НАСТРОЙКИ
    background=0x000000
    foreground=0x00ff00
    --ФУНКЦИИ
    function getUserXP_local(login)
    	ta=radar.getPlayerByName(LOGIN).all().player.experience
    	return ta.level, ta.levelProgress, ta.nextLevelXp
    end
    function c(command)
    	cb.setCommand(command)
    	cb.executeCommand()
    end
    --[[
    17*Level --(at levels 0-15)
    1.5*Level^2 - 29.5*Level + 360 --(at levels 16-30)
    3.5*Level^2 - 151.5*Level + 2220 --(at level 31+)]]--
    function xpInLevelF(level)
    	if level>=31 then
    		return 3.5*level^2-151.5*level+2220
    	elseif level>=16 and level<=30 then
    		return 1.5*level^2 - 29.5*level + 360
    	elseif level<=15 then 
    		return 17*level
    	end
    end
    function xpInLevel(level)
    	if level==1 then return 17
    	end
    	xpbig=xpInLevelF(level)
    	xpmin=xpInLevelF(level-1)
    	return xpbig-xpmin
    end
    function xpInUser(login)
    	return xpInLevelF(getUserXP_local(login))
    end
    function otjatLevel(login, level)
    	levelInUser=getUserXP_local(login)
    	if levelInUser-level<0 then
    		return false, "Не хватает опыта!"
    	end
    	maxXpInUser=xpInUser(login)
    	minXpInUser=xpInLevelF(levelInUser-level)
    	selected=maxXpInUser-minXpInUser
    	c("xp -"..selected.." "..login)
    	return selected
    end
    function otjatExperience(login, exp)
    	inUser=xpInUser(login)
    	if inUser-exp<0 then
    		return false, "Не хватает опыта!"
    	end
    	c("xp -"..exp.." "..login)
    	return exp
    end
    function giveExperience(login, exp)
    	c("xp "..exp.." "..login)
    end
    function giveLevel(login, exp)
    	level=getUserXP_local(login)
    	otjatExperience(login, xpInUser(login))
    	giveExperience(login, xpInLevelF(level)+xpInLevelF(exp))
    end
    function setCenterText(y, text)
    	len=unicode.len(text)
    	x=(80/2)-(len/2)
    	gpu.set(x, y, text)
    end
    function removeUsers()
    	users={computer.users()}
    	for i=1, #users do
    		computer.removeUser(users[i])
    	end
    end
    function getUserXP_db(login)
    	xp=nil
    	file=io.open(login)
    	if file then
    	xp=file:read("*all")
    	file:close()
    	end
    	if xp=="" then xp=0
    	elseif xp==nil then xp=0
    	end
    	return xp
    end
    function clear22()
    	tst=""
    	for i=1, 80 do
    		tst=tst.." "
    	end
    	gpu.setBackground(0x000000)
    	setCenterText(22, tst)
    end
    function initEnetring()
    	if selectedTab==1 then
    		setCenterText(22, "Весь ваш опыт снят и добавлен в банк!")
    		for i=1, 3 do
    			otjatiyLevel=otjatExperience(LOGIN, xpInLevelF(getUserXP_local(LOGIN)))
    			inDB=getUserXP_db(LOGIN)
    			writeTo(LOGIN, otjatiyLevel+inDB)
    		end
    	elseif selectedTab==2 then
    		setCenterText(22, "Весь ваш опыт из банка переведён вам!")
    		levelCIB=tonumber(getUserXP_db(LOGIN))
    		giveExperience(LOGIN, levelCIB)
    		writeTo(LOGIN, 0)
    	elseif selectedTab==3 then
    		gpu.setBackground(0x000000)
    		gpu.setForeground(0xffffff)
    		setCenterText(22, "Снятие части уровней БАНК==>ИГРОК! Ввод в единицах опыта. ")
    		inputForGive=tonumber(read(23))
    		setCenterText(23, "                                                 ")
    		xpInDB=tonumber(getUserXP_db(LOGIN))
    		if inputForGive>xpInDB then
    			setCenterText(24, "Недостаточно опыта в банке!")
    			os.sleep(2)
    			setCenterText(24, "                                                ")
    			return false
    		end
    		giveExperience(LOGIN, inputForGive)
    		nowInDB=xpInDB-inputForGive
    		writeTo(LOGIN, tostring(nowInDB))
    	elseif selectedTab==4 then 
    		gpu.setBackground(0x000000)
    		gpu.setForeground(0xffffff)
    		setCenterText(22, "Снятие части уровней ИГРОК==>БАНК! Ввод в уровнях. ")
    		inputForGive=tonumber(read(23))
    		setCenterText(23, "                                                       ")
    		xpInDB=tonumber(getUserXP_db(_G.LOGIN))
    		levelInUserNow=getUserXP_local(_G.LOGIN)
    		if levelInUserNow<inputForGive then
    			setCenterText(24, "Недостаточно уровней!")
    			os.sleep(2)
    			setCenterText(24, "                                           ")
    			return false
    		else 
    			inputForGive=levelInUserNow-inputForGive
    		end
    		xpInUserNow=xpInLevelF(levelInUserNow)
    		xpToBank=xpInLevelF(levelInUserNow-inputForGive)
    		otjatExperience(LOGIN, xpToBank)
    		writeTo(LOGIN, xpInDB+xpToBank)
    	end
    	event.timer(5, clear22)
    	drawINFO()
    end
    function reload(_, _, x, y)
    	if x==80 and y==1 then 
    		drawGUI()
    	end
    end
    event.listen("touch", reload)
    function printCurrentlySelected()
    	msg="Выбрано: "..tostring(tofrom)
    	ts=""
    	for i=1, unicode.len(msg) do
    		ts=ts.." "
    	end
    	gpu.set(1, 1, ts)
    	gpu.set(1, 1, msg)
    	for i=2, tofrom+1 do
    		gpu.set(i, 13, "█")
    	end
    end
    function pcst()
    	gpu.setBackground(0xff0000)
    	if selectedTab==1 then 
    		setCenterText(14, "Добавить все уровни в банк")
    	elseif selectedTab==2 then 
    		setCenterText(15, "Снять весь опыт с банка")
    	elseif selectedTab==3 then 
    		setCenterText(16, "Снять часть опыта с банка")
    	elseif selectedTab==4 then
    		setCenterText(17, "Добавить часть уровней в банк")
    	end
    	gpu.setForeground(0x000000)
    end
    function pcst2(selectedTab)
    	gpu.setBackground(0x00ff00)
    	if selectedTab==1 then 
    		setCenterText(14, "Добавить все уровни в банк")
    	elseif selectedTab==2 then 
    		setCenterText(15, "Снять весь опыт с банка")
    	elseif selectedTab==3 then 
    		setCenterText(16, "Снять часть опыта с банка")
    	elseif selectedTab==4 then
    		setCenterText(17, "Добавить часть уровней в банк")
    	end
    	gpu.setForeground(0x000000)
    end
    function writeTo(login, xp)
    	file=io.open(login, "w")
    	file:write(xp)
    	file:close()
    end
    function clearINFO()
    	for y=10, 12 do
    		for x=1, 80 do
    			gpu.set(x, y, " ")
    		end
    	end
    end
    function printTabes()
    	noExit=true
    	for i=1, 4 do
    		pcst2(i)
    	end
    	tofrom=1
    	selectedTab=1
    	gpu.set(1, 13, "|")
    	gpu.set(80, 13, "|")
    	setCenterText(16, "Снять часть опыта с банка")
    	setCenterText(15, "Снять весь опыт с банка")
    	setCenterText(17, "Добавить часть уровней в банк")
    	printCurrentlySelected()
    	gpu.setBackground(0xff0000)
    	setCenterText(14, "Добавить все уровни в банк")
    	gpu.setForeground(0x000000)
    	while noExit do
    		pcst()
    		printCurrentlySelected()
    		_, _, _, key = event.pull("key_down")
    		key=keys[key]
    		if key=="up" and selectedTab~=1 then
    			pcst2(selectedTab)
    			selectedTab=selectedTab-1
    		elseif key=="down" and selectedTab~=4 then
    		  pcst2(selectedTab)
    			selectedTab=selectedTab+1
    		elseif key=="enter" then
    			initEnetring()
    		elseif key=="f5" then 
    			reDrawGUI()
    		end
    	end
    end
    function drawINFO()
    	gpu.setBackground(0x000000)
    	gpu.setForeground(0x00ff00)
    	clearINFO()
    	setCenterText(10, "Игрок "..LOGIN.." залогинился.")
    	setCenterText(11, 'Уровень "на руках": '..getUserXP_local(LOGIN))
    	setCenterText(12, "Опыт в Банке: "..tostring(getUserXP_db(LOGIN)))
    	gpu.setForeground(0x000000)
    end
    function reDrawGUI()
    	gpu.setBackground(background)
    	gpu.setForeground(foreground)
    	gpu.setResolution(80, 25)
    	gpu.fill(1, 1, 80, 25, " ")
    	gpu.set(80, 1, "x")
    	setCenterText(1, "Банк Опыта")
    	setCenterText(2, line1)
    	setCenterText(3, line2)
    	setCenterText(4, line3)
    	setCenterText(5, line4)
    	setCenterText(6, line5)
    	setCenterText(7, line6)
    	setCenterText(8, line7)
    	setCenterText(9, line8)
    	setCenterText(10, "Игрок "..login.." залогинился.")
    	setCenterText(11, 'Уровень "на руках": '..getUserXP_local(login))
    	setCenterText(12, "Уровень в Банке: "..tostring(getUserXP_db(login)))
    	printTabes()
    end
    function read(y)
    	repeat
    	term.setCursor(38, y)
    	setCenterText(y, "                                              ")
    	variableValue=io.read()
    	until tonumber(variableValue)
    	return variableValue
    end
    line1=[[_________ _______           _______           _ ]]
    line2=[[\__   __/(  ___  )|\     /|(  ____ \|\     /|( )]]
    line3=[[   ) (   | (   ) || )   ( || (    \/| )   ( || |]]
    line4=[[   | |   | |   | || |   | || |      | (___) || |]]
    line5=[[   | |   | |   | || |   | || |      |  ___  || |]]
    line6=[[   | |   | |   | || |   | || |      | (   ) |(_)]]
    line7=[[   | |   | (___) || (___) || (____/\| )   ( | _ ]]
    line8=[[   )_(   (_______)(_______)(_______/|/     \|(_)]]
    function drawGUI()
    	gpu.setBackground(background)
    	gpu.setForeground(foreground)
    	gpu.setResolution(80, 25)
    	gpu.fill(1, 1, 80, 25, " ")
    	gpu.set(80, 1, "x")
    	setCenterText(1, "Банк Опыта")
    	setCenterText(2, line1)
    	setCenterText(3, line2)
    	setCenterText(4, line3)
    	setCenterText(5, line4)
    	setCenterText(6, line5)
    	setCenterText(7, line6)
    	setCenterText(8, line7)
    	setCenterText(9, line8)
    	_, _, _, _, _, login = event.pull("touch")
    	_G.LOGIN=login
    	setCenterText(10, "Игрок "..login.." залогинился.")
    	setCenterText(11, 'Уровень "на руках": '..getUserXP_local(login))
    	setCenterText(12, "Уровень в Банке: "..tostring(getUserXP_db(login)))
    	levelNow=getUserXP_local(LOGIN)
    	c("xp -"..tostring(levelNow+1).."L "..LOGIN)
    	c("xp "..levelNow.."L "..LOGIN)
    	printTabes()
    end
    function getExperienceSphereCL(login)
    end
    
    

     

     

    Визуальные баги тоже фиксанул

     


  5. Только что потестировал. С опытом проблем нет,всё честно. Тут в другом дело, Алекс. Если у тебя не полный уровень, то сферы в тебе остаются. Он видит,сколько у тебя уровня, снимает его с тебя. Однако, если у тебя 80 лвл и половина 81 лвл, то если ты снимешь всё, у тебя половина 81 превратится в 15 уровней простых. И, когда ты снимаешь с банка он видит,что у тебя 15 уровней, и к ним прибавляет опыт. И ещё: Я заметил баг,что если уровень >120, его не всегда полностью снимает. Его просто не видит радар...


  6. Ты ее тестировал? :D  Часть опыта банк просто себе присваивает при снятии, а потом забирании Если снять какую-то часть своего опыта в банк, а потом весь забрать, то остаешься в попе. Банк конкретно не додает опыта. Ищи ошибку в логике.

     

    И сделано все как просили с точностью наИборот=)  Я ж тебе говорил, не связывайся с уровнями. Все должно быть в ед. Много багулек и артефактов графических (остатки букв, цвета) остается в диалогах тоже пока.

     

    'Сохранку' еще не смотрел, как ты ее сделал, но ее в любом случае мы подключим к SQL ячейку с опытом каждому игроку.

     

    Авторазлогин есть?

    Авторазлогина нет, а смысл? Ты же без игрока опыт не снимешь, не переведёшь. Но сделать это легко, по идее. Странно.Меня банк ни разу обманывал...С уровнями не связывался, в банке хранится всё в единицах опыта. Или ты хочешь с игрока тоже в единицах снимать?  По моему, не удобно будет. К примеру, хочешь снять 5 уровней, и считай себе:) Скинь артефакты, если не сложно. Я не видел(тестил мало, ~20 минут)


  7. Ладно. 
    Запись в файл: 201 строка
    Чтение: 84 строка


     

    --ПОДКЛЮЧЕНИЕ КОМПОНЕНТОВ
    component=require("component")
    radar=component.openperipheral_sensor
    cb=component.command_block
    gpu=component.gpu
    event=require("event")
    term=require("term")
    unicode=require("unicode")
    computer=require("computer")
    keys=require("keyboard").keys
    --НАСТРОЙКИ
    background=0x000000
    foreground=0x00ff00
    --ФУНКЦИИ
    function getUserXP_local(login)
    	ta=radar.getPlayerByName(LOGIN).all().player.experience
    	return ta.level, ta.levelProgress, ta.nextLevelXp
    end
    function c(command)
    	cb.setCommand(command)
    	cb.executeCommand()
    end
    --[[
    17*Level --(at levels 0-15)
    1.5*Level^2 - 29.5*Level + 360 --(at levels 16-30)
    3.5*Level^2 - 151.5*Level + 2220 --(at level 31+)]]--
    function xpInLevelF(level)
    	if level>=31 then
    		return 3.5*level^2-151.5*level+2220
    	elseif level>=16 and level<=30 then
    		return 1.5*level^2 - 29.5*level + 360
    	elseif level<=15 then 
    		return 17*level
    	end
    end
    function xpInLevel(level)
    	if level==1 then return 17
    	end
    	xpbig=xpInLevelF(level)
    	xpmin=xpInLevelF(level-1)
    	return xpbig-xpmin
    end
    function xpInUser(login)
    	return xpInLevelF(getUserXP_local(login))
    end
    function otjatLevel(login, level)
    	levelInUser=getUserXP_local(login)
    	if levelInUser-level<0 then
    		return false, "Не хватает опыта!"
    	end
    	maxXpInUser=xpInUser(login)
    	minXpInUser=xpInLevelF(levelInUser-level)
    	selected=maxXpInUser-minXpInUser
    	c("xp -"..selected.." "..login)
    	return selected
    end
    function otjatExperience(login, exp)
    	inUser=xpInUser(login)
    	if inUser-exp<0 then
    		return false, "Не хватает опыта!"
    	end
    	c("xp -"..exp.." "..login)
    	return exp
    end
    function giveExperience(login, exp)
    	c("xp "..exp.." "..login)
    end
    function giveLevel(login, exp)
    	level=getUserXP_local(login)
    	otjatExperience(login, xpInUser(login))
    	giveExperience(login, xpInLevelF(level)+xpInLevelF(exp))
    end
    function setCenterText(y, text)
    	len=unicode.len(text)
    	x=(80/2)-(len/2)
    	gpu.set(x, y, text)
    end
    function removeUsers()
    	users={computer.users()}
    	for i=1, #users do
    		computer.removeUser(users[i])
    	end
    end
    function getUserXP_db(login)
    	xp=nil
    	file=io.open(login)
    	if file then
    	xp=file:read("*all")
    	file:close()
    	end
    	if xp=="" then xp=0
    	elseif xp==nil then xp=0
    	end
    	return xp
    end
    function clear22()
    	tst=""
    	for i=1, 80 do
    		tst=tst.." "
    	end
    	gpu.setBackground(0x000000)
    	setCenterText(22, tst)
    end
    function initEnetring()
    	if selectedTab==1 then
    		setCenterText(22, "Весь ваш опыт снят и добавлен в банк!")
    		for i=1, 3 do
    			otjatiyLevel=otjatExperience(LOGIN, xpInLevelF(getUserXP_local(LOGIN)))
    			inDB=getUserXP_db(LOGIN)
    			writeTo(LOGIN, otjatiyLevel+inDB)
    		end
    	elseif selectedTab==2 then
    		setCenterText(22, "Весь ваш опыт из банка переведён вам!")
    		levelCIB=tonumber(getUserXP_db(LOGIN))
    		giveExperience(LOGIN, levelCIB)
    		writeTo(LOGIN, 0)
    	elseif selectedTab==3 then
    		gpu.setBackground(0x000000)
    		gpu.setForeground(0xffffff)
    		setCenterText(22, "Снятие части уровней БАНК==>ИГРОК! Ввод в единицах опыта. ")
    		inputForGive=tonumber(read(23))
    		setCenterText(23, "                          ")
    		xpInDB=tonumber(getUserXP_db(LOGIN))
    		if inputForGive>xpInDB then
    			setCenterText(24, "Недостаточно опыта в банке!")
    			os.sleep(2)
    			setCenterText(24, "                          ")
    			return false
    		end
    		giveExperience(LOGIN, inputForGive)
    		nowInDB=xpInDB-inputForGive
    		writeTo(LOGIN, tostring(nowInDB))
    	elseif selectedTab==4 then 
    		gpu.setBackground(0x000000)
    		gpu.setForeground(0xffffff)
    		setCenterText(22, "Снятие части уровней ИГРОК==>БАНК! Ввод в уровнях. ")
    		inputForGive=tonumber(read(23))
    		setCenterText(23, "                          ")
    		xpInDB=tonumber(getUserXP_db(_G.LOGIN))
    		levelInUserNow=getUserXP_local(_G.LOGIN)
    		if levelInUserNow<inputForGive then
    			setCenterText(24, "Недостаточно уровней!")
    			os.sleep(2)
    			setCenterText(24, "                          ")
    			return false
    		else 
    			inputForGive=levelInUserNow-inputForGive
    		end
    		otjatExperience(LOGIN, xpInLevelF(levelInUserNow))
    		inputForGive=xpInLevelF(inputForGive)
    		giveExperience(LOGIN, inputForGive)
    		writeTo(LOGIN, xpInDB+inputForGive)
    	end
    	event.timer(5, clear22)
    	drawINFO()
    end
    function reload(_, _, x, y)
    	if x==80 and y==1 then 
    		drawGUI()
    	end
    end
    event.listen("touch", reload)
    function printCurrentlySelected()
    	msg="Выбрано: "..tostring(tofrom)
    	ts=""
    	for i=1, unicode.len(msg) do
    		ts=ts.." "
    	end
    	gpu.set(1, 1, ts)
    	gpu.set(1, 1, msg)
    	for i=2, tofrom+1 do
    		gpu.set(i, 13, "█")
    	end
    end
    function pcst()
    	gpu.setBackground(0xff0000)
    	if selectedTab==1 then 
    		setCenterText(14, "Добавить все уровни в банк")
    	elseif selectedTab==2 then 
    		setCenterText(15, "Снять весь опыт с банка")
    	elseif selectedTab==3 then 
    		setCenterText(16, "Снять часть опыта с банка")
    	elseif selectedTab==4 then
    		setCenterText(17, "Добавить часть уровней в банк")
    	end
    	gpu.setForeground(0x000000)
    end
    function pcst2(selectedTab)
    	gpu.setBackground(0x00ff00)
    	if selectedTab==1 then 
    		setCenterText(14, "Добавить все уровни в банк")
    	elseif selectedTab==2 then 
    		setCenterText(15, "Снять весь опыт с банка")
    	elseif selectedTab==3 then 
    		setCenterText(16, "Снять часть опыта с банка")
    	elseif selectedTab==4 then
    		setCenterText(17, "Добавить часть уровней в банк")
    	end
    	gpu.setForeground(0x000000)
    end
    function writeTo(login, xp)
    	file=io.open(login, "w")
    	file:write(xp)
    	file:close()
    end
    function clearINFO()
    	for y=10, 12 do
    		for x=1, 80 do
    			gpu.set(x, y, " ")
    		end
    	end
    end
    function printTabes()
    	noExit=true
    	for i=1, 4 do
    		pcst2(i)
    	end
    	tofrom=1
    	selectedTab=1
    	gpu.set(1, 13, "|")
    	gpu.set(80, 13, "|")
    	setCenterText(16, "Снять часть опыта с банка")
    	setCenterText(15, "Снять весь опыт с банка")
    	setCenterText(17, "Добавить часть уровней в банк")
    	printCurrentlySelected()
    	gpu.setBackground(0xff0000)
    	setCenterText(14, "Добавить все уровни в банк")
    	gpu.setForeground(0x000000)
    	while noExit do
    		pcst()
    		printCurrentlySelected()
    		_, _, _, key = event.pull("key_down")
    		key=keys[key]
    		if key=="up" and selectedTab~=1 then
    			pcst2(selectedTab)
    			selectedTab=selectedTab-1
    		elseif key=="down" and selectedTab~=4 then
    		  pcst2(selectedTab)
    			selectedTab=selectedTab+1
    		elseif key=="enter" then
    			initEnetring()
    		elseif key=="f5" then 
    			reDrawGUI()
    		end
    	end
    end
    function drawINFO()
    	gpu.setBackground(0x000000)
    	gpu.setForeground(0x00ff00)
    	clearINFO()
    	setCenterText(10, "Игрок "..LOGIN.." залогинился.")
    	setCenterText(11, 'Уровень "на руках": '..getUserXP_local(LOGIN))
    	setCenterText(12, "Опыт в Банке: "..tostring(getUserXP_db(LOGIN)))
    	gpu.setForeground(0x000000)
    end
    function reDrawGUI()
    	gpu.setBackground(background)
    	gpu.setForeground(foreground)
    	gpu.setResolution(80, 25)
    	gpu.fill(1, 1, 80, 25, " ")
    	gpu.set(80, 1, "x")
    	setCenterText(1, "Банк Опыта")
    	setCenterText(2, line1)
    	setCenterText(3, line2)
    	setCenterText(4, line3)
    	setCenterText(5, line4)
    	setCenterText(6, line5)
    	setCenterText(7, line6)
    	setCenterText(8, line7)
    	setCenterText(9, line8)
    	setCenterText(10, "Игрок "..login.." залогинился.")
    	setCenterText(11, 'Уровень "на руках": '..getUserXP_local(login))
    	setCenterText(12, "Уровень в Банке: "..tostring(getUserXP_db(login)))
    	printTabes()
    end
    function read(y)
    	repeat
    	term.setCursor(38, y)
    	setCenterText(y, "                                              ")
    	variableValue=io.read()
    	until tonumber(variableValue)
    	return variableValue
    end
    line1=[[_________ _______           _______           _ ]]
    line2=[[\__   __/(  ___  )|\     /|(  ____ \|\     /|( )]]
    line3=[[   ) (   | (   ) || )   ( || (    \/| )   ( || |]]
    line4=[[   | |   | |   | || |   | || |      | (___) || |]]
    line5=[[   | |   | |   | || |   | || |      |  ___  || |]]
    line6=[[   | |   | |   | || |   | || |      | (   ) |(_)]]
    line7=[[   | |   | (___) || (___) || (____/\| )   ( | _ ]]
    line8=[[   )_(   (_______)(_______)(_______/|/     \|(_)]]
    function drawGUI()
    	gpu.setBackground(background)
    	gpu.setForeground(foreground)
    	gpu.setResolution(80, 25)
    	gpu.fill(1, 1, 80, 25, " ")
    	gpu.set(80, 1, "x")
    	setCenterText(1, "Банк Опыта")
    	setCenterText(2, line1)
    	setCenterText(3, line2)
    	setCenterText(4, line3)
    	setCenterText(5, line4)
    	setCenterText(6, line5)
    	setCenterText(7, line6)
    	setCenterText(8, line7)
    	setCenterText(9, line8)
    	_, _, _, _, _, login = event.pull("touch")
    	_G.LOGIN=login
    	setCenterText(10, "Игрок "..login.." залогинился.")
    	setCenterText(11, 'Уровень "на руках": '..getUserXP_local(login))
    	setCenterText(12, "Уровень в Банке: "..tostring(getUserXP_db(login)))
    	levelNow=getUserXP_local(LOGIN)
    	c("xp -"..tostring(levelNow+1).."L "..LOGIN)
    	c("xp "..levelNow.."L "..LOGIN)
    	printTabes()
    end
    function getExperienceSphereCL(login)
    end
    
    

     


    Вроде всё:)
     


    Для выхода - справа, сверху есть крестик 


  8. У меня нет акка на с9.   Просто сделай программку на луа. И мы ее запихаем на ИТ. И игроки смогут сливать опыт в банк. Вот и все.

    ОК. Только у меня ввод данных о снятии опыта и добавлении на io.read(). По моему, удобней будет сразу написать 356, чем тыкать на кнопочки:)


  9.  

     

    Понятно.

     

    Вот, держи набросок для твоей "банки" опыта:

     

    1. Создай любую базу для конкретного юзера со всеми правами.

    2. В ней создай таблицу. Не забудь указать авто-инкремент для поля id.

     

    a1rRrzb.png

     

    gPpw4QQ.png

     

     

    Вот скриптик:

    <?php
    	// Пример запроса на добавление экспы или получение ее текущего значения 
    	// http://localhost/expupd.php?&auth=f92b3037ee&nick=Alex&action=add&value=10
    	// http://localhost/expupd.php?&auth=f92b3037ee&nick=Bob&action=add&value=-570
    	// http://localhost/expupd.php?&auth=f92b3037ee&nick=Bob&action=get
    	
    
    	// Получаем переменные в GET запросе:
    	$username = htmlspecialchars($_GET['nick']);
    	$action = htmlspecialchars($_GET['action']);
    	$value = htmlspecialchars($_GET['value']);
    	$auth = htmlspecialchars($_GET['auth']);
    	
    	// Проверим пароль доступа к скрипту и и некоторые параметры запроса:
    	
    	$codeaccess = 'f92b3037ee';
    	if ($auth !=  $codeaccess)  die ("Wrong auth");
    	// В имени пользователя могут быть только цифры, буквы и знак нижнего подчеркивания
    	if (!preg_match("/^[a-zA-Z0-9_]+$/", $username)) die("Bad login");
    	if ($action != 'set' and $action != 'get' and $action != 'add') die("Wrong action");
    	
    	// Параметры подключения к базе:
    	$host = 'localhost';
    	$user = 'alexcc'; // имя пользователя базы
    	$pass = 'SFJHwhP6RrSaz'; //пароль к базе
    	$namebase = 'prog'; // имя базы
    	$table = 'test'; // имя таблицы
    	
    	// Подключение к базе
    	$connect = mysql_connect($host, $user, $pass) or die('error connect');
        mysql_select_db($namebase, $connect);
    	$sql = mysql_query("SELECT exp FROM $table WHERE nick = '$username'") or die (mysql_error());
    	$count = mysql_num_rows($sql);
    	
    	// Если такого пользователя нет еще в базе, создадим его, и присвоем значение опыта 0
    	if ($count == 0) 
    	{
    		mysql_query("INSERT INTO $table (`nick`, `exp`, `lastaccess`) VALUES ('$username', '0', NOW())") or die (mysql_error());
    	} 
    
    	// Вернем значение опыта
    	if($action == 'get')
    	{
    		$sql = mysql_query("SELECT exp FROM $table WHERE `nick`='$username'") or die (mysql_error());
    		$data = mysql_fetch_array($sql);
            echo $data['exp'];
    	}
    
    	// Добавим или отнимем (если значение отрицательное) опыт
    	if($action == 'add')
    	{
    		mysql_query("UPDATE $table SET exp = exp + '$value' WHERE `nick`='$username'") or die (mysql_error());
    		echo 'OK';
    	}
    	
    	// Чит фича (установка конкретного значения опыта)
    	if($action == 'set')
    	{
    		mysql_query("UPDATE $table SET exp ='$value' WHERE `nick`='$username'") or die (mysql_error());
    		echo 'OK';
    	}
    
    	// Закроем соединение с базой
    	mysql_close($connect);
    ?>
    
    

    Должно выйти так:

     

    9Nqwp68.png

     

     

    Функция для твоей проги "Баночка опыта":

    KEY = 'f92b3037ee'
    
    function get(url)
      local request, reason = inet.request(url)
      if not request then return '' end
      local text = ''
      while true do
        local data, reason = request.read()
        if not data then
          request.close()
          break
        elseif #data > 0 then
          text = text..data
        end
      end
      return text
    end
    
    function addBankExp(nick, amount)
      return get('http://mysite.ru/expupd.php?auth='..KEY..'&nick='..nick..'&action=add&value='..amount)
    end
    
    ...
    

    Без рабочей банки опыта тебя разбанить нет никакой возможности. :)

     

     

    Неее. 1 день знаю php, с sql даже пробовать не буду:) У меня сейчас всё на file_get_contents и на file_put_contents :) Вот моя "рабочая станция":D


  10. Нео! Ты лучше бы чем руки скелету из жопы рисовать полдня, дал лучше бы человеку код или помог как-то ему.

     

    П.С. Держи, Монстрик, свою кодировочную фиговину:

    function urlencode(str)
       if (str) then
          str = string.gsub (str, "\n", "\r\n")
          str = string.gsub (str, "([^%w ])",
             function (c) return string.format ("%%%02X", string.byte(c)) end)
          str = string.gsub (str, " ", "+")
       end
       return str    
    end
    

    http://www.url-encode-decode.com

    Спасибо!


  11. Эх, жалко мне тебя... Столько времени,наверное, тратишь на это...А ведь на сервере люди либо знают АЕ, либо просто им не интересуются. А если не знают, то легче будет видосик на ютубе включить, чем 30к символов и 204 строки прочитать(посчитал:D ). Лучше ОК учи, будет и интересно,и поощрение от администрации, и уважение от других игроков данного проекта.

×
×
  • Создать...