• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua Anti Advertisement

Naaano201

Member
Joined
Jun 5, 2011
Messages
241
Reaction score
8
Location
Barcelona
Is it possible to block Advertisements like: servegame.com, sytes.net, no-ip.info, etc in default channel with a lua script?

I was looking for it but only found a C++ code ...
 
Not unless you got a general onSay/onTalk function which is executed when something is said.
 
I don't know if you remember the swear guards in various servers. It had those guards which would put you in jail if you swore.
You can apply this idea to your request. Of course it would require LUA scripting but it shouldn't be too hard. So it really isn't BLOCKING the words, It's detecting them then taking action.
Code:
---------------config----------
local level = 10
local maglevel = 10  ----- change this to make the NPC to hit more or less 

local min_multiplier = 2.1  ----- Change that to make NPC got lower minimal dmg
local max_multiplier = 4.2  ----- Change that to make NPC got higher max dmg
--------- dmg formula is dmg = (level * 2 + maglevel * 3) * max/min_multiplier


local check_interval = 5  ----- change this to the time between checks for a creature (the less time the more it will probably lag :S)  
local radiusx = 7  ----- default 7 so he checks 7 squares left and right(the hole screen)  
local radiusy = 5  ----- default 5 so he checks 5 squares up and down(the hole screen)  


local Attack_message = "An Invader, ATTACK!!!"  ----- npc says that when he sees a monster
local town_name = "CITYNAME"  ----- the name of the town, npc says when you say "hi"  hi dont work sometimes 
local Attack_monsters = TRUE  ----- NPC atack monsters? TRUE-yes FALSE-no 
local Attack_swearers = TRUE  ----- NPC atack swearers? TRUE-yes FALSE-no 
local Attack_pkers = TRUE  -----NPC atack guys with white or red skull?? TRUE-yes FALSE-no 
local health_left = 10  ----- set to the amount of health the npc will leave a player with if they swear at him 
local swear_message = "dont swear!"  ----- change this to what NPC says when he attacke a swearer  
local swear_words = {"shit", "fuck", "dick", "cunt"}  ----- if "Attack_swearers" is TRUE then npc will attack anyone who says a word that you will write here.  
local hit_effect = CONST_ME_MORTAREA  ----- hit effect 
local shoot_effect = CONST_ANI_SUDDENDEATH  ----- magic effect of npc atack 
local damage_colour = TEXTCOLOR_RED  ----- dmg color 




 ------------------end of config------------------ 
 local check_clock = os.clock()  ----- leave this 
 local focus = 0  ----- leave this  
 
 function msgcontains(txt, str)  
  return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))  
 end  
 
function onCreatureSay(cid, type, msg)  
msg = string.lower(msg) 
health = getCreatureHealth(cid) - health_left 
if ((string.find(msg, '(%a*)hi(%a*)'))) and getDistanceToCreature(cid) < 4 then  
selfSay('Hello ' .. creatureGetName(cid) .. '! I am a defender of '..town_name..'.')  
doNpcSetCreatureFocus(cid)  
focus = 0 
end 
 
if msgcontains(msg, 'time') then
selfSay('The time is ' .. getWorldTime() .. '.')
end
 
if messageIsInArray(swear_words, msg) then 
if Attack_swearers == TRUE then 
selfSay('' .. swear_message ..' ')  
doCreatureAddHealth(cid,-health) 
doSendMagicEffect(getThingPos(cid),17)  
doSendAnimatedText(getThingPos(cid),health,180) 
doNpcSetCreatureFocus(cid)  
focus = 0  
end 
end 
end  

function getMonstersfromArea(pos, radiusx, radiusy, stack) 
local monsters = { }  
local starting = {x = (pos.x - radiusx), y = (pos.y - radiusy), z = pos.z, stackpos = stack}  
local ending = {x = (pos.x + radiusx), y = (pos.y + radiusy), z = pos.z, stackpos = stack}  
local checking = {x = starting.x, y = starting.y, z = starting.z, stackpos = starting.stackpos}  
repeat  
creature = getThingfromPos(checking)  
if creature.itemid > 0 then  
if isCreature(creature.uid) == TRUE then 
if isPlayer(creature.uid) == FALSE then
if Attack_monsters == TRUE then							
table.insert (monsters, creature.uid)  
check_clock = os.clock() 						
end
elseif isPlayer(creature.uid) == TRUE then  
if Attack_pkers == TRUE then 
if getPlayerSkullType(creature.uid) > 0 then 
table.insert (monsters, creature.uid)  
check_clock = os.clock()      
end 
end 
end  
end  
end  
if checking.x == pos.x-1 and checking.y == pos.y then  
checking.x = checking.x+2  
else   
checking.x = checking.x+1  
end  
if checking.x > ending.x then  
checking.x = starting.x  
checking.y = checking.y+1  
end  
until checking.y > ending.y  
return monsters  
end  
 
function onThink()  
if (Attack_monsters == TRUE and Attack_pkers == TRUE) or (Attack_monsters == TRUE and Attack_pkers == FALSE) or (Attack_monsters == FALSE and Attack_pkers == TRUE) then 
if (os.clock() - check_clock) > check_interval then      
monster_table = getMonstersfromArea(getCreaturePosition(getNpcCid(  )), radiusx, radiusy, 253)  
if #monster_table >= 1 then 
selfSay('' .. Attack_message ..' ')  
for i = 1, #monster_table do  
doNpcSetCreatureFocus(monster_table[i])  
local damage_min = (level * 2 + maglevel * 3) * min_multiplier  
local damage_max = (level * 2 + maglevel * 3) * max_multiplier  
local damage_formula = math.random(damage_min,damage_max)
doSendDistanceShoot(getCreaturePosition(getNpcCid(  )), getThingPos(monster_table[i]), shoot_effect)
doSendMagicEffect(getThingPos(monster_table[i]),hit_effect)  
					doSendAnimatedText(getThingPos(monster_table[i]),damage_formula,damage_colour)  
doCreatureAddHealth(monster_table[i],-damage_formula)  
check_clock = os.clock()  
focus = 0  
end  
elseif table.getn(monster_table) < 1 then  
focus = 0  
check_clock = os.clock()  
end    
end 
end 
focus = 0 
end

Here we have a script that (Credits to Kedor and Far Carder) I'm not sure if it works but this provides an easy alternative to your problem here.

So here we have:
Code:
local swear_message = "dont swear!"
local swear_words = {"shit", "fuck", "dick", "cunt"}

For your situation you would add
Code:
local swear_words = {"servegame.com", "sytes.net", "no-ip.info"}
You can add as many as you like.
What I'm not sure about this script is if it has to match the exact case or just has to contain those cases.
Here is where we run into a problem. The NPC attacks advertisers. If this is not what you want I suggest you learn a little LUA and begin coding your own NPC.
It really isn't hard. You may even optimize the one I posted to do whatever you'd like.

After you've finished your script make the XML file and place the NPC's all around your town.

Code:
<npc name="Anti Advertiser" script="data/npc/scripts/antiadvertise.lua" autowalk="25" floorchange="0" access="3" level="1" maglevel="1">
  <mana now="800" max="800"/>
  <health now="200" max="200"/>
  <look type="131" head="116" body="94" legs="78" feet="115" addons="3"/>
 </npc>

Now I know making an NPC is a bit tedious, plus the words are still visible I believe, but it does solve your problem in a way.
I believe this is probably the easiest way, unless you do have a onSay or onTalk function you can probably even add those local swear_words into the script, problem is coding the detection and what action to take against the person.
 
Last edited:
Back
Top