• 01-04.05.2026 - DOUBLE EXP / SKILL EVENT!

Premium i promotions

Status
Zamknięty.

rafcio_100

Advanced User
Zarejestrowany
Dołączył
Grudzień 30, 2008
Posty
218
Liczba reakcji
8
Witam, mam pewien problem ze skryptem na premium i promotion. Chodzi o to, ?e gdy gracz chce kupi? pacc'a, NPC bierze mu kas?, ale ten i tak pacc'a nie dostaje ( O co mo?e chodzi???
 
Odp: Premium i promotions

Szuka?em i nic :( dlaczego trzeba mi nowy skrypt
 
Odp: Premium i promotions

masz click wej? ten silnik i skopiuj z tacktions komend? !buypreomotion i skrypta do tego i wtedy za pomoc? komedy bedziesz mia? pacc :)
Powodzenia :D
 
Ostatnia edycja:
Odp: Premium i promotions

#Sassin
Ty poda?e? jak kupi? promocje.
A jemu chodzi o pacc :), a ?eby kupi? promocje trzeba mie? pacc.
Podaj tutaj skrypt NPCK'a, kt?ry powinien sella? premium account oraz podaj wersj? silnika ; ).
 
Odp: Premium i promotions

NPC Johnny
Kod:
<?xml version="1.0"?>

<npc name="Johnny" script="data/npc/scripts/promote.lua" access="3" lookdir="2">
	<mana now="800" max="800"/>
	<health now="200" max="200"/>
<look type="133" head="114" body="119" legs="132" feet="114"/>
</npc>

Promote.lua
Kod:
local focus = 0
local talk_start = 0
local target = 0
local days = 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)
  	msg = string.lower(msg)

  	if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
 		selfSay('Hello ' .. creatureGetName(cid) .. '! I sell premiums and promotions.')
 		focus = cid
 		talk_start = os.clock()

	elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
  		selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')

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

		if msgcontains(msg, 'promotion') or msgcontains(msg, 'promote') then
 			if getPlayerVocation(cid) > 4 then
 				selfSay('Sorry, you are already promoted.')
 				talk_state = 0
 			elseif getPlayerLevel(cid) < 20 then
				selfSay('Sorry, you need level 20 to buy promotion.')
				talk_state = 0
			elseif not isPremium(cid) then
				selfSay('Sorry, you must be premium to buy promotion.')
				talk_state = 0
			else
				selfSay('Do you want to buy promotion for 20k?')
				talk_state = 1
			end

		elseif msgcontains(msg, 'premium') or msgcontains(msg, 'premmy') then
			selfSay('Do you want to buy 7 days of premium for 7k?')
			talk_state = 2

		elseif talk_state == 1 then
			if msgcontains(msg, 'yes') then
				if pay(cid,20000) then
					doPlayerSetVocation(cid, getPlayerVocation(cid)+4)
					selfSay('You are now promoted!')
				else
					selfSay('Sorry, you do not have enough money.')
				end
 			end
			talk_state = 0

		elseif talk_state == 2 then
			if msgcontains(msg, 'yes') then
				if pay(cid,7000) then
					selfSay('/premium '.. creatureGetName(cid) ..', 7')
					selfSay('You have 7 days of premium more!')
				else
					selfSay('Sorry, you do not have enough money.')
				end
			end
			talk_state = 0

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


function onCreatureChangeOutfit(creature)

end


function onThink()
	doNpcSetCreatureFocus(focus)
  	if (os.clock() - talk_start) > 30 then
  		if focus > 0 then
  			selfSay('Next Please...')
  		end
  			focus = 0
  	end
 	if focus ~= 0 then
 		if getDistanceToCreature(focus) > 5 then
 			selfSay('Good bye then.')
 			focus = 0
 		end
 	end
end
 
Odp: Premium i promotions

Pacc daje pewnie tylko musisz relogna? tzn. wpisa? jeszcze raz passy.
My?le, ?e pomog?em.
Pozdro
TerMoYe
 
Odp: Premium i promotions

Nie, mylisz si?, nawet w ten spos?b nie ma dalej pacc'a
 
Odp: Premium i promotions

To masz skrypty to wklejasz do npc Jonhy
Kod:
<?xml version="1.0"?>
<npc name="Johnny" script="data/npc/scripts/promote.lua" access="3" lookdir="2" autowalk="25">
	<mana now="800" max="800"/>
	<health now="200" max="200"/>
<look type="229" head="114" body="119" legs="132" feet="114"/>
</npc>
a p??niej robisz w scripts plik o nazwie promote.lua i wklejasz ten kod
Kod:
local focus = 0
local talk_start = 0
local target = 0
local days = 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)
  	msg = string.lower(msg)
  	if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
 		selfSay('Hello ' .. creatureGetName(cid) .. '! I sell premiums and promotions.')
 		focus = cid
 		talk_start = os.clock()
	elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
  		selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')
  	elseif focus == cid then
		talk_start = os.clock()
		if msgcontains(msg, 'promotion') or msgcontains(msg, 'promote') then
 			if getPlayerVocation(cid) > 4 then
 				selfSay('Sorry, you are already promoted.')
 				talk_state = 0
 			elseif getPlayerLevel(cid) < 20 then
				selfSay('Sorry, you need level 20 to buy promotion.')
				talk_state = 0
			elseif not isPremium(cid) then
				selfSay('Sorry, you must be premium to buy promotion.')
				talk_state = 0
			else
				selfSay('Do you want to buy promotion for 20k?')
				talk_state = 1
			end
		elseif msgcontains(msg, 'premium') or msgcontains(msg, 'premmy') then
			selfSay('Do you want to buy 7 days of premium for 7k?')
			talk_state = 2
		elseif talk_state == 1 then
			if msgcontains(msg, 'yes') then
				if pay(cid,20000) then
					doPlayerSetVocation(cid, getPlayerVocation(cid)+4)
					selfSay('You are now promoted!')
				else
					selfSay('Sorry, you do not have enough money.')
				end
 			end
			talk_state = 0
		elseif talk_state == 2 then
			if msgcontains(msg, 'yes') then
				if pay(cid,7000) then
					selfSay('/premium '.. creatureGetName(cid) ..', 7')
					selfSay('You have 7 days of premium more!')
				else
					selfSay('Sorry, you do not have enough money.')
				end
			end
			talk_state = 0
  		elseif msgcontains(msg, 'bye')  and getDistanceToCreature(cid) < 4 then
  			selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
  			focus = 0
  			talk_start = 0
  		end
  	end
end
function onCreatureChangeOutfit(creature)
end
function onThink()
	doNpcSetCreatureFocus(focus)
  	if (os.clock() - talk_start) > 30 then
  		if focus > 0 then
  			selfSay('Next Please...')
  		end
  			focus = 0
  	end
 	if focus ~= 0 then
 		if getDistanceToCreature(focus) > 5 then
 			selfSay('Good bye then.')
 			focus = 0
 		end
 	end
end
 
Odp: Premium i promotions

Termoye wiem ze to nie do teamtu ale jak zrobiles to god terrorysta :D:confused:
 
Odp: Premium i promotions

Nadal lipa, teraz wog?le mi tego skryptu nie czyta?o :/ Mo?e inne skrypty jeszcze macie?
 
Odp: Premium i promotions

Mo?e spr?buj ten :

<?xml version="1.0"?>

<npc name="Boneflow" script="data/npc/scripts/promote.lua" access="3" lookdir="2" autowalk="0">
<mana now="800" max="800"/>
<health now="200" max="200"/>
<look type="133" head="77" body="0" legs="0" feet="77" addons="1"/>
</npc>

local focus = 0
local talk_start = 0
local target = 0
local days = 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)
msg = string.lower(msg)

if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
selfSay('Hello ' .. creatureGetName(cid) .. '! I sell premiums and promotions.')
focus = cid
talk_start = os.clock()

elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')

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

if msgcontains(msg, 'promotion') or msgcontains(msg, 'promote') then
if getPlayerVocation(cid) > 4 then
selfSay('Sorry, you are already promoted.')
talk_state = 0
elseif getPlayerLevel(cid) < 20 then
selfSay('Sorry, you need level 20 to buy promotion.')
talk_state = 0
elseif not isPremium(cid) then
selfSay('Sorry, you must be premium to buy promotion.')
talk_state = 0
else
selfSay('Do you want to buy promotion for 20k?')
talk_state = 1
end

elseif msgcontains(msg, 'premium') or msgcontains(msg, 'premmy') then
selfSay('Do you want to buy 7 days of premium for 2k?')
talk_state = 2

elseif talk_state == 1 then
if msgcontains(msg, 'yes') then
if pay(cid,20000) then
doPlayerSetVocation(cid, getPlayerVocation(cid)+4)
selfSay('You are now promoted!')
else
selfSay('Sorry, you do not have enough money.')
end
end
talk_state = 0

elseif talk_state == 2 then
if msgcontains(msg, 'yes') then
if pay(cid,2000) then
selfSay('/premium '.. creatureGetName(cid) ..', 7')
selfSay('You have 7 days of premium more!')
else
selfSay('Sorry, you do not have enough money.')
end
end
talk_state = 0

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


function onCreatureChangeOutfit(creature)

end


function onThink()
doNpcSetCreatureFocus(focus)
if (os.clock() - talk_start) > 30 then
if focus > 0 then
selfSay('Next Please...')
end
focus = 0
end
if focus ~= 0 then
if getDistanceToCreature(focus) > 5 then
selfSay('Good bye then.')
focus = 0
end
end
end
 
Odp: Premium i promotions

Nadal nie dzia?a :( i wiecie co jeszcze zauwa?y?em? ?e cho?by nie wiem jaka cena by?a ustawiona to NPC bierze zawsze 1cc i nie daje pacc'a
 
Odp: Premium i promotions

global.lua
Kod:
TRUE = 1
FALSE = 0
LUA_ERROR = -1
LUA_NO_ERROR = 0
NORTH = 0
EAST = 1
SOUTH = 2
WEST = 3
SOUTHWEST = 4
SOUTHEAST = 5
NORTHWEST = 6
NORTHEAST = 7
COMBAT_FORMULA_UNDEFINED = 0
COMBAT_FORMULA_LEVELMAGIC = 1
COMBAT_FORMULA_SKILL = 2
COMBAT_FORMULA_VALUE = 3
CONDITION_PARAM_OWNER = 1
CONDITION_PARAM_TICKS = 2
CONDITION_PARAM_OUTFIT = 3
CONDITION_PARAM_HEALTHGAIN = 4
CONDITION_PARAM_HEALTHTICKS = 5
CONDITION_PARAM_MANAGAIN = 6
CONDITION_PARAM_MANATICKS = 7
CONDITION_PARAM_DELAYED = 8
CONDITION_PARAM_SPEED = 9
CONDITION_PARAM_LIGHT_LEVEL = 10
CONDITION_PARAM_LIGHT_COLOR = 11
CONDITION_PARAM_SOULGAIN = 12
CONDITION_PARAM_SOULTICKS = 13
CONDITION_PARAM_MINVALUE = 14
CONDITION_PARAM_MAXVALUE = 15
CONDITION_PARAM_STARTVALUE = 16
CONDITION_PARAM_TICKINTERVAL = 17
CONDITION_PARAM_FORCEUPDATE = 18
CONDITION_PARAM_SKILL_MELEE = 19
CONDITION_PARAM_SKILL_FIST = 20
CONDITION_PARAM_SKILL_CLUB = 21
CONDITION_PARAM_SKILL_SWORD = 22
CONDITION_PARAM_SKILL_AXE = 23
CONDITION_PARAM_SKILL_DISTANCE = 24
CONDITION_PARAM_SKILL_SHIELD = 25
CONDITION_PARAM_SKILL_FISHING = 26
CONDITION_PARAM_STAT_MAXHITPOINTS = 27
CONDITION_PARAM_STAT_MAXMANAPOINTS = 28
CONDITION_PARAM_STAT_SOULPOINTS = 29
CONDITION_PARAM_STAT_MAGICPOINTS = 30
CONDITION_PARAM_STAT_MAXHITPOINTSPERCENT = 31
CONDITION_PARAM_STAT_MAXMANAPOINTSPERCENT = 32
CONDITION_PARAM_STAT_SOULPOINTSPERCENT = 33
CONDITION_PARAM_STAT_MAGICPOINTSPERCENT = 34
COMBAT_PARAM_TYPE = 1
COMBAT_PARAM_EFFECT = 2
COMBAT_PARAM_DISTANCEEFFECT = 3
COMBAT_PARAM_BLOCKSHIELD = 4
COMBAT_PARAM_BLOCKARMOR = 5
COMBAT_PARAM_TARGETCASTERORTOPMOST = 6
COMBAT_PARAM_CREATEITEM = 7
COMBAT_PARAM_AGGRESSIVE = 8
COMBAT_PARAM_DISPEL = 9
CALLBACK_PARAM_LEVELMAGICVALUE = 1
CALLBACK_PARAM_SKILLVALUE = 2
CALLBACK_PARAM_TARGETTILE = 3
CALLBACK_PARAM_TARGETCREATURE = 4
COMBAT_NONE = 0
COMBAT_PHYSICALDAMAGE = 1
COMBAT_ENERGYDAMAGE = 2
COMBAT_POISONDAMAGE = 4 
COMBAT_FIREDAMAGE = 8
COMBAT_UNDEFINEDDAMAGE = 16
COMBAT_LIFEDRAIN = 32
COMBAT_MANADRAIN = 64
COMBAT_HEALING = 128
COMBAT_DROWNDAMAGE = 256
COMBAT_ICEDAMAGE = 512
COMBAT_HOLYDAMAGE = 1024
COMBAT_DEATHDAMAGE = 2048
CONDITION_NONE = 0
CONDITION_POISON = 1
CONDITION_FIRE = 2
CONDITION_ENERGY = 4
CONDITION_LIFEDRAIN = 8
CONDITION_HASTE = 16
CONDITION_PARALYZE = 32
CONDITION_OUTFIT = 64
CONDITION_INVISIBLE = 128
CONDITION_LIGHT = 256
CONDITION_MANASHIELD = 512
CONDITION_INFIGHT = 1024
CONDITION_DRUNK = 2048
CONDITION_EXHAUSTED = 4096
CONDITION_FOOD = 8192
CONDITION_REGENERATION = 8192
CONDITION_SOUL = 16384
CONDITION_DROWN = 32768
CONDITION_MUTED = 65536
CONDITION_ATTRIBUTES = 131072
CONDITION_FREEZING = 262144
CONDITION_DAZZLED = 524288
CONDITION_CURSED = 1048576
PLAYERLOSS_EXPERIENCE = 0
PLAYERLOSS_MANA = 1
PLAYERLOSS_SKILL = 2
CONST_SLOT_HEAD = 1
CONST_SLOT_NECKLACE = 2
CONST_SLOT_BACKPACK = 3
CONST_SLOT_ARMOR = 4
CONST_SLOT_RIGHT = 5
CONST_SLOT_LEFT = 6
CONST_SLOT_LEGS = 7
CONST_SLOT_FEET = 8
CONST_SLOT_RING = 9
CONST_SLOT_AMMO = 10
CONST_ME_DRAWBLOOD = 0
CONST_ME_LOSEENERGY = 1
CONST_ME_POFF = 2
CONST_ME_BLOCKHIT = 3
CONST_ME_EXPLOSIONAREA = 4
CONST_ME_EXPLOSIONHIT = 5
CONST_ME_FIREAREA = 6
CONST_ME_YELLOW_RINGS = 7
CONST_ME_GREEN_RINGS = 8
CONST_ME_HITAREA = 9
CONST_ME_ENERGYAREA = 10
CONST_ME_ENERGYHIT = 11
CONST_ME_MAGIC_BLUE = 12
CONST_ME_MAGIC_RED = 13
CONST_ME_MAGIC_GREEN = 14
CONST_ME_HITBYFIRE = 15
CONST_ME_HITBYPOISON = 16
CONST_ME_MORTAREA = 17
CONST_ME_SOUND_BLUE = 18
CONST_ME_SOUND_RED = 19
CONST_ME_POISONAREA = 20
CONST_ME_SOUND_YELLOW = 21
CONST_ME_SOUND_PURPLE = 22
CONST_ME_SOUND_BLUE = 23
CONST_ME_SOUND_WHITE = 24
CONST_ME_BUBBLES = 25
CONST_ME_CRAPS = 26
CONST_ME_GIFT_WRAPS = 27
CONST_ME_FIREWORK_YELLOW = 28
CONST_ME_FIREWORK_RED = 29
CONST_ME_FIREWORK_BLUE = 30
CONST_ME_STUN = 31
CONST_ME_SLEEP = 32
CONST_ME_WATERCREATURE = 33
CONST_ME_GROUNDSHAKER = 34
CONST_ME_HEARTS = 35
CONST_ME_FIREATTACK = 36
CONST_ME_ENERGYAREA = 37
CONST_ME_SMALLCLOUDS = 38
CONST_ME_HOLYDAMAGE = 39
CONST_ME_BIGCLOUDS = 40
CONST_ME_ICEAREA = 41
CONST_ME_ICETORNADO = 42
CONST_ME_ICEATTACK = 43
CONST_ME_STONES = 44
CONST_ME_SMALLPLANTS = 45
CONST_ME_CARNIPHILA = 46
CONST_ME_PURPLEENERGY = 47
CONST_ME_YELLOWENERGY = 48
CONST_ME_HOLYAREA = 49
CONST_ME_BIGPLANTS = 50
CONST_ME_CAKE = 51
CONST_ME_GIANTICE = 52
CONST_ME_WATERSPLASH = 53
CONST_ME_PLANTATTACK = 54
CONST_ME_NONE = 255
CONST_ANI_SPEAR = 0
CONST_ANI_BOLT = 1
CONST_ANI_ARROW = 2
CONST_ANI_FIRE = 3
CONST_ANI_ENERGY = 4
CONST_ANI_POISONARROW = 5
CONST_ANI_BURSTARROW = 6
CONST_ANI_THROWINGSTAR = 7
CONST_ANI_THROWINGKNIFE = 8
CONST_ANI_SMALLSTONE = 9
CONST_ANI_SUDDENDEATH = 10
CONST_ANI_LARGEROCK = 11
CONST_ANI_SNOWBALL = 12
CONST_ANI_POWERBOLT = 13
CONST_ANI_POISON = 14
CONST_ANI_INFERNALBOLT = 15
CONST_ANI_HUNTINGSPEAR = 16
CONST_ANI_ENCHANTEDSPEAR = 17
CONST_ANI_ASSASSINSTAR = 18
CONST_ANI_GREENSTAR = 19
CONST_ANI_ROYALSPEAR = 20
CONST_ANI_SNIPERARROW = 21
CONST_ANI_ONYXARROW = 22
CONST_ANI_PIERCINGBOLT = 23
CONST_ANI_WHIRLWINDSWORD = 24
CONST_ANI_WHIRLWINDAXE = 25
CONST_ANI_WHIRLWINDCLUB = 26
CONST_ANI_ETHEREALSPEAR = 27
CONST_ANI_ICE = 28
CONST_ANI_EARTH = 29
CONST_ANI_HOLY = 30
CONST_ANI_DEATH = 31
CONST_ANI_FLASHARROW = 32
CONST_ANI_FLAMMINGARROW = 33
CONST_ANI_SHIVERARROW = 34
CONST_ANI_ENERGYBALL = 35
CONST_ANI_SMALLICE = 36
CONST_ANI_SMALLHOLY = 37
CONST_ANI_SMALLEARTH = 38
CONST_ANI_EARTHARROW = 39
CONST_ANI_EXPLOSION = 40
CONST_ANI_CAKE = 41
CONST_ANI_WEAPONTYPE = 254
CONST_ANI_NONE = 255
TALKTYPE_SAY  = 1
TALKTYPE_WHISPER = 2
TALKTYPE_YELL = 3
TALKTYPE_PRIVATE = 4
TALKTYPE_CHANNEL_Y = 5
TALKTYPE_BROADCAST = 9
TALKTYPE_CHANNEL_R1 = 10
TALKTYPE_PRIVATE_RED = 11
TALKTYPE_CHANNEL_O = 12
TALKTYPE_CHANNEL_R2 = 14
TALKTYPE_ORANGE_1 = 16
TALKTYPE_ORANGE_2 = 17
MESSAGE_STATUS_WARNING = 18
MESSAGE_EVENT_ADVANCE = 19
MESSAGE_EVENT_DEFAULT = 20
MESSAGE_STATUS_DEFAULT = 21
MESSAGE_INFO_DESCR = 22
MESSAGE_STATUS_SMALL = 23
MESSAGE_STATUS_CONSOLE_BLUE = 24
MESSAGE_STATUS_CONSOLE_RED  = 25
TEXTCOLOR_BLUE        = 5
TEXTCOLOR_LIGHTBLUE   = 35
TEXTCOLOR_LIGHTGREEN  = 30
TEXTCOLOR_PURPLE      = 83
TEXTCOLOR_LIGHTGREY   = 129
TEXTCOLOR_DARKRED     = 144
TEXTCOLOR_RED         = 180
TEXTCOLOR_ORANGE      = 198
TEXTCOLOR_YELLOW      = 210
TEXTCOLOR_WHITE_EXP   = 215
TEXTCOLOR_NONE        = 255
RETURNVALUE_NOERROR = 1
RETURNVALUE_NOTPOSSIBLE = 2
RETURNVALUE_NOTENOUGHROOM = 3
RETURNVALUE_PLAYERISPZLOCKED = 4
RETURNVALUE_PLAYERISNOTINVITED = 5
RETURNVALUE_CANNOTTHROW = 6
RETURNVALUE_THEREISNOWAY = 7
RETURNVALUE_DESTINATIONOUTOFREACH = 8
RETURNVALUE_CREATUREBLOCK = 9
RETURNVALUE_NOTMOVEABLE = 10
RETURNVALUE_DROPTWOHANDEDITEM = 11
RETURNVALUE_BOTHHANDSNEEDTOBEFREE = 12
RETURNVALUE_CANONLYUSEONEWEAPON = 13
RETURNVALUE_NEEDEXCHANGE = 14
RETURNVALUE_CANNOTBEDRESSED = 15
RETURNVALUE_PUTTHISOBJECTINYOURHAND = 16
RETURNVALUE_PUTTHISOBJECTINBOTHHANDS = 17
RETURNVALUE_TOOFARAWAY = 18
RETURNVALUE_FIRSTGODOWNSTAIRS = 19
RETURNVALUE_FIRSTGOUPSTAIRS = 20
RETURNVALUE_CONTAINERNOTENOUGHROOM = 21
RETURNVALUE_NOTENOUGHCAPACITY = 22
RETURNVALUE_CANNOTPICKUP = 23
RETURNVALUE_THISISIMPOSSIBLE = 24
RETURNVALUE_DEPOTISFULL = 25
RETURNVALUE_CREATUREDOESNOTEXIST = 26
RETURNVALUE_CANNOTUSETHISOBJECT = 27
RETURNVALUE_PLAYERWITHTHISNAMEISNOTONLINE = 28
RETURNVALUE_NOTREQUIREDLEVELTOUSERUNE = 29
RETURNVALUE_YOUAREALREADYTRADING = 30
RETURNVALUE_THISPLAYERISALREADYTRADING = 31
RETURNVALUE_YOUMAYNOTLOGOUTDURINGAFIGHT = 32
RETURNVALUE_DIRECTPLAYERSHOOT = 33
RETURNVALUE_NOTENOUGHLEVEL = 34
RETURNVALUE_NOTENOUGHMAGICLEVEL = 35
RETURNVALUE_NOTENOUGHMANA = 36
RETURNVALUE_NOTENOUGHSOUL = 37
RETURNVALUE_YOUAREEXHAUSTED = 38
RETURNVALUE_PLAYERISNOTREACHABLE = 39
RETURNVALUE_CANONLYUSETHISRUNEONCREATURES = 40
RETURNVALUE_ACTIONNOTPERMITTEDINPROTECTIONZONE = 41
RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER = 42
RETURNVALUE_YOUMAYNOTATTACKAPERSONINPROTECTIONZONE = 43
RETURNVALUE_YOUMAYNOTATTACKAPERSONWHILEINPROTECTIONZONE = 44
RETURNVALUE_YOUMAYNOTATTACKTHISCREATURE = 45
RETURNVALUE_YOUCANONLYUSEITONCREATURES = 46
RETURNVALUE_CREATUREISNOTREACHABLE = 47
RETURNVALUE_TURNSECUREMODETOATTACKUNMARKEDPLAYERS = 48
RETURNVALUE_YOUNEEDPREMIUMACCOUNT = 49
RETURNVALUE_YOUNEEDTOLEARNTHISSPELL = 50
RETURNVALUE_YOURVOCATIONCANNOTUSETHISSPELL = 51
RETURNVALUE_YOUNEEDAWEAPONTOUSETHISSPELL = 52
ITEM_GOLD_COIN = 2148
ITEM_PLATINUM_COIN = 2152
ITEM_CRYSTAL_COIN = 2160
function doPlayerGiveItem(cid, itemid, count, charges)
	local hasCharges = (isItemRune(itemid) == TRUE or isItemFluidContainer(itemid) == TRUE)
	if(hasCharges and charges == nil) then
		charges = 1
	end
	while count > 0 do
    	local tempcount = 1
    	if(hasCharges) then
    		tempcount = charges
    	end
    	if(isItemStackable(itemid) == TRUE) then
    		tempcount = math.min (100, count)
   		end
       	local ret = doPlayerAddItem(cid, itemid, tempcount)
       	if(ret == LUA_ERROR) then
        	ret = doCreateItem(itemid, tempcount, getPlayerPosition(cid))
        end
        if(ret ~= LUA_ERROR) then
        	if(hasCharges) then
        		count = count-1
        	else
        		count = count-tempcount
        	end
        else
        	return LUA_ERROR
        end
	end
    return LUA_NO_ERROR
end
function doPlayerTakeItem(cid, itemid, count)
	if(getPlayerItemCount(cid,itemid) >= count) then
		while count > 0 do
			local tempcount = 0
    		if(isItemStackable(itemid) == TRUE) then
    			tempcount = math.min (100, count)
    		else
    			tempcount = 1
    		end
        	local ret = doPlayerRemoveItem(cid, itemid, tempcount)
            if(ret ~= LUA_ERROR) then
            	count = count-tempcount
            else
            	return LUA_ERROR
            end
		end
		if(count == 0) then
			return LUA_NO_ERROR
		end
	else
		return LUA_ERROR
	end
end
function doPlayerAddMoney(cid, amount)
	local crystals = math.floor(amount/10000)
	amount = amount - crystals*10000
	local platinum = math.floor(amount/100)
	amount = amount - platinum*100
	local gold = amount
	local ret = 0
	if(crystals > 0) then
		ret = doPlayerGiveItem(cid, ITEM_CRYSTAL_COIN, crystals)
		if(ret ~= LUA_NO_ERROR) then
			return LUA_ERROR
		end
	end
	if(platinum > 0) then
		ret = doPlayerGiveItem(cid, ITEM_PLATINUM_COIN, platinum)
		if(ret ~= LUA_NO_ERROR) then
			return LUA_ERROR
		end
	end
	if(gold > 0) then
		ret = doPlayerGiveItem(cid, ITEM_GOLD_COIN, gold)
		if(ret ~= LUA_NO_ERROR) then
			return LUA_ERROR
		end
	end
	return LUA_NO_ERROR
end
function doPlayerBuyItem(cid, itemid, count, cost, charges)
    if(doPlayerRemoveMoney(cid, cost) == TRUE) then
    	return doPlayerGiveItem(cid, itemid, count, charges)
    else
        return LUA_ERROR
    end
end
function doPlayerSellItem(cid, itemid, count, cost)
	if(doPlayerTakeItem(cid, itemid, count) == LUA_NO_ERROR) then
		if(doPlayerAddMoney(cid, cost) ~= LUA_NO_ERROR) then
			error('Could not add money to ' .. getPlayerName(cid) .. '(' .. cost .. 'gp)')
		end
		return LUA_NO_ERROR
	else
		return LUA_ERROR
	end
end
DIRECTION_NORTH = 0
DIRECTION_EAST = 1
DIRECTION_SOUTH = 2
DIRECTION_WEST = 3
DIRECTION_SOUTHWEST = 4
DIRECTION_SOUTHEAST = 5
DIRECTION_NORTHWEST = 6
DIRECTION_NORTHEAST = 7
DOORSTATE_OPEN = 1
DOORSTATE_CLOSED = 2
DoorHandler = {
	doors = {
		north = {
			{ 1212, 1214 },
			{ 1213, 1214 },
			{ 1221, 1222 },
			{ 1225, 1226 },
			{ 1229, 1230 },
			{ 1234, 1236 },
			{ 1235, 1236 },
			{ 1239, 1240 },
			{ 1243, 1244 },
			{ 1247, 1248 },
			{ 1252, 1254 },
			{ 1253, 1254 },
			{ 1257, 1258 },
			{ 1261, 1262 },
			{ 3535, 3537 },
			{ 3536, 3537 },
			{ 3538, 3539 },
			{ 3540, 3541 },
			{ 3542, 3543 },
			{ 5084, 5085 },
			{ 5098, 5100 },
			{ 5099, 5100 },
			{ 5101, 5102 },
			{ 5103, 5104 },
			{ 5116, 5118 },
			{ 5117, 5118 },
			{ 5119, 5120 },
			{ 5121, 5122 },
			{ 5123, 5124 },
			{ 5134, 5136 },
			{ 5135, 5136 },
			{ 5137, 5139 },
			{ 5138, 5139 },
			{ 5278, 5280 },
			{ 5279, 5280 },
			{ 5286, 5287 },
			{ 5290, 5291 },
			{ 5294, 5295 },
			{ 5517, 5518 },
			{ 5748, 5749 },
			{ 6253, 6254 }
		},
		west = {
			{ 1209, 1211 },
			{ 1210, 1211 },
			{ 1219, 1220 },
			{ 1223, 1224 },
			{ 1227, 1228 },
			{ 1231, 1233 },
			{ 1232, 1233 },
			{ 1237, 1238 },
			{ 1241, 1242 },
			{ 1245, 1246 },
			{ 1249, 1251 },
			{ 1250, 1251 },
			{ 1255, 1256 },
			{ 1259, 1260 },
			{ 3544, 3546 },
			{ 3545, 3546 },
			{ 3547, 3548 },
			{ 3549, 3550 },
			{ 3551, 3552 },
			{ 5082, 5083 },
			{ 5107, 5109 },
			{ 5108, 5109 },
			{ 5110, 5111 },
			{ 5112, 5113 },
			{ 5114, 5115 },
			{ 5125, 5127 },
			{ 5126, 5127 },
			{ 5128, 5129 },
			{ 5130, 5131 },
			{ 5132, 5133 },
			{ 5140, 5142 },
			{ 5141, 5142 },
			{ 5143, 5145 },
			{ 5144, 5145 },
			{ 5281, 5283 },
			{ 5282, 5283 },
			{ 5284, 5285 },
			{ 5288, 5289 },
			{ 5292, 5293 },
			{ 5515, 5516 },
			{ 5748, 5749 },
			{ 6250, 6251 },
			{ 6255, 6256 },
			{ 6263, 6264 }
		}
	}
}
 
Odp: Premium i promotions

[GRACZ][/GRACZ]global.lua cz.2
Kod:
function DoorHandler:new(o)
	o = o or {}   -- create object if user does not provide one
	setmetatable(o, self)
	self.__index = self
	return o
end
function DoorHandler:searchArray(arr, itemid)
	local ret = nil
	local i = 1
	while true do
		if(arr[i] == nil) then
			break
		end
		local tmp = arr[i]
		if(tmp[1] == itemid or tmp[2] == itemid) then
			ret = tmp
			break
		end
		i = i+1
	end
	return ret
end
function DoorHandler:getDoor(item)
	local retDoor = {
		dir = 0,
		id = itemid,
		toid = 0,
		state = 0,
		minlvl = 0,
		keyid = 0
	}
	local ret = self:searchArray(self.doors.north, item.itemid)
	if(ret == nil) then
		ret = self:searchArray(self.doors.west, item.itemid)
		if(ret ~= nil) then
			retDoor.dir = DIRECTION_WEST
		end
	else
		retDoor.dir = DIRECTION_NORTH
	end
	if(ret == nil) then
		return nil
	end
	if(ret[1] == item.itemid) then
		retDoor.state = DOORSTATE_CLOSED
		retDoor.toid = ret[2]
	else
		retDoor.state = DOORSTATE_OPEN
		retDoor.toid = ret[1]
	end
	if(item.actionid >= 1000 and item.actionid < 2000) then
		retDoor.minlvl = item.actionid-1000
	elseif(item.actionid > 0) then
		retDoor.keyid = item.actionid
	end
	return retDoor
end
function DoorHandler:getCreatureFromPos(pos)
	local ret = 0
	local tmp = { x=pos.x, y=pos.y, z=pos.z, stackpos=253}
	local creature = getThingfromPos(tmp)
	if(creature ~= nil and creature ~= 0 and creature.itemid > 0) then
		ret = creature.uid
	end
	return ret
end
function DoorHandler:movePlayerTo(cid, toPos)
	local p = getPlayerPosition(cid)
	local dist = math.max(math.abs(p.x-toPos.x), math.abs(p.y-toPos.y))
	if(dist > 1 or p.z ~= toPos.z) then
		local ret = doTeleportThing(cid, toPos)
		return (ret == LUA_NO_ERROR)
	end
	if(dist <= 0) then
		return true
	end
	local dir = -1
	if(p.y < toPos.y) then --SouthXXX
		if(p.x < toPos.x) then -- SouthEast
			dir = DIRECTION_SOUTHEAST
		elseif(p.x > toPos.x) then -- SouthWest
			dir = DIRECTION_SOUTHWEST
		else --South
			dir = DIRECTION_SOUTH
		end
	elseif(p.y > toPos.y) then --NorthXXX
		if(p.x < toPos.x) then -- NorthEast
			dir = DIRECTION_NORTHEAST
		elseif(p.x > toPos.x) then -- NorthWest
			dir = DIRECTION_NORTHWEST
		else --North
			dir = DIRECTION_NORTH
		end
	else -- West/East
		if(p.x < toPos.x) then -- East
			dir = DIRECTION_EAST
		elseif(p.x > toPos.x) then -- West
			dir = DIRECTION_WEST
		else --None
			dir = -1
		end
	end
	if(dir == -1) then
		return false
	end
	local ret = doMoveCreature(cid, dir)
	return (ret == RETURNVALUE_NOERROR)
end
function DoorHandler:moveCreatures(thisDoor, doorpos)
	local lastcid = 0
	local cid = self:getCreatureFromPos(doorpos)
	while (cid ~= 0 and cid ~= lastcid) do
		lastcid = cid
		if(thisDoor.dir == DIRECTION_NORTH) then
			local ret = doMoveCreature(cid, DIRECTION_SOUTH)
			if(ret ~= RETURNVALUE_NOERROR) then
				ret = doMoveCreature(cid, DIRECTION_NORTH)
				if(ret ~= RETURNVALUE_NOERROR) then
					local destPos = { x = doorpos.x, y = doorpos.y+1, z = doorpos.z }
					ret = doTeleportThing(cid, destPos)
					if(ret ~= LUA_NO_ERROR) then
						destPos = { x = doorpos.x, y = doorpos.y-1, z = doorpos.z }
						doTeleportThing(cid, destPos)
					end
				end
			end
		elseif(thisDoor.dir == DIRECTION_WEST) then
			local ret = doMoveCreature(cid, DIRECTION_EAST)
			if(ret ~= RETURNVALUE_NOERROR) then
				ret = doMoveCreature(cid, DIRECTION_WEST)
				if(ret ~= RETURNVALUE_NOERROR) then
					local destPos = { x = doorpos.x+1, y = doorpos.y, z = doorpos.z }
					ret = doTeleportThing(cid, destPos)
					if(ret ~= LUA_NO_ERROR) then
						destPos = { x = doorpos.x-1, y = doorpos.y, z = doorpos.z }
						doTeleportThing(cid, destPos)
					end
				end
			end
		end
		cid = self:getCreatureFromPos(doorpos)
	end
end
function DoorHandler:useDoor(item, pos, userid, key, playerGenerated)
	local thisDoor = self:getDoor(item)
	if(thisDoor == nil) then
		return 0
	end
	if(key ~= nil and key.actionid ~= thisDoor.keyid) then
		doPlayerSendTextMessage(userid,22,"The key does not match.")
		return 1
	end
	if(thisDoor.keyid > 0 and key == nil) then
		doPlayerSendTextMessage(userid,22,"The door is locked.")
		return 1
	end
	if(thisDoor.state == DOORSTATE_OPEN and thisDoor.minlvl == 0) then
		self:moveCreatures(thisDoor, pos)
		doTransformItem(item.uid, thisDoor.toid)
	elseif(thisDoor.state == DOORSTATE_CLOSED) then
		if(thisDoor.minlvl > 0) then
			local lvl = getPlayerLevel(userid)
			if(lvl < thisDoor.minlvl) then
				doPlayerSendTextMessage(userid,22,"You need level " .. thisDoor.minlvl .. " to pass this door.")
				return 1
			else
				doTransformItem(item.uid, thisDoor.toid)
				self:movePlayerTo(userid, pos)
			end
		else
			doTransformItem(item.uid, thisDoor.toid)
		end
	elseif(thisDoor.state == DOORSTATE_OPEN and thisDoor.minlvl > 0 and not playerGenerated) then
		doTransformItem(item.uid, thisDoor.toid)
	end
	return 1
end
if(doorHandler == nil) then
	doorHandler = DoorHandler:new(nil)
end
function isPlayerOnPos(pos)
	local pos2 = pos
	pos2.stackpos = 253
	local thing = getThingfromPos(pos2)
	if(thing ~= nil and thing.itemid > 0) then
		if(isPlayer(thing.uid)) then
			return true
		end
	end
	return false
end
function comparePos(pos1, pos2)
	return (pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z)
end
 
Odp: Premium i promotions

yy mo?e masz skopiowana inna promocje gdzie? i nie czyta tej co trzeba tez tak mia?em ;p

Poszukaj i napisz :confused:
 
Status
Zamknięty.
Back
Do góry