Nachz Posted March 9, 2015 Share Posted March 9, 2015 Hi all, I'm working on a lua script that would give xp to new player under 1000xp. So they would have all skills. But I can't make it done... I tried 2 ways and both didn't worked well. My lua is based on a other script between. So I have been using this code for when the player spawn: function et_ClientSpawn(clientNum, revived, teamChange, restoreHealth) local valXP = getXP(clientNum) if valXP < noexp then setexp(clientNum) end end The value of noexp is 1000. This is the first thing I tried (fonction setexp): function setexp(playerID) local name = et.gentity_get(playerID,"pers.netname") local silentguid = et.gentity_get(playerID,"sess.guid") if isBot(playerID) or noGuid(playerID) then return end et.trap_SendServerCommand(-1,"chat \"^nCongratulations ^7"..name.."^n, ^nyou have ^nbeen ^nEXP! \"") et.trap_SendConsoleCommand( et.EXEC_APPEND, "givexp "..silentguid.." SOLD 500 \n" ) et.trap_SendConsoleCommand( et.EXEC_APPEND, "givexp "..silentguid.." MED 500 \n" ) et.trap_SendConsoleCommand( et.EXEC_APPEND, "givexp "..silentguid.." ENG 500 \n" ) et.trap_SendConsoleCommand( et.EXEC_APPEND, "givexp "..silentguid.." FOPS 500 \n" ) et.trap_SendConsoleCommand( et.EXEC_APPEND, "givexp "..silentguid.." COV 500 \n" ) et.trap_SendConsoleCommand( et.EXEC_APPEND, "givexp "..silentguid.." LIGHT 500 \n" ) et.trap_SendConsoleCommand( et.EXEC_APPEND, "givexp "..silentguid.." BATTLE 500 \n" ) et.trap_SendConsoleCommand( et.EXEC_APPEND, "readconfig\n" ) end But I realized that the command givexp use the silent ID when I'm using the Silent GUID because I didn't find any function that allow to get the silent ID. Maybe something that would only take the 8 last characters of the silent GUID could give the Silent ID, but I don't know how. (So I didn't got xp, I only seen the message) so then I tried this using the G_AddSkillPoints... function setskill(playerID) local name = et.gentity_get(playerID,"pers.netname") if isBot(playerID) or noGuid(playerID) then return end et.G_AddSkillPoints("..playerID..", 0, 500) et.G_AddSkillPoints("..playerID..", 1, 500) et.G_AddSkillPoints("..playerID..", 2, 500) et.G_AddSkillPoints("..playerID..", 3, 500) et.G_AddSkillPoints("..playerID..", 4, 500) et.G_AddSkillPoints("..playerID..", 5, 500) et.G_AddSkillPoints("..playerID..", 6, 500) et.G_AddSkillPoints("..playerID..", 1, 500) et.trap_SendServerCommand(-1,"chat \"^nCongratulations ^7"..name.."^n, ^nyou have ^nbeen ^nEXP! Welcome to MC ! \"") et.trap_SendConsoleCommand( et.EXEC_APPEND, "readconfig\n" ) end I think there are something missing, because the lua can get load when I type "/lua_status" I can see it. Thanks for you help Nachz Zelly 1 Quote Link to comment Share on other sites More sharing options...
Zelly Posted March 9, 2015 Share Posted March 9, 2015 I am curious if all your trying to accomplish is to have players start with all skills then I think it would be easier to just set the skill levels to 0. http://mygamingtalk.com/wiki/Silent_Mod_Server_Cvar#skill_soldier You then wouldn't need to bother with lua, everyone that joined would automatically have the skill levels.In your server config: set skill_soldier "0 0 0 0" set skill_medic "0 0 0 0" set skill_engineer "0 0 0 0" set skill_fieldops "0 0 0 0" set skill_covertops "0 0 0 0" set skill_battlesense "0 0 0 0" set skill_lightweapons "0 0 0 0" However if you wanted to do this for some newer players that like receiving xp.You are trying to concatenate a string into where you are supposed to be supplying an integer(the client number)Try this: function setskill(playerID) local name = et.gentity_get(playerID,"pers.netname") if isBot(playerID) or noGuid(playerID) then return end et.G_AddSkillPoints(playerID, 0, 500) et.G_AddSkillPoints(playerID, 1, 500) et.G_AddSkillPoints(playerID, 2, 500) et.G_AddSkillPoints(playerID, 3, 500) et.G_AddSkillPoints(playerID, 4, 500) et.G_AddSkillPoints(playerID, 5, 500) et.G_AddSkillPoints(playerID, 6, 500) et.G_AddSkillPoints(playerID, 1, 500) et.trap_SendServerCommand(-1,"chat \"^nCongratulations ^7"..name.."^n, ^nyou have ^nbeen ^nEXP! Welcome to MC ! \"") -- et.trap_SendConsoleCommand( et.EXEC_APPEND, "readconfig\n" ) -- Pretty sure you don't need readconfig in this situation end Also you are sending your congratulations message to everyone that is connected. Not sure if this is intended or not, if not replace -1 with playerID Hope that helps, btw if you can check your console log around the time the map is getting loaded it will show if there are any errors when loading your lua. They are usually pretty useful when trying to pinpoint what is wrong. hellreturn and Nachz 2 Quote Link to comment Share on other sites More sharing options...
Management gaoesa Posted March 9, 2015 Management Share Posted March 9, 2015 Also, you can get the 8 character id from the sess.guid with substring string.sub(s, i [, j]) http://lua-users.org/wiki/StringLibraryTutorial. The last 8 characters of the sess.guid is the silent id for the command. Nachz 1 Quote Link to comment Share on other sites More sharing options...
Nachz Posted March 9, 2015 Author Share Posted March 9, 2015 (edited) Thanks for the fast answer, I will try it Edit: It worked, thanks you Also to you know how to force the client to downlaod a .pk3 files in the etmain folder. The sv_pure only force the client to download pk3 files in the silent folder. Thanks you again Edited March 9, 2015 by Nachz Zelly 1 Quote Link to comment Share on other sites More sharing options...
Zelly Posted March 9, 2015 Share Posted March 9, 2015 Not 100% sure. Related topic? http://mygamingtalk.com/forums/topic/3552-in-game-menu/ Quote Link to comment Share on other sites More sharing options...
twt_thunder Posted March 9, 2015 Share Posted March 9, 2015 Also to you know how to force the client to downlaod a .pk3 files in the etmain folder. The sv_pure only force the client to download pk3 files in the silent folder. you need an .ARENA file inside if ET should find a file in ETmain.Now, I would say dont do it, putting things in etmain screws up peoples ET..... Quote Link to comment Share on other sites More sharing options...
Nachz Posted March 10, 2015 Author Share Posted March 10, 2015 you need an .ARENA file inside if ET should find a file in ETmain.Now, I would say dont do it, putting things in etmain screws up peoples ET.....Well I only want player to download a pk3 file that contains a modified main.menu. So I take notepad+ and I save an empty file with a .ARENA extension and I add it to my .pk3 ? Quote Link to comment Share on other sites More sharing options...
twt_thunder Posted March 10, 2015 Share Posted March 10, 2015 not sure if it can be empty, try it.. but again, I would keep it in modfolder.... Quote Link to comment Share on other sites More sharing options...
Nachz Posted March 14, 2015 Author Share Posted March 14, 2015 (edited) Well the lua script can be exploited. I don't know why but during warmup the xp of all player are all under 1000xp so the script still give skill points, but it wont work so it's fine. But after the warmup, when a player die, he respawn and get again skill points plus the XP. Anybody knows how to fix that ? And why the current xp of the player isn't loaded well while warmup... Here is the getXP fonction: function getXP(playerID) return et.gentity_get(playerID, "ps.persistant", 0) end And I don't know if there is a function that only get execute after the warmup and that would do something like this one: function et_ClientSpawn(clientNum, revived, teamChange, restoreHealth) local valXP = getXP(clientNum) if valXP < noexp then setexp(clientNum) end endThanks in advance Edited March 14, 2015 by Nachz Quote Link to comment Share on other sites More sharing options...
Zelly Posted March 14, 2015 Share Posted March 14, 2015 Hmm... to fix warmup xp gain is pretty simple just check gamestate I always forget the correct number though.I think it is this:local gamestate = tonumber( et.trap_Cvar_Get('gamestate') ) if gamestate == 1 then -- do xp stuff here. end So are you saying it gives xp to players that have more than 1000 xp every spawn? or Just once.If it is just once then I assume it is related to a small bug, where xp from lua is 0 until at least one xp is gained: http://mygamingtalk.com/forums/topic/3346-lua-get-xp-value/I would have to do some more testing my self again to verify a good method to get xp in lua, I forget which method I normally use.Try this:(Disclaimer this is off the top of my head not sure if this is right) function getXP(clientNum) local xp = 0 for k=0, 6 do xp = xp + tonumber(et.gentity_get(clientNum,"sess.skillpoints",k)) end return xp end Hope that helps, I didn't do any fact checking. Nachz 1 Quote Link to comment Share on other sites More sharing options...
Nachz Posted March 14, 2015 Author Share Posted March 14, 2015 The new getXP fonction you gave me, works pretty well. And I added this to my setskills function: local gamestate = tonumber( et.trap_Cvar_Get('gamestate') ) if gamestate == 0 then et.G_AddSkillPoints(playerID, 0, 500) et.G_AddSkillPoints(playerID, 1, 500) et.G_AddSkillPoints(playerID, 2, 500) et.G_AddSkillPoints(playerID, 3, 500) et.G_AddSkillPoints(playerID, 4, 500) et.G_AddSkillPoints(playerID, 5, 500) et.G_AddSkillPoints(playerID, 6, 500) et.G_AddSkillPoints(playerID, 1, 500) And the good gamestate number was 0, because 1 is for warmup and 0 is for when the game is started. Thanks a lot, my problem is fixed ! Zelly 1 Quote Link to comment Share on other sites More sharing options...
Zelly Posted March 14, 2015 Share Posted March 14, 2015 Aha no matter how many times I do that I always get it wrong Quote Link to comment Share on other sites More sharing options...
Nachz Posted March 14, 2015 Author Share Posted March 14, 2015 Also I still have few questions but it's not related with lua but with cvars. Like I would like to know why each time people who download the next map will be spectator on the nextmap so they need to choose a new team again only because they downloaded the new map... And is there a way to solve the ui_x86_mp.dll server pure failed error for the player, because few players probably don't know that they need to start the game as administrator to solve this problem. So I don't know if there's a way to solve this problem throught the server. Thanks again for the help Quote Link to comment Share on other sites More sharing options...
Zelly Posted March 14, 2015 Share Posted March 14, 2015 set sv_wwwDlDisconnected 0I think. As for the second problem I don't think so. I recommend installing ET Outside program files then you don't have that problem. But again somehow you need to get that to your players. This problem comes up so often usually most players can figure it out with google. It is still best if you have a clan website to make it easy for people to find the solution. twt_thunder 1 Quote Link to comment Share on other sites More sharing options...
Nachz Posted March 15, 2015 Author Share Posted March 15, 2015 (edited) Thanks for the cvar, I really forgot this one. Also I'm working on something else and the lua module don't want to load so I guess there is a problem with one of these function: function et_Obituary(victim,killer,meansOfDeath) getkiller(victim,killer) end function getkiller(victimID,killerID) local hpkiller = et.gentity_get(killerID,"ps.stats",0) local name = et.gentity_get(killerID,"pers.netname") et.trap_SendServerCommand(victimID,"chat \"^7 "..name.." was at ^1"..hpkiller.." ^7HP when he killed you !\"") -- et.trap_SendConsoleCommand( et.EXEC_APPEND, "readconfig\n" ) -- Pretty sure you don't need readconfig in this situation end end Thanks ! Edit: Right after I posted the code I saw my error ^^ Fixed. Edited March 15, 2015 by Nachz Zelly 1 Quote Link to comment Share on other sites More sharing options...
Oxyzium Posted April 5, 2015 Share Posted April 5, 2015 (edited) function et_Obituary(victimnum, killernum, meansofdeath) local victimteam = tonumber(et.gentity_get(victimnum, "sess.sessionTeam")) local killerteam = tonumber(et.gentity_get(killernum, "sess.sessionTeam")) if victimteam ~= killerteam and killernum ~= 1022 then local killername = string.gsub(et.gentity_get(killernum, "pers.netname"), "%^$", "^^ ") local killerhp = et.gentity_get(killernum, "health") --et.trap_SendServerCommand(victimnum, string.format("cpm \"^7Your ^1killer ^7%s has %d HP remaining\n\"", killername, killerhp)) --this sends a message to the client only msg = string.format("cpm \"" .. killername .. "^7 had^o " .. killerhp .. " ^7HP left\n") et.trap_SendServerCommand(victimnum, msg) end end Edited April 5, 2015 by Oxyzium Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.