• 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!

Npc that can change vocation?

Sir MoX

New Member
Joined
Jan 14, 2009
Messages
285
Reaction score
1
hi, well i have a server with rook and a island of destiny made by me and I only need a npc that change the vocation.
please someone only make me a npc that change the vocation to knight, something like this:

im: hi
npc: hello (playername)!, here is the knight's house to enter you should become {knight}
im:knight
npc : (change vocation} congratulations! you have become a knight!
im: bye
npc: bye see you soon!


this is all I need then I could create the others of paladin, sorc and druid.

Ill hope someone could help me ^^
 
I forgot!!
if it is posible when it says:
npc : (change vocation} congratulations! you have become a knight!
could say:

npc : (change vocation} congratulations! you have become a knight! to know information of knight just say me {information}

and the npc says:

npc: the knights are a combat fighter and you can choose weapons of style like club, axe, fist or sword. You can also block 2 opponents at the same time!
 
It's possible, but i would suggest to do it through a webpage.

Why?:
When changing from voc hp/mana and skills with change.
Not that you have magic level 42 on a knight.
The website will calculate the amount of hp/mana you should have on that level with that voc and what for skills you should have
 
It's mine 8.42 oracle

Code:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="The Oracle" floorchange="0" walkinterval="0">
	<health now="150" max="150"/>
	<look typeex="1448"/>

  <interaction range="3" idletime="30">

    <interact keywords="hi" focus="1">
      <!--These are the keywords will trigger this interaction-->
      <keywords>hello</keywords>
      <keywords>greet</keywords>

      <response>
        <action name="script">
          <!--
          if(getPlayerVocation(cid) ~= 0) then
            selfSay("SORRY, YOU HAVE ALREADY MADE YOUR CHOICE IN LIFE!")
            _state.isidle = true
            return
          end
          -->

          if(getPlayerLevel(cid)) >= 8 then
            selfSay(getCreatureName(cid) .. ", ARE YOU PREPARED O FACE YOUR DESTINY?")
            _state.b1 = (isPremium(cid) == TRUE)
            _state.topic = 1
          else
            selfSay("CHILD! COME BACK WHEN YOU HAVE GROWN UP!")
            _state.isidle = true
          end
        </action>
      </response>

      </interact>

    <interact keywords="yes" topic="1">
      <!--Premium account, b1 is set in above-->
      <response b1="1" text="IN WHICH TOWN DO YOU WANT TO LIVE: CARLIN, EDRON, THAIS, OR VENORE?">
        <action name="topic" value="2"/>
      </response>

      <!--Normal account-->
      <response text="IN WHICH TOWN DO YOU WANT TO LIVE: CARLIN, THAIS, OR VENORE?">
        <action name="topic" value="2"/>
      </response>
    </interact>

    <interact keywords="carlin" topic="2">
      <response text="IN CARLIN! AND WHAT PROFESSION HAVE YOU CHOSEN: KNIGHT, PALADIN, SORCERER, OR DRUID?">
        <!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
        <action name="script">
          _state.n1 = 1
          _state.topic = 3
        </action>
      </response>
    </interact>

    <interact keywords="thais" topic="2">
      <response text="IN THAIS! AND WHAT PROFESSION HAVE YOU CHOSEN: KNIGHT, PALADIN, SORCERER, OR DRUID?">
        <!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
        <action name="script">
          _state.n1 = 2
          _state.topic = 3
        </action>
      </response>
    </interact>

    <interact keywords="venore" topic="2">
      <response text="IN VENORE! AND WHAT PROFESSION HAVE YOU CHOSEN: KNIGHT, PALADIN, SORCERER, OR DRUID?">
        <!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
        <action name="script">
          _state.n1 = 3
          _state.topic = 3
        </action>
      </response>
    </interact>

    <interact keywords="edron" topic="2">
      <response text="YOU NEED A PREMIUM ACCOUNT IN ORDER TO GO THERE!">
        <!--Set the topic back to 2, ie. choose a new town.-->
        <action name="topic" value="2"/>
      </response>
      <!--b1: premium account, see <interact keywords="hi" focus="1"> where _state.b1 is is set.-->
      <response b1="1" text="IN EDRON! AND WHAT PROFESSION HAVE YOU CHOSEN: KNIGHT, PALADIN, SORCERER, OR DRUID?">
        <!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
        <action name="script">
          _state.n1 = 3
          _state.topic = 3
        </action>
      </response>
    </interact>

    <!--If the player does not say any city, repeat our question-->
    <interact keywords="|*|" topic="2">
      <response b1="1" text="CARLIN, EDRON, THAIS, OR VENORE?"/>
      <response text="CARLIN, EDRON, THAIS, OR VENORE?"/>
    </interact>

    <interact keywords="sorcerer" topic="3">
      <response text="A SORCERER! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!">
        <!--n2: 1 = sorcerer, 2 = druid, 3 = paladin, 4 = knight-->
        <action name="script">
          _state.n2 = 1
          _state.topic = 4
        </action>
      </response>
    </interact>

    <interact keywords="druid" topic="3">
      <response text="A DRUID! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!">
        <!--n2: 1 = sorcerer, 2 = druid, 3 = paladin, 4 = knight-->
        <action name="script">
          _state.n2 = 2
          _state.topic = 4
        </action>
      </response>
    </interact>

    <interact keywords="paladin" topic="3">
      <response text="A PALADIN! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!">
        <!--n2: 1 = sorcerer, 2 = druid, 3 = paladin, 4 = knight-->
        <action name="script">
          _state.n2 = 3
          _state.topic = 4
        </action>
      </response>
    </interact>

    <interact keywords="knight" topic="3">
      <response text="A KNIGHT! ARE YOU SURE? THIS DECISION IS IRREVERSIBLE!">
        <!--n2: 1 = sorcerer, 2 = druid, 3 = paladin, 4 = knight-->
      <action name="script">
          _state.n2 = 4
          _state.topic = 4
        </action>
      </response>
    </interact>

    <!--If the player does not say any profession, repeat our question-->
    <interact keywords="|*|" topic="3">
      <response text="KNIGHT, PALADIN, SORCERER, OR DRUID?"/>
    </interact>

    <interact keywords="yes" topic="4">
      <response>
        <!--n1: 1 = carlin, 2 = edron, 3 = thais, 4 = venore-->
        <!--n2: 1 = knight, 2 = paladin, 3 = sorcerer, 4 = druid-->
        <action name="script">
          local pos = 0
          if(_state.n1 == 1) then
            pos = {x=180, y=233, z=7}
          elseif(_state.n1 == 2) then
            pos = {x=180, y=233, z=7}
          elseif(_state.n1 == 3) then
            pos = {x=180, y=233, z=7}
          elseif(_state.n1 == 4) then
            pos = {x=180, y=233, z=7}
          else
            selfSay("I DO NOT KNOW WHAT PROFESSION THAT IS, ASK THE GODS FOR GUIDANCE!")
            return
          end

          selfSay("SO BE IT!")
          doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)

          if(doTeleportThing(cid, pos) == 0) then
            doPlayerSetVocation(cid, _state.n2)
            doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
          end

        </action>
        <action name="idle" value="1"/>
      </response>
    </interact>

    <interact keywords="bye" focus="0">
      <keywords>farewell</keywords>
      <response text="Good bye. Recommend us, if you were satisfied with our service."/>
    </interact>

    <!--
    If the event onBusy exists, the npc will make a queue like Tibia, if the event is removed
    the npc will be able to talk to all customers at the same time without problems.
    -->

    <interact event="onBusy">
      <response text="WAIT UNTIL IT IS YOUR TURN!">
        <action name="addqueue" value="|PLAYER|"/>
      </response>
    </interact>

    <!--This event triggers if the player goes to far away from the npc/logout/idle timeout-->
    <interact event="onPlayerLeave" focus="0">
      <response text="COME BACK WHEN YOU ARE PREPARED TO FACE YOUR DESTINY!"/>
    </interact>

  </interaction>

</npc>

It's mine the oracle script :
Code:
focus = 0
talk_start = 0
target = 0
following = false
attacking = false
talk_state = 0
cname = ''
vocation = 0
mainlevel = 8
dx = 0
dy = 0
dz = 0

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
  	if focus == cid then
          selfSay('Good bye then.')
          focus = 0
          talk_start = 0
  	end
end


function onCreatureTurn(creature)

end


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)
  	cname = creatureGetName(cid)
	msg = string.lower(msg)

  	if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
  		selfSay('Hello ' .. cname .. '! Are you ready to face your destiny?')
  		talk_state = 0
  		focus = cid
  		talk_start = os.clock()
	elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
  		selfSay('Sorry, ' .. cname .. '! I talk to you in a minute.')

  	elseif msgcontains(msg, 'bye') and focus == cid and getDistanceToCreature(cid) < 4 then
 		selfSay('Good bye, ' .. cname .. '!')
 		talk_state = 0
 		focus = 0
 		talk_start = 0

  	elseif focus == cid then
		talk_start = os.clock()

  		if talk_state == 0 then
			if msgcontains(msg, 'yes') then		-- wanna go to mainland
  				level = getPlayerLevel(cname)

  				if level >= mainlevel then
 					selfSay('Great! Do you want to be a knight, a paladin, a sorcerer or a druid?')
 					talk_state = 1
  				else
  					selfSay('Sorry, you need level ' .. mainlevel .. ' to go to the mainland.')
 					talk_state = 0
  				end
 			else
 				selfSay('Come back when you are ready then.')
 				talk_state = 0
 			end

 		elseif talk_state == 1 then		-- telling vocation
 			talk_state = 2

 			if msgcontains(msg, 'sorcerer') then
 				selfSay('A mighty sorcerer! Are you sure?')
 				vocation = 1
 			elseif msgcontains(msg, 'druid') then
 				selfSay('A mysterious druid! Are you sure?')
 				vocation = 2
 			elseif msgcontains(msg, 'paladin') then
 				selfSay('A nimble paladin! Are you sure?')
 				vocation = 3
 			elseif msgcontains(msg, 'knight') then
 				selfSay('A valorous knight! Are you sure?')
 				vocation = 4
 			else
 				selfSay('Sorry, there is no such vocation.')
 				vocation = 0
 				talk_state = 1
 			end

 		elseif talk_state == 2 then		-- confirming vocation
 			if msgcontains(msg, 'yes') then
 				selfSay('Great! I can send you to Carlin, Thais, Abdendriel, Venore or Kazordoon. Where do you want to go?')
 				talk_state = 3
 			else
 				selfSay('What vocation do you want then?')
 				talk_state = 1
 			end

 		elseif talk_state == 3 then		-- telling city name
 			if msgcontains(msg, 'carlin') then
				dx=32360
				dy=31782
				dz=7
			elseif msgcontains(msg, 'thais') then
				dx=32369
				dy=32241
				dz=7
			elseif msgcontains(msg, 'venore') then
				dx=32957
				dy=32076
				dz=7
			elseif msgcontains(msg, 'kazordoon') then
				dx=32649
				dy=31925
				dz=11
			elseif msgcontains(msg, 'abdendriel') then
				dx=32732
				dy=31634
				dz=7
			else
 				selfSay('Sorry, there is no such city.')
 				talk_state = 3
				dx = 0
 			end

			if dx > 0 then
			
 				selfSay('Good luck, young adventurer!')
 				setPlayerVocation(cid,vocation)
 				setPlayerMasterPos(cid,dx,dy,dz)
 				selfSay('/send ' .. cname .. ', '..dx..' '..dy..' '..dz)

 				talk_state = 0
 				focus = 0
 				talk_start = 0
			end

  		end
  	end
end


function onCreatureChangeOutfit(creature)

end


function onThink()
if focus > 0 then
 selfLook(focus)
 if getDistanceToCreature(focus) > 5 then
  focus = 0
  selfSay('Good bye then.')
 end
end

if (os.clock() - talk_start) > 40 then
 if focus > 0 then
 selfSay('Next Please...')
end
focus = 0
end
end

/LordXavy
 

Similar threads

  • Question Question
Replies
2
Views
586
Back
Top